Передовица » Эмуляторы/утилиты » dos33c2 » Технические подробности

Технические подробности

Изначально утилита dos33 была написана около 1995 года на Turbo Pascal'e, затем понемногу мигрировала на Free Pascal (долгое время оставаясь совместимой и с Turbo Pascal'ём), однако она всегда была приложением MS-DOS. DOS33 Core2 - это существенно переработанная версия старой dos33.exe.

Основные задачи переработки:

  1. Строгое отделение кода ядра от кода интерфейса пользователя. Объём исходных текстов ядра превышает код пользовательского интерфейса, но только интерфейс пользователя отличается для различных операционных систем PC. Конечная цель: полная кроссплатформенность ядра. Здесь под этим понимается возможность сборки ядра под FreeBSD, MS-DOS, Linux, Windows.
  2. "Причёсывание" ключевых структур данных. По мере использования и расширения досовской версии пришло понимание того, что развивать и поддерживать старые исходные тексты уже не очень комфортно. Паскаль имеет хорошие средства для контроля исходного кода и хотелось их задействовать ещё эффективнее.

Большинство возможностей старой версии будет сохранено, кое что добавлено.

Компилятор остался прежним - Free Pascal. Сейчас ядро собирается версией 2.2.4, возможно, 1.0.10 тоже всё поймёт. Небольшая часть интерфейса для FreeBSD написана на C, для сборки используется GCC из базового комплекта ОС.

Объём исходных текстов (приблизительно): ядро: 150 Кб / 5000 строк; интерфейс пользователя: общий код: 90 Кб / 2700 строк; специфические части: FreeBSD: 30 Кб / 1100 строк, Windows: 12 Кб / 450 строк, DOS: 14 Кб / 450 строк. Архив версии 2.02 - 668 Кб.

MS-DOS: версия имеет текстовый интерфейс, расчитанный на привычный режим 80x25 символов. В отличие от dos33.exe, Core2 не будет использовать режим 512-и символов VGA, поэтому будет нормально выглядеть даже в Windows-окне. Для вывода картинок используется VESA-режим 1024x768x256. Эта версия важна для меня тем, что эмулятор тоже работает под DOS... А также всё это хорошо работает под win9X. Даже лучше виндовой версии.

FreeBSD: версия имеет текстовый интерфейс, построенный на основе библиотеки curses (хотя исходный код интерфейса без особых проблем может быть переведён на NIX-версию модуля CRT... но пока я предпочитаю curses), для вывода графики, по мере доступности, задействована X11 + imlib2 (т.е. прога при запуске пытается установить связь с X11-сервером и, в случае успеха, может отображать картинки). Поддерживается динамическое изменение размера окна терминала.

Я не хочу делать полностью графический интерфейс (например, на gtk), потому что часто нуждаюсь в возможности запуска своих программ по сети, через не очень толстый канал. Например, заходя с работы на домашнюю машину. Кроме того, это позволяет проще унифицировать исходный код интерфейса. Версия для FreeBSD является приоритетной, и все изменения вносятся и проверяются, в первую очередь, на ней. Скриншоты Core2 в окружении моего "рабочего стола" (fvwm2) (цвета оформления пока не подбирал):

Windows: текстовая консоль, на манер FAR'а (тот же модуль CRT, но только для Windows + ряд поправок для него). Под XP и сходными системами есть возможность произвольного задания не только шрифта, но и размера консоли - Core2 это учитывает. Для вывода картинок открывается отдельное графическое окно. Такой подход (вместо полностью графического приложения) диктуется, в основном, моим плохим знанием Windows. Если у вас есть время, знания и желание - я свободно поделюсь исходниками, можете дополнить их чтобы было красиво.

Причем есть четыре варианта: 1) Вы можете полностью написать модули интерфейса на Pascal'е. Мне бы это было проще всего. 2) Вы можете создать части интерфейса в своей любимой среде разработки, оформив их в виде dll. Я, со своей стороны, просто сделаю импорт ваших процедур. Например, заголовок процедуры текстового вьювера (через него выводятся почти все крупные текстовые структуры - от текстовых файлов до сообщениях о множественных ошибках): void TextViewer(char *buf, int size). 3) Вы можете набросать исходный текст модуля на каком нибудь языке (я могу читать C, Pascal, ... лишь бы работало и использовало только стандартные виндовые библиотеки), а я его попробую встроить в свой код. 4) Можете просто просмотреть исходники (хотя бы модуль вывода графики win32\uni_graph_view.pp и модуль консоли _HumanInterface\mywrite.pp) и, возможно, увидите там явные ошибки.

В виндовой версии есть и другие проблемы: под win9x мне не удалось добиться ввода с консоли русских букв, к тому же всё порядочно тормозит в полноэкранном режиме, окно графвьювера не поднимается в Z-буфере (это и в XP тоже), комбинация Ctrl-s обрабатывается консолью и не передаётся приложению... В общем-то, основная цель этой версии: работа под Windows Vista. Там полноэкранный режим видео для консоли прикрыли, так что досовская версия не будет чувствовать себя комфортно. А виндовая, быть может, выживет.

Скриншоты win-версии:

Linux: версия для FreeBSD не имеет каких либо особенностей, привязывающих её именно к BSD-шному семейству. Думаю, она же будет без особых проблем компилироваться и для Linux.

Скачать собранную Core 2 можно уже сейчас: 437 Кб (2.04, январь 2012 г). Здесь ДОС и Windows-версии EXEшников. Если серьёзно будете пользоваться ими - нелишним может стать и readme, а также история версий.

* * *

Использование материалов проекта agatcomp без получения предварительного письменного разрешения agatcomp запрещено.


Почта для обратной связи: mail@agatcomp.ru


Живое общение по теме Агата: Telegram группа Agatcomp.


Накопленные знания и проекты: тематический ФОРУМ.


© 2004-2024 agatcomp.su / agatcomp.ru

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *