将Autodesk Animator Pro移植到跨平台

Bre*_*ton 13 c dos paint allegro

我以前的相关问题是逆向工程旧油漆程序

我在这里建立了我的运营基地:http://animatorpro.org wiki即将推出.

好的,现在我有300,000行传统的MSDOS代码库.这有点"小心你想要的"情况.我不是一位经验丰富的C程序员.我也不是完全缺乏经验,但出于所有意图和目的,我对语言是一个菜鸟,特别是它的图书馆的复杂性.我特别不了解专门为MSDOS编写的C程序与跨平台程序之间差异的变幻莫测.但是我已经研究了这个代码库超过一年了,这就是我对Animator Pro的了解:

使用的编译器和工具:

  • Watcom C编译器
  • tcmake(来自Turbo C的程序)
  • 386asm,Phar Lap dos扩展器的专用汇编程序
  • 当然还有Phar Lap dos扩展器本身.
  • 一系列晦涩的dos实用程序

大部分编译似乎都是由批处理文件驱动的.虽然我已经获得了所有这些工具的副本,但我还没有成功编译它.(虽然我编译了它的哥哥,autodesk animator original.

它有一个插件系统,可以在DLL可用之前复制DLL,基于REX.插件系统处理:

  • 视频驱动程序(包含大量VESA驱动程序)
  • 输入驱动程序(包括wacom数位板和键盘)
  • 绘图工具
  • 墨水(如photoshop的滤镜或混合模式)
  • 脚本插件(本质上是编译脚本)
  • 文件格式

它有自己的脚本解释器,名为POCO,基于C语言 - 脚本语言有足够的能力来完成插件系统可以做的几乎所有事情 - 只是更慢.

鉴于此信息,这是我的发展计划.请批评这个.源代码可在上面的链接中找到,因此如果您愿意,可以轻松地自己评估情况.

  1. 使用其原始工具进行编译.
  2. 切换到使用DJGPP,并进行必要的更改以使其与原始汇编程序一起编译.
  3. 包括Allegro.cc"游戏"库,并尽可能多地切换到该库的功能 - 也许只需编写使用Allegro API的新视频和输入驱动程序.我正在考虑快速而不是SDL,因为:有一个DOS版本的Allegro,而且令人着迷的是,其核心功能之一是能够播放Animator Pro的原生格式FLIC.
  4. 希望在3之后,我将淘汰项目中的大部分或全部汇编程序.我有希望地说,因为它是一种模糊的方言,没有任何现代的免费汇编程序,无需进行重大修改.我试过了所有这些.如果我可以定义汇编程序的实际函数,那么剩下的东西将转换为在NASM中汇编,或转换为C代码.
  5. 将dos扩展器从Phar Lap切换到HX Dos http://www.japheth.de/HX.html,它承诺尽可能多地复制WIN32 api.然后进行所有必要的代码更改以使其工作.
  6. 切换到Allegro.cc的win32版本,假设win32版本可以在HXDos之上运行.进行进一步必要的更改
  7. 修改插件系统以使用某种标准的跨平台插件库.这会是什么,我不知道.也许你可以提供一些建议?我与最初编写插件系统的开发人员进行了交谈,他说由于分段限制,它在现代操作系统上所做的一些事情是不可能的.我不确定这意味着什么,但我猜这意味着所有的插件都需要从头开始重写.
  8. 奇怪的是,我完成了以上所有工作,我们可以尝试在windows,osx和linux中运行它,同时处理其他跨平台的琐事,比如长文件名,以及我没有想到的东西.

任何人都有问题吗?allegro是个不错的选择吗?如果没有,为什么?你会对这个插件系统做些什么?你会做什么不同的?这整件事是愚蠢的吗?我应该从头开始重写它,使用原始的灵感吗?(显然需要原始开发人员"大约一个月"才能做到这一点)

我上面没有提到的一件事是文本/字体系统.不知道该怎么办,但Animator Pro有自己的自定义字体格式,但也可以使用Postscript Type 1字体和其他一些格式.

小智 6

简而言之,我对您的计划最为关注的是:您的方法似乎是尝试始终保持整个巨大的工作,从而远离DOS调整环境.在每次调整环境的过程中,这意味着您将有大约十亿个微妙的假设,这些假设可能会立即被破坏,但您无法理解这些假设.一下子解开他们将是非常痛苦的.

如果我在做端口,我的方法是尽可能多地禁用代码以使SOMETHING在现代环境中运行,并将部件重新联机,一次一个.编写一个简单的测试工具程序,加载显示驱动程序并绘制一些东西,并为DOS编译它以确保您理解界面.然后编写一些实现相同接口的C代码,但使用Allegro(或SDL或SFML),并使该程序在Windows或Linux下运行.当输出不同时,您可以使用简单的测试用例.

您在此端口上的所有工作都是使用全新的接口和功能来实现各种接口和功能的实现. 这是单元测试擅长的工作. 如果没有在DOS下的旧代码上运行的某种测试,请不要编写任何新代码!尽可能简化您的潜在问题.端口汇编代码,而不是重写它,只有当你有理由相信它实际上会使你的工作更容易(即,在NASM下几乎没有调整编译好的算法的东西).不要咬掉比你能够舒适地适应大脑的更大的一块.

我,一个人,期待看到你的进步!我想你要做的事情很棒.谢谢你这样做.


pet*_*erk 6

嗯 - 我可能会为它写一个OpenGL视频"驱动程序".今天的机器足够快,有大量的内存,你可以将主CPU上的所有像素特定算法放到后台缓冲区中,它可以工作.由于"通用"VGA驱动程序只是将视频缓冲区映射到指针,因此这将是一个开始的地方.UI中有缩放模式,因此您可以查看高分辨率显示屏上的像素.

  • 嗨彼得!哈哈,你是原作者吗? (4认同)

And*_*rsK 0

通常很难采用现有的不平凡的代码库,而这些代码库在编写时并没有考虑到可移植性(您提到了一些),然后尝试使其可移植。路上会遇到很多问题。从头开始并仅使用现有代码作为参考来重写代码可能是一个更好的主意。如果您从头开始,您可以在新项目(例如 Qt)中利用现有的便携式 UI 解决方案。