
                          ГЛАВА 16


                Справочник по процедурам
                и функциям Турбо-Паскаля

     В данной главе описываются все процедуры и функции вер-
сии  5.0 Турбо-Паскаля. Для удобства они расположены в алфа-
витном порядке. Ниже приведен краткий формат описания проце-
дур,  с помощью которого вы можете легко понять схему описа-
ний, содержащихся в данном руководстве.

------------------------------------------------------------
Процедура          В каких модулях она используется
------------------------------------------------------------
Функция            Выполняемые ей действия
Описание           Содержание описания функции
Тип результата     Какой результат возвращается, если это
                   функция
Примечания         Общая информация о процедуре или функции
Ограничения        Учитываемые ограничения
Отличия            Отличия от других версий Турбо-Паскаля
Прочее             Используемые процедуры, функции и т.д.
Пример             Пример программы или ее части
------------------------------------------------------------

      Примечание: При компиляции в режиме численной обработ-
      ки (директива {$N+}) значения, возвращаемые программа-
      ми работы с плавающей запятой блока Systем (Sqrt,  Рi,
      Sin,  и  т.д.) представляют собой результат не вещест-
      венного типа, а повышенной точности.

------------------------------------------------------------
 Функция Abs
------------------------------------------------------------
     Функция: Возвращает абсолютное значение аргумента.
     Описание: Abs(x)
     Тип результата: Соответствует типу параметра.
     Примечания: Параметр x - выражение целого  или  вещест-
венного типа. Результат, имеющий тот же тип, что и x, предс-
тавляет собой абсолютное значение x.
     Пример:

 var
   r : real;
   i : integer;
 begin
   r := Abx(-2.3);                       { 2.3 }
   i := Abs(-157);                       { 157 }


------------------------------------------------------------
 Функция Addr
------------------------------------------------------------
     Функция: Возвращает адрес заданного объекта.
     Описание: Addr(x)
     Тип результата: Указатель.
     Примечания: Параметр x - любая переменная, или  иденти-
фикатор  процедуры  или функции. Результатом является указа-
тель, ссылающийся на x. Как и  указатель  типа  nil  (пустой
указатель), результат данной функции является совместимым по
присваиванию со всеми типами указателей.
     Прочее: См. также фунцию Ptr.
     Пример:

  var
    p : pointer;
  begin
    p : Addr(p);            { указывает теперь сам на себя }
  end.

------------------------------------------------------------
 Процедура Append
------------------------------------------------------------

     Функция: Открывает текущий файл для присоединения.
     Описание: Append(var f : text)
     Тип результата: Параметр f - файловая  переменная  тек-
стового типа, которая должна быть связана с внешним файлом с
помощью процедуры Аssign. Процедура Аppеnd открывает сущест-
ву-  ющий  внешний  файл с именем, назначенным переменной f.
Если внешнего файла с указанным именем не существует, то это
является ошибкой. Если файл f уже открыт, то он сначала зак-
рывается, а затем открывается заново. Текущая позиция  уста-
навливается на конец файла.
     Если в последнем блоке файла размером 128  байтов  при-
сутствует  символ Сtrl-Z (26 в коде АSСII), то текущая пози-
ция устанавливается в файле таким образом,  что  при  записи
первым в блоке будет "затираться" символ Сtrl-Z.
     Если переменной f было присвоено пустое имя  (например,
Assign(f,''),  то после обращения к процедуре Аppеnd f будет
указывать на стандартный выходной  файл  (стандартный  канал
номер 1). После обращения к Аppеnd файл f становится доступ-
ным только по записи  и  Еоf(f)  всегда  принимает  значение
Тruе.
     При использовании директивы компилятора  {$I+}  функция
IОRеsult будет возвращать значение 0 при успешном завершении
операции и ненулевой код ошибки в противном случае.
     Прочее: См. также процедуры Rеsеt и Rеwritе.
     Пример:

  var f : text;
  begin
    Assign(f, 'Test.txt');
    Rewrite(f);                { создать новый файл }
    Writeln(f, 'исходный текст');
    Close(f);          { закрыть файл, сохранить изменения }
    Append(f);         { добавить текст в конец файла }
    Writeln(f,'дополнительный текст');
    Close(f);          { закрыть файл, сохранить изменения }
  end.

------------------------------------------------------------
 Процедура Arc                              Модуль Graph
------------------------------------------------------------
     Функция: Вычерчивает дугу окружности от начального угла
до  конечного  угла. Точка (x,y) используется, как центр ок-
ружности.
     Описание:    Аrс(Х,Y:integer;    нач_угол,    кон_угол,
радиус:word)
     Примечания: Рисует дугу окружности с  центром  (x,y)  и
радиусом   "радиус".   Дуга   рисуется  от  начального  угла
("нач_угол") до конечного угла ("кон_угол").  При  этом  ис-
пользуется текущий цвет.
     В каждом графическом  драйвере  содержится  коэффициент
относительного удлиннения, который используется в процедурах
Сircle, Аrс и РieSlice.
     Начальный угол, равный 0 и конечный угол,  равный  359,
задают вычерчивание полной окружности.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также Circle, Ellipse, GetArcCoords, GetAs-
pectRatio, PieSlice.
     Пример:

 for f := 1 to 5 do
   Arc(100, 100, 0, 89, r*10);

------------------------------------------------------------
 Функция ArcTan
------------------------------------------------------------

     Функция: Возвращает арктангенс аргумента.
     Описание: ArcTan(x : real)
     Тип результата: Вещественный (real).
     Примечания: Параметр x - выражение вещественного  типа.
Результат  представляет собой главное значение арктангенса x
(в радианах).
     Пример:

 var
   r : real;
 begin
   r := ArcTan(Pi);
 end;

------------------------------------------------------------
 Процедура Assign
------------------------------------------------------------
     Функция: Присваивает имя внешнего файла файловой  пере-
менной.
     Описание: Аssign(f; имя : string)
     Примечания: Параметр f является файловой переменой  лю-
бого типа файла, а "имя" должно представлять собой выражение
строкового типа. Дальнейшие операции с f будут выполняться с
внешним  файлом  с  именем, заданным параметром "имя". После
обращения к процедуре Аssign связь, установленная между  пе-
ременной  f  и внешним файлом будет существовать до тех пор,
пока не будет выполнена другая процедура Аssign для перемен-
ной f. Имя состоит из маршрута (пути доступа), определяющего
доступ к 0 или более каталогов, имена которых отделены  друг
от друга с помощью обратной косой черты и за которыми следу-
ет действительное имя файла:

     Диск:\имя_кат\имя_кат\...\имя_кат\имя_файла

     Если путь доступа начинается с обратной косой черты, то
поиск  начинается в корневом каталоге, в противном случае он
начинается в текущем  каталоге.  "Диск"  представляет  собой
идентификатор  диска  (А-Z).  Если  "Диск" и двоеточие будут
опущены, то используется назначенный по умолчанию дисковод.
     Каталог "\имя_кат\имя_кат\...\имя_кат" является  корне-
вым  каталогом  и путем доступа к подкаталогу, в котором со-
держится имя файла. Параметр "имя_файла" может содержать  до
восьми  символов, за которыми могут следовать точка и расши-
рение имени файла, длиной до трех символов. Максимально  до-
пустимая длина всего имени файла составляет 79 символов.
     Ограничения: Процедура Аssign не должна  использоваться
для открытого файла. Когда параметр "имя" представляет собой
пустую строку, возникает особый случай, то есть  Length(имя)
равно  нулю.  В этом случае параметр f оказывается связанным
со стандартным файлом ввода или стандартным  файлом  вывода.
Эти  специальные  файлы  позволяют инициализировать средство
изменения направления ввода-вывода операционной системы ДОС.
Если  присвоено  пустое имя, то после обращения к Rеset(f) f
будет указывать на стандарный файл ввода, а после  обращения
к Rеwritе(f) f будет указывать на стандартный файл вывода.
     Пример: (Делается попытка назначить для вывода програм-
мы вместо ДОС устройство РRN, диск и т.д.)

 var f : text;
 begin
   Assign(f,'');                { стандартный вывод }
   Rewrite(f);
   Writeln(f,'стандартный вывод...');
   Close(f);
 end;

------------------------------------------------------------
 Функция AssignCrt                               Модуль Сrt
------------------------------------------------------------
     Функция: Связывает текстовый файл  с  устройством  СRТ.
(терминалом).
     Описание: AssignCrt(var f: Text)
     Примечания: Процедура АssignCrt работает  точно  также,
как  стандартная  процедура Аssing, за исключением того, что
имени файла не указывается. Вместо этого текстовый файл свя-
зывается с устройством CRТ (терминалом).
     Это позволяет позволяет ускорить вывод  (или  ввод)  по
сравнению  с той скоростью, которая была бы возможна при ис-
пользовании стандартного вывода (или ввода).
     Пример:

 uses Crt;
 var
   f : text;
 begin
 Write('Вывести на экран или на устройство печати? [S, P]');
  if UpCase(ReadKey) = 'P' then
     Assign(f,'PRN')   { вывод на устройство печати }
  else
     AssignCrt(f);     { вывод на экран; используются под-
                         программы работы с экраном, осу-
                         ществляющие быстрый вывод информа-
                         ции }
     Rewrite(f);
     Writeln(f,'Быстрый вывод через программы CRT...');
     Close(f)
  end.

------------------------------------------------------------
 Процедура Bar                                 Модуль Graph
------------------------------------------------------------
     Функция: Рисует столбец, используя  стандартный  тип  и
цвет закраски.
     Описание: Bar(x1, y1, x2, y2 : integer)
     Примечания: Рисуется закрашенный столбец (что можно ис-
пользовать, например, в гистограммах). При этом используется
образец  и  цвет  закраски,  заданные  с  помощью   процедур
SetFillStyle  и  SetFillPattern. Если при заполнении прямоу-
гольника возникает ошибка,  то  функцией  GraphResult  будет
возвращаться код ошибки -6.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры: Bar3D,  GraphResult,  Set-
FillStyle, SetFillPattern.
     Пример:

 for i := 1 to 5 do
   Bar(i*width, i*10, Succ(i)*width+1, 200);

------------------------------------------------------------
 Процедура Bar3D                               Модуль Graph
------------------------------------------------------------
     Функция: Используя текущий тип и цвет  закраски  рисует
трехмерный паралелепипед.
     Описание: Ваr3D(х1, у1,  х2,  у2:  integer;  глубина  :
word; вершина : вооlеаn)
     Примечания:     Рисуется     заполненный     трехмерный
параллепипед. При этом используется тип и цвет закраски, за-
данные с помощью  процедур  SetFillStile  и  SetFillPattern.
Трехмерный  контур  параллепипеда вычерчивается тем цветом и
типом линии, которые установлены процедурами SetLineStyle  и
SetColor.  Параметр  "глубина" представляет собой число эле-
ментов изображения, задающих  глубину  трехмерного  контура.
Если  переменная,  указанная  в качестве параметра "вершина"
принимает истинное значение (Тruе), то для параллепипеда ри-
суется трехмерная вершина, в противном случае вершина не ри-
суется (что  позволяет  рисовать  нескольно  параллепипедов,
расположенных один на другом).
     Типичный параметр глубины можно вычислить, взяв за  ос-
нову 25% ширины параллелепипеда:

     Bar3D(x1, y1, x2, y2, (x2-x1) div 4, TopOn);

     Если при заполнении параллепипеда происходит ошибка, то
функция GraphResult возвращает значение -6.
     Определены следующие константы:

 const
   TopOn  = True;
   TopOff = False;

     Ограничения: Должен использоваться графический режим.
     Прочее: См. также  процедуры:  Bar,  GraphResult,  Set-
FillStyle, SetFillPattern, SetLineStyle.
     Пример:

  y0 := 10;
  y1 := 60;
  y2 := 110;
  x1 := 10;
  x2 := 50;
  Bar3D(x1, y0, x2, y1, 10, TopOn);
  Bar3D(x1, y1, x2, y2, 10, TopOff);

------------------------------------------------------------
 Процедура BlockRead
------------------------------------------------------------
     Функция: Считывает одну или более записей в переменную.
     Описание: ВlосkRеаd(var f : файл; var буфф;  счетчик  :
word [; результат : word ])
     Примечания: Параметр f представляет собой файловую  пе-
ременную,  "буфф"  -  любая  переменная, "счетчик" выражение
длиной в слово и "результат" - это также переменая длиной  в
слово.
     Данная процедура считывает записи,  количество  которых
не превосходит числа, указанного в переменной "счетчик", на-
чиная с первого байта, занятого переменной "буфф".  Действи-
тельное  число  полных считанных записей (меньшее или равное
значению переменной "счетчик") возвращается в необязательном
параметре "результат". Если этот параметр не задан, то в том
случае, когда число прочитанных записей не  будет  совпадать
со  значением  переменной  "счетчик", произойдет ошибка вво-
да-вывода.
     Весь размер переданного блока не превышает  числа  бай-
тов,  определяемых  произведением значения переменной "счет-
чик" и длины записи,  указываемой  при  открытии  файла  (по
умолчанию  128).  Если это произведение превышает 65535 (64К
байта), то возникает ошибка.
     Параметр "результат" является необязательным. Он  рабо-
