Стандартные процедуры функции модуля dos. Функции управления операционной средой. Файлы в Паскале

Тот самый Turbo Pascal, с которого многие начинали.

Язык программирования Pascal был создан Никлаусом Виртом. Назван в честь французского философа и математика XVII века Блеза Паскаля. В то время Вирт был профессором информатики в Федеральном техническом университете в Швейцарии и нуждался в языке, с помощью которого можно было обучать студентов навыкам программирования. Концепция Паскаля была разработана Н. Виртом примерно в 1970 году и Паскаль быстро получил широкое распространение благодаря легкости его изучения, наглядности составленных на нем текстов программ. Поскольку Паскаль послужил основой для разработки других языков программирования, таких как Ада и Модула-2, и поскольку многие языки содержат аналогичные Паскалю структуры, знание Паскаля является солидной базой для изучения других языков программирования. В середине 70-х годов была создана попытка разработать международный стандарт на Паскаль. В результате в 1982 году появился стандарт ISO 7185. Язык Паскаль стараниями Андерса Хейлсберга превратился в мощную профессиональную систему программирования Turbo Pascal. Появление инструментальных средств Borlаnd Pascal with Objects и Delphi для разработки программ в среде Windows лишний раз показала, какие неисчерпаемые возможности таит в себе Паскаль. Borland Pascal и используемый в Delphi язык Object Pascal основываются на Turbo Pascal и развивают его идеи. Delphi - компилятор языка Pascal. Delphi 1 был первым инструментарием разработки Windows приложений, объединившим в себе оптимизирующий компилятор, визуальную среду программирования и мощные возможности работы с базами данных. Годом позже Delphi 2 предложил все то же, но на новом уровне современной 32-битной операционной системы Windows 95 и Windows NT. Кроме того, Delphi 2 предоставил программисту 32-битовый компилятор, создававший более быстрые и эффективные приложения, мощные библиотеки объектов. Продолжительная работа команды разработчиков Delphi привела к появлению в третьей версии продукта расширенного набора инструментов для создания приложений, возможности использования технологий COM для разработки приложений WWW и многих других современных технологий программирования. Delphi 4 является очередным шагом в эволюции компиляторов Паскаля с тех времен, когда более 16 лет назад Андерс Хейлсберг создал первый компилятор Turbo Pascal.

Добавлено--

про "Error 200".

RTL выпуска до 1994-го года ещё не содержала в модуле CRT этой ошибки.
Она появилась после обновления RTL 1994-го года и позднее.

Если использовать даже непропатченную оригинальную RTL 1994-го года с этим багом, но в программе не подключать юнит CRT, то никакой "Error 200" в программе не будет.

И наоборот, стоит только написать в программе "uses crt;", как файл окажется неработоспособен на быстрых машинах, потому что ошибка в том модуле CRT проявлялась уже во время автоматической инициализации библиотеки CRT при старте программы.

· Модуль DOS . Модуль DOS позволяет использовать возможности операционной системы MS-DOS, не предусмотренные в стандарте языка Паскаль, и содержит типы, константы, переменные и для реализации этих дополнительных возможностей.

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

При запуске программы в первую очередь проверяется целостность системы; т. е. наличие всех файлов системы, соответствуют ли их имена и размеры таблице. Далее происходит инициализация: проверяются параметры BIOS. Если какой либо файл системы был изменен или параметры BIOS не соответствуют установленным в программе, система работать не будет. Для входа в систему необходимо ввести пароль. Эти проверки осуществляются в конструкторе Init объекта TMyApp . Этот же объект инициализирует меню (TMyApp.InitMenu), строку состояния (TMyApp.InitStatusLine), рабочее поле (TMyApp.InitDeskTop), устанавливает специальную цветовую палитру (TMyApp.GetPalette). Обработка событий (нажатие клавиш клавиатуры, работа с “мышью”) осуществляется в методе HandleEvent объекта TMyApp . При выборе какого-либо пункта меню управление передается соответствующему объекту или вызывается нужная подпрограмма.

В программе используются следующие процедуры, функции и объекты:

1. Shifr (процедура). Зашифрование файлов любого типа. Сначала получаем пароль от пользователя, затем создаем файл зашифрованных данных (*.M&A). Исходный файл считывается блоками по 64 word, кодируется с помощью генератора ПСЧ, затем переставляется в соответствии с таблицей, изображенной на рис. 2 . Полученную последовательность записываем в файл с расширением *.M&A и т. д.

2. DeShifr (процедура). Расшифрование файлов, зашифрованных процедурой Shifr .

3. Plus (процедура). Установка защиты паролем или по ключевой дискете на программы.

4. Block (процедура). Защита винчестера от записи.

5. Passwords (процедура). Изменение пароля входа в программу. Сначала запрашивает старый пароль, затем два раза новый.

6. TOptions (объект, потомок объекта TDialog). Выводит диалоговое окно изменения

настроек шифрования файлов: удалять или не удалять исходный файл, высвечивать или не высвечивать индикатор процесса шифрования.

7. CheckExec (процедура). Обрабатывает ошибки DOS.

5. Описание применения программы

Программа предназначена для защиты данных от несанкционированного доступа; в ней реализованы следующие функции:

· шифрование файлов;

· защита паролем исполняемых файлов;

· защита исполняемых файлов с помощью ключевой дискеты;

· отслеживание и реакция на ошибки;

· изменение паролей;

