                         ТУРБО-ПАСКАЛЬ 5.0
                     РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

                           Оглавление

Часть 1. Использование Турбо-Паскаля  . . . . . . . . . . .
Введение . . . . . . . . . . . . . . . . . . . . . . . . .
Разъяснения для версии 5.0 . . . . . . . . . . . . . . . .
  Компилятор с интегрированной средой программирования
   и компилятор с использованием командной строки  . . . .
  Раздельная компиляция  . . . . . . . . . . . . . . . . .
  Программы и модули . . . . . . . . . . . . . . . . . . .
  Компиляция, создание и построение (Compile, Make и
   Build)  . . . . . . . . . . . . . . . . . . . . . . . .
  Список файла указания  . . . . . . . . . . . . . . . . .
  Расширения файлов  . . . . . . . . . . . . . . . . . . .
О настоящем руководстве  . . . . . . . . . . . . . . . . .
  Использование Турбо-Паскаля  . . . . . . . . . . . . . .
 Приложения  . . . . . . . . . . . . . . . . . . . . . . .

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

Глава 2. Начало работы с Турбо-Паскалем  . . . . . . . . .
Использование интегрированной среды программирования . . .
 Получение справочной информации . . . . . . . . . . . . .
 Окна и меню . . . . . . . . . . . . . . . . . . . . . . .
Загрузка Турбо-Паскаля . . . . . . . . . . . . . . . . . .
Создание первой программы  . . . . . . . . . . . . . . . .
 Анализ вашей первой программы . . . . . . . . . . . . . .
 Запись вашей первой программы на диск . . . . . . . . . .
 Компиляция вашей первой программы . . . . . . . . . . . .
 Выполнение вашей первой программы . . . . . . . . . . . .
 Проверка созданных вами файлов  . . . . . . . . . . . . .
Шаг вперед: ваша вторая программа  . . . . . . . . . . . .
 Отладка вашей программы . . . . . . . . . . . . . . . . .
  Использование окна просмотра (Watch) . . . . . . . . . .
 Исправление вашей второй программы  . . . . . . . . . . .
Высший уровень программирования: ваша  . . . . . . . . . .
 третья программа  . . . . . . . . . . . . . . . . . . . .
 Компилятор Турбо-Паскаля  . . . . . . . . . . . . . . . .
  Итак, что же такое компилятор? . . . . . . . . . . . . .
  Что нужно компилировать? . . . . . . . . . . . . . . . .
  Где находится код? . . . . . . . . . . . . . . . . . . .
 Команды Соmpile, Маkе и Вuild . . . . . . . . . . . . . .
 Ошибки на этапе компиляции  . . . . . . . . . . . . . . .
 Ошибки на этапе выполнения  . . . . . . . . . . . . . . .

Глава 3. Программирование на Турбо-Паскале . . . . . . . .
Семь основных элементов программирования . . . . . . . . .
 Типы данных . . . . . . . . . . . . . . . . . . . . . . .
  Типы целочисленных данных  . . . . . . . . . . . . . . .
  Типы вещественных данных . . . . . . . . . . . . . . . .
  Типы символьных и строковых данных . . . . . . . . . . .
 Определение строки  . . . . . . . . . . . . . . . . . . .
  Тип булевских данных . . . . . . . . . . . . . . . . . .
  Тип данных типа указатель  . . . . . . . . . . . . . . .
 Идентификаторы  . . . . . . . . . . . . . . . . . . . . .
 Операции  . . . . . . . . . . . . . . . . . . . . . . . .
  Операции присваивания  . . . . . . . . . . . . . . . . .
  Унарные и бинарные операции  . . . . . . . . . . . . . .
  Поразрядные операции . . . . . . . . . . . . . . . . . .
  Операции отношений . . . . . . . . . . . . . . . . . . .
  Логические операции  . . . . . . . . . . . . . . . . . .
  Операции над адресами  . . . . . . . . . . . . . . . . .
  Операции над множествами . . . . . . . . . . . . . . . .
  Операции над строками  . . . . . . . . . . . . . . . . .
 Вывод . . . . . . . . . . . . . . . . . . . . . . . . . .
  Процедура Writeln  . . . . . . . . . . . . . . . . . . .
 Ввод  . . . . . . . . . . . . . . . . . . . . . . . . . .
 Условные операторы  . . . . . . . . . . . . . . . . . . .
  Оператор If  . . . . . . . . . . . . . . . . . . . . . .
  Оператор Саsе  . . . . . . . . . . . . . . . . . . . . .
 Циклы . . . . . . . . . . . . . . . . . . . . . . . . . .
  Цикл While . . . . . . . . . . . . . . . . . . . . . . .
  Цикл Repeat..until . . . . . . . . . . . . . . . . . . .
  Цикл FOR . . . . . . . . . . . . . . . . . . . . . . . .
 Процедуры и функции . . . . . . . . . . . . . . . . . . .
  Структура программы  . . . . . . . . . . . . . . . . . .
  Структура процедуры и функции  . . . . . . . . . . . . .
  Пример программы . . . . . . . . . . . . . . . . . . . .
  Комментарии в программе  . . . . . . . . . . . . . . . .

Глава 4. Модули и связанные с ними тонкости  . . . . . . .
Что же такое модуль? . . . . . . . . . . . . . . . . . . .
 Структура модуля  . . . . . . . . . . . . . . . . . . . .
  Секция интерфейса  . . . . . . . . . . . . . . . . . . .
  Секция реализации  . . . . . . . . . . . . . . . . . . .
  Секция инициализации . . . . . . . . . . . . . . . . . .
Как используются модули+ . . . . . . . . . . . . . . . . .
 Ссылки на описания модуля . . . . . . . . . . . . . . . .
ТURВО.ТРL  . . . . . . . . . . . . . . . . . . . . . . . .
Написание собственных модулей  . . . . . . . . . . . . . .
 Компиляция модуля . . . . . . . . . . . . . . . . . . . .
 Пример  . . . . . . . . . . . . . . . . . . . . . . . . .
 Модули и большие программы  . . . . . . . . . . . . . . .
 ТРUМОVЕR  . . . . . . . . . . . . . . . . . . . . . . . .

Глава 5. Разработка программ . . . . . . . . . . . . . . .
Организация программы  . . . . . . . . . . . . . . . . . .
 Инициализация . . . . . . . . . . . . . . . . . . . . . .
Опции Маkе и Вuild . . . . . . . . . . . . . . . . . . . .
 Опция Маkе  . . . . . . . . . . . . . . . . . . . . . . .
 Опция Вuild . . . . . . . . . . . . . . . . . . . . . . .
Автономная утилита Маkе  . . . . . . . . . . . . . . . . .
 Небольшой пример  . . . . . . . . . . . . . . . . . . . .
  Создание файла типа make . . . . . . . . . . . . . . . .
  Использование МАКЕ . . . . . . . . . . . . . . . . . . .
Условная компиляция  . . . . . . . . . . . . . . . . . . .
 Директивы DEFINE и UNDЕF  . . . . . . . . . . . . . . . .
  Определение в командной строке . . . . . . . . . . . . .
  Определение в интегрированной среде программирования . .
 Встроенные символы  . . . . . . . . . . . . . . . . . . .
  Символ VЕR40 . . . . . . . . . . . . . . . . . . . . . .
  Символы МSDОS и СРU86  . . . . . . . . . . . . . . . . .
  Символ СРU87 . . . . . . . . . . . . . . . . . . . . . .
  Символы IFххх, ЕLSЕ и ЕNDIF  . . . . . . . . . . . . . .
 Директивы IFDЕF и IFNDЕF  . . . . . . . . . . . . . . . .
 Директива IFОРТ . . . . . . . . . . . . . . . . . . . . .
Оптимизация программы  . . . . . . . . . . . . . . . . . .

Глава 6. Отладка программ на Турбо-Паскале . . . . . . . .
Ошибки этапа компиляции  . . . . . . . . . . . . . . . . .
Ошибки этапа выполнения  . . . . . . . . . . . . . . . . .
Логические ошибки  . . . . . . . . . . . . . . . . . . . .
Интегрированный отладчик Турбо-Паскаля . . . . . . . . . .
 Пример быстрой отладки  . . . . . . . . . . . . . . . . .
 Зачем нужен отладчик? . . . . . . . . . . . . . . . . . .
  Трассировка  . . . . . . . . . . . . . . . . . . . . . .
  Выполнение до курсора  . . . . . . . . . . . . . . . . .
  Прерывание . . . . . . . . . . . . . . . . . . . . . . .
  Просмотр . . . . . . . . . . . . . . . . . . . . . . . .
  Вычисление . . . . . . . . . . . . . . . . . . . . . . .
  Модификация  . . . . . . . . . . . . . . . . . . . . . .
  Переход  . . . . . . . . . . . . . . . . . . . . . . . .
 Подготовка к использованию отладчика  . . . . . . . . . .
  Информация, выводимая на экран . . . . . . . . . . . . .
 Начало сеанса отладки . . . . . . . . . . . . . . . . . .
 Возобновление сеанса отладки  . . . . . . . . . . . . . .
 Завершение сеанса отладки . . . . . . . . . . . . . . . .
 Выполнение программы по шагам . . . . . . . . . . . . . .
 Использование точек останова  . . . . . . . . . . . . . .
  Использование клавиш Ctrl-Break  . . . . . . . . . . . .
 Просмотр значений . . . . . . . . . . . . . . . . . . . .
  Область действия и квалификация  . . . . . . . . . . . .
  Типы выражений просмотра . . . . . . . . . . . . . . . .
   Спецификаторы формата . . . . . . . . . . . . . . . . .
   Преобразование типов  . . . . . . . . . . . . . . . . .
   Выражения . . . . . . . . . . . . . . . . . . . . . . .
  Редактирование в окне просмотра  . . . . . . . . . . . .
 Вычисление и модификация  . . . . . . . . . . . . . . . .
  Вопросы, касающиеся модификации  . . . . . . . . . . . .
 Перемещение . . . . . . . . . . . . . . . . . . . . . . .
  Стек вызова  . . . . . . . . . . . . . . . . . . . . . .
  Нахождение процедур и функций  . . . . . . . . . . . . .
 Общие вопросы . . . . . . . . . . . . . . . . . . . . . .
  Как писать программы для отладки . . . . . . . . . . . .
  Использование памяти . . . . . . . . . . . . . . . . . .
  Рекурсивные программы  . . . . . . . . . . . . . . . . .
  Когда отладка не выполняется . . . . . . . . . . . . . .
  Общие ошибки . . . . . . . . . . . . . . . . . . . . . .
 Обработка ошибок  . . . . . . . . . . . . . . . . . . . .
  Проверка ошибок ввода-вывода . . . . . . . . . . . . . .
  Проверка диапазона . . . . . . . . . . . . . . . . . . .
  Другие возможности обработки ошибок  . . . . . . . . . .
Турбо-отладчик . . . . . . . . . . . . . . . . . . . . . .

Глава 7. Справочник по меню Турбо-Паскаля  . . . . . . . .
Структура меню . . . . . . . . . . . . . . . . . . . . . .
 Последняя строка  . . . . . . . . . . . . . . . . . . . .
 Окно редактирования . . . . . . . . . . . . . . . . . . .
  Как работать с исходными файлами в окне редактирования .
   Создание нового исходного файла . . . . . . . . . . . .
   Загрузка существующего файла  . . . . . . . . . . . . .
   Сохранение исходного файла  . . . . . . . . . . . . . .
   Запись выходного файла  . . . . . . . . . . . . . . . .
 Окно просмотра  . . . . . . . . . . . . . . . . . . . . .
 Интегрированный отладчик  . . . . . . . . . . . . . . . .
 Экран отладчика Турбо-Паскаля . . . . . . . . . . . . . .
Меню File (Файл) . . . . . . . . . . . . . . . . . . . . .
   Lоаd (Загрузить) - F3 . . . . . . . . . . . . . . . . .
   Рick (Указать) - Alt-F3 . . . . . . . . . . . . . . . .
   New (Новый) . . . . . . . . . . . . . . . . . . . . . .
   Save (Сохранить) - F2 . . . . . . . . . . . . . . . . .
   Write to (Записать на)  . . . . . . . . . . . . . . . .
   Directory (Каталог) . . . . . . . . . . . . . . . . . .
   Сhange dir (Изменить каталог) . . . . . . . . . . . . .
   ОS shell (Командный процессор ДОС)  . . . . . . . . . .
   Quit (Закончить) - Alt-X. . . . . . . . . . . . . . . .
Команда Еdit   . . . . . . . . . . . . . . . . . . . . . .
Меню Run (Выполнение)  . . . . . . . . . . . . . . . . . .
 Команда Run - Ctrl-F9 . . . . . . . . . . . . . . . . . .
 Сброс программы - Ctrl-F2 . . . . . . . . . . . . . . . .
 Выполнение до курсора - F4  . . . . . . . . . . . . . . .
 Трассировка - F7  . . . . . . . . . . . . . . . . . . . .
 Выполнение по шагам - F8  . . . . . . . . . . . . . . . .
 Экран пользователя - Alt-F5 . . . . . . . . . . . . . . .
Меню Соmpile (Компилировать) . . . . . . . . . . . . . . .
   Соmpile (Компилировать) - Alt-F9  . . . . . . . . . . .
   Маke (Создать) - F9 . . . . . . . . . . . . . . . . . .
   Вuild (Построить) . . . . . . . . . . . . . . . . . . .
   Destination (Назначение)  . . . . . . . . . . . . . . .
   Find error (Найти ошибку) . . . . . . . . . . . . . . .
   Рrimary file (Основной файл)  . . . . . . . . . . . . .
   Get info (Получить информацию)  . . . . . . . . . . . .
