
  {$I-}
  Assign(f, FileName);
  Reset(f);
  Close(f);
  {I+}
  FileExists := (IOResult = 0) and (FileName <> '');
 end; { FileExists };
  begin
   if FileExists(ParamStr(1)) then { получить из командной
                                     строки имя файла }
   Writeln('Файл существует');
   else
   Writeln('Файл не найден');
 end.

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

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

------------------------------------------------------------
 Процедура Rewrite
------------------------------------------------------------
     Функция: Создает и открывает новый файл.
     Описание: Rewrite(f [ : file; разм_записи : word ] )
     Примечания: Параметр f  является  файловой  переменной,
соответствующей  любому  типу файла. Он должен быть связан с
внешним  файлом  с  помощью   процедуры   Assign.   Параметр
"разм_записи"  представляет  собой  необязательное выражение
длиной в слово и может указываться только в том случае, если
f является нетипизованным файлом.
     Процедура Rewrite создает новый внешний файл, имя кото-
рого  присвоено  f. Если внешний файл с указанным именем уже
существует, то он удаляется и на его месте  создается  новый
пустой  файл. Если файл f уже открыт, то он сначала закрыва-
ется, а затем открывается вновь. Текущая позиция в файле ус-
танавливается  на начало файла. Если f было присвоено пустое
имя  (например,    Assign(f,'')),  то  после   обращения   к
процедуре  Reset(f)  будет ссылкой на стандартный файл ввода
(стандартный канал номер 1).
     Если f - текстовый файл,  то  он  становится  доступным
только по записи. После обращения к процедуре Rewrite Еоf(f)
принимает значение Тruе, если файл пуст, и значение False  в
противном случае.
     Если f  является  нетипизованным  файлом,  то  параметр
"разм_записи"  определяет  размер записи, который должен ис-
пользоваться при передаче данных. Если этот параметр опущен,
то он подразумевается равным по умолчанию 128 байтам.
     При  указании  директивы  компилятора   {$I-}   функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в  против-
ном случае.
     Отличия: В версии 3.0 Турбо-Паскаля  пустое  имя  файла
