Глава 14. Ввод и вывод

             В данной Главе кратко описываются стандартные (или  встроен-

        ные) функции и процедуры ввода-вывода Borland Pascal.  Эти проце-

        дуры и функции можно найти в модуле System.

 

                        Процедуры и функции ввода-вывода

        ЪДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДї

        і   Функция        і      Описание                              і

        ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ

        і   Append         і Открывает существующий  файл  для  добавле-і

        і                  і ния.                                       і

        ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   Assign         і Присваивает имя внешнего файла файловой пе-і

        і                  і ременной.                                  і

        ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ

        і   BlockRead      і Считывает из  нетипизированного файла  однуі

        і                  і или более записей.                         і

        ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   BlockWrite     і Записывает  в  нетипизированный  файл  однуі

        і                  і или более записей.                         і

        ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   ChDir          і Выполняет смену текущего каталога.         і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   Close          і Закрывает открытый файл.                   і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   Erase          і Стирает внешний файл.                      і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   Eоf            і Возвращает для файла  состояние end-of-fileі

        і                  і (конец файла).                             і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   FilePos        і Возвращает текущую  позицию  в  файле.  Дляі

        і                  і текстовых файлов не используется.          і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   FileSize       і Возвращает текущий размер файла.  Для текс-і

        і                  і товых файлов не используется.              і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   Flush          і Сбрасывает буфер текстового файла вывода.  і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   Getdir         і Возвращает текущий каталог на заданном дис-і

        і                  і ке.                                        і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   IОResult       і Возвращает целое значение,  являющееся сос-і

        і                  і тоянием последней выполненной операции вво-і

        і                  і да-вывода.                                 і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   MkDir          і Создает подкаталог.                        і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   Read           і Считывает одно или более значений из  файлаі

        і                  і в одну или более переменных.               і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   Readln         і Делает то же, что и Read, и выполняет  про-і

        і                  і пуск до начала следующей строки  текстовогоі

        і                  і файла.                                     і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   Rеnаме         і Переименовывает внешний файл.              і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   Rеset          і Открывает существующий файл.               і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   Rewritе        і Создает и открывает новый файл.            і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   RмDir          і Удаляет пустой подкаталог.                 і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   Seek           і Перемещает текущую позицию в файле  на  за-і

        і                  і данный элемент. Для текстовых файлов не ис-і

        і                  і пользуется.                                і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   SeekEof        і Возвращает для текстового  файла  состояниеі

        і                  і "конец файла".                             і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   SeekEoln       і Возвращает для текстового  файла  состояниеі

        і                  і "конец строки".                            і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   SetTextBuf     і Назначает для текстового файла буфер ввода-і

        і                  і вывода.                                    і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   Truncate       і Усекает размер файла  до  текущей  позиции.і

        і                  і Для текстовых файлов не используется.      і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   Write          і Записывает в файл одно или более значений. і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   Writeln        і Делает то же, что  Write, но затем  записы-і

        і                  і вает в текстовый файл символ конца строки. і

        АДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

Файловый ввод-вывод

             Файловая переменная  в Паскале - это любая переменная файло-

        вого типа.  В Паскале имеются три класса  файлов:  типизированный

        файл, текстовый файл и нетипизированный файл.

 

                   Примечание: Синтаксис  записи типов файлов представлен

              в Главе 4, в разделе "Структурные типы".

 

             Перед использованием файловой  переменной  она  должна  быть

        связана с внешним файлом с помощью вызова процедуры Assign. Внеш-

        ним файлом обычно является поименованный файл  на  диске,  но  он

        также может представлять собой устройство,  например,  клавиатуру

        или дисплей.  Во внешних файлах сохраняется записанная в файл ин-

        формация, или они служат источниками информации, которая считыва-

        ется из файла.

 

             Когда связь с внешним файлом установлена,  для подготовки ее

        к операции ввода или вывода файловая переменная должна быть "отк-

        рыта". Существующий файл можно открыть с помощью процедуры Reset,

        а новый файл можно создать и открыть с помощью процедуры Rewrite.

        Текстовые файлы,  открытые с  помощью  процедуры  Reset  доступны

        только по чтению, а текстовые файлы, открытые с помощью процедуры

        Rewrite,  доступны только по записи. Типизированные и нетипизиро-

        ванные файлы всегда допускают как чтение, так и запись, независи-

        мо от того были они открыты с помощью процедуры Reset или  с  по-

        мощью процедуры Rewrite.

 

             Любой файл,  представляет  собой линейную последовательность

        элементов,  каждый из которых имеет тип элемента (или тип записи)

        файла.  Каждый  элемент  файла имеет номер.  Первый элемент файла

        считается нулевым элементом.

 

             Обычно доступ  к  файлам  организуется  последовательно,  то

        есть,  когда  элемент считывается с помощью стандартной процедуры

        Read или записывается с помощью стандартной процедуры Write,  те-

        кущая позиция файла перемещается к следующему по порядку элементу

        файла.  Однако к типизированным и нетипизированным  файлам  можно

        организовать  прямой доступ с помощью стандартной процедуры Sееk,

        которая перемещает текущую позицию файла  к  заданному  элементу.

        Для  определения текущей позиции в файле и текущего размера файла

        можно использовать стандартные функции FilePоs и Filesize.

 

             Когда программа завершает обработку файла,  он должен закры-

        ваться с помощью стандартной процедуры Close.  После полного зак-

        рытия файла связанный с ним внешний файл обновляется.  Затем фай-

        ловая переменная может быть связана с другим внешним файлом.

 

             По умолчанию при всех обращениях к  стандартным  функциям  и

        процедурам  ввода-вывода  автоматически  производится проверка на

        наличие ошибок. При обнаружении ошибки программа прекращает рабо-

        ту  и  выводит  на экран сообщение об ошибке.  С помощью директив

        компилятора {$I+} и {$I-} эту автоматическую проверку можно вклю-

        чить или выключить.  Когда автоматическая проверка отключена,  то

        есть когда процедура или функция была скомпилирована с директивой

        {$I-},  ошибки ввода-вывода, возникающие при работе программы, не

        приводят к ее останову.  При этом,  чтобы проверить результат вы-

        полнения  операции  ввода-вывода,  нужно использовать стандартную

        функцию IОResult.

 

             Для очистки ошибки,  которая может произойти, вы можете выз-

        вать функцию IOResult.  Если вы этого не сделаете, и текущим сос-

        тоянием является {$I+},  то из-за оставшейся ошибки IOResult сле-

        дующая операция ввода-вывода завершится с ошибкой.

 

                   Примечание: Если вы пишете программу дл Windows  и  не

              хотите,  чтобы Windows обрабатывала за вас ошибки ввода-вы-

              вода на  диск  или  другие  ошибки  ввода-вывода,  вызовите

              SetErrorMode(1).

 

 