Меню Оptions (Опции) . . . . . . . . . . . . . . . . . . .
   Соmpiler (Компилятор) . . . . . . . . . . . . . . . . .
    Range-Checking (Проверка диапазона)  . . . . . . . . .
    Stack-Checking (Проверка стека)  . . . . . . . . . . .
    I/O Checking (Проверка ввода-вывода) . . . . . . . . .
    Force Far Calls (Использование дальних типов вызовов).
    Align Data (Выравнивание данных) . . . . . . . . . . .
    Var-String Checking (Проверка строк-пременных) . . . .
    Boolean Evaluation (Вычисление булевских выражений)  .
    Numeric Processing (Численные операции)  . . . . . . .
    Emulation (Эмуляция) . . . . . . . . . . . . . . . . .
    Debug Information (Информация для отладки) . . . . . .
    Local Symbols (Информация о локальных символах)  . . .
    Conditional Defines (Условные определения) . . . . . .
    Memory Sizes (Размеры памяти)  . . . . . . . . . . . .
   Linker (Компоновщик)  . . . . . . . . . . . . . . . . .
    Map File (Файл МАР)  . . . . . . . . . . . . . . . . .
    Link Buffer (Буфер компоновки) . . . . . . . . . . . .
   Еnvironment (Среда программирования)  . . . . . . . . .
    Config Auto Save (Автоматическое сохранение файла
     конфигурации) . . . . . . . . . . . . . . . . . . . .
    Edit Auto Save (Автоматическое сохранение редактируе-
     мого файла) . . . . . . . . . . . . . . . . . . . . .
    Backup Files (Создание резервных копий файлой) . . . .
    Tab Size (Размер табуляции)  . . . . . . . . . . . . .
    Zoom Windows (Переключение окон) . . . . . . . . . . .
    Screen Size (Размер экрана)  . . . . . . . . . . . . .
   Directories (Каталоги)  . . . . . . . . . . . . . . . .
    Turbo Directory (Каталог Турбо)  . . . . . . . . . . .
    EXE & TPU Directory (Каталог выполняемых файлов и
     файлов .TPU)  . . . . . . . . . . . . . . . . . . . .
    Include Directories (Каталоги выполняемых файлов)  . .
    Unit Directories (Каталоги модулей)  . . . . . . . . .
    Object Directories (Каталоги объектных файлов) . . . .
    Pick File Name (Список файла указания) . . . . . . . .
    Current Pick File (Текущий файл указания)  . . . . . .
   Раrameters (Параметры)  . . . . . . . . . . . . . . . .
   Load Options (Загрузить опции)  . . . . . . . . . . . .
   Save Options (Сохранить опции)  . . . . . . . . . . . .
 Меню Debug (Отладка)  . . . . . . . . . . . . . . . . . .
   Evaluate (Вычислить) - Ctrl-F4  . . . . . . . . . . . .
   Call Stack (Стек вызова) - Ctrl-F3  . . . . . . . . . .
   Find Procedure (Найти процедуру)  . . . . . . . . . . .
   Integrated Debugging (Отладка в интегрированной среде).
   Stand-Alone Debugging (Автономная отладка)  . . . . . .
   Display Swapping (Переключение экрана)  . . . . . . . .
   Refresh Display (Обновить экран)  . . . . . . . . . . .
 Меню Break/Watch (Прерывание/Просмотр)  . . . . . . . . .
   Add Watch (Добавить выражение просмотра) - Ctrl-F7  . .
   Delete Watch (Удалить из окна просмотра)  . . . . . . .
   Edit Watch (Редактирование в окне просмотра)  . . . . .
   Remove All Watches (Очистить окно просмотра)  . . . . .
   Toggle BreackPoint (Переключение точек останова) -
    Ctrl-F8  . . . . . . . . . . . . . . . . . . . . . . .
   Clear All Breackpoints (Отменить все точки останова)  .
   View Next Breackpoint (Просмотр следующей точки остано-
    ва)  . . . . . . . . . . . . . . . . . . . . . . . . .
 Список указания и файл указания . . . . . . . . . . . . .
  Список указания - Alt-F3 . . . . . . . . . . . . . . . .
  Файл указания  . . . . . . . . . . . . . . . . . . . . .
  Загрузка файла указания  . . . . . . . . . . . . . . . .
  Сохранение файлов указания . . . . . . . . . . . . . . .
  Файлы конфигурации и файл указания . . . . . . . . . . .

Глава 8. Справочник по командным строкам . . . . . . . . .
Использование компилятора  . . . . . . . . . . . . . . . .
Параметры компилятора  . . . . . . . . . . . . . . . . . .
 Команда директивы компилятора (/$)  . . . . . . . . . . .
 Условные определения (параметр /D)  . . . . . . . . . . .
 Параметры режима компилятора  . . . . . . . . . . . . . .
  Параметр Маkе (/М) . . . . . . . . . . . . . . . . . . .
  Параметр Вuild Аll (/В)  . . . . . . . . . . . . . . . .
  Параметр Find Еrror (/F) . . . . . . . . . . . . . . . .
  Параметр Link Buffer (/L)  . . . . . . . . . . . . . . .
  Параметр Quit (/Q) . . . . . . . . . . . . . . . . . . .
 Параметры каталогов . . . . . . . . . . . . . . . . . . .
  Параметр каталога ТURBO (/T) . . . . . . . . . . . . . .
  Параметр каталога файлов EXE и TPU (/E)  . . . . . . . .
  Параметр каталогов включаемых файлов (/I)  . . . . . . .
  Параметр каталогов включаемых файлов (/I)  . . . . . . .
  Параметр каталогов файлов модулей (/U) . . . . . . . . .
  Параметр каталогов объектныъх файлов (/O)  . . . . . . .
 Параметры отладки . . . . . . . . . . . . . . . . . . . .
  Параметр MAP File (/G) . . . . . . . . . . . . . . . . .
  Параметр Stand-Alone Debugging (Автономная отладка)
   (/V)  . . . . . . . . . . . . . . . . . . . . . . . . .
 Файл ТРС.СFG  . . . . . . . . . . . . . . . . . . . . . .

Часть 2. Приложения
Приложение А. Различия между версиями 3.0, 4.0 и 5.0 . . .
Отличие версии 4.0 Турбо-Паскаля от версии 5.0 . . . . . .
Отличие версии 3.0 Турбо-Паскаля от версии 5.0 . . . . . .
 Изменения в программировании  . . . . . . . . . . . . . .
  Описания в программах  . . . . . . . . . . . . . . . . .
  Директивы компилятора  . . . . . . . . . . . . . . . . .
  Ввод и вывод . . . . . . . . . . . . . . . . . . . . . .
  Типы данных  . . . . . . . . . . . . . . . . . . . . . .
  Порядок вычисления выражений . . . . . . . . . . . . . .
  Предописанные идентификаторы . . . . . . . . . . . . . .
  Другие дополнения и улучшения  . . . . . . . . . . . . .
  Использование языка ассемблера . . . . . . . . . . . . .
 Преобразование из версии 3.0 Турбо-Паскаля  . . . . . . .
  Использование утилиты UPGRADE  . . . . . . . . . . . . .
   /3 Активизация модуля Тurbо3  . . . . . . . . . . . . .
   /J Создание файла регистрации . . . . . . . . . . . . .
   /N Отмена комментариев в исходном файле . . . . . . . .
   /О [d:][маршрут] Назначение места расположения выходных
    данных . . . . . . . . . . . . . . . . . . . . . . . .
   /U Разбиение на модули  . . . . . . . . . . . . . . . .
  Что UPGRADE может обнаружить . . . . . . . . . . . . . .
  Что UPGRADE не может обнаружить  . . . . . . . . . . . .
Приложение В. Использование редактора  . . . . . . . . . .
Быстрый вход в редактор и быстрый выход из него  . . . . .
Строка статуса окна редактирования . . . . . . . . . . . .
Команды редактора  . . . . . . . . . . . . . . . . . . . .
 Основные команды перемещения  . . . . . . . . . . . . . .
 Расширенные команды перемещения . . . . . . . . . . . . .
 Команды вставки и удаления  . . . . . . . . . . . . . . .
 Команды работы с блоками  . . . . . . . . . . . . . . . .
 Остальные команды редактирования  . . . . . . . . . . . .
Отличие редактора Турбо-Паскаля от Word Star . . . . . . .
Приложение С. Служебные программы Турбо-Паскаля  . . . . .
Использование программы работы с модулями TPUMOVER . . . .
 Обзор файлов модулей  . . . . . . . . . . . . . . . . . .
 Использование TPUMOVER  . . . . . . . . . . . . . . . . .
  Команды утилиты TPUMOVER . . . . . . . . . . . . . . . .
  Включение модулей в TURBO.TPL  . . . . . . . . . . . . .
  Удаление модулей из TURBO.TPL  . . . . . . . . . . . . .
  Перемещение модулей между файлами .TPL . . . . . . . . .
  Сокращения, используемые в командной строке  . . . . . .
Автономная утилита МАКЕ . . . . . . . . . . . . . . . . . .
 Создание файлов типа Маkе  . . . . . . . . . . . . . . . .
  Компоненты файла типа Маkе  . . . . . . . . . . . . . . .
   Комментарии  . . . . . . . . . . . . . . . . . . . . . .
   Явные правила  . . . . . . . . . . . . . . . . . . . . .
   Неявные правила  . . . . . . . . . . . . . . . . . . . .
   Списки команд  . . . . . . . . . . . . . . . . . . . . .
   Макроопределения . . . . . . . . . . . . . . . . . . . .
   Директивы  . . . . . . . . . . . . . . . . . . . . . . .
Использование МАКЕ  . . . . . . . . . . . . . . . . . . . .
 Синтаксис командной строки . . . . . . . . . . . . . . . .
 Замечание об останове МАКЕ . . . . . . . . . . . . . . . .
 Файл ВUILTINS.МАК  . . . . . . . . . . . . . . . . . . . .
 Как МАКЕ осуществляет поиск файлов . . . . . . . . . . . .
 Параметры командной строки МАКЕ  . . . . . . . . . . . . .
Сообщения об ошибках в МАКЕ . . . . . . . . . . . . . . . .
 Фатальные ошибки . . . . . . . . . . . . . . . . . . . . .
 Ошибки . . . . . . . . . . . . . . . . . . . . . . . . . .
Утилита ТОUСН . . . . . . . . . . . . . . . . . . . . . . .
Утилита GREP  . . . . . . . . . . . . . . . . . . . . . . .
 Переключатели GREP . . . . . . . . . . . . . . . . . . . .
 Как осуществлять поиск . . . . . . . . . . . . . . . . . .
 Примеры использования GREP . . . . . . . . . . . . . . . .
Утилита BINOBJ  . . . . . . . . . . . . . . . . . . . . . .
Приложение D. Настройка Турбо-Паскаля . . . . . . . . . . .
Что такое ТINST?  . . . . . . . . . . . . . . . . . . . . .
Запуск ТINST  . . . . . . . . . . . . . . . . . . . . . . .
Меню Compile  . . . . . . . . . . . . . . . . . . . . . . .
Меню Options (Опции)  . . . . . . . . . . . . . . . . . . .
 Меню Compiler (Компилятор) . . . . . . . . . . . . . . . .
  Range-Checking (Проверка диапазона) . . . . . . . . . . .
  Stack-Checking (Проверка стека) . . . . . . . . . . . . .
  I/O Checking (Проверка ввода-вывода)  . . . . . . . . . .
  Force Far Calls (Использование дальних типов вызовов) . .
  Overlay Allowed (Разрешить использование оверлеев)  . . .
  Align Data (Выравнивание данных)  . . . . . . . . . . . .
  Var-String Checking (Проверка строк-пременных)  . . . . .
  Boolean Evaluation (Вычисление булевских выражений) . . .
  Numeric Processing (Численные операции) . . . . . . . . .
  Emulation (Эмуляция)  . . . . . . . . . . . . . . . . . .
  Debug Information (Информация для отладки)  . . . . . . .
  Local Symbols (Информация о локальных символах) . . . . .
  Conditional Defines (Условные определения)  . . . . . . .
  Memory Sizes (Размеры памяти) . . . . . . . . . . . . . .
  Меню Linker (Компоновщик) . . . . . . . . . . . . . . . .
   Map File (Файл МАР)  . . . . . . . . . . . . . . . . . .
   Link Buffer (Буфер компоновки) . . . . . . . . . . . . .
  Еnvironment (Среда программирования)  . . . . . . . . . .
   Config Auto Save (Автоматическое сохранение файла
    конфигурации) . . . . . . . . . . . . . . . . . . . . .
   Edit Auto Save (Автоматическое сохранение редактируе-
    мого файла) . . . . . . . . . . . . . . . . . . . . . .
   Backup Files (Создание резервных копий файлой) . . . . .
   Zoom Windows (Переключение окон) . . . . . . . . . . . .
   Full Graphics Save (Полное сохранение графического выво-
    да) . . . . . . . . . . . . . . . . . . . . . . . . . .
   Screen Size (Размер экрана)  . . . . . . . . . . . . . .
  Параметры редактора . . . . . . . . . . . . . . . . . . .
   Режим вставки  . . . . . . . . . . . . . . . . . . . . .
   Режим автоматического отступа  . . . . . . . . . . . . .
   Использование табуляции  . . . . . . . . . . . . . . . .
   Оптимальное заполнение . . . . . . . . . . . . . . . . .
   Возврат на одну позицию без автоматического отступа  . .
   Размер табуляции . . . . . . . . . . . . . . . . . . . .
   Размер буферов редактора . . . . . . . . . . . . . . . .
   Использование расширенной памяти . . . . . . . . . . . .
  Меню Directories (Каталоги) . . . . . . . . . . . . . . .
    Turbo Directory (Каталог Турбо) . . . . . . . . . . . .
    EXE & TPU Directory (Каталог выполняемых файлов и
     файлов TPU)  . . . . . . . . . . . . . . . . . . . . .
    Include Directories (Каталоги включаемых файлов)  . . .
    Unit Directories (Каталоги модулей) . . . . . . . . . .
    Object Directories (Каталоги объектных файлов)  . . . .
    Pick File Name (Список файла указания)  . . . . . . . .
    Установка параметров  . . . . . . . . . . . . . . . . .
   Меню Debug (Отладка) . . . . . . . . . . . . . . . . . .
    Integrated Debuging (Отладка в интегрированной среде) .
    Atand-Alone Debugging (Автономная отладка)  . . . . . .
    Display Swapping (Переключение экрана)  . . . . . . . .
 Команды редактора  . . . . . . . . . . . . . . . . . . . .
  Допустимые нажатия клавиш . . . . . . . . . . . . . . . .
   Режим, аналогичный режиму WordStar . . . . . . . . . . .
   Игнорирование регистра . . . . . . . . . . . . . . . . .
   Правила действий . . . . . . . . . . . . . . . . . . . .
  Нажатия клавиш в редакторе Турбо-Паскаля  . . . . . . . .
 Режим изображения  . . . . . . . . . . . . . . . . . . . .
 Значения, принятые по умолчанию  . . . . . . . . . . . . .
 Цвет . . . . . . . . . . . . . . . . . . . . . . . . . . .
 Черно-белый режим  . . . . . . . . . . . . . . . . . . . .
 Монохроматический режим  . . . . . . . . . . . . . . . . .
 Использование дисплея на жидких кристаллах . . . . . . . .
Цветовая настройка  . . . . . . . . . . . . . . . . . . . .
Установка размеров окон . . . . . . . . . . . . . . . . . .
Завершение работы программы . . . . . . . . . . . . . . . .
Приложение Е. Начинающему изучать ДОС  . . . . . . . . . . .
Что такое ДОС?  . . . . . . . . . . . . . . . . . . . . . .
Как загрузить программу . . . . . . . . . . . . . . . . . .
Каталоги  . . . . . . . . . . . . . . . . . . . . . . . . .
Подкаталоги . . . . . . . . . . . . . . . . . . . . . . . .
Где я нахожусь? Подсказка $p $s . . . . . . . . . . . . . .
Файл АUTOEXEC.BAT . . . . . . . . . . . . . . . . . . . . .
Изменение каталога  . . . . . . . . . . . . . . . . . . . .
Приложение F. Словарь терминов  . . . . . . . . . . . . . .
. 












                         ТУРБО-ПАСКАЛЬ 5.0
                      СПРАВОЧНОЕ РУКОВОДСТВО

                           Оглавление

Часть 1. Справочное руководство программиста . . . . . . .

Введение . . . . . . . . . . . . . . . . . . . . . . . . .
 Что содержится на дистрибутивных дисках . . . . . . . . .
 Установка Турбо-Паскаля в вашей системе . . . . . . . . .
