Мир программирования

 


Найти: на:


Меню
Партнеры
Счетчики
Реклама

ЧАСТЬ 2. СТАНДАРТНЫЕ БИБЛИОТЕКИ
ГЛАВА 10.
МОДУЛЬ SYSTEM


 Предыдущая страница     |     Следующая страница  
Добавить в избанное Обсудить в форуме Написать автору сайта Версия для печати

            Модуль System  является  библиотекой  Turbo   Pascal   времени выполнения.   Он   реализует  низко-уровневые  программы  для  всех встроенных возможностей ,  таких как ввод/вывод,  обработка  строк, эмуляция 8087, плавающую точку, управление оверлеями и динамическое распределение  памяти.  Модуль  System  используется  автоматически любым модулем или программой и никогда не требуется указывать его в утверждении uses.

[начало] [оглавление]

  

Стандартные процедуры и функции.

      В данном  разделе  описываются  все  стандартные  процедуры  и функции,  использующиеся в  Turbo  Pascal,  кроме  тех  процедур  и функций ввода/вывода, которые обсуждаются в разделе "Ввод и вывод". Более подробная информация содержится в Справочном  руководстве  по библиотеке.

     Стандартные процедуры и  функции  являются  предопределенными. Поскольку все предопределенные элементы действуют точно так же, как если бы они были объявлены в окружающем  программу  блоке,  то  при объявлении,  переопределяющем  тот  же  самый  идентификатор внутри программы, конфликта не возникает.

[начало] [оглавление]

    

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

 ───────────────────────────────────────────────────────────────────

   Процедура                      Описание

───────────────────────────────────────────────────────────────────

   Exit        Позволяет немедленно выйти из текущего блока

    Halt        Останавливает выполнение программы и возвращает

               в операционную систему

    RunError    Останавливает выполнение программы и генерирует

               ошибку времени выполнения

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

    

Процедуры динамического распределения.

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

 ───────────────────────────────────────────────────────────────────

   Процедура                      Описание

───────────────────────────────────────────────────────────────────

   Dispose     Уничтожает динамическую переменную

    FreeMem     Уничтожает динамическую переменную данного размера

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

    Mark        Записывает в переменной-указателе состояние кучи

    New         Создает новую динамическую переменную и устанавливает на нее переменную-указатель

    Release     Возвращает кучу в заданное состояние

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

 

Функции динамического распределения.

 ───────────────────────────────────────────────────────────────────

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

───────────────────────────────────────────────────────────────────

   MaxAvail     Возвращает размер     наибольшего      непрерывного свободного   блока  кучи,  соответствующей  размеру  наибольшей динамической переменной,  которая  может быть распределена в момент вызова MaxAvail

    MemAvail     Возвращает количество  имеющихся  в  куче свободных  байт

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

    

Функции преобразования.

      Процедуры Pack и UnPack, определенные в стандартном Паскале, в Turbo Pascal не реализованы.

 ───────────────────────────────────────────────────────────────────

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

───────────────────────────────────────────────────────────────────

   Chr       Возвращает символ с заданным порядковым номером

    Ord       Возвращает порядковый    номер,    имеющий    значение  порядкового типа

    Round     Округляет значение вещественного типа до значения типа

             LongInt

    Trunc     Усекает значение  вещественного  типа до значения типа

             LongInt

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

  

Арифметические функции.

      Примечание: При компиляции в режиме числового сопроцессора, {$ N+}, возвращаемые значения в программах с плавающей точкой в модуле System (Sqrt, Pi, Sin и т.д.) имеют тип Еxtended вместо Real.

 ───────────────────────────────────────────────────────────────────

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

───────────────────────────────────────────────────────────────────

   Abs         Возвращает абсолютное значение аргумента

    ArcTan      Возвращает арктангенс аргумента

    Cos         Возвращает косинус аргумента

    Exp         Возвращает экспоненту аргумента

    Frac        Возвращает дробную часть аргумента

    Int         Возвращает целую часть аргумента

    Ln          Возвращает натуральный логарифм аргумента

    Pi          Возвращает значение числа Pi  {3.1415926535897932385}

    Sin         Возвращает синус аргумента

    Sqr         Возвращает аргумент в квадрате

    Sqrt        Возвращает квадратный корень аргумента

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

    

Процедуры порядкового типа.

 ───────────────────────────────────────────────────────────────────

   Процедура                      Описание

