Глава 4. Программирование в интегрированной интерактивной среде для DOS (часть2)

Печать исходного кода

             Если вы  хотите получить печатную копию своего исходного ко-
        да, выберите команду File|Print.  IDE расширяет символы табуляции
        (заменяя табуляцию  соответствующим числом пробелов и затем печа-
        тает ваш файл.

                    Выделение элементов синтаксиса при печати

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

             1. Выберите команду File|Printer Setup.

             2. Если программа PRNFLTR.EXE не находится по вашему маршру-
                ту или в текущем каталоге,  добавьте информацию о текущем
                маршруте в запись PRNFLTR в диалоговом окне Filter Path.

             3. В блоке ввода Command  Line  вы  можете  указать  принтер
                Epsor, HP LaserJet или PostScript.

                * Если вы используете принтер Epson, введите:

                  $NOSWAP /EPSON

                * Если вы используете принтер HP LaserJet, введите:

                  $NOSWAP /HP

                * Если вы используете принтер PostScript, введите:

                  $NOSWAP /PS

                 Если у вас другой тип принтера, то вы можете модифициро-
                 вать файл PRNFLTR.PAS, чтобы воспринимались соответству-
                 ющие коды.

             4. Установите параметр Send Highllighting Escape Codes.

             5. Выберите командную кнопку OK.

             6. Выберите команду File|Print.

                Если параметр Syntax Highlight установлен,  ваш текст пе-
                чатается с выделением синтаксических элементов.


Работа с файлами

При программировании в IDE вы можете создавать новые файлы, открывать существующие файлы и сохранять их. Основные команды ра- боты с файлами перечислены в следующей таблице: +------------------+----------------------------------+ | Команда | Описание | +------------------+----------------------------------| | File|New | Открывает новое окно редактиро-| | | вания и присваивает ему временное| | | имя. | +------------------+----------------------------------| | File|Open | Выводит диалоговое окно, с по-| | | мощью которого можно открыть| | | файл. | +------------------+----------------------------------| | File|Save | Сохраняет файл в активном окне| | | редактора на диске. | +------------------+----------------------------------| | File|Save As | Сохраняет файл в активном окне| | | редактора под другим именем. | +------------------+----------------------------------| | File|Save All | Сохраняет все модифицированные| | | файлы. | +------------------+----------------------------------+

Открытие файлов

Для открытия файла выполните следующие шаги: 1. Выберите команду File|Open. Выводится диалоговое окно Open a File (Открытие файла). Для задания открываемого файла вы можете выполнить одно из следующих действий. * В блоке ввода наберите полное имя файла. * Наберите имя файла с трафаретными символами. Это от- фильтровывает список файлов в соответствии с вашими спецификациями. В списке Files выберите имя файла, ко- торый вы хотите редактировать. * Для вывода списка протокола (спецификаций имен файлов, которые вы задавали ранее), нажмите стрелку вниз. Выбе- рите требуемое имя файла или спецификацию. Выбор специ- фикации файла выводит файлы, соответствующие данной спецификации. * Дважды щелкнув "мышью" на имени другого каталога в списке файлов, просмотрите содержимое этого каталога. Выберите имя файла, который вы хотите редактировать. 2. После того как имя файла, который вы хотите редактиро- вать, будет выделено в блоке ввода, выберите команду Open (Открыть) или Replace (Заменить). Команда Open загружает файл в новое окно редактирования; команда Replace заменя- ет содержимое активного окна редактирования выбранным файлом. После выделения имени файла вы можете просто нажать клавишу Enter или, когда увидите имя нужного файла в списке, дважды щелк- нуть на нем кнопкой "мыши". Файл будет открыт. Если вы откроете один или более файлов, а затем закроете их, то увидите их список в нижней части меню File (до пяти файлов). Если вы выберите в меню один из этих пяти файлов, то файл откры- вается в окне редактирования. Когда вы работаете с несколькими открытыми файлами, то можете закрыть некоторые из них, при необ- ходимости быстро открывая их снова с помощью списка. Это уменьшит перегруженность вашей оперативной области. Вы можете также изменить используемый по умолчанию каталог на тот, в котором находится открываемый вами файл. Это изменяет поведение, заданное переменными операционной среды Windows: 1. Выберите команду Options|Enviroment|Preferences. 2. Установите параметр Change Dir (Смена каталога). 3. Выберите командную кнопку OK.

Открытие файла в позиции курсора

IDE дает вам быстрый способ открытия файла, имя которого на- ходится в вашем исходном коде. Вы найдете это удобным, когда пот- ребуется просмотреть код модуля или включаемого файла, используе- мого в вашей программе. 1. Поместите курсор на имя файла, который вы хотите открыть. 2. Нажмите клавиши Ctrl+Enter или выведите локальное меню окна редактирования и выберите команду Open File at Cursor (Открытие файла в позиции курсора).

Компиляция и выполнение

IDE предоставляет вам несколько способов создания выполняе- мой программы, модуля или (если вы используете защищенный режим) динамически компонуемую библиотеку. Вы можете: * Скомпилировать текущий файл с помощью команды (Compile| Compile). * Скомпилировать все измененные файлы (Compile|Make). * Скомпилировать все файлы проекта (Compile|Build). * Скомпилировать и выполнить программу (Run|Run). Каждая из этих возможностей подходит для конкретной ситуа- ции. Следующие разделы помогут вам решить, какую возможность луч- ше использовать.

Выбор целевой платформы

Если вы используете BP.EXE, то перед компиляцией своей прог- раммы вам нужно сообщить IDE, какой вид прикладной программы вы создаете: программу DOS реального режима, программу Windows или программу DOS защищенного режима. Тип создаваемой прикладной программы называется целевой платформой. Примечание: TURBO.EXE может создавать приложение ре- ального режима. Для выбора целевой платформы сделайте следующее: 1. Выберите команду Compile|Target. 2. В диалоговом окне Target выберите нужную целевую платфор- му. 3. Выберите командную кнопку OK. При компиляции модуля расширения имени файла полученного в результате модуля в зависимости от целевой платформы будут разли- чаться: +---------------------------+-------------------------------+ | Целевая платформа | Расширение имени файла модуля | | | объектного кода | +---------------------------+-------------------------------| | Реальный режим DOS | .TPU | | | | | Windows | .TPW | | | | | Защищенный режим DOS | .TPP | +---------------------------+-------------------------------+

Компиляция

Команда Compile|Compile компилирует только файл в активном окне редактирования. При компиляции программы выводится окно сос- тояния, в котором сообщается о ходе и результатах компиляции. Когда компиляция и компоновка будет выполнена, нажмите любую кла- вишу. Окно состояния исчезнет. Если имеется ошибка, в верхней части окна редактирования вы увидите сообщение об ошибке, а кур- сор будет позиционирован на ту строку кода, где имеется ошибка. Выбор места назначения Если вы используете IDE защищенного режима, то с помощью ко- манды Compile|Destination можете выбрать компиляцию программы на диск или в память. Если вы выберете компиляцию на диск, ваш вы- полняемый код сохраняется на диске в виде файла .EXE. Компиляция на диск увеличивает объем памяти, доступной в IDE для компиляции и отладки вашей программ. При выборе компиляции в память ваша программа будет записываться в память, и, если вы ее не сохрани- те, будет потеряна при выходе из IDE. При компиляции на диск полученные в результате файлы .EXE или .TPU сохраняются в том же каталоге, что и исходные файлы, или в каталоге EXE and TPU (Options|Directories), если он задан.

Формирование (Make)

Если ваша программа включает в себя не только исходный код в активном окне, например, основной файл, один или более модулей, внешние модули на языке ассемблера и т.д., то вы можете сформиро- вать свою программу. При формировании компилируется весь исходный код, который был модифицирован с момента последней компиляции. Команда Compile|Make создает файл .EXE или модуль. Если вы в качестве целевой платформы используете IDE защищенного режима и Windows, она может также создавать динамически компонуемую библи- отеку (DLL). Примечание: О создании DLL рассказывается в Главе 11 "Библиотеки динамической компоновки" "Руководства по язы- ку". Команда Make (Формирование) использует следующие правила: * Если задан основной файл, то он компилируется. В противном случае компилируется файл в активном окне редактирования. Перед компиляцией IDE проверяет все файлы, чтобы убедить- ся, что они существуют и являются текущими. Примечание: Более подробно об основных файла расска- зывается ниже. * Если исходный файл для данного модуля модифицирован с мо- мента создания файла .TPU, .TPW или .TPP (объектный код), то этот модуль перекомпилируется. * Если изменяется интерфейс для данного модуля, перекомпили- руются все другие зависящие от него модули. Примечание: О модулях подробнее рассказывается в Гла- ве 7 "Модули Borland Pascal". * Если модуль компонуется с файлом .OBJ (внешние подпрограм- мы) и файл .OBJ является более новым, чем модули .TPU, .TPW или .TPP, то модуль перекомпилируется. * Если модуль содержит включаемый файл, и включаемый файл более новый, чем модули .TPU, .TPW или .TPP, то модуль пе- рекомпилируется. Если компилятор не может найти исходный код модуля, то мо- дуль не компилируется и используется как есть.

Построение (Build)

Команда Compile|Build (Компиляция|Построение) перестраивает все компоненты вашей программы независимо от того, являются они текущими или нет. Эта команда аналогична команде Compile|Make, только она вы- полняет полную перекомпиляцию, даже если файл не изменялся. Если вы остановите команду Build, нажав клавиши Ctrl+Break, или полу- чите ошибки, которые прекращают построение, то, выбрав Compile| Make, вы можете определить, где это произошло. Если в IDE реального режима DOS вы выбрали компиляцию в па- мять, то все файлы .TPU обновляются на диске (для всех перекомпи- лируемых командой Build модулей).

Выполнение

После создания выполняемого файла вы можете попробовать, как она работает. Для этого можно использовать команду Run|Run. На самом деле вам не нужно предварительно компилировать свою прог- рамму. Если ваш код изменился с момента последней компиляции, ко- манда Run автоматически формирует вашу программу и затем выполня- ет ее. Если ваша программа представляет собой прикладную программу DOS защищенного режима, то в текущем каталоге или по маршруту DOS у вас должны находиться файлы DPMI16BL.OVL и RTM.EXE, в противном случае программа выполняться не будет. Вы можете свободно расп- ространять эти файлы с готовой прикладной программой.

Передача программе параметров

При запуске программы вы можете передать ей параметры ко- мандной строки. Для вывода диалогового окна Parameters (Парамет- ры) и набора списка параметров, которые вы хотите использовать, выберите команду Run|Paramenters.

Параметры компилятора и компоновщика

IDE позволяет вам выбрать несколько параметров, влияющих на характер компиляции кода. Для вывода диалогового окна параметров компилятора Compiler Options выберите команду Options|Compiler. Если вы не уверены относительно того, что делает конкретный пара- метр, выберите его в диалоговом окне, в строке состояния появится поясняющая справка. Для вывода более подробной информации о дан- ном параметре нажмите клавишу F1 или выберите команду Help для получения справочной информации обо всем диалоговом окне Compiler Options. +=[ ]======================Compiler Options=====================+ | Compiler settings for: ##Real mode target##########v#| |---------------------------------------------------------------| | Code generation | | #[#]#Force#far#calls#########[#]#286#instructions######### | | #[#]#Overlays#allowed########[#]#Smart#callbacks########## | | #[X]#Word#align#data#########[#]#Windows#stack#frames##### | | Runtime errors Syntax Options | | #[#]#Range#checking##### #[X]#Strict#var-strings####### | | #[X]#Stack#checking##### #[#]#Complete#boolean#eval#### | | #[X]#I/O#checking####### #[X]#Extended#syntax########## | | #[ ]#Overflow#checking## #[#]#Typed#@#operator######### | | Debugging #[#]#Open#parameters########## | | #[X]#Debug#Information## Numeric processing | | #[X]#Local#symbols###### #[#]#8087/80287############### | | #[X]#Symbol#information# #[X]#Emulation################ | | | | Conditional defines | | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvX | | | | XXXXXOKXXXX XXXCancelXXX XXXHelpXXXX | | ########### ############ ########### | | | +===============================================================+ Рис. 4.3 Диалоговое окно Compiler Options. Compiler settings for - установки компилятора для; Real mode target - целевая платформа реального режима; Code generation - генерация кода; Force far calls - принудительное использование вызовов дальнего типа; 286 instructions - инструкции процессора 286; Overlays allowed - допустимость оверлеев; Smart callbacks - эффективные вызовы; Word align data - выравнивание данных на гра- ницу слова; Windows stack frames кадры стека Windows; Runtime errors - ошибки этапа выполнения; Syntax Options - синтаксические ошибки; Range checking - проверка диапазона; Strict var-strings - строгая проверка строковых переменных; Stack checking - проверка стека; Complete boolean eval - полное вычисление булевских выра- жений; I/O checking - проверка ввода-вывода; Extended syntax - расширенный синтаксис; Overflow checking - проверка переполнения стека; Typed @ operator - типизованная операция @; Debugging - отладка; Open parameters - открытые параметры; Debug Information - отладочная информация; Numeric processing - числовая обработка; Local symbols - локальные идентификаторы; 8087/80287 - процессоры 8087/80287; Symbol information - локальная информация; Emulation - эмуляция; Conditional defines - условные определения. Задание параметров компилятора для целевой платформы Выбираемые вами параметры компилятора в сильной степени за- висят от того, какую целевую платформу вы используете. Например, если вы создаете приложение DOS реального режима, то можете раз- решить использование оверлеев, что не требуется для программ Windows или защищенного режима DOS. Для указанной целевой платформы вы можете установить стан- дартные параметры компилятора: Примечание: Меню Compiler Options компилятора TURBO.EXE не имеет параметра Compiler Setting For. 1. Для вывода прокручиваемого списка щелкните "мышью" на стрелке v или нажмите клавишу стрелки вниз при выборе блока списка Compiler Setting For. 2. Проверьте выбранную целевую платформу. IDE автоматически устанавливает обычно используемые парамет- ры. В любой момент вы можете переопределить эти выбранные в IDE параметры. Если параметр компилятора несовместим с выбранной целевой платформой, то он становится тусклым, и вы не можете его выби- рать. Установка параметров компилятора для всех целевых платформ Если вы хотите чтобы конкретный параметр компилятора был ус- тановлен независимо от используемой целевой платформы, сделайте следующее: 1. В качестве значения параметра Compiler Settings For выбе- рите All Targets. 2. Установите или отмените параметр компилятора, который вы хотите установить. Например, если вы хотите использовать инструкции процессора 286 для всех платформ, выберите All Targets (Все платформы), за- тем установите параметр 286 instructions. Когда вы выбираете All Targets, то можете увидеть, что в не- которых кнопках с независимой фиксацией выводится вопросительный знак (?). Это указывает, то установка параметра для всех платформ не является одинаковой. Вы можете изменить этот параметр, сделав его одинаковым для всех платформ, или оставить как есть. Задание параметров компоновщика Характер компоновки вашего кода зависит от установок в диа- логовом окне Linker Options (Параметры компоновщика). Для его вы- вода выберите команду Options|Linker. Если нужна более детальная информация, выберите Help. Включение в код директив компилятора Существует еще один способ задания режима компиляции исход- ного кода. Вместо использования для установки параметров диалого- вых окон вы можете включить в свой код директивы компилятора. Например, вы можете включить в свою программу проверку диапазона, установив в диалоговом окне Options|Compiler параметр Range Checking, или поместить в исходный код директиву {$R+}. Полное описание директив компилятора и их использования вы можете найти в Главе 2 ("Директивы компилятора") "Справочного руководства программиста". Включаемые в исходный код директивы компилятора имеют боль- ший приоритет, чем параметры компилятора, устанавливаемые в IDE. Например, если в IDE вы установите параметр Range Checking, но ваша программа включает в себя директиву {R-}, то программа ком- пилируется с выключенной проверкой диапазона.

Оптимизация кода

Некоторые параметры компилятора, поскольку они включают в программу код проверки и обработки ошибок, влияют как на размер, так и на скорость вашего кода. Хотя такие параметры полезно ис- пользовать при разработке программы, без них вы можете получить более быстрый и компактный код. Приведем параметры, влияющие на оптимизацию кода. Каждая ди- ректива компилятора сопровождается указанием соответствующего па- раметра компилятора. Рассмотрим использование для завершающей компиляции следующих параметров: * Выравнивание данных на границу слова Word Align Data ({$A+}) выравнивает переменные и типизированные константы на границу слова, что дает в системах с процессорами 80x86 более быстрый доступ к памяти. * Выключение полного вычисления булевских выражений Complete Boolean Evaluation ({$B-}) дает код, который в зависимости от установки ваших булевских выражений более быстро рабо- тает. * При выключенной эмуляции Emulation ({$E-}) компилятор не будет выполнять компоновку с библиотекой исполняющей сис- темы, эмулирующей сопроцессор 80x87. Она должна использо- вать сопроцессор 80х87 (в случае его наличия) или стан- дартный 6-байтовый тип Real. При компиляции приложений Windows эмуляция не используется; при наличии директивы эмуляции компилятор ее игнорирует. * Когда задана генерация кода процессора 80286 Code Generation ({$G+}), компилятор для улучшения генерации ко- да использует дополнительные инструкции процессора 80286. Скомпилированные таким образом программы не будут работать на процессорах 8088 и 8086. * При выключенной проверке ввода-вывода I/O Checking ({$I-}) компилятор не проверяет ошибки ввода-вывода. Вызвав пре- допределенную функцию IOResult, вы можете самостоятельно проверить ошибки ввода-вывода. * Когда выключена числовая обработка Numeric Processing ({$N-}), компилятор генерирует код, способный выполнять все операции с плавающей точкой с помощью встроенного 6-байтового типа Real. Если параметр Numeric Processing включен, ({$N+}), компилятор использует сопроцессор 80х87 или эмулирует сопроцессор с помощью программного обеспе- чения, в зависимости от наличия сопроцессора 80х87. Полу- ченный в результате код может использовать четыре дополни- тельных вещественных типа (Single, Double, Extended и Comp). * Когда выключена проверка диапазона Stack Checking ({$R-}), компилятор не выполняет проверку на ошибки индексирования массива и присваивание значения вне диапазона. * При выключенной проверке стека Stack Checking ({$S-}) ком- пилятор не обеспечивает достаточного пространства в стеке для каждого вызова процедуры или функции. * Когда включена нестрогая проверка строк-переменных Relaxed String Var Checking ($V-}), компилятор не проверяет пара- метры-переменные строкового типа. Это позволяет вам пере- давать строки фактических параметров, имеющие длину, от- личную от длины, определенной для формального парамет- ра-переменной. * При разрешении расширенного синтаксиса Extended Syntax ({$X+}) вы можете использовать вызовы функций как операто- ры, поскольку результат функциональных вызовов может отб- расываться. Оптимизация вашего кода с помощью этих параметров имеет два преимущества. Во-первых, это делает ваш код более компактным и быстрым. Во-вторых, позволяет делать вам некоторые вещи, которые вы обычно делать не можете. Однако, все эти параметры вносят не- который риск, поэтому используйте их аккуратно, и если ваша прог- рамма начинает вести себя странно, вернитесь к исходной ситуации.

