Глава 12. Утилиты Clipperа

 Глава  содержит команды для утилит Clipperа. Эти программы
были включены таким образом, чтобы пользователь мог создавать или
модифицировать файлы при разработке своих программ. Каждая утилита
описывается ниже:
- клиппер-программа DBU.EXE позволяет создавать, обновлять,
просматривать и индексировать файлы базы данных DBF без написания
отдельных программ и использования интерпретатора;

- клиппер-программа RL.EXE используется для для создания или модификации
файлов выходных форм или модификации метки файла выходных форм;

- клиппер-программа LINE используется для вывода на экран или на бумагу
листинга программы пользователя с номерами строк;

- клиппер-программа MAKE.EXE (основанная на утилите Make операционной
системы UNIX) используется для описания исходного и объектного
модулей, зависящих от компилятора Clipperа и выполнения
компиляции и линковки.


Программа DBU.EXE

Программа DBU.EXE представляет собой многоцелевой утилит для
манипуляций с данными и файлами. Эта клиппер-программа - инструмент для
выполнения дополнительных работ, вяляющихся необходимой частью
процесса разработки программного обеспечения. Данный утилит
представлен на дистрибутивной дискете в виде исходного кода и должен
быть скомпилирован и слинкован с библиотеками CLIPPER.LIB и
EXTEND.LIB и в итого должен быть получен файл DBU.EXE. Эти действия
инициируются программой MAKEDBU.BAT.

В основе программы DBU.EXE лежат две концепции: системы оконных
меню и глобального обозрения данных. Совместное использование этих

- 248 -
концепций привело к созданию очень полезного программного продукта.

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

Нет необходимости возвращаться в главное меню для выбора нового
режима, достаточно нажать соответствующую функциональную клавишу. Для
смены режима можно использовать управление курсором либо нажатие
функциональной клавиши. Клавиши Ins, Del и Enter используются для
добавления, удаления или замены соответствующих атрибутов. При
добавлении и замене высвечивается список возможных вариантов. Если
указанный список не имеет практического смысла на экране возникает
поле для ввода информации. Клавиша Enter подтверждает выбор из
списка, а клавиша Esc - отменяет. Последняя клавиша позволяет также
выйти из программы. Клавиша Del используется удаления выбранной
компоненты из списка и закрытия файла.

Клавиша F1 в любой момент позволяет активизировать подсказки.

Клавиша F2 позволяет открывать базу данных, индексы или файлы
просмотра.

Клавиша F3 позволяет создать базу данных или индексный файл.

Клавиша F4 позволяет записывать структуру базы данных.

Клавиша F5 позволяет обновлять базу данных.

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

Клавиша F7 позволяет осуществлять поиск по ключу при помощи
индексного файла, перемещать поинтер в базе данных, выполнять команды
LOCATE и SKIP.

Команда F8 позволяет выполнить команды SET RELATION ..., SET
FILTER TO ..., SET VIEW ... .

Глобальный обзор данных.

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

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

Обзор может быть очень сложным. Может быть активировано 6
рабочих областей для одновременного открытия файлов, а также
множество связей. Часто желательно во многих файлах выделить
некоторые поля. Установка сложного обзора может потребовать
значительных усилий и временных затрат. Для упрощения этого текущий
обзор может быть записан в файл с расширением .VEW для быстрого
восстановления. После восстановления потребуются простые модификации
небольшого объема. При этом можно различные виды обзоров записывать в
различные файлы.

Обновление данных.

Этот режим позволяет обновлять данные, находящиеся по текущим
обзором. При этом все поля базы данных высвечиваются в столбец.
Нажимая на клавишу Enter, можно выбрать поле для редактирования. Для
добавления новой строки нужно нажать клавишу Ins.

Управление курсором в этом режиме очень гибкое: можно листать по
страницам, переходить в начало или в конец файла, в крайние левое и
правое положения. Кроме того, можно инициировать команды SEEK, GOTO,
SKIP, LOCATE.

Создание.

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

Подсказка.

Клавиша инициирования режима подсказки всегда активна и нажатие
ее в любом месте позволяет воспользоваться подсказкой.


Программа RL.EXE

Утилита RL позволяет создавать или модифицировать существующие
выходные формы отчетов (.FRM) и меток (.LBL).

ФОРМАТНЫЕ ФАЙЛЫ (.lbl) - содержат информацию, необходимую для
команды LABEL для печати меток. Они создаются и изменяются
командой MODIFY LABEL.

