Документация по Clarion

         

Арифметические операторы


Арифметический оператор арифметически комбинирует два операнда для получения промежуточного значения. Это операторы:



+ Сложение (A+B значит A плюс B)
- Вычитание (A-B значит A минус B)
* Умножение (A*B значит A раз по B)
/ Деление (A/B значит A делить на B)
^ Возведение в степень (A^B значит A возведено в
степень B)
% Деление по модулю (A%B значит остаток от деления
A на B)

Все арифметические операторы порождают промежуточные значения типа Long или Real. Тип данных для промежуточного значения определяется выполняемой операцией и типами операндов. Тем не менее, деление или возведение в степь ВСЕГДА порождают промежуточные значения типа Real.



Числовые константы


Числовые константы - это постоянные числовые значения. Они могут применяться в описаниях данных, в выражениях, как параметры процедур или функций или как атрибуты. Числовые константы могут представляться в десятичном, двоичном, восьмеричном, шестнадцатеричном или научном форматах. Символы форматирования, как например, знаки доллара или запятые, не разрешены в числовых константах.
Десятичные числовые константы могут содержать необязательный ведущий знак минуса (символ переноса), целую и необязательную десятичную дробную часть.
Пример:
-924
76. 346
-45.026
Двоичные числовые константы могут содержать необязательный знак минуса, цифры 0 и 1 и должны заканчиваться символом B или b.
Пример:
1011b
-1000110B
Восьмеричные числовые константы содержат необязательный знак минуса, цифры от 0 до 7 и завершаются символом O или o.
Пример:
3403o
-7041312O
Шестнадцатеричные числовые константы содержат необязательный знак минуса, цифры от 0 до 9, буквы от A до F (представляющие числа от 10 до 15) и завершающий символ H или h. Если самый первый символ в шестнадцатиричном числе - буква от A до F, то надо перед ней ставить 0 обязательно!
Пример:
-1FFBh
0CD1F74FH



Числовые выражения


Числовые выражения могут быть параметрами процедур или функций, условиями в структурах IF, CASE, LOOP или EXECUTE или же источником в операторе присваивания, где значение выражения получает числовая переменная. Числовые выражения могут содержать арифметические операторы и оператор конкатенации, но не могут содержать логические операторы.
Если в числовых выражениях используются строковые константы или переменные, то они преобразуются в промежуточные числовые значения. Если имеется оператор конкатенации, то промежуточное значение преобразуется в числовое ПОСЛЕ собственно конкатенации.
Пример:
3.12159
!Значение ПИ
Count + 1
!Прибавить 1 к Count
(1-N*N)/R
!N раз по N вычитается из 1
!а затем делится на R
305 & 7854555
!Соединяем код области и
телефон
См. также:



Логические операторы


Логический оператор сравнивает два операнда или выражения и порождает условия ИСТИНА или ЛОЖЬ. Есть два типа логических операторов: условные и булевы. Условные операторы сравнивают два значения или выражения. Булевы операторы связывают вместе строковые, числовые и/или логические выражения для определения логики true-false (?). Операторы можно комбинировать, для проверки сложных условий.

Условные операторы = Знак равенства
< Меньше чем
  > Больше чем
Булевы операторы NOT Логическое НЕ
(логическая арифметика) ~ Тильда (логическое НЕ)
  AND Логическое И
  OR Логическое ИЛИ
  XOR Логическое ИИЛИ (исключающее
ИЛИ)
Комбинированные <> НЕ равно
операторы ~= НЕ равно
  NOT= НЕ равно
  <= Меньше или равно
  =< Меньше или равно
  ~< НЕ больше
  NOT> НЕ больше
  >= Больше или равно
  => Больше или равно
  -< НЕ меньше
  NOT< НЕ меньше

При логических вычислениях, любое НЕнулевое значение означает ИСТИНУ, а пустая строка или нулевое значение означает ЛОЖЬ.
Пример:
Логическое выражение
Результат
A - B
Истина, если A равно B
A < B
Истина, если A меньше B
A> B
Истина, если A больше B
A <>B,A ~= B, A NOT= B
Истина, если A НЕ равно B
A ~<B,A>= B, A NOT<B
Истина, если A НЕ не меньше B
A ~>B,A<= B, A NOT>B
Истина, если A НЕ не больше B
~ A, NOT A
Истина, если A простое или
ноль
A AND B
Истина, если A ИСТИНА и B
ИСТИНА
A OR B
Истина, если либо A ИСТИНА,
либо B ИСТИНА, либо оба вместе
A XOR B
Истина, если либо A ИСТИНА,
либо B ИСТИНА, но НЕ оба вместе



Логические выражения


Логические выражения вычисляют условия ИСТИНА-ЛОЖЬ в управляющих структурах IF, LOOP UNTIL, и LOOP WHILE. Управление передается в зависимости от конечного результата выражения (ИСТИНА или ЛОЖЬ). Логические выражения вычисляются слева направо. Правый операнд выражений AND, OR и XOR вычисляется только когда он может повлиять на результат. Для избежания неполных сравнений или для изменения порядка вычислений можно использовать скобки. Приоритеты логических операторов таковы:

Уровень1 Условные операторы
Уровень2 ~, NOT
Уровень3 AND
Уровень4 OR, XOR

Пример:
LOOP UNTIL EOF(Customer) !ИСТИНА, если конец файла
!какие-то операторы
.
IF A = B THEN RETURN. !RETURN если A равно B
LOOP WHILE - Done# !Повторять пока ЛОЖЬ (Done# = 0)
!какие-то операторы
.
IF A >= B OR (C>B AND E=D) THEN RETURN.!True if a >= b,also
! true if both c > b and e = d.
!The second part of the expression
! (after OR) is evaluated only if the
! first part is not true.





Оператор конкатенации (соединения)


Оператор конкатенации & используется для дописывания одной строковой переменной к другой. Длина результирующей строки, это сумма длин обоих конкатенированных значений. Числовые типы данных можно конкатенировать со строками или другими числовыми переменными или константами. Зачастую, стоит использовать функцию CLIP для удаления хвостовых пробелов в строке, к которой подсоединяется другая строка.
Пример:
CLIP(FirstName) & Initial & & LastName
!Составляем полное имя
'Clarion Software' & ', Inc.'
!Соединяем две константы
См. также: CLIP, ,



Строковые константы


Строковая константа - это набор символов, заключенный в одиночные кавычки (апострофы). Символы, которые нельзя ввести с клавиатуры, можно вставить в строковую константу, заключив их ASCII символьные коды в угловые скобки < и > . Символьные коды ASCII могут быть представлены в десятичной или шестнадцатеричной форме.
В строковой константе, левая угловая скобка < инициирует поиск правой угловой скобки. Так что, для того, чтобы вставить левую угловую скобку в строку, ее надо ввести дважды. То же справедливо и для апострофов чтобы ввести в строку апостроф, его надо вводить дважды. Два апострофа между которыми либо вообще нет символов (либо только пробелы) представляют пустую строку.
Если надо повторить несколько раз один и тот же символ, то стоит воспользоваться представлением в виде счетчика повторения. Число раз, которое символ должен повториться, помещается между фигурными скобками { и }, которые ставятся сразу же за повторяемым символом.
Пример:
'string constant'
!Строковая константа
It''s a girl!'
!Вложенный апостроф
'<27,15>'
!Десятичные ASCII-коды
<OEh>
!Шестнадцатеричный ASCII-код
'A<< B'
!Вложенная левая угловая
скобка, A<B
'*{20}'
!12 звездочек в формате
счетчика повторения
''
!Нулевая (пустая) строка