Условная компиляция

Чтобы облегчить ваши задачи, Borland Pascal предлагает средство условной компиляции. Это означает, что можете компили- ровать части своей программы на основе параметров или определен- ных идентификаторов. Условные директивы аналогичны по формату директивам компиля- тора, с которыми вы уже познакомились. Они имеют следующий фор- мат: {$директива аргумент} где "директива" - это такая директива как DEFINE, IFDEF и т.д., а аргумент - необязательный аргумент. Между ними обязательно должен присутствовать разделитель (пробел или табуляция). Все условные директивы и их смысл приведены в Таблице 4.3. Примечание: Полное описание директив условной компиля- ции можно найти в Главе 2 ("Директивы компилятора") "Спра- вочного руководства программиста". Директива условной компиляции Таблица 4.3 +------------------------------+--------------------------------+ | Директива | Описание | +------------------------------+--------------------------------| | {$DEFINE идентификатор} | Определяет "идентификатор" для | | | других директив. | +------------------------------+--------------------------------| | {$UNDEF идентификатор} | Отменяет определение "иденти- | | | фикатора". | +------------------------------+--------------------------------| | {$IFDEF идентификатор} | Компилирует следующий код, ес- | | | ли определен "идентификатор". | +------------------------------+--------------------------------| | {$IFNDEF идентификатор} | Компилирует следующий код, ес- | | | ли "идентификатор" не опреде- | | | лен. | +------------------------------+--------------------------------| | {$IFOPT x+} | Компилирует следующий код, ес- | | | ли разрешена директива x. | +------------------------------+--------------------------------| | {$IFOPT x-} | Компилирует следующий код, ес- | | | ли запрещена директива x. | +------------------------------+--------------------------------| | {ELSE} | Компилирует следующий код, ес- | | | ли предыдущее выражение IFxxx | | | не равно True. | +------------------------------+--------------------------------| | {$ENDIF} | Отмечает конец блока IFxxx или | | | ELSE. | +------------------------------+--------------------------------+