· привязка к BIOS.

Установка системы происходит с ключевой дискеты программой INSTALL. EXE , которая проверяет не была ли установлена система ранее; если нет, то создает на винчестере каталог C:\ SUB ROSA и копирует в него файлы системы (Sub Rosa. exe, Block, KeyDisk, Plus, Passw, Setup. res, System. res ).

При запуске программыSub Rosa. exe сначала проверяется наличие всех файлов системы. Если хотя бы один файл изменен или удален, то система работать не будет. Для работы с программой необходимо ввести пароль.

В верхней части экрана находится полоска меню, состоящая из следующих пунктов:

1. “Файлы”:

- “Выбрать” (выбор файла для работы);

- “Сменить каталог” (смена текущего каталога);

- “Выход в DOS” (временный выход в DOS);

- “Завершение” (завершение работы с программой);

2. “Защита”:

- “Установить пароль” (защита EXE- и COM-файлов паролем);

- “Блокировать винчестер” (запрет записи любых данных на винчестер);

3. “Ключевая дискета”:

- “Добавить проверку по ключу” (защита EXE- и COM-файлов с помощью

ключевой дискеты);

4. “Криптография”:

- “Зашифровать файл данных” (зашифрование выбранного файла);

- “Расшифровать файл данных” (расшифрование выбранного файла);

5. “Настройки”:

- “Криптография” (изменение настроек криптографии);

- “Пароли” (изменение пароля входа в систему);

6. “О Программе” (информация о программе).

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

6. Заключение

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

RANK - пакет защиты от НСД. Этот пакет реализует функцию контроля доступа к EXE- и COM-файлам. Следует отметить, что анализ разграничения доступа к программам ставит под серьезное сомнение возможность реализации такой функции без дополнительных мероприятий.

LATCH - комплекс программ защиты ПЭВМ от НСД. Этот комплекс обеспечивает безопасность данных, хранящихся на винчестере. При несанкционированном доступе происходит “зависание” ПЭВМ или не обнаруживается НЖМД.

Тезис о невозможности обнаружения НЖМД вызывает серьезные сомнения: например, для контроллеров SCSI не требуется определение типа НЖМД в памяти CMOS, так как параметры винчестера могут быть считаны с помощью команды контроллера.

Приложение 1

Листинг программы

{****************************************************************************}

{** КП "ЗАЩИТА ДАННЫХ ОТ НСД" **}

{** Выполнили учащиеся гр.46491 ЕГАНОВ МАКСИМ и ЮЗЕФОВИЧ АРТЕМ **}

{****************************************************************************}

{****************************************************************************}

{$M 10240, 0,20480} {Распределение памяти}

Program Sub_Rosa;

App, Dialogs, Drivers, Menus, MsgBox, Objects,

Validate, Views, Memory, StdDlg, Editors, {Модули Turbo Vision, далее - TV}

CRT, DOS, {Стандартные модули}

SetConf; {Модуль функции привязки к BIOS}

MyRes: TResourceFile; {Переменная файла ресурсов, TV}

FName, MainDir, DName: string; {Переменные работы с файлами и каталогами}

MainPass, Pass: string; {Переменные паролей}

FilePass: file of char; {Переменная файла паролей}

OptFile, OptInd: word; {Переменные опций}

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

В модуле Dos введены процедуры и функции, позволяющие получить доступ к некоторым ресурсам DOS.

Для поиска первого и следующего файла с заданным именем используются соответственно процедуры:

FindFirst (Path:String; Attr:Word; Var S:SearchRec);

FindNext (Var S:SearchRec);

Path - путь и имя искомого файла. При отсутствующем пути поиск производится в текущем каталоге, возможно использование шаблонов.

Attr - задаваемые атрибуты файла. В качестве Attr можно использовать константу AnyFile, означающую любые атрибуты.

S - возвращаемая переменная со следующей структурой:

SearchRec=Record

Fill: Array of byte;

Здесь поле Fill содержит служебную информацию DOS.

Attr - реальные атрибуты файла.

Time - дата и время создания файла в упакованном виде.

Size - размер файла в байтах.

Name - имя найденного файла.

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

Для распаковки времени создания файла используется процедура:

UnpackTime (Time:LongInt; Var DT:DateTime);

Выходным параметром для неё является запись DT, имеющая следующую структуру:

DateTime = Record

Year, Month, Day, Hour, Min, Sec: Word

Пример: вывод списка файлов из текущего каталога, содержащих тексты программ на языке Паскаль.

Program FindPas;

{ Поиск файлов с Паскаль-программами }

FindFirst ("*.pas",AnyFile,S);

While DosError=0 do

UnpackTime (S.Time,DT);

WriteLn(" Файл ",S.Name," создан ",

DT.Day,".",DT.Month,".",DT.Year,

" время: ",DT.Hour,":",DT.Min,":",DT.Sec,

" размер ",S.Size," байт");

Если необходимо искать файлы не в одном, а в нескольких каталогах, то используют функцию

FSearch (Path:PathStr; DirList:String): PathStr;

Тип PathStr является предопределенным:

PathStr=String ;

Здесь: Path - имя искомого файла, может быть составным.

DirList - список каталогов, в которых будет производиться поиск, каталоги разделяются точкой с запятой, например:

S:= FSearch (‘EDIT.EXE’,’C:\DOS;C:\NC;C:\NU’);