ФАЙЛЫ ОТЧЕТОВ (.frm) - содержат информацию, необходимую команде
REPORT для составления отчета. Создаются и изменяются командой
MODIFY REPORT.

Эти файлы модифицируются при помощи команд REPORT FORM и LABEL
FORM. Программа RL представлена на дистрибутивной дискете в виде
исходного текста, поэтому ее необходимо скомпилировать и слинковать с

- 250 -
библиотеками CLIPPER.LIB и EXTEND.LIB, что можно сделать при помощи
программы MAKERL.BAT. Для вызова этой программы нужно выполнить
командную строку MAKERL.

Для запуска программы RL нужно, находясь в DOSе, выполнить
команду RL.

Создание или модификация файла отчетов

Для выбора нужного режима используются следующие функциональные
клавиши:

F1 Help - для подсказок;

F2 Layout - для форматирования отчета;

F3 Group - для структурирования отчета;

F4 Field Definitions - для определения данных;

F5 Delete - для удаления текущего столбца;

F6 Insert - для вставления нового столбца;

F7 Go To - для выбора столбца подлежащего редактированию;

F10 Exit -для выхода из программы.


Для создания или модификации файла отчетов необходимо после
запуска программы RL выбрать режим REPORT. В режиме полного экрана с
использованием меню создается файл отчетных форм. Данный файл
используется командой REPORT для вывода на печать отчета на основе
информации базы данных. Данный отчет используется командой REPORT
FORM для выдачи информации в табличном виде.

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

В режиме GROUP можно определить ключи для группировки и
вычисления подсуммы. Они обычно соответствуют ключам, по которым ваш
файл индексирован (INDEXed) или сортирован (SORTed). Записи с
одинаковым значением в названном ключевом поле группируются вместе и
печатаются подсуммы числовых полей по каждой группе.Общая сумма
вычисляется в конце отчета; вы не можете подавить ее. Clipper не
проверяет правильность выражений для вычисления подсумм. Если
допущена ошибка, то она проявит себя, когда вы зададите команду
REPORT для выдачи данных. Каждая группа начинается с новой страницы,
если выбрана опция "Eject after each group / subtotal". Внутри групп
могут быть также заданы подгруппы. Вы можете затребовать общий отчет,
который выдаст все суммы и подсуммы для числовых полей и содержимое
нечисловых полей первой строки каждой группы.


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

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

Даже если задана необходимость подсчета групповых и подгрупповых
сумм, сумма всех числовых полей может не вычисляться. Чтобы их
просуммировать, ответьте Y на вопрос Total? (Y/N).

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

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

Вспомогательная информация о построении отчета высвечивается над
описанием каждой графы. Она включает шаблон текущей страницы отчета,
в котором X представляет один символ, а # или 9 - десятичную цифру.



Создание файла меток.


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


F1 Help - подсказка;

F2 Toggle - переключение между размерностями меток и их содержимым;

F3 Formats - выбор из стандартной таблицы меток.

Определите вначале ограничения для следующих
спецификаций меток:

Спецификация Диапазон

Ширина метки 1 - 120 символов
Высота метки 1 - 16 строк
Левая граница 0 - 250
Строки между метками 0 - 16

- 252 -
Пропуски между метками 0 - 120
Количество меток на строке 1 - 5

Строка примечаний в конце экрана используется для создания таких
коментариев о файле меток, как его тип и назначение. Эта информация
не печатается. Для выхода в меню типов стандартных меток нажмите
^Home во время выдачи экрана со спецификациями. Соответствующий тип
метки будет автоматически отображаться на строке примечаний. Общий
максимальный размер всех меток составляет 250 символов. Используйте
только данные символьного типа для задания содержимого метки. Когда
вы при задании содержимого метки разместите несколько имен полей на
одной строке экрана, Clipper исключит лишнее пустое пространство и
напечатает метку только с одним пробелом между полями. После того как
метка и ее содержимое определены, пустые линии удаляются.



Программа INDEX

Программа INDEX.PRG представлена на дистрибутивном диске в
исходных кодах и предназначена для индексирования базы данных. После
компиляции и линковки файла INDEX.PRG и получения файла INDEX.EXE для
запуска программы нужно выполнить команду INDEX <имя базы данных>.

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



Программа LINE

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

LINE <имя файла с расширением PRG> [n]

