Библиографическое описание:

Строт Ю. Г. Интеграция MS-DOS приложений в современные операционные системы // Молодой ученый. — 2009. — №6. — С. 6-13.

Проблематика области

На данный момент существует большое количество программ, написанных для операционной системы MS-DOS. Однако эта операционная система уже устарела, и использовать её становится неудобно, а порой даже не представляется возможным [1]. Несмотря на ограниченные возможности MS-DOS, а так же нестабильность работы и плохой пользовательский интерфейс большинства из описанных приложений, программы продолжают использоваться в повседневной практике. Причина заключается в том, что многие из MS-DOS приложений предоставляют уникальные средства для решения тех или иных задач. Нельзя говорить о том, что аналогов для данных систем не существует вовсе. Они, конечно же, существуют, но могут решать те же самые задачи другими методами или в неполном объеме.

Так как на разработку вычислительных программных систем было потрачено большое количество времени (можно говорить о месяцах а, скорее, о человеко-годах исследований, моделирования и разработки), то повторная реализация является слишком трудоёмкой задачей. Кроме того, многие приложения нельзя портировать в современные среды по различным причинам (например, из-за отсутствия исходных кодов).

Поэтому всё более актуальной становится задача  интеграции MS-DOS приложений в современные операционные системы таким образом, чтобы не требовалось переписывать какую-либо часть функциональности приложений, и при этом оставалась возможность создавать для систем современный пользовательский интерфейс. Задача сводится к разработке и реализации инструментария, позволяющего создавать приложения для современных операционных систем, которые способны использовать функциональность программ, написанных для MS-DOS. На данный момент, не существует систем, удовлетворяющих этим требованиям.

Исполнение MS-DOS приложений

Для исполнения MS-DOS приложений в современном мире существует несколько способов. Первым и самым простым способом является использование самой операционной системы MS-DOS. Но такой способ обладает целым рядом недостатков. Основным недостатком является то, что пользователю придётся периодически переключаться между двумя операционными системами. В одной из них он будет исполнять необходимое DOS приложение, а во второй будет интерпретировать результат работы приложения, а так же работать с остальными приложениями. Разработчики операционных систем попытались оградить пользователя от такой проблемы, предложив исполнять MS-DOS приложения с помощью так называемых режимов совместимости.

Режимы DOS совместимости позволяют исполнить приложения для MS-DOS, не меняя операционной системы. Т.е. пользователь после предварительной настройки может исполнять необходимое ему DOS приложения как любое другое приложение для этой операционной системы. Но, к сожалению, и такой способ имеет существенные недостатки:

Ø  Для каждого исполняемого файла вам необходимо сделать предварительную настройку. И хотя, сама процедура настройки не так сложна, но если приложение включает огромное количество таких программ, то настройка может стать утомительной.

Ø  Режимы совместимости работают не всегда. Происходит это потому, что некоторые DOS приложения запрашивают номер версии Windows. Или же местоположение или формат пользовательских папок может не совпадать с ожидаемым и т.д. В таких случаях DOS приложение просто отказывается работать.

Ø  Режимы совместимости присутствуют не во всех операционных системах. Например, в Windows 98 эта схема работала очень не постоянно. В Windows XP режимы совместимости с DOS были, в конечном итоге, заменены другим инструментом. Ну а о режимах совместимости в Linux или Mac OS можно и вовсе забыть.

Ещё одним способом запуска DOS приложений является использование DOS эмуляторов, которые эмулируют операционную систему MS-DOS в другой операционной системе. На данный момент это один из наиболее популярных способов, который практически лишён недостатков других способов. В частности, вам не нужно изменять операционную систему. Так же, вам не нужно заботиться о настройке режимов совместимости. Не говоря уже о том, что проблемы, связанные с запросами к операционной системе или же несоответствием формата папок DOS эмулятор берёт на себя.

К сожалению, у всех этих способов есть непреодолимый недостаток – все они только имитируют работу приложения с MS-DOS. А значит, приложение не обладает теми преимуществами, которые им дают современные среды, начиная с многопоточности и заканчивая пользовательским интерфейсом. Пользователю, привыкшему к работе с современной операционной системой, может показаться просто неудобной работа с DOS приложением. Кроме того, некоторые приложения обладают и гораздо более существенными недостатками – например, требуют от пользователя знания языка Fortran. Если раньше такое требование и было оправданным, то теперь этими знаниями обладают не так много людей.

Имитация работы с MS-DOS приложением

Для решения поставленной задачи необходимо разработать модель, которая бы позволяла использовать функциональность MS-DOS приложений в современной среде. Идея решения этой проблемы – имитация работы пользователя с приложением. Рассмотрит модель, представленную на рисунке ниже:

 

 

 

Рис. 1. Общая модель интеграции MS-DOS приложения в современной среде

 
 

 

 

 

 

 

 

 

 

 

 

 


В данной модели MS-DOS приложение запускается с помощью наиболее удобного для этого средства, а именно - DOS эмулятора. Тем самым, мы обеспечиваем кросс-платформенность для исполняемого приложения и ограждаем себя от дополнительных настроек. Когда пользователь производит какое-то действие, например, нажимает какую-либо клавишу на клавиатуре, приложению приходит какое-то событие. Эмулятор, получая это событие, генерирует аналогичное событие для DOS приложения. Т.е. если, используя эмулятор, мы нажимает клавишу space, в то время, когда в нём исполняется приложение, требующее вести текстовую строку, тогда эмулятор генерирует своё событие для DOS приложения, которое ассоциируется с событием нажатия пробела, и тем самым в тексте вводимого сообщения появляется пробел.

Чтобы осуществить управление MS-DOS приложением, исполняемому с помощью DOS эмулятора, нам необходимо передать пользовательские команды этому эмулятору, т.е. имитировать работу пользователя с эмулятором.

Наиболее подходящим способом для этого является использование сокетов или, другими словами, модели клиент-сервер. Т.е. DOS эмулятор может выступать в роли сервера, а управляющий элемент – в роли клиента. После того, как эмулятор будет запущен, вместо того, чтобы принимать внешние события, он будет ожидать подключения клиента. Таким образом, клиент, которым и является наш контроллер простейших команд, после подключения сможет имитировать работу пользователя с DOS эмулятором.

С другой стороны, модель клиент-сервер позволяет удобным способом передавать выводимый приложением текст контроллеру простейших команд. При этом не обязательно контролировать весь выводимый на экран DOS эмулятора текст, достаточно делать это по запросу клиента.

Однако, при интегрировании большого MS-DOS приложения в современную среду, хотелось бы работать не с низкоуровневыми командами, такими как нажатие клавиш на клавиатуре, а с более высокоуровневыми операциями, например, сохранение результатов в какой-то файл и т.д. Для решения этой задачи в модель добавлен контроллер приложения. Этот контроллер хранит в себе набор команд, с помощью которого можно получить тот или иной результат, обращаясь к MS-DOS приложению, и с помощью контроллера простейших команд умеет выполнять свои задачи. Таким образом, контроллер приложения может включать в себя метод сохранения файла, который выполняет последовательность команд: нажатие клавиши Left, нажатие клавиши Enter, передача строки с именем файла и т.д.

Не стоит забывать и о том, что решение каких-то задач с помощью MS-DOS приложения может не ограничиваться исполнением только одного приложения. Для некоторых DOS приложений может понадобиться выполнение каких-то внешних программ. Например, некоторые вычислительные пакеты программ предполагают сначала запуск компилятора языка Fortran для того, чтобы собрать приложение, которое в дальнейшем тоже будет исполняться. В таком случае, обязанность запуска этого компилятора так же ложиться на контроллер приложения. Нужно помнить, что контроллер передаёт команды не приложению, а эмулятору. И прежде, чем передавать команды конкретному приложению нам необходимо это приложению запустить.

Для реализации представленной модели нам необходимо выбрать DOS эмулятор, который будет соответствовать всем представленным к нему требованиям.

Эмуляторы MS-DOS

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

Ø  Стабильность. Нельзя допускать, чтобы используемый эмулятор приводил к различным ошибкам в работе с MS-DOS приложением.

Ø  Поддержка различных операционных систем. Желательным требования к эмулятору является как можно большая независимость от операционной системы, так как MS-DOS  приложения могут использоваться в самых различных операционных системах.

Ø  Возможность управления этим эмулятором. При выборе эмулятора необходимо учитывать тот факт, что нам придётся им управлять, и чем более простым в реализации это будет, тем более предпочтительным является эмулятор.

Наиболее популярным среди эмуляторов является эмулятор с открытым исходным кодом DOSBox [7]. Его работа основывается на использование SDL библиотеки, что позволяет осуществить его работу на операционных системах Linux, FreeBSD, Windows, Mac OS X и BeOS. Чаще всего, этот эмулятор используют для запуска старых DOS игр, но его можно использовать и для работы с серьёзными приложениями. К плюсам этого эмулятора можно отнести следующее:

Ø  DOSBox полностью эмулирует центральный процессор, при этом не требуя ни процессора x86, ни копии DOS.

Ø  Динамическое ядро процессора: на системах, имеющих набор команд i386, используется динамическая трансляция инструкций. На системах, не совместимых с x86, производится полная эмуляция, приводящая к существенному замедлению. Например, система на основе PowerPC G4 1,6 ГГц способна эмулировать систему со стандартным аппаратным обеспечением и с Intel 80486 50 МГц процессором; на x86-совместимых системах той же скорости можно добиться от гораздо более медленного процессора (например, от Pentium II).