Текстовые файлы

             В данном разделе описываются операции ввода  и  вывода,  ис-

        пользующие файловую переменную стандартного текстового типа.  За-

        метим,  что в Borland Pascal текстовый тип (тип Text)  отличается

        от символьного типа Char.

 

             При открытии  текстового файла внешний файл интерпретируется

        особым образом:  считается,  что он представляет собой последова-

        тельность символов,  сгруппированных в строки,  где каждая строка

        заканчивается символом конца строки (end-of-line), который предс-

        тавляет собой символ перевода каретки, за которым возможно следу-

        ет символ перевода строки.

 

             Для текстовых файлов  существует  специальный  вид  операций

        чтения и записи (read и write), который позволяют вам считывать и

        записывать значения,  тип которых отличается от символьного  типа

        Char. Такие   значения  автоматически  переводятся  в  символьное

        представление и обратно.  Например, Read(f,i), где i - переменная

        целого типа,  приведет к считыванию последовательности цифр,  ин-

        терпретации этой последовательности,  как  десятичного  числа,  и

        сохранению его в i.

 

             Как было отмечено ранее,  имеются две стандартных переменных

        текстового типа - это Input и Оutput.  Стандартная файловая пере-

        менная Input - это доступный только по чтению файл,  связанный со

        стандартным файлом ввода операционной системы (обычно это клавиа-

        тура),  а  стандартная файловая переменная Оutput - это доступный

        только по записи файл,  связанный со  стандартным  файлом  вывода

        операционной системы (обычно это дисплей). Перед началом выполне-

        ния программы DOS файлы Input и Оutput автоматически открываются,

        как если бы были выполнены следующие операторы:

 

             Assign(Input,'');

             Reset(Input);

             Assign(Output,'');

             Rewrite(Output);

 

             Так как Windows не поддерживает  непосредственно  ориентиро-

        ванный на текст ввод и вывод, файлы Input и Output по умолчанию в

        прикладной программе Windows не присваиваются,  и  любая  попытка

        чтения  из  этих  файлов  или записи в них приведет к ошибке вво-

        да-вывода.  Однако,  если прикладная программа использует  модуль

        WinCrt, то Input и Output будут ссылаться на прокручиваемое текс-

        товое окно. Модуль WinCrt содержит всю логику управления, необхо-

        димую   для  эмуляции  текстового  экрана  в  операционной  среде

        Windows,  поэтому в  прикладной  программе,  использующей  модуль

        WinCrt,  не требуется никаких приемов программирования,  специфи-

        ческих для Windows.

 

             Для некоторых из стандартных процедур и функций,  список ко-

        торых  приведен  в данном разделе,  не требуется явно указывать в

        качестве параметра  файловую переменную.  Если этот параметр опу-

        щен,  то по умолчанию будут рассматриваться переменные Input  или

        Output,  в  зависимости  от того,  будет ли процедура или функция

        ориентирована на ввод или на вывод.  Например,  Read(х) соответс-

        твует Read(Input,х) и Write(х) соответствует Write(Output,х).

 

             Если при вызове одной из процедур или функций из этого  раз-

        дела вы задаете файл, этот файл должен быть связан с внешним фай-

        лов с помощью процедуры  Assign  и  открыт  с  помощью  процедуры

        Reset, Rewritе или Append. Если для ориентированной на вывод про-

        цедуры или функции вы указываете файл,  который был открыт с  по-

        мощью процедуры Reset,  то выведется сообщение об ошибке.  Анало-

        гично,  будет ошибкой задавать для ориентированной на ввод проце-

        дуры  или  функции файл,  открытый с помощью процедур Rewrite или

        Append.

Нетипизированные файлы

             Нетипизированные файлы представляют собой каналы ввода-выво-

        да нижнего уровня,  используемые в основном для прямого доступа к

        любому файлу на диске,  независимо от его типа и структуры. Любой

        нетипизированный файл описывается словом file без атрибутов. Нап-

        ример:

 

             var

               DataFile: file;

 

             Для нетипизированных файлов в процедурах Reset и Rewrite до-

        пускается указывать дополнительный параметр,  чтобы задать размер

        записи, использующийся при передаче файла.

 

             По историческим причинам принимаемая по умолчанию длина  за-

        писи  равна  128 байтам.  Предпочтительной длиной записи является

        длина записи,  равная 1, поскольку это единственное значение, ко-

        торое  позволяет  точно отразить размер любого файла (когда длина

        записи равна 1, то в файле не могут присутствовать неполные запи-

        си, то есть записи с меньшей длиной).

 

             За исключением процедур Read и Write для всех нетипизирован-

        ных файлов допускается использование любой стандартной процедуры,

        которые допускается использовать с типизированными файлами. Вмес-

        то процедур Read и Write здесь используются соответственно проце-

        дуры Blockrеаd и BlockWrite позволяющие пересылать данные с высо-

        кой скоростью.