───────────────────────────────────────────────────────────────────

   Dec      Уменьшает значение переменной

    Inc      Увеличивает значение переменной

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

    

Функции порядкового типа.

 ───────────────────────────────────────────────────────────────────

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

───────────────────────────────────────────────────────────────────

   Odd      Проверяет, является ли аргумент нечетным числом

    Pred     Возвращает предшествующее значение аргумента

    Succ     Возвращает его последующее значение

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

  

Строковые процедуры.

 ───────────────────────────────────────────────────────────────────

   Процедура                      Описание

───────────────────────────────────────────────────────────────────

   Delete     Удаляет подстроку из строки

    Insert     Вставляет подстроку в строку

    Str        Преобразует численное значение в его строковое  представление

    Val        Преобразует строковое значение в его численное  представление

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

    

Строковые функции.

 ───────────────────────────────────────────────────────────────────

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

───────────────────────────────────────────────────────────────────

   Concat     Выполняет конкатенацию последовательности строк

    Copy       Возвращает подстроку из строки

    Length     Возвращает динамическую длину строки

    Pos        Производит поиск подстроки в строке

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

    

Функции для работы с указателями и адресами.

 ───────────────────────────────────────────────────────────────────

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

───────────────────────────────────────────────────────────────────

   Addr     Возвращает адрес заданного объекта

    CSeg     Возвращает текущее значение регистра CS

    DSeg     Возвращает текущее значение регистра DS

    Ofs      Возвращает смещение заданного объекта

    Ptr      Преобразует базовый адрес сегмента и смещение  в значение типа указатель

    Seg      Возвращает сегмент для заданного объекта

    SPtr     Возвращает текущее значение регистра SP

    SSeg     Возвращает текущее значение регистра SS

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

    

Другие процедуры.

 ───────────────────────────────────────────────────────────────────

   Процедура                      Описание

───────────────────────────────────────────────────────────────────

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

    Move         Копирует заданное число последовательных байт из источника в назначение

    Randomize    Инициализирует случайным значением встроенный генератор случайных чисел

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

    

Другие функции.

 ───────────────────────────────────────────────────────────────────

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

───────────────────────────────────────────────────────────────────

   Hi            Возвращает старший байт аргумента

    Lo            Возвращает младший байт аргумента

    ParamCount    Возвращает число параметров, переданных программе  в командной строке

    ParamStr      Возвращает заданный параметр командной строки

    Random        Возвращает случайное число

    SizeOf        Возвращает число байт, занимаемых аргументом

    Swap          Производит перестановку старших и младших байт  аргумента

    UpCase        Преобразует символ в прописной

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

    

Ввод и вывод.

      В данном  разделе  кратко описываются стандартные (встроенные) функции и процедуры ввода-вывода Turbo Pascal.  Для более детальной информации см. главу 19.

[начало] [оглавление]    

