|
|
| Прим. | При написании процедур REXX рекомендуется для каждого элемента использовать отдельную строку. Если Вы хотите расположить элемент в нескольких строках, то поставьте запятую (,) в конце строки. Это обозначает, что элемент продолжается на следующей строке. Если же нужно поместить несколько элементов в одной строке, то разделите их точкой с запятой (;). |
| Часть данных, которой присвоено уникальное имя | |
| Содержание переменной | |
| Символы, используемые для арифметических функций | |
| + оператор | |
| - оператор | |
| * оператор | |
| /, //, % операторы |
| Прим. | Приведенные примеры содержат пробелы между числами и операторами для того, чтобы выражение смотрелось нагляднее, однако эти пробелы необязательны. |
| Прим. | Инструкцию IF-THEN нельзя использовать с инструкцией SELECT, за исключением случаев, когда она следует за инструкциями WHEN или OTHERWISE. Формат инструкции SELECT, приведенный выше, можно интерпретировать следующим образом: |

| Прим. | Инструкция THEN или ELSE должна предшествовать инструкции, непосредственно выполняющей выбранное действие. |
| Прим. | В зависимости от клавиатуры персонального компьютера и используемой кодовой страницы, Вы можете не найти сплошную вертикальную черту для оператора OR. Поэтому в качестве оператора OR REXX также распознает прерывистую вертикальную черту. Некоторые клавиатуры содержат оба этих символа. В этом случае для логического оператора OR будет использоваться только тот, который в коде ASCII имеет значение 124. Подобное несоответствие может быть причиной того, что символы на Вашей клавиатуре не идентичны символам, выводимым на экран. |
| > | Больше чем |
| < | Меньше чем |
| = | Равно |
| Значение выражения 5 > 3 равно 1. Результат - истина. Значение выражения 2.0 = 002 равно 1. Результат - истина. Значение выражения 332 < 299 равно 0. Результат - ложь. |
| Используется вместе с THEN. Проверяет истинность выражения. Принимает решение на основании одной инструкции. | |
| Определяет инструкцию, которая должна быть выполнена, если выражение истинно. | |
| Определяет инструкцию, которая должна быть выполнена, если выражение ложно. | |
| Приказывает интерпретатору выбрать из нескольких инструкций одну. | |
| Используется вместе с SELECT. Определяет выражение, которое должно проверяться. | |
| Используется вместе с SELECT. Определяет инструкцию, которая должна быть выполнена, если проверяемое выражение ложно. | |
| Указывает, что должна быть выполнена некоторая группа инструкций. | |
| Указывает, что с данным выражением ничего не нужно делать. | |
| > < = | Определяют, больше ли, меньше либо равно чему-либо данное выражение. |
| ¬ или \ | Изменяет значение элемента с истинного на ложное, либо с ложного на истинное. |
| & | Присваивает значение истина, если оба элемента являются истинными. |
| | | Присваивает значение истина, если хотя бы один элемент является истинным. |
| Повторяет цикл фиксированное число раз. | |
| Подсчитывает каждый проход по циклу. Устанавливает начальное и конечное значение переменной. | |
| Проверяет истинность или ложность некоторого выражения в начале цикла. Повторяет цикл, если значение истинно. В противном случае выполнение процедуры продолжается с инструкции, следующей за END. | |
| Проверяет истинность или ложность некоторого выражения в конце цикла. Повторяет цикл, если значение ложно. В противном случае выполнение процедуры продолжается с инструкции, следующей за END. | |
| Приказывает интерпретатору выйти из цикла. | |
| Повторяет выполнение инструкций до тех пор, пока пользователь не решит закончить. | |
| Требует нажатия комбинации клавиш Ctrl+Break. | |
| Закрепляет за каждым словом в группе различные переменные. |
| Переменной first присваивается значение GARBAGE. |
| Переменной second присваивается значение IN. |
| Переменной third присваивается значение GARBAGE. |
| Переменной rest присваивается значение OUT. |