Переменная FileMode

             Переменная FileMode,  определенная  в модуле System,  задает

        код доступа,  передаваемый в DOS для типизированных и нетипизиро-

        ванных файлов (не для текстовых файлов),  когда они открываются с

        помощью процедуры Reset.

 

             По умолчанию  значение  FileMode  = 2.  При этом допускается

        чтение и запись файла.  Присваивание  FileMode  другого  значения

        приводит  к использованию этого режима при всех последующих вызо-

        вах Reset.

 

                   Примечание: Новые   файлы,   открываемые   с   помощью

              Rewrite, всегда открываются в режиме чтения/записи, что со-

              ответствует Filemode = 2.

 

             Диапазон допустимых значений FileMode зависит от  используе-

        мой версии DOS. Однако во всех версиях определены следующие режи-

        мы:

 

             0:  доступ только по чтению

             1:  Только запись

             2:  Чтение/запись

 

             В DOS  версии 3.х определены дополнительные режимы,  которые

        касаются в основном совместного использования файлов при работе в

        сети  (более подробно это описывается в "Руководстве программиста

        по DOS").

Устройства в Borland Pascal

             В Borland  Pascal и в операционной системе DOS внешняя аппа-

        ратура,  как,  например,  клавиатура, устройство печати, дисплей,

        рассматривается, как устройства. С точки зрения программиста уст-

        ройство можно рассматривать,  как файл,  и с ним можно работать с

        помощью  того  же набора стандартных процедур и функций,  что и с

        файлом.  В Турбо Паскале поддерживается два типа устройств - уст-

        ройства DOS и устройства для текстовых файлов.

Устройства DOS

             Устройства DOS  реализованы с помощью зарезервированных имен

        устройств,  которые имеют специальный смысл.  Устройства DOS пол-

        ностью "прозрачны": в Турбо Паскале неизвестно даже, когда файло-

        вая переменная связана с устройством,  а когда с файлом на диске.

        Например, программа:

 

             var

               Lst: Text;

             begin

               Assign(Lst,'LPT1');

               Rewrite(Lst);

               Writeln(Lst,'Привет...');

               Close(Lst);

             end;

 

        выведет строку "Привет..." на устройство печати,  хотя  синтаксис

        точно  такой же,  как если бы она выводилась в файл.

 

             Устройства, реализованные в операционной  системе  DOS,  ис-

        пользуются для однозначного ввода или вывода. Таким образом, уст-

        ройства в DOS используются обычно для текстовых файлов.  В редких

        случаях  для  работы  с устройствами DOS может оказаться полезным

        использование также нетипизированного файла.

Устройство CОN

             Устройство CОN означает консоль, посредством которой выводи-

        мая информация пересылается на экран дисплея, а вводимая информа-

        ция воспринимается с клавиатуры.  Если не было изменено направле-

        ние ввода или вывода,  стандартные файлы Input  и  Оutput  и  все

        файлы, которым присвоено пустое имя, ссылаются на устройство CОN.

 

             Вводимая с устройства CОN информация является строчно-ориен-

        тированной и используется средствами редактирования строки, кото-

        рые  описаны в руководстве по DOS.  Символы считываются из буфера

        строки, а когда буфер становится пустым, вводится новая строка.

 

             При нажатии клавиш Ctrl+Z генерируется  символ  конца  файла

        (end-of-file),  после  которого  функция  Eоf возвращает значение

        Truе.

Устройства LРT1, LРT2 и LРT3

             В качестве  возможного устройства построчной печати допуска-

        ется использование до трех устройств  печати.  Если  присоединено

        только одно устройство печати,  на него обычно ссылаются,  как на

        устройство LРT1.  Для этого устройства можно  также  использовать

        синоним РRN.

 

             Построчное устройство печати - это устройство, предназначен-

        ное только для вывода.  При любой попытке использовать  процедуру

        Reset  для открытия файла,  связанного с одним из этих устройств,

        немедленно генерируется признак конца файла.

 

             Стандартный модуль Рrinter описывает текстовую файловую  пе-

        ременную  с  именем  Lst  и  устанавливает ее связь с устройством

        LРT1.  Чтобы облегчить вывод какой-либо информации из вашей прог-

        раммы на устройство печати,  включите в оператор uses вашей прог-

        раммы   модуль   Рrinter,  а  для  вывода  используйте  процедуры

        Writе(Lst,...) и Writеln(Lst,...).

 

                   Примечание: О  печати из программы Windows рассказыва-

              ется ниже.

Устройства CОМ1 и CОМ2

             Коммуникационными портами (CОМ1 и CОМ2) являются устройства,

        представляющие собой два последовательных коммуникационных порта.

        Вместо CОМ1 можно использовать синоним AUХ.

Устройство NUL

             Нулевое устройство  (NUL) игнорирует любую попытку записи на

        него и немедленно генерирует признак конца файла при попытки счи-

        тывания с этого устройства.  Его следует использовать, если вы не

        хотите создавать отдельный файл,  а в программе требуется указать

        имя входного или выходного файла.

 

             В общем случае следует избегать использования устройств  DOS

        под Windows и применять функции ввода-вывода API Windows. Некото-

        рые устройства,  такие как CON, не будут правильно работать. Дру-

        гие устройства  могут работать,  но результаты могут оказаться не

        теми, что вы ожидаете.  Например,  если вы используете LPT1, ваша

        распечатка может выводиться, прерывая другое задание печати. Поэ-

        тому надежнее использовать функции API Windows.

Устройства, предназначенные для текстовых файлов

             Устройства, предназначенные для текстовых файлов,  использу-

        ются для реализации устройств,  не поддерживаемых в DOS,  или для

        того, чтобы сделать доступным набор средств,  отличающийся от то-

        го, который предусмотрен для аналогичного устройства DOS. Хорошим

        примером устройства, предназначенного для текстового файла, явля-

        ется  окно CRT,  реализованное с помощью стандартного модуля Crt.

        Оно обеспечивает аналогичный терминалу текстовый экран и позволя-

        ет вам  создавать прикладные программы со "стандартным вводом-вы-

        водом" с минимальными усилиями,  используя  такие  средства,  как

        цвета и окна.

 

             В отличие от устройств DOS,  устройства, предназначенные для

        вывода текстовых файлов,  не имеют зарезервированных имен. Факти-

        чески, у них вообще отсутствуют имена. Вместо этого файл связыва-

        ется в устройством с помощью обычной процедуры Assign.  Например,

        стандартный модуль Crt  реализует  процедуру  AssignCrt,  которая

        связывает текстовые файлы с устройством CRT.

 

             Устройства, предназначенные для текстовых файлов,  использу-

        ются для реализации устройств,  не поддерживаемых в DOS,  или для

        того, чтобы сделать доступным набор средств,  отличающийся от то-

        го, который предусмотрен для аналогичного устройства DOS. Хорошим

        примером устройства, предназначенного для текстового файла, явля-

        ется устройство CRT,  реализованное с помощью стандартного модуля

        Crt.  Его основной функцией  является  обеспечение  интерфейса  с

        дисплеем и клавиатурой, аналогично устройству CОN в модуле Dos.

 

             В отличие от устройств DOS,  устройства, предназначенные для

        вывода текстовых файлов,  не имеют зарезервированных имен. Факти-

        чески, у них вообще отсутствуют имена. Вместо этого файл связыва-

        ется с устройством с помощью обычной процедуры  Assign. Например,

        стандартный  модуль  Crt  реализует процедуру AssignCrt,  которая

        связывает текстовые файлы с устройством CRT.

Ввод и вывод с помощью модуля Crt

                   Примечание: Этот раздел относится только к  программам

              реального и защищенного режима DOS.

 

             Модуль Crt позволяет использовать все возможности  дисплея и

        клавиатуры персонального компьютера РС,  включая управление режи-

        мом экрана,  расширенные коды клавиатуры,  цвет,  окна и звуковые

        сигналы.

 

             Модуль Crt  реализует  ряд мощных программ,  предоставляющих

        вам полную возможность управления средствами компьютера РС, таки-

        ми,  как управление режимом экрана,  расширенные коды клавиатуры,

        цвета,  окна, и звуковые сигналы. Модуль Crt может использоваться

        только  в программах,  работающих на персональных компьютерах IBM

        РС, РС AT, РS/2 фирмы IBM и полностью совместимых с ними.

 

             Одним из основных преимуществ использования модуля Crt явля-

        ется большая скорость и гибкость при выполнении операций работы с

        экраном. Программы, не работающие с модулем Crt, выводят на экран

        информацию с помощью средств операционной системы DOS, что связа-

        но с дополнительными непроизводительными затратами. При использо-

        вании  модуля Crt выводимая информация посылается непосредственно

        в базовую систему ввода-вывода (ВIОS), или, для еще более быстрых

        операций, непосредственно в видеопамять.

Использование модуля CRT

             Чтобы использовать модуль Crt, его нужно указать в операторе

        uses вашей программы:

 

             uses Crt;

 

             При инициализации модуля Crt для того,  чтобы можно было об-

        ращаться к CRТ, вместо стандартных файлов ввода и вывода DOS наз-

        начаются стандартные входные и выходные текстовые файлы.  Это со-

        ответствует выполнению в начале программы следующих операторов:

 

             AssignCrt(Input); Reset(Input);

             AssignCrt(Output); Rewrite(Output);

 

             Это означает,  что переопределение входных и выходных файлов

        далее не допускается до тех пор,  пока для данных файлов не будет

        выполнено обратного переназначения  и  не  произойдет  переход  к

        стандартному вводу и выводу с помощью выполнения операторов:

 

             Assing(Input,''); Reset(Input);

             Assing(Output,''); RewriteOutput);

