26 | 07 | 2017

  Глава 3. Отличительные черты Clipperа.

Преимущества Clipperа
Clipper предлагает программистам много уникальных и мощных
инструментов. Эта глава содержит обзор возможностей. Каждая из них
детально рассмотрена в последующих главах настоящего руководства.
Преимущества Clipperа включают :
- существенно более быстрое выполнение
- абсолютная безопасность исходного текста
- способность выполнять написанные на Clipperе и слинкованные
программы на любом компьютере, поддерживающем PC/MS-DOS 2.0 или выше
для однопользовательских программ или DOS 3.1 или выше для сетевых
 приложений.-
способность распространять готовые программы
- улучшенные сетевые возможности без дополнительных расходов
- способность помещать процедуры и функции в тот же файл, что и
вызывающая клиппер-программа

- группа функций и операторов, обрабатывающих строки длиной до
64К
- выбор между более быстрыми Clipper-совместимыми файлами
индексов и DBASEIIIPLUS-совместимыми

- низкоуровневый доступ к файлам и устройствам DOS
- использование до 2048 активных переменных
- использование до 1024 полей на файл базы данных
- использование 255 открытых файлов (с DOSом 3.3)
- способность создавать свои функции

- проверка исходного текста при каждой компиляции

- обнаружение всех ошибок программы одновременно

- использование до 8 "детских" отношений к "родительскому" файлу

- способность вызывать неограниченное количество посторонних
программ, написанных на Си или Ассемблере

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

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

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

- способность создавать циклы БЕЙСИКоподобной командой
FOR...NEXT

- способность возвращать логическое значение, если команды USE,
USE...EXCLUSIVE, или APPEND BLANK отказывают при работе в сети
- способность объявлять и манипулировать массивами

- расширенный набор функций работы с мемо-полями


- 10 -
- способность добавлять пустую запись в файл коллективного
доступа

- способность ставить указатель строки на запись, запертую
другим пользователем и отображать ее

- разрешение неограниченному числу пользователей работать с
одной и той же базой данных (подробности в главе 10)

- способность вернуть текст имени компьютера при работе в сети

- способность обеспечить контекстно-чувствительную помощь -
такую как инструкции по вводу данных - при нажатии клавиши F1

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

- полные отладочные возможности




Характерные черты


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


Функции, определенные пользователем

Clipper поддерживает предопределенные функции языка DBASEIIIPLUS
такие как CHR() и EOF(). Кроме того, Вы можете создавать собственные
функции, которые, будучи созданы, могут применятся в любом месте
программы. Вы можете объединять их в библиотеки функций и
прикомпоновывать для использования. Примеры функций, определенных
пользователем, в главах 4 и 6.



Командная строка, начинающаяся с функции

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

? "Copyright 1989, Emulsified Software "
INKEY(1) && ждать 1 секунду


Расширенное использование макроподстановок

Как и в языке DBASEIIIPLUS, Вы можете использовать
макроподстановки вместо констант, имен переменных, полных выражений

- 11 -
(включая функции и операторы) и литералов. В дополнение к этому,
Clipper разрешает использование макро для условия в предложении DO
WHILE, равно как и рекурсивные макроподстановки.

Расширенное использование выражений

В Clipperе Вы теперь можете указать выражение везде, где раньше
Вы указывали в качестве аргумента символьный литерал. Это касается
команд SET и команд, открывающих файлы. Чтобы поступить так, Вы
окружаете выражение круглыми скобками. Для примера :

USE (<вырС>)

вместо

USE <имя файла>

Это общая способность. Подробности для каждой команды в главе 5.


Функции работы с файлами DOS

Новые функции clipperа поддерживают низкоуровневый доступ к
файлам DOS и устройствам. Эти функции позволяют Вам создавать,
открывать, закрывать, читать, писать, искать, и отслеживать ошибки в
файлах DOS. Подробности в главе 6.


Улучшенный экранный интерфейс

Световые меню

