                             ГЛАВА 11.

                            МОДУЛЬ DOS.

     Модуль Dos реализует ряд очень полезных  программ операционной
системы  и  обработки  файлов.  Ни  одна  из программ модуля Dos не
определена стандартом Паскаля и поэтому они размещены в собственном
модуле.
     Для полного описания операций DOS обращайтесь  к  техническому
руководству по IBM DOS.


                   Константы, типы и переменные.

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


                            Константы.

                         Константы флагов.

     Следующие константы используются для проверки  отдельных битов
флага в регистре Flags после вызова Intr или MSDOS:

      ————————————————————————
      константа       значение
      ————————————————————————
        FCarry        $0001
        FParity       $0004
        FAuxiliary    $0010
        FZero         $0040
        FSign         $0080
        FOverFlow     $0800
      ————————————————————————

     Например, если R - запись типа регистр, то тест

     R.Flags and FCarry <> 0
     R.Flags and FZero = 0

     равен true соответственно, если Carry флаг установлен и если
Zero флаг сброшен.


                      Константы режима файла.

     Эти константы  используются процедурами обработки файлов,  при
открытии  и  закрытии  дисковых  файлов.  Поля   режимов   файловых
переменных Turbo Pascal будут содержать одно из значений, указанных
ниже:

     ————————————————————————
     константа     значение
     ————————————————————————
      fmClosed       $D7B0
      fmInput        $D7B1
      fmOutput       $D7B2
      fmInOut        $D7B3
     ————————————————————————


                    Константы атрибутов файла.

     Эти константы используются для проверки,  установки и  очистки
битов   файловых   атрибутов   в   процедурах  GetFAttr,  SetFAttr,
FindFirst, FindNext:

        ————————————————————————
        константа     значение
        ————————————————————————
          ReadOnly        $01
          Hidden          $02
          SysFile         $04
          VolumeID        $08
          Directory       $10
          Archive         $20
          AnyFile         $3F
        ————————————————————————

     Эти константы  можно  суммировать,  так,  например,   оператор
FindFirst ('*.*', ReadOnly+Directory,S); будет искать файлы "только
для чтения"  и  подсправочники  в  текущем  справочнике.  Константа
AnyFile - это просто сумма всех атрибутов.


                               Типы.

                      Типы файловых записей.

     Определения записей,  используемых  внутренне  Turbo   Pascal,
также определены   в   модуле   Dos.   FileRec   используется   для
типированных и нетипированных файлов, а TextRec - внутренний формат
файловой переменной типа Тext.

     type
        {типированные и нетипированные файлы}
        FileRec = record
           Handle   : Word;
           Mode     : Word;
           RecSize  : Word;
           Private  : array [1..6] of Byte;
           UserData : array [1..16] of Byte;
           Name     : array [0..79] of Char;
        end;

        {запись для текстовых файлов}
        TextBuf = array [0..127] of Char;
        TextRec = record
           Handle    : Word;
           Mode      : Word;
           BufSize   : Word;
           Private   : Word;
           BufPos    : Word;
           BufEnd    : Word;
           BufPtr    : ^TextBuf;
           OpenFunc  : Pointer;
           InOutFunc : Pointer;
           FlushFunc : Pointer;
           CloseFunc : Pointer;
           UserData  : array [1..16] of Byte;
           Name      : array [0..79] of Char;
           Buffer    : TextBuf;
        end;


                          Тип Registers.

     Переменные типа  Registers  используются  процедурами  Intr  и
MSDos  для  указания  содержимого  входного  значения  регистров  и
проверки выходного    содержимого    регистров   для   программного
прерывания.

     type
        Registers = record
           case Integer of
              0: (AX, BX, CX, DX, BP, SI, DI, DS, ES, Flags: Word);
              1: (AL, AH, BL, BH, CL, CH, DL, DH: Byte);
           end;

     Заметим, что  можно  пользоваться  одновременно и 8-ми и 16-ти
битовыми регистрами.


                           Тип DataTime.

     Переменные типа    DataTime   используются   в   сочетании   с
процедурами UnpacTime и PackTime для проверки и создания 4-байтовых
упакованных   значений   даты  и  времени  в  процедурах  GetFTime,
SetFTime, FindFirst и FindNext.

      type
         DataTime = record
            Year, Month, Day, Hour, Min, Sec: Integer;
         end;

     Дипазон  допустимых  значений:Year  1980..2099, Month 1..12,
Day 1..31, Hour 0..23, Min 0..59, Sec 0..59.


                          Тип SearchRec.

     Переменная типа SearchRec используется процедурами FindFirst и
FindNext для просмотра справочников.

      type
         SearchReс = record
            File: array[1..21] of Byte;
            Attr: Byte;
            Time: Longint;
            Size: Longint;
            Name: String[12];
         end;

     Информация, найденная   для   каждого   файла  одной  из  этих
процедур,  возвращается в SearchRec.  Поле Attr  содержит  атрибуты
файла (сформировано   из   констант   атрибутов  ),  Time  содержит
упакованные   время   и   дату    (используйте    UnpackTime    для
распаковки), Size  содержит  размер  файла в байтах и Name содержит
имя файла.  Поле Fill резервируется операционной системой и никогда
не должно модифицироваться.


                 Строковые типы обработки файлов.

     Эти строковые типы используются в процедуре FSplit:

     DirStr  = String[67];  {строка  устройства  и  справочника}
     NameStr = String[8];   {строка имени файла}
     ExtStr  = String[4];   {строка расширения файла}
     ComStr  = String[127]; {командная строка}
     PathStr = String[79];  {полная строка пути файла}


                            Переменные.

                       Переменная DosError.

     Переменная DosError  используется многими программами в модуле