Окна CRT

             Модуль Crt поддерживает простую,  но,  тем не менее,  мощную

        форму использования окон.  Процедура Window позволяет вам опреде-

        лить  в  каком-либо месте экрана окно.  При записи в это окно оно

        ведет себя точно также, как целый экран. При этом остальная часть

        экрана остается нетронутой.  Другими словами, доступ к экрану вне

        окна отсутствует.  Внутри окна можно добавлять и удалять  строки,

        при этом курсор возвращается к правому краю и при достижении кур-

        сором нижней строки текст продвигается вверх.

 

             Все координаты экрана,  кроме тех,  которые используются для

        определения  окна,  относятся к текущему окну.  Координата экрана

        (1,1) соответствует левому верхнему углу экрана.

 

             По умолчанию окном считается весь экран.

Специальные символы

             При записи в выходной файл или в файл,  который назначен для

        модуля Crt, специальное значение имеют следующие управляющие сим-

        волы:

 

        ЪДДДДДДДВДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

        іСимвол і   Название    і               Описание                і

        ГДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   #7  і    Звонок     і Вызывает звуковой сигнал, издаваемый сі

        і       і     BELL      і помощью внутреннего динамика.         і

        ГДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   #8  іОбратный пробелі Возврат на одну позицию.  Вызывает пе-і

        і       і     BS        і ремещение курсора влево на одну  пози-і

        і       і               і цию. Если курсор уже находится у лево-і

        і       і               і го  края  текущего  окна,  то  никакихі

        і       і               і действий не производится.             і

        ГДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   #10 і Перевод строкиі Перемещает курсор на одну строку вниз.і

        і       і     LF        і Если курсор уже  находится  на  нижнейі

        і       і               і строке  окна,  то  окно пролистываетсяі

        і       і               і вверх на одну строку.                 і

        ГДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   #13 іВозврат кареткиі Возвращает курсор с левому краю  теку-і

        і       і    BS         і щего окна.                            і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Ввод строк

             При чтении  из входного файла (Input) или из текстового фай-

        ла,  который назначен для модуля Crt,  текст  вводится  по  одной

        строке. Строка запоминается во внутреннем буфере текстового файла

        и когда переменные считываются, то в качестве источника использу-

        ется этот буфер.  Каждый раз когда буфер становится пустым,  вво-

        дится новая строка.  При вводе строк можно использовать следующие

        клавиши редактирования:

 

        ЪДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

        іКлавиша редактированияі                Описание                і

        ГДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  Backsрасе           і Удаляет последний введенный символ.    і

        ГДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  Esс                 і Удаляет всю вводимую строку.           і

        ГДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  Enter               і Прекращает ввод   строки  и  записываеті

        і                      і метку конца строки (возврат каретки/пе-і

        і                      і ревод строки) в буфере.                і

        ГДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  Ctrl+S              і Действует также, как Backspace.        і

        ГДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  Ctrl+D              і Извлекает один символ из последней вво-і

        і                      і димой строки и выводит его на экран.   і

        ГДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  Ctrl+F              і Восстанавливает на   экране   последнююі

        і                      і вводимую строку.                       і

        ГДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  Ctrl+Z              і Завершает ввод строки и генерирует сим-і

        і                      і вол конца файла.                       і

        ГДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  Сtrl-Z              і Генерирует символ конца файла и  завер-і

        і                      і шает строку ввода.                     і

        АДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

 

             Ctrl+Z будет генерировать конец файла в том случае, если пе-

        ременная CheckEOF установлена в True (по умолчанию False).

 

             Для проверки состояния клавиатуры и ввода отдельных символов

        под  управлением  программы  используйте  функции  KeyРressed   и

        RеаdKey.

Процедуры и функции модуля Crt

        ЪДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

        іФункция/процедура і             Описание                       і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  AssignCrt       і Назначает текстовый  файл  для   устройстваі

        і                  і CRT.                                       і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  ClrEоl          і Очищает все  символы,  начиная  от  позицииі

        і                  і курсора до конца  строки,  без  перемещенияі

        і                  і курсора.                                   і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  ClrScr          і Очищает экран  и  помещает курсор в верхнемі

        і                  і левом углу.                                і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  Dеlау           і Выполняет задержку на указанное число  мил-і

        і                  і лисекунд.                                  і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  DelLine         і Удаляет строку, на которой находится курсорі

        і                  і и перемещает все следующие строки  на  однуі

        і                  і строку вверх. Нижняя строка очищается.     і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  GоtоХY          і Выполняет позиционирование курсора. Х - этоі

        і                  і горизонтальная позиция,  Y  -  вертикальнаяі

        і                  і позиция.                                   і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  НightVideo      і Выбирает символы с подсветкой.             і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  InsLine         і Вставляет пустую  строку в месте расположе-і

        і                  і ния курсора.                               і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  KeyРrеssеd      і Возвращает значение Truе,  если клавиша  наі

        і                  і клавиатуре  нажата  и  Falsе  - в противномі

        і                  і случае.                                    і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  LowVidе         і Выбирает символы с пониженной яркостью.    і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  NormVideo       і Выбирает символы с нормальной яркостью.    і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  NoSound         і Выключает внутренний динамик.              і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  Sound           і Включает внутренний динамик.               і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  TextВаckground  і Выбирает фоновый цвет.                     і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  TextColor       і Выбирает цвет самого символа.              і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  TextМоdе        і Выбирает конкретный текстовый режим.       і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  Window          і Определяет на экране текстовое окно.       і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  Rеаdкеу         і Считывает символ с клавиатуры.             і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  WherеХ          і Возвращает координату Х для текущей позицииі

        і                  і курсора,  относящуюся  к  текущему окну.  Хі

        і                  і представляет собой  горизонтальную позицию.і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  WhereY          і Возвращает координату Y для текущей позицииі

        і                  і курсора,  относящуюся  к  текущему окну. 

        і                  і представляет собой вертикальную позицию.   і

        АДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

