Процедуры и функции модуля DOS
DiskFree
DiskSize
DosExitCode
DosVersion
EnvCount
EnvStr
Exec
FExpand
FindFirst
FindNext
FSearch
FSplit
GetCBreak
GetDate
GetEnv
GetFAttr
GetFTime
GetIntVec
GetTime
GetVerify
Intr
Keep
MsDos
PackTime
SetCBreak
SetDate
SetFAttr
SetFTime
SetIntVec
SetTime
SetVerify
SwapVectors
UnpackTime
Функция DiskFree
Возвращает количество свободных байтов указанного диска.
Объявление:
function DiskFree(Drive: Byte): Longint;
Замечания:
Переменная
Drive – это диск для проверки, где
A = 1, B = 2 и т.д.
Если
Drive = 0, то используется текущий диск.
Функция
DiskFree может оказаться полезной для определения
наличия свободного места на диске.
Пример:
uses
Dos;
begin
if (DiskFree(0) < 100000)
and IsFixed(0)
then
begin
WriteLn('Недостаточно места на диске');
Halt(1);
end;
...
end.
См. также:
DiskSize
Функция DiskSize
Возвращает общий размер свободного места на диске, в байтах.
Объявление:
function DiskSize(Drive: Byte): Longint;
Переменная
Drive – это диск для проверки, где
A = 1, B = 2
и т.д. Если
Drive = 0, то используется текущий диск.
Пример:
size := DiskSize(0); // размер текущего диска
size := DiskSize(3); // размер диска C:
См. также:
DiskFree
Функция DosExitCode
Возвращает код выхода из подпроцесса.
Объявление:
function DosExitCode: Word;
См. также:
Exec
Функция DosVersion
Возвращает версию DOS.
Объявление:
function DosVersion: Word;
Функция EnvCount
Возвращает количество строк, содержащихся в системном окружении.
Объявление:
function EnvCount: Integer;
См. также:
EnvStr
GetEnv
Функция EnvStr
Возвращает указанную строку окружения.
Объявление:
function EnvStr(Index: Integer): string;
Замечания:
Переменная
Index – это номер переменной окружения, например,
первая переменная – это 1, вторая – 2 и т.д. Неправильный индекс
возвращает пустую строку.
Функция
EnvStr возвращает строку в форме (VarName=String).
Если порядок переменных системного окружения неизвестен, то используют
функцию
GetEnvto для поиска переменной по имени.
Пример:
uses
Dos;
var
i : Integer;
begin
for i := 1
to EnvCount
do
WriteLn(EnvStr(i));
end.
См. также:
EnvCount
GetEnv
Процедура Exec
Выполняет указанную программу с указанной командной строкой.
Объявление:
procedure Exec(Path, CmdLine: string);
Замечания:
Переменная
Path – это диск, директория и имя программы для
выполнения. Переменная
CmdLine содержит аргументы командной строки.
Процедура
Exec передает управление программе, указанной в
переменной
Path. При этом распределение памяти не изменяется.
После завершения процедуры
Exec используйте функцию
DosExitCode
для определения кода выхода из программы. Процедура
Exec также
устанавливает значение переменной
DosError, если случается ошибка.
Процедура
Exec не выполняет программы, которые требуют
Блок Управления Файлом - File Control Blocks (FCB).
Пример:
begin
Exec('PROGRAM.EXE','');
WriteLn(Hi(DosExitCode),'.', Lo(DosExitCode),'.',DosError);
end.
См. также:
DosExitCode
Функция FExpand
Преобразует имя файла в полный путь к файлу.
Объявление:
function FExpand(Path: PathStr): PathStr;
Процедура FindFirst
Ищет указанный каталог8 для соответствующего файла.
Объявление:
procedure FindFirst(Path: PChar; Attr: Word; var F: TSearchRec);
Замечания:
Переменная
Path – это диск и каталог, в котором будет
выполняться поиск и имя файла для поиска. Шаблоны следующие, например,
'MYFILE??.*'.
Переменная
Attr содержит атрибуты файла для включения в поиск в
добавление ко всем нормальным файлам.
Процедура
FindFirst используется совмествно с процедурой
FindNext. Используйте
FindNext для размещения каких-либо
дополнительных файлов, соответствующих критериям поиска. Все ошибки
записываются в переменную
DosError, которая определена в модуле DOS.
См. также:
FSearch
Пример:
program
DirList;
uses Dos;
var
TotalDirCnt: Longint;
procedure List(Path :
string);
var
DirSearchRec: SearchRec;
begin
if (Path[Length(Path)] <> '\')
then Path := Path + '\';
FindFirst(Path + '*.*', AnyFile, DirSearchRec);
while DosError = 0
do
begin
if (DirSearchRec.Name <> '.')
and (DirSearchRec.Name <> '..')
and
((DirSearchRec.Attr
and Directory) <> 0)
then
begin
Inc(TotalDirCnt);
Writeln(Path + DirSearchRec.Name);
List(Path + DirSearchRec.Name);
end;
FindNext(DirSearchRec) ;
end;
end;
begin
TotalDirCnt := 0;
List('C:\');
Writeln;
Writeln('Общее количество директорий = ', TotalDirCnt);
end.
Процедура FindNext
Находит следующее вхождение, которое соответствует имени и атрибутам,
указанным в предварительно вызванной процедуре
FindFirst.
Объявление:
procedure FindNext(var F: TSearchRec);
Замечания:
Процедура
FindNext используется совместно с процедурой
FindFirst. Используйте
FindNext для размещения
каких-либо дополнительных файлов, соответствующих критериям поиска,
предварительно определенных для процедуры
FindFirst. Переменная
F должна быть той же самой переменной, которая была
использована для ввода в
FindFirst. Все ошибки записываются в
переменную
DosError, которая определена в модуле DOS.
Пример:
uses
Dos;
var
DirRec : SearchRec;
begin
FindFirst('C:/*.*',AnyFile,DirRec);
while DosError = 0
do
WriteLn(DirRec.Name);
FindNext(DirRec);
end;
end.
См. также:
FSearch
Функция FSearch
Поиск файла.
Объявление:
function FSearch(Path: PathStr; DirList: string): PathStr;
Замечания:
Переменная
Path имеет тип
PathStr, который определен в
модуле DOS. Переменная
DirList – это список директорий,
разделенных точкой с запятой (;), которые будут включены в поиск.
Функция
FSearch возвращает каталог и имя файла, если файл
существует. Если файл, указанный в переменной
Path, не найден в
списке директорий, то возвращается пустая строка. Функция
FSearch
всегда начинает поиск с текущей директории, а затем проверяет
директории, перечисленные в переменной
DirList в том порядке, в
котором они перечислены.
Пример:
uses
Dos, Strings;
var
DosPath,
TreePath:
String;
File : PathStr;
begin
DosPath := GetPath;
File := 'TREE.COM';
TreePath:= FSearch(File, DosPath);
if Empty(TreePath)
then Halt(1);
TreePath := AppendBKSlash(TreePath);
Exec(TreePath + File,'');
end.
См. также:
FindFirst
FExpand
FSplit
Процедура FSplit
Разделяет имя файла на три компонента.
Объявление:
procedure FSplit(Path: PathStr; var Dir: DirStr;
var Name: NameStr; var Ext: ExtStr);
Замечания:
Используйте эту процедуру для разделения полного имени файла на три
компонента: путь, имя файла и расширение файла. Переменная
Path
имеет тип
PathStr, который определен в модуле DOS. Переменная
Dir возвращает путь или часть переменной
Path, которая
содержит каталог (или каталоги). Переменная
Name возвращает
фактическое имя файла без расширения. Переменная
Ext возвращает
расширение файла, которому предшествует точка (.).
Возможно, что один или более компонентов вернутся пустыми. Это может
случиться, если переменная
Path не содержит этих компонентов.
Например, в том случае, если в переменной
Path указан пустой каталог.
Пример:
uses
Dos;
var
Fi : File;
Direc : DirStr;
Fname : NameStr;
Exten : ExtStr;
begin
FSplit(ParamStr(1), Direc, Fname, Exten);
if Fname = ''
then Halt(1);
Assign(Fi, ParamStr(1));
Erase(Fi);
end.
Процедура GetCBreak
Возвращает состояние проверки
Ctrl-Break в DOS.
Объявление:
procedure GetCBreak(var Break: Boolean);
Замечания:
Возвращает TRUE, если
Ctrl-Break включена, иначе возвращает FALSE.
С включенной проверкой
Ctrl-Break c все вызовы ввода/вывода
(консоль, принтер и коммуникации) являются проверяемыми. Чтобы
выключить
Ctrl-Break, используйте процедуру
SetCBreak.
Процедура GetDate
Возвращает текущую дату, установленную в операционной системе.
Объявление:
procedure GetDate(var Year, Month, Day, DayOfWeek: Word);
Функция GetEnv
Возвращает значение указанной переменной окружения.
Объявление:
function GetEnv(VarName: string): string;
Замечания:
VarName – имя переменной для поиска. Если
VarName не
существует как переменная окружения, то возвращается пустая строка.
Функция
GetEnv возвращает строку, назначенную для переменой окружения.
Пример:
s := GetEnv('COMSPEC'); // Возвращает COMSPEC
Процедура GetFAttr
Возвращает атрибуты файла.
Объявление:
procedure GetFAttr(var F; var Attr: Word);
Замечания:
F – это файловая переменная, а также типизированный,
нетипизированный или текстовый файл, который не открыт. Переменная
Attr содержит атрибуты файла.
Файл, связываемый с переменной
F, должен быть закрыт.
Переменная
Attr должна сравниваться с одной из констант
атрибутов, которые определены в модуле DOS, с помощью ЛОГИЧЕСКОГО И (AND).
Ошибки записываются в переменную
DosError, которая определена в
модуле DOS. Для большей информации о файловых атрибутах обращайтесь к
справочному руководству по вашей DOS.
Пример:
uses
Dos;
var
Fi : Text;
Attr: Word;
begin
Assign(Fi,'THEFILE.DOC');
GetFAttr(Fi, Attr);
if (Attr
and ReadOnly) <> 0
then SetFAttr(Fi,(Attr
xor ReadOnly));
end.
См. также:
SetFAttr
Процедура GetFTime
Возвращает дату и время последнего изменения файла.
Объявление:
procedure GetFTime(var F; var Time: Longint);
Замечания:
Файл, связанный с переменной
F должен быть открыт. Время может
быть распаковано с помощью процедуры
UnPackTime. Ошибки
записываются в переменную
DosError, которая определена в модуле DOS.
Пример:
uses
Dos;
var
Fi : Text;
Time: Longint;
DT : DateTime;
begin
Assign(Fi, 'DATA.BAK');
Reset(Fi);
GetFTime(Fi, Time);
UnPackTime(Time, DT);
WriteLn('Year: ', DT.Year);
WriteLn('Month: ', DT.Month);
WriteLn('Date: ', DT.Day);
Close(Fi);
end.
См. также:
SetFTime
Процедура GetIntVec
Возвращает адрес, записанный в указанном векторе прерывания.
Объявление:
procedure GetIntVec(IntNo: Byte; var Vector: Pointer);
procedure GetIntVec(IntNo: Byte; var Vector: FarPointer);
Замечания:
Учтите, что процедура
GetIntVec возвращает адрес прерывания
защищенного режима. Чтобы получить вектор прерывания реального режима,
используйте процедуру
GetRealIntVec. Прерывания могут
происходить в защищенном или реальном режиме.
Смю также:
SetIntVec
FarPointer
Процедура GetTime
Возвращает текущее время, установленное в операционной системе.
Объявление:
procedure GetTime(var Hour, Minute, Second, Sec100: Word);
Замечания:
Диапазоны возвращаемых значений следующие:
Hour (Час) [0..23],
Minute (Минута) [0..59], Second (Секунда) [0..59] и
Sec100 (сотая доля секунды) [0..99].
Пример:
var
Hour, Minute, Second, Sec100: Word;
begin
GetTime(Hour, Minute, Second,Sec100);
WriteLn('Текущее время: ', Hour, ':', Minute, ':', Second, ':', Sec100);
end.
См. также:
SetTime
Процедура GetVerify
Возвращает состояние проверочного флага в DOS.
Объявление:
procedure GetVerify(var State: Boolean);
Замечания:
State = TRUE, если проверочный флаг DOS включен, иначе FALSE.
С включенным проверочным флагом DOS все выводимые на диск данные
проверяются на целостность. Иначе выводимые данные не проверяются.
Чтобы установить состояние проверочного флага DOS, используйте
процедуру
SetVerify.
Процедура Intr
Выполняет указанное программное прерывание.
Объявление:
procedure Intr(IntNo: Byte; var Regs: TRegisters);
Замечания:
Перед вызовом процедуры
Intr, загрузите переменную
Regs
соответствующими параметрами, необходимыми для прерывания. Переменная
Regs возвращает значения регистров после вызова прерывания.
Вызовы, которые используют регистры ESP и SS не могут быть выполнены.
Более подробную информацию о программных прерываниях ищите в
руководствах на ваши BIOS и DOS.
Учтите, что все сегментные регистры (DS,ES,FS,GS) должны содержать
допустимые значения сегментных дескрипторов или быть установлены в
ноль перед вызовом процедуры
Intr. Все прерывания, вызов
которых требует анализа смещения, должны использовать 32-битное смещение.
Пример:
uses
Dos;
function GetVideoMode: Byte;
var
Regs: Registers;
begin
Regs.AX := $0F00;
Regs.DS := DSeg; Regs.ES := 0;
Regs.FS := 0; Regs.GS := 0;
Intr($10, Regs);
GetVideoMode := Regs.Al;
end.
Процедура Keep
Эта процедура является только составляющей частью и всегда выдает сообщение об ошибке во время выполнения.
Объявление:
procedure Keep(ExitCode: Word);
Процедура MsDos
Выполняет вызов функции DOS.
Объявление:
procedure MsDos(var Regs: TRegisters);
Замечания:
Загрузите переменную
Regs соответствующими параметрами перед
вызовом MS-DOS. Переменная
Regs возвращает значения регистров
после вызова прерывания. Учтите, что тип
TRegisters позволяет
доступ к 32-битным регистрам. Вызовы DOS, которые используют регистры
ESP и SS не могут быть выполнены. Для прерывания, отличного от $21,
используйте процедуру
Intr. Более подробную информацию о
программных прерываниях DOS ищите в руководствах на вашу DOS.
Учтите, что все сегментные регистры (DS,ES,FS,GS) должны содержать
допустимые значения сегментных дескрипторов или быть установлены в
ноль для использования MS-DOS.
Пример:
uses
Dos;
procedure DispString(DispStr:
String);
var
Regs : Registers;
begin
DispStr := DispStr + #0;
Regs.AX := $0900;
Regs.EDX:= DWord(@DispStr) + 1;
Regs.DS := DSeg;
Regs.ES := 0;
Regs.FS := 0;
Regs.GS := 0;
MsDos(Regs);
end.
Процедура PackTime
Преобразует запись
DateTime.
Объявление:
procedure PackTime(var T: DateTime; var Time: Longint);
Замечания:
Процедура
PackTime может быть использована совместно с
процедурой
SetFTime. Для распаковки 4-х байтового пакета
дата/время в запись
DateTime используйте процедуру
UnpackTime.
Процедура SetCBreak
Устанавливает состояние проверки
Ctrl-Break.
Объявление:
procedure SetCBreak(Break: Boolean);
Замечания:
С включенной проверкой
Ctrl-Break, проверяются все вызовы
операций ввода/вывода (консоль, принтер и коммуникации). Чтобы
получить состояние
Ctrl-Break, используйте процедуру
GetCBreak.
Процедура SetDate
Устанавливает текущую дату в операционной системе.
Объявление:
procedure SetDate(Year, Month, Day: Word);
Замечания:
Неправильная дата игнорируется операционной системой. Для получения
текущей даты используйте процедуру
GetDate.
Процедура SetFAttr
Устанавливает атрибуты файла.
Объявление:
procedure SetFAttr(var F; Attr: Word);
Замечания:
Файл, связанный с переменной
F должен быть закрыт. Переменная
Attr должна быть сформирована с помощью операции ЛОГИЧЕСКОЕ ИЛИ (OR)
между этой переменной и одной из констант файловых атрибутов.
Эти константы определенны в модуле DOS.
Ошибки записываются в переменную
DosError, определенную в
модуле DOS. Более подробную информацию о файловых атрибутах ищите в
руководствах на вашу DOS.
Пример:
uses
Dos;
var
Fi : File;
Attr: Word;
begin
Assign(Fi, 'SECRET.DOC');
Attr := Hidden or ReadOnly;
SetFAttr(Fi, Attr);
WriteLn('Файл SECRET.DOC является скрытым.');
end.
См. также:
GetFAttr
Процедура SetFTime
Устанавливает дату и время последнего изменения файла.
Объявление:
procedure SetFTime(var F; Time: Longint);
Замечания:
Файл, связанный с переменной
F должен быть открыт. Упакованный
формат дата/время может быть создан с помощью процедуры
PackTime.
Ошибки записываются в переменную
DosError, определенную в
модуле DOS. Более подробную информацию об упакованном формате
дата/время ищите в руководствах на вашу DOS.
Пример:
uses
Dos;
var
Fi : Text;
DT : DateTime;
Time: Longint;
begin
Assign(Fi, 'FUTURE.DOC');
Reset(Fi);
with DT
do begin
Year := 2010;
Month := 3;
Day := 31;
Hour := 2;
Min := 45;
Sec := 22;
end;
PackTime(DT, Time);
SetFTime(Fi, Time);
Close(Fi);
end.
Процедура SetIntVecs
Устанавливает указанный вектор прерывания для указанного адреса.
Объявление:
procedure SetIntVec(IntNo: Byte; Vector: Pointer);
procedure SetIntVec(IntNo: Byte; Vector: FarPointer);
Замечания:
Прерывания могут происходить в защищенном или реальном режиме.
Пример:
program
Timer;
uses Dos, Crt;
var Int1CSave: FarPointer;
Time : LongInt;
// обработчик таймера
procedure TimerHandler(eip,eax,ecx,edx,ebx,esp,ebp,esi,edi: Dword;
gs,fs,es: Word);
interrupt;
var StoreX, StoreY: Word;
begin
Inc(time);
Store X:= WhereX;
Store Y:= WhereY;
GotoXY(1,1);
Write(time);
GotoXY(StoreX, StoreY);
Port[$20] := $20;
end;
// основная программа
begin
ClrScr;
Time := 0;
GetIntVec($1C, Int1CSave);
SetIntVec($1C, @TimerHandler);
Writeln;
Writeln('Напечатайте что-нибудь. Нажмите "ENTER" для выхода');
Readln;
SetIntVec($1C, Int1CSave);
end.
См. также:
GetIntVec
FarPointer
Процедура SetTime
Устанавливает текущее время в операционной системе.
Объявление:
procedure SetTime(Hour, Minute, Second, Sec100: Word);
Замечания:
Неправильное значение игнорируется. Для получения текущего времени
операционной системы используйте процедуру
GetTime.
Процедура SetVerify
Устанавливает состояние флага проверки в DOS.
Объявление:
procedure SetVerify(Verify: Boolean);
См. также:
GetVerify
Процедура SwapVectors
Процедура
SwapVectors ничего не делает и предоставляется только
для совместимости с Borland Pascal.
Объявление:
procedure SwapVectors;
Процедура UnpackTime
Преобразует переменную типа
Longint в запись.
Объявление:
procedure UnpackTime(Time: Longint; var DataTime: TDateTime);
Замечания:
Процедура
UnPackTime может быть использована совместно с
процедурами
GetTime, FindFirst и
FindNext. Эти процедуры
возвращают время в 4-х байтном упакованном формате дата/время. Для
упаковки записи
DateTime используйте процедуру
PackTime.
Пример:
uses
Dos;
var
Fi : Text;
Time: Longint;
DT : DateTime;
begin
Assign(Fi,'USER.DOC');
Reset(Fi);
GetFTime(Fi,Time);
UnPackTime(Time,DT);
WriteLn('Год: ',DT.Year);
WriteLn('Месяц: ',DT.Month);
WriteLn('Дата: ',DT.Day);
Close(Fi);
end.