Строковые выражения


Строковые выражения можно использовать как параметры процедур, функций и атрибутов, или как исходная часть оператора присваивания, где данные должна принимать строковая переменная. Строковые выражения могут содержать как одиночные строковые и числовые переменные, так и сложные комбинации из подвыражений, функций и операций.
Пример:
'Adress:'&Cus:Adress
!Подсоединяем константу к
переменной
Name
!Строковая переменная
'Phone:' & '305-' &
FORMAT(Phone,@P###-##I@itp)
!Соединяем константы и
результат функции FORMAT
Weight & 'Ibs.'
!Подсоединяем переменную к
константе



Выражения


Выражение - это математическая или логическая формула, порождающая значение. Выражение может быть переменной в операторе присваивания, параметром процедуры или функции, индексом массива или условием структур IF, CASE, LOOP или EXECUTE. Выражения могут содержать константы, переменные и/или обращения к функциям, объединенные логическими и/или арифметическими операторами.
Выражения вычисляются в стандартном алгебраическом порядке операций. Приоритет операторов управляется типом операторов и расположением скобок. Каждая операция производит (внутреннее) промежуточное значение, используемое в последующих операциях. Скобки используются для группирования операций в выражениях. Выражения вычисляются от внутренних скобок к внешним.
Операторы, при вычислении выражения, имеют следующие приоритеты (от высших к низшим):

Уровень 1 () Скобочное группирование
Уровень 2 - Унарный минус
Уровень 3 вызов функции Получить значение от RETURN
Уровень 4 ^ Возведение в степень
Уровень 5 */% Умножение, деление, остаток от деления
Уровень 6 + - Сложение, вычитание
Уровень 7 & Конкатенация

Выражения могут порождать числовые, строковые или логические значение (вычисление true/false). Выражения могут вовсе не содержать операторов; они могут быть одиночной переменной, константой или вызовом функции.



CLEAR (очистить переменную)


CLEAR(метка[,n])

метка Метка переменной.
n Числовая константа; 1 или -1. Этот параметр задает значение, которым инициализируется переменная. Если n=1, то переменная получает максимально возможное для этого типа данных значение. Для STRING, PSTRING и CSTRING, это ASCII 255. Если n=-1, то переменная получает минимально возможное для данного типа данных значение. Для STRING, PSTRING и CSTRING это ASCII 0.

Оператор CLEAR очищает переменную, указанную МЕТКой. Если n пропущено, то числовые переменные сбрасываются в нуль, а строки заполняются пробелами. Если метка принадлежит структуре GROUP, RECORD или QUEUE, то все переменные в этой структуре очищаются. Если переменная имеет атрибут DIM, то очищается целиком массив. Одиночный элемент массива не может быть очищен.
Пример:
CLEAR(Count) !Clear a variable
CLEAR(Cus:Record) !Clear the record structure
CLEAR(Amount,l) !Clear variable to highest possible value
CLEAR(Amount,-I) !Clear variable to lowest possible



Операторы присвоения-операции


назначение += источник
назначение -= источник
назначение *= источник
назначение /= источник
назначение ^= источник
назначение %= источник

назначение Должно быть меткой или переменной
источникЧисловая или строковая константа, переменная, функция или выражение.

Операторы присвоения-операции выполняют арифметические операции над переменной. Ниже, в примерах, операторы справа и слева функционально эквивалентны, хотя операторы присвоения-операции действуют более эффективно.
Пример:
Оператор присваивания Функциональный эквивалент
A += 1 A = A + 1
A -= B A = A - B
A *= -5 A = A * (-5)
A /= 100 A = A / 100
A ^= I+1 A = ^(I + 1)
A %= 7 A = A % 7



ПРАВИЛА ПРЕОБРАЗОВАНИЯ ДАННЫХ


Язык Clarion производит автоматическую конверсию типов данных. Тем не менее, некоторые вариации могут породить несоответствие
источника и назначения (source & destination). Присвоение "выходящего-за-рамки" значения приводит к непредсказуемым результатам
Типы данных PSTRING и CSTRING обрабатываются так же, как STRING, потому что они преобразуются в промежуточные значения типаSTRING
для всех операций. Типы DATE и TIME преобразуются в Кларионовские Стандартные Дату и Время и обрабатываются как LONG.
Ниже приведены правила преобразования данных из ИСТОЧНИКа в НАЗНАЧЕНИЕ:
BYTE = SHORT
BYTE = USHORT
BYTE = LONG
BYTE = ULONG
Знаковый бит ИСТОЧНИКа игнорируется. НАЗНАЧЕНИЕ получает младшие 8 бит ИСТОЧНИКа.
BYTE = DECIMAL
BYTE = PDECIMAL
BYTE = REAL
BYTE = SREAL
Знаковый бит ИСТОЧНИКа игнорируется. НАЗНАЧЕНИЕ получает младшие 8 бит ИСТОЧНИКа. Дробная часть ИСТОЧНИКа отсекается.
BYTE = STRING
BYTE = CSTRING
BYTE = PSTRING
Если в строке только цифры, то НАЗНАЧЕНИЕ получает их
значение.
SHORT = BYTE
НАЗНАЧЕНИЕ получает значение ИСТОЧНИКа.
SHORT = USHORT
SHORT = LONG
SHORT = ULONG
НАЗНАЧЕНИЕ получает знак и младшие 15 бит ИСТОЧНИКа.
SHORT = DECIMAL
SHORT = PDECIMAL
SHORT = REAL
SHORT = SREAL
НАЗНАЧЕНИЕ получает знак и младшие 15 бит ИСТОЧНИКа. Дробная часть ИСТОЧНИКа отсекается.
SHORT = STRING
SHORT = CSTRING
SHORT = PSTRING
ИСТОЧНИК должен быть набором цифр БЕЗ знаков форматирования. НАЗНАЧЕНИЕ получает знак и целую часть числа. Дробная часть ИСТОЧНИКа отсекается, хвостовые пробелы игнорируются.
USHORT = BYTE
НАЗНАЧЕНИЕ получает значение ИСТОЧНИКа.
USHORT = SHORT
USHORT = LONG
USHORT = ULONG
НАЗНАЧЕНИЕ получает младшие 16 бит ИСТОЧНИКа. Знак ИСТОЧНИКа игнорируется.
USHORT = DECIMAL
USHORT = PDECIMAL
USHORT = REAL
USHORT = SREAL
НАЗНАЧЕНИЕ получает младшие 16 бит из целой части ИСТОЧНИКа. Дробная часть ИСТОЧНИКа отсекается и знак игнорируется.
USHORT = STRING
USHORT = CSTRING
USHORT = PSTRING
ИСТОЧНИК должен быть набором цифр без символов форматирования.
НАЗНАЧЕНИЕ получает целую часть числа. Дробная часть ИСТОЧНИКа отсекается, а знак и хвостовые пробелы игнорируются.
LONG = BYTE
LONG = SHORT
LONG = USHORT
LONG = ULONG
НАЗНАЧЕНИЕ получает знак и значение ИСТОЧНИКа.
LONG = DECIMAL
LONG = PDECIMAL
LONG = REAL
LONG = SREAL
НАЗНАЧЕНИЕ получает знак и младшие 31 бит ИСТОЧНИКа. Дробная часть ИСТОЧНИКа отсекается.
LONG = STRING
LONG = CSTRING
LONG = PSTRING
ИСТОЧНИК должен быть набором цифр без символов форматирования. НАЗНАЧЕНИЕ получает знак и целую часть числа. Десятичная часть ИСТОЧНИКа отсекается, а хвостовые пробелы игнорируются.
DATE = BYTE
DATE = SHORT
DATE = USHORT
DATE = ULONG
НАЗНАЧЕНИЕ получает значение ИСТОЧНИКа в виде Кларионовской Стандартной Даты.
DATE = DECIMAL
DATE = PDECIMAL
DATE = REAL
DATE = SREAL
НАЗНАЧЕНИЕ получает младшие 31 бит ИСТОЧНИКа в виде
Кларионовской Стандартной Даты. Десятичная часть ИСТОЧНИКа отсекается.
DATE = STRING
DATE = CSTRING
DATE = PSTRING
ИСТОЧНИК должен быть набором цифр без символов форматирования. НАЗНАЧЕНИЕ получает целую часть числа как
Кларионовскую Стандартную Дату. Дробная часть ИСТОЧНИКа отсекается, а хвостовые пробелы игнорируются.
TIME = BYTE
TIME = SHORT
TIME = USHORT
TIME = ULONG
НАЗНАЧЕНИЕ получает значение источника как Клaрионовское Стандартное Время.
TIME = DECIMAL
TIME = PDECIMAL
TIME = REAL
TIME = SREAL
НАЗНАЧЕНИЕ получает младшие 31 бит ИСТОЧНИКа как Кларионовское Стандартное Время. Дробная часть ИСТОЧНИКа
отсекается.
TIME = STRING
TIME = CSTRING
TIME = PSTRING
ИСТОЧНИК должен быть набором цифр без символов форматирования. НАЗНАЧЕНИЕ получает целую часть ИСТОЧНИКа в виде Кларионовского Стандартного Времени. Дробная часть отсекается, а хвостовые пробелы игнорируются.
ULONG = BYTE
ULONG = SHORT
ULONG = USHORT
ULONG = LONG
НАЗНАЧЕНИЕ получает младшие 32 бита ИСТОЧНИКа. Знак
ИСТОЧНИКа игнорируется.
ULONG = DECIMAL
ULONG = PDECIMAL
ULONG = REAL
ULONG = SREAL
НАЗНАЧЕНИЕ получает младшие 32 бита от целой части ИС-


ТОЧНИКа. Дробная часть отсекается, а знак игнорирует-
ся.
ULONG = STRING
ULONG = CSTRING
ULONG = PSTRING
ИСТОЧНИК должен быть набором цифр без символов форматирования. НАЗНАЧЕНИЕ получает целую часть числа.
Дробная часть отсекается, а знак и хвостовые пробелы
игнорируются.
REAL = BYTE
REAL = SHORT
REAL = USHORT
REAL = LONG
REAL = ULONG
НАЗНАЧЕНИЕ получает как всю целую часть, так и знак
ИСТОЧНИКа.
REAL = DECIMAL
REAL = PDECIMAL
REAL = SREAL
НАЗНАЧЕНИЕ получает знак, целую и дробные части ИСТОЧНИКа.
REAL = STRING
REAL = CSTRING
REAL = PSTRING
ИСТОЧНИК должен быть набором цифр без символов форматирования. НАЗНАЧЕНИЕ получает знак, целую и дробную
части числа. Хвостовые пробелы игнорируются.
SREAL = BYTE
SREAL = SHORT
SREAL = USHORT
SREAL = LONG
SREAL = ULONG
НАЗНАЧЕНИЕ получает знак и значение ИСТОЧНИКа.
SREAL = DECIMAL
SREAL = PDECIMAL
SREAL = REAL
НАЗНАЧЕНИЕ получает знак, целую и дробную части ИСТОЧНИКа.
SREAL = STRING
SREAL = CSTRING
SREAL = PSTRING
ИСТОЧНИК должен быть набором цифр без символов форматирования. НАЗНАЧЕНИЕ получает знак, целую и дробную
части числа. Хвостовые пробелы игнорируются.
DECIMAL = BYTE
DECIMAL = SHORT
DECIMAL = USHORT
DECIMAL = LONG
DECIMAL = ULONG
DECIMAL = PDECIMAL
НАЗНАЧЕНИЕ получает знак и значение ИСТОЧНИКа.
DECIMAL = REAL
DECIMAL = SREAL
НАЗНАЧЕНИЕ получает знак и целую часть ИСТОЧНИКа, а
так же старшие биты дробной части. Самая старшая часть
дробной части (?) округляется в НАЗНАЧЕНИИ.
DECIMAL = STRING
DECIMAL = CSTRING
DECIMAL = PSTRING
Источник должен быть набором цифр без символов форматирования. НАЗНАЧЕНИЕ получает знак, целую и дробную
части числа. Хвостовые пробелы игнорируются.
PDECIMAL = BYTE
PDECIMAL = SHORT
PDECIMAL = USHORT
PDECIMAL = LONG
PDECIMAL = ULONG
PDECIMAL = DECIMAL
НАЗНАЧЕНИЕ получает знак и значение ИСТОЧНИКа.
PDECIMAL = REAL
PDECIMAL = SREAL
НАЗНАЧЕНИЕ получает знак и целую часть ИСТОЧНИКа, а
так же старшие биты дробной части. Самая старшая часть


дробной части (?) округляется в НАЗНАЧЕНИИ.
PDECIMAL = STRING
PDECIMAL = CSTRING
PDECIMAL = PSTRING
Источник должен быть набором цифр без символов форматирования. НАЗНАЧЕНИЕ получает знак, целую и дробную
части числа. Хвостовые пробелы игнорируются.
STRING = BYTE
STRING = SHORT
STRING = USHORT
STRING = LONG
STRING = ULONG
НАЗНАЧЕНИЕ получает знак и неформатированное число. В
НАЗНАЧЕНИИ, число выравнивается влево.
STRING = DECIMAL
STRING = PDECIMAL
STRING = REAL
STRING = SREAL
НАЗНАЧЕНИЕ получает знак, целую и дробную части ИСТОЧНИКа. В НАЗНАЧЕНИИ, число выравнивается влево.
CSTRING = BYTE
CSTRING = SHORT
CSTRING = USHORT
CSTRING = LONG
CSTRING = ULONG
НАЗНАЧЕНИЕ получает знак и неформатированное число. В
НАЗНАЧЕНИИ, число выравнивается влево.
CSTRING = DECIMAL
CSTRING = PDECIMAL
CSTRING = REAL
CSTRING = SREAL
НАЗНАЧЕНИЕ получает знак, целую и дробную части ИСТОЧНИКа. В НАЗНАЧЕНИИ, число выравнивается влево.
PSTRING = BYTE
PSTRING = SHORT
PSTRING = USHORT
PSTRING = LONG
PSTRING = ULONG
НАЗНАЧЕНИЕ получает знак и неформатированное число. В
НАЗНАЧЕНИИ, число выравнивается влево.
PSTRING = DECIMAL
PSTRING = PDECIMAL
PSTRING = REAL
PSTRING = SREAL
НАЗНАЧЕНИЕ получает знак, целую и дробную части ИСТОЧНИКа. В НАЗНАЧЕНИИ, число выравнивается влево.


Простые операторы присвоения


назначение = источник

назначение Должно быть меткой или переменной
источникЧисловая или строковая константа, переменная, функция или выражение.

Знак = присваивает значение ИСТОЧНИКа НАЗНАЧЕНИЮ; помещает значение выражения - ИСТОЧНИКа в переменную - НАЗНАЧЕНИЕ. Если ИСТОЧНИК и НАЗНАЧЕНИЕ являются разными типами данных, то результат зависит от Правил Преобразования Данных.
Пример:
Name = 'JONES' !Variable = string constant
PI = 3.14159 !Variable = numeric constant
Cosine = SORT(1-Sine*Sine) !Variable = functi on return value
A = B + C + 3 !Variable = numeric expressio
Name = CLIP(FirstName) &' ' Initial &'. '& LastName
!Variable = string expression
См. также:



BREAK (немедленно выйти из LOOP)


BREAK
Оператор BREAK немедленно прекращает выполнение цикла LOOP и передает управление первому оператору, следующему за структурой LOOPe. BREAK может использоваться только в LOOP-структурах.
Пример:
SHOW(5,12,'Press ESC to Continue') !Покажем сообщение
LOOP !Начало цикла LOOP
ASK ! ждем нажатия клавиши
IF KEYCODE()= 256 ! если нажата ESC, то
BREAK ! вылетаем из цикла
ELSE ! иначе,
BEEP ! даем гудок
. . !Конец оп-ров IF и LOOP
См. также: ,



CASE (структура условного выполнения)


CASE условие
OF выражение [TO выражение]
[OROF выражение ][TO выражение]
операторы
[ELSE]
операторы
.

условие Числовая или строковая переменная или выражение.
OF Операторы, следующие за OF выполняются тогда,
когда выражение, следующее за опцией OF, равно условию в операторе CASE. В структуре CASE может быть множество опций OF.
выражение Числовая или строковая переменная или выражение.
TO TO позволяет использовать в OF и OROF не одно, а целый диапазон значений. Операторы, следующие за OF или OROF выполняются если значение условного выражения попадает в указанный диапазон включительно. Выражение, стоящее после OF или OROF - это нижняя граница диапазона, а выражение после ТО - верхняя граница.
OROF Действует полностью аналогично OF. Для повышения читабельности, OROF можно ставить на отдельной строке от OF. С одним OF может быть связано несколько OROF.
ELSE Операторы, стоящие за ELSE выполняются если
все предыдущие условия OF и/или OROF не выполнены. ELSE обычно не требуется, но если все же использовано, то должно сбыть последней опцией в структуре CASE.
statements Любые разрешенные операторы языка Кларион.

Структура CASE избирательно выполняет операторы, основываясь на равенстве между условием и выражением или диапазоном выражений. Структуры CASE могут быть вложены в другие управляющие струтуры, и другие управляющие структуры могут быть вложены в структуры CASE.
Пример:
CASE FIELD() !Выбираем проц. редактирования поля
OF ?Name !Если поле - Имя
ERASE(?Address,?Zip) ! стереть Адрес по самый Индекс
GET(NameFile,NameKey) ! и считать запись
CASE Action !Выбираем Действие
OF 1 ! добавить запись - ее еще нет
IF NOT ERRORCODE() ! а вдруг ошибка файла?
ErrMsg = 'ALREADY ON FILE'
! иначе показать сообщ. об ошибке
DISPLAY(?Address,?Zip)
! показать адрес по самый индекс
SELECT(?Name) ! переВВести имя
. ! конец оператора IF
OF 2 OROF 3 ! изменить/удалить - запись уже есть
DISPLAY(?Address,?Zip)! показать адрес по самый индекс
. ! end case action
CASE SUB(Name,l,l) !Get first letter of name
OF 'A' TO 'M' !Process first half of alphabet
OROF 'a' TO 'm'
DO FirstHalf
OF 'N' TO 'Z' OROF 'n' TO 'z' DO SecondHalf
!Process second half of alphabet
. !End case sub(name
OF ?Address !If field is address
DO AddressVal ! call validation routine
. !End case fieldo



CHAIN (выполнить другую программу)


CHAIN(программа)

программа Строковая константа или переменная, содержащая имя программы для исполнения. Это может быть любая EXE или COM программа.

CHAIN завершает текущую программу, закрывает все файлы, возвращает всю запрошенную память операционной системе, и выполняет
другую ПРОГРАММУ.
Пример:
PROGRAM !Код программы MainMenu
CODE
EXECUTE CHOICE()
CHAIN('Ledger') !Выполнить LEDGER.EXE (книга счетов)
CHAIN('Payroll') !Выполнить PAYROLL.EXE (платежная
! ведомость)
RETURN !Вернуться в DOS
.
PROGRAM !Код программы Книга Счетов
CODE
EXECUTE CHOICE()
CHAIN('MainMenu') !Возврат в программу MainMenu
RETURN !Возврат в DOS
.
PROGRAM !Код программы Платежная Ведомость
CODE
EXECUTE CHOICE()
CHAIN('MainMenu') !Возврат в программу MainMenu
RETURN !Возврат в DOS
.



CYCLE (перейти в начало цикла LOOP)


CYCLE
Оператор CYCLE, немедленно передает управление назад, на начало цикла LOOP, в то место, где вычисляется условие для LOOP. CYCLE может использоваться ТОЛЬКО с LOOP-структурами.
Пример:
SET(MasterFile) !Указатель - на первую запись
LOOP UNTIL EOF(MasterFile) !Обрабатываем все записи
NEXT(MasterFile) ! читаем запись
DO MatchMaster ! проверка на совпадение
IF NoMatch ! если не совпадает, то
CYCLE ! идем на начало loop
. ! конец оператора IF
DO TransVal ! подтвердить транзакцию
PUT(MasterFile) ! записать запись
. !Конец цикла
См. также: ,



DO (вызвать подпрограмму (ROUTINE)


DO метка

метка Метка оператора ROUTINE.

Оператор DO используется для выполнения подпрограммы (ROUTINE) локальной для ПРГРАММЫ, ПРОЦЕДУРЫ или ФУНКЦИИ. Если выполнение ROUTINE завершено, то управление передается оператору, следующему за DO. ROUTINE может быть вызвана только из той секции CODE, которая содержит эту ROUTINE.
Пример:
DO NextRecord !Call the next record routine
DO CalcNetPay !Call the calc net pay routine



EXECUTE (statement selection structure)


EXECUTE expression
statement 1
statement 2
[BEGIN
statements
.]
statement n
.

expression Числовое выражение, или переменная, содержащая численное значение.
statement 1 Одиночный оператор, выполняемый только, если expression=1.
statement 2 Одиночный оператор, выполняемый только, если expression=2.
BEGIN BEGIN отмечает начало структуры, содержащей
одну или больше строк кода. Структура BEGIN рассматривается как одиночный оператор в структуре EXECUTE. Структура BEGIN завершается точкой или оператором END.
statement n Одиночный оператор, выполняемый только, если expression=n.

Структура EXECUTE выбирает одиночный исполняемый оператор (или их набор в виде структуры) на основании значения expression. Если expression равно 1, выполняется первый оператор (statement 1). Если expression равно 2, то второй (statement 2) и т.д. Если значение expression - ноль или больше, чем общее число операторов и/или структур внутри структуры EXECUTE, то EXECUTE игнорируется.
Струтуры EXECUTE могут быть вложены в другие исполняемые структуры и другие исполняемые структуры (IF, CASE, LOOP, EXECUTE и BEGIN) могут быть вложены в EXECUTE.
Пример:
EXECUTE Transact !Evaluate Transact
ADD(Customer) !Execute if Transact = 1
PUT(Customer) !Execute if Transact = 2
DELETE(Customer) !Execute if Transact = 3
. !End execute
EXECUTE CHOICEO !Evaluate CHOICEO function
OrderPart !Execute if CHOICEO = 1
BEGIN !Execute if CHOICEO = 2
SavVendor" = Vendor
UpdVendor
IF Vendor <> SavVendor"
Mem:Message = 'VENDOR NAME CHANGED'
. .
CASE VendorType !Execute if CHOICE() = 3
OF 1
UpdPartNo1
OF 2
UpdPartNo2
.
RETURN !Execute if CHOICEO - 4
. !End execute
См. также:



EXIT (выйти из подпрограммы (ROUTINE)


EXIT
Оператор EXIT немедленно покидает ROUTINE и передает управление оператору, следующему за оператором DO, который вызвал эту подпрограмму. Оператор EXIT не требуется. ROUTINE без EXIT завершается автоматически, когда завершается последовательность операторов в ROUTINE.
Пример:
CaIcNetPay ROUTINE
IF GrossPay = 0 !Если нет платежа
EXIT ! выйти из подпрограммы
.
NetPay = GrossPay - FedTax - Fica
QtdNetPay += NetPay
YtdNetPay += NetPay



Документация по Clarion


GOTO метка

метка МЕТКА другого исполняемого оператора в ПРОГРАММЕ, ПРОЦЕДУРЕ, ФУНКЦИИ или РУТИНЕ (ROUTINE).

Оператор GOTO передает управление от одного оператора другому. МЕТКА-параметр GOTO НЕ должна быть меткой РУТИНЫ, ПРОЦЕДУРЫ или ФУНКЦИИ.
Диапазон GOTO-переходов ограничен текущей РУТИНОЙ, ПРОЦЕДУРОЙ или ФУНКЦИЕЙ; GOTO НЕ может передать управление ЗА ПРЕДЕЛЫ РУТИНЫ, ПРОЦЕДУРЫ или ФУНКЦИИ в которой он использован.
Пример:
ComputeIt FUNCTION(Level)
CODE
IF Level = 0 THEN GOTO PassCompute.
!Пропустить вычисление процентов,
!если не задана процентная ставка
Rate = Level * MarkUp !Вычислить проценты
RETURN(Rate) ! и вернуть их
PassCompute RETURN(999999) !Return bogus number



HALT (выход в DOS)


HALT(errorlevel,[сообщение])

errorlevel Позитивная целая константа или переменная в диапазоне 0..250, которая представляет собой код выхода, передаваемый в DOS. DOS-флаг ERRORLEVEL будет установлен в это значение.
сообщение Строковая константа или переменная, которая
выводится на экран после завершения программы

Оператор HALT немедленно возвращает управление DOS, устанавливая ERRORLEVEL и, необязательно, показывая СООБЩЕНИЕ после завершения программы. Если взведена SHUTDOWN-процедура, то она выполняется перед завершением программы.
Если программа, остановленная HALT-ом была запущена оператором RUN или RUNSMALL из другой Кларион-программы, то ERRORLEVEL, с которым вышла остановленная программа, можно получить функцией RUNCODE.
Пример:
Password STRING(10)
CODE
BLANK
SHOW(1,1,'Введите, пожалуйста, пароль.')
Password = ENTRY(2,3,@S10)
IF Password <> 'Pay$MeMoRe'
HALT(0,'А вот хрен тебе! Неправильно.')
.
См. также: , , , RUNCODE



IF (структура условного выполнения)


IF логическое выражение
[THEN]
satements
[ELSIF логическое выражение]
[THEN]
satements
[ELSE]
satements
.

логическое выражение Числовая или строковая переменная,
выражение или функция. ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ вычисляет условие. Передача управления определяется результатом (true или false) выражения. Нулевое (или пустое) значение считается ЛОЖЬЮ, любое другое значение - ИСТИНА.
THEN Операторы после THEN выполняются, если предыдущее ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ вычислено как ИСТИНА. THEN НАДО пропускать, если подлежащие выполнению операторы находятся на отдельной строке, а не той же, где и ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ.
statements Выполняемый оператор или последовательность выполняемых операторов.
ELSIF ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ, стоящее за ELSIF вычисляется только если все предыдущие IF и ELSIF были ЛОЖЬю.
ELSE Операторы, стоящие за ELSE выполняются, если все предыдущие IF и ELSIF дают ЛОЖЬ. ELSE НЕ требуется, но если используется, то должно быть последней опцией в операторе IF.

Структура IF управляет выполнением программы на основании выводов из одного или более ЛОГИЧЕСКИХ ВЫРАЖЕНИЙ. Структуры IF могут иметь любое количество групп операторов ELSIF-THEN. Структуры IF могут быть "вложены" в другие управляющие структуры, и другие управляющие структуры могут быть вложены в IF-структуры.
Пример:
IF Cus:TransCount !If new customer
AcctSetup ! call account setup procedure
ELSIF Cus:TransCount > 10 AND Cus:TransCount <100
!If regular customer
DO RegularAcct ! process the account
ELSIF Cus:TransCount>100 !If special customer
DO SpecialAcct ! process the account
ELSE !Otherwise
DO NewAcct ! process the account
IF Cus:Credit THEN CheckCredit ELSE CLEAR(Cus:CreditStat).
! verify credit status
. !End if
IF ERRORCODEO THEN ErrHandler(Cus:AcctNumber,Trn:InvoiceNbr).
!Handle errors



LOOP (итерационная структура, цикл)


сколько TIMES
LOOP [ i=начало TO конец [BY шаг] ]
UNTIL логическое выражение
WHILE логическое выражение
statements
.

сколько Числовая константа, переменная или выражение, которое определяет, СКОЛЬКО раз (TIMES) будут повторены операторы в цикле LOOP.
TIMES Опция TIMES (раз) выполняет операторы столько раз, СКОЛЬКО задано.
i Метка переменной-счетчика цикла.
= Присвоить переменной (i) новое значение при каждой итерации цикла LOOP.
начало Числовая константа, переменная или выражение, которое задает начальное значение для счетчика цикла (i) при первом проходе через структуру LOOP.
TO Синтаксическая связка для параметра КОНЕЦ.
конец Если i больше чем КОНЕЦ, то выполнение цикла LOOP завершается.
BY Синтаксическая связка для параметра ШАГ.
шаг Числовая константа, переменная или выражение. ШАГ определяет величину, на которую будет увеличиваться i при каждом проходе цикла. Если параметр BY опущен, то по умолчанию подразумевается, что i увеличивается на 1.
UNTIL Параметр UNTIL вычисляет ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ ПЕРЕД очередным проходом цикла. Если ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ вычислено как ИСТИНА, то выполнение цикла LOOP завершается.
WHILE Параметр WHILE вычисляет ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ ПЕРЕД очередным проходом цикла. Если ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ вычислено как ЛОЖЬ, то выполнение цикла LOOP завершается.
логическое
выражение
Числовая или строковая переменная, выражение или функция. ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ вычисляет условие. Передача управления зависит от результата (ИСТИНА или ЛОЖЬ) выражения. Нулевое (или пустое) значение является ЛОЖЬю, любое другое значение - ИСТИНА.

Структура LOOP повторяет выполнение операторов внутри структуры. Условия для LOOP всегда вычисляются в начале цикла, перед каждым проходом. Структуры LOOP могут быть вложены в другие исполняемые структуры, и другие исполняемые структуры могут быть вложены в структуры LOOP.
LOOP без параметров выполняется бесконечно, до тех пор, пока не выполнится оператор BREAK или RETURN. BREAK прекращает цикл LOOP и продолжает выполнение программы с оператора, идущего за структурой LOOP.
Все операторы в структуре LOOP исполняются до оператора CYCLE. CYCLE немедленно передает управление на начало цикла LOOP для следующего прохода, не исполняя операторов, стоящих в LOOP после CYCLE.
Пример:
LOOP !Бесконецный цикл
Char = GetChar() ! получить символ
IF Char <> CarrReturn ! если это не возврат каретки
Field = CLIP(Field) & Char
! то добавить его к строке
ELSE ! иначе
BREAK ! завершить цикл
. . !Конец операторов IF и LOOP
IF ERRORCODE() !При ошибке
LOOP 3 TIMES ! повторить три раза
BEEP ! звуковой ситнал тревоги
. . !Конец операторов LOOP и IF
LOOP I# = 1 TO 365 BY 7 !В цикле I# увеличивается на 7
!каждый раз
GET(DailyTotal,l#) ! читаем каждую 7-ю запись
DO WeeklyJob ! выполняем подпрограмму
. !Конец цикла
SET(MasterFile) !Указатель - на первую запись
LOOP UNTIL EOF(MasterFile)!Обрабатываем все записи
NEXT(MasterFile) ! читаем запись
ProcMaster ! вызываем процедуру
. !Конец цикла
LOOP WHILE KEYBOARD() !Опустошаем буфер клавиатуры
ASK ! не обрабатывая нажатия клавиш
. !Конец цикла
См. также: ,

NOTIFY (обработка критических ошибок)


NOTIFY(процедура,событие)

процедура Метка ПРОЦЕДУРЫ, прототип которой, должен быть объявлен в MAP, как получающий *STRING-параметр (STRING передается по адресу).
событие Целочисленная константа, переменная или выражение. Если ноль, то процедура NOTIFY отменяется; если один, то критические ошибки DOS
обрабатываются процедурой.

Оператор NOTIFY "взводит" (SPA. А как еще перевести слово arms?) процедуру для обработки критических ошибок ДОС. Эта процедура получает параметр типа *STRING, на адрес которого, передается управление при возникновении критической ошибки.
Назначение этой ПРОЦЕДУРЫ - позволить Clarion-приложениям обрабатыать критические ошибки. ПРОЦЕДУРА может выполнять дисковые операции или любые другие действия. Выход из ПРОЦЕДУРЫ должен осуществляться оператором RETURN, (RESTART крайне не рекомендуется) и процедура должна выбирать и анализировать значение, которое DOS определяет для конкретной ошибки
STRING-параметр, передаваемый по адресу в процедуру может быть изначально назначен GROUP, для подавления необходимости синтаксического разбора строки для получения информации об ошибке. GROUP может быть описана как глобально (Глобальные Статические Данные) так и локально по отношению к модулю-ЧЛЕНУ (Локальные Статические Данные) для уменьшения потребностей в выделении памяти на стеке. GROUP может быть описана со следующими полями:
CritParmGroup GROUP,PRE(Crt) !Описание параметра-группы
Status LONG !Состояние обработки, 1 для критич.ошиб.
CritType SHORT !Код критической ошибки, 1-12, 15
CritMsg STRING(25) !Описание критической ошибки
CritDev STRING(25) !Имя устройства на котором ошибка
RetVal STRING(1) !Возвращаемое значение - A, I, R или F
.
Критические ошибки ДОС, которые могут быть обработаны ПРОЦЕДУРОЙ

CritType CritMsg
0 Защита от записи
1 Неверный номер диска
2 Диск(овод) не готов
3 Затребована неизвестная команда
4 Ошибка контрольной суммы (CRC)
5 Неверная длина структуры-запроса
6 Ошибка поиска
7 Неизвестный формат диска
8 Сектор не найден
9 В бумаге кончился принтер :-) :-)
10 Сбой при записи
11 Сбой при чтении
12 Общая, неспецифичная ошибка
15 Неверная смена диска (?)
<
После присвоения переданного параметра STRING ГРУППЕ (GROUP), процедура может определить, какая ошибка произошла, из значений CritType (номер ошибки), CritMsg (описание ошибки) и CritDev (отказавшее устройство). Затем, она может определить, какую опцию выбрать для конкретной ошибки и присвоить ее переменной RetVal.
Разрешенные значения для RetVal:
I Ignore (игнорировать ошибку)
R Retry (повторить действие, приведшее к ошибке)
A Abort (отменить действие, приведшее к ошибке)
F Fail (прекратить выполнение и выйти в ДОС)
Значение RetVal в конце процедуры определяет, как ошибка обработана. Выбранная опция возвращается присвоением ГРУППЫ переданному параметру *STRING в конце процедуры.
Пример:
Этот примерный код содержит два примера обработчиков критических ошибок. PrinterReady специфична для ошибок принтера, а ErrorProc - обработчик прочих ошибок.
PROGRAM
MAP
PrintReport !Процедура печати
PrinterReady(*STRING) !Обработчик ошибок принтера
ErrorProc(*STRING) !Обработчик остальных ошибок
.
CritParmGroup GROUP,PRE(Crt) !Описание группы параметров
Status LONG !Processing status, always 1
CritType SHORT !Critical error code, 1-12, 15
CritMsg STRING(25) !Critical error description
CritDev STRING(25) !Error device name string
RetVal STRING(L) !Action option chosen-A,I,R,or F
.
ErrFlag BYTE(0) !Флаг присутствия ошибки
CODE
PrintReport !Вызов процедуры-отчета
NOTIFY(ErrorProc,1) !Взводим обработчик общих оши-
! бок
!Здесь находится какой-то исполняемый код
PrintReport PROCEDURE
!Здесь описываем формат отчета
ErrScreen SCREEN(15,56),PRE(Scr),CQLOR(73),CENTER,SHADOW,CUA
ROW(1,1) STRING('г={54}ѓ')
ROW(2,1) REPEAT(13);STRING('Ѓ<O{54}>Ѓ')
ROW(15,1) STRING('L={54}-')
ROW(3,16) STRING('Ошибка -- Проверь принтер!')
ROW(13,16) STRING('Ошибка -- Проверь Принтер!')
.
CODE
NOTIFY(PrinterReady,1) !Взводим обработчик ошибок
! принтера
PRINT('<27>') !Посылаем ESC на принтер
IF ErrFlag !Была ли критическая ошибка?
OPEN(ErrScreen) ! вывести экран с предупрежд.


ASK ! ждем нажатия на клавишу
ErrFlag = 0 ! сбрасываем флаг ошибки
RETURN ! и вываливаемся
.
!Здесь остальной код отчета
PrinterReady PROCEDURE(ParmString)!Обработчик ошибок принтера
CODE
ErrFlag = 1 !Была критическая ошибка!
CritParmGroup = ParmString !Какя именно?
Crt:RetVal = 'F' !Отказ от продолжения
ParmString = CritParmGroup !Вернуть данные в параметр
ErrorProc PROCEDURE(ParmString) !Обработчик общих ошибок
Opt STRING(1) !Размещается на стеке
ErrScreen SCREEN(3,40),PRE(Scr),COLOR(79),CENTER,CUA
ROW(1,2) STRING('Ошибка:')
ErrDesc ROW(1,10) STRING(25)
ErrDevice ROW(2,10) STRING(25)
ROW(3,2) STRING('Выбери: Abort Retry Ignore Fail')
CODE
CritParmGroup=ParmString !Получить данные об ошибке
OPEN(ErrScreen) !Открыть экран
Scr:ErrDesc = Crt:CritMsg !Получить описание ошибки
Scr:ErrDevice = Crt:CritDev ! и устройстве
LOOP !Цикл для ввода допустимого
! выбора
ASK !Ждем ввода с клавиатуры
Opt = UPPER(KEYCODE())
IF Opt <> 'A' AND Opt <> 'R' AND Opt <> 'I' AND Opt <> 'F'
!Если выбранная опция недопус-
! тима, то
BEEP ! предупреждаем пользователя
CYCLE ! и повторяем ввод
ELSE !Иначе,
BREAK ! продолжаем
. . !Конец операторов IF и LOOP
Crt:RetVal = Opt !Помещаем опцию, выбранную поль-
! зователем в CritParmGroup
ParmString = CritParmGroup !Вернуть данные в параметр

Передаваемые ошибки:


RUN может передать любую возможную ошибку (см. приложение B)
Пример:
RUN('\command.com /c dir /p') !Выполним команду DIR с паузой
! между страницами
RUN('c:\wp5l\wp.exe') !Запустим WordPerfect
RUN(ProgName) !Выполним команду, содержащую-
! ся в переменной ProgName
См. также: RUNCODE

RUNSMALL может передать любую возможную ошибку (см.приложение B)
Пример:
RUNSMALL('\command.com /c dir /p')!Выполняем ДОС-команду DIR
RUNSMALL(PrgoName) !Выполняем команду из переменной ProgName
См. также: RUNCODE



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


В разделе CODE Кларионовских программ, операторы выполняются построчно, в той последовательности, в которой они описаны в исходном модуле. Управляющие операторы используются для изменения порядка их выполнения.
Управляющие структуры типа IF, CASE, LOOP и EXECUTE определяют порядок выполнения, вычисляя выражения и выполняя операторы в зависимости от условий. Безусловные переходы имеют место при вызовах процедур и операторах GOTO,DO, CYCLE, BREAK, EXIT, RETURN, RESTART, CHAIN, RUN и RUNSMALL.



RESTART (перезапустить программу)


RESTART([процедура])

процедура Метка оператора PROCEDURE. Если ПРОЦЕДУРА
опущена, то рестарт с начала ПРОГРАММЫ.

Оператор RESTART завершает выполнение текущей ПРОГРАММЫ, ПРОЦЕДУРЫ или ФУНКЦИИ и начинает выполнение программы из точки, определенной параметром ПРОЦЕДУРА. ПРОЦЕДУРА, выполняемая оператором RESTART рассматривается как "вызываемая из ДОС". Таким образом, RETURN из ПРОЦЕДУРЫ-параметра RESTART завершает выполнение ПРОГРАММЫ. RESTART НЕ перезагружает ПРОГРАММУ в память и не сбрасывает переменные в их начальные значения. В RESTART-ПРОЦЕДУРУ нельзя передать параметры.
Пример:
RESTART !Рестарт с самого начала
RESTART(QuitToDOS) !Выход в ДОС
QuitToDOS PROCEDURE !У этой процедуры только одно
! предназначение:
CODE
RETURN ! ВЫХОД В ДОС



RETURN (вернуться в точку вызова)


RETURN([выражение])

выражение ВЫРАЖЕНИЕ передает возвращаемое значение из ФУНКЦИИ в выражение, в котором использовалась эта ФУНКЦИЯ. ВЫРАЖЕНИЕ требуется для ФУНКЦИИ, и НЕ может быть использовано в ПРОГРАММЕ или ПРОЦЕДУРЕ.

Оператор RETURN завершает ПРОГРАММУ, ПРОЦЕДУРУ или ФУНКЦИЮ и передает управление назад в точку вызова. Если RETURN вызван из секции CODE в ПРОГРАММЕ, то программа завершается, все файлы закрываются и управление возвращается операционной системе.
RETURN требуется для ФУНКЦИИ и НЕ обязателен для ПРОЦЕДУРЫ или ПРОГРАММЫ. Если RETURN не используется в ПРОЦЕДУРЕ или ПРОГРАММЕ, то в конце исполняемого кода выполняется неявный RETURN. Конец исполняемого кода определяется концом исходного файла или началом другой ПРОЦЕДУРЫ, ФУНКЦИИ или РУТИНЫ.
Пример:
IF Done# THEN RETURN. !Выход, если все сделано
DayOfWeek FUNCTION(Date) !Функция возвращает день недели
CODE
EXECUTE (Date % 7) + 1 !Определяем, каким днем будет Date
RETURN('Sunday') ! и ВОЗВРАЩАЕМ название этого дня
RETURN('Monday') ! через RETURN
RETURN('Tuesday')
RETURN('Wednesday')
RETURN('Thursday')
RETURN('Friday')
RETURN('Saturday')
.



RUN (выполнить команду ДОС)


RUN(команда)

команда Строковая константа или переменная, содержащая команду.

Оператор RUN выполняет команду, как если бы она была введена в командной строке ДОС. По исполнении КОМАНДЫ, управление передается оператору, следующему за оператором RUN.
RUN закрывает все файлы, сохраняет экран и записывает образ памяти программы во временный ДОС-файл с расширением .RUN. Таким путем получаются уникальные имена файлов для множества временных .RUN-файлов. Временный файл пишется на текущий диск в текущий каталог, если переменная окружения 'CLATMP='не указана. CLATMP задает диск и каталог для всех временных файлов Кларион. Это может быть RAM-диск (рекомендуется не менее 512К). Команда ДОС SET CLATMP=D:\ задает корневой каталог диска D: как каталог для временных файлов.
RUN НЕ загружает автоматически вторую копию COMMAND.COM. Поэтому, КОМАНДА должна вызывать его если надо. COMMAND.COM нужен для внутренних команд ДОС, BAT-файлов или команд, которые должны искать программы по PATH. Если программа КОМАНДА находится в текущем каталоге, или путь к ней указан в КОМАНДЕ, то нет никакой необходимости во второй копии COMMAND.COM. Тем не менее, без COMMAND.COM, КОМАНДА должна включать так же расширение программного файла (.EXE или .COM).
По исполнении КОМАНДЫ, временный файл перезагружается в память и выполнение программы продолжается с оператора, следующего за оператором RUN. После восстановления программы в памяти, все файлы переоткрываются в том же режиме доступа, в котором они были открыты до RUN, так же, восстанавливается сохраненный экран. Временный файл должен быть перезагружен в то же самое место в памяти, из которого он выгружался, то есть, использовать RUN для загрузки резидентов (TSR) НЕ разрешено. Поскольку RUN закрывает все файлы а затем переоткрывает их, то текущие указатели на записи теряются. Следовательно, выполнение оператора RUN во время доступа к файлам, крайне не рекомендуется.
Успешность выполнения КОМАНДЫ может быть проверена функцией RUNCODE, которая возвращает код выхода DOS, с которым завершилась КОМАНДА. Если выполнение неудачно, RUN передает код ошибки в функции ERROR и ERRORCODE.



RUNSMALL (выполнить команду)


RUNSMALL(команда)

команда Аналогично КОМАНДЕ для RUN.

Оператор RUNSMALL выполняет команду ДОС в ДОСТУПНОЙ памяти. КОМАНДА выполняется как если бы она была введена в командной строке ДОС, затем управление возвращается в программe оператору, следующему за RUNSMALL.
RUNSMALL закрывает все файлы, сохраняет экран и выполняет КОМАНДУ. По выполнении КОМАНДЫ, все файлы переоткрываются в том же режиме доступа, что и до RUNSMALL, экран восстанавливается и программа продолжается с оператора, следующего за RUNSMALL. Использование RUNSMALL для загрузки резидентов (TSR) НЕ рекомендуется. Поскольку RUN закрывает все файлы а затем переоткрывает их, то текущие указатели на записи теряются. Следовательно, выполнение оператора RUN во время доступа к файлам, крайне не рекомендуется.
RUNSMALL НЕ загружает автоматически вторую копию COMMAND.COM. Поэтому, КОМАНДА должна вызывать его если надо. COMMAND.COM нужен для внутренних команд ДОС, BAT-файлов или команд, которые должны искать программы по PATH. Если программа КОМАНДА находится в текущем каталоге, или путь к ней указан в КОМАНДЕ, то нет никакой необходимости во второй копии COMMAND.COM. Тем не менее, без COMMAND.COM, КОМАНДА должна включать так же расширение программного файла (.EXE или .COM).
Успешность выполнения КОМАНДЫ может быть проверена функцией RUNCODE, которая возвращает код выхода DOS, с которым завершилась КОМАНДА. Если выполнение неудачно, RUNSMALL передает код ошибки в функции ERROR и ERRORCODE.



SHUTDOWN (взвести процедуру завершения)


SHUTDOWN([процедура])

процедура Метка оператора PROCEDURE. Если опущена, то SHUTDOWN-процесс отменяется.

Оператор SHUTDOWN взводит ПРОЦЕДУРУ, вызываемую при завершении программы. ПРОЦЕДУРА вызывается при нормальном завершении программы, нажатии Ctrl-Break или при НЕнормальном завершении/останове-во-время-исполнения. Она не вызывается, если компьютер перезагружается или программа прервана из-за сбоя по питанию. RESTART в SHUTDOWN-ПРОЦЕДУРЕ НЕ рекомендуется.
Пример:
SHUTDOWN(CloseSys) !Arm the shutdown procedure



STOP (заморозить выполнение программы)


STOP([сообщение])

сообщение Необязательное строковое выражение (до 64K),
которое будет показано в информационном окне.

STOP замораживает выполнение программы и показывает информационное окно. STOP предлагает пользователю выбор - продолжить выполнение программы или выйти в DOS. При выходе в DOS, STOP закрывает все файлы и освобождает выделенную программе память. Информационное окно также содержит информацию системного уровня, показ которой можно отменить только установкой переменной окружения CLASTOP в OFF. Синтаксис CLASTOP:
CLASTOP=1085,OFF
Число означает Кларионовский код клавиши (1085 = ALT=), который вызывает информационное окно STOP когда операторы ACCEPT или ASK ждут ввода с клавиатуры. CLASTOP может быть установлена на уровне DOS, в файле конфигурации программы или же в командной строке. Если значение не OFF, то при появлении информационного окна, будет доступна информация системного уровня.
Пример:
PswdScreen SCREEN(3,30)
ROW(1,1) STRING(' А ну-ка, введи Пароль!')
ROW(2,2) ENTRY(@10),USE(Password),HIDE
. !Поле для хранения пароля
CODE
OPEN(PswdScreen) !Открыть экран пароля
ACCEPT ! и считать ответ пользователя
IF Password <> 'PayMe$moRe' !Правильный пароль?
LOOP;STOP('А вот хрен тебе! Доступ запрещен!').
. !Если нет, то идут они все...





Вызовы процедур


procname[(параметры])

procname Имя ПРОЦЕДУРЫ, как оно описано в прототипе процедуры в MAP-структуре. Имя должно соответствовать метке оператора PROCEDURE.
параметры Необязательный список параметров, передаваемый ПРОЦЕДУРЕ. Список может содержать одну или больше меток переменных и/или выражений. Параметры разделяются запятыми и описываются в прототипе процедуры в MAP-структуре.

К ПРОЦЕДУРЕ обращаются по метке (и в скобках указывают список параметров) как к оператору в разделах CODE в PROGRAM, PROCEDURE или FUNCTION. Список параметров должен соответствовать списку, описанному в прототипе процедуры в MAP. Процедуры НЕЛЬЗЯ вызывать в выражениях.
Пример:
PROGRAM
MAP
ComputeTime(*GROUP) !Передаем группу как параметр
MatchMaster !НЕ передаем параметров
.
ParmGroup GROUP !Описываем группу
FieldOne STRING(10)
FieldTwo LONG
.
CODE
ComputeTime(ParmGroup) !Вызываем проц. отсчета времени
MatchMaster !Вызываем проц. соответствия
См. также: