C 跨平台移植Autodesk Animator Pro

C 跨平台移植Autodesk Animator Pro,c,paint,dos,allegro,C,Paint,Dos,Allegro,这里是我先前提出的一个相关问题 我在这里建立了我的业务基地: 维基很快就要来了 好的,现在我有一个30万行的MSDOS遗留代码库。这是一种“小心你想要什么”的情况。我不是一个有经验的C程序员。我也不是完全没有经验,但无论出于什么目的,我都是这门语言,尤其是它错综复杂的库的高手。我尤其不知道专门为MSDO编写的C程序和跨平台程序之间的差异。然而,我已经研究这个代码库一年多了,这就是我对Animator Pro的了解: 使用的编译器和工具: Watcom C编译器 tcmake(从Turbo C生

这里是我先前提出的一个相关问题

我在这里建立了我的业务基地: 维基很快就要来了

好的,现在我有一个30万行的MSDOS遗留代码库。这是一种“小心你想要什么”的情况。我不是一个有经验的C程序员。我也不是完全没有经验,但无论出于什么目的,我都是这门语言,尤其是它错综复杂的库的高手。我尤其不知道专门为MSDO编写的C程序和跨平台程序之间的差异。然而,我已经研究这个代码库一年多了,这就是我对Animator Pro的了解:

使用的编译器和工具:

  • Watcom C编译器
  • tcmake(从Turbo C生成程序)
  • 386asm,Phar Lap dos扩展器的专业组装商
  • 当然,Phar-Lap-dos扩展器本身也是如此
  • dos实用程序的选择
大部分编译似乎是由批处理文件驱动的。虽然我已经获得了所有这些工具的副本,但我还没有成功地编译它。(尽管我已经编译了它的哥哥autodesk animator original

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

  • 视频驱动程序(包括过多的VESA驱动程序)
  • 输入驱动程序(包括wacom平板电脑和键盘)
  • 绘图工具
  • 墨水(如photoshop的过滤器或混合模式)
  • 脚本加载项(基本上是编译脚本)
  • 文件格式
它有自己的脚本解释器,名为POCO,基于C语言——脚本语言有足够的能力完成插件系统几乎可以完成的所有事情——只是速度较慢

鉴于这些信息,这是我的发展计划。请批评这一点。上面的链接中提供了源代码,因此,如果您愿意,您可以轻松地自己评估情况

  • 使用其原始工具进行编译
  • 切换到使用DJGPP,并进行必要的更改,以使其与原始汇编程序一起编译
  • 包括Allegro.cc“游戏”库,并将尽可能多的功能切换到该库-也许只需编写使用Allegro API的新视频和输入驱动程序即可。我考虑的是Allegro而不是SDL,因为:Allegro有DOS版本,有趣的是,它的核心功能之一是能够播放Animator Pro的原生格式FLIC
  • 希望在3年后,我将消除项目中的大部分或所有汇编程序。我说希望,因为它是用一种晦涩的方言编写的,在没有重大修改的情况下,在任何现代自由汇编程序中都不会汇编。我已经全部试过了。剩下的都将转换为NASM汇编,或者转换为C代码(如果我可以定义汇编程序的名称的话)实际功能
  • 将dos扩展器从Phar-Lap切换到HX-dos,HX-dos承诺尽可能多地复制WIN32 api。然后进行所有必要的代码更改以使其工作
  • 切换到Allegro.cc的win32版本,假设win32版本可以在HXDos上运行。进行任何进一步的必要更改
  • 修改插件系统以使用某种标准的跨平台插件库。这将是什么,我不知道。也许你可以提供一些建议?我和最初编写插件系统的开发人员谈过,他说,由于分段限制,它在现代操作系统上做的一些事情是不可能的。我不确定这意味着什么,但我猜这意味着所有的插件几乎都需要从头重写
  • 神奇的是,我完成了上述所有工作,我们可以尝试让它在windows、osx和linux中运行,同时处理其他跨平台的琐事,如长文件名和我没有想到的事情
  • 有人对此有意见吗?allegro是一个不错的选择吗?如果没有,为什么?你会对这个插件系统做什么?你会做什么不同的事情?整个事情都很愚蠢吗?我应该从头开始重写它,使用原始的作为输入吗?(显然,原始开发人员需要“大约一个月”才能完成)


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

    通常很难使用现有的不考虑可移植性的代码库-您提到过一些-然后尝试使其可移植。途中会有很多问题。最好从零开始,仅使用现有代码作为参考重写代码。如果您从零开始,您可以在新项目(如Qt)中利用现有的可移植UI解决方案。

    我最关心的是您的计划,例如简言之:你的方法似乎是试图让整个庞大的事情始终保持工作状态,不断调整环境,使其远离DOS。在每次调整环境的过程中,这意味着你将有大约10亿个微妙的假设,这些假设可能一下子就被打破了,但你还不一定理解。Untang一次把它们全部弄掉会非常痛苦

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

    <