В Clipperе есть две возможности создания световых меню.
Во-первых, комбинация из @...PROMPT,SET MESSAGE и MENU для создания
меню с любым расположением выборов. @...PROMPT рисует каждый пункт
меню и определяет поясняющее сообщение. SET MESSAGE TO определяет
номер строки экрана, для выдачи этого сообщения. MENU TO вызывает
механизм обслуживания меню. Выбор осуществляется либо стрелками, и
подтверждается нажатием 'Return', либо нажатием клавиши первого
символа нужного пункта меню. В указанную переменную возвращается
число, означающее номер выбранного пункта в списке пунктов.
Вторая способность - создание вертикального меню функцией
ACHOICE(). Для работы этого меню Вы указываете координаты окна меню и
массив возможных выборов. Выбор осуществляется либо позиционированием
светящейся строки либо нажатием клавиши первого символа. Нажатие
'Return' подтверждает выбор, возвращая позицию в списке выборов также
как числовое значение. Если число выборов больше, чем число строк в
окне, ACHOICE() прокручивает список.

Сохранение и восстановление экрана

Clipper позволяет сохранить картинку на экране в переменную,
включая элемент массива, и восстановить из нее на экран командами
SAVE SCREEN TO и RESTORE SCREEN.


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

- 12 -


Предоставлен ряд возможностей, позволяющих более эффективно
управлять клавиатурой. LASTKEY() возвращает последнюю клавишу,
нажатую в "состоянии ожидания", включая READ, MENU TO, ACCEPT, INPUT
и WAIT. Команда KEYBOARD заполняет буфер клавиатуры одним или больше
символами из "состояния ожидания". Вы можете переназначить клавиши,
используя SET KEY TO так, что при нажатии соответствующей клавиши из
"состояния ожидания" управление передается назначенной процедуре.
Когда эта процедура заканчивается, управление возвращается в
"состояние ожидания". INKEY() дополнена способностью временной
задержки, позволяющей приостановить выполнение на указанное время или
неограниченное время ждать нажатия клавиши. Команда SET CURSOR
включает и выключает мигающий курсор.


Конкретная помощь

Clipper позволяет встроить в программу конкретную помощь,
скомпилировав и прилинковав программу или процедуру, названную Help.
Эта процедура будет вызвана при нажатии клавиши F1 из любого
"состояния ожидания", включая READ, MENU TO, ACCEPT, INPUT и WAIT.
Подробности в главе 4.


Проверка GETов


Опция VALID команды @...GET позволяет проверить отдельные GETы
до завершения READ. Когда Вы пытаетесь покинуть GET, VALID вычисляет
логическое выражение. Если оно возвращает истину (.T.), то текущий
GET завершается; в противном случае курсор остается в GETе до тех
пор, пока VALID не вернет (.T.) или Вы не нажмете 'Esc'.
VALID поддерживает самостоятельно определенные функции.
Пользуясь этим, можно выполнить различные уровни проверки, включая
обзоры других рабочих областей или вызвать меню используя MENU TO или
ACHOICE(). Кроме того, можно присвоить новое значение обрабатываемым
изменяемой или полю и, после возврата из своей функции, значение GETа
изменится на новое.


Отмена в GETах



Когда Вы редактируете GET, можно отменить последние изменения,
нажав Ctrl-U. Покинув текущий GET, отменить изменения уже невозможно.
Для примера, исходное значение было "TED" и Вы изменили его на "FRED",
нажатие Ctrl-U вернет исходное состояние.


Массивы переменных

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

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

Больше переменных

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


Длиннее строки

В предыдущих версиях функции и операторы Clipperа поддерживали
символьные строки длиной до 32К. Следующие из них изменены и
поддерживают строки до 64К :

+ LOWER()
== REPLICATE()
$ SPACE()
AT()SUBSTR()
EMPTY() TRIM()/LTRIM()
LEN() UPPER()


Улучшенная работа в сети

Clipper обрабатывает сетевые файлы не так, как другие СУБД
программы. В Clipperе доступ к запертому кем-то файлу невозможен
только для строки. Для чтения файлом могут пользоваться одновременно
неограниченное число пользователей. Это позволяет использовать
компьютерное время более эффективно. Для индикации сбоя команд USE,
USE...EXCLUSIVE или APPEND BLANK в сетевой среде служит функция (FUNC)
NETERR(). Информация о работе с сетью в главе 10.

Улучшенная обработка файла базы данных

Относительный поиск

Можно выполнить "относительный поиск" используя команду SET
SOFTSEEK. Это значит, что если при поиске командой SEEK точное
соответствие не найдено, то указатель строки установится на запись с
ближайшим большим значением индекса.

Множественные родственные отношения

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


Улучшенная обработка мемо-полей

Мемо-поля можно присваивать символьным переменным. Это позволяет
выполнять поиск, склейку, замещения мемо-полей и другие операции,

