Директивы компилятора
В меню OPTIONS/COMPILER включены опции, с помощью которых можно управлять работой компилятора. В ряде случаев бывает необходимо временно отменить действие той или иной опции при трансляции некоторого фрагмента программы. Особенно часто, например, такая необходимость возникает при обращении к диску: если программа пытается прочитать несуществующий файл или записать данные на защищенный диск, возникнет ошибка периода исполнения и программа аварийно закончит свою работу. В то же время, если отключить опцию I/O CHECKING, этого не произойдет, программа сможет проанализировать последствия обращения к диску и предпринять альтернативные действия.
В Турбо Паскале можно использовать директивы компилятора, которые в виде особым образом оформленных комментариев вставляются в текст программы и модифицируют те или иные возможности компилятора в процессе компиляции. Директивы могут быть переключающими, условными и параметрическими. Переключающие директивы воздействуют на те опции, которые включены в диалоговое окно OPTIONS/COMPILER; условные директивы определяют условия, при которых компилируются те или иные фрагменты программы; параметрические директивы задают параметры, которые должен учитывать компилятор.
Все директивы оформляются в виде особых комментариев: они обрамляются фигурными скобками, а за открывающей скобкой должен без пробелов следовать знак доллара (десятичный код 36). Как только в процессе разбора исходного текста программы компилятор встретит такого рода последовательность символов, он воспримет их как директиву и нужным образом изменит свою работу.
Переключающая директива содержит букву, обозначающую опцию, и знак «+» или «-». Знак «+» означает установку опции в активное состояние, знак «-» - в пассивное состояние. Например, директива {$I-} означает временное отключение контроля ошибок ввода-вывода, директива {$R+} - включение контроля границ диапазона. В одной директиве можно перечислить несколько опций, например:
{ $A+,B-,D+,E+,F+,I+,L+,N+,O-,R+,S+,V+}
Следует учесть, что директивы компилятора действуют от момента своего появления в тексте до конца текущего модуля, т.е. локализуются в теле модуля, в то время как опции, установленные в самой среде, распространяются на все модули и основную программу. В случае конфликта между директивами и опциями, предпочтение отдается директивам. Таким образом, правильно расставленные директивы обеспечивают нужную компиляцию программы независимо от настройки среды. Они особенно полезны в случае, когда компиляция осуществляется автономным компилятором ТР.ЕХЕ.
Некоторые директивы компилятора могут действовать только на часть текста программы, такие директивы называются локальными; в отличие от этого глобальные директивы располагаются в самом начале текста программы (модуля) и действуют сразу на всю программу (модуль) в целом.
Ниже приводится список всех директив компилятора. В скобках дается действие директивы для знака «-». Знаком * отмечены локальные директивы.
{$А+} - выравнивать данные на границу слова (байта);
{SB+}* - вычислять логические выражения полностью (до получения результата);
{SD+} - разрешить (запретить) работу со встроенным отладчиком;
{$Е+} - включить (отключить) режим программной эмуляции сопроцессора;
{SF+} - использовать дальнюю (ближнюю) модель вызова;
{$G+}* - использовать (не использовать) полный набор команд микропроцессора Intel 80286 (микропроцессора Intel 8088);
{$I+}* - включить (отключить) контроль операций ввода-вывода;
{$L+} - включить (не включать) локальные символы в информацию для отладчика;
{SN+} - использовать числовой сопроцессор (реализовать операции с плавающей точкой программно);
{$O+} - разрешить (не разрешать) создание оверлейной структуры;
{$R+}* - включить (отключить) контроль границ диапазона;
{$S+}* - включить (отключить) контроль возможного переполнения стека;
{SV+}* - включить (отключить) контроль длины строк при обращении к процедуре или функции;
{$Х+} - использовать (не использовать) расширенный синтаксис.
К условным директивам относятся следующие локальные директивы компилятора:
{SDEFINE <условный символ>} - установить условный символ;
{SIFDEF <условный символ>} - проверить установку условного символа; если символ установлен, будет компилироваться вся следующая за директивой часть программы вплоть до директив {$ELSE} или {SENDIF}, в противном случае этот фрагмент программы будет пропущен компилятором;
{SIFNDEF <условный символ>) - проверить установку локального символа; обратна директиве {$IFDEF}, т.е. действует только в том случае, когда условный символ не установлен;
{$ELSE} - определяет начало альтернативного фрагмента программы; этот фрагмент будет компилироваться в том случае, если условный символ, проверенный предыдущей по тексту программы директивой {SIFDEF} пли {SIFNDEF}, не установлен; альтернативная часть вместе с директивой {SELSE} может опускаться;
{SENDIF} - ограничивает область действия директив {$IFDEF}, {IFNDEF} или {$ELSE}.
Установить условие - это значит с помощью опции OPTIONS/COMPILER/CONDITIONAL DEFINES среды Турбо Паскаля или с помощью директивы компилятора {$DEFINE} ввести некоторое слово (условный символ), которое затем будет управлять компиляцией какого-либо фрагмента программы. Если, например, использовать в качестве условного символа слово DEBUG, то можно написать такой фрагмент программы:
{$IFDEF Debug}
WriteLn ('Отладка: х=,х);
{$ENDIF}
Теперь, если установлен (задан в среде или введен с помощью директивы {SDEFINE}) условный символ DEBUG, в программе будет откомпилирован оператор WRITELN, если этот условный символ не задан, компилятор пропустит этот оператор.
Отметим, что условные символы никак не связаны с множеством идентификаторов самой программы и недоступны ей на этапе исполнения. Для предыдущего примера нельзя написать
WriteLn (Debug) ;
если, разумеется, в программе не определена переменная или константа с этим именем.
Одновременно в программе может быть установлено сколько угодно условных символов. Для тестирования нескольких условий используется вложение условных директив компилятора, например:
{$IFDEF Var1}
{$IFDEF Var2}
a := n; {$ELSE}
a := 0;
{$ENDIF}
{$ENDIF}
В директивах {$IFDEF} или {$IFNDEF} программист может использовать следующие стандартные условные символы, которые устанавливаются в среде автоматически:
VER70 - указывает версию 7.0 Турбо Паскаля (для других версий используются другие условные символы: VER40, VER50, VER55, VER60);
MSDOS - указывает на то, что программа будет исполняться под управлением операционной системы MS-DOS (PC DOS); версии Турбо Паскаля для других операционных систем не будут устанавливать этот символ;
CPU86 - указывает на то, что программа будет исполняться на ПК с микропроцессором, принадлежащим семейству Intel 80x86;
CPU87 - указывает на то, что в составе аппаратных средств ПК обнаружен (к моменту компиляции программы!) арифметический сопроцессор семейства Intel 80x87.
К параметрическим относятся директивы:
{$М <стек>,<нижн>,<верх>} - установить требуемые размеры памяти (глобальная директива); здесь <стек> - размер стека; <нижн> - нижняя граница динамической памяти; <верх> - верхняя граница динамической памяти;
{$I <имя файла>} - включение PAS-файла: <имя файла> - имя включаемого файла;
{$L <имя фапла>} - включение OBJ-файла: <имя файла> - имя включаемого файла.
В директиве {$М} все размеры задаются в байтах, следуют друг за другом в указанной последовательности и отделяются запятыми. Между буквой М и первой цифрой размера стека должен быть хотя бы один пробел, между последней цифрой верхней границы динамической памяти и закрывающей фигурной скобкой не должно быть никаких символов, например:
{$М 16384,0,655360}
Включаемый файл, определенный в директиве {$I}, должен содержать исходный текст фрагмента программы. Компилятор использует эту директиву как указание обратиться к дисковому файлу за очередной строкой программы. После того, как весь фрагмент программы из файла будет прочитан, компилятор продолжит чтение строк из файла редактора. Если в имени файла опущено расширение, используется стандартное расширение .PAS. Диск и каталог, в котором находится файл, задаются опцией OPTIONS/ENVIRONMENT/DIRECTORIES.
Директива ($L) предназначена для указания компилятору файла, в котором содержится результат трансляции ассемблерной процедуры или функции, объявленной в программе как внешняя {EXTERNAL, см. гл. 11). Если в имени файла опущено расширение, используется стандартное расширение. OBJ. Диск и каталог, в котором находится файл, задаются опцией OPTIONS/ENVIRONMENT/DIRECTORIES.
Элементы диалоговой среды
При работе с Турбо Паскалем на экране ПК может формироваться сложная структура прямоугольных участков экрана, рассматриваемых как единое целое и предназначенных для тех или иных действий. Такие участки в тексте книги называются меню, окнами, полями и т.д. На рис.П1.1 показаны эти элементы и даны их названия.
Рис.П1.1. Элементы диалоговой среды Турбо Паскаля
Меню будем называть прямоугольный участок экрана, содержащий кодовые слова и предназначенный для диалогового выбора продолжения работы. Меню фиксирует некоторое текущее состояние диалоговой среды и предлагает несколько альтернативных путей перехода из этого состояния. Содержащиеся в меню кодовые слова обозначают возможные альтернативы. Условимся называть их в дальнейшем опциями (option - выбор).
Окно в Турбо Паскале предназначено для обмена информацией между программистом и средой. В окно редактора программист помещает текст программы, в окне программы среда показывает результат ее прогона, в справочном окне появляются справочные сообщения, в отладочном окне программист может наблюдать за изменением переменных в процессе отладки программы. Одновременно на экране может присутствовать сразу несколько окон, однако только одно из них активно в каждый момент. Активное окно очерчивается двойной рамкой, неактивные - одинарной.
Диалоговое окно разворачивается на экране по мере надобности. С помощью диалогового окна пользователь уточняет выбранное действие. Внутри диалогового окна может быть несколько полей. В поле ввода программист может подготовить текстовую строку (например, имя файла). В поле выбора среда предлагает несколько возможных имен файлов. В поле переключаемой опции можно установить необходимую настройку среды, с помощью командных полей - передать среде ту или иную команду.
Работа с меню и окнами значительно упрощается, если Ваш ПК оснащен устройством ввода типа «мышь». Условимся в дальнейшем вместо длинного "устройство ввода типа «мышь»" писать просто мышь, что соответствует обиходному названию этого прибора. Подвигав мышь по столу, Вы тут же заметите перемещающийся по экрану указатель мыши. С помощью этого указателя можно выбрать нужный элемент диалоговой среды. Для этого подведите к нему указатель и нажмите левую кнопку мыши.
Команды, передаваемые среде из редактора
Некоторые наиболее часто используемые команды можно передать среде непосредственно из режима редактирования. Все они уже описаны выше, когда рассматривалась система меню. Тем не менее я повторю их здесь, чтобы Вам было легче ими пользоваться.
F1 - получить справку;
F2 - записать файл из окна редактора на диск;
F3 - прочитать файл с диска в окно редактора;
F4 - исполнить до курсора (выполнить опцию RUN/GO TO CURSOR);
F5 - распахнуть окно на весь экран или вернуть ему прежние размеры;
F6 - активизировать следующее окно;
F7 - проследить процедуру (выполнить опцию RUN/TRACE INTO);
F8 - пропустить процедуру (выполнить опцию RUN/STEP OVER);
F9 - компилировать программу (выполнить опцию COMPILE/MAKE);
F10 - перейти в главное меню;
Ctrl-F1 - получить контекстную справку;
Ctrl-F2 - сбросить режим отладки;
Ctrl-F3 - активизировать окно программного стека;
Ctrl-F4 - вычислить выражение или показать/изменить переменную (выполнить опцию DEBUG/EVALUATE/MODIFY);
Ctrl-F5 - перейти к режиму установки положения и размеров окна;
Ctrl-F7 - добавить выражение в окно отладки (выполнить опцию DEBUG/WATCHES/ADD WATCH);
Ctrl-F8 - переключить контрольную точку;
Ctrl-F9 - выполнить компиляцию и прогон программы;
Ctrl-Del - очистить буфер редактора;
Ctrl-Ins - копировать блок в буфер редактора;
Alt-C - вызвать меню компиляции COMPILE;
Alt-D - вызвать меню отладки DEBUG;
Alt-E - вызвать меню редактора EDIT;
Alt-F - вызвать меню файловой службы FILE;
Alt-H - вызвать меню справочной службы HELP;
Alt-O - вызвать меню установок OPTIONS; >
Alt-R - вызвать меню прогона программы RUN;
Alt-S - вызвать меню службы поиска SEARCH;
Alt-W- вызвать меню окон WINDOW;
Alt-X- выйти из Турбо Паскаля;
Alt-0 - получить список открытых окон;
Alt-F1 - получить последнюю справку;
Alt-F3 - закрыть активное окно;
Alt-F5 - показать окно программы;
Alt-F9 - выполнить опцию COMPILE/COMPILE;
Shift-F1 - получить список ссылок справочной службы;
Shift-F6 - активизировать предыдущее активное окно; .
Shift-Del - перенести блок из окна редактора в буфер;
Shift-Ins - копировать буфер в окно редактора.
Команды перемещения курсора
Ctrl-S или ВЛ - на символ влево;
Ctrl-D или ВП - на символ вправо;
Ctrl-A или Ctrl-ВЛ - на слово влево;
Ctrl-F или Ctrl-ВП - на слово вправо;
Ctrl-E или ВВ - на строку вверх;
Ctrl-X или ВН - на строку вниз;
Ctrl-W - прокрутка вниз на строку вместе с курсором;
Ctrl-Z - прокрутка вверх вместе с курсором;
Ctrl-R или PgUp - на страницу вверх;
Ctrl-C или PgDn - на страницу вниз;
Ctrl-Q S или НОМЕ - в начало строки;
Ctrl-Q D или END - в конец строки;
Ctrl-Q E или Ctrl-HOME - в начало экрана;
Ctrl-Q X или Ctrl-END - в конец экрана;
Ctrl-Q R или Ctrl-PgUp - в начало файла;
Ctrl-Q С или Ctrl-PgDn - в конец файла;
Ctrl-Q В - в начало блока;
Ctrl-Q К- в конец блока;
Ctrl-Q Р - на последнюю позицию (используется после поиска или поиска/замены);
Ctrl-Q W - на последнюю ошибку.
Команды работы с блоками
При подготовке текстов программ часто возникает необходимость перенести фрагмент текста в другое место или удалить его. Для такого рода операций удобно использовать блоки - фрагменты текста, рассматриваемые как единое целое. Длина блока может быть достаточно большой (до 64 Кбайт), он может занимать несколько экранных страниц. В каждый момент в среде может быть объявлен только один блок в одном окне редактора. Обмен блоками между окнами возможен только через буфер редактора (см. опцию EDIT в главном меню).
Ctrl-K B - пометить начало блока;
Ctrl-K К - пометить конец блока;
Ctrl-K Т - пометить в качестве блока слово слева от курсора;
Ctrl-K Р - напечатать блок;
Ctrl-K С - копировать блок, начиная с позиции курсора;
Ctrl-K К- переместить блок;
Ctrl-K H - убрать выделение блока цветом; повторное использование Ctrl-K H вновь выделит блок;
Ctrl-K Y- удалить блок;
Ctrl-K R - читать блок из дискового файла;
Ctrl-K W - записать блок на диск;
Ctrl-K I - сместить блок вправо;
Ctrl-K U - сместить блок влево.
Команды удаления/вставки
Ctrl- V или INS - включить/отключить режим вставки;
Ctrl-N - вставить строку;
Ctrl- Y - удалить строку;
Ctrl-H или Backspace - стереть символ слева от курсора;
Ctrl-G или DEL - стереть символ над курсором;
Ctrl-T- стереть слово справа от курсора;
Ctrl-Q Y - стереть остаток строки справа от курсора.
Меню опции COMPILE
COMPILE. Компилирует программу или модуль, который загружен в данный момент в активное окно редактора. Если в этой программе (модуле) содержатся обращения к нестандартным модулям пользователя, последние уже должны быть откомпилированы и храниться на диске в виде TPU-файлов. Опция вызывается непосредственно из редактора командой Alt-F9. .
МАКЕ. Создает программу, которая, возможно, содержит включаемые файлы и/или обращения к нестандартным модулям. Прежде всего компилируется начальный файл, если, разумеется, он определен опцией COMPILE /PRIMARY FILE (см. ниже). Если начальный файл не задан, компилируется файл из активного окна редактора. Если в процессе компиляции встретилось объявление нестандартного модуля, среда проверяет, были ли сделаны в соответствующем PAS-файле с текстом программы этого модуля какие-либо изменения с момента последней его компиляции и получения TPU-файла; если изменения были, TPU-файл создается вновь, а если изменения коснулись его интерфейсной части, будут перекомпилированы также все другие объявленные в программе модули, в которых содержатся обращения к измененному модулю. Однако, если PAS-файл с текстом измененного модуля не будет найден, система воспользуется существующим TPU-файлом без контроля его «свежести». Отметим, что этот контроль осуществляется по дате и времени создания PAS-файла и соответствующего ему TPU-файла. Если системная дата установлена неправильно, среда Турбо Паскаля может ошибочно откомпилировать PAS-файл, для которого существует адекватный ему TPU-файл.
Опция существенно упрощает процесс разработки многофайловых программ, так как всегда компилируется только тот минимум файлов, которых коснулись сделанные в программе изменения. Опция вызывается непосредственно из редактора клавишей F9.
BUILD. Эта опция полностью подобна опции МАКЕ за одним исключением: для всех TPU-файлов отыскивается соответствующий PAS-файл и осуществляется его перекомпиляция независимо от того, были ли сделаны в нем изменения или нет. После компиляции в этом режиме, Вы можете быть уверены в том, что в полученной программе учтены все изменения.
DESTINATION. Эта опция управляет выходом компилятора: если справа от нее стоит кодовое слово Memory (память), выходной файл компилятора будет сохранен в оперативной памяти и может затем сразу же запускаться из Турбо Паскаля без его загрузки с диска; если справа стоит кодовое слово Disk (диск), файл с кодом программы будет сохранен на диске в виде файла с расширением .ЕХЕ. Если объявлен начальный файл, его имя будет присвоено имени вновь создаваемого EXE-файла, в противном случае EXE-файл получит имя файла из
того окна редактора, которое содержит текст основной программы. Независимо от значения этого параметра TPU-файлы, создаваемые в режимах RUN/RUN, COMPILE/MAKE и COMPILE/BUILD, будут помещены на диск.
PRIMARY FILE. Задает имя начального файла. Если это имя задано, то вне зависимости от того, какая часть программы загружена в данный момент в окна редактора, ее компиляция в режимах RUN, MAKE и BUILD будет начинаться с этого файла. Чаще всего начальный файл содержит текст основной части программы. В этом случае при загрузке в окно (окна) редактора включаемого файла или файла-модуля компилятор сумеет правильно построить программу. Если начальный файл не указан, то компиляция в режимах RUN, MAKE и BUILD возможна только в том случае, когда в активном окне редактора находится основная программа.
CLEAR PRIMARY FILE. Очищает имя начального файла, заданное опцией PRIMARY FILE. INFORMATION. Показывает статистику программы.
Меню опции DEBUG
BREAKPOINTS. Эта опция позволяет просмотреть все контрольные точки и при необходимости удалить, переместить любую контрольную точку или задать условия ее работы. В диалоговом окне опции (рис.П1.6) приводится список всех контрольных точек с указанием имени файла (колонка Breakpoints list), номера строки в этом файле (колонка Line #), с которой связана контрольная точка, условия, при котором срабатывает останов программы в этой точке (колонка Condition), и количества проходов (колонка Pass), в течение которых останов не происходит. Цветным указателем выделяется текущая контрольная точка.
Puc.П1.6. Диалоговое окно опции Debug/Breakpoints
В качестве условия, управляющего работой контрольной точки, можно указать любое допустимое условное выражение, которое будет вычисляться в ходе исполнения программы; контрольная точка будет игнорироваться до тех пор, пока значение этого выражения не окажется равным TRUE. Вычисление выражения и останов будут происходить только тогда, когда с момента запуска программы будет выполнено заданное количество обращений к строке с контрольной точкой (колонка Pass).
С помощью командного поля Edit можно отредактировать текущую точку, т.е. установить новые ее параметры (файл, номер строки, условие и количество проходов). Задав новый файл и/или номер строки, можно переместить точку на новое место. Командное поле Delete используется для удаления текущей точки, а поле Clear all - для удаления всех контрольных точек. С помощью поля View можно загрузить в окно редактора и установить его содержимое так, чтобы увидеть соответствующую контрольную точку.
CALL STACK. Делает активным окно программного стека. В этом окне отображаются все вызовы процедур и функций. Внизу стека находится PROGRAM, т.е. имя Вашей профаммы, в вершине стека - текущая процедура (функция). Каждое новое обращение к процедуре (функции) отображается в этом окне в виде имени подпрограммы и списка параметров вызова. Эта опция вызывается из редактора командой Ctrl-F3.
REGISTER. Делает активным окно регистров. В этом окне отображается текущее состояние всех регистров микропроцессора ПК.
WATCH. Делает активным окно отладки. OUTPUT. Делает активным окно программы.
USER SCREEN. Делает активным окно программы и распахивает его на весь экран. Вызывается из редактора командой Alt-F5.
EVALUATE/MODIFY. Эта опция дает возможность в процессе отладки просмотреть содержимое любой переменной или найти значение любого выражения. При необходимости можно с ее помощью установить новое значение любой переменной. При обращении к ней на экране разворачивается диалоговое окно, содержащее три поля: EXPRESSION (выражение), RESULT (результат) и NEW VALUE (новое значение) (рис.П1.7).
Puc.П1.7. Диалоговое окно опции Debug/Evaluate/Modify
В первом поле следует ввести имя любой переменной или некоторое выражение. Сразу после того, как Вы нажмете Enter, в поле RESULT появится соответствующее значение или сообщение Unknown identifier (неопределенный идентификатор), если такая переменная не определена в Вашей программе. К моменту вызова опции программа должна находиться в режиме отладки, в противном случае это сообщение будет даваться для любых переменных и выражений с их участием.
Если Вы запросили значение переменной, Вы можете перевести курсор в нижнее поле NEW VALUE и установить новое значение переменной - это значение будет немедленно передано в программу.
При обращении к опции среда анализирует ближайшее окружение курсора в активном окне редактора и, если это возможно, выделяет идентификатор или константу, на которую указывает курсор. Выделенное автоматически переносится в поле EXPRESSION и предлагается в виде вычисляемого выражения. Таким образом, если перед вызовом этой опции установить курсор на интересующий Вас идентификатор, останется лишь нажать на Enter, чтобы тут же получить его значение в поле RESULT. Если предлагаемый идентификатор Вас не устраивает, можно его отредактировать или ввести новый. Для ввода нового нажмите на любую алфавитно-цифровую клавишу, и предлагаемый в окне идентификатор исчезнет, заменившись вновь введенным символом. Для перехода к редактированию предлагаемого идентификатора следует сразу же после появления окна нажать Ноте или End, затем перевести курсор к нужному месту идентификатора и отредактировать его с использованием клавиш Ins, Del и Backspace. Наконец, если сразу после вызова опции нажать End, а затем - клавишу перевода курсора вправо, появившийся в поле EXPRESSION идентификатор дополнится символом, расположенным справа от него в тексте программы. Теперь при каждом нажатии на клавишу перевода курсора вправо очередной символ из текста программы будет копироваться в поле EXPRESSION. Описанная возможность существенно облегчает ввод длинных выражений и составных идентификаторов.
Вы можете ввести (и вычислить) выражения с участием констант и переменных из Вашей программы, а также некоторых стандартных функций. Выражения составляются по правилам формирования выражений Турбо Паскаля, причем тип выражения может быть любым стандартным или определенным в программе типом. Фактически единственным ограничением на выражения является то, что в них нельзя использовать вызовы нестандартных функций (можно использовать только следующие предварительно определенные функции и константы: ABS, ADDR, CHR, DSEG, HI, IORESULT, LENGTH, LO, MAXAVAIL, MEMAVAIL, ODD, OFS, ORD, PRED, PTR, ROUND, SEG, SIZEOF, SPTR, SSEG, SUCC, SWAP, TRUNC, а также массивы MEM, MEMW и MEML).
Формат выводимого в поле RESULT результата по умолчанию совпадает со стандартным для Турбо Паскаля, но Вы можете управлять этим форматом с помощью специальных ключей. Ключ помещается в конце выражения (переменной) и отделяется от него запятой. Например, запрос
MemL[$40:Q] ,h
выдаст содержимое четырех байт оперативной памяти в шестнадцатеричном формате.
Допускаются следующие ключи:
С - формат CHAR (символьный);
S - формат STRING (строковый);
D - формат целых десятичных чисел;
$, H или Х- шестнадцатеричный формат;
Fn - формат REAL (вещественный); число п определяет количество значащих цифр в выводимом результате;
М - формат копии памяти: выводится содержимое переменной побайтно, начиная с младшего байта, в шестнадцатеричном формате; если ключ указан для выражения, он игнорируется;
Р - формат POINTER (указатель); результат выводится в виде PTR(SEG,OFS), например, Ptr($3EA1,$20);
R - формат RECORD (запись); выводится в круглых скобках список полей с указанием их значений, например: (X:1;Y:10;Z:S).
Перед ключей формата можно указать целое число, которое трактуется как коэффициент повторения. Если, например, в поле EXPRESSION содержится
UserList[0], 4D
то в качестве результата будет выдано в формате целых десятичных чисел значение четырех последовательных элементов массива User-List, начиная с элемента 0, т.е. UserList[0], UserList[1] и т.д. Коэффициент повторения относится только к переменным (по отношению к выражениям он игнорируется) и его можно указывать без ключа формата. Если, например,
var
UserList array [0..20] of integer;
то обращения
UserList[0] ,4D
UserList[0] ,4
дадут идентичные результаты.
Выражения в поле EXPRESSION можно задавать многократно, можно использовать также ранее введенные выражения из протокола опции. Для выхода из диалога используйте клавишу Esc или поля Cancel и . при работе с мышью. Опцию можно вызвать непосредственно из редактора командой Ctrl-F4. Отметим, что эта опция может использоваться как встроенный в Турбо Паскаль калькулятор.
ADD WATCH. С помощью этой опции можно указать отладчику те переменные и/или выражения, за изменением значений которых Вы хотели бы наблюдать при отладке программы. Указанные переменные и выражения вместе с их текущими значениями будут постоянно содержаться в окне наблюдения, доступ к которому возможен с помощью клавиши F6. Если Вы сделаете активным это окно, Вы сможете перемещаться в нем, вызывая при необходимости «прокрутку» его содержимого. Таким образом можно наблюдать за произвольным количеством переменных и выражений.
Опцию можно вызвать непосредственно из редактора командой CtrI-F7. При этом справедливо все сказанное выше относительно вызова опции DEBUG/EVALUATE/MODIFY, т.е. выделение идентификатора, его редактирование и дополнение, использование коэффициента повторения и ключей формата. Сразу после добавления отслеживаемого выражения активизируется окно наблюдения.
ADD BREAKPOINT. С помощью этой опции меню DEBUG Вы можете установить в текущей строке контрольную точку. Текущая строка - это строка с курсором в окне редактора. Если для нее установлена контрольная точка, строка выделяется цветом (яркостью). В программе можно установить произвольное количество контрольных точек. После запуска программы с установленными контрольными точками (точкой) отладчик прекратит исполнение программы перед выполнением того оператора, который содержится в первой (по логике работы программы) контрольной точке. При этом на экране появится окно редактора с контрольной точкой и среда перейдет к режиму отладки программы. Если контрольная точка задана для строки, не содержащей исполняемого оператора (например, для строки со словом BEGIN), программа остановится перед первым после этой строки исполняемым оператором. Останов в контрольной точке можно сделать условным. Однажды установленная контрольная точка действует на каждое очередное обращение к соответствующей строке программы.
В диалоговом окне опции поле Condition задает условие останова. Это может быть произвольное логическое выражение с использованием любых переменных, констант, вызовов функций. Если к моменту исполнения оператора с контрольной точкой это выражение имеет значение TRUE, произойдет останов прогона и среда перейдет к режиму отладки. Поле Pass count указывает количество обращений к оператору с контрольной точкой, после которого произойдет останов.
С помощью команды Ctrl-F8 контрольную точку можно установить/снять непосредственно из режима редактирования.
Меню опции EDIT
UNDO. В активном окне редактора восстанавливает только что уничтоженную командой Ctrl-Y или измененную строку. Турбо Паскаль создает специальный буфер изменений для каждой страницы редактора. Последовательное использование опции UNDO может отменить все сделанные Вами изменения текста. Опция может вызываться непосредственно из окна редактора клавишами Alt-Backspace.
REDO. Отменяет действие предыдущей команды UNDO.
CUT. Удаляет выделенный блок из окна редактора и переносит его в буфер обмена Clipboard (команды редактора для работы с блоками см. в гл.1). Опция вызывается непосредственно из редактора командой Shift-Del
COPY. Копирует выделенный блок из окна редактора в буфер обмена Clipboard. Опция вызывается непосредственно из редактора командой Ctrl-Ins.
PASTE. Копирует содержимое буфера обмена Clipboard в окно редактора. Содержимое буфера остается без изменений и может использоваться повторно. Опция вызывается непосредственно из редактора командой Shift-Ins.
CLEAR. Удаляет из окна редактора выделенный блок, но не помещает его в буфер. Удаленный фрагмент безвозвратно теряется. Опция вызывается непосредственно из редактора командой Ctrl-Del.
SHOW CLIPBOARD. Показывает содержимое буфера обмена.
Меню опции FILE
NEW. Создает и открывает новое окно редактора с именем NONAMExx.PAS. Порядковый номер XX окна зависит от количества окон со стандартным именем NONAME, открытых к моменту обращения к опции.
OPEN. Открывает новое окно редактора и помещает в него указанный дисковый файл. При обращении к этой опции открывается диалоговое окно (рис.П1.2), в поле ввода которого можно написать нужное имя файла. Если в имени опущено расширение, среда добавит стандартное расширение .PAS. Имени файла может предшествовать путь. Нужный файл Вы можете также выбрать из поля выбора, предварительно активизировав это поле мышью или клавишей Tab; при работе с мышью для загрузки нужного файла из списка в поле выбора укажите на имя файла мышью и дважды подряд с небольшим интервалом нажмите левую кнопку. Вы можете открыть доступ к протоколу использования этой опции и выбрать в этом протоколе одно из ранее использованных имен. Для этого при активном поле ввода нажмите клавишу смещения курсора вниз или укажите мышью на поле
справа от поля ввода и нажмите ее левую кнопку. В открывшемся окне протокола подведите указатель клавишами смещения курсора к нужной строчке и нажмите Enter. Командное поле OPEN (открыть) используется для команды чтения файла в новое редакторское окно, REPLACE (заменить) - для замены существующего в активном редакторском окне текста на текст, считанный из файла.Рис.П1.2. Диалоговое окно опции File/Open
Опция вызывается непосредственно из редактора клавишей F3.
SAVE. Записывает содержимое активного окна редактора в дисковый файл. Если это окно связано с именем NONAMExx.PAS, среда запросит новое имя файла (см. ниже опцию SA VE AS). Опция вызывается непосредственно из редактора клавишей F2.
SAVE AS. Записывает содержимое активного окна редактора в дисковый файл под другим именем. Диалоговое окно этой опции изображено на рис.П1.3. В поле ввода Вы должны написать имя того файла, в который будет переписано содержимое активного окна редактора. Вы можете выбрать уже существующий файл из поля выбора или из протокола опции. В этом случае в зависимости от настройки среды старое содержимое файла будет уничтожено или сохранено в виде страховочной копии с расширением .ВАК (настройку среды см. в опции OPTIONS/ENVIRONMENT).
SAVE ALL. Записывает содержимое всех окон редактора в соответствующие дисковые файлы.
CHANGE DIR. Позволяет изменить текущий каталог пользователя. В поле выбора диалогового окна этой опции (рис.П1.4) приводится дерево каталогов текущего диска.
Перемещаясь по этому дереву, можно указать на нужный каталог, после чего с помощью командного поля CHDIR (CHange DIRectory - изменить каталог) сменить текущий каталог. Если выбран указатель DRIVES (дисководы), можно изменить также текущий диск. Командное поле REVERT (возвращаться) позволит восстановить прежний текущий каталог, если Вы по каким-либо причинам решите отказаться от сделанного Вами изменения (эта команда действует до момента закрытия окна).
PRINT. Печатает содержимое активного окна редактора на принтере или выводит его в файл (см. опцию PRINTER SETUP).
PRINTER SETUP. Настраивает среду на печать текущего файла. Поле ввода Filter path должно содержать имя программы-фильтра PRNFLTR.EXE и, возможно, путь к этой программе. Поле ввода Command line содержит выбор принтера/файла и параметров печати. Турбо Паскаль поддерживает три типа принтеров: матричные принтеры Epson, лазерные принтеры HP LaserJet и так называемые постскрипт-принтеры, т.е. принтеры, «понимающие» язык описания страниц PostScript. Для указания нужного типа принтера в поле Command line помещаются следующие строки:
Рис.П1.3. Диалоговое окно опции File/Save as
Рис.П1.4. Диалоговое окно опции File/Change dir
DOS SHELL. Обеспечивает временный выход в ДОС. Турбо Паскаль остается резидентным в оперативной памяти и занимает значительную ее часть, поэтому под управлением ДОС в этом состоянии могут выполняться только сравнительно небольшие по объему программы. Чтобы увеличить объем свободной памяти для ДОС, необходимо перед обращением к этой опции сбросить режим отладки клавишами Ctrl-F2. Для возврата в Турбо Паскаль нужно в ответ на запрос ДОС напечатать слово EXIT и нажать Enter.
EXIT. Завершает работу с Турбо Паскалем. Опция вызывается непосредственно из редактора командой Alt-X.
Меню опции HELP
CONTENTS. Выводит на экран содержание справочной службы.
INDEX. Выводит на экран алфавитный список всех ссылок справочной службы. Вызывается из редактора командой Shift-F1.
TOPIC SEARCH. Осуществляет поиск в окрестности курсора зарезервированного слова или имени стандартной процедуры (функции) и дает соответствующую справку. Вызывается из редактора командой Ctrl-F1.
PREVIOUS TOPIC. Выводит на экран предыдущее справочное сообщение. Вызывается из редактора командой Alt-F1.
HELP ON HELP. Дает справку о том, как пользоваться справочной службой. Отметим, что в сообщениях справочной службы все перекрестные ссылки выделяются цветом. Вы можете подвести к любой из них указатель мыши и двойным нажатием на ее левую кнопку вызвать на экран соответствующее справочное сообщение (или сместить к ней указатель с помощью клавиш перевода курсора и нажать Enter).
FILES. С помощью этой опции Вы можете установить нужные файлы справочной службы.
COMPILER RIRECTIVES. Показывает справку о директивах компилятора.
RESERVED WORDS. Показывает справку о зарезервированных словах.
STANDARD UNITS. Показывает справку о стандартных модулях.
TURBO PASCAL LANGUAGE. Показывает справку о языке Турбо Паскаль.
ERROR MESSAGES. Показывает справку о сообщениях об ошибках.
ABOUT. Выводит информацию о авторских правах и версии Турбо Паскаля.
Меню опции OPTIONS
COMPILER. Эта опция задает несколько параметров, с помощью которых Вы можете управлять генерацией машинного кода программы. Вид диалогового окна этой опции показан на рис.П1.8.
Рис.П1.8. Диалоговое окно опции Options/Compiler
Опция Force far calls определяет генерацию машинного кода, рассчитанного на дальнюю модель памяти. В соответствии с архитектурой центрального процессора ПК могут использоваться две модели вызова процедур и функций: ближняя (NEAR) и дальняя (FAR). Ближняя модель обеспечивает адресацию в пределах текущего сегмента, дальняя используется для организации межсегментных связей. Если опция установлена в активное состояние, все вызовы процедур и функций будут использовать дальнюю (межсегментную) модель, в противном случае - ближнюю (внутрисегментную) модель. Ближняя модель дает более экономный код программы и исполняется быстрее, однако при организации оверлея и вызове из программы других программ с помощью процедуры ЕХЕС нужно использовать дальнюю модель.
При активном состоянии опции Overlays allowed компилятор генерирует дополнительный код при компиляции оверлейных модулей. Этот код позволяет передавать строки и множества в качестве фактических параметров при обращении из одного оверлейного модуля в другой. Отметим, что Турбо Паскаль считает модуль оверлейным только в том случае, когда он откомпилирован с активной опцией Overlays allowed.
Опция Word align data определяет способ выравнивания переменных и констант в памяти: если опция активна, каждая переменная и константа начинается в байте с четным адресом, т.е. выравнивается на начало машинного слова, если неактивна, переменные и константы располагаются в памяти сплошной цепочкой. Выравнивание по словам увеличивает скорость выполнения программ ценой несколько неэкономного расходования памяти.
Активное состояние опции 286 instructions предписывает компилятору создавать код программы с полным набором команд микропроцессора Intel 80286. В неактивном состоянии опции компилятор порождает код, соответствующий набору команд микропроцессора Intel 8088 и представляющий собой подмножество команд микропроцессора Intel 80286. В целях переносимости программ имеет смысл устанавливать неактивное состояние этой опции, так как в процессе счета программа не проверяет фактическое наличие микропроцессора Intel 80286 и не может эмулировать его систему команд.
В активном состоянии опции Range checking генерируется дополнительный код для проверки возможного выхода значений переменных за границы диапазона. Программа, откомпилированная с активной опцией, занимает несколько больший объем памяти и исполняется медленнее, зато дает возможность контролировать выход индексов за пределы, определенные в описании массивов.
Опция Stack checking аналогична опции Range checking и контролирует возможное переполнение программного стека.
Опция I/O checking используется для включения/отключения генерации программных кодов, контролирующих правильность операций ввода-вывода.
Установка в неактивное состояние опции Strict var-strings позволяет отказаться от проверки на совпадение длины формального и фактического параметра-строки при обращении к процедуре или функции. Если установлено активное состояние этой опции, компилятор вставляет в программу команды для сравнения длины строк.
В активном состоянии опции Complete boolean eval все логические выражения вычисляются в программе полностью, в неактивном состоянии вычисление прекращается в тот момент, когда становится ясен окончательный результат. Допустим имеется такой фрагмент программы:
.....
Function MyFunc(var x : integer) : Boolean
begin
x := x+1;
MyFunc := x>10
end;
.....
x := 0;
if False and MyFunc(x) then x := 10;
.....
После его компиляции с неактивной опцией Complete boolean eval исполнение этого фрагмента даст Х=0, так как не произойдет обращения к функции MYFUNC: выражение FALSE AND MYFUNC всегда имеет значение FALSE вне зависимости от того, что является вторым операндом операции AND. Если же к моменту компиляции программы было установлено активное состояние этой опции, вычисление логического выражения продолжится до конца, состоится вызов функции MYFUNC и переменная X получит значение 1. Разумеется, и в том и в другом случае не будет исполняться оператор х := 10.
Активное состояние опции Extended syntax дает возможность использовать в программе расширенный синтаксис Турбо Паскаля, который разрешает вызывать определенные программистом функции не только в выражениях, но и в виде отдельного оператора, подобно вызову процедуры. Отметим, что эта опция не распространяется на стандартные функции.
Опция 8087/ 80287 ориентирует компилятор на работу с арифметическим сопроцессором. При неактивном состоянии все операции с вещественными данными реализуются программно и в программе разрешается использовать только один вещественный тип REAL. Если опция установлена в активное состояние, компилятор будет создавать код, содержащий обращения к числовому сопроцессору, причем программе становятся доступны также типы SINGLE, DOUBLE, EXTENDED и СОМР (см. гл.4).
Опция Emulation указывает компилятору, надо ли создавать такой код программы, который будет одинаково пригоден при работе на ПК с арифметическим сопроцессором или без него. Программа сама определит наличие сопроцессора и, если он имеется, будет использовать все его возможности; если же сопроцессора нет, его работа будет эмулироваться программно. В этом случае программе становятся доступны все вещественные типы. Активное состояние этой опции увеличивает размеры программы за счет подключения процедур эмуляции, но делает ее независящей от аппаратных особенностей ПК. Отметим, что опция Emulation игнорируется, если неактивна опция 8087/80287.
Активное состояние опции Debug information устанавливает режим генерации отладочной информации в процессе компиляции программы. Отладочная информация представляет собой специальные таблицы, позволяющие установить однозначную связь между операторами исходного текста программы и теми кодами, которые порождает компилятор. Только после компиляции с активной опцией Debug information становится возможной автоматическая локализация ошибки периода исполнения, а также пошаговая отладка программы. Активное состояние опции увеличивает размер ТРU-файлов и объем оперативной памяти, занимаемой программой, если она работает под управлением среды Турбо Паскаля, но не влияет на размер той же программы, запускаемой вне среды под управлением ДОС. Иными словами, дополнительные таблицы отладки загружаются в память только средой Турбо Паскаля, а ДОС игнорирует эту информацию.
Опция Local symbols аналогична опции Debug information и относится к именам локальных и глобальных переменных: если опция установлена в активное состояние, среда получит возможность доступа на этапе отладки к переменным по их именам.
В поле Conditional defines Вы можете задать условия, которые используются в операторах условной компиляции (см. дальше П.П1.3).
MEMORY SIZES. В диалоговом окне опции OPTIONS/MEMORY SIZES используются три поля ввода. С их помощью можно регулировать размеры памяти, которую занимает работающая программа:
Stack size - размер программного стека; по умолчанию 16384 байта, максимум - 65535 байт;
Low heap limit - минимальный размер кучи; по умолчанию 0;
High heap limit - максимальный размер кучи; по умолчанию 655360 байт; этот параметр не может быть меньше параметра Low heap limit.
Для оценки необходимых программе объемов памяти следует учесть, что все локальные переменные при каждом обращении к процедуре (функции) размещаются в стеке, а при выходе из нее стек освобождается. Таким образом, требуемый размер стека определяется количеством вложенных вызовов процедур (функций) и суммарным количеством их локальных переменных. Величина кучи определяется реальными потребностями программы в динамической памяти. Если установлен максимально возможный размер кучи 655360 байт, то такая программа после загрузки займет всю доступную оперативную память, а это исключит возможность запуска из нее других программ.
LINKER. В диалоговом окне этой опции имеются две группы переключаемых опций, с помощью которых регулируется режим работы компоновщика Турбо Паскаля: опции группы Map file управляют выходным документом компоновщика, опции группы Link buffer - использованием памяти. Выходной документ компоновщика (карта распределения памяти) бывает полезен при отладке программы с помощью внешнего отладчика. Опция Off запрещает формирование карты. Опция Segments формирует сегментную карту с указанием адреса запуска программы и сообщениями об ошибках периода компоновки программы. Опция Public дает такую же карту, как и опция Segments, и дополнительно приводит список внешних символов в алфавитном порядке. Наконец, опция Detailed дает полную карту распределения памяти. Опция Memory предписывает компоновщику использовать оперативную память для размещения своих таблиц и временного хранения компонуемой программы, при активной опции Disk компоновщик для этих целей использует пространство диска. Если активна опция Memory, компоновщик будет работать значительно быстрее, однако при разработке крупных программ ему может не хватить оперативной памяти и он не скомпонует программу.
Вообще, следует помнить о том, что даже довольно большой объем оперативной памяти ПК (640 Кбайт) может оказаться недостаточным для разработки с помощью среды Турбо Паскаля крупных программных проектов: ведь сам Турбо Паскаль занимает в памяти 304 Кбайт. Если обнаружена нехватка памяти, среда дает сообщение
Out of memory
(не хватает памяти)
и устанавливает курсор в конец программы. В этом случае следует прежде всего попытаться сэкономить память за счет установки в активное состояние опции Disk.
(Турбо Паскаль 7.0 включен в комплект поставки более мощной системы программирования Borland Pascal with objects 7.0. Входящая в эту систему среда программирования ВР использует расширенную память для размещения таблиц компилятора и компоновщика. В то же время язык Турбо Паскаля представляет собой подмножество языка ВР, что дает возможность компилировать программы Турбо Паскаля без какой-либо их переделки в среде ВР. Используйте, если это возможно, среду ВР для разработки крупных программ.)
Еще примерно 44 Кбайта памяти можно сэкономить за счет отказа от автоматической загрузки системной библиотеки TURBO.TPL (см. ниже опцию OPTIONS/ENVIRONMENT/STARTUP). Наконец, может оказаться необходимым отказ от услуг самой среды Турбо Паскаля на этапе прогона программы. Для этого нужно установить опцию COMPILE/DESTINATION в состояние DISK, создать программу с помощью опций МАКЕ или BUILD, выйти из среды и запустить программу. В этом случае программа получает в свое распоряжение всю память ПК, но Вы лишаетесь возможности отлаживать ее средствами встроенного отладчика. В некоторых случаях за счет оверлейной структуры программы (см. гл. 11) ее размеры удается уменьшить настолько, что даже крупная программа помещается в памяти вместе со средой. Если, несмотря на все меры экономии, памяти все-таки не хватает, можно полностью отказаться от услуг среды и использовать автономный компилятор-компоновщик ТРС.ЕХЕ.
DEBUGGER. Эта опция определяет используемый отладчик и режим обновления экрана дисплея в процессе отладки. Если активна опция Integrated, к программе будет добавлена информация, необходимая для работы встроенного отладчика. Только в этом состоянии опции можно использовать контрольные точки и пошаговую отладку. При активизации опции Standalone к ЕХЕ-фгмлу программы будут добавлены соответствующие таблицы, которые позволят вести отладку программы вне среды Турбо Паскаля с помощью внешнего отладчика TD.EXE. Три других опции сообщают среде, в каких случаях следует переключать экран с воспроизведения окна редактора на окно программы. В режиме Smart среда будет переключать экран по мере надобности - только если в очередном операторе программы было обращение к экрану для вывода или к клавиатуре для ввода. Переключение на окно программы будет также и тогда, когда отладчик «перескакивает» через вызов процедуры (функции) по клавише F8, но в этой процедуре (функции) есть обращение к экрану. Если установлен режим Always, переключение будет происходить перед исполнением любого оператора программы. Наконец, в режиме None среда никогда не переключает экран, даже если он требуется для вывода данных, т.е. вывод программы будет накладываться на текст программы. Испорченный в результате такого прогона текст в окне редактора можно обновить с помощью опции Window/Refresh display.
DIRECTORIES. Четыре поля ввода в диалоговом окне опции OPTIONS /DIRECTORIES позволяют определить четыре группы функциональных каталогов Турбо Паскаля.
EXE & TPU directories указывает тот каталог, в который будут помещаться готовые к работе программы в виде EXE-файлов и результат компиляции модулей в виде TPU-файлов. Если каталог не указан, эти файлы будут помещаться в текущий каталог - именно такое состояние этой опции соответствует стандартной настройке среды. Не рекомендуется устанавливать в этой опции каталог, содержащий файлы системы Турбо Паскаль.
Include directories - здесь следует перечислить те каталоги, в которых Турбо Паскаль будет искать включаемые файлы, т.е. файлы, задаваемые директивой компилятору {$1 <имя файла>). При указании нескольких каталогов, они перечисляются через точку с запятой. Отметим, что поиск в этих каталогах идет только в том случае, если включаемый файл не найден в текущем каталоге.
Unit directories - задает каталоги, в которых среда ищет TPU-файлы, если они не обнаружены в текущем каталоге. В этой опции обычно указывается каталог, содержащий файл GRAPH.TPU (если в программе используются графические средства Турбо Паскаля), а также каталог, указанный в поле EXE & TPU directories. При перечислении нескольких каталогов они разделяются точкой с запятой.
Если в своей программе Вы используете внешние процедуры и функции (см. гл. 11), они должны быть представлены в виде OBJ-файлов. Поле Object directories задает один или несколько каталогов, в которых Турбо Паскаль будет искать эти файлы, если их нет в текущем каталоге.
ENVIRONMENT. При вызове этой опции разворачивается еще одно дополнительное меню, содержащее пять опций. Эти опции описываются ниже.
ENVIRONMENT/Preferences. Диалоговое окно этой опции показано на рис.П1.9.
Опции группы Screen sizes определяют размер текстового экрана: если активна опция 25 lines, йа экране будет 25 строк, если активна опция 43/50 lines, на экране будет 43 или 50 строк в зависимости от того, оснащен ли Ваш ПК дисплеем с адаптером EGA или VGA. Опции Source tracking определяют способ использования текущего окна редактора в процессе отладки. Если активна опция New window, прослеживаемая программа будет загружаться в новое окно редактора (если, разумеется, она еще не загружена в одно из ранее открытых окон), если активна опция Current window, - в текущее окно.
Рис.П1.9. Диалоговое окно опции Options/Environment/Preferences
Группа опций Auto save регулирует запись на диск текущей программы и информации о ней. Опция Editor flies предписывает автоматически сохранять на диске содержимое всех окон редактора перед прогоном программы, если только текст в окне изменялся после последней записи на диск. Чрезвычайно полезная опция, которую я настоятельно рекомендую всегда устанавливать в активное состояние - автосохранение измененного текста программы избавит Вас от многих неприятностей при работе с плохо отлаженной программой или на ПК с ненадежной (сбойной) памятью. Разумеется, дополнительное обращение к диску затягивает переход к прогону/отладке, однако Вы по достоинству оцените эту услугу среды после первого же «зависания» программы. Опция Environment задает режим автоматического сохранения текущей настройки среды Турбо Паскаля в файле конфигурации TURBO.TP. Настройка среды будет сохранена автоматически при временном или окончательном выходе из Турбо Паскаля, если она изменилась с момента последней записи в этот файл. Активное состояние опции Desktop требует от среды автоматически сохранять на диске в файле TURBO.DSK информацию об открытых окнах, их размерах, контрольных точках и т.п. Использование этой опции позволит при очередной загрузке Турбо Паскаля автоматически получить точную копию того состояния среды, в котором Вы покинули ее в последний раз. Следует учесть, что опция Desktop игнорируется, если не был создан конфигурационный файл TURBO.TP.
Группа опций Desktop file уточняет режим создания файла TURBO.DSK: если выбрана опция None, файл не будет создаваться, даже если опция Desktop активна; опция Current directory определяет размещение этого файла в текущем каталоге, а опция Configfile directory - в том же каталоге, где размещается конфигурационный файл TURBO.TP.
ENVIRONMENT/Editor. Диалоговое окно этой опции показано на рис.П 1.10.
Puc.П1.10. Диалоговое окно опции Options/Environment/Editor
Активное состояние опции Create backup files заставит среду при записи файла с текстом программы проверить, существует ли уже одноименный файл; если существует, он будет переименован в файл с тем же именем и расширением .ВАК, что позволит иметь на диске предыдущую версию только что сохраненной информации. Опция Insert mode указывает на основной режим работы редактора: если она активна, редактор работает в режиме вставки, неактивна - в режиме замены. Опция определяет лишь начальный режим работы сразу после загрузки Турбо Паскаля, так как в процессе работы с редактором Вы всегда можете переключить режим клавишей Ins. Активизация опции Autoindent mode облегчит Вам выделение отступами условных и составных операторов, так как в этом случае каждая новая строка будет начинаться с таким же отступом от левого края экрана, что и предыдущая строка. Опция Use tab characters определяет использование символов табуляции: если она активна, нажатие на клавишу табуляции вставит в текст специальный символ табуляции, если неактивна, в текст будет вставлено нужное число пробелов. Дополнительно к этому активная опция Optimal fill заставит редактор вставлять минимально возможное число символов табуляции и пробелов при нестандартной длине табуляционного интервала (не 8 символов). Активная опция Backspace unindents связывает с клавишей Backspace функции уничтожения предыдущего символа с учетом автоотступа: если слева от курсора нет ни одного значащего символа, нажатие на Backspace сдвинет курсор к позиции предыдущего автоотступа. Обычно эта опция устанавливается в активное состояние одновременно с опцией Autoindent mode. Опция Cursor through tabs определяет перемещение курсора по строке при нажатии клавиши смещения курсора влево или вправо: если она активна, курсор смещается скачком всякий раз, когда в строке встречается символ табуляции; при неактивной опции он всегда смещается только на одну позицию. В поле Tab size Вы можете задать длину табуляционного интервала.
ENVIRONMENT/Mouse.
Группа опций Right mouse button определяет способ использования правой кнопки мыши в сочетании с нажатой и удерживаемой клавишей Ctrl:
Например, если активной сделана опция Go to cursor, то при работе с мышью нажатие на ее правую кнопку при нажатой и удерживаемой клавиши Ctrl будет эквивалентно вызову опции Run/Go to cursor или нажатию на клавишу F4.
При обращении к справочной службе в тексте могут встретиться ссьшки на другие разделы справочных сообщений. Эти ссьшки выделяются в справочном сообщении цветом (в стандартной настройке это - яркий желтый цвет). Соответствующие справки можно вызвать с помощью мыши: нужно установить указатель на ссылку и дважды подряд с небольшим промежутком времени (доли секунды) нажать левую кнопку легкими отрывистыми ударами. Этот прием требует определенной сноровки, так как слишком большая пауза между нажатиями воспринимается средой как два нажатия на левую кнопку, а не как команда вызова соответствующей справки. Поле Mouse double click в диалоговом окне опции Environment/Mouse используется для регулирования промежутка времени, в течение которого два нажатия воспринимаются как одна команда: для увеличения интервала установите указатель мыши ближе к правой границе поля и нажмите левую кнопку.
Переключаемая опция Reverse mouse buttons используется для реверсирования функции кнопок мыши: при ее активизации нажатие на левую кнопку воспринимается средой как нажатие на правую кнопку и наоборот. Эта опция может быть полезна в том случае, если Вам удобнее работать с мышью левой рукой.
ENVIRONMENT/Startup. На рис.П1.11 показан вид диалогового окна этой опции.
С помощью опции Dual monitor support можно сообщить среде, что Ваш ПК оснащен двумя дисплеями. После активизации этой опции на дополнительный дисплей будет выводиться окно прогона программы.
Опция Graphics screen save обеспечивает сохранение в оперативной памяти ПК копии графического экрана. Эту опцию следует активизировать, если Вы разрабатываете (и отлаживаете в среде Турбо Паскаля) программу, использующую графические средства ПК. При активизации этой опции Вы всегда сможете увидеть в окне прогона программы те графические изображения, которые она формирует.
Опция EGA/ VGA palette save позволяет сохранить в оперативной памяти цветовую палитру экрана, поэтому изменения этой палитры в отлаживаемой программе не будут влиять на вид окон среды Турбо Паскаль.
Отметим, что обе предыдущие опции используют часть оперативной памяти для сохранения графического экрана и цветовой палитры, поэтому их следует отключать, если Ваша программа критична к объему доступной памяти и/или не использует графические средства ПК и не меняет цветовую палитру.
Опция CGA snow checking может быть неактивна, если Ваш ПК оснащен адаптерами типа EGA или VGA. Но если в нем используется адаптер типа CGA, неактивное состояние этой опции будет создавать помехи на экране в виде «снега» при смене на нем изображения (активное состояние этой опции несколько замедляет темп обновления информации на экране, но зато гарантирует отсутствие «снега» на дисплеях любого тида).
Puc.П1.11. Диалоговое окно опции Options/Enviroment/Startup
Опцию LCD color set следует активизировать только в том случае, когда ПК оснащен жидкокристаллическим дисплеем (обычно такие дисплеи устанавливаются на переносимых ПК).
На машинах класса IBM PC/XT может устанавливаться отображаемая память типа EMS (на современных ПК с процессорами 80386 и выше эта память может эмулироваться). Активизация опции Use expanded memory укажет среде на возможность использования этой памяти для размещения оверлейных модулей, сохранения копий графического экрана и некоторых других функций (см. ниже).
При стандартной настройке среды сразу после загрузки Турбо Паскаля в оперативную память считывается системная библиотека SYSTEM.TPU из библиотечного файла TURBO.TPL. Вы можете отказаться от этого (и таким образом сэкономить для программы около 44 Кбайт), если сделаете неактивной опцию Load TURBO.TPL. Следует учесть, что в этом случае системная библиотека должна быть выделена в виде отдельного файла SYSTEM.TPU в каталоге, путь к которому указан в поле Unit directories опции Options/ Environment/Directories. Извлечение модуля SYSTEM.TPU из библиотеки TURBO.TPL осуществляется с помощью утилиты TPUMOVER.EXE, входящей в комплект поставки системы Турбо Паскаль. Для этого используется команда ДОС вида:
TPUMOVER TURBO.TPL *SYSTEM.TPU
(перед именами утилиты, библиотеки и системного модуля можно указывать необходимые пути; символ * перед именем системного модуля определяет операцию извлечения модуля). Если программа использует другие библиотеки, входящие в TURBO.TPL (CRT, DOS, PRINTER, OVERLAY - см, гл.10), их также нужно выделить в отдельные TPU-файлы.
В поле Window heap size задается размер оперативной памяти (в килобайтах), который выделяется для хранения неактивных окон среды, в поле Editor heap size - для хранения содержимого окон редактора, а в поле Overlay heap size - для хранения оверлейных модулей. Если активизирована опция Use expanded memory, эта память выделяется из дополнительной памяти ПК, если неактивна - из основной. Соответствующей установкой значений в этих полях можно регулировать размеры буферной памяти в следующих пределах:
В поле Swap file directory можно указать «быстрый» диск, с которым среда будет производить динамический обмен данными (свопинг) в процессе своей работы. В качестве «быстрого» диска обычно указывается виртуальный диск, т.е. участок оперативной памяти, который используется подобно механическому диску (виртуальный диск организуется средствами ДОС). Если в этом поле ничего не указано, для свопинга используется текущий каталог.
ENVIRONMENT/Colors. С помощью диалогового окна этой опции Вы можете установить нужную цветовую палитру отдельных элементов среды Турбо Паскаля. В колонке Group указаны следующие элементы среды:
Desktop вид экрана; Watches окно отладки;
Menus меню; Call stack окно стека;
Dialogs диалоговые окна; Register окно регистров;
Editor окна редактора; Output окно программы;
Help окно помощи; Compiler окно компилятора.
В колонке Item детализируются эти элементы (например, цвет рамки окна, цвет основных символов, цвет выделения и т.п.). В поле Foreground задается цвет символов, а в поле Background - цвет фона.
OPTIONS/Open. Здесь Вы можете указать имя конфигурационного файла, из которого среда должна получить информацию о своей настройке.
OPTIONS/Save. Сохраняет текущую настройку среды в конфигурационном файле.
OPTIONS/Save as. С помощью этой опции из меню Options можно указать каталог и файл, в котором среда будет сохранять свою настройку (по умолчанию это файл TURBO.TP).
Меню опции RUN
RUN. Осуществляет компиляцию, компоновку и исполнение (прогон) программы из файла редактора. Компиляция проходит в режиме МАКЕ (см. ниже опцию COMPILE/MAKE). Если программа уже откомпилирована к этому моменту, то среда сразу начнет ее прогон. Опция вызывается непосредственно из редактора командой Ctrl-F9.
GO TO CURSOR. Начинает или продолжает режим отладки исполняемой программы под управлением встроенного отладчика. Вначале осуществляются все действия по компиляции и компоновке программы, затем программа начинает работать обычным образом (экран переходит в режим воспроизведения окна программы) и останавливается перед выполнением первого оператора из той строки, на которую указывает курсор. В этот момент экран возвращается в режим воспроизведения окна редактора, а строка с курсором выделяется цветным прямоугольником. Можно перевести курсор к новой строке и вновь выбрать эту опцию - программа остановится перед выполнением нового оператора и т.д. В этом режиме доступны все средства встроенного отладчика. Для прекращения отладки нажмите клавиши Ctrl-F2. Опция вызывается непосредственно из редактора клавишей F4.
TRACE INTO. Начинает или продолжает режим отладки исполняемой программы под управлением встроенного отладчика. Если к моменту обращения к этой опции режим отладки не был запущен, он запускается точно так, как если бы была вызвана опция GO TO CURSOR, однако программа останавливается перед первым исполняемым оператором, т.е. указатель будет указывать на слово BEGIN, открывающее раздел операторов основной программы. Если режим отладки уже был запущен, вызов этой опции приведет к выполнению всех действий, запрограммированных в текущей строке, и указатель сместится к следующей строке программы. Если текущая строка содержит обращение к процедуре или функции, управление будет передано внутрь этой процедуры (функции) и программа остановится перед исполнением ее первого оператора. Таким образом, с помощью этой опции можно по шагам прослеживать исполнение всех нестандартных процедур (функций). Опция вызывается непосредственно из редактора клавишей F7.
STEP OVER. Также, как и предыдущая опция, начинает или продолжает пошаговое прослеживание работы программы, но не прослеживается работа вызываемых процедур и функций. Опция вызывается непосредственно из редактора клавишей F8.
PROGRAM RESET. Сбрасывает все ранее задействованные отладочные средства и прекращает отладку программы. Удаляет исполнявшуюся программу из памяти и закрывает все открытые в ней в этот момент файлы. Опция вызывается непосредственно из редактора командой Ctrl-F2.
PARAMETERS. Позволяет задать текстовую строку параметров, которые ДОС передает вызываемой программе. Эта строка передается программе, находящейся в окне редактора, при ее прогоне.
Меню опции SEARCH
FIND. Обеспечивает поиск нужного фрагмента текста в активном окне редактора. В момент обращения к этой опции в поле выбора диалогового окна (рис.П 1.5) содержится слвво, на которое указывал курсор в активном окне редактора. Вы можете ввести новое слово или текстовую строку, положение которой в редактируемом файле Вам необходимо найти, или выбрать эту строку из протокола. После нажатия на Enter (или выбора командного поля ОК) редактор отыщет этот фрагмент в тексте и установит курсор на его начало.
Поиск управляется следующими переключаемыми опциями:
Case sensitive - учитывать величину букв (т.е. прописные буквы считать отличающимися от строчных; опция определена только для латинских букв);
Whole words only - искать по совпадению целых слов (если текст будет обнаружен внутри более длинного слова, поиск продолжится дальше);
Regular expression - искать по выражению-описателю текста (см. ниже);
Forward - направление поиска вниз по тексту;
Backward - направление поиска вверх по тексту;
Global - искать во всем тексте;
Selected text - искать только в выделенном блоке;
From cursor - начать поиск от текущего положения курсора;
Entire scope - искать от начала текста.
Puc.П1.5. Диалоговое окно опции Search/Find
В поле ввода можно ввести выражение-описатель текста, которое формируется из следующих специальных символов:
^ - в начале строки в выражении-описателе означает начало текстовой строки в искомом тексте; $ - в конце строки в выражении-описателе показывает конец текстовой строки; . - на этом месте может стоять любой символ;
* - после любого символа означает любое количество (в том числе ноль) этих символов, которые могут стоять вместо него; например, bo* означает b, bo, boo, bot, be ;
+ - после символа означает один или больше (не ноль) этих символов, которые могут стоять вместо него; например, bо+означает bo, bot, boo, но не b или be;
[] - означает один из символов, который может стоять внутри скобок, но не любой другой символ; например, [bot] означает b, о или t;
[^] - символ л в начале строки, заключенной в квадратные скобки, означает отрицание; например [^bot] -это любые символы, кроме b, o или t;
[ - ] - символ «-» между двумя символами, обрамленными квадратными скобками, определяет диапазон; например, [b-о] означает любые символы от b до о включительно;
\ - перед специальным символом означает сам символ; например, \^ означает сам символ ^, а не начало строки.
REPLACE. Отыскивает в окне редактора нужный текстовый фрагмент и заменяет его на новый. Диалоговое окно этой опции похоже на предыдущее со следующими отличиями:
в поле ввода Text to find нужно ввести искомый текст или выражение-описатель, в поле New text - тот текст, который будет вставляться вместо искомого;
переключаемая опция Prompt on replace указывает на необходимость запросить подтверждение у программиста, прежде чем производить замену найденного фрагмента;
командное поле Change all используется для поиска и замены всех обнаруженных вхождений фрагмента текста (поле ОК или нажатие на Enter означает только однократный поиск-замену).
SEARCH AGAIN. Повторяет поиск или поиск и замену фрагмента текста для ранее установленных параметров.
GO TO LINE NUMBER. Осуществляет позиционирование курсора в окне редактора на строку с указанным номером.
SHOW LAST COMPILER ERROR. Показывает строку текста программы, в которой была обнаружена синтаксическая ошибка при последнем прогоне компилятора.
FIND ERROR. Отыскивает в тексте программы строку, вызвавшую ошибку периода исполнения программы. Как правило, при работе в среде Турбо Паскаля ошибка периода прогона программы (например, деление на ноль) вызывает автоматическое прекращение прогона, в окне редактора появляется текст программы и курсор показывает то место, в котором возникла эта ошибка. Если программа компилировалась без привлечения средств отладки (см. ниже опцию OPTIONS/COMPILER) или исполнялась вне среды Турбо Паскаля, нужно записать или запомнить два шестнадцатеричных числа, которые появляются на экране в сообщении об ошибке и указывают адрес ошибочной ситуации (задаются в формате SSSS:OOOO, где SSSS -сегмент, а ОООО - смещение), затем загрузить Турбо Паскаль (если программа исполнялась вне среды) и вызвать эту опцию. После ввода адреса ошибки, среда начнет поиск ошибочного оператора.
FIND PROCEDURE. Позволяет в режиме отладки отыскать в тексте программы нужную процедуру или функцию.
Меню опции TOOLS
MESSAGES. Активизирует окно сообщений. Окно сообщений содержит вывод инструментальных программ типа GREP и позволяет использовать эти сообщения для поиска нужных фрагментов в текстах программ. Для поиска фрагмента подведите цветной указатель окна Messages к нужному сообщению и нажмите Пробел или дважды щелкните по этому сообщению мышью. Среда отыщет и покажет файл с нужным фрагментом текста программы.
GO TO NEXT. Ищет фрагмент, заданный следующим сообщением в окне Messages. Закрывает окно Messages, открывает нужный файл и позиционирует курсор на строку, соответствующую следующему по отношению к текущему (т.е. выделенному цветом) сообщению в окне. Опция вызывается непосредственно из окна редактора клавишами Alt-F8.
GO TO PREVIOUS. Ищет фрагмент, заданный предыдущим сообщением в окне Messages. Опция вызывается непосредственно из окна редактора клавишами Alt-F7.
GREP. Инициирует работу утилиты GREP. В строке Enter program arguments диалогового окна опции необходимо перечислить аргументы вьиова GREP: имена процедур, функций, переменных, которые необходимо отыскать в текстовых файлах, а также имена этих файлов. По умолчанию параметром вызова GREP указывается *. PAS, что означает поиск по всем PAS-файлам текущего каталога. Если к моменту вызова опции текстовый курсор стоял на некотором имени процедуры, функции или переменной, это имя появится в качестве аргумента вызова перед *. PAS. После нажатия Enter GREP начнет поиск имени во всех файлах. В окне Messages появятся сообщения GREP с указанием имени файла, номера строки и фрагмента текста программы, где было найдено нужное имя. Опция вызывается непосредственно из окна редактора клавишами Shift-F2.
Меню опции WINDOW
TILE. Располагает окна так, чтобы каждое было видно на экране и все они имели бы приблизительно одинаковые размеры..
CASCADE. Располагает на экране окна редактора таким образом, чтобы были видны рамки каждого из них. Используется для организации более удобной работы с помощью мыши.
CLOSE ALL. Закрывает все открытые окна.
REFRESH DISPLAY. Удаляет следы вывода программы, работавшей в режиме отладки с установленной опцией Options/Debugger/Display swapping/None.
SIZE/MOVE. Эта опция обеспечивает перемещение окна по экрану и/или изменение его размеров. Вызывается из редактора командой Ctrl-F5.
ZOOM. Распахивает активное окно на весь экран или возвращает ему прежний вид. Вызов из редактора клавишей F5.
NEXT. Активизирует очередное окно. Вызывается из редактора клавишей F6.
PREVIOUS. Активизирует предыдущее активное окно. Вызывается из редактора командой Shift-F6.
CLOSE. Закрывает активное окно. Вызывается из редактора командой Alt-F3.
LIST. Выводит на экран список всех открытых окон среды. Вызывается из редактора командой Alt-0.
Прочие команды
Ctrl-Q F - искать по образцу;
Ctrl-L - продолжить поиск;
Ctrl-Q A - искать по образцу и заменять;
Ctrl-U - прекратить дальнейшее выполнение поиска или поиска измены;
Ctrl-K n - установить маркер; n = 0..9 (см. ниже);
Ctrl-Q n - искать маркер;
Ctrl-Q W - искать ошибку;
Ctrl-Q [ - искать правую парную скобку (см. ниже);
Ctrl-Q ] - искать левую парную скобку (см. ниже);
Ctrl-Q L - восстановить испорченную строку (см. ниже);
Ctrl-Q Т или Ctrl-O Т - включить/отключить табуляцию;
Ctrl-O F - переключить заполнение табуляции;
Ctrl-O I или Ctrl-Q I
- включить/отключить автоотступ;
Ctrl-O О - вставить настройку компилятора в начало файла (см. ниже).
Назначение большинства команд понятно без каких-либо комментариев, но некоторые нуждаются в по-
Ctrl-K n. Устанавливает в текущую позицию курсора маркер с номером и = 0..0. Маркер на экране невидим и никак не влияет на исполнение программы. Команда используется совместно с командой Ctrl-Q n (искать маркер с номером n) для ускорения поиска нужных фрагментов текста при разработке крупных программ. Обратите внимание - комбинации клавиш Ctrl-K n набираются следующим образом: вначале нажимается Ctrl, затем, не отпуская ее,- К; после этого все клавиши отпускаются и нажимается клавиша с цифрой п. Точно так же набирается команда Ctrl-Q п.
Ctrl-Q ] и Ctrl-Q [.Эти команды используются для поиска ближайшей парной скобки. Команды позволяют отыскивать пары скобок (и), { и}, [и]. Подведите курсор так, чтобы он указывал на одну из скобок, и дайте соответствующую команду - редактор отыщет нужную парную скобку.
Ctrl-O О. Эта команда заставит редактор поместить в самое начало файла строки, содержащие текущую настройку среды в виде директив компилятора, например:
{$A+,B-,D+,E+,F+,G+,I+,L+,N+,0-,R + ,S+,V+,X+}
{$М 16384,0,655360}
($DEFINE single}
Работа с диалоговым окном
С помощью диалогового окна уточняется выбранное действие. В диалоговом окне имеется несколько полей, в которых группируется информация о возможностях среды и ее настройке.
Сразу после развертывания диалогового окна активизируется то или иное поле, которое выделяется цветом (оттенком). В активных полях ввода, переключаемых опций или выбора файла, кроме того, виден мигающий курсор.
Запомним следующие правила:
для перехода от одного поля к другому предназначена клавиша табуляции Tab (клавиша располагается в левой верхней части основной зоны клавиатуры и обозначена двумя разнонаправленными стрелками);
для перехода внутри поля используются клавиши смещения курсора;
закрыть диалоговое окно можно клавишей Esc (в этом случае не происходит никаких действий, связанных с окном) или клавишей Enter (в этом случае выполняются все указанные в окне установки или выбирается указанный файл).
При работе с мышью для выбора поля или опции следует сместить к этому полю (опции) указатель мыши и нажать левую кнопку. Для того, чтобы закрыть окно и выполнить все связанные с ним установки, нужно указать мышью на соответствующее командное поле и нажать левую кнопку (в большинстве случаев это поле помечается символами ОК). Чтобы закрыть диалоговое окно и не выполнять никаких действий, используется поле
верхней рамки или командное поле со словом Cancel (отмена).
Если по смыслу того или иного исполняемого действия необходимо ввести текстовую строку (например, имя файла), то сразу после раскрытия диалогового окна активизируется поле ввода с мигающим курсором. Следует ввести нужный текст и нажать Enter. При вводе текста используются правила редактирования, принятые в редакторе Турбо Паскаля: ошибочно введенный символ можно стереть клавишами Backspace или Del, причем этот символ может быть в любом месте строки (используйте клавишу перевода курсора влево, чтобы указать ошибочный символ, или укажите на него мышью и нажмите левую кнопку); ввод текста может происходить в режиме замены (переключается клавишей Ins). Если после подготовки текста Вы нажмете Enter, текст будет введен и диалоговое окно закроется, однако если Вы по каким-либо причинам измените свое решение, достаточно нажать Esc, чтобы закрыть диалоговое окно без ввода текста. Можно также повторить ранее введенный в аналогичной ситуации текст, например, уже вводившееся имя файла. Для этого вместо ввода ожидаемого текста нажмите клавишу смещения курсора вниз или укажите на поле
справа от поля ввода мышью и нажмите ее левую кнопку. В развернувшемся на экране небольшом окне содержится протокол использования данной опции. В протоколе сохраняются текстовые строки, введенные ранее, и можно клавишами смещения курсора подвести цветной указатель-прямоугольник к нужной Вам строке протокола и нажать Enter или указать на эту строку мышью и дважды подряд нажать на левую кнопку (нажимать на кнопку нужно быстро, без заметной паузы, иначе среда не воспримет это как команду ввода и просто переместит указатель к нужной строке протокола).Переключаемые опции задают выбор нужной настройки среды из двух или нескольких вариантов. Варианты могут быть связаны с включением или отключением какого-либо параметра среды. Например, можно потребовать от компилятора использовать арифметический сопроцессор или не использовать его. Слева от таких опций в диалоговом окне имеется небольшое поле выбора, выделенное квадратными скобками; включенный параметр отмечается символом X в этом поле: [X]; если поле пустое [ ] , данный параметр не задействован. Если переключаемая опция задает выбор из нескольких вариантов, слева от указателя каждого варианта имеется поле выбора, выделенное двумя круглыми скобками, причем выбранный вариант отмечается точкой: (•).
Чтобы изменить состояние переключаемого параметра или выбрать другой его вариант, нужно клавишами смещения курсора подвести указатель к соответствующей опции и нажать клавишу Пробел (длинная клавиша в самом низу клавиатуры) или подвести указатель мыши к полю выбора слева от опции и нажать левую кнопку. Можно также нажать клавишу с буквой, которая выделена цветом в нужной опции.
В диалоговом окне обязательно имеется несколько командных полей, которые располагаются в правой или нижней части окна и выделяются цветом. С каждым таким полем связана некоторая команда. Эту KOJ манду можно выполнить, если активизировать поле клавишей табуляции и нажать Enter или указать на него мышью и нажать левую кнопку.
Работа с меню
Для перехода из состояния редактирования к выбору из главного меню используется клавиша F10, для возврата в редактор - клавиша Esc. В активном меню указателем (цветом или оттенком) выделяется очередная опция. Для выбора того или иного продолжения переместите клавишами смещения курсора указатель к нужной опции и нажмите Enter. Выбирать можно и другим способом. В кодовом слове опции цветом выделяется одна из букв. Для выбора опции нажмите клавишу с нужной буквой, если выбирается опция из дополнительного меню, или комбинацию Аlt-<буква>, если выбирается опция главного меню. При работе с мышью для выбора из меню нужно переместить указатель мыши к соответствующей опции и нажать левую кнопку.
Выбор опции обычно приводит к развертыванию нового меню или диалогового окна. Если справа от опции стоит многоточие, эта опция связана с развертыванием диалогового окна, если стоит значок
, вызывается дополнительное меню.Некоторые часто используемые опции, содержащиеся в дополнительных меню, можно вызвать непосредственно из режима редактирования. Справа от таких опций в меню указывается клавиша или комбинация клавиш, которая позволяет сделать это.
Следует учесть, что детальную информацию на английском языке о том или ином продолжении (опции) можно получить с помощью справочной службы, если клавишами перемещения курсора сместить указатель к этой опции и нажать клавишу F1.
Работа с окнами
В среде Турбо Паскаля используется несколько окон, которые могут частично или полностью накладываться друг на друга. Для последовательной смены окон используется клавиша F6: нажатие на эту клавишу
делает активным очередное окно; если это окно было закрыто другими окнами, оно накладывается поверх них. Для смены активности окон можно использовать и мышь: переместите указатель мыши внутрь неактивного окна и нажмите левую кнопку.
В верхней части рамки, очерчивающей активное окно, имеются два небольших поля, используемых при работе с мышью. Поле
служит для удаления окна с экрана, поле - для распахивания окна на весь экран, а если это поле помечено значком , - для возврата к прежним размерам после распахивания. Эти же действия выполняются и с помощью клавиатуры: F5 распахивает окно или возвращает окну обычный размер, Alt-F3 закрывает окно (удаляет его с экрана). Закрытое окно удаляется из системы окон Турбо Паскаля и его уже нельзя вызвать с помощью F6. Перед закрытием окна редактора, содержащего несохраненный на диске текст, среда спросит, нужно ли его сохранить.Положение и размеры активного окна можно изменять по своему вкусу. При работе с клавиатурой для изменения этих параметров используется команда Ctrl-F5. После этой команды изменяются цвет и линии рамки: таким образом среда сигнализирует о переходе к режиму настройки. Теперь клавишами смещения курсора Вы можете перемещать окно по экрану и этими же клавишами, нажатыми в сочетании с клавишей Shift, можно менять размеры окна. После того, как положение и размеры окна установлены нужным образом, нажимается клавиша Enter. При работе с мышью для изменения положения активного окна следует подвести указатель к левому верхнему углу рамки окна и нажать левую кнопку - окно будет «схвачено» мышью, о чем свидетельствует изменение цвета и линий рамки. Затем, не отпуская кнопки, перемещайте мышь по столу, при этом окно будет смещаться по экрану. Передвинув окно нужным образом, отпустите кнопку. Для изменения размеров окна используется правый нижний угол рамки, который «захватывают» мышью точно так же, как и при перемещении окна.
В окнах редактора и справочной службы содержится текст, который может не помещаться целиком в окне. Правая и нижняя рамки такого окна содержат указатели размеров, в которых показывается положение демонстрируемого в окне фрагмента относительно полных размеров текста. Эти поля можно использовать для того, чтобы перемещать окно относительно текста с помощью мыши. Чтобы сдвинуть окно вниз на одну строку, подведите указатель мыши к самому нижнему
краю вертикального указателя размеров так, чтобы он попал на поле , и нажмите левую кнопку. Для сдвига окна вниз на страницу установите указатель мыши в любое место вертикального указателя размеров несколько ниже его середины и нажмите левую кнопку. Точно так же поступают при перемещении окна вверх, вправо и влево, используя для этого соответственно верхнюю часть вертикального указателя и правую и левую части горизонтального указателя, если окно смещается на страницу, или поля , ,
- при смещении на одну строку или символ.
Редактор
Основные приемы работы с редактором описаны в гл. 1. Ниже приводится полное описание команд редактора. Все команды редактора можно разделить на команды перемещения курсора, команды удаления/вставки, команды работы с блоками, прочие.
При их описании используются следующие обозначения клавиш управления курсором:
ВЛ курсор влево; ВВ курсор вверх;
ВП курсор вправо; ВН курсор вниз.
Система меню
Все управление средой Турбо Паскаля осуществляется в основном с помощью системы последовательно разворачивающихся меню. Лишь одно из них - главное меню - постоянно присутствует на экране, остальные разворачиваются по мере выбора продолжений.
Главное меню содержит фактически лишь оглавление дополнительных меню. В этих меню сгруппированы близкие по своему роду действия, условное название которых и служит кодовым словом соответствующей опции главного меню:
File (файл) - действия с файлами и выход из системы;
Edit (редактировать) - восстановление испорченной строки и операции с временным буфером;
Search (искать) - поиск текста, процедуры, функции или места ошибки;
Run (работа) - прогон программы;
Compile (компилировать) - компиляция программы;
Debug (отладка) - отладка программы;
Tools (инструменты) - вызов вспомогательных программ (утилит);
Options (варианты) - установка параметров среды;
Window (окно) - работа с окнами;
Help (помощь) - обращением справочной службе.
Ниже описываются опции дополнительных меню Турбо Паскаля.
Среда Турбо Паскаля
Элементы диалоговой среды
Работа с окнами
Работа с меню
Работа с диалоговым окном
Система меню
Меню опции FILE
Меню опции EDIT
Меню опции SEARCH
Меню опции RUN
Меню опции COMPILE
Меню опции DEBUG
Меню опции TOOLS
Меню опции OPTIONS
Меню опции WINDOW
Меню опции HELP
Директивы компилятора
Редактор
Команды перемещения курсора
Команды удаления/вставки
Команды работы с блоками
Прочие команды
Команды, передаваемые среде из редактора
Вызов Турбо-Паскаля
Вызов Турбо Паскаля
Полный формат команды ДОС, осуществляющей вызов Турбо Паскаля, имеет вид:
[PATH]turbo [Options] [FileName]
Здесь PATH- путь к системному каталогу (см. гл.1 и п.5.1.1);
Optoins - список опций;
FileName- имя PAS-файла.
В квадратных скобках указаны необязательные параметры команды.
Параметр FileName, если он указан, задает имя текстового файла, который будет автоматически загружен средой в активное окно редактора. Если в имени файла не указано расширение, среда добавляет стандартное расширение.PAS.
С помощью параметров Options среде можно передать указание изменить нужным образом свою настройку. Каждый параметр задается в формате /Z, где Z - буква, определяющая настройку среды (см. ниже), -знаки «+» (включить настройку) или «-» (отключить настройку); несколько параметров отделяются друг от друга пробелами.
В списке Options можно использовать следующие управляющие параметры:
/С<имя> - загрузить нужный файл конфигурации (эквивалентно опции OPTIONS/OPEN среды); <имя> - имя конфигурационного файла, например: /СМу. tp;
/D+ - использовать дополнительный монитор (эквивалентно опции OPTIONS/ENVIRONMENT/STARTUP/DUAL MONITOR SUPPORT);
/Е<размер> - установить нужный размер памяти для экранного буфера (эквивалентно опции OPTIONS/ENVIRONMENT/STARTUP/EDITOR HEAP SIZE); <размер> - устанавливаемый размер (килобайт); например /Е15 - установить размер экранного буфера в 15 Кбайт;
/G+ - сохранять копию графического экрана (эквивалентно опции OPTIONS/ENVIRONMENT/STARTUP/GRAPHICS SCREENSAVE);
/L+ - ПК оснащен жидкокристаллическим дисплеем (эквивалентно опции OPTIONS/ENVI-RONMENT/STARTUP/LCD COLOR SET);
/N+ - ПК оснащен адаптером типа CGA (эквивалентно опции OPTIONS/ENVIRONMENT/STARTUP/CGA SNOW CHECKING);
/О<размер> - установить нужный размер памяти для хранения оверлейных модулей системы Турбо Паскаль (эквивалентно опции OPTIONS/ENVIRONMENT/STARTUP/OVERLAY HEAP SIZE);
/P+ - сохранять цветовую палитру экрана (эквивалентно опции OPTIONS/ ENVIRONMENT/STARTUP/EGA/VGA PALETTE SA УЕ);
/S<путь> - определяет путь к «быстрому» диску (эквивалентно опции OPTIONS/ENVIRONMENT/STARTUP/SWAP FILE DIRECTORY);
/Т+ - загружать в память библиотеку SYSTEM. TPU из файла TURBO. TPL (эквивалентно опции OPTIONS/ENVIRONMENT/STARTUP/LOAD TURBO. TPL);
/W<paзмep> - установить нужный размер памяти для хранения окон Турбо Паскаля (эквивалентно опции OPTIONS/ENVIRONMENT/STARTUP/WINDOW HEAP SIZE);
/X+ - использовать EMS-память (эквивалентно опции OPTIONS/ENVIRONMENT/ STARTUP/USE EXPANDED MEMORY).
Варианты кодировки знакогенераторов ПК
Стандартный знакогенератор ПК IBM PC имеет кодировку символов, изображенную на рис.2.1. Символы с кодами от 0 до 127, образующие первую половину символов знакогенератора (рис.П2.1, а), построены по стандарту ASCII и одинаковы на всех IBM-совместимых ПК. Вторая половина символов (коды 128...255) могут отличаться на ПК разного типа. В стандартном знакогенераторе фирмы IBM символы псевдографики занимают три смежных колонки (коды 176...223, см. рис.П2.1, b). Колонки с кодами от 128 до 175 и от 224 до 239 используются для размещения некоторых символов национального алфавита различных европейских языков, а последняя колонка (коды 240...255) - для размещения специальных знаков. С учетом этого расположения символов разрабатывается подавляющее большинство программ зарубежного происхождения.
Рис.П2.1. Стандартная кодировка фирмы IBM: а) для кодов 0...127; b) для кодов 128...255
Стандартный отечественный знакогенератор строится по рекомендациям Международного консультационного комитета по телеграфии и телефонии (МККТТ). Расположение символов во второй половине таблицы этого знакогенератора (рис.П2.2,а) резко отличается от принятого фирмой IBM, что затрудняет использование зарубежного программного обеспечения на отечественных ПК. В связи с этим, стандартный (так называемый ГОСТовский) вариант кодировки часто заменяется альтернативным (рис.П2.2, b), главное достоинство которого - расположение символов псевдографики на тех же местах, что и в знакогенераторе IBM. Недостаток такого знакогенератора заключается в том, что символы кириллицы не образуют непрерывный массив. Вариант, показанный на рис.П2.2, b в настоящее время получил наибольшее распространение на отечественных ПК. Именно на него рассчитаны практически все программы отечественного производства. Он стал фактическим стандартом для зарубежных фирм, изготовляющих ПК для экспорта в нашу страну.
Рис.П2.2. Варианты кодировки для кодов 128...255: а) по рекомендациям МККТТ; b) наиболее популярный
Фатальные ошибки
Эти ошибки всегда приводят к немедленной остановке программы.
200 Division by zero (Деление на ноль).
201 Range check error (Ошибка при проверке границ).
Ошибка генерируется операторами, скомпилированными в состоянии {$R+}, при возникновении одной из следующих ситуаций:
индексное выражение массива находилось вне допустимого диапазона;
была осуществлена попытка присвоить переменной значение, находящееся вне диапазона переменной;
была осуществлена попытка передать значение, находящееся вне допустимого диапазона, в качестве параметра процедуре или функции.
202 Stack overflow error (Переполнение стека).
Эта ошибка генерируется на входе в процедуру или функцию, скомпилированную в режиме {$S+}, в случае, если нет достаточной области для размещения локальных переменных подпрограммы. Увеличьте размер стека, используя директиву компилятора {$М}.
203 Heap overflow error (Переполнение кучи).
Эта ошибка генерируется процедурами NEW или GETMEM в случае, если в куче нет свободной памяти требуемого размера.
204 Invalid pointer operation (Недействительная операция с .указателем).
Эта ошибка генерируется процедурами DISPOSE или FREEMEM в случае, когда указатель имеет значение NIL или указывает на адрес, лежащий за пределами динамически распределяемой области памяти.
205 Floating point overflow (Переполнение при операции с плавающей запятой).
В результате выполнения операции с плавающей запятой получено слишком большое вещественное число.
206 Floating point underflow (Исчезновение порядка при операции с плавающей запятой).
Эта ошибка генерируется только в том случае, если используется сопроцессор 8087/80287/80387 с управляющим словом, которое демаскирует ошибку исчезновения порядка. По умолчанию исчезновение порядка приводит к возвращению результата, равного нулю.
207 Invalid floating point operation (Недопустимая операция с плавающей запятой) .
Возможные причины сообщения:
аргумент функций TRUNC или ROUND не может быть преобразован в целое число, находящееся внутри диапазона типа LONGINT (от -2147483648 до +2147483647);
отрицательный аргумент функции SQRT (извлечение квадратного корня);
аргумент функции LN (логарифм) равен нулю или имеет отрицательное значение;
произошло переполнение стека сопроцессора.
208 Overlay manager not installed (He установлена подсистема управления оверлеем).
Ваша программа вызывает оверлейную процедуру или функцию, а подсистема управления оверлеем не инициирована. Вероятнее всего, в программе отсутствует обращение к процедуре OVRINIT или обращение к этой процедуре завершилось с ошибкой. Нужно иметь в виду, что если в каком-либо из оверлейных модулей содержится раздел инициации, то в программе необходимо создать дополнительный или использовать имеющийся неоверлейный модуль, вызывающий процедуру OVRINIT в своем разделе инициализации, и указать этот модуль в предложении USES перед любым из оверлейных модулей.
209 Overlay file read error (Ошибка чтения оверлейного файла).
Ошибка чтения произошла, когда подсистема управления оверлеем пыталась считать оверлейный модуль из оверлейного файла.
210 Object not initialized (He инициирован объект).
Вы обращаетесь к виртуальному правилу применительно к неинициированному объекту (до вызова конструктора).
211 Call to abstract method (Вызов абстрактного правила).
Эта ошибка генерируется правилом ABSTRACT модуля OBJECT при работе в среде Turbo Vision в случае обращения к абстрактному правилу, т.е. к виртуальному правилу, которое разработано специально для его замены в объектах-потомках.
212 Stream registration error (Ошибка в регистрируемом потоке).
Эта ошибка генерируется правилом REGISTERTYPE модуля OBJECT при работе в среде Turbo Vision в случае возникновения одной из следующих ошибок:
запись регистрируемого потока не содержит сегмента данных;
поле OBJTYPE записи регистрируемого потока нулевое;
указанный тип уже был зарегистрирован;
существует другой тип с таким же полем OBJTYPE.
213 Collection index out of range (Набираемый индекс выходит из границ диапазона) .
Индекс, передаваемый объекту TCOLLECTION при работе в среде Turbo Vision, выходит за границы диапазона.
214 Collection overflow error (Переполнение коллекции).
Эта ошибка генерируется объектом TCOLLECTION при работе в среде Turbo Vision в случае, если делается попытка добавить элемент к коллекции, которую нельзя расширять.
Критические ошибки
150 Disk is write protected (Диск защищен от записи).
151 Unknown unit (Неизвестный модуль).
152 Drive not ready (Дисковод находится в состоянии «не готов»).
153 Unknown command (Неопознанная команда).
154 CRC error in data (Ошибка в исходных данных).
155 Bad drive requiest structure length (При обращении к диску указана неверная длина структуры).
156 Disk seek error (Ошибка при операции установки головок на диске).
157 Unknown media type (Неизвестный тип носителя).
158 Sector not found ЦСектор не найден).
159 Printer out of paper (Кончилась бумага на принтере).
160 Device write fault (Ошибка при записи на устройство).
161 Device read fault (Ошибка при чтении с устройства).
162 Hardware failure (Сбой аппаратуры).
Ошибки, обнаруживаемые ДОС
1 Invalid function number (Неверный номер функции).
Вы пытаетесь вызвать несуществующую функцию ДОС.
2 File not found (He найден файл).
Ошибка генерируется процедурами RESET, APPEND, RENAME или ERASE в случае, если имя, присвоенное файловой переменной, указывает несуществующий файл.
3 Path not found (Путь не найден).
Ошибка генерируется процедурами:
RESET, REWRITE, APPEND или ERASE в случае, если имя, присвоенное файловой переменной, является недействительным или указывает на несуществующий подкаталог;
CHDIR, MKDIR или RMDIR в случае, если путь является недействительным или указывает несуществующий подкаталог.
4 Too many open files (Слишком много открытых файлов).
Ошибка генерируется процедурами RESET, REWRITE или APPEND в случае, если программа имеет слишком много открытых файлов. ДОС не позволяет использовать более 15 открытых файлов для каждого процесса. Если ошибка возникла при наличии менее 15 открытых файлов, то она может указывать на то, что файл CONFIG.SYS не содержит параметра FILES=xxx или что этот параметр задает слишком мало файлов. Увеличьте параметр FILES=xxx до какого-либо подходящего значения, например, до 80.
5 File access defined (Отказано в доступе к файлу).
Данная ошибка генерируется процедурами:
RESET или APPEND в случае, когда имя, присвоенное файловой переменной, указывает каталог или файл, доступный только для чтения, в то время как параметр FILEMODE файловой переменной содержит указание на запись данных;
REWRITE в случае, когда каталог заполнен, или если имя, присвоенное файловой переменной, задает каталог или существующий файл, доступный только для чтения;
RENAME в случае, если имя, присвоенное файловой переменной, указывает каталог или если новое имя указывает существующий файл;
ERASE в случае, если имя, присвоенное файловой переменной, указывает каталог или файл, доступный только для чтения;
MKDIR в случае, если файл с тем же именем уже существует в порождающем каталоге, если нет места в порождающем каталоге или если путь к каталогу содержит имя логического устройства;
RMDIR в случае, если каталог не является пустым, если путь не определяет каталог или если путь задает корневой каталог;
READ или BLOCKREAD в случае типизированного или нетипизированного файла, если файл не открыт для чтения;
WRITE или BLOCKWRITE для типизированного или нетипизированного файла в случае, если этот файл не открыт для записи.
6 Invalid file handle (Недопустимый файловый канал).
Данная ошибка генерируется в случае, когда системному вызову ДОС передается недопустимый файловый канал. Эта ошибка не должна возникать в правильно работающей программе. Ее появление является свидетельством того, что файловая переменная каким-либо образом испорчена.
12 Invalid file access code (Недействительный код доступа к файлам).
Ошибка генерируется процедурами RESET или APPEND, если значение параметра FILEMODE в файловой переменной не является допустимым.
15 Invalid drive number (Недопустимый номер дисковода).
Ошибка генерируется процедурой GETDIR в случае, если номер дисковода не является допустимым.
16 Cannot remove current directory (Нельзя удалить текущий каталог).
Ошибка генерируется процедурой RMDIR в случае, если путь указывает текущий каталог.
17 Cannot rename across drives (Нельзя при переименовании указывать разные дисководы).
Генерируется процедурой RENAME в случае, если оба файла не находятся на одном и том же диске.
Ошибки возникающие во время выполнения программ
Некоторые ошибки, обнаруженные во время выполнения программы, приводят к появлению на экране сообщения вида
Runtime error ппп at хххх:уууу
(Ошибка периода исполнения ппп по адресу хххх:уууу)
где ппп - номер ошибки; хххх:уууу - адрес (сегмент и смещение). После этого сообщения программа завершает свою работу.
Ошибки периода исполнения делятся на четыре категории: ошибки, обнаруживаемые ДОС (коды ошибок с 1 до 99), ошибки ввода-вывода (с 100 по 149), критические ошибки (с 150 по 199) и фатальные ошибки (коды ошибок с 200 до 255).
Ошибки ввода-вывода
Если один из операторов компилировался с директивой {$I+}, то ошибка ввода-вывода приводит к прекращению выполнения программы. В состоянии {$I-} программа продолжает выполняться, а ошибка возвращается функцией IORESULT.
100 Disk read error (Ошибка чтения с диска).
Генерируется процедурой READ в типизированном файле в случае, если Вы пытаетесь осуществить считывание из полностью прочитанного файла.
101 Disk write error (Ошибка записи на диск).
Ошибка генерируется процедурами CLOSE, WRITE, WRITELN, FLUSH в случае, если диск заполнен.
102 File not assigned (Файлу не присвоено имя).
Ошибка генерируется процедурами RESET, REWRITE, APPEND, RENAME и ERASE в случае, если файловой переменной не было присвоено имя файла с помощью обращения к процедуре ASSIGN.
103 File not open (Файл не открыт).
Ошибка генерируется процедурами CLOSE, READ, WRITE, SEEK, EOF, FILEPOS, FILESIZE, FLUSH, BLOCKREAD, BLOCKWRITE в случае, если файл не открыт.
104 File not open for input (Файл не открыт для ввода).
Ошибка генерируется процедурами READ, READLN, EOF, EOLN, SEEKEOF или SEEKEOLN в текстовом файле в случае, если файл не открыт для ввода.
105 File not open for output (Файл не открыт для вывода).
Ошибка генерируется процедурами WRITE или WRITELN в текстовом файле в случае, если файл не открыт для вывода.
106 Invalid numeric format (Неверный числовой формат).
Генерируется процедурами READ или READLN в случае, если числовое значение, считанное из текстового файла, не соответствует правильному числовому формату.
Сообщения и коды ошибок
Сообщения об ошибках периода компиляции
Ошибки возникающие во время выполнения программ
Ошибки, обнаруживаемые ДОС
Ошибки ввода-вывода
Критические ошибки
Фатальные ошибки
Сообщения об ошибках периода компиляции
Среда Турбо Паскаля дает исчерпывающую информацию о характере и месте обнаруженной компилятором ошибки. При обнаружении ошибки среда автоматически загружает в окно редактора исходный файл и помещает курсор около того места, где в исходном тексте обнаружена ошибка. При этом в верхней строке редактора появляется диагностическое сообщение. После нажатия на любую клавишу (кроме FI) верхняя строка восстанавливает свой первоначальный вид и среда переходит к режиму редактирования. Если после появления сообщения об ошибке нажать F1, на экране появится окно справочной службы с детальной информацией об ошибке и рекомендациями по ее устранению. Некоторые ошибки в исходном тексте обнаруживаются не сразу, а в ходе продолжающегося контекстного разбора. Например, несоответствие типов в операторе присваивания не может быть обнаружено до тех пор, пока не будет вычислено целиком выражение в правой части этого оператора. В таких случаях ищите ошибку слева от курсора или в предыдущей строке текста.
Ниже приводятся сообщения об ошибках в том виде, в каком они появляются в верхней строке редактора, а также перевод сообщений справочной службы.
На экране после кода ошибки (цифры) нет точки, поэтому ее нет и в соответствующем месте текста.
1 Out of memory (Выход за границы памяти).
Компилятору не хватает памяти. Имеется ряд возможных решений этой проблемы:
если в опции COMPILE/DESTINATION установлено значение MEMORY, замените эту опцию на DISK;
если в опции OPTIONS/LINKER/LINK BUFFER установлено значение MEMORY, замените эту опцию т DISK;
если Вы используете резидентные обслуживающие программы, такие как SIDEKICK, NORTON, удалите их из памяти;
если Вы используете интегрированную среду TVRBO.EXE, то попробуйте воспользоваться компилятором ТРС.ЕХЕ - он занимает меньше памяти.
Если ни одна из рекомендаций не помогает, то, возможно, Ваша программа просто слишком велика, чтобы компилировать ее в таком объеме памяти. В этом случае Вы должны разбить ее на два или более модулей.
Не указан тип идентификатора.
13 Too many open files (Слишком много открытых файлов).
Появление этой ошибки означает, что конфигурационный файл CONFIG.SYS операционной системы не включает параметр FlLES=xx или этот параметр указывает слишком мало файлов. Увеличьте число файлов до нужного значения, например, до 80.
14 Invalid file name (Неверное имя файла).
Имя файла неверно или указан несуществующий путь.
15 File not found (Файл не найден).
Файл не был найден в просмотренных каталогах.
16 Disk full (Диск заполнен).
Удалите некоторые файлы или воспользуйтесь новым диском.
17 Invalid compiler directive (Неправильная директива компилятора).
Неверная буква в директиве компилятора, один из параметров директивы компилятора неверный, или Вы пользуетесь глобальной директивой компилятора, когда компиляция тела программы уже началась.
18 Too many files (Слишком много файлов).
В компиляции программы или программного модуля участвуют слишком много файлов. Попытайтесь не использовать так много файлов, например, объединяя включаемые файлы или делая короче имена файлов.
19 Undefined type in pointer definition (Неопределенный тип в объявлении указателя).
Попытка объявить типизированный указатель, связанный с ранее не объявленным типом данных.
20 Variable identifier expected (Отсутствует идентификатор переменной).
На этом месте должен быть идентификатор переменной.
21 Error in type (Ошибка в объявлении типа).
Объявление типа не может начинаться с этого символа.
22 Structure too large (Слишком большая структура).
Максимально допустимый размер любого структурного типа составляет 65520 байт.
23 Set base type of range (Базовый тип множества нарушает границы).
Базовый тип множества должен представлять собой тип-диапазон с границами в пределах от 0 до 255 или перечисляемый тип с не более чем 256 значениями.
24 File components may not be files (Компонентами файла не могут быть файлы) .
Конструкции типа file of file (файл файлов) или file of object (файл объектов) не допускаются. Нельзя объявлять любые структурные типы, которые используют в качестве компонентов объекты или файлы.
25 Invalid string length (Неверная длина строки).
Объявляемая длина строки должна находиться в диапазоне от 1 до 255.
26 Type mismatch (Несоответствие типов).
Это сообщение может быть вызвано следующими причинами:
несовместимые типы переменной и выражения в операторе присваивания;
несовместимые типы фактического и формального параметров в обращении к процедуре или функции;
тип выражения не совместим с типом индекса при индексировании массива;
несовместимые типы операндов в выражении.
27 Invalid subrange base type(Неправильный базовый тип для типа-диапазона).
Допустимыми базовыми типами являются все порядковые типы.
28 Lower bound greater than upper bound (Нижняя граница больше верхней).
Описание типа-диапазона содержит неправильные границы.
29 Ordinal type expected (Нужен порядковый тип) .
Вещественные, строковые, структурные, процедурные типы и указатели в данном месте программы не допускаются.
30 Integer constant expected (Нужна целая константа).
31 Constant expected (Нужна константа).
32 Integer or real constant expected (Нужна целая или вещественная константа) .
33 Tуре identifier expected (Нужен идентификатор типа)
34 Invalid function result type (Неправильный тип результата функции)
Правильными типами результата функции являются все простые типы, строковые типы и указатели.
35 Label identifier expected (Нужен идентификатор метки).
Метка не обозначена с помощью идентификатора, как это требуется из контекста программы.
36 BEGIN expected (Нужен BEGIN).
37 END expected (Нужен END).
38 Integer expression expected (Нужно выражение типа INTEGER).
39 Ordinal expression expected (Нужно выражение перечисляемого типа).
40 Boolean expression expected (Нужно выражение типа BOOLEAN).
41 Operand types do not match operator (Типы операндов не соответствуют операции).
Данная операция не может быть применена к указанным операндам, например, ' А' div ' 2 ' .
42 Error in expression (Ошибка в выражении).
Данный символ не может участвовать в выражении указанным образом. Возможно, Вы забыли указать операцию между двумя операндами.
43 Illegal assignment (Неверное присваивание).
Файлам и нетипизированным переменным нельзя присваивать значения. Идентификатору функции можно присвоить значение только внутри раздела операторов данной функции.
44 Field identifier expected (Нужен идентификатор поля).
Попытка использовать запись целиком в том месте, где требуется ссылка на какое-либо поле записи.
45 Object file too large (Объектный файл слишком большой).
Турбо Паскаль не может компоновать файлы .OBJ больше 64 Кбайт.
46 Undefined external (Неопределенная внешняя процедура).
Внешняя процедура или функция не имеет соответствующего определения PUBLIC в объектном файле. Убедитесь, что Вы указали все объектные файлы в директивах {$L <имя .OBJ-файлa>} и проверьте написание идентификаторов процедуры или функции в файле . ASM.
47 Invalid object file record (Неправильная запись объектного файла).
Файл .OBJ содержит неверную объектную запись. Убедитесь, что данный файл является действительно файлом .OBJ.
48 Code segment too large (Сегмент кода слишком большой).
Максимальный размер кода программы или программного модуля равняется 65520 байтам. Разбейте Вашу программу или модуль на два или более модулей.
49 Data segment too large (Сегмент данных слишком велик).
Максимальный размер сегмента данных программы равен 65520 байтам, включая данные, используемые программными модулями. Если Вам нужно большее количество глобальных данных, опишите большие структуры с помощью указателей и выделяйте для них память динамически с помощью процедуры NEW.
50 DO expected (Нужен оператор DO).
51 Invalid PUBLIC definition (Неверное PUBLIC-определение).
Возможные причины сообщения:
данный идентификатор получил тип PUBLIC с помощью соответствующей директивы языка ассемблера, но не соответствует описанию EXTERNAL в программе или программном модуле Паскаля;
две или более директивы PUBLIC языка ассемблера определяют один и тот же идентификатор;
файлы .OBJ определяют символы PUBLIC, не находящиеся в сегменте CODE.
52 Invalid EXTRN definition (Неправильное EXTRN-определение).
Возможные причины сообщения:
программа на ассемблере ссылается с помощью директивы EXTRN на идентификатор, который не описан в программе на Паскале и не был описан в интерфейсных секциях используемых программных модулей;
ассемблерная программа ссылается на идентификатор, обозначающий абсолютную переменную (т.е. определенную словом ABSOLUTE);
ассемблерная программа ссылается на идентификатор процедуры или функции типа INLINE.
53 Too many EXTRN definition (Слишком много EXTRN-определений).
Турбо Паскаль не может обрабатывать файлы .OBJпри более чем 256 определениях EXTRN.
54 OF expected (Требуется OF).
55 INTERFACE expected (Требуется интерфейсная секция).
56 Invalid relocatable reference (Неправильная перемещаемая ссылка).
Возможные причины сообщения:
файл .OBJ содержит данные и перемещаемые ссылки в сегментах, отличных от CODE. Например, Вы пытаетесь описать инициализированные переменные в сегменте DATA;
файл .OBJ содержит ссылки с размерами в байтах на перемещаемые символы. Такая ошибка происходит в случае, если Вы используете операторы HIGH и LOW с перемещаемыми символами или если Вы ссылаетесь в директивах DB на перемещаемые символы;
операнд ссылается на перемещаемый символ, который не был определен в сегменте CODE или в сегменте DATA;
операнд ссылается на процедуру EXTRN или функцию EXTRN со сдвигом, например, CALL SortProc+8.
57 THEN expected (Требуется THEN).
58 TO or DOWNTO expected (Требуется ТО или DOWNTO).
59 Undefined forward (Неопределенное опережающее описание).
Возможные причины сообщения:
была рписана процедура или функция в интерфейсной секции программного модуля, но ее определение отсутствует в секции реализации;
процедуры или функции были описаны с помощью опережающего описания, но их определение не найдено.
60 Too many procedures (Слишком иного процедур).
Турбо Паскаль допускает не более 512 процедур или функций в одном модуле. Если Вы компилируете программу, то поместите некоторые процедуры или функции в модули. Если Вы компилируете модуль, то разбейте его на два или несколько модулей.
61 Invalid typecast (Неверное преобразование типа).
Возможные причины сообщения:
Вы пытаетесь разместить в памяти, занимаемой некоторой переменной, значение выражения другого типа э случае, когда размер размещаемого значения не равен размеру переменной;
Вы пытаетесь осуществить преобразование типа выражения, когда разрешается только ссылка на переменную, процедуру или функцию.
62 Division by zero (Деление на ноль).
Предшествующая операция пытается выполнить деление на ноль.
63 Invalid file type (Неверный файловый тип).
Данный файловый тип не обслуживается процедурой обработки файлов. Например, процедура READLN используется для типизированного файла или процедура SEEK - для текстового файла.
64 Cannot Read or Write variables of this type (Нет возможности считать или записать переменные данного типа).
Нарушены следующие ограничения:
процедуры READ и READLN могут считывать переменные символьного, целого, действительного и строкового типов;
процедуры WRITE и WRITELN могут выводить переменные символьного, целого, действительного, булевского и строкового типов.
65 Pointer variable expected (Нужно использовать переменную-указатель).
Предыдущая переменная должна быть указателем.
66 String variable expected ('Нужна строковая переменная) .
Предшествующая переменная должна иметь строковый тип.
67 String expression expected (Нужно выражение строкового типа).
Предшествущее выражение должно иметь строковый тип.
68 Circular unit reference (Перекрестная ссылка модулей).
Два модуля ссылаются друг на друга:
Unit A; Unit В;
Uses В; Uses А;
..... .....
69 Unit name mismatch (Несоответствие имен программных модулей).
Имя программного модуля, найденное в файле .TPU, не соответствует имени, указанному в предложении USES.
70 Unit version mismatch (Несоответствие версий модулей).
Один или несколько программных модулей, используемых данной программой, были изменены после их компиляции. Воспользуйтесь опцией COMPILE/MAKE или COMPILE/BUILD в интегрированной среде или опциями /М или /В в компиляторе ТРС, что позволит автоматически скомпилировать программные модули, нуждающиеся в перекомпиляции.
71 Duplicate unit name (Повторное имя программного модуля).
Вы уже указали этот программный модуль в операторе USES.
72 Unit file format error (Ошибка формата файла модуля).
Файл .TPU не соответствует стандарту Турбо Паскаля.
73 IMPLEMENTATION expected (Отсутствует исполняемая часть модуля).
74 Constant and case types do not match (Типы констант и тип выражения оператора CASE не соответствуют друг другу).
Тип константы оператора CASE не совместим с выражением в операторе варианта.
75 Record variable expected (Нужна переменная типа запись) .
Предшествующая переменная должна иметь тип запись.
76 Constant out of range (Константа нарушает границы).
Возможные причины сообщения:
Вы пытаетесь указать индекс массива, выходящий за его границы;
Вы пытаетесь присвоить переменной значение, выходящее за границы, допустимые для типа этой переменной;
Вы пытаетесь передать в качестве фактического параметра процедуре или функции константу, выходящую за границы, допустимые для типа соответствующего формального параметра.
77 File variable expected (Нужна файловая переменная).
Предшествующая переменная должна иметь файловый тип.
78 Pointer expression expected (Нужно выражение типа указатель).
Предшествующее выражение должно иметь тип указателя.
79 Integer or real expression expected (Нужно выражение вещественного или целого типа).
Предшествующее выражение должно иметь тип REAL или INTEGER.
80 Label not within current block (Метка не находится внутри текущего блока) .
Оператор GOTO не может ссылаться на метку, находящуюся вне текущего блока.
81 Label already defined (Метка уже определена).
Данная метка уже помечает оператор.
82 Undefined label in processing statement part (Неопределенная метка в предшествующем разделе операторов).
Данная метка была описана, и на нее осуществлялась ссылка в предшествующем разделе операторов, но она не указана в тексте программы.
83 Invalid @ argument (Неправильный аргумент операции @).
Правильными аргументами являются идентификаторы переменных, процедур и функций.
84 Unit expected (Нужно кодовое слово UNIT).
85«;» expected (Нужно указать»;») .
86«:» expected (Нужно указать*:») .
87«,» expected (Нужно указать»,») .
88 «(» expected (Нужно указать «(»).
89«)» expected (Нужно указать»)»).
90 «=» expected (Нужно указать «=») .
91«:=» expected (Нужно указать»:=»).
92 «[» or «(.» expected (Нужно указать «[» или «(.»).
93«]» or «.)» expected (Нужно указать»]» или».)»).
94».» expected (Нужно указать».») ,
95«..» expected (Нужно указать»..») .
96 Too many variables (Слишком много переменных).
Нарушены следующие ограничения:
общий размер глобальных переменных, описанных в программе или программном модуле, не может превышать 64 Кбайт;
размер локальных переменных, описанных в процедуре или функции, не может превышать 64 Кбайт. .
97 Invalid FOR control variable(Неправильный параметр цикла оператора FOR).
Параметр цикла оператора FOR должен быть переменной порядкового типа, определенной в разделе описаний текущей подпрограммы.
98 Integer variable expected (Нужна переменная целого типа).
Предшествующая переменная должна иметь целый тип.
99 File and procedure types are not allowed here (Здесь не могут использоваться файлы или процедурные типы).
Типизированная константа не может иметь файловый или процедурный тип.
100 String length mismatch (Несоответствие длины строки).
Длина строковой константы не соответствует количеству элементов символьного массива.
101 Invalid ordering of fields (Неверный порядок полей).
Поля в константе типа запись должны записываться в порядке их описания.
102 String constant expected (Нужна константа строкового типа).
103 Integer or real variable expected (Нужна переменная типа INTEGER или REAL).
Предшествующая переменная должна иметь целый или вещественный тип.
104 Ordinal variable expected (Нужна переменная порядкового типа).
Предшествующая переменная должна иметь порядковый тип.
105 INLINE error (Ошибка в операторе INLINE).
Оператор «<» не допускается в сочетании с перемещаемыми ссылками на переменные. Такие ссылки всегда имеют размер в слово.
106 Character expression expected (Предшествующее выражение должно иметь символьный тип).
107 Too many relocation items (Слишком много перемещаемых Элементов).
Размер таблицы перемещения файла .ЕХЕ превышает 64 Кбайта, что является верхним пределом в Турбо Паскале. Если Вы обнаружили эту ошибку, то это значит, что программа просто слишком велика для обработки компоновщиком Турбо Паскаля. Возможно также, что она слишком велика для выполнения в MS-DOS. В таком случае нужно выделить в программе основной раздел, который выполнял бы обращение к двум или более вспомогательным разделам с помощью процедуры ЕХЕС из модуля DOS (см. гл.11).
108 Overflow in arithmetic operator (Переполнение при выполнении арифметического оператора).
Результат предыдущей арифметической операции не лежит в диапазоне -2 146 483 648...+2 147 483 647. Исправьте операцию или используйте вещественные типы вместо целочисленных.
109 No enclosing FOR, WHILE or REPEAT statment (Нет операторов, заканчивающих операторы FOR, WHILE или REPEAT) .
Процедуры BREAK и CONTINUE не могут вызываться вне тела оператора цикла.
110 Debug information table overflow (Переполнение информационной таблицы отладки).
Возможно, программа содержит более 65536 имен или 65536 строк. Отключите генерацию таблиц отладки директивой компилятора {$D-} или исправьте один или более модулей.
111
Ошибка с этим кодом не описана в версии 7.0 системы Турбо Паскаль.
112 CASE constant out of range(Константа CASE нарушает допустимые границы).
Целочисленные константы оператора CASE должны находиться в диапазоне от -32768 до 32767.
113 Error in statement (Ошибка в операторе).
Данный символ не может быть первым символом в операторе.
114 Cannot call an interrupt procedure (Невозможно вызвать процедуру прерывания) .
Вы не можете непосредственно вызвать процедуру обработки прерывания.
115
Ошибка с этим кодом не описана в версии 7.0 системы Турбо Паскаль.
116 Must be in 8087 mode to compile this (Для компиляции необходим режим 8087) .
Данная программа может быть скомпилирована только в режиме {$N+}. В состоянии {SN-} операции с типами SINGLE, DOUBLE, EXTENDED и СОМР не допускаются.
117 Target address not found (Указанный адрес не найден).
Команда COMPILE/FIND ERROR в среде Турбо Паскаля (или поиск с помощью опции /F в командной строке компилятора ТРС.ЕХЕ) не обнаружила оператор, соответствующий заданному адресу.
118 Include files are not allowed here (Здесь не допускаются включаемые файлы) .
Раздел операторов должен целиком размещаться в одном файле.
119 No inherited methods are accessible here (В этом месте программы нет унаследованных методов).
Вы используете зарезервированное слово INHERITED вне метода объекта или в методе, который не унаследован от родительского объекта.
120
Ошибка с этим кодом не описана в версии 7.0 системы Турбо Паскаль. .
121 Invalid qualifier (Неверный квалификатор).
Возможные причины сообщения:
Вы пытаетесь индексировать переменную, которая не является массивом;
Вы пытаетесь указать поля в переменной, которая не является записью;
Вы используете в качестве указателя переменную, которая не является указателем.
122 Invalid variable reference (Недействительная ссылка на переменную).
Предыдущая конструкция удовлетворяет синтаксису ссылки на переменную, но она не указывает адрес памяти. Возможно Вы вызываете функцию-указатель, но забываете сослаться на результат с помощью знака.
123 Too many symbols'(Слишком много символов) .
Программа или программный модуль содержат более 64 Кбайт символов. Если Вы компилируете программу с директивой {$D+}, то попробуйте отключить эту директиву или разбейте программу на несколько модулей.
124 Statement part too large (Слишком большой раздел операторов).
Турбо Паскаль ограничивает размер раздела операторов до величины примерно 24 Кбайта. Если Вы обнаружили эту ошибку, поместите части раздела операторов в одну или несколько процедур и вообще сделайте Вашу программу более структурированной.
125
Ошибка с этим кодом не описана в версии 7.0 системы Турбо Паскаль.
126 Files must be var parameters (Файлы должны передаваться как параметры-переменные) .
Вы пытаетесь передать процедуре или функции параметр-значение файлового типа. Параметры файлового типа должны быть параметрами-переменными.
127 Too many conditional symbols (Слишком много условных символов).
Недостаточно памяти для определения условных символов (слов, управляющих командами условной компиляции). Попытайтесь удалить некоторые символы или уменьшить их длину.
128 Misplaced conditional directive (Пропущена условная директива).
Компилятор обнаружил директиву {$ELSE} или {$ENDIF} без соответствующих директив {$IFDEF}, {$IFNDEF} или {$IFOPT}.
129 ENDIF directive missing (Пропущена директива ENDIF).
Исходный файл закончился внутри конструкции условной компиляции. В исходном файле должно быть равное количество директив {$IFxxx} и {$ENDIF}.
130 Error in initial conditional defines (Ошибка в условных определениях).
Исходные условные символы.указанные в опции OPTIONS/COMPILER /CONDITIONAL DEFINES являются недействительными. Турбо Паскаль требует нуля или более идентификаторов, разделенных пробелами, запятыми или точками с запятой.
131 Header does not match previous definition (Заголовок не соответствует предыдущему определению).
Возможные причины сообщения:
заголовок процедуры или функции, указанный в интерфейсной секции, не соответствует заголовку в исполняемой части.
заголовок процедуры или функции, указанный с помощью опережающего описания FORWARD, не соответствует заголовку найденной далее одноименной процедуры или функции.
132 Critical disk error (Критическая ошибка диска).
Во время компиляции произошла критическая ошибка диска (например, дисковод находится в состоянии «не готов»).
133 Cannot evaluate this expression (Нельзя вычислить данное выражение).
В выражении-константе или в отладочном выражении Вы пытаетесь использовать неподдерживаемые средства, например, в описании константы пытаетесь использовать функцию SIN или вызвать в отладочном выражении определенную пользователем функцию.
134 Expression incorrectly terminated (Некорректное завершение выражения).
Контекстуально в данном месте программы должен быть конец выражения или оператора.
135 Invalid format specifier (Неверный спецификатор формата).
Используется неверный спецификатор формата или числовой аргумент спецификатора формата выходит за допустимые границы.
136 Invalid indirect reference (Недопустимая косвенная ссылка).
Оператор пытается осуществить недопустимую косвенную ссылку. Например, Вы используете абсолютную переменную, базовая переменная которой в текущем модуле неизвестна, или используете программу типа INLINE, в которой делается ссылка на переменную, неопределенную в текущем модуле.
137 Structured variable are not allowed here (Здесь нельзя использовать переменную структурного типа).
Делается попытка выполнить над переменной структурного типа неподдерживаемую операцию. Например, Вы пытаетесь перемножить две записи.
138 Cannot evaluate without System unit (Нельзя вычислить выражение без модуля SYSTEM).
Чтобы отладчик смог вычислить выражение, в файле TURBO.TPL должен содержаться модуль SYSTEM.
139 Cannot access this symbol (Нет доступа к данному символу).
Как только Вы скомпилируете программу, все множество ее символов становится доступным. Однако к отдельным символам (например, к переменным) нельзя получить доступ, пока Вы не запустите программу.
140 Invalid floating-point operation (Недопустимая операция с плавающей запятой) .
При выполнении операции с плавающей запятой произошло переполнение или деление на ноль.
141 Cannot compile overlay to memory (Нельзя выполнить компиляцию оверлейных модулей в память).
Программа, использующая оверлейные модули, должна компилироваться на диск.
142 Procedure or function variable expected (Должна использоваться переменная процедурного типа).
В этом контексте оператор получения адреса @ может использоваться только с переменной процедурного типа.
143 Invalid procedure or function reference (Недопустимая ссылка на процедуру или функцию).
Возможные причины сообщения:
Вы пытаетесь вызвать процедуру в выражении;
процедура или функция, использующаяся в качестве параметра вызова другой процедуры или функции, должна компилироваться в состоянии {$F+} и не может описываться с помощью зарезервированных слов INLINE или INTERRUPT.
144 Cannot overlay this unit (Этот модуль не может использоваться в качестве оверлейного).
Попытка использовать в качестве оверлейного модуль, который не был скомпилирован с директивой {$O+}.
145 Too many nested scopes (Слишком много вложений).
В программе не может быть больше 512 вложений с не более чем 128 вложениями в каждом модуле. Вложениями считаются:
каждый модуль в предложении USES;
каждая вложенная запись в типе RECORD;
каждый вложенный оператор WITH.
146 File access denied (Отказано в доступе к файлу).
Возможные причины:
Вы пытаетесь использовать файл с атрибутом «только для чтения» в качестве выводного файла;
Вы используете имя каталога вместо имени выводного файла.
147 Object type expected (Здесь должен быть тип OBJECT).
Этот идентификатор должен принадлежать к типу OBJECT.
148 Local object types are not allowed (Нельзя объявлять локальные объекты).
Нельзя объявить объект в процедуре (функции).
149 VIRTUAL expected (Пропущено слово VIRTUAL).
150 Method identifier expected (Пропущен идентификатор инкапсулированного правила).
151 Virtual constructor are not allowed (Конструктор не может быть виртуальным) .
153 Destructor identifier expected (Пропущен идентификатор деструктора).
154 Fail only allowed within constructor (Обращение к стандартной процедуре FAIL может содержаться только в конструкторе).
155 Invalid combination of opcode and operands (Недопустимая комбинация кода команды и операндов).
Код ассемблерной команды не может иметь такие операнды. Причины ошибки:
указано слишком много или слишком мало операндов для данной команды, например, INC AX, BX или MOV AX;
количество операндов правильное, но их типы или порядок следования не соответствуют данной команде, например, DEC 1, MOV AX, CL или MOV 1,AX.
156 Memory reference expected (Отсутствует адрес).
Операнд ассемблерной команды не содержит адрес. Вероятно, Вы забыли выделить квадратными скобками индексный регистр, например, MOV АХ, BX+SI вместо MOV АХ, [BX+SI] .
157 Cannot add or subtract relocatable symbols (Нельзя складывать или вычитать перемещаемые символы).
В ассемблерных выражениях обоими операндами в операциях сложения или вычитания могут быть только ссылки на константу. Идентификаторы переменных, процедур, функций и меток являются перемещаемыми
символами и не могут использоваться в качестве двух операндов одновременно в таких операциях. Если VAR -идентификатор переменной, a CONST - константы, то предложения MOV AX, CONST+CONST и MOVE AX, VAR+CONST будут правильными, в то время как выражение MOV AX, VAR+VAR недопустимо.
158 Invalid register combination (Недопустимая комбинация регистров).
Допустимыми комбинациями индексных регистров являются [ВХ] , [BpJ, [SI], [DI] , [BX+SI] , [BX+DI] , [BP+SI] и [BP+DI] . Другие комбинации (например, [АХ] , [BP+BX] , [SI+DX]) недопустимы. Заметим, что локальные переменные размещаются в стеке и доступ к ним организуется через регистр ВР. Ассемблер автоматически добавляет [ВР] в ссылках на такие переменные, поэтому в операндах типа LOCAL [ВХ] , где LOCAL - локальная переменная, образуется недопустимая ссылка LOCAL[BP+BX].
159 286/287 instructions are not enabled (Недоступен набор команд микропроцессоров 286/287) .
Используйте директиву {$G+}, но учтите, что такую программу можно исполнять только на ПК, оснащенных микропроцессором Intel 80286/80287 или более поздним.
160 Invalid symbol reference (Недопустимая ссылка на символ).
К указанному символу нельзя обратиться в ассемблерной программе. Это может быть следствием таких причин:
Вы пытаетесь использовать ссылки на стандартные процедуры (функции) или специальные массивы MEM, MEMW, MEML, PORT и PORTW в ассемблерных операндах;
Вы обращаетесь к строковой, вещественной константе или константе типа SET в операнде ассемблерной команды;
в ассемблерном операнде Вы обращаетесь к процедуре или функции, написанной в режиме INLINE;
Вы пытаетесь получить с помощью операции @Result доступ к результату, возвращаемому функцией;
Вы пытаетесь использовать короткую форму команды JMP для передачи управления в непомеченный оператор программы.
161 Code generation error (Ошибка генерации кода).
Ошибка возникает, в частности, при компиляции ассемблерных фрагментов, содержащих команды LOOP, LOOPE, LOOPNE, JCXZ, если команда ссылается на недоступную метку.
162 ASM expected (Отсутствует зарезервированное слово ASM).