| Внутренние программы: | Представляют собой последовательность инструкций, расположенных внутри основной программы и начинающихся с метки, которая соответствует имени, указанному в инструкции CALL. Если имя программы указано в кавычках, то данная внутренняя программа не рассматривается как объект для поиска. |
| Встроенные программы: | Представляют собой программы, встроенные в языковой процессор для обеспечения выполнения различных функций. Они всегда возвращают строку, содержащую результат выполнения функции. |
| Внешние программы: | Пользователи могут написать сами или использовать программы, которые являются внешними для языкового процессора или вызывающей программы. Внешняя программа может быть написана на любом языке, включая REXX, который поддерживает системно-зависимые интерфейсы. Если внешняя программа, написанная на языке REXX, вызвана как подпрограмма с помощью инструкции CALL, Вы можете восстановить любую строку аргументов, используя инструкции ARG или PARSE ARG, а также встроенную функцию ARG. |





| Прим. | Языковой процессор не делает различий между вызовом программы, с одной стороны, и вызовом подпрограммы или функции, с другой. Если программа была вызвана через командный интерфейс, то делается попытка преобразовать полученное значение в код возврата, приемлемый для вызывающей процедуры REXX. Возвращенная результирующая строка должна быть целым числом со знаком в диапазоне от -2**15 до 2**15-1. |


| 1 | Метки внутри интерпретируемой строки не являются неизменными и поэтому игнорируются. Поэтому выполнение инструкции SIGNAL из интерпретируемой строки приведет к немедленному выходу из этой строки до того, как начнется поиск метки. |
| 2 | Если концепция инструкции INTERPRET для Вас нова и получаемые результаты непонятны, то полезно выполнить эту инструкцию, указывав в процедуре TRACE R или TRACE I. Пример: /* Мы имеем небольшую программу. */ Trace Int name='Китти' indirect='name' interpret 'say "Привет"' indirect'"!"' При выполнении этой процедуры на экран выводится следующая информация: [C:\]kitty kitty 3 *-* name='Китти' >L> "Китти" 4 *-* indirect='name' >L> "name" 5 *-* interpret 'say "Привет"' indirect'"!"' >L> "say "Привет"" >V> "name" >O> "say "Привет" name" >L> ""!"" >O> "say "Привет" name"!"" *-* say "Привет" name"!" >L> "Привет" >V> "Китти" >O> "Привет Китти" >L> "!" >O> "Привет Китти!" Привет Китти! [C:\] Строки 3 и 4 устанавливают переменные, используемые в строке 5. Вычисление строки 5 происходит в два этапа. Сначала строится строка, которая будет интерпретироваться при помощи текстовой строки, переменной (INDIRECT) и еще одного литерала. Затем результирующая строка, состоящая только из символов, интерпретируется так, как если бы она была частью исходной программы. Так как полученная строка является новым предложением, то она трассируется следующим образом (второй трассировочный флаг *-* под строкой 5), а затем выполняется. После этого текстовая строка объединяется со значением переменной (NAME) и вторым литералом, и окончательный результат выводится на экран в следующем виде: Привет Китти! |
| 3 | Во многих случаях вместо инструкции INTERPRET можно использовать функцию VALUE. Например, строку 5 в последнем примере можно заменить следующей: say "Привет" value(indirect)"!" |



| Прим. | Если вместо инструкции NOP указать дополнительную точку с запятой, то будет вставлено пустое предложение, которое игнорируется. При этом второе предложение WHEN воспримется как первая инструкция, следующая за THEN, и поэтому будет истолковано как синтаксическая ошибка. Однако NOP является корректной инструкцией и действительным целевым назначением для предложения THEN. |

| Прим. | Все три числовых назначения автоматически сохраняются при вызове подпрограммы или внутренней функции. Для получения более подробной информации смотрите описание инструкции CALL. |

| ETMODE | Определяет, что в программе могут использоваться текстовые строки, содержащие наборы двухбайтовых символов (DBCS). |
| NOETMODE | Определяет, что в программе не могут использоваться текстовые строки, содержащие символы DBCS. NOETMODE принимается по умолчанию. |
| EXMODE | Определяет, что данные DBCS в смешанных строках обрабатываются инструкциями, операторами и функциями, основываясь на понятии логического элемента. При этом сохраняется целостность данных DBCS. |
| NOEXMODE | Определяет, что любые данные в строках обрабатываются на основе байта. При этом целостность символов DBCS может быть нарушена. NOEXMODE принимается по умолчанию. |