В текущем каталоге поиск производится автоматически. В случае удачного поиска переменной присваивается строка, содержащая составное имя файла, в случае неудачи – пустая строка.

Список каталогов используется аналогично принятым правилам в DOS. Обычно в файле автозапуска AUTOEXEC.BAT содержится команда PATH, присваивающая этой переменной окружения имена каталогов, в которых находятся наиболее часто используемые файлы. В этом случае поиск файлов из среды DOS производится не только в текущем и корневом каталогах, но и в каталогах, указанных в этой команде.

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

GetEnv (EnvVar:String):String;

где в качестве аргумента используется имя переменной окружения. Так, если в файле автозапуска указана команда

PATH C:\DOS;C:\WINDOWS;C:\NC ,

то после выполнения

S:= GetEnv (‘PATH’);

S примет значение

C:\DOS;C:\WINDOWS;C:\NC ,

что может являться аргументом функции FSearch.

Из составного имени файла можно отдельно выделить полный путь, чисто имя и расширение процедурой

FSplit (Path:PathStr; Var Dir:DirStr; Var Name:NameStr; Var Ext:ExtStr);

Типы определены как

DirStr = String ;

NameStr = String ;

ExtStr = String ;

Пример поиска файла.

Program PoiskFile;

{ Пример программы поиска файла }

NameIn,NameFul:PathStr; { входное и составное имя файла }

Writeln(" Введите имя искомого файла: ");

NameFul:=FSearch(NameIn,GetEnv("PATH"));

If NameFul="" then

Writeln("Файл ",NameIn," не найден")

FSplit(NameFul,Dir,Name,Ext);

Writeln("файл ",Name," с расширением ",Ext,

" найден в каталоге ",Dir)

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

DiskSize (Drive:Byte):LongInt;

– определение общего объема указанного логического устройства (диска) в байтах.

DiskFree (Drive:Byte):LongInt;

– определение количества свободных байт на диске.

Номер диска задается как: 0 – текущий, 1 – А, 2 – С и т.д.

Для работы с текущей датой и временем используются процедуры:

GetDate (Var Year,Month,Day,Day_of_week: Word);

– определяет текущую системную дату. Здесь Day_of_week определяет порядковый день недели от 0 до 6, причем 0 означает воскресенье.

Аналогично для установки новой даты:

SetDate (Year,Mount,Day:Word);

Процедура для определения системного времени:

GetTime (Var Hour,Minute,Second,Hund:Word);

Здесь Hund - сотые доли секунды со значением от 0 до 99. Они определяются приблизительно, так как внутренний генератор переключается 18,2 раза в секунду.

Для установки системного времени применяется процедура

SetTime (Hour,Minute,Second,Hund:Word);

Но намного большие возможности дает работа непосредственно с процедурами операционной системы и внешними устройствами.

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

Intr (IntNo:Byte; Var Regs: Registers);

IntNo - номер прерывания;

Regs - содержимое регистров процессора следующего типа:

Registers = Record

0: (AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags:Word);

1: (AL,AH,BL,BH,CL,CH,DL,DH:Byte);

То есть поля записи соответствуют либо шестнадцатиразрядным, либо восьмиразрядным регистрам процессора. Например, установка графического режима 640х480 точек, 16 цветов:

Var R:Registers;

R.AH:=0; R.AL:=$12;

Так как очень часто используется вектор прерывания DOS 21H, то добавлена специальная процедура для работы только с этим прерыванием:

MSDos (Var Regs:Registers);

полностью эквивалентная

Intr ($21,Regs);

Например, определение версии DOS:

Var R:Registers;

Writeln (‘MS-DOS ‘,R.AL,’.’,R.AH);