О данном руководстве . . . . . . . . . . . . . . . . . . .

Глава 1. Символы и константы . . . . . . . . . . . . . . .
Специальные символы и зарезервированные слова  . . . . . .
Идентификаторы . . . . . . . . . . . . . . . . . . . . . .
Метки  . . . . . . . . . . . . . . . . . . . . . . . . . .
Числа  . . . . . . . . . . . . . . . . . . . . . . . . . .
Строки символов  . . . . . . . . . . . . . . . . . . . . .
Описания констант  . . . . . . . . . . . . . . . . . . . .
Комментарии  . . . . . . . . . . . . . . . . . . . . . . .
Строки программы . . . . . . . . . . . . . . . . . . . . .

Глава 2. Блоки, локальность и область действия . . . . . .
Синтаксис  . . . . . . . . . . . . . . . . . . . . . . . .
Правила для области действия . . . . . . . . . . . . . . .
Область действия интерфейса и стандартных
 идентификаторов . . . . . . . . . . . . . . . . . . . . .

Глава 3. Типы  . . . . . . . . . . . . . . . . . . . . . .
Простые типы . . . . . . . . . . . . . . . . . . . . . . .
 Порядковые типы . . . . . . . . . . . . . . . . . . . . .
  Целочисленный тип  . . . . . . . . . . . . . . . . . . .
  Булевский тип  . . . . . . . . . . . . . . . . . . . . .
  Символьный тип (сhar)  . . . . . . . . . . . . . . . . .
  Перичислимый тип . . . . . . . . . . . . . . . . . . . .
  Тип поддиапазона (отрезок типа)  . . . . . . . . . . . .
 Вещественный тип  . . . . . . . . . . . . . . . . . . . .
  Программная поддержка чисел с плавающей запятой  . . . .
  Аппаратная поддержка чисел с плавающей запятой (сопроце-
   ссор 8087)  . . . . . . . . . . . . . . . . . . . . . .
Строковые типы . . . . . . . . . . . . . . . . . . . . . .
Структурные типы . . . . . . . . . . . . . . . . . . . . .
 Типы массив . . . . . . . . . . . . . . . . . . . . . . .
 Типы запись . . . . . . . . . . . . . . . . . . . . . . .
 Множественные типы  . . . . . . . . . . . . . . . . . . .
 Файловые типы . . . . . . . . . . . . . . . . . . . . . .
Типы указатель . . . . . . . . . . . . . . . . . . . . . .
Тождественные и совместимые типы . . . . . . . . . . . . .
 Тождественность типов . . . . . . . . . . . . . . . . . .
 Совместимость типов . . . . . . . . . . . . . . . . . . .
 Совместимость в операциях присваивания  . . . . . . . . .
Раздел описания типов  . . . . . . . . . . . . . . . . . .

Глава 4. Переменные  . . . . . . . . . . . . . . . . . . .
Описания переменных  . . . . . . . . . . . . . . . . . . .
 Сегмент данных  . . . . . . . . . . . . . . . . . . . . .
 Сегмент стека . . . . . . . . . . . . . . . . . . . . . .
 Абсолютные переменные . . . . . . . . . . . . . . . . . .
Ссылки на переменные . . . . . . . . . . . . . . . . . . .
Квалификаторы  . . . . . . . . . . . . . . . . . . . . . .
 Массивы, строки и индексы . . . . . . . . . . . . . . . .
 Записи и обозначения полей  . . . . . . . . . . . . . . .
 Переменные указателей и динамические переменные . . . . .
 Приведение типов переменных . . . . . . . . . . . . . . .

Глава 5. Типизованные константы  . . . . . . . . . . . . .
Константы простого типа  . . . . . . . . . . . . . . . . .
Константы строкового типа  . . . . . . . . . . . . . . . .
Константы структурного типа  . . . . . . . . . . . . . . .
 Константы типа массив . . . . . . . . . . . . . . . . . .
 Константы типа запись . . . . . . . . . . . . . . . . . .
 Константы множественного типа . . . . . . . . . . . . . .
Константы типа указатель . . . . . . . . . . . . . . . . .

ГЛАВА 6. Выражения . . . . . . . . . . . . . . . . . . . .
Синтаксис выражений  . . . . . . . . . . . . . . . . . . .
Операции . . . . . . . . . . . . . . . . . . . . . . . . .
 Арифметические операции . . . . . . . . . . . . . . . . .
 Логические операции . . . . . . . . . . . . . . . . . . .
 Булевские операции  . . . . . . . . . . . . . . . . . . .
 Операции со строками  . . . . . . . . . . . . . . . . . .
 Операции над множествами  . . . . . . . . . . . . . . . .
 Операции отношения  . . . . . . . . . . . . . . . . . . .
  Сравнение простых типов  . . . . . . . . . . . . . . . .
  Сравнение строк  . . . . . . . . . . . . . . . . . . . .
  Сравнение упакованных строк  . . . . . . . . . . . . . .
  Сравнение указателей . . . . . . . . . . . . . . . . . .
  Сравнение множеств . . . . . . . . . . . . . . . . . . .
  Проверка на принадлежность к множеству . . . . . . . . .
 Операция @  . . . . . . . . . . . . . . . . . . . . . . .
  Использование операции @ для переменной  . . . . . . . .
  Использование операции @ для значения параметра  . . . .
  Использование операции @ для
   переменной, являющейся параметром . . . . . . . . . . .
  Использование операции @ для процедуры или функции . . .
Вызовы функции . . . . . . . . . . . . . . . . . . . . . .
Описатели множества  . . . . . . . . . . . . . . . . . . .
Приведение типа значений . . . . . . . . . . . . . . . . .

ГЛАВА 7. Операторы . . . . . . . . . . . . . . . . . . . .
Простые операторы  . . . . . . . . . . . . . . . . . . . .
 Оператор присваивания   . . . . . . . . . . . . . . . . .
 Операторы процедур  . . . . . . . . . . . . . . . . . . .
 Операторы перехода  . . . . . . . . . . . . . . . . . . .
Структурные операторы  . . . . . . . . . . . . . . . . . .
 Составные операторы . . . . . . . . . . . . . . . . . . .
 Условные операторы  . . . . . . . . . . . . . . . . . . .
  Оператор if  . . . . . . . . . . . . . . . . . . . . . .
  Оператор варианта  . . . . . . . . . . . . . . . . . . .
 Оператор цикла  . . . . . . . . . . . . . . . . . . . . .
  Оператор цикла с пост-условием . . . . . . . . . . . . .
  Операторы цикла с пред-условием  . . . . . . . . . . . .
  Операторы цикла с параметром . . . . . . . . . . . . . .
 Операторы присоединения (with)  . . . . . . . . . . . . .

ГЛАВА 8. Процедуры и функции . . . . . . . . . . . . . . .
Описания процедур  . . . . . . . . . . . . . . . . . . . .
 Опережающее описание  . . . . . . . . . . . . . . . . . .
 Внешние описания  . . . . . . . . . . . . . . . . . . . .
 Внутренние описания . . . . . . . . . . . . . . . . . . .
Описания функций . . . . . . . . . . . . . . . . . . . . .
Параметры  . . . . . . . . . . . . . . . . . . . . . . . .
 Параметры-значения  . . . . . . . . . . . . . . . . . . .
 Параметры-переменные  . . . . . . . . . . . . . . . . . .
 Нетипизованные параметры-переменные . . . . . . . . . . .

ГЛАВА 9. Программы и модули  . . . . . . . . . . . . . . .
Синтаксис программ . . . . . . . . . . . . . . . . . . . .
 Заголовок программы . . . . . . . . . . . . . . . . . . .
 Предложение использования (uses)  . . . . . . . . . . . .
Синтаксис модулей  . . . . . . . . . . . . . . . . . . . .
 Заголовок модуля  . . . . . . . . . . . . . . . . . . . .
 Интерфейсная секция . . . . . . . . . . . . . . . . . . .
 Секция реализации . . . . . . . . . . . . . . . . . . . .
 Секция инициализации  . . . . . . . . . . . . . . . . . .
 Косвенные ссылки на модули  . . . . . . . . . . . . . . .
 Циклические ссылки на модули  . . . . . . . . . . . . . .
  Совместное использование описаний  . . . . . . . . . . .

ГЛАВА 10. Ввод и вывод . . . . . . . . . . . . . . . . . .
Введение в ввод-вывод  . . . . . . . . . . . . . . . . . .
Стандартные процедуры и функции,
 использующиеся для всех файлов  . . . . . . . . . . . . .
Стандартные процедуры и
 функции для текстовых файлов  . . . . . . . . . . . . . .
Стандартные процедуры и
 функции для нетипизованных файлов . . . . . . . . . . . .
Устройства в Турбо-Паскале . . . . . . . . . . . . . . . .
 Устройства ДОС  . . . . . . . . . . . . . . . . . . . . .
  Устройство СОN . . . . . . . . . . . . . . . . . . . . .
  Устройства LРТ1, LРТ2 и LРТ3 . . . . . . . . . . . . . .
  Устройтства СОМ1 и СОМ2  . . . . . . . . . . . . . . . .
  Устройство NUL . . . . . . . . . . . . . . . . . . . . .
 Устройства, предназначенные для текстовых файлов  . . . .

ГЛАВА 11. Стандартные процедуры и функции  . . . . . . . .
Процедуры выхода и останова  . . . . . . . . . . . . . . .
Процедуры и функции динамического распределения памяти . .
Функции передачи . . . . . . . . . . . . . . . . . . . . .
Процедуры и функции перечислимого типа . . . . . . . . . .
Строковые процедуры и функции  . . . . . . . . . . . . . .
Функции для работы с указателями и адресами  . . . . . . .
Смешанные процедуры и функции  . . . . . . . . . . . . . .

ГЛАВА 12. Стандартные модули . . . . . . . . . . . . . . .
Зависимость стандартных модулей  . . . . . . . . . . . . .
Модуль Рrinter . . . . . . . . . . . . . . . . . . . . . .
Модуль Dоs . . . . . . . . . . . . . . . . . . . . . . . .
 Константы, типы и переменные  . . . . . . . . . . . . . .
  Константы флагов . . . . . . . . . . . . . . . . . . . .
  Константы режима файла . . . . . . . . . . . . . . . . .
   Типы записей файла  . . . . . . . . . . . . . . . . . .
  Константы атрибута файла . . . . . . . . . . . . . . . .
  Регистровый тип  . . . . . . . . . . . . . . . . . . . .
  Тип даты и времени . . . . . . . . . . . . . . . . . . .
  Тип SearchRec  . . . . . . . . . . . . . . . . . . . . .
  Переменная DosError  . . . . . . . . . . . . . . . . . .
 Процедуры обслуживания прерываний . . . . . . . . . . . .
 Функции, проверяющие состояние  диска . . . . . . . . . .
 Процедуры обработки файлов  . . . . . . . . . . . . . . .
 Процедуры и функции управления процессами . . . . . . . .
Модуль Сrt . . . . . . . . . . . . . . . . . . . . . . . .
 Входные и выходные файлы  . . . . . . . . . . . . . . . .
 Окна  . . . . . . . . . . . . . . . . . . . . . . . . . .
  Специальные символы  . . . . . . . . . . . . . . . . . .
  Ввод строк . . . . . . . . . . . . . . . . . . . . . . .
 Константы, типы и переменные  . . . . . . . . . . . . . .
  Константы режима модуля Сrt  . . . . . . . . . . . . . .
  Переменная СhесkВrеак  . . . . . . . . . . . . . . . . .
  Переменная СhесkЕОF  . . . . . . . . . . . . . . . . . .
  Переменная СhесkShow . . . . . . . . . . . . . . . . . .
  Переменная DirесtVidео . . . . . . . . . . . . . . . . .
  Переменная ТехтАttr  . . . . . . . . . . . . . . . . . .
  Переменные WindMin и WindМах . . . . . . . . . . . . . .
 Процедуры и функции . . . . . . . . . . . . . . . . . . .
Модуль Grарh . . . . . . . . . . . . . . . . . . . . . . .
 Драйверы  . . . . . . . . . . . . . . . . . . . . . . . .
  Поддержка устройства IBM-8514  . . . . . . . . . . . . .
 Система координат . . . . . . . . . . . . . . . . . . . .
 Текущий указатель . . . . . . . . . . . . . . . . . . . .
 Текст . . . . . . . . . . . . . . . . . . . . . . . . . .
 Графические изображения и их виды . . . . . . . . . . . .
 Области просмотра и двоичные образы . . . . . . . . . . .
 Поддержка страниц и цвета . . . . . . . . . . . . . . . .
 Обработка ошибок  . . . . . . . . . . . . . . . . . . . .
 Начало работы . . . . . . . . . . . . . . . . . . . . . .
  Программы управления динамически
   распределяемой областью, написанные пользователем . . .
  Интерфейсная секция модуля  Graph:
   константы, типы и переменные  . . . . . . . . . . . . .
  Процедуры и функции  . . . . . . . . . . . . . . . . . .
Модуль Тurbo3  . . . . . . . . . . . . . . . . . . . . . .
 Интерфейсная секция . . . . . . . . . . . . . . . . . . .
 Кbd . . . . . . . . . . . . . . . . . . . . . . . . . . .
 Переменная Сbrеак . . . . . . . . . . . . . . . . . . . .
Модуль Graph3  . . . . . . . . . . . . . . . . . . . . . .
 Процедуры и функции модуля Graph3 . . . . . . . . . . . .

ГЛАВА 13. Оверлеи  . . . . . . . . . . . . . . . . . . . .
Модуль Overlay . . . . . . . . . . . . . . . . . . . . . .
 Константы и переменные  . . . . . . . . . . . . . . . . .
  Переменная OvrResult . . . . . . . . . . . . . . . . . .
  Коды завершения  . . . . . . . . . . . . . . . . . . . .
 Процедуры и функции . . . . . . . . . . . . . . . . . . .
  OvrInit  . . . . . . . . . . . . . . . . . . . . . . . .
  OvrInitEMS . . . . . . . . . . . . . . . . . . . . . . .
  OvrSetBuf  . . . . . . . . . . . . . . . . . . . . . . .
  OvrGetBuf  . . . . . . . . . . . . . . . . . . . . . . .
 Создание оверлейных программ  . . . . . . . . . . . . . .
  Генерация оверлейного кода . . . . . . . . . . . . . . .
  Необходимость использования дальнего типа вызовов  . . .
  Инициализация подсистемы управления оверлеями  . . . . .
  Разделы инициализации в оверлейных модулях . . . . . . .
  Что не должно использоваться в качестве оверлеев . . . .
  Отладка оверлеев . . . . . . . . . . . . . . . . . . . .
  Внешние программы в оверлеях . . . . . . . . . . . . . .

ГЛАВА 14. Использование процессора 8087  . . . . . . . . .
Типы данных процессора 8087  . . . . . . . . . . . . . . .
Арифметические операции с повыщенной точностью . . . . . .
Сравнение вещественных чисел . . . . . . . . . . . . . . .
Стек вычислений процессора 8087  . . . . . . . . . . . . .
Запись действительных чисел при
 использовании сопроцессора 8087 . . . . . . . . . . . . .
Модули, в которых используется сопроцессор 8087  . . . . .