Директивы DEFINE и UNDEF

Директивы IFDEF и IFNDEF проверяют, определен ли заданный идентификатор. Эти идентификаторы определяются с помощью DEFINE и UNDEF. (Можно также определять идентификаторы в командной строке или в IDE.) Чтобы определить идентификатор, включите в программу следую- щую директиву: {$DEFINE идентификатор} где "идентификатор" в плане длины, разрешенных символов и других спецификаций подчиняется обычным правилам для имен идентификато- ров. Например, вы можете записать: {$DEFINE debug} Этим для остальной части компилируемого модуля или до следу- ющего оператора: {$UNDEF debug} определяется идентификатор debug. Директива UNDEF "разопределяет" идентификатор. Если иденти- фикатор не определен, то она не действует. Определение условных идентификаторов в IDE Вместо того, чтобы вставлять директиву DEFINE в свой исход- ный код, вы можете также определить условные идентификаторы и блоке ввода Conditional Defines (Условные определения). Определи- те идентификаторы, введя их в блоке ввода и разделив точками за- пятой. Например, в следующем примере определяются два условных идентификатора - TestCode и DebugCode: TestCode:DebugCode

Предопределенные идентификаторы

Кроме определяемых вами идентификаторов вы можете также про- верять отдельные идентификаторы, определяемые компилятором: Предопределенные условные идентификаторы Таблица 4.4 +-------------------+-------------------------------------------+ | Идентификатор | Показывает | +-------------------+-------------------------------------------| | CPU86 | Данная версия Borland Pascal предназначена| | | для семейства процессоров 80х86. | +-------------------+-------------------------------------------| | CPU87 | Присутствует арифметический сопроцессор| | | 80х87. | +-------------------+-------------------------------------------| | DPMI | Данная версия предназначена для операцион-| | | ной среды защищенного режима DOS. При соз-| | | дании приложений для защищенного режима| | | DOS данный идентификатор доступен для| | | BP.EXE. | +-------------------+-------------------------------------------| | MSDOS | Данная версия предназначена для операци-| | | онной системы MS-DOS. Данный идентификатор| | | доступен в BP.EXE только при создании при-| | | ложений DOS реального или защищенного ре-| | | жима и в TURBO.EXE. | +-------------------+-------------------------------------------| | VER70 | Данная версия является версией 7.0 компи-| | | лятора. | +-------------------+-------------------------------------------| | WINDOWS | Данная версия предназначена для операци-| | | онной среды Windows. Данный идентификатор| | | доступен в BP.EXE и в BPW.EXE, когда целе-| | | вой платформой является Windows. | +-------------------+-------------------------------------------+ Подробнее о предопределенных условных идентификаторах компи- лятора рассказывается в Главе 2 ("Директивы компилятора") "Руко- водства программиста".

Идентификаторы IFxxx, ELSE и ENDIF

Смысл условных директив в том, что если определен или нет конкретный идентификатор либо если установлен или нет конкретный параметр, вы можете выбирать для компиляции некоторые части ис- ходного кода. Они имеют следующий общий формат, где IFxxx - это директивы IFDEF, INDEF или IFOPT, за которыми следует соответс- твующий аргумент, а "исходный код" - любое количество исходного кода Паскаля. {$IFxxx} исходный код {$ENDIF} Если выражение в директиве IFxxx принимает значение True, то "исходный код" компилируется; в противном случае он игнорируется и интерпретируется как обычный комментарий в программе. Часто у вас имеются альтернативные фрагменты кода. Если вы- ражение принимает значение True, то компилируется один фрагмент кода, а если False - другой. Компилятор позволяет сделать это с помощью директивы $ELSE: {$IFxxx} исходный код A {$ELSE} исходный код B {$ENDIF} Если выражение в IFxxx равно True, то компилируется "исход- ный код A", в противном случае компилируется "исходный код B". Все директивы IFxxx должны завершаться с одном исходном фай- ле. Это означает, что они не могут начинаться в одном исходном файле и заканчиваться в другом. Однако, в директиве IFxxx может указываться включаемый файл: {$IFxxx} {$I file1.pas} {$ELSE} {$I file2.pas} {$ENDIF} Таким образом, на основе некоторого условия вы можете выби- рать альтернативные включаемые файлы Допускается использовать вложенные конструкции IFxxx..ENDIF, так что вы можете записать, например, следующее: {$IFxxx} { первая директива IF } . . . {$IFxxx} { первая директива IF } . . . {$ENDIF} { завершает вторую директиву IF } . . . {$ENDIF} { завершает первую директиву IF }