1. Основные компоненты ДОС Всю систему можно разделить на шесть основных частей, функции каж- дой мз которых мы кратко рассмотрим в этом разделе. Первая часть - это система BIOS в ПЗУ. Это система поставляется вместе с IBM/PC и может использоваться любой операционной системой. Функция BIOS в ПЗУ заключа- ется в обслуживании основных и наиболее фундаментальных операций компь- ютера. Поскольку система BIOS в ПЗУ для IBM/PC является "встроенной" в комптютер, она является не только составной частью ДОС, но и составной частью любой операционной системы IBM/PС. Еще одна часть - "загрузочная запись" дискеты. Загрузочная запись - это очень короткая и простая программа, находящаяся в первом секторе каждой дискеты. Функция этой программы заключается в запуске процесса загрузки операционной системы после включения компьютера или перезапус- ка (нажатия клавиш CTRL-Alt-Del). Загрузочная запись считывает еще два модуля операционной системы в память и они завершают процесс загрузки ДОС. Следующие две части ДОС представляют собой дисковые файлы IBMBIO.COM и IBMDOS.COM. Обе эти части загружаются в память загрузочной записью и остаются в памяти во время работы ДОС, так что провести между ними различие довольно трудно. Файл IBMBIO.COM представляет собой изме- няемое дополнение к системе BIOS в ПЗУ. Начиная с версии 2.00 файл IBMBIO.COM может дополняться другими частями, называемыми независимыми драйверами устройств, которые мы подробнее рассмотрим несколько позже. Система BIOS в ПЗУ, IBMBIO.COM и драйверы устройств, вместе взятые об- разуют "физический" уровень операционной системы. Файл IBMDOS.COM реализует основные услуги ДОС. Это "логический" уровень ввода/вывода операционной системы. Оба эти файла являются "скрытыми" системными файлами. Имена этих файлов не включаются в оглавление диска, вызываемое по команде DIR. Од- на из функций IBMBIO.COM заключается в загрузке еще одного модуля опе- рационой системы. Пятая часть - это дисковый файл COMMAND.COM. Главная функция COMMAND.COM заключается в обработке команд, вводимых пользователем. Ко- манды ДОС, считающиеся внутренними, такие как TYPE, COPY и DIR факти- чески реализуются программами COMMAND.COM. Собственно COMMAND.COM раз- деляется на две части: одна становится частью IBMDOS.COM, а вторая - процессором дополнительных команд. Шестая и последняя часть ДОС состоит из всех внешних команд, таких как FORMAT и DISKCOPY. Функции этих команд различны и реализующие их программы загружаются в память только в случае необходимости. В отличие от остальных пяти частей ДОС, все эти дополнительнве программы не явля- ются интегральной составляющей ДОС, хотя они и поставляются вместе с ней. Некоторые из этих дополнительных программ, например, FORMAT, нас- только важны, что обойтись без них практически невозможно. Внешние команды являются нерезидентными частями ДОС, поскольку они не находятся в памяти постоянно. Файлы IBMBIO.COM, IBMDOS.COM и драйве- ры устойств находятся в памяти постоянно и образуют резидентную часть ДОС. Файл COMMAND.COM можно выделить в отдельную категорию как полу-ре- зидентную составляющую ДОС, о чем речь пойдет ниже. Загрузочная запись используется только временно и поэтому не является резидентной частью ДОС. В следующих шести разделах мы более подробно рассмотрим каждую из частей ДОС. - 2 - 2. Система BIOS в ПЗУ Первая часть в ДОС - это BIOS в ПЗУ или базовая система ввода/вы- вода, размещающаяся в постоянной памяти. Эта система обеспечивает наи- более простые и универсальные услуги операционной системы, связанные с осуществлением ввода/вывода. Система BIOS располагается в ПЗУ начиная с адреса FE00 и до FFFF, сразу же после интепретатора БЕЙСИКа. Поскольку BIOS в ПЗУ является частью IBM/PC, она может изменяться только в том случае, когда изменениям подвергается аппаратная реализа- ция системы. В качестве составной части IBM/PC, система BIOS в ПЗУ яв- ляется не просто одной из частей ДОС, но частью любой операционной сис- темы IBM/PC. Система BIOS в ПЗУ состоит из нескольких частей, большинство из которых представляет собой программы (остальные - это важные таблицы данных, которые мы рассмотрим в последующих главах). Программа системы BIOS, которая выполняется первой, представляет собой тест функциониова- ния. Эта программа поверяет память и внешние устройства, подключенные к IBM/PC, как только будет включено питание компьютера. Работа этой прог- раммы определяет ту задержку, которая имеет место между включением пи- тания и загрузкой операционной системы. Чем больший объем памяти подк- лючен к Вашему компьютеру, тем дольше выполняется тест, поскольку наи- более длительной процедурой является процедура поверки памяти. Следующая часть BIOS, которая должна выполняться как программа за- пуска операционной системы, - это программа вызова загрузчика операци- онной системы. Эта программа проверяет, подключен ли дисковод с гибкими дисками и считывает с дискеты "загрузочную запись". После считывания загрузочной записи программа запуска передает ей управление, чтобы она считала оставшиеся части операционной системы. Если в системе нет дисковода или при считывании загрузочной записи произошла ошибка, то программа запуска BIOS передает управление кассет- ной системе БЕЙСИК. Если Вы включите IBM/PC, не установив дискету в дисковод, то Вы увидите, что начала работу программа системы БЕЙСИКа. Помимо двух уже описанных частей - автономного теста функцонирова- ния и программы запуска, система BIOS в ПЗУ содержит множество других программ и они-то представляют для нас наибольший интерес. Сюда входят программы обслуживания всего стандартного периферийного оборудования IBM/PC. Эти программы выполняют основные функции управления клавиату- рой, дисплеем, дискетами, асинхронным адаптером связи, устройством пе- чати и кассетным интерфейсом. Работой с этими программами нам необходи- мо овладеть, чтобы полностью использовать все возможности IBM/PC. 3. Начальная загрузка - загрузочная запись Загрузочная запись необходима для запуска ДОС. Принцип использова- ния загрузочной записи реализован практически на всех компьютерах. Заг- рузочная запись содержит минимум необходимых команд для считывания и запуска основных частей операционной системы. При запуске IBM/PC либо включением питания, либо нажатием клавиш Ctrl-Alt-Del, процедура запуска системы BIOS в ПЗУ считывает первую за- пись дискеты, установленной в дисковод А и помещает ее в стандартную область памяти, по адресу 31744 или 7С00 (шестнадцатиричное). После считывания загрузочной записи BIOS передает ей управление, выполняя пе- реход по адресу 31744. Далее загрузочная запись должна продолжить заг- рузку операционной системы. Основное назначение загрузочной записи для ДОС заключается просто в загрузке файлов IBMBIO.COM и IBMDOS.COM. Загрузочная запись имет раз- мер стандартного сектора на дискете, 512 байт, что недостаточно для сложной программы. Для упрощения работы этой программы, оба файла, - 3 - IBMBIO.COM и IBMDOS.COM, размещаются в определенных постоянных местах на дискете. Это избавляет программу загрузки от необходимости искать их в справочнике дискеты. Этим, кстати, "системная" дискета отличается от обычной - на ней, в определенных местах, находятся два системных файла IBMDOS.COM и IBMBIO.COM. Поэтому нельзя просто преобразовать обычную дискету в сис- темную - места, зарезервированные для системных файлов, могут быть за- няты другими файлами. Хотя загрузочная программа не столь совершенна, чтобы осуществлять поиск системных файлов, она все же способна проверить правильность их включения в справочник. Поскольку оба системных файла включены в спра- вочник дискеты, они защищены как от стирания, так и от любых других способов доступа установлением атрибутов скрытого и системного файла. (В следующей главе мы поясним, что такое скрытые и системные файлы). В связи с простотой ее задачи, программа загрузки является относительно стабильной составной частью ДОС. Ее потребовалось изменить, когда изменялся размер или местоположение системных файлов, а это произошло с введением поддержки двухсторонних дискет в версии ДОС 1.10. 4. IBMBIO.COM Первый из двух системных файлов, IBMBIO.COM, предназначен для до- полнения функций системы BIOS в ПЗУ. Как BIOS в ПЗУ, так и IBMBIO.COM занимаются обслуживанием операций ввода/вывода или обслуживанием уст- ройств, что то же самое. Такая функция предполагает обработку различных подробностей, связанных с функционированием устройств ввода/вывода. Сю- да же включается обнаружение ошибок и их исправление, что для программ еще сложнее. Программы IBMBIO.COM отличаются тем, что их легко можно изменить, чего нельзя сказать о программах BIOS в ПЗУ. Файл IBMBIO.COM предназна- чен для решения трех задач, которые невозможно решить с помощью системы BIOS в ПЗУ. Первая задача заключается в настройке на нужды конкретной операционной системы, ДОС. Вторая задача IBMBIO.COM заключается в исправлении любых ошибок в BIOS в ПЗУ, если в этом возникнет необходимость. Программы, подобные системе BIOS, проверяются очень тщательно, ведь их размещение в ПЗУ не допускает исправлений. Если ошибки все же будут позднее обнаружены в BIOS, их можно будет исправить путем внесения соответствующих изменений в IBMBIO.COM. Это делается путем изменения векторов прерываний таким образом, чтобы управление при обращении к операциям BIOS сначала попа- дало в IBMBIO.COM, а уже затем в BIOS. Соглашения о вызовах процедур системы BIOS в ПЗУ всегда предполагает использование прерываний, вместо прямых переходов по адресам ПЗУ. Основная причина использования преры- ваний как раз и состоит в обеспечении возможностей перехвата управления у процедур BIOS, ведь, в противном случае, такой возможности просто не существовало бы. Третья задача, которую не позволяет решить BIOS, и, которую за нее решает IBMBIO.COM, заключается в обслуживании новых периферийных уст- ройств, таких как жесткие диски большой емкости, или восьмидюймовые (203мм) дискеты, или плоттеры, или любые из сотен устройств, которые могут быть подключены к IBM/PC. Когда новое устройство ввода/вывода подключается к IBM/PC, обслуживающая его программа должна включаться в файл IBMBIO.COM или его расширения, без необходимости замены микросхем ПЗУ, в которых размещается система BIOS. В наиболее ранних версиях ДОС задача включения нового устройства в систему предполагала внесение изменений в IBMBIO.COM и, возможно, в другие системные программы ДОС. Хотя это не слишком сложно для таких фирм как "ИБМ" или "Майкрософт", такая задача может оказаться непосиль- - 4 - ной для пользователя, которому требуется включить дополнительное обору- дование в свою систему. Поскольку возможность добавления новых устройств к компьютеру сос- тавляет немаловажное условие его успеха на рынке, процедура включения обслуживающих программ в ДОС была упрощена, начиная с ДОС версии 2.00. Когда управление впервые после запуска системы передается IBMBIO.COM, он проверяет, находится ли на дискете файл конфигурации системы. Если файл конфигурации найден, считываются его команды, часть которых опре- деляет ряд параметров системы. Команды файла конфигурации включают имена всех программ обслужива- ния устройств, которые необходимо включить в BIOS. Каждая из этих прог- рамм загружается в память как дополнение к IBMBIO.COM. Такая схема об- легчает добавление новых устройств, позволяет делать это модульно, не затрагивая системные файлы ДОС. Как правило, любая программа, работающая на IBM/PC, будет исполь- зовать обычную версию BIOS для ДОС. Однако, в некоторых случаях прог- рамме необходимо бывает особое обслуживание операций ввода/вывода. Пос- кольку IBMBIO.COM представляет собой дисковый файл, который можно изме- нить, имеет смысл разработать версию IBMBIO.COM, настроенную на Ваши конкретные нужды. Пример такой настройки Вы можете найти в диагности- ческих программах. 5. IBMDOS.COM Разделение операционной системы на два модуля, IBMBIO.COM и IBMDOS.COM позволяет разделить те части, которые специфичны для конк- ретного компьютера и те, которые являются общими для всех компьютеров, работающих под управлением ДОС. Служебные процедуры ДОС, в определенной степени произвольно, раз- делены на те, которые вызываются с помощью собственных прерываний, и те, которые разделяют общее прерывание (номер 33, шестнадцатиричное значение 21). В терминологии ДОС, первая группа называется прерываниями ДОС, а вторая - вызовами функций. В обоих случаях для их вызова исполь- зуются программные прерывания, причем по той же причине, что и для вы- зова программ BIOS: для обеспечения модульности. Диапазон прерываний от 32 до 63 (шестнадцатиричные значения от 20 до 3F) зарезервированы для использования ДОС. Используется только часть этих прерываний, а остальные обеспечивают возможность дальнейшего рас- ширения. Программы обслуживания прерываний ДОС включают чтение и запись секторов дискеты, доступ к контролю за ошибками ДОС и операциями клави- атуры Ctrl-Break. Вызовы функций ДОС обеспечивают, в основном, промежуточный уровень обслуживания операций ввода/вывода. В качестве примеров можно упомянуть ввод с клавиатуры, обычный вывод на экран дисплея, ввод/вывод по асинх- ронной линии связи и вывод на печать. Предусмотрены также логические операции для дискет - открытие и закрытие файлов, поиск в справочнике файлов, удаление и создание файлов, чтение и запись данных. Эти проце- дуры обеспечивают практически все элементарные операции, которые могут потребоваться программе для работы с файлами и данными, хранящимися в файле, так чтобы программе не приходилось самостоятельно расшифровывать данные справочников, таблиц размещения файлов и т.п. Большая часть этих служебных процедур ДОС интенсивно используется программами более высокого уровня ДОС. Например, процедура поиска в справочнике используется командами DIR и COPY. Кроме того, она исполь- зуется интерпретатором команд для поиска программных файлов. В разделе 4.9 будет рассмотрен полный список служебных процедур ДОС. 6. Файл COMMAND.COM и внутренние команды - 5 - Следующая составная часть ДОС, файл COMMAND.COM, одна из наиболее интересных частей, как с точки зрения тех услуг, которые она предостав- ляет пользователю, так и с точки зрения принципов ее функционирования. COMMAND.COM имеет несколько функций. Прежде всего, это "процессор ко- манд", что означает возложенные на него функции ввода команды, набирае- мой на клавиатуре, и определения дальнейших действий. Когда вводится внутренняя команда, такая как DIR, COPY, TYPE, REM или PAUSE, то запрашивается случайная процедура, "встроенная" в COMMAND.COM, так что она может выполняться немедленно. Чтобы распознавать внутренние команды, COMMAND.COM содержит табли- цу имен команд. Если просмотреть файл COMMAND.COM, то можно увидеть эти имена команд. Для просмотра файла COMMAND.COM можно воспользоваться программой DEBUG или DiskLook. Там же Вы увидите сообщение, которое ДОС выдает в начале работы. При желании эти сообщения можно изменить с по- мощью команды DEBUG или SecMod, так чтобы ДОС начинала работу выдачей Вашей фамилии или названия компании. Можно также изменить и имена внут- ренних команд, причем сделать это просто, если не изменяется длина име- ни. Если команды нет в таблице внутренних команд, значит имеется в ви- ду внешняя команда, которую COMMAND.COM будет искать во внешнем файле. В ответ на наш запрос, COMMAND.COM осуществляет поиск файла обработки команды на соответствующей дискете и запускает его выполнение. Когда COMMAND.COM находит программный файл в любом формате, он выполняет загрузку этого файла в память и выполняет любое необходимое преобразование. После загрузки файла и формирования приставки программного сегмента, COMMAND.COM передает управление этой программе, так чтобы она могла выполнить свою работу. Если файл обработки команды относится к типу ".BAT", то есть явля- ется файлом пакетной обработки, то он содержит в формате текстового файла в коде ASCII последовательность команд, которые должны выполнять- ся так, как будто они вводятся с клавиатуры. Одна из многих задач COMMAND.COM заключается в отслеживании позиции в файле пакетной обра- ботки, так чтобы после выполнения одной команды сразу переходить к дру- гой. Если в процессе обработки одного пакетного файла будет вызван дру- гой, то возврата к первому не произойдет, так как файлы пакетной обра- ботки не могут быть вложенными, зато их можно объединять в цепочку. В некоторых системах весь ввод команд может быть переназначен на файл, причем это относится как к программам, вводящим данные с клавиа- туры, так и к интерпретатору команд. К ДОС это не относится. Только ин- терпретатор команд COMMAND.COM может автоматически выполнять чтение из файлов пакетной обработки. Кстати, программы могут вносить изменения в файл пакетной обработ- ки и таким образом определять, какая команда будет выполнена следующей. Это часто делается в сложных приложениях для замены последовательного выполнения программ. Командный процессор, COMMAND.COM состоит из трех отдельных частей: 1. Резидентной части, размещаемой в ОЗУ непосредственно за IBMDOS.COM и ее рабочей областью. Эта часть содержит подпрограммы обра- ботки прерываний 22H (адрес завершения), 23H (реакция на Ctrl-Break) и 24H (реакция на фатальную ошибку), а также подпрограмму подзагрузки не- резидентных частей. (При завершении программы вычисляется контрольная сумма области нерезидентной части командного процессора, и выясняется, не затерта ли она. Если да, то нерезидентная часть подзагружается). За- метим, что вся стандартная обработка ошибок производится этой частью COMMAND.COM. Это включает выдачу сообщений об ошибках и обработку отве- та на вопрос "Abort, Retry or Ignore". - Часть инициализации располагается в памяти вслед за резидентом и - 6 - получает управление при запуске системы. Эта часть включает обработку файла AUTOEXEC.BAT. Она также определяет адрес, начиная с которого мо- гут загружаться программы. Эта часть перекрывается первой же програм- мой, загружаемой COMMAND, так как не используется после выполнения ини- циализации. - Нерезидентые части загружаются в конец (старшие адреса) ОЗУ. Их две: собственно командный процессор (часть 3), выполняющий обработку диалогjds[ команд и из командных файлов, и (часть 4) загрузчик, загру- жающий и выполняющий нерезидентные команды (т.е. файлы с расширениями.COM или.EXE). Загрузчик располагается в самом конце ОЗУ и вызsвается операцией вызова и загрузки прогамм (Exec). Часть 3 COMMAND выдает приглашение (напр. A>), принимает команды с клавиатуры (или из командного файла) и начинает их выполнение. Для не- резидентных команд она формирует командную строку и выполняет операцию Exec для загрузки и вызова соответствующей программы. 7. Внешние команды Последнюю часть операционной системы ДОС составляют внешние коман- ды. Они называются внешними, поскольку они не включены в состав ДОС, и не являются резидентными в памяти IBM/PC. Вместо этого, внешние команды хранятся в программных файлах на дискетах. Как все программные файлы, все внешние команды имеют расширение имени файла ".COM" или ".EXE", что указывает, в каком из форматов они оформлены. Мы рассмотрим эти форматы, когда будем рассматривать струк- туру дискет и файлов в следующей главе. Примерами внешних команд могут служить DISKCOPY, COMP, FORMAT, а такие программы как EDLIN, BASIC или BASICA тоже в определенном смысле являются внешними командами, хотя их лучше все же считать языковыми процессорами, такими как макроассемблер или Паскаль. Внешние команды не отличаются от других программных файлов, кото- рые Вы сами разрабатываете или покупаете. С одной точки зрения внешние команды действительно являются частью операционной системы, особенно те, без которых операционной системой нельзя воспользоваться, такие как FORMAT. Однако, с другой точки зрения, внешние команды - это всего лишь вспомогательные программы, утилиты, которые полезны, но которые не яв- ляются операционной системой. Разница между внешней командой ДОС и обычной программой заключается просто в Вашем отношении к ней - как к части ДОС или как к чему-нибудь малосущественному. 8. Инициализация DOS При запуске системы (либо операцией перезагрузки системы), либо при включении питания с системной дискетой в устройстве A:), блок на- чальной загрузки считывается в память и получает управление. Он прос- матривает каталог, чтобы убедиться, что первые два файла суть IBMBIO.COM и IBMDOS.COM (в указанном порядке). Если эти файлы не обна- ружены, на экран выдается сообщение об ошибке, иначе оба файла считыва- ются в оперативную память. (IBMBIO.COM должен быть первым файлом в кор- невом каталоге и располагаться на последовательных секторах). Подпрограмма инициализации в IBMBIO.COM определяет состояние обру- дования, инициализирует дисковую систему и подключенные устройства, загружает драйверы устройств, и устанавливает значения младших вектров прерываний. Затем она выполняет настройку адресов в IBMDOS.COM и пере- дает управление на первый байт DOS. Так же как и в IBMBIO.COM, первый байт DOS содержит переход на подпрограмму инициализации, которая после выполнения перекрывается об- ластью данных командного процессора. DOS инициализирует свои внутренние - 7 - рабочие таблицы, инициализирует вектора прерываний 20-27 и формирует Префикс Программного Сегмента (См. Гл. 6) для COMMAND.COM в самом млад- шем доступном сегменте; затем она возвращается в IBMBIO.COM. Последнее инициализационное действие IBMBIO.COM заключается в заг- рузке COMMAND.COM по адресу, установленному подпрограммой инициализации DOS. Затем IBMBIO.COM передает управление на первый байт COMMAND.

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