тает  следующим  образом. Если был передан весь блок, то при
возврате управления в параметре "результат" будет содержать-
ся то же значение, что и в переменной "счетчик". В противном
случае значение параметра "результат" будет меньше: до того,
как  успела завершиться передача, был обнаружен символ конца
файла. В этом случае, если  размер  записи  файла  превышает
единицу,  то в параметре "результат" возвращается число пол-
ных прочитанных записей. Таким образом,  возможная  неполная
последняя запись не учитывается в параметре "результат".
     В результате выполнения процедуры ВlоскRеаd текущая по-
зиция  в файле продвигается на число записей, заданных пере-
менной "результат".
     При использовании директивы компилятора  {$I-}  функция
IОRеsult  будет  возвращать 0, если операция завершилась ус-
пешно и ненулевой код ошибки в противном случае.
     Ограничения: Файл должен быть открыт.
     Отличия: В версии 3.0 неполные  записи  считываются.  В
версиях 4.0 и 5.0 они отбрасываются.
     Прочее: См. также процедуру ВlосkWritе.
     Пример:

 program CopyFile;
 { Простая программа быстрого копирования файлов без провер-
   ки на возникновение ошибок }
 var
   FromF, ToF, : file;
   NumRead, NumWritten : word;
   buf : array[1..2048] of char;
  begin
    Assign(FromF, ParamSrt(1)); { открыть входной файл }
    Reset(FromF);               { размер записи - 1 }
    Assign(ToF, ParamStr(2));   { открыть выходной файл }
    Rewrite(ToF, 1);            { размер записи = 1 }
    Writeln('Копирование ',FileSize(FromF),' байтов...');
    repeat
      BlockRead(FromF, buf, SizeOf(buf), NumberRead);
      BlockWrite(ToF, buf, NumberRead, NumWritten);
    until (NumRead = 0) or (NumWitten <> NumRead);
     Close(FromF);
     Close(ToF);
  end.

------------------------------------------------------------
 Процедура BlockWrite
------------------------------------------------------------
     Функция: Записывает одну или более записей из  перемен-
ной.
     Описание: ВlосkWritе(var f : файл; var буфф; счетчик  :
word [; результат : word ])
     Примечания: Параметр f представляет собой  нетипизован-
ную  файловую  переменную, "буфф" - любая переменная, "счет-
чик" выражение длиной в слово и "результат" - это также  пе-
ременая длиной в слово (т.е. имеет тип word).
     Данная процедура записывает записи, количество  которых
не превосходит числа, указанного в переменной "счетчик", на-
чиная с первого байта, занятого переменной "буфф".  Действи-
тельное  число полных записанных записей (меньшее или равное
значению переменной "счетчик") возвращается в необязательном
параметре "результат". Если этот параметр не задан, то в том
случае, когда число записанных записей не будет совпадать со
значением  переменной "счетчик", произойдет ошибка ввода-вы-
вода.
     Весь размер переданного блока не превышает  числа  бай-
тов,  определяемых  произведением значения переменной "счет-
чик" и длины записи,  указываемой  при  открытии  файла  (по
умолчанию  128).  Если это произведение превышает 65535 (64К
байта), то возникает ошибка.
     Параметр "результат" является необязательным. Он  рабо-
тает  следующим  образом. Если был передан весь блок, то при
возврате управления в параметре "результат" будет содержать-
ся то же значение, что и в переменной "счетчик". В противном
случае значение параметра "результат" будет меньше: до того,
как  успела  завершиться передача, диск переполнился. В этом
случае, если размер записи файла превышает единицу, то в па-
раметре "результат" возвращается число полных записанных за-
писей. Таким образом, возможная неполная остающаяся  послед-
няя запись не учитывается в параметре "результат".
     В результате выполнения  процедуры  ВlосkWritе  текущая
позиция  в файле продвигается на число записей, заданных пе-
ременной "результат".
     При использовании директивы компилятора {$I-}  IОRеsult
будет  возвращать 0, если операция завершилась успешно и не-
нулевой код ошибки в противном случае.
     Ограничения: Файл должен быть открыт.
     Отличия: В версии 3.0 неполные  записи  считываются.  В
версиях 4.0 и 5.0 они отбрасываются.
     Прочее: См. также процедуру ВlосkWritе.
     Пример: См. пример для процедуры ВlосkRеаd.

------------------------------------------------------------
 Процедура СhDir
------------------------------------------------------------
     Функция: Выполняет смену текущего каталога.
     Описание: ChDir(s : string)
     Примечания: Параметр  s  представляет  собой  выражение
строкового  типа. Текущий каталог изменяется на тот, который
задается с помощью маршрута, указанного в параметре s.  Если
в параметре s задается буквенная метка дисковода, то текущий
дисковод также изменяется.
     При использовании директивы компилятора  {$I-}  функция
IОRеsult  будет  возвращать 0, если операция завершилась ус-
пешно и ненулевой код ошибки в противном случае.
     Прочее: См. также процедуры GetDir, RmDir, MkDir.
     Пример:

  begin
   {$I-}
  { Получить из командной строки имя каталога }
  ChDir(ParamStr(1));
   if IOResult <> 0 then
      Writeln('Каталог не найден');
  end.

------------------------------------------------------------
 Процедура Chr
------------------------------------------------------------
     Функция: Возвращает символ, соответствующий  указанному
значению кода ASCII.
     Описание: Chr(x : byte)
     Примечания: Параметр x - это выражение целого типа. Ре-
зультатом  является символ с порядковым значением (значением
кода АSСII) x.
     Прочее: См. также процедуру Оrd.
     Пример:

uses Printer;
  begin
   Writeln(Lst, Chr(12));  { передать на устройство печати
                             символ перевода формата }
  end.

------------------------------------------------------------
 Процедура Circle
------------------------------------------------------------
     Функция: Рисует окружность. Точка (Х,Y) считается  цен-
тром окружности.
     Описание: Circlе(Х,Y : integer; радиус : word)
     Примечания: Окружность рисуется текущим цветом. В  каж-
дом  графическом драйвере содержится коэффициент относитель-
ного удлиннения, который используется в  процедурах  Сirclе,
Аrс и РiеSliсе.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры Arc, Ellipse, GetArcCoords,
GetAspectRatio, PieSlice.
     Пример:

for r := 1 to 5 do
   Circle(100,100,r*10);

------------------------------------------------------------
 Процедура ClearDevice
------------------------------------------------------------
     Функция: Сбрасывает состояние текущего графического эк-
рана и подготавливает его для вывода данных.
     Описание: ClearDevice
     Примечания: Данная процедура очищает устройство и сбра-
сывает  все  графические  параметры, устанавливая для них те
значения, которые предусмотрены по умолчанию (текущий указа-
тель,  палитру,  цвет, область вывода). Процедура перемещает
текущий указатель в точку с координатами (0,0).
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры ClearViewPort,  CloseGraph,

InitGraph, RestoreCrtMode, SetGraphMode.
     Пример:

  Randomize;
   repeat
    LineTo(Random(200), Random(200));
   until KeyPressed;
  ClearDevice;
  Readln;

------------------------------------------------------------
 Процедура ClrarViewPort                       Модуль Graph
------------------------------------------------------------
     Функция: Очищает текущую область просмотра (окно).
     Описание: ClearViewPort
     Примечания: Очишается текущая  область  просмотра.  При