Ø  Графическая эмуляция: текстовый режим, Hercules, CGA (включая композитный и 160x100x16 режимы), EGA, VGA (включая Mode X), VESA и полную эмуляцию S3 Trio 64.

Ø  Звуковая эмуляция: Adlib, динамик компьютера, Tandy, Sound Blaster, Creative CMS/GameBlaster, Disney Soundsource, Gravis Ultrasound и MPU-401.

Ø  Сетевая эмуляция: эмуляция модема через TCP/IP, Сетевой туннелинг IPX. Windows-версия поддерживает прямой последовательный порт.

Ø  Имеет собственную DOS-оболочку.

К минусам эмулятора можно отнести то, что, как и все программы-эмуляторы, DOSBox требует существенно более мощный компьютер (особенно процессор), чем эмулируемая система. Кроме того, поддержка защищённого режима всё ещё находится на ранней стадии разработки, поэтому DOS-программы, которые выполняются только в этом режиме, могут работать не так хорошо, как в других эмуляторах, вроде VMware или Virtual PC (они виртуализируют процессор вместо эмуляции, как в DOSBox).

С точки зрения использования эмулятора в наших целях, к его плюсам так же можно отнести простоту его настройки. Или, более точно, – возможность независимой от приложения настройки. Т.е. мы можем подходящим образом настроить эмулятор вне зависимости от того, какое приложение в нём запускается. Ещё одним плюсом эмулятора является стабильность его работы, а так же то, что это эмулятор с открытыми исходными кодами. Что существенно облегчает управление этим эмулятором.

Следующим в нашем списке является эмулятор DOSEmu, позволяющий исполнять DOS программы под операционной системой Linux [8]. Особенностью этого эмулятора является возможность использования некоторых возможностей ядра Linux для запуска MS-DOS программ. Тем не менее, это качество нельзя назвать плюсом этой программы, так как ограничивает её переносимость и использование. Например, конфигурирование DOSBox и запуск с помощью него DOS программ происходит совершенно одинаковым образом вне зависимости от того, какая операционная система используется. А это легче, чем, если бы нам приходилось конфигурировать эмулятор под каждую операционную систему отдельно.

К плюсам этого эмулятора можно отнести то, что он позволяет создавать виртуальные DOS диски, а так же настраивать BIOS. Он также позволяет запустить целый ряд MS-DOS приложений с разными приоритетами разделения CPU и памяти.

Ещё один эмулятор - PalmDOSBox, который позволяет исполнять приложения под операционной системой PalmOS [9]. Он обладает теми же плюсами, что и DOSBox, поскольку был получен в результате портирования DOSBox для указанной операционной системы, но, к сожалению, на данный момент он находится в стадии разработки.

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

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

Пользовательский интерфейс

Создание пользовательского интерфейса не настолько хорошо освещено, как разработка программного обеспечения. К сожалению, многим из-за этого кажется, что пользовательский интерфейс «просто должен быть», и это одна из причин, почему на выходе получается так много плохо оформленных программ. А пользовательский интерфейс – это очень большая часть программы, потому что для конечного пользователя из всей программы остаётся именно он [2].

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

Традиционным подходом к созданию пользовательского интерфейса является использование процедурных или объектно-ориентированных языков программирования. Как правило, такие языки имеют библиотеки, облегчающие создание элементов интерфейса, описание алгоритмов расположения элементов,  а также дают возможность чтения и изменения свойств элементов интерфейса и механизм нотификации контролирующих компонентов об изменениях свойств элементов пользовательского интерфейса, обусловленных пользовательским вводом. В качестве примера наиболее распространенных языков программирования, традиционно использующихся при таком подходе, можно привести Java, С++ и Visual Basic. Главным достоинством такого подхода является возможность реализации пользовательского интерфейса со сколь угодно сложным поведением.  Главным недостатком же является небольшая, по сравнению с другими подходами, скорость разработки, а также – большое количество кода на то же количество функциональности интерфейса, что ведет к большему количеству ошибок и увеличению времени их поиска.

Альтернативным подходом к созданию пользовательского интерфейса является декларативное описание, в основном использующееся в настоящее время для создания web-интерфейсов (HTML). Главным достоинством такого подхода является скорость разработки интерфейса, обусловленная отсутствием необходимости в непосредственной реализации интерфейса,- достаточно описать необходимый набор элементов интерфейса и их взаимное расположение. Основные недостатки такого подхода – относительно бедный набор функциональности элементов пользовательского интерфейса, обусловленный отсутствием возможности динамической инициализации элементов, а также большая (по сравнению с объектно-ориентированными языками программирования) сложность реализации логики, связывающей модель данных с их визуальным представлением.