- 14 -
разрешенные для символьных строк.

Функции форматирования

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

Мемо-редактор

Для ввода и редактирования длинных строк и мемо-полей
предназначена функция (FUNC) MEMOEDIT(), работающая в заданном окне. Она
имеет стандартный набор возможностей, включая вставку, удаление и
автоматический перенос слов на следующую строку. Подробности о
мемо-функция (FUNC)х в главе 6.


Улучшенная передача параметров


Переменное количество параметров

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

Командная строка DOS

В дополнение к передаче параметров в вызываемую программу, можно
также передать параметры из командной строки DOS. Разница заключается
в том, что все переданные из DOS параметры рассматриваются как
символьные строки. Подробности в описании команды PARAMETERS в пятой
главе.

Дополнительные операторы

В дополнение к стандартным операторам Clipper имеет еще
несколько операторов, перечисленных в следующей таблице :



Таблица 3-1. Дополнительные операторы.
----------------------------------------------------------------
Отношения Математический
----------------------------------------------------------------
== Точно равно % Модуль
!= Не равно
! Не
----------------------------------------------------------------



Прочие улучшения

- 15 -

Вы можете объявить в своих клиппер-программах глобальную переменную
CLIPPER. Это позволит Вам использовать расширения, предоставляемые
Clipperом, в клиппер-программах для DBASEIIIPLUS. Если правильно построить
выражения, то программу можно будет по прежнему запускать под
DBASEом, хотя и не используя всех возможностей Clipperа. Команда
PUBLIC обсуждена в главе 5.


Отладчик

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



КОМАНДЫ РАСШИРЕНИЯ CLIPPERА


Полное описание синтаксиса и примеров на каждую команду
находится в главе 5.


@...BOX Одним предложением рисует рамку на экране из указанных
для каждого угла и стороны символов и заполняет ее
заданным символом

@...PROMPT Помещает на экран пункты меню

@...SAY...GET Позволяет программе проверить годность введенного
...VALID значения до перехода к следующему GETу.
<вырЛ>

DECLARE Создает массив из <вырЧ> элементов. Элементы могут
быть разных типов

EXTERNAL Используется для объявления символа для линкера.
Процедуры, обявленные как внешние, можно помещать в
оверлеи и вызывать их с макро.

FOR...NEXT Команда позволяет выполнить цикл в заданном диапазоне
и, еще, изменять переменную цикла. Опция
STEP позволяет указать величину ее прирашения.

KEYBOARD Заполняет буфер клавиатуры указанной строкой,
предварительно очистив его.

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

RESTORE Используемая в сочетании с командой SAVE SCREEN
SCREEN позволяет избежать повторного рисования исходного

- 16 -
экрана.

SAVE SCREEN
Пишет содержимое текущего экрана в буфер или
переменную. Эта команда, используемая в сочетании с
командой RESTORE SCREEN, устраняет необходимость
повторного рисования исходного экрана.

SET CURSOR Позволяет включать и выключать мерцающий курсор.

SET KEY Позволяет выполнить процедуру нажатием назначенной
клавиши из любого "состояния ожидания". "Состояние
ожидания" - это любая команда, приостанавливающая
выполнение программы. Примеры "состояния ожидания" в
главе 5.


SET SOFTSEEK Позволяет "относительный" поиск. Если не найдена
нужная запись, то указатель устанавливается на запись,
логически следующую за искомой.


SET WRAP Разрешает круговое движение в меню.




ФУНКЦИИ РАСШИРЕНИЯ CLIPPERА

Полное описание синтаксиса и примеров на каждую функцию
в главе 6.


ALIAS() Возвращает синоним выбранной рабочей области. Если
параметр не указан, то возвращается синоним рабочей
области.

DTOS() Возвращает строку формата ггггммдд. Рекомендуется для
индексирования по склейке из даты и символьного
выражения.

EMPTY() Возвращает логическую "истину", если: символьное
значение равно нулевой строке или строке пробелов; числовое выражение
равно нулю; датное выражение равно пустой строке. В противном случае
возвращается "ложь".

FCLOSE() Закрывает DOSовский файл.

FCOUNT() Возвращает число полей в текущей базе данных.

FCREATE() Создает DOSовский файл.

FERROR() Возвращает DOSовский код ошибки для файловых операций.

FOPEN() Открывает DOSовский файл.

FREAD() Читает символы из DOSовского файла и возвращает число