Введение во ввод/вывод.

      Файловая переменная в Паскале - это любая переменная файлового типа.  В  Паскале  имеются  три класса файлов :  типированный файл, текстовый файл, нетипированный файл.

     Перед использованием   файловой  переменной  она  должна  быть связана с внешним файлом с помощью вызова процедуры Assign. Внешним файлом  обычно  является поименнованный файл на диске,  но он также может представлять собой устройство,  как например,  клавиатуру или дисплей.   Во   внешних   файлах   сохраняется  записанная  в  файл информация,  или  они  служат   источниками   информации,   которая считывается из файла.

     Когда связь с внешним файлом установлена,  для подготовки ее к операции   ввода   или   вывода  файловая  переменная  должна  быть "открыта".  Существующий файл можно  открыть  с  помощью  процедуры Reset,  а  новый  файл  можно создать и открыть с помощью процедуры Rewrite. Текстовые  файлы,  открытые  с  помощью  процедуры  Reset, доступны только для чтения,  а текстовые файлы,  открытые с помощью процедуры Rewrite   и   Append,   доступны   только   для   записи. Типированные  и  нетипированные  файлы всегда допускают как чтение, так и запись,  независимо от  того,  были  они  открыты  с  помощью процедуры Reset или с помощью процедуры Rewrite.

     Когда начинается выполнение  программы,  всегда  автоматически открываются  стандартные  текстовые  файловые  переменные  Input  и Output (ввод и вывод).  Input - это  доступный  только  для  чтения файл,  связаный с клавиатурой,  а Output - это доступный только для записи файл, связанный с дисплеем.

     Любой файл   представляет  собой  линейную  последовательность элементов,  каждый из которых имеет сложный тип  (или  тип  записи) файла.  Каждый  элемент  файла  имеет  номер.  Первый элемент файла считается нулевым элементом.

     Обычно доступ к файлам организуется последовательно,  то есть, когда элемент считывается с помощью стандартной процедуры  Read или записывается с помощью стандартной процедуры Write, текущая позиция файла перемещается к следующему по порядку элементу файла. Однако к типированным  и  нетипированным  файлам  можно  организовать прямой доступ с помощью стандартной  процедуры  Seek,  которая  перемещает текущую позицию файла к заданному элементу. Текущую позицию в файле и текущий размер  файла  можно  определить  с  помощью  стандартных функций FilePos и FileSize.

     Когда программа   завершит   обработку   файла,   он    должен закрываться  с  помощью стандартной процедуры Close.  После полного закрытия файла,  связанный с ним внешний  файл  обновляется.  Затем файловая переменная может быть связана с другим внешним файлом.

     По умолчанию,  при всех обращениях к  стандартным  функциям  и процедурам  ввода/вывода  автоматически  производится  проверка  на наличие ошибок.  При обнаружении ошибки программа прекращает работу и  выводит  на  экран  сообщение  об  ошибке.  С  помощью  директив компилятора  {$I+}  и  {$I-}  эту  автоматическую  проверку   можно включить или выключить. Когда автоматическая проверка отключена, то есть когда процедура или функция была скомпилирована  с  директивой {$I-},  ошибки ввода/вывода,  возникающие при работе программы,  не приводят  к  ее  останову.  При  этом,  чтобы  проверить  результат выполнения  операции  ввода/вывода,  нужно использовать стандартную функцию IOResult.

[начало] [оглавление]  

Процедуры В/В.

───────────────────────────────────────────────────────────────────

   Процедура                      Описание

───────────────────────────────────────────────────────────────────

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

   ChDir        Меняет текущий справочник

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

   Erase        Удаляет внешний файл

   GetDir       Возвращает текущий справочник на заданном диске

   MkDir        Создает подсправочник

   Rename       Переименовывает внешний файл

   Reset        Открывает существующий файл

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

   RmDir        Удаляет пустой подсправочник

   Seek         Передвигает текущую позицию файла на указанную компоненту (не используется с текстовыми файлами).

    Truncate     Усекает размер файла до текущей позиции в файле. (Не используется с текстовыми файлами)

───────────────────────────────────────────────────────────────────

[начало] [оглавление]    

Функции В/В.

 ───────────────────────────────────────────────────────────────────

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

───────────────────────────────────────────────────────────────────

   Eof          Возвращает для файла состояние end-of-file (конец  файла)

    FilePos      Возвращает текущую позицию в файле. (Не испольтзуется с текстовыми файлами)

    FileSize     Возвращает текущий размер файла.  (Не испольтзуется с текстовыми файлами)

    IOResult     Возвращает целое значение, являющееся состоянием  последней выполненной операции ввода/вывода.

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

    

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

      В этом разделе описываются операции ввода/вывода, использующие файловую  переменную  стандартного  типа  Text.  Заметим,   что   в Turbo Pascal тип Text отличается от типа file of char.

     При открытии текстового файла  внешний  файл  интерпретируется особым образом:    считается,    что    он    представляет    собой последовательность символов,  сгруппированных в строки,  где каждая строка  заканчивается символом конца строки (end of line),  который представляет собой символ перевода каретки,  за которым,  возможно, следует символ перевода строки.

     Для текстовых  файлов  существует  специальный  вид   операций чтения  и записи (Read и Write),  которые позволяют вам считывать и записывать значения,  тип которых отличается от  типа  Char.  Такие значения  автоматически  переводятся  в  символьное представление и обратно. Например,  Read(F,  i),  где i - переменная  целого  типа, приведет  к считыванию последовательности цифр,  интерпретации этой последовательности, как десятичного числа, и сохранению его в i.

     Как было  отмечено  ранее,  имеются две стандартные переменные текстового типа - Input и Output.  Стандартная файловая  переменная Input  -  это  доступный  только  для  чтения  файл,  связанный  со стандартным  файлом  ввода   операционной   системы   (обычно   это клавиатура),   а  стандартная  файловая  переменная  Output  -  это доступный только для записи файл,  связанный со стандартным  файлом вывода  операционной  системы  (обычно это дисплей).  Перед началом выполнения   программы   файлы   Input   и   Output   автоматически открываются, как если бы были выполнены следующие операторы :

               Assign(Input,''); Reset(Input);

               Assign(Output,''); Rewrite(Output);

      Аналогично, после выполнения программы эти файлы автоматически закрываются.

      Если программа  использует  стандартный  модуль Crt,  то файлы Input и Output не  будут  по  умолчанию  относиться  к  стандартным файлам  ввода/вывода.

     Для некоторых стандартных процедур,  список которых приведен в данном  разделе,  не  требуется явно указывать в качестве параметра файловую переменную.  Если этот параметр опущен,  то  по  умолчанию будут рассматриваться Input и Output,  в зависимости от того, будет ли процедура или функция ориентирована на ввод или вывод. Например,