Турбо-Паскаль обеспечивает Вам доступ к большому числу встроенных констант, типов данных, переменных, процедур и функций. Некоторые из них специфичны для Турбо-Паскаля; другие специфичны для персонального компьютера РС фирмы IBM (и совместимых с ним компьютеров) или для операционной системы MS-DOS. Их количество велико, однако, в своей программе Вы редко используете их все сразу. Поэтому они разделены на связанные группы, называемые модулями. В этом случае Вы можете использовать только те модули, которые необходимы в программе.

Структура модуля

Модуль обеспечивает набор средств благодаря процедурам и функциям при поддержке констант, типов данных и переменных, однако действительная реализация этих средств скрыта в силу того, что модуль разделен на две секции: интерфейса и реализации. Если программа использует модуль, то все описания модуля становятся доступными этой программе, как если бы они были определены в ней самой.

Структура модуля аналогична структуре программы, однако есть несколько существенных различий. Например, рассмотрим модуль:

unit <идентификатор>; interface uses <список модулей>; {Необязательный} {открытые описания} implementation {закрытые описания процедуры и функции } begin {код инициализации } end .

Заголовок модуля начинается зарезервированным словом unit, за которым следует имя модуля (идентификатор) точно так же, как и в случае имени программы. Следующим элементом в модуле является ключевое слово interface. Оно обозначает начало секции интерфейса модуля - секции, видимой всем другим модулям или программам, в которых он используется.

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