где задается имя файла, содержащего программу, а n - номер
строки, если нужно высветить строку программы с данным номером.
Если n больше 5, то будет высвечены 5 предыдущих и 10 следующих
строк. Если введено число 1, то будут высвечиваться по 22 строки с
паузой. При этом можно использовать переобращение DOSа на принтер:

LINE Dbu.prg > PRN



Программа MAKE

Использование программы MAKE с Clipperом. При разработке больших
прикладных программ удобно разбить на несколько отдельных файлов типа
.PRG, которые которые могут компилироваться отдельно и совместно
линковаться. В этом случае при строки одной компоненты
перекомпилировать достаточно будет только эту часть. При этом

- 253 -
необходимо какие именно компоненты необходимо перекомпилировать.

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

Как работает клиппер-программа MAKE

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

MAKE помещает необходимые команды в batch-файл, который
выполняется после окончания работы MAKE.


Описательный файл программы MAKE

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

<итоговый файл : <зависимые файлы>>
<команда 1>
<команда 2>
<другие команды >

В одном правиле может быть определен только один итоговый файл,
но несколько зависимых файлов и команд. Каждая команда должна быть на
отдельной строке. Символ "/" используется для продолжения строки.
Для примера, предположим TEST1.OBJ зависим от TEST1.PRG, TEST2.PRG,
TEST3.PRG. Для создания этого файла запускается Clipper для TEST1,
используя способность Clipperа компилировать программы, на которые
есть ссылки, для автоматического компилирования TEST2 и TEST3.
Правило имеет следующий вид:

TEST1.OBJ: TEST1.PRG TEST2.PRG TEST3.PRG
CLIPPER TEST1

Это правило сообщает программе MAKE, что TEST1.OBJ - итоговый
файл, зависящий от TEST1.PRG, TEST2.PRG, TEST3.PRG. Для того, чтобы
получить файл TEST1.OBJ необходимо скомпилировать его, применяя
команду "CLIPPER TEST1".

Для создания .EXE-файла клиппер-программа TEST1 линкуется с модулем
WINDOWS и библиотеками CLIPPER и EXTEND. Правило для этого имеет вид:

TEST1.EXE : TEST1.OBJWINDOWS.OBJ
LINK TEST1 WINDOWS,,,\CLIPPER\CLIPPER \CLIPPER\EXTEND

- 254 -

Порядок правил

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

TEST1.EXE : TEST1.OBJWINDOWS.OBJ
LINK TEST1 WINDOWS,,,\CLIPPER\CLIPPER \CLIPPER\EXTEND

TEST1.OBJ: TEST1.PRG TEST2.PRG TEST3.PRG
CLIPPER TEST1

Если клиппер-программа TEST2.PRG была обновлена и ее нужно
перекомпилировать, клиппер-программа MAKE сначала проверит правило с
TEST1.EXE в качестве итогового. Она найдет, что файл TEST1.EXE более
новый, чем TEST1.OBJ и WINDOWS.OBJ и что никакие действия не
требуются. Она выполнит второе правило и найдет, что TEST2.PRG имеет
более позднее время по сравнению с TEST1.PRG и поэтому необходимо
осуществить команду, соответствующую этому правилу. MAKE затем не
найдет больше никаких правил. Для того, чтобы получить .EXE-файл с
обновленными данными, нужно выполнить следующее:

TEST1.OBJ: TEST1.PRG TEST2.PRG TEST3.PRG
CLIPPER TEST1

TEST1.EXE : TEST1.OBJWINDOWS.OBJ
LINK TEST1 WINDOWS,,,\CLIPPER\CLIPPER \CLIPPER\EXTEND

Начало работы MAKE

Если TEST1.MAK - имя описательного файла, для начала работы
необходимо набрать инструкцию:

MAKE TEST1.MAK

MAKE принимает только одну директиву /N. Эта директива позволяет
только высвечивать на дисплее команду, не выполняя ее:

MAKE /N TEST1.MAK

Комментарии и макросы