| Прим. | Строки аргументов в процедуру REXX или внутреннюю программу могут также передаваться с помощью встроенной функции ARG. |

| Прим. | Инструкции PULL и PARSE PULL сначала считывают данные из текущей очереди данных. Если очередь пуста, то считывание производится из входного потока, принятого по умолчанию, - STDIN (обычно это клавиатура). |
| Прим.   | Информация PARSE VERSION должна разбираться на основе слов, а не на основе абсолютной позиции столбца . |



| Прим. | Если текущая очередь данных пуста, то инструкция PULL выполняет чтение из STDIN (обычно это клавиатура). Длина данных, прочитанных с помощью инструкции PULL, ограничивается длиной строк, содержащихся в переменных. |








| All | Трассируются (выводятся) все предложения перед их выполнением. |
| Commands | Трассируются все команды операционной системы перед их выполнением и выводятся все коды возврата. |
| Error | Трассируется после своего выполнения любая команда операционной системы, завершившаяся с ненулевым кодом возврата. |
| Failure | Трассируется после своего выполнения любая команда операционной системы, завершившаяся аварийно. Этот режим аналогичен режиму Normal. |
| Intermediates | Трассируются все предложения перед их выполнением. Трассируются также промежуточные результаты вычисления выражений и имена, полученные после подстановки. |
| Labels | Трассируются метки, встретившиеся в процессе выполнения. Использование этого режима особенно полезно при отладке, когда языковый процессор делает остановку после каждой метки. Пользователю также удобно отмечать при этом все вызовы подпрограмм. |
| Normal | Трассируется после своего выполнения любая команда операционной системы, завершившаяся аварийно. Этот режим принимается по умолчанию. Для стандартного командного процессора операционной системы OS/2 попытка выполнить несуществующую команду приводит к формированию условия FAILURE. Попытка направить команду на выполнение в несуществующую среду подкоманд также приводит к формированию условия FAILURE; в этом случае переменная RC принимает значение 2, что соответствует коду возврата для сообщения "Файл не найден" операционной системы OS/2. |
| Off | Трассировка не выполняется. Все действия, выполнявшиеся ранее по указанным префиксам режимов (см. выше), завершаются. |
| Results | Трассируются все предложения перед их выполнением. Трассируются конечные результаты вычисления выражений (в противоположность Intermediates). Также выводятся значения, присвоенные переменным при выполнении инструкций PULL, ARG и PARSE. Указанный режим рекомендуется использовать для общей отладки. |
| "*-*" | Определяет одно исходное предложение, т.е. данные, фактически указанные в программе. |
| "+++" | Определяет сообщение трассировки. Это может быть ненулевой код возврата из команды, приглашающее сообщение, выдаваемое в режиме диалоговой отладки, индикация синтаксической ошибки в режиме диалоговой отладки или протрассированные предложения после синтаксической ошибки в программе. |
| ">>>" | Определяет результат выражения (для TRACE R), значение, присвоенное переменной в процессе разбора, или значение, возвращенное из подпрограммы после ее выполнения. |
| ">.>" | Определяет значение, присвоенное в процессе разбора метке-заполнителю. |

| Прим. | Если указана длина, равная 0, то это соответствует пустой строке (или значению по умолчанию). Поэтому при желании можно автоматически выбирать ключевые слова, принимаемые по умолчанию. Например: say 'Введите режим:'; pull option . select /* keyword1 принимается по умолчанию */ when abbrev('keyword1',option) then ... when abbrev('keyword2',option) then ... ... otherwise nop; end; |



| Exists | Возвращает результат 1, если существует аргумент с порядковым номером n; т.е. если этот аргумент был явно указан при вызове программы. В противном случае возвращается результат 0. | Omitted | Возвращает результат 1, если опущен аргумент с порядковым номером n; т.е. если этот аргумент не был явно указан при вызове программы. В противном случае возвращается результат 0. |