Директивы IFDEF и IFNDEF

Директивы IFDEF и IFNDEF позволяют вам условно компилировать код на основе определения или неопределения некоторых идентифика- торов. Директивы IFDEF и IFNDEF обычно используются для включения в компилируемый код отладочной информации. Например, если вы помес- тите в начало каждого модуля следующий код: {$IFDEF debug} {$D+,L+} {$ELSE} {$D-,L-} {$ENDIF} а в начало программы следующую директиву: {$DEFINE debug} и компилируете свою программу, для использования с Турбо отлад- чиком генерируется полная отладочная информация. Аналогично, вы можете иметь фрагменты кода, компилируемые только при отладке. В этом случае можно записать: {$IFDEF debug} исходный код {$ENDIF} где "исходный код" компилируется только в том случае, если в дан- ной точке определен идентификатор debug.

Директива IFOPT

Иногда включить или исключить код желательно в зависимости от того, какой выбран параметр компилятора (проверка диапазона, проверка ввода-вывода и т.д.). Вы можете сделать это с помощью директивы IFOPT, которая имеет две формы: {$IFOPT x+} и {$IFOPT x-} где x - один из параметров компилятора. При использовании первой формы содержащийся ниже код будет компилироваться, если параметр компилятора в данный момент разрешен; при использовании второй формы код компилируется при запрещении параметра. Например, чтобы выбрать тип данных для списка переменных на основе того, разреше- на или нет поддержка сопроцессора 80х87, можно использовать сле- дующий исходный код: var {$IFOPT N+} Radius,Circ,Area: Double; {$ELSE} Radius,Circ,Area: Real; {$ENDIF} Примечание: Полное описание всех параметров компилято- ра вы можете найти в Главе 2 ("Директивы компилятора") "Справочного руководства программиста".

Просмотр исходного кода

IDE защищенного режима DOS содержит новое программное инс- трументальное средство просмотра объектов - ObjectBrowser. Оно позволяет вам исследовать программы и модули в программах и мно- гое другое. Даже если разрабатываемое вами приложение не исполь- зует объектно-ориентированное программирование, вы найдете ObjectBrowser чрезвычайно полезным средством. Вы можете просмат- ривать иерархию объектов, модулей и всех процедур, функций, пере- менных, типов, констант и другие используемые в программе иденти- фикаторы. С помощью ObjectBrowser вы можете делать следующее: * Просмотреть в своей прикладной программе иерархию объек- тов. Затем выбрать объект и просмотреть все его процедуры, функции и другие содержащиеся в программе идентификаторы. При проверке идентификатора вы можете вывести перечень всех ссылок на него в процедурах, функциях программы и, если хотите, перейти на то место в исходном коде, где он используется. * Вывести список всех глобальных идентификаторов, используе- мые в вашей программе, и увидеть их описания. Если вы вы- берите одну переменную, то можете вывести список всех ссы- лок не нее в своей программе и, если хотите, перейти на то место в исходном коде, где она используется. * Вывести список всех используемых в программе модулей, за- тем выбрать один из них и просмотреть список всех иденти- фикаторов его интерфейсной части. * Выбрать идентификатор в исходном коде, затем просмотреть детальную информацию по нему, нажав клавишу Ctrl и однов- ременно щелкнув правой кнопкой "мыши". * Открыть множество окон просмотра, сравнить идентификаторы, выводимые в различных окнах, а затем вернуться в предыду- щее открытое в средстве просмотра окно. Перед использованием ObjectBrowser убедитесь, что в диалого- вом окне Options|Compiler установлены следующие параметры: * Debug Information (Информация для отладки). * Locals Symbols (Локальные идентификаторы). * Symbol Information (Информация об идентификаторах). Убедитесь также, что в диалоговом окне Debugging/Browsing (Options|Debugger) установлен параметр Integrated Debugging/ Browsing (Отладка с использование встроенного отладчика/Прос- мотр). Скомпилируйте программу, которую вы хотите просматривать. Для активизации ObjectBrowser выберите в меню Search (Поиск) команду Objects (Объекты), Units (Модули) или Globals (Глобальные идентификаторы). Вы можете также поместить курсор на идентифика- тор в исходном коде и выбрать для вывода ObjectBrowser команду Search|Symbol (Поиск|Идентификатор). Вы можете также сделать так, чтобы компилятор "запоминал" информацию об идентификаторах между компиляциями. Если этот пара- метр включен, и вы измените программу, но следующая компиляция завершиться неудачно, то вам все равно будет доступна информация об идентификаторах, сохраненная с последней компиляции. Благодаря этому вы сможете просмотреть свою программу, что поможет вам оп- ределить источник проблемы. Чтобы компилятор сохранял информацию об идентификаторах между компиляциями, нужно сделать следующее: 1. Выбрать команду Options|Enviroment|Startup. 2. Установить параметр Preserve Symbols (Сохранение иденти- фикаторов); по умолчанию он установлен. 3. Выбрать командную кнопку OK. 4. Для выхода из IDE выбрать команду File|Exit. 5. Снова запустить IDE. Примечание: Поскольку Preserve Symbols - это параметр запуска, изменение его установки не будет иметь действие, пока вы не выйдите из IDE и не запустите ее снова. Если у вас есть "мышь", то исходный код удобнее просматри- вать, если задать активизацию ObjectBrowser правой кнопкой "мы- ши". Затем, удерживая нажатой клавишу Ctrl, вы можете использо- вать правую кнопку "мыши" для указания и проверки объекта, проце- дуры, функции, переменной или другого идентификатора в вашем ис- ходном коде и его анализа (вывода детальной информации). Примечание: Для быстрого просмотра идентификатора, на котором в исходном коде позиционирован курсор, вы можете также выбрать в локальном меню окна редактирования команду Browse Symbol at Cursor (Просмотр идентификатора в позиции курсора). Чтобы задать просмотр с помощью "мыши", выполните следующие шаги: 1. Выберите команду Options|Enviroment|Mouse. 2. Выберите параметр Browse as the Ctrl + Right Mouse Button (Просмотр по клавише Ctrl + правая кнопка "мыши"). 3. Выберите командную кнопку OK.

Просмотр объектов