этом используется цвет, сохраненный в Раlettе(0), вызывается
процедура Bar и текущий указатель перемещается в точку с ко-
ординатами  (0,0). Если при очистке области просмотра возни-
кает ошибка, процедура GraphResult возвращает значение -6.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также  процедуры  SetViewPort,  GetViewSet-
tings.
     Пример:

  begin
   ...
   SetrViewPort(10, 10, 100, 100, ClipOn);
   SetColor(White);
   OutText('Для очистки области просмотра нажмите <RETURN>);
   ClearViePort;
   ...
  end;

------------------------------------------------------------
 Процедура Close
------------------------------------------------------------
     Функция: Закрывает открытый файл.
     Описание: Close(f)
     Примечания: Параметр f представляет собой файловую  пе-
ременную  любого типа файла, который был предварительно отк-
рыт с помощью процедур Rеset, Rеwrite или Аppеnd. Для  внеш-
него  файла, связанного с переменной f полностью выполняется
его обновление и затем он закрывается, после  чего  файловый
канал  ДОС  для данного файла освобождается для последующего
использования.
     При использовании директивы компилятора {$I-}  IОRеsult
будет  возвращать 0, если операция завершилась успешно и не-
нулевой код ошибки в противном случае.
     Прочее: См.  также  процедуры  Append,  Assign,  Reset,
Rewrite.
     Пример:

 var f: file;
 begin
   Assign(f,'\AUTOEXEC.BAT');            { открыть файл }
   Reset(f,1);
   Writeln('Размер файла = ',FileSize);
   Close(f);                             { закрыть файл }
 end.

------------------------------------------------------------
 Процедура CloseGraph                          Модуль Graph
------------------------------------------------------------
     Функция: Останавливает работу графической системы.
     Описание: CloseGraph
     Примечания: Данная процедура  восстанавливает  исходный
режим экрана (который был установлен до инициализации графи-
ки) и освобождает в динамически распределяемой  области  па-
мять, используемую графическим драйвером.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также  процедуры  CloseGraph,  DetectGraph,
InitGraph, RestoreCrtMode, SetGraphMode.
     Пример:

 grDriver := Detect;  { установить автоматическое распозна-
                        вание аппаратуры }
 InitGraph(grDriver,grMode,'');
  ...
 CloseGraph;

------------------------------------------------------------
 Процедура CrlEol                                Модуль Сrt
------------------------------------------------------------
     Функция: Стирает все символы, начиная от позиции курсо-
ра, до конца строки. Курсор при этом не перемещается.
     Описание: ClrEol
     Примечания: Все позиции символов заполняются пробелами.
При этом используется  текущее определение текстовых атрибу-
тов.  Таким образом,  если в  ТехtВаckground не задан черный
цвет, то в позициях, начиная от курсора и до правой границы,
экран приобретает фоновый цвет.
     Эта процедура зависит от используемого окна. Например:

 Window(1,1,60,20);
 ClrEol;

установит для текущей позиции курсора вместо значений (1,1)
значения (60,1) (то есть правая граница активного окна).
     Прочее: См. также процедуры ClrScr, Window.
     Пример:

 uses Crt;
 begin
   TextBackGround(LightGray);
   ClrEol;   { для очищенных позиций устанавливается светло-
                серый фоновый цвет }
 end.

------------------------------------------------------------
 Процедура СlrScr                                Модуль Сrt
------------------------------------------------------------
     Функция: Очищает экран и помещает курсор в верхний  ле-
вый угол экрана.
     Описание: ClrScr
     Примечания: Все позиции символов заполняются пробелами.
При  этом используется текущее определение текстовых атрибу-
тов. Таким образом, если для ТехtВасkGround не задан  черный
цвет,  то для всего экрана устанавливается фоновый цвет. Это
относится также к позициям  символов,  очищенных  с  помощью
процедур  СlrЕоl,  InsLine и DelLine, а также к пустым стро-
кам, образующимся при пролистывании экрана.
     Эта процедура зависит от используемого окна. Например:

     Window(1,1,60,20);
     ClrScr;

приведут к очистке прямоугольной области на экране  размером
60х20 с началом в точке (1,1).
     Прочее: См. также процедуры ClrEol, Window.
     Пример:

 uses Crt;
 begin
   TextBackGround(LightGray); { для всего экрана устанавли-
                                вается светлосерый фоновый
                                цвет }
   ClgScr;
 end.

------------------------------------------------------------
 Функция Concat
------------------------------------------------------------
     Функция:   Выполняет   конкатенацию  последовательности
строк.
     Описание: Concat(s1, [s2, ..., sn] ; string)
     Тип результата: Строковый (string).
     Примечания: Каждый параметр является выражением строко-
вого типа.  Результат  представляет  собой конкатенацию всех
строковых параметров.  Если длина результирующей строки пре-
вышает 255 символов, то она усекается до 255 символов.
     Пример:

 var
   s : string;
 begin
   s := Concat('ABC','DEF');                    { 'ABCDEF' }
 end.

------------------------------------------------------------
 Функция Copy
------------------------------------------------------------
     Функция: Возвращает для строки подстроку.
     Описание: Соpy(s : string; индекс : integer; счетчик  :
integer)
     Тип результата: Строковый (string).
     Примечания: Параметр s  -  выражение  строкового  типа.
Па-раметры  "индекс" и "счетчик" являются выражениями целого
типа. Функция Соpy возвращает строку, число символов которой
соответствует  параметру  "счетчик"  и  которая начинается с
символа строки s, номер которого задан параметром  "индекс".
Если  значение параметра "индекс" превышает длину строки, то
возвращается пустая строка. Если параметр  "счетчик"  задает
больше  символов,  чем  остается в строке, начиная с символа
"индекс", то возвращается только остаток строки.
     Пример:

 var
   s : string;
 begin
   s := 'ABCDEF';
   s := Copy(s,2,3)                             { 'BCD' }
end.

------------------------------------------------------------
 Функция Cos
------------------------------------------------------------
     Функция: Возвращает косинус аргумента.
     Описание: Cos(x : real)
     Тип результата: Вещественный (real).
     Примечания: Параметр x является выражением вещественно-
го  типа.  Результатом  будет косинус x. Предполагается, что
это значение задает угол в радианах.
     Пример:

 var
  r : real;
 begin
  r := Cos(Pi);
 end.

------------------------------------------------------------
 Функция CSeg
------------------------------------------------------------
     Функция: Возвращает текущее значение регистра СS.
     Описание: CSeg
     Тип результата: Результат имеет длину в слово (word).
     Примечания: Результат длиной в слово представляет собой
адрес  сегмента для той части программы, из которой была вы-
звана функция СSeg.
     Прочее: См. также функции DSeg, SSeg.

------------------------------------------------------------
 Процедура Dec
------------------------------------------------------------
     Функция: Уменьшает значение переменной.
     Описание: Dec(x[ , n])
     Примечания: Параметр x  представляет  собой  переменную
перечислимого  типа, а n - целочисленное выражение. Значение
x уменьшается на 1 (или на n в случае явного задания n).  То
есть Dес(x) соответствует x := x-1, а Dес(x,n) соответствует
x := x-n. Функция Dес порождает оптимизированный код и  осо-
бенно полезна в больших циклах.
     Прочее: См. также функции Inc, Pred.
     Пример:

var
  IntVar     : integer;
  LongIntVar : longint;
begin
   Dec(IntVar);                     { IntVar := IntVar - 1 }
   Dec(LongIntVar(Var, 5);  { LongIntVar := LongIntVar - 5 }
end.

------------------------------------------------------------
 Процедура Delay                                 Модуль Crt
------------------------------------------------------------
     Функция: Выполняет задержку на заданное число  миллисе-
кунд.
     Описание: Delay(мсек : word)
     Примечания: Параметр мсек задает число миллисекунд  ин-
тервала ожидания.
     Данная процедура является приблизительной, поэтому  пе-
риод  задержки не будет точно равняться заданному числу мил-
лисекунд.

------------------------------------------------------------
 Процедура Delete
------------------------------------------------------------
     Функция: Удаляет из строки подстроку.
     Описание: Delete(var s  :  string;  индекс  :  integer;
счетчик : integer)
     Примечания: Параметр  s  представляет  собой  выражение
строкового типа. Параметры "индекс" и "счетчик" являются вы-
ражениями целого типа. Функция Delete удаляет символы, коли-
чество  которых соответствует параметру "счетчик", начиная с
символа строки s, номер которого задан параметром  "индекс".
Если  значение параметра "индекс" превышает длину строки, то
символы не удаляются. Если параметр "счетчик" задает  больше
символов, чем остается в строке, начиная с символа "индекс",
то удаляется остаток строки.
     Прочее: См. также процедуры Insert, Copy, Concat, Pos.

------------------------------------------------------------
 Процедура DelLine                               Модуль Сrt
------------------------------------------------------------
     Функция: Удаляет строку, на которой находится курсор.
     Описание: DelLine
     Примечания: Удаляется строка, в которой расположен кур-
сор.  При этом все строки, расположенные ниже данной строки,
перемещаются на одну строку вверх  (для  этого  используется
программа  листания  экрана  базовой  системы ввода-вывода).
Внизу экрана добавляется новая строка.
     Примечания: Все позиции символов заполняются пробелами.
При  этом используется текущее определение текстовых атрибу-
тов. Таким образом, если для ТехtВасkGround не задан  черный
цвет, то для всего экрана устанавливается фоновый цвет.
     Эта процедура зависит от текущего окна. Например:

     Window(1,10,60,20);
     DelLine; приводит к удалению первой строки окна,  кото-
рая является десятой строкой экрана.
     Прочее: См. также процедуры InsLine, Window.

------------------------------------------------------------
 Процедура DetectGraph                         Модуль Graph
------------------------------------------------------------
     Функция: Проверяет наличие  соответствующих  аппаратных
средств и определяет, какой графический режим и драйвер сле-
дует использовать.
     Описание: DetectGraph(var драйвер, режим : integer)
     Примечания: Возвращает  значения  выбранного  режима  и
драйвера,  которые можно передать в качестве параметров про-
цедуре InitGraph  для  загрузки  соответствующего  драйвера.
Если  графическая аппаратура не найдена, то параметры "драй-
вер" и "режим" будут содержать значения -2.
     Определены следующие константы:

 const
   Detect    = 0;  { требование автоматического распознава-
                     ния }
   CGA       = 1;
   MCGA      = 2;
   EGA       = 3;
   EGA64     = 4;
   EgaMono   = 5;
   Reserved  = 6;
   HercMono  = 7;
   ATT400    = 8;
   VGA       = 9;
   PC3270    = 10;

     Если не указываются другие  действия,  процедура  Init-
Graph  вызывает  процедуру  DetectGraph, находит и загружает
соответствующий драйвер и инициализирует графическую  систе-
му. Единственной причиной непосредственного вызова процедуры
DetectGraph является замена выбираемого ей драйвера. В  при-
веденном ниже примере идентифицируется система с объемом па-
мяти 64 или 256К и графическим адаптером ЕGА, но загружается
драйвер СGА. Заметим, что когда вы передаете процедуре Init-
Graph параметр  GraphDriver (задающий драйвер), отличающийся
от  Detect, вы должны также передать для требуемого драйвера
в параметре GraphMode допустимый графичекий режим.
     Прочее: См. также процедуры InitGraph, GraphResult.
     Пример:

     ....
     GraphDriver := Detect;
     DetectGraph(GraphDriver, GraphMode);
     if (GraphDriver = EGA64) then
   begin
    GraphDriver := CGA;
    GraphMode := CGAHi;
   end;
   InitGraph(GraphDriver, GraphMode, 'C:\BIN');
   ...

------------------------------------------------------------
 Процедура DiskFree                              Модуль Dos
------------------------------------------------------------
     Функция: Возвращает число свободных байтов на  заданном
диске.
     Описание: DiskFree(диск: word)
     Тип результата: Длинный целый (longint).
     Примечания: Значение параметра "диск", равное 0, задает
определенный по умолчанию диск, значение 1 указывает на диск
А, 2 - на диск В и т.д. Если номер диска недействителен,  то
данная процедура возвращает значение -1.
     Прочее: См. также процедуры DiskSize, GetDir.
     Пример:

  uses Dos;
  begin
    Writeln('Свободно ',DiskFree(0), div 1024,' килобайт');
  end.

------------------------------------------------------------
 Процедура DiskSize                              Модуль Dos
------------------------------------------------------------
     Функция: Возвращает число свободных байтов на  заданном
диске.
     Описание: DiskSizе(диск: word)
     Тип результата: Длинный целый (longint).
     Примечания: Значение параметра "диск", равное 0, задает
определенный по умолчанию диск, значение 1 указывает на диск
А, 2 - на диск В и т.д. Если номер диска недействителен,  то
данная процедура возвращает значение -1.
     Прочее: См. также процедуры DiskFree, GetDir.
     Пример:

 uses Dos;
  begin
    Writeln(DiskSize(0) div 1024,' килобайт свободно');
  end.

------------------------------------------------------------
 Процедура Dispose
------------------------------------------------------------
     Функция: Уничтожает динамическую переменную.
     Описание: Disposе(var p: pointer)
     Примечания: Параметр p является переменной-указателем и
может  иметь тип, соответствующий любому типу указателя. Для
этого параметра должно быть предварительно выполнено присва-
ивание с помошью процедуры New или ему должно быть присвоено
значащее значение с помощью оператора  присваивания.  Данная
процедура  разрушает  переменную,  на  которую указывает p и
возвращает занимаемую ей память в динамически распределяемую
область  памяти. Значение p становится неопределенным и пос-
ледующие ссылки вида p  являются ошибкой.
     Прочее: См. также процедуры Release, FreeMem.
     Пример:

 type
   Str18 = sting[18];
 var
   p : ^Str18;
 begin
  New(p);
  p^ := 'теперь вы можете это видеть...';
  Dispose(p);                            { а теперь нет... }
  end.

------------------------------------------------------------
 Функция DosExitCode                             Модуль Dos
------------------------------------------------------------
     Функция: Возвращает для подпроцесса код завершения.
     Описание: DosExitCode
     Тип результата: Слово (word).
     Примечания: Младший байт представляет собой код,  пере-
данный  процессом  при  завершении.  Значение старшего байта
равно 0 при нормальном завершении, 1 - при завершении по на-
жатию клавиш Сtrl-С, 2 - при завершении из-за ошибки устрой-
ства и 3 - если процесс был завершен процедурой Keep.

------------------------------------------------------------
 Процедура DrawPoly                            Модуль Graph
------------------------------------------------------------
     Функция: Используя текущий тип прямой  и  текущий  цвет
рисует контур многоугольника.
     Описание: DrawPoly(числ_коорд : word; var коорд_верш)
     Примечания: Параметр "коорд_верш" является нетипизован-
ным  параметром, который содержит координаты каждого пересе-
чения в многоугольнике. Параметр "числ_коорд"  задает  число
координат  в  "коорд_верш". Координата состоит из двух слов:
значения x и значения y.
     Данная процедура использует текущий тип линии и текущий
цвет.
     Если при вычерчивании многоугольника происходит ошибка,
то функция GraphResult будет возвращать значение -6.
     Заметим, что для вычерчивания замкнутой фигуры с n вер-
шинами вы должны передать при обращении к процедуре DrawPoly
n + 1 координату, где координата вершины с номером  n  будет
равна  координате  вершины с номером 1 (см. приведенный ниже
пример).
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры FillPoly,  GetLineSettings,
SetColor, SetLineStyle, GraphResult.
     Пример:

 const Triangle : array[1..4] of PolyPoint =
   ((x: 10; y: 100),
    (x: 100; y: 100),
    (x: 150; y: 150),
    (x: 50; y: 100);
  begin
    ...
    DrawPoly(SizeOf(Triangle)
             div SizeOf(PolyPoint),             { 4 }
             Triangle);
    ...
    end.

------------------------------------------------------------
 Функция Dseg
------------------------------------------------------------
     Функция: Возвращает текущее значение регистра DS.
     Описание: DSeg
     Тип результата: Результат имеет длину в слово (word).
     Примечания: Результат длиной в слово представляет собой
адрес сегмента данных.
     Прочее: См. также функции CSeg, SSeg.

------------------------------------------------------------
 Процедура Ellipse                             Модуль Graph
------------------------------------------------------------

     Функция: Рисует эллиптическую дугу от  начального  угла
до конечного угла, используя (Х,Y) в качестве точки центра.
     Описание: Еllipsе(Х, Y : integer; нач_угол, кон_угол  :
word; радХ, радУ : word)
     Примечания: Процедура рисует  эллиптическую  дугу,  ис-
пользуя  (Х,Y), как точку центра, а "радХ", "радУ" - как го-
ризонтальную и вертикальную оси. Дуга эллипса  вычерчивается
от  начального  угла (параметр "нач_угол") до конечного угла
(параметр "кон_угол") текущим цветом.
     Значение начального угла, равное 0, и  конечного  угла,
равное  359,  приведут  к вычерчиванию полного эллипса. Углы
для процедур Arc, Ellipse и PieSlice задаются по направлению
часовой стрелки. При этом значение (в градусах) 0 соответст-
вует 3 часам, 90 градусом - 12 часам  и  т.д.  Информацию  о
последнам  вызове процедуры Ellipse можно получить с помощью
процедуры GetArcCoords.
     Аналогичная процедура имеется в версии 2.0 Турбо-си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также Circle, Arc, PieSlice,  GetArcCoords,
GetAspectRatio.
     Пример:

  Uses Graph;
  var
    Gd, Gm: integer;
  begin
    Gd := Detect;
    InitGraph(Gd, Gm, '');
    If GraphResult <> grOk then
    Halt(1);
 Ellipse(100,100,0,20,30,50);
 Ellipse(100,100,90,180,50,30);
 Readln;
 CloseGraph;
 end.

------------------------------------------------------------
 Функция EnvCount                                Модуль Dos
------------------------------------------------------------
     Функция:Возвращает число строк, содержащихся в операци-
онной среде ДОС.
     Описание: EnvCount
     Примечания: Функция EnvCoun возвращает число строк, со-
держащихся  в  операционной  среде  ДОС. Каждая такая строка
имеет вид 'ПЕРЕМЕННАЯ = ЗНАЧЕНИЕ'. Эти строки можно просмот-
реть с помощью функции EnvStr.
     Более полная информация об операционной среде  ДОС  со-
держится в руководствах по операционной системе ДОС.
     См. также функции: EnvStr, GetEnv.
     Пример:

 uses DOS;
  var
    I: integer;
  begin
    for I := 1 to EnvCount do
    WriteLn(EnvStr(I));
  end.

------------------------------------------------------------
 Функция EnvStr                                  Модуль Dos
------------------------------------------------------------
     Функция: Возвращает заданную строку операционной среды.
     Описание: EnvStr(индекс : integer)
     Тип резальтата: Строковый (string).
     Примечания: Данная функция возвращает  заданную  строку
операционной  среды  ДОС. Эта строка имеет вид `ПЕРЕМЕННАЯ =
ЗНАЧЕНИЕ`. Индексом первой  строки  является  единица.  Если
"индекс"  меньше  единице  или  больше, чем EnvCount, EnvStr
возвращает пустую строку.
     Более полная информация об операционной среде  ДОС  со-
держится в руководствах по операционной системе ДОС.

------------------------------------------------------------
 Функция Еоf (типизованные и нетипизованные файлы)
------------------------------------------------------------
     Функция: Для  типизованных  или  нетипизованных  файлов
возвращает состояние "конец файла".
     Описание: Eof(f)
     Тип результата: Булевский (boolean).
     Примечания: Параметр f представляет собой файловую  пе-
ременную.  Если текущая позиция в файле находится за послед-
ним элементом файла или если файл не содержит  никаких  эле-
ментов,  то  функция Еоf(f) возвращает значение Тruе. В про-
тивном случае она возвращает значение False.
     При  указании  директивы  компилятора   {$I+}   функция
IОRеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в  против-
ном случае.

------------------------------------------------------------
 Функция Еоf (текстовые файлы)
------------------------------------------------------------
     Функция: Возвращает состояние "конец файла" для тексто-
вых файлов.
     Описание: Eof(f)
     Тип результата: Булевский.
     Примечания: Параметр f представляет собой файловую  пе-
ременную,  определяющую  текстовый  файл. Если этот параметр
опущен,  то  используется  стандартная  файловая  переменная
Input.  Если  текущая позиция в файле находится за последним
элементом файла или если файл не содержит никаких элементов,
то функция Еоf(f) возвращает значение Тruе. В противном слу-
чае она возвращает значение False.
     При  указании  директивы  компилятора   {$I+}   функция
IОRеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в  против-
ном случае.
     Прочее: См. также функцию Eoln.
     Пример:

 var
   f  : text; ch : char;
  begin  { получить имя файла из командной строки }
   Assign(f, ParamStr(1));
   Reset(f);
  while not Eof(f) do
    begin
     Read(f,ch);   { вывести текстовый файл }
     Write(ch);
    end;
 end.

------------------------------------------------------------
 Функция Еоln
------------------------------------------------------------
     Функция: Для файлов возвращает состояние "конец строки"
(end-of-line).
     Описание: Eoln [ (var f : text) ]
     Тип результата: Булевский (boolean).
     Примечания: Параметр f представляет собой файловую  пе-
ременную,  определяющую  текстовый  файл. Если этот параметр
опущен, то подразумевается использование стандартной  файло-
вой переменной Input. Если текущая позиция в файле находится
на метке конца строки, то функция Еоln(f) возвращает  значе-
ние Тruе. В противном случае она возвращает значение False.
     При проверки состояния "конец строки" для  стандартного
ввода,  направление  которого  изменено  не  было, следующая
программа будет ждать, пока не будет введен символ  возврата
каретки, а затем передаст управление функции Eoln.

  begin
      WriteLn(Eoln);     { Это приведет к тому, что }
                         { программа будет ожидать ввода }
                         { клавиатуры }
    end.

     При  указании  директивы  компилятора   {$I+}   функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в  против-
ном случае.
     Прочее: См. также функцию Еоf.

------------------------------------------------------------
 Процедура Erase
------------------------------------------------------------
     Функция: Стирает внешний файл.
     Описание: Erase
     Примечания: Параметр f представляет собой файловую  пе-
ременную  любого  файлового  типа. Внешний файл, связанный с
переменной f, стирается.
     При  указании  директивы  компилятора   {$I-}   функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в  против-
ном случае.
     Ограничения: Процедура Еrase не  должна  использоваться
для открытого файла.
     Прочее: См. также процедуру Rename.
     Пример:

var
  f : file;
 ch : char;
begin
 { получить из командной строки имя предназначенного для
   удаления файла }

   Assign(f, ParamStr(1));
  {$I-}
   Reset(f);
  {$I+}
   if IOResult <> 0 then
     Write('Файл не найден ' ParamStr(1))
   else
   begin
      Close();
     Write('Стереть ', ParamStr(1)),'?');
     Readln(ch);
     if UpCase(ch) = 'Y' then
     Erase(f);
  end;
 end.

------------------------------------------------------------
 Процедура Exec                                  Модуль Dos
------------------------------------------------------------
     Функция: Выполняет указанную программу,  передавая  за-
данную строку параметров.
     Описание: Exec(маршрут, ком_строка : string)
     Примечания: Имя программы указывается в параметре "мар-
шрут",   а   строка   параметров   содержится   в  параметре
"ком_строка". Для выполнения внутренней команды ДОС запусти-
те файл СОММАND.СОМ. Например:

     Exec('COMMAND.COM','/C DIR *.PAS');

     /С перед командой является  запросом  на  запуск  файла
СОММАND.СОМ  (но  не других программ). Возможные коды ошибок
можно получить с помощью функции DosError. Этими кодами  мо-
гут  быть 2, 8, 10 и 11. Код завершения процесса можно полу-
чить с помощью функции DosExitCode.
     До начала выполнения программы процедура Ехес не  изме-
няет  распределение  памяти.  Таким  образом, при компиляции
программы, использующей процедуру Ехес,  необходимо  обеспе-
чить  задание максимального размера динамически распределяе-
мой области памяти, иначе памяти может не хватить  (DosError
= 8).

     Прочее: См. также функцию DosExitCode, SwapVectors.
     Пример:

 { 16К выделяется для стека, динамически распределяемая
   область не запрашивается и не резервируется }
  uses Dos;
  var
    ProgramName, CmdLine : string;
  begin
    Write('Программа, которую нужно выполнить (включая
           полное имя пути доступа): ');
    Readln(ProgramName);
    Write('Командная строка, которую нужно передать в прог-
           рамму ', ProgramName, ':');
    Readln(CmdLine);
    Writeln('Начало выполнения Exec...');
    Exec(ProgramName, CmdLine);
    Writeln('...возврат из Exec');
    if DosError <> 0 then                        { ошибка+ }
       Writeln('Ошибка ДОС #', DosError)
    else
       Writeln('Вызов Exec прошел успешно. Код завершения
                порожденного процесса = ', DosExitCode);
  end.

------------------------------------------------------------
 Процедура Exit
------------------------------------------------------------
     Функция: Выполняет немедленный выход из текущего блока.
     Описание: Exit
     Примечания: Когда процедура Ехit выполняется в подпрог-
рамме  (процедуре или функции), то происходит возврат управ-
ления из подпрограммы. Когда  эта  процедура  выполняется  в
операторной части программы, она вызывает прекращение работы
программы. Обращение к Ехit аналогично оператору перехода на
оператор  с меткой, адрес которого находится непосредственно
после оператора end.
     Прочее: См. также функцию Наlt.

     Пример:

  uses Crt;
  procedure WasteTime;
  begin
    repeaat
      if KeyPressed then Exit;
      Write('Xx');
    until False;
  end;
  end.

------------------------------------------------------------
 Функция Exp
------------------------------------------------------------
     Функция: Возвращает экспоненциальное значение  аргумен-
та.
     Описание: Exp(x : real)
     Тип результата: Вещественный (real).
     Примечания: Параметр x является выражением вещественно-
го  типа. Результатом будет экспонента x, то есть значение e
возводится в степень x (e - основание натурального  логариф-
ма).
     Прочее: См. также функцию Ln.

------------------------------------------------------------
 Функция FExpand                                 Модуль Dos
error in example ................

ном случае.
     Ограничения: Функция не может использоваться  для  тек-
стового файла, Файл должен быть открыт.
     Прочее: См. также функцию FilePos.
     Пример:

 var
   f : file of byte;
 begin
  { получить имя файла из командной строки }
  Assign(f, ParamStr(1));
  Reset(f);
  Writeln('Размер файла в байтах: ', FileSize(f));
  Close(f);
 end.

------------------------------------------------------------
 Процедура FillChar
------------------------------------------------------------
     Функция: Помещает в заданное число  следующих  друг  за
другом байтов указанное значение.
     Описание: FillChar(x; счетчик : word; значение)
     Примечания: Параметр x является ссылкой  на  переменную
любого типа, "счетчик" представляет собой выражение длиной в
слово, "значение" является  выражением  перечислимого  типа.
Процедура записывает значение, указанное в параметре "значе-
ние", в то количество следующих друг за другом байтов  памя-
ти, начиная с первого байта, занимаемого переменной х, кото-
рое определяется параметром "счетчик".
     Проверка на допустимость границ не выполняется, поэтому
будьте внимательны.

     Если это возможно, при использовании процедуры FillChar
задавайте  параметр "счетчик". При использовании этой проце-
дуры для строк не забудьте после заполнения установить длину
в байтах.
     Прочее: См. также процедуру Моvе.
     Пример:

 var
  s : string[80];
 begin
  { задать строку, состоящую из пробелов }
  FillChar(s, SizeOf(s),' ');   { установить длину последо-
                                  вательности байтов }
  s[0] := #80;
 end.

------------------------------------------------------------
 Функция FillEllipse                             Модуль Dos
------------------------------------------------------------
     Функция: Рисует эллипс.
     Описание: FillEllipse(X, Y: integer; Храдиус,  Yрадиус:
word)
     Примечания: Используя точку с координатами (X,Y) в  ка-
честве центра, а Храдиус и Yрадиус - в качестве горизонталь-
ной и вертикальной осей, рисует закрашенный эллипс.
     Аналогичная программа имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее:  См. также   процедуры  Arc,  Circle,  Ellipse,
GetArcCoords, GetAspectRatio, PieSlice.
     Пример:

  uses
    Graph;
  const
    R = 30;
  var
    Driver, Mode: integer;
    Xasp, Yasp : word;

  begin
    Driver := Detect;      { переводит в графический режим }
    InitGraph(Driver, Mode, '');
    if GraphResult < 0 then
       Halt(1);
    { нарисовать эллипс }
    FillEllipse(GetMaxX div 2, GetMaxY div 2, 50, 50);
    GetAspectRatio(Xasp, Yasp);
    { "круглый" эллипс }
    FillEllipse(R, R, R, R, * LongInt(Xasp) div Yasp);
   readLn;
   CloseGraph;
  end.

------------------------------------------------------------
 Процедура FillPoly                            Модуль Graph
------------------------------------------------------------
     Функция: Заполняет многоугольник.
     Описание: FillPoly((числ_коорд : word; var коорд_верш)
     Примечания: Параметр "коорд_верш" является нетипизован-
ным  параметром, который содержит координаты каждого пересе-
чения сторон в многоугольнике. Параметр "числ_коорд"  задает
число  координат  в "коорд_верш". Координата состоит из двух
слов: значения x и значения y.
     Данная процедура вычисляет все горизонтальные пересече-
ния и затем заполняет многоугольник, используя текущий тип и
цвет закраски, которые задаются процедурами  SetFillStyle  и
SetFillPattern.  При вычерчивании контура многоугольника ис-
пользуется текущий тип линии и цвет, которые устанавливаются
процедурой SetLineStyle.
     Если при заполнении многоугольника возникает ошибка, то
функция GraphResult возвращает значение -6 (grNoScanMem).
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры: DrawPoly, GetFillSettings,
GetLineSettings, SetLineStyle, GraphResult.
     Пример:

  const
  Pentagon : array[1..6] of PointType =
    ((x: 50; y: 50),
     (x: 75; y: 75),
     (x: 62; y: 100),
     (x: 48; y: 100),
     (x: 25, y: 75),
     (x: 50, y: 50));
  begin
   ...
   DrawPoly(SizeOf(Pentagon)
           div SizeOf(PointType), Pentagon);
   FillPoly(SizeOf(Pentagon)
           div SizeOf(PointType), Pentagon);
  ...
  end.

------------------------------------------------------------
 Процедура FindFirst                             Модуль Dos
------------------------------------------------------------
     Функция: Производит поиск в заданном (или текущем)  ка-
талоге  первой записи, соответствующей заданному имени файла
и набору атрибутов файла.
     Описание: FindFirst(маршрут: string; атриб : вуtе;  var
S: SearchRec)
     Примечания: Параметр "маршрут" определяет каталог, нап-
ример  "*.*". Параметр "атриб" определяет включение в список
рассматриваемых специальные файлы (наряду со всеми  обычными
файлами). Приведем список атрибутов файла, как они описаны в
модуле Dos:

  const
    { константы атрибутов файла }
   ReadOnly   = $01;  { только чтение }
   Hidden     = $02;  { "скрытый" файл }
   SysFile    = $04;  { системный файл }
   VolumeId   = $08;  { идентификатор тома }
   Directory  = $10;  { каталог }
   Archive    = $20;  { архивизация }
   AnyFile    = $3F;  { прочий файл }

     Результат поиска по каталогу  возвращается  в  заданной
записи  типа  SearchRec, который описывается в модуле Dos:

  type
   { тип SearchRec, использующийся в процедурах FindFirst
     и FindNext }
    SearchRec = record
                  Fill : array[1..2] of byte;
                  Attr : byte;
                  Time : longint;
                  Size : longint;
                  Name : string[12];
                end;

     Коды ошибки можно получить с помощью DosError.  Возмож-
ными  значениями  кодов  являются 2 (каталог не найден) и 18
(больше файлов нет).
     Прочее: См. также процедуру FindNext.
     Пример:

  uses Dos;
  var
    DirInfo : SearchRec;
  begin
    FindFirst('*.PAS', Archive, DirInfo); { то же, что и
                                            DIR *.PAS }
    while DosError = 0 do
    begin
      Writeln(DirInfo.Name);
      FindNext(DirInfo);
    end;
  end.

------------------------------------------------------------
 Процедура FindNext                              Модуль Dos
------------------------------------------------------------
     Функция: Возвращает  следующую  запись,  совпадающую  с
именем и атрибутами файла, указанными при предыдущем обраще-
нии к процедуре FindFirst.
     Описание: FindNext(var s : SearchRec)
     Примечания: Параметр s должен быть таким  же,  как  при
обращении  к  FindFirst  (тип SearchRec описывается в модуле
Dos; см. процедуру FindFirst). С помощью DosError можно  по-
лучить  код ошибки. Единственно возможным кодом является код
18, указывающий на отсутствие файлов.
     Прочее: См. также процедуру FindFirst.
     Пример: См. пример для процедуры FindFirst.

------------------------------------------------------------
 Процедура FloodFill                           Модуль Graph
------------------------------------------------------------
     Функция: Заполняет ограниченную облать, используя теку-
щий заполнитель.
     Описание: FloodFill(x, y, граница : word)
     Примечания: Эта процедура используется  для  заполнения
замкнутой области (для растровых устройств). Точка (x,y) яв-
ляется внутренней точкой заполняемой области. Для заполнения
области,  ограниченной  цветом,  который определяет параметр
"граница", используется текущий образец закраски. Если точка
(x,y)  находится  внутри  замкнутой  области, то заполняется
внутренняя область. Если эта точка находится  вне  замкнутой
области,  то  заполняется  ее внешняя часть (поле экрана, не
входящее в область).
     Если при заполнении области происходит ошибка, то функ-
ция GraphResult возвращает значение -7 (grNoFloodMem).
     Заметим, что процедура FloodFill останавливается  после
того,  как выведено две пустых строки. Это может произойти в
том случае, когда заполнитель и маленький прямоугольник сли-
ваются.  В  следующей  программе  прямоугольник полностью не
закрашивается:

  program StopFill;
  uses Graph;
  var
    Driver, Mode: integer;
  begin
    Driver := Detect;
    InitGraph(Driver, Mode, 'c:\bgi');
    if GraphResult <> grOk then
       Halt(1);
    SetFillStyle(LtSlashFill, GetMaxColor);
    Rectangle(0, 0, 8, 20);
    FloodFill(1, 1, GetMaxColor);
    ReadLn;
    CloseGraph;
  end.

     В этом случае прямоугольник будет полностью  заклрашен,
если использовать более "густой" заполнитель типа SlashFill.
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Прочее: См. также процедуры  SetFloodPattern,  SetFill-
Pattern.
     Пример:

  begin
   ...
    SetColor(Red);
    FloodFill(50,50,Blue);
     ...
  end.

------------------------------------------------------------
 Процедура Flush
------------------------------------------------------------

     Функция: Выводит содержимое буфеар открытого для вывода
текстового файла.
     Описание: Flush(var f : text)
     Примечания: Параметр  f  является  файловой  переменной
текстового типа.

     Когда текстовый файл открывается для вывода  с  помощью
процедур  Rewrite  или  Аppеnd,  обращение к процедуре Flush
позволяет очистить буфер файла. Это обеспечивает то, что все
символы,  записанные в это время в файл, будут действительно
записаны во внешний файл. Для файлов,  открытых  для  ввода,
данная процедура никаких дейстий не выполняет.
     При  указании  директивы  компилятора   {$I-}   функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в  против-
ном случае.

------------------------------------------------------------
 Функция Frac
------------------------------------------------------------
     Функция: Возвращает дробную часть аргумента.
     Описание: Frac(x : real)
     Тип результата: Вещественный (real).
     Примечания: Параметр х является выражением вещественно-
го  типа.  Результатом  является  дробная  часть  x, то есть
Frас(x) = x - Int(x).
     Прочее: См. также функцию Int.
     Пример:

 var
   r : real;
   begin
    f := Frac(123.456);
   end.

------------------------------------------------------------
 Процедура FreeMem
------------------------------------------------------------
     Функция:  Уничтожает  динамическую  переменную  данного
размера.
     Описание: FrееМем(var : роinter; размер : word)
     Примечания: Параметр p является указателем на  перемен-
ную  (относящимся  к  любому  типу указателей), для которого
было предварительно выполнено присваивание с помощью  проце-
дуры  GetМем или которому было присвоено значащее значение с
помощью оператора присваивания. Параметр "размер"  представ-
ляет  собой  выражение длиной в слово, которое задает размер
уничтожаемой динамической переменной (в байтах). Его  значе-
ние  должно  в точности соответствовать числу байтов памяти,
отведенных ранее для переменной процедурой GetМем. Процедура
FrееМем  разрушает переменную, на которую указывает p, и ос-
вобождает занятую ей область памяти в динамически  распреде-
ляемой области. Если указатель p не ссылается на область па-
мяти в динамически распределяемой области, то во  время  вы-
полнения  программы возникает ошибка. После обращения к про-
цедуре FrееМем значение указателя p становится  неопределен-
ным, а последующие ссылки вида p будут приводить к ошибке.
     Отличия: В версии 3.0 параметр "размер" был целого  ти-
па.
     Прочее: См. также процедуры Dispose, GetMem, Release.

------------------------------------------------------------
 Функция FSearch                                 Модуль Dos
------------------------------------------------------------
     Функция: Ищет файл в списке каталогов.
     Описание: FSearch(маршрут: PathStr; список_кат: string)
     Примечания: Функция выполняет  поиск  файла,  заданного
параметром  "маршрут", в списке каталогов, заданных парамет-
ром "список_кат". Каталоги в списке должны разделяться  точ-
кой  с  запятой  аналогично тому, как это делается в команде
операционной системы ДОС PATH. Поиск начинается всегда с те-
кущего  каталога  на  текущем  диске.  Возвращаемое значение
представляет собой конкатенацию одного из маршрутов  катало-
гов и имени файла или, в том случае, если файл найден не бу-
дет, пустую строку.
     Тип PathStr описан в  модуле  Dos,  как  строковый  тип
string[79].
     Для нахождения выполняемых файлов с помощью команды ДОС
PATH  нужно  вазвать процедуру GetEnv('PATH') и передать ре-
зультат функции FSearch в качестве параметра "список_кат".
     Результат  функции  FSearch  можно   передать   функции
FExpand  для  преобразования его в полное имя файла, то есть
имя файла, записанное прописными буквами включающее  в  себя
буквенную  метку дисковода и маршрут доступа к каталогу, на-
чиная от корневого каталога. Кроме того для разделения имени
файла  на  строку,  определяющую каталог, и строку, задающую
дисковод можно использовать функцию FSplit.
     Прочее: См. также функции FExpand, Fsplit, GetEnv.
     Пример:

  uses Dos;
  var
    S: PathStr;
  begin
    S: := FSearch('TURBO.EXE', GetEv('PATH'));
    if S = '' then
       WriteLn('Файл TURBO.EXE не найден');
    else
       WriteLn('Найден файл ',FExpand(S));
  end.

------------------------------------------------------------
 Процедура FSplit                                Модуль Dos
------------------------------------------------------------
     Функция: Разделяет имя файла на три компоненты.
     Описание: FSplit(маршрут: PathStr; var каталог: DirStr;
var имя: NameStr; var расшир: ExtStr)
     Примечания: Имя файла, заданное  параметром  "маршрут",
разделяется  на три его компоненты. Для переменной "каталог"
устанавливается значение буквенной метки дисковода и маршру-
та  доступа  к каталогу со всеми начальным конечными знаками
обратной косой черты, переменной "имя" присваивается  значе-
ние  имени  файла,  а  переменной "расшир" - расширение мени
файла с предшествующей точкой. Каждый из  этих  составляющих
строку  элементов может оказаться пустым (в том случае, если
"маршрут" не содержит соответствующего элемента).
     Типы PathStr, DirStr, ExtStr и NameStr определены в мо-
дуле Dos следующим образом:

  type
    PathStr = string[79];
    DirStr  = strig[67];
    NameStr = string[8];
    ExtStr  = string[4];

     При разделении имени файла на компоненты FSplit не  до-
бавляет и не удаляет никаких символов и при конкатенации ре-
зультирующих переменных "каталог", "имя"  и  "расшир"  будет
получен заданный маршрут.
     Пример:

  uses Dos;
  var
    P: PathStr;
    D: DirStr;
    N: NameStr;
    E: ExtStr;
  begin
    Write('Имя файла (WORK.PAS) : ')
    ReadLn(P);
    FSplit(p, D, N, E);
    if N = '' then N:='WORK';
    if E = '' then E:='.PAS';
    P := D + N + E;
    WriteLn('Результирующее имя = ',P);
  end.

------------------------------------------------------------
 Процедура GetArcCoords                        Модуль Graph
------------------------------------------------------------
     Функция: Позволяет пользователю выдавать запрос о коор-
динатах последней команды Аrс.
     Описание: GetArcCoords(var координаты : ArcCoordsType)
     Примечания: Данная процедура возвращает переменную типа
CoordType, который является предописанным и определен следу-
ющим образом:

     type
        ArcCoordsType :
        Х,Y : integer; Хнач, Yнач, Хкон,
        Yкон : word;

     end;

     Процедура GetArcCoords возвращает переменную,  содержа-
щую  точку центра (Х,Y), начальную позицию (Хнач,Yнач) и ко-
нечную позицию (Хкон,Yкон) последней команды Аrс. Эти значе-
ния могут быть полезными, если вы хотите, например, провести
прямую, начинающуюся от конца дуги.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры Arc, Ellipse, PieSlice, Pi-
eSliseXY.
     Пример:

 var
  ArcCoords : ArcCoordsType;
 begin
  ...
  Arc(100,100,0,89,30);
  GetArcCoords(ArcCoorsType);
  MoveTo(100,100);
  with ArcCoords do
        Line(Xstart, Ystart, Xend, Yend);
  ...
  end.

------------------------------------------------------------
 Процедура GetAspectRatio                      Модуль Graph
------------------------------------------------------------
     Функция: Возвращает действующую разрешающую способность
графического  экрана, с помощью которого можно вычислить ко-
эффициент относительного удлиннения (Хк,Yк).
     Описание: GetAspectRatio(var Хк, Yк : word)
     Примечания: Для каждого драйвера и графического  режима
имеется  связанный с ним коэффициент относительного удлинне-
ния (частное от деления максимального  разрешения  по  y  на
максимальное разрешение по x). Это отношение можно вычислить
путем обращения к процедуре  GetAspectRatio  и  последующего
деления параметра Хк на параметр Yк. Это отношение использу-
ется при вычерчивании окружностей, дуг и закруглений.
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры Arc, Circle, GetMaxX,  Get-
MaxY, PieSlice, SetAspectRatio.
     Пример:

 var
  Xasp, Yasp : word;
  XSideLength, YSideLength : integer;
 begin
  ...
  GetAspectRatio(Xasp,Yasp);
   XSideLength := 20;
    { выровнять длину по Y в соответствии с коэфициентом
      относительного удлиннения }
   YSideLength := Round((Xasp/Yasp)*XSideLength);
    { нарисовать на экране "квадратный" прямоугольник }
   Rectangle(0,0,XSideLength,YSideLength);
   ...
  end.

------------------------------------------------------------
 Функция GetBkColor                            Модуль Graph
------------------------------------------------------------
     Функция: Возвращает текущее значение фонового цвета.
     Описание: GetBkColor
     Тип результата: Слово (word).
     Примечания: Фоновый цвет может принимать значения в ди-
апазоне  от  0 до 15 (в зависимости от текущего графического
драйвера и текущего графического режима).
     Если запись 0 палитры была изменена обращением к проце-
дурам  SetPalette  или  SetAllPalette, то функция GetBkColor
будет возвращать значение 0.
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры GetColor, GetPalette, Init-
Graph, SetAllPalette, SetBkColor, SetColor, SetPalette.
     Пример:

  uses Graph;
  var
    GraphDriver, GraphMode : integer;
    Color : word;
  begin
    GraphDriver := Detect;
    InitGraph(GraphDriver,GraphMode,'');
    if GraphResult <> grOk then
      Halt(1);
    Randomize;
    repeat
    Color := Succ(GetBkColor);
    if Color > PaletteSize then
      Color := 0;
    SetBkColor(Color);
    LineTo(Random(GetMaxX), Random(GetMaxY));
  until False;                 { для выхода нажмите ^Break }
 end.

------------------------------------------------------------
 Процедура GetCBreak                             Модуль Dos
------------------------------------------------------------
     Функця: Возвращает состояние Ctrl-Break, которое прове-
ряется операционной системой ДОС.
     Описание: GetCBreak(var Break: boolean)
     Примечания:  Данная  процедура   возварщает   состояние
Ctrl-Break,  проверяемое  в  ДОС.  В  выключенном  состоянии
(False) ДОС проверяет Ctrl-Break только при выводе  на  кон-
соль,  устройство  печати  или  в коммуникационные порты. Во
включенном состоянии (True) проверки делаются при каждом об-
ращении к системе.
     Прочее: См. также функцию SetCBreak.

------------------------------------------------------------
 Функция GetColor                              Модуль Graph
------------------------------------------------------------
     Функция: Возвращает текущее значение  основного  цвета,
установленное  при предыдущем успешном обращении к процедуре
SetColor.
     Описание: GetColor
     Тип результата: Слово (word).
     Примечания: Если данная процедура  возвращает  значение
0, то это означает, что текущим цветом, используемым для вы-
черчивания, является первый цвет палитры. Основной цвет  мо-
жет принимать значения от 0 до 15, в зависимости от текущего
графического режима и графического драйвера.
     Аналогичная функция имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры GetBkColor, GetPalette, In-
itGraph, SetAllPelette, SetColor, SetPalette.
     Пример:

 var
  GraphDriver, GraphMode : integer;
  Color : word;
 begin
  GraphDriver := Detect;
  InitGraph(GraphDriver,GraphMode,'');
  Randomize;
 repeat
    Color := Succ(GetBkColor);
    if Color > PaletteSize then
      Color := 0;
    SetBkColor(Color);
    LineTo(Random(GetMaxX), Random(GetMaxY));
  until False;                 { для выхода нажмите ^Break }
 end.

------------------------------------------------------------
 Процедура GetDate                               Модуль Dos
------------------------------------------------------------
     Функция: Возвращает текущую дату, установленную в  опе-
рационной системе.
     Описание: GetDate(var год, месяц, число, день_недели  :
word)
     Примечания: Возвращаемые значения имеют следующие  диа-
пазоны:  "год" - 1980..2099, "месяц" - 1..12, "число" 1..31,
"день_недели" - 0..6 (где значение 0 соответствует воскресе-
нью).
     Прочее: См. также процедуры SetDate, GetTime, SetTime.

------------------------------------------------------------
 Функия GetDefaultPalette                      Модуль Graph
------------------------------------------------------------
     Функция: Возвращает запись описания паплитры.
     Описание: GetDefaultPalette(var палитра: PaletteType)
     Примечания:   Данная    функция    возвращает    запись
PaletteType,  содержащую палитру, инициализированную драйве-
ром при вызове процедуры InitGraph.

  const
     MaxColors = 15;
  type
    PaletteType = record
                    Size : byte;
                    Colors : array[0..MaxColor] of shortint;
                  end;

     Аналогичная фукнция имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также функции  InitGraph,  GetPalette,  Se-
tAllPalette, SetPalette.
     Пример:

  uses
   Crt, Graph;
  var
   Driver, Mode,
   i : integer;
   MyPal, OldPal : PletteType;
  begin
    DirectVideo := false;
    Randomize;
    Driver := Detect;   { перевести в граический режим }
    InitGraph(Driver, Mode, '');
    if GraphResult < 0 then
       Halt(1);
    GetDefultPalette(OldPal); { сохранить старую палитру }
    MyPal := OldPal; { скопировать и изменить }
    { вывести инормацию на экран }
    for i = 0 to MyPal.Size - 1 do
    begin
      GetColor(i);
      OutTextXY(10, i * 10, '...нажмите любую клавишу...');
    end;
    repeat      { менять палтру, пока нажата клавиша }
      with MyPl do
        Colors[Random(Size)] := Random(Size + 1);
      SetAllPalette(MyPal);
    until KeyPressed;
    SetAllPalette(OldPal); { восстановить исходную палитру }
    ClearDevice;
    OutTextXY(10, 10, 'Нажмите RETURN...')
    ReadLn;
    CloseGraph;
 end.

------------------------------------------------------------
 Процедура GetDir
------------------------------------------------------------
     Функция: Возвращает текущий каталог на заданном диске.
     Описание: GetDir(d : byte; var s : string)
     Примечания: Параметр d представляет собой выражение це-
лого  типа, а s - переменную строкового типа. Значение теку-
щего каталога на диске, заданного параметром d, возвращается
в  переменной  s. Значение d = 0 указывает на текущий диско-
вод, 1 - задает дисковод А, 2 - В и т.д.

     При  указании  директивы  компилятора   {$I-}   функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в  против-
ном случае.
     Прочее: См. также процедуры ChDir, MkDir, RmDir.

------------------------------------------------------------
 Функция GetDriverName                         Модуль Graph
------------------------------------------------------------
     Функция: Возвращает  строку,  содержащую  имя  текущего
драйвера.
     Описание: GetDriverName
     Тип результата: Строковый (string).
     Примечания: После обращения к InitGraph данная  функция
возвращает имя активного драйвера.
     Аналогчная функция имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также функцию InitGraph.
     Пример:

  uses Graph;
  var
    Driver, Mode : integer;
  begin
    Driver := Detect;  { перевести в графический режим }
    InitGraph(Driver, Mode, '');
    if GraphResult < 0 then
       Halt(1);
    OutText('Используется драйвер ' + GetDriverName);
    ReadLn;
    CloseGraph;
  end.

------------------------------------------------------------
 Функция GetEnv                                  Модуль Dos
------------------------------------------------------------
     Функция: Возвращает значение заданной переменной опера-
ционной среды.

     Описание: GetEnv(перем_среды : string)
     Примечания: Функция GetEnv возвращает значение заданной
переменной.  Имя переменной может указываться как строчными,
так и прописными буквами, но оно не должно включать  в  себя
знак  равенства  (=).  Если заданная переменная операционной
среды не существует, то  функция  GetEnv  возвращает  пустую
строку.
     Более подробная информация об  операционной  среде  ДОС
содержится в справочных руководствах по ДОС.
     Прочее: См. также функции EnvCount, EnvStr.
     Пример:

  {$M 8192,0,0}
  uses Dos;
  var
    Command: string[79];
  begin
    Write('Ввведите команду ДОС: ');
    ReadLn(Command);
    if Command <> '' then
       Command := '/C/ + Command;
    SwapVectors;
    Exec(GetEnv(COMSPEC'), Command);
    SwapVectors;
    if DosError <> 0 then
       Writeln('Нельзя выполнить COMMAND.COM');
  end.

------------------------------------------------------------
 Процедура GetFAttr                              Модуль Dos
------------------------------------------------------------
     Функция: Возвращает атрибуты файла.
     Описание: GetAttr(var f; var атриб : byte)
     Примечания: Параметр f должнен представляеть собой фай-
ловую  переменную  (соответствующую типизованному, нетипизо-
ванному или текстовому файлу) для которого должно  быть  вы-
полнено  присваивание файловой переменой, но который не дол-
жен быть открыт. Проверка атрибутов выполняется путем  срав-
нения их с масками, заданными в виде констант в модуле Dos:

  const
    { константы атрибутов файла }
   ReadOnly   = $01;  { только чтение }
   Hidden     = $02;  { "скрытый" файл }
   SysFile    = $04;  { системный файл }
   VolumeId   = $08;  { идентификатор тома }
   Directory  = $10;  { каталог }
   Archive    = $20;  { архивизация }
   AnyFile    = $3F;  { прочий файл }

     Коды ошибок можно получить с помощью функции  DosError.
Возможными  кодами  ошибок являются код 3 (недопустимый мар-
шрут) и код 5 (файл недоступен).
     Ограничения: Файл f не должен быть открыт.
     Прочее: См. также процедуры SetFAttr,  GetFAttr,  SetF-
Time.
     Пример:

 uses Dos;
  var
    f : file;
    attr : byte;
  begin
 { получить из командной строки имя файла }
 Assign(f, ParamStr(1));
 GetFAttr(f, attr);
 Writeln(ParamStr(1));
 ifDosError <> 0 then
    Writeln('Код ошибки ДОС = ', DosError)
 else
 begin
    Writeln('Атрибут = ', attr);
 { определить тип атрибута файла с помощью флагов в модуле
   Dos }
 if attr and ReadOnly <> 0 then
    Writeln('Файл доступен только по чтению');
 if attr and Hidden <> 0 then
    Writeln('"Скрытый" файл');
 if attr and SysFile <> 0 then
    Writeln('Системный файл');
 if attr and VolumeId <> 0 then
    Writeln('Идентификатор тома');
 if attr and Directory <> 0 then
    Writeln('Каталог');
 if attr and Archive <> 0 then
    Writeln('Архивизируемый (обычный) файл');
 end; { else }
end.

------------------------------------------------------------
 Процедура GetFillPattern                      Модуль Graph
------------------------------------------------------------
     Функция: Возвращает текущий образец заполнителя, задан-
ный последним обращением к процедуре SetFillPattern.
     Описание: GetFillPattern(var образец_заполнителя: Fill-
PatternType)
     Примечания: Тип FillPatternType описан в модуле Graph:

  type
    FillPatternType = array[1..8] of byte;

     Если   пользователь   не    обращался    к    процедуре
SetFillPattern,  то  процедура GetFillPattern возвратит мас-
сив, заполеннный $FF.
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры SetFillPattern, GetFillSet-
tings.

------------------------------------------------------------
 Процедура GetFillSettings                     Модуль Graph
------------------------------------------------------------
     Функция: Позволяет выдавать запрос о текущем  типе  за-
полнителя  и его цвете, которые установлены процедурами Set-
FillStyle или SetFillPattern.
     Описание:    GetFillSetings(var     информ_заполн     :
FillSettingsType)
     Примечания: Данная процедура возвращает переменную типа
FillSettingsType, который описывается в модуле Graph следую-
щим образом:

 type
   FillSettingsType = record
                        Pattern : word;             { тип }
                        Color   : word;             { цвет }
                      end;

     Поле Pattern содержит выбранный в качестве текущего тип
заполнителя.  Поле Color содержит выбранный в качестве теку-
щего цвет закраски. И образец, и цвет закраски  можно  изме-
нить путем обращения к процедурам SetFillStyle и SetFillPat-
tern.
     Ограничения: Должен использоваться графический режим.
     Прочее: См.  также  процедуры  FillPoly,  SetFillStyle,
SetFillPattern.
     Пример:

 var
   FillInfo : FillSttingsType;
   CurPattern,
   CurColor : word;
 begin
  ...
  GetFillSettings(FillInfo);
  CurPattern := FillInfo.Pattern;
  CurColort := FillInfo.Color;
  ...
 end.

------------------------------------------------------------
 Процедура GetFTime                               Модуль Dos
------------------------------------------------------------
     Функция: Возвращает дату и время последней записи  фай-
ла.
     Описание: GetFTime(var f; var время)
     Примечания: Параметр f должнен представляеть собой фай-
ловую  переменную  (соответствующую типизованному, нетипизо-
ванному или текстовому файлу) для которого должно  быть  вы-
полнено присваивание файловой переменной, но который не дол-
жен быть открыт. Значение времени, возвращаемое в  параметре
"время",  может быть распаковано путем обращения к процедуре
UnpackTime. Коды ошибок можно  получить  с  помощью  функции
DosError. Единственным возможным кодом ошибки является код 6
(недопустимая обработка файла).
     Ограничения: Файл должен быть открыт.
     Прочее: См. также процедуры SetFTime, PackTime, UnPack-
Time.

-----------------------------------------------------------
 Функция GetGraphMode                         Модуль Graph
-----------------------------------------------------------
     Функция: Возвращает текущий графический режим.
     Описание: GetGraphMode
     Примечания: Данная процедура возвращает текущий  графи-
ческий  режим,  установленный с помощью процедур InitGraph и
SetGraphMode. Значения режима представляет собой целое число
в диапазоне от 0 до 5 и зависит от текущего драйвера.
     Определены следующие константы режима:

------------------------------------------------------------
Графический   Имя     Значение   Столбцов   Палитра  Страниц
  драйвер  константы              х строк
------------------------------------------------------------
CGA         CGAC0         0      320x200        C0        1
            CGAC1         1      320x200        C1        1
            CGAC2         2      320x200        C2        1
            CGAC3         3      320x200        C3        1
            CGAHi         4      640x200     2 цвета      1

MCGA        MCGAC0        0      320x200        C0        1
            MCGAC1        1      320x200        C1        1
            MCGAC2        2      320x200        C2        1
            MCGAC3        3      320x200        C3        1
            MCGAMed       4      640x200     2 цвета      1

EGA         EGALo         0      640x200     16 цветов    1
            ЗЙДКк         1      640щ350     16 цветов    2

ЗЙД64       ЗЙД64Ор       0      640щ200     16 цветов    1
            ЗЙД64Кк       1      640щ350      4 цвета     1

EGA-        EGAMonoHi     3      640x350      2 цвета     1*

MONO        EGAMonoHi     3      640x350      2 цвета    1**

HERC        HercMonoHi    0      720x348      2 цвета     2

ATT400      ATT400C0      0      320x200         C0       1
            ATT400C1      1      320x200         C1       1
            ATT400C2      2      320x200         C2       1
            ATT400C3      3      320x200         C3       1
            ATT400Med     4      640x200       2 цвета    1
            ATT400Hi      5      640x200       2 цвета    1

VGA         VGALo         0      640x200      16 цветов   2
            VGAMed        1      640x350      16 цветов   2
            VGAHi         2      640x480      16 цветов   1

PC3270      PC3270Hi      0      640x200       2 цвета    1

8514        IBM8514Lo     0      640x480      256 цветов  1
8514        IBM8514Hi     0     1024x768      256 цветов  1

* - 64К на плате EGAMono
** - 256К на плате EGAMomo
------------------------------------------------------------
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры ClearDevice, DetectGraph,
InitGraph, RestoreCrtMode, SetGraphMode.
     Пример:

  uses Graph;
  var
    Gd, Gm : integer;
    Mode : integer;
  begin
   Gd := Detect;
   InitGraph(Gd, Gm, '');
   if GraphResult <> grOk then
      Halt(1);
   OutText('Для выхода из средств графики нажмите RETURN:');
   Readln;
   RestoreCRTMode;
 Writeln('Теперь вы в текстовом режиме');
 Writeln('Для перехода в графический режим нажмите RETURN');
   Readln;
   SetGraphMode(GetGraphMode);
   OutTextXY(0, 0, 'Вы снова в графическом режиме');
 OutTextXY(0, TextHeight('H'), 'Для выхода нажмите RETURN');
   Readln;
   CloseGraph;
 end.

------------------------------------------------------------
 Процедура GetImage                            Модуль Graph
------------------------------------------------------------
     Функция: Сохраняет в буфере двоичный образ заданной об-
ласти экрана.
     Описание:  GetImage(х1,  у1,  х2,  у2,  :   word;   var
бит_масс)
     Примечания: Параметры х1, у1, х2, у2 определяют прямоу-
гольную область экрана. Параметр "бит_масс" является нетипи-
зованным параметром, который должен быть больше или равен 4,
плюс  размер  памяти,  отведенный для области экрана. Первые
два слова параметра "бит_масс" зарезервированы для ширины  и
высоты области экрана:

 width  := x2 - x1 + 1;                        { ширина }
 heignt := y2 - y1 + 1;                        { высота }

     Оставшаяся часть параметра "бит_масс" используется  для
сохранения  самого двоичного образа. Для определения размера
памяти, необходимой для  параметра  "бит_масс",  используйте
фунцию ImageSize.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры ImageSize, PutImage.
     Пример:

 var
   P    : pointer;
   Size : word;
   Gd, Gm : pointer;
  begin
   Gd := Detect;
   InitGraph(Gd, Gm, '');
   if GraphResult <> grOk then
      Halt(1);
  Bar(0, 0, GetMaxX, GetMaxY);
  Size := ImageSize(10,20,30,40);
  GetMem(p,Size);         { выделить память в динамически
                            распределяемой области }
  GetImage(10,20,30,40,p^);
  Readln;
  ClearDevice;
  PutImage(100, 100, P^, NormalPut);
  Readln;
  CloseGraph;
 end.

------------------------------------------------------------
 Процедура GetIntVec                             Модуль Dos
------------------------------------------------------------
     Функция: Возвращает адрес указанного  вектора  прерыва-
ний.
     Описание: GetIntVec( ном_прерыв : byte;  вектор  :
pointer)
     Примечания: Параметр "ном_прерыв" задает номер  вектора
прерывания  (от  0 до 255), а его адрес возвращается в пара-
метре "вектор".
     Прочее: См. также процедуру SetIntVec.

------------------------------------------------------------
 Процедура GetLineSettings                     Модуль Graph
------------------------------------------------------------
     Функция: Возвращает текущий тип линии, образец линии  и
ее толщину, установленные процедурой SetLineStyle.
     Описание: GetLineStyle(var LineInfo : LineSettingsType)
     Примечания: Определены следующие константы и типы:

  type
    LineSettingsType = record
        LineStyle  : word;
        Pattern    : word;
        Thickness  : word;
  end;

 const
   { типы линий }
   SolidLn   = 0;
   DottedLn  = 1;
   CenterLn  = 2;
   DashedLn  = 3;
   UserBitLn = 4;     { тип линии, заданный пользователем }

  { толщина линии }
  NormWidth   = 1;         { обычная линия }
  ThickWidth  = 3;         { жирная линия }

     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуру SetLineStyle.
     Пример:

  var
    LineInfo : LineSettingsType;
  begin
   ...
   GetLineSettings(LineInfo);
   CurStyle := LineInfo.LineStyle;
   CurPattern := LineInfoPattern;
   CurWidth := LineInfo.Thickness;
   ...
  end.

------------------------------------------------------------
 Процедура GetMaxColor                         Модуль Graph
------------------------------------------------------------
     Функция: Возвращает наибольшее значение цвета,  которое
можно передать процедуре SetColor.
     Описание: GetMaxColor
     Тип результата: Слово (word).
     Примечания: Например, при использовании адаптера EGA  с
256К  функция GetMaxColor всегда возвращает значение 15. Это
означает,  что  допускается  любое  обращение  к   процедуре
SetColor со значением от 0 до 15. При использовании адаптера
CGA в режиме с высоким  разрешением  или  монохроматического
адаптера Hercules, поскольку эти адаптеры поддерживают толь-
ко значения основного цвета 0 или 1,  процедура  GetMaxColor
возвращает значение 1.
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуру SetColor.

------------------------------------------------------------
 Функция GetMaxMode                            Модуль Graph
------------------------------------------------------------
     Функция: Возвращает для текущего загруженного  драйвера
максимальное значение номера режима.
     Описание: GetMaxMode
     Тип результата: Слово (word).
     Примечания: Данная функция позволяет вам непосредствен-
но из драйвера найти для текущего драйвера максимальное зна-
чение номера режима. (Ранее единственный способ,  с  помощью
которого вы могли получить это значение, состоял в использо-
вании процедуры GetModeRange.  Теперь  эта  процедура  также
поддерживается, но только для драйверов фирмы Борланд.) Зна-
чение, возвращаемое функцией GetMaxMode, представляет  собой
максимальное  значение,  которое  можно  передать  процедуре
SetGraphMode.  В  каждом  драйвере   поддерживаются   режимы
0..GetMaxMode.
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры GetModeRange, SetGraphMode.
     Пример:

  uses
    Graph;
  var
    Driver, Mode : integer;
    i : integer;
  begin
    Driver := Detect;  { перевести в графический режим }
    InitGraph(Driver, Mode, '');
    if GraphResult < 0 then
       Halt(1);
    for i := 0 to GetMaxMode do { вывести на экран все
                                  названия режимов }
      OutTextXY(10, 10 * Succ(i), GetModeName(i));
    Readln;
    CloseGraph;
  end.

------------------------------------------------------------
 Функция GetМахХ                               Модуль Graph
------------------------------------------------------------
     Функция: Возвращает для текущего графического режима  и
драйвера самый правый столбец (разрешение по х).
     Описание: GetMaxX
     Тип результата: Целый (integer).
     Примечания: Возвращает для текущего графического режима
и  драйвера  максимальное  значение х. В режиме 320х200 СGА,
например, данная процедура будет возвращать значение 319.
     Процедуры GetМахХ и  GetМахY  чрезвычайно  полезны  для
центрирования, определения границ области экрана и т.д.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры GetMaxY, GetX, GetY,  Move-
To.
     Пример:

  uses
    Graph;
  var
    Driver, Mode : integer;
    i : integer;
  begin
    Driver := Detect;  { перевести в графический режим }
    InitGraph(Driver, Mode, '');
    if GraphResult < 0 then
       Halt(1);
  Rectangle(0,0,GetMaxX,GetMexY);  { нарисовать полную рамку

                                    экрана }
    Readln;
    CloseGraph;
  end.

------------------------------------------------------------
 Функция GetМахY                               Модуль Graph
------------------------------------------------------------
     Функция: Возвращает для текущего графического режима  и
драйвера самую нижнюю строку (разрешение по y).
     Описание: GetMaxY
     Тип результата: Целый (integer).

     Примечания: Возвращает для текущего графического режима
и  драйвера  максимальное  значение y. В режиме 320х200 СGА,
например, данная процедура будет возвращать значение 199.
     Процедуры GetМахХ и  GetМахY  чрезвычайно  полезны  для
центровки, определения границ области экрана и т.д.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры GetMxX, GetX, GetY, MoveTo.
     Пример:

  uses
    Graph;
  var
    Driver, Mode : integer;
    i : integer;
  begin
    Driver := Detect;  { перевести в графический режим }
    InitGraph(Driver, Mode, '');
    if GraphResult < 0 then
       Halt(1);
  Rectangle(0,0,GetMaxX,GetMexY);  { нарисовать полную рамку

                                    экрана }
    Readln;
    CloseGraph;
  end.

------------------------------------------------------------
 Процедура GetMem
------------------------------------------------------------
     Функция: Создает новую динамическую переменную  указан-
ного размера и помещает адрес блока в переменную-указатель.
     Описание: GetMem(var р : роinter; размер : word)
     Примечания: Параметр р является переменной-указателем и
может  относится к любому типу указателей. Параметр "размер"
имеет длину в слово и задает размер (в байтах) области памя-
ти, выделяемой для динамической переменной. На вновь создан-
ную переменную можно ссылаться с помощью р.
     Если для выделения памяти под новую динамическую  пере-
менную  в  динамически  распределяемой  области недостаточно
свободной памяти, то во время выполнения программы  происхо-
дит  ошибка. (Этой ошибки можно избежать - см. раздел "Функ-
ция обработки ошибки динамически распределяемой области  па-
мяти" в Главе 26.)
     Ограничения: Наибольший блок, который может быть  выде-
лен  в динамически распределяемой области памяти, составляет
65521 байт (64 К - $F). Если динамически распределяемая  об-
ласть  не  фрагментирована,  например,  в  начале выполнения
программы, то при успешных обращениях к процедуре GetМем бу-
дут выделяться соседние блоки памяти.
     Отличия: В версии 3.0 параметр "размер" был целого  ти-
па.
     Прочее: См. также процедуры New, FreeMem.

------------------------------------------------------------
 Функция GetModeName                           Модуль Graph
------------------------------------------------------------
     Функция: Возвращает строку,  содержащую  имя  заданного
графического режима.
     Описание: GetModeName(номер_режима: integer)
     Тип результата: строковый (string).
     Примечания: Имена режимов встроены  в  каждый  драйвер.
Возвращаемые  значения  (320х200 CGA P1, 640х200 CGA и т.д.)
можно использовать для создания меню, вывода режимов  экрана
и т.д.
     Аналогичная функция имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также функции GetMaxMode, GetModeRange.
     Пример:

  uses
    Graph;
  var
    Driver, Mode : integer;
    i : integer;
  begin
    Driver := Detect;  { перевести в графический режим }
    InitGraph(Driver, Mode, '');
    if GraphResult < 0 then
       Halt(1);
  for i := 0 to GetMaxMode do { вывести все имена режимов }
      OutText(10, 10 * Succ(i), GetModeName(i));
    Readln;
    CloseGraph;
  end.

------------------------------------------------------------
 Процедура GetModeRange                        Модуль Graph
------------------------------------------------------------
     Функция: Для данного драйвера возвращает  наименьший  и
наибольший графический режим.
     Описание: GetModeRange(GraphDriver : integer;  var
LoMode, HiMode : integer)
     Примечания: Вывод следующей программы:

  uses Graph;
  var
    Lovest, Highest : integer;
  begin
    GetModeRange(EGA64, Lowest, Highest);
    Write('Наименьшее значение = ', Lowest);
    Write('Наибольшее значение = ', Highest);
  end.

даст наименьшее значение = 0 и наибольшее значение = 1. Если
значение  GraphDriver является недопустимым, то возвращаемый
параметр будет равен -1.
     Аналогичная функция имеется в версии 2.0 Турбо-Си.
     Прочее: См. также  процедуры  SetGraphMode,  InitGraph,
DetectGraph.

------------------------------------------------------------
 Процедура GetPalette                          Модуль Graph
------------------------------------------------------------
     Функция: Возвращает текущую палитру и ее размер.
     Описание: GetPalette(var палитра :
     Примечания: Возвращает в  переменной  типа  PaletteType
текущую палитру и ее размер. Тип PaletteType описан в модуле
следующим образом:

 const
   MaxColor = 15;
 type
   PaletteType = record
     Size   : byte;
     Colors : array[0..MaxColors] of shortint;
  end;

     В поле размера (size) содержится число цветов в палитре
для текущего графического режима и драйвера. Поле Colors со-
держит действительные значения цветов от 0 до Sizе-1.
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры SetPalette, SetAllPalette.
     Пример:

  uses
    Graph;
  var
    Driver, Mode : integer;
    i : integer;
  begin
    Driver := Detect;  { перевести в графический режим }
    InitGraph(Driver, Mode, '');
    if GraphResult < 0 then
       Halt(1);
    GetPalette(Palette);
    If Palette.Size <> 1 then
  for i := 0 to Pred(Palette.Size) do
  begin
    SetColor(Color);
    Line(o, Color*5, 100, Color*5);
    end
    else
      Line(0, 0, 100, 0);
    Readln;
    CloseGraph;
    end.

------------------------------------------------------------
 Функция GetPaletteSize                        Модуль Graph
------------------------------------------------------------
     Функция: Возвращает размер таблицы палитры цветов.
     Описание: GetPaletteSize
     Тип результата: Слово (word).
     Примечания: Данная функция показывает, сколько  записей
палитры  можно задать для текущего графического режима. Нап-
ример, при использовании  цветного  режима  и  адаптера  EGA
функция возвратит значение 16.
     Аналогичная функция имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также функцию GetMaxColor.

------------------------------------------------------------
 Процедура GetPixel                            Модуль Graph
------------------------------------------------------------
     Функция: Получает значение элемента изображения в точке
Х,Y.
     Описание: GetPixel(X,Y :integer)
     Тип результата: Слово (word).
     Примечания: Получает цвет элемента изображения в  точке
Х,Y.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры PutPixel, GetImage,  PutIm-
age.
     Пример:

  uses
    Graph;
  var
    Gd, Gm : integer;
    PixelColor: word;
  begin
    Gd := Detect;  { перевести в графический режим }
    InitGraph(Gd, Gm, '');
    if GraphResult < 0 then
       Halt(1);
    PixelColor := GetPixel(10, 10);
    if PixelColor = 0 then
    PutPixel(10, 10, GetMaxColor);
    Readln;
    CloseGraph;
  end.

------------------------------------------------------------
 Процедура GetTextSettings                     Модуль Graph
------------------------------------------------------------
     Функция: Возвращает текущий тип текстового шрифта,  его
направление,  размер и выравнивание, установленные с помощью
процедур SetTextStyle и SetTextJustify.
     Описание: GetTextSettings(var TextInfo :  TextSettings-
Type)
     Примечания: Определены следующие константы и типы:

 type
   CharSizeType = 1..10;
   TextSettingsType = record
                        Font            : word;
                        Direction       : word;
                        CharSize        : CharSizeType;
                        Horiz           : word;
                        Vert            : word;
                      end;
 const
   DefaultFont         = 0; { шрифт с двоичным образом 8х8 }

   TriplexFont         = 1; { "штриховые" шрифты }
   SmallFont           = 2;
   SanSerifFont        = 3;
   GothicFont          = 4;
   HorizDir    = 0;         { слева направо }
   Vertir      = 1;         { снизу вверх }
   NormSize    = 1;

     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры InitGraph,  SetTextJustify,
SetTextStyle, TextHeight, TextWidth.
     Пример:

  uses
    Graph;
  var
    Gd, Gm : integer;
    OldStyle : TextSettingsType;
  begin
    Gd := Detect;  { перевести в графический режим }
    InitGraph(Gd, Gm, '');
    if GraphResult < 0 then
       Halt(1);
  GetTextSettings(OldStyle);
  SetTextJustify(LeftText, CenterText);
  SetTextStyle(TriplexFont, VertDir, 4);
  OutTextXY(GetMaxX, div 2, GetMaxY div 2, 'Новый тип');
  with OldStyle do
  begin                { восстановить старый тип текста}

    SetTextJustify(Horiz, Vert);
    SetTextStyle(Font, Directtion, CharSize);
  end;
  OutTextXY(0, TextHeight('H'), 'Снова старый тип');
  Readln;
  CloseGraph;
 end.