Стандартные модули

Файл TURBO.TPL содержит все стандартные пакеты, кроме Graph и пакетов совместимости (Graph3 и Turbo3): System, Overlay, Crt, Dos и Printer. Эти пакеты загружаются в память вместе с Турбо-Паскалем и всегда вам доступны. Обычно файл TURBO.TPL хранят в одном каталоге с TURBO.EXE (или TPC.EXE). Вы можете хранить его и в другом каталоге, если он описан как каталог Турбо-Паскаля. Для этого необходимо с помощью TINST.EXE установить этот каталог в файле TURBO.EXE.

Используемые пакеты: нет

System содержит все стандартные и встроенные процедуры и функции Турбо-Паскаля. Любая подпрограмма Турбо-Паскаля, не являющаяся частью стандартного Паскаля и не находящаяся ни в каком другом модуле, содержится в System. Этот модуль присоединяется ко всем программам.

Используемые пакеты: нет

DOS определяет многочисленные паскалевские процедуры и функции, которые эквивалентны наиболее часто используемым вызовам DOS, как например, GetТime, SetТime, DiskSize и так далее. Кроме того, он определяет две программы низкого уровня МsDos и Intr, которые позволяют активизировать любой вызов MS-DOS или системное прерывание. Registers представляет собой тип данных для параметра в МsDos и Intr. Кроме того, определяются некоторые другие константы и типы данных.