Команда Search|Objects открывает окно, в котором выводятся все используемые в программе объекты, упорядоченные в иерархичес- кой структуре. В верхней части окна ObjectBrowser показывает ба- зовый тип и выводит ниже и справа от базового типа потомков. Про- яснить соотношения "предок-потомок" помогают соединяющие линии. Примечание: Подробную информацию о типах объектов вы можете найти в Главе 9 ("Объектно-ориентированной програм- мирование"). #File#Edit#Search##Run##Compile#Debug#Tools#Options#Window#Help## +=[*]====================== Browse: Object ================2=[*]+ | Global Scope | |-| I +---------------------------------------------------------| |-Objects#######################################################^ | +----Location X | | +---Block # | | | +---Ball # | | | +---Brick # | | +---Cursor # | | | +---SaveScreen # | | +---Obstacle # | | | +---Boundary # | | | | +---LeftBound # | | | | +---LowerBound # | | | | +---RightBound # | | | | +---UpperBound # | | | +---Paddle # | | | +---Wall # | | +---TextString # | | +---Counter # | | +---DownCounter # | | +---LimitCounter v +<############################################################>-+ *F1*Help*<+*Browse**Ctrl*<+*Go*to*source*Space*Track*src*F10*Menu Рис. 4.4 Просмотр иерархии объектов прикладной программы. Если иерархия объектов у вас слишком большая, вы можете за- дать, чтобы потомки конкретного объекта на экран не выводились. * С помощью клавиатуры сделайте следующее: 1. Выберите объект. 2. Нажмите клавишу - (минус). * При наличии "мыши" просто щелкните "мышью" на горизонталь- ной линии, соединяющей объект с иерархией. Теперь после объекта выводится + (плюс), и он подсвечивает- ся, показывая, что потомки данного объекта на экран не выводятся. Вы можете вывести потомков объекта снова. * С помощью клавиатуры: 1. Выделите объект с символом +. 2. Нажмите клавишу +. * При наличии "мыши" щелкните ей на горизонтальной строке, соединяющей объект с иерархией. Потомки объекта появляются вновь. Из иерархии объектов вы можете просматривать все описанные в индивидуальном объекте идентификаторы. Выделите объект и нажмите клавишу Enter, либо дважды щелкните на объекте кнопкой "мыши". При просмотре описанных в объекте идентификаторов вы можете задать различные виды вывода: * Для вывода информации о наследовании для просматриваемого объекта щелкните "мышью" на букве I в верхней части окна ObjectBrowser или нажмите клавиши Ctrl+I. * Для вывода на экран перечня строк программы или модуля, где имеется ссылка на идентификатор объекта щелкните "мышью" на букве R в верхней части окна ObjectBrowser или нажмите клавиши Ctrl+R. * Для вывода области действия объекта щелкните "мышью" на букве S или нажмите клавиши Ctrl+S. Чтобы найти идентификатор в списке выводимых идентификато- ров, наберите первую букву имени идентификатора; ваш курсор быст- ро перемещается на соответствующий идентификатор. Чтобы ObjectBrowser мог находить, где расположены ваши ис- ходные файлые, вам может потребоваться изменить маршрут каталога модулей и включаемых файлов в диалоговом окне Options| Directories. Если после открытия окна просмотра вы модифицируете исходный код, добавляя или удаляя строки программы, то программу лучше пе- рекомпилировать. Хотя ObjectBrowser после модификации исходного кода все равно сможет отслеживать информацию об идентификаторах, номера строк исходного кода, выводимые в окне редактирования, не будут обновляться, пока программа не будет перекомпилирована. Изменения режима вывода информации ObjectBrowser Вы можете управлять характером вывода в ObjectBrowser инфор- мации. Можно выбрать, какие идентификаторы должны выводить ObjectBrowser: 1. Для вывода диалогового окна Browser Options выберите ко- манду Options|Browser. 2. В группе Symbols отметьте только те идентификаторы, кото- рые вы хотите выводить в ObjectBrowser. Вы можете также выбрать вывод идентификаторов, наследуемых от предков объекта. 3. Выберите командную кнопку OK. В ObjectBrowser выводятся только те идентификаторы, кото- рые вы выбрали. Вы можете также выбрать, какие идентификаторы выводить толь- ко в активном окне просмотра. Для вывода диалогового окна Local Browser Options (Локальные параметры просмотра) выберите в ло- кальном меню окна просмотра команду Options или при отображении окна просмотра нажмите клавиши Ctrl+O. Если вы в качестве типа отображаемых идентификаторов выбере- те типы, переменные и процедуры, а затем будете просматривать объект Location в программе BREAKOUT.PAS (пример демонстрационной программы в каталоге EXAMPLES\DOS\BREAKOUT), то увидите следующую информацию об идентификаторах: #File#Edit#Search##Run##Compile#Debug#Tools#Options#Window#Help## +=[*]====================== Browse: Object ================2=[*]+ | Global Scope | |-| S | I | R +-------------------------------------------------| |#var####Location.X:##Integer###################################^ | var Location.Y: Integer X | var Location.Visible: Boolean # | var Location.Init(Integer, Integer) # | proc Location.Relocate(Integer, Integer) # | proc Location.MoveTo(Integer, Integer) # | proc Location.Show # | proc Location.Hide # | func Location.GetX: Integer # | func Location.GetY: Integer # | func Location.InVisible: Boolean # | # | # | v +<X###########################################################>-+ *F1*Help*<+*Browse**Ctrl*<+*Go*to*source*Space*Track*src*F10*Menu Рис. 4.5 Просмотр информации об идентификаторах. Сокращения слева от перечисленных идентификаторов перечисля- ют идентификаторы, представляющие вид выводимого идентификатора. Заметим, что включение идентификаторов процедур также включает идентификаторы функций. +---------------+------------------------------------+ | Идентификатор | Смысл | +---------------+------------------------------------| | const | Константа | | func | Функция | | label | Метка | | proc | Процедура | | type | Тип | | var | Переменная или типизированная кон- | | | станта. | +---------------+------------------------------------+ Для вывода предыдущего окна просмотра выберите команду Search|Previous Browser или нажмите клавиши Ctrl+P. Когда вы просматриваете выделенный идентификатор, окно ObjectBrowser по умолчанию выводит информацию об области дейс- твия. Если вы предпочитаете по умолчанию видеть информацию о ссылках, то сделайте следующее: 1. Выберите команду Options|Browser. 2. Выберите в качестве значения параметра Preferred Pane Reference. 3. Выберите командную кнопку OK. По умолчанию ObjectBrowser выводит для проверяемого иденти- фикатора полную информацию об описании. Вы можете просмотреть все поля и методы записей и объектов, включая полностью уточненные идентификаторы. Если вы не хотите видеть полностью уточненные идентификаторы, то сделайте следующее: 1. Выберите команду Options|Browser. 2. Отмените параметр вывода Qualified Symbols. 3. Выберите командную кнопку OK. Примечание: Вы не увидите видеть полностью уточненные идентификаторы, пока не установите наследование в диалого- вом окне Browser Options (Options|Browser). По умолчанию ObjectBrowser выводит идентификаторы в области Scope в том порядке, в каком они описаны. Если вы предпочитаете сортировать идентификаторы в алфавитном порядке, то сделайте сле- дующее: 1. Выберите команду Options|Browser. 2. Установите параметр вывода Sort Always. 3. Выберите командную кнопку OK. Идентификаторы будут сортироваться только по именам, а не по полностью уточненным именам. Например, считается, что следующий список идентификаторов отсортирован в алфавит- ном порядке: THELPFILE.DONE TOBJECT.FREE THELPFILE.INDEX: PHELP Когда вы открываете окно просмотра, затем просматриваете пе- речисленный в нем идентификатор, то открывается новое окно прос- мотра, но предыдущее окно остается. Вы можете изменить это пове- дение таким образом, что новое окно просмотра будет заменять пре- дыдущее: 1. Выберите команду Options|Browser. 2. Установите параметр Replace Current sub-browsing. 3. Выберите командную кнопку OK. Чтобы текущее окно просмотра сохранялось, когда вы выбираете перечисленный в его списке идентификатор, сделайте следующее: 1. Выберите команду Options|Browser. 2. Установите параметр New Browser sub-browsing. 3. Выберите командную кнопку OK. Возможно, в большинстве случаев вы предпочитаете использо- вать параметр Replace Current или New Browser, но иногда исполь- зуете альтернативный параметры. Быстро выбрать альтернативный па- раметр можно следующим образом: 1. Нажмите и удерживайте в нажатом состоянии клавишу Shift. 2. Выберите следующее действие просмотра. Например, если действует параметр New Browser, то при на- жатии клавиши Shift следующее открываемое окно просмотра будет замещать текущее. Отслеживание и редактирование ссылок на строки Когда ObjectBrowser выводит ссылочную информацию, вы можете выбирать и редактировать выводимые в ссылке строки программы или отслеживать ссылки на идентификатор. Отслеживание означает, что IDE, при перемещении по ссылкам в окне просмотра, подсвечивает в программе одну строку за другой. Чтобы отредактировать выводимую в ссылке строку программы, сделайте следующее: 1. Выделите ссылку в окне просмотра. 2. Нажмите клавиши Ctrl+Enter или Ctrl+G. Ваш курсор перемещается на строку программы в исходном коде, ссылка на которую содержится в окне просмотра. Те- перь вы можете редактировать строку программы. По умолчанию, когда ваш курсор перемещается на строку ис- ходного кода программы, окно ObjectBrowser закрывается. Если вы предпочитаете, чтобы окно просмотра оставалось открытым, то отмените параметр Close On Go To Source в диалоговом окне Preferences. Примечание: Параметр Close On Go To Source влияет также на окно сообщений Messages (см. ниже). Для отслеживания строк программы: 1. В окне просмотра выделите ссылку, которую вы хотите отс- леживать. 2. Нажмите клавишу пробела. Если вы всегда хотите отслеживать ссылки по исходному ко- ду, установите параметр Auto Track Source и группе Options диалогового окна Preferences. Тогда при прокрутке ссылок строки в исходном коде программы будут прокручи- ваться автоматически, и пробел вам нажимать не нужно. Примечание: Параметр Auto Track Source влияет также на окно сообщений Messages (см. ниже). Теперь строки программы, на которые имеются ссылки в окне просмотра, отслеживаются в зависимости от того, как вы установили параметры отслеживания в диалоговом окне Options|Enviroment| Preferences: если файл, на который имеется ссылка, не находится в окне редактирования, то IDE открывает файл, и он выводится либо в новом, либо в текущем окне редактирования. * Если вы хотите, чтобы файл выводился в новом окне редакти- рования, выберите в качестве значения параметра Source Tracking New Window. * Если вы хотите, чтобы файл замещал текущий в активном окне редактирования, выберите в качестве значения параметра Source Tracking Current Window. Примечание: Параметр Source Tracking влияет также на окно сообщений Messages (см. ниже). Если выбранный модуль хранится в библиотеке исполняющей сис- темы Borland Pascal или является одним из стандартных модулей, то вы не сможете просматривать или редактировать исходный код, пос- кольку эти модули скомпилированы без включения отладочной инфор- мации.