Read(Х)   соответствует   Read(Input,Х)  и  Write(Х)  соответствует

Write(Output,Х).

     Если при вызове одной из процедур или функций из этого раздела вы задаете файл,  этот файл должен быть связан с внешним  файлом  с помощью  процедуры  Assign  и  открыт  с  помощью  процедуры Reset, Rewrite,  или Append.  Если для ориентированной на вывод  процедуры или  функции  Вы  указываете на файл,  который был открыт с помощью процедуры Reset, то выведется сообщение об ошибке.

     Аналогично, будет ошибкой задавать для ориентированной на ввод процедуры или функции файл, открытый с помощью процедур Rewrite или Append .

[начало] [оглавление]    

Процедуры:

 ───────────────────────────────────────────────────────────────────

   Процедура                      Описание

───────────────────────────────────────────────────────────────────

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

    Flush         Выталкивает буфер файла вывода

    Read          Считывает одно или более значений из текстового файла в одну или более переменных

    Readln        Выполняет те же действия, что и Read, а потом  делает пропуск до начала следующей строки файла

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

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

    Writeln       Выполняет те же действия, что и Write, а затем добавляет к файлу маркер конца строки

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

Функции:

───────────────────────────────────────────────────────────────────

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

───────────────────────────────────────────────────────────────────

   Eoln          Возвращает для файла состояние end-of-line (конец строки)

    SeekEof       Возвращает для файла состояние end-of-file (конец  файла)

    SeekEoln      Возвращает для файла состояние end-of-line (конец  строки)

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

    

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

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

     Любой нетипированный  файл  объявляется  со  словом  file  без атрибутов, например:

                var

                  Datafile : file;

      Для нетипированных  файлов  в  процедурах  Reset   и   Rewrite допускается указывать дополнительный параметр,  чтобы задать размер записи, использующийся при передаче данных.

     По умолчанию  длина  записи  равна 128 байт.  Предпочтительной длиной записи  является  длина  записи,  равная  1,  поскольку  это единственное значение,  которое  точно отражает размер любого файла (если длина записи равна 1, то неполные записи невозможны).

     За исключением процедур Read и Write для  всех  нетипированных файлов   допускается  использование  любой  стандартной  процедуры, которую разрешено  использовать  с  типированными  файлами.  Вместо процедур  Read  и Write здесь используются соответственно процедуры BlockRead и BlockWrite,  позволяющие пересылать  данные  с  высокой скоростью.

[начало] [оглавление]

    

Процедуры.

 ───────────────────────────────────────────────────────────────────

   Процедура                      Описание

───────────────────────────────────────────────────────────────────

   BlockRead      Считывает в переменную одну или более записей

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

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

    

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

      Переменная FileMode,    определенная    в    модуле    System, устанавливает код   доступа,   который   передается  в  DOS,  когда типированные и нетипированные файлы (но не текстовые) открываются с помощью процедуры Reset.

     По умолчанию задается  значение  FileMode  равное  2,  которое разрешает   и  чтение,  и  запись.  Присваивание  другого  значения переменной FileMode приводит к тому,  что  все  последующие  вызовы процедуры Reset будут использовать этот режим.

     Диапазон возможных значений FileMode зависит  от  используемой версии DOS. Однако для всех версий задаются следующие режимы :

      0 : только чтение

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

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

      Версия 3.X  DOS задает дополнительные режимы,  которые главным образом связаны с разделенным использованием файлов в  сетях.  (Для получения  более  подробной  информации,  обратитесь  к руководству программиста по DOS).

      Примечание: Новые  файлы,  созданные   с   помощью   процедуры Rewrite,  всегда  открываются в режиме Read/Write,  соответствующем значению переменной FileMode = 2.