Используемые пакеты: нет

Overlay - содержит инструменты для создания оверлейных программ. Программа OVERKAY - программа, которая загружается не вся, а по частям.

Используемые пакеты: нет

Crt обеспечивает набор специфичных для РС описаний констант, переменных и программ для операций ввода/вывода. Последние можно использовать для работы с экраном (задание окон, непосредственное управление курсором, цвет текста и фона). Кроме того, Вы можете осуществлять "необработанный" ввод с клавиатуры и управлять платой генерации звукового сигнала персонального компьютера. Этот модуль обеспечивает множество подпрограмм, которые были стандартными в версии 3.0.

Используемые пакеты: Crt

В модуле Printer дано описание переменной текстового файла Lst, которая связывается с драйвером устройства, позволяющим направлять стандартный для Паскаля вывод на печатающее устройство с помощью Write и Writeln. Например, включив Printer в свою программу, Вы можете сделать следующее:

Write (Lst,"Сумма " ,A:4 ," и " ,B:4 ," равна " ) ; C:=A + B; Writeln (Lst,C:8 ) ;

Используемые пакеты: Crt

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

Используемые пакеты: Crt

Этот модуль содержит две переменные и несколько процедур, которые больше не поддерживаются Турбо-Паскалем. Они включают встроенную файловую переменную Кbd, булеву переменную CBreak и первоначальные целочисленные версии MemAvail и MaxAvail (которые возвращают размер свободной памяти в параграфах, а не в байтах, как это делают настоящие версии).

