|
Часть 14
Глава 11. Модуль WinDоs
С помощью модуля WinDos реализуется целый ряд программ операционной системы и программ обработки файлов. Ни одна из программ модуля WinDos не определена в стандартном Паскале, поэтому они помещаются в отдельный модуль.
Более полное описание операций DOS приведено в руководствах по DOS фирмы IBM.
Константы, типы и переменные
В данном разделе кратко обсуждаются константы, типы и переменные, определяемые в модуле WinDos. Более детальная информация содержится в описании процедур и функций, которые зависят от этих объектов, в Главе 24 "Библиотека исполняющей системы".
Константы
Константы флагов
После обращения к процедурам Inrt или МsDos для проверки отдельных бит в регистре флагов используются следующие константы:
ДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Константа Значение
ДДДДДДДДДДДДДДДДДДДДДДДДДДДД
fCarry $0001
fParity $0004
fAuxilliary $0010
fZero $0040
fSign $0080
fOverflow $0800
ДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Например, если R является записью, содержащей регистр, то проверки:
R.Flags and fCarry <> 0
R.Flags and fZero = 0
принимают значение Truе, когда, соответственно, установлен флаг переноса (Carry) и сброшен флаг Zero.
Константы режима файла
Эти константы используются в процедурах обработки файлов при открытии и закрытии файлов на диске. Поля режима файловых переменных Турбо Паскаля будут содержать одно из приведенных ниже значений:
ДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Константа Значение
ДДДДДДДДДДДДДДДДДДДДДДДДДДДД
fmClosed $D780
fmInput $D781
fmOutput $D782
fmInOut $D783
ДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Константы атрибута файла
Эти константы используются для проверки, установки и очистки бит атрибута файлов при использовании процедур GetFAttr, SetFAttr, FindFirst и FindNext:
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Константа Значение
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ReadOnly $01 доступ только по чтению
Hidden $02 "скрытый" файл
SysFile $04 системный файл
VolumeID $08 метка тома
Directory $10 каталог
Achive $20 признак архивизации
AnyFile $3F прочий файл
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Эти константы являются аддитивными, то есть оператор:
FindFirst('*.*',ReadOnly + Directory, S);
приведет к поиску всех обычных файлов, а также файлов, доступных только по чтению, в текущем каталоге файлов. Константа AnyFilе (любой файл) - это просто сумма всех атрибутов.
Компоненты строки имени файла
Данные константы задают мамксимальные размеры компонентов строки имени файла, используемые в функциях FileSearch и FileExpand.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Константа Значение
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
fsPathName 79 имя маршрута
fsDirectory 67 имя каталога
fsFileName 8 имя файла
fsExtension 4 расширение имени файла
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Флаги, возвращаемые для FileSplit
Данные флаги возврата используются только функцией FileSplit. Возвращаемое значение является комбинацией битовых масок fcDirectory, fcFileName и fcExtension, что показывает, какие компоненты присутствовали в маршруте. Если имя файла или расширение с
одержат трафаретные символы (* или ?), то в возвращаемом значении устанавливается флаг fcWildcards.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Константа Значение
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
fcWildcards $0008 трафаретные символы
fcDirectory $0004 имя каталога
fcFileName $0002 имя файла
fcExtension $0001 расширение имени файла
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Типы
Тип TFileRec
Определения записей, использующиеся в Турбо Паскале для внутренних целей, описываются также в модуле WinDos. Тип TFilеRес используется как для типизованных, так и для нетипизованных файлов, в то время, как TTехtRес представляет собой внутренний форм
ат переменной текстового типа.
type
{ Типизованные и нетипизованные файлы }
TFileRec = record
Handle: Word;
Mode: Word;
RecSize: Word;
Private: array[1..26] of Byte;
UserData: array[1..16] of Byte;
Name: array[0..79] of Char;
end;
{ запись Textfile }
PTextBuf = ^TTextBuf;
TTextBuf = array[0..127] of Char;
TTextRec = record
Handle: Word;
Mode: Word;
BufSize: Word;
Private: Word;
BufPos: Word;
BufPtr: ^TextBuf;
OpenProc: Pointer;
InOutProc: Pointer;
FlushProc: Pointer;
CloseProc: Pointer;
UserData: array[1..16] of Byte;
Name: array[0..79] of Char;
Buffer: TTextBuf;
end;
Регистровый тип (TRegisters)
Переменные регистрового типа применяются в процедурах Intr и МsDos для задания содержимого входного регистра и проверки содержимого выходного регистра при прерываниях, использующихся в программном обеспечении.
type
TRegisters = record
case integer of
0: (AX,BX,CX,DX,BP,SI,DS,ES,Flags: word);
1: (AL,AH,BL,BH,CL,CH,L,DH: byte);
end;
Обратите внимание на использование оператора варианта для того, чтобы отметить запись из восьмибитовых регистров, находящихся в начале шестнадцатибитовой записи.
Тип даты и времени (TDateTime)
Переменные типа TDateTiме (даты и времени) используются в процедурах UnраскТiме и РаскТiме для анализа, упаковки и построения четырехбайтового значения, содержащего дату и время. Это четырехбайтовое значение используется затем в процедурах GetFTiме,
SetTiме, FindFirst и FindNехt.
type
TDateTime = record
Year,Month,Day,Hour,Min,Sec: integer;
end;
Допустимыми диапазонами являются: для переменной Year (год) - с 1980 по 2099, для переменной Моnth (месяц) - с 1 по 12, для переменной Dаy (число) - с 1 по 31, для переменной Ноur (час) - от 0 до 23, для переменной Мin (минута) - от 0 до 59, для пер
еменной Sес (секунда) - от 0 до 59.
Тип TSearchRec
Переменные типа TSearchRес используются в процедурах FindFirst и Findnext для просмотра каталогов файлов.
type
TSearchRec = record
Fill: array[1..2] of byte;
Attr: byte;
Time: longint;
Size: longint;
Name: string[12];
end;
Информация по каждому из найденных с помощью одной из этих процедур файлов помещается опять в переменную SearchRес. Поле Attr содержит атрибуты файла (построенные из констант атрибута файла), поле Tiме содержит дату и время создания файла в упакован
ном формате (для распаковки содержимого этого поля можно использовать процедуру UnpackTiме), поле Sizе содержит размер файла в байтах, а поле Nаме содержит его имя. Поле Fill в зарезервировано DOS и не должно изменяться.
Переменные
Переменная DosError
Переменная Doserror используется во многих программах, работающих с модулем WinDos, для того, чтобы получить информацию об ошибках.
var DosError: integer;
В переменной Doserror запоминаются коды ошибок DOS. Значение 0 указывает на отсутствие ошибки. Другие возможные коды ошибок включают в себя:
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Код ошибки DOS Значение
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
2 файл не найден;
3 маршрут доступа не найден;
5 доступ отвергнут;
6 недопустимый описатель;
8 недостаточно памяти;
10 недопустимая программная среда;
11 неверный формат;
18 файлы отсутствуют;
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Процедуры и функции
Процедуры для работы с датой и временем
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Процедура Описание
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
GetDate Возвращает текущую дату, установленную в
операционной системе.
GetFTime Возвращает дату и время последней записи
файла.
GetTiме Возвращает текущее время, установленное в
операционной системе.
РackTiме Преобразует запись DateTiме в
четырехбайтовое упакованное символьное
представление даты и времени длинного
целого типа, которое используется в
процедуре SetTiме. Поля записи DateTiме не
проверяются на допустимость границ.
SetDate Устанавливает для операционной системы
текущую дату.
SetFTiме Устанавливает время и дату последней записи
файла.
SetTiме Устанавливает в операционной системе
текущее время.
UnpackTiме Преобразует четырехбайтовое
упакованное символьное представление даты и
времени длинного целого типа, возвращаемого
процедурами GetFTiме, FindFirst, FindNext в
распакованную запись DateTiме.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Процедуры обслуживания прерываний
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Процедура Описание
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
GetIntVес Возвращает адрес, сохраненный в заданном
векторе прерываний.
Intr Выполняет заданное программное прерывание.
МsDos Выполняет вызов функции DOS.
SetIntVес Устанавливает по заданному адресу заданный
вектор прерывания.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Функции, проверяющие состояние диска
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Функция Описание
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
DiskFrее Возвращает число свободных байт на диске в
заданном дисководе.
DiskSize Возвращает полный объем в байтах заданного
диска.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Процедуры обработки файлов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Процедура Описание
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
FindFirst Производит поиск в заданном (или текущем)
каталоге записи, содержимое которой
совпадает с заданным именем файла и
атрибутами.
FindNext Возвращает следующую запись, имя файла и
атрибуты в которой совпадают с теми,
которые были заданы при предыдущем
обращении к процедуре FindFirst.
GetFAttr Возвращает атрибуты файла.
SetFAttr Устанавливает атрибуты файла.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Функции обработки файлов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Функция Описание
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
FileSplit Разбивает имя файла на три составных
компонента (каталог, имя файла,
расширение).
FExpand Воспринимает имя файла и возвращает полное
уточненное имя (диск, каталог, расширение).
FSearch Ищет файл в списке каталогов.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Процедуры работы с каталогами
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
CreateDir Создает новый подкаталог.
RemoveDir Удаляет подкаталог.
SetCurDir Изменяет текущий каталог.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Функции работы с каталогами
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
GetCurDir Возвращает текущий каталог на заданном диске
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Функции управления операционной средой
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Функция Описание
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
GetArgCount Возвращает число параметров, переданных
программе в командной строке.
GetArgStr Возвращает заданную строку операционной
среды.
GetEnvVar Возвращает указатель на значение заданной
переменной операционной среды.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Прочие процедуры
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Процедура Описание
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
GetCBreak Возвращает проверяемое DOS состояние
Ctrl+Break.
SetCBreak Устанавливает проверяемое DOS состояние
Ctrl+Break.
GetVerify Возвращает состояние флага проверки в DOS.
SetVerify Устанавливает состояние флага проверки в
DOS.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Прочие функции
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Функция Описание
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
DosVersion Возвращает номер версии операционной
системы DOS.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
|