ACCEPT
операторы
END
ACCEPT
Обработчик события.операторы Операторы программы.
Цикл
ACCEPT - это обработчик событий, предназначенный для обслуживания событий, порожденных Windows для структур APPLICATION и WINDOW. Окно и ACCEPT-цикл тесно связаны друг с другом - при открытии окна последующий ACCEPT-цикл будет обрабатывать все события именно для данного окна.По выполнению оператор
ACCEPT сходен с оператором цикла LOOP - внутри него можно использовать операторы BREAK и CYCLE. ACCEPT-цикл исполняется всякий раз, когда возникающее событие требует определенных действий со стороны программы. ACCEPT ожидает события от процедур библиотеки времени исполнения с тем, чтобы обработать его посредством исполнения операторов. Пока ACCEPT ждет события, управление передается процедурам библиотеки времени исполнения для автоматической обработки стандартных Windows-событий - тех, которые не требуют программных действий (например, восстановление графического образа экрана).Текущие значения USE-переменных всех STRING-полей (в верхнем окне каждого процесса) автоматически отображаются на экран всякий раз, когда программа возвращается в начало ACCEPT-цикла. Следовательно, отпадает необходимость в явном исполнении оператора DISPLAY, чтобы обновить экран данными, предназначенными только для отображения. Если не было установлено свойство PROP:Auto, отвечающее за автоматическое отображение всех USE-переменных во время последующей итерации ACCEPT-цикла, то
значения USE-переменной поля любого другого типа автоматически отображаются на экран при возникновении событий, связанных с этим полем.Внутри ACCEPT-цикла программа уточняет какое событие произошло, используя следующие процедуры:
EVENT()
Возвращает значение, показывающее что произошло. В файле EQUATES.CLW находятся символические константы для событий.FIELD()
Возвращает номер поля, с которым связано событие, если это - событие связанное с полем.ГЛАВА 8 ОПЕРАТОРЫ РАБОТЫ С ОКНАМИ 369ACCEPTED()
Возвращает номер поля, с которым связано событие, если последнее является EVENT:Accepted событием.SELECTED()
Возвращает номер поля, c которым связано событие, если последнее является EVENT:Selected событием.FOCUS()
Возвращает номер поля владеющего фокусом; тип события не играет роли.MOUSEX()
Возвращает x-координату курсора мыши.MOUSEY()
Возвращает y-координату курсора мыши.Есть два события, которые влекут за собой неявное выполнение оператора BREAK в ACCEPT-цикле: сигналы на закрытие окна (EVENT:CloseWindow) и на выход из программы (EVENT:CloseDown). Программа не обязана отслеживать эти события, поскольку они отрабатываются автоматически. Однако, иногда приходится к этим событиям “привязывать” выполнение некоторых специфических действий, например, отображение на экран окна “You sure?” (“Вы уверены?”) или отработку внутренних ситуаций. Если здесь воспользоваться оператором CYCLE, то управление вернется к началу ACCEPT-цикла без закрытия окна или выхода из программы.
Аналогичным образом оператор CYCLE завершает действие событий: EVENT:Move, EVENT:Size, EVENT:Restore, EVENT:Maximize и EVENT:Iconize. При возникновении одного из них CYCLE завершает действие события и запрещает порождение события, связанного с первым, - соответственно: EVENT:Moved, EVENT:Sized,
EVENT:Restored, EVENT:Maximized или EVENT:Iconized.Пример:
CODE
OPEN(Window)
ACCEPT !
Обработчик событийCASE FIELD()
OF 0 !
Обработать не связанные с полем событияCASE EVENT()
OF EVENT:Move
CYCLE !
Запретить пользователю перемещать окноOF EVENT:Suspend
CASE FOCUS()
OF ?Field1
!
Что-то сохранитьEND
OF EVENT:Resume
!
Восстановить сохраненноеEND
OF ?Field1 !
Обработать события поля Field1CASE EVENT()
OF EVENT:Selected
!
предварительные действия, связанные с field1OF EVENT:Accepted
!
завершающие действия для field1END
END !CASE FIELD
END !ACCEPT LOOP
Смотри
также: EVENT, Модальные события, APPLICATION, WINDOW, FIELD, FOCUS, ACCEPTED, SELECTED, CYCLE, BREAK
CASE (структура условного выполнения)
CASE
условиеOF
выражение [ TO выражение ]операторы
[ OROF
выражение [ TO выражение ] ]операторы
[ ELSE ]
операторы
END
CASE
Начинает структуру условного выполненияусловие Числовая или строковая переменная или выражение.
OF
Когда выражение следующее за OF равно условию в операторе CASE, то выполняются идущие следом за OF операторы. В структуре CASE может быть много ветвей OF.выражение Числовая или строковая константа, переменная или выражение.
TO
Позволяет указать в операторе OF или OROF диапазон значений. Операторы, следующие за OF (или OROF), выполняются, когда значение условия попадает в диапазон, указанный выражениями. Выражение, следующее за OF (или OROF), должно задавать нижнюю, а следующее за TO, - верхнюю границу диапазона.OROF
Операторы, следующие за OROF, выполняются, когда выражение, стоящее после него, равно условию в операторе CASE. С одним OF может быть связано несколько выражений OROF. OROF может находиться в отдельной строке. OROF не завершает предыдущую группу операторов, поэтому управляющие операторы “входят” в OROF.ELSE
Операторы, следующие за ELSE, выполняются, когда значение выражений во всех предыдущих ветвях OF или OROF не удовлетворяло условию в CASE. Ветвь ELSE необязательна, однако, если она присутствует, то должна быть последней ветвью в структуре.операторы Любые допустимые исполняемые операторы языка Clarion.
Структура
CASE позволяет избирательно выполнять отдельные ветви, основываясь на равенстве условия и выражения (или попадании в диапазон). Эта структура может быть вложена в другие исполняемые структуры, а другие исполняемые структуры могут быть вложены в нее. Структура CASE должна оканчиваться оператором END (или точкой).В тех случаях, когда логика программы позволяет использовать или структуру CASE или составную структуру IF/ELSIF, для структуры CASE чаще всего генерируется более эффективный объектный код. А для тех случаев, когда выбор происходит на основе целочисленного (от 1 до n) результата вычисления выражения , более эффективно использование структуры
EXECUTE.
Что касается использования форм
OF-TO и OROF-TO, оба выражения будут обработаны, даже если значение CASE-выражения меньше нижней границы указанного диапазона.Например
:CASE A
OF Func1() TO Func2()
...
END
В этом случае, обе функции
Func1() и Func2() будут вызваны, даже если A < Func1().Примеры:
CASE ACCEPTED
() !Обработка вводимого поля
OF ?Name !
Если поле NameERASE(?Address,?Zip) !
очистить поля от Address до ZipGET(NameFile,NameKey) !
прочитать записьCASE Action !
Что за действие?OF 1 !
добавление, запись не существуетIF NOT ERRORCODE() !
должна быть ошибка, если запись уже естьErrMsg = 'ALREADY ON FILE' !
вывести сообщениеDISPLAY(?Address,?Zip) !
вывести поля от Address до ZipSELECT(?Name) !
повторно ввести имя
END
OF 2 OROF 3 !
изменение или удаление - запись существуетDISPLAY(?Address,?Zip) !
вывести поля от Address до ZipEND !
конец структуры CASE Action
CASE Name[1] !
Взять первую букву имениOF 'A' TO 'M' !
Первая половина латинского алфавитаOROF 'a' TO 'm'
DO FirstHalf
OF 'N' TO 'Z' OROF 'n' TO 'z' !
Вторая половина латинского алфавитаDO SecondHalf
END !
Конец структуры CASE
OF ?Address !
Если это поле AddressDO AddressVal !
Выполнить подпрограмму проверки значения поляEND
!Конец структуры case accepted()Смотри также:
EXECUTE, IF
EXECUTE (структура выбора оператора)
EXECUTE
выражениеоператор 1
оператор 2
[ BEGIN
операторы
END ]
оператор n
[ ELSE ]
оператор
END
EXECUTE
Начинает структуру, избирательно выполняющую отдельный оператор.выражение Целочисленное выражение или переменная, содержащая целое число.
оператор 1 Единичный оператор, который выполняется только, когда выражение равно 1.
оператор 2 Единичный оператор, который выполняется только, когда выражение равно 2.
BEGIN
Оператор BEGIN отмечает начало операторной структуры, содержащей ряд строк исходного текста. В ЕXECUTE такая структура рассматривается как единичный оператор. Структура BEGIN заканчивается точкой или оператором END.оператор n Единичный оператор, который выполняется только, когда выражение равно
n .ELSE Операторы, следующие за ELSE исполняются, когда выражение принимает значение вне диапазона от 1 до n, где n определено как совокупное число единичных операторов между EXECUTE и ELSE.
оператор Единственный оператор, который выполняется, когда выражение выходит за пределы допустимого диапазона.
Основываясь на значении выражения, структура ЕXECUTE выбирает исполняемый оператор (или операторную структуру). Структура
EXECUTE должна оканчиваться оператором END (или точкой).Если выражение равно 1, то выполняется первый оператор (оператор 1). Если выражение равно 2, то выполняется второй (оператор 2) и так далее. Если значение выражения равно 0 или больше числа операторов (или структур) в структуре
EXECUTE, то выполняется оператор после слова ELSE. Если слово ELSE отсутствует, происходит переход на первый оператор, стоящий после структуры ЕXECUTE.Эта структура может быть вложена в другие исполняемые структуры, а другие исполняемые структуры (IF, CASE, LОOP, ЕXECUTE и BEGIN) могут быть вложены в нее. В тех случаях, логика программы допускает использование и структуры EXECUTE и структур CASE и IF/ELSIF, для EXECUTE генерируется более эффективный объектный код, и предпочтительнее использовать ее.
Пример:
EXECUTE Transact !
Какую транзакцию выполнять
ADD(Customer) !
Выполнить, если Transact = 1PUT(Customer) !
Выполнить, если Transact = 2DELETE(Customer) !
Выполнить, если Transact = 3END !
Конец структурыEXECUTE CHOICE() !
В зависимости от значения функции CHOICEOrderPart !
Выполнить, если CHOICE() = 1BEGIN !
Выполнить, если CHOICE() = 2SavVendor" = Vendor
UpdVendor
IF Vendor <> SavVendor"
Mem:Message = 'VENDOR NAME CHANGED'
END
END
CASE VendorType !
Выполнить, если CHOICE() = 3
OF 1
UpdPartNo1
OF 2
UpdPartNo2
END
RETURN !
Выполнить, если CHOICE() = 4END !
Конец структурыEXECUTE SomeValue
DO OneRoutine
DO TwoRoutine
ELSE
MESSAGE('SomeValue did not contain a 1 or 2')
END
Смотри
также: BEGIN, CASE, IF
IF (структура условного выполнения)
IF
логическое выражение [ THEN ]операторы
[ ELSIF
логическое выражение [ THEN ]операторы ]
[ ELSE
операторы ]
END
IF
Начинает структуру условного выполнения операторов.логическое выражение
Переменная, выражение или процедура. Дальнейшая последовательность выполнения определяется на основе результата вычисления этого логического выражения (истина или ложь). Нуль или пробельное значение рассматриваются как ложь, любое другое значение - как истинное.
THEN
Операторы, следующие за THEN выполняются, когда результатом логического выражения в IF является истина. Если присутствует THEN, то он должен находиться на той же строке где находятся IF или ELSIF.операторы
Исполняемый оператор или последовательность таких операторов.ELSIF
Логическое выражение, следующее за ELSIF вычисляется, только когда условия в IF и во всех предшествующих ELSIF оказались ложными.ELSE
Операторы, следующие за ELSE, выполняются, если условия в IF и во всех предшествующих ELSIF оказались ложными. Ветвь ELSE не является обязательной, но когда присутствует, она должна быть последней ветвью в структуре IF.ГЛАВА
5 УПРАВЛЯЮЩИЕ СТРУКТУРЫ И ОПЕРАТОРЫ 187Структура
IF управляет выполнением программы, основываясь на результате одного или более логических выражений. Она может содержать любое количество групп операторов возглавляемых конструкцией ELSIF. Эта структура может быть вложена в другие исполняемые структуры, а другие исполняемые структуры могут быть вложены в структуру IF. Каждая структура IF должна оканчиваться оператором END (или точкой).Пример:
IF Cus:TransCount
= 1 ! Если новый покупательAcctSetup
! вызвать процедуру инициализации счетаELSIF Cus:TransCount > 10 AND Cus:TransCount
< 100 ! если постоянный покупательDO RegularAcct !
обработать счетELSIF Cus:TransCount > 100 !
Если особый покупательDO SpecialAcct
! обработать счетELSE
! ИначеDO NewAcct
! обработать счетIF Cus:Credit
CheckCredit
ELSE
CLEAR(Cus:CreditStat)
END
!
проверить состояние счетаEND
IF ERRORCODE()
ErrHandler(Cus:AcctNumber,Trn:InvoiceNbr) !
Обработка ошибокEND
Смотри также:
EXECUTE, CASEОOP (структура повторения)
метка
LOOP [ | число TIMES | ]| i =
начало TO предел [ BY шаг ] || UNTIL
логическое выражение || WHILE
логическое выражение |операторы
| END |
| UNTIL
логическое выражение || WHILE
логическое выражение |LОOP
Начинает структуру циклического выполнения операторов.число Числовая константа, переменная или выражение, которая определяет число циклов выполнения операторов в структуре.
TIMES
Указывает, что операторы выполняются заданное число раз.i
Метка переменной (счетчика цикла), которая автоматически увеличивается (или уменьшается, если шаг отрицательный) при каждом повторении цикла.=начало
Числовая константа, переменная или выражение, определяющее значение инкрементной переменной (i) при первом вхождении в LOOP-структуру.TO
предел Числовая константа, переменная или выражение, определяющее значение, по которому LOOP завершается. Когда i больше, чем значение предела, (или меньше, если переменная шаг отрицательна), выполнение структуры LOOP завершается. Переменная i содержит последнее значение, большее, чем (или меньшее) значение предела после завершения LOOP. Функции, используемые в выражениях как предел, рассчитываются только один раз (в отличии от UNTIL и WHILE, описанных ниже).BY
шаг Числовая константа, переменная или выражение. Шаг определяет величину приращения (или уменьшения, если значение отрицательное) счетчика при каждом выполнении цикла. Если BY шаг опущен, i увеличивается на 1.UNТIL Помещенный внутрь структуры LOOP оператор UNTIL означает, что перед каждым выполнением цикла вычисляется логическое выражение. Если же структура LOOP им заканчивается, то логическое выражение вычисляется после каждой итерации. Если его значение есть условие “истина”, то выполнение структуры LOOP прекращается.
WНILЕ Помещенный внутрь структуры LOOP оператор WHILE означает, что перед каждым выполнением цикла вычисляется логическое выражение. Если же структура LOOP им заканчивается, то логическое выражение вычисляется после каждой итерации. Если его значение есть условие “ложь”, то выполнение структуры LOOP прекращается.
логическое выражение
Числовая или строковая переменная, выражение или процедура. Оно имеет своим значением условие. На его основе (истина или ложь) определяется дальнейшая последовательность выполнения программы. Нуль или пробельное значение рассматриваются как ложь, любое другое значение - как истинное.
операторы Исполняемый оператор или последовательность таких операторов.
Структура
LOOP предназначена для циклического повторения находящихся в ней операторов. Эта структура может быть вложена в другие исполняемые структуры, а другие исполняемые структуры могут быть вложены в структуру LOOP. Структура LOOP должна завершаться оператором END, точкой или операторами UNTIL или WHILE.Структура LOOP без условий в начале или в конце повторяется непрерывно, до обнаружения оператора ВRЕАК или RETURN. Оператор BREAK прерывает выполнение цикла, и управление передается на оператор, следующий за структурой LOOP. Оператор CYCLE прерывает текущую итерацию, а управление передается на начало цикла, не выполняя операторы, стоящие в теле цикла после CYCLE.
Логические выражения
LOOP UNTIL или LOOP WHILE вычисляются в начале структуры LOOP, до исполнения LOOP - операторов. Следовательно, если логическое выражение ложно с самого начала, операторы LOOP не исполнятся ни разу. Чтобы создать LOOP, в котором всегда исполняются операторы (по крайней мере однажды), “предложение” UNTIL или WHILE должно завершать LOOP - структуру.
Пример:
LOOP
!Непрерывный циклChar = GetChar() !
получить символIF Char <> CarrReturn !
если это не “возврат каретки”Field = CLIP(Field) & Char ! “
прицепить” символELSE
!иначеBREAK !
выйти из циклаEND
!Конец условияEND
!Конец циклаIF ERRORCODE() !
При ошибкеLOOP 3 TIMES !
Повторить 3 разаBEEP !
дать звуковой сигналEND
!Конец циклаEND
!Конец условияLOOP I# = 1 TO 365 BY 7 !
Повторять, увеличивая I# каждый раз на 7GET(DailyTotal,I#) !
читать каждую 7-ю записьDO WeeklyJob
END !I
# содержит 372 после завершения циклаLOOP I# = 10 TO 1 BY
-1 !Цикл, уменьшение I# на 1 каждый разDO SomeRoutine
END !I
# содержит ноль (0) после завершения цикла
SET(MasterFile) !
Встать на первую записьLOOP UNTIL EOF(MasterFile) !
Обработать все записиNEXT(MasterFile) !
прочитать записьProcMaster !
выполнить процедуруEND
LOOP WHILE KEYBOARD() !
Очистить клавиатурный буферASK
!без обработки нажатия клавишUNTIL KEYCODE() = EscKey !
но прекратить цикл при нахождении EscapeСмотри также:
BREAK, CYCLEУправляющие операторы
BREAK (прервать выполнение цикла)
BREAK [
метка ]BREAK
Передать управление на первый оператор, следующий за прерываемой структурой LOOP или ACCEPT.метка Метка структуры LOOP или ACCEPT, выполнение которой должно прерваться. Это должна быть метка вложенной структуры, содержащей оператор BREAK.
Оператор ВRЕАК прерывает работу в цикле LOOP или ACCEPT и передает управление первому оператору, следующему за заканчивающим структуру оператором END, WHILE или UNTIL структуры LOOP, или оператором END структуры ACCEPT.
Оператор BREAK можно использовать только в структурах LOOP и ACCEPT. Использование необязательного аргумента метка, позволяет целенаправленно прервать несколько вложенных циклов, исключая тем самым наиболее частый случай применения оператора GOTO.
Пример:
LOOP !
Цикл
ASK !
ждать ввода с клавиатурыIF KEYCODE() = EscKey !
если нажата клавиша EscBREAK !
выйти из циклаELSE
!иначеBEEP !
дать звуковой сигналEND
END
Loop1 LOOP ! Loop1
это меткаDO ParentProcess
Loop2 LOOP ! Loop2
это меткаDO ChildProcess
IF SomeCondition
BREAK Loop1 !
Прервать оба вложенных цикла
END
END
END
ACCEPT !
Цикл ACCEPTCASE ACCEPTED()
OF ?Ok
CallSomeProc
OF ?Cancel
BREAK !
выйти из циклаEND
END
Смотри также:
LOOP, CYCLE, ACCEPT
CYCLE (переход в начало цикла)
CYCLE [
метка ]CYCLE
Передать управление на начало цикла LOOP или цикла ACCEPT.метка Метка оператора LOOP или ACCEPT на который передать управление. Это должна быть метка вложенной структуры LOOP или ACCEPT, содержащей оператор
CYCLE.Оператор СYСLЕ передает управление в начало цикла. Оператор СYСLЕ может использоваться только в структурах LООР или ACCEPT. Использование необязательной метки позволяет целенаправленно передать управление на один из вложенных циклов, исключая тем самым один наиболее частых случаев применения оператора GOTO.
В цикле ACCEPT для некоторых событий оператор CYCLE прерывает автоматически выполняемые действия до начала их выполнения. Такое его поведение описано для каждого события, к которому это относится:
Event:Iconize
Event:Maximize
Event:Move
Event:PreAlertKey
Event:Restore
Event:Size
Event:Contracting
Event:Expanding
EVENT:CloseDown
EVENT:CloseWindow
EVENT:DDEPoke
EVENT:DDEExecute
Пример:
SET(MasterFile) !
Встать на первую записьLOOP !
Цикл по всем записямNEXT(MasterFile) !
Читать следующую записьIF ERRORCODE() THEN BREAK
. !Выйти из цикла по концу файлаDO MatchMaster !
проверить соответствиеIF NoMatch !
если не соответствуетCYCLE !
на начало циклаEND
DO TransVal !
проверить транзакциюPUT(MasterFile) !
занести запись
END
Loop1 LOOP ! Loop1 -
это меткаDO ParentProcess
Loop2 LOOP ! Loop2 -
это меткаDO ChildProcess
IF SomeCondition
CYCLE Loop1 !
Перейти на начало внешнего циклаEND
END
END
Смотри
также: LOOP, CYCLE, ACCEPT
DO (выполнить локальную подпрограмму)
DO
меткаDO
Выполняет локальную подпрограмму.метка Метка оператора ROUTINE.
Оператор DО используется для выполнения подпрограммы локальной по отношению к программе или процедуре. Когда выполнение локальной подпрограммы завершено, управление передается оператору, непосредственно следующему за оператором DО, вызвавшим подпрограмму. Локальная подпрограмма может вызываться только внутри содержащей ее программной секции.
Пример:
DO NextRecord !
Вызвать подпрограмму чтения следующей записи
DO CalcNetPay !
Вызвать подпрограмму CalcNetPayСмотри также:
EXIT, ROUTINE
EXIT (прекратить выполнение локальной подпрограммы)
EXIT
Оператор
EXIT прекращает выполнение локальной подпрограммы и возвращает управление оператору, следующему за оператором DО, который вызвал данную подпрограмму. EXIT отличается от RETURN тем, что RETURN полностью выходит из процедуры, даже если был вызван из подпрограммы.EXIT
необязательный оператор в локальной подпрограмме. Подпрограмма без оператора EXIT автоматически заканчивается после выполнения последнего исполняемого оператора в ней.Пример
:CalcNetPay ROUTINE
IF GrossPay = 0 !
Если оплаты нетEXIT !
выйти из подпрограммыEND
NetPay = GrossPay - FedTax - Fica
QtdNetPay += NetPay
YtdNetPay += NetPay
Смотри
также: DO, RETURN
GOTO
меткаGOTO
Безусловная передача управления на другой оператор программы.метка Метка другого исполняемого оператора в программе, процедуре или локальной подпрограмме.
Оператор GОТО безусловно передает управление от одного оператора к другому. Метка перехода в этом операторе не должна быть меткой оператора ROUTINE, PROCEDURE.
Область действия оператора GOTO ограничивается данной локальной подпрограммой или процедурой; он не может передать управление за пределы локальной подпрограммы или процедуры, в которой он используется.
Широкое использование
GOTO обычно не считается хорошим стилем программирования. LOOP обычно является лучшей альтернативой.Пример:
ComputeIt PROCEDURE(Level)
CODE
IF Level = 0
GOTO PassCompute !
Пропустить вычисления, если Level=0END
Rate = Level * MarkUp !
Вычислить RateRETURN(Rate) !
и возвратить егоPassCompute RETURN(999999) !
Возврат полученного числаСмотри также:
LOOP
RETURN (возврат в точку вызова)
RETURN(
[выражение] )RETURN
Заканчивает программу или процедуру.выражение Обрабатывает возвращаемое значение PROCEDURE, прототипированной для возврата значения выражению, в котором PROCEDURE была использована. Это может быть
NULL, если процедура возвращает указатель.Оператор RЕТURN завершает выполнение программы или процедуры и передает управление в точку вызова. Когда этот оператор выполняется в секции исполняемых операторов программного модуля, то все файлы закрываются, программа завершается, а управление передается операционной системе.
Оператор RЕТURN требуется в процедуре, которая должна возвращать значение и необязателен в программе или процедуре, которая не возвращает значения. Если в процедуре или программе не используется оператор RETURN, то его неявное выполнение происходит вслед за последним исполняемым оператором. Конец секции исполняемых операторов определяется по концу исходного файла или началу другой процедуры или локальной подпрограммы.
При выходе из процедуры (явном или неявном) автоматически закрывает любые локальные структуры APPLICATION, WINDOW, REPORT или VIEW, открытые в данной процедуре. Но при этом не закрываются глобальные данные или структуры APPLICATION, WINDOW, REPORT или VIEW, описанные в секции данных модуля без атрибута STATIC. Кроме того, при этом освобождаются любые локальные структуры QUEUE, объявленные без атрибута STATIC.
Выражение в круглых скобках – это выражение допустимое с точки зрения синтаксиса. Если в круглые скобки заключена переменная, то выражение разыменовывается значением этой переменной и преобразуется в один из базовых типов. Относительно использования скобок с
RETURN, если функция имеет тип возвращаемой переменной, возвращаемая переменная использованная в операторе RETURN не должна заключаться в круглые скобки.Пример:
IF Done#
RETURN !
Выйти по завершенииEND
DayOfWeek PROCEDURE(Date) !
Процедура, возвращающая день неделиRetVal STRING(9)
CODE
EXECUTE Date % 7 !
Определение дня неделиRetVal = 'Monday'
RetVal = 'Tuesday'
RetVal = 'Wednesday'
RetVal = 'Thursday'
RetVal = 'Friday'
RetVal = 'Saturday'
ELSE
RetVal = 'Sunday'
END
RETURN RetVal !
и возврат строки с вычисленным днемСмотри также:
PROCEDURE, Типы значений, возвращаемые процедурами