ГЛАВА 15. Внутренняя организация Турбо-Паскаля . . . . . .
Программа динамического распределения памяти . . . . . . .
 Методы освобождения областей
  динамически распределяемой памяти  . . . . . . . . . . .
 Список свободных блоков . . . . . . . . . . . . . . . . .
 Функция ошибки динамически
  распределяемой области памяти  . . . . . . . . . . . . .
Форматы внутреннего представления данных . . . . . . . . .
 Целый тип . . . . . . . . . . . . . . . . . . . . . . . .
 Символьный тип  . . . . . . . . . . . . . . . . . . . . .
 Булевский тип . . . . . . . . . . . . . . . . . . . . . .
 Перечислимый тип  . . . . . . . . . . . . . . . . . . . .
 Типы с плавающей запятой  . . . . . . . . . . . . . . . .
  Вещественный тип . . . . . . . . . . . . . . . . . . . .
  Тип числа с одинарной точностью  . . . . . . . . . . . .
  Тип числа с двойной точностью  . . . . . . . . . . . . .
  Тип числа с повышенной точностью . . . . . . . . . . . .
  Сложный тип  . . . . . . . . . . . . . . . . . . . . . .
 Значения типа указатель . . . . . . . . . . . . . . . . .
 Значения строкового типа  . . . . . . . . . . . . . . . .
 Значения множественного типа  . . . . . . . . . . . . . .
 Значения типа массив  . . . . . . . . . . . . . . . . . .
 Значения типа запись  . . . . . . . . . . . . . . . . . .
 Значения типа файл  . . . . . . . . . . . . . . . . . . .
 Процедурные типы  . . . . . . . . . . . . . . . . . . . .
Соглашения по вызовам  . . . . . . . . . . . . . . . . . .
 Параметры-переменные  . . . . . . . . . . . . . . . . . .
 Параметры-значения  . . . . . . . . . . . . . . . . . . .
 Результаты функций  . . . . . . . . . . . . . . . . . . .
 Ближние и дальние типы вызовов  . . . . . . . . . . . . .
 Стандартные операторы входа и выхода  . . . . . . . . . .
 Соглашения по сохранению регистров  . . . . . . . . . . .
Связь с языком ассемблера  . . . . . . . . . . . . . . . .
 Примеры программ на языке ассемблера  . . . . . . . . . .
 Внутренний машинный код . . . . . . . . . . . . . . . . .
 Операторы Inline  . . . . . . . . . . . . . . . . . . . .
 Внутренние директивы (директивы inline) . . . . . . . . .
Память с прямым доступом и доступ к портам . . . . . . . .
 Массивы Мем, МемW и МемL  . . . . . . . . . . . . . . . .
 Массивы Роrt и РоrtW  . . . . . . . . . . . . . . . . . .
Обработка прерываний . . . . . . . . . . . . . . . . . . .
 Разработка процедур обработки прерываний  . . . . . . . .
Драйверы устройств для текстовых файлов  . . . . . . . . .
 Функция Ореn  . . . . . . . . . . . . . . . . . . . . . .
 Функция InOut . . . . . . . . . . . . . . . . . . . . . .
 Функция Flush . . . . . . . . . . . . . . . . . . . . . .
 Функция Сlоsе . . . . . . . . . . . . . . . . . . . . . .
 Примеры драйверов устройств для текстовых файлов  . . . .
Процедуры выхода . . . . . . . . . . . . . . . . . . . . .
Автоматическая оптимизация . . . . . . . . . . . . . . . .
  Свертывание констант . . . . . . . . . . . . . . . . . .
  Слияние констант . . . . . . . . . . . . . . . . . . . .
  Вычисление по короткой схеме . . . . . . . . . . . . . .
  Порядок вычисления . . . . . . . . . . . . . . . . . . .
  Проверка на допустимость границ  . . . . . . . . . . . .
  Использование двига вместо умножения . . . . . . . . . .
  Удаление неиспользуемого кода  . . . . . . . . . . . . .
  Эффективная компоновка  . . . . . .. . . . . . . . . . .

ГЛАВА 16. Процедуры и функции Турбо-Паскаля  . . . . . . .
Функция Аbs  . . . . . . . . . . . . . . . . . . . . . . .
Функция Аddr . . . . . . . . . . . . . . . . . . . . . . .
Процедура Арреnd . . . . . . . . . . . . . . . . . . . . .
Процедура Аrс  . . . . . . . . . . . . . . . . . . . . . .
Функция АrсТаn . . . . . . . . . . . . . . . . . . . . . .
Процедура Аssign . . . . . . . . . . . . . . . . . . . . .
Функция АssignCrt. . . . . . . . . . . . . . . . . . . . .
Процедура Ваr  . . . . . . . . . . . . . . . . . . . . . .
Процедура Ваr3D. . . . . . . . . . . . . . . . . . . . . .
Процедура ВlоскRеаd  . . . . . . . . . . . . . . . . . . .
Процедура ВlоскWritе . . . . . . . . . . . . . . . . . . .
Процедура СhDir  . . . . . . . . . . . . . . . . . . . . .
Процедура Сhr  . . . . . . . . . . . . . . . . . . . . . .
Процедура Сirсlе . . . . . . . . . . . . . . . . . . . . .
Процедура СlеаrDeviсе  . . . . . . . . . . . . . . . . . .
Процедура ClearViewPort  . . . . . . . . . . . . . . . . .
Процедура Сlose  . . . . . . . . . . . . . . . . . . . . .
Процедура СloseGraph . . . . . . . . . . . . . . . . . . .
Процедура СlrЕоl . . . . . . . . . . . . . . . . . . . . .
Процедура СlrScr . . . . . . . . . . . . . . . . . . . . .
Функция Соnсаt . . . . . . . . . . . . . . . . . . . . . .
Функция Сору . . . . . . . . . . . . . . . . . . . . . . .
Функция Соs  . . . . . . . . . . . . . . . . . . . . . . .
Функция СSeg . . . . . . . . . . . . . . . . . . . . . . .
Процедура Dес  . . . . . . . . . . . . . . . . . . . . . .
Процедура Delay  . . . . . . . . . . . . . . . . . . . . .
Процедура Delete . . . . . . . . . . . . . . . . . . . . .
Процедура DelLine  . . . . . . . . . . . . . . . . . . . .
Процедура DetectGraph  . . . . . . . . . . . . . . . . . .
Процедура DiskFree . . . . . . . . . . . . . . . . . . . .
Процедура DiskSize . . . . . . . . . . . . . . . . . . . .
Процедура Dispose  . . . . . . . . . . . . . . . . . . . .
Функция DosExitCode  . . . . . . . . . . . . . . . . . . .
Функция DosVersion . . . . . . . . . . . . . . . . . . . .
Процедура DrawPoly . . . . . . . . . . . . . . . . . . . .
Функция Dseg . . . . . . . . . . . . . . . . . . . . . . .
Процедура Еllipse  . . . . . . . . . . . . . . . . . . . .
Функция EnvCount . . . . . . . . . . . . . . . . . . . . .
Функция EnvStr . . . . . . . . . . . . . . . . . . . . . .
Функция Еоf (типизованные и нетипизованные файлы)  . . . .
Функция Еоf (текстовые файлы)  . . . . . . . . . . . . . .
Функция Еоln . . . . . . . . . . . . . . . . . . . . . . .
Процедура Еrase  . . . . . . . . . . . . . . . . . . . . .
Процедура Ехес . . . . . . . . . . . . . . . . . . . . . .
Процедура Ехit . . . . . . . . . . . . . . . . . . . . . .
Функция Ехр  . . . . . . . . . . . . . . . . . . . . . . .
Функция FExpand  . . . . . . . . . . . . . . . . . . . . .
Функция FilePos  . . . . . . . . . . . . . . . . . . . . .
Функция FileSize . . . . . . . . . . . . . . . . . . . . .
Процедура FillChar . . . . . . . . . . . . . . . . . . . .
Процедура FillEllipse  . . . . . . . . . . . . . . . . . .
Процедура FillPoly . . . . . . . . . . . . . . . . . . . .
Процедура FindFirst  . . . . . . . . . . . . . . . . . . .
Процедура FindNext . . . . . . . . . . . . . . . . . . . .
Процедура FloodFill  . . . . . . . . . . . . . . . . . . .
Процедура Flush  . . . . . . . . . . . . . . . . . . . . .
Функция Frас . . . . . . . . . . . . . . . . . . . . . . .
Процедура FrееМем  . . . . . . . . . . . . . . . . . . . .
Функция FSearch  . . . . . . . . . . . . . . . . . . . . .
Функция FSplit . . . . . . . . . . . . . . . . . . . . . .
Процедура GetArcCoords . . . . . . . . . . . . . . . . . .
Процедура GetAspectRatio . . . . . . . . . . . . . . . . .
Функция GetBkColor . . . . . . . . . . . . . . . . . . . .
Процедура GetCBreak  . . . . . . . . . . . . . . . . . . .
Функция GetColor . . . . . . . . . . . . . . . . . . . . .
Процедура GetDate  . . . . . . . . . . . . . . . . . . . .
Функция GetDefaultPalette  . . . . . . . . . . . . . . . .
Процедура GetDir . . . . . . . . . . . . . . . . . . . . .
Функция GetDriverName  . . . . . . . . . . . . . . . . . .
Функция GetEnv . . . . . . . . . . . . . . . . . . . . . .
Процедура GetFAttr . . . . . . . . . . . . . . . . . . . .
Процедура GetFillPattern . . . . . . . . . . . . . . . . .
Процедура GetFillSettings  . . . . . . . . . . . . . . . .
Процедура GetFTime . . . . . . . . . . . . . . . . . . . .
Функция GetGraphMode . . . . . . . . . . . . . . . . . . .
Процедура GetImage . . . . . . . . . . . . . . . . . . . .
Процедура GetIntVec  . . . . . . . . . . . . . . . . . . .
Процедура GetLineSettings  . . . . . . . . . . . . . . . .
Процедура GetМахХ  . . . . . . . . . . . . . . . . . . . .
Процедура GetМахY  . . . . . . . . . . . . . . . . . . . .
Процедура GetМем . . . . . . . . . . . . . . . . . . . . .
Процедура GetModeName  . . . . . . . . . . . . . . . . . .
Процедура GetModeRange . . . . . . . . . . . . . . . . . .
Процедура GetPalette . . . . . . . . . . . . . . . . . . .
Функция  GetPalletteSize . . . . . . . . . . . . . . . . .
Процедура GetPixel . . . . . . . . . . . . . . . . . . . .
Процедура GetTextSettings  . . . . . . . . . . . . . . . .
Процедура GetTime  . . . . . . . . . . . . . . . . . . . .
Процедура GetVerify  . . . . . . . . . . . . . . . . . . .
Процедура GetViewSettings  . . . . . . . . . . . . . . . .
Процедура GetX . . . . . . . . . . . . . . . . . . . . . .
Процедура GetY . . . . . . . . . . . . . . . . . . . . . .
Процедура GotoXY . . . . . . . . . . . . . . . . . . . . .
Процедура GraphDefaults  . . . . . . . . . . . . . . . . .
Функция GraphErrorMsg  . . . . . . . . . . . . . . . . . .
Функция GraphResult  . . . . . . . . . . . . . . . . . . .
Процедура Наlt . . . . . . . . . . . . . . . . . . . . . .
Функция Нi . . . . . . . . . . . . . . . . . . . . . . . .
Процедура HighVideo  . . . . . . . . . . . . . . . . . . .
Процедура ImageSize  . . . . . . . . . . . . . . . . . . .
Процедура Inc  . . . . . . . . . . . . . . . . . . . . . .
Процедура InitGraph  . . . . . . . . . . . . . . . . . . .
Процедура Insert . . . . . . . . . . . . . . . . . . . . .
Процедура InsLine  . . . . . . . . . . . . . . . . . . . .
Функция InstallUserDriver  . . . . . . . . . . . . . . . .
Функция InstallUserFont  . . . . . . . . . . . . . . . . .
Функция Int  . . . . . . . . . . . . . . . . . . . . . . .
Процедура Intr . . . . . . . . . . . . . . . . . . . . . .
Функция IОRеsult   . . . . . . . . . . . . . . . . . . . .
Процедура Кееp . . . . . . . . . . . . . . . . . . . . . .
Процедура КеуРressed . . . . . . . . . . . . . . . . . . .
Функция Length . . . . . . . . . . . . . . . . . . . . . .
Процедура Line . . . . . . . . . . . . . . . . . . . . . .
Процедура LineRel  . . . . . . . . . . . . . . . . . . . .
Процедура LineТо . . . . . . . . . . . . . . . . . . . . .
Функция Ln . . . . . . . . . . . . . . . . . . . . . . . .
Функция  Lо  . . . . . . . . . . . . . . . . . . . . . . .
Процедура LowVideo . . . . . . . . . . . . . . . . . . . .
Процедура Маrk . . . . . . . . . . . . . . . . . . . . . .
Функция МахАvail . . . . . . . . . . . . . . . . . . . . .
Функция МемАvail . . . . . . . . . . . . . . . . . . . . .
Процедура МкDir  . . . . . . . . . . . . . . . . . . . . .
Процедура Моvе . . . . . . . . . . . . . . . . . . . . . .
Процедура МоvеRеl  . . . . . . . . . . . . . . . . . . . .
Процедура МоvеТо . . . . . . . . . . . . . . . . . . . . .
Функция MsDos  . . . . . . . . . . . . . . . . . . . . . .
Процедура New  . . . . . . . . . . . . . . . . . . . . . .
Процедура NormVideo  . . . . . . . . . . . . . . . . . . .
Процедура NoSound  . . . . . . . . . . . . . . . . . . . .
Функция Odd  . . . . . . . . . . . . . . . . . . . . . . .
Функция Ofs  . . . . . . . . . . . . . . . . . . . . . . .
Функция Ord  . . . . . . . . . . . . . . . . . . . . . . .
Процедура OutText  . . . . . . . . . . . . . . . . . . . .
Процедура OutTextXY  . . . . . . . . . . . . . . . . . . .
Процедура OvrClearBuf  . . . . . . . . . . . . . . . . . .
Функция OvrGetBuf  . . . . . . . . . . . . . . . . . . . .
Процедура OvrInit  . . . . . . . . . . . . . . . . . . . .
Процедура OvrInitEMS . . . . . . . . . . . . . . . . . . .
Процедура OvrSetBuf  . . . . . . . . . . . . . . . . . . .
Процедура РасkТiме . . . . . . . . . . . . . . . . . . . .
Функция РаramCount   . . . . . . . . . . . . . . . . . . .
Функция РаramStr . . . . . . . . . . . . . . . . . . . . .
Функия Рi  . . . . . . . . . . . . . . . . . . . . . . . .
Процедура PieSlice . . . . . . . . . . . . . . . . . . . .
Функция Роs  . . . . . . . . . . . . . . . . . . . . . . .
Функция Pred . . . . . . . . . . . . . . . . . . . . . . .
Функция Ptr  . . . . . . . . . . . . . . . . . . . . . . .
Процедура PutImage . . . . . . . . . . . . . . . . . . . .
Процедура PutPixel . . . . . . . . . . . . . . . . . . . .
Функция Random . . . . . . . . . . . . . . . . . . . . . .
Процедура Randomize  . . . . . . . . . . . . . . . . . . .
Процедура Read (типизованные файлы)  . . . . . . . . . . .
Процедура Read (текстовые файлы) . . . . . . . . . . . . .
Функция ReadKey  . . . . . . . . . . . . . . . . . . . . .
Процедура Readln . . . . . . . . . . . . . . . . . . . . .
Процедура Rectangle  . . . . . . . . . . . . . . . . . . .
Функция RegisterBGIdriver  . . . . . . . . . . . . . . . .
Функция RegisterBGIfont  . . . . . . . . . . . . . . . . .
Процедура Release  . . . . . . . . . . . . . . . . . . . .
Процедура Rename . . . . . . . . . . . . . . . . . . . . .
Процедура Reset  . . . . . . . . . . . . . . . . . . . . .
Процедура RestoreCrt . . . . . . . . . . . . . . . . . . .
Процедура RestoreCrtMode . . . . . . . . . . . . . . . . .
Процедура Rewrite  . . . . . . . . . . . . . . . . . . . .
Процедура RmDir  . . . . . . . . . . . . . . . . . . . . .
Функция Round  . . . . . . . . . . . . . . . . . . . . . .
Процедура RunError . . . . . . . . . . . . . . . . . . . .
Процедура Sector . . . . . . . . . . . . . . . . . . . . .
Процедура Seek . . . . . . . . . . . . . . . . . . . . . .
Функция SeekEof  . . . . . . . . . . . . . . . . . . . . .
Функция SeekEoln . . . . . . . . . . . . . . . . . . . . .
Функция Seg  . . . . . . . . . . . . . . . . . . . . . . .
Процедура SetActivePage  . . . . . . . . . . . . . . . . .
Процедура SetAllPalette  . . . . . . . . . . . . . . . . .
Процедура SetBkColor . . . . . . . . . . . . . . . . . . .
Процедура SetCBreak  . . . . . . . . . . . . . . . . . . .
Процедура SetColor . . . . . . . . . . . . . . . . . . . .
Процедура SetDate  . . . . . . . . . . . . . . . . . . . .
Процедура SetFAttr . . . . . . . . . . . . . . . . . . . .
Процедура SetFillPattern . . . . . . . . . . . . . . . . .
Процедура SetFillStyle . . . . . . . . . . . . . . . . . .
Процедура SerGraphBufSize  . . . . . . . . . . . . . . . .
Процедура SetFTime . . . . . . . . . . . . . . . . . . . .
Процедура SetGraphMode . . . . . . . . . . . . . . . . . .
Процедура SetIntVec  . . . . . . . . . . . . . . . . . . .
Процедура SetLineStyle . . . . . . . . . . . . . . . . . .
Процедура SetPalette . . . . . . . . . . . . . . . . . . .
Процедура SetRGBPalette  . . . . . . . . . . . . . . . . .
Процедура SetTextBuf . . . . . . . . . . . . . . . . . . .
Процедура SetTextJustify . . . . . . . . . . . . . . . . .
Процедура SetTextStyle . . . . . . . . . . . . . . . . . .
Процедура SetTime  . . . . . . . . . . . . . . . . . . . .
Процедура SetUserCharSize  . . . . . . . . . . . . . . . .
Процедура SetVerify  . . . . . . . . . . . . . . . . . . .
Процедура SetViewPort  . . . . . . . . . . . . . . . . . .
Процедура SetVisualPage  . . . . . . . . . . . . . . . . .
Процедура SetWriteMode . . . . . . . . . . . . . . . . . .
Функция Sin  . . . . . . . . . . . . . . . . . . . . . . .
Процедура SizeOf . . . . . . . . . . . . . . . . . . . . .
Процедура Sound  . . . . . . . . . . . . . . . . . . . . .
Функция SPtr . . . . . . . . . . . . . . . . . . . . . . .
Функция Sqr  . . . . . . . . . . . . . . . . . . . . . . .
Функция Sqrt . . . . . . . . . . . . . . . . . . . . . . .
Функция SSeg . . . . . . . . . . . . . . . . . . . . . . .
Процедура Str  . . . . . . . . . . . . . . . . . . . . . .
Функция Succ . . . . . . . . . . . . . . . . . . . . . . .
Функция Swap . . . . . . . . . . . . . . . . . . . . . . .
Процедура SwapVectors  . . . . . . . . . . . . . . . . . .
Процедура TextBackground . . . . . . . . . . . . . . . . .
Процедура TextColor  . . . . . . . . . . . . . . . . . . .
Процедура TextHeight . . . . . . . . . . . . . . . . . . .
Процедура TextMode . . . . . . . . . . . . . . . . . . . .
Процедура TextWidth  . . . . . . . . . . . . . . . . . . .
Функция Trunc  . . . . . . . . . . . . . . . . . . . . . .
Процедура Тruncate . . . . . . . . . . . . . . . . . . . .
Процедура UnРасkТiме . . . . . . . . . . . . . . . . . . .
Процедура UpCase . . . . . . . . . . . . . . . . . . . . .
Процедура Val  . . . . . . . . . . . . . . . . . . . . . .
Процедура WhereX . . . . . . . . . . . . . . . . . . . . .
Процедура WhereY . . . . . . . . . . . . . . . . . . . . .
Процедура Window . . . . . . . . . . . . . . . . . . . . .
Процедура Write (типизованные файлы) . . . . . . . . . . .
Процедура Write (текстовые файлы)  . . . . . . . . . . . .
Процедура Writeln  . . . . . . . . . . . . . . . . . . . .

