Глава 16. Модуль Dоs
С помощью модулей Dos и WinDos реализуется целый ряд прог-
рамм операционной системы и программ обработки файлов. Ни одна из
программ модуля Dos не определена в стандартном Паскале, поэтому
они помещаются в отдельный модуль.
Более полное описание операций DOS приведено в руководствах
по DOS фирмы IBM.
Основное различие модулей Dos и WinDos состоит в том, что
процедуры и функции модуля Dos используют стандартные строки Пас-
каля, а процедуры и функции модуля WinDos - строки с завершающим
нулем. Стандартная строка Паскаля - это байт длины, за которым
следует последовательность символов. Строка с завершающим нулем -
это последовательность ненулевых символов с завершающим символом
NULL (#0).
Примечание: Подробнее о различии этих строк рассказы-
вается в Главе 18.
Если вы разрабатываете только программы Windows, используйте
модуль WinDos.
Если вы разрабатываете только программы DOS, то желательно
пользоваться в программах модулем Dos, так как большинство прог-
рамм Паскаля традиционно работают со строками Паскаля. Однако,
если вы разрабатываете приложения для среды Windows, то можете
написать программу, используемую в обеих платформах - DOS и
Windows, применяя для этого модули WinDos и Strings. Windows тре-
бует использования строк с завершающим нулем. Вы можете также
воспользоваться данными модулями, если у вас есть файл данных Си,
и вы хотите его конвертировать. В языке Си используются строки с
завершающим нулем.
Процедуры и функции модуля Dos
Ниже перечислены процедуры и функции модуля Dos. Чтобы ис-
пользовать их, вы должны ссылаться на модуль Dos с помощью опера-
тора программы uses. См. также Главу 1 ("Справочник по библиоте-
ке") в "Руководстве программиста".
Процедуры для работы с датой и временем
-------------------T--------------------------------------------
¦ Процедура ¦ Описание ¦
+------------------+--------------------------------------------+
¦ GetDate ¦ Возвращает текущую дату, установленную в¦
¦ ¦ операционной системе. ¦
+------------------+--------------------------------------------+
¦ GetFTime ¦ Возвращает дату и время последней записи¦
¦ ¦ файла. ¦
+------------------+--------------------------------------------+
¦ GetTiме ¦ Возвращает текущее время, установленное в¦
¦ ¦ операционной системе. ¦
+------------------+--------------------------------------------+
¦ РackTiме ¦ Преобразует запись DateTiме в четырехбайто-¦
¦ ¦ вое упакованное символьное представление¦
¦ ¦ даты и времени длинного целого типа, кото-¦
¦ ¦ рое используется в процедуре SetTiме. Поля¦
¦ ¦ записи DateTiме не проверяются на допусти-¦
¦ ¦ мость границ. ¦
+------------------+--------------------------------------------+
¦ SetDate ¦ Устанавливает для операционной системы те-¦
¦ ¦ кущую дату. ¦
+------------------+--------------------------------------------+
¦ SetFTiме ¦ Устанавливает время и дату последней записи¦
¦ ¦ файла. ¦
+------------------+--------------------------------------------+
¦ SetTiме ¦ Устанавливает в операционной системе теку-¦
¦ ¦ щее время. ¦
+------------------+--------------------------------------------+
¦ UnpackTiме ¦ Преобразует четырехбайтовое упакованной¦
¦ ¦ символьное представление даты и времени¦
¦ ¦ длинного целого типа, возвращаемого проце-¦
¦ ¦ дурами GetFTiме, FindFirst, FindNext в рас-¦
¦ ¦ пакованную запись DateTiме. ¦
L------------------+---------------------------------------------
Процедуры и функции обслуживания прерываний
-------------------T--------------------------------------------
¦ Процедура ¦ Описание ¦
+------------------+--------------------------------------------+
¦ GetIntVес ¦ Возвращает адрес, сохраненный в заданном¦
¦ ¦ векторе прерываний. ¦
+------------------+--------------------------------------------+
¦ Intr ¦ Выполняет заданное программное прерывание.¦
+------------------+--------------------------------------------+
¦ МsDos ¦ Выполняет вызов функции DOS. ¦
+------------------+--------------------------------------------+
¦ SetIntVес ¦ Устанавливает по заданному адресу заданный¦
¦ ¦ вектор прерывания. ¦
L------------------+---------------------------------------------
Функции, проверяющие состояние диска
-------------------T--------------------------------------------
¦ Фуннкция ¦ Описание ¦
+------------------+--------------------------------------------+
¦ DiskFrее ¦ Возвращает число свободных байт на диске в¦
¦ ¦ заданном дисководе. ¦
+------------------+--------------------------------------------+
¦ DiskSize ¦ Возвращает полный объем в байтах заданного¦
¦ ¦ диска. ¦
L------------------+---------------------------------------------
Процедуры обработки файлов
-------------------T--------------------------------------------
¦ Процедура ¦ Описание ¦
+------------------+--------------------------------------------+
¦ FExpand ¦ Воспринимает имя файла и возвращает полное¦
¦ ¦ уточненное имя (диск, каталог, расширение).¦
+------------------+--------------------------------------------+
¦ FSearch ¦ Ищет файл в списке каталогов. ¦
+------------------+--------------------------------------------+
¦ FindFirst ¦ Производит поиск в заданном (или текущем)¦
¦ ¦ каталоге записи, содержимое которой совпа-¦
¦ ¦ дает с заданным именем файла и атрибутами.¦
+------------------+--------------------------------------------+
¦ FindNext ¦ Возвращает следующую запись, имя файла и¦
¦ ¦ атрибуты в которой совпадают с теми, кото-¦
¦ ¦ рые были заданы при предыдущем обращении к¦
¦ ¦ процедуре FindFirst. ¦
+------------------+--------------------------------------------+
¦ GetFAttr ¦ Возвращает атрибуты файла. ¦
+------------------+--------------------------------------------+
¦ SetFAttr ¦ Устанавливает атрибуты файла. ¦
L------------------+---------------------------------------------
Функции управления операционной средой
-------------------T--------------------------------------------
¦ Функция ¦ Описание ¦
+------------------+--------------------------------------------+
¦ EnvCount ¦ Возвращает число строк, содержащихся в опе-¦
¦ ¦ рационной среде DOS. ¦
+------------------+--------------------------------------------+
¦ EnvStr ¦ Возвращает заданную строку операционной¦
¦ ¦ среды. ¦
+------------------+--------------------------------------------+
¦ GetEnv ¦ Возвращает значение заданной переменной¦
¦ ¦ операционной среды. ¦
L------------------+---------------------------------------------
Процедуры управления процессами
-------------------T--------------------------------------------
¦ Процедура ¦ Описание ¦
+------------------+--------------------------------------------+
¦ Eхесutе ¦ Выполняет заданную программу с указанной¦
¦ ¦ командной строкой. ¦
+------------------+--------------------------------------------+
¦ Keep ¦ Сохраняет (прекращает выполнение и сохраня-¦
¦ ¦ ет в памяти) прекратившую работу программу,¦
¦ ¦ оставляя ее резидентной в памяти. ¦
+------------------+--------------------------------------------+
¦ SwapVectors ¦ Меняет местами содержимое сохраненных век-¦
¦ ¦ торов прерываний и текущих векторов. ¦
L------------------+---------------------------------------------
Прочие процедуры и функции
-------------------T--------------------------------------------
¦Процедура/функция ¦ Описание ¦
+------------------+--------------------------------------------+
¦ DosVersion ¦ Возвращает номер версии операционной систе-¦
¦ ¦ мы DOS. ¦
+------------------+--------------------------------------------+
¦ GetCBreak ¦ Возвращает проверяемое DOS состояние¦
¦ ¦ Ctrl+Break. ¦
+------------------+--------------------------------------------+
¦ SetCBreak ¦ Устанавливает проверяемое DOS состояние¦
¦ ¦ Ctrl+Break. ¦
+------------------+--------------------------------------------+
¦ GetVerify ¦ Возвращает состояние флага проверки в DOS. ¦
+------------------+--------------------------------------------+
¦ SetVerify ¦ Устанавливает состояние флага проверки в¦
¦ ¦ DOS. ¦
L------------------+---------------------------------------------
Константы, типы и переменные модуля Dos
В данном разделе кратко обсуждаются константы, типы и пере-
менные, определяемые в модуле Dos. Более детальная информация со-
держится в разделе "Константы флагов" (значение FParity) в Главе
1 ("Справочник по библиотеке") "Справочного руководства програм-
миста".
Группы констант
-----------------------------T----------------------------------
¦ Группа констант ¦ Описание ¦
+----------------------------+----------------------------------+
¦ Флаги ¦ Используются для проверки отдель-¦
¦ ¦ ных флагов после вызова функций¦
¦ ¦ Intr или MsDos. Это флаги:¦
¦ ¦ FParity, FAuxiliary, FZero,¦
¦ ¦ FSign, FOverflow, fCarry. ¦
+----------------------------+----------------------------------+
¦ fmXXXX ¦ Определяет допустимые значения¦
¦ ¦ поля Mode записи TextRec тексто-¦
¦ ¦ вого файла: fmClosed, fmInput,¦
¦ ¦ fmOutput, fmInOut. ¦
+----------------------------+----------------------------------+
¦ Атрибуты файла ¦ Используются для построения ат-¦
¦ ¦ рибутов, применяемых в FindFirst,¦
¦ ¦ GetFAttr и SetFAttr. Это флаги¦
¦ ¦ ReadOnly, Hidden, SysFile,¦
¦ ¦ VolumeID, Directory, Archive,¦
¦ ¦ AnyFile. ¦
L----------------------------+-----------------------------------
Типы
В модуле Dos определяются следующие типы:
---------------------------T------------------------------------
¦ Тип ¦ Описание ¦
+--------------------------+------------------------------------+
¦ Тип записи файла ¦ Определения записей, использующие-¦
¦ ¦ ся в Borland Pascal для внутренних¦
¦ ¦ целей, описываются также в модуле¦
¦ ¦ Dos. Тип FilеRес используется как¦
¦ ¦ для типизованных, так и для нетипи-¦
¦ ¦ зованных файлов, в то время, как¦
¦ ¦ TехtRес представляет собой внутрен-¦
¦ ¦ ний формат переменной текстового¦
¦ ¦ типа. ¦
+--------------------------+------------------------------------+
¦ Registers ¦ Переменные регистрового типа приме-¦
¦ ¦ няются в процедурах Intr и МsDos¦
¦ ¦ для задания содержимого входного¦
¦ ¦ регистра и проверки содержимого вы-¦
¦ ¦ ходного регистра при прерываниях,¦
¦ ¦ использующихся в программном обес-¦
¦ ¦ печении. ¦
+--------------------------+------------------------------------+
¦ DateTime ¦ Переменные типа DateTiме (даты и¦
¦ ¦ времени) используются в процедурах¦
¦ ¦ UnраскТiме и РаскТiме для анализа,¦
¦ ¦ упаковки и построения четырехбайто-¦
¦ ¦ вого значения, содержащего дату и¦
¦ ¦ время. Это четырехбайтовое значение¦
¦ ¦ используется затем в процедурах¦
¦ ¦ GetFTiме, SetTiме, FindFirst и¦
¦ ¦ FindNехt. ¦
+--------------------------+------------------------------------+
¦ SearchRec ¦ Переменные типа SearchRес использу-¦
¦ ¦ ются в процедурах FindFirst и¦
¦ ¦ Findnext для просмотра каталогов¦
¦ ¦ файлов. ¦
+--------------------------+------------------------------------+
¦ Строковые типы ¦ Эти строковые типы определены в мо-¦
¦ работы с файлами ¦ дуле Dos и используются для работы¦
¦ ¦ с именами файлов и маршрутов при¦
¦ ¦ вызове строковой процедуры FSplit.¦
¦ ¦ Это типы ComStr, PathStr, DirStr,¦
¦ ¦ NameStr, ExtStr. ¦
L--------------------------+-------------------------------------
Переменные модуля Dos
Многими подпрограммами модуля Dos для сообщения об ошибке
используется переменная DosError.
Процедуры и функции модуля WinDos
Ниже перечислены процедуры и функции модуля WinDos. Чтобы
использовать их, вы должны ссылаться на модуль WinDos с помощью
оператора программы uses.
Процедуры для работы с датой и временем модуля WinDos
-------------------T--------------------------------------------
¦ Процедура ¦ Описание ¦
+------------------+--------------------------------------------+
¦ GetDate ¦ Возвращает текущую дату, установленную в¦
¦ ¦ операционной системе. ¦
+------------------+--------------------------------------------+
¦ GetFTime ¦ Возвращает дату и время последней записи¦
¦ ¦ файла. ¦
+------------------+--------------------------------------------+
¦ GetTiме ¦ Возвращает текущее время, установленное в¦
¦ ¦ операционной системе. ¦
+------------------+--------------------------------------------+
¦ РackTiме ¦ Преобразует запись DateTiме в четырехбайто-¦
¦ ¦ вое упакованное символьное представление¦
¦ ¦ даты и времени длинного целого типа, кото-¦
¦ ¦ рое используется в процедуре SetTiме. ¦
+------------------+--------------------------------------------+
¦ SetDate ¦ Устанавливает для операционной системы те-¦
¦ ¦ кущую дату. ¦
+------------------+--------------------------------------------+
¦ SetFTiме ¦ Устанавливает время и дату последней записи¦
¦ ¦ файла. ¦
+------------------+--------------------------------------------+
¦ SetTiме ¦ Устанавливает в операционной системе теку-¦
¦ ¦ щее время. ¦
+------------------+--------------------------------------------+
¦ UnpackTiме ¦ Преобразует четырехбайтовое упакованной¦
¦ ¦ символьное представление даты и времени¦
¦ ¦ длинного целого типа, возвращаемого проце-¦
¦ ¦ дурами GetFTiме, FindFirst, FindNext в рас-¦
¦ ¦ пакованную запись DateTiме. ¦
L------------------+---------------------------------------------
Процедуры обслуживания прерываний модуля WinDos
-------------------T--------------------------------------------
¦ Процедура ¦ Описание ¦
+------------------+--------------------------------------------+
¦ GetIntVес ¦ Возвращает адрес, сохраненный в заданном¦
¦ ¦ векторе прерываний. ¦
+------------------+--------------------------------------------+
¦ Intr ¦ Выполняет заданное программное прерывание.¦
+------------------+--------------------------------------------+
¦ МsDos ¦ Выполняет вызов функции DOS. ¦
+------------------+--------------------------------------------+
¦ SetIntVес ¦ Устанавливает по заданному адресу заданный¦
¦ ¦ вектор прерывания. ¦
L------------------+---------------------------------------------
Функции модуля WinDos, проверяющие состояние диска
-------------------T--------------------------------------------
¦ Фуннкция ¦ Описание ¦
+------------------+--------------------------------------------+
¦ DiskFrее ¦ Возвращает число свободных байт на диске в¦
¦ ¦ заданном дисководе. ¦
+------------------+--------------------------------------------+
¦ DiskSize ¦ Возвращает полный объем в байтах заданного¦
¦ ¦ диска. ¦
L------------------+---------------------------------------------
Процедуры работы с файлами модуля WinDos
-------------------T--------------------------------------------
¦ Процедура ¦ Описание ¦
+------------------+--------------------------------------------+
¦ FileExpand ¦ Воспринимает имя файла и возвращает полное¦
¦ ¦ уточненное имя (диск, каталог, расширение).¦
+------------------+--------------------------------------------+
¦ FileSearch ¦ Ищет файл в списке каталогов. ¦
+------------------+--------------------------------------------+
¦ FileSplit ¦ Разбивает полное имя файла на три компонен-¦
¦ ¦ та (диск, каталог, имя и расширение). ¦
+------------------+--------------------------------------------+
¦ FindFirst ¦ Производит поиск в заданном (или текущем)¦
¦ ¦ каталоге записи, содержимое которой совпа-¦
¦ ¦ дает с заданным именем файла и атрибутами.¦
+------------------+--------------------------------------------+
¦ FindNext ¦ Возвращает следующую запись, имя файла и¦
¦ ¦ атрибуты в которой совпадают с теми, кото-¦
¦ ¦ рые были заданы при предыдущем обращении к¦
¦ ¦ процедуре FindFirst. ¦
+------------------+--------------------------------------------+
¦ GetFAttr ¦ Возвращает атрибуты файла. ¦
+------------------+--------------------------------------------+
¦ SetFAttr ¦ Устанавливает атрибуты файла. ¦
L------------------+---------------------------------------------
Процедуры и функции для работы с каталогами
-------------------T--------------------------------------------
¦ Процедура/функция¦ Описание ¦
+------------------+--------------------------------------------+
¦ CreateDir ¦ Создает новый подкаталог. ¦
+------------------+--------------------------------------------+
¦ GetCurDir ¦ Возвращает текущий каталог на заданном дис-¦
¦ ¦ ке. ¦
+------------------+--------------------------------------------+
¦ RemoveDir ¦ Удаляет подкаталог. ¦
+------------------+--------------------------------------------+
¦ SetCurDir ¦ Изменяет текущий каталог. ¦
L------------------+---------------------------------------------
Процедуры и функции обслуживания прерываний модуля WinDos
-------------------T--------------------------------------------
¦ Процедура ¦ Описание ¦
+------------------+--------------------------------------------+
¦ GetArgCount ¦ Возвращает число параметров, переданных¦
¦ ¦ программе в командной строке. ¦
+------------------+--------------------------------------------+
¦ GetArgStr ¦ Возвращает заданный аргумент командной¦
¦ ¦ строки. ¦
+------------------+--------------------------------------------+
¦ GetEnvVar ¦ Возвращает указатель на значение заданной¦
¦ ¦ переменной операционной среды. ¦
L------------------+---------------------------------------------
Прочие процедуры и функции модуля WinDos
-------------------T--------------------------------------------
¦Процедура/функция ¦ Описание ¦
+------------------+--------------------------------------------+
¦ DosVersion ¦ Возвращает номер версии операционной систе-¦
¦ ¦ мы DOS. ¦
+------------------+--------------------------------------------+
¦ GetCBreak ¦ Возвращает проверяемое DOS состояние¦
¦ ¦ Ctrl+Break. ¦
+------------------+--------------------------------------------+
¦ SetCBreak ¦ Устанавливает проверяемое DOS состояние¦
¦ ¦ Ctrl+Break. ¦
+------------------+--------------------------------------------+
¦ SetVerify ¦ Устанавливает состояние флага проверки в¦
¦ ¦ DOS. ¦
L------------------+---------------------------------------------
Константы, типы и переменные модуля WinDos
В данном разделе кратко обсуждаются константы, типы и пере-
менные, определяемые в модуле WinDos. Более детальная информация
содержится в разделе "Константы флагов" (значение FParity) в Гла-
ве 1 ("Справочник по библиотеке") "Справочного руководства прог-
раммиста".
Группы констант
-----------------------------T----------------------------------
¦ Группа констант ¦ Описание ¦
+----------------------------+----------------------------------+
¦ Флаги ¦ Используются для проверки отдель-¦
¦ ¦ ных флагов после вызова функций¦
¦ ¦ Intr или MsDos. Это флаги:¦
¦ ¦ FParity, FAuxiliary, FZero,¦
¦ ¦ FSign, FOverflow, fCarry. ¦
+----------------------------+----------------------------------+
¦ fmXXXX ¦ Определяет допустимые значения¦
¦ ¦ поля Mode записи TextRec тексто-¦
¦ ¦ вого файла: fmClosed, fmInput,¦
¦ ¦ fmOutput, fmInOut. ¦
+----------------------------+----------------------------------+
¦ faXXXX ¦ Используются для построения ат-¦
¦ ¦ рибутов, их проверки и изменения¦
¦ ¦ в процедурах и функциях работы с¦
¦ ¦ файлами. Это константы faHidden,¦
¦ ¦ faSysFile, faVolumeID, faDirecto-¦
¦ ¦ ry, faArchive, faAnyFile. ¦
+----------------------------+----------------------------------+
¦ fsXXXX ¦ Максимальные длины компонентов¦
¦ ¦ имени файла, используемых в под-¦
¦ ¦ программах FileSearch и File-¦
¦ ¦ Expand. Это константы: fsPathNa-¦
¦ ¦ me, fsDirectory, fsFileName,¦
¦ ¦ fsExtension. ¦
+----------------------------+----------------------------------+
¦ fcXXXX ¦ Флаги, возвращаемые функцией¦
¦ ¦ FileSplit: fcExtension, fcFile-¦
¦ ¦ Name, fcDirectory, fcWildcards. ¦
L----------------------------+-----------------------------------
Типы
В модуле WinDos определяются следующие типы:
---------------------------T------------------------------------
¦ Тип ¦ Описание ¦
+--------------------------+------------------------------------+
¦ Тип записи файла ¦ Определения записей, использующие-¦
¦ ¦ ся в Borland Pascal для внутренних¦
¦ ¦ целей, описываются также в модуле¦
¦ ¦ Dos. Тип TFilеRес используется как¦
¦ ¦ для типизованных, так и для нетипи-¦
¦ ¦ зированных файлов, в то время, как¦
¦ ¦ TTехtRес представляет собой внут-¦
¦ ¦ ренний формат переменной текстового¦
¦ ¦ типа. ¦
+--------------------------+------------------------------------+
¦ TRegisters ¦ Переменные регистрового типа приме-¦
¦ ¦ няются в процедурах Intr и МsDos¦
¦ ¦ для задания содержимого входного¦
¦ ¦ регистра и проверки содержимого вы-¦
¦ ¦ ходного регистра при прерываниях,¦
¦ ¦ использующихся в программном обес-¦
¦ ¦ печении. ¦
+--------------------------+------------------------------------+
¦ TDateTime ¦ Переменные типа TDateTiме (даты и¦
¦ ¦ времени) используются в процедурах¦
¦ ¦ UnраскТiме и PаскТiме для анализа,¦
¦ ¦ упаковки и построения четырехбайто-¦
¦ ¦ вого значения, содержащего дату и¦
¦ ¦ время. Это четырехбайтовое значение¦
¦ ¦ используется затем в процедурах¦
¦ ¦ GetFTiме, SetTiме, FindFirst и¦
¦ ¦ FindNехt. ¦
+--------------------------+------------------------------------+
¦ TSearchRec ¦ Переменные типа TSearchRес исполь-¦
¦ ¦ зуются в процедурах FindFirst и¦
¦ ¦ Findnext для просмотра каталогов¦
¦ ¦ файлов. ¦
L--------------------------+-------------------------------------
Переменные модуля WinDos
Многими подпрограммами модуля WinDos для сообщения об ошибке
используется переменная DosError.
Назад | Содержание | Вперед