Символ (#) используется для определения комментария. Он может
применятся как первый символ в строке комментария:

TEST1.EXE : TEST1.PRG TEST2.PRG TEST3.PRG
#Это комментарий
#эта строка также комментарий

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

- 255 -
Макроопределение имеет следующую форму:

имя = значение

Для последующего использования имени необходимо применять символ
доллара $. Для примера:

# определить макроподстановку
FILES = TEST1.OBJ TEST2.OBJ TEST3.OBJ
TEST1.EXE: $(FILES)
#эта строка эквивалентна следующей:
#TEST1.EXE: TEST1.OBJ TEST2.OBJ TEST3.OBJ


Пример системы

Предположим, система состоит из следующих исходных программ:

DRIVER.PRG CO_QUERY.PRG
SCREEN.PRG CO_KILL.PRG
UTILS.PRG CO_SELECT.PRG
VIEW.PRG CO_DBFS.PRG
COMMAND.PRG WINDOWS.ASM
CO_EDIT.PRG

Для построения этой системы .PRG-файлы компилируются Clipperом,
а .ASM-файлы ассемблируются макроассемблером MASM. После получения
.OBJ-файлов для каждой исходной программы эти файлы линкуются с
библиотеками CLIPPER и EXTEND.


# Макросы
obj1 = Driver.obj View.obj Command.obj Screen.obj Utils.obj Co_edit..obj
obj2 = Co_query.obj Co_kill.obj Co_select.obj Co_dbfs.obj Windows.obj
# PRG
Driver.obj: Driver.prg
Clipper Driver -m

Screen.obj: Screen.prg
Clipper Screen -m

Utils.obj: Utils.prg
Clipper Utils -m

View.obj: View.prg
Clipper View -m

Command.obj: Command.prg
Clipper Command -m

Co_edit.obj: Co_edit.prg
Clipper Co_edit -m

Co_query.obj: Co_query.prg
Clipper Co_query -m

Co_kill.obj: Co_kill.prg

- 256 -
Clipper Co_kill -m

Co_select.obj: Co_select.prg
Clipper Co_select -m

Co_dbfs.obj: Co_dbfs.prg
Clipper Co_dbfs -m

# ASM
Windows.obj windows.asm

#EXE
Qbe.exe: $(obj1)$(obj2)
LINK @Qbe.lnk,Qbe,,\Clipper\Clipper \Clipper\Extend/SE:256


Часто приходится использовать одни и те же команды Clipperа в
разных правилах, например для получения .OBJ-файлов всех исходных
программ. Редко используются разные флаги при компиляции. Для
преодоления этого неудобства MAKE предоставляет специальные правила,
указывающие производить множество файлов с одним расширением из
файлов с другим расширением. Для примера, можно указать превращать файлы
с расширением .PRG в файлы с расширением .OBJ или .ASM-файлы в
.OBJ-файлы.

В примере для определения правила создания .OBJ-файлов из .PRG-
файлов необходимо выполнить команду:

CLIPPER <имя файла> -M

Не обязательно повторять команды для каждой пары .OBJ - .PRG.
Описываемое правило имеет следующий вид:

<зависимое расширение>.<целевое расширение>
<команда1>
<команда2>
...
Так как эти правила применяются к любым файлам с заданным
расширением , они не могут непосредственно обращаться по имени файла.
Необходимо использовать макроподстановку $, которая указывает на
базовое имя без расширения. Для примера, для создания .OBJ-файла
необходимо выполнить:

.prg.obj:
Clipper $* -m

Описательный файл примера может быть написан следующим образом:


# Макросы
obj1 = Driver.obj View.obj Command.obj Screen.obj Utils.obj Co_edit..obj
obj2 = Co_query.obj Co_kill.obj Co_select.obj Co_dbfs.obj Windows.obj
# PRG файлы
.prg.obj
Clipper $* -m
# ASM файлы
.asm.obj:

- 257 -

Command.obj: Command.prg

Co_edit.obj: Co_edit.prg

Co_query.obj: Co_query.prg

Co_kill.obj: Co_kill.prg

Co_select.obj: Co_select.prg

Co_dbfs.obj: Co_dbfs.prg

# ASM
Windows.obj Windows.asm

#EXE
Qbe.exe: $(obj1)$(obj2)
LINK @Qbe.lnk,Qbe,,\Clipper\Clipper \Clipper\Extend/SE:256

Имеется два предопределенных макроса, распознаваемые MAKE
программой:

$@ : Имя итогового файла, включая расширение.


$** : Полный список зависимостей для этого итогового файла.

Макроподстановка $@ полезна для высвечивания имени
обрабатываемого файла. Для примера, можно написать:


.prg.obj:
REM ***$@ Clipper $* -m

При выполнении $@ расширяется до полного имени данного .OBJ-
файла.

Макроподстановка $** полезна при линковке, например, Qbe.exe:
$(obj1)$(obj2)
LINK $**,$*,,\Clipper\Clipper \Clipper\Extend/SE:256
$** расширяется до полного списка определенных зависимостей