Константы и переменные модуля Crt

             В модуле Crt содержится рад констант, облегчающих программи-

        рование. Подробно  они  описываются  в Главе 1 "Справочного руко-

        водства программиста". Опишем группы этих констант:

 

        ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

        і    Группа констант         і        Описание                  і

        ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і    Константы режима Crt    і Графические константы, используе-і

        і                            і мые в качестве параметров  проце-і

        і                            і дуры TextMode.                   і

        ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і    Константы цветов        і Константы, используемые для уста-і

        і                            і новки цветов с  помощью  процедурі

        і                            і TextColor и TextBackGround.      і

        АДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

 

             Например, чтобы найти значение константы,  которая  позволит

        вам выводить текст в программе красным цветом,  просмотрите конс-

        танты цветов текста и найдите константу Red со значением 4.

 

             В модуле Crt содержатся следующие переменные:

        ЪДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

        і Переменная       і    Тип      і      Описание                і

        ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  CheckBreak      і  boolean    і Разрешает или запрещает  про-і

        і                  і             і верку на Ctrl+Break.         і

        ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  CheckEof        і  boolean    і Разрешает или  запрещает сим-і

        і                  і             і вол конца файла.             і

        ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  CheckSnow       і  boolean    і Разрешает или  запрещает про-і

        і                  і             і верку на помехи.             і

        ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  DirectVideo     і  boolean    і Разрешает или запрещает пря- і

        і                  і             і мой доступ к памяти для про- і

        і                  і             і цедур WriteLn и Write.       і

        ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  LastMode        і  word       і При каждом  вызове  TextMode і

        і                  і             і сохраняет  текущий  видеоре- і

        і                  і             і жим.                         і

        ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  TextAttr        і  byte       і Содержит  атрибуты  текущего і

        і                  і             і выбранного текста.           і

        ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  WindMin         і  word       і Содержит координаты верхнего і

        і                  і             і левого угла текущего окна.   і

        ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і  WindMax         і  word       і Содержит координаты  нижнего і

        і                  і             і правого угла текущего окна.  і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Ввод и вывод с помощью модуля WinCrt

                   Примечание: Этот раздел относится только к  программам

              Windows.

 

             Модуль WinCrt  реализует аналогичный терминалу текстовый эк-

        ран в окне.  С помощью модуля WinCrt вы  можете  легко  создавать

        программы, использующие стандартные процедуры Read. ReadLn, Write

        и WriteLn для выполнения операций ввода и вывода (так же,  как  в

        обычной прикладной программе, работающей в текстовом режиме). Мо-

        дуль WinCrt содержит все алгоритмы, управляющие эмуляцией тексто-

        вого экрана в программной среде Windows.  Если ваша программа ис-

        пользует модуль WinCrt,  вам не потребуется писать "специфический

        для Windows" исходный код.

Использование модуля WinCrt

             Чтобы использовать модуль WinCrt, нужно просто указать в ва-

        шей программе оператор uses,  как и при использовании любого дру-

        гого модуля.

 

             uses WinCrt;

 

             По умолчанию стандартные текстовые файлы Input и Output, оп-

        ределенные в модуле System,  не присваиваются,  и все обращения к

        процедурам Read,  Readln, Write или Writeln без указания файловой

        переменной приводят к ошибке ввода-вывода. Однако, когда програм-

        ма использует модуль WinCrt,  код  инициализации  данного  модуля

        присваивает  Input  и  Output стандартные текстовые файлы,  чтобы

        ссылаться на окно, эмулирующее текстовый экран. Это соответствует

        выполнению в начале программы следующих операторов:

 

             AssignWinCrt(Input); Reset(Input);

             AssignWinCrt(Output); Rewrite(Output);

 

             Когда в программе выполняются процедуры Readln,  Read, Write

        или Writeln,  в оперативной области Windows открывается окно CRT.

        По умолчанию заголовком окна CRT будет полное имя маршрута  файла

        .EXE программы. Когда программа завершает работу (управление дос-

        тигает конечного зарезервированного слова  end),  заголовок  окна

        CRT изменяется на "(Inactive nnnnn)",  где nnnnn - заголовок окна

        в его активном состоянии.

 

             Заметим, что хотя программа и завершила работу, окно остает-

        ся  на экране,  благодаря чему пользователь может проверить вывод

        программы. Аналогично другим прикладным программам Windows, прог-

        рамма не завершается полностью,  пока пользователь не закроет ок-

        но.

 

             Более полно управлять жизненным циклом окна CRT вам позволя-

        ют  подпрограммы InitWinCrt и DoneWinCrt.  При обращении к первой

        из них без ожидания первого вызова процедур Readln,  Read,  Write

        или Writeln немедленно создается окно CRT.  Аналогично, обращение

        к DoneWinCrt немедленно уничтожает окно CRT,  не ожидая, пока его

        закроет пользователь.

 

             Окно CRT представляет собой прокручиваемое "панорамное" окно

        на виртуальном текстовом экране.  По умолчанию виртуальный  экран

        имеет  размеры  80 столбцов на 25 строк,  но реальный размер окна

        CRT может быть меньше.  Если этот размер меньше, пользователь для

        перемещения  области  окна  по текстовому экрану большего размера

        может использовать полосы прокрутки окна или  клавиши  управления

        курсором. Это особенно полезно для "обратной прокрутки" и провер-

        ки ранее написанного текста.  По умолчанию панорамное окно отсле-

        живает курсор текстового экрана. Другими словами, панорамное окно

        автоматически прокручивается,  чтобы обеспечить постоянную  види-

        мость  курсора.  Установив  переменную  AutoTracking  в  значение

        False, вы можете запретить средство автоматической прокрутки.

 

             Размеры виртуального    экрана    определяются    переменной

        ScreenSize. Присвоив этой переменной новые размерности перед тем,

        как ваша программа создает окно CRT,  вы можете изменить  размеры

        виртуального экрана.  Когда окно создается, в динамически распре-

        деляемой памяти выделяется буфер экрана.  Размер этого буфера ра-

        вен  произведению  ScreenSize.Y на ScreenSize.Y и не может превы-

        шать 65520 байт.  Ответственность за присваивания  значений  этим

        переменным  возлагается на вас (они не должны превышать указанную

        границу).  Если, например, вы присвоите ScreenSize.X значение 64,

        то наибольшим допустимым значением для ScreenSize.Y будет 1023.

 

             В любой момент в процессе выполнения программы, использующей

        модуль WinCrt,  пользователь может прервать выполнение,  выбрав в

        меню  Control  (Управление)  окна  CRT  команду Close (Закрытие),

        дважды щелкнув кнопкой "мыши" в рамке меню Control или нажав кла-

        виши Alt+F4. Аналогично, в любой момент для прерывания прикладной

        программы пользователь может нажать Ctrl+C  или  Ctrl+Break,  при

        этом окно переводится в неактивное состояние.  Установив перемен-

        ную CheckBreak в значение False,  вы можете запретить эту возмож-

        ность.