Просмотр модулей

Команда Search|Units открывает диалоговое окно, в котором выводятся используемые в вашей программе модули, перечисленные в алфавитном порядке. Для просмотра идентификаторов, описанных в интерфейсной части модуля, выделите конкретный модуль и нажмите клавишу Enter или дважды щелкните не нем кнопкой "мыши". Анало- гично тому, как это делается с объектами, вы можете видеть об- ласть действия ссылочной информации для идентификатора. Если мо- дуль, на который имеется ссылка, не является одним из поставля- емых с Borland Pascal стандартных модулей, и скомпилирован таким образом, что включает в себя всю необходимую для интегрированной отладки/просмотра информацию, то вы можете при соответствующей ссылке отслеживать и редактировать исходный код модуля. В следующем примере модуль Walls описывается в строке 4 фай- ла WALLS.PAS и вызывается на строке 37 BREAKOUT.PAS. +----------------- Browse: Units -------------2--+ | Global scope | +-| S +------------------------------------------| | unit Bounds | | unit Breakout | | unit Bricks | | unit Count | | unit Crt +=[*]===== Browse: Walls ==3===[^]=+ | unit Dos | unit Walls | | unit Screen |-| S | R +-------------------------| | unit System | WALLS.PAS(4) | |#unit##Walls#### |*BREAKOUT.PAS(37)******************| | | | | | | | +==2/2==============================+ | | | | +------------------------------------------------+ Рис. 4.6 Просмотр модулей в вашей прикладной программе.

Просмотр глобальных идентификаторов

Команда Search|Global открывает окно, в котором выводятся используемые в программе глобальные идентификаторы, перечисленные в алфавитном порядке. Как и в случае объектов, для просмотра строк в программе, ссылающихся на этот идентификатор, описаний идентификатора и иерархии наследования вы можете открывать допол- нительные окна ObjectBrowser. При выводе ссылочной информации вы можете отслеживать или редактировать строки программы. Например, на следующем рисунке показан список глобальных идентификаторов, используемых в программе BREAKOUTS.PAS: +=[*]====================== Browse: Object ================2=[^]+ | Global Scope | |-| S +---------------------------------------------------------| |#func###Abs(..)################################################^ | func Addr(...) X | const AnyFile = 63 # | proc Append(...) # | const Archive = 32 # | func ArcTan(...) # | proc Assing(...) # | proc AssingCrt(var Text) # | func Assigned(...) # | var b: Ball # | type Ball = object(Block) # | var Balls: DownCounter # | proc Beep # | const Block = 0 # | const Blink = 128 # | type Block = object(Location) # | proc BlockRead(...) # | const Blue = 1 v +<X###########################################################>-+ Рис. 4.7 Просмотр глобальных идентификаторов, используемых в программе.

Просмотр идентификаторов в исходном коде

Вы можете просматривать идентификаторы в своем исходном ко- де. Поместите курсор на идентификатор и выберите один из следую- щих методов: * Для вывода диалогового окна Browse Symbol выберите в меню Search команду Symbol. Используйте идентификатор, выведен- ный в диалоговом окне, или введите другой идентификатор и выберите командную кнопку OK. * Для вывода локального меню окна редактирования нажмите клавиши Alt+F10 или щелкните правой кнопки "мыши" и выбе- рите команду Browse Symbol at Cursor. * Если для просмотра идентификаторов вы задали правую кнопку "мыши" (выбором команды Options|Enviroment|Mouse и Browse at Cursor), то нажмите клавишу Ctrl и, удерживая ее, щел- кните правой кнопкой "мыши". Тип информации, которую вы видите, зависит от типа информа- ции, доступной для выбранного идентификатора: * Если для выделенного вами идентификатора информация об об- ласти действия недоступна, то ObjectBrowser выводит для него ссылочную информацию. Например, для простой константы доступна только ссылочная информация. * Если выделенный вами идентикатор не имеет доступной инфор- мации об области действия, ObjectBrowser выводит для этого идентификатора информацию об области действия. Он также дает вам возможность видеть ссылочную информацию. * Если выделенный вами идентификатор представляет собой структурный тип, то ObjectBrowser выводит для этого типа информацию об области действия. Он дает вам также возмож- ность видеть информацию о наследовании и ссылочную инфор- мацию. Если вы выберите информацию о наследовании, то уви- дите непосредственного предка этого типа и непосредствен- ных потомков, если они имеются. Если вы выбрали просмотр структурного типа, ObjectBrowser выводит на экран полностью уточненные имена, если удовлетворяются следующие два условия: * В диалоговом окне Browser Options (Options|Browser) или в диалоговом окне Local Browser Options (локальное меню Options окна просмотра) выбран параметр Inherited symbol. * В диалоговом окне Browser Options (Options|Browser) или в диалоговом окне Local Browser Options (локальное меню Options окна просмотра) выбран параметр Qualified Symbols. Например, на следующем рисунке показана полная информация об описании области действия для переменной b типа Ball: #File#Edit#Search##Run##Compile#Debug#Tools#Options#Window#Help## +=[*]====================== Browse: b =====================2=[*]+ | var b: Ball | |-| S | I | R +-------------------------------------------------| |#var####Location.X:##Integer###################################^ | var Location.Y: Integer X | var Location.Visible: Boolean # | var Location.Init(Integer, Integer) # | proc Location.Relocate(Integer, Integer) # | proc Location.MoveTo(Integer, Integer) # | func Location.GetX: Integer # | func Location.GetY: Integer # | func Location.InVisible: Boolean # | var Block.Color: Integer # | var Block.Width: Integer # | var Block.BChar: Char # | proc Block.Show # | proc Block.Hide # | var Ball.XVel: Integer # | var Ball.YVel: Integer # | proc Ball.Init(Integer, Integer, Integer, Integer, Integer) # | func Ball.NextX: Integer # | func Ball.NextY: Integer # | proc Ball.MoveX v +<X###########################################################>-+ *F1*Help*<+*Browse**Ctrl*<+*Go*to*source*Space*Track*src*F10*Menu Рис. 4.8 Просмотр полной информации описания области дейс- твия. Если ObjectBrowser выводит сообщение, говорящее, что ка- кой-то идентификатор не найден, проверьте и убедитесь, что вы за- дали в ObjectBrowser проверку допустимого идентификатора, и что идентификатор находится в нужной области действия. Например, при выборе команды Search|Symbol курсор может быть позиционирован на комментарии. Либо курсор может находиться вне области действия, в которой ObjectBrowser может найти информацию об идентификаторе. Например, курсор может находиться на формальном параметре в опи- сании функции, а не в реализации функции. В этом случае ObjectBrowser не может найти идентификатор, но если вы найдете параметр в реализации функции, то сможете просмотреть его.

Просмотр функций ObjectBrowser