Dos для указания ошибок.

     var DosError : Integer;

     Значение, запомненое в DosError, представляет собой код ошибки
операционной системы. Значение 0 означает "нет ошибки", другие коды
означают:
   —————————————————————————————————————
   код ошибки DOS    значение
   —————————————————————————————————————
      2            файл не найден
      3            путь не найден
      5            доступ запрещен
      6            неверный обработчик
      8            нет памяти
     10            неправильная среда
     11            неправильный формат
     18            больше нет файлов
   —————————————————————————————————————


                       Процедуры и функции.

                      Процедуры даты и времени

———————————————————————————————————————————————————————————————————
   процедура                        описание
———————————————————————————————————————————————————————————————————
   GetDate       Возвращает текущую дату, установленную в DOS

   GetFTime      Возвращает дату и время последней записи в файл

   GetTime       Возвращает текущее время, установленное в DOS

   PackTime      Преобразует запись   в   4   байтовое  упакованное
                 значение даты и времени типа longint, используемое
                 процедурой   SetFTime.  Поля  записи  DateTime  не
                 проверяются на диапазон.

   SetData       Устанавливает текущую дату в DOS

   SetFTime      Устанавливает время и дату последней записи в файл

   SetTime       Устанавливает текущее время в DOS

   UnpackTime    Преобразует 4-х байтовое упакованное значение даты
                 и времени, возвращаемое GetFTime, FindFirst или
                 FindNext в распакованную запись типа DateTime.
———————————————————————————————————————————————————————————————————


                Процедуры обслуживания прерываний.

———————————————————————————————————————————————————————————————————
   процедура                        описание
———————————————————————————————————————————————————————————————————
   GetIntVeс     Возвращает адрес, хранящийся в указанном векторе
                 прерывания

   Intr          Выполняет указанное программное прерывание

   MSDos         Выполняет функцию операционной системы

   SetIntVec     Устанавливает адрес для указанного вектора
                 прерывания.
———————————————————————————————————————————————————————————————————


                      Функция статуса диска.

———————————————————————————————————————————————————————————————————
   функция                         описание
———————————————————————————————————————————————————————————————————
   DiskFree     Возвращает число свободных байт на указанном диске

   DiskSize     Возвращает полный объем указанного диска в байтах
———————————————————————————————————————————————————————————————————


                    Процедуры обработки файлов.

———————————————————————————————————————————————————————————————————
   процедура                        описание
———————————————————————————————————————————————————————————————————
   FindFirst     Ищет в  указанном  или  текущем справочнике первый
                 файл,  соответствующий  заданному  имени  файла  и
                 набору атрибутов.

   FindNext      Возвращает следующий файл,соответствующий имени и
                 атрибутам, указанным в предыдущем вызове FindFrst.

   GetFAttr      Возвращает атрибуты файла.

   SetFAttr      Устанавливает атрибуты файла.

   FSplit        Разбивает имя файла на 3 составные части
                 (справочник, имя файла, расширение).
———————————————————————————————————————————————————————————————————


                     Функции обработки файла.

———————————————————————————————————————————————————————————————————
   функция                         описание
———————————————————————————————————————————————————————————————————
   FExpand       Берет имя файла  и  возвращает  полное  имя  файла
                 (устройство, справочник, имя и расширение).

   FSearch       Ищет файл в списке справочников.
———————————————————————————————————————————————————————————————————


                  Процедуры обработки процессов.

———————————————————————————————————————————————————————————————————
   процедура                        описание
———————————————————————————————————————————————————————————————————
   Exec         Выполняет заданную программу с указанной командной
                строкой.

   Keep         Завершает программу   и   оставляет   ее   в  памяти
                (реализует   прерывание   "завершить   и    оставить
                резидентным"- TSR).

   SwapVectors  Меняет сохраненные вектора прерываний с текущими
                векторами
———————————————————————————————————————————————————————————————————


                   Функции обработки процессов.

———————————————————————————————————————————————————————————————————
   функция                         описание
———————————————————————————————————————————————————————————————————
   DosExitCode     Возвращает код завершения подпроцесса.
———————————————————————————————————————————————————————————————————


                    Функции управления средой.

———————————————————————————————————————————————————————————————————
   функция                         описание
———————————————————————————————————————————————————————————————————
   EnvCount     Возвращает число строк, содержащихся в среде DOS

   EnvStr       Возвращает указанную строку среды.

   GetEnv       Возвращает значение указанной переменной среды.
———————————————————————————————————————————————————————————————————


                     Дополнительные процедуры.

———————————————————————————————————————————————————————————————————
   процедура                        описание
———————————————————————————————————————————————————————————————————
   GetCBreak      Возвращает состояние проверки Ctrl-Break в DOS

   SetCBreak      Устанавливает состояние проверки Ctrl-Break в DOS

   GetVerify      Возвращает состояние флага верификации в DOS

   SetVerify      Устанавливает состояние флага верификации в DOS
———————————————————————————————————————————————————————————————————


                      Дополнительные функции.

———————————————————————————————————————————————————————————————————
   функция                       описание
———————————————————————————————————————————————————————————————————
   DosVersion     Возвращает номер версии DOS
———————————————————————————————————————————————————————————————————
