15 | 12 | 2017

ГЛАВА 5. Команды Clipperа (часть 3)

MENU TO
Написание: MENU TO <переменная>

Интерактивный выбор элемента списка меню с присвоением
соответствующего значения определенной изменяемой.

<переменная> - переменная для хранения порядкового номера
элемента списка меню. Если такой изменяемой не существует, то
она будет создана (тип N).

MENU TO организует выбор элемента списка меню. Формирование
 списка осуществляется операторами SET MESSAGE и PROMPT.

Собственно выбор производится с помощью стрелочных клавиш.
Каждому элементу меню соответствует определенное сообщение (
MESSAGE ), позиция которого на экране определяется оператором
SET MESSAGE. Выход из команды MENU с выбором определенного
элемента осуществляется при вводе <Enter>.
Следующий список определяет активные клавиши управления режимом
MENU TO:

Стрелка вверх - предыдущий PROMPT.
Стрелка вниз - следующий PROMPT.
Home - первый PROMPT.
End - последний PROMPT.
Enter - выбор элемента.
Esc - выход из режима без выбора.
Первая буква - выбор элемента с той же первой буквой в PROMPT.

MENU TO может быть вложено внутрь SET KEY-процедуры без очистки
текущих PROMPT ( в отличии от GET/READ ). Однако, если для
вложенных меню будут использованы одни и те же переменные, они
будут сохранять свои предыдущие значения, если не объявить их

- 81 -
PRIVATE в SET KEY-процедуре. В связи с этим рекомендуется
использовать различные переменные.
В SET KEY-процедуре есть способность прочесть имя используемой
изменяемой при помощи READVAR().

Для каждого меню разрешено не более 32 элементов PROMPT.

Пример:

SET MESSAGE TO 23 CENTER
@ 6,10 PROMPT "Add" MESSAGE "New"
@ 7,10 PROMPT "Edit" MESSAGE "Change"
@ 9,10 PROMPT "Quit" MESSAGE "Return to DOS"
MENU TO Choice

library: CLIPPER.LIB

Рекомендовано смотреть: @...PROMPT, SET MESSAGE, SET WRAP, ACHOICE().