Используемые пакеты: Crt

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

Этот модуль реализует независимый от устройства графический драйвер фирмы "Борланд", позволяющий поддерживать графические адаптеры типа СGА, ЕGА, Hercules, АТТ 400, МСGА, 3270 РС и VGА.

Написание собственных модулей

Допустим, Вы написали модуль IntLib, записали его в файл INTLIВ.PAS и оттранслировали на диск; получившийся в результате код находится в файле INTLIВ.ТРU. Для использования этого модуля в программе необходимо включить в нее оператор uses, указывающий компилятору, какой модуль используется. Ваша программа может выглядеть следующим образом:

program MyProg; uses IntLib;

Отметим, что Турбо-Паскаль предполагает, что файл, в котором находится модуль, имеет такое же имя, что и сам модуль. Если имя Вашего модуля МyUtilities, то Турбо-Паскаль будет искать файл с именем МYUTILIТ.PAS.

Компиляция модуля

Модуль компилируется точно так же, как компилируется программа: он создается с помощью редактора, а затем вызывается команда Соmpile/Соmpile (Компилировать/ Компилировать) (или нажимаются клавиши Аlt-С). Однако, вместо файла с расширением.ЕХЕ Турбо-Паскаль создает файл с расширением.ТРU (Turbо Раscal Unit - модуль Турбо-Паскаля). После этого Вы можете оставить этот файл как есть или же вставить его в ТURВО.TPL с помощью TPUMOVER.ЕХЕ.

В любом случае имеет смысл переслать файлы с расширением *.ТРU (вместе с исходными файлами) в каталог модулей, который определен с помощью команды О/D/Unit directories (Каталоги модулей). В одном исходном файле может находиться только один модуль, поскольку компиляция прекращается, как только обнаружен завершающий оператор end.

Пример :

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

unit IntLib; interface procedure ISwap(var I,J: integer ) ; function IMax(I,J: integer ) : integer ; implementation procedure ISwap; var Temp: integer ; begin Temp:=I; I:=J; J:=Temp end ; {конец процедуры ISwap } function IMax; begin if I > J then IMax:=I else IMax:=J end ; {конец функции IMax } end . {конец модуля IntLib }

Введем эту подпрограмму, запишем ее в файл INTLIВ.PAS, а затем оттранслируем на диск. В результате получим код модуля в файле INTLIВ.ТРU. Перешлем его в каталог модулей. Следующая программа использует модуль IntLib:

program IntTest; uses IntLib; var A,B: integer ; begin Write ("Введите два целочисленных значения: " ) ; Readln (A,B) ; ISwap(A,B) ; Writeln ("A=" ,A," B=" ,B) ; Writeln ("Максимальное значение равно " ,IMax(A,B) ) ; end . {конец программы IntTest }

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