ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 6 Процедура Write (текстовые файлы) модуль System ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Назначение: Записывает одно или более значений из одной или более переменных в текстовый файл. Целевая платформа: Защищенный режим, реальный режим, Windows. Описание: procedure Write( [var f: Text;] v1 [,v2,...,vn]); Примечания: Параметр f (если он указан) является файловой переменой, соответствующей текстовому файлу. Если он опущен, то подразумевается использование стандартной файловой переменной Output. Каждый параметр v является записываемым параметром. Каж- дый записываемый параметр включает в себя выводимое выражение, значение которого должно быть записано в файл. Каждое выводимое выражение должно быть символьного, целого, вещественного, строко- вого, упакованного строкового или булевского типа. Записываемый параметр имеет вид: вывод_выраж [ : мин_разм [ : дес_знак ]] где "вывод_выраж" представляет собой выводимое выражение, а "мин_ разм" и "дес_знак" являются выражениями целого типа. "мин_разм" задает минимальную ширину поля, которая должна быть больше нуля. Если "вывод_выраж" имеет значение, которое должно быть представ- лено числом символов, превышающим задаваемое параметром "мин_разм", то записывается ровно столько символов, сколько опре- делено в параметре "мин_разм" (при необходимости используются предшествующие пробелы). В этом случае, чтобы представить значе- ние "вывод_выраж", записывается достаточное количество символов. Аналогично, если параметр "мин_разм" опущен, то для того, чтобы представить значение "вывод_выраж", записывается достаточное ко- личество символов. Параметр "дес_знак" задает число десятичных знаков в предс- тавлении вещественного значения с фиксированной точкой. Оно мо- жет указываться только в том случае, если "вывод_выраж" имеет ве- щественный тип, а также указан параметр "мин_разм". Если параметр "мин_разм" указан, то он должен быть больше нуля или равен нулю. Что касается записи символьного значения, то, если параметр "мин_разм" опущен, в файл записывается символьное выражение "вы- вод_выраж". В противном случае значение параметра "мин_разм" -1 опреде- ляет запись пробелов и далее символьного значения "вывод_выраж". При записи целочисленного значения, если опущен параметр "мин_разм", то десятичное представление "вывод_выраж" записывает- ся в файл без предшествующих пробелов. Если параметр "мин_разм" указывается, и его значение превышает длину десятичной строки, то перед десятичной строкой записывается количество пробелов, доста- точное для того, чтобы длина десятичной строки соответствовала параметру "мин_разм". При записи вещественного значения, в файл записывается деся- тичное представление вещественного значения "вывод_выраж". Формат представления зависит от наличия или отсутствия параметра "дес_знак". Если параметр "дес_знак" опущен (или если он присутствует, но имеет отрицательное значение), то записывается десятичная строка с плавающей точкой. Если параметр "мин_разм" также опу- щен, то по умолчанию он подразумевается равным 17. В противном случае, если параметр "мин_разм" меньше 8, то его значение подра- зумевается равным 8. Десятичная строка с плавающей точкой имеет следующий формат: [!-] <цифра>.<десят_знаки>E[+!-<показатель_степени>] Элементы выводимой строки приведены ниже: ЪДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і [!-] і Знак, соответствующий знаку "вывод_выраж" і ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і <цифра> і Отдельная цифра или ноль (в том случае, і і і когда "вывод_выраж" равно 0. і ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і <десят_знаки> і Цифровая строка длиной "мин_разм"-7 (но неі і і более 10 цифр). і ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і E і Символ E в верхнем регистре. і ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і [+!-] і Знак, соответствующий знаку показателя степе-і і і ни. і ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і <показатель_ і Десятичный показатель степени из двух цифр. і і степени> і і АДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ Если присутствует параметр "дес_знак", то записывается деся- тичная строка с фиксированной точкой. Если значение данного пара- метра превышает 11, то оно считается равным 11. Строка с фиксиро- ванной точкой имеет следующий формат: [<пробелы>][-]<цифры>[.<десят_знаки>] Элементы строки с фиксированной точкой приведены ниже: ЪДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і [.<пробелы>] і Пробелы (чтобы длины строки соответствова-і і і ла параметру "мин_разм"). і ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і [-] і Знак -, если "вывод_выраж" отрицательно. і ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і <цифры> і По крайней мере одна цифра. Начальные ну-і і і ли не допускаются. і ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і <.десят_знаки> і Десятичные знаки, если параметр "дес_знак"і і і больше нуля. і АДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ Запись значения строкового типа производится следующим обра- зом. Если параметр "мин_разм" опущен, то в файл записывается строковое значение "вывод_выраж", а предшествующие пробелы от- сутствуют. Если указан параметр "мин_разм" и его значение превы- шает длину "вывод_выраж", то перед десятичной строкой для того, чтобы ее длина соответствовала параметру "мин_разм", записывается достаточное количество пробелов. При записи значения упакованного строкового типа, эффект бу- дет тем же самым, что и при записи строки, длина которой соот- ветствует числу элементов в выражении упакованного строкового ти- па. При записи булевского значения выполняются такие же дейс- твия, как при записи строк Truе или False, в зависимости от зна- чения "вывод_выраж". При указании директивы компилятора {$I-} функция IORеsult будет возвращать значение 0 в том случае, если операция заверши- лась успешно, и ненулевой код ошибки в противном случае. Ограничения: Файл должен быть открыт для вывода. См. также: Writeln. Процедура Write (типизированные файлы) модуль System ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Назначение: Записывает переменную в элемент файла. Целевая платформа: Защищенный режим, реальный режим, Windows. Описание: procedure Write(f, v1 [, v2,...,vn] ); Примечания: Параметр f является файловой переменной, а каж- дый элемент v представляет собой переменную того же типа, что и элемент файла f. При каждой записи переменной текущая позиция в файле продвигается к следующему элементу. Если текущая позиция файла находится в конце файла (то есть когда Eof(f) имеет значе- ние Truе), то файл расширяется. При указании директивы компилятора {$I-} функция IORеsult будет возвращать значение 0 в том случае, если операция заверши- лась успешно, и ненулевой код ошибки в противном случае. См. также: Writeln. Функция WriteBuf модуль WinCrt ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Назначение: Записывает блок символов в окно CRT. Целевая платформа: Windows. Описание: function WriteBuf(Buffer: PChar; Count: Word): Word; Примечания: Параметр Buffer указывает на первый символ бло- ка, а Count - это число записываемых символов. Если AutoTracking равно True, то окно CRT при необходимости прокручивается, обеспе- чивая видимость курсора после записи блока символа. Функция WriteChar модуль WinCrt ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Назначение: Записывает в окно CRT одиночный символ. Целевая платформа: Windows. Описание: procedure WriteChar(Ch: Char); Примечания: Вызывая функцию WriteBuf(@Ch,1), записывает сим- вол Char в окно CRT в текущей позиции курсора. См. также: WriteBuf Процедура Writeln ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Назначение: Выполняет процедуру Write, а затем записывает в файл метку конца строки. Целевая платформа: Реальный режим, защищенный режим, Windows. Описание: procedure Writeln([var f:Text;] v1, [,v2,...,vn]); Примечания: Данная процедура является расширением процедуры Write для текстовых файлов. После выполнения процедуры Write про- цедура Writeln записывает метку конца строки (возврат каретки / перевод строки). При вызове данной процедуры без параметров (Write(f)), в файл записывается метка конца строки. (Процедура Writeln без указания списка параметров полностью соответствует процедуре Writeln (Output)). Ограничения: Файл должен быть открыт для вывода. См. также: Write. Глава 2. Директивы компилятора ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В данной главе описываются директивы компилятора, которые вы можете использовать для управления средствами компилятора Borland Pascal. Они описываются в алфавитном порядке. Каждая директива компилятора классифицируется как переключатель, параметр или ди- ректива условной компиляции. Некоторые из директив, применимые только к определенным целевым платформам, отмечены словами "ре- альный режим", "защищенный режим" или "Windows". За списком ди- ректив компилятор следует краткое описание использования директив условной компиляции. Данный справочный раздел описывает, как ис- пользовать условные конструкции и идентификаторы для получения из одного и того же текста различного кода. Директива компилятора представляет собой комментарий со спе- циальным синтаксисом. Borland Pascal допускает директивы компиля- тора везде, где допускаются комментарии. Директива компилятора начинается со знака $, стоящего первым после открывающего гранич- ного знака комментария. Непосредственно после знака $ следует имя (одна или несколько букв), которое определяет конкретные директи- вы. Имеются три типа директив: - Директивы-переключатели. Эти директивы включают конкретные возможности компилятора или выключают их с помощью указа- ния знака плюса "+" или минуса "-" сразу после имени ди- рективы. Глобальные директивы влияют на всю компиляцию и должны следовать перед описательной частью компилируемой програм- мы или модуля. Локальные директивы влияют только на ту часть компилируе- мого кода, которая простирается от директивы до следующего вхождения той же директивы. Директивы-переключатели могут объединяться в одной дирек- тиве-комментарии компилятора и разделяться запятыми без пробелов. Например: {$B+,R-,S-} - Директивы с параметрами. Эти директивы задают параметры, оказывающие влияние на компиляцию, такие, например, как имена файлов и размеры памяти. - Условные директивы. Эти директивы используются для управ- ления условной компиляцией частей исходного текста, осно- ванной на определении пользователем условных идентификато- ра. Все директивы, за исключением директив-переключателей, долж- ны иметь крайней мере один пробел между именем директивы и пара- метром. Ниже приводятся некоторые примеры директив компилятора: {$B+} {$R- Turn off range-checking} {$I TYPES.INC} {$O EdFormat} {$M 65520,8192,655360} {$DEFINE Debug} {$IFDEF Debug} {$ENDIF} Директивы компилятора вы можете разместить непосредственно в исходном коде программы. Можно также изменить используемые по умолчанию директивы с помощью компилятора, использующего команд- ную строку (TPC.EXE или BPC.EXE) или с помощью компилятора, рабо- тающего в интегрированной интерактивной среде (TURBO.EXE, BP.EXE или BPW.EXE). Все директивы компилятора можно задавать с помощью меню выбора параметров компилятора (OptionsіCompiler). Все вноси- мые вами в меню изменения будут иметь силу при последующих компи- ляциях. Вы можете выбрать один из двух компиляторов, работающих в режиме командной строки: BPC.EXE или TPC.EXE, BPC.EXE работает в защищенном режиме DOS и предназначен для приложений реального ре- жима, Windows и защищенного режима. TPC.EXE работает только в ре- альном режиме DOS и предназначен только для приложений DOS реаль- ного режима. При использовании командного компилятора директивы компиля- тора можно либо задавать в командной строке (например, TPC /$R+ MYPROG), либо поместить их в файл конфигурации TPC.CFG (более де- тальное описание дается в Главе 3). Директивы компилятора, кото- рые содержатся в исходном коде, всегда отменяют принятые по умол- чанию значения директив. Это справедливо как для компилятора, ра- ботающего в режиме командной строки, так и для интерактивного компилятора (IDE). Если работаете в IDE для DOS или в IDE для Windows, исполь- зуя альтернативный набор команд, и хотите быстро просмотреть, ка- кие действуют директивы компилятора, нажмите клавиши Ctrl+O O. Borland Pascal выведет текущие установки в начале файла в окне редактирования. Выравнивание данных переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$A+} или {$A-} По умолчанию: {$A+} Тип: Глобальный. Замечание: Данная директива позволяет переключаться между выравниванием переменных и типизированных констант на границу слова и на границу байта. Для процессора 8088 выравнивание на границу слова игнорируется. Однако для всех процессоров 80х86 вы- равнивание на границу слова означает более быстрое выполнение, поскольку адресация ко всем элементам, имеющим размер в слово, или четным адресам происходит за один цикл обращения к памяти вместо двух. В состоянии {$A+} все переменные и типизированные константы, превышающие по размеру один байт, выравниваются на границу машин- ного слова (адреса с четными значениями). В случае необходимости между переменными для достижения выравнивания на границу слова включаются дополнительные неиспользуемые байты. Директива {$A+} не влияет ни на переменные размером в байт, ни на поля структур или элементы массивов. Поле записи будет выравниваться на границу слова только в том случае, если общий размер всех следующих перед ним полей будет иметь четное значение. Аналогично, для любого элемента массива выравнивание на границу слова будет иметь место только когда размер элементов имеет четное значение. В состоянии {$A-} никаких действий по выравниванию не предп- ринимается. Переменные и типизированные константы независимо от их размера помещаются в этом случае просто по следующему доступ- ному адресу. Независимо от директивы $A+ в разделе описаний каждое описа- ние var и const всегда начинается на границе слова. Аналогично, компилятор всегда старается поддерживать указатель стека (SP) вы- ровненным на границу слова, для чего в случае необходимости для стека процедуры выделяется дополнительный неиспользуемый байт. Булевские вычисления переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$B+} или {$B-} Значение по умолчанию: {$B+} Тип: Локальный. Замечание: Эта директива осуществляет два различных вида ге- нерации кода для булевских операций and и or. В состоянии {$B+} компилятор генерирует код для полного вы- числения булевского выражения. Это значит, что каждый операнд бу- левского выражения, участвующие в операциях and и or, будет вы- числен, даже если результат всего выражения заранее известен. В состоянии {$B-} компилятор генерирует код для вычисления булевского выражения по короткой схеме, то есть вычисление прек- ратится сразу, как только станет очевидным результат вычисления всего этого выражения. Более подробно смотрите информацию в Главе 6 ("Выражения") "Руководства по языку". Атрибут сегмента кода параметр ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$C атрибут атрибут ...} Значение по умолчанию: {$С MOVEABLE DEMANDLOAD DISCARDABLE} Тип: Глобальный. Замечание (только для Windows и защищенного режима): Данная директива используется для управления атрибутами сегмента кода. Каждый сегмент кода в прикладной программе или библиотеке имеет набор атрибутов, которые определяют поведение кодового сегмента при его загрузке в память. Например, вы можете задать, что сег- мент кода является перемещаемым (MOVEABLE). Это означает, что Windows может при необходимости перемещать сегмент кода в памяти. Либо вы можете задать фиксированный сегмент (FIXED). Это означа- ет, что адрес сегмента кода в памяти изменяться не может. Директива $C влияет только на тот сегмент кода программного модуля (модуля, программы или библиотеки), в котором она размеще- на. В следующей таблицы параметры атрибута сегмента показаны по- парно: каждый параметр имеет противоположный вариант. ЪДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і Атрибут і Значение і ГДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і MOVEABLE і Система может изменить расположение сег-і і і мента в линейной памяти. і і і і і FIXED і Система не может изменить расположениеі і і сегмента в линейной памяти. і ГДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і DEMANDLOAD і Сегмент кода загружается только при необ-і і і ходимости. і і і і і PRELOAD і Сегмент кода загружается, когда программаі і і начинает выполнение. і ГДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і DISCARDABLE і Когда сегмент кода больше не нужен, он мо-і і і жет быть выгружен. і і і і і PERMANENT і После загрузки сегмент кода остается ві і і памяти. і АДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ Первый параметр каждой группы задается по умолчанию. В ди- рективе $C вы можете задать несколько атрибутов сегмента. Если в директиве $C заданы оба параметра группы, то действует только последний, например: {$C FIXED MOVEABLE DISCARDABLE} Данная директива сделает сегмент кода перемещаемым и выгру- жаемым (когда сегмент больше не требуется). Информация для отладки переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$D+} или {$D-} По умолчанию: {$D+} Тип: Глобальный. Замечание: Данная директива задает или отменяет генерацию информации для отладке. Отладочная информация состоит из таблицы номеров строк для каждой процедуры, устанавливающей соответствие адресов объектных кодов с номерами строк исходного текста. Когда эта возможность задана для данной программы или моду- ля, встроенный отладчик Borland Pascal позволяет проходить этот модуль по шагам и устанавливать точки останова. Кроме того, при появлении ошибки во время выполнения программы или программного модуля, который был скомпилирован с включенным параметром генера- ции информации для отладки ({$D+}), Borland Pascal использует эту информацию для определения оператора в исходном тексте, приведше- го к появлению ошибки. Для программных модулей отладочная информация записывается в файл модуля вместе с объектным кодом. Отладочная информация при- водит к увеличению размера файлов модуля и требует дополнительно- го пространства при компиляции использующей данный модуль прог- раммы, но на размер и скорость работы выполняемой программы влия- ния не оказывает. Если программа или модуль компилируются в состоянии {$D+}, встроенный отладчик Borland Pascal позволяет вам выполнять этот модуль по шагам и устанавливать в нем точки останова. (В BWP.EXE эта функциональная возможность недоступна.) Параметры Standalone debugging (Автономная отладка) меню OptionsіDebugger (ПараметрыіОтладчик) и Map File (Файл Map) меню OptionsіLinker (ПараметрыіКомпоновщик) позволяют включить для данного модуля полную информацию (если этот модуль компилировался в состоянии {$D+}). Переключатель отладочной информации обычно используется вместе с переключателем локальных идентификаторов, который позво- ляет включить или выключить генерацию отладочной информации о ло- кальных идентификаторах. Если вы хотите использовать для отладки программ Турбо от- ладчик, то задайте компиляцию на диск (для чего нужно установить параметр CompileіDestination (КомпиляцияіНазначение) в значение Disk и проверить параметр Standalone (Автономная отладка) меню OptionsіDebuggerіDebugging). Директива DEFINE условная компиляция ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$DEFINE имя} Замечание: Директива $DEFINE определяет условный идентифика- тор с данным именем. Идентификатор будет определенным для остав- шейся части исходного компилируемого кода или до тех пор, пока он не появится в директиве {$UNDEFINE имя}. Если "имя" уже определе- но, директива {$DEFINE имя} не вызывает никаких действий. Описание параметр ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$D текст} Тип: Глобальный. Замечание (только для Windows и защищенного режима): Дирек- тива $D вставляет заданным вами текст в запись описания модуля в заголовке файла .EXE или .DLL. Обычно этим текстом является имя и номер версии, но вы можете задать по своему выбору любой текст, например: {$D моя версия приложения 13.1} Директива ELSE условная компиляция ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$ELSE} Замечание: Директива ELSE приводит к компиляции или игнори- рованию исходного текста, ограниченного последним {$IFxxx} и сле- дующим {$ENDIF}. Эмуляция переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$E+} или {$E-} По умолчанию: {$E-} Тип: Глобальный. Замечание: Эмуляция разрешает или запрещает компоновку с библиотекой исполняющей системы, которая будет эмулировать работу сопроцессора 8087 в случае его отсутствия. Для реального и защищенного режима: Когда вы компилируете программу в состоянии {$N+,E+}, Borland Pascal выполняет компо- новку с полным эмулятором 8087. Полученный в результате выполняе- мый файл может использоваться на любом компьютере независимо от наличия сопроцессора 8087. Если исполняющая система находит такой сопроцессор, то она его использует. В противном случае он эмули- руется с помощью библиотеки исполняющей системы. В состоянии {$N+,E-} Borland Pascal создавать программу, ко- торая может использоваться только при наличии сопроцессора 8087. При использовании в программном модуле переключатель эмуля- ции сопроцессора 8087 никакого влияния не оказывает. Он действует только при компиляции программы. Более того, если программа была скомпилирована в состоянии {$N+}, а все используемые этой прог- раммой модули - в состоянии {$N-}, то необходимость использования библиотеки исполняющей системы отпадает, и переключатель эмуляции сопроцессора 8087 игнорируется. Директива ENDIF условная компиляция ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$ENDIF} Замечание: Директива ENDIF заканчивает условную компиляцию, начатую последней директивой {$IFxxx}. Принудительный дальний тип вызова переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$F+} или {$F-} По умолчанию: {$F-} Тип: Локальный. Данная директива управляет выбором типа вызова последова- тельно компилируемых процедур и функций. Процедуры и функции, скомпилированные в состоянии {$F+}, всегда используют дальний тип обращений. При указании директивы {$F-} Borland Pascal автомати- чески выбирает соответствующий тип обращений: дальний (far), если процедура или функция описывается в разделе интерфейс программной единицы, и ближний (near) в противном случае. Дальний и ближний тип вызова описываются полностью в Главе 22 ("Вопросы управления") "Руководства по языку". Генерация кода для процессора 80286 переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$G+} или {$G-} По умолчанию: {$G-} для реального режима; {G+} для защищен- ного режима и Windows. Тип: Глобальный. Замечание: Директива $G разрешает или запрещает генерацию кода для процессора 80286. В состоянии {$G-} генерируются только инструкции процессора 8086, и программы, сгенерированные в этом состоянии, могут выполняться на любом процессоре серии 80х86. В состоянии {$G+} компилятор использует дополнительные инс- трукции процессора 80286, которые улучшают генерацию кода, но программы, скомпилированные в этом состоянии, не смогут работать на процессорах 8086 или 8088. Эти дополнительные инструкции вклю- чают в себя непосредственные инструкции ENTER, LEAVE, PUSH, рас- ширенную инструкцию IMUL и расширенные инструкции SHL и SHR. В Windows эта директива отмечает файл .EXE, как предназна- ченный только для защищенного режима. Директива {$G+} в модуле отмечает итоговый файл, как предназначенный только для защищенно- го режима. Данная директива определяет также, где хранятся строки и константы множественного типа. Если ваша программа компилируется с директивой {G+} под Windows, то константы строкового и множест- венного типа хранятся в сегменте кода (как в реальном режиме). Если ваша программа предназначена для реального режима Windows и содержит директиву {G-}, то константы хранятся в сегменте данных, уменьшая в сегменте данных объем памяти, доступной для глобальных переменных и типизированных констант. См. Главу 4 ("Сообщения об ошибках"), где вы найдете более подробную информацию о том, как избежать получения сообщения об ошибке, указывающего, что ваш сегмент данных слишком велик. Сегменты групп модулей параметр ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$G имя_модуля, имя_модуля ...} Тип: Глобальный. Замечание (только для Windows и защищенного режима): Дирек- тива $G позволяет вам задать группы модулей, которые компоновщих должен размещать в одном сегменте. Группирование модулей в одном сегменте обеспечивает, что свопинг этих модулей в память и из па- мяти выполняется одновременно. Директива $G используется в основ- ном для группирования модулей, содержащих выгружаемый код. Каждая директива $G задает группу модулей. Директива $G до- пускается только в операторе uses программы или библиотеки. Если вы используете модуль в более чем в одной группе, то компилятор выводит сообщение об ошибке. Кроме того, для любой группы, соз- данной по директиве $G, компилятор поддерживает используемую по умолчанию группу, которая включает в себя все явно не сгруппиро- ванные модули. Компоновщик минимизирует число сегментов кода в выполняемом файле, комбинируя все модули, принадлежащие к одной группе. Два или более модуля, если они принадлежат к одной группе и имеют одинаковые атрибуты сегмента кода, если их общий размер не превы- шает допустимого размера сегмента, помещаются в один сегмент ко- да. Примечание: Атрибутами сегмента кода можно управлять с помощью директивы $C. Допустимый размер сегмента устанавли- вается директивой $S. Компоновщик никогда не помещает в сегмент кода модули, при- надлежащие к одному сегменту кода. Директива IFDEF условная компиляция ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$IFDEF идентификатор} Замечание: Директива IFDEF компилирует следующий за ней ис- ходный текст, если имя "идентификатор" определено. Директива IFNDEF условная компиляция ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$IFNDEF идентификатор} Замечание: Директива IFNDEF компилирует следующий за ней ис- ходный текст, если имя "идентификатор" не определено. Директива IFOPT условная компиляция ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$IFOPT переключатель} Директива IFOPT компилирует следующий исходный текст, если "переключатель" находится в данное время в указанном состоянии. Переключатель (директива) состоит из имени директивы-переключате- ля, за которым следует знак плюс (+) или знак минус (-). Напри- мер, конструкция: {$IFOPT N+} type real = extended; {$ENDIF} скомпилирует описание типа, если директива $N является в данное время действующей. Включение файла параметр ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$I имя_файла} Тип: Локальный. Замечание: Данная директива сообщает компилятору о необходи- мости включить в компиляцию названный файл. Фактически файл вставляется в скомпилированный текст непосредственно за директи- вой {$I имя_файла}. Расширением по умолчанию для параметра "имя_файла" является .PAS. Если параметр "имя_файла" не указывает каталога, то в дополнение к поиску файлов в текущем каталоге Borland Pascal осуществляет поиск его в каталогах, указанных в меню OptionsіDirectoriesіInclude Directories, или в каталогах, указанных в параметре /I командной строки компилятора BPC или TPC. Имеется одно ограничение на использование включаемых файлов: включаемый файл не может указываться в середине раздела операто- ров. Это означает, что все операторы между операторными скобками begin и end раздела операторов должны постоянно находиться в од- ном и том же исходном файле. Проверка ошибок ввода-вывода переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$I+} или {$I-} По умолчанию: {$I+} Тип: Локальный. Замечание: Данная директива задает или отменяет генерацию автоматического кода, проверяющего результат обращения к процеду- ре ввода-вывода. Процедуры ввода-вывода описываются в Главе 14 ("Ввод и вывод") "Руководства по языку". Если процедура ввода-вы- вода возвращает ненулевой результат ввода-вывода при включенном переключателе (+), то программа завершает работу, выводя на экран сообщения об ошибке этапа выполнения. Если переключатель выключен (-), то результат операции ввода-вывода нужно проверять с помощью функции OIResult. Эффективные вызовы переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$K+} или {$K-} По умолчанию: {$K+} Тип: Глобальный. Замечание (только для Windows) Директива $K управляет гене- рацией эффективных вызовов экспортируемых приложением процедур и функций. Когда прикладная программа генерируется в состоянии {$K-}, то при создании вызываемых подпрограмм API Windows она должна использовать подпрограммы MakeProcInstance и FreeProcInstance. В состоянии по умолчанию ({$K+}) прикладная программа сама может вызывать экспортированные точки входа, и ис- пользовать подпрограммы MakeProcInstance и FreeProcInstance нет необходимости. Подробнее об эффективных вызовах рассказывается в разделе "Код входа и выхода" Главы 22 "Руководства по языку". Компоновка объектного файла параметр ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$L имя_файла } Тип: Локальный. Замечание: Данная директива предписывает компилятору скомпо- новать указанный файл с компилируемой программой или программным модулем. Директива $L используется для компоновки кода, написан- ного на языке ассемблера для подпрограмм, описанных как внешние (external). Указанный файл должен быть перемещаемым объектным файлом в формате Intel (файл .OBJ). Расширением по умолчанию для параметра "имя_файла" является .OBJ. Если в параметре "имя_файла" каталог не задан, то в дополнение к поиску файла в текущем ката- логе Borland Pascal просматривает каталоги, указанные в меню OptionsіDirectoriesіObject Directories или в каталогах, указанных в параметре /0 командной строки компилятора TPC или BPC. Более подробно о редактировании с языком Ассемблера, смотри- те в Главе 25 ("Компоновка с кодом Ассемблера") "Руководства по языку". Информация о локальных идентификаторах переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$L+} или {$L-} По умолчанию: {$L+} Тип: Глобальный. Замечание: Данная директива приводит в действие или отменяет генерацию информации о локальных идентификаторах. Информация о локальных идентификаторах состоит из имен и типов всех локальных переменных и констант данного модуля, то есть из идентификаторов в секции реализации модуля и идентификаторов, содержащихся в про- цедурах и функциях этого модуля. Для модулей информация о локальных идентификаторах записыва- ется в объектном файле наряду с объектным кодом модуля. Эта ин- формация увеличивает размер файлов (требуется дополнительное пространство). Однако на размер и скорость работы выполняемой программы это влияния не оказывает. Когда для данного модуля задана генерация информации о ло- кальных идентификаторах, встроенный отладчик Borland Pascal поз- воляет вам проверять и модифицировать локальные переменные моду- ля. Кроме того, с помощью меню DebugіCalls Stack (ОтладчикіСтек вызова) можно проверять обращения к процедурам и функциям модуля. Объектные методы, реализованные на ассемблере, можно скомпо- новать с программами Borland Pascal с помощью директивы компиля- тора $L и ключевого слова External. Параметры Map File (Файл Map) меню OptionsіLinker (Параметры іКомпоновщик) и Standalone debugging (Автономная отладка) менюv OptionsіDebugger (ПараметрыіОтладчик) позволяют получить информа- цию о локальных идентификаторах для данного модуля, если этот мо- дуль компилировался в состоянии {$L+}. Переключатель, задающий включение информации о локальных идентификаторах, обычно используется вместе с переключателем включения в файл отладочной информации, который позволяет вклю- чить или выключить генерацию таблицы номеров строк для отладки. Заметим, что в том случае, если переключатель отладочной информа- ции выключен ({$D-}), директива $L будет игнорироваться. Размеры выделяемой памяти параметр ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$M размер_стека,мин_разм_динам_области, макс_разм_динам_области} (реальный режим) {$M размер_стека} (защищенный режим) {$M размер_стека, разм_динам_области} (Windows) По умолчанию: {$M 16384,0,655360} (реальный режим) {$M 16384} (защищенный режим) {$M 8192,8192} (Windows) Тип: Глобальный. Замечание: Данная директива указывает параметры распределе- ния памяти программы. Параметр "размер_стека" должен быть целым числом в диапазоне от 1024 до 65520, которое указывает размер сегмента стека. "Размер_стека" должен быть числом в диапазоне от 1024 до 65520. Для реального режима DOS "мин_разм_динам_области" и "макс_разм_динам_области" задают соответственно минимальный и максимальный размер динамически распределяемой области памяти. "Мин_разм_динам_области" должен лежать в диапазоне от 0 до 655360, а "макс_разм_динам_области" - от "мин_разм_динам_области" до 655360. Директива $M при использовании ее в программном модуле не оказывает влияния на компиляцию программы. Кроме того, для библи- отеки "размер_стека" в директиве игнорируется. Сопроцессор математических вычислений переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$N+} или {$N-} По умолчанию: {$N-} Тип: Глобальный. Замечание: Данная директива осуществляет выбор одной из двух моделей генерации кода вычисления с плавающей запятой, имеющихся в Borland Pascal. При указании директивы {$N-} генерируется код для выполнения в программном обеспечении всех вычислений типа real с помощью вызова программ библиотеки исполняющей системы Borland Pascal. При указании директивы {$N+} генерируется код для выполнения всех вычислений типа real с помощью сопроцессора мате- матических вычислений 8087. Заметим, что для эмуляции сопроцессора 8087 вы можете также использовать директиву {$E+}. Это дает вам возможность применять типы данных с плавающей точкой без необходимости установки мик- росхемы сопроцессора 8087. Генерация оверлейного кода переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$O+} или {$O-} По умолчанию: {$O-} Тип: Глобальный. Замечание (только для реального режима): Директива $O разре- шает или запрещает генерацию оверлейного кода. Borland Pascal разрешает использовать модуль в качестве оверлейного только в том случае, если он был скомпилирован с директивой {$O+}. В этом слу- чае генератор выполняемого кода принимает особые меры при переда- че строки от одного оверлейного модуля другому и установке посто- янных параметров. Указание данной директивы в модуле не обязывает вас исполь- зовать данный модуль в качестве оверлейного. Она просто указывает Borland Pascal, чтобы он обеспечил возможность использования дан- ного модуля в качестве оверлейного, если это потребуется. Если вы разрабатываете модули, которые планируется применять как в овер- лейном, так и в неоверлейном варианте, то директива {$O+} обеспе- чит вам возможность использования в обоих случаях одной и той же версии модуля. Отметим, что директива компилятора {$O+} почти всегда указы- вается совместно с директивой компилятора {$F+}, что позволяет выполнить требования администратора оверлеев по использованию дальнего типа вызовов (far). Более подробная информация по генерации оверлейного кода со- держится в Главе 20 ("Использование оверлеев") "Руководства по языку". Имя оверлейного модуля параметр ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$O имя_модуля} Тип: Локальный. Замечание (только для реального режима): Директива {$O имя_модуля} при использовании ее в модуле не действует, а при компиляции программы задает, какие используемые в программе моду- ли нужно поместить вместо .EXE в файл .OVR. Директивы {$O имя_модуля} должны указываться после оператора uses программы. Если вы пытаетесь использовать в качестве овер- лейного модуль, который не был скомпилирован в состоянии {$O+}, то Borland Pascal сообщает об ошибке. Открытые строковые параметры переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$P+} или {$P-} По умолчанию: {$P-} Тип: Локальный. Примечания: Директива $P управляет смыслом параметров-пере- менных, описанных с помощью ключевого слова string. В состоянии {$P-} параметры-переменные, описанные с ключевым словом string, являются нормальными параметрами, но в состоянии {$P+} они явля- ются открытыми строковыми параметрами. Независимо от установки директивы $P, для описания открытых строковых параметров всегда может использоваться идентификатор OpenString. Подробнее об отк- рытых параметрах рассказывается в Главе 9 ("Процедуры и функции") "Руководства по языку". Проверка переполнения переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$Q+} или {$Q-} По умолчанию: {$Q-} Тип: Локальный. Замечание: Директива $Q управляет генерацией кода проверки переполнения. В состоянии {$Q+} отдельные арифметические операции (+, -, *, Abs, Sqr, Succ и Pred) проверяются на переполнение. За кодом каждой из этих целочисленных арифметических операций следу- ет дополнительный код, проверяющий, лежит ли результат в заданном диапазоне. Если проверка переполнения дает ошибку, программа прекращает работу и выводит на экран сообщение об ошибке. Директива {$Q+} не влияет на стандартные директивы Inc и Dec. Эти процедуры никогда не проверяются на переполнение. Переключатель $Q обычно используется в сочетании с переклю- чателем $R, который разрешает или запрещает генерацию кода про- верки диапазона. Разрешение проверки переполнения замедляет рабо- ту программы и несколько увеличивает ее объем, поэтому используй- те {$Q+} только для отладки. Проверка границ переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$R+} или {$R-} По умолчанию: {$R-} Тип: Локальный. Замечание: Данный переключатель приводит в действие и отме- няет генерацию кода с проверкой границ. При указании {$R+} все выражения с индексированными строками и массивы проверяются на предмет нахождения их внутри указанных границ, а все операторы присваивания скалярным величинам и переменным поддиапазонов про- веряются на нахождение в заданных границах. Если обнаруживается нарушение диапазона, программа завершает свою работу, выводя со- общения об ошибке этапа выполнения. Приведенная в действие про- верка границ замедляет работу программы и увеличивает ее размер. Используйте эту директиву при отладке, а затем, после получения отлаженной программы, удалите ее. Если директива $R включена, то все обращения к виртуальным методам проверяются на состояние инициализации для экземпляра объекта, выполняющего вызов. Если экземпляр объекта, выполняющий вызов, не инициализирован своим конструктором, то происходит ошибка этапа выполнения по нарушению диапазона. Разрешение проверки границ и вызовов виртуальных методов за- медляет выполнение ваших программ и несколько увеличивает их раз- мер, поэтому директиву {$R+} следует использовать только для от- ладки. Файл ресурсов параметр ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$R имя_файла} Тип: Локальный. Замечание (только для Windows и защищенного режима): Дирек- тива $R задает имя файла ресурсов, который должен включаться в прикладную программу или библиотеку. Указанный файл должен предс- тавлять собой файл ресурсов Windows. По умолчанию он имеет расши- рение .RES. Когда директива {$R имя_файла} используется в модуле, ука- занное имя файла просто записывается в получаемый файл модуля. Никаких проверок для обеспечения корректности файла с указанным именем и его существования не выполняется. При компоновке прикладной программы или библиотеки (после компиляции программы или исходного файла библиотеки), обрабатыва- ются файлы ресурсов, заданные во всех используемых модулях, прог- рамме или в библиотеке, и каждый ресурс в каждом файле ресурсов копируется в создаваемый файл .EXE или .DLL. На этапе обработки ресурсов компоновщик Borland Pascal ищет файлы ресурсов в текущем каталоге и в каталогах, заданных в окне ввода OіDіResource Directories (ПараметрыіКаталогиіКаталоги файлов ресурсов) или в каталогах, заданных в директиве /R компилятора TPC или BPC. Допустимый размер сегмента параметр ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$S размер_сегмента} По умолчанию: {$S 16384} Тип: Глобальный. Замечание (только для Windows и защищенного режима) Директи- ва-параметр $S допустима только в основной программе или библио- теке. Директива задает предпочитаемый размер сегмента кода для группирования модулей. Указанный размер должен лежать в диапазоне 0..65535. Модули, превышающие заданный размер, размещаются в сво- их собственных сегментах кода. При группировании модулей компилятор помещает модули с оди- наковыми атрибутами сегмента кода в один и тот же сегмент кода, пока он не превысит заданный размер. Это ограничение применяется также к группам, заданным по директиве $G. Примечание: Группирование модулей поясняется в дирек- тиве $G. Директива $S никогда не дает предупреждений или сообщений об ошибках. Если модули нельзя разместить в сегменте кода с другими модулями, он автоматически помещается в отдельный сегмент. Установка допустимого размера сегмента в 0 вынуждает разме- щать каждый модуль в отдельном сегменте кода; в предыдущих верси- ях компиляторов такое поведение использовалось в компиляторе по умолчанию. Проверка переполнения стека параметр ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$S+} или {$S-} По умолчанию: {$S+} Тип: Локальный. Замечание: Данная директива приводит в действие или отменяет генерирование кода с проверкой переполнения стека. При указании {$S+} компилятор генерирует в начале каждой процедуры или функции код, который проверяет, достаточное ли место в стеке выделено для локальных переменных. Если в стеке места недостаточно, то обраще- ние к процедуре или функции, скомпилированное с указанием {$S+}, приводит к завершению работы программы, которая при этом выводит сообщение об ошибке этапа выполнения. При указании {$S-} такое обращение наиболее вероятно приведет к фатальной ошибке системы. Указатели с проверкой типов переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$T+} или {$T-} По умолчанию: {$T-} Тип: Глобальный. Замечание: Директива $T управляет типами значений указате- лей, генерируемых операцией @. В состоянии {$T-} тип результата операции @ всегда является нетипизированным указателем, совмести- мым со всеми другими типами указателей. Когда к ссылке на пере- менную в состоянии {$T+} применяется операция @, типом результата будет ^T, где T совместим только с указателями на тип переменной. Директива UNDEF условная компиляция ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$UNDEF имя} Замечание: Директива $UNDEF отменяет ранее определенный ус- ловный идентификатор. Для оставшейся части исходного компилируе- мого кода или до тех пор, пока он не появится в директиве {$DEFINE имя} идентификатор отменяется (становится неопределен- ным). Если "имя" уже отменено, директива {$UNDEF имя} не вызывает никаких действий. Проверка параметров-переменных строкового типа переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$V+} или {$V-} По умолчанию: {$V+} Тип: Локальный. Замечание: Проверка параметров-переменных строкового типа управляет проверкой типа при передаче строк в качестве парамет- ров-переменных. В состоянии {$V+} выполняется строгая проверка типа, при которой требуется, чтобы формальный и фактический пара- метр имели идентичные строковые типы (string). В состоянии {$V-} в качестве фактического параметра допускается использовать любую переменную строкового типа, даже если ее описанная длина не сов- падает с длиной соответствующего формального параметра. Состояние {$V-} по существу обеспечивает "ненадежную" версию открытых строковых параметров. Хотя {$V-} поддерживается, вам следует использовать открытые строковые параметры. Дополнительную информацию вы можете найти в Главе 9 "Руководства по языку". Кадры стека Windows переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$W+} или {$W-} По умолчанию: {$W+} Тип: Локальный. Замечание (только для Windows): Директива $W управляет гене- рацией специфического для Windows кода входа и выхода для проце- дур и функций с дальним типом вызова (far). В состоянии {$W+} для процедур и функций far генерируется специальная запись кода и вы- хода, благодаря чему подсистема управления памятью реального ре- жима Windows может корректно идентифицировать дальние кадры стека при настройке на цепочки вызова после перемещения сегмента кода или данных. В состоянии {$W-} генерируется дополнительная запись входа или выхода. Если программа работает в стандартном режиме Windows или только в улучшенном режиме Windows 386, директиву $W можно запретить (состояние {$W-}). Дополнительную информацию вы можете найти в Главе 22 "Руко- водства по языку". Расширенный синтаксис переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$X+} или {$X-} По умолчанию: {$X+} Тип: Глобальный. Замечание: Директива компилятора $X разрешает или запрещает расширенный синтаксис Borland Pascal. * Операторы функций. В режиме {$X+} вызовы функций можно ис- пользовать, как операторы, то есть результат функции может отбрасываться. В общем случае вычисления, выполняемые функцией, представляются через результат, поэтому в отбра- сывании результата смысла мало. Однако в определенных слу- чаях функция на основе своих параметров может выполнять много операций. В некоторых из таких случаев результат функции не имеет смысла. В таких ситуациях расширения, до- пускаемые по директиве {$X+}, позволяют интерпретировать функцию, как процедуру. Примечание: Директива {$X+} не применяется к встроенным функциям (то есть функциям, определенным в модуле System). * В строках с завершающим нулем. Директива компилятора {$X+} разрешает поддержку в Borland Pascal строк с завершающим нулем, активизируя специальные правила, которые применяют- ся к встроенному типу PChar и в использующих нули масси- вах. Подробнее о строках с завершающим нулем рассказывает- ся в Главе 18 ("Использование строк с завершающим нулем") в "Руководстве по языку". По умолчанию расширенный синтаксис разрешается. Информация о ссылках на идентификаторы переключатель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксис: {$Y+} или {$Y-} По умолчанию: {$Y+} Тип: Глобальный. Замечание: Директива $Y разрешает или запрещает генерацию для идентификаторов ссылочной информации. Эта информация состоит из таблиц, содержащих номера строк для всех описаний и ссылок на каждый идентификатор в модуле. Для модулей информация о ссылках на идентификатор записыва- ется в файл .TPU, .TPW или .TPP наряду с объектным кодом модуля. Информация о ссылках на идентификаторы увеличивает размер файлов .TPU, .TPW или .TPP, но на размер и скорость выполняемой програм- мы влияния не оказывает. Когда программа или модуль компилируются в состоянии {$Y+}, встроенное средство просмотра Borland Pascal может выводить для этого модуля определения идентификатора и ссылочную информацию. Директива $Y используется обычно в сочетании с переключате- лями $D и $L, которые управляют генерацией отладочной информации и информацией о локальных идентификаторах. Директива $Y не оказы- вает влияния, если не разрешены директивы $D и $L. Использование директив условной компиляции ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Директивы условной компиляции Borland Pascal позволяют полу- чать различный код из одного и того же исходного текста при помо- щи использования условных идентификаторов. Имеются две основные конструкции условной компиляции, кото- рые весьма похожи на оператор Паскаля if. Первой конструкцией яв- ляется конструкция: {$IFxxx} . . . {$ENDIF} которая приводит к компиляции исходного текста между {$IFxxx} и {$ENDIF} только в случае, если условие, указанное в {$IFxxx}, удовлетворяется (имеет значение True). Если же это условие имеет значение False, то исходный текст между этими двумя директивами игнорируется. Второй конструкцией условной компиляции является конструк- ция: {$IFxxx} . . . {$ELSE} . . . {$ENDIF} которая приводит к компиляции либо исходного текста между {$IFxxx} и {$ELSE}, или исходного текста между {$ELSE} и {$ENDIF} в зависимости от условия, указанного с помощью {$IFxxx}. Приведем некоторые примеры конструкций условной компиляции. {$IFDEF Debug} Writeln('X=',X); {$ENDIF} {$IFDEF CPU87} {$N+} type real = double; {$ELSE} {$N-} type single = real; double = real; extended = real; comp = real; {$ENDIF} Конструкции условной компиляции могут вкладываться одна в другую (до 16 уровней вложенности). Для каждого {$IFxxx} соот- ветствующее {$ENDIF} должно находиться в том же исходном файле, что значит, что в каждом исходном файле должно быть равное коли- чество {$IFxxx} и {$ENDIF}. Условные идентификаторы ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Условная компиляция основывается на вычислении условных идентификаторов. Условные идентификаторы определяются и разопре- деляются (становятся неопределенными) с помощью директив: {$DEFINE name} {$UNDEF name} Вы можете также воспользоваться переключателем /D в компиля- торе TPC или BPC и блоком ввода Conditional Defines (Условные оп- ределения) меню OptionsіCompiler (ПараметрыіКомпилятор) интегри- рованной среды IDE. Условные идентификаторы лучше всего сравнить с булевскими переменными: они могут принимать значения True (определено) или False (не определено). Директива {$DEFINE} устанавливает данный идентификатор в значение True, а директива {$UNDEF} устанавливает его в значение False. Условные идентификаторы следуют точно таким же правилам, что и идентификаторы Паскаля: они должны начинаться буквой, за кото- рой следуют сочетания букв, цифр, подчеркиваний. Они могут иметь любую длину, но только первые 63 символа являются значащими. Условные идентификаторы и идентификаторы Паскаля не имеют друг с другом никакой связи. На условные идентификаторы не могут осуществляться ссылки в действующей программе, а на идентификато- ры программы нельзя ссылаться в условных директивах. Например, конструкция: const Debug = True; begin {$IFDEF Debug} Writeln('Debug is on'); {$ENDIF} end; не приведет к компиляции оператора Writeln, также как и конструк- ция: {$DEFINE Debug} begin if Debug then writeln ('Debug is on'); end; приведет к ошибке в операторе IF из-за неизвестного идентификато- ра. В Borland Pascal определены следующие стандартные идентифи- торы: VER70 Всегда определен, указывая, что данная версия явля- ется версией 7.0 Borland Pascal. Другие версии (на- чиная с 4.0) определяют собственные соответствующие символы версий, например, символ VER80 будет для версии 8.0 и т.д. WINDOWS Определен для приложения Windows и указывает, что операционной средой является MS-Windows. MSDOS Всегда определен, указывая, что данная операционная система является операционной системой DOS. Версии Borland Pascal для других операционных систем будут определять символьное имя для конкретной операцион- ной системы. CPU86 Всегда определен, указывая, что процессор принадле- жит к семейству процессоров 80х86. Версии Borland Pascal для других процессоров будут определять сим- вольное имя для конкретного процессора. CPU87 Определен, если арифметический сопроцессор 8087 присутствует во время компиляции. Если конструкция: {$IFDEF CPU87} {$N+} {$ELSE} {$N-} {$ENDIF} появляется в начале компиляции, то Borland Pascal автоматически выберет соответствующую модель гене- рации кода вычисления с плавающей точкой для этой конкретной ЭВМ. DPMI Определен для приложений защищенного режима DOS и указывает, что операционной системой является DPMI (интерфейс DOS защищенного режима). Остальные условные идентификаторы могут устанавливаться пе- д компиляцией с помощью блока ввода Conditional Defines (Услов- е определения) меню OptionsіCompiler (ПараметрыіКомпилятор) ин- грированной среды IDE. Глава 3. Компилятор, работающий в режиме командной строки ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Компиляторы Borland Pascal, работающие в режиме командной строки (TPC.EXE и BPC.EXE), позволяют вам вызывать все функции компиляторов с IDE (BP.EXE, TURBO.EXE и BPW.EXE) из командной строки DOS. Вы можете выбрать один из двух компиляторов режима командной строки - BPC.EXE или TPC.EXE. BPC.EXE работает в защи- щенном режиме DOS и предназначен для таких целевых платформ, как DOS реального режима, Windows и DOS защищенного режима. TPC.EXE работает только в DOS реального режима и предназначен только для приложений DOS реального режима. Хотя в примерах данной главы ис- пользуется TPC, вы можете в любом из них подставить BPC. Парамет- ры, доступные только для компилятора BPC, отмечены словами "толь- ко BPC". Примечание: Если при работе с компилятором режима ко- мандной строки вам потребуется помощь, вы можете получить оперативную справку, набрав в командной строке THELP. До- полнительную информацию об использовании THELP вы можете найти в "Руководстве по инструментальным средствам и утили- там". Для запуска компилятора из командной стpоки DOS используется следующий синтаксис: TPC [параметры] имя_файла [паpаметpы] BPC [параметры] имя_файла [паpаметpы] где "параметры" - это 0 или более необязательных параметров, пе- редающих компилятору дополнительную информацию, "имя_файла" - это имя исходного файла для компиляции. Если вы наберете просто TPC или BPC, вам выведется справочная информация по параметрам ко- мандной строки и синтаксису команды. Если имя файла не имеет расширения, то компилятор режима ко- мандной строки будет предполагать расширение .PAS. Если вам нуж- но, чтобы компилируемый файл вообще не имел расширения, то после имени файла необходимо поставить точку (.). Если в исходном файле содержится программа, то компилятор TPC создаст исполнимый файл с расширением .EXE и именем исходного файла, а если этот файл со- держит модуль, то TPC создаст файл модуля Borland Pascal с именем исходного файла и pасшиpением .TPU. Для компилятора BPC, если в исходном файле содержится прог- рамма, то компилятор создаст выполняемый файл с расширением .EXE и именем исходного файла, а если этот файл содержит модуль, то TPC создаст файл модуля Borland Pascal с именем исходного файла и pасшиpением .TPU, .TPP или .TPW, в зависимости от выбранной целе- мандной строки и синтаксису команды. Для компилятора BPC, если в исходном файле содержится прог- рамма, то компилятор создаст выполняемый файл с расширением .EXE и именем исходного файла, а если этот файл содержит модуль, то TPC создаст файл модуля Borland Pascal с именем исходного файла и pасшиpением .TPU, .TPP или .TPW, в зависимости от выбранной целе- вой платформы. В случае, если файл содеpжит динамически компонуе- мую библиотеку, BPC.EXE создаст библиотечный файл с именем исход- ного файла и pасшиpением .DDL. Связь между расширениями имен фай- лов и целевыми платформами показана в следующей таблице: Целевые платформы компилятора Таблица 3.1 ЪДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДї і Целевая платформа і Расширение файла модуля і ГДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДґ і Реальный режим DOS і .TPU і і Защищенный режим DOS і .TPP і і Windows і .TPW і АДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДЩ Хотя в приведенных ниже примерах для модулей указывается расширение .TPU, при использовании компилятора BPC.EXE для компи- ляции программ DOS защищенного режима или Windows вы можете подс- тавить .TPC или .TPW. Вы можете указать несколько параметров компилятора, работаю- щего в режиме командной строки. Параметр состоит из косой черты (/), сразу за которой может следовать буква. В некоторых случаях после этих символов в параметре указывается дополнительная инфор- мация, например, имя маршрута или имя файла. Параметры могут за- даваться в любом порядке и могут стоять до и/или после имени фай- ла. Параметры компилятора ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В IDE у вас имеется возможность задавать различные параметры с помощью системы меню. Компилятор, работающий в режиме командной строки, позволяет указывать большинство из этих параметров, ис- пользуя описанный ранее метод. Имеется также альтернативный ме- тод: вместо косой черты (/) можно использовать знак минус (-). Однако параметры, начинающиеся с минуса, должны отделяться друг от друга пробелами. Поэтому, например, следующие две строки экви- валентны и допустимы: TPC -IC:\TPW\TVISION -DDEBUG sortname -$S- -$F+ TPC /IC:\TPW\TVISION/DDEBUG sortname /$S-/$F+ В первой строке используется минус и поэтому по крайней мере один пробел отделяет один параметр от другого. Во второй строке используется косая черта, поэтому разделений не требуется. В Таблице 3.2 приведен список всех параметров командной строки. Параметры командной строки Таблица 3.2 ЪДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і Параметр і Описание і ГДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і /$A+ і Выравнивание данных на границу слова. і і /$A- і Выравнивание данных на границу байта. і і /$B+ і Вычисление булевского выражения по полной схеме.і і /$B- і Вычисление булевского выражения по короткой схе-і і і ме. і і /$D+ і Включение отладочной информации. і і /$D- і Выключение отладочной информации. і і /$E+ і Включение эмуляции. і і /$E- і Выключение эмуляции. і і /$F+ і Принудительное использование дальних вызовов. і і /$F- і Выключение принудительного использования дальнихі і і вызовов. і і /$G+ і Включение генерации кода процессора 80286. і і /$G- і Выключение генерации кода процессора 80286. і і /$I+ і Включение проверки ввода-вывода. і і /$I- і Выключение проверки ввода-вывода. і і /$K+ і Включение эффективных вызовов (только для BPC). і і /$K- і Выключение эффективных вызовов (только для BPC).і і /$L+ і Включение локальных идентификаторов. і і /$L- і Выключение локальных идентификаторов. і і /$M і Размеры памяти. і і /$N+ і Включение использования арифметического сопро-і і і цессора. і і /$N- і Выключение использования арифметического сопро-і і і цессора. і і /$R+ і Включение проверки диапазона. і і /$R- і Выключение проверки диапазона. і і /$S+ і Включение проверки стека. і і /$S- і Выключение проверки стека. і і /$T+ і Включение указателей с проверкой типов. і і /$T- і Выключение указателей с проверкой типов. і і /$V+ і Строгая проверка строковых переменных. і і /$V- і Ослабленная проверка строковых переменных. і і /$W+ і Включение проверки кадра стека Windows (толькоі і і для BPC). і і /$W- і Выключение проверки кадра стека Windows (толькоі і і для BPC). і і /$X+ і Включение поддержки расширенного синтаксиса. і і /$X- і Выключение поддержки расширенного синтаксиса. і і /B і Построение всех модулей. і і /CD і Компиляция для реального режима DOS (только дляі і і BPC). і і /CP і Компиляция для защищенного режима DOS (толькоі і і для BPC). і і /CW і Компиляция для Windows (только для BPC). і і /Dопредел і Определение условного идентификатора. і і /Eмаршрут і Каталог EXE и TPU. і і /Fсегм:смещі Поиск ошибки этапа выполнения. і і /GS і Файл MAP с сегментом. і і /GP і Файл MAP с общедоступными идентификаторами. і і /GD і Подробный файл MAP. і і /Iмаршрут і Каталоги включаемых файлов. і і /Q і Компиляция с сокращенными выводом. і і /Rмаршрут і Каталог ресурсов. і і /T і Каталоги TPL и CFG. і і /Uмаршрут і Каталоги модулей. і і /V і Отладочная информация в EXE. і АДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ Параметры-директивы компилятора ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Borland Pascal поддерживает несколько директив компилятора, которые подробно рассмотрены в Главе 2 "Директивы компилятора". Эти директивы обычно включаются в исходный текст и имеют одну из следующих форм: {$директива+} {$директива-} {$директива информация} где "директива" обозначает одиночную букву. Кроме того, эти ди- рективы могут указываться в командной строке с помощью параметра /$ или /D, что эквивалентно включению соответствующих директив компилятора в начало каждого компилируемого исходного файла. Параметр-переключатель Параметр /$ позволяет вам изменить используемое по умолчанию состояние всех директив-переключателей. При этом используется следующий синтаксис: указывается параметр /$, за которым следует буква директивы и знак плюс (+) или минус (-). Например, команда: tpc mystuff /$r- скомпилирует MYSTUFF.PAS с выключенной проверкой диапазона, в то время, как команда: tpc mystuff /$r+ скомпилирует его с установленной проверкой диапазона. Нужно заме- тить, что если вы исходном тексте встречаются директивы компиля- тора {$R+} и {$R-}, они отменяют параметр командной строки /$R. Вы можете указать с этим несколько параметров-переключателей компилятора: tpc mystuff /$r-/$i-/$v-/$f+ Кроме того, параметр-переключатель позволяет указывать спи- сок директив (кроме $M), разделенных запятыми: tpc mystuff /$r-,i-,v-,f+ Примечание: Отметим, что необходимо указать только первый знак доллара. Кроме изменения директив-переключателей, параметр /$ позво- ляет также задавать параметры распределения памяти с помощью со- ответствующего параметра распределения памяти ($M). Этот параметр имеет формат: /$Mстек,мин_разм_динами_области,макс_разм_динам_области где "стек" обозначает размер стека, а "мин_разм_динами_области" и "макс_разм_динам_области" обозначает минимальный и максимальный размер динамически распределяемой области памяти. Оба значения указываются в байтах и представляют собой десятичные числа, если только им не предшествует знак доллара ($), который означает, что числа являются шестнадцатиричными. Поэтому, например, следующие командные строки эквивалентны: tpc mystuff /$M16384,256,4096 tpc mystuff /$M$4000,$100,$1000 Отметим, что из-за этого формата нельзя использовать пара- метр $M в списке директив, разделенных запятыми. Условные определения Параметр /D позволяет вам определять условные идентификато- ры, соответствующие директиве компилятора $DEFINE <идентифика- тоp>, или команде интегрированной среды OіCіConditional Defines. За параметром /D должен следовать один или более условных иденти- фикаторов, разделенный точкой с запятой (;). Например, следующая командная строка: TPC MYSTUFF /DIOCHECK;DEBUG;LIST определяет для компиляции программы MYSTUFF.PAS три условных идентификаторов: iocheck, debug и list. Это эквивалентно внесению в начало исходного текста программы директив: {$DEFINE IOCHECK} {$DEFINE DEBUG} {$DEFINE LIST} Если задано несколько директив компилятора /D, то выполняет- ся конкатенация списков идентификаторов. То есть команда: TPC MYSTUFF /DIOCHECK/DDEBUG/DLIST эквивалентна первому примеру. Параметры режима компилятора ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Несколько параметров определяют функционирование самого ком- пилятора. К ним относятся параметры /C (Compile - компилировать), /М (Make - сформировать), /В (Build - построить) и /F (Find error - найти ошибку), /L (Link Buffer - буфер компоновки) и /Q (Quiet - компиляция с сокращенным выводом). Как и в случае других пара- метров, здесь также можно использовать формат с минусом, однако следует помнить, что параметры нужно разделять хотя бы одним про- белом. Параметр компиляции /C ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД BPC поддерживает три целевых платформы: реальный режим DOS, защищенный режим DOS и Windows. Параметр /C используется для вы- бора при компиляции нужной платформы. За параметром /C должна указываться буква: D (реальный режим DOS), P (защищенный режим DOS) или W (Windows). Например: BPC /CD MYPROG компиляция для реального режима DOS BPC /CP MYPROG компиляция для защищенного режима DOS BPC /CW MYPROG компиляция для Windows По умолчанию используется /CD - BPC компилирует программу для реального режима DOS. Параметр /C управляет тем, на какую целевую платформу будет влиять параметр /M. По этой причине при использовании параметра /C он должен указываться в командной строке перед параметром /$M, например: BPC /$M8192 /CP MYPROG будет устанавливать размер стека для компиляции в реальном режиме DOS в 8192 байта, а затем переключать целевую платформу на защи- щенный режим DOS, что приведет к игнорированию /$M. Корректной записью будет: BPC /CP /$M8192 MYPROG где сначала в качестве целевой платформы указывается защищенный режим DOS, а затем размер стека устанавливается в 8192 байта. Параметр формирования /М ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Компилятор, работающий в режиме командной строки, имеет встроенную утилиту MAKE, облегчающую ведение пpоектов. Параметр /М указывает компилятору, что нужно проверить те все модули, от которых зависит компилируемая программа. Модуль будет перекомпилироваться в следующих случаях: - Изменения исходного файла (.PAS) данного модуля являются более поздними, чем дата и время создания файла модуля. - Какой-либо файл, включаемый по директиве $I, или объектный файл, компонуемый по директиве $L, является более новым, чем файл .TPU данного модуля. - Изменена интерфейсная часть модуля, на которую имеется ссылка в операторе uses. Модули из библиотеки TURBO.TPL (библиотеки исполняющей сис- темы для приложений реального режима DOS), библиотеки TPP.TPL (библиотеки исполняющей системы для приложений защищенного режима DOS) и TPW.TPL (библиотеки исполняющей системы для приложений Windows), в этом процессе не участвуют. Если использовать этот параметр в предыдущем примере, то ко- манда будет иметь вид: tpc myprog /m Параметр построения /B ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Вместо того, чтобы для определения изменений, полагаться на параметр /M, вы можете указать компилятору, работающему в режиме командной строки, что нужно обновить все модули, от которых зави- сит ваша программа. Для этого следует использовать параметр /B. Примечание: Нельзя одновременно указывать параметры /M и /B. Если использовать этот параметр в предыдущем примере, то ко- манда будет иметь вид: tpc myprog /b Параметр поиска ошибки /F ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД При обнаружении ошибки на этапе выполнения, вам сообщается код ошибки и адрес ее расположения (сегмент:смещение). Параметр /Fсегмент:смещение позволяет вам найти оператор исходного кода, на котором произошла ошибка. При этом предполагается, что вы соз- дали выполняемый файл, содержащий информацию для отладки (с по- мощью директивы компилятора $D). Допустим, что имеется файл ERRTST.PAS, содержащий следующую программу: program ErrTst; var x : real; begin x := 0; x := x / x; { вызывает ошибку деления на ноль } end. Скомпилируем эту программу с помощью компилятора, использую- щего командную строку. tpc errtst Если вы дадите команду DIR errtst.*, то DOS выведет имена двух файлов: ERRTST.PAS - ваш исходный код ERRTST.EXE - выполняемый файл Теперь запустим ErrTst и получим сообщение об ошибке на эта- пе выполнения: C:\ > test Runtime error 200 at 0000:003D (Ошибка этапа выполнения 200 по адресу 0000:003D) Отметим, что здесь указан код ошибки (200) и сегмент со сме- щением (0000:003D в шестнадцатиричном виде), соответствующий ука- зателю инструкций (CS:IP) для команды, где произошла ошибка. Как при этом установить, какая строка исходного кода вызвала появле- ние этой ошибки? Для этого нужно просто вызвать компилятор с па- раметром поиска ошибки на этапе выполнения /F и указать сегмент и смещение из сообщения об ошибке: C:\ >tpc errtst /F0:18 Borland Pascal 7.0 Copyright(c)1983,92 Borland Intеrnational ERRTST.PAS(7) ERRTST.PAS(6): Target address found (указанный адрес найден) x := x DIV x; ^ Чтобы компилятор смог найти ошибку этапа выполнения, ваша программа и модули должны компилироваться с теми же параметрами, с которыми вы ее компилировали в первый раз. Компилятор указывает имя файла и номер строки, а также выво- дит строку исходного кода, вызвавшую появление ошибки. Как уже говорилось, вы должны выполнять компиляцию с разре- шением генерации информации для отладки (по умолчанию генерация этой информации для всех программ и модулей разрешена). Если вы запретите с помощью директивы компилятора {$D-} или параметра /$D- генерацию информации для отладки, то компилятор, работающий в режиме командной строки, не сможет найти ошибки на этапе выпол- нения. Параметр буфера компоновки /L ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Параметр /L запрещает организацию в памяти буферов при ком- поновке файлов модулей для создания файла .EXE. Встроенный компо- новщик Borland Pascal представляет собой двухпроходный компонов- щик. При первом просмотре файлов модулей он помечает каждую про- цедуру, которая вызывается другими процедурами. На втором прохо- де, извлекая отмеченные процедуры из файлов модулей, он генериру- ет выполняемый файл .EXE. По умолчанию между этими двумя проходами файлы модулей хра- нятся в памяти, однако, если задается параметр /L, то они будут вновь считываться на втором проходе. Механизм, использующийся по умолчанию, повышает скорость работы, но для успешной компоновки больших программ вам, возможно, придется использовать параметр /L. Параметр сокращенного вывода /Q ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Параметр режима сокращенного вывода позволяет подавить вывод во время компиляции имен файлов и номеров строк. Когда компиля- тор, работающий в режиме командной строки, вызывается с этим па- раметром: TPC MYPROG /Q выходная информация будет ограничиваться сообщением о завершении компиляции и обычной статистикой, выводимой в конце компиляции. В случае ошибки о ней будет сообщено. Параметры для pаботы с каталогами ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Компилятор, работающий в режиме командной строки, поддержи- вает несколько параметров, которые позволяют указать шесть ката- логов, используемых компилятором: каталог TPL & CFG. EXE & TPU, каталог включаемых файлов (Include), каталог модулей (Unit), ка- талог объектных файлов (Object). Кроме того, BPC позволяет вам задать каталог файлов ресурсов (Resource). Исключая параметр каталогов EXE и TPU, в каждом параметре каталогов командной строки вы можете задать один или несколько каталогов. Если вы указываете несколько каталогов, то разделите их точкой с запятой (;). Если вы задаете несколько директив, то указанные в них списки каталогов объединяются. Параметр каталога /T ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Пpи выполнении TPC ищет два файла: файл конфигуpации TPC.CFG и файл pезидентной библиотеки TURBO.TPL. Аналогично, пpи выполнении BPC ищет файл конфигуpации BPC.CFG и файл pезидентной библиотеки TPP.TPL. Пpи этом автоматически пpосматpиваются теку- щий каталог и каталог, содеpжащий файл .EXE. Паpаметp /T позволя- ет указать дpугие пpосматpиваемые каталоги. Напpимеp, можно ввес- ти: TPC /TC:\TPW\BIN MYSTUFF Если вы хотите, чтобы паpаметp /T влиял на поиск файла TPC.CFG, он должен быть самым пеpвым аpгументом в командной стpоке, как это показано в предыдущем примере. Параметр каталога выполняемых файлов и файлов модулей (/E) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Этот параметр указывает компилятору, работающий в режиме ко- мандной строки, куда нужно поместить создаваемые файлы .EXE и файлы модулей: TPC MYSTUFF /EC:\TP\BIN Если этот параметр не задан, то TPC создает файлы .EXE и файлы модулей в том же каталоге, где находятся соответствующие исходные файлы. Примечание: Вы можете задать только один каталог EXE и TPU. Параметр каталога включаемых файлов (/I) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Borland Pascal поддерживает включаемые файлы, указанные с помощью директивы компилятора {$Iимя_файла}. Паpаметp позволяет указывать список каталогов, в которых следует искать включаемые файлы. Каталоги в списке отделяются дpуг от дpуга точкой с запя- той (;). Например, в случае команды: TPC MYSTUFF /IC:\TPW\INCLUDE;D:\INC TPC будет осуществлять поиск этих включаемых файлов в каталогах C:\TP\INCLUDE и D:\INC после просмотра текущего каталога. Если указывается несколько директив /I, то каталоги сцепля- ются. Например, команда: TPC MYSTUFF /IC:\TP\INCLUDE/ID:\INC эквивалентна первому примеру. Параметр каталогов модулей (/R) (только для BPC) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД При компиляции программы для целевой платформы DOS защищен- ного режима или Windows BPC ищет файлы ресурса в текущем катало- ге. Параметр /R позволяет вам указать дополнительные каталоги, где BPC ищет файлы ресурсов. Параметр каталогов модулей (/U) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД При компиляции программы, использующей модули, компилятор, работающий в режиме командной строки, сначала проверяет, не нахо- дятся ли используемые модули в .TPL (который загружается вместе с компилятором). Если нет, то компилятор ищет файл, имя которого составлено из имени модуля и расширения .TPU, (.TPP, .TPW), в те- кущем каталоге. Параметр /U позволяет задать для поиска модулей дополнительные каталоги. Как и в других параметрах, можно указать несколько маршрутов поиска - они отделяются друг от друга точкой с запятой. Параметр каталогов объектных файлов (/О) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД С помощью директив компилятора {$Lимя_файла} Borland Pascal позволяет компоновать внешние подпрограммы на языке ассемблера. Эта возможность разъясняется в Главе 25 "Руководства по языку". Паpаметp /О указывает позволяет указывать список каталогов, в ко- тоpых должен осуществляться поиск этих объектных файлов. Можно указывать несколько каталогов, разделяя их точкой с запятой (;). Например, в случае команды: TPC MYSTUFF /OC:\TPC\ASM;D:\OBJECT объектные файлы, не найденные компилятором в текущем каталоге, будут искаться в каталогах C:\TPC\ASM и D:\OBJECT. Параметры отладки ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В компиляторе, работающем в режиме командной строки, имеется два параметра командной строки, которые позволяют вам генериро- вать информацию для отладки. Параметр файла MAP (/G) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Параметр /G компилятору, работающему в режиме командной строки, что необходимо генерировать файл схемы памяти .MAP. Бук- ва, указываемая в параметре после G, показывает желаемый уровень выводимой в файле .МAР информации: S (информация только о сегмен- тах), Р (сегменты и общедоступные имена) или D (подробная инфор- мация). Примечание: В отличие от файлов .EXE, .TPU, .TPP и .TPW, имеющих двоичный формат, файл .МAР представляет собой обычный текстовый файл, который можно вывести на устройство печати или загрузить в редактор. Файл MAP разбит на три раздела: - сегменты; - общедоступные идентификаторы; - номера строк. Параметр /GS выводит только раздел сегментов, /GP выводит раздел сегментов Segment и общедоступных имен Publics, а /GD вы- водит все три раздела. Для программ и модулей, откомпилированных с директивами {$D+, L+} (они используются по умолчанию) в разделе общедоступных идентификаторов Publics указываются все глобальные переменные, процедуры и функции. В разделе с номерами строк показываются но- мера строк всех процедур и функций данной программы. При исполь- зовании директив {$D+,L-} в разделе общедоступных идентификаторов перечисляются только идентификаторы, определенные в интерфейсной части модуля. Для модулей, откомпилированных с директивой {$D-}, отсутс- твуют записи в секции с номерами строк Line Numbers. Параметр автономной отладки (/V) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Когда в командной строке указывается параметр /V, компиля- тор, работающий в режиме командной строки, добавляет в конец фай- ла .EXE информацию для отладки, с которой может работать Турбо отладчик. Турбо отладчик включает в себя отладку на уровне машин- ных и исходных кодов, расширенное использование точек останова (включая точки останова по условию и с использованием выражений). Хотя информация для отладки, генерируемая по директиве /V, увеличивает объем результирующего файла .EXE, на реальные коды в файле .EXE она влияния не оказывает, и при выполнении дополни- тельной памяти не тpебуется. Размер дополнительной присоединяемой к файлу .EXE информации зависит от директив компилятора $L и $D в каждой из программ или модулей. Для программ, компилируемых с директивами {$D+,L+} (по умолчанию), отладчику будут известны все константы, переменные, типы, процедуры и функции. При использовании директив {$D+,L-} отладчику будут известны только символы, определенные в интер- фейсной части модуля (секция interface). Наконец, для программ и модулей, скомпилированных с директивой {$D-}, при отладке прик- ладной программы отладчик не сможет выводит на экран строки ис- ходного текста. Файлы TPC.CFG и BPC.CFG ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Вы можете указать список параметров в файле конфигурации TPC.CFG или BPC.EXE, который можно использовать вместе с парамет- рами, вводимыми в командной строке. Каждая строка в файле конфи- гурации представляет собой дополнительный аргумент командной строки, вставляемый перед действительными аргументами командной строки. Таким образом, создав файл конфигурации, вы можете изме- нить любую принятую по умолчанию установку параметра командной строки. Компилятор, работающий в режиме командной строки, позволяет вводить один и тот же параметр командной строки несколько раз, при этом игнорируются все его вхождения за исключением последне- го. Поэтому даже если вы изменили некоторые установки в файле конфигурации, вы можете отменить их в командной строке. При запуске TPC осуществляет поиск TPC.CFG в текущем катало- ге. Если там его нет, и если вы работаете под управлением опера- ционной системы DOS версии 3.х или старше, то просматривается также каталог, в котором находится TPC.EXE. Для того, чтобы ком- пилятор TPC просматривал также и другие каталоги (помимо текуще- го), следует указать в командной строке в качестве первого пара- метра параметр /Т. Если TPC.CFG или BPC.EXE содержит строку, которая не начина- ется с косой черты (/) или просто дефиса (-), то эта строка опре- деляет принимаемое по умолчанию имя файла для компиляции. В этом случае при запуске TPC или BPC с пустой командной строкой (или с командной строкой, содержащей только параметры командной строки) будет скомпилирован файл с именем, принятым по умолчанию, а не выводятся итоговые сообщения по синтаксису. Приведем пример файла TPC.CFG, в котором определяется нес- колько каталогов для файлов: включаемых, объектных и модулей и изменяются принимаемые по умолчанию значения директив $F и $S: /IC:\TP\INC;C:\TPW\SRC /OC:\TP\ASM /UC:\TP\UNIT /$F+ /$S- Теперь, если в командной строке DOS ввести команду: TPC MYSTUFF то TPC будет действовать так, как если бы вы ввели следующее: TPC /IC:\TP\INC;C:\TPW\SRC /OC:\TP\ASM /UC:\TP\UNIT /$F+ /$S- MYSTUFF Параметры компилятора, специфические для конкретной платформы (только для BPC) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Когда вы используете с BPC.EXE директиву компилятора /$, компилятор изменяет установки переключателя для всех целевых платформ. В определенных ситуациях вам может потребоваться задать для разных платформ различные значения директивы-переключателя. Чтобы изменить значение переключателя для конкретной платформы, добавьте после переключателя букву D (реальный режим DOS), P (за- щищенный режим DOS) или W (Windows). Например, файл BPC.CFG, со- держащий строки: /$FD+ /$FP+ /$FW- /$S- приведет к тому, что прикладные программы реального режима DOS будут компилировать в параметром {$F+}, а программы защищенного режима DOS и Windows - с параметром {$F-}. Кроме того, он вызыва- ет для всех целевых платформ включение проверки стека. Параметр /$M также поддерживает спецификаторы платформ. Нап- ример: /$MW16384,4096 изменяет размеры стека и динамически распределяемой области памя- ти для Windows, не влияя на другие целевые платформы. Директива /$W без спецификатора платформы всегда применяется к платформе, выбранной последним параметром /C. Глава 4. Сообщения об ошибках ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В данной главе приводятся возможные сообщения об ошибках, которые вы можете получить в Borland Pascal. Сообщения сгруппиро- ваны по следующим категориям: - Сообщения компилятора об ошибках. - Ошибки DOS. - Ошибки ввода-вывода. - Критические ошибки. - Фатальные ошибки. - Ошибки DPMI. Ошибки этапа выполнения подразделяются на ошибки DOS, ошибки ввода-вывода, критические и фатальные ошибки. Ошибки интерфейса DOS защищенного режима (DPMI) включают в себя ошибки установки, ошибки фиктивного модуля, ошибки этапа выполнения и ошибки серве- ра. В каждой из этих групп ошибки перечисляются в порядке номе- ров. Некоторые сообщения об ошибках, которые применимы только к определенным платформам, помечены словами "Реальный режим", "За- щищенный режим" или "Windows". Примечание: Сообщения утилит Borland Pascal вы можете найти в "Руководстве по инструментальным средствам и утили- там". Сообщения компилятора об ошибках ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД При наличии возможности компилятор будет выводить на экран дополнительную диагностическую информацию в виде идентификатора или имени файла, например: Error 15: File not found (WINDOW.TPU) (Ошибка 15: файл не найден (WINDOW.TPU).) При обнаружении ошибки Borland Pascal (в интегрированной среде IDE) автоматически загружает исходный файл и помещает кур- сор около ошибки. Компилятор, работающий в режиме командной стро- ки, выводит на экран сообщение об ошибке, номер и исходную стро- ку, используя для указания места ошибки символ каре (^). Учтите, что некоторые ошибки в исходном тексте до определенного времени не обнаруживаются. Например, несоответствие типов в операторе присваивания не может быть обнаружено до тех пор, пока не будет вычислено целиком выражение со знаком :=. В таких случаях ищите ошибку слева от курсора или над ним в предыдущем тексте. Ошибки 1 - 50 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 1 Out memory (Выход за границы памяти) Данная ошибка появляется, если компилятор выполняется вне допустимых границ памяти. Имеется ряд возможных решений этой проблемы: - Если в меню CompileіDestination (КомпиляцияіНазначение) устанавливается значение Memory (Память), установите его в интегрированной интерактивной среде в значение Disk (Диск). - Если буфер в меню OptionsіLinkerіLink Buffer (Парамет- рыіКомпоновщикіБуфер компоновки) кнопка с зависимой фикса- цией установлена на Memory (Память), переключите ее на Disk. При использовании компилятора, работающего в режиме командной строки, применяйте для компоновки на диске пара- метр /L. Если ни одна из рекомендаций не помогает, то возможно ваша программа или программный модуль просто слишком велики, чтобы компилироваться в таком объеме памяти. В этом случае вы должны разбить его на два или более программных модуля. 2 Identifier expected (Не указан идентификатор) Идентификатор должен находиться в этом месте. Возможно вы пытаетесь использовать зарезервированное слово. 3 Unknown identifier (Неизвестный идентификатор) Этот идентификатор не был описан. 4 Duplicate identifier (Повторный идентификатор) Идентификатор уже представляет имя программы/модуля, конс- танты, переменной, типа, процедуры или функции, описанных в теку- щем блоке. 5 Syntax error (Синтаксическая ошибка) В исходном тексте найден неверный символ. Возможно, вы забы- ли заключить в кавычки строковую константу. 6 Error in real constant (Ошибка в вещественной константе). Синтаксис констант вещественного типа (типа real) определя- ется в Главе 2 ("Лексемы и константы") "Руководства по языку". 7 Error in integer constant (Ошибка в целой константе). Синтаксис констант типа integer (целое) определяется в Главе 2 "Лексемы и константы" "Руководства по языку". Учтите, что после чисел, превышающих диапазон представления целых чисел должны ста- виться точка и ноль, например, 12345678912.0. 8 String constant exceeds line. (Строковая константа превышает размеры строки) Вероятно, вы забыли поставить кавычку в конце строковой константы. 10 Unexpected end of file (Неправильный конец файла) Вы могли получить это сообщение об ошибке по одной из следу- ющих причин: - Ваш исходный файл закончился перед последним end основного раздела операторов. Вероятно, у вас неодинаковое количест- во операторов begin и end. - Включаемый файл заканчивается в середине раздела операто- ров. Каждый раздел операторов должен целиком помещаться в одном файле. - Вы не закончили комментарий. 11 Line too long (Строка слишком длинная) Максимальная длина строки может равняться 126 символам. 12 Type identifier expected (Нужен идентификатор типа) Не указан тип идентификатора, как это должно быть. 13 Too many open files (Слишком много открытых файлов) Если появляется эта ошибка, то это обозначает, что ваш файл CONFIG.SYS не включает параметр FILES=xx, или этот параметр ука- зывает слишком мало файлов. Увеличьте число файлов какого-либо подходящего значения, например, 20. 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 (Слишком большая структура) Максимально допустимый размер структурного типа - 65535 байт. 23 Set base type of range (Базовый тип множества нарушает границы) Базовый тип множества должен представлять собой отрезок типа с границами в пределах от 0 до 255 или перечислимым типом с не более чем 256 значениями. 24 File components may not be files or objects (Компоненты файла не могут быть файлами или объектами) Тип компоненты файлового типа не может иметь объектный тип или файловый тип и не может быть структурным типом с компонентами файлового или объектного типа: конструкции 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 Pointer type identifier expected (Нужен идентификатор типа указателя) Данный идентификатор не обозначает тип указателя, как это требуется. 34 Invalid function result type (Неправильный тип результата функции) Правильными типами результата функции являются все простые типы, строковые типы и ссылочные типы. 35 Label identifier expected (Нужен идентификатор метки) Метка не обозначена с помощью идентификатора, как это требу- ется. 36 BEGIN expected (Нужен BEGIN) 37 END expected (Нужен END) 38 Integer expression expected (Нужно выражение типа Integer) Предыдущее выражение должно иметь тип целый тип Integer. 39 Ordinal expression expected (Нужно выражение порядкового типа) Предшествующее выражение должно иметь порядковый тип. 40 Boolean expression expected (Нужно выражение типа Boolean) Предшествующее выражение должно иметь тип boolean. 41 Operand types do not match operator (Типы операндов не соответствуют оператору) Данный оператор не может быть применен к операндам этого ти- па, например, 'A' разделить на '2'. 42 Error in expression (Ошибка в выражении) Данный идентификатор не может участвовать в выражении ука- занным образом. Возможно, вы забыли указать операцию между двумя операндами, например 'A' div '2'. 43 Illegal assignment (Неверное присваивание) - Нетипизированным файлам и переменным нельзя присваивать значения. - Идентификатору функции можно присваивать значения только внутри раздела операторов данной функции. 44 Field identifier expected (Нужен идентификатор поля) Данный идентификатор не упоминает поле предшествующей пере- менной типа запись. 45 Object file too large (Объектный файл слишком большой) Borland Pascal не может компоновать файлы .OBJ, размером превышающие 64К. 46 Undefined external (Не определена внешняя процедура) Внешняя процедура или функция не имеет соответствующего оп- ределения PUBLIC в объектном файле. Убедитесь, что вы указали все объектные файлы в директивах {$L имя_файла} и проверьте написание идентификаторов процедуры или функции в файле .ASM. 47 Invalid object file record (Неправильная запись объектного файла) Файл .OBJ содержит неверную объектную запись. Убедитесь, что данный файл является действительно файлом .OBJ. 48 Code segment too large (Сегмент кода слишком большой) Максимальный размер кода программы или программного модуля равняется 65520 байтам. Если вы компилируете программный модуль, разбейте его на два или более программных модуля. 49 Data segment too large (Сегмент данных слишком велик) Максимальный размер сегмента данных программы равен 65520 байтам, включая данные, описываемые используемыми программными модулями. Если вам нужно большее количество глобальных данных, опишите большие структуры с помощью указателей и выделяйте для них память динамически с помощью процедуры New. Вы можете также получить это сообщение при компиляции прог- раммы Windows с директивой (G-}. В этом случае, если вы собирае- тесь запускать программу в защищенном режиме или поместить в ней строковые константы в строковый файл ресурса, попробуйте скомпи- лировать ее с директивой {G+}. 50 DO expected (Нужен оператор DO) Ошибки 51 - 100 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 51 Invalid PUBLIC definition (Неверное определение PUBLIC) - Две или более директивы PUBLIC на языке ассемблера опре- деляют один и тот же идентификатор. - Объектный файл .OBJ определяет идентификаторы PUBLIC, ко- торые не находятся в сегменте CODE. 52 Invalid EXTRN definition (неправильное определение EXTRN) - На идентификатор имеется ссылка в директиве EXTRN в языке ассемблера, но он не описан в программе или модуле на Пас- кале, или в интерфейсной части какого-либо из используемых модулей. - Идентификатор обозначает абсолютную переменную. - Идентификатор обозначает процедуру или функцию типа inline. 53 Too many EXTRN definition (Слишком много определений EXTRN) Borland Pascal не может обрабатывать файлы .OBJ при более чем 256 определениях EXTRN. 54 OF expected (Требуется OF) 55 INTERFACE expected (Требуется интерфейсная секция) 56 Invalid relocatable reference (Недопустимая перемещаемая ссылка) - Файл .OBJ содержит данные и перемещаемые ссылки в сегмен- тах, отличных от CODE. Например, вы пытаетесь описать ини- циализированные переменные в сегменте DATA. - Файл .COМ содержит ссылки с размерами в байтах на переме- щаемые идентификаторы. Такая ошибка происходит в случае, если вы используете операторы HIGH и DOWN с перемещаемыми идентификаторами или если вы ссылаетесь в директивах DB на перемещаемые идентификаторы. - Операнд ссылается на перемещаемый идентификатор, который не был определен в сегменте CODE или в сегменте DATA. - Операнд ссылается на процедуру EXTRN или функцию EXTRN со смещением, например, CALL SortProc+8. 57 THEN expected (Требуется THEN) В нужном месте отсутствует ключевое слово then. 58 TO or DOWNTO expected (Требуется ТО или DOWNTO) В нужном месте отсутствует ключевое слово to или downto. 59 Undefined forward (Не определено опережающее описание) - Были описаны процедура или функция в интерфейсной секции программного модуля, но их определение отсутствует в сек- ции реализации. - Процедуры или функции были описаны с помощью описания forward, но их определение не найдено. 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 (Циклическая ссылка на модуль) В секции interface два модуля не могут ссылаться друг на друга, но могут это делать в секции implementation. Переупорядо- чите операторы uses таким образом, чтобы циклические ссылки имели место только в секции implementation. Подробности см. в разделе "Циклические ссылки на модули" в Главе 10 "Руководства по языку". 69 Unit name mismatch (Несоответствие имен программных модулей) Имя программного модуля, найденное в файле .TPU, .TPW или .TPP, не соответствует имени, указанному в операторе uses. 70 Unit version mismatch (Несоответствие версий программных модулей) Один или несколько программных модулей используемых данной программой, были изменены после их компиляции. Воспользуйтесь ко- мандой CompileіMake (КомпиляцияіФормирование) или CompileіBuild (КомпиляцияіПостроение) в интегрированной интерактивной среде программирования и параметрами /М или /В в компиляторе, работаю- щем в режиме командной строки, что позволит автоматически скомпи- лировать программные модули, нуждающиеся в перекомпиляции. 71 Internal stack overflow (Переполнение внутреннего стека) Внутренний стек компилятора исчерпан из-за слишком большого уровня вложенности операторов. Переорганизуйте исходный код и уменьшите уровень вложенности. Например, переместите внутренние уровни вложенных операторов в отдельную процедуру. 72 Unit file format error (Ошибка формата файла программного модуля) Файл .TPU, .TPW или .TPP (в зависимости от платформы) явля- ется недействительным. Возможно, он создан с помощью старой вер- сии Turbo Pascal или Borland Pascal. В этом случае нужно переком- пилировать исходный код модуля и создать новый модуль. 73 Implementation expected (Требуется секция реализации) Ключевое слово implementation отсутствует там, где оно долж- но быть. Возможно, вы включили реализацию процедуры, функции или метода в интерфейсную часть модуля. 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). Предшествующее выражение должно иметь тип integer или real. 80 Label not withhin current block (Метка не находится внутри текущего блока) Оператор goto не может ссылаться на метку, находящуюся вне текущего блока. 81 Label already defined (Метка уже определена) Данная метка уже помечает оператор. 82 Undefined label in processing statement part (Неопределенная метка в предшествующем разделе операторов) Данная метка была описана, и на нее осуществлялась ссылка в предшествующем разделе операторов, но она не определена. 83 Invalid @ argument (Недействительный аргумент оператора @) Действительными аргументами являются ссылки на переменные и идентификаторы процедур или функций. 84 Unit expected (Нужно ключевое слово UNIT) Не указано ключевое слово 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 (Нужна переменная целого типа) Предшествующая переменная должна иметь тип integer. 99 Files are not allowed here (Здесь не допускаются файлы) Типизированная константа не может иметь файловый тип. 100 String length mismatch (Несоответствие длины) Длина строковой константы не соответствует количеству эле- ментов символьного массива. Ошибки 101 - 150 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 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 (Предшествующее выражение должно иметь символьный тип) Предшествующее выражение должно иметь тип Char. 107 Too many relocation items (Слишком много перемещаемых элементов) [Только реальный режим.] Размер раздела таблицы перемещения файла .EXE превышает 64К, что является верхним пределом в Borland Pascal. Если вы обнаружи- ли эту ошибку, то это значит, что программа просто слишком велика для обработки компоновщиком Borland Pascal. Возможно также, что она слишком велика для выполнения в DOS. - Преобразуйте некоторые модули программы в оверлейные. Это уменьшит число перемещаемых элементов в файле .EXE и объем памяти, требуемый для выполнения приложения. - Измените программу на приложение защищенного режима DOS. 112 CASE constant out of range (Константа CASE нарушает допустимые границы) 108 Overflow in arithmetic operation (Переполнение в арифметической операции). Результат предшествующей операции не находится в диапазоне Longint (-2147483648..2147483647). Исправьте операцию или исполь- зуйте вместо целочисленных значения вещественного типа. 109 No enclosing FOR, WHILE оr REPEAT statement (Нет включающего оператора FOR, WHILE или REPEAT) Стандартные процедуры Break и Continue не могут использо- ваться вне операторов for, while или repeat. 112 CASE constant out of range (Константа case вне диапазона) Для целочисленных операторов case константы должны лежать в диапазоне от -32768 до 32767. 113 Error in statement (Ошибка в операторе) Данный идентификатор не может начинать оператор. 114 Cannot call an interrupt procedure (Нет возможности вызвать процедуру прерывания) Вы не можете непосредственно вызвать процедуру прерывания. 116 Must be in 8087 mode tp compile this (Для компиляции необходим режим 8087) Данная конструкция может компилироваться только в режиме {$N+}. В состоянии {$N-} операции с действительными типами, оди- ночной и двойной точности, расширенными и совместимыми не допус- каются. 117 Target address not found (Адрес назначения не найден) Команда SearchіFind Error (КомпиляцияіПоиск ошибки) в интег- рированной интерактивной среде или параметр /F в командной строке компилятора не позволяют обнаружить оператор, соответствующий указанному адресу. 118 Include files are not allowed here (В такой ситуации включаемые файлы не допускаются) Каждый раздел операторов должен целиком размещаться в одном файле. 119 No inherited methods are accessible here (Наследуемые методы здесь недоступны) Вы используете ключевое слово inherited вне метода или в ме- тоде или объектном типе, не имеющем предка. 121 Invalid qualifier (Неверный квалификатор) - Вы пытаетесь индексировать переменную, которая не является массивом. - Вы пытаетесь указать поля в переменной, которая не являет- ся записью. - Вы пытаетесь разыменовать переменную, которая не является указателем. 122 Invalid variable reference (Недопустимая ссылка на переменную) Предыдущая конструкция удовлетворяет синтаксису ссылки на переменную, но она не указывает адрес памяти. Наиболее вероятно, что вы модифицируете параметр const или вызываете функцию-указа- тель, но забываете разыменовать результат. 123 Too many symbols (Слишком много идентификаторов) Программа или программный модуль описывает более 64К иденти- фикаторов. Если вы компилируете программу с помощью директивы {$D+}, то попробуйте отключить эту директиву. Учтите, однако, что это не гарантирует отсутствие ошибок этапа выполнения в таком мо- дуле. В противном случае вы можете попытаться поместить некоторое описание в отдельный модуль. 124 Statement part too large (Слишком большой раздел операторов) Borland Pascal ограничивает размер раздела операторов до ве- личины примерно 24К. Если вы обнаружили эту ошибку, поместите части разделов оператора в одну или несколько процедур. В любом случае, при наличии раздела операторов такого размера, стоит не пожалеть времени и усилий сделать более ясной и понятной структу- ру своей программы. 126 Files must be var parameters (Файлы должны иметь параметры var) Вы пытаетесь описать параметр значения файлового типа. Пара- метры файлового типа должны быть параметрами-переменными. 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 (Ошибка в начальных условных определениях) Исходные условные идентификаторы, указанные в меню IDE OptionsіCompilerіConditional Defines (ПараметрыіКомпиляторіУслов- ные определения) или в параметре /D компилятора командной строки, являются недопустимыми. Borland Pascal требует 0 или более иден- тификаторов, разделенных пробелами, запятыми или точками с запя- тыми. 131 Header does not match previous definition (Заголовок не соответствует предыдущему определению) Заголовок процедуры или функции, указанный в интерфейсной секции или описании forward, не соответствует самому заголовку процедуры или функции. 132 Cannot evaluate this expression (Нельзя вычислить данное выражение) В выражении-константе или в отладочном выражении вы пытае- тесь использовать неподдерживаемые средства, например, в описании константы пытаетесь использовать функцию Sin или вызвать в отла- дочном выражении определенную пользователем функцию. Описание до- пустимого синтаксиса выражения-константы содержится в Главе 2 ("Лексемы и константы") "Руководства по языку". Описание допусти- мого синтаксиса отладочных выражений можно найти в Главе 3 ("Константы") "Руководства по языку". 134 Expression incorrectly terminated (Некорректное завершение выражения) [Только для встроенного отладчика] Borland Pascal ожидает в данном месте конец выражения или операцию, но не находит ни того, ни другого. 135 Invalid format specifier (Неверный спецификатор формата) [Только для встроенного отладчика] Используется неверный спецификатор формата или числовой ар- гумент спецификатора формата выходит за допустимые границы. Спи- сок допустимых спецификаторов формата содержится в Главе 6 "Руко- водства пользователя" ("Отладка программ в интегрированной сре- де"). 136 Invalid indirect reference (Недопустимая косвенная ссылка) Оператор пытается осуществить недопустимую косвенную ссылку. Например, вы используете абсолютную переменную (absolute), базо- вая переменная которой в текущем модуле неизвестна, или использу- ете подпрограмму типа inline, в которой делается ссылка на пере- менную, не определенную в текущем модуле. 137 Structured variable are not allowed here (Здесь не допускается использование структурной переменной) Делается попытка выполнить над структурной переменной непод- держиваемую операцию. Например, вы пытаетесь перемножить две за- писи. 138 Cannot evaluate without System unit (Нельзя вычислить без блока System) [Только для встроенного отладчика] Чтобы отладчик смог вычислить выражение, в файле .TPL должен содержаться модуль System. 139 Cannot access this symbol (Доступ к данному идентификатору отсутствует) [Только для встроенного отладчика] Как только вы скомпилируете программу, все множество ее идентификаторов становится доступным. Однако к отдельным иденти- фикаторам (например, к переменным) нельзя получить доступ, пока вы не запустите программу. 140 Invalid floating-point operation (Недопустимая операция с плавающей точкой) При операции с двумя действительными значениями было получе- но переполнение или деление на ноль. 141 Cannot compile overlay to memory (Нельзя выполнить компиляцию оверлеев в память) [Реальный режим] Программа, использующая оверлеи, должна компилироваться на диск. 142 Procedure or function variable expected (Должна использоваться процедурная или функциональная пере- менная) Стандартная процедура Assigned требует аргумента типа пере- менной-указателя или процедурного типа. 143 Invalid procedure or function reference (Недопустимая ссылка на процедуру или функцию) - Попытка вызова процедуры или функции в выражении. - Если ее нужно присвоить переменной-процедуре, то процедура или функция должны компилироваться в состоянии {$F+} и не может описываться с помощью ключевых слов inline или interrupt. 144 Cannot overlay this unit (Этот модуль не может использоваться в качестве оверлейного) [Реальный режим] Попытка использовать в качестве оверлейного модуль, который не был скомпилирован с директивой {$O+}. 146 File access denied (Файл недоступен) Файл не можете быть открыт или создан. Вероятно, компилятор пытается записать файл, доступный только по чтению. 147 Object type expected (Нужен объектный тип) Идентификатор не определяет объектный тип. 149 VIRTUAL expected (Требуется VIRTUAL) Отсутствует ключевое слово virtual. 150 Method identifier expected (Нужен идентификатор метода) Идентификатор не является идентификатором метода. Ошибки 151 - 169 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 151 Virtual constructor are not allowed (Виртуальный конструктор не допускается) Метод конструктора должен быть статическим. 152 Constructor identifier expected (Нужен идентификатор конструктора) Идентификатор не является идентификатором конструктора. 153 Destructor identifier expected (нужен идентификатор деструктора) Идентификатор не является идентификатором деструктора. 154 Fail only allowed within constructors (Fail допускается только внутри конструкторов) Стандартная процедура Fail может использоваться только внут- ри конструктора. 155 Invalid combination of opcode and operands (Недопустимая комбинация кода операции и операндов) Код операции ассемблера не воспринимает данное сочетание операндов. Возможны следующие причины: - Для данного кода операции ассемблера слишком много или слишком мало операндов, например, INC AX,BX или MOV AX. - Число операндов корректно, но их тип и порядок не соот- ветствуют коду операции, например, DEC 1, MOV AX,CL или MOV AX,[BX+SI]. - В операторе ассемблера содержится комментарий, например MOV { начальное значение } AX,1. 156 Memory reference expected (Требуется ссылка на память) Операнд ассемблера не является ссылкой на память, которая здесь требуется. Скорее всего, вы забыли указать в индексном опе- раторе квадратные скобки, например, MOV AX,BX+SI вместо MOV AX,[BX+SI]. 157 Cannot add or substract relocatable symbols (Нельзя складывать или вычитать перемещаемые идентификаторы) Единственная операция, которую допускается выполнять с пере- мещаемыми идентификаторами в операнде Ассемблера - это сложение с константой или вычитание константы. Переменные, процедуры, функ- ции и метки представляют собой перемещаемые идентификаторы. Пред- положим, что Var - это переменная, а Const - константа. Тогда ин- струкции MOV AX,Const+Const и MOV AX,Var+Const являются допустимыми, а MOV AX,Var+Var - нет. 158 Invalid register combination (Недопустимое сочетание регистров) Допустимыми сочетаниями индексных регистров являются [BX], [BP], [SI], [DI], [BX+SI], [BX+DI], [BP+SI] и [BP+DI]. Другое со- четание индексных регистров, например, [AX], [BP+BX] и [SI+DX] не допускается. Локальные переменные (переменные, описанные в процедуре или функции) всегда размещаются в стеке и доступны через регистр BP. При ссылках на такие переменные ассемблер автоматически добавляет [BP], поэтому, хотя конструкция типа Local[BX] (где Local - ло- кальная переменная) выглядит допустимой, это не так, поскольку в итоге операндом будет Local[BP+BX]. 159 286/287 Instructions not allowed (Инструкции процессоров 286/287 не разрешены) Для разрешения кодов операций указанных процессоров исполь- зуйте директиву компилятора {$G+}, но имейте в виду, что резуль- тирующий код не сможет работать на машинах с процессорами 8086 и 8088. 160 Invalid symbol reference (Недопустимая ссылка на идентификатор) Данный идентификатор в операнде ассемблера недоступен. Воз- можны следующие причины: - В операнде ассемблера вы пытаетесь обратиться к стандарт- ной процедуре, стандартной функции, или специальным масси- вам Mem, MemW, MemL, Port, PortW. - В операнде ассемблера вы обращаетесь к строке, значению с плавающей точкой или константе-множеству. - В операнде ассемблера вы пытаетесь обратиться к процедуре или функции типа inline. - Вне функции вы пытаетесь обратиться к специальному иденти- фикатору @Result. - Вы пытаетесь сгенерировать короткую инструкцию JMP, кото- рая выполняет переход не на метку, а на что-то другое. 161 Code generation error (Ошибка генерации кода) Предшествующая часть оператора содержит инструкции LOOPNE, LOOPE, LOOP или JCXZ, которые не могут достичь целевой метки. 162 ASM expected (Нужно ключевое слова ASM) 163 Duplicate dynamic method index (Дублируется идентификатор динамического метода) Этот индекс динамического метода уже используется другим ме- тодом. Возможно, вы пытаетесь переопределить динамический метод, но неправильно набрали его имя, введя, таким образом, новый ме- тод. 164 Duplicate resource identifier (Дублирование идентификатора ресурса) [Только Windows или защищенный режим] Данный файл ресурса содержит ресурс с именем или идентифика- тором, которые уже используются для другого ресурса. 165 Duplicete or invalid export index (Дублирующийся или недопустимый индекс экспорта) [Только Windows или защищенный режим] Порядковый номер, заданный в операторе Index, не находится в диапазоне 1..32767, или уже используется другой экспортируемой подпрограммой. 166 Procedure or function identifier expected (Ожидается идентификатор процедуры или функции) [Только Windows или защищенный режим] Оператор export допускает экспорт только процедур и функций. 167 Cannot export this symbol (Этот идентификатор экспортировать нельзя) [Только Windows или защищенный режим] Процедура или функция не может экспортироваться, если она не описана в операторе процедуры export. 168 Duplicate export name (Дублирование экспортируемого имени) [Только Windows или защищенный режим] Имя, заданное в операторе name, уже используется для другой экспортируемой подпрограммы. 169 Executable file header too large (Слишком велик заголовок выполняемого файла) [Только Windows или защищенный режим] Генерируемый заголовок файла EXE превышает 64K (верхний пре- дел для компоновщика). Вероятно, вы импортируете или экспортируе- те по имени слишком много процедур или функций. Рассмотрите воз- можность использования порядковых значений. Возможно также, что у вас слишком много именованных ресурсов. Попробуйте также исполь- зовать порядковые значения. Ошибки этапа выполнения ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Некоторые ошибки этапа выполнения приводят к тому, что прог- рамма выводит на экран сообщение об ошибке и завершает свою рабо- ту: Runtime error nnn at xxxx:yyyy (Ошибка этапа выполнения nnn по адресу xxxx:yyyy) где nnn - номер ошибки времени выполнения, а xxxx:yyyy - это ад- рес ошибки этапа выполнения (сегмент и смещение). Ошибки этапа выполнения делятся на две категории: ошибки DOS (коды ошибок с 1 до 99), ошибки ввода-вывода (с 100 по 149), критические ошибки (со 150 по 199) и фатальные ошибки (коды ошибок с 200 до 255). Ошибки DOS ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 1 Invalid function number (Недопустимый номер функции) Вы обратились не несуществующей функции DOS. 2 File not found (Не найден файл) Ошибка генерируется процедурами Reset, Append, Rename или Erase в случае, если имя присвоенное файловой переменной, указы- вает несуществующий файл. 3 Path not found (Маршрут не найден) - Ошибка генерируется процедурами Reset, Rewrite, Append или Erase в случае, если имя присвоенное файловой переменной, является недействительным или указывает на несуществующий подкаталог. - Описывается ChDir, MkDir или RmDir в случае, если маршрут является недействительным или указывает несуществующий подкаталог. 4 Too many open files (Слишком много открытых файлов) Ошибка генерируется процедурами Reset, Rewrite или Append в случае, если программа имеет слишком много открытых файлов. Опе- рационная система DOS не позволяет использовать более 15 открытых файлов для каждого процесса. Если вы получили эту ошибку при на- личии менее 15 открытых файлов, то она может указывать на то, что файл CONFIG.SYS не включает параметров FILES=xxx или что этот па- раметр задает слишком мало файлов. Увеличьте число файлов до ка- кого-либо подходящего значения, например, до 20. 5 File access defined (Нет доступа к файлу) - Данная ошибка генерируется процедурой Reset или Append в случае, если FileMode допускает запись, а имя, присвоенное файловой переменной, указывает каталог или файл, доступные только для чтения. - Данная ошибка генерируется процедурой Rewrite в случае, если каталог заполнен, или если имя, присвоенное файловой переменной, задает каталог или существующий файл, доступ- ный только для чтения. - Данная ошибка генерируется процедурой Rename в случае, ес- ли имя, присвоенное файловой переменной, указывает каталог или если новое имя указывает существующий файл. - Данная ошибка генерируется процедурой Erase в случае, если имя, присвоенное файловой переменной, указывает каталог или файл, доступный только для чтения. - Данная ошибка генерируется процедурой MkDir в случае, если файл с тем же именем уже существует в порождающем катало- ге, если нет места в порождающем каталоге, или если марш- рут задает устройство. - Данная ошибка генерируется процедурой RmDir в случае, если каталог не является, пустым, если маршрут не определяет каталог, или если маршрут задает корневой каталог. - Данная ошибка генерируется процедурой Read или BlockRead в случае типизированного или нетипизированного файла, если файл не открыт для чтения. - Данная ошибка генерируется процедурой Write или BlockWrite для типизированного или нетипизированного файла в случае, если этот файл не открыт для записи. 6 Invalid file handle (Недопустимый описатель файла) Данная ошибка генерируется в том случае, если системному вы- зову DOS передается недопустимый описатель файла. Эта ошибка воз- никать не должна. Если же она появляется, то это является свиде- тельством того, что файловая переменная испорчена каким-либо об- разом. 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 в случае, если оба файла не находятся на одном и том же диске. 18 No more files (Нет файлов) Сообщается через переменную DosError в модуле Dos и WinDos, когда вызов FindFirst или FindNest не находит файлов, совпадающих с заданными именем или набором атрибутов. Ошибки ввода-вывода ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Если один из операторов компилировался с директивой {$I+}, то эта ошибка приводит к прекращению выполнения программы. В сос- тоянии {$I-} программа продолжает выполняться, а ошибка генериру- ется функцией IOResult. 100 Disk read error (Ошибка чтения диска) Описывается Read в типизированном файле в случае, если вы пытаетесь осуществить считывание после конца файла. 101 Disk write error (Ошибка записи на диск) Ошибка генерируется процедурами Close, Write, Writeln, Flush или Page в случае, если диск переполнен. 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 и Page в текстовом файле в случае, если файл не открыт для вывода. 106 Invalid numeric format (Неверный числовой формат) Описывается Read или Readln в случае, если числовое значе- ние, считанное из текстового файла, не соответствует правильному числовому формату. Критические ошибки ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Примечание: Только для реального или защищенного режи- ма. Более подробная информация о критических ошибках приведена в "Руководстве программиста по операционной системе DOS". 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 (Сбой аппаратуры) DOS сообщает об этой ошибке в результате нарушения совмест- ного доступа или различных сетевых ошибок. Фатальные ошибки ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Эти ошибки всегда приводят к немедленной остановке програм- мы. 200 Division by zero (Деление на ноль) В программе при операции /, mod или div предпринимается по- пытка разделить число на 0. 201 Range check error (Ошибка при проверке границ) Ошибка генерируется процедурами операторами, скомпилирован- ными в состоянии {$R+},при возникновении одной из следующих ситу- аций: - индексное выражение квалификатора массива находилось вне допустимого диапазона; - была осуществлена попытка присвоить переменной значение, находящееся вне диапазона переменной; - была осуществлена попытка передать значение, находящееся вне допустимого диапазона, в качестве параметра процедуре или функции. 202 Stack overflow error (Переполнение стека) Эта ошибка генерируется на входе в процедуру или функцию, скомпилированные в режиме {$S+}, в случае, если нет достаточной области для размещения локальных переменных подпрограммы. Уве- личьте размер стека, используя директиву компилятора $M. Данная ошибка может также вызываться циклической рекурсией или процедурой на ассемблере, которая не поддерживает стек. 203 Heap overflow error (Переполнение динамически распределяемой области памяти) Эта ошибка генерируется процедурами New или GetMem, в том случае, если нет достаточного свободного места в динамической об- ласти памяти, чтобы выделить память для блока требуемого размера. Полное описание программы управления динамически распределя- емой областью памяти (администратора динамической области) содер- жится в Главе 21 ("Использование памяти") "Руководства по языку". 204 Invalid pointer operation (Недействительная операция ссылки) Эта ошибка генерируется процедурами Dispose или FreeMem в случае, если ссылка имеет значение nil или указывает на адрес, лежащий за пределами динамически распределяемой области памяти, или если список свободных блоков не может быть расширен. 205 Floating point overflow (Переполнение при операции с плавающей точкой) Операция с плавающей запятой привела к переполнению. 206 Floating point underflow (Исчезновение порядка при операции с плавающей точкой) Операция с плавающей точкой привела к исчезновению порядка. Эта ошибка генерируется только в том случае, если вы используете сопроцессор математических вычислений 8087 с управляющим словом, которое демаскирует ошибки, возникающие при исчезновении порядка. По умолчанию исчезновение порядка приводит к возвращению резуль- тата равного нулю. 207 Invalid floating point operation (Недопустимая операция с плавающей точкой) - Действительное значение, передаваемое Trunc или Round, не может быть преобразовано в целое число, находящееся внутри диапазона типа longint (от -2147483648 до 2147483647). - Аргумент, передаваемый функцией Sqrt (Извлечение квадрат- ного корня), отрицательный. - Аргумент, передаваемый функцией Ln (логарифм), равен нулю или имеет отрицательное значение. - Произошло переполнение стека 8087. Более подробно о прави- лах программирования 8087 смотрите в соответствующей гла- ве. 208 Overlay manager not installed (Не установлена подсистема управления оверлеями) [Только реальный режим] Ваша программа вызывает оверлейную процедуру или функцию, а подсистема управления оверлеями не инициализирована. Вероятнее всего отсутствует обращение к процедуре OvrInit, или обращение к этой процедуре завершилось с ошибкой. Нужно иметь в виду, что ес- ли в каком-либо из оверлейных модулей у вас содержится код иници- ализации, то вы должны создать дополнительный неоверлейный мо- дуль, вызывающий процедуру OvrInit, и использовать этот модуль перед любым из оверлейных модулей. 209 Overlay file read error (Ошибка чтения оверлейного файла) [Только реальный режим] Когда подсистема управления оверлеями пыталась считать овер- лей из оверлейного файла, произошла ошибка чтения. 210 Object not initialized (Объект не инициализирован) При включенной проверке диапазона вы обращаетесь к виртуаль- ному методу объекта до того, как объект инициализируется с по- мощью вызова конструктора. 211 Call to abstract method (Вызов абстрактного метода) Данная ошибка генерируется процедурой Abstract модуля Objects и указывает, что ваша программа пытается выполнить абс- трактный виртуальный метод. Когда объектный тип содержит один или более абстрактных методов, он называется абстрактным объектным типом. Инициализация объектов абстрактного типа считается ошибкой - абстрактные объектные типы существуют только для того, чтобы вы могли из них наследовать и переопределять абстрактные методы. Например, метод Compare типа TSortedCollection в модуле Objects является абстрактным и показывает, что для реализации от- сортированного набора вы должны создать объектный тип, наследую- щий из TSortedCollection и переопределяющий метод Compare. 212 Stream registration error (Ошибка регистрации потока) Данная ошибка генерируется процедурой RegisterType в модуле Objects и указывает, что произошла одна из следующих ошибок: - Запись регистрации потока не находится в текущем сегменте данных. - Поле ObType записи регистрации потока является нулевым. - Тип уже зарегистрирован. - Уже зарегистрирован другой тип с тем же значением ObValue. 213 Collection index out of range (Индекс набора вне диапазона) Индекс, передаваемый методу TCollection, выходит за границы диапазона. 214 Collection overflow error (Ошибка переполнения набора) Данная ошибка выводится TCollection при попытке добавить элемент, когда набор уже расширить нельзя. 215 Arithmetic overflow error (Арифметическое переполнение) Эту ошибку дают операторы, скомпилированные в состоянии {$G+}, когда арифметическая операция приводит к переполнению, например, когда результат операции лежит вне допустимого диапазо- на. 216 General Protection fault (Общее нарушение защиты) [Только защищенный режим] Эта ошибка является результатом того, что вы пытаетесь полу- чить доступ к памяти, к которой ваша программа обращаться не мо- жет. Операционная система останавливает вашу прикладную программу и сообщает вам об общем нарушении защиты (GP), но это не приводит к сбою системы. Ситуацию GP вызывают следующие причины: - загрузка в сегментные регистры значений-констант; - выполнение арифметических операций с сегментными регистра- ми или селекторами; - использование сегментных регистров для временной записи в сегменты кода; - доступ к памяти вне локального адресного пространства, за- данного в прикладной программе; - разыменование указателей nil. Подробное описание вы можете найти в Главе 17 ("Программиро- вание в защищенном режиме DOS") в "Руководстве по языку". Ошибки DPMI ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Ниже приводятся сообщения об ошибках, которые вы можете по- лучить при выполнении программы в защищенном режиме. Эти ошибки подразделяются на 4 категории: ошибки установки, фиктивного моду- ля, администратора этапа выполнения и сервера. Там, где это воз- можно, приводятся возможные причины и решение. Примечания: Подробное описание средств DPMI вы можете найти в Главе 17 ("Программирование в защищенном режиме DOS") в "Руководстве по языку". Ошибки DPMIINST ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД A20 line already enabled, so test is meaningless (Строка A20 уже разрешена, проверка не имеет смысла) DPMIINST генерирует это сообщение, когда вы выполняет ее для нахождения и дополнения информации о вашей машине в базу данных ядра. Если вы обнаруживаете ряд таких сообщений, возможно это оз- начает, что HIMEM.SYS загружен. Удалите HIMEM.SYS и загрузитесь с обычными файлами CONFIG.SYS и AUTOEXEC.BAT. Затем снова запустите DPMIINST перед перезагрузкой HIMEM.SYS. См. сообщение Machine not in database. Ошибки фиктивного модуля ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Фиктивный модуль, программа реального режима, встроенная в вашу программу защищенного режима, отвечает за загрузку DPMI-сер- вера и администратора этапа выполнения (если они отсутствуют). Сообщения об ошибках фиктивного модуля имеют следующий текстовый формат: Stub error (xxxx) : xxxx где Stub error указывает на ошибку, генерируемую фиктивным моду- лем, (xxxx) - это сообщение об ошибке, а xxxx - текст сообщения. Stub error (0001): needs at least 286 (Ошибка фиктивного модуля: требуется процессор, не младше 286) Эта ошибка возникает, если вы пытаетесь выполнить программу .EXE защищенного режима в системе с процессором, младше 286. Stub error (2002): can't find rtm.exe (Ошибка фиктивного модуля: не найден файл rtm.exe) Файл администратора этапа выполнения rtm.exe должен нахо- диться по маршруту или в текущем каталоге. Stub error (2003): can't find DPMI16BI.OVL (Ошибка фиктивного модуля: на найден DPMI16BI.OVL) Файл DPMI16BI.OVL должен находиться по маршруту или в теку- щем каталоге. Stub error (0012): file not found (Ошибка фиктивного модуля: файл не найден) Эта ошибка возникает, если фиктивный модуль не может найти файл вашей прикладной программы. Убедитесь, что вы задали кор- ректное имя и маршрут. Stub error (0013): path not found (Ошибка фиктивного модуля: маршрут не найден) Stub error (0015): file access denied) (Ошибка фиктивного модуля: файл недоступен) Stub error (0018): not enough memory to load file (Ошибка фиктивного модуля: для загрузки файла не хватает памяти) Stub error (001A): invalid enviroment (Ошибка фиктивного модуля: недопустимая операционная среда) Эта ошибка возникает, если запорчена спецификация среды DOS вашей системы. Stub error (001B): invalid file (Ошибка фиктивного модуля: недопустимый файл) Error: no DOS extrensions in DPMI server (Ошибка: в DPMI-сервере нет расширений DOS) Возможно, используемый вами DPMI-сервер не поддерживает от- раслевых стандартов. Попробуйте использовать DPMI-сервер Borland или Windows. Error: needs DOS 3.x or higher (Ошибка: требуется DOS версии 3.x или старше) Failed to locate DPMI-server (DPMI16BI.OVL) (Не удается найти DPMI-сервер) Убедитесь, что файл DPMI16BI.OVL находится по указанному ва- ми маршруту (как и прикладная программа защищенного режима). Ошибки администратора этапа выполнения ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Загрузчик фиктивного модуля пытается загрузить администратор этапа выполнения и указывает ему на загрузку части вашего файла, предназначенного для защищенного режима. Если это процесс завер- шается неудачно, то выводится сообщение об ошибке следующего фор- мата: Loader error (xxxx): xxxx (Ошибка загрузчика (xxxx): xxxx) где Loader error представляет ошибку, генерируемую загрузчиком фиктивного модуля, (xxxx) - номер ошибки, а xxxx - текст сообще- ния. Большинство сообщений администратора этапа выполнения вызы- ваются нехваткой памяти. В большинстве случаев вы можете устра- нить приводящую к ошибке ситуацию. Если вы работаете в диалоговом окне DOS Windows, и ваш файл информации о прикладной программе (PIF) находится слишком "низко" в памяти и не может запускаться администратором этапа выполнения. Измените установку файла PIF, чтобы для загрузки администратора этапа выполнения было достаточно памяти. Если вы работаете под DOS и * переменная операционной среды DPIMEME у вас установлена в MAXMEM, попробуйте увеличить значение MAXMEM; * если у вас есть псевдодиск или установлен кэш диска, поп- робуйте уменьшить их размер. Loader error (0001): out of memory (Ошибка загрузчика: нет памяти) Loader error (0002): out of selectors (Ошибка загрузчика: нет селекторов) Не хватает селекторов. Если вы используете 386^MAX (версии 6.00 или старше), попробуйте добавить в 386.pro/bluemax.pro клю- чевое слово DPMIMEM=1200. Loader error (0003): out of internal tables (Ошибка загрузчика: не хватает внутренних таблиц) Загрузчик превысил предельное значение внутренних таблиц. Loader error (0020): invalid dynamic link (Ошибка загрузчика: недопустимая динамическая компоновка) Недопустимая ссылка импорта из DLL. Эта ошибка происходит, если вы: * ссылаетесь на несуществующую функцию DLL; * используете функции ядра или пользовательские функции, ко- торые Borland Pascal не эмулирует в модуле Winapi. Loader error (0022): could't open file (Ошибка загрузчика: невозможно открыть файл) Файл или импортируемая файлом DLL не найдены или не могут быть открыты. Убедитесь, что DLL находится по указанному маршруту или попробуйте увеличить число доступных описателей файлов в CONFIG.SYS (FILE=30). Loader error (0023): invalid exe format (Ошибка загрузчика: недопустимый формат файла .exe) Файл или импортируемая файлом DLL не найдены или имеют недо- пустимый формат NEWEXE. Loader error (0024): wrong version (Ошибка загрузчика: неверная версия) Убедитесь, что файла DPMI16.OVL находится по корректному маршруту и является первым файлом, доступным для загрузки. Убеди- тесь, что вы используете корректный загрузчик, а не тот, который предназначен для другой прикладной программы, например, Paradox. Loader error (0025): cannot initialize (Ошибка загрузчика: невозможно инициализировать) Loader error (0026): DLL initialization error (Ошибка загрузчика: ошибка инициализации DLL) Неудачно завершилась (то есть возвратила ненулевой код ошиб- ки) одна из подпрограмм инициализации DLL. Убедитесь, что DLL за- писана корректно и не требует больше памяти, чем у вас доступно в данный момент. Error: error in the enviroment string (Ошибка: ошибка в строке операционной среды) Некорректные параметры в строке операционной среды "RTM". Runtime error: invalid entry point called (Ошибка этапа выполнения: вызов недопустимой точки входа) Прикладная программа ссылается на несуществующее имя или по- рядковый номер одного из модулей. Обычно это вызывается некор- ректной ссылка на .DLL. Application load & execute error 0001 Application load & execute error FFE0 (Ошибка загрузки и выполнения прикладной программы) Для загрузки прикладной программы защищенного режима не хва- тает дополнительной памяти. Ошибки DPMI-сервера ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Сообщения об ошибках DPMI-сервера генерируются только DPMI-сервером Borland и выводятся на экран в формате: DPMI error (xxxx): xxxx где DPMI error представляет ошибку, генерируемую DPMI-сервером, (xxxx) - номер сообщения, а xxxx - текст сообщения. DPMI error (4001): insufficient memory for initialization (Ошибка DPMI: не хватает памяти для инициализации) Не хватает памяти для запуска сервера. DPMI error (4002): memory manager does not support DPMI of VCPI (Ошибка DPMI: администратор памяти не поддерживает DPMI или VCPI) Не обнаружены DPMI или VCPI. Возможно, ваша система исполь- зует старую или недопустимую версию администратора памяти. DPMI error (4004): unrecognized hardware, run DPMIINST (Ошибка DPMI: нераспознанная аппаратура, запустите DPMIINST) DPMI-сервер не распознает используемую вами аппаратуру. Это сообщение может появиться, если вы работаете на машинах с процес- сором младше 286. DPMI error (4005): unrecognized enviroment parameters (Ошибка DPMI: нераспознанные параметры операционной среды) Параметры переменной операционной среды DPMIMEM некорректны. DPMI error (4007): bad A20 off parameter (Ошибка DPMI: неверный параметр A20) DPMI-сервер не может корректно работать с параметром A20. Убедитесь, что администратор памяти, такой как HIMEM.SYS, уста- новлен корректно. DPMI error (4008): bad A20 on parameter (Ошибка DPMI: неверный параметр A20) См. выше. DPMI error (4009): bad switch parameter (Ошибка DPMI: неверный параметр-переключатель) Это сообщение об ошибке может указывать на неверную работу драйвера XMM DOS, HIMEM.SYS или QEMM. DPMI error (4009): insufficient extended memory (Ошибка DPMI: не хватает расширенной памяти) Для работы сервера недостаточно расширенной памяти. Если у вас установлен псевдодиск или программа кэширования диска, попро- буйте уменьшить их размеры. DPMI error (400C): cannot create linear address space (Ошибка DPMI: невозможно создать линейное адресное прост- ранство) DPMI error (400D): cannot create system linear space (Ошибка DPMI: невозможно создать системное линейное прост- ранство) DPMI error (400E): cannot copy kernel to high memory (Ошибка DPMI: невозможно скопировать ядро в старшие адреса памяти) DPMI error (400F): undefined error (Ошибка DPMI: неопределенная ошибка) DPMI error (4010): unable to copy DOSX (Ошибка DPMI: невозможно скопировать DOSX) DPMI error (4011): unable to copy IDT (Ошибка DPMI: невозможно скопировать IDT) DPMI error (4012): unable to create int chain table (Ошибка DPMI: невозможно создать таблицу цепочек прерываний) DPMI error (4013): unable to create PM stack (Ошибка DPMI: невозможно создать стек защищенного режима) DPMI error (4014): unable to initialize swapping (Ошибка DPMI: невозможно инициализировать свопинг) Сообщения DMPI с 400C по 4014 вы получать не должны. Если это происходит, то возможно вы запускаете прикладную программу с недостаточным объемом памяти. Чтобы устранить ошибку, увеличьте объем доступно расширенной памяти, например, если вы используете программу кэширования диска, то попробуйте уменьшить выделяемые буферы. Bad eiviroment params (Неверные параметры операционной среды) Используя корректный синтаксис, заново задайте значение пе- ременной операционной среды DPMIMEM. Machine not in database (run DPMIINST) (Машины нет в базе данных, выполните DPMIINST) DPMI-сервер выполняет поиск в базе данных ядра и не может найти информации о вашей машине. Выполните программу DPMIINST (при необходимости несколько раз), чтобы обновить эту базу дан- ных. DPMIINST генерирует также файл .DB, который вы можете пос- лать Borland. См. сообщение: A20 line already enabled, so test is meaningless. Not enough memory for PM init (Не хватает памяти для инициализации защищенного режима) Чтобы DPMI-сервер мог инициализировать защищенный режим, не хватает памяти. V86 task without vcpi (Задача V86 без VCPI) Выполняется другая задача, что не позволяет DPMI-серверу пе- реключиться в защищенный режим. Удалите мешающую прикладную прог- рамму, например администратор рабочей области или отладчик, затем перезагрузитесь. Приложение A. Использование редактора ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В этом приложении вы найдете информацию по всем используемым в Borland Pascal командам редактирования. В IDE для Windows вы можете работать с двумя наборами команд - CUA (команды общего ин- терфейса с пользователем) и альтернативным. В IDE для DOS досту- пен только альтернативный набор команд. В Таблице A.1 имеются сноски, указывающие команды, которые более подробно описаны в Таблицах A.2, A.3 и A.4. Команды редактирования Таблица A.1 ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДї і Команда і Оба реж.і CUA і Альтерн. і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДґ і Команды перемещения курсора і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДґ і і і і і іСимвол влево і <- і і Ctrl+S і і і і і і іСимвол вправо і -> і і Ctrl+D і і і і і і іСлово влево і Ctrl <- і і Ctrl+A і і і і і і іСлово вправо і Ctrl -> і і Ctrl+F і і і і і і іСтрока вверх і і і Ctrl+E і і і і і і іСтрока вниз і і і Ctrl+X і і і і і і іПрокрутка вверх на одну строку і Ctrl-W і і і і і і і і іПрокрутка вниз на одну строку і Ctrl-Z і і і і і і і і іСтраница вверх і PgUр і і Ctrl+R і і і і і і іСтраница вниз і PgDn і і Ctrl+C і і і і і і іК началу строки і Home і і і і і і і і і і Ctrl+Q Sі і і і і і і і іК концу строки і End і і і і і і і і і і Ctrl+Q Dі і і і і і і і іК верхнему краю окна і Ctrl+Q Eі Ctrl+E і Ctrl+Homeі і і і і і іК нижнему краю окна і Ctrl+Q Xі Ctrl+X і Ctrl+End і і і і і і іК началу файла і Ctrl+Q Rі Ctrl+Homeі Ctrl+PgUpі і і і і і іК концу файла і Ctrl+Q Cі Ctrl+End і Ctrl+PgDnі і і і і і іК последней позиции курсора і Ctrl+P і і і і і і і і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДґ і Команды вставки и удаления і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДВДДДДДДДДДґ іУдалить символ по месту курсора і Del і і Ctrl+G і і і і і і іУдалить символ слева от курсора і Backsрaceі і Ctrl+H і і і і і і і і Shift+Tabі і і і і і і і іУдалить строку і Ctrl+Y і і і і і і і і іУдалить символы до конца строки і Ctrl+Q Y і Shift+ і і і і і Ctrl+Y і і і і і і і іУдалить слово справа от курсора і Ctrl+T і і і і і і і і іВставить строку і Ctrl+N і і і і і і і і іВкл./выкл. режим вставки і Ins і і Ctrl+V і і і і і і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДБДДДДДДДДДґ і Команды работы с блоками і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДДДДДДДДДґ іК началу блока і Ctrl+Q B і і і і і і іК концу блока і Ctrl+Q K і і і і і і іНачало отметки блока * і Ctrl+K B і і і і і і іКонец отметки блока * і Ctrl+K K і і і і і і іВыход в меню і Ctrl+K D і і і і і і іСпрятать/показать блок * і Ctrl+K H і і і і і і іОтметить строку і Ctrl+K L і і і і і і іОтпечатать блок і Ctrl+K P і і і і і і іПометить одно слово і Ctrl+K T і і і і і і іУдалить блок і Ctrl+K Y і і і і і і іСкопировать блок * і Ctrl+K C і і і і і і іПереместить блок * і Ctrl+K V і і і і і і іСкопировать блок в буфер + і Ctrl+Ins і і і і і і іСкопировать блок в буфер с і Shift+Delі і іудалением из текста + і і і і і і і іУдалить блок і Ctrl+Del і і і і і і іЗадать структурный отступ блока і Ctrl+K I і Shift+Ctrl+I і і і і і іСкопировать из буфера + і Shift+Insі і і і і і іСчитать блок с диска + і Ctrl+K R і Shift+Ctrl+R і і і і і іОтменить структурный отступ і Ctrl+K U і Shift+Ctrl+U і іблока і і і і і і і іЗаписать блок на диск + і Ctrl+K W і Shift+Ctrl+W і і і і і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДДДДДДДДДґ і Дополнительные команды работы с блоками і ГДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДВДДДДДДДДДВДДДДДДДДДДДДґ іСимвол влево і Shift+ <- і і і і і і і і іСимвол вправо і Shift+ -> і і і і і і і і іК концу строки і Shift+End і і і і і і і і іК началу строки і Shift+Home і і і і і і і і іСтрока вниз і Shift+"стр.вниз"і і і і і і і і іСтрока вверх і Shift+"стр.верх"і і і і і і і і іСтраница вниз і Shift+PgDn і і і і і і і і іСтраница вверх і Shift+PgUр і і і і і і і і іСлово влево і Shift+Ctrl+<- і і і і і і і і іСлово вправо і Shift+Ctrl+-> і і і і і і і і іК концу файла і Shift+Ctrl+End і і Shift+Ctrl+і і і і і PgDn і і і і і і іК началу файла і Shift+Ctrl+Home і і Shift+Ctrl+і і і і і PgUp і ГДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДБДДДДДДДДДБДДДДДДДДДДДДґ і Другие команды редактирования і ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДВДДДДДДДДВДДДДДДДґ іЗадать/отменить режим автома- і Ctrl+O I і і і ітического отступа ы і і і і і і і і і іВключить/выключить режим пере- і Ctrl+O R і і і імещения курсора по позициям і і і і ітабуляции ы і і і і і і і і і іВыйти из интегрированной среды і і Alt+F4 і Alt+X і і і і і і іНайти позицию маркера (отметки і Ctrl+Q |