NOTE/*/&&

Cинтаксис: NOTE / * [<текст>] / [<команда>] && [<текст>]

Размещает в тексте программы комментариев. <текст> - строка
символов, следующая за знаком комментария.
NOTE или (*) должны стоять первыми в строке, тогда как (&&)
может быть в любом месте. Все символы после знака комментария
игнорируются транслятором до первого символа "конец строки".
Следовательно комментарий не может быть продолжен ( при помощи
<;>) на другую строку.

library: CLIPPER.LIB


PACK


Написание: PACK.

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

library: CLIPPER.LIB

Рекомендовано смотреть: DELETE, RECALL, REINDEX, SET DELETED, ZAP, DELETED().



PARAMETERS

Написание: PARAMETERS <список переменных>.

Определяет в подпрограмме переменные, получающие пересылаемые
значения или ссылки.

- 82 -

<список переменных> - одна или более переменная, разделенные
запятыми.
Параметры можно разделить на формальные и действительные.
Формальными параметрами называются переменные, перечисленные в
качестве аргументов в операторе PARAMETERS. Действительными
параметрами являются аргументы команды DO...WITH ( вызов
процедуры) или пользовательской функции.

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

Следует заметить, что Clipper в данном случае не проверяет
взаимного соответствия списков действительных и формальных
параметров. Чтобы определить количество действительных
параметров, можно воспользоваться PCOUNT().

Для корректной передачи параметров подклиппер-программам и
пользовательским функция (FUNC)м необходимо соблюдать следующие
правила:

1. Переменные и массивы передаются в подпрограммы ссылкой.
Элементы массивов, выражения, переменные внутри скобок и поля
передаются значением ( поля должны быть заключены в скобки ).

2. Функциям параметры передаются по умолчанию как значения.
Однако, они могут быть переданы как ссылки, если изменяемой
будет предшествовать символ @. Массивы всегда передаются как
ссылки, элементы массивов - только как значения.

Есть способность пересылать строки символов в качестве
параметров, находясь в DOS-окружении. Строки должны быть
разделены пробелами. Параметр, заключенный в кавычки
пересылается как одна строка. Для примера:

C> PROG "CLIPPER COMPILER" 5

Примеры:
В следующем примере "memvar" и "array" передаются в подпрограмму
как ссылки, тогда как "memvar2" - как значение:

DECLARE array[1]
STORE "old" TO memvar, memvar2, array[1]
DO Proc WITH memvar, (memvar2), array
*
RETURN

PROCEDURE Proc

- 83 -
PARAMETERS new_war, new_war2, new_array
STORE "new" TO new_var, new_var2, new_array[1]
RETURN

Этот пример демонстрирует передачу параметров пользовательским
функция (FUNC)м.

STORE 10 TO Memvar, memvar2
Modvar (@memvar, memvar2)
*
? memvar, memvar2 && Результат : 20 10
*
RETURN

FUNCTION Modvar
PARAMETER new_var, new_var2
STORE 20 TO new_var, new_var2
RETURN " "

Следующий пример демонстрирует передачу параметров из
DOS-командной строки в программу CLIPTEST:

* Cliptest.prg
PARAMETERS char, num, date, logical
?? TYPE ("char")
?? TYPE ("num")
?? TYPE ("date")
?? TYPE ("logical")
RETURN

Если выполнить CLIPTEST с помощью следующей командной строки
DOS:

C> CLIPTEST string 12 CTOD(SPACE(8)).T.

то результат будет выглядеть следующим образом:

С С С С
Т.е. все четыре пересылаемых параметра восприняты программой как
строки символов. Если же выполнить эту процедуру из тела
Clipper-программы с помощью строки:



DO Cliptest WITH "string", 12, CTOD(SPACE(8)), .T.

то результат будет совсем другой:

C N D L

library: CLIPPER.LIB

Рекомендовано смотреть: DO, PRIVATE, PROCEDURE, PUBLIC, SET PROCEDURE, PCOUNT().

PRIVATE



- 84 -
Написание: PRIVATE <список переменных>

"Прячет" переменные, объявленные ранее PUBLIC.
<список переменных> - список переменных. Заметим, что PRIVATE
ALL, LIKE, EXCEPT здесь не поддерживаются.
Когда в подпрограмме переменная объявляется PRIVATE, то
существующая копия этой изменяемой становится недоступной пока
не завершится подклиппер-программа с этим объявлением.

library: CLIPPER.LIB

Рекомендовано смотреть: PARAMETERS, PUBLIC.


PROCEDURE


Написание: PROCEDURE <процедура>... RETURN

Обозначает начало подпрограммы.
<процедура> - имя подпрограммы. Может содержать до 10 символов и
должно начинаться с буквы. Каждое имя должно отличатся от имен
других подпрограмм, функций и программ.
Процедура - это блок команд, начинающийся с команды PROCEDURE.
Может располагаться в любом месте программного файла, но не
может быть вложен внутрь другой подпрограммы.

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

Следующий пример демонстрирует вызов двух подпрограмм Proc1,
Proc2:

* Main.prg
DO Proc1
DO Proc2
RETURN

PROCEDURE Proc1
? "Proc one" && Результат: Proc one
RETURN

PROCEDURE Proc2
? "Proc two" && Результат: Proc two
RETURN

library: CLIPPER.LIB

Рекомендовано смотреть: DO, SET PROCEDURE.


PUBLIC

Написание: PUBLIC <список переменных> [,clipper]

Объявляет определенные переменные действительными в любой части
программы ( на любом уровне ).

- 85 -
<список переменных> - список переменных.
clipper - параметр, представляющий собой имя логической
изменяемой, которая при объявлении ее PUBLIC становится .T..
Этот факт может быть использован в случае, когда написанная
клиппер-программа должна одинаково успешно компилироваться с помощью
Clipper и исполнятся под управлением dBASE III PLUS. Для этого
имеющиеся в программе команды, поддерживаемые только Clipper,
при исполнении в dBASE можно обойти, используя структуры
IF...ENDIF с изменяемой clipper в качестве аргумента.
Объявление несуществующей изменяемой как PUBLIC порождает новую
логическую переменную со значением .F.. То же для существующей
изменяемой делает ее доступной в любом месте программы. Нельзя
объявлять PUBLIC существующую локальную (PRIVATE) переменную. В
этом случае Clipper просто проигнорирует это объявление. Однако
PUBLIC- переменные могут быть временно "спрятаны", будучи
объявленными PRIVATE.

Примеры:
? TYPE("var1") && Результат: U
? TYPE("var2") && Результат: U
DO Ppoc1
? TYPE("var1") && Результат: C
? TYPE("var2") && Результат: U
RETURN

PROCEDURE Proc1
PUBLIC var1
var1 = "string1"
var2 = "string2"
RETURN

Следующий пример иллюстрирует способность присутствия в
программе, исполняемой под управлением dBASE, специфических
Clipper-команд:

PUBLIC clipper
@ 25, 10 SAY "Press any key to continue"
IF clipper
key = INKEY(0)
ELSE
key = INKEY()
DO WHILE key = 0
key = INKEY()
ENDDO
ENDIF

library: CLIPPER.LIB

Рекомендовано смотреть: PARAMETERS, PRIVATE.



QUIT / CANCEL

Написание: QUIT / CANCEL

Заканчивает выполнение программы, закрывает все открытые файлы и

- 86 -
возвращает управление операционной системе.

QUIT или CANCEL могут быть использованы в любом месте программы
для завершения работы и возврата в операционную систему.
Оператор RETURN, исполненный в подпрограмме высшего уровня,
выполнит те же действия.

library: CLIPPER.LIB

Рекомендовано смотреть: RETURN.


READ [SAVE]

Написание: READ [SAVE]

Включает изменение текущих GETов.

SAVE - оставляет действительными редактируемые GET, позволяя
отредактировать их еще раз другим READ. Если SAVE не
используется, то все GET после редактирования становятся
недействительными.

READ позволяет редактировать на экране все текущие GET. В
присутствии FORMAT SET, READ передает ему контроль до входа в
режим редактирования.
В процессе редактирования предоставляется способность изменять
на экране содержимое переменных, определенных с помощью GET.

Клавиши выбора объекта редактирования:
-----------------------------------------------------------
Клавиша Действие
-----------------------------------------------------------
стр.влево Символ влево. Не переводит курсор на
Ctrl-S предыдущий GET.

стр.вправо Символ вправо. По окончании текущего
Ctrl-D GET курсор переводится в начало след.

Ctrl-стр.влево Слово влево.
Ctrl-A

Ctrl-стр.вправо Слово вправо.
Ctrl-F

стр.вверх Предыдущий GET.
Ctrl-E

стр.вниз Следующий GET.
Ctrl-X, Return,
Ctrl-M

Home Первый символ GET.

End Последний символ GET.

Ctrl-Home Начало первого GET.

- 87 -

Ctrl-End Начало последнего GET.
-----------------------------------------------------------


Клавиши редактирования:
-----------------------------------------------------------
Клавиша Действие
-----------------------------------------------------------
Del Удалить символ в позиции курсора.

BackSpace Удалить символ слева от курсора.

Ctrl-T Удалить слово справа.

Ctrl-Y Удалить символы от позиции курсора до
конца GET.

Ctrl-U Восстановить исходное значение
текущего GET.
-----------------------------------------------------------


Клавиши управления режимом редактирования:
-----------------------------------------------------------
Клавиша Действие
-----------------------------------------------------------
Ins Включение режима вставки.
-----------------------------------------------------------


Клавиши управления завершением процесса редактирования:
-----------------------------------------------------------
Клавиша Действие
-----------------------------------------------------------
PgUp, PgDn Выход из READ с сохранением текущего
GET.

Return Выход из READ из последнего GET.

Esc Выход из READ без сохранения текущего
GET.
-----------------------------------------------------------


Кроме того можно покинуть READ, выполнив CLEAR, CLEAR GETS,CLEAR
ALL изнутри SET KEY-процедуры или пользовательской функции,
инициализированной VALID.



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

library: CLIPPER.LIB


- 88 -
Рекомендовано смотреть: @...GET, CLEAR GETS, SET FORMAT, LASTKEY().




RECALL


Написание: RECALL [<обл.опр.>]FOR [<условие>] WHILE [<условие>]

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

FOR - отбирает соответствующие заданному условию строки в файле
данных внутри заданной области (<обл.опр.>).
WHILE - позволяет просматривать строки начиная с текущей до
первого невыполнения условия.

Если DELETED-ON, RECALL будет работать только с одной текущей
записью или с записями, указанными в <обл.опр.>.

Пример:
USE Sales
DELETE RECORD 4
? DELETED() && Результат: .T.
RECALL
? DELETED() && Результат: .F.

Вслучае работы в сетях при употреблении RECALL для одной строки,
она должна быть предварительно обработана RLOCK(). Если же речь
идет о нескольких записях, весь файл данных должен быть
предварительно заперт FLOCK() или USE EXCLUSIVE.

library: CLIPPER.LIB

Рекомендовано смотреть: DELETE, PACK, SET DELETED, ZAP, DELETED().



REINDEX


Написание: REINDEX

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

В сетях перед употреблением REINDEX необходимо использовать USE
EXCLUSIVE.

library: CLIPPER.LIB


- 89 -
Рекомендовано смотреть: INDEX, PACK, SET INDEX, SET UNIQUE, USE.


RELEASE


Написание: RELEASE <список переменных>/[ALL [LIKE/EXCEPT <шаблон>]]

Удаляет переменные из памяти.
<список переменных> - список удаляемых переменных.
<шаблон> - маска, определяющая группу переменных,
предназначенных к удалению (LIKE), или, наоборот, защищенных от
него (EXCEPT).
Использование: в случае, если для перечисления переменных
используется список, то удаление производится независимо от
статуса изменяемой. PUBLIC и PRIVATE более высоких уровней тоже
удаляются. В случае же использования ALL (все), LIKE/EXCEPT,
команда действует только на переменные определенные в текущей
процедуре.

Необходимо заметить, что удаленные с помощью второго,
"локального" способа переменные, объявленные на этом уровне
PRIVATE, становятся вновь доступными после выхода из этой
процедуры.

Пример:
PUBLIC one
one = "1"
DO Proc2
? TYPE("one") && Результат: C
RETURN
PROCEDURE Proc2
PRIVATE one
one = "2"
DO Proc3
? TYPE("one") && Результат: U
RETURN
PROCEDURE Proc3
RELEASE one
? TYPE("one") && Результат: U
RETURN

library: CLIPPER.LIB

Рекомендовано смотреть: CLEAR ALL, CLEAR MEMORY, QUIT.



RENAME

Написание: RENAME <файл1>.<ext> TO <файл2>.<ext>

Переименовывает файл.

<файл1> - старое имя, <файл2> - новое имя.

Внимание! Перед употреблением команды файл должен быть закрыт

- 90 -
(CLOSE). Соответствующий memo (.dbt) файл должен быть также
переименован.


library: CLIPPER.LIB

Рекомендовано смотреть: COPY FILE, ERASE, RUN, FILE().



REPLACE

Написание: REPLACE [<обл.опр.>][<синоним> ->] <поле1> WITH <выр.1>
[,<поле2> WITH <выр.2>,...]
[FOR <условие>] [WHILE <условие>]

Изменяет содержимое полей в соответствии с определенными
выражениями.
<поле> - имя поля, подлежащего изменению. Тип может быть любым,
включая memo.
<выр.> - выражение, значение которого присваивается полю.

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

<обл.опр.> - часть текущего файла данных. По умолчанию
подразумевается текущая запись. В случае употребления FOR/WHILE,
<обл.опр.> по умолчанию - ALL (все строки).

FOR - отбирает соответствующие заданному условию строки в файле
данных внутри заданной области (<обл.опр.>). WHILE - позволяет
просматривать строки начиная с текущей до первого невыполнения
условия.

Необходимо учитывать, что в случае изменения содержимого поля,
являющегося ключевым, соответствующий индекс-файл перепишется и
положение указателя записей в нем изменится. Во избежании ошибок
в этом случае необходимо проделать следующее: CLOSE INDEX,
REPLACE, SET INDEX TO, REINDEX. Содержимое memo-поля также можно
изменить, указав в REPLACE соответствующую символьную строку.

Пример:
SELECT 1
USE Customer
APPEND BLANK
SELECT 2
USE Invoices
*
REPLACE Charges WITH Customer -> Markup * Cost,;
Custid WITH Customer -> Custid,;
Customer -> Last_tran WITH DATE()

В сетях в случае применения REPLACE для одной строки, она должна
быть предварительно обработана RLOCK(). Если же запись не одна,
то весь файл должен вначале быть FLOCK() или USE EXCLUSIVE. То
же относится и к полю, обрабатываемому REPLACE в невыбраной

- 91 -
рабочей области.

library: CLIPPER.LIB

Рекомендовано смотреть: APPEND, JOIN, UPDATE, STRTRAN().



REPORT FORM

Написание: REPORT FORM <файл1>/(<вырС1>) [<обл.опр.>] [FOR <условие>]
[WHILE <условие>] [TO PRINT] [TO FILE <файл2>/(<вырС2)]
[SUMMARY] [PLAIN] [HEADING <вырС3>] [NOEJECT]

Выводит табулированный и по необходимости группированный отчет с
заголовками страниц и колонок, определяемых соответственным
(.frm)-файлом.
<файл1> - имя файла, содержащего форму отчета.
<обл.опр.> - часть записей, подлежащая выводу. По умолчанию -
ALL (все).

FOR - отбирает соответствующие заданному условию строки в файле
данных внутри заданной области (<обл.опр.>). WHILE - позволяет
просматривать строки начиная с текущей до первого невыполнения
условия.
TO PRINT - организует параллельный вывод на печать.

TO FILE - загружает выводимую информацию в файл
<файл2>(отбрасывая символы "пропуск листа"(ASCII 12)). Если не
указано расширение файла, создается (.txt).

SUMMARY - подлежат выводу только группы, подгруппы и основные
общие строки (grand total lines).

PLAIN - подавляет вывод даты, номера сраницы и числа страниц.
Кроме того имя отчета и заголовки колонок печатаются только в
начале вывода.

HEADING - выводит <вырС3> в первой строке каждой страницы.

NOEJECT - подавляет прогон первой страницы, когда включено TO
PRINT.

REPORT FORM выдает отчет по форме, определенной в (.frm)-файле.
Этот файл может быть создан при помощи RL.EXE (см. главу 12,
Утилиты Clipperа).

Если необходимо помещаемый в файл (TO FILE) текст оснастить
управляющими кодами "пропуск листа" (ASCII 12), дополните свою
программу следующими командами:

SET PRINTER TO <файл>
REPORT FORM <файл> TO PRINT
SET PRINTER TO

Пример:
USE Sales INDEX Sales

- 92 -
REPORT FORM Sales TO PRINT FOR Branch = "100"

library: CLIPPER.LIB

Рекомендовано смотреть: LABEL FORM, LIST.


RESTORE

Написание: RESTORE FROM <файл>/(<вырС>) [ADDITIVE]

Восстанавливает переменные из (.mem)-файла.
<файл> - имя (.mem)-файла, загружаемого с диска.
ADDITIVE - загружаемые переменные добавляются к существующим.
Переменные с совпадающими именами переписываются, если не
являются "спрятанными" (PRIVATE). В противном случае (ADDITIVE
не выбрано) существующие переменные удаляются до того, как будут
загружегны новые.
Переменные инициализируются как локальные (PRIVATE) с областью
действия в текущей процедуре, если они не были объявлены ранее
глобальными (PUBLIC) и не используется ADDITIVE.
Пример:
демонстрирует типичное применение SAVE и RESTORE. Здесь
переменные, описывающие содержимое экрана, вначале записываются,
а потом считываются с диска.

* Генерация и использование массива хранения содержимого экрана.
SAVE SCREEN TO scr_1
SAVE ALL LIKE scr_* TO Screens
*
<команды...>
*
RESTORE FROM Screens ADDITIVE
ptr = "1"
RESTORE SCREEN FROM scr_&ptr

library: CLIPPER.LIB

Рекомендовано смотреть: RESTORE SCREEN, SAVE, SAVE SCREEN.


RESTORE SCREEN

Написание: RESTORE SCREEN [FROM <переменная>]

Использование: вывести на индикацию прежде сохраненное содержимое
экрана.
<переменная> - переменная, содержащая информацию для вывода на
экран.
Используется совместно с SAVE SCREEN для временного хранения
содержимого экрана с последующим его восстановлением.
Пример:
ans = .F.
SAVE SCREEN
@ 10, 10 CLEAR TO 12, 45
@ 10, 10 TO 12, 45 DOUBLE
@ 11, 12 SAY "Переписать существующий файл ? (y/n) " ;

- 93 -
GET ans PICTURE "Y"
READ
RESTORE SCREEN
RETURN

library: CLIPPER.LIB

Рекомендовано смотреть: RESTORE, SAVE SCREEEN.


RETURN

Написание: RETURN [<выр.>]

Использование: Заканчивает процедуру или программу, возвращая
контроль вызывающей программе или операционной системе.
<выр.> - возвращаемая величина, в случае если речь идет о
пользовательской функции.
В случае использования RETURN в программе высшего уровня,
управление передается операционной системе. В подклиппер-программах
управление передается вызывающей программе и освобождаются все
PRIVATE переменные. В процедуре или функции может быть более
одного оператора RETURN.

library: CLIPPER.LIB

Рекомендовано смотреть: CANCEL, PRIVATE, PUBLIC.

RUN

Написание: RUN/! <DOS command>/(<вырС>)

Использование: Вызов DOS-команды или программы из скомпилированной
программы пользователя.
<DOS command> - исполняемая клиппер-программа, включая резидентные
DOS-команды и COMMAND.COM.

Использование: при использовании RUN необходимо иметь
достаточный объем свободной памяти для COMMAND.COM (27К для DOS
3.2) и программу, которую надо выполнить. Путь доступа к
COMMAND.COM должен быть определен при помощи COMSPEC (по
умолчанию корневая дирректоря системного диска). Если же
COMMAND.COM не расположен на этом диске или диск был сменен,
необходимо выполнить SET COMSPEC с указанием соответствующего
пути.
Не следует использовать RUN для выполнения пользовательских
прогамм, т.к. можно потерять содержимое некоторых участков
памяти.
Чтобы получить прямой доступ в DOS можно воспользоваться
командой RUN COMMAND. В этом случае вероятно будет необходимо
изменить стандартное DOS-сообщение (prompt), например для того,
чтобы дать инструкции, как вернуться в Clipper-программу. Для
реализации такого процесса необходимо создать файл пакетной
обработки, позволяющий установить форму сообщения, загрузить
пользовательскую программу и после ее завершения восстановить
прежнюю форму DOS-сообщения. Такой файл может выглядеть
следующим образом:

- 94 -

echo off
prompt Dir: $p$_Type EXIT to return.$_$g
<пользовательская клиппер-программа>
prompt $p$g

Следующий пример демонстрирует возможности использования RUN в
комбинации с MEMOREAD() и MEMOWRIT() для создания
пользовательской функции редактирования memo-поля:

* Main.prg
success = EditorMemo ("NE +", "Notes")
FUNCTION EditorMemo
PARAMETERS editor, memofld
IF MEMOWRIT("Clipedit.tmp", &memofld)
RUN (editor + " Clipedit.tmp")
REPLACE &memofld WITH MEMOREAD ("Clipedit.tmp")
RETURN 0
ELSE
RETURN -1
ENDIF

Функция EditorMemo() возвращает -1 в случае ошибки и 0 при
успешном завершении.
library: CLIPPER.LIB

Рекомендовано смотреть: INDEX, PACK, SET INDEX, SET UNIQUE, USE.



SAVE

Написание: SAVE TO <file>/(<вырС>) [ALL [LIKE/EXCEPT <шаблон>]]
Использование: загрузка переменных на хранение в (.mem)-файл.
<file> - имя файла для хранения переменных. Расширение по
умолчанию (.mem).
<шаблон> - маска, определяющая группу переменных.
Использование: SAVE организует хранение переменных без
каких-либо ссылок на их область действия (локальные или
глобальные). Необходимо отметить, что "спрятанные" переменные
SAVE не обрабаттывает, даже если они PUBLIC. SAVE также не
обрабатывает массивы.
Пример:
one = "1"
SAVE TO Temp
one = "2"
RESTORE FROM Temp
? one && результат: 1

library: CLIPPER.LIB

Рекомендовано смотреть: RESTORE, RESTORE SCREEN, SAVE SCREEN.



SAVE SCREEN


- 95 -
Написание: SAVE SCREEN [TO <переменная>]

Использование: сохранить текущее содержимое экрана в буфере или
изменяемой.

<переменная> - имя изменяемой. Создается символьная переменная
размером 4000 байт.
Использование: в паре с RESTORE SCREEN. Удобно хранить
содержимое нескольких последовательных картинок, используя
элементы массива, но при этом не может быть организовано
хранение этой информации на диске, т.к. SAVE TO не воспринимает
массивы.

library: CLIPPER.LIB

Рекомендовано смотреть: RESTORE SCREEN, SAVE.



SEEK

Написание: SEEK <выр.>

Использование: поиск записей по совпадению индексного ключа.
<exp> - выражение, сравниваемое с ключом.
Использование: поиск начинается с первого ключа в индекс-файле и
заканчивается в случае совпадения <exp> и очередного ключа или в
случае нахождения ключа со значением большим, чем <exp>. В
случае совпадения указатель записей устанавливается в
соответствующую позицию. Если SOFTSEEK-OFF (по умолчанию) и
совпадения не найдено, то указатель записей получает значение
LASTREC()+1, EOF() = .T., FOUND() = .F.. В случае SOFTSEEK-ON и
запись не найдена, указатель получает значение, равное позиции
первой строки с ключем большим, чем контрольное значение.
FOUND() и EOF() в этом случае возвращают .F..
Пример:
USE Sales INDEX Branch
? INDEXKEY(0) && резултат: BRANCH
? Branch && резултат: 100
SEEK "100"
?FOUND(), EOF(), RECNO() && резултат: .T. .F. 1

library: CLIPPER.LIB

Рекомендовано смотреть: FIND, INDEX, LOCATE, SET DELETED, SET EXACT, SET INDEX,
SET SOFTSEEK, USE, EOF(), FOUND(),RECNO().



SELECT

Написание: SELECT <рабочая область>/<синоним>/(<вырЧ>)

Использование: сменить текущую рабочую область.
<рабочая область> - номер рабочей области (число от 0 до 254
включительно).
<синоним> - имя рабочей области, в которой существует открытый

- 96 -
файл данных. Первые 10 рабочих областей могут быть определены
буквами от A до J.
<вырЧ> - числовое выражение, имеющее значение от 0 до 254.
Использование: Clipper поддерживает 254 рабочих области. При
запросе области 0 будет выбрана первая неиспользуемая. В каждой
рабочей области можно открыть один файл данных и до 15
индекс-файлов. Каждая рабочая область имеет следующие атрибуты:

Атрибут Функция
----------------------------------------------------------------
Имя ALIAS()
Номер SELECT()
Файл данных ALIAS()
Индекс-файл INDEXORD()/INDEXKEY()
Исключительность FLOCK()/NETERR()
Количество записей LASTREC()/RECCOUNT()
Количество полей FCOUNT()
Номер строки RECNO()
Флаг начала файла BOF()
Флаг конца файла EOF()
Проверка флага FOUND()
----------------------------------------------------------------

library: CLIPPER.LIB

Рекомендовано смотреть: USE, SET INDEX, ALIAS(), SELECT()



SET ALTERNATE

Написание: SET ALTERNATE TO [<file>/(<expC>)]

SET ALTERNATE on/OFF/(<expL>)

Использование: Перенаправление вывода данных для команд кроме
@...SAY...GET в текстовый файл.
Указанием имени файла <file> в качестве аргумента параметра TO
открывается стандартный ASCII текстовой файл с расширением по
умолчанию (.txt). Имя файла может включать свое собственное
расширение, дисковод и/или путь доступа. Если указанный файл уже
существует, то его содержимое перепишется.

SET ALTERNATE ON/OFF разрешает одновременный вывод информации
стандартным для используемой команды способом и засылку на
хранение в файл. При SET ALTERNATE OFF файл не закрывается.
Описываемые файлы никак не связаны с рабочими областями.
Одновременное существование двух файлов невозможно. Чтобы
закрыть файл необходимо использовать CLOSE ALTERNATE, CLOSE ALL
или SET ALTERNATE TO без аргументов. Следует отметить, что
записать информацию, выдаваемую @...SAY на диск можно при помощи
SET PRINTER TO <file name>.
Пример:
SET ALTERNATE TO Listfile
SET ALTERNATE ON
USE Customers
DO WHILE .NOT. EOF()

- 97 -
? Lastname, City
SKIP
ENDDO
USE
CLOSE ALTERNATE

library: CLIPPER.LIB

Рекомендовано смотреть: CLOSE, DISPLAY [TO FILE], LABEL FORM [TO FILE],
LIST [TO FILE], REPORT FORM [TO FILE], SET PRINTER TO,
TEXT [TO FILE], FCLOSE(), FCREATE(), FERROR(), FOPEN(),
FREAD(), FREADSTR(), FSEEK(), FWRITE().



SET BELL

Написание: SET BELL on/OFF/(<expL>)

Использование: Выключатель звукового сигнала экранных операций.

Сигнал используется в следующих случаях:

- при введении последнего символа в GET;

- при ошибки типа данных в GET.

Задать в программе посылку звукового сигнала можно, указав ?? CHR(7).
Пример:
SET BELL OFF
SET FORMAT TO No_bell
DO WHILE LASTKEY() <> 27
READ
ENDDO
CLOSE FORMAT
SET BELL ON

library: CLIPPER.LIB

Рекомендовано смотреть: SET CONFIRM, CHR()

SET CENTURY

Написание: SET CENTURY on/OFF/(<expL>)

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

При SET...OFF цифры столетия не выводятся и не могут быть
введены. Если в процессе обработки данных получилась дата не
двадцатого столетия, то всеравно при SET...ON будут
индицироваться только последние две цифры данных. Вводимым же
датам автоматически присваивается двадцатое столетие.

Clipper поддерживает даты в диапазоне от 01/01/0100 до
12/31/2999.


- 98 -
Пример:
SET CENTURY OFF
? DATE() && результат: 09/01/87
SET CENTURY ON
? DATE() && результат: 09/01/1987
*
SET CENTURY (DATE() >= CTOD("01/01/2000"))

library: CLIPPER.LIB

Рекомендовано смотреть: SET DATE, CTOD(), DATE(), DTOC(), DTOS(), YEAR().


SET COLOR

Написание: SET COLOR TO [<стандартный>[,<выделенный>][,<граничный>]
[,<фоновый>][,<отключеный>]]/(<вырС>)

Использование: определение цветов.

стандартный/выделенный - это пары цветов (символ/фон).
стандартный - используется для всех @...SAY и для ?... .
выделенный - для GET.
граничный - цвет границы экрана.
фоновый - цвет фона. Не поддерживается на некоторых машинах,
снабженных драйверами Nantucket.
отключенный - цвет невыбранного GET.

Есть способность задать повышенную интенсивность и мигание
индицируемого элемента. Повышенная интенсивность задается
указанием символа "+", а мигание символом "*". Каждый атрибут
имеет отношение к цвету написанного (не фон) и место его
указания в списке не имеет значения.

Аргументы по умолчанию: W/N, N/W,,,N/W.

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

Таблица обозначения цветов:
----------------------------------------------------------------
Цвет Номер Буква
----------------------------------------------------------------
Черный 0 N
Голубой 1 B
Зеленый 2 G
Бирюзовый 3 BG
Красный 4 R
Пурпурный 5 RB
Коричневый 6 GR
Белый 7 W
Серый - N+
Желтый - GR+
Без цвета - X
Подчеркивание - U
Негатив - I
----------------------------------------------------------------

- 99 -

Внимание: SET COLOR TO с использованием номеров не
поддерживается, если при компоновке программы участвует
ANSI.OBJ.

Для обеспечения централизованной установки цветов удобно
использовать в качестве аргументов SET COLOR TO переменные:

c_says = "W/N, BG+/B,,,W/N"
SET COLOR TO &c_says
*
SET COLOR TO (c_says)

Пример: вывод текущего GET красным на белом, в то время как
остальные выводятся черным на белом.

color = "W/N,R/W,,,N/W"
SET COLOR TO &color
STORE SPACE(10) TO one, two, three
@ 1,1 SAY "Enter One: " GET one
@ 2,1 SAY "Enter Two: " GET two
@ 3,1 SAY "Enter Three: " GET three
READ

library: CLIPPER.LIB

Рекомендовано смотреть: ISCOLOR()


SET CONFIRM

Написание: SET CONFIRM on/OFF/(<expL>)

Использование: Выбор между двумя способами завершения GET: по
полному заполнению или по вводу специального символа.

Использование: Для завершения GETов Clipper использует следующие
символы: Ctrl-Home, Ctrl-End, стр.вверх, стр.вниз, Ctrl-C, PgUp,
Ctrl- W, PgDn, Esc, Enter.

При использовании MENU TO, CONFIRM не работает.

library: CLIPPER.LIB

Рекомендовано смотреть: @...GET, READ, SET BELL.



SET CONSOLE

Написание: SET CONSOLE ON/off/(<expL>)

Использование: Выключатель индикации командных сообщений.
Использование: Подавляет или разрешает индикацию сообщений для
всех команд вывода списков, включая сообщения команд ACCEPT,
INPUT, WAIT. Исключение составляют такие экранные команды, как:
@...SAY...GET, @...PROMPT, @...BOX, @...CLEAR TO, @...TO, CLEAR.

- 100 -

Пример:
USE Sales
SET CONSOLE OFF
LIST Branch TO PRINT
SET CONSOLE ON

library: CLIPPER.LIB

Рекомендовано смотреть: SET DEVICE.


SET CURSOR

Написание: SET CURSOR ON/off/(<expL>)

Использование: выключатель индикации курсора.
Использование: Ввод и вывод при SET...OFF не претерпевает
никаких принципиальных изменений. Командой удобно пользоваться
для запрета индикации курсора во время различных экранных
выводов и разрешать индикацию только во время ввода с
клавиатуры.

Пример:
SET CURSOR OFF
ans = .N.
@ 24, 0
@ 24, 15 SAY " Закончить работу [Y/N] ?" GET ans PICTURE "Y"
READ
SET CURSOR ON

library: CLIPPER.LIB

Рекомендовано смотреть: SET CONSOLE.



SET DATE

Написание : SET DATE AMERICAN/ANSI/BRITISH/FRENCH/GERMAN/ITALIAN

Использование: установка формата вывода данных типа "дата".
Параметры: предоставляется способность пользоваться следующими
форматами:

AMERICAN mm/dd/yy
ANSI yy.mm.dd
BRITISH dd/mm/yy
FRENCH dd/mm/yy
GERMAN dd.mm.yy
ITALIAN dd-mm-yy

Использование: SET DATE действует на всю программу. Удобно
предусмотреть в начале программы секцию настройки на
определенный формат. Начальную установку можно произвести в DOS:

SET CLIP_DATE = BRITISH

- 101 -

Далее в самой программе:

date_set = UPPER(GETE("CLIP_DATE"))
DO CASE
CASE date_set = "AMERICAN"
SET DATE AMERICAN
CASE date_set = "ANSI"
SET DATE ANSI
CASE date_set = "BRITISH"
SET DATE BRITISH
CASE date_set = "FRENCH"
SET DATE FRENCH
CASE date_set = "GERMAN"
SET DATE GERMAN
CASE date_set = "ITALIAN"
SET DATE ITALIAN
ENDCASE

library: CLIPPER.LIB

Рекомендовано смотреть: SET CENTURY, CTOD(), DATE(), DTOC().



SET DECIMALS

Написание: SET DECIMALS TO <expN>
Использование: Установка количества знаков после запятой, выводимых
в результате работы функций и различных вычислений.

<expN> - количество знаков после запятой.
В случае SET FIXED-OFF под действие SET DECIMALS попадают
SQRT(), EXP(), LOG() и деление. Все другие вычисления определяют
количество знаков исходя из результатов вычислений. В случае же
SET FIXED-ON вывод всех числовых результатов подчиняется SET
DECIMALS.
Пример:
SET DECIMALS TO 2 && Значение по умолчанию
? 2/4 && Результат: 0.50
? 1/3 && Результат: 0.33
SET DECIMALS TO 4
? 2/4 && Результат: 0.5000
? 1/3 && Результат: 0.3333

library: CLIPPER.LIB

Рекомендовано смотреть: SET FIXED.



SET DEFAULT

Написание: SET DEFAULT TO <drive>[:<path>]

Использование: Установка дисковода и директории для размещения
созданных пользовательской программой файлов.

- 102 -
<drive> - имя дисковода или буква.
<path> - имя директории.

Если указывается и дисковод и директория, то после буквы
дисковода нужно указать (:). При употреблении команды без
аргументов устанавливается последняя используемая для текущего
дисковода директория.
Использование: По умолчанию устанавливается дисковод и
директория, используемые при запуске пользовательской программы.
Для установления пути доступа к файлам необходимо пользоваться
SET PATH. SET DEFAULT не изменяет установленные DOS дисковод и
директорию.
Пример:
SET PATH TO
? FILE("Sales.dbf") && Рузультат: .F.
SET DEFAULT TO C:\CLIPPER\FILES
? FILE("Sales.dbf") && Рузультат: .T.

library: CLIPPER.LIB

Рекомендовано смотреть: SET PATH.



SET DELETED

Написание: SET DELETED on/OFF/(<expL>)

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

Использование: В случае SET DELETED ON большинство команд будут
игнорировать помеченные для удаления строки. Тем не менее
сохраняется способность обращатся к строки по ее номеру (GOTO,
например). Также SET DELETED ON не оказывает никакого действия
на INDEX и REINDEX. Однако для RECALL ALL статус SET DELETED
имеет значение.
Пример:
USE Sales
? LASTREC() && Результат: 84
DELETE RECORD 4
COUNT TO num
? num && Результат: 84
SET DELETED ON
COUNT TO num
? num && Результат: 83

library: CLIPPER.LIB

Рекомендовано смотреть: DELETE, INDEX, SET INDEX, USE, DELETED().


SET DELIMITERS

Написание: SET DELIMITERS TO [<expC>]/DEFAULT

SET DELIMITERS on/OFF/(<expL>)

- 103 -

Использование: Определяет символ-разделитель, используемый в GET.

SET...ON/OFF - выключатель индикации разделителей.
SET...TO <expC> - определяет один или два символа-разделителя.
Указание одного символа вызывает его использование и в начале и
в конце выделяемого выражения. Указание DEFAULT или отсутствие
символов устанавливает символ-разделитель (:).

Использование: Пробел может быть использован в символьном
выражении (<expC>) для подавления как правого так и левого (или
обоих) ограничителей.
Примеры:
В этом примере ограничителями объявляется пара символов ([]).

mvar = SPACE (5)
SET DELIMITERS TO "[]"
SET DELIMITERS ON
@ 1, 0 SAY "Enter" GET mvar
READ
Результат:
Enter [ ]

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

mvar = SPACE (5)
SET DELIMITERS TO ": "
SET DELIMITERS ON
@ 1, 0 SAY "Enter" GET mvar
READ
Результат:
Enter :

library: CLIPPER.LIB

Рекомендовано смотреть: @...GET.



SET DEVICE

Написание: SET DEVICE TO <SCREEN/print>

Использование: Перенаправление вывода @...SAY на экран или принтер.

SCREEN - устанавливает вывод на экран независимо от состояния
SET PRINT или SET CONSOLE.

PRINT - направляет все выводы на устройство, установленное в SET
PRINTER TO. Этим устройством может быть принтер, сетевой буфер
или файл.

Использование: В случае SET DEVICE TO PRINT, @...SAY выводят
информацию на принтер и не повторяют ее на экране. @...GET
игнорируются.


- 104 -
Посылая @...SAY на принтер, Clipper выполняет автоматический
прогон страницы всякий раз, когда текущая позиция головки
оказывается меньше последней напечатанной. Однако EJECT
сбрасывает значения указателей строки и столбца в 0. Кроме того
можно установить новые значения этих величин при помощи
SETPRC().

Чтобы направить выход @...SAY в файл, можно воспользоваться SET
PRINTER TO <file name> после SET DEVICE TO PRINT.
Пример:
SET DEVICE TO PRINT
@ 2, 10 SAY " Печать"
EJECT

library: CLIPPER.LIB

Рекомендовано смотреть: @...SAY, EJECT, SET PRINTER TO, PROW(), PCOL(), SETPRC().



SET ESCAPE

Написание: SET ESCAPE ON/off/(<expL>)

Использование: Выключатель возможности завершать программу
последовательностью Alt-C или выходить из READ при помощи Esc.

Использование: В случае SET ESCAPE ON ввод Alt-C вызывает
индикацию сообщения: (Q/A/I), где:

Q - выход (закрывает все файлы);

А - выход в DOS;

I - продолжение выполнения текущей команды.

SET ESCAPE OFF делает невозможным завершение программы и выход
из READ при помощи Alt-C и Esc. Однако SET KEY улавливает код
ключа для Esc, поэтому имеется способность определять полученный
ключ в подпрограмме.

library: CLIPPER.LIB

Рекомендовано смотреть: READ, SET KEY.



SET EXACT

Написание: SET EXACT on/OFF/(<expL>)

Использование: Определяет способ сравнения двух символьных строк.
Использование: В случае SET EXACT OFF две символьные строки
сравниваются по следующим правилам:

1. Строки объявляются одинаковыми (.T.).


- 105 -
2. Строки посимвольно проверяются на совпадение. Процесс
заканчивается либо по окончании строки, стоящей справа от
оператора, либо при обнаружении первого несовпадения (.F.).

Здесь необходимо отметить, что:

- Две строки могут оказаться равными имея разную длину.

- Строка, имеющая длину отличную от нуля, может оказаться равно
нулевой строке. Такое может случится когда нулевая строка будет
располагаться справа от оператора. В этом случае не будет
произведено ни одного сравнения и результат останется неименным
- (.T.).

При SET EXACT ON чтобы получить результат (.T.) две строки
должны совпадать полностью за исключением завершающих пробелов.
Примеры:
SET EXACT OFF
? "123" = "12345" && Результат: .F.
? "12345" = "123" && Результат: .T.
? "123" = " " && Результат: .T.
? " " = "123" && Результат: .F.

SET EXACT ON
? "123" = "123 " && Результат: .T.
? " 123" = "123" && Результат: .F.

library: CLIPPER.LIB

Рекомендовано смотреть: DISPLAY, FIND, LIST, LOCATE, SEEK, ==.



SET EXCLUSIVE

Написание: SET EXCLUSIVE ON/off/(<expL>)

Использование: Переключатель автоматического исключительного
доступа в сети к файлам данных и их сопровождению ( (.mem),
(.ntx)).
В случае SET EXCLUSIVE ON все файйлы данных и файлы их
сопровождающие при их инициализации USE получают статус
"неделимых" и не могут быть использованы другими пользователями
до их закрытия. В случае же SET EXCLUSIVE OFF исключительность
доступа, если таковая необходима, должна контролироваться при
помощи RLOCK(), FLOCK() и USE...EXCLUSIVE.

library: CLIPPER.LIB

Рекомендовано смотреть: USE...EXCLUSIVE, FLOCK(), RLOCK().



SET FILTER

Написание: SET FILTER TO [<условие>]


- 106 -
Использование: Представить файл данных таким образом, как если бы
он состоял только из записей, удовлетворяющих указанному условию
(фильтрация).

<условие> - условие фильтрации. Чтобы отменить условие
фильтрации, необходимо выполнить команду без аргументов.

Использование: Каждая рабочая область может иметь один активный
фильтр. После определения условия фильтрации необходимо
активировать фильтр, изменив значение текущего указателя
записей. Удобно для этой цели пользоваться GO TOP.
Аналогично SET DELETED, фильтр не действует на выполнение команд
INDEX и REINDEX. В то же время можно обращатьсся к задержанным
при фильтрации записям, используя команды непосредственного
доступа (GOTO, LIST и т.д.).
Примеры:
USE Customers
SET FILTER TO Zipcode > "50000"
GO TOP
LIST Lastname, Zipcode
SET FILTER TO

library: CLIPPER.LIB

Рекомендовано смотреть: SET DELETED.



SET FIXED

Написание: SET FIXED on/OFF/(<expL>)

Использование: Переключатель контроля числового вывода в
соответствии с текущим состоянием SET DECIMAL.

ON - вывод всех чисел производится под контролем SET DECIMAL
(два знака по умолчанию).

OFF - количество позиций зависит от типа исполняемой операции и
следует следующим правилам:

Операция Количество знаков после запятой
----------------------------------------------------------------
Сложение То же, что и у операнда с максимальным

Вычитание значением этого параметра.

Умножение Сумма значений параметров.

Деление SET DECIMALS

Возведение в степень SET DECIMALS

EXP(),LOG(),SQRT() SET DECIMALS

VAL() То же, что и у операнда.


- 107 -
library: CLIPPER.LIB

Рекомендовано смотреть: SET DECIMALS, EXP(), LOG(), SQRT(), VAL().