- 17 -
считанных символов.

FREADSTR() Читает символы из DOSовского файла и возвращает
строку.

FSEEK() Устанавливает указатель внутри DOSовского файла на
новую позицию.

FWRITE() Пишет в DOSовский файл.

HARDCR() Замещает все символы "мягкого" возврата каретки (ASCII
= 141) на "жесткий" (ASCII = 13) в пределах данного выражения.

INDEXEXT() Возвращает расширение текущего индексного файла (.ntx
или .ndx).

INDEXKEY() Возвращает ключевое выражение текущего индекса.

INDEXORD() Возвращает текущий номер SET ORDER TO.


LASTKEY() Возвращает значение ASCII - кода последней нажатой
клавиши, включая управляющие клавиши.

LOCK() Пытается запереть запись базы данных. Если попытка
успешна, возвращает "истину".

MEMOEDIT() Дает способность редактировать мемо - поля и строки.

MEMOLINE() Возвращает сформатированную строку, извлеченную из
мемо - поля или строки.
MEMOREAD() Возвращает указанный дисковый файл в виде символьной
строки.

MEMORY() Возвращает количество свободной памяти в килобайтах.

MEMOTRAN() Возвращает символьную строку с замещенными символами
возврата каретки и перевода строки.

MEMOWRIT() Пишет символьную строку в разрешенный дисковый файл,
и возвращает "истину" в случае успеха.

MLCOUNT() Возвращает число строк в символьном выражении или
мемо-поле.

NETERR() Возвращает "истину" если команды USE,USE...EXCLUSIVE
или APPEND BLANK отказывают при работе в сети.

NETNAME() Возвращает текст имени компьютера. Если имя компьютера
не было установлено, то возвращается нулевая строка.

PCOUNT() Возвращает число параметров, переданных из командной
строки или другой процедуры.

PROCLINE() Возвращает номер строки исходного текста текущей
программы или процедуры.


- 18 -
PROCNAME() Возвращает имя текущей процедуры или программы.

READVAR() Возвращает имя текущей изменяемой GET/MENU или нулевую
строку, если все GETы обработаны.

SCROLL() Позволяет прокручивать вверх и вниз назначенную часть
экрана или очищать ее.

SECONDS() Возвращает системное время в виде <секунд>, <сотых>.
Возвращенное значение есть число секунд, прошедшее с полуночи по 24 -
часовой системе, в диапазоне от 0 до 86399.

SELECT() Возвращает номер текущей рабочей области.

SETPRC() Устанавливает внутренние PROW() и PCOL() в указанные
значения.

UPDATED() Возвращает логическую "истину", если последний READ
изменил какие - либо данные в соответствующих GETах.


УТИЛИТЫ CLIPPERА

Дистрибутив содержит специальные утилиты для создания и
редактирования файлов вне Clipperа:

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

RL.EXE Позволяет создавать и редактировать формы LABEL и
REPORT. Программа написана на Clipperе и поставляется с исходным текстом.

LINE.EXE Выводит Ваши программы на экран или на принтер с
указанием номеров строк.

MAKE.EXE Используется для описания зависимостей исходных или
объктных файлов для компилятора и для определения
цикла компиляции и линковки.

Подробности в главе 12.



МОДИФИЦИРОВАНИЕ ПРОГРАММ, НАПИСАННЫХ ДЛЯ DBASE III PLUS


Примечание: Различия между Clipperом и Dbase III plus, описанные
в этом разделе, относятся к Dbase III plus версия 1.1.

Написание и логика Clipperа эмулируют, насколько возможно, язык
программирования Dbase III plus. Однако есть отличия и там, где они
встречаются, потребуется модифицировать Ваши программы, чтобы Clipper
мог их успешно компилировать.
Вам потребуется модифицировать программы, если выполняется хотя
бы одно из следующих трех условий:

- 19 -

--- клиппер-программа содержит одну из команд, которые не
поддерживаются Clipperом или поддерживаются по
другому. Приложение С содержит список таких команд.

--- Вы хотите вставить какие - либо из расширений
Clipperа.

--- Программа использует макроподстановку, содержащую
слово команды или запятую команды, которые не
разрешены в Clipperе. (Годные выражения, включая
функции, разрешены в макро).

Заметьте, что программы, в которые включены расширения Clipperа,
не будут работать под управлением Dbase, если они не были объединены
в условные предложения IF, связанные с глобальной изменяемой CLIPPER.