было недопустимо.
     Прочее: См. также процедуры Reset, Append, Assign.
     Пример:

 var f : text;
 begin
 Assign(f,'NEWFILE,$$$');
  Writeln(f,'Создается файл, в который записывается эта
             строка');
 Close(f);
 end.

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

 begin

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

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

------------------------------------------------------------
 Процедура RunError
------------------------------------------------------------
     Функция: Останавливает выполнение программы и генериру-
ет ошибку времени выполнения.
     Описание: RunError [ (код_ошибки : word ) ]
     Примечания:  Процедура  RunError  аналогична  процедуре
Halt,  но  в дополнение к остановке программы она генерирует
на текущем операторе  ошибку  времени  выполнения.  Парвметр
"код_ошибки"  представляет собой номер ошибки времени выпол-
нения (0 опущен). Если текущий модуль  был  скомпилирован  с
установленной  опцией Debug Information (Отладочная информа-
ция), и вы запускаете программу из среды  интерактивной  от-
ладки,  то  Турбо-Паскаль обрабатывает обращение к RunErrorа
как обычную ошибку времени выполнения.
     Прочее: См. также процедуру Halt.
     Пример:

  {$IFDEF Debug}
     if P = nil then RunError(204);
  {$EDNIF}

------------------------------------------------------------
 Процедура Sector                              Модуль Graph
------------------------------------------------------------
     Функция: Вычерчивает и заполняет эллиптический сектор.
     Описание: Sector(x, y  :  integer;  нач_угол,  кон_угол
XРадиус, YРадиус : word)
     Примечания: Процедура использует (X,Y), как точку  цен-
тра, парметры "XРадиус", "YРадиус" определяют, соответствен-
но, горизонтальный и вертикальный радиусы. Сектор вычерчива-
ется   от  начального  угла  "нач_угол"  до  конечного  угла
"кон_угол". Сектор рисуется текущим цветом и закрашивается с
использованием  образца закразки и цвета, заданных с помощью
процедур SetFillStyle или SetFillPattern.
     Если задан начальный угол 0 и конечный угол 360, то бу-
дет  нарисован  и  закрашен полный эллипс. Углы для процедур
Arc, Ellipse, FillEllipse, PieSlice задаются против  часовой
стрелки, при этом углу 0 соответствует 3 часа, 90 градусов -
12 часов и т.д.
     Если при заполении сектора происходит ошибка, то  функ-
ция GraphResult возвращает значение -6 (grNoScanMem).
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Пример:

  uses
    Graph;
  const
    R = 50;
  var
    Driver, Mode : integer;
    Xasp, Yasp : word;
  begin
    Driver := Detect;   { перевести в графический режим }
    InitGraph(Driver, Mode, '');
    if GraphResult < 0 then
       Halt(1);
    Sector(GetMaxX div 2, GetMaxY div 2, 0, 45, R, R);
    GetAspectRatio(Xasp, Yasp); { нарисовать сектор круга }
    Sector(GetMAxX div 2, GetMaxY div 2,  { точка центра }
              180, 135,   { зеркальное отражение выбранного
                            ранее угла }
              R, R * LongInt(Xasp) div Yasp);
    Readln;
    CloseGraph;
  end.

------------------------------------------------------------
 Процедура Seek
------------------------------------------------------------
     Функция: Перемещает текущую позицию в файле к заданному
элементу.
     Описание: Seek(f, n : longint)
     Примечания: Параметр f является любой файловой перемен-
ной, кроме текстовой, а n представляет собой выражение цело-
го типа. Текущая позиция в файле f перемещается к элементу с
номером  n.  Номер первого элемента файла равен 0. Для того,
чтобы расширить файл, можно выполнить поиск элемента  файла,
расположенного  за  последним  элементом.  То  есть оператор
Sееk(f,FileSize(f)) перемещает текущую позицию в файле в ко-
нец файла.
     При  указании  директивы  компилятора   {$I-}   функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в  против-
ном случае.
     Ограничения: Процедуру нельзя использовать для  тексто-
вых файлов. Файл должен быть открыт.
     Отличия: В версии 3.0 Турбо-Паскаля n было  целым  чис-
лом. В процедуре LongSeek можно задавать вещественное значе-
ние номера n.
     Прочее: См. также процедуру FilePos.

------------------------------------------------------------
 Функция SeekEof
------------------------------------------------------------
     Функция: Возвращает  для  файла  статус  "конец  файла"
(end-of-file).
     Описание: SeeEof [ (var f : text) ]
     Тип результата: Булевский (boolean).
     Примечания: За исключением того,  что  функция  SеекЕоf
пропускает  все пробелы, знаки табуляции и метки конца стро-
ки, она полностью соответствует функции Еоf. Ее полезно  ис-
пользовать  при  считывании  числовых значений из текстового
файла.
     При  указании  директивы  компилятора   {$I-}   функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в  против-
ном случае.
     Ограничения: Функцию можно использовать только для тек-
стовых файлов. Файл должен быть открыт.
     Прочее: См. также функции Eof, SeekEoln.

------------------------------------------------------------
 Функция SeekEoln
------------------------------------------------------------
     Функция: Возвращает для файла сотояние  "конец  строки"
(end-of-line).
     Описание: SeekEoln [ (var f : text) ]
     Тип результата: Булевский (boolean).
     Примечания: За исключением того, что  функция  SеекЕоln
пропускает  все пробелы и знаки табуляции, она полностью со-
ответствует функции Еоln. Ее полезно использовать при считы-
вании числовых значений из текстового файла.
     При  указании  директивы  компилятора   {$I-}   функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в  против-
ном случае.
     Ограничения: Функцию можно использовать только для тек-
стовых файлов. Файл должен быть открыт.
     Прочее: См. также функции Eoln, SeekEof.

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

------------------------------------------------------------
 Процедура SetActivePage                       Модуль Graph
------------------------------------------------------------
     Функция: Устанавливает для графического вывода активную
страницу.
     Описание: SetActivePage(страница : word)
     Примечания: Страница, заданная  параметром  "страница",
становится  активной.  Весь  графический  вывод будет теперь
направляться в эту страницу.
     Возможность использования нескольких страниц  поддержи-
вается  только  в графических адаптерах ЕGА, VGА и Неrcules.
При использовании нескольких графических  страниц  программа
может выводить графическую информацию в страницу, не выводи-
мую в данный момент на экран, а затем быстро вывести на  эк-
ран  этот двоичный образ, сменив отображаемую страницу с по-
мощью процедуры SetVisualPage. Этот метод  особенно  полезен
при программировании мультипликации.
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуру SetVisualPage.

     Пример:

 uses Graph;
 var
   GraphDriver, GraphMode : integer;
 begin
   GraphDriver := Detect;
   InitGraph(GraphDriver,GraphMode,'');
   if GraphResult <> grOk then
      Halt(1);
  begin
   ClearDivice;
   SetVisualPage(0);
   SetActivePage(1);
   Rectangle(10,20,30,40);
   SetVisualPage(1);
  end;
  else
    OutText('Страничный режим не поддерживается');
    Readln;
    CloseGraph;
  end.

------------------------------------------------------------
 Процедура SetAllPalette                       Модуль Graph
------------------------------------------------------------
     Функция: Изменяет все цвета палитры на указанные.
     Описание: SetAllPalette(var палитра)
     Примечания: Параметр "палитра" является  нетипизованным
параметром. Первое его слово представляет собой длину палит-
ры. Следующие n байтов заменяют текущие цвета палитры.  Каж-
дый  цвет  может принимать значение от -1 до 15. Значение -1
не изменяет предыдущее значение записи.
     Имейте в виду, что допустимые цвета зависят от текущего
графического драйвера и текущего графического режима.
     Изменения, вносимые в палитру, немедленно  отображаются
на  экране.  При  любом изменении цвета палитры все места на
экране, где этот цвет используется, будут изменены  в  соот-
ветствии с вновь заданным значением.
     Определены следующие константы и типы:

     { цвета для процедур SetРаlette и SetАllРаlette }
     Black = 0; { черный }
     Blue = 1; { синий }
     Green = 2; { зеленый }
     Cyan = 3; { бирюзовый }
     Red = 4; { красный }
     Magenta = 5; { малиновый }
     Brown = 6; { коричневый }
     LightGray = 7; { светло-серый }
     DarkGray = 8; { темно-серый }
     LightBlue = 9; { светло-голубой }
     LightGreen = 10; { светло-зеленый }
     LightCyan = 11; { светло-бирюзовый }
     LightRed = 12; { светло-красный }
     LightMagenta = 13; { светло-малиновый }
     Yellow = 14; { желтый }
     White = 15; { белый }
     MaxColors = 15;
     type
     PaletteType = record
     Size : byte;
     Colors : array[0..MaxColors] of shortint;
     end.

     Ограничения: Должен использоваться графический режим.
     Прочее:   См.  также  процедуры  GetBkColor,  GetColor,
GetPalette, SetBkColor, SetColor, SetPalette.
     Пример:

 uses Graph;
 var
   GraphDriver, GraphMode : integer;
   Palette : PaletteType;
 begin
   GraphDriver := Detect;
   InitGraph(GraphDriver,GraphMode,'');
   if GraphResult <> grOk then
      Halt(1);
 begin
      Line(0, 0, GetMaxX, GetMaxY);
  with Palette do
  begin
    Size        := 4;
  Colors[0]     := LightCyan; { светло-голубой }
  Colors[1]     := Red;       { красный }
  Colors[2]     := Yellow;    { желтый }
  Colors[3]     := White;     { белый }
  SetAllPalette(Palette);
   end;
  Readln;
  CloseGraph;
end.

------------------------------------------------------------
 Процедура SetAspectRatio                      Модуль Graph
------------------------------------------------------------
     Функция: Изменяет принятое по умолчанию значение  коэф-
фициента относительного удлиннения.
     Описание: SetAspectRatio(Xasp, Yasp, : word)
     Тип результата: Слово (word).
     Примечания: Процедура  SetAspectRatio  применяется  для
изменения  принятого  по умолчанию для текущего графического
режима коэффициента относительного  удлиннения.  Коэффициент
относительного  удлиннения используется при вычерчивании ок-
ружностей. Если окружность  выглядит  эллиптической,  значит
монитор  не  настроен должным образом. Его можно настроить с
помощью аппратных средств или программным путем,  изменив  с
помощью  процедуры SetAspectRatio коэффициент относительного
удлиннения. Для получения текущего коэффициента  относитель-
ного удлиннения можно использовать процедуру GetAspectRatio.
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуру GetAspectRatio.

     Пример:

  uses
    Crt, Graph;
  const
    R = 50;
  var
    Driver, Mode: integer;
    Xasp, Yasp: word;
  begin
    DirectVideo := false;
    Driver := Detect; { перевести в графический режим }
    InitGraph(Driver, Mode, '');
    if GraphResult <> 0 then
       Halt(1)
    GetAspectRatio(Xasp, Yasp); { получить используемый по
                                 умолчанию коэффициент
                                 относительного удлиннения }
    { Настроить на VGA и 8514. При этом коэффициент
      относительного удлиннения = 1.1 }
    if Xasp = Yasp then
       Xasp := 5 * Xasp;
    { Продолжить изменение значения коэффициента
      относительного удлиннения до получения 1:1 или пока
      не будет нажата клавиша }
     while (Xasp < Yasp) and not KeyPreaaed do
     begin
       GetAspectRatio(Xasp, Yasp);
       Circle(GatMaxX div 2, GetMaxY div 2, R);
       Inc(Xasp, 20);
     end;
     SetTextJustify(CenterText, CenterText);
     OutTextXY(GetMaxX div 2, GetMaxY div 2, 'Выполнено!');
     Readln;
     CloseGraph;
   end.

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

  uses Crt, Graph;
 var
   GraphDriver, GraphMode : integer;
   Palette : PaletteType
 begin
   GraphDriver := Detect;
   InitGraph(GraphDriver,GraphMode,'');
   Randomize;
   If GraphResult <> grOk then
      Halt(1);
   GetPalette(Palette);
   repeat
     SetBkColor(Random(Palette.Size));
     LineTo(Random(GetMatX),Random(GetMatY));
   until KeyPressed { для выхода нажмите клавишу Вrеаk }
   CloseGraph;
  end.

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

------------------------------------------------------------
 Процедура SetColor                            Модуль Graph
------------------------------------------------------------
     Функция: Используя палитру устанавливает  текущий  цвет
рисунка.
     Описание: SetColor(цвет : word)
     Примечания: SetColor(0)  задает  использование  первого
цвета  палитры  в качестве текущего цвета рисунка. Цвета ри-
сунка могут принимать значения в диапазоне о 0 до 15, в  за-
висимости от используемого графического драйвера и графичес-
кого режима. Для адаптера СGА данная процедура  задает  цвет
развертки.
     Например, в режиме СGАС1 палитра содержит четыре цвета:
черный,  красный, желтый и зеленый. SetBkColor(0) выбирает в
качестве цвета рисунка черный,  значение  1  задает  красный
цвет и т. д.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры GetBkColor, GetColor,  Get-
Palette, SetAllPalette, GetColor, SetPalette.
     Пример:

 uses Crt, Graph;
 var
   GraphDriver, GraphMode : integer;
   Palette : PaletteType
 begin
   GraphDriver := Detect;
   InitGraph(GraphDriver,GraphMode,'');
   Randomize;
   If GraphResult <> grOk then
      Halt(1);
   GetPalette(Palette);
   repeat
     SetBkColor(Random(Palette.Size));
     LineTo(Random(GetMatX),Random(GetMatY));
   until KeyPressed;
  end.

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

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

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

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

 uses Dos;
  var
    f : file;
 begin
   Assign(f,'C:\AUTOEXEC.BAT');
   SetFAttr(f, Hidden);
   Readln;
   SetFAttr(f, Archive);
 end.

------------------------------------------------------------
 Процедура SetFillPattern
------------------------------------------------------------
     Функция: Выбирает заданный пользователем  образец  зак-
раски.
     Описание:  SetFillPattern(Pattern  :   FillPatternType;
Color : word)

     Примечания: Устанавливает тип закраски и  ее  цвет  для
всех  типов закраски, выполняемых процедурами FillPoly, Bar,
FloodFill, Bar3D и PieSlice, битовый образец закраски, зада-
ваемый  процедурой  Pattern,  и  цвет, задаваемый процедурой
Color. Тип FillPatternType предварительно определяется  сле-
дующим образом:

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

Образец закраски основывается на внутренних байтовых  значе-
ниях, содержащихся в массиве Pattern. Этот массив имеет дли-
ну 8 байтов и каждый байт 8 элементам изображения в  образце
закраски. Если бит в байте образца закраски принимает значе-
ние 1, то элемент изображения будет построен. Следующий  об-
разец закраски представляет собой, например, закраску в виде
"шахматной доски" (50% полутон):

----------------------------------------------------------
     Двоичный вид        Шестнадцатиричный вид
----------------------------------------------------------
   10101010         =         $AA            (первый байт)
   01010101         =         $55            (второй байт)
   10101010         =         $AA            (третий байт)
   01010101         =         $55         (четвертый байт)
   10101010         =         $AA             (пятый байт)
   01010101         =         $55            (шестой байт)
   10101010         =         $AA           (седьмой байт)
   01010101         =         $55           (восьмой байт)
----------------------------------------------------------

     Определенные пользователем типы закраски позволяют  вам
создавать    типы    закраски,   отличающиеся   от   заранее
определенных, которые могут выбираться с  помощью  процедуры
SetFillStyle.  Всякий  раз, когда вы выбираете новый образец
закраски с помощью процедур SetFillPattern или  SetFillStyle
все  операции  закраски  будут  выполняться с использованием
этого     типа     закраски.     При     обращении      вида
SetFillStyle(UserField,  SomeColor)  всегда будет выбираться
образец, заданный пользователем. Это позволяет  вам  опреде-
лять и использовать с помощью процедуры SetFillPattern новый
образей закраски, а затем переходить от  встроенного  обраца
закраски  к  новому,  заданному  вами, обращаясь к процедуре
YetTextStyle.
     Аналогичная программа имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Пример:

 uses
  Graph;
 const
   Gray50 : FillPatternType = ($AA, $55, $AA, $55, $AA, $55,
                               $AA, $55);
    var
    Driver, Mode: integer;
  begin
    Driver := Detect; { перевести в графический режим }
    InitGraph(Driver, Mode, '');
    if GraphResult <> 0 then
       Halt(1)
  SetFillPattern(Gray50, White);
  Bar(0, 0, 100, 100);  { нарисовать столбец, используя 50%
                          полутон }
  Readln;
  CloseGraph;
 end.

------------------------------------------------------------
 Процедура SetFillStyle                        Модуль Graph
------------------------------------------------------------
     Функция: Устанавливает тип закраски и ее цвет.
     Описание: SetFillStyle(образец : word; цвет : word)
     Примечания: Устанавливает образец и цвет  закраски  для
всех  типов закраски, выполняемых процедурами FillPoly, Bar,
Bar3D, и PieSlice. Можно использовать множество  типов  зак-
раски. По умолчанию выбирается сплошная закраска белого цве-
та. Определены следующие константы:

  { образцы заполнителей для процедур Get/SetFill/Style }
   EmptyFill     = 0;   { заполнить область фоновым цветом }
   SolidFill     = 1;   { непрерывное заполнение област  за-
                          данным цветом }
   LineFill      = 2;   { заполнить --- }
   LtSlashFill   = 3;   { заполнить /// }
   SlashFill     = 4;   { заполнить жирными линиями ///}
   BkSlashFill   = 5;   { заполнить \\\ (жирными линиями) }
   LtBkSlashFill = 6;   { заполнить \\\ }
   HatchFill     = 7;   { заполнить редкой штриховкой }
   XHatchFill    = 8;   { заполнить частой пересекающейся
                          штриховкой }
   InterLeaveFill = 9;  { заполнить прерывистой линией }
   WideDotFill   = 10;  { заполнить редкими точками }
   CloseDotFill  = 11;  { заполнить частыми точками }

     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры Bar, Bar3D, FillPoly,  Get-
FillSettings, PieSlice.
     Пример:

 SetFillStyle(SolidFill,0);
 Bar(x1, y1, x2, y2);
 SetFillStyle(XHatchFill,0);
 Bar(x1, y1, x2, y2);

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

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

------------------------------------------------------------
Графический   Имя     Значение   Столбцов    Палитра  Страниц
  драйвер  константы              х строк
------------------------------------------------------------
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 Турбо-Си.
     Ограничения: Перед обращением к данной процедуре  необ-
ходимо  выполнить (с нормальным завершением) вызов процедуры
InitGraph.
     Прочее: См. также процедуры ClrearDevice,  DetectGraph,
GetGraphMode, InitGraph, RestoreCrtMode.
     Пример:

uses Graph;
 var
   GraphDriver : integer;
   GraphMode   : integer;
   LowMode     : integer;
   HighMode    : integer;
 begin
 GraphDriver := Detect;
 InitGraph(GraphDriver, GraphMode, '');
 if GraphResult <> grOk then
    Halt(1);
 GetModeRange(GraphDriver, LowMode, HighMode);
 SetGraphMode(LowMode); { выбрать режим с низким разрешением
 }
 Line(0, 0, GetMaxX, GetMaxY);
 Readln;
 CloseGraph;
 end.

------------------------------------------------------------
 Процедура SetIntVec                             Модуль Dos
------------------------------------------------------------
     Функция: Устанавливает  по  заданному  адресу  заданный
вектор прерывания.
     Описание: SetIntVec(ном_прер : byte; вектор : pointer)
     Примечания: Параметр "ном_прер"  задает  номер  вектора
прерывания  (0...255), а параметр "вектор" задает его адрес.
Чтобы получить адрес процедуры обработки прерываний параметр
"вектор"  часто задается с использованием оператора @. Пред-
положим, что Int1BSave является переменной типа указатель  и
Int1BHandler - идентификатор процедуры обработки прерываний.
Тогда следующая последовательность операторов новый обработ-
чик  прерывания  $В1, а затем восстанавливает исходный обра-
ботчик прерывания:

  GetIntVec($1B,Int1BSave);
  SetIntVec($1b,@Int1BHandler);
        .
        .
        .
  SetIntVec($1B,Int1BSave);

     Прочее: См. также процедуру GetIntVec.

-----------------------------------------------------------
 Процедура SetLineStyle                       Модуль Graph
-----------------------------------------------------------
     Функция: Устанавливает текущую толщину и тип линии.
     Описание: SetLineStyle(тип_строки  :  word;  образец  :
word; толщина : word)
     Примечания: Данная процедура влияет на все типы  линий,
вычерчиваемые процедурами Line, LineTo, RecTangle, DrawPoly,
Arc, Circle и др.
     Могут вычерчиваться непрерывные, пунктирные линии,  ли-
нии, состоящие из точек или точек и тире.
     Если процедуре SetLineStyle иередаются  неверные  пара-
метры,   то   GraphResult   будет  возвращать  значение  -11
(grError) и текущие установки останутся неизмененными.  Опи-
саны следующие константы:

 const
    SolidLn    =  0;     { непрерывныя линия }
    DottedLn   =  1;     { линия из точек }
    CenterLn   =  2;     { линия из точек и тире }
    DashedLn   =  3;     { пунктирная линия }
    UserDilLn  =  4;     { тип, определяемый пользователем }
    NormWidth  =  1;     { нормальная толщина }
    ThickWidth =  3;     { жирная линия }

     Когда в качестве параметра процедуру LineStyle  переда-
ется  UserBitLn,  то  в качестве BitPattern для строки будет
использоваться параметр "образец".
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры GetLineStyle,  Line,  Line-
Rel, LineTo, SetWriteMode, GraphResult.
     Пример:

 uses Graph;
 var
   GraphDriver, GraphMode : integer;
   x1, y1, x2, y2 : integer;
 begin
   GraphDriver := Detect;
   InitGraph(GraphDriver,GraphMode,'');
   if GraphResult <> grOk then
      Halt(1);
       x1 := 10;
       y1 := 10;
       x2 := 200;
       y2 := 150;
 SetLineStyle(DottedLn,0,NormVidth);
 Rectangle)x1,y1,x2,y2);
 SetLineStyle(UserBitLn,$C3,ThickWidth);
 Rectangle(Pred(x1), Pred(y1), Succ(x2), Succ(y2));
    Фжгенп;
    ЕнрфжЙугсй;
 жпе.

------------------------------------------------------------
 Процедура SetPalette                          Модуль Graph
------------------------------------------------------------
     Функция: Изменяет один из цветов палитры в соответствии
с параметрами "ном_цвета" и "цвет".
     Описание: SetPalette(ном_цвета : word; цвет : byte)

     Примечания: Изменяет в палитре  запись  "ном_цвета"  на
"цвет".  SetPalette(0,LightCyan)  устанавливает  в  качестве
первого цвета палитры светло-бирюзовый. В зависимости от те-
кущего  графического драйвера и текущего графического режима
параметр "ном-цвета" может принимать значения от 0 до 15.
     Внесенный в палитру изменения  немедленно  отображаются
на  экране.  В  приведенном далее примере на экране рисуется
несколько строк, затем палитра случайным образом изменяется.
Каждый  раз, когда изменяется цвет палитры, все места на эк-
ране, где используется данный цвет, будут изменяться в соот-
ветствии с новым значением.
     Определены следующие константы:

   Black          = 0;      { черный }
   Blue           = 1;      { синий  }
   Green          = 2;      { зеленый }
   Cyan           = 3;      { бирюзовый }
   Red            = 4;      { красный }
   Magenta        = 5;      { малиновый }
   Brown          = 6;      { коричневый }
   LightGray      = 7;      { светло-серый }
   DarkGray       = 8;      { темно-серый }
   LightBlue      = 9;      { светло-голубой }
   LightGreen     = 10;     { светло-зеленый }
   LightCyan      = 11;     { светло-бирюзовый }
   LightRed       = 12;     { светло-красный }
   LightMagenta   = 13;     { светло-малиновый }
   Yellow         = 14;     { желтый }
   White          = 15;     { белый }

     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Прочее:   См.  также   процедуры  GetBkColor,   GetColor,
SetAllPalette,  SetBkColor,  CetColor, SetRGBPalette, GraphRe-
sult.  +++
     Пример:

  uses Crt, Graph;
 var
   Graphriver, GraphMode : integer;
   Color : word;
   Palette : PaletteType;
 begin
   GraphDriver := Detect;
   InitGraph(GraphDriver, GraphMode,'');
   if GraphResult <> grOk then
      Halt(1);
   SetPalette(Palette);
   for Color := 0 to Pred(Palette.Size) do
   begin
     SetColor(Color);
     Line(Color, Color, Color*5, Color*5);
   end;
   Randomize;
   repeat;
     SetPalette(Random(Palette.Size),
                Random(Palette.Size));
   until KeyPressed;
  end;
  else
  Line(0, 0, 100, 0);
     Readln;
     CloseGraph;
   end.

------------------------------------------------------------
 Процедура SetRGBPalette                       Модуль Graph
------------------------------------------------------------
     Функция: Позволяет изменить записи палитры для  драйве-
ров IBM 8514 и VGA.
     Описание: SetRGBPalette(номер_цвета, RedVavue, GreenVa-
lue, BlueValue : integer)
     Примечания: Параметр "номер_цвета" задает запись палит-
ры,  которую  нужно  загрузить,  а  RedValue,  GreenValue  и
BlueValue - цвета, составляющие запись палитры.
     Для дисплея IBM-8514 "номер-цвета" принивает значения в
диапазоне   0..255.   Для   VGA  в  цветном  режиме  и  256К
"номер_цвета" принимает значения в диапазоне 0..15.  Исполь-
зуется  только младший байт RedValue, GreenValue и BlueValue
и только 6 старших битов этого байта загружаются в палитру.

           Замечание: В целях совместимости с другими графи-
      ческими  адаптерами  фирмы  IBM драйвер BGI определяет
      первые  16  записей  палитры  IBM-8514  для  адаптеров
      EGA/VGA. Эти значения могут использоваться непосредст-
      венно   или    изменяться    с    помощью    процедуры
      SetRGBPalette.

     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Процедура  SetGRBPalette  может  использо-
ваться  только при наличии графического адаптера VGA и драй-
вера IBM-8514.
     Прочее: См. также процедуру SetPalette.
     Пример:

        uses Graph;
        type
          GRBRec = record
          RedVal, GreenVal, BlueVal : integer;
            end;
        const
          EGAColors : array[0..MaxColors] of
    GRBRec =(                              { Назв. Цвет }
        (RedVal:$00;GreenVal:$00;BlueVal:$00), {черный EGA 0}
        (RedVal:$00;GreenVal:$00;BlueVal:$FC), {голуб. EGA 1}
        (RedVal:$24;GreenVal:$FC;BlueVal:$24), {зелен. EGA 2}
        (RedVal:$00;GreenVal:$FC;BlueVal:$FC), {бирюз. EGA 3}
        (RedVal:$FC;GreenVal:$14;BlueVal:$14), {красн. EGA 4}
        (RedVal:$B0;GreenVal:$00;BlueVal:$FC), {малин. EGA 5}
        (RedVal:$70;GreenVal:$48;BlueVal:$FC), {корич. EGA 20}
        (RedVal:$C4;GreenVal:$C4;BlueVal:$C4), {белый  EGA 7 }
        (RedVal:$34;GreenVal:$34;BlueVal:$34), {серый  EGA 56}
        (RedVal:$00;GreenVal:$00;BlueVal:$70), {св.гол.EGA 57}
        (RedVal:$00;GreenVal:$70;BlueVal:$00), {св.зел.EGA 58}
        (RedVal:$00;GreenVal:$70;BlueVal:$70), {св.бир.EGA 59}
        (RedVal:$70;GreenVal:$00;BlueVal:$00), {св.кр. EGA 60}
        (RedVal:$70;GreenVal:$00;BlueVal:$70), {св.мал.EGA 61}
        (RedVal:$FC;GreenVal:$FC;BlueVal:$24), {желтый EGA 62}
        (RedVal:$FC;GreenVal:$FC;BlueVal:$FC), {т.белыйEGA 63}
        );
        var
          Driver, Mode,
          i : integer;
        bagin
          Driver := IBM8514;      { отменить автообнаружение }
          Mode := IBM8514Hi;
          InitGraph(Driver, Mode, ''); { перевести в
                                         графический режим }
          if GraphResult < 0 then
             Halt(1);
          { нулевая палитря, весь графический вывод невидим }
          for i := 0 to MaxColors do
              with EGAColors[i] do
                 SetRGBPalette(i, 0, 0, 0);
          { вывести что-нибудь на экран }
          { изменить первый 16 записей палитры для 8514 }
          for i := 1 to MaxColors do
            begin
              SetColor(i);
              OutText(10, i*10, '...Нажмите любую клавишу..');
            end;
          { восстановить принятые по умолчанию цвета EGA в
            палитру 8514 }
          for i := 0 to MaxColors do
             with EGAColors[i] do
                  SetRGBPalette(i, RedVal, GreenVal,
       BlueVal);
          Readln;
          CloseGraph;
        end.

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

     Функция: Назначает для текстового файла буфер ввода-вы-
вода.
     Описание: SetTextBuf(var f : text; var буфер [ ; размер
: word ] )
     Примечания: Параметр f представляет собой файловую  пе-
ременную, соответствующую текстовому файлу. Параметр "буфер"
- любая переменная, а параметр "размер" - необязательное вы-
ражение длиной в слово.
     Каждая файловая переменная для текстового файла
     имеет внутренний буфер размером в 128 байтов, что по
     умолчанию используется для буферизации операций чтения
     и записи. Этот буфер подходит для использования во
     многих прикладных задачах, однако программы,  выполняю-
щие много операций ввода-вывода (например, задачи, выполняю-
щие копирование или преобразование текстовых  файлов)  будут
лучше  работать  с  буфером  большего размера, поскольку это
уменьшает перемещение головки по поверхности диска  и  избы-
точное использование файловой системы.
     Процедура SetTextBuf переназначает буфер,  используемый
для  текстового  файла  f: вместо внутреннего буфера файла f
используется буфер, заданный  параметром  "буфер".  Параметр
"размер"  задает  размер буфера в байтах. Если этот параметр
опущен, то подразумевается использование  SizeOf(буфер),  то
есть по умолчанию в качестве буфера используется вся область
памяти, занятая буфером. Новый буфер действует до  тех  пор,
пока для f вновь не выполняется процедура Assign.
     Ограничения: Данная процедура никогда не должна  приме-
няться для открытого файла, хотя вызывать ее можно немедлен-
но вслед за обращением к процедурам Reset, Rewrite и Аppеnd.
Вызов  процедуры SetTextBuf для открытого файла во время вы-
полнения операций ввода-вывода может из-за смены буфера при-
вести к потере данных.
     Турбо-Паскаль не обеспечивает существование  буфера  на
все  время выполнения операций ввода-вывода для файла. Общей
ошибкой, в частности, является введение качестве буфера  ло-
кальной  переменной и затем использование файла вне процеду-
ры, в которой описывается буфер.
     Отличия: В версии 3.0 Турбо-Паскаля использовался
     другой синтаксис - var f:text[2048].
     Пример:

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

------------------------------------------------------------
 Процедура SetTextJustify                      Модуль Graph
------------------------------------------------------------
     Функция: Устанавливает  значения  выравнивания  текста,
которые используются процедурами OutText и OutTextXY.
     Описание: SetTextJustify(гориз, верт : word)
     Примечания: После процедуры SetTextJustify вывод
     текста будет выравниваться по текущему указателю задан-
ным способом. При использовании двух следующих операторов

           SetTextJustify(CenterText, CenterText);
           OutTextXY(100, 100, 'ABC');

в середине точки с координатами (100,100) появится буква  В.
Установленные по умолчанию параметры выравнивания можно вос-
становить с помощью вызова SetTextJustify(LeftText,TopText).
Если  процедуре SetTextJustify передаются недопустимые пара-
метры, функция GraphResult  будет  возвращать  значение  -11
(grError), а текущие параметры выравнивания текста останутся
неизмененными.
     Определены следующие константы:

       const
         { горизонтальное выравнивание }
         LeftText    = 0;   { выровнять влево }
         CenterText  = 1;   { центрировать }
         RightText   = 2;   { выровнять вправо }
         { вертикальное выравнивание }
         BottomText  = 0;   { переместить вниз }
         CenterText  = 1;   { центрировать }
         TopText     = 2;   { переместить вверх }

     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический
     режим.
     Прочее: См. также  процедуры  SetLineStyle,  OutTextXY,
GetTextSettings,  OutText,  TextHeight,  TextWidth, SetUser-
CharSize, GraphResult.
     Пример:

        uses Graph;
        var
          Gd, Gm : integer;
        begin
          Gd := Detect;
          InitGraph(Gd, Gm, '');
          if GraphResult <> grOk then
             Halt(1);
       { выравнивание текста относительно центра экрана }
       SetTextJustify(CenterText, CenterText);
       OutTextXY(Succ(GetMaxX) div 2,
                 Succ(GetMaxY) div 2,
                 'Легко центрируется');
         Фжгенп;
         ЕнрфжЙугсй;
        жпе.

------------------------------------------------------------
 Процедура SetTextStyle                        Модуль Graph
------------------------------------------------------------
     Функция: Устанавливает текущий шрифт, тип и коэффициент
размера символа.
     Описание:  SetTextStyle(шрифт  :  word;  направление  :
word; разм_символа : CharSizeType)
     Примечания: Процедура влияет на весь  текстовый  вывод,
выполняемый процедурами OutText и OutTextXY. Можно использо-
вать один шрифт с двоичным образом 8х8 и несколько  "штрихо-
вых" шрифтов. Поддерживается нормальное (слева направо) рас-
положение шрифта и вертикальное (развернутое на 90  градусов
относительно  нормального  расположения),  при котором текст
начинается с нижней границы  экрана  и  продолжается  вверх.
Размер  каждого  символа может увеличиваться на коэффициент,
задаваемый параметром "разм_символа". Значение размера  сим-
вола,  равное  единице,  приводит  к выводу двоичного образа
шрифта 8х8 в прямоугольную область  экрана,  содержащую  8х8
элементов  изображения,  параметр  "разм_символа",  равный 2
приведет к выводу на экран двоичного  образа  шрифта  8х8  в
прямугольную  область элементов изображения размером 16х16 и
т. д. (вплоть до десятикратного увеличения нормального  раз-
мера). Для определения действительных размеров шрифта всегда
используйте процедуры TextHeight и TextWidth.
     Нормальными значениями размера для  шрифта  являются  1
для принятого по умолчанию шрифта и 4 для "штрихового" шриф-
та. Эти значения можно передавать процедуре SetTextStyle   в
параметра "разм_символа". Для настройки размера "штрихового"
текстового шрифта можно использовать процедуру SetUserFont.
     Обычно "штриховые" шрифты  при  обращении  к  процедуре
SetTextStyle  "штриховые" шрифты загружаются с диска в дина-
мически распределяемую область памяти. Однако, вы сами може-
те  загрузить  шрифты  или скомпоновать их непосредственно с
вашим файлом .EXE. В этом случае для регистрации шрифта  мо-
дулем Graph используйте процедуру RegisterBGIfont.
     Когда "штриховые" шрифты хранятся на диске, при попытке
их  загрузки  могут  происходить  ошибки. При наличии ошибок
функция GraphResult возвращает одно из следующих значений:

     -8 - файл не найден;
     -9 - не хватает памяти для загрузки выбранного шрифта;
     -11 - ошибки графики;
     -12 - графическая ошибка ввода-вывода;
error in text ..................
вдвое выше, используйте для MultX значение 2, а DivX задайте
равным 1 (2 div 1 = 2).
     После вызова процедуры SetUserCharSize для того,  чтобы
шрифт получил новый размер, вам не нужно сразу вызывать про-
цедуру   SetTextStyle.    При    обращении    к    процедуре
SetUserCharSize  для текущего символа устанавливается задан-
ный размер.
     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Ограничения: Должен использоваться графический режим.
     Пример: В данном примере показано, как  можно  изменить
высоту и ширину шрифта.

        uses Graph;
        var
          Gd, Gm : integer;
        begin
          Gd := Detect;
          InitGraph(Gd, Gm, '');
          if GraphResult <> grOk then
             Halt(1);
         SetTextStyle(TriplexFont, HorizDir, 4);
         OutText(Нормальный размер');
         SetUserCharSize(1, 3, 1, 1);
         OutText(Уменьшенный по высоте размер');
         SetUserCharSize(3, 1, 1, 1);
         OutText(Широкий шрифт');
       Readln;
       CloseGraph;
       end.

------------------------------------------------------------
 Процедура SetVerify                             Модуль Dos
------------------------------------------------------------
     Функция: Устанавливает в ДОС состояние флага проверки.
     Описание: SetVerify(Verify : boolean)
     Примечания: Процедура SetVerify устанавливает в  опера-
ционной  системе  ДОС состояние флага проверки. В сброшенном
состоянии (False) проверка операций записи на диск не выпол-
няется. В установленном состоянии флага (True) при операциях
записи на диск выполняется поверки  правильности  выполнения
операции.
     Прочее: См. также процедуру GetVerify.

------------------------------------------------------------
 Процедура SetVievPort                         Модуль Graph
------------------------------------------------------------
           Функция: Устанавливает  для  графического  вывода
текущую область просмотра или окно.
           Описание: SetViewPort(х1, у1, х2, у2 : word;
           Примечания: Точка (x1,y1)  задает  верхний  левый
угол области просмотра, а точка с координатами (x2,y2)
определяет нижний правый угол (0 <= y1 < x2 и 0 <=  y1
< y2).  Левый  верхний  угол  экрана  задается  координатами
(0,0).
        Булевская переменная Сliр определяет будет ли  изоб-
ражение отсекаться  текущими  границами  области  просмотра.
Процедура SetVievPort(0,0,GetMaxX,GetMaxY,True)  всегда  за-
дает в качестве области просмотра все поле графического  эк-
рана. Определены следующие константы:

           const
           ClipOn := true;
           ClipOff := false;

     Все графические команды (например, GetX, ОutТехt,  Rec-
tangle,  МоvеТо и т. д.) зависят от текущей области просмот-
ра. В качестве примера заметим, что процедура МоvеТо переме-
щает текущий указатель в точку (5,5) внутри области просмот-
ра (абсолютными координатами данной точки были бы координаты
(15,25)).

       (0,0)                           (GetMaxX,0)
         -------------------------------------
         !                                   !
         !                                   !
         !           ---------               !
         !           !       !               !
         !           !   .   !               !
         !           !       !               !
         !           ---------               !
         !                                   !
         !                                   !
         -------------------------------------
       (0,GetMaxY)                   (GetMaxX,GetMaxY)

     Если булевская переменная Сliр установлена  в  значение
Тruе,  то, когда выполняется обращение к процедуре SetViewP-
ort, все рисунки будут обрезаться на границах текущей облас-
ти  просмотра.  Заметим,  что "текущий указатель" никогда не
отсекается. В следующем примере прямая линия не будет  нари-
сована  полностью,  поскольку  она будет обрезана на границе
области просмотра:

           SetWiewPort(10, 10, 20, 20, ClipOn);
           Line(0, 5, 15, 5);

     Если бы не выполнялось отсечение, то прямая должна была
бы  начинаться  в точке с абсолютными координатами (10,15) и
заканчиваться в точке с  абсолютными  координатами  (25,15).
Но,  поскольку  выполнялось отсечение, то в действительности
прямая будет вычерчиваться, начиная с  точки  с  абсолютными
координатами (10,15), и заканчиватся в точке (20,15).
     Процедуры InitGraph, ClearDevice и SetGraphMode сбрасы-
вают определение текущей области просмотра и устанавливают в
качестве области просмотра весь экран.  Текущее  определение
области  просмотра  можно  получить с помощью процедуры Get-
ViewSettings, которая воспринимает параметры следующего гло-
бального типа:

       type
         ViewPortType = record
                          x1, y1, x2, y2 : word;
                          Clip           : boolean;
                        end;

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

         uses Graph;
        var
          Gd, Gm : integer;
        begin
          Gd := Detect;
          InitGraph(Gd, Gm, '');
          if GraphResult <> grOk then
             Halt(1);
          if (gd = HercMono)
              or (gd = EGA or (Gd = EGA64) or (Gd = VGA)
       then
        begin
        SetVisualPage(0);
        SetActivePAge(1);
        Rectangle(10, 20, 30, 40);
        SetVisualPage(1);
        end;
        else
         OutText('Страничный режим не поддерживается');
        Readln;
        CloseGraph;
        end.

           Пример 2:

        const
        vp1 : ViewPortType =
          (x1 : 10; y1 : 80; x2 : 100; y2 : 150; Clip :
       ClipOn);
        vp2 : ViewPortType =
          (x1 : 110; y1 : 0; x2 : 150; x2 : 70; Clip :
       ClipOn);
        var
          GraphDriver, GraphMode : integer;
        begin
          GraphDriver := Detect;
          InitGparh(GraphDrivet,GraphMode,'');
          if GraphRasult <> grOk then
             Halt(1);
          with vp1 do
          begin

            Rectangle(Succ(x1), Succ(y1),  { нарисовать
       контур
                                             области
       просмотра }
                      Pred(x2), Pred(y2));
            SetViewPort(x1, y1, x2, y2, ClipOn);
            OutText('Область просмотра');
          end;
          { полный экран }
          SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn);
          with vp2 do
          begin
          { нарисовать контур второй области просмотра }
            Rectangle(Succ(x1), Succ(y1),  { нарисовать
                                             контур
                                             области
                                             просмотра }
                      Pred(x2), Pred(y2));
            SetViewPort(x1, y1, x2, y2, ClipOn);
            OutText('Область просмотра 2');
          end;
          Readln;
          CloseGraph;
        end.

------------------------------------------------------------
 Процедура SetVisualPage                       Модуль Graph
------------------------------------------------------------
     Функция: Задает номер  отображаемой  графической  стра-
ницы.
     Описание: SetVisualPage(страница : word)
     Примечания: Страница, определяемая параметром  "страни-
ца", становится отображаемой графической страницей.
     Использование нескольких графических страниц  поддержи-
вается  только  графическими адаптерами ЕGА, VGА и Неrcules.
При использовании нескольких графических  страниц  программа
может выводить графическую информацию в страницу, не выводи-
мую в данный момент на экран, а затем быстро вывести на  эк-
ран  этот двоичный образ, сменив отображаемую страницу с по-
мощью процедуры SetVisualPage. Этот метод особенно полезен в
мультипликации.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуру SetActivePage.
     Пример:

         uses Graph;
        var
          Gd, Gm : integer;
        begin
          Gd := Detect;
          InitGraph(Gd, Gm, '');
          if GraphResult <> grOk then
             Halt(1);
          if (gd = HercMono)
              or (gd = EGA or (Gd = EGA64) or (Gd = VGA)
       then
        begin
        SetVisualPage(0);
        SetActivePAge(1);
        Rectangle(10, 20, 30, 40);
        SetVisualPage(1);
        end;
        else
         OutText('Страничный режим не поддерживается');
        Readln;
        CloseGraph;
        end.

------------------------------------------------------------
 Процедура SetWriteMode                        Модуль Graph
------------------------------------------------------------
     Функция: Устанавливает режим  записи  при  вычекчивании
линии.

     Описание: SetWriteMode(реж_записи : integer)
     Примечания: Определены следующие констанлы:

            const
              CopyPut  = 0;     { MOV }
              XORPut   = 1;     { XOR }

     Каждая константа соответствует двоичной операции  между
каждым  байтом  строки  и соответствующим байтом экрана. Для
константы CopyPut используется  инструкция  ассемблера  MOV.
При  этом вычерчиваемая линия "затирает" то, что было на эк-
ране. Для константы XORPut для комбинирования линии с  изоб-
ражением на экране используется инструкция XOR. Две последо-
вательные операции XOR приведут к стираних линии  и  восста-
новлению исходного изображения на экране.

           Замечание: Процедура SetWriteMode  влияет  только
      на  обращение  к следующим процедурам: DrowPoly, Line,
      LineRel, LineTo и Rectangle.

     Аналогичная процедура имеется в версии 2.0 Турбо-Си.
     Прочее: См. также процедуры PutImage и SetLinkStyle.
     Пример:

         uses Graph;
        var
          Gd, Gm : integer;
               i : integer;
          x1, y1, dx, dy : integer;
          FillInfo : FillSettingsType;
        begin
          DirectVideo := false; { "выключить" запись на
                                   экран }
          Randomize;
          Gd := Detect;
          InitGraph(Gd, Gm, '');
          if GraphResult <> grOk then
             Halt(1);
         { заполнить экран используемым по умолчанию
           образцом }
         GetFillSettings(FillInfo); { получить текущие
                                      параметры }
         SetFillStyle(WideDotFill, FillInfo.Color);
         Bar(0, 0, GetMaxX, GetMaxY);
         dx := GetMAxX div 4; { задать размерность
                                прямоуголиника }
         dy := GetMaxY div 4;
         SetLineStyle(SolidLn, 0, ThickWidth);
         SetWriteMode(XORPut);  { режим XOR для
                                  прямоугольника }
         repeat
           x1 := Random(GetMaxX - dx);
           y1 := Random(GetMaxY - dy); { нарисовать его }
           Delay(0);   { короткая пауза }
           Rectangle(x1, y1, x1 + dx, y1 + dy) { стереть
                                                 его }
         until KeyPressed;
         Readln;
         CloseGraph;
       end.

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

       var
         r : real;
       begin
         у :А Хкп(Тк);
       end.

------------------------------------------------------------
 Функция SizeOf
------------------------------------------------------------
     Функция: Возвращает число байтов,  занимаемых  аргумен-
том.
     Описание: SizeOf(x)
     Тип результата: Слово (word).
     Примечания: Параметр x является ссылкой  на  переменную
или  идентификатором  типа.  Данная  фунция возвращает число
байтов памяти, занимаемых x.
     При передаче значений функциям FillChar,  Моvе,  GetМем
всегда следует использовать функцию SizeOf:

           FillChar(s, SizeOf(s), 0);
           GetMem(p, SizeOf(RecordType));

      Пример:

        type
          CustRec = record
                      Name  : string[30];
                      Phone : string[14];
                    end;
          var
            p : ^CustRec;
          begin
            GetMem(p, SizeOf(CustRec));
          end.

------------------------------------------------------------
 Процедура Sound                                 Модуль Сrt
------------------------------------------------------------
     Функция: Включает внутренний динамик.
     Описание: Sound(герц : word)
     Примечания: Параметр "герц" задает частоту генерируемо-
го  сигнала  в  герцах. Звуковой сигнал будет звучать до тех
пор, пока он не будет явным образом  выключен  обращением  к
процедуре NoSound.
     Прочее: См. также процедуру NoSound.
     Пример:

       uses Crt;
       begin
         Sound(220);                              { сигнал }
         Delay(200);                              { пауза }
         NoSound;                                 {
       выключить }

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

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

------------------------------------------------------------
 Функция Sqrt
------------------------------------------------------------
     Функция: Возвращает квадратный корень аргумента.

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

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

------------------------------------------------------------
 Процедура Str
------------------------------------------------------------
     Функция: Преобразует численное значение в его строковое
представление.
     Описание: Str(х [ : размер [ :  десят  ]  ],  var  s  :
string)
     Примечания: Параметр x является выражением  целого  или
вещественного типа. Параметры "размер" и "десят" представля-
ют собой выражения целого типа. Параметр s - строковая пере-
менная.  Данная функция преобразует x в его строковое предс-
тавление в соответствии в параметрами  форматирования  "раз-
мер"  и  "десят".  За  исключением  того, что результирующая
строка сохраняется в параметре s, вместо того, чтобы записы-
ваться в текстовый файл, результат выполения процедуры будет
в точности тот же самый, что и при обращении  к  стандартной
процедуре Write.
     Прочее: См. также процедуры Val, Write.
     Пример:

       function IntToStr(i : longint) : string;
       { преобразует любое значение целого типа в строку }
       var
         s : string[1];
       begin
         Str(i,s);
         IntToStr := s;
       end;
       begin
         Writeln(IntToSt(-5322));
       end.

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

------------------------------------------------------------
  Функция Swap
------------------------------------------------------------
     Функция: Переставляет местами старший и  младший  байты
аргумента.
     Описание: Swap(x)
     Тип результата: Совпадает с типом параметра.
     Примечания: Параметр x - выражение целого типа или сло-
во.
     Прочее: См. также функции Hi, Lo.
     Пример:

       var
         x : word;
       begin
        x := Swap($1234);                        { $3412 }
       end.

------------------------------------------------------------
 Процедура SwapVectors                           Модуль Dos
------------------------------------------------------------
     Функция: Меняет местами внутренние векторы.
     Описание: SwapVectors
     Примечания: Меняет местами содержимое указателей  Save-
IntXX в модуле System и текущее содержимое векторов прерыва-
ний. Процедура SwapVectors обычно вызывается непосредственно
перед  и  непосредственно  после  вызова Exec. Таким образом
обеспечивается, что выполняемый по вызову  Exec  процесс  не
использует  никаких  обработчиков  претываний, установленных
текущим процессом и наоборот.
     Прочее: См. также процедуру Еxec.
     Пример:

        {$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);
          SvapVectors;
          if DosError <> 0 then
           Writeln('Командный файл COMMAND.COM выполнить
                    нельзя');
         end.

------------------------------------------------------------
 Процедура TextBackGroud                         Модуль Сrt
------------------------------------------------------------
     Функция: Выбирает фоновый цвет.
     Описание: TextBackGroud(цвет : byte)

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

      { Константы фонового и основного цвета }
         Black          = 0;      { черный }
         Blue           = 1;      { синий  }
         Green          = 2;      { зеленый }
         Cyan           = 3;      { бирюзовый }
         Red            = 4;      { красный }
         Magenta        = 5;      { малиновый }
         Brown          = 6;      { коричневый }
         LightGray      = 7;      { светло-серый }

     В модуле Сrt имеется байтовая переменная ТехtАttr,  ко-
торая  используется  для  сохранения текущего видеоатрибута.
Процедура ТехtВackGround устанавливает биты 4-6 этой переме-
ной  в  соответствии  с  параметром "цвет". Фоновый цвет для
всех выводимых далее символов будет соответствовать заданно-
му цвету.
     Прочее: См. также процедуры TextColor, HighVideo, Norm-
Video, LowVideo.

------------------------------------------------------------
 Процедура TextColor                             Модуль Сrt
------------------------------------------------------------
     Функция: Выбирает цвет символа.
     Описание: TextColor(цвет : byte)
     Примечания: Параметр "цвет" представляет собой  выраже-
ние целого типа в диапазоне 0...15, соответствующее одной из
констант цветов, определенных в модуле Сrt:

      { Константы фонового и основного цвета }
         Black          = 0;      { черный }
         Blue           = 1;      { синий  }
         Green          = 2;      { зеленый }
         Cyan           = 3;      { бирюзовый }
         Red            = 4;      { красный }
         Magenta        = 5;      { малиновый }
         Brown          = 6;      { коричневый }
         LightGray      = 7;      { светло-серый }
         DarkGray       = 8;      { темно-серый }
         LightBlue      = 9;      { светло-голубой }
         LightGreen     = 10;     { светло-зеленый }
         LightCyan      = 11;     { светло-бирюзовый }
         LightRed       = 12;     { светло-красный }
         LightMagenta   = 13;     { светло-малиновый }
         Yellow         = 14;     { желтый }
         White          = 15;     { белый }

     В модуле Сrt имеется байтовая переменная ТехtАttr,  ко-
торая  используется  для  сохранения текущего видеоатрибута.
Процедура ТехtВаскGround устанавливает биты 0-3 этой переме-
ной в соответствии с параметром "цвет". Если параметр "цвет"
превыщает значение 15, то устанавливается также бит мерцания
(бит 7), в противном случае он очищается.
     Вы можете задать мерцание  символов  путем  прибавления
128  к  значению  цвета.  Для этой цели определена константа
Вlinк. Фактически ради совместимости  с  версией  3.0  любое
значение  цвета,  превышающее  15 вызывает мерцание символа.
Цвет всех выводимых  далее  символов  будет  соответствовать
указанному цвету.
     Отличия: В версии 3.0 константа Вlinк была равна 16.
     Прочее:  См.  также  процедуры  TextBackGround,   High-
Video, NormVideo, LowVideo.
     Пример:

       TextColor(Green);               { выбрать зеленые
       символы }
       TextColor(LightRed+Blink)  { выбрать мерцающие свет-
                                    ло-красные символы }
       TextColor(14);             { выбрать желтые символы }

------------------------------------------------------------
 Функция TextHeight                            Модуль Graph
------------------------------------------------------------
     Функция: Возвращает высоту строки в элементах изображе-
ния.
     Описание: ТехtНеight(текст_строка : string)
     Тип результата: Слово (word).
     Примечания: На основе размера текущего шрифта и коэффи-
циента   размера   определяет  строки,  заданной  параметром
"текст_строка", в элементах изображения. Это полезно исполь-
зовать для выбора интервала между строками, вычисления высо-
ты области просмотра, определения размера  заголовка,  чтобы
он  поместился  в  заданном рисунке или в заданную область и
т.д. Например, при испоьзовании шрифта  с  двоичным  образом
8х8  и  коэффициента  размера  1  (установленных  процедурой
SetTextStyle) строка Тurbо будет иметь  высоту  8  элементов
изображения.
     Очень важно использовать процедуру TextHeight  для  вы-
числения  высоты  строк, вместо того, чтобы делать это вруч-
ную. Тогда при выборе различных шрифтов  отпадает  необходи-
мость изменения текста программы.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры  OutText,  OutTextXY,  Set-
TextStyle, TextWidth, SetUserCharSize.
     Пример:

         uses Graph;
        var
          Gd, Gm : integer;
           Y, Size : integer;
        begin
          Gd := Detect;
          InitGraph(Gd, Gm, '');
          if GraphResult <> grOk then
             Halt(1);
       Y := 0;
       for Size := 1 to 5 do
       begin
         SetTextStyle(DefaultFont, HorizText, Size);
         OutTextXY(0, Y, 'Графика Турбо-Паскаля');
         Inc(Y, TextWidth('Графика Турбо-Паскаля'));
       end;
       Readln;
        CloseGraph;
        end.

------------------------------------------------------------
 Процедура TextMode                              Модуль Сrt
------------------------------------------------------------
     Функция: Выбирает указанный текстовый режим.
     Описание: ТехtМоdе(режим : integer)
     Примечания: Определены следующие константы:
       const
          { режимы CRT }
          BW40   = 0;   { 40х25, черно-белый на цветном
                          адаптере }
          C40    = 1;   { 40х25, цветной на цветном адаптере}
          BW80   = 2;   { 80х25, черно-белый на цветном
                           адаптере }
          C80    = 3;   { 80х25, цветной на цветном адаптере}
          Mono   = 7;   { 80х25, черно-белый на одноцветном
                          адаптере }
          Font8x8 = 256; { для адаптеров EGA/VGA (50 строк)}
          C40 = C040;   { для совместимости с версией 3.0 }
          C80 = C080;   { для совместимости с версией 3.0 }

     При указании других значений процедура ТехtМоdе  подра-
зумевает использование С80.
     При вызове процедуры ТехtМоdе сбрасывается текущее окно
и в качестве текушего окна рассматривается вся область экра-
на,  для  DirectVideo  устанавливается  значение  True,  для
CheckShow также устанавливается значение Тruе (если был выб-
ран цветной режим) и текущий текстовый атрибут  сбрасывается
в   нормальное   состояние,   соответствующее   обращению  к
процедуре NormVideo,  а  текущий  видеорежим  сохраняется  в
LastMode. При инициализации программы LastMode получает зна-
чение текущего видеорежима.
     Задание TextMode(LastMode) приводит к тому,  что  вновь
будет  выбран последний активный текстовый режим. Эты бывает
полезно в том случае, когда после использование  графических
средств  (Graph3  или Graph) вы хотите вернуться в текстовый
режим.
     Обращение виде:

     TextMode(c80 + Font8x8)

приведет к тому, что дисплей будет сброшен в состояние,  при
котором  используется 43 строки и 80 позиций в строке и гра-
фический  адаптер  VGA  с   цветным   монитором.   Обращение
TextMode(Lo(LastMode))  всегда выключает 43 или 50-строковые
режимы и сбрасывает дисплей (хотя  его  видеорежим  остается
неизмененным), а вызов:

     TextMode(lo(LastMode)+Font8x8)

оставит видеорежим тем же самым, но сбросит дисплей в 43 или
50-строковый режим.
     Если при загрузке программы не Турбо-Паскале ваша  сис-
тема  находится в 43 или 50-строковом режеме, этот режим бу-
дет сохранен в части инициализации модуля Crt, и переменная,
в  которой  отслеживается максимальное число строк на экране
(WindMax) будет инициализирована правильно.
     Приведем пример "корректной" программы, которая восста-
навливает видеорежим в исходное состояние.

        program Video;
        uses Crt;
        var
          OrigMode : integer;
        begin
          OrigMode := LastMode;  { сохранить исходный режим }
          ...
          TextMode(OrigMode);
        end.

     Заметим, что процедура TextMode не поддерживает  графи-
ческих  режимов. Таким образом TextMode(OrigMode) будет вос-
станавливать  только  те  режимы,   которые   поддерживаются
TextMode.
     Отличия: В версии  3.0  вызов  процедуры  ТехtМоdе  без
параметров теперь соответствует обращению ТехtМоdе(Last).
     Прочее: См. также процедуру RestoreCrt.

------------------------------------------------------------
 Процедура TextWidth                           Модуль Graph
------------------------------------------------------------
     Функция: Возвращает ширину строки в элементах изображе-
ния.
     Описание: ТехtWidth(текст_строка : string)
     Тип результата: Слово (word).
     Примечания: На основе длины строки (в символах), разме-
ра  текущего  шрифта и коэффициента размера определяет длину
строки,  заданной  параметром  "текст_строка",  в  элементах
изображения.  Это  полезно использовать для выбора интервала
между строками, вычисления ширины области просмотра, опреде-
ления  размера заголовка, чтобы он поместился в заданном ри-
сунке или в заданную область и т.д. Например, при  использо-
вании шрифта с двоичным образом 8х8 и коэффициента размера 1
(установленными процедурой SetTextStyle) строка Тurbо  будет
иметь длину 40 элементов изображения.
     Очень важно использовать процедуру TextWidth для вычис-
ления  ширины  строк, вместо того, чтобы делать это вручную.
Тогда при выборе различных  шрифтов  отпадает  необходимость
изменения текста программы.
     Ограничения: Должен использоваться графический режим.
     Прочее: См. также процедуры  OutText,  OutTextXY,  Set-
TextStyle, TextHeight.
     Пример:

         uses Graph;
        var
          Gd, Gm : integer;
           Row, Size : integer;
          Title : string;
        begin
          Gd := Detect;
          InitGraph(Gd, Gm, '');
          if GraphResult <> grOk then
             Halt(1);
          Row := 0;
          Title := 'Turbo Graphics';
        Size := 1;
        while TextWidth(Title) < WindiwWidth do
        begin
          OutTextXY(0, Row, Title);
          Inc(Row, TextHeight('M'));
          Inc(Size);
          SetTextStyle(DefaultFont, HorizDir, Size);
        end;
        Readln
        CloseGraph;
        end.

------------------------------------------------------------
  Функция Trunc
------------------------------------------------------------
     Функция: Округляет значение вещественного типа до  зна-
чения целого типа.
     Описание: Trunc(x : real)
     Тип результата: Длинный целый (longint).
     Примечания: Параметр x представляет собой выражение ве-
щественного типа. Функция Round возвращает значение длинного
целого типа, которое является  значением  x,  округленным  в
сторону нуля.
     Ограничения: Если округленное значение x не  соответст-
вует диапазону представления длинного целого типа, то проис-
ходит ошибка во время выполнения.
     Отличия: В версии 3.0 функция Round возв- ращает  целое
значение.
     Прочее: См. также функции Round, Int.

------------------------------------------------------------
 Процедура Truncate
------------------------------------------------------------
     Функция: Усекает размер файла до текущей позиции в фай-
ле.
     Описание: Тruncate(f)
     Примечания: Параметр f является файловой переменной лю-
бого типа. Все записи после текущей позиции в файле f удаля-
ются и текущая  позиция  в  файле  становится  концом  файла
(функция Еоf(f) принимает значение Тrue).
     При  указании  директивы  компилятора   {$I-}   функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в  против-
ном случае.
     Ограничения: Файл f должен быть открыт.
     См. также процедуры Seek, Reset.
------------------------------------------------------------
 Процедура UnpackTime                            Модуль Dos
------------------------------------------------------------
     Функция: Преобразует четырехбайтовое  значение,  предс-
тавляющее  собой упакованный длинный целый тип представления
даты и времени, возвращаемый процедурами GetTime,  FindFirst
и FindNext, в распакованную запись DateTime (дата и время)
     Описание: UnpackTime(время : longint; var дата : Time :
longint; var DT : DateTime)
     Примечания: Запись DateTime описана в модуле Dos следу-
ющим образом:

       DateTime = record
                   Year, Month, Day, Hour,
                   Min, Sec, : word;
                  end;

     Для полей данной записи не выполняется проверка на пра-
вильность границ.
     Прочее: См. также процедуры PackTime,  GeFtTime,  SetF-
Time, GetTime, SetTime.

------------------------------------------------------------
 Функция UpCase
------------------------------------------------------------
     Функция: Преобразует символ в прописную букву.
     Описание: UpCase(символ : char)
     Примечания: Параметр "символ" представляет собой  выра-
жение  символьного  типа. Результатом символьного типа будет
символ, задаваемый параметром  "символ",  преобразованный  в
прописной  символ. Значения символов, не лежащие в диапазоне
а...z, остаются без изменений.

------------------------------------------------------------
 Процедура Val
------------------------------------------------------------
     Функция: Преобразует строковое значение в его численное
представление.
     Описание: Val(s : string; v; var код : integer)
     Примечания: Параметр  s  представляет  собой  выражение
строкового  типа.  Параметр v является переменной целого или
вещественного типа. Параметр "код" - это  переменная  целого
типа, которая формирует все число со знаком в соответствии с
синтаксисом, показанном в разделе "Числа" в Главе 1. Функция
Val преобразует строку s в ее численное представление и сох-
раняет результат в v. Если где-либо в строке встречается не-
допустимый  символ,  то  его  номер  сохраняется в параметре
"код". В противном случае этот параметр равен нулю.
     В зависимости от состояния  {$R}  и  типа  параметра  v
функция Val по-разному выполняет проверку диапазона.
     Если состояние проверки диапазона установлено, то  есть
задано  {$R+}, то выражения, выходящие за границу диапазона,
всегда будут генерировать ошибку времени выполнения.
     Если состояние проверки диапазона сброшено, то есть за-
дано  {$R-},  то  выражения, выходящие за границу диапазона,
будут вызываеть эффект, зависящий от их типа. Если  v  имеет
тип  real или longint, то значение v становится неопределен-
ным и в параметре "код" возвращается ненулевое значение. Для
любого другого числового типа в параметре "код" возвращается
нулевое значение, а v будет содержать результат вычислений с
переполнением (если предположить, что строковое значение по-
падает в диапазон представления длинного целого).
     Таким образом, процедуре Val переменную длинного целого
типа  (longint) и перед тем, как присваивать полученное зна-
чение, выполнять проверку диапазона. Например:

        {$R-}
        Val('65536', LongIntVar, Code);
        if (Code <>0) or
           (LOngIntVar < 0) or (LongIntVar > 65535) then
           ...             { ошибка }
        else
          WordVar := LongIntVar;

     Ограничения: Предшествующие пробелы должны быть  удале-
ны.
     Прочее: См. также процедуру Str.
     Пример:

       var
         i, code : integer;
        begin
          { получить текст из командной строки }
          Val(ParamStr(1), i, code);
          { ошибка при преобразовании в целое значение? }
          if code <> 0 then
             Writeln('Ошибка на позиции :', code);
          else
             Writeln('Значение = ', i);
        end.

------------------------------------------------------------
 Функция WhereX                                  Модуль Сrt
------------------------------------------------------------
     Функция: Возвращает для текущей позиции курсора относи-
тельно текущего окна координату Х.
     Описание: WhereX
     Тип результата: Байт (byte).
     Прочее: См. также процедуры WhereY, GotoXY, Window.

------------------------------------------------------------
 Функция WhereY                                  Модуль Сrt
------------------------------------------------------------
     Функция: Возвращает для текущей позиции курсора относи-
тельно текущего окна координату Y.
     Описание: WhereY
     Тип результата: Байт (byte).
     Прочее: См. также процедуры WhereX, GotoXY, Window.

------------------------------------------------------------
 Процедура Window                                Модуль Сrt
------------------------------------------------------
 ------
     Функция: Определяет на экране текстовое окно.
     Описание: Window(X1, Y1, X2, Y2)
     Примечания: Параметры Х1, Y1 представляют собой коорди-
наты верхнего левого угла окна, параметры Х2, Y2 представля-
ют собой координаты правого нижнего угла. Правый левый  угол
экрана  соответствует  координате  (1,1). Минимальный размер
текстового окна - один столбец на одну строку. Если  коорди-
наты являются каким-то образом недопустимыми, то обращение к
процедуре Window игнорируется.
     В 80-символьных режимах по умолчанию определяется  окно
(1,1,80,25),  а  в  40-символьных режимах - (1,1,40,25), что
соответствует всему экрану.
     Все координаты экрана (кроме самих координат окна)  яв-
ляются  относительными  координатами данного окна. Например,
GotoXY(1,1) всегда позиционирует  курсор  на  верхний  левый
угол текущего окна.
     Многие процедуры и функции модуля Сrt, включая  зависят
от текущего окна.
     Процедуры WindMin и WindМах сохраняют текущее определе-
ние окна (см. Главу 12).
     Пример:

       uses Crt;
       var
         x, y : byte;
       begin
         TextBackGround(Black);           { очистить экран }
         ClrScr;
         repeat
           x := Succ(Random(80));      { нарисовать
 случайным
                                        образом окна }
           y := Succ(random(25));
           Window(x, y, x + Random(10), y + Random(8));
           TextBackGround(Random(16));  { использовать
 случайные
                                          фоновые цвета }
           ClrScr;
         until KeyPressed;
        end.

------------------------------------------------------------
 Процедура Write (типизованные файлы)
------------------------------------------------------------
     Функция: Записывает переменную в элемент файла.
     Описание: Wite(f, v1 [, v2,...,vn] )
     Примечания: Параметр f является файловой переменной,  а
каждый элемент v представляет собой переменную того же типа,
что и элемент файла f. При каждой записи переменной  текущая
позиция в файле продвигается к следующему элементу. Если те-
кущая позиция файла находится в конце файла (то  есть  когда
Еоf(f) имеет значение Тruе), то файл расширяется.
     При  указании  директивы  компилятора   {$I-}   функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в  против-
ном случае.

     Прочее: См. также процедуру Writeln.

------------------------------------------------------------
 Процедура Write (текстовые файлы)
------------------------------------------------------------
     Функция: Записывает одно или более  значений  из  одной
или более переменных в текстовый файл.
     Описание: Write( [var f : text; ] v1 [, v2,...,vn] )
     Примечания: Параметр f (если он указан) является файло-
вой  переменой,  соответствующей  текстовому  файлу. Если он
опущен, то подразумевается использование стандартной  файло-
вой переменной Output. Каждый параметр v является записывае-
мым параметром. Каждый записываемый параметр включает в себя
выводимое  выражение, значение которого должно быть записано
в файл. Каждое выводимое выражение должно быть  символьного,
целого,  вещественного,  строкового,  упакованого строкового
или булевского типа.
     Записываемый параметр имеет вид:

     вывод_выраж [ : мин_разм [ : дес_знак ]]

где "вывод_выраж" представляет собой выводимое выражение,  а
"мин_разм"  и "дес-знак" и являются выражениями целого типа.
"мин_разм" задает минимальную ширину  поля,  которая  должна
быть больше нуля. Если "вывод_выраж" имеет значение, которое
должно быть представлено числом символов, превышающим  зада-
ваемое  параметром "мин_разм", то записывается ровно столько
символов, сколько определено в параметре "мин_разм" (при не-
обходимости используются лидирующие пробелы). В этом случае,
чтобы представить значение "вывод_выраж", записывается  дос-
таточное  количество  символов.  Аналогично,  если  параметр
"мин_разм" опущен, то для того, чтобы  представить  значение
"вывод_выраж", записывается достаточное количество символов.
     Параметр "дес_знак" задает число  десятичных  знаков  в
представлении  вещественного  значения с фиксированной запя-
той.  Оно  может  указываться  только  в  том  случае,  если
"вывод_выраж"   имеет   вещественный  тип,  а  также  указан
параметр "мин_разм". Если параметр "мин_разм" указан, то  он
должен быть больше нуля или равен нулю.
     Что касается  записи  символьного  значения,  то,  если
параметр  "мин_разм"  опущен, в файл записывается символьное
выражение "вывод_выраж".
     В противном случае значение параметра "мин_разм" -1 оп-
ределяет   запись  пробелов  и  далее  символьного  значения
"вывод_выраж".
     При  записи  целочисленного   значения,   если   опущен
параметр    "мин_разм",    то    десятичное    представление
"вывод_выраж" записывается в файл без предшествующих  пробе-
лов. Если параметр "мин_разм" уазывается и его значение пре-
вышает длину десятичной строки, то перед десятичной  строкой
записывается количество пробелов, достаточное для того, что-
бы  длина  десятичной   строки   соответствовала   параметру
"мин_разм".
     При записи вещественного значения, в файл  записывается
десятичное      представление     вещественного     значения
"вывод_выраж". Формат представления зависит от  наличия  или
отсутствия параметра "дес_знак".
     Если параметр "дес_знак" опущен (или если он  присутст-
вует,  но имеет отрицательное значение), то записывается де-
сятичная  строка  с   плавающей   запятой.   Если   параметр
"мин_разм"  также  опущен, то по умолчанию он подразмевается
равным 17. В  противном  случае,  если  параметр  "мин_разм"
меньше 8, то его значение подразумевается равным 8. десятич-
ная строа с плавающей запятой имеет следующий формат:

     [!-] <цифра>.<десят_знаки>Е[+!-<экспонента>]

     Элементы выводимой строки приведены в Таблице 16.1.

       Элементы выводимой строки          Таблица 16.1
------------------------------------------------------------
[!-]              Знак, соответствующий знаку "вывод-выраж"
<цифра>           Отдельная цифра или ноль (в том случае,
                  когда "вывод_выраж" равно 0.
<десят-знаки>     Цифровая строка длиной "мин_разм"-7 (но не
                  более 10 цифр).
------------------------------------------------------------
Е                 Прописной символ [Е].
[+!-]             Знак, соответствующий знаку экспоненты.
<экспонента>      Десятичная экспонента из двух цифр.
------------------------------------------------------------

     Если присутствует параметр "дес_знак", то  записывается
десятичная  строка  с  фиксированной  запятой. Если значение
данного параметра превышает 20, то оно считается равным  20.
Строка с фиксированной запятой имеет следующий формат:

     [<пробелы>][-]<цифры>[.<десят_знаки>]

     Элементы строки с  фиксировынной  запятой  приведены  в
Таблице 16.2.

     Элементы строки с фиксированной запятой   Таблица  16.2
------------------------------------------------------------
[.<пробелы>]      Пробелы (чтобы длины строки соответствова-
                  ла параметру "мин_разм".
[-]               Знак -, если "вывод_выраж" отрицательно.
<цифры>           По крайней мере одна цифра. Лидирующие ну-
                  ли не  допускаются.
<.десят_знаки>    Десятичные  знаки, если параметр "дес_знак"
                  больше нуля.
------------------------------------------------------------

     Запись значения строкового типа производится  следующим
образом.  Если параметр "мин_разм" опущен, то в файл записы-
вается строковое значение  "вывод_выраж",  а  предшествующие
пробелы  отсутствуют.  Если указан параметр "мин_разм" и его
значение превышает длину "вывод_выраж", то перед  десятичной
строкой  для  того, чтобы ее длина соответствовала параметру
"мин_разм", записывается достаточное количество пробелов.
     При записи значения упакованного строкового  типа,  эф-
фект  будет тем же самым, что и при записи строки, длина ко-
торой соответствует числу элементов в выражении упакованного
строкового типа.
     При записи булевского  значения  выполняются  такие  же
действия, как при записи строк Тruе или False, в зависимости
от значения "вывод_выраж".
     При  указании  директивы  компилятора   {$I-}   функция
IORеsult будет возвращать значение 0 в том случае, если опе-
рация завершилась успешно, и ненулевой код ошибки в  против-
ном случае.
     Ограничения: Файл должен быть открыт для вывода.
     Отличия: См. Приложение А  "Руководства  пользователя",
где  описываются различия между версиями 3.0, 4.0 и 5.0 Тур-
бо-Паскаля.
     Прочее: См. также процедуру Writeln.

------------------------------------------------------------
 Процедура Writeln
------------------------------------------------------------
     Функция: Выполняет процедуру Write, а затем  записывает
в файл метку конца строки.
     Описание: Writeln( [ var f : text; ] v1, [, v2,...,vn])
     Примечания: Данная процедура является расширением  про-
цедуры Write для текстовых файлов. После выполнения процеду-
ры Write процедура Writeln  записывает  метку  конца  строки
(возврат каретки / перевод строки).
     При вызове данной процедуры без параметров  (Write(f)),
в  файл  записывается метка конца строки. (Процедура Writeln
без  указания  списка  параметров  полностью   соответствует
процедуре Writeln(Output)).
     Ограничения: Файл должен быть открыт для вывода.
     Отличия: См. Приложение А  "Руководства  пользователя",
где  описываются различия между версиями 3.0, 4.0 и 5.0 Тур-
бо-Паскаля.
     Прочее: См. также процедуру Write.