[начало] [оглавление]

  

Устройства в Turbo Pascal.

      В Turbo   Pascal   и   в   операционной  системе  DOS  внешняя аппаратура,  как например,  клавиатура, устройство печати, дисплей, рассматриваются,   как  устройства.  С  точки  зрения  программиста устройство можно рассматривать как файл и с ним  можно  работать  с помощью того же набора стандартных функций, что и с файлом. В Turbo Pascal поддерживается  два  типа  устройств  -  устройства  DOS   и устройства для текстовых файлов.

[начало] [оглавление]

    

Устройства DOS.

      Устройства DOS реализованы с  помощью  зарезервированных  имен устройств,   которые   имееют  специальный  смысл.  Устройства  DOS полностью прозрачны  :  в  Turbo  Pascal  неизвестно  даже,   когда файловая  переменная  связана  с  устройством,  а когда с файлом на диске. Например, программа:

                var

                  Lst : Text;

               begin

                  Assign(Lst, 'LPT1');

                  Rewrite(Lst);

                  Writeln(Lst, 'Hello World ...');

                  Close(Lst);

               end.

      выведет строку 'Hello World ...' на  устройство  печати,  хотя синтаксис  точно  такой  же,  как  если бы она выводилась в файл на диске.

     Устройства, реализованные    в   операционной   системе   DOS, используются для одновременного ввода или вывода.

     Таким образом,  устройства  в DOS используются ,  обычно,  для вывода текстовых файлов. В редких случаях для работы с устройствами DOS  может  оказаться  полезным использование также нетипированного файла.  Каждое из устройств DOS описывается в следующем разделе.  В других  реализациях  DOS  может  быть  предусмотрено  использование дополнительных устройств,  поэтому мы не  можем  предусмотреть  все возможные случаи для описываемых в данном руководстве устройств.

[начало] [оглавление]

  

Устройство CON.

      Устройство CON означает консоль, посредством которой выводимая информация  пересылается  на  экран дисплея,  а вводимая информация воспринимается с клавиатуры.  Если  не  было  изменено  направление ввода  или  вывода,  то  стандартные  файлы  Input  и  Output и все файлы, которым присвоено пустое имя,  ссылаются на устройство  CON. Вводимая с   устройства   CON   информация   является   строчно   - ориентированной и  использует   средства   редактирования   строки, которые описаны в руководстве по DOS. Символы считываются из буфера строки, а когда буфер становится пустым, вводится новая строка. При нажатии    клавиши   CTRL-Z   генерируется   символ   конца   файла (end-of-file), после которого функция eof будет возвращать значение True.

[начало] [оглавление]

    

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

      В качестве   возможного    построчного    устройства    печати допускается использование трех устройств печати.  Если присоединено одно устройство печати,  на него обычно ссылаются как на устройство LРT1. Для этого устройства можно также использовать синоним PRN.

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

      Примечание: Стандартный  модуль  Printer  описывает  текстовую файловую переменную  с  именем  Lst  и  устанавливает  ее  связь  с устройством  LРT1.  Чтобы обеспечить вывод какой-либо информации из вашей программы на устройство печати, включите в предложение uses в своей программе модуль Printer,  а для вывода используйте процедуры

Write(Lst, ...).

[начало] [оглавление]

  

Устройства  COM1 и COM2.

      Устройствами коммуникационного      порта     являются     два последовательных  коммуникационных   порта.   Вместо   COM1   можно использовать синоним AUX.

 [начало] [оглавление]

Устройство NUL.

      Нулевое устройство  игнорирует  любую   запись   на   него   и немедленно  генерирует признак конца файла при попытке считывания с этого устройства.  Его следует  использовать,  если  вы  не  хотите создавать  отдельный  файл,  а  в  программе  требуется указать имя входного или выходного файла.