В Таблице 4.5 перечислены клавиши и команды меню, активизи- рующие функции ObjectBrowser: Функции ObjectBrowser Таблица 4.5 +---------------------------+-----------------------------------+ | Чтобы выполнить: | Сделайте следующее: | +---------------------------+-----------------------------------| | Просмотр объектов | Выберите команду Search|Objects. | +---------------------------+-----------------------------------| | Просмотр модулей | Выберите команду Search|Units. | +---------------------------+-----------------------------------| | Просмотр глобальных | Выберите команду Search|Globals. | | идентификаторов | | +---------------------------+-----------------------------------| | Просмотр идентификатора | Поместите курсор на идентификаторе| | | своей программы, выберите команду| | | Search|Symbol или удерживайте на-| | | жатой клавишу Ctrl и щелкните пра-| | | вой кнопкой "мыши". | +---------------------------+-----------------------------------| | Выбрать Browser Options | Выберите команду Options|Browser. | +---------------------------+-----------------------------------| | Выбрать параметр Source | Выберите команду Options|Enviro-| | Tracking Options | ment|Preferences. | +---------------------------+-----------------------------------| | Выбрать Mouse Options | Выберите команду Options|Enviro-| | | mrnt|Mouse. | +---------------------------+-----------------------------------| | Открыть предыдущее окно | Выберите команду Search|Previous| | просмотра | Browser, выберите в локальном меню| | | окна просмотра команду Previous| | | или нажмите клавиши Ctrl+P. | +---------------------------+-----------------------------------| | Выбрать Local Browser | Нажмите клавиши Ctrl+O или выбери-| | Options | те команду Options в локальном | | | меню окна просмотра. | +---------------------------+-----------------------------------| | Отредактировать исходный | Нажмите Ctrl+Enter в ObjectBrowser| | код | нажмите клавиши Ctrl+G или выбери-| | | те в локальном меню окна просмотра| | | команду Goto Source. | +---------------------------+-----------------------------------| | Отслеживать исходный | Нажмите в ObjectBrowser пробел| | код | нажмите клавиши Ctrl+T или выбери-| | | те в локальном меню окна просмотра| | | Track Source. | +---------------------------+-----------------------------------| | Вывести ссылочную | Нажмите в ObjectBrowser клавиши| | информацию | Ctrl+R или щелкните "мышью" на| | | букве R в рамке окна. | +---------------------------+-----------------------------------| | Вывести информацию | Нажмите в ObjectBrowser клавиши| | об области действия | Ctrl+S или щелкните "мышью" на| | | букве S в рамке окна. | +---------------------------+-----------------------------------| | Вывод информации о | Нажмите в ObjectBrowser клавиши| | наследовании | Ctrl+I или щелкните "мышью" на| | | букве I в рамке окна. | +---------------------------+-----------------------------------| | Изменить на обратный | Нажмите клавишу Shift, и, удержи-| | режим вывода подокна | вая ее, выполните следующее дейст-| | | вие. | +---------------------------+-----------------------------------+

Выполнение в IDE других программ

Без выхода из IDE вы можете запускать другие программы и утилиты. При установке пакета Borland Pascal IDE устанавливается для выполнения таких инструментальных программных средств как GREP, Turbo Assembler, Turbo Debugger и Turbo Profiler. Чтобы запустить в интегрированной интерактивной среде прог- рамму, сделайте следующее: 1. Откройте меню Tools (Инструментальные средства). Вы увидите список программ и утилит, которые может запус- кать. 2. Выберите в меню Tools программу, которую вы хотите запус- тить. При выборе программы ей передается управление. После выпол- нения программы управление возвращается обратно в IDE.

Настройка меню Tools

Программы, которые вы найдете полезными, можно добавить в меню Tools и запускать их потом из IDE. Чтобы добавить программы в меню Tools, сделайте следующее: 1. Для вывода диалогового окна Tools выберите команду Options|Tools. В блоке списка заголовков программ Program Titles вы уви- дите краткое описание уже инсталлированных и готовых к выполнению программ. 2. Для вывода диалогового окна Modify/New Tool (Модифика- ция/Новое инструментальное средство) выберите команду New. 3. В блоке ввода заголовка программы Program Title наберите имя программы, как вы хотите выводить его в меню Tools. Если вы хотите, чтобы программа вызывалась по оперативным клавишам, укажите непосредственно перед и после того сим- вола, который должен использоваться в качестве оператив- ной клавиши, символ тильды (~). Этот символ будет выво- диться в меню Tools жирным шрифтом и специальным шрифтом, и при нажатии этой клавиши вы выберете программу. Напри- мер, чтобы добавить в меню Tools редактор Brief и сделать оперативной клавишей клавишу B, наберите: ~B~rief 4. Если вы хотите, чтобы ваша программа имела связанную с ней оперативную клавишу, выберите один из параметров Hot Key. Когда вы нажмете присвоенную оперативную клавишу, программа начинает работать. Например, утилите GREP прис- воены оперативные клавиши Shift+F2. В любой момент, чтобы использовать GREP, просто нажмите Shift+F2. 5. В блоке ввода Program Path (Маршрут программы) наберите имя программы. Если вы не введете полного имени, то могут быть найдены только программы в текущем каталоге или программы по обычному маршруту DOS. 6. В блоке ввода Command Line (Командная строка) наберите параметры или макрокоманды, которые вы хотите передать программе. Полную справочную информацию по макрокомандам, которые можно использовать в блоке Command Line в Modify/New Tool вы можете найти в оперативном справочнике Help Borland Pascal. 7. Выберите командную кнопку OK. Для редактирования имеющейся в меню Tools программы сделайте следующее: 1. Выберите команду Options|Tools. 2. В блоке списка Program Titles выберите нужную программу для редактирования. 3. Выберите Edit (Редактирование). 4. Внесите изменения в заголовок программы, маршрут програм- мы или командную строку. 5. Выберите командную кнопку OK. Чтобы удалить указанную в меню Tools программу: 1. Выберите команду Options|Tools. 2. Выберите программу, которую вы хотите удалить. 3. Выберите Delete (Удаление). 4. Выберите командную кнопку OK.

Работа с окном Messages

Некоторые инструментальные средства посылают вывод программы черед фильтр DOS - программу, конвертирующую вывод в формат, ко- торый можно выводить в окне сообщений Messages. Более подробную информацию об использовании и написании ваших собственных филь- тров DOS вы можете получить в оперативном справочнике Help. Одним из таких инструментальных средств, использующих окно Messages, является GREP, а ее фильтр называется GREP2MSG.EXE. Исходный код CREP2MSG.PAS вы можете найти в каталоге UTILS. При работе такого инструментального средства как GREP выво- димая информация передается в появляющееся окно сообщений Messages. Выводимые сообщения вы можете прокручивать. В окне Messages вы можете выбирать и редактировать строку программы, на которую имеется ссылка в сообщении, либо вы можете отслеживать свои сообщения (подсвечивать одну за другой строки исходного кода программы, при прохождении сообщений в этом окне). Чтобы отредактировать строку программы, на которую имеется ссылка в сообщении, сделайте следующее: * Если вы используете "мышь", дважды щелкните "мышью" на ин- тересующем вам сообщении. * При работе с клавиатурой выберите сообщение со ссылкой на нужную строку программы и нажмите Enter. * Ваш курсор перемещается на строку программы в исходном ко- де, на которую ссылается сообщение в окне Messages. Теперь вы можете отредактировать строку программы. По умолчанию, когда курсор переходит на строку исходного кода программы, окно Messages закрывается. Если вы предпо- читаете, чтобы окно Messages оставалось открытым, отмените выбор параметра Close On Go To Source в диалоговом окне Preferences. Примечание: Параметр Close On Go To Source влияет также на ObjectBrowser (см. выше). Чтобы отслеживать строки программы: 1. В окне Messages выберите сообщение со ссылкой на строку программы, которую вы хотите отслеживать первой. 2. Нажмите клавишу пробела. Если вы всегда хотите отслеживать сообщения в исходном коде, установите в группе Options диалогового окна Preferences параметр Auto Track Source. После этого при прокрутке окна сообщений в вашем исходном коде автомати- чески будут подсвечиваться соответствующие строки; вам не нужно будет нажимать на клавишу пробела. Примечание: Параметр Auto Track Source влияет также на ObjectBrowser (см. выше). Теперь строки программы, на которые есть ссылки в сообщени- ях, отслеживаются в зависимости от установленных в диалоговом ок- не Options|Enviroment|Preferences параметров. Если соответствую- щий файл не находится в окне редактирования, IDE открывает файл и выводит его в новом окне редактирования или в текущем окне редак- тирования. * Если вы хотите, чтобы файл выводился в новом окне редакти- рования, выберите в качестве значения параметра Source Tracking New Window. Примечание: Параметр Source Tracking влияет также на ObjectBrowser (см. выше). * Если вы хотите, чтобы файл замещал текущий файл в одном из активных окон редактирования, выберите в качестве значения параметра Source Tracking Current Window. Если окно сообщений закрыто, с помощью команды Tools| Messages вы можете открыть его снова.