Специальные символы

             При записи в выходной файл (Output) или в файл, который наз-

        начен для окна CRT, специальное значение имеют следующие управля-

        ющие символы:

 

        ЪДДДДДДДВДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

        іСимвол і   Название    і               Описание                і

        ГДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   #7  і    Звонок     і Вызывает звуковой сигнал, издаваемый сі

        і       і     BELL      і помощью внутреннего динамика.         і

        ГДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   #8  іОбратный пробелі Возврат на одну позицию.  Вызывает пе-і

        і       і     BS        і ремещение курсора влево на одну  пози-і

        і       і               і цию. Если курсор уже находится у лево-і

        і       і               і го  края  текущего  окна,  то  никакихі

        і       і               і действий не производится.             і

        ГДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   #10 і Перевод строкиі Перемещает курсор на одну строку вниз.і

        і       і     LF        і Если курсор уже  находится  на  нижнейі

        і       і               і строке  окна,  то  окно пролистываетсяі

        і       і               і вверх на одну строку.                 і

        ГДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   #13 іВозврат кареткиі Возвращает курсор с левому краю  теку-і

        і       і    CR         і щего окна.                            і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Ввод строк

             При чтении из входного файла (Input) или из текстового  фай-

        ла,  который назначен для окна CRT, текст вводится по одной стро-

        ке.  Строка запоминается во внутреннем буфере текстового файла  и

        когда переменные считываются, то в качестве источника использует-

        ся этот буфер. Каждый раз когда буфер становится пустым, вводится

        новая строка.

 

             При вводе строк в окне CRT можно использовать следующие кла-

        виши редактирования: Вacksрасе - удаляет последний введенный сим-

        вол,  Esс - удаляет всю вводимую строку,  Enter - прекращает ввод

        строки и записывает метку конца строки  (возврат  каретки/перевод

        строки) в буфере.  Кроме того, можно использовать клавиши Сtrl+Z,

        которые генерируют символ конца файла только в том  случае,  если

        переменная  CheckEof установлена в значение Truе (по умолчанию ей

        присвоено значение Falsе).  Нажатие Ctrl+Z также завершает строку

        ввода и генерирует маркер конца строки.

 

             Для проверки состояния клавиатуры и ввода отдельных символов

        под  управлением  программы  используйте  функции  KeyРressed   и

        Rеаdkey.

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

             В следующих таблицах перечисляются процедуры и функции,  ко-

        торые можно найти в модуле WinCrt.

 

        ЪДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

        і Процедура/функция і      Описание                             і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   AssignCrt       і Назначает текстовый файл для окна CRT.    і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   ClrEоl          і Очищает все символы,  начиная  от  позицииі

        і                   і курсора до конца строки,  без  перемещенияі

        і                   і курсора.                                  і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   ClrScr          і Очищает экран и помещает курсор в  верхнемі

        і                   і левом углу.                               і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   CursorTo        і Перемещает  курсор  в точку на виртуальномі

        і                   і экране с заданными координатами.          і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   DoneWinCrt      і Уничтожает окна CRT.                      і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   GоtоХY          і Выполняет  позиционирование  курсора.  Х -і

        і                   і это горизонтальная позиция, Y - вертикаль-і

        і                   і ная позиция виртуального экрана.          і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   InitWinCrt      і Инициализирует окно CRT.                  і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   KeyРrеssеd      і Возвращает значение  Truе, если клавиша наі

        і                   і клавиатуре нажата и Falsе - в противном   і

        і                   і случае.                                   і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   ReadBuf         і Считывает из окна CRT строку.             і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   RеаdKеу         і Считывает символ с клавиатуры.            і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   ScrollTo        і Прокручивает окно CRT,  чтобы  видна  былаі

        і                   і точка с заданными координатами.           і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   TrackCursor     і Прокручивает окно CRT,  чтобы  курсор  былі

        і                   і видимым.                                  і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   WherеХ          і Возвращает координату Х для текущей позициі

        і                   і курсора, относящуюся к текущему окну. Х   і

        і                   і представляет собой горизонтальную         і

        і                   і позицию.                                  і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   WhereY          і Возвращает координату Y для текущей  пози-і

        і                   і ции курсора, относящуюся к текущему  окну.і

        і                   і Y представляет собой вертикальную позицию.і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   WriteBuf        і Выводит в окно CRT блок символов.         і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і   WriteChar       і Выводит в окно CRT отдельный символ.      і

        АДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