| Прим. | Данная функция может быть вызвана как по имени CENTRE, так и по имени CENTER. Это позволяет избежать синтаксических ошибок, которые могут возникнуть из-за различного написания слова 'ЦЕНТР' в английской и американской интерпретации. |


| Прим. | В некоторых средах перезапись потока с помощью функций CHAROUT или LINEOUT может удалить (разрушить) все существующие данные в потоке. Однако это не относится к среде OS/2. |
| Прим. | Эту функцию зачастую лучше вызывать как подпрограмму. Остаточное количество символов в этом случае будет доступно в качестве значения переменной RESULT. |



| Condition name | Возвращает имя условия, которое отслеживается в настоящий момент. |
| Description | Возвращает любую описательную строку, связанную с условием, которое отслеживается в настоящий момент. Если описательные строки отсутствуют, то в качестве результата возвращается пустая строка. |
| Instruction | Возвращает ключевое слово инструкции, выполнявшейся в момент обнаружения условия, которое отслеживается в настоящий момент. Ключевыми словами могут быть CALL или SIGNAL. Если Вы не укажете режим, то будет принят режим по умолчанию. |
| Status | Возвращает состояние условия, которое отслеживается в настоящий момент. Оно может меняться в процессе выполнения и принимать следующие значения: |
| ON - отслеживание условия включено | |
| OFF - отслеживание условия выключено | |
| DELAY - обработка любого последующего условия требуемого типа задерживается. |
| Прим. | Информация об условии, выдаваемая функцией CONDITION, в случае обращения процедуры к подпрограммам сохраняется и восстанавливается (включая информацию, получаемую по CALL ON). Поэтому, когда подпрограмма, вызванная по CALL ON, завершается, то условием, отслеживаемым в настоящий момент, становится то, которое имело место перед выполнением инструкции CALL. Функция CONDITION возвращает значения перед тем, как отслеживаемое условие было обнаружено. |




| Alphanumeric | Возвращает 1, если указанная строка содержит только те символы, которые находятся в диапазонах a-z, A-Z и 0-9. |
| Bits | Возвращает 1, если указанная строка содержит только символы 0 и/или 1. |
| C | Возвращает 1, если указанная строка является смешанной строкой, состоящей из символов SBCS/DBCS. |
| Dbcs | Возвращает 1, если указанная строка является чистой строкой DBCS. |
| Lowercase | Возвращает 1, если указанная строка содержит только те символы, которые находятся в диапазоне a-z. |
| Mixed case | Возвращает 1, если указанная строка содержит только те символы, которые находятся в диапазонах a-z и A-Z. |
| Number | Возвращает 1, если указанная строка является числом, действительным для REXX. |
| Symbol | Возвращает 1, если указанная строка содержит только лишь те символы, которые действительны для REXX. Заметим, что допустимо указание как строчных, так и прописных букв. |
| Uppercase | Возвращает 1, если указанная строка содержит только те символы, которые находятся в диапазоне A-Z. |
| Whole number | Возвращает 1, если указанная строка является целым числом (по правилам REXX) по текущему назначению NUMERIC DIGITS. |
| heXadecimal | Возвращает 1, если указанная строка содержит только те символы, которые находятся в диапазонах a-f, A-F, 0-9 и пробел (в случаях, когда пробелы появляются между парами шестнадцатеричных символов). Возвращает 1 и в том случае, если указанная строка является пустой. |

