Подготовка doswin32 к работе
Последнюю версию пакета doswin32 можно скачать с официальной страницы проекта http://www.doswin32.com:8080/. Для некоммерческого использования он бесплатен. Минимум системных требований: 80486DX и 16 Мбайт оперативной памяти. Версия MS-DOS от 5.x и выше. Однако, вплоть до версии 7.х поддержка длинных имен отсутствует (doswin32 работает с диском не напрямую, а через файловую систему и "умнее" ее быть никак не может).
Скачиваем ядро исполнительной системы www.doswin32.com:8080/ftp/pub/dw32core.zip и распаковываем его. Видим файлы DOSWIN32.RTM (150 Кбайт) — DMPMI-расширитель, RUN32.EXE (571 Байт) — "пускалка", RD32.EXE (579 Байт) — загрузчик для отладчика Turbo Debugger, license.txt (6 Кбайт) — лицензионное соглашение, license-en.txt (6 Кбайт) — тоже самое, но только на английском языке и папку DW32APP.DAT c парой крохотных readme внутри из которых следует, что этот каталог представляет собой CSIDL_APPDATA. Первые два файла обязательны, остальные можно и потереть (особенно, если вы не используете Turbo Debugger). Скопируем их на системную дискету, которую можно подготовить средствами Windows 98 или обратиться к проекту FreeDOS.
Загружать драйвера HIMEM.SYS и EMM32.EXE совершенно необязательно — doswin32 справиться с памятью и самостоятельно. А вот без мыши, русификатора и smartdrive будет очень хреново, причем загрузить после запуска doswin32 никакие MS-DOS драйвера загрузить уже не удастся и об этом следует позаботиться заблаговременно. Крайне желательно установить правильную кодовую страницу (за это отвечает country.sys), поскольку без нее русские имена файлов будут отображаться некорректно.
Синтаксис командной строки предельно прост: run32 file_name arg1 arg2 argN, где file_name имя win32-файла, который надо запустить, а arg1–argN – ключи командной строки, которые будут переданы запускаемому приложению. Если никаких имен не указывать, doswin32 останется в памяти резидентно, позволяя запускать файлы обычным путем.
Мы можем работать как со старыми 8- и 16-разрядными MS-DOS приложениями реального и защищенного режима, так и с новыми 32-разрядными win32-приложениями (Есть сложности с dpmi16 приложениями. По "настояниям трудящихся" я там сделал возможность их применять, но тогда до запуска doswin32 нужно установить несколько env-var, описанных в документации — при. Юрия Харона). Выход из эмулятора по команде "exit".
Рисунок 3 попытка запуска FAR'а под doswin32, запущенным под VMWare приводит к выбросу исключения
К сожалению, под VM Ware и некоторыми другими эмуляторами при попытке запуска "тяжеловесных" программ наподобие FAR'а или PKZIP'а doswin32 вылетает с воплем об ошибке (см. рис 3). Под "борщом" (эмулятором BOCHS) PKZIP уже запускается, но… FAR по-прежнему продолжает не работать: обламывается с поиском языковых файлов и тихо кончает в черный экран. Так проявляют себя ошибки эмулятора, для исправления которых к статье прилагается специальный патч, подготовленный Юрием Хароном (не ищите его ни на официальном сайте борща, ни на сайте самого doswin32. Это 100% эксклюзив). Просто скопируйте файлы в директорию исходных текстов борща версии 2.1.1 (внимание! совместимость с остальными версиями не гарантирована!) и перекомпилируйте проект. Теперь FAR запускается как ни в чем не бывало и черный экран окрашивается в приятный голубой цвет.
Рисунок 4 при запуске FAR'а под doswin32, запущенным под BOCSH'ем, на экране появляется сообщение "error: cannot load language data" и загрузка прекращается
Сам FAR лучше всего брать из раздела update (http://www.farmanager.com/updates.php?l=ru), поскольку здесь он поставляется в простом архиве без инсталлятора (а инсталлятор, будучи GUI-приложением, под doswin32, естественно, не запускается). Распаковав архив мы увидим 6 файлов: far.exe (главный исполняемый файл), far.map (карта памяти для отладки — можно смело стирать), farrus.lng/fareng.lng (русское/английское меню) и farrus.hlf/fareng.hlf (русская и английская помощь).
Два языковых комплекта на системной дискете совершенно ни к чему и от одного из них можно избавится. От русского. Английский лучше оставить на случай проблем с русификатором.
Как вариант, эти файлы можно "выдрать" из ранее установленного дистрибутива. Для сохранения своих настоек запустите SaveSettings.bat (входит в штатную поставку FAR'а). На диске образуется два файла: FarSave1.reg и FarSave2.reg. Объединяем их в один: удаляем из FarSave2.reg строку "REGEDIT4" и копируем остаток внутрь FarSave1.reg размещая его между "REGEDIT4" и "[HKEY_CURRENT_USER\Software\Far]". Берем "dw32reg.exe" (входит в комплект "дополнительных системных утилит", поставляемых вместе с doswin32) и запускаем его: "dw32reg.exe /C FarSave1.reg". Образуется файл "DOSWIN32.RGD", который мы копируем в одну директорию с doswin32.exe. Это и будет нашим реестром, с которым станет работать FAR.
Большинство win32-программ из FAR'а не запускаются, поскольку практически все exe сейчас собираются без релокаций и претендуют на память уже занятую FAR'ом. Приходится каждый раз выходить из FAR'а, запуская их из чистой командной строки. Галимо, конечно, но терпимо (текущий каталог при этом сохраняется). Обойти программу можно перебазированием FAR'а. Для этого нам понадобиться утилита rebase.exe, входящая в состав MS Visual Studio и Platform SDK, а запускается она так: "rebase -b 0x80000000 far.exe". В нормальных условиях адрес 80000000h
занят операционной системой и никогда не выделяется прикладным приложениям, поэтому никаких конфликтов с запускаемыми программами под doswin32 не возникает. Такой файл будет запускаться и под Windows NT, которая автоматически переместит его в свободный регион. С Windows 9x
имеются определенные проблемы (этот адрес занят совместно используемыми memory-mapped файлами) и лучше зачеркнуть два нуля, перебазировавшись на 0x800000, но тут возможны конфликты с уже загружаемыми
приложениями. (Примечание: alfa-версии FAR' а обычно собираются без релокаций и не могут быть перебазированы. Все beta- и stable-версии полностью перемещаемы). Свои собственные программы лучше всего собирать с перемещаемыми элементами (ключ /FIXED:NO линкера MS link), чтобы "подружить" их с FAR'ом.
Если программа компоновалось линкером ulink (созданного все тем же Юрием Хароном) с ключём -ay[x], то под Windows задача пойдет как "родное" win32-приложение, а под MS-DOS будет автоматически искать doswin32 в текущем каталоге и в PATH'ах, самостоятельно загружая расширитель, освобождая пользователей от лишних телодвижений.
Рисунок 5 FAR, запущенный под doswin32 под пропатченным BOCHS'ем