Переменные модуля WinCrt

             В модуле WinCrt описывается несколько переменных:

 

        ЪДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

        і     Переменная    і                 Тип                       і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  WindowOrg        і Используемое по умолчанию  размещение поз-і

        і                   і воляет Windows выбирать  подходящее распо-і

        і                   і ложение окна CRT.  Вы можете изменить  на-і

        і                   і чальное значение, присвоив перед созданиемі

        і                   і окна CRT новые значения координатам X и Y.і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  WindowSize       і Используемый по умолчанию размер позволяеті

        і                   і Windows выбирать  подходящий  размер  окнаі

        і                   і CRT.  Вы можете изменить начальный размер,і

        і                   і присвоив  перед  созданием  окна CRT новыеі

        і                   і значения координатам X и Y.               і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  ScreenSize       і По  умолчанию экран имеет размер 80 столб-і

        і                   і цов на 25 строк.  Присвоив другие значенияі

        і                   і координатам X и Y ScreenSize перед  созда-і

        і                   і нием окна CRT,  вы можете изменить исполь-і

        і                   і зуемый по  умолчанию  размер  экрана  CRT.і

        і                   і Значение,   получаемое   при  произведенииі

        і                   і ScreenSize.X на  ScreenSize.Y,  не  должноі

        і                   і превышать 65520.                          і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  Cursor           і Верхний левый угол соответствует координа-і

        і                   і те (0,0). Cursor - это переменная, доступ-і

        і                   і ная только по чтению.  Присваивать ей зна-і

        і                   і чения нельзя.                             і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  Origin           і Содержит текущую позицию курсора на вирту-і

        і                   і альном экране - координаты ячейки символа,і

        і                   і выводимой в левом верхнем углу  окна  CRT.і

        і                   і Отсчитывается с 0.                        і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  InactiveTitle    і Указывает на  завершающуюся  нулем строку,і

        і                   і используемую для создания заголовка  неак-і

        і                   і тивного окна CRT.                         і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  AutoTracking     і Разрешает  или  запрещает   автоматическуюі

        і                   і прокрутку окна для  отслеживания  видимогоі

        і                   і курсора.                                  і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  CheakBreak       і Переменная ChеckEOF разрешает или запреща-і

        і                   і ет символ  конца  файла.  Если  переменнаяі

        і                   і ChеckEOF  имеет  значение  Truе,  то когдаі

        і                   і чтение производится из файла, назначенногоі

        і                   і окну CRT,  при нажатии клавиш Ctrl+Z гене-і

        і                   і рируется символ конца файла.  Когда  пере-і

        і                   і менная  ChеckEOF  имеет значение False приі

        і                   і нажатии клавиш Ctrl+Z никаких действий  неі

        і                   і выполняется.                              і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  CheckEof         і Переменная CheckВrеak разрешает или запре-і

        і                   і щает проверки ситуации  Ctrl+Break.  Когдаі

        і                   і переменная  ChеckВrеak  принимает значениеі

        і                   і Truе, нажатие пользователем клавиш Alt+F4,і

        і                   і выбор  пользователем  команды Close в менюі

        і                   і Control окна CRT или двойное нажатие кноп-і

        і                   і ки "мыши" в управляющей рамке меню Controlі

        і                   і этого окна приведет к принудительному  за-і

        і                   і вершению работы  прикладной  программы приі

        і                   і следующей операции вывода на  экран  дисп-і

        і                   і лея, которую выполнит эта программа.      і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і  WindowTitle      і Определяет заголовок окна CRT. По  умолча-і

        і                   і нию используется значение,  равное полномуі

        і                   і имени маршрута файла .EXE программы.      і

        АДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

Печать из программы Windows

             Модуль WinPrn  позволяет  вам  печатать  текст  из программы

        Windows. Чтобы использовать WinPrn,  укажите этот модуль в опера-

        торе uses вашей программы;

 

             uses WinPrn;

 

             Перед началом печати вам нужно присвоить принтеру переменную

        типа текстового файла.  Сделать это можно двумя путями - назначив

        используемый по  умолчанию принтер или выбрав конкретный принтер,

        драйвер и порт.  Для вывода на используемый по умолчанию  принтер

        вызовите функцию  AssignPrn.  Любая запись в присвоенную файловую

        переменную типа текстового файла приведет к выводу на принтер.

Изменение заголовков

             По умолчанию администратор печати Windows будет выводить все

        задания печати через WinPrn без заголовков.  С помощью  процедуры

        TitlePrn (вызвав ее вслед за Rewrite) вы можете задать заголовок,

        например:

 

             AssignDefPrn(Prn);

             TitlePrn(Prn, 'Конец годового отчета');

             Rewrite(Prn);

 

        задает для вывода используемый по умолчанию  принтер  и  изменяет

        заголовок на "Конец годового отчета", выводя его на этот принтер.

        Если TitlePrn вызывается после Rewrite,  то никакого эффекта  это

        не вызывает.