На данный момент существует несколько распространенных языков, сочетающих в себе декларативный подход к программированию пользовательского интерфейса и возможность реализации гибкой логики связывания модели данных с представлением. Это такие языки, как XUL, MXML и XAML. В основе синтаксиса всех этих языков лежит XML, а способ декларативного описания элементов пользовательского интерфейса аналогичен способу, использующемуся в языке HTML: каждый тег (XML Element) задает некоторый элемент пользовательского интерфейса и способ расположения элементов, содержащихся в нем.

RCPML – это декларативный язык описания пользовательского интерфейса на основе Eclipse SWT [10]. Основными отличиями от других языков XML описания пользовательского интерфейса являются:

Ø  Простая расширяемость любыми пользовательскими элементами управления и тегами посредством OSGi архитектуры Eclipse.

Ø  Поддержка CSS (Каскадных таблиц стилей).

Ø  Поддержка всевозможных скриптовых языков, реализованных на платформе Java.

Ø  Поддержка динамического связывания произвольных данных.

Язык RCPML является проектом с открытым исходным кодом. Проект был создан по причине отсутствия аналогов XUL под платформу Eclipse с поддержкой всех её функций. Для задания логики в языке предусматривается написание внешних или внутренних скриптов на языке JavaScript. Ввиду расширяемости другие языки программирования могут быть добавлены очень легко.

Благодаря возможности использования CSS, RCPML является единственным декларативным языком, который поддерживает каскадные таблицы стилей в среде Eclipse. Возможно разделение наполнения интерфейса данными и их отображение.

В RCPML встроена возможность связывания с произвольными данными. Возможно создание собственных провайдеров данных на основе языка Java. На следующей диаграмме показано связывание XML данных.

Рис. 2. Связывание XML данных

 

 

Ядро RCPML позволяет реализовать любые XML UI языки под платформу Eclipse.

Создание пользовательского интерфейса для платформы Eclipse на языке Java является достаточно сложным, но с использованием RCPML оно значительно упрощается. Ввиду архитектуры Eclipse RCPML может быть применён везде, где может быть применён Java-реализованный пользовательский интерфейс.

Решение задачи

В данной статье был рассмотрен подход, позволяющий разделить пользовательский интерфейс и бизнес-логику приложения. Такой подход даёт возможность, не переписывая какой-то функциональной части приложения, написать для него новый пользовательский интерфейс. Кроме того, контроллер простейших команд и контроллер приложения, в конечном счёте, позволяют имитировать работу пользователя с приложением, тем самым осуществляя доступ к функциям MS-DOS приложения, как доступ к методам внешней библиотеки.

Разработанный подход был реализован на платформе Eclipse, что позволяет пользователям системы воспользоваться широким кругом существующих инструментов. Т.е. функциональность MS-DOS приложения может быть использована как для разработки конечного продукта, так и как часть большой системы. Причём разработчики могут использовать готовые средства для работы с XML, веб-приложениями, инструментами для создания редакторов и т.д. Также была добавлена возможность использования декларативного языка описания пользовательских интерфейсов RCPML.

Возможности системы можно продемонстрировать на двух следующих рисунках, представляющих пользовательский интерфейс простого MS-DOS приложения «Калькулятор», а так же пользовательский интерфейс приложения в современной операционной системе, который был написан с помощью разработанной системы и который использует функциональность MS-DOS приложения.

 

Рис. 3. Пример MS-DOS приложения «Калькулятор»

 
 

 

 


Рис. 4. Современный пользовательский интерфейс приложения «Калькулятор»

 
 

 


Кроме того, полученная система была успешно применена к пакету программ Конус, написанному для MS-DOS. На данный момент, ведётся работа по тестированию и документированию системы, однако уже сейчас весь исходный код доступен по адресу: http://code.google.com/p/ekonus.

 

Литература

1.      Трошкин Э., Кладов П. Вторая жизнь DOS-приложений // Компьютерные вести – 2008. – No. 37.

2.      Бабаев, Александр. Новый метод создания логики интерфейса // RSDN Magazine. – 2005. – No. 5.

3.      Головач, В.В. Дизайн пользовательского интерфейса. 2000. – С. 141

4.      Raskin, Jef. Human Interface, The: New Directions for Designing Interactive Systems. Addison Wesley. – 2000. – March. – 256 p.

5.      Спинеллис, Диомидис. Анализ программного кода на примере проектов Open Source. Вильямс, 2004.

6.      Таненбаум, Эндрю. Современные операционные системы. Питер, 2002.

7.      Официальный сайт эмулятора DOSBox. http://www.dosbox.com/

8.      Официальный сайт эмулятора DOSEmu. http://dosemu.sourceforge.net/

9.      Официальный сайт эмулятора PalmDOSBox. http://palmdosbox.sourceforge.net/

10.  Декларативный язык описания пользовательских интерфейсов RCPML. http://www.rcpml.org/

 

Обсуждение

Социальные комментарии Cackle