[начало] [оглавление]    

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

      Устройство предназначенное для текстовых  файлов, используется для  реализации  устройств,  не  поддерживаемых DOS,  или для того, чтобы  сделать  доступным  набор  средств,  отличающийся  от  того, который  предусмотрен  для  аналогичного  устройства  DOS.  Хорошим примером  устройства,  предназначенного   для   текстового   файла, является  устройство  CRT,  реализованное  с  помощью  стандартного модуля Crt. Его основной функцией является обеспечение интерфейса с дисплеем  и  клавиатурой,  аналогично устройству CON в DOS.  Однако устройство  CRT  является  более  быстрым  и   поддерживает   такие неоценимые   средства,  как  использование  цветов  и  окон.

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

     Вместо этого  файл связывается с устройством с помощью обычной процедуры  Assign.  Например,  стандартный  модуль  Crt   реализует процедуру   AssignCrt,   которая   связывает   текстовые   файлы  с устройством CRT.

     Кроме устройства   CRT,   в   Turbo   Pascal   для  устройств, предназначенных  для  текстовых  файлов,  Вы  можете  писать   свои собственные  драйверы.  Полностью  этот вопрос освещается в разделе "Драйвер устройства текстового файла" в главе 19 "Ввод и вывод".

[начало] [оглавление]

    

Предопределенные переменные.

      Кроме процедур  и  функций  модуль  System  обеспечивает   ряд предопределенных переменных.

Неинициализированные переменные.

 ───────────────────────────────────────────────────────────────────

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

───────────────────────────────────────────────────────────────────

     Input        Text        стандартный файл ввода

     Output       Text        стандартный файл вывода

     SaveInt00    Pointer     сохранение прерывания $00

     SaveInt02    Pointer     сохранение прерывания $02

     SaveInt1B    Pointer     сохранение прерывания $1B

     SaveInt21    Pointer     сохранение прерывания $21

     SaveInt23    Pointer     сохранение прерывания $23

     SaveInt24    Pointer     сохранение прерывания $24

     SaveInt35    Pointer     сохранение прерывания $35

     SaveInt36    Pointer     сохранение прерывания $36

     SaveInt37    Pointer     сохранение прерывания $37

     SaveInt38    Pointer     сохранение прерывания $38

     SaveInt39    Pointer     сохранение прерывания $39

     SaveInt3A    Pointer     сохранение прерывания $3A

     SaveInt3B    Pointer     сохранение прерывания $3B

     SaveInt3C    Pointer     сохранение прерывания $3C

     SaveInt3D    Pointer     сохранение прерывания $3D

     SaveInt3F    Pointer     сохранение прерывания $3F

     SaveInt3E    Pointer     сохранение прерывания $3E

     SaveInt75    Pointer     сохранение прерывания $75

───────────────────────────────────────────────────────────────────

[начало] [оглавление]

  

Инициализированные переменные.

 ───────────────────────────────────────────────────────────────────

Переменная    Тип     Начальное       Описание

                                      значение

───────────────────────────────────────────────────────────────────

OvrCodeList   Word       0       список оверлейных сегментов кода

 OvrHeapSize   Word       0       начальный размер буфера оверлеев

 OvrDebugPtr   Pointer    nil     вектор отладчика оверлеев

 OvrHeapOrg    Word       0       начало буфера оверлеев

 OvrHeapPrt    Word       0       указатель буфера оверлеев

 OvrHeapEnd    Word       0       конец буфера оверлеев

 OvrLoadList   Word       0       список загруженных оверлеев

 OvrDosHandle  Word       0       обработчик DOS оверлеев

 OvrEmsHandle  Word       0       обработчик EMS оверлеев

 HeapOrg       Pointer    nil     начало  кучи

 HeapPtr       Pointer    nil     указатель  кучи

 HeapEnd       Pointer    nil     конец кучи

 FreeList      Pointer    nil     список свободных блоков кучи

 HeapError     Pointer    nil     функция обработки ошибок кучи

 ExitProc      Pointer    nil     процедура выхода

 ExitCode      Integer    0       выходной код

 ErrorAddr     Pointer    nil     адрес ошибки времени выполнения

 PrefixSeg     Word       0       префикс программного сегмента

 StackLimit    Word       0       указатель на нижнюю границу стека

 InOutRes      Integer    0       буфер результата в/в

 RandSeed      LongInt    0       опорное значение генератора  случайных чисел

 FileMode      Byte       2       режим открытия файла

 Test8087      Byte       0       результат теста 8087