| Basedate | Возвращает количество полных дней (т.е. не включая текущий день), начиная от базовой даты (Январь 1, 0001) и включая ее. Результат выдается в следующем формате: дддддд (без начальных нулей). Функция, заданная в виде DATE(B)//7, в качестве результата возвращает число из диапазона 0-6, где 0 соответствует Понедельнику и 6 - Воскресенью.
| |||
| Days | Возвращает количество дней (включая текущий), прошедших с начала настоящего года, в следующем формате: ддд (без начальных нулей) | |||
| European | Возвращает дату в следующем формате: дд/мм/гг. | |||
| Language | Возвращает дату в формате, зависящем от языка и реализации, либо в формате текущей даты. В операционной системе OS/2 формат Language имеет следующий вид: дд Месяц гггг. Если недоступен ни один текущий формат, то дата возвращается в формате, принятом по умолчанию.
| |||
| Month | Возвращает полное русское название текущего месяца, например, "Август" | |||
| Normal | Возвращает дату в формате, принятом по умолчанию: дд мес гггг | |||
| Ordered | Возвращает дату в формате: гг/мм/дд (удобно для сортировки и т.п.) | |||
| Sorted | Возвращает дату в формате: ггггммдд (удобно для сортировки и т.п.) | |||
| Usa | Возвращает дату в формате: мм/дд/гг | |||
| Weekday | Возвращает русское название дня недели, выдаваемое на смешанном регистре. Например, |
| Прим. | Первое обращение к функции DATE или TIME в одном выражении приводит к тому, что создается временной штамп, который затем используется при всех обращениях к этим функциям в данном выражении. Поэтому, когда в одном выражении к функциям DATE и/или TIME обращаются несколько раз, то их согласованность друг с другом гарантируется. |





| Прим. | В отличие от своих двойников в языке команд OS/2 (операторы Setlocal и Endlocal), функции языка REXX SETLOCAL и ENDLOCAL могут быть вложенными. |


| Drive | Возвращает букву устройства для файла с указанной спецификацией-файла. |
| Path | Возвращает путь через каталоги для файла с указанной спецификацией-файла. |
| Name | Возвращает имя файла для указанной спецификации-файла. |
| Прим. | При задании режима значащей будет только первая буква, остальные игнорируются. |






| Прим. | Многие другие языки (такие как С) не используют значение, возвращаемое после выполнения функции, если оно не присвоено какой-либо переменной. Однако в языке REXX возвращаемое значение (как показано в примере 3) передается в текущую среду либо обработчику подкоманд. Если текущая среда - CMD (по умолчанию), то это действие вызовет поиск операционной системой на диске команды с указанным именем. |

| Внутренняя | Если имя программы присутствует в процедуре в качестве метки, то сохраняется текущее состояние выполнения, так чтобы позднее можно было вернуться в точку вызова программы для продолжения выполнения процедуры. Затем управление передается первой найденной метке, которая совпадает с именем программы. Как и при вызове программы с помощью инструкции CALL, сохраняется также и некоторая другая информация состояния (назначения TRACE, NUMERIC и тому подобное). Для получения более подробной информации смотрите подраздел Инструкция CALL. Если внутренняя программа, которую нужно вызвать, является функцией, то Вы должны указать выражение в инструкции RETURN для возврата из функции. Это необязательно, если функцию вызывают в качестве подпрограммы. Пример: /* Рекурсивное выполнение внутренней функции... */ arg x say x'! =' factorial(x) exit factorial: procedure /* вычисление факториала .. */ arg n /* .. рекурсивный вызов. */ if n=0 then return 1 return factorial(n-1) * n FACTORIAL необычен тем, что он вызывает сам себя (это называется рекурсивным вызовом). Использование инструкции PROCEDURE гарантирует, что новая переменная n генерируется для каждого вызова). |
| Встроенная | Функции такого типа всегда доступны и описываются в этом разделе позднее. |
| Внешняя | Вы можете написать сами или использовать существующие функции, которые будут внешними для программы и языкового процессора. Внешняя функция может быть написана на любом языке (включая REXX), который поддерживает системно-зависимые интерфейсы, используемые языковым процессором для ее вызова. Следует напомнить, что внешняя программа, вызванная как функция, должна вернуть результаты данные вызывающей программе. |






| Прим. | Если Вы хотите считывать полные строки из вводного потока, определенного по умолчанию, как, например, при обычном диалоге с пользователем, то для простоты и возможности улучшенного программирования целесообразно использовать вместо функции LINEIN инструкции PULL или PARSE PULL. В некоторых случаях полезно также использовать инструкцию PARSE LINEIN. |

| Прим. | В некоторых средах перезапись потока с помощью функций CHAROUT или LINEOUT может удалить (разрушить) все существующие данные в потоке. Однако это не относится к среде OS/2. |
| Прим. | Если строки должны быть записаны в выводной поток символов, принимаемый по умолчанию, без возможности возникновения ошибки, то вместо функции LINEOUT используйте инструкцию SAY. |

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