Настройка конфигурации IDE

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

Сохранение рабочей операционной среды

С помощью Auto Save вы можете сохранить параметры Editor Files, Desktop и Enviroment в диалоговом окне Options|Enviroment. * Если установлен параметр Editor Files, IDE при выходе из интегрированной среды, выборе команды File|DOS Shell, вы- полнении или отладке программы сохраняет все модифициро- ванные файлы, открытые в окне редактирования. * Если установлен параметр Desktop, IDE при выходе из интег- рированной среды, выборе команды File|DOS Shell, выполне- нии или отладке программы сохраняет имена всех файлов, с которыми вы работали в оперативной области. * Если установлен параметр Enviroment, IDE при выходе из ин- тегрированной среды, выборе команды File|DOS Shell, выпол- нении или отладке программы сохраняет в файле конфигурации выбранные вами все параметры редактирования, компоновки и компиляции.

Использование файла конфигурации

Файл конфигурации сохраняет все параметры, установленные в меню параметров Options, выбранные в диалоговом окне Find Text, отслеживает все объединенные файлы Help, целевую платформу и имя основного файла (если он имеется). Если в диалоговом окне Options|Enviroment|Preferences установлен параметр Auto Save Enviroment, то файл конфигурации обновляется при выходе из интег- рированной среды, выборе команды File|DOS Shell, выполнении или отладке программы. При использовании компиляторов BP.EXE или TURBO.EXE по умолчанию файл компилятором называется TP.EXE. Чтобы создать новый файл конфигурации для другого проекта, сделайте следующее: 1. Выберите команду Options|Save As. 2. В поле ввода Options File Name наберите новое имя. 3. Выберите командную кнопку OK. Примечание: Об использовании файла конфигурации для управления программным проектом рассказывается в следующей главе. Чтобы переключиться на другой существующий файл конфигура- ции: 1. Выберите команду Options|Open. 2. Задайте имя существующего файла конфигурации. 3. Выберите командную кнопку OK. Чтобы модифицировать существующую конфигурацию: 1. Измените нужные параметры. 2. Выберите команду Options|Save. IDE сохраняет все изменения в текущем файле конфигурации.

Использование файла оперативной области

Если в диалоговом окне Options|Envioroment|Preferences вы установили параметр Auto Save Desktop, IDE при выходе из интегри- рованной среды, выборе команды File|DOS Shell, выполнении или от- ладке программы обновляет файл оперативной области. Файл опера- тивной области отслеживает все файлы, которые вы открывали, и файлы, с которыми вы работали, но закрыли их в ходе сеанса прог- раммирования (кроме файлов NONAMExx.PAS). Когда вы начнете новый сеанс редактирования, ваши окна редактирования выводятся в том виде, какой они имели при выходе. Когда вы откроете меню File, то список закрытых файлов в меню File продолжает увеличиваться (мак- симум до 5 значений). Как определить, какой файл оперативной области использовать? Вы можете непосредственно выбрать новый файл оперативной области, но каждый раз, когда вы создаете файл конфигурации, IDE создает новый файл оперативной области. Имя файла будет тем же самым, но имя файла оперативной области вместо расширения .TP имеет расши- рение .DSK. Например, если ваш файл конфигурации называется MY.TP, то файл оперативной области будет называться MY.DSK. По умолчанию IDE сохраняет файл оперативной области в том же каталоге, что и текущий файл конфигурации. Если хотите, то можете сохранять файлы конфигурации в текущем каталоге: 1. Выберите команду Options|Enviroment|Preferences. 2. В группе Desktop File выберите параметр Current Directory. Если вы хотите сохранять текущие параметры конфигурации, но очищать оперативную область, так что IDE будет "забывать" список всех файлов, с которыми вы работали, очищать все списки протоко- лов и закрывать все окна, сделайте следующее: 1. Выберите команду Options|Enviroment|Preferences. 2. Убедитесь, что в диалоговом окне Preferences установлен параметр Desktop, а параметр Enviroment выключен. 3. Перезапустите IDE. IDE закрывает все ваши окна и сохраняет текущие парамет- ры, но ваша оперативная область, списки протоколов и списки закрытых файлов будут очищены. Сохранение идентификаторов от одного сеанса к другому Одновременно с сохранением файла оперативной области вы мо- жете выбрать сохранение информации об идентификаторах в файле идентификаторов (файл с расширением .PSM). Тогда при следующем запуске IDE информация об идентификаторах, генерируемая при пос- ледней компиляции, будет доступна, благодаря чему вы можете вы- полнять немедленный просмотр и отладку. Чтобы сохранять идентификаторы между сеансами, сделайте сле- дующее: 1. Выберите команду Options|Enviroment|Preferences. 2. Убедитесь, что установлен параметр Auto Save Desktop. 3. В группе Desktop File Options выберите параметры Desktop и Symbols. 4. Выберите командную кнопку OK.

Управление проектом

Если вы хотите сделать свое программирование проекта модуль- ным и более легко управляемым, используйте основной файл. Задайте в качестве основного файла главный файл программы и сделайте так, чтобы он использовал несколько модулей или включаемых файлов, где вы можете хранить большие фрагменты кода. Чтобы задать, какой файл будет основным, выполните следующие шаги: 1. Выберите команду Compile|Primary File. 2. Когда выведется диалоговое окно, наберите имя своего фай- ла или выберите его из окна списка Files. 3. Выберите командную кнопку OK. Теперь, когда вы используете команду Compile|Make или Build, компилируется основной файл, даже если он не является файлом в активном окне редактирования. Каждый проект, с которым вы работаете с IDE, имеет уникаль- ные требования. Например, каждый проект имеет различный основной и различные каталоги, где находятся ваши файлы. Вы можете настро- ить IDE в соответствии со своим проектом. Управление несколькими проектами с файлом конфигурации для каждого из них Секрет управления проектами в IDE состоит в использовании для каждого проекта своего файла конфигурации. Когда вы начинаете новый проект, создайте новый файл конфигурации: 1. Установите все параметры так, как это требуется для ново- го проекта. 2. Задайте основной файл. 3. Для задания каталогов, где компилятор будет искать файлы для вашего проекта используйте команду Options| Directories. 4. В меню Options выберите команду Save As. В диалоговом окне выводится подсказка для ввода имени но- вого файла конфигурации. 5. Задайте имя нового файла конфигурации. 6. Выберите командную кнопку OK. Если вы в этот момент выйдите из IDE, а параметры Auto Save Desktop и Enviroment Options (Options|Enviroment|Preferences) ус- тановлены, то, когда вы начинаете новый сеанс, IDE использует но- вый файл конфигурации и файл оперативной области. Файлы, с кото- рыми вы работаете, будут доступны для вас в окне редактирования или в списке закрытых файлов в меню File, поскольку для вашего проекта создается новый файл оперативной области. Если вы храните каждый проект Паскаля в отдельном каталоге, то ниже даны рекомендации по удобному управлению проектом. Когда вы установите все параметры так, как это требуется для проекта, и зададите основной файл (если он имеется), сделайте следующее: 1. В меню Options выберите команду Save As. 2. Задайте новое имя файла конфигурации, включив в каталог проекта полный маршрут. * Если вы используете BP.EXE, задайте в качестве нового файла конфигурации BP.TP. * Если вы используете TURBO.EXE, задайте в качестве ново- го файла конфигурации TURBO.TP. 3. Выберите командную кнопку OK. Сохранив в каталоге проекта файл BP.TP или TURBO.TP, вы можете перейти в каталог проекта, запустить IDE, и IDE автоматически загрузит в файл конфигурации в этом катало- ге. Если вы не хотите больше работать с файлом, заданным в ка- честве основного файла, то можете использовать для очистки этого файла следующие два метода: * Выберите команду Compile|Clear Primary File. * Выберите в диалоговом окне Primary File параметр Primary File и Clear (Очистка). Если вы хотите работать с другим проектом, с помощью команды Options|Open загрузите новый файл конфигурации проекта.
                              Назад | Содержание | Вперед