Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Паскаль / tp3 / tp3 / 12

.doc
Скачиваний:
17
Добавлен:
10.12.2013
Размер:
59.9 Кб
Скачать

Глава 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.

─────────────────────────────────────────────────────────────────

Соседние файлы в папке tp3