Изменение шрифтов

             WinPrn использует назначенный по  умолчанию  шрифт,  который

        возвращается драйвером устройства. Чтобы изменить шрифт, вызовите

        функцию SetPrnFont,  передав ей описатель  используемого  шрифта.

        SetPrnFont возвращает  текущий  используемый шрифт.  Возвращаемый

        шрифт можно использовать для будущего вызова SetPrnFont  или  для

        передачи его DeleteObject.  Приведем пример программы, демонстри-

        рующей изменение шрифта:;

 

             program Test;

 

             uses WinTypes, WinProcs, WinCrt, WinPrn;

 

             var

               Prn: Text;

               OldFont: HFont;

 

             begin

               Writeln('Печать...');

               AssingDefPrn(Prn);

               Rewrite(Prn);

 

               Rewrite(Prn, 'Некоторый текст');

               OldFont := SetPrnFont(Prn, CreateFont(100,0,0,0,0,0,0,0,1,

                            Out_Default_Precis,Clip_Default_Precis,

                            Default_Quality,ff_Roman,nil);

               Writeln(Prn,' Произвольный текст новым шрифтом');

               DeleteObject(SetPrnFont(Prn, OldFont));

               Writeln(Prn, ' Возврат к старому шрифту');

 

               Close(Prn);

               Writeln('Выполнено');

             end.

Остановка задания печати

             Чтобы остановить  задание  печати,  запущенное   с   помощью

        WinPrn, вызовите  процедуру AbortPrn.  Это приведет к прекращению

        печати, сбросу устройства и подготовки его к выводу нового  зада-

        ния печати.

Специальные символы

             Когда ваша программа  использует  модуль  WinPrn,  следующие

        символы будут иметь специальный смысл:

 

        ЪДДДДДДДВДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

        іСимвол і   Название    і               Описание                і

        ГДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   #9  і  Табуляция    і Начинает печать символов со  следующейі

        і       і     TAB       і позиции табуляции,  которая отстоит оті

        і       і               і предыдущей  позиции  табуляции  на  8-і

        і       і               і кратную среднюю ширину шрифта.        і

        ГДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   #10 і Перевод строкиі Начинает печать с новой строки.       і

        і       і     LF        і                                       і

        ГДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   #12 іПеревод форматаі Принудительный перевод страницы.      і

        і       і     FF        і                                       і

        ГДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ

        і   #13 іВозврат кареткиі Начинает печать с начала новой строки.і

        і       і    CR         і                                       і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Процедуры и функции модуля WinPrn

             Процедуры и функции модуля WinPrn  перечислены  в  следующей

        таблице:

 

        ЪДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї

        і    Процедура/функция     і          Описание                  і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і    AbortPrn              і Прекращает печать задания, отбрасы-і

        і                          і вая все нераспечатанные данные.    і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і    AssignPrn             і Присваивает принтеру файл.         і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і    AssingDefPrn          і Присваивает файл  используемому  поі

        і                          і умолчанию принтеру.                і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і    SetPrnFont            і Начинает печать файла  с  выбраннымі

        і                          і шрифтом.                           і

        ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

        і    TitlePrn              і Выводит  заголовок печатаемого фай-і

        і                          і ла.                                і

        АДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

 

                  Драйверы устройств для текстовых файлов

 

             Borland Pascal позволяет  вам  определить  ваши  собственные

        драйверы  устройств для текстовых файлов.  Драйвер устройства для

        текстовых файлов представляет собой набор из четырех функций, ре-

        ализующих полный интерфейс между файловой системой Borland Pascal

        и каким-либо устройством.

 

             Этими четырьмя функциями, с помощью которых определяется лю-

        бой  драйвер устройства,  являются функции Open,  InOut,  Flush и

        Close. Заголовок каждой функции имеет следующий вид:

 

             function DeviceFunc(var F: TextRec) integer

 

        где TехtRес (или TTextRec для Windows) -  тип  записи  текстового

        файла, который определяется в Главе 21. Чтобы в функции использо-

        вался дальний тип вызова,  каждая из них должна компилироваться с

        директивой {$F+}.  Значение, возвращаемое каждой функцией, предс-

        тавляющей собой интерфейс с  устройством,  становится  значением,

        возвращаемым  функцией  IOResult.  Возвращаемое значение 0 свиде-

        тельствует об успешном завершении операции.

 

             Для того,  чтобы связать функцию, осуществляющую интерфейс с

        устройством, с конкретным файлом, нужно написать специальную про-

        цедуру Assign (аналогичную процедуре AssignCrt в модуле  Crt  или

        WinCrt). Эта процедура должна присваивать адреса четырех функций,

        осуществляющих интерфейс с устройствами,  четырем  указателям  на

        функции в переменной текстового файла. В придачу к этому вы долж-

        ны сохранить системную константу fmClosed в поле  Моdе,  записать

        размер буфера текстового файла в  переменную  BufSize,  сохранить

        указатель  буфера текстового файла в переменной BufPtr и очистить

        строку Nаме.

 

             Предположим, например, что именами четырех функций, реализу-

        ющих интерфейс с устройством, являются функции DevOpen, DevInOut,

        DevFlush, DevClose и Assign.

 

             Тогда процедура Assing может выглядеть следующим образом:

 

             procedure AssignDev(var F: Text);

             begin

               with TextRec(F) do

               begin

                 mode      := fmClosed;

                 BufSize   := SizeOf(Buffer);

                 BufPtr    := @Buffer;

                 OpenFunc  := @DevOpen;

                 InOutFunc := @DevInOut;

                 FlushFunc := @DevFlush;

                 CloseFunc := @DevClose;

                 Name[0]   := #0;

              end;

             end;

 

             Для хранения пользовательской информации в функции, реализу-

        ющей интерфейс  с  устройством,  может использоваться поле записи

        UserData.  Это  поле  не  изменяется  файловой  системой  Borland

        Pascal.

Функция Open

             Функция Open   вызывается  стандартными  процедурами  Rеset,

        Rеwritе и Appеnd для открытия текстового файла, связанного с уст-

        ройством. Чтобы отметить была ли функция Open вызвана из процеду-

        ры Rеset,  Rеwritе или Appеnd, на входе поле Моdе содержит значе-

        ние fmInput, fmOutput или fmInOut.

 

             В соответствии со значением Моdе функция Open подготавливает

        файл для ввода или вывода.  Если в Моdе указывается FmInOut (ука-

        зывая, что функция Оpеn была вызвана из Appеnd), то перед возвра-

        том управления функцией Оpеn это значение должно быть изменено на

        fmOutput.

 

             Функция Opеn всегда вызывается перед любой другой  функцией,

        реализующей  интерфейс  с  устройством.  По  этой причине функция

        Assign инициализирует только поле OpеnFunc,  откладывая инициали-

        зацию  оставшихся векторов до завершения выполнения функции Opеn.

        Основываясь на значении поля Моdе функция Opеn  может  установить

        указатели  как  для функций,  ориентированных на ввод,  так и для

        функций, ориентированных на вывод. Это позволяет избежать опреде-

        ления текущего режима в функциях InOut, Flush и Close.

Функция InOut

             Всякий раз,  когда требуется ввод с устройства или вывод  на

        него, функциями Readln, Read, Write, Writeln, Page, Eof, SeekEof,

        SeekEoln и Close вызывается функция InOut.

 

             Когда в поле  Моdе  установлено  значение  fnInput,  функция

        InOut считывает символы (объем ввода задается переменной BufSize)

        в BufPtr^ и возвращает число считанных символов в BufEnd, а также

        записывает 0 в BufPos. Если функция InOut в результате запроса на

        ввод возвращает в BufEnd значение 0,  то переменная Eоf для файла

        принимает значение Truе.

 

             Когда в  поле  Моdе  установлено значение fnOutput,  функция

        InOut записывает символы,  количество которых определяется  пере-

        менной BufРоs, из BufPtr^ и возвращает в BufРоs значение 0.

Функция Flush

             Функция Flush вызывается в конце выполнения  каждой  функции

        Rеаd, Write, Rеаdln или Writeln. Она может также сбрасывать буфер

        текстового файла.

 

             Если в поле Моdе находится fmInput,  функция Flush для того,

        чтобы отбросить оставшиеся (несчитанные) символы в буфере,  может

        записать 0 в BufPos и BufEnd. Это средство используется редко.

 

             Если в поле Моdе находится fnOutput,  то функция Flush может

        записать  содержимое  буфера,  в  точности таким же образом,  как

        функция InOut. Этим обеспечивается,  что выведенный на устройство

        текст  появится  на устройстве немедленно.  Если функция Flush не

        выполняет никаких действий, текст не будет выведен на устройство,

        пока буфер не станет полным, или файл не будет закрыт.

Функция Clоsе

             Функция Clоsе вызывается стандартной  процедурой  Clоsе  для

        закрытия  связанного  с устройством текстового файла.  (Процедуры

        Rеsеt,  Rеwritе,  Appеnd также вызывают функцию Clоsе, если файл,

        который они открывают, уже был открыт.) Если в поле Моdе находит-

        ся fmOut,  то перед вызовом функции Clоsе файловая система  Турбо

        Паскаля обращается к функции InOut. Это гарантирует вывод на уст-

        ройство всех символов.