| Прим. | В отличие от своих двойников в языке команд OS/2 (операторы Setlocal и Endlocal), функции языка REXX SETLOCAL и ENDLOCAL могут быть вложенными. |




| Command | операция (указываемая в качестве третьего аргумента команда-потока), которая должна быть применена к выбранному вводному или выводному потоку. Возвращенная результирующая строка зависит от выполненной команды и может быть пустой строкой. |
| Description | Возвращает текущее состояние указанного потока. Функция STREAM с данным режимом идентична операции State, за исключением того, что после возвращенной строки следует двоеточие и дополнительная информация о состояниях ERROR или NOTREADY, если она доступна. |
| State | Возвращает строку, которая описывает текущее состояние указанного потока. Этот режим принимается по умолчанию. |
| 'ERROR' | Над потоком была произведена операция, которая привела к возникновению ошибки (возможно, в процессе ввода, вывода или выполнения самой функции STREAM). Дополнительную информацию об ошибке можно получить с помощью функции STREAM с запросом на описание, зависящее от среды применения. |
| 'NOTREADY' | Поток находится в состоянии, при котором любая попытка выполнить стандартную операцию ввода-вывода приводит к формированию условия NOTREADY. Например, простой вводной поток может иметь определенную длину; попытка чтения из этого потока (с помощью встроенных функций CHARIN или LINEIN) сверх указанной длины может сделать поток недоступным до тех пор, пока он не будет закрыт (с помощью функции LINEIN(имя), например), а затем открыт повторно. |
| 'READY' | Поток находится в состоянии, при котором допустима любая стандартная операция ввода-вывода. Это обычное состояние для потока, хотя при этом не гарантируется, что любая конкретная операция будет выполнена успешно. |
| 'UNKNOWN' | Состояние потока неизвестно. В среде OS/2 и ее прикладных программах это обычно означает, что поток закрыт (или еще не открывался). Однако данный ответ может означать в других средах, что состояние потока невозможно определить. |
| Прим. | Состояние ( и выбранный режим) вводного или выводного потока является глoбальным для программы REXX, в которой оно не сохраняется и не восстанавливается при обращении к функциям и подпрограммам (включая и те, которые вызваны для отслеживания событий по CALL ON). |

| 'OPEN' | Открывает поименованный поток. По умолчанию команда OPEN открывает поток как для чтения, так и для записи данных. Для того, чтобы указать конкретную операцию, которую нужно выполнить над потоком с указанным именем, добавьте в командную строку слово READ (если требуется только чтение из потока) или WRITE (если требуется только запись в поток). Функция STREAM сама возвращает строку 'READY', если указанный поименованный поток успешно открыт, или соответствующее сообщение об ошибке в случае неуспешного открытия. Примеры: stream(strout,'c','open') stream(strout,'c','open write') stream(strinp,'c','open read') | ||||||||||
| 'CLOSE' | Закрывает поименованный поток. Функция STREAM сама возвращает строку 'READY', если указанный поименованный поток успешно закрыт, или соответствующее сообщение об ошибке в противном случае.
Если была сделана попытка закрыть неоткрытый файл, то функция STREAM() возвратит пустую строку (""). Пример: stream('STRM.TXT','c','close') | ||||||||||
| 'SEEK' смещение | Устанавливает внутри устойчивого потока позицию чтения или записи в соответствии с указанным числом (смещение).
Примеры: stream(name,'c','seek =2') stream(name,'c','seek +15') stream(name,'c','seek -7') fromend = 125 stream(name,'c','seek <'fromend) |
| 'QUERY EXISTS' | Возвращает полную спецификацию пути поименованного потока, если он существует, и пустую строку в противном случае. stream('..\file.txt','c','query exists') |
| 'QUERY SIZE' | Возвращает размер устойчивого потока в байтах. stream('..\file.txt','c','query size') |
| 'QUERY DATETIME' | Возвращает отметку даты и времени указанного потока. |