ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 12

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            POP POPUP            є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Выталкивает всплывающее меню из стека
    Синтаксис
POP POPUP 
    Замечания
Новая в FoxPro 2.0
    Смотри также
ACTIVATE POPUP, DEFINE POPUP, POP MENU, PUSH MENU, PUSH POPUP

    Описание
    Команда POP  POPUP позволяет вам восстанавливать всплывающее меню,
помещенное в стек меню.  Эта команда при использовании с командой PUSH
POPUP позволяет сохранять всплывающее меню, изменять всплывающее меню,
а затем восстанавливать всплывающее меню в его исходное состояние.
    Всплывающие меню  располагаются  и  удаляются  из  стека в порядке
"последним пришел - первым ушел".


ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

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

DEFINE POPUP popexam FROM 05,05

DEFINE BAR 1  OF popexam PROMPT 'One'
DEFINE BAR 2  OF popexam PROMPT 'Two'
DEFINE BAR 3  OF popexam PROMPT 'Three'
DEFINE BAR 4  OF popexam PROMPT 'Four'

ACTIVATE POPUP popexam NOWAIT
PUSH POPUP popexam
WAIT 'Popup pushed' WINDOW

RELEASE BAR 2 OF popexam

POP POPUP popexam
WAIT 'Popup popped' WINDOW

DEACTIVATE POPUP popexam

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              POPUP              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает в виде символьной строки имя активного всплывающего меню
    Синтаксис
POPUP()
    Возвращаемый тип
Символьный
    Смотри также
ACTIVATE POPUP, BAR(), DEFINE BAR, DEFINE POPUP, ON SELECTION POPUP

    Описание
    Функция POPUP() возвращает в виде символьной строки имя  активного
всплывающего меню.
    Всплывающее меню должно быть описано и  активизировано  для  того,
чтобы функция   POPUP()   возвратила   его   имя.   Всплывающие   меню
определяются и активизируются командами DEFINE POPUP и ACTIVATE POPUP.
Если нет активного всплывающего меню,  или функция POPUP() была выдана
из Командного окна, функция POPUP() возвращает пустую строку.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

CLEAR
DEFINE MENU mainmenu
DEFINE PAD invoices  OF mainmenu PROMPT ' \
ENDPRINTJOB
    Смотри также
ON PAGE

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

    * Пересылает  на  принтер  стартовые  управляющие коды и сохраняет
      системную  переменную  _PSCODE.  Для  получения   более   полной
      информации смотрите    главу   Системные   переменные   в   этом
      руководстве и изучите руководство по работе вашего принтера  для
      получения более полной информации об управляющих кодах.

    * Выводит страницу,  если системная переменная _PEJECT установлена
      в "BEFORE" или "BOTH".

    * Устанавливает  системную  переменную  _PCOLNO  в  0.  Переменная
      _PCOLNO сохраняет число колонок принтера.

    В процессе работы команда ENDPRINTJOB:

    * Пересылает  управляющие  коды  окончания работы на принтер.  Это
      позволяет  вам  переустановить   принтер   в   его   изначальную
      конфигурацию, до начала выполнения команды PRINTJOB. Управляющие
      коды  окончания  работы  загружаются  в   системную   переменную
      _PECODE.

    * Выводит страницу,  если системная переменная _PEJECT установлена
      в "AFTER" или "BOTH".

    * Возвращается  назад  для  вывода  на  печать  следующей   копии.
      Количество  копий  определяется  системной  переменной _PCOPIES.
      Когда число напечатанных копий станет равно величине  переменной
      _PCOPIES, FoxPro выйдет из цикла. Управляющая программа начинает
      работать с оператора,  непосредственно следующего за  оператором
      ENDPRINTJOB.

    Команды PRINTJOB  и  ENDPRINTJOB  могут  быть  выполнены  только в
пределах программы. Вы не можете сделать команды PRINTJOB вложенными.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є           PRINTSTATUS           є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает значение "истинно",  когда принтер  или  устройство  печати
находится в состоянии готовности
    Синтаксис
PRINTSTATUS()
    Возвращаемый тип
Логический
    Смотри также
SET DEVICE, SET PRINTER, SYS(13)

    Описание
    Эта функция  возвращает  значение  "истинно",  когда  принтер  или
устройство печати находится в состоянии готовности,  и "ложно" (.F.) в
противном случае.
    Функция PRINTSTATUS()  подобна  функции SYS(13),  однако,  SYS(13)
возвращает READY или OFFLINE, а не "истинно" и "ложно".

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Примеры             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

? PRINTSTATUS()

.F.

*** Пример программы ***

STORE PRINTSTATUS() TO ready
IF NOT ready
        WAIT 'Make sure printer is attached and turned on!' WINDOW
ELSE
        WAIT 'Printer is ready!' WINDOW
ENDIF

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             PRIVATE             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Определяет локальные переменные памяти или массивы
    Синтаксис
PRIVATE 

PRIVATE ALL
        [LIKE  | EXCEPT ]
    Смотри также
DIMENSION, PUBLIC

    Описание
    Команда PRIVATE  позволяет скрывать переменные памяти или массивы,
определенные в ранее выполняемой  программы,  для  текущей  программы.
Скрытие  переменных,  созданных  в  программах  более высокого уровня,
позволяет манипулировать переменными с теми же именами без воздействия
на   значения   скрытых  переменных.  Когда  заканчивается  выполнение
программы,  в которой был оператор PRIVATE,  все переменные и массивы,
которые имели те же имена, что и переменные и массивы, перечисленные в
команде PRIVATE будут восстановлены.
    Внимание!!!
    Команда PRIVATE  не  создает  переменные;  она   просто   скрывает
переменные, объявленные   в  программах  более  высокого  уровня,  для
текущих программ.

    Дополнительные опции

    Список переменных  памяти  или  массивов,   объявляемых   командой
PRIVATE.

PRIVATE ALL LIKE 
    PRIVATE ALL LIKE  скрывает все переменные памяти и  массивы,
которые соответствуют   "скелету"   .   Скелет  может  содержать
метасимволы ? и *.

PRIVATE ALL EXCEPT 
    PRIVATE ALL   EXCEPT    скрывает  все  переменные  памяти  и
массивы,  кроме  соответствующих  "скелету"   .   Скелет   может
содержать метасимволы ? и *.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

* Пример программы, демонстрирующей команду PRIVATE
SET TALK OFF
val1 = 10
val2 = 15
DO down
? val1, ? val2

PROCEDURE down
PRIVATE val1
val1 = 50
val2 = 100
? '       Val1       Val2'
? val1, val2
RETURN

Val1   Val2
50     100
10     100

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             PRMBAR              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает приглашение команды всплывающего меню
    Синтаксис
PRMBAR(, )
    Параметры
  Имя всплывающего меню
  Номер строки
    Возвращаемый тип
Символьный
    Замечания
Новая в FoxPro 2.0
    Смотри также
CNTBAR(), GETBAR(), DEFINE BAR, DEFINE POPUP, MRKBAR(), PRMPAD()

    Описание
    Всплывающие меню создаются командами DEFINE POPUP  и  DEFINE  BAR.
Команда DEFINE  POPUP  создает всплывающее меню,  а DEFINE BAR создает
строки меню.  Функция PRMBAR() возвращает приглашение в строке (текст,
который возникает в строке).
    И всплывающее   меню,  и  строка  всплывающего  меню  должны  быть
определены перед использованием PRMBAR(), иначе будет выдано сообщение
об ошибке.  Всплывающее меню не обязано быть активным для того,  чтобы
возвратить приглашение строки.
    Если строка   всплывающего   меню  была  создана  со  специальными
символами "горячей   клавиши"   (\<)   или   опции   блокировки   (\),
возвращается только   приглашение.   Специальные   символы  удаляются.
Функция PRMBAR() возвращает пустую строку,  если  строка  всплывающего
меню является разделителем. Разделители всплывающего меню создаются со
специальными символами  \.  Пустая  строка  возвращается  также,  если
строка создана без приглашения.

    Параметры

    Символьное выражение  задает имя всплывающего меню.


    Используйте номер   строки  .  Возвращается  приглашение  из