───────────────────────────────────────────────────────────────────

      OvrCodeList, OvrHeapSize, OvrDebugPtr, OvrHeapOrg, OvrHeapPtr, OvrHeapEnd, OvrHeapList,  OvrDosHandle и OvrEmsHandle  используются модулем  Overlay  для  реализации  менеджера оверлеев Turbo Pascal. Буфер оверлеев  размещается  между  сегментом  стека  и   кучей   и OvrHeapOrg  и  OvrHeapEnd  содержат адреса начала и конца сегмента. Размер  буфера  оверлеев   по   умолчанию   соответствует   размеру максимального оверлея  в программе;  если в программе нет оверлеев, то размер оверлейного буфера равен  нулю.  Размер  буфера  оверлеев может  быть  увеличен  через  вызов  процедуры  OvrSetBuf из модуля Overlay, в этом  случае  размер  кучи  соответственно  уменьшается, увеличивая значение HeapOrg.

     HeapOrg, HeapPtr,  HeapEnd,  FreeList,  HeapError используются монитором кучи  для  реализации программ распределения динамической памяти Turbo Pascal.  Монитор кучи  полностью  описан  в  главе  16 "Память".

     Переменные ExitProc,  ExitCode и ErrorAddr реализуют процедуры выхода. Они так же описаны в главе 18 "Вопросы контроля".

     PrefixSeg - это переменная типа слово (Word), содержащая адрес сегмента префикса сегмента программы (PSP),  создаваемый DOS, когда программа выполняется.  Полное описание префикса сегмента программы смотрите в руководстве по операционной системе.

     StackLimit содержит смещение от нижней границы сегмента стека, соответствующее  наименьшему  значению  регистра  SP допустимому до того, пока стек не будет переполнен.  Обычно StackLimit равен нулю, но, если программа откомпилирована с опциями {$N+,E+} эмулятор 8087 будет  устанавливать  его  равным  224  для резервирования рабочего пространства на нижней границе сегмента  стека,  если  8087  нет  в системе.

     InOutRes используется встроенными программами ввода/вывода для запоминания   значения   возвращаемого   при   последующем   вызове стандартной функции IOResult.

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

     FileMode позволяет  Вам  изменить  режим  доступа,  с  которым открываются типированные  и  нетипированные   файлы.   (Стандартной процедурой Reset).  Для  больших  деталей смотри раздел "Переменная FileMode".

     Test8087 хранит  результат теста автообнаружения сопроцессора, который выполняется  при  запуске  программы,  откомпилированной  с {$N+}. Для больших деталей смотри главу 14 "Использование 8087".

     Input и Output - стандартные  файлы  ,  необходимые  в  каждой реализации языка Паскаль. По умолчанию они ссылаются на стандартные входные и выходные файлы в DOS.  Для больших деталей смотри  раздел "Ввод/вывод".

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

     Заметим, что  модуль System содержит обработчик прерывания INT 24 для перехвата критических ошибок.

     В программах   Turbo   Pascal   критические   ошибки   в   DOS обрабатываются как любые другие ошибки ввода/вывода; в состоянии {$ I+} программа   завершается  с  ошибкой  времени  выполнения,  а  в состоянии {$I-} IOResult возвращает ненулевое значение.

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

      programm Restore;

     uses Dos;

     begin

        SetIntVeg ($24, SaveInt 24);

        ........

     end.

      Процедура SwapVectors в  модуле  Dos  переставляет  содержимое переменных  SaveIntXX  с  текущим  содержимым  векторов прерывания. SwapVectors   должна   быть   вызвана   непосредственно   перед   и непосредственно после  вызова  процедуры Exec,  для того чтобы быть уверенным что запускаемый через Exec процесс не использует  какой - либо  обработчик  прерывания,  установленный  в  текущем процессе и наоборот.  Для  большей  информации   смотри   описание   процедуры SwapVectors в Справочном руководстве по библиотеке.  

[начало] [оглавление]


Предыдущая страница     |     Следующая страница


Добавить в избанное Обсудить в форуме Написать автору сайта Версия для печати

 

Опрос

Конкурсы
Реклама

 

Web дизайн: Бурлаков Михаил    

Web программирование: Бурлаков Михаил

Используются технологии uCoz