Часть 2.  Приложения . . . . . . . . . . . . . . . . . . .

Приложение А. Сравнение Турбо-Паскаля версии 5.0
 с Паскалем стандарта ANSI . . . . . . . . . . . . . . . .
Несоответствия требованиям стандарта Паскаля
 ANSI . . . . . . . . . . . . . . . . . . . . . . . . . . .
Расширения Паскаля стандарта ANSI . . . . . . . . . . . . .
Средства, зависящие от реализации . . . . . . . . . . . . .
Обработка ошибок  . . . . . . . . . . . . . . . . . . . . .

Приложение В. Директивы компилятора . . . . . . . . . . . .
Директивы переключения  . . . . . . . . . . . . . . . . . .
  Вычисление булевских выражений  . . . . . . . . . . . . .
  Информация для отладки  . . . . . . . . . . . . . . . . .
  Эмуляция  . . . . . . . . . . . . . . . . . . . . . . . .
  Использование дальних вызовов . . . . . . . . . . . . . .
  Проверка ввода/вывода . . . . . . . . . . . . . . . . . .
  Информация о локальных символах . . . . . . . . . . . . .
  Числовая обработка  . . . . . . . . . . . . . . . . . . .
  Генерация оверлейного кода  . . . . . . . . . . . . . . .
  Проверка диапазона  . . . . . . . . . . . . . . . . . . .
  Проверка переполнения стека . . . . . . . . . . . . . . .
  Проверка строк-переменных . . . . . . . . . . . . . . . .
Директивы параметров  . . . . . . . . . . . . . . . . . . .
  Файл типа include . . . . . . . . . . . . . . . . . . . .
  Компоновка объектного файла . . . . . . . . . . . . . . .
  Размеры распределения памяти  . . . . . . . . . . . . . .
  Имя файла модуля  . . . . . . . . . . . . . . . . . . . .
Условная компиляция . . . . . . . . . . . . . . . . . . . .
 Условные символы   . . . . . . . . . . . . . . . . . . . .
  Директива DEFINE  . . . . . . . . . . . . . . . . . . . .
  Директива UNDEF . . . . . . . . . . . . . . . . . . . . .
  Директива IFDEF . . . . . . . . . . . . . . . . . . . . .
  Директива IFNDEF  . . . . . . . . . . . . . . . . . . . .
  Директива IFOPT . . . . . . . . . . . . . . . . . . . . .
  Директива ЕLSE  . . . . . . . . . . . . . . . . . . . . .
  Директива ЕNDIF . . . . . . . . . . . . . . . . . . . . .

Приложение С. Справочные материалы  . . . . . . . . . . . .
  Коды АSCII  . . . . . . . . . . . . . . . . . . . . . . .
  Расширенные коды клавиш . . . . . . . . . . . . . . . . .
  Коды опроса клавиатуры  . . . . . . . . . . . . . . . . .

Приложение D. Сообщения об ошибках и коды
 ошибок . . . . . . . . . . . . . . . . . . . . . . . . . .
Сообщения об ошибках, выдаваемые компилятором . . . . . . .
Ошибки на этапе выполнения  . . . . . . . . . . . . . . . .
 Ошибки ввода/вывода  . . . . . . . . . . . . . . . . . . .
 Критические ошибки . . . . . . . . . . . . . . . . . . . .
 Фатальные ошибки . . . . . . . . . . . . . . . . . . . . .
. 



                          Введение

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

          Что содержится на дистрибутивных дисках

     На двух дистрибутивных дисках содержатся две  различные
версии компилятора Паскаля: компилятор с интегрированной ин-
терактивной средой и автономный компилятор, для работы с ко-
торым используется командный режим (командная строка).
     У вас нет необходимости переписывать  на  рабочий  диск
все  файлы.  Возможно  вам понадобится только файл TURBO.TPL
(резидентная библиотека), а также  TURBO.EXE  (компилятор  с
интегрированной  интерактивной средой) или TPC.EXE (компиля-
тор, работающий в командном режиме), в зависимости от  того,
какой  компилятор  вы  предпочитаете  использовать. Приведем
краткий перечень основных файлов на дисках и описание их со-
держимого:

     README - Если вы в ответ на подсказку системы  наберете
README,  то увидите на экране последние примечания и коррек-
тировки (при наличии устройства печати этот  документ  можно
распечатать).  Просмотрев данный материал, сохраните его для
последующего использования в качестве справочного.

     TURBO.EXE - Этот файл представляет собой  интегрирован-
ную  интерактивную  (управляемую с помощью меню) версию Тур-
бо-Паскаля. Если вы хотите для разработки программ  (их  ре-
дактирования, компиляции, отладки и выполнения) использовать
интерактивную среду, то скопируйте этот файл. Более  подроб-
ная информация содержится в Главе 7 "Руководства пользовате-
ля" ("Все об интегрированной среде").

     TURBO.TPL - В этом файле содержатся модули  (библиотеки
программ),  поставляемые с Турбо-Паскалем, включая необходи-
мые вам модули System, Crt, Dos, Overlay  и  Printer.  Более
подробно эти модули описаны в Главе 12 "Стандартные модули".

     TURBO.HLP - Этот файл содержит вспомогательный справоч-
ный  текст,  используемый  интегрированной средой. Его нужно
поместить в тот же каталог, что и файл TURBO.EXE. См. раздел
"Получение  справочной  информации"  в  Главе 2 "Руководства
пользователя", где это средство описано более подробно.

     TPC.EXE - Данный файл представляет собой версию  компи-
лятора  Турбо-Паскаля, для работы с которым используется ко-
мандная строка. Если вы работаете со своим редактором и час-
то используете командные файлы, то возможно вы захотите ско-
пировать этот файл. Информация по работе с этим компилятором
содержится в Главе 8 ("О работе с командной строкой") "Руко-
водства пользователя".

     GRAPH.TPU - Этот файл содержит модуль Graph  (графичес-
кий интерфейс фирмы Борланд). См. раздел "Модуль Graph" Гла-
вы 12 данного руководства, где дается более подробная инфор-
мация.

     Файлы *.BGI - Драйверы (фирмы Борланд) графических уст-
ройств.

     Файлы *.CHR - Графические  (в  формате  фирмы  Борланд)
"штриховые" шрифты.

     GRAPH3.TPU  и TURBO3.TPU - Модули, предназначенные  для
совместимости  с  версией 3.0 Турбо-Паскаля. Если эти модули
вам необходимы, поместите их в  каталог,  который  указан  в
маршруте поиска ваших модулей (см. Приложение D "Руководства
пользователя", которое называется "Настройка Турбо-Паскаля",
где  подробно описывается, как можно это сделать, или Прило-
жение А данного руководства).

     Файлы *.DOC - Данные файлы включают в себя все листинги
интерфейсных секций стандартных модулей.

     Файлы *.PAS - Включают в себя исходные  файлы  средства
MicroCalc  и другие примеры программ. Если вы хотите порабо-
тать с этими файлами или просмотреть их, скопируйте их.

     TPUMOVER.EXE - Это средство  позволяет  вам  перемещать
модули  между  файлами  .TPL. Вы можете использовать его для
того,  чтобы  добавлять  модули  (написанные  вами)  в  файл
TURBO.TPL или удалять модули из этого файла. Если вы собира-
етесь изменять содержимое файла TURBO.TPL,  скопируйте  его.
Информация  о  средстве  TPUMOVER  содержится в "Руководстве
пользователя" в разделе "Утилиты Турбо-Паскаля".

     TINST.EXE - Это средство позволяет  вам  настроить  от-
дельные параметры  TURBO.EXE  (см. Приложение D "Руководства
пользователя", которое  называется  "Настройка  Турбо-Паска-
ля").  Если  вы используете TURBO.EXE, скопируйте этот файл.
После того, как вы настроите TURBO.EXE, его можно удалить.

     UPGRADE.DTA и UPGRADE.EXE - Эта утилита выполняет быст-
рое преобразование исходных файлов версии 3.0 Турбо-Паскаля,
модифицируя их для совместимости с версией 5.0. Если  у  вас
нет программ, которые требуют преобразования, копировать эти
файлы не нужно. Полее подробно об утилите UPGRADE  рассказы-
вается в Приложении А данного руководства.

     MAKE.EXE - Это  средство  представляет  собой  развитую
подсистему управления программами, позволяющую вам автомати-
чески обновлять файлы (с помощью ассемблирования и  компиля-
ции),  которые вы изменяли. Оно работает только с компилято-
ром командного режима TPC  (файл  TPC.EXE).  Более  подробно
утилита  MAKE  описана в Приложении С "Руководства пользова-
теля" ("Утилиты Турбо-Паскаля").

     GREP.COM - Это быстрая и мощная утилита поиска, которая
может  просматривать  текст сразу в нескольких файлах. Более

подробно утилита GREP описана в  Приложении  С  "Руководства
пользователя" ("Утилиты Турбо-Паскаля").

     TOUCH.COM - Эта утилита позволяет изменить дату и время
одного или нескольких файлов на текущую дату и время, сделав
их, таким образом, более  "поздними",  чем  использующий  их
файл.  Обычно это средство используется в сочетании с утили-
той MAKE.EXE.

     BINOBJ.COM - Эту утилиту можно использовать для  преоб-
разования двоичного файла данных в файл .OBJ.

     TPCONFIG.EXE - Эта утилита считывает файл  конфигурации
интегрированной среды программирования и преобразует его для
работы с компилятором TPC (из файла TPC.CFG). Она может ока-
заться полезной, если для настройки параметров вы используе-
те  интегрированную  интерактивную  среду,  а  компилировать
программы хотите с помощью компилятора TPC. Утилита преобра-
зует файл TPC.CFG в файл .TP.

     README.COM - Эта программа позволяет вывести  на  экран
содержимое файла README. После просмотра файла README вы мо-
жете ее удалить.

          Установка Турбо-Паскаля в вашей системе.

     Ваш пакет Турбо-Паскаля включает в себя файлы  и  прог-
раммы, необходимые как для работы в интегрированной интерак-
тивной среде, так и для работы с компилятором,  воспринимаю-
щим командную  строку. Какие именно файлы вам нужно скопиро-
вать зависит от того, какую из версий компилятора вы  хотите
использовать  (см.  Главу 1 "Руководства пользователя",  где
приведена информация по установке Турбо-Паскаля в вашей сис-
теме).

                    Об этом руководстве

     Данная книга разбита на две части: справочник  програм-

миста  и  приложения.  В  первой  части данного руководства,
"Справочнике программиста", содержится информация по следую-
щим средствам языка:

     - Глава 1: Символы и константы;
     - Глава 2: Блоки, локальность и область действия;
     - Глава 3: Типы;
     - Глава 4: Переменные;
     - Глава 5: Типизованные константы;
     - Глава 6: Выражения;
     - Глава 7: Операторы;
     - Глава 8: Процедуры и функции;
     - Глава 9: Программы и модули;
     - Глава 10: Ввод и вывод;
     - Глава 11: Стандартные процедуры и функции;
     - Глава 12: Стандартные модули;
     - Глава 13: Оверлеи (описывается,  что  такое  оверлеи,
как  их  создавать  и как использовать подсистему управления
оверлеями);
     - Глава 14: Использование сопроцессора 8087;
     - Глава 15: Внутренняя организация Турбо-Паскаля;
     - Глава 16: Справочник по Турбо-Паскалю.

     Во второй части в приложениях  обсуждаются  версия  5.0
Турбо-Паскаля и Паскаль ANSI, описываются директивы компиля-
тора, даются справочные материалы (таблица кодов ASCII, рас-
ширенных кодов клавиатуры, кодов опроса клавиатуры), а также
содержится перечень всех сообщений об ошибках  компиляции  и
времени выполнения, генерируемых Турбо-Паскалем.

     - Приложение А: Сравнение версии  5.0  Турбо-Паскаля  с
ANSI-Паскалем;
     - Приложение В: Директивы компилятора;
     - Приложение С: Справочные материалы;
     - Приложение D: Сообщения об ошибках и коды ошибок.



                          ГЛАВА 1

                    Символы и константы

     Символами (лексемами) называются  минимальные  значимые
единицы  текста  в  программе,  написанной на Паскале, и они
представлены такими  категориями  как  специальные  символы,
идентификаторы, метки, числа и строковые константы.
     Программа, написанная на Паскале, состоит из  лексем  и
разделителей;  причем  разделитель представляет собой пробел
или комментарий. Две соседних лексемы, если они представляют
собой зарезервированное слово, идентификатор, метку или чис-
ло, должны быть отделены друг от друга одним  и  несколькими
разделителями.
     Разделители не могут быть частью лексем, за исключением
строковых констант.

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

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

     - Буквы английского алфавита от A до Z и от a до z.
     - Цифры - арабские цифры от 0 до 9.
     - Шестнадцатиричные цифры - арабские цифры от 0  до  9,
буквы от A до F и буквы от a до f.
     - Пробелы - символ пробела (ASCII 32) и все управляющие
символы кода ASCII (ASCII 0-31), включая символ конца строки
или символ возврата (ASCII 13).

буква ----------------------------------
              !       !        !       !
              V       V        V       V
              -       -        -       -
             (A) ... (Z)      (a) ... (z)
              -       -        -       -
              !       !        !       !
              ------------------------------------>

цифра ------------------------------------------------
        !    !    !    !    !    !    !    !    !    !
        V    V    V    V    V    V    V    V    V    V
        -    -    -    -    -    -    -    -    -    -
       (0)  (1)  (2)  (3)  (4)  (5)  (6)  (7)  (8)  (9)
        -    -    -    -    -    -    -    -    -    -
        !    !    !    !    !    !    !    !    !    !
        --------------------------------------------------->

                           ---------
шестнадцатиричная -------->! цифра !---------------
цифра              !       ---------              !
                   --------------------------     !
                     !       !      !       !     !
                     V       V      V       V     !
                     -       -      -       -     !
                    (A) ... (F)    (a) ... (f)    !
                     -       -      -       -     !
                     !       !      !       !     !
                     -------------------------------------->


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

       + - * / = < > [ ] . , ( ) : ; ^ @ { } $ #

     Следующие пары символов также представляют собой специ-
альные символы:

                <= >= := .. (* *) (. .)

     Некоторые специальные символы  являются  также  знаками
операций. Левая квадратная скобка ([) эквивалентна паре сим-
волов, состоящей из левой круглой скобки и точки ((.).  Ана-
логично  правая квадратная скобка (]) эквивалентна паре сим-
волов, состоящей из точки и правой круглой скобки (.)).
     Следующие  слова  являются  зарезервированными  в  Тур-
бо-Паскале:

----------------------------------------------------------
absolute  end             inline     procedure  type
and       external        interface  program    unit
array     file            interrupt  record     until
begin     for             label      repeat     uses
case      forward         mod        set        var
const     function        nil        shl        while
div       goto            not        shr        with
do        if              of         string     xor
downto    implementation  or         then
else      in              packed     to
----------------------------------------------------------

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

                       Идентификаторы

     Идентификаторы выступают в качестве имен констант,  ти-
пов, переменных, процедур, модулей, программ и полей в запи-
сях. Идентификатор может иметь любую  длину,  однако  только
первые 63 символа являются значимыми.
     Идентификатор должен начинаться с буквы и не может  со-
держать пробелов. После первого символа идентификатора можно
использовать буквы, цифры и символы подчеркивания  (значение
ASCII  $5F). Как и в зарезервированных словах, в идентифика-
торах можно использовать как строчные, так и прописные буквы
(компилятор их не различает).
     В настоящем руководстве синтаксис Турбо-Паскаля иллюст-
рируется  диаграммами.  Для  чтения синтаксической диаграммы
следуйте по стрелкам. Часто встречаются альтернативные пути;
путь,  начинающийся слева и заканчивающийся стрелкой справа,
является допустимым. Путь пересекает рамки, содержащие имена
элементов,  используемых для построения этой части синтакси-
са.
     Имена в прямоугольных рамках должны быть заменены  дей-
ствительными  конструкциями. Круглые рамки содержат зарезер-
вированные слова, знаки операций и знаки пунктуации, то есть
действительные термы, используемые в программе.

идентификатор метки
идентификатор константы      -------------------------
идентификатор типа       --->!составной идентификатор!-->
идентификатор переменной     -------------------------
идентификатор процедуры
идентификатор функции

                    -------
идентификатор ----->!буква!--------------------------------->
                    -------   ^   -------                !
                              !---!буква!<---------------!
                              !   -------                !
                              !   -------                !
                              !---!цифра!<---------------!
                              !   -------                !
                              !   --------------------   !
                              !---!знак подчеркивания!<---
                                  --------------------

                                -
знак подчеркивания ----------> (_)------------>
                                -

идентификатор программы       ---------------
идентификатор модуля   ------>!идентификатор!------>
идентификатор поля            ---------------

составной  --------------------------------->!идентификатор!-->
идентификатор!                             ^ ---------------
             ! ----------------------   -  !
             ->!идентификатор модуля!->(.)--
               ----------------------   -

     Идентификатор должен начинаться с буквы и не должен со-
держать  пробелов.  После первого символа допускаются буквы,
цифры и знак подчеркивания (ASCII $5F). Как  и  зарезервиро-
ванные  слова, идентификаторы безразличны к регистру клавиа-
туры.
     Когда имеется несколько мест с указанием одного и  того
же  идентификатора, для задания нужного идентификатора необ-
ходимо уточнить этот идентификатор с помощью  идентификатора
модуля  (модули описываются в Главе 4 "Руководства пользова-
теля" и в Главе 12 данного руководства). Например, для уточ-
нения идентификатора Ident с помощью идентификатора UnitName
следует написать UnitNamt.Ident. Такой комбинированный иден-
тификатор называется составным идентификатором.
     Приведем несколько примеров идентификаторов:

Writeln
Exit
Real2String
System.MemAvail
Dos.Exec
Crt.Windows

                           Метки

     Меткой является последовательность цифр в диапазоне  от
0  до  9999. Начальные нули не являются значащими. Метки ис-
пользуются с операторами GOTO (перехода).

               -------------------------
метка -------->!последовательность цифр!----------->
         !     -------------------------     ^
         !     ---------------               !
         ----->!идентификатор!----------------
               ---------------

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

                           Числа

     Для чисел, представляющих собой константы целого и  ве-
щественного  типа,  используется  обычная десятичная запись.
Целая  константа  в шестнадцатиричном формате  имеет  в  ка-
честве префикса знак доллара ($). Техническое обозначение (Е
или е с экспонентой) в вещественных типах читается  как  "на
десять   в   степени".  Например,  7Е-2  означает  7х10**-2;
12.25Е+6 или 12.25Е6 оба обозначают 12.25х10**+6.  Синтакси-
ческие диаграммы для записи чисел даны ниже.
                             -------------------------
последовательность --------->!шестнадцатиричная цифра!----->
шестнадцатиричных цифр  ^    -------------------------   !
                        !                                !
                        ----------------------------------

                             -------
последовательность---------->!цифра!---------------------->
цифр                  ^      -------          !
                      !                       !
                      -------------------------

                         -------------------------
целое без знака -------->!последовательность цифр!--------->
                  !      -------------------------       ^
                  !    -     --------------------------  !
                  ----($)--->!последовательность      !---
                       -     !шестнадцатиричных цифр  !
                             --------------------------
                  -
знак ----------->(+)--------------->
           !      -        ^
           !      -        !
           ----->(-)--------
                  -

вещественное без
знака  ------------          ------------
   --->!последова-!          !последова-!
       !тельность !--->(.)-->!тельность !------------------->
       !цифр      ! !        !цифр      ! !                ^
       ------------ !        ------------ !                !
                    !                     V  ------------  !
                    ------------------------>!масштабный!---
                                             !множитель !
                                             ------------

                                      --------------------
масштабный---->(E)------------------->!последовательность!-->
множитель  !        ^  !           ^  !цифр              !
           !        !  !   ------  !  --------------------
           --->(e)---  --->!знак!---
                           ------

                     -----------------
число без знака ---->!целое без знака!--------------------->
                 !   -----------------          ^
                 !                              !
                 !   ------------------------   !
                 --->!вещественное без знака!----
                     ------------------------

                                 -----------------
число со знаком ---------------->!число без знака!-------->
                  !          ^   -----------------
                  !  ------  !
                  -->!знак!---
                     ------

     Числа с десятичными точками или экспонентами  представ-
ляют  собой константы вещественного типа. Остальные десятич-
ные числа обозначают константы целого типа. Они должны  при-
нимать значения в диапазоне от -2147483648 до 2147483647.
     Шестнадцатиричные числа обозначают  константы  целочис-
ленного типа; они должны находиться в диапазоне от $00000000
до $FFFFFFFF. Окончательный знак значения определяется шест-
надцатиричной записью.

                      Строки символов

     Строка символов представляет собой  последовательность,
содержащую нуль и более символов из расширенного набора сим-
волов кода ASCII (Приложение С), записанную в  одной  строке
программы  и  заключенную  в  одиночные кавычки (апострофы).
Строка символов, ничего не содержащая между апострофами, на-
зывается  нулевой  строкой. Два последовательных апострофа в
строке символов обозначают один символ -  апостроф.  Атрибут
длины  строки символов выражается действительным количеством
символов между апострофами.
     В качестве расширения стандартного  Паскаля  Турбо-Пас-
каль  разрешает вставлять в строку символов управляющие сим-
волы. Символ #с целой константой без знака в диапазоне от  0
до  255  обозначает  соответствующий этому значению символ в
коде ASCII. Между символом #  и целой константой  не  должно
быть никаких разделителей. Аналогично, если несколько управ-
ляющих символов входит строку символов,  то  между  ними  не
должно быть разделителей.
                      -                      -
строка символов -----(')--------------------(')---->
                      -                      -
                      ^                      !
                      !  -----------------   !
                      ---!строчный символ!<---
                         -----------------

                      -------------------------------
строчный символ ----->!любой символ кроме (') или CR!----->
                  !   -------------------------------   ^
                  !            -              -         !
                  ----------->(')----------->(')---------
                               -              -
     Строка символов нулевой длины (нулевая строка) допусти-
ма  только  для  строковых  типов. Строка символов с длиной,
равной 1, допустима для любого символьного и строкового  ти-
па.  Строка символов длиной n, где n больше или равен 2, до-
пустима для любого строкового типа и упакованных массивов из
n символов.
     Приведем несколько примеров строк символов:

 'TURBO'  'You'll see'        ''''  ';'  ' '
 #13#10   'Line 1'#13'Line2'    #7#7'Make up!'#7#7

                     Описания констант

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

             ---------------    -    -----------    -
описание  -->!идентификатор!-->(=)-->!константа!-->(;)--->
константы    ---------------    -    -----------    -

                            -------------------------
константа ----------------->!идентификатор константы!----->
            ! !  ------  ^  -------------------------   ^
            ! -->!знак!--!                              !
            !    ------     -----------------           !
            !-------------->!число со знаком!-----------!
            !               -----------------           !
            !               -----------------           !
            --------------->!строка символов!------------
                            -----------------
                              -------------
константа ------------------->! выражение !---------->
                              -------------

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

                    Выражения-константы

     Являясь расширением стандартного Паскаля, Турбо-Паскаль
позволяет  использовать выражения-константы. Выражение-конс-
танта представляет собой выражение, которое может вычислять-
ся компилятором без необходимости выполнения программы. При-
ведем примеры выражений-констант:

 100
 'A'
 256 - 1
 (2.5 + 1) / (2.5 - 1)
 'Turbo' + '' + 'Pascal'
 Chr(32)
 Ord('Z') - Ord('A') + 1

     Простейший случай выражения-константы представляет  со-
бой  простая  константа, например 100 или 'A'. В стандартном
Паскале допускается использовать только простые константы. В
Турбо-Паскале разрешено использование выражений-констант.
     Поскольку компилятор должен иметь возможность полностью
вычислить выражение-константу во время компиляции, в качест-
ве выражений-констант не допускается использовать  следующие
конструкции:

     - ссылки на переменные и типизованные константы;
     - вызовы функций (кроме тех, которые отмечены далее);
     - оператор получения адреса @.

     За исключением этих ограничений для  выражений-констант
соблюдаются  те же синтаксические правила, что и для обычных
выражений (описанных в Главе 6 "Выражения").

     В выражениях-константах допускается использовать следу-
ющие стандартные фукнции:

     Abs, Chr, Hi, Length, Lo, Odd, Ord, Pred,  Ptr,  Round,
SizeOf, Succ, Swap, Trunc.

     Приведем  некоторые   примеры   использования   выраже-
ний-констант в описаниях констант:

  const
    Min = 0;
    Max = 100;
    Center = (Max - Min) div 2;
    Beta = Chr(255);
    NumChars = Ord('Z') - Ord('A') + 1;
    Message = 'Out of memory';
    ErrStr = 'Error:' + Message + '.';
    ErrPos = 80 - Length(Error) div 2;
    ErrAttr = Blink + Red * 16 + White;
    Ln10 = 2.302585092994095684;
    Ln10R = 1 / Ln10;
    Numeric = ['0'..'9'];
    Alpha = ['A'..'Z','a'..'z'];
    AlphaNum = Alpha + Numeric;

                        Комментарии

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

{любой текст, не содержащий правую фигурную скобку}
{любой текст, не содержащий звездочку/правую круглую скобку}

     Комментарий, содержащий знак доллара  ($)  сразу  после
открывающей  скобки { или (*, является директивой компилято-
ра. За символом $ следует мнемоника команды компилятора. Об-
щее описание директив компилятора дано в Приложении В.

                      Строки программы

     В Турбо-Паскале  строки  программы  имеют  максимальную
длину в 126 символов.



                          ГЛАВА 2

            Блоки, локальность и область действия

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

                         Синтаксис

     В общем виде любой блок имеет следующий формат:

             -----------------       -------------------
блок ------->!раздел описания!------>!раздел операторов!-->
             -----------------       -------------------

раздел --------------------------------------------------->
описания ^ !   -----------------------               ^  !
         ! !-->!раздел описания меток!---------------!  !
         ! !   -----------------------               !  !
         ! !   --------------------------            !  !
         ! !-->!раздел описания констант!------------!  !
         ! !   --------------------------            !  !
         ! !   -----------------------               !  !
         ! !-->!раздел описания типов!---------------!  !
         ! !   -----------------------               !  !
         ! !   ----------------------------          !  !
         ! !-->!раздел описания переменных!----------!  !
         ! !   ----------------------------          !  !
         ! !   ------------------------------------  !  !
         ! --->!раздел описания процедур и функций!---  !
         !     ------------------------------------     !
         ------------------------------------------------

     Раздел описания меток - это та часть блока, где  описы-
ваются  метки,  присваиваемые  операторам  в соответствующем
разделе  операторов.  Каждая метка  должна  помечать  только
один оператор.
                           -----       -------        -
раздел описания меток --->(label)----->!метка!------>(;)-->
                           -----   ^   -------   !    -
                                   !      -      !
                                   ------(,)-----
                                          -
     Используемая в качестве метки  последовательность  цифр
должна находиться в диапазоне от 0 до 9999.
     Раздел описания констант  содержит  описания  констант,
локальных для этого блока.

                                 --------------------
раздел описания--->(const)------>!описание константы!--------->
констант                   ^ !   --------------------     ^ !
                           ! !   -----------------------  ! !
                           ! --->!описание типизованной!--- !
                           !     !константы            !    !
                           !     -----------------------    !
                           ----------------------------------

     Раздел описания типов включает описания  всех  типов  в
блоке.
                           ----      ---------------
раздел описания типов---->(type)---->!описание типа!------->
                           ----  ^   ---------------   !
                                 !                     !
                                 -----------------------
     Раздел описания переменных состоит из описаний перемен-
ных, локальных для этого блока.

                    ---      ---------------------
раздел описания--->(var)---->!описание переменной!-------->
переменных          ---  ^   ---------------------      !
                         !                              !
                         --------------------------------

     Раздел описания процедур и функций состоит из  описаний
процедур и функций, локальных для этого блока.

                         ----------------------
раздел описания----------! описание процедуры !
процедур и функций       ----------------------
                         ----------------------
                         !  описание функции  !
                         ----------------------

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

                         ----------------------
раздел операторов------->! составной оператор !---------->
                         ----------------------

                Правила для области действия

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

     - Переопределение во  вложенном  блоке.  Допустим,  что
Exterior  является  блоком,  в  который  вложен  другой блок
Interior. Если Exterior и Interior  имеют  идентификаторы  с
одинаковым  именем,  например,  j,  то Interior имеет доступ
только к идентификатору j, который в нем описан, и аналогич-
но Exterior имеет доступ только к идентификатору j, описание
которого он содержит.

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

Описание идентификатора или метки должно предшествовать  лю-
бому  вхождению идентификатора или метки в тексте программы,
с одним исключением.
     Базовый тип типа указатель может быть  идентификатором,
который еще не описан. Однако, в конечном итоге этот иденти-
фикатор должен быть описан в том же  разделе  описания,  где
встречается данный тип указатель.

     - Переопределение внутри блока. Идентификатор или метка
могут быть описаны только один раз на внешнем уровне данного
блока. Единственным исключением является случай, когда  опи-
сание указывается внутри блока, входящего в данный, или ког-
да описание указывается в списке полей записи.
     Идентификатор поля записи описывается в рамках типа за-
пись и имеет значение только в сочетании со ссылкой на пере-
менную этого типа запись. Поэтому вы можете повторно опреде-
лить идентификатор поля (с таким же написанием) в том же са-
мом блоке, но не на том же самом уровне в рамках  указанного
типа  запись.  Однако, идентификатор, который был ранее опи-
сан, может быть повторно определен как идентификатор поля  в
том же самом блоке.

                Область действия интерфейса
               и стандартных идентификаторов

     Программы и модули, содержащие предложения uses  (пред-
ложения использования) имеют доступ к идентификаторам, кото-
рые описаны в секциях интерфейса модулей, указанных  в  этих
предложениях uses.
     Каждый модуль в предложении uses  определяет  свою  об-
ласть  действия, которая охватывает остальные модули и прог-
рамму в целом. Первый модуль в предложении uses представляет
самую внешнюю область действия, а последний модуль представ-
ляет самую внутреннюю область действия.  Это  означает,  что
если  два  или более модулей содержат описание одного и того
же идентификатора, то при  неуточненном  обращении  к  этому
идентификатору  будет выбран тот вариант, который был описан
в последнем модуле в предложении  uses.  Однако,  вы  можете
выбрать любой вариант этого идентификатора, указав составной
(уточненный) идентификатор.
     Идентификаторы встроенных констант, типов,  переменных,
процедур  и функций Турбо-Паскаля действуют, как если бы они
были описаны в блоке, охватывающем все используемые модули и
программу в целом. В действительности эти стандартные объек-
ты описаны в модуле System, который используется любой прог-
раммой  или модулем прежде любого модуля, указанного в пред-
ложении uses. Это означает, что любой модуль  или  программа
могут переопределить стандартные идентификаторы, а обращение
к ним может быть выполнено с помощью составного  идентифика-
тора, например, System.Integer или System.Writeln.




                          ГЛАВА 3

                            Типы

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

                 ---------------     -     -----     -
описание типа--->!идентификатор!--->(=)--->!тип!--->(;)-->
                 ---------------     -     -----     -

              -------------
тип --------->!простой тип!-------------------->
        !     -------------          ^
        !     -----------------      !
        !---->!тип "указатель"!------!
        !     -----------------      !
        !     -----------------      !
        !-----!структурный тип!------!
        !     -----------------      !
        !     ---------------        !
        !-----!строковый тип!--------!
        !     ---------------        !
        !     --------------------   !
        ------!идентификатор типа!----
              --------------------

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

                        Простые типы

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

                   ----------------
простой тип ------>!порядковый тип!------------>
               !   ----------------      ^
               !   ------------------    !
               --->!вещественный тип!-----
                   ------------------

                      ----------------------------------
вещественный тип ---->!идентификатор вещественного типа!--->
                      ----------------------------------

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

                      Порядковые типы

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

     -  Все  возможные  значения  данного  порядкового  типа
представляют собой упорядоченное множество, и каждое возмож-
ное значение связано с порядковым номером, который представ-
ляет  собой  целочисленное значение. За исключением значений
целочисленного типа, первое значение любого порядкового типа
имеет  порядковый номер 0, следующее значение имеет порядко-
вый номер 1 и так далее для каждого значения в этом порядко-
вом  типе.  Порядковым  номером значения целочисленного типа
является само это значение. В любом порядковом типе  каждому
значению,  кроме  первого,  предшествует  другое значение, и
после каждого значения,  кроме  последнего,  следует  другое
значение в соответствии с упорядоченностью типа.
     - К любому значению порядкового  типа  можно  применить
стандартную функцию Ord, возвращающую порядковый номер этого
значения.
     - К любому значению порядкового  типа  можно  применить
стандартную  функцию  Pred, возвращающую предшествющее этому
значению значение. Если эта функция  применяется  к  первому
значению  в  этом  порядковом типе, то выдается сообщение об
ошибке.
     - К любому значению порядкового  типа  можно  применить
стандартную  функцию  Succ,  возвращающую  следующее за этим
значением значение. Если эта функция применяется к последне-
му значению в этом порядковом типе, то выдается сообщение об
ошибке.

     Синтаксис порядкового типа имеет следующий вид:

                    ------------------
порядковый тип ---->!  отрезок типа  !------------------->
                !   ------------------                ^
                !   ------------------                !
                !-->!перечислимый тип!----------------!
                !   ------------------                !
                !   --------------------------------  !
                --->!идентификатор порядкового типа!---
                    --------------------------------

     Турбо-Паскаль имеет семь встроенных  порядковых  типов:
integer (целое), shortint (короткое целое), longint (длинное
целое), byte (длиной в байт), word (длиной в слово), boolean
(булевское)  и  char  (символьный).  Кроме того, имеется два
других класса определяемых пользователем  порядковых  типов:
перечислимые типы и отрезки типов.

                     Целочисленный тип

     В Турбо-Паскале имеется пять  встроенных  целочисленных
типов:  shortint  (короткое целое), integer (целое), longint
(длинное целое), byte (длиной в байт) и word (длиной в  сло-
во). Каждый тип обозначает определенное  подмножество  целых
чисел, как это показано в следующей Таблице.
                                                Таблица 15.1
               Встроенные целочисленные типы
------------------------------------------------------------
     Тип                Диапазон                Формат
------------------------------------------------------------

короткое целое        -128 .. 127         8 битов со знаком
целое               -32768 .. 32767       16 битов со знаком
длинное целое  -2147483648 .. 2147483647  32 бита со знаком
длиной в байт            0 .. 255         8 битов без знака
длиной в слово           0 .. 65535       16 битов без знака

------------------------------------------------------------

     Арифметические действия над  операндами  целочисленного
типа  предполагают  8-битовую,  16-битовую и 32-битовую точ-
ность в соответствии со следующими правилами:

     - Тип целой константы представляет собой встроенный це-
лочисленный тип с наименьшим диапазоном, включающим значение
этой целой константы.
     - В случае бинарной  операции  (операции,  использующей
два  операнда),  оба операнда преобразуются к их общему типу
перед тем, как над ними совершается  действие.  Общим  типом
является  встроенный целочисленный тип с наименьшим диапазо-
ном, включающим все возможные значения обоих  типов.  Напри-
мер,  общим типом для целого и целого длиной в байт является
целое, а общим типом для целого и целого длиной в слово  яв-
ляется  длинное целое. Действие выполняется в соответствии с
точностью общего типа и типом результата является общий тип.
     - Выражение справа в операторе присваивания вычисляется
независимо от размера переменной слева.

     Значение одного целочисленного типа  может  быть  явным
образом  преобразовано  к  другому целочисленному типу с по-
мощью приведения типов. (Приведение типов описывается в Гла-
вах 4 и 6).

                       Булевский тип

     Значения булевского типа обозначаются встроенными иден-
тификаторами  констант False и True. Поскольку булевский тип
является перечислимым,  между  этими  значениями имеют место
следующие отношения:

     - False < True
     - Ord(False)=0
     - Ord(True)=1
     - Succ(False)=True
     - Pred(True)=False

                   Символьный тип (char)

     Множеством значений этого типа являются символы, упоря-
доченные  в соответствии с расширенным набором символов кода
ASCII (Приложение С). При вызове функции Ord(Ch), где  Ch  -
значение символьного типа, возвращается порядковый номер Ch.
     Строковая константа с длиной 1 может обозначать  значе-
ние  константы  символьного типа. Любое значение символьного
типа может быть получено с помощью стандартной функции Chr.

                      Перечислимый тип

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

                     -    ------------------------    -
перечислимый тип -->(()-->!список идентификаторов!-->())->
                     -    ------------------------    -

                             ---------------
список идентификаторов ----->!идентификатор!------------->
                         ^   ---------------   !
                         !          -          !
                         ----------(,)<---------
                                    -

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

     suit = (club,diamond,heart,spade)

Согласно этим описаниям  diamond  является  константой  типа
suit.
     При применении функции  Ord  к  значению  перечислимого
типа  Ord  возвращает целое число, которое показывает, какое
положение занимает это значение в отношении других  значений
этого перечислимого типа. Согласно предшествующим описаниям,
Ord(club) возвращает 0, Ord(diamond) возвращает 1 и так  да-
лее.

                        Отрезок типа

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

                 -------------    --    -------------
отрезок типа----->! константа !-->(..)-->! константа !-->
                 -------------    --    -------------

     Обе константы должны иметь один  и  тот  же  порядковый
тип.  Отрезки типов, имеющие вид  a..b, предполагают, что  a
меньше или равно b.
     Приведем примеры отрезков типов:

     0..99
     -128..127
     club..heart

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

                      Вещественный тип

     К вещественному типу относится подмножество  веществен-
ных  чисел, которые могут быть представлены в формате с пла-
вающей запятой с фиксированным числом цифр. Запись  значения
в формате с плавающей запятой обычно включает три значения -
m, b и e - таким образом, что m x b**e=n, где b всегда равен
2,  а  m  и e являются целочисленными значениями в диапазоне
вещественного типа. Эти значения m и e далее определяют диа-
пазон представления и точность вещественного типа.
     Имеется пять видов вещественных типов: вещественное,  с
одинарной  точностью, с двойной точностью, с повышенной точ-
ностью и сложное. Действия над типами с одинарной точностью,
с  двойной  точностью и с повышенной точностью и над сложным
типом могут выполняться только при наличии числового  сопро-
цессора 8087 (который был описан ранее).
     Вещественные типы различаются  диапазоном  и  точностью
связанных с ними значений (см. Таблицу 15.2).

                                              Таблица 15.2
                     Диапазон представления
          и десятичные цифры для вещественных типов
------------------------------------------------------------
Тип                           Диапазон                 Цифры
------------------------------------------------------------
вещественное          2.9x10**-39 до 1.7x10**38  от 11 до 12
с одинарной точностью 1.5x10**-45 до 3.4x10**38    от 7 до 8
с двойной точностью  5.0x10**-324 до 1.7x10**308 от 15 до 16
с повышенной точностью 1.9x10**-4951 до 1.1x10**4932 от 19
                                                     до 20
------------------------------------------------------------

     Сложный тип содержит только  целочисленные  значения  в
диапазоне  от  -2**63+1 до 2**63-1, что приблизительно равно
-9.2x10**18 и 9.2x10**18.
     Турбо-Паскаль поддерживает две  модели  генерации  кода
для  выполнения  действий  над  вещественными  типами: прог-
раммную для чисел с плавающей запятой и аппаратную для чисел
с  плавающей  запятой.  Выбор  соответствующей модели осуще-
ствляется с помощью директивы компилятора $N.

      Программная поддержка чисел с плавающей запятой

     В состоянии $N-, которое устанавливается по  умолчанию,
генерируемый  код  выполняет  все вычисления с вещественными
типами программно, через вызов подпрограмм библиотеки испол-
няющей системы.  Из-за соображений скорости и размера кода в
этом состоянии допускаются только  действия над  переменными
типа real (вещественное). Любая попытка оттранслировать опе-
раторы, выполняющие действия  над  типами с  одинарной  точ-
ностью, с двойной точностью,  с повышенной  точностью и  над
сложными типами, вызовет сообщение об ошибке.

       Аппаратная поддержка чисел с плавающей запятой

     В состоянии $N+ генерируемый код выполняет все вычисле-
ния над вещественными типами с помощью числового сопроцессо-
ра 8087. Это состояние позволяет использовать все  пять  ве-
щественных  типов,  однако  оно требует наличия сопроцессора
8087 на этапе компиляции и выполнения.
     Более детальное описание генерации кода при  аппаратной
поддержке  чисел с плавающей запятой вы можете найти в Главе
"Использование процессора 8087 в Турбо-Паскале".

                       Строковые типы

     Значением строкового типа  является  последовательность
символов  с  динамическим  атрибутом длины (в зависимости от
действительного числа символов при выполнении  программы)  и
постоянным  атрибутом размера в диапазоне от 1 до 255. Теку-
щее значение атрибута длины можно получить с  помощью  стан-
дартной функции Length.

                  ------
строковый тип -->(string)----------------------------------->
                  ------  !                                ^
                          !   -    -----------------    -  !
                          -->([)-->!целое без знака!-->(])--
                              -    -----------------    -

     Отношение между любыми двумя строковыми значениями  ус-
танавливается  согласно  отношению  порядка между значениями
символов в соответствующих позициях. В двух  строках  разной
длины каждый символ более длинной строки без соответствующе-
го символа в более короткой строке принимает значение "боль-
ше";  например,  'Xs'  больше, чем 'X'. Нулевые строки могут
быть равны только другим нулевым строкам, и они являются на-
именьшими строковыми значениями.
     К символам в строке можно иметь доступ как к  компонен-
там  массива,  что  описывается в разделе "Массивы, строки и
индексы". Операторы работы со строковыми типами  описываются
разделах  "Строковые  операторы"  и  "Операторы  отношений".
Стандартные процедуры и функции для работы со строковыми ти-
пами описаны в разделе "Строковые процедуры и функции".

                      Структурные типы

     Структурный тип, характеризуемый методом структурирова-
ния и типами своих компонентов, имеет более одного значения.
Если тип компонента является структурным,  то  получаемый  в
результате  структурный тип имеет более одного уровня струк-
турирования.  Структурный  тип  может  иметь  неограниченные
уровни структурирования.

                                  --------------
структурный тип------------------>! тип массив !----------->
                !           ^ !   --------------        ^
                !   ------  ! !   -------------------   !
                -->(packed)-- !-->!множественный тип!---!
                    ------    !   -------------------   !
                              !   --------------        !
                              !-->!файловый тип!--------!
                              !   --------------        !
                              !   --------------        !
                              --->! тип запись !---------
                                  --------------

     Слово packed в описании структурного  типа  требует  от
компилятора уплотнить хранимые данные, даже за счет уменьше-
ния доступа к компоненту  в  переменной  этого  типа.  Слово
packed не имеет никакого действия в Турбо-Паскале, поскольку
упаковка выполняется здесь автоматически всюду, где это воз-
можно.
     Примечание: Максимальный допустимый размер структурного
типа в Турбо-Паскале равен 65520 байт.

                        Типы массив

     Массивы содержат фиксированное число компонентов одного
типа,  так  называемого  типа конпонента. На приводимой ниже
синтаксической диаграмме тип компонента  следует  за  словом
of.

           -----     -     ---------------     -     --
тип    -->(array)-->([)--->!индексный тип!--->(])-->(of)--
"массив"   -----     -  ^  --------------- !   -     --  !
                        !        -         !             !
                        --------(,)---------      --------
                                 -                !
                                               -------
                                               ! тип !--->
                                               -------
                     ------------------
индексный тип ------>! порядковый тип !------>
                     ------------------

     В индексных типах, по  одному  для  каждой  размерности
массива, указывается число элементов. Допустимыми индексными
типами являются все порядковые типы, за исключением длинного
целого  и  поддиапазонов  длинного целого. Массив может быть
проиндексирован по каждой размерности всеми значениями соот-
ветствующего  индексного типа; число элементов поэтому равно
числу значений в каждом индексном типе.  Число  размерностей
является неограниченным.
     Приведем пример типа массив:

     array[1..100] of real

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

     array[boolean] of array[1..100] of array[Size] of real

интерпретируется компилятором точно так же, как

     array[boolean,1..10,Size] of real

Кроме того, можно записать выражение:

     packed array[1..10] of packed array[1..8] of boolean

как
     packed array[1..10,1..8] of boolean

     Для доступа  к  элементам  массива  необходимо  указать
идентификатор  массива  с  одним или несколькими индексами в
скобках (см. раздел "Массивы, Строки и индексы").
     Тип массив, имеющий вид

     packed array[m..n] of char

где m меньше, чем n, называется упакованным строковым  типом
(слово  packed  можно  опустить,  поскольку оно не оказывает
действия в Турбо-Паскале). Упакованный строковый  тип  имеет
некоторые свойства, не характерные для других типов массив
(см. "Тождественные и совместимые типы" далее в этой главе).

                        Типы запись

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

                   ------                          ---
 тип запись  ---->(record)----------------------->(end)---->
                   ------  !                  ^    ---
                           !  --------------  !
                           -->!список полей!---
                              --------------

          ---------------
список--->!фиксированная!------------------------------------>
полей  !  !часть        ! !                      ^  !      ^
       !  --------------- !   -     ------------ !  !   -  !
       !                  -->(;)--->!вариантная!--  -->(;)--
       !                      -  ^  !часть     !        -
       !                         !  ------------
       ---------------------------

                  ------------------------    -    -----
фиксированная---->!список идентификаторов!-->(:)-->!тип!--->
часть         ^   ------------------------    -    -----  !
              !                -                          !
              ----------------(;)<-------------------------
                               -

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

record
  year:  integer;
  month: 1..12;
  day:   1..31;
end

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

вариан-
 ная     ----                        ----------   --    ---------
часть ->(case)---------------------->!тип поля!->(of)-->!вариант!-->
         ---- !                   ^  !признака!   -- ^  --------- !
              !  -----------   -  !  ----------      !     -      !
              -->!идентифи-!->(:)--                  -----(;)<-----
                 !катор    !   -                           -
                 -----------

                      --------------------------------
тип поля признака---->!идентификатор порядкового типа!------->
                      --------------------------------

            -----------     -     -                        -
вариант---->!константа!--->(:)-->(()--------------------->())->
        ^   ----------- !   -     -  !                 ^   -
        !       -       !            !  -------------- !
        -------(,)-------            -->!список полей!--
                -                       --------------

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

record
  firstName,lastName : string[40];
  birthDate : Date;
  case citizen : boolean of
    True  : (birthPlace: string[40]);
    False : (country   : string[20];
             entryPort : string[20];
             entryDate : Date;
             exitDate  : Date);
end

record
  x,y : real;
  case kind : Figure of
    rectangle : (height,wigth: real);
    triangle : (size1,side2,angle: real);
    circle : (radius: real);
end

                     Множественные типы

     Диапазон значений множественного типа представляет  со-
бой  мощность  множества  для определенного порядкового типа
(базового типа). Каждое  возможное  значение  множественного
типа  является подмножеством возможных значений базового ти-
па.
     Переменная множественного типа может принимать как  все
значения множества, так и ни одного.

                     ---     --    ----------------
множественный тип-->(set)-->(of)-->!порядковый тип!--->
                     ---     --    ----------------

     Базовый тип не должен иметь более 256 возможных  значе-
ний, и порядковые значения верхней и нижней границы базового
типа должны не превышать диапазона от 0 до 255. В силу этого
базовый  тип  множества не может быть коротким целым, целым,
длинным целым или словом.
     Операции над множественными типами описываются в разде-
ле  "Операции над множествами" в Главе  6. В разделе "Описа-
тели множеств" показано, как определять значения множества.
     Любой множественный тип может  принимать  значение  [],
которое называется пустым множеством.

                       Файловые типы

     Файловый тип  состоит  из  линейной  последовательности
компонентов,  которые  могут  иметь любой тип за исключением
файлового типа или структурного типа, содержащего  компонент
с  файловым типом. Число компонентов не устанавливается опи-
санием файлового типа.
                    ----        --     -------
файловый тип------>(file)----->(of)--->! тип !----->
                    ----   !    --     -------  ^
                           !                    !
                           ----------------------

     Если слово of и тип компонента опущены, то тип  обозна-
чает  нетипизованный файл. Нетипизованные файлы представляют
собой каналы ввода/вывода нижнего уровня, в основном исполь-
зуемые  для прямого доступа к любому файлу на диске, незави-
симо от его внутреннего формата.
     Стандартный файловый тип Text определяет файл, содержа-
щий символы, упорядоченные в строки. Текстовые файлы исполь-
зуют специальные процедуры ввода/вывода, которые описываются
в "Ввод и вывод".

                       Типы указатель

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

                     -      -------------
 тип указатель ---->(^)---->!базовый тип!------>
                     -      -------------

                     --------------------
базовый тип -------->!идентификатор типа!----->
                     --------------------

     Если базовый тип является еще не описанным  идентифика-
тором,  то он должен быть описан в той же самой части описа-
ния типов, что и тип указатель.
     Переменной-указателю можно присвоить значение с помощью
процедуры New, операции @ или функции Ptr. Процедура New от-
водит новую область памяти в динамически распределяемой  об-
ласти для динамических переменных и сохраняет адрес этой об-
ласти в переменной указателя. Операция @  ориентирует  пере-
менную  указателя на область памяти, содержащую существующую
переменную, включая и те переменные, которые имеют идентифи-
каторы.  Функция Ptr ориентирует переменную указателя на оп-
ределенный адрес в памяти.
     Зарезервированное слово  nil  обозначает  константу  со
значением указателя, которая ни на что не указывает.
     Встроенный  указатель  типа  обозначает  нетипизованный
указатель, то есть указатель, который не указывает ни на ка-
кой определенный тип. Переменные типа Pointer могут быть ра-
зыменованы;  указание символа ^ после такой переменной вызы-
вает появление ошибки. Как и значение,  обозначаемое  словом
nil, значения типа Pointer совместимы со всеми другими типа-
ми указателей.
     В разделе "Указатели и динамические переменные" в Главе
4  вы  можете найти синтаксис ссылки на динамические переме-
ные, которые указываются с помощью указателя-переменной.

              Тождественные и совместимые типы

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

                   Тождественность типов

     Тождественность типов требуется только  для  переменных
фактических  и  формальных  параметров при вызове процедур и
функций.
     Два типа, скажем Т1 и Т2, являются тождественными, если
является  истинным  одно  из  следующих утверждений: Т1 и Т2
представляю  собой  один и тот же  идентификатор  типа;  Т1
описан как эквивалентный типу, тождественному Т2.
     Второе условие означает, что Т1 не  обязательно  должен
быть  описан как непосредственно эквивалентный Т2. Следующие
описания типов:

T1 = integer; T2 = T1; T3 = integer; T4 = T2;

означают, что Т1, Т2, Т3, Т4 и integer являются  тождествен-
ными типами. Следующие описания типов

T5 = set of integer; T6 = set of integer;

не определяют Т5 и Т6 как тождественные,  поскольку  set  of
integer  не  является  идентификатором типа. Две переменные,
описанные в одном и том же описании, например:

V1, V2: set of integer;

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

V1: set of integer; V2: set of integer; V3: integer;
V4: integer;

означают, что V3 и V4 имеют тождественный тип, а V1 и  V2  -
нет.

                    Совместимость типов

     Иногда, например, в выражениях и  операциях  сравнения,
требуется  совместимость  типов.  Совместимость типов, кроме
того, является  важной  предпосылкой  для  совместимости  по
присваиванию.
     Совместимость типов имеет место,  если  выполняется  по
крайней мере одно из следующих условий:

     - Оба типа являются одинаковыми.
     - Оба типа являются вещественными типами.
     - Оба типа являются целочисленными.
     - Один тип является поддиапазоном другого.
     - Оба типа являются поддиапазонами одного и того же ос-
новного типа.
     - Оба типа являются множественными типами с совместимы-
ми базовыми типами.
     - Оба типа являются упакованными  строковыми  типами  с
одинаковым числом компонентов.
     - Один тип является строковым, а  другой  тип  является
или  строковым  типом,  или упакованным строковым типом, или
символьным типом.
     - Один тип является указателем (Pointer), а другой  яв-
ляется любым типом указателей.

           Совместимость в операциях присваивания

     Совместимость по присваиванию  необходима,  если  имеет
место  присваивание значения, например, в операторе присваи-
вания или при передаче значений параметров.
     Значение типа Т1 является совместимым по присваиванию с
типом  Т2  (то есть допустимо Т1:=Т2), если выполняется одно
из следующих условий:

     - Т1 и Т2 имеют тождественные типы, и ни один из них не
является  файловым  типом  или структурным типом, содержащим
компонент с файловым типом на одном из своих уровней.
     - Т1 и Т2 являются совместимыми порядковыми  типами,  и
значения типа Т2 попадают в диапазон возможных значений Т1.
     - Т1 и Т2 являются  вещественными  типами,  и  значения
типа Т2 попадают в диапазон возможных значений Т1.
     - Т1 является вещественным типом, а Т2  является  цело-
численным типом.
     - Т1 и Т2 являются строковыми типами.
     - Т1 является строковым типом, а Т2 является символьным
типом.
     - Т1 является строковым типом, а Т2 является  упакован-
ным строковым типом.
     - Т1 и Т2 являются совместимыми упакованными строковыми
типами.
     - Т1 и Т2 являются совместимыми множественными  типами,
и  все  члены значения типа Т2 попадают в диапазон возможных
значений Т1.
     - Т1 и Т2 являются совместимыми типами "указатель".

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

                   Раздел описания типов

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

type
  Range     = integer;
  Number    = integer;
  Color     = (red,green,blue);
  TextIndex = 1..100;
  TestValue = -99..99;
  TestList  = array[TestIndex] of TestValue;
  TestListPtr = ^TestList;
  Date        = record
                  year: integer;
                  month: 1..12;
                  day: 1.. 31;
                end;
MeasureData = record
                when: Date;
                count: TestIndex;
                data: TestListPtr;
              end;
MeasureList = array[1..50] of MeasureData;
Name        = string[80];
Sex         = (male,female);
Person      = ^PersonData;
PersonData  = record
                name,firstName: Name;
                age:            integer;
                married:        boolean;
                father,child,sibling: Person;
                  case s: Sex of
                    male:   (bearded: boolean);
                    female: (pregnant: boolean);
               end;
People  = file of PersonData;
IntFile = file of integer

     В этом примере Range, Number и  integer  являются  тож-
дественными  типами. TestIndex является просто совместимым и
совместимым по присваиванию, но не тождественным,  с  типами
Number, Range и integer.