строки, номер которой был задан.  Например,  если  равно  1,  то
возвращается приглашение  из  первой строки,  если  равно 2,  то
возвращается приглашение из второй строки и т. д. Если  меньше 1
или больше  числа  линеек  во всплывающем меню,  выдается сообщение об
ошибке "No  such  menu/item  is  defined"  ("Такое   меню/элемент   не
определено").

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

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

* Эта программа называется PRMBAR.PRG

CLEAR
SET TALK OFF
DEFINE PAD enviro OF _MSYSMENU PROMPT 'E\ 25
        CASE PRMBAR('enviro', i) = 'Sticky'
                SET MARK OF BAR i OF enviro TO  SET('STICKY') = 'ON'
        ENDCASE
ENDFOR

PROCEDURE enviropop
DO CASE
CASE PROMPT() = 'Status'
        IF MRKBAR('enviro',BAR())
                   SET STATUS OFF
                   SET MARK OF BAR BAR() OF enviro TO .F.
        ELSE
                   SET STATUS ON
                   SETMARK OF BAR BAR() OF enviro TO .T.
        ENDIF
CASE PROMPT() = 'Clock'
        IF MRKBAR('enviro',BAR())
                   SET CLOCK OFF
                   SET MARK OF BAR BAR() OF enviro TO .F.
        ELSE
                   SET CLOCK ON
                   SET MARK OF BAR BAR() OF enviro TO .T.
        ENDIF
CASE PROMPT() = 'Extended Video'
        IF MRKBAR('enviro',BAR())
                   SET DISPLAY TO VGA25
                   SET MARK OF BAR BAR() OF enviro TO .F.
        ELSE
                   SET DISPLAY TO VGA50
                   SET MARK OF BAR BAR() OF enviro TO .T.
        ENDIF
CASE PROMPT() = 'Sticky'
        IF MRKBAR('enviro',BAR())
                   SET STICKY OFF
                   SET MARK OF BAR BAR() OF enviro TO .F.
        ELSE
                   SET STICKY ON
                   SET MARK OF BAR BAR() OF enviro TO .T.
        ENDIF
ENDCASE

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             PRMPAD              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает текст команды пункта меню
    Синтаксис
PRMPAD(, )
    Параметры
  Имя линейки меню
  Имя пункта меню
    Возвращаемый тип
Символьный
    Замечания
Новая в FoxPro 2.0
    Смотри также
CNTBAR(), GETBAR(), DEFINE BAR, DEFINE POPUP, MRKPAD(), PRMBAR()

    Описание
    Пункты меню создаются командами DEFINE MENU и DEFINE PAD.  Команда
DEFINE  MENU  создает линейку меню,  а DEFINE PAD создает пункты меню.
Функция PRMPAD()  возвращает  приглашение  в  пункте  (текст,  который
возникает в пункте).
    И линейка  меню,  и  пункт  меню  должны  быть  определены   перед
использованием  PRMPAD(),  иначе  будет  выдано  сообщение  об ошибке.
Линейка меню не обязана  быть  активной  для  того,  чтобы  возвратить
приглашение пункта.
    Если пункт меню был  создан  со  специальными  символами  "горячей
клавиши"   (\<)   или   опции   блокировки  (\),  возвращается  только
приглашение.   Специальные   символы   удаляются.   Функция   PRMPAD()
возвращает пустую строку, если пункт был создан без приглашения.

    Параметры

    Символьное выражение  задает имя линейки меню.


    Символьное выражение  задает имя пункта меню.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    В следующем примере создается линейка меню с именем  PRMEXAMPLE  с
тремя пунктами меню.  Указатели "горячих клавиш" и опции блокировки не
будут возвращаться из пунктов TWO и  THREE.  Меню  активизируется  для
того, чтобы  показать  пункты меню,  и удаляется с экрана и из памяти,
когда пункт выбирается.

CLEAR
SET TALK OFF
STORE 'prmexample' TO mpopname

DEFINE MENU prmexample BAR AT LINE 1
DEFINE PAD one OF prmexample PROMPT 'This will be returned'
DEFINE PAD two OF prmexample PROMPT '\
    Смотри также
FUNCTION, PARAMETERS,   PARAMETERS(),   RETURN,   SET  PROCEDURE,  SET
UDFPARMS, USER-DEFINED FUNCTIONS (UDFs)

    Описание
    Во многих программах некоторые подпрограммы часто повторяются. Для
уменьшения   размера   и    сложности    программ    определите    эти
общеупотребительные   подпрограммы   как  процедуры.  Здесь  мы  будем
называть эти процедуры подпрограммами.
    Команда PROCEDURE    является утверждением внутри
программы.  Он определяет начало каждой  подпрограммы  в  программе  и
идентифицирует подпрограмму по имени.  Имя подпрограммы может включать
в себя до 10 символов.  Оно должно  начинаться  с  буквы  или  символа
подчеркивания и  может  состоять  из  любой  комбинации  букв,  цифр и
символов подчеркивания.
    После утверждения PROCEDURE  следует серия команд,
которая  составляет  подпрограмму.  В  качестве  последнего  оператора
подпрограммы  необязательно  использовать  оператор  RETURN,  так  как
неявный оператор RETURN  автоматически  выполняется  после  последнего
оператора подпрограммы.
    Когда процедура выполняется в цикле DO  ,  FoxPro
ищет  подпрограмму  в  определенном  порядке.  Сначала находится файл,
содержащий команду DO . Если нужной процедуры там нет,
FoxPro  будет  искать  файл  процедур,  открытый с помощью команды SET
PROCEDURE TO.  Если подпрограмма не может быть найдена  в  процедурном
файле,  или  если  процедурный  файл  не  может  быть  открыт,  FoxPro
просматривает программы в цепочке выполнения.  Файлы программ начинают
просматриваться   с   последней  выполненной  программы  и  до  первой
выполненной программы.
    Если подпрограмма  по  прежнему  не  найдена,  FoxPro  ищет  ее  в
автономном программном файле.  Если программный файл найден, программа
выполняется,  иначе  возвращается  сообщение  об ошибке "File does not
exist" ("Файл не найден").

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

SET CENTURY ON
? longdate({08/19/89})

Saturday, August 19, 1989

PROCEDURE longdate
PARAMETER mdate
RETURN CDOW(mdate) + ', ' + MDY(mdate)

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             PROGRAM             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает имя   программы,  выполняющейся  в  настоящий  момент,  или
программы, которая была выполнена при возникновении ошибки.
    Синтаксис
PROGRAM([])
    Параметры
  Уровень вложенности программы
    Возвращаемый тип
Символьный
    Смотри также
DO, LINENO(), MESSAGE, SYS(16)

    Описание
    Функция PROGRAM()   возвращает   имя  программы,  выполняющейся  в
настоящий  момент,  или  программы,   которая   была   выполнена   при
возникновении ошибки.  Эта  функция полезна для устранения последствий
ошибок. Она подобна функции SYS(16).

    Параметр

    Численный выражение   ,   указывает,   на    каком    уровне
использования  происходит  обращение к этой программе.  Значение этого
параметра может  лежать  в  диапазоне  от  0  до  глубины  вложенности
программы.  Программы  могут  быть  вложены (программа может выполнить
другую программу,  которая может  выполнить  другую  программу...)  на
глубину до 32-х уровней.
    Если значение  параметра    равно  0  или  1,  тогда   будет
возвращено название основной программы (программы, запущенной первой).
Если этот параметр опущен,  будет возвращено имя текущей исполняющейся
программы. Если    превышает  действующую  глубину  вложенности,
будет возвращена пустая строка.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

ON ERROR DO errhand WITH PROGRAM()

* Следующая строка будет генерировать ошибку
USE nodatabase

PROCEDURE errhand
PARAMETERS mprogram

WAIT 'An error occurred in the program ' + mprogram WINDOW

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             PROMPT              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает приглашение  пункта,  выбранного  из  линейки   меню,   или
команды, выбранной из всплывающего меню
    Синтаксис
PROMPT()
    Возвращаемый тип
Символьный
    Смотри также
BAR(), DEFINE BAR,  DEFINE MENU,  DEFINE PAD,  DEFINE POPUP,  POPUP(),
PRMBAR()

    Описание
    Функция PROMPT()  возвращает  приглашение  пункта,  выбранного  из
линейки меню,  или  команды,  выбранной  из  всплывающего  меню.  Если
линейка меню  или  всплывающее  меню  не  являлось активным,  или была
нажата клавиша Escape для выхода  из  линейки  меню  или  всплывающего
меню, функция PROMPT().
    Линейка меню создается с помощью команды  DEFINE  MENU,  а  каждый
пункт меню в линейке меню создается командой DEFINE PAD.
    Всплывающее меню создается  с  помощью  команды  DEFINE  POPUP,  а
каждая  команда (строка) во всплывающем меню создается командой DEFINE
BAR.
    Функции MENU()  и  POPUP()  могут  использоваться для того,  чтобы
получить  имя  линейки  меню  или  всплывающего  меню,   из   которого
выбирается пункт или команда.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

CLEAR
DEFINE MENU mainmenu
DEFINE PAD invoices  OF mainmenu PROMPT ' \)
    Возвращаемый тип
Символьный
    Смотри также
LOWER(), UPPER()

    Описание
    Функция PROPER()  возвращает   символьную   строку,   устанавливая
регистр букв так, чтобы строка соответствовала собственному имени. Это
означает, что каждое слово  в  возвращаемой  символьной  строке  имеет
первым символом   заглавную  букву,  а  оставшиеся  символы  в  нижнем
регистре.

    Параметр

    Символьное выражение      является    символьной    строкой,
преобразуемой функцией PROPER().

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

STORE 'fox software' TO expr1
? PROPER(expr1)

Fox Software

STORE 'FOX SOFTWARE' TO expr2
? PROPER(expr2)

Fox Software

    Преобразование всех  имен  в  поле  contact в базе данных CUSTOMER
функцией PROPER():

CLOSE ALL
USE customer
REPLACE ALL contact WITH PROPER(contact)

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              PROW               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает текущую позицию строки на принтере
    Синтаксис
PROW()
    Возвращаемый тип
Численный
    Смотри также
@ ... SAY/GET, COL(), ROW(), PCOL()

    Описание
    Функция PROW()  возвращает  текущую  позицию  строки  на принтере.
Команда EJECT сбрасывает PROW() в 0.
    PROW() особенно  полезна для относительной адресации при выводе на
принтер.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

@ PROW(),PCOL()+12 SAY 'Contact person'
@ PROW(),$+12 SAY 'Contact person'

    Две команды  выше возвращают один и тот же результат.  Специальный
оператор $  может  быть  использован  вместо   функции   PCOL();   обе
возвращают текущую позицию колонки на принтере.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             PUBLIC              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Определяет глобальные переменные памяти или массивы
    Синтаксис
PUBLIC 

PUBLIC [ARRAY]  ([, ])
        [,  ([, ])] ...
    Смотри также
DIMENSION, PARAMETERS, PARAMETERS(), PRIVATE, RELEASE

    Описание
    Команда PUBLIC   создает  переменные  в  памяти  или  массивы  как
глобальные (общие) переменные  или  массивы.  Переменные  или  массивы
РUBLIC   могут  быть  доступны  для  чтения  или  изменения  из  любой
программы, которую вы выполняете в текущем сеансе работы с FoxPro.
    Переменные в  памяти  или  массивы,  которые  создаются  с помощью
выражения PUBLIC при инициализации получают  значение  "ложно"  (.F.),
кроме  глобальных  переменных  FOX  и  FOXPRO,  которые  автоматически
принимают значение "истинно" (.T.). Глобальные переменные FOX и FOXPRO
могут   использоваться  для  условного  выполнения  исходного  кода  в
зависимости от продукта, с которым вы работаете.
    Все переменные  в памяти или массивы,  созданные в Командном окне,
автоматически становятся глобальными.
    Любые переменные   в   памяти   или  массивы,  которые  вы  хотите
определить как глобальные, должны быть определены PUBLIC до присвоения
им значения.

    Внимание!!!
    Если в программе вы присваиваете значение переменной или  массиву,
а затем определяете их как PUBLIC, возникает синтаксическая ошибка.

    Дополнительные опции

    Одна или   несколько   переменных   в   памяти,  определяемых  как
глобальные.

[ARRAY]  ([, )
   [,  ([, ])...
    Один или  несколько   массивов,   определяемых   как   глобальные.
Численное выражение  является числом элементов в одноэлементном
массиве.
    (, )  является  числом  строк  и колонок в двумерном
массиве.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

SET TALK OFF
PUBLIC val1,val2
val1 = 10
val2 = 15

DO down

? val1
? val2

RELEASE ALL            && Освобождает только локальные переменные
DISPLAY MEMORY LIKE val?
RELEASE val1,val2      && Глобальные переменные должны быть
                       && освобождены явно
DISPLAY MEMORY LIKE val?

PROCEDURE down
PRIVATE val1
val1 = 50
val2 = 100
? val1
? val2
RETURN

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            PUSH KEY             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Сохраняет команды ON KEY LABEL
    Синтаксис
PUSH KEY [CLEAR]
    Замечания
Новая в FoxPro 2.0
    Смотри также
ON KEY LABEL, ON(), POP KEY

    Описание
    Команда PUSH  KEY  располагает  все текущие команды ON KEY LABEL в
"стек" в памяти.  PUSH  KEY  при  использовании  с  командой  POP  KEY
позволяет вам сохранять команды ON KEY LABEL,  изменять эти команды, а
затем восстанавливать предыдущие команды.
    Например, вы  можете использовать другой набор команд ON KEY LABEL
при открытии  окна  Browse  (Правка).  Перед  открытием  окна   Browse
(Правка) используйте  команду  PUSH  KEY  для сохранения команд ON KEY
LABEL в памяти.  Затем вы можете добавлять или изменять команды ON KEY
LABEL специально для окна Browse (Правка).  После закрытия окна Browse
(Правка) предыдущие команды ON KEY LABEL могут быть  восстановлены  из
памяти командой POP KEY.
    Команды ON KEY LABEL помещаются и удаляются  из  стека  в  порядке
"последним пришел - первым ушел".
    Команды DISPLAY STATUS и LIST STATUS показывают текущие команды ON
KEY LABEL.

    Дополнительные опции
CLEAR
    Если включена  дополнительная опция CLEAR,  все текущие команды ON
KEY LABEL сохраняются в стеке, а затем стираются.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            PUSH MENU            є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Помещает линейку меню в стек
    Синтаксис
PUSH MENU 
    Замечания
Новая в FoxPro 2.0
    Смотри также
ACTIVATE MENU, DEFINE MENU

    Описание
    Команда PUSH MENU помещает линейку меню в стек меню. PUSH MENU при
использовании с  командой  POP  MENU  позволяет  вам  сохранять  меню,
модифицировать  меню,  а  затем  восстанавливать  меню  в его исходное
состояние.
    Меню помещаются и удаляются из стека в порядке "последним пришел -
первым ушел".

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    В следующем примере линейка Системного меню помещается в  стек,  а
затем   модифицируется.   Затем   Системное   меню   восстанавливается
извлечением его из стека.

PUSH MENU _MSYSMENU
SET SYSMENU TO _MFILE, _MEDIT
POP MENU _MSYSMENU

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є           PUSH POPUP            є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Помещает всплывающее меню в стек
    Синтаксис
PUSH POPUP 
    Замечания
Новая в FoxPro 2.0
    Смотри также
ACTIVATE POPUP, DEFINE POPUP

    Описание
    Команда PUSH  POPUP  помещает  всплывающее меню в стек всплывающих
меню.  PUSH POPUP при использовании с командой POP POPUP позволяет вам
сохранять всплывающее меню,  модифицировать всплывающее меню,  а затем
восстанавливать всплывающее меню в его исходное состояние.
    Всплывающие меню   помещаются  и  удаляются  из  стека  в  порядке
"последним пришел - первым ушел".

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

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

DEFINE POPUP popexam FROM 05,05

DEFINE BAR 1  OF popexam PROMPT 'One'
DEFINE BAR 2  OF popexam PROMPT 'Two'
DEFINE BAR 3  OF popexam PROMPT 'Three'
DEFINE BAR 4  OF popexam PROMPT 'Four'

ACTIVATE POPUP popexam NOWAIT
PUSH POPUP popexam

RELEASE BAR 2 OF popexam

POP POPUP popexam

DEACTIVATE POPUP popexam

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             PUTFILE             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Представляет диалог Save As (Сохранить как)
    Синтаксис
PUTFILE([] [, ][, ])
    Параметры
  Строка приглашения, представляемая над списком имен файлов
  Имя файла по умолчанию, представляемое в текстовом блоке
  Расширения файлов,   представляемых   в   диалоге   Save   As
         (Сохранить как)
    Возвращаемый тип
Символьный
    Смотри также
FILE(), GETEXPR, GETFILE(), LOCFILE()

    Описание
    Функция PUTFILE()  отображает  диалог  Сохранить  как  (Save   As)
FoxPro,  позволяющий вам назвать файл и сохранит его на диске. Функция
PUTFILE() возвращает полное путевое имя файла.  В том случае, если имя
файла  не  введено,  возвращается  имя  файла  по  умолчанию (заданное
параметром ) и расширение (заданное параметром  ).  Если
выбрана  текстовая  кнопка  Cancel или нажата клавиша Escape,  функция
возвращает пустую строку.

    Параметры

    Параметр  задает приглашение, представляемое вверху диалога
Сохранить как (Save As).


    Параметр  задает имя файла по умолчанию,  представляемое  в
текстовом блоке.


    Параметр  указывает  расширение  файлов,  представляемых  в
прокручиваемом   списке   диалога   Сохранить  как  (Save  as),  когда
контрольный блок All  Files  (Все  файлы)  не  выбран.  Для  получения
информации,  касающейся полного списка расширений файлов, используемых
в системе FoxPro,  обратитесь к таблице расширений файлов, имеющейся в
"Руководстве разработчика"  (Developer's  Guide)  по  системе  FoxPro.
Первое расширение в  параметре    автоматически  добавляется  к
имени файла, если в имя файла не было включено расширение.
    Расширения, указываемые   аргументом      могут   принимать
различные  формы:
    -   может  содержать одно расширение (например,  'PRG'),  и
      будут отображаться  только   те   файлы,   которые   имеют   эти
      расширения.
    -   может  содержать  список  расширений  файлов,   которые
      разделяются точкой  с  запятой  (например,  'PRG;FXP').  В  этом
      случае PUTFILE() отобразит все файлы с расширениями PRG и FXP.
      Однако, если  файлы имеют одно и тоже имя,  но разные расширения
      (например, CUSTOMER.PRG  и  CUSTOMER.FXP),   будет   представлен
      только файл   с   первым  расширением,  перечисленным  в  списке
      расширений. В  этом  примере,  если  список  расширений   файлов
      содержит 'PRG;FXP', будет представлен только файл CUSTOMER.PRG.
    -   может  содержать  список  расширений  файлов,   которые
      разделяются вертикальной  чертой (например,  'PRG|FXP').  В этом
      случае будут представлены все файлы с данными расширениями, даже
      если они имеют одинаковые имена.
    - Если  содержит только  одну  точку  с  запятой  (';'),  в
      прокручиваемом списке отображаются все файлы без расширения.
    - Если    содержит  пустую строку,  отображаются все файлы,
      имеющиеся в текущей директории.
    -  также может содержать метасимволы ДОС  (*  и  ?).  Будут
      отображаться все файлы с расширениями, удовлетворяющими условиям
      метасимволов. Например,  если    является  '?X?',   будут
      представлены все файлы с расширениями FXP, EXE, TXT и т. д.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

dbf_file = GETFILE('DBF', 'Open Database:')
USE (dbf_file)

file_name = ALIAS()
out_file = PUTFILE('Delimited file:', file_name, 'DLM')

IF EMPTY(out_file)  && Нажата клавиша Escape
        CANCEL
ENDIF

COPY TO (out_file) DELIMITED  && Создать разделительный файл
MODIFY FILE (out_file) NOEDIT

    Этот пример  может  использоваться  для  создания  разделительного
файла данных из любой  существующей  базы  данных.  Функция  GETFILE()
позволяет вам найти и открыть файл, а функция PUTFILE() возвращает имя
файла вывода, который вы создаете.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є               PV                є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает настоящее значение вклада
    Синтаксис
PV(, , )
    Параметры
  Размер периодического вклада
  Периодическая процентная ставка
  Общее число вкладов
    Возвращаемый тип
Численный
    Смотри также
CALCULATE, FV()

    Описание
    Финансовая функция  PV()  возвращает  настоящее  значение  вклада.
Настоящее значение вычисляется  как  значение  вклада,  основанное  на
серии периодических  вкладов  с  постоянной  периодической  процентной
ставкой.

    Параметры

    Численное выражение    является   размером   периодического
вклада. Оно  может быть положительным или отрицательным.  Функция PV()
предполагает, что вклады делаются в конце каждого периода.


    Численное выражение     является  периодической  процентной
ставкой. Если процентная ставка является годовой,  а  вклады  делаются
ежемесячно, разделите годовую процентную ставку на 12.


    Общее число вкладов задается численным выражением .

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

STORE 500 to payment  && Периодические вклады,
                      && производимые ежемесячно
STORE .075/12 TO interest  && Годовая процентная ставка 7.5%
STORE 48 TO periods  && Четыре года (48 месяцев)
? PV(payment, interest, periods)

20679.19

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              QUIT               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Выход из сеанса FoxPro
    Синтаксис
QUIT
    Смотри также
CANCEL, RESUME, RUN, SUSPEND

    Описание
    Команда QUIT  используется для завершения текущего сеанса FoxPro и
возвращает управление в DOS.

    Внимание!!!
    QUIT всегда  должна  применяться  при  завершении  сеанса  FoxPro.
Выключение машины без предварительно выданной  команды  QUIT  может  в
результате  привести  к  разрушению  открытых  файлов и потере данных.
Завершение сеанса FoxPro без команды QUIT может также привести к тому,
что на диске останутся временные рабочие файлы, которые при нормальном
завершении были бы удалены.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              RAND               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает случайное число в диапазоне от 0 до 1
    Синтаксис
RAND([])
    Параметры
  Начальное число
    Возвращаемый тип
Численный

    Описание
    Функция RAND()  возвращает  случайное число в диапазоне от 0 до 1.
Если функция используется без аргумента, автоматически предоставляется
начальное число 100001. Вы можете восстановить значение по умолчанию в
любое время, применив функцию RAND(100001).

    Параметр

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

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Примеры             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

* Генератор начального случайного числа
* (используйте это только вначале программы)

= RAND(-1)

* Печать случайного числа (постоянное
* распределение) между 0 и 1

? RAND()

* Возвращает случайное действительное число
* (постоянное распределение) между a и b

FUNCTION urand
PARAMETER a, b
RETURN (b-a)*rand()+a

* Возвращает случайное целое число
* (постоянное распределение) между i и j

FUNCTION irand
PARAMETER i, j
RETURN int((j-i+1)*rand()+i)

* Возвращает значение, имитирующее
* бросание пары костей
* (Используется 'FUNCTION irand', описанная выше)
*
* Замечание: Это НЕ то же самое, что
* 'irand(12)', которая имеет
* некоторые отличия в распределении
* вероятностей

FUNCTION dice
RETURN irand(1,6)+irand(1,6)

* Возвращает случайное число с n цифрами
* (Используется 'FUNCTION irand', описанная выше)

FUNCTION digits
PARAMETER n
x = 10^n
y = irand(0, x-1) + x
RETURN substr(str(y,n+1),2)

* Функция возвращает случайное значение
* (экспоненциальное распределение с мат. ожиданием 'a')

FUNCTION edist
PARAMETER a
RETURN -a*log(rand())

* Функция возвращает случайное значение
* (нормальное распределение с мат. ожиданием 'm'
* и среднеквадратическим отклонением 'std'
* Эта функция требует, чтобы была представлена
* подпрограмма 'x_p'
* Алгоритм был взят из "Handbook of Mathematical
* Functions,"National Bureau of Standards,
* June 1964.  Equation 26.2.23, page 933.
* Его ошибка меньше, чем (4.5E-4 * std)

FUNCTION ndist
PARAMETER m, std
x = x_p(RAND())
RETURN x * std + m

FUNCTION x_p
PARAMETER p
IF p < 0  or p > 1
        RETURN 0
ENDIF
IF p < .5
        adjust = .T.
ELSE
        p = 1 - p
        adjust = .F.
ENDIF
t = SQRT(LOG(1/(p*p)))
x = t -((t * 0.010328 + 0.802853) ;
                * t + 2.515517) ;
        / (((t * 0.001308 + 0.189269) ;
                * t + 1.432788) * t + 1)
RETURN IIF(adjust, -x, x)

* Возвращает площадь под нормальной кривой
* с мат. ожиданием 'm' и среднеквадратическим
* отклонением 'std' from -бесконечности до x
* Алгоритм был взят из "Handbook of Mathematical
* Functions,"National Bureau of Standards,
* June 1964. Equation 26.2.17, page 932.
* Его ошибка меньше, чем (7.5E-8 * std)
* Этот пример не включает функцию RAND(), но
* использован здесь для удобства вашей работы.
* Эта функция требует, чтобы была представлена функция 'p'

FUNCTION normal
PARAMETERS x, m, std
RETURN p((x-m)/std)

FUNCTION p
PARAMETER x
IF x < 0
        adjust = .T.
        x = -x
ELSE
        adjust = .F.
ENDIF
t = 1 / (1 + 0.2316419 * x)
poly = ((((1.330274429 ;
                * t - 1.821255978) ;
                * t + 1.781477937) ;
                * t - 0.356563782) ;
                * t + 0.319381530) * t
res =  1 - 0.398942280401432678 ;
                        * EXP(-x*x/2) * poly
RETURN IIF(adjust, 1-res, res)

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є               RAT               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Ищет символьное  выражение  в  другом  символьном  выражении,  начиная
справа, и возвращает позицию,  в которой это символьное выражение было
найдено
    Синтаксис
RAT(,  [, ])
    Параметры
  Отыскиваемое выражение
  Исследуемое выражение
   Функция RAT() ищет -тое появление  в 
    Возвращаемый тип
Численный
    Смотри также
AT(), LEFT(), OCCURS(), RATLINE(), RIGHT(), SUBSTR()

    Описание
    Функция RAT()  ищет  символьное  выражение  в  другом   символьном
выражении, начиная   с   последнего   символа.  Она  возвращает  целое
значение, соответствующее позиции,  в которой было найдено  символьное
выражение. Если символьное выражение не найдено, возвращается 0.
    Поиск, выполняемый  функцией  RAT(),   чувствителен   к   регистру
(верхний и нижний регистр различаются).

    Параметры
, 
    Функция RAT() ищет выражение  в .   и 
могут быть memo полями.


    Численный параметр   позволяет вам отыскивать дополнительные
появления  в .  По умолчанию,  функция RAT()  отыскивает
первое появление    (  =  1).  Если   используется,
функция RAT() ищет -тое появление  в .

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Примеры             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

STORE 'abracadabra' TO string
STORE 'a' TO find_str
? RAT(find_str,string)

11

? RAT(find_str,string,3)

6

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             RATLINE             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Отыскивает последнее  появление   символьного   выражения   в   другом
символьном выражении   и  возвращает  номер  строки,  в  которой  было
обнаружено выражение
    Синтаксис
RATLINE(, )
    Параметры
  Отыскиваемое символьное выражение
  Исследуемое символьное выражение
    Возвращаемый тип
Символьный
    Смотри также
AT(), ATLINE(), LEFT(), OCCURS(), RAT(), RIGHT(), SUBSTR()

    Описание
    Функция RATLINE()  (Реверсивная  ATLINE())  отыскивает   появление
символьного   выражения  в  другом  символьном  выражении,  начиная  с
последнего символа.  Если поиск был успешным, функция возвращает номер
строки,  в которой было обнаружено выражение. Если поиск был неудачен,
возвращается 0.
    Поиск, производимый функцией RATLINE(),  является чувствительным к
регистру.

    Внимание!!!
    Номер строки,   возвращаемый   функцией   RATLINE(),   зависит  от
значения, назначенного ширине memo поля командой SET MEMOWIDTH. Ширина
memo поля  определяет  значение,  возвращаемое  функцией RATLINE() для
символьных выражений (символьные строки,  переменные  памяти,  массивы
или поля базы данных) также, как и для memo полей.

    Параметры
, 
    Функция RATLINE() исследует , начиная с последнего символа,
на содержание  символьного  выражения   .   Функция   RATLINE()
возвращает в  виде  целого числа номер строки,  в которой было найдено
.  и  могут быть memo полями.  Строка memo  поля,
содержащая подходящее  символьное  выражение,  может быть возвращена в
виде символьной строки функцией MLINE().

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

CLOSE ALL
USE customer
STORE 'file' TO string
STORE MLINE(comments, RATLINE(string, comments)) TO m_comment
? m_comment

    В этом примере функция RATLINE() возвращает номер  строки  в  memo
поле COMMENTS,   содержащей  строку.  Текст  этой  строки  сохраняется
в переменной  памяти   M_COMMENT.   (Если   нет   строки,   содержащей
отыскиваемую строку, функцией MLINE() возвращается пустая строка.)

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             RDLEVEL             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает текущий уровень чтения
    Синтаксис
RDLEVEL()
    Возвращаемый тип
Численный
    Замечания
Новая в FoxPro 2.0
    Смотри также
@ ... SAY/GET, CLEAR READ, _CUROBJ, OBJNUM()

    Описание
    Вложенное чтение может создаваться появлением команд GET и READ  в
процедуре, вызванной  в  команде  READ.  Чтение  может быть вложено на
глубину до пяти уровней.
    Текущий уровень  чтения  может  быть  получен  функцией RDLEVEL().
RDLEVEL() будет возвращать значение 0, 1, 2, 3, 4 или 5, в зависимости
от глубины  вложенности  чтения.  Если функция RDLEVEL() возвращает 0,
нет действующего чтения.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    В следующем примере нажатие клавиши F2 в  любое  время  представит
текущий уровень  чтения.  Вы  может  продвинуться на следующий уровень
чтения нажатием клавиши Enter  или  вернуться  на  предыдущий  уровень
чтения нажатием  клавиши  Escape.  Отметим использование опции VALID и
функции, определенной пользователем,  для создания вложенного  чтения.
Функция RDLEVEL() используется для получения уровня чтения при нажатии
клавиши F2.

CLEAR
ON KEY LABEL F2
@ 2,2 SAY 'Read level: ' + STR(RDLEVEL())
@ 4,2 GET level1 VALID(proc1()) DEFAULT 1
READ                        && Уровень чтения 1
ON KEY LABEL F2

PROCEDURE proc1
@ 6,2 GET level2 VALID(proc2()) DEFAULT 2
READ                        && Уровень чтения 2
RETURN ''

PROCEDURE proc2
@ 8,2 GET level3 VALID(proc3()) DEFAULT 3
READ                        && Уровень чтения 3
RETURN ''

PROCEDURE proc3
@ 10,2 GET level4 DEFAULT 4
READ                        && Уровень чтения 4
RETURN ''

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              READ               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Активизирует объекты, созданные командами @ ... GET и @ ... EDIT
    Синтаксис
READ
        [CYCLE]
        [ACTIVATE ]
        [DEACTIVATE ]
        [MODAL]
        [WITH window title list]
        [SHOW ]
        [VALID ]
        [WHEN ]
        [OBJECT ]
        [TIMEOUT ]
        [SAVE]
        [NOMOUSE]
        [LOCK | NOLOCK]
        [COLOR 
        | COLOR SCHEME ]
    Замечания
В FoxPro  2.0  в  команду  READ  добавлены следующие опции:  ACTIVATE,
CYCLE, DEACTIVATE,  LOCK | NOLOCK,  MODAL,  OBJECT, SHOW, VALID, WHEN,
WITH и   COLOR.  Опция  NOMOUSE  была  добавлена  в  FoxPro  1.00  для
совместимости с ранними версиями.
    Смотри также
@ ...  SAY/GET,  CLEAR READ,  CLEAR GETS,  RDLEVEL(),  READKEY(),  SET
CONFIRM, VARREAD(), USER-DEFINED FUNCTIONS (UDFs), SYS(2016)

    Описание
    Выполнение команды READ активизирует GET объекты.  GET объекты это
GET поля, Области редактирования текста, Текстовые кнопки, Селективные
кнопки,  Всплывающие меню,  Блоки проверки и Списки.  Все GET объекты,
созданные  после  последней  команды  READ  или  CLEAR GETS,  являются
активными.

    Позиционирование
    Когда выдана команда READ, вы можете нажать клавишу Enter, Tab или
Стрелка вниз для перемещения вперед  от  объекта  к  объекту.  Нажатие
клавиш Shift+Tab  или  Стрелка вверх осуществляет перемещение назад от
объекта к объекту.  Перемещение от  объекта  к  объекту  происходит  в
порядке появления команд GET.
    Если у вас есть мышь, вы можете выбрать объект щелчком на объекте.
Если вы не знакомы с операциями с мышью, обратитесь к "Началам работы"
(Getting Started) по системе FoxPro.

    Ввод данных
    Когда вы  перемещаетесь  в  поле  GET  или  области редактирования
текста, вы можете вводить текст или редактировать существующий  текст.
Стандартные средства  редактирования текста FoxPro доступны в поле GET
или области  редактирования  текста  -  текст  может   быть   вырезан,
скопирован и вклеен.

    Выход из чтения
    Есть несколько способов выхода из чтения. Перемещение вперед после
последнего объекта  GET  или  назад после первого объекта осуществляет
выход из чтения (если в  команде  READ  была  включена  опция  CYCLE).
Нажатие клавиши   Escape,  Ctrl+W  или  выбор  управляющего  средства,
которое определено для прекращения чтения, также заканчивает чтение.

    Многооконное чтение
    Чтение может   охватывать   несколько   окон.  GET  объекты  могут
располагаться в различных  окнах  и  активизироваться  одной  командой
READ. Когда вы перемещаетесь от объекта к объекту,  объекты проходятся
в порядке появления команд GET независимо от окон объектов.
    Окно активизируется  и  становится  текущим  окном  вывода,  когда
ткущий объект находится в окне.  Когда вы нажимаете клавиши Tab, Enter
или Стрелка  вниз  на  последнем GET объекте в окне,  вы переходите на
первый GET  объект  в  следующем  окне.  Когда  вы  нажимаете  клавиши
Shift+Tab или   Стрелка  вверх  на  первом  GET  объекте  в  окне,  вы
переходите на последний GET объект в  предыдущем  окне.  Команда  SHOW
GETS является примером многооконного чтения.

    Вложенное чтение
    Вложенное чтение может создаваться появлением команд GET и READ  в
процедуре,  вызванной  в  команде  READ.  Чтение может быть вложено на
глубину до пяти уровней.  Текущий уровень чтения  может  быть  получен
функцией RDLEVEL().   Описание   функции   RDLEVEL()  содержит  пример
вложенного чтения.

    Порядок выполнения событий
    Следующий список   представляет   порядок,  в  котором  происходит
чтение, и опции,  выполняющиеся,  когда первый раз появляется  команда
READ:
    * Выполняется опция WHEN уровня READ
    * Активизируется первое окно GET
    * Выполняется опция ACTIVATE уровня READ
    * Выполняется опция SHOW уровня READ
    * Выполняется опция WHEN уровня GET для первого оператора GET

    Следующий список представляет порядок,  в котором вызываются опции
команды READ, когда активизируется новое окно:
    * Выполняется опция VALID для поля, из которого происходит выход
    * Выполняется опция DEACTIVATE уровня READ
    * Деактивизируется окно,  содержащее поле,  из которого происходит
      выход
    * Активизируется новое окно с полями GET
    * Выполняется опция ACTIVATE уровня READ
    * Выполняется опция WHEN для нового поля

    Дополнительные опции
CYCLE
    Если используется опция CYCLE, команда READ не прекращается, когда
вы  перемещаетесь  вперед после последнего объекта GET или назад после
первого объекта GET. Когда вы нажимаете клавиши Tab, Enter или Стрелка
вниз  на  последнем  GET объекте,  вы переходите на первый GET объект.
Когда вы нажимаете клавиши Shift+Tab или Стрелка вверх на  первом  GET
объекте, вы  переходите  на  последний  GET объект.  Если используется
опция CYCLE,  кнопка прекращения, Escape, Ctrl+W, CLEAR READ или опция
TIMEOUT будут прекращать чтение.

ACTIVATE 
    Опция ACTIVATE  выполняется,  когда  появляется  команда  READ,  и
всякий раз,  когда изменяется текущее окно READ.  Опция ACTIVATE может
рассматриваться как опция WHEN уровня окна.
    Логическое выражение        обычно    является    функцией,
определенной пользователем.  Функция WOUTPUT() может использоваться  в
функции, определенной пользователем,  для определения того, какое окно
было сделано  текущим.  Функция,  определенная  пользователем,   может
блокировать GET  объекты  в  других  окнах,  скрывать  окна,  выдавать
сообщение и т. д.

DEACTIVATE 
    Опция DEACTIVATE   выполняется  всякий  раз,  когда  вы  пытаетеся
переместить вперед  любое  другое  окно  (то  есть,  когда  изменяется
WONTOP()). Опция  DEACTIVATE  может  рассматриваться  как  опция VALID
уровня окна.
    Логическое выражение        обычно    является    функцией,
определенной пользователем. Функция, определенная пользователем, может
использоваться для проверки корректности содержания полей в окне перед
тем,  как позволить вам перенести вперед другое  окно.  Если  функция,
определенная  пользователем,  возвращает  логическое  значение "ложно"
(.F.),  команда  READ  не  прекращается.  Если  функция,  определенная
пользователем, возвращает логическое значение "истинно" (.T.), команда
READ прекращается.

MODAL
    Использование ключевого  слова  MODAL  в команде READ предохраняет
все окна от активизации,  за исключением окон,  используемых в команде
READ. Если   окна,  не  используемые  при  чтении,  определены,  когда
появляется команда READ MODAL,  они не могут быть активизированы и  не
могут быть доступными.

WITH 
    По умолчанию,  все  интерактивные  окна  (окно  Browse   (Правка),
"настольная оргтехника" и окна, открытые командами MODIFY FILE, MODIFY
REPORT и т. п.) могут участвовать в команде READ. Вы можете ограничить
окна,  которые могут участвовать в команде READ, используя опцию WITH.
Тогда в чтении могут участвовать только те окна,  которые  включены  в
опцию  WITH.  Окна,  включенные в опцию WITH,  могут быть и системными
окнами FoxPro (окна Browse (Правка),  "настольная оргтехника"  и  окна
редактирования текста и memo файлов).
    Использование опции WITH неявно создает MODAL READ.

    * Для того, чтобы сделать доступным окно Browse (Правка), включите
      заголовок окна  Browse  (Правка)  (по умолчанию,  псевдоним базы
      данных) в список окон.

    * Для того,  чтобы сделать доступным memo окно, включите псевдоним
      базы данных в список окон.

    Если заголовок окна содержит символ,  не являющийся буквой, цифрой
или символом подчеркивания,  включите в список окон часть заголовка до
первого символа,    не   являющегося   буквой,   цифрой   и   символом
подчеркивания. Например,  если  окно  имеет  заголовок  Client   List,
включите в  список окон Client (пробел между Client и List не является
буквой, цифрой и символом подчеркивания).
    Если заголовок окна содержит символ,  не являющийся буквой, цифрой
или символом подчеркивания, вы можете включите в список окон заголовок
в кавычках. Например, если окно имеет заголовок Client List, вы можете
включить в список окон "Client List".

SHOW 
    Опция SHOW  выполняется  всякий  раз,  когда появляется SHOW GETS.
Значение, возвращаемое процедурой SHOW,  игнорируется.  Процедура SHOW
может использоваться для обновления команд @ ... SAY, или блокировки и
разблокировки объектов GET.

VALID  | 
    Когда вы пытаетесь выйти из чтения, вычисляется опция VALID. Опция
VALID может быть логическим или  численным  выражением  или  функцией,
определенной пользователем,   возвращающей  логическое  или  численное
значение.
    Если выражение  вычисляется со значением "истинно",  чтение
прекращается. Если  вычисляется со  значением  "ложно",  курсор
остается в  том  же  поле  или выбирается тот же GET объект,  если это
возможно.
    Если курсор не может остаться в том же GET поле, или не может быть
выбран тот же GET объект (процедура VALID может  деактивизировать  GET
поле или объект), вы перемещаетесь на первый GET объект.
    Если опция   VALID   возвращает   число,   вы   перемещаетесь   на
соответствующий объект.  Если  не существует объекта,  соответствующая
числу, чтение  прекращается.  Возвращаемое  значение,  не   являющееся
логическим или  численным,  рассматривается  как  возвращение значения
"истинно" (.T.).

WHEN 
    Опция WHEN  определяет  выполнение  чтения  на  основе  результата
вычисления логического выражения.  Чтобы  было  выполнено  чтение  при
появлении команды  READ,  логическое  выражение    должно  быть
вычислено со значением "истинно" (.T.).  Если   вычисляется  со
значением "ложно"  (.F.),  команда  READ  игнорируется,  и  выполнение
программы продолжается  с  команды,   непосредственно   следующей   за
командой READ.

OBJECT 
    Вы можете задать GET объект,  который будет первым выбираться  при
появлении команды  READ,  с помощью опции OBJECT.  Значение численного
выражения  определяет  GET  объект,  который  будет  выбираться
первоначально. Номер GET объекта определяется порядком их появления.
    Каждая отдельная  текстовая,  селективная   и   невидимая   кнопка
рассматривается как  объект.  В  следующем примере программы создается
GET поле  и  три  селективные  кнопки.  Средняя   селективная   кнопка
выбирается первоначально использованием опции OBJECT 3 в команде READ.
GET поле name является первым объектом,  первая селективная  кнопка  -
вторым объектом,  вторая  селективная  кнопка  -  третьим объектом,  а
последняя селективная кнопка - четвертым объектом.

    Пример:

    STORE 1 TO radio
    STORE SPACE(10) TO name
    CLEAR
    @ 2,2 SAY 'Enter a name: ' GET name
    @ 4,2 GET radio PICTURE '@*R Apples;Oranges;Lemons'
    READ CYCLE OBJECT 3

TIMEOUT 
    Опция TIMEOUT является  продолжительностью  работы  команды  READ.
Численное выражение    определяет  количество  секунд,  которые
могут пройти  перед  прекращением  чтения.  Если  чтение  прекращается
опцией TIMEOUT, функция READKEY() будет возвращать значение 20, если в
текущем поле не было сделано изменений.  Если изменения были  сделаны,
функция READKEY() возвращает значение 276.
    Когда чтение прекращается опцией TIMEOUT, все изменения, сделанные
в поле,  которое редактировалось при превышении лимита времени,  будут
отменены. Однако, изменения, сделанные в других полях, сохраняются.

SAVE
    Все GET  утверждения  автоматически  стираются  следующей командой
READ, если  не  было  использовано  ключевое  слово  SAVE.   Если   вы
используете опцию SAVE, вы можете заново подать команду READ без новой
выдачи GET утверждений.

NOMOUSE
    Использование опции  NOMOUSE  не дает возможности выбирать объекты
мышью. Для перемещения от объекта к  объекту  вы  должны  пользоваться
клавиатурой. Вы  можете  использовать мышь внутри полей для вырезания,
копирования, вклейки и для позиционирования курсора.

LOCK | NOLOCK
    Ключевые слова  LOCK  и NOLOCK позволяют вам указывать,  должны ли
записи, используемые в командах @ ... GET, автоматически блокироваться
во время чтения в FoxPro/LAN, сетевой версии FoxPro.
    Если используется  ключевое  слово  LOCK,  будет  сделана  попытка
заблокировать каждую запись, использующуюся в командах @ ... GET. Если
блокировки проведены успешно,  вы можете редактировать записи. Команда
SET REPROCESS  определяет,  сколько  попыток блокировки будет сделано,
если даже одна из записей не может быть заблокирована.  Если ни  LOCK,
ни UNLOCK не используется, по умолчанию принимается READ LOCK.
    Если используется ключевое слово NOLOCK,  записи, использующиеся в
командах @ ...  GET,  не блокируются. Когда используется опция NOLOCK,
все поля @ ...  GET делаются доступными только для чтения.  Если  поле
используется управляющим средством (блоком проверки, всплывающим меню,
селективной кнопкой и т.  п.),  управляющее средство  блокируется  (не
может быть выбрано и показывается в цветах блокировки).

COLOR []
    Вы можете   задать   цвет   текущего   GET   объекта   с   помощью
необязательной опции  COLOR.  Когда объект выбран,  он получает цвета
второй цветовой пары в списке цветовых пар.  Все другие цвета в списке
цветовых пар  игнорируются.  Вы  можете опустить первую цветовую пару,
просто задав запятую.

COLOR SCHEME 
    Если вы  используете  опцию  COLOR  SCHEME,  вторая  пара цветов в
заданной схеме цветов определяет цвет  текущего  поля.  По  умолчанию,
цвет текущего  GET  поля  определяется  второй  цветовой  пары  первой
цветовой схемы  (User  Windows  (Пользовательские  окна)).  Цвет   GET
объектов не зависит от этой опции цвета.

    Базовая команда READ
    FoxPro 2.0 позволяет вам легко создавать  интерфейсы,  управляемые
событиями (подобные    FoxPro)    для   ваших   прикладных   программ.
Совершенствование команды READ и функции  READKEY(),  добавление  двух
новых функций,  WLAST()  и  WREAD(),  и изменения оконных функций дают
возможность создавать   ваши   собственные   интерфейсы,   управляемые
событиями. Этот  параграф  предлагает  метод  для создания интерфейса,
управляемого событиями, в Foxpro 2.0.
    Эти изменения не влияют на любые прикладные программы,  написанные
в более ранних версиях FoxPro - ваши старые прикладные программы будут
выполняться точно также, как и раньше.
    В предыдущих  версиях  FoxPro   некоторые   опытные   пользователи
использовали циклы,  зависящие  от  событий,  для управления выбором в
меню и выбором окон при создании интерфейса,  управляемого  событиями.
Обработчик состояний  должен  постоянно  проверять состояние системы и
выполнять действия в зависимости от того, какое окно находится сверху,
и какая команда меню была выбрана.
    В цикле,  зависящем от событий,  используется команда DO WHILE для
создания этого  цикла (часто довольно большого).  Циклы,  зависящие от
событий, следует избегать по следующим соображениям:

    * Циклы,  зависящие от событий,  выполняются постоянно,  используя
      время работы процессора.

    * Циклы, зависящие от событий, сложны для программирования.

    * Циклы,    зависящие    от    событий,    плохо    подходят   для
      мультипрограммных систем, подобных DESQview, Windows и Macintosh
      MultiFinder.

    Одна команда READ с несколькими окнами
    В FoxPro   2.0   сделаны   улучшения,   которые   позволяют   реже
пользоваться циклами,   зависящими  от  событий.  Одна  команда  READ,
поддерживающая несколько окон,  может использоваться для  того,  чтобы
избежать большинство циклов, зависящих от событий. Одна команда READ с
несколькими окнами  предоставляет  многосторонность  и  гибкость   без
необходимости в сложном программировании.
    Мы советуем  вам  охватывать  одной  командой  READ  все  окна,  с
которыми вы   хотите   работать.  FoxPro  может  координировать  окна,
содержащие GET объекты (команды @ ... GET, блоки проверки, селективные
кнопки, всплывающие  меню и т.  п.),  с окнами,  не связанными обычным
образом с командой READ - окнами Browse (Правка),  memo окнами, окнами
редактирования текста,  системными окнами FoxPro и т. п. По умолчанию,
все интерактивные окна (окна Browse (Правка),  "настольная оргтехника"
и окна,  открытые командами MODIFY FILE,  MODIFY REPORT и т. п.) могут
участвовать в команде READ.

    Координация окон одной командой READ
    Для программной  координации окон,  содержащих GET объекты,  одной
командой READ:
    1. Создайте окна, которые будут содержать GET объекты.
    2. Активизируйте одно из окон и выдайте команды GET, создающие GET
       объекты для этого окна.
    3. Активизируйте другое окно и выдайте команды GET,  создающие GET
       объекты для этого окна.
    4. Выполните эту операцию для оставшихся окон.
    5. Выдайте команду READ.
    Программный код   установки   экрана,   сгенерированный   GENSCRN,
предоставляет хороший пример того, как это выполняется.
    Теперь окна будут координироваться одной командой READ.  Каждый из
GET объектов  будет  возникать  в  соответствующем  окне,  и вы можете
перемещаться по GET объектам в каждом из окон.  Когда вы перемещаетесь
от объекта  к  объекту,  объекты  проходятся  в  порядке появления GET
утверждений, независимо  от  окон  объектов.  Окно  активизируется   и
становится текущим окном вывода, когда текущий объект находится в этом
окне.
    Когда вы нажимаете клавишу Tab, Enter или  на последнем объекте в
окне, вы перемещаетесь на первый GET объект в следующем окне. Когда вы
нажимаете клавиши  Shift+Tab  или   на первом GET объекте в окне,  вы
перемещаетесь на последний GET объект в  предыдущем  окне.  Вы  можете
перемещаться по  различным GET объектам в различных окнах щелчком мыши
на GET объектах.
    Доступ к другим окнам во время выполнения одной команды READ может
управляться опцией MODAL команды READ.  Использование ключевого  слова
MODAL в команде READ предотвращает взаимодействие с окнами, которые не
охвачены набором окон в команде READ. Когда опция MODAL используется в
команде READ,  вы не можете закрывать, распахивать, минимизировать или
перемещать окна,  не охваченные командой READ. Щелчок мыши на окне, не
охваченном   командой  READ,  будет  вызывать  звуковой  сигнал,  если
установлена команда SET BELL ON.
    По умолчанию,   все  интерактивные  окна  (окна  Browse  (Правка),
"настольная оргтехника" и окна, открытые командами MODIFY FILE, MODIFY
REPORT и т. п.) могут участвовать в команде READ.
    Вы можете явно указывать другие окна,  которые будут участвовать в
команде READ,  задав их имена в опции WITH.  Если вы используете опцию
WITH для  задания  других  окон,  участвующих  в  READ,  команда  READ
автоматически получает  опцию  MODAL.  Окна,  включенные в опцию WITH,
могут  быть  и  системными  окнами  FoxPro  (окна   Browse   (Правка),
"настольная оргтехника" и окна редактирования текста и memo файлов).

    Команды READ ACTIVATE и READ DEACTIVATE
    Когда окно,  участвующее  в  команде  READ  перемещается   вперед,
выполняемое действие  может управляться опциями ACTIVATE и DEACTIVATE.
Окно может перемещаться вперед щелчком мыши на этом окне, перемещением
окон по  циклу  с  помощью  нажатия  Ctrl+F1  или выбором управляющего
средства или команды меню, активизирующей это окно.
    Когда окно,  содержащее команды @ ... GET, находится впереди, и вы
пытаетесь переместить другое  окно  вперед,  новое  окно  перемещается
вперед, и тогда выполняется опция DEACTIVATE.
    Значение, возвращаемое  опцией  DEACTIVATE,  отвечает  на   вопрос
"Прекратить ли  чтение?".  Если опция DEACTIVATE возвращает логическое
значение "истинно"  (.T.),  чтение  прекращается.  Если   возвращается
логическое значение "ложно" (.F.), команда READ продолжает работу.
    Когда выполняется опция DEACTIVATE,  функция  WONTOP()  возвращает
имя нового  окна,  перемещенного  вперед,  а  функция WLAST() (новая в
FoxPro 2.0) имя окна,  которое было впереди до этого.  Оконные функции
(WONTOP(),  WOUTPUT()  ...) были модифицированы в FoxPro 2.0 так,  что
когда  вы  включаете  в  эти   функции   имя   несуществующего   окна,
возвращается логическое  значение "ложно" (.F.).  Ранее генерировалась
ошибка.
    Если ваша  опция DEACTIVATE позволяет новому окну быть впереди,  и
новое окно содержит команды @ ... GET, выполняется опция ACTIVATE.

    Важно!!!
    Когда окно перемещено вперед, вы можете возвратить окно на прежнюю
позицию командой

ACTIVATE WINDOW (WLAST())

в опции DEACTIVATE.  Отметим,  как функция WLAST() используется выше в
именованном выражении.
    Функция WREAD()  была  добавлена  в  FoxPro  2.0  для   облегчения
манипуляций с окнами, участвующими в чтении. Функция WREAD() позволяет
вам определять, участвует ли заданное окно в текущем чтении.

    Координация нескольких команд READ/Базовые команды READ
    Параграф "Одна команда READ с несколькими окнами" выше рекомендует
управлять несколькими  окнами  одной  командой   READ.   Использование
подхода с  одной  командой  READ  удовлетворяет большинству прикладных
программ.
    Однако в некоторых прикладных программах бывает необходима Базовая
команда READ.  Базовая команда READ это команда READ без команд @  ...
GET. Базовая  команда  READ  используется  для  координации нескольких
команд READ в одном интерактивном сеансе.

    Внимание!!!
    Базовые команды  READ  могут  быть  сложными для программирования.
Убедитесь, что вы полностью изучили  подход  с  единственной  командой
READ, прежде чем пытаться использовать Базовые команды READ.

    Базовая команда  READ обычно объединяет код в процедуре в ее опции
VALID, активизирующий и управляющий дочерними командами READ. Дочерние
команды READ иногда называются вложенными командами READ.
    Базовая команда  READ  обычно  имеет  опцию  VALID.  Опция   VALID
переключается любым   событием,   которое  в  противном  случае  будет
прекращать команду READ.  Далее  перечислены  события,  которые  будут
прекращать Базовую команду READ:

    * Любой  щелчок  мыши  или  любое  нажатие клавиши,  не являющееся
      выбором меню или не выполняющее команду ON KEY LABEL.  Во  время
      выполнения Базовой  команды  READ системное меню FoxPro является
      доступным.
      Выбор элемента  из  меню  или выполнение команды ON KEY LABEL не
      прекращает выполнение   Базовой   команды   READ.   Если    меню
      активизировано, но  не  был  произведен  выбор из меню,  Базовая
      команда READ не прекращается.

    * Прекращение дочерней команды READ.  Однако, Базовая команда READ
      не прекращается,  когда  прекращается  команда READ,  являющаяся
      дочерней по отношению к дочерней команде READ.
      Значение, возвращаемое   опцией   VALID,   отвечает   на  вопрос
      "Прекратить ли  Базовую  команду  READ?".   Если   опция   VALID
      возвращает логическое значение "истинно" (.T.),  Базовая команда
      READ прекращается. Если возвращается логическое значение "ложно"
      (.F.), Базовая команда READ продолжает работу.

    Функция READKEY()   была  расширена  в  FoxPro  2.0  для  удобства
управления дочерними   командами   READ.   Использованием   численного
аргумента в   функции   READKEY()   вы  можете  определить,  как  была
прекращена последняя команда READ. Например, значение может указывать,
что последняя  команда  READ была прекращена закрытием окна,  командой
CLEAR READ,  возвращением опцией DEACTIVATE или ACTIVATE команды  READ
значения .T. и т. д.
    Далее приводится  значения,  возвращаемые  функцией  READKEY(),  в
зависимости от того, как было прекращено чтение:

Значение  Событие
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
  1       Ни одно из следующих
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
  2       Выдана команда CLEAR READ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
  3       Выбрано управляющее средство прекращения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
  4       Закрыто окно чтения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
  5       Опция DEACTIVATE возвратила значение .T.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
  6       Вышел лимит времени чтения

    Примеры прикладных программ
    Вместе с FoxPro предоставляются три примера  прикладных  программ:
INV.APP, EX1.APP   и   EX2.APP.   Эти   примеры   прикладных  программ
иллюстрируют дополнения,  сделанные в команде  READ,  и  то,  как  эти
дополнения могут использоваться для создания интерфейса,  управляемого
событиями.
    Прикладные программы   скомпонованы  из  трех  проектов:  INV.PJX,
EX1.PJX и EX2.PJX.  Проекты  содержат  все  файлы  (программы,  наборы
экранов, меню,  базы  данных  и  т.  д.),  используемые для прикладной
программы. Для исследования  файлов,  включенных  в  проект,  откройте
проект командой MODIFY PROJECT или диалогом Открыть файл (Open File).

    INV: Одна команда READ с несколькими окнами
    Прикладная программа  INV.APP  демонстрирует  использование  одной
команды READ с несколькими окнами.  Окно, определенное пользователем и
содержащее команды @ ...  GET,  два окна Browse (Правка) и управляющая
панель набора экранов CONTROL2 координируются одной командой READ.

    EX1: Базовая команда READ с несколькими прикладными программами
    EX1.APP, довольно  сложная  прикладная  программа,   демонстрирует
координацию четырех   команд   READ,   каждая  из  которых  использует
управляющую панель, полученную из набора экранов CONTROL3.SCX. Базовая
команда READ  координирует  четыре  команды READ.  EX1.APP разработана
так, что вы  можете  использовать  "настольную  оргтехнику"  или  окна
FoxPro (Подсказку   (Help),   Средство   работы   с  файлами  (Filer),
Калькулятор (Calculator),  Календарь/Дневник  (Calender/Diary),   окна
редактирования и т. д.) вместе с окнами прикладной программы.
    Прикладные программы  запускаются  из  меню  Прикладная  программа
(Application). Вы  можете  переходить  от одной прикладной программы к
другой просто щелчком мыши на окне  прикладной  программы.  Выполнение
всей системы может быть прекращено выбором команды Выход (Quit) в меню
Файл (File).

    EX1 Экзамен
    Перед тем,    как   пытаться   написать   собственную   программу,
управляемую событиями,  с  несколькими  командами  READ,   внимательно
изучите EX1 и убедитесь, что вы можете ответить на следующие вопросы о
работе EX1. Ответы на вопросы предоставлены в конце этого параграфа.
    1. Что   происходит,   если   процедура  управлением  меню  всегда
немедленно запускает запрашиваемую прикладную программу независимо  от
текущего уровня чтения (возвращаемого функцией READLEVEL()) ?
    2. Почему необходимо задавать опцию IN EX1.MPR в  команде  меню  в
меню Прикладная программа (Application)?
    3. Где находится часть  программы,  управляющая  ситуацией,  когда
окно прикладной  программы закрывается вручную или щелчком мыши на его
блоке закрытия,  или выбором команды Закрыть  (Close)  во  всплывающем
меню Файл (File)?
    4. Чему равно наибольшее число команд  READ,  которые  могут  быть
одновременно активными во время выполнения EX1.APP?
    5. Что обеспечивает исчезновение управляющей панели  при  закрытии
последнего оставшегося окна прикладной программы?
    6. Если вы помещаете сверху  окна  прикладной  программы,  скажем,
Калькулятор, будет  ли  по  прежнему  активной команда READ прикладной
программы?
    7. Когда  вы  выполняете  EX1.APP,  и не являются видимыми ни окно
прикладной программы, ни управляющая панель, а вы используете, скажем,
Средство работы с файлами (Filer), существует ли какая-нибудь активная
команда READ?
    8. Когда вы находитесь в окне прикладной программы и осуществляете
щелчок мыши  на  другом  окне,  как  управление  передается  от  одной
прикладной программы к другой? Какие события переключают переход?
    Если вы можете ответить на все эти вопросы, вы готовы переходить к
следующему примеру.

    EX2: Базовая команда READ с несколькими прикладными программами
    Эта прикладная программа  подобна  EX1,  но  заменяет  один  экран
редактирования накладных прикладной программой EX1.APP,  которая кроме
редактирования файла накладных, использует управляющую панель CONTROL2
и два  окна  Browse (Правка),  координируемые в качестве части команды
READ.
    Внимательно изучите EX2 и вы увидите,  что изменения,  необходимые
для управления этой довольно сложной ситуацией,  довольно просты. Если
вы можете  ответить  на все вопросы о EX1,  у вас не должно возникнуть
затруднений с EX2. И теперь вы должны иметь общее представление о том,
как программировать ваши собственные прикладные программы.

    EX1 Ответы на экзамен
    1. Вы  добавляете  один  уровень  чтения  всякий  раз,  когда   вы
выбираете прикладную  программу  из  меню,  и поэтому,  довольно скоро
будет выдано сообщение "Too many  READs  in  effect"  ("Слишком  много
активных команд  READ").  FoxPro  поддерживает  максимум  пять уровней
чтения.
    2. Так как внутри EX1.MPR содержится процедура MENUHIT. EX1.MPR не
является частью EX1.PRG;  опция IN EX1.MPR должна  использоваться  для
указания EX1.PRG, где искать процедуру MENUHIT.
    3. Она находится  в  процедуре  STOPREAD,  которая  отрабатывается
всякий раз,   когда  окно  прикладной  программы  деактивизируется.  В
STOPREAD передается имя окна.  Если окно не является видимым  (т.  е.,
закрыто или   вручную,   или   щелчком   мыши   на   блоке  закрытия),
представляется управляющая   панель.   Значение    .T.    возвращается
процедурой STOPREAD,  если окно участвует в чтении,  и .F. в противном
случае (закрыто системное окно FoxPro).
    4. Могут быть активными максимум три команды READ: Базовая команда
READ, одна из команд READ прикладных программ и  команда  READ  MODAL,
связанная или с BROWSER, или с FINDER.
    5. Процедура  EFFACE,  которая  вызывается  в   части   программы,
занимающейся очисткой   для   каждого   экрана  прикладной  программы,
обеспечивает то,  что  когда  закрывается  последнее  окно  прикладной
программы, удаляется управляющая панель.
    EFFACE вызывается, когда нажата кнопка Выход (Quit), или окно READ
закрывается вручную щелчком мыши на блоке закрытия или выбором команды
Закрыть (Close) во всплывающем меню Файл (File).
    EFFACE просматривает  все  открытые окна от конца до самого верха.
Если она  находит  какое-нибудь   окно   пользовательской   прикладной
программы (требующее  управляющую  панель),  она прекращает работу.  В
противном случае,  она считает,  что вы закончили работу с управляющей
панелью, и убирает ее.
    6. Команда READ прикладной  программы  прекращается,  так  как  ее
опция DEACTIVATE  возвращает  значение  .T.,  но  базовая команда READ
остается активной.
    7. Опция   DEACTIVATE   первой   прикладной  программы  возвращает
значение .T.,что прекращает  действие  команды  READ  этой  прикладной
программы. Прекращение  команд  READ  прикладных  программ переключает
процедуру опции VALID Базовой команды READ.
    8. Эта   процедура,   называемая   MYHANDLER,  использует  функцию
WONTOP() для возвращения имени окна прикладной  программы,  в  котором
был щелчок мыши, и для этого окна выполняется программа экрана (.SPR).

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Примеры             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    Примеры для  команды  READ  можно найти в параграфах,  описывающих
управляющие средства, команды CLEAR READ, SHOW GETS и @ ... SAY/GET.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            READ MENU            є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Активирует всплывающее меню
    Синтаксис
READ MENU TO  [SAVE]
    Замечания
Используется для совместимости с ранними версиями - для создания  меню
используйте Компоновщик меню FoxPro
    Смотри также
CREATE MENU, @ ... MENU

    Описание
    Эта команда активирует всплывающее меню, определенное командой @
... MENU.
    Вначале, переменная  содержит стартовую позицию курсора во
всплывающем  меню.  После  того,  как вы выберете команду всплывающего
меню,  номер команды меню запишется в .  Если всплывающее меню
покидается нажатием клавиши Escape, в  записывается нуль.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             READKEY             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает значение,  соответствующее  клавише,  нажатой для выхода из
некоторых команд редактирования,  или значение,  соответствующее тому,
как прекратилась последняя команда READ.
    Синтаксис
READKEY([])
    Возвращаемый тип
Численный
    Смотри также
INKEY(), ON KEY, READ, VARREAD()

    Описание
    Функция READKEY() возвращает  значение,  соответствующее  клавише,
нажатой  для выхода из некоторых команд редактирования,  или значение,
соответствующее тому, как прекратилась последняя команда READ.
    Если функция  READKEY()  появилась  без дополнительного численного
аргумента , возвращаемое значение соответствует клавише, нажатой
для выхода из следующих команд редактирования: APPEND, BROWSE, CHANGE,
CREATE, EDIT, INSERT, MODIFY и READ>
    Возвращаемое целое  значение будет находиться между 0 и 36 или 256
и 292.  Если  данные  не  изменялись  во  время  выполнения   команды,
возвращаемое значение  будет лежать между 0 и 36.  Если же данные были
изменены, возвращаемое значение будет лежать между 256 и 292.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

SET TALK OFF
CLOSE ALL
USE customer
SCATTER TO temp
DEFINE WINDOW menter FROM 6,10 to 18,70 PANEL
ACTIVATE WINDOW menter
@ 1,3 SAY 'Customer: ' GET company
@ 3,3 SAY 'Address: ' GET address1
@ 5,3 SAY 'City: '  GET city
@ 7,3 SAY 'State: ' GET state
@ 7,18 SAY 'Zip: ' GET zip
@ 9,18 SAY 'Press  to cancel'
READ
IF READKEY() = 268  && Была нажата клавиша Escape
   GATHER FROM temp
ENDIF
DEACTIVATE WINDOW menter
DISPLAY

    В этом  примере  данные  из  текущей записи в базе данных CUSTOMER
помещаются в массив командой SCATTER.  Затем пользователь  редактирует
поле даты  в  текущей  записи.  Нажмите  клавишу Escape в какой-нибудь
момент для отмены изменений.  Функция  READKEY()  проверяет,  было  ли
прекращено чтение нажатием клавиши Escape, и если так, восстанавливает
исходные значения полей даты из массива с помощью команды GATHER.

    ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
    і         Значения, возвращаемые функцией READKEY               і
    ГДДДДДДДДДДДДВДДДДДДДДДДДВДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і Клавиша(и) і Код не    і Код       і        Смысл             і
    і            і обновлялсяі обновлялсяі                          і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і Backspace  і           і           і                          і
    і Д         і           і           і                          і
    і Ctrl+H     і    0      і   256     і Назад на один символ     і
    і CTRL+S     і           і           і                          і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і Д         і           і           і                          і
    і Ctrl+D    *і    1      і   257     і Вперед на один символ    і
    і Ctrl+L     і           і           і                          і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і Home       і           і           і                          і
    і Ctrl+A    *і    2      і   258     і Назад на одно слово      і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і End        і           і           і                          і
    і Ctrl+F     і    3      і   259     і Вперед на одно слово     і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і           і           і           і                          і
    і Ctrl+E    *і           і           і                          і
    і Shift+Tab  і    4      і   260     і Назад на одно поле       і
    і Ctrl+K    *і           і           і                          і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і           і           і           і                          і
    і Ctrl+X    *і           і           і                          і
    і Tab        і           і           і                          і
    і Ctrl+Enter і    5      і   261     і Вперед на одно поле      і
    і Ctrl+I     і           і           і                          і
    і Ctrl+J     і           і           і                          і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і PgUp       і           і           і                          і
    і Ctrl+R    *і    6      і   262     і Назад на один экран      і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і PgDn       і           і           і                          і
    і Ctrl+C     і    7      і   263     і Вперед на один экран     і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і Ctrl+Q     і           і           і                          і
    і Escape     і    12     і   268     і Выход без сохранения     і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і Ctrl+End   і           і           і                          і
    і Ctrl+W     і    -      і   270     і Выход с сохранением      і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і Enter      і           і           і                          і
    і Ctrl+Д    і   15      і  271      іВозврат или наполнение    і
    і Ctrl+M     і           і           і                          і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і Превышение і           і           і                          і
    і лимита     і    20     і   276     і Превышение лимита времениі
    і времени    і           і           і                          і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і Ctrl+Home  і           і           і                          і
    і Ctrl+]     і    33     і   289     і Переключение показа меню і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і Ctrl+PgUp  і           і           і                          і
    і Ctrl+-     і    34     і   290     і Распахивание             і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і Ctrl+PgDn  і           і           і                          і
    і Ctrl+^     і    35     і   291     і Минимизация              і
    ГДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і F1         і    36     і   292     і Функциональная клавиша   і
    і            і           і           і подсказки                і
    АДДДДДДДДДДДДБДДДДДДДДДДДБДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

    * Если установлен режим SET SYSMENU OFF, или загружен FOXPLUS.FKY,
будут возвращаться  эти  значения.  FOXPLUS.FKY находится в директории
GOODIES.

    Параметр

    Если используется  необязательное  численное   выражение   ,
функция READKEY()   возвращает   значение,   указывающее,   как   была
прекращена последняя команда READ.  Численное выражение    может
иметь любое значение.  Далее приведены значения, возвращаемые функцией
READKEY() в зависимости от того,  как была прекращена  последняя
команда READ:

    ЪДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
    і Значение і           Событие             і
    ГДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і    1     і Ни одно из следующих          і
    ГДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і    2     і Появилась команда CLEAR READ  і
    ГДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і    3     і Выбрано управляющее средство  і
    і          і прекращения                   і
    ГДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і    4     і Закрыто окно чтения           і
    ГДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і    5     і Опция DEACTIVATE возвратила   і
    і          і значение .T.                  і
    ГДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
    і    6     і Превышен лимит времени чтения і
    АДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             RECALL              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Восстанавливает записи, помеченные для удаления, в прежнее состояние
    Синтаксис
RECALL
        [] [FOR ] [WHILE ]
        [NOOPTIMIZE]
    Смотри также
DELETE, PACK, SET DELETED, ZAP

    Описание
    Команда RECALL снимает отметку с записей,  помеченных для удаления
в  текущей  базе  данных.  Любая  команда  DELETE  может быть отменена
командой RECALL.
    RECALL может  быть  использована  для  обеспечения  восстановления
записей, если команды PACK или ZAP не были выполнены для этого файла.

    Внимание!!!
    После того, как команды PACK или ZAP были выполнены для файла, все
помеченные для удаления записи будут потеряны навсегда.

    Дополнительные опции

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

FOR 
    Если используется опция FOR ,  будут  восстановлены  только
записи, удовлетворяющие  логическому  условию  .  Использование
опции FOR  позволяет  вам  восстанавливать  записи  в  зависимости  от
условия, отфильтровывая нежелательные записи.
    Rushmore будет  оптимизировать  запрос  опции  FOR,  если  
является оптимизируемым выражением.  Для более эффективного выполнения
используйте в   опции   FOR   оптимизируемые   выражения.   Выражения,
оптимизируемые Rushmore,   описываются   в   главе  Оптимизация  ваших
прикладных программ в "Руководстве разработчика"  (Developer's  Guide)
по системе FoxPro.

WHILE 
    Если используется опция WHILE , записи восстанавливаются до
тех пор,  пока  логическое  выражение    будет  иметь  значение
"истинно" (.T.).

NOOPTIMIZE
    Для подавления  оптимизации  Rushmore  команды  RECALL используйте
опцию NOOPTIMIZE.  Более подробную  информацию  об  режиме  NOOPTIMIZE
можно найти в описании команды SET OPTIMIZE в этом руководстве.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            RECCOUNT             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает число записей в базе данных
    Синтаксис
RECCOUNT([ | ])
    Возвращаемый тип
Численный
    Смотри также
RECNO(), RECSIZE()

    Описание
    Функция RECCOUNT()  возвращает  число  записей  в   базе   данных.
Подсчитываются все  записи  в  базе  данных  независимо от статуса SET
DELETED и SET FILTER.

    Параметр
 | 
    Функция RECCOUNT() возвращает число записей в файле базы данных  в
текущей   рабочей   области.
    Вы можете получить число записей в базе данных,  открытой в другой
рабочей  области,  задав  номер  рабочей области  или псевдоним
базы данных .
    Если в заданной рабочей области нет открытой базы данных,  функция
RECCOUNT()  возвращает  ноль.  Если  нет  базы   данных   с   заданным
псевдонимом,  выдается  сообщение  "Alias  not  found"  ("Псевдоним не
найден").

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

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

*** Проверка пространства на диске перед сортировкой ***

USE customer

*** Считывание размера заголовка базы данных ***

dbf_top = HEADER()

*** Вычисление размера базы данных ***

file_size = dbf_top + (RECSIZE() * RECCOUNT() + 1)
IF DISKSPACE() > (file_size * 3)
   @ 5,0 SAY 'Sufficient diskspace to Sort.'
ELSE
   @ 5,0 SAY 'Insufficient diskspace. Sort cannot be done.'
ENDIF

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              RECNO              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает номер текущей записи
    Синтаксис
RECNO([ | ])
    Возвращаемый тип
Численный
    Смотри также
GO, RECCOUNT(), RECSIZE(), SEEK, SKIP

    Описание
    Функция RECNO() возвращает номер текущей  записи.  Текущая  запись
это запись, на которую установлен указатель записи.
    Функция RECNO() возвращает  значение,  на  единицу  большее  числа
записей в  файле,  если  указатель  записи  установлен после последней
записи в файле.  Функция RECNO() возвращает 1,  если указатель  записи
установлен перед первой записью в файле.
    Если база данных пуста,  функция RECNO() возвращает 1,  а  функция
EOF() возвращает значение "истинно" (.T.).

    Параметр
 | 
    Функция RECNO()  возвращает  номер  текущей  записи  в  файле базы
данных в текущей рабочей области.
    Вы можете получить номер текущей записи в базе данных,  открытой в
другой  рабочей  области,  задав  номер  рабочей  области    или
псевдоним базы данных .
    Если в заданной рабочей области нет открытой базы данных,  функция
RECNO() возвращает ноль.  Если нет базы данных с заданным псевдонимом,
выдается сообщение "Alias not found" ("Псевдоним не найден").

    Гибкий поиск RECNO(0)
    После неудачного  поиска  командой  SEEK  в  индексированной  базе
данных функция  RECNO(0)  использует  логику  "гибкого   поиска"   для
определения номера  записи  для  возвращения.  Если поиск неудачен,  и
соответствующая запись не найдена,  функция RECNO(0) возвращает  номер
наиболее соответствующей записи. Если не может быть найдено наибольшее
соответствие, функция RECNO(0) возвращает 0.
    Если значение  поиска больше,  чем последняя запись в базе данных,
утверждение GO RECNO(0) вызовет  утверждение  "Record  out  of  range"
("Запись не лежит в допустимых границах").

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

USE customer
SET ORDER TO company
SEEK 'John Doe'
IF FOUND()
  DISPLAY
ELSE
  GOTO RECNO(0)
  ? 'Closest matching company is ' + company
ENDIF

    Результатом выполнения программы будет:

Closest matching company is Jordon Books

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             RECSIZE             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает размер записи базы данных
    Синтаксис
RECSIZE([ | ])
    Возвращаемый тип
Численный
    Смотри также
FSIZE(), RECCOUNT()

    Описание
    Функция RECSIZE() возвращает размер (ширину) поля базы данных.

    Параметр
 | 
    Функция RECSIZE() возвращает размер записи в файле базы  данных  в
текущей рабочей области.
    Вы можете получить размер записи в базе данных,  открытой в другой
рабочей области, задав номер рабочей области  или псевдоним базы
данных .
    Если в заданной рабочей области нет открытой базы данных,  функция
RECSIZE()  возвращает  ноль.  Если  нет   базы   данных   с   заданным
псевдонимом,  выдается  сообщение  "Alias  not  found"  ("Псевдоним не
найден").

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

*** Проверка пространства на диске перед сортировкой ***

USE customer

*** Считывание размера заголовка базы данных ***

dbf_top = HEADER()

*** Вычисление размера базы данных ***

file_size = dbf_top + (RECSIZE() * RECCOUNT() + 1)
IF DISKSPACE() > (file_size * 3)
   @ 5,0 SAY 'Sufficient diskspace to Sort.'
ELSE
   @ 5,0 SAY 'Insufficient diskspace. Sort cannot be done.'
ENDIF

    В этом  примере FoxPro сравнивает объем свободного пространства на
диске с объемом, требуемым для выполнения сортировки.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            REGIONAL             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Создает зональные переменные памяти и массивы переменных памяти
    Синтаксис
#REGION 

REGIONAL 
    Замечания
Новая в FoxPro 2.0
    Смотри также
PRIVATE, PUBLIC, STORE

    Описание
    Команда REGIONAL  создает  зональные  переменные  памяти и массивы
переменных памяти. Переменные памяти или массивы с идентичными именами
могут быть  созданы  без  влияния друг на друга - их значения защищены
внутри "зоны". Зональные переменные подобны локальным переменным.
    Например, зональные  переменные  могут быть использованы в наборах
экранов. Экраны создаются  Компоновщиком  экранов.  Несколько  экранов
могут быть  скомбинированы  в  наборе  экранов,  и  генерируется  одна
программа. Управляющее средство в одном экране может  использовать  то
же имя переменной,  что и управляющее средство в другом экране.  Когда
эти экраны комбинируются в наборе экранов, и создается одна программа,
возникает конфликт между переменной, использующейся в обоих экранах.
    Объявления переменных экрана как зональных в  программе  установки
экрана обеспечивает  то,  что  переменные  одного  экрана не влияют на
переменные с теми же именами,  использующиеся в  другом  экране.  Если
переменные в  экранах  в  наборе  экранов  объявлены  в  их программах
установки как зональные, FoxPro автоматически предотвращает конфликты.
    Программа генерации   экранов   GENSCRN   автоматически  вставляет
необходимые директивы   компилятора   #REGION    для    предотвращения
конфликтов между переменными памяти с одинаковыми именами.

    Создание зональных переменных
#REGION 
    Зональные переменные должны быть объявлены перед их использованием
в программе. Зона создается директивой компилятора #REGION (#REGION не
является командой). Используйте номера зон от 0 до 31.

REGIONAL 
    После создания  зоны  директивой  #REGION   вы   можете   объявить
переменные для  этой  зоны  командой REGIONAL.  Вы можете использовать
список переменных памяти и массивов,  разделенных запятыми,  в .
    Во время компиляции программы,  если уже была компилирована другая
зональная   переменная   с  тем  же  именем,  второе  появление  имени
переменной в описании зональных  переменных  делается  уникальным  для
предотвращения возможных   конфликтов   с  ранее  описанной  зональной
переменной.
    Имена переменных  делаются уникальными дополнением имени зональной
переменной до 10 символов с  использованием  символа  подчеркивания  и
номера  текущей  зоны.  Эта подстановка для создания уникального имени
переменной проводится во время компиляции программы  и  не  влияет  на
скорость выполнения.
    Когда имя   переменной   модифицируется,   модифицированное    имя
переменной может быть перечислено командой DISPLAY MEMORY.  Для
просмотра переменной в  Окне  отладки  (Debug)  используйте  ее
модифицированное   имя.   Так   как  Окно  трассировки  (Trace)
использует исходный программный код, в Окне трассировки (Trace)
используется  ее  исходное  имя  (а  не  модифицированное  имя,
созданное компилятором).

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    Создаются два  набора  зональных  переменных.  В  зоне 1 создаются
переменные A,  B,  C и D,  и в каждой  сохраняется  символьная  строка
'One'. В  зоне  2  создаются  переменные  C,  D,  E  и  F,  и в каждой
сохраняется символьная строка 'Two'.  Переменные C и D являются общими
для обеих зон.
    Предоставляется вывод на  экран  командой  DISPLAY  MEMORY.  Имена
переменных памяти  C  и D модифицируются во второй зоне.  C становится
C_______2, а  D  становится   D_______2.   Все   переменные   являются
локальными и могут быть доступны программами более низкого уровня.

#REGION 1
REGIONAL A,B,C,D
STORE 'One' to A,B,C,D

#REGION 2
REGIONAL C,D,E,F        && C и D являются общими для обеих зон
STORE 'Two' to C,D,E,F
DO showmemory
PROCEDURE showmemory
DISPLAY MEMORY LIKE *

*** Вывод команды DISPLAY MEMORY ***

A          Priv  C  "One"
B          Priv  C  "One"
C          Priv  C  "One"
D          Priv  C  "One"
C_______2  Priv  C  "Two"
D_______2  Priv  C  "Two"
E          Priv  C  "Two"
F          Priv  C  "Two"

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             REINDEX             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Перестраивает открытые индексные файлы
    Синтаксис
REINDEX [COMPACT]
    Замечания
Усилена в FoxPro 2.0: Опция COMPACT
    Смотри также
INDEX, SET INDEX, SET UNIQUE, SYS(), USE

    Описание
    Команда REINDEX обновляет  индексные  файлы.  Индексные  файлы  не
соответствуют базе   данных,   когда  база  данных  была  открыта  без
соответствующих индексных файлов,  и были сделаны  изменения  в  полях
ключей индексных  файлов.  Когда индексные файлы не соответствуют базе
данных, они должны быть обновлены с помощью переиндексирования.
    Командой REINDEX  обновляются  все  индексные  файлы,  открытые  в
текущей рабочей  области.  Также  обновляются   все   теги   составных
индексных файлов .CDX.

    Дополнительные опции
COMPACT
    FoxPro распознает  тип  каждого индексного файла и переиндексирует
их соответствующим образом.  Однако,  вы можете преобразовать  обычные
индексные файлы .IDX в компактные индексные файлы .IDX с помощью опции
COMPACT.
    Все индексные файлы, созданные с опцией UNIQUE команды INDEX или с
режимом  SET   UNIQUE   ON,   сохраняют   их   статус   UNIQUE   после
переиндексации.
    Для переиндексации индексных файлов выдайте следующие команды:

USE  INDEX 
REINDEX

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            RELATION             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает выражения отношений для базы данных
    Синтаксис
RELATION([,  | ])
    Параметры
  Указывает, какое отношение нужно возвратить
  Номер рабочей области для базы данных
   Псевдоним базы данных
    Возвращаемый тип
Символьный
    Смотри также
DISPLAY STATUS, FILTER(), LIST STATUS, SET RELATION, SET RELATION OFF,
TARGET()

    Описание
    Эта функция   возвращает  выражение  отношения  для  базы  данных,
открытой в  заданной  рабочей  области.  Если  отношения  отсутствуют,
возвращается пустая  строка.  Более  подробную  информацию  о создании
отношений между базами данных  можно  найти  в  описании  команды  SET
RELATION.
    Команды DISPLAY STATUS и LIST STATUS также предоставляют выражения
отношений.

    Параметры

    Численное выражение      задает   возвращаемое   отношение.
Например, если  равно 3,  функция RELATION возвращает выражение
отношения для отношения, созданного третьим.

 | 
    Функция RELATION() возвращает выражения отношений для  файла  базы
данных в текущей рабочей области.
    Вы можете получить выражения отношений для базы данных, открытой в
другой  рабочей  области,  задав  номер  рабочей  области   или
псевдоним базы данных .
    Если в заданной рабочей области нет открытой базы данных,  функция
RELATION() возвращает пустую строку.  Если нет базы данных с  заданным
псевдонимом,  выдается  сообщение  "Alias  not  found"  ("Псевдоним не
найден").

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

CLOSE ALL
SELECT 0
USE payments ORDER cust_id
SELECT 0
USE invoice ORDER cust_id
SELECT 0
USE customer
SET RELATION TO cust_id INTO invoice
SET RELATION TO cust_id INTO payments ADDITIVE
? RELATION(1)

CUST_ID

? RELATION(2)

CUST_ID

? RELATION(3)                && пустая строка

    В этом  примере  устанавливается отношение (по полю CUST_ID) между
базой данных CUSTOMER и базой данных INVOICE и отношение  по  тому  же
полю между  базой  данных  CUSTOMER и базой данных PAYMENTS.  Ключевое
слово ADDITIVE  используется  во  втором  отношении   для   добавления
отношения к ранее существующему, а не замены его.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             RELEASE             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Отключает переменные  памяти,  меню,  пункты  меню,  всплывающие меню,
команды всплывающих меню и окна
    Синтаксис
RELEASE 

RELEASE ALL
        [LIKE  | EXCEPT ]

RELEASE MENUS [
        [EXTENDED]]

RELEASE PAD 
        OF 
        | RELEASE PAD ALL OF 

RELEASE POPUPS [
        [EXTENDED]]


RELEASE BAR  OF 
        | RELEASE BAR ALL OF
        

RELEASE WINDOWS []
    Замечания
В FoxPro 2.0 в  команды  RELEASE  MENUS  и  RELEASE  POPUPS  добавлено
ключевое слово EXTEND и добавлены команды RELEASE BAR и RELEASE PAD
    Смотри также
CLEAR MEMORY, DEACTIVATE POPUP, DEFINE MENU, DEFINE PAD, DEFINE POPUP,
DEFINE BAR, DEFINE WINDOW

    Описание
    Команда RELEASE  удаляет переменные и массивы,  меню,  всплывающие
меню, окна,  определенные пользователем,  и системные окна из  памяти.
Это  делает  ранее  распределенную  память  доступной  для  повторного
использования.  Системные переменные никогда не могут быть удалены  из
памяти.
    Вы можете также удалить команды из всплывающих меню  и  пункты  из
линеек меню.  Команды  и  пункты  Системной  линейки  меню и Системных
всплывающих меню  могут  быть  выборочно  удалены.  Далее   приводятся
различные форматы команды RELEASE.

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

RELEASE ALL [LIKE  | EXCEPT ]
    Команда RELEASE ALL может освобождать всю память, распределенную в
данный  момент под переменные памяти и массивы,  (формат RELEASE ALL),
память,  распределенную под переменные  памяти  или  массивы,  которые
соответствуют  заданному  скелету  ,  (формат  RELEASE  ALL LIKE
)  или  память,  распределенную  под  все  переменные  памяти  и
массивы,  кроме  соответствующих  заданному  скелету  ,  (формат
RELEASE ALL EXCEPT ).  Этот скелет  может включать в  себя
метасимволы * и ?.

    Важно!!!
    Команды RELEASE ALL,  RELEASE ALL LIKE и  RELEASE  ALL  EXCEPT  не
удаляют глобальные переменные при использовании внутри программы.  Для
удаления глобальных переменных  используйте  команду  RELEASE  .

RELEASE MENUS [ [EXTENDED]]
    Команда RELEASE MENUS убирает выбранные линейки меню, определенные
пользователем,  из памяти, а также с экрана или из окна. Активное меню
должно быть деактивизировано командой DEACTIVATE MENU перед  тем,  как
оно будет удалено из памяти.  Меню,  которые требуется удалить, должны
быть перечислены в списке меню . Если команда RELEASE MENUS
выдается без списка  меню  ,  то  все  меню,  определенные
пользователем, будут удалены из памяти и с экрана или из окна.
    Линейка меню со всеми подчиненными ей пунктами, всплывающими меню,
линейками и процедурами ON может быть удалена использованием ключевого
слова EXTENDED в команде RELEASE MENUS.

RELEASE PAD  OF 
| RELEASE PAD ALL OF 
    Команда RELEASE PAD удаляет пункты меню из линеек меню.  Вы можете
выборочно удалить пункт из линейки меню,  определенной  пользователем,
или из  Системной  линейки меню (Edit,  File,  Database ...) с помощью
имени пункта .  Например,  команда  RELEASE  PAD  _MEDIT  OF
_MSYSMENU удаляет  пункт  Edit  и  его  всплывающее  меню  из  линейки
Системного меню.
    Если вы  используете  ключевое слово ALL,  удаляются все пункты из
линейки меню,  определенной пользователем. ALL не может использоваться
для удаления пунктов из линейки Системного меню.

RELEASE POPUPS [ [EXTENDED]]
    Команда RELEASE  POPUPS  убирает   выбранные   всплывающие   меню,
определенные пользователем,  из памяти,  а также с экрана или из окна.
Активное  всплывающее  меню  должно  быть  деактивизировано   командой
DEACTIVATE MENU перед тем, как оно будет удалено из памяти.
    Всплывающие меню,   которые   требуется   удалить,   должны   быть
перечислены в списке  всплывающих  меню  .  Если  команда
RELEASE  POPUPS выдается без списка всплывающих меню ,  то
все всплывающие меню,  определенные пользователем,  будут  удалены  из
памяти и с экрана или из окна.
    Системные всплывающие   меню,   которые   возникают  под  линейкой
Системного меню,  также могут быть удалены.  Для  удаления  Системного
всплывающего меню   используйте   имя   Системного  всплывающего  меню
(_MSYSTEM, _MFILE, _MEDIT, _MDATA, _MRECORD, _MPROG или _MWINDOW). Для
восстановления стандартной   линейки   Системного   меню  и  Системных
всплывающих меню используйте команду SET SYSMENU TO DEFAULT.
    Всплывающее меню   со   всеми   всплывающими   меню,  линейками  и
процедурами ON  может  быть  удалена  использованием  ключевого  слова
EXTENDED в команде RELEASE POPUPS.

RELEASE BAR  OF 
| RELEASE BAR ALL OF 
    Команда RELEASE  BAR удаляет команды меню из всплывающих меню.  Вы
можете выборочно удалить команду из всплывающего меню,  определенного
пользователем, используя номер команды . Для удаления команды из
Системного меню (Edit,  File,  Database ...) используйте в   имя
Системной команды.
    Если вы используете ключевое слово ALL,  удаляются все команды  из
всплывающего   меню,   определенного   пользователем.   ALL  не  может
использоваться для удаления команд из Системного всплывающего меню.

RELEASE WINDOWS []
    Команда RELEASE  WINDOWS  удаляют  окна,  указанные  в списке окон
 из памяти и с экрана или из окна.  Список  окон   может содержать и окна,  определенные пользователем, и системные
окна FoxPro.
    "Настольная оргтехника"  FoxPro  и  системные  окна  FoxPro  могут
удаляться с экрана или из порождающего окна командой RELEASE  WINDOWS.
Далее приводится список окон "настольной оргтехники" и системных окон,
которые могут удаляться с экрана или  из  порождающего  окна  командой
RELEASE WINDOWS:

    ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДї
    і "Настольная оргтехника"                  і Системные окна      і
    ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДґ
    і Filer (Средство работы с файлами         і Command (Командное) і
    ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДґ
    і Calculator (Калькулятор)                 і Debug (Отладка)     і
    ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДґ
    і CALENDAR/Diary (Календарь/Дневник)       і Trace (Трассировка) і
    ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДґ
    і SPECIAL Characters (Специальные символы) і View (Просмотр)     і
    ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДґ
    і ASCII Chart (Таблица ASCII)              і                     і
    ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ                     і
    і Puzzle (Головоломка)                     і                     і
    АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДЩ

    При удалении  окна  "настольной ортехники" с именем,  состоящим из
двух частей  (CALENDAR/Diary,  SPECIAL   Characters,   ASCII   Chart),
используйте просто первую часть имени (представленную здесь заглавными
буквами).
    Например, для  удаления  окна  ASCII Chart (Специальные символы) с
экрана или из окна,  используйте команду  RELEASE  WINDOW  ASCII.  Для
помещения окна  "настольной  оргтехники"  или системного окна на экран
или в окно используйте команду ACTIVATE WINDOW.
    Если вы  не  используете  список  окон  ,  удаляется
текущее окно вывода.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

*** Удаление пунктов из линейки Системного меню ***

RELEASE PAD _MSM_SYSTM OF _MSYSMENU
RELEASE PAD _MSM_WINDO OF _MSYSMENU

*** Удаление команд из Системных меню ***

RELEASE BAR _MST_PUZZL OF _MSYSTEM
RELEASE BAR _MDA_SUM  OF _MDATA

    Эти команды  соответственно  удаляют  пункты  System  (Система)  и
Window (Окно) из линейки Системного меню, команду Puzzle (Головоломка)
из меню System (Система) и команду Sum (Сумма) из меню Database  (База
данных).

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є         RELEASE MODULE          є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Освобождает память, занятую бинарными программами
    Синтаксис
RELEASE MODULE 
    Смотри также
CALL, LOAD

    Описание
    Команда RELEASE MODULE  удаляет бинарную программу,  которая
ранее  была  загружена  в  память  командой  LOAD.  Бинарные программы
размещаются в памяти командой LOAD и вызываются на выполнение командой
CALL.  Одновременно  в  памяти  может  быть  размещено  до 16 бинарных
программ.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             RENAME              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Переименовывает файл на диске
    Синтаксис
RENAME  TO 
    Смотри также
COPY FILE, COPY TO, FILER

    Описание
    Команда RENAME    используется    для    переименовывания   файла,
представленного в команде именем ,  который получает новое  имя
.  Расширения  файлов  должны  быть представлены для обоих имен
  и  .
    Если расширение   файла  не  использовано  в    и  ,
принимается расширение по умолчанию .DBF. Если вы хотите переименовать
файл, не имеющий расширения, укажите после имени файла точку (.).
    Спецификации директории  и  устройства могут использоваться,  если
эти файлы не располагаются на устройстве, принятом по умолчанию.
    Для успешного   выполнение   команды  RENAME  предполагается,  что
существует файл с именем ,  и он не открыт,  а  файл  с  именем
 не существует.
    Переименование открытого файла вызовет ошибку "File in use" ("Файл
используется").

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             REPLACE             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Обновляет записи базы данных
    Синтаксис
REPLACE
         WITH  [ADDITIVE]
        [,  WITH  [ADDITIVE]] ...
        [] [FOR ] [WHILE ]
        [NOOPTIMIZE]
    Смотри также
GATHER, SCATTER

    Описание
    Команда REPLACE   заменяет   данные,  ранее  находившиеся  в  поле
, на данные в выражении . Поля базы данных, находящейся
не в  текущей  рабочей области,  должны указываться с псевдонимом базы
данных.

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

    Дополнительные опции
 WITH 
[,  WITH  ...
    Заменяет данные в поле  на  данные  в  выражении  ,
заменяет данные в поле  на данные в выражении  и т. д.
    В случае численных полей,  когда значение выражения в  предложении
WITH   больше,   чем  реальная  ширина  поля,  команда  REPLACE  будет
производить следующее:
    - Сначала, дробные позиции будут обрезаны и оставшаяся часть будет
округлена.
    - Если  полученное  значение  опять  не будет соответствовать,  то
экспоненциальное представление числа заменит заданное содержимое  поля
(точность будет потеряна).
    - Если опять неудача,  то содержимое поля будет заполнено символом
звездочка.


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

FOR 
    Если используется опция FOR , будут заменены только записи,
удовлетворяющие логическому условию .  Использование опции  FOR
позволяет вам заменять записи в зависимости от условия, отфильтровывая
нежелательные записи.
    Rushmore будет  оптимизировать  запрос  опции  FOR,  если  
является оптимизируемым выражением.  Для более эффективного выполнения
используйте в   опции   FOR   оптимизируемые   выражения.   Выражения,
оптимизируемые Rushmore,   описываются   в   главе  Оптимизация  ваших
прикладных программ в "Руководстве разработчика"  (Developer's  Guide)
по системе FoxPro.

WHILE 
    Если используется опция WHILE ,  записи будут заменяться до
тех пор,  пока значение  логического  выражения    будет  равно
значению "истинно" (.T.).

ADDITIVE
    Опция ADDITIVE применяется при заменах только в memo  полях.  Если
опция  ADDITIVE  указана,  то  замещающие  данные  добавляются в конец
текста соответствующего memo поля.  Если опция ADDITIVE не задана,  то
содержимое  соответствующего  memo  поля  замещается  на  новые данные
.

NOOPTIMIZE
    Для подавления  оптимизации  Rushmore  команды REPLACE используйте
опцию NOOPTIMIZE.  Более подробную  информацию  об  режиме  NOOPTIMIZE
можно найти в описании команды SET OPTIMIZE в этом руководстве.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

CLOSE ALL
USE customer
SET TALK OFF
SCATTER MEMVAR BLANK
DEFINE WINDOW menter FROM 7,10 to 17,70 PANEL
ACTIVATE WINDOW menter
@ 1,3  SAY 'Company: ' GET m.company
@ 3,3  SAY 'Address: '  GET m.address1
@ 5,3  SAY 'City: '     GET m.city
@ 7,3  SAY 'State: '    GET m.state
@ 7,18 SAY 'Zip: '      GET m.zip
READ
DEACTIVATE WINDOW menter
IF UPDATED()
    APPEND BLANK
    REPLACE company           WITH m.company
    REPLACE address1          WITH m.address1
    REPLACE city              WITH m.city
    REPLACE state             WITH m.state
    REPLACE zip               WITH m.zip
ENDIF

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            REPLICATE            є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает символьную  строку,  получившуюся  повторением  символьного
выражения заданное число раз
    Синтаксис
REPLICATE(, )
    Параметры
  Повторяемое символьное выражение
  Число повторений символьного выражения
    Возвращаемый тип
Символьный
    Смотри также
SPACE()

    Описание
    Функция REPLICATE()  возвращает  символьную  строку,  получившуюся
повторением символьного  выражения  заданное  число  раз.  Эта функция
полезна для создания гистограмм и форматов экранов.
    Максимальная длина   результирующей  строки  не  должна  превышать
64,000 символов в FoxPro.  В Расширенной  Версии  FoxPro  максимальная
длина результирующей  строки  ограничивается  только объемом доступной
памяти.

    Параметры

    Повторяемое символьное выражение задается параметром .


    Символьное выражение  повторяется  раз.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Примеры             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

? REPLICATE('HELLO ',5)

HELLO HELLO HELLO HELLO HELLO

@ 2,05,12,59 BOX REPLICATE(CHR(177),9)

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             REPORT              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Производит отчет
    Синтаксис
REPORT [FORM  | ?]
        [ENVIRONMENT]
        [] [FOR ] [WHILE ]
        [HEADING ]
        [NOEJECT]
        [NOCONSOLE]
        [NOOPTIMIZE]
        [PDSETUP]
        [PLAIN]
        [PREVIEW]
        [TO PRINTER | TO FILE ]
        [SUMMARY]
    Замечания
Усилена в FoxPro  2.0:  Опции  PREVIEW  и  NOCONSOLE,  ключевое  слово
NOOPTIMIZE
    Смотри также
CREATE REPORT, MODIFY REPORT

    Описание
    Команда REPORT используется для генерации отчетов под  управлением
файлов  описания  отчета,  которые должны быть сгенерированы командами
CREATE REPORT и MODIFY REPORT. Полученные отчеты могут быть посланы на
принтер,  на  экран,  в окно или вя4 я0текстовый файл.
    Если команда  REPORT  выдается  без   дополнительных   аргументов,
появляется диалог  Открыть  файл  (Open  File),  который предоставляет
список файлов отчетов для выбора.
    Более подробную  информацию  о  создании  отчетов  можно  найти  в
"Руководстве по интерфейсу" (Interface Guide) системы FoxPro.

    Дополнительные опции
FORM 
    Вы можете задать отчет  для  печати,  использованием  имени  файла
описания отчета  после ключевого слова FORM.

?
    Если вы используете опцию ?,  появится диалог Открыть  файл  (Open
File) со списком существующих файлов отчетов для выбора.

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


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

FOR 
    Если используется опция FOR , в отчете будут использоваться
только    записи,   удовлетворяющие   логическому   условию   .
Использование опции  FOR   позволяет   вам   использовать   записи   в
зависимости от условия, отфильтровывая нежелательные записи.
    Rushmore будет  оптимизировать  запрос  опции  FOR,  если  
является оптимизируемым выражением.  Для более эффективного выполнения
используйте в   опции   FOR   оптимизируемые   выражения.   Выражения,
оптимизируемые Rushmore,   описываются   в   главе  Оптимизация  ваших
прикладных программ в "Руководстве разработчика"  (Developer's  Guide)
по системе FoxPro.

WHILE 
    Если используется опция WHILE ,  записи включаются в  отчет
до  тех  пор,  пока  логическое выражение  будет иметь значение
"истинно" (.T.).

HEADING 
    Опция HEADING   используется  для  задания  дополнительной  строки
заголовка, располагающейся в начале каждой  страницы  отчета.  Если  в
команде REPORT   одновременно  используются  опции  HEADING  и  PLAIN,
приоритет имеет опция PLAIN.

NOEJECT
    Опция NOEJECT  подавляет  подачу страницы в принтере перед печатью
отчета.

NOCONSOLE
    Опция NOCONSOLE  подавляет  представление  отчета  на экране или в
окне, когда отчет печатается или пересылается в текстовый файл.

NOOPTIMIZE
    Для подавления  оптимизации  Rushmore  команды  REPORT используйте
опцию NOOPTIMIZE.  Более подробную  информацию  об  режиме  NOOPTIMIZE
можно найти в описании команды SET OPTIMIZE в этом руководстве.

PDSETUP
    Когда вы создаете описание  отчета  с  помощью  Редактора  отчетов
(Report Writer)   FoxPro,   вы   можете   задать  установку  принтера,
определяющую внешний  вид  отчета  при  печати.  Если  вы   сохраняете
состояние среды   в   описании  отчета,  также  сохраняется  установка
принтера. Если вы используете необязательное  ключевое  слово  PDSETUP
при печати  отчета  командой REPORT,  установка принтера загружается и
используется во время печати.

PLAIN
    Если используется  опция PLAIN,  заголовки страниц будут возникать
только в начале отчета.

PREVIEW
    Использование опции   PREVIEW  посылает  представление  отчета  на
экран, что позволяет вам  проверить  содержание  и  компоновку  отчета
перед его печатью.  Если используется опция PREVIEW,  отчет посылается
на экран для предварительного исследования и не печатается. Для печати
отчета вы должны выдать другую команду REPORT FORM без опции PREVIEW.

TO PRINTER | TO FILE 
    Если используется  опция  TO  PRINTER,  отчет  посылается   и   на
указанное устройство  печати,  и  на экран или в окно.  Если эта опция
опущена, отчет представляется только на экране. Опция TO FILE посылает
отчет в заданный ASCII текстовый файл .

SUMMARY
    Опция SUMMARY подавляет печать  всех  строк  отчета,  кроме  строк
итогов и подытогов.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є          RESTORE FROM           є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Восстанавливает переменные памяти и массивы из файла переменных памяти
или memo поля
    Синтаксис
RESTORE FROM  | FROM MEMO 
        [ADDITIVE]
    Смотри также
DIMENSION, PRIVATE, PUBLIC, SAVE TO, RELEASE, STORE

    Описание
    Команда RESTORE  FROM  извлекает  переменные  памяти   и   массивы
переменных памяти,  которые до этого уже были сохранены в определенном
файле переменных памяти,  и размещает  их  в  памяти.
    Когда команда  RESTORE  FROM  выдается  внутри  программы,  то все
переменные памяти и массивы переменных  памяти  восстанавливаются  как
локальные  (PRIVATE).  Когда  команда  RESTORE  FROM  выдается  внутри
Командного окна,  то все переменные памяти и массивы переменных памяти
восстанавливаются как глобальные (PUBLIC).
    Когда выдается  команда RESTORE FROM,  любые переменные памяти или
массивы переменных памяти,  которые в настоящий момент  расположены  в
памяти,  очищаются,  если  не  используется необязательное предложение
ADDITIVE.
    Команды RESTORE FROM и SAVE TO не влияют на  системные  переменные
памяти.

    Дополнительные опции
RESTORE FROM 
    Восстанавливает переменные  памяти  и  массивы  из заданного файла
переменных памяти.

RESTORE FROM 
    Восстанавливает переменные  памяти  и  массивы  из  заданного memo
поля.

ADDITIVE
    Когда выдается  команда RESTORE FROM,  любые переменные памяти или
массивы переменных памяти,  которые в настоящий момент  расположены  в
памяти,  очищаются,  если  не  используется необязательное предложение
ADDITIVE. Если  количество  добавленных  опцией  ADDITIVE   переменных
памяти  или  массивов  переменных  памяти приводит к превышению общего
лимита памяти под переменные памяти,  тогда в памяти  будет  размещено
максимально   возможное  количество  переменных  памяти  или  массивов
переменных памяти из указанного файла переменных памяти или memo поля.
По умолчанию,  для  файлов  переменных памяти принято расширение имени
файла .MEM.
    Если вы восстанавливаете переменную,  которое имеет одинаковое имя
с уже   имеющейся   переменной,   значение   существующей   переменной
изменяется на  значение переменной из файла переменных памяти или memo
поля.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

val1 = 50
val2 = 'Hello'
SAVE TO temp
CLEAR MEMORY
val3 = DATE()
RESTORE FROM temp ADDITIVE
DISPLAY MEMORY LIKE val?

    В этом примере две  переменных  памяти  создаются,  сохраняются  в
файле переменных  памяти  и  затем  восстанавливаются  без   замещения
третьей переменной памяти.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є         RESTORE MACROS          є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Восстанавливает макросы клавиатуры из файла или memo поля
    Синтаксис
RESTORE MACROS
        [FROM  | FROM MEMO ]
    Смотри также
CLEAR, PLAY MACRO, SAVE MACROS

    Описание
    Эта команда позволяет вам восстановить набор макросов  клавиатуры,
который был сохранен в файле макросов клавиатуры или memo поле.
    FoxPro позволяет вам сохранить серию нажатий на клавиши  в  памяти
как макрос клавиатуры.  Когда вы заканчиваете работу с FoxPro,  то эти
созданные вами макросы теряются,  если только вы  не  сохранили  их  в
некотором  файле макросов или memo поле с помощью команды SAVE MACROS.
Макросы  также  могут  быть  сохранены  в  файле,  если  в   Системном
всплывающем меню будет выбрана команда Macros... (Макросы...), а затем
команда Save (Сохранить).
    Если набор макросов клавиатуры сохранен в файле или memo поле,  то
они могут быть восстановлены и размещены в памяти  с  помощью  команды
RESTORE MACROS.
    По умолчанию,  восстановление макросов  из  файла  или  memo  поля
аддитивно - макросы добавляются к существующему набору макросов.  Если
имя макроса в файле или memo поле совпадает с именем уже существующего
макроса, макрос из файла или memo поля заменит существующий макрос. По
умолчанию,  для файлов макросов принято расширение имени  файла  .FKY.
Макросы  могут  также  быть  восстановлены  из  файла если в Системном
всплывающем меню будет выбрана команда Macros...  (Макросы),  а  затем
команда Restore (восстановить).
    За более подробной информацией о макросах клавиатуры обратитесь  к
"Руководству по интерфейсу" (Interface Guide) системы FoxPro.

    Дополнительные опции
FROM 
    Задает файл макросов, который содержит восстанавливаемые макросы.

FROM MEMO 
    Задает memo поле, которое содержит восстанавливаемые макросы.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є         RESTORE SCREEN          є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Восстанавливает образ экрана или окна из памяти
    Синтаксис
RESTORE SCREEN [FROM ]
    Смотри также
RESTORE FROM, SAVE SCREEN, SAVE TO

    Описание
    Команда RESTORE  SCREEN  позволяет вам восстановить предварительно
сохраненный экран или окно из экранного буфера,  из переменной  памяти
или  из  элемента массива.  Текущий экран или активное окно помещают в
экранный буфер,  в переменную памяти или в элемент массива  с  помощью
команды SAVE SCREEN.

    Дополнительные опции
FROM 
    Указывает, что  экран  или  окно  восстанавливается  из переменной
памяти или элемента массива переменных  памяти.  Если  вы  не  задаете
опцию FROM, окно восстанавливается из экранного буфера.
    Переменная памяти или  элемент  массива,  которые  содержат  образ
экрана  или  окна  как  свое  значение,  при выдаче на экран с помощью
команды DISPLAY  MEMORY  сопровождаются  признаком  типа  данных  "S".
Экраны  или  окна,  сохраненные  в  переменной  памяти  или в элементе
массива,  могут сохраняться и восстанавливаться также,  как  и  другие
переменные  памяти.  Способность  сохранять  и  восстанавливать образы
экрана или окна уменьшает необходимость повторной визуализации  экрана
или  окна  шаг за шагом в каждый момент времени,  когда экран или окно
должны быть отображены заново.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є         RESTORE WINDOW          є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Восстанавливает описания окон в памяти из файла или memo поля
    Синтаксис
RESTORE WINDOW  | ALL
        FROM  | FROM MEMO 
    Смотри также
ACTIVATE WINDOW, DEFINE WINDOW, SAVE WINDOW

    Описание
    Команда RESTORE WINDOW позволяет вам восстановить в  памяти  окна,
сохраненные  в файле окон или memo поле.  Этот файл окон или memo поле
содержит окна,  предварительно определенные с помощью  команды  DEFINE
WINDOW  и  сохраненные  в  файле  или memo поле с помощью команды SAVE
WINDOW.  По умолчанию,  для оконных файлов  принято  расширение  имени
файла.WIN.
    Любые окна в памяти с именами,  идентичными именам  окон,  которые
восстанавливаются из файла окон или memo поля,  будут заменены новыми.
Статус  окна  (hidden  (затенено),  active   (активно),...),   которое
сохранялось  на  диске  или  в  memo  поле,  будет  восстановлен  в то
состояние, которое имело место в момент сохранения окна.

    Дополнительные опции

    Одно или несколько восстанавливаемых окон.

ALL
    Восстанавливает все окна, находящиеся в файле окон или memo поле.

FROM 
    Файл окон на диске, из которого будут восстанавливаться окна.

FROM MEMO 
    Memo поле, из которого будут восстанавливаться окна.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

CLEAR
DEFINE WINDOW output FROM 2,1 TO 13,75 TITLE 'Output' ;
        CLOSE FLOAT GROW SHADOW ZOOM
SAVE WINDOW output TO temp
CLEAR WINDOWS
RESTORE WINDOW output FROM temp
ACTIVATE WINDOW output

    В этом   примере   окно  с  именем  OUTPUT  определяется  и  затем
сохраняется в переменной памяти. Очищаются все окна, затем окно OUTPUT
восстанавливается и активизируется.
    


?????? ???????????