Портирование Autodesk Animator Pro на кросс-платформу

предыдущий соответствующий вопрос от меня находится здесь Обратные разработки старых программ рисования

Я создал здесь свою базу операций: http://animatorpro.org wiki в ближайшее время.

Хорошо, теперь у меня есть базовая база данных MSDOS на 300 000 строк. Это своего рода "будьте осторожны, что вы хотите". Я не опытный программист С. Я тоже не совсем неопытен, но, во всех смыслах и задачах, я новичок в языке и, в частности, в тонкостях его библиотек. Я особенно не знаком с капризами различий между программами C, написанными специально для MSDOS, и программами, которые являются кросс-платформенными. Однако я изучаю эту базу кода уже более года, и это то, что я знаю об Animator Pro:

Используемые компиляторы и инструменты:

  • Компилятор Watcom C
  • tcmake (сделать программу из Turbo C)
  • 386asm, специализированный ассемблер для расширителя Phar Lap dos
  • и, конечно же, сам фанер Phar Lap dos.
  • выбор неясных dos utilities

Большая часть компиляции, по-видимому, управляется пакетными файлами. Хотя я получил копии всех этих инструментов, мне еще не удалось его компилировать. (хотя я скомпилировал его старшего брата, оригинал оригинала autodesk.

Появилась плагиновая система, которая реплицирует DLL до того, как DLL будет доступна на основе REX. Система плагинов:

  • Драйверы видео (с множеством включенных драйверов VESA)
  • Входные драйверы (включая планшеты wacom и клавиатуры)
  • Инструменты рисования
  • Чернила (например, фильтры фотошоп или режимы наложения)
  • Scripting Addons (по существу скомпилированные скрипты)
  • Форматы файлов

У этого есть собственный интерпретатор script с именем POCO, основанный на языке C. Язык сценариев обладает достаточной мощностью, чтобы делать практически все, что может сделать система плагинов. Еще медленнее.

Учитывая эту информацию, это мой план развития. Пожалуйста, критикуйте это. Исходный код доступен по ссылке выше, поэтому вы можете легко, если вы так склонны, сами оценить ситуацию.

  • Скомпилируйте свои оригинальные инструменты.
  • Переключитесь на использование DJGPP и внесите необходимые изменения, чтобы скомпилировать его, а также оригинальный ассемблер.
  • Включите библиотеку "Игра" Allegro.cc и переключите как можно больше функций в эту библиотеку. Возможно, просто создав новые видео и драйверы ввода, которые используют API Allegro. Я думаю, что аллегро, а не SDL, потому что: есть версия DOS от Allegro, и увлекательно одна из ее основных функций - это способность играть в формат FLIC Animator Pro.
  • Мы надеемся, что после 3-х годов я удалю большинство или всех ассемблеров в проекте. Я надеюсь, потому что это на неясном диалекте, который не собирается в любом современном свободном ассемблере без существенных изменений. Я попробовал их все. Все, что осталось, преобразуется для сборки в NASM или в код C, если я могу определить фактическую функцию ассемблера.
  • Переключите расширитель dos из Phar Lap в HX Dos http://www.japheth.de/HX.html, который promises реплицирует столько же WIN32 api, сколько возможное. Затем сделайте все необходимые изменения кода для этого.
  • Переключитесь на версию win32 версии Allegro.cc, предполагая, что версия win32 может работать поверх HXDos. Внесите необходимые изменения.
  • Измените систему плагинов, чтобы использовать какую-то стандартную библиотеку плагинов для кросс-платформенных платформ. Что бы это было, я понятия не имею. Может быть, вы можете предложить некоторые предложения? Я поговорил с разработчиком, который изначально написал систему плагинов, и он сказал, что некоторые из вещей, которые он делает, невозможно в современной ОС из-за ограничений сегментации. Я не уверен, что это значит, но я предполагаю, что это означает, что все плагины нужно будет переписать почти с нуля.
  • Магически, я сделал все вышеописанное, и мы можем попытаться запустить его в windows, osx и linux, в то же время имея дело с другими кросс-платформенными приключениями, такими как длинные имена файлов, и вещи, о которых я не думал.

У кого-то возникла проблема с этим? Является ли аллегро хорошим выбором? если нет, то почему? что бы вы сделали с этой плагиновой системой? Что бы вы сделали по-другому? Это все глупо, и я должен просто переписать его с нуля, используя оригинал как стремление? (для этого, по-видимому, потребуется первоначальный разработчик "Примерно через месяц" )

Одна вещь, которую я не рассмотрел выше, - это система текста/шрифта. Не уверен, что с этим делать, но Animator Pro имеет свой собственный формат шрифта, но также может использовать шрифты Postscript Type 1 и некоторые другие форматы.

Ответы

Ответ 1

Моя самая большая забота о вашем плане, в двух словах: ваш подход, похоже, заключается в попытке сохранить всю огромную работу, которая постоянно работает, настраивая окружающую среду, находящуюся еще дальше от DOS. Во время каждой настройки к окружающей среде это означает, что у вас будет примерно миллиард тонких предположений, которые могли бы сломаться сразу, но вы все еще не поняли. Распутать их все сразу будет невероятно болезненно.

Если бы я делал порт, мой подход заключался бы в том, чтобы отключить как можно больше кода, чтобы он мог работать в современной среде, и приводить части обратно в сеть, по одному за раз. Напишите простую программу тестирования, которая загружает драйвер дисплея и рисует какой-то материал, и скомпилируйте его для DOS, чтобы убедиться, что вы понимаете интерфейс. Затем напишите некоторый C-код, который реализует один и тот же интерфейс, но с Allegro (или SDL или SFML) и запустит эту программу под Windows или Linux. Когда выход отличается, у вас есть простой тестовый пример для работы.

Вся ваша работа на этом порту сводит на нет реализации различных интерфейсов и функций с совершенно новыми. Это работа, в которой тестируется единичное тестирование. Не пишите никакого нового кода без какого-либо теста, который выполняется на старом коде под DOS! Сделайте ваши потенциальные проблемы такими же малыми и простыми, насколько возможно. Код сборки порта вместо того, чтобы переписывать его только в том случае, если вы достаточно уверенны в том, что он действительно упростит вашу работу (то есть алгоритмический материал, который компилируется с небольшим количеством настроек под NASM). Не отрывайте большую часть, чем вы можете удобно вписаться в свой мозг сразу.

Я, например, с нетерпением жду вашего прогресса! Я думаю, что вы пытаетесь сделать, это здорово. Спасибо, что сделали это.

Ответ 2

Хммм - я мог бы подойти к нему, написав для него видеодрайвер OpenGL. и сегодняшние машины достаточно быстрены с тоннами бара, что вы могли бы использовать все специфичные для пикселя алгоритмы на основном процессоре в задний буфер, и это сработает. Поскольку "общий" драйвер VGA только сопоставил видео-буфер с указателем, это было бы местом для начала. В пользовательском интерфейсе был режим масштабирования, поэтому вы можете смотреть на пиксели на дисплее с высоким разрешением.

Ответ 3

Часто бывает сложно взять существующую нетривиальную базу кода, которая не была написана с учетом переносимости - вы упомянули несколько - и затем попытайтесь сделать ее переносной. На пути будет много проблем. Вероятно, лучше начать с нуля и переписать код, используя существующий код только для справки. Если вы начинаете с нуля, вы можете использовать существующий переносимый пользовательский интерфейс в своем новом проекте, таком как Qt.