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

BEGIN (Определить структуру кода)

BEGIN
Операторы
.

операторы Выполнимые инструкции программы.

Директива компилятора BEGIN заставляет компилятор рассматривать группу операторов как единую структуру. BEGIN структура должна завершаться точкой или оператором END.
BEGIN используется в структуре управления EXECUTE чтобы позволить обрабатывать несколько строк кода как одну.
Пример:
EXECUTE Value
Procl !Выполняется если Value = 1
BEGIN !Выполняется если Value = 2
Value+=1
Proc2
.
Proc3 !Выполняется если Value = 3
.
См. Также:

CODE (Начать выполнимые операторы)

CODE
Оператор CODE отделяет секцию декларации данных от секции выполнимых операторов в пределах ПРОГРАММЫ, ПРОЦЕДУРЫ, или ФУНКЦИИ. Первый оператор, который выполнится в ПРОГРАММЕ, ПРОЦЕДУРЕ или ФУНКЦИИ - оператор после слова CODE.
Пример:
OrdList PROCEDURE !Объявляем процедуру
!Здесь идет описание данных
CODE !Это начало секции "Кода"
!Здесь идут выполнимые операторы
См. Также: , ,

COMPILE (Определить источник который нужно компилировать)

COMPILE(завершитель[,выражение])

завершительСтроковая постоянная, который отмечает последнюю строку блока исходного кода.
ВыражениеВыражение, позволяющее условное выполнение COMPILE. Выражение имеет вид: EQUATE = целое.

Директива COMPILE определяет блок строк исходного кода, которые нужно включить в компиляцию. Включенный блок начинается с директивы COMPILE и оканчивается строкой, которая содержит строковую константу-завершитель.
Сама строка-завершитель включается в COMPILE-блок.
Необязательный параметр "выражение" разрешает условный COMPILE. Форма выражения однозначна. Это - метка оператора EQUATE, либо установленный переключатель CONDITIONAL в Проектной Системе, сопровождаемый знаком равенства (=), за которым идет целая константа. Код между COMPILE и завершителем компилируется только если выражение истинно. Хотя выражение не требуется, COMPILE без параметра "выражение" не нужен, потому что весь исходный код компилируется, если явно не опущен с помощью OMIT. COMPILE и OMIT это, как говорят в Одессе, две большие разницы, и не могут быть вложены друг в друга.
Пример:
Demo EQUATE(1) !Задать EQUATE-значение Demo
CODE
COMPILE('EndDemoChk',Demo = 1)
!Компилировать только если Demo=1
DO DemoCheck !Проверка ограничителей
EndDemoChk !Конец кода условного COMPILE
См. Также: ,

ДИРЕКТИВЫ КОМПИЛЯТОРА

Директивы Компилятора операторы которые говорят компилятору выполнить некоторое действие во время компиляции. Эти операторы не включены в выполнимый объектный код программы который производит компилятор.

EJECT (Начать новую страницу листинга)

EJECT([подзаголовок модуля])

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

Директива EJECT начинает новую страницу и, необязательно, новый подзаголовок модуля в листинге Кларион. Если подзаголовок модуль опущен, то для следующей страницы будет задействован подзаголовок установленный предыдущими директивами SUBTITLE или EJECT.
Пример:
EJECT('Описания файлов') !Hачать новую страницу с новым
!подзаголовком

EMBED (Вложенная секция исходного кода)

EMBED(строка)
операторы вложенного исходного кода
.

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

Директива EMBED идентифицирует блок вложенного исходного кода. Блок начинается директивой EMBED и завершается оператором END или точкой.
Директива EMBED заставляет компилятор нумеровать строки исходного кода относительно начала вложенного кода. Строка используется в сообщениях об ошибках, чтобы определить какой именно вложенный код содержит ошибку. После завершающей точки или оператора END, нумерация строк компилятором продолжается с того места, где она была прервана директивой EMBED (включая число строк содержащихся во вложенном коде).
Директива EMBED обычно используется, чтобы идентифицировать блоки вложенного исходного кода включенного Генератором Приложений в произведенный им исходный код.
Пример:
CODE
SETCOLOR(7) !Строка 1
BLANK !Строка 2
SETCOLOR() !Строка 3
EMBED('EndEmbed','Source One') !Строка 4
SETCOLOR(23) !Вложенная Строка 1
SHOW(25,35,'Message') !Вложенная Строка 2
SETCOLOR() !Вложенная Строка 3
. !Строка 8, конец вложенного кода
OPEN(Screen) !Строка 9

END (Завершить структуру)

END
END завершает описание данных или составной выполнимый оператор. Функционально эквивалентен точке (.)
Пример:
Customer FILE,DRIVER('Clarion') !Описание файла
RECORD ! начать описание записи
Name STRING(20)
Number LONG
END ! конец описания записи
END !конец описания файла
CODE
IF Number <> SavNumber !начало структуры if
DO GetNumber
END !конец структуры if
CASE Action !начало структуры case
OF 1
DO AddRec
OF 2
DO ChgRec
OF 3
DO DelRec
END !конец структуры case

FUNCTION (Объявить функцию)

метка FUNCTION(список параметров)
[метка] локальные данные
CODE
операторы
RETURN(значение)

Список параметров Необязательный список переменных которые передают значения ФУНКЦИИ. Этот список определяет имя каждого параметра используемого в пределах исходного кода ФУHКЦИИ. Каждый параметр отделяется запятой. Тип данных каждого параметра задается в прототипе функции в MAP-структуре.
Локальные данные Объявляет Локальные Динамические данные которые могут использоваться только этой функцией.
CODEНачало выполнимых операторов.
операторыВыполнимые инструкции программы.
RETURNЗавершает выполнение функции и возвращает значение в выражение в котором функция использовалась.
ЗначениеЧисловая или строковая постоянная или переменная которая определяет результат вызова функции.

Декларация ФУНКЦИИ начинает секцию исходного кода который может быть выполнен обращением к метке ФУНКЦИИ (со списком параметров, если есть). Функция может использоваться как компонент выражения, или параметр ПРОЦЕДУРЫ или другой ФУНКЦИИ в секции кода ПРОГРАММЫ. Выполнение ФУНКЦИИ завершается (требуемым) оператором RETURN в ее секции CODE.
Данные объявленные в пределах ФУНКЦИИ, между ключевыми словами FUNCTION и CODE, являются "Локальными Динамическими данными" к которым может обращаться только данная ФУНКЦИЯ (если они не переданы как параметр другой ПРОЦЕДУРЕ или ФУНКЦИИ). Эти данные кладутся на стек, память под них выделяется при входе в функцию, и освобождается при выходе из нее.
ФУНКЦИЯ должна быть объявлена в MAP модуля-ЧЛЕHА или ПРОГРАММЫ. Если она объявлена в MAP ПРОГРАММЫ, то она доступна любой другой процедуре или функции в программе. Если же объявлена в MAP модуля-ЧЛЕHА, то функция доступна только другим процедурам или функциям из этого модуля-ЧЛЕHА.
Пример:
PROGRAM
MAP
FulIName(STRING.STRING,STRING),STRING
!Прототип функции с параметрами
DayString,STRING
!Прототип функции без параметров
.
CODE
: !Глобальные операторы
:
FulIName FUNCTION(Last,First,lnit) !Функция полного имени
CODE !Hачало секции кода
IF Init !Если нет среднего инициала
RETURN(CLIP(First) & ' ' & Last)
! вернуть полное им
ELSE !в противном случае
RETURN(CLIP(First) & ' ' & Init & '. ' & Last)
! вернуть полное им
. !конец условия if
DayString FUNCTION !функция названия дн
CODE !Hачало секции кода
Day# = (TODAY()%7)+1 !Получить день недели из
!системной даты
EXECUTE Day# !Execute, возвращает название
!дн
RETURN('Воскресенье')
RETURN('Понедельник')
RETURN('Вторник')
RETURN('Среда')
RETURN('Четверг')
RETURN('Пятница')
RETURN('Суббота')
. !Конец структуры execute
См. Также:

Глобальные, локальные, статические, и динамические данные

Термины Глобальные и Локальные относятся к доступности данных. Глобальные данные доступны всюду в программе, Локальные данные имеют ограниченную доступность. Статические и Динамические относятся к распределению памяти для данных. Память для Статических данных выделяется при загрузке программы, для динамических данных выделяется во время исполнения.
Имеются три типа данных которые могут быть определены в программе на Кларион: Глобальные Статические данные, Локальные Статические данные, и Локальные Динамические данные.
Глобальные Статические данные объявлен в секции данных ПРОГРАММЫ, между ключевыми словами PROGRAM и CODE. Они доступны выполнимым операторам и выражениям в каждой ПРОЦЕДУРЕ и ФУНКЦИИ ПРОГРАММЫ. Они всегда в памяти во время исполнения программы.
Локальные Статические данные объявлены в модуле-ЧЛЕНЕ, между ключевыми словами MEMBER и PROCEDURE (или FUNCTION). Доступность этих данных ограничена переделами модуля-ЧЛЕНА в котором они объявлены; к ним могут обращаться только ПРОЦЕДУРЫ и ФУНКЦИИИ в модуле-ЧЛЕНЕ. Однако, они могут быть переданы как параметр любой другой ПРОЦЕДУРЕ или ФУНКЦИИ. Локальные Статические данные всегда в памяти во время выполнения программы.
Локальные Динамические данные объявлены в секции данных ПРОЦЕДУРЫ или ФУНКЦИИ, между ключевыми словами PROCEDURE (или FUNCTION) и CODE. Доступны только в ПРОЦЕДУРЕ или ФУНКЦИИИ в которой они объявлены; на них может ссылаться только эта ПРОЦЕДУРА или ФУНКЦИЯ. Однако, они могут быть переданы как параметр любой другой ПРОЦЕДУРЕ или ФУНКЦИИ. Память используемая локальными данными динамически размещается в стеке при вызове PROCEDURE или FUNCTION, и освобождается когда PROCEDURE или FUNCTION закончена.
Cтруктурам данных SCREEN, PULLDOWN, FILE, QUEUE, и REPORT назначается Статическая память, объявлены они Глобальными, Локальными в модуле-ЧЛЕНЕ, или локальными в ПРОЦЕДУРЕ или ФУНКЦИИ. Только описания переменных локальные в ПРОЦЕДУРЕ или ФУНКЦИИ размещены на стеке. Это позволяет ФУНКЦИИ или ПРОЦЕДУРЕ быть истинно рекурсивной, получая новую копию Локальных переменных при каждом ее вызове, при использовании только одной копии любой структуры.
См. Также:

INCLUDE (Компилировать код из другого файла)

INCLUDE(имя_файла[,секция])[,LIST]

имя_файла строковая постоянная, которая содержит спецификацию DOS-файла с исходным текстом. Если не указано расширение, то по умолчанию принимается .CLA.
Секци строковая постоянная, которая является строковым параметром директивы SECTION, отмечающей начало исходного кода, который нужно включить.
LISTПоместить включенный код в листинг.

Директива INCLUDE указывает исходный код, который нужно компилировать, но который находится в отдельном файле. При появлении директивы INCLUDE, указанный файл, или его же указанная секция компилируется так, как будто находится в самом компилируемом модуле.
Компилятор использует файл Переназначений (TS.RED) чтобы найти требуемый файл. Файл ищется по маршруту, заданному для данного типа имени_файла (обычно по расширению). Это делает ненужным задание полного пути к имени_файла, который нужно включить. Обсуждение файла Переназначений находится в Руководстве программиста.
Пример:
GenLedger PROCEDURE !Описываем процедуру
INCLUDE('filedefs.cla')
!Здесь включим описания файлов
CODE !Hачало секции кода
INCLUDE('Setups','ChkErr')
!Включаем секцию проверки ошибок из
!setups.cla

LIST (Помещает включенный исходный код в листинг компилятора)

LIST
Признак LIST директивы INCLUDE заставляет компилятор поместить включенный исходный код в листинг. Если признак LIST опущен, то только сам оператор INCLUDE появится в листинге.
Пример:
INCLUDE('filedefs.cla'),LIST
!Включить описания файлов и поместить их в листинг

MAP (Обьявить прототипы ПРОЦЕДУР и-или ФУНКЦИЙ)

MAP
прототипы
[MODULE()
прототипы
.]
.

MEMBER (Идентифицирует принадлежность модуля-члена)

MEMBER (программа)
[MAP
прототипы
.]
[метка] локальные данные
;процедуры или функции

ПрограммаСтроковая константа, содержащая имя файла (без расширения) модуль PROGRAM. Этот параметр требуется.
MAPОписание локальных процедур и функций. Любые процедуры или функции объявленные здесь могут быть использованы только теми процедурами или функциями, чей код находится в этом модуле-ЧЛЕНЕ.
прототипыОбъявления PROCEDURE или FUNCTION.
локальные данныеОбъявление локальных Статических данных, которые могут использоваться только теми процедура- ми и функциями чей исходный код находится в этом модуле-ЧЛЕНЕ.
CODEНачало блока выполнимых операторов.
операторыВыполнимые инструкции программы.
RETURNЗавершает выполнение программы. Возвращает уп равление операционной системе.
Процедуры или ФункцииИсходный текст для процедур и функций в модуля-ЧЛЕНА.

MEMBER - первый оператор в исходном модуле, который не является PROGRAM-модулем. Ему могут предшествовать только комментарии к исходному тексту и-или директивы компилятора или TITLE и SUBTITLE. Это слово требуется в начале любого исходного файла который содержит процедуры и-или ФУНКЦИИ которые используются в ПРОГРАММЕ. Оператор MEMBER идентифицирует программу к которой принадлежит данный исходный МОДУЛЬ.
Модуль-ЧЛЕНА может иметь собственную MAP-структуру. Процедуры и функции, объявленные в этой MAP, доступны только другим процедурам и функциям в этом модуле-ЧЛЕНЕ. Исходный код для процедур и функций, объявленных в MAP этого модуля-ЧЛЕНА, может содержаться в файле самого модуля-ЧЛЕНА, или другом файле. Если исходный код для ПРОЦЕДУРЫ или ФУНКЦИИ объявленной в MAP модуля-ЧЛЕНА содержится в отдельном файле, прототип такой процедуры и-или функции должен быть объявлен в структуре MODULE в пределах MAP данного модуля-ЧЛЕНА. Этот отдельный исходный файл модуля-ЧЛЕНА должен также содержать собственную MAP, которая объявляет тот же самый прототип для этой ПРОЦЕДУРЫ или ФУНКЦИИ. Любая PROCEDURE или FUNCTION не объявленная в Глобальной MAP (ПРОГРАММЫ) должна быть объявлена в локальной MAP в МОДУЛЕ-ЧЛЕНЕ который содержит исходный код.
Данные объявленные в модуле-ЧЛЕНЕ, между ключевыми словами MEMBER и PROCEDURE или FUNCTION, является "Локальными Статическими данными" и к ним могут обращаться только PROCEDURE или FUNCTION в пределах модуля.
Пример:
MEMBER('OrderSys')
!Модуль относится к программе OrderSys
MAP !Описываем локальные процедуры
Func1(STRING),STRING
!Func1 известна только в этом модуле
.
LocalData STRING(10) !Описываем данные, локальные для данно-
!го модуля-ЧЛЕHА
HistOrd PROCEDURE !Описание процедуры HistOrd
HistData STRING(10) !Данные, локальные для PROCEDURE
CODE
LocalData = Func1(HistData)
HistOrd2 PROCEDURE !Еще одна процедура
CODE
LocalData = Func1(LocalData)
Funcl FUNCTION(RecField)
CODE
См. Также: , , ,

Метки описаний и операторов

Операторы языка в исходном модуле могут быть разделены в две общих категории: описания данных и выполнимые операторы, или просто "данные" и "код".
Во время выполнения программы, описания данных сохраняют за собой области памяти которые управляются в соответствии c выполнимыми операторами. Любой оператор кода или описание данных может быть идентифицировано меткой. Метка описывает определенное местоположение в PRO RAM (памяти процессора?). Ко всем переменным, структурам данных, PROCEDUREМ, FUNCTIONМ, ПОДПРОГРАММАМ можно обращаться по их меткам.
В исходных модулях Кларион, 1ый столбец отведен для меток. Метка может содержать буквы (на верхнем или нижнем регистрах), цифры от 0 до 9, символ подчеркивания символ (_), и двоеточие (:). Первый символ должен быть буквой или символом подчеркивания. Метки не чувствительны к регистру букв, поэтому, CurRent и CURRENT одинаковые метки. Метка не может быть зарезервированным словом. Любое выполнимый оператор может иметь метку которая может использоваться как цель для оператора GOTO.
Метка оператора PROCEDURE или FUNCTION - название(имя) функции или процедуры. Использование метки ПРОЦЕДУРЫ в выполнимом операторе выполняет процедуру. Метка ФУНКЦИИ используется в выражениях, или списках параметров других функций, для присвоения значения, возвращаемого функцией.

МОДУЛЬ (указывает файл с модулем-ЧЛЕНОМ)

MODULE(sourcefile)
прототип процедурыe
прототип функции
.

sourcefile Строковая константа. Если sourcefile содержит исходный код на Кларион, то задается имя файла (без расширения) который содержит ПРОЦЕДУРЫ и-или ФУНКЦИИ. Если sourcefile внешняя библиотека, то строка может содержать любой уникальный идентификатор.
прототип Процедуры прототип ПРОЦЕДУРЫ содержащейся в sourcefile.
прототип Функции прототип ФУНКЦИИ содержащейся в sourcefile.

Структура MODULE именует модуль-ЧЛЕН. Он содержит прототипы дл ПРОЦЕДУР и ФУНКЦИЙ содержащихся в sourcefile. Структура MODULE может только быть объявлена в пределах MAP-структуры.
Пример:
Файл "prele.cla" содержит:
PROGRAM !программа Sample в prele.cla
MAP !Hачало MAP
MODULE('Loadit') ! исходный модуль loadit.cla
LoadIt ! процедура load it
. ! конец MODULE
MODULE('Compute') ! исходный модуль compute.cla
ComputeIt ! процедура compute it
. ! конец MODULE
. !конец MAP
Файл "loadit.cla" содержит:
MEMBER('Sample') !Описываем модуль-ЧЛЕH
MAP !Hачало локальной MAP
MODULE('Process') ! исходный модуль process.cla
ProcessIt ! процедура process it
. ! конец MODULE
. !конец MAP
См. Также: , ,

MODULE Объявление исходного модуля-члена.

MAP-структура содержит прототипы, которые описывают функции, процедуры и внешние исходные модули используемые в ПРОГРАММЕ или модуле-ЧЛЕНЕ. MAP объявленная в PROGRAM-модуле объявляет ПРОЦЕДУРЫ или ФУНКЦИИ которые доступны повсюду в программное. MAP в модуле-ЧЛЕНЕ объявляет ПРОЦЕДУРЫ или ФУНКЦИИ которые доступны только в этом модуле-ЧЛЕНЕ.
Пример:
Один файл содержит
Sample PROGRAM !Программа Sample в prele.cla
MAP !Hачало глобальной MAP
LoadIt !процедура "загрузи ЭТО"
. !Конец map
Отдельный файл содержит:
MEMBER('Sample') !Обьявить модуль-ЧЛЕН
MAP !Начать местную MAP
ComputeIt !процедура "Вычисли ЭТО"
. !Конец MAP
См. Также: , , ,

OMIT (Указывает не подлежащий компиляции текст)

OMIT(завершитель[,выражение])

завершительстроковая постоянная, которая отмечает последнюю строку блока исходного кода.
ВыражениеВыражение, позволяющее условное выполнение OMIT, выражение должно иметь вид: EQUATE = целое.

OMIT директива определяет блок исходных линий кода которые не надо компилировать. Эти строки могут содержать комментарии к исходному коду или секцию кода который был "отключен" для отладочных целей. Опущенный блок начинается с директивы OMIT и завершается строкой, которая содержит ту же самую строковую константу, что и завершитель. Сама строка-завершитель тоже входит в OMIT-блок.
Необязательный параметр "выражение" разрешает условный OMIT. Форма выражения однозначна. Это метка оператора EQUATE, либо установленный переключатель CONDITIONAL в Проектной Системе, сопровождаемый знаком равенства (=), за которым идет целая константа. Директива OMIT выполняется только, если выражение истинно.
COMPILE и OMIT - противоположны друг другу и не могут быть взаимно вложены.
Пример:
OMIT('**END**') !Безусловный OMIT
*************************************************
*
* Главный цикл программы
*
*************************************************
**END**
Demo EQUATE(0) !Задает EQUATE-значение Demo
CODE !Опустить только, если Demo
!равно нулю
OMIT('EndDemoChk',Demo = 0)
!Проверка ограничителей
DO DemoCheck !конец опущенного кода
EndDemoChk
См. Также: ,

PROCEDURE (Объявить процедуру)

Метка PROCEDURE (список параметров) [Метка] Локальные данные CODE операторы [RETURN]

Список параметровНеобязательный список переменных, которые передают значения ПРОЦЕДУРЕ. Этот список определяет имя каждого параметра используемого в пределах ИСХОДНОГО кода процедуры. Каждый параметр отделяется запятой. Тип данных каждого параметра указан в прототипе процедуры в MAP- структуре.
Локальные данныеОбъявите Локальные Динамические данные, которые могут использоваться только в этой процедуре.
CODE Начало выполнимых операторов.
операторыВыполнимые инструкции программы.
RETURNЗавершить выполнение процедуры. Вернуться в точку, из которой процедура была вызвана.

Декларация ПРОЦЕДУРЫ начинает секцию исходного кода который может быть выполнен в ПРОГРАММЕ. Процедура вызывается обращением к ее метке (и указанием параметров, если есть в наличии) как к исполняемому оператору в секции кода ПРОГРАММЫ, ПРОЦЕДУРЫ, или ФУHКЦИИ. ПРОЦЕДУРА завершается и возвращается в точку вызова когда выполнен оператор RETURN. Неявное RETURN происходит в конце выполнимого кода. Конец выполнимого кода для ПРОЦЕДУРЫ определен как конец исходного файла или начала новой ФУНКЦИИ, ROUTINE, или другой ПРОЦЕДУРЫ.
Данные объявленные в пределах ПРОЦЕДУРЫ, между ключевыми словами PROCEDURE и CODE, являются "Локальными Динамическими данными" к которым может обращаться только данная ПРОЦЕДУРА (если они не переданы как параметр другой ПРОЦЕДУРЕ или ФУНКЦИИ). Эти данные кладутся на стек, память под них выделяется при входе в процедуру, и освобождается при ее завершении.
ПРОЦЕДУРА должна быть объявлена в MAP модуля-ЧЛЕHА или ПРОГРАММЫ. Если она объявлена в MAP ПРОГРАММЫ, то она доступна любой другой процедуре или функции в программе. Если же объявлена в MAP модуля-ЧЛЕHА, то процедура доступна только другим процедурам или функциям из этого модуля-ЧЛЕHА.
Пример:
PROGRAM !Пример кода программы
MAP
OpenFile(FILE) !Прототип процедуры с параметром
ShoTime !Прототип процедуры без параметра
.
CODE
OpenFile(FileOne) !Вызов процедуры для открытия файла
IDLE(ShoTime) !Вызывать ShoTime пока ACCEPT ждет ввода
: !Еще какие-то операторы
OpenFile PROCEDURE(AnyFile) !Открывает любой файл
CODE !Hачало секции кода
OPEN(AnyFile) !Открыть файл
IF ERRORCODE() = 2 !Если файл не найден
CREATE(AnyFile) ! создать его
. !конец условия IF
RETURN !Вернуться обратно
ShoTime PROCEDURE !Показывает врем
Time LONG !Локальная переменна
CODE !Hачало секции кода
Time = CLOCK() !получить системное врем
SHOW(1,1,Time,@T3) !Показать врем
RETURN !Вернуться обратно
См. Также: ,

PROGRAM (Объявить программу)

PROGRAM
[MAP
прототипы
.]
глобальные данные
CODE
операторы
[RETURN]
процедуры или функции

MAPОписание глобальных процедур и функций.
прототипыОбъявления PROCEDURE или FUNCTION.
глобальные данныеОбъявление Глобальных Статических данных, которые могут использоваться всеми процедурами и функциями.
CODEНачало блока выполнимых операторов.
операторыВыполнимые инструкции программы.
RETURNЗавершает выполнение программы. Возвращает управление операционной системе.
Процедуры или ФункцииИсходный текст для процедур и функций в
Модуле PROGRAM.

Оператор PROGRAM - первое описание в исходном модуле Кларион- программы.
Ему могут предшествовать либо комментарии к исходному тексту, либо директивы компилятора TITLE & SUBTITLE. Имя файла исходного текста ПРОГРАММЫ используется как имя файла для объектного (.OBJ) и исполняемого (.EXE) модулей при компиляции. Оператор PROGRAM может иметь метку, но метка игнорируется компилятором.
ПРОГРАММА с PROCEDURE и-или FUNCTION должна иметь MAP-структуру. MAP объявляет прототипы функций и-или процедур. Любая PROCEDURE или FUNCTION содержащаяся в отдельном файле исходного текста должна быть объявлена в структуре MODULE в пределах MAP.
Данные объявленные в модуле PROGRAM, между PROGRAM и CODE, является "Глобальными Статическими данными" и доступны из любой ПРОЦЕДУРЫ или ФУНКЦИИ в ПРОГРАММЕ.
Пример:
PROGRAM !Пробное описание программы
Fahrenheit REAL !Описание глобальных данных
Centigrade REAL
CODE !Hачало выполняемого кода
SETCOLOR(7)
BLANK
SHOW(4,20,'Введи температуру по Фаренгейту: ')
Fahrenheit = ENTRY(4,50.@N-04)
Centigrade = (Fahrenheit - 32) / 1.8
SHOW(6,20,'Температура по Цельсию: ')
SHOW(6,50,Centigrade,@N-04)
SHOW(8,20,'Press any key to exit')
ASK
См. Также: , , , ,

Прототипы ПРОЦЕДУР и ФУHКЦИЙ

имя[(список параметров)][,возвращаемый тип][,соглашение вызова][,RAW][,NAME()]

Имя Метка оператора PROCEDURE или FUNCTION.
Список параметровтипы данных переданных ПРОЦЕДУРЕ или ФУНКЦИИ в качестве параметров
возвращаемый типТип данных, который возвращает FUNCTION.
Соглашения ВызоваЗадает паскалевский или С-подобный вид передачи параметров через стек.
RAWУказывет, что параметры STRING или GROUP передают только адрес в памяти.
NAMEОпределяет замену, "внешнее" имя для ПРОЦЕДУРЫ или ФУНКЦИИ.

Все ПРОЦЕДУРЫ и ФУНКЦИИ в ПРОГРАММЕ должны быть объявлены как прототипы в MAP. Прототип состоит из: имени ПРОЦЕДУРЫ или ФУНКЦИИ, необязательного списка параметров, и возвращаемого типа данных (если описывается FUNCTION). Если PROCEDURE или FUNCTION библиотека, написанная на другом языке, C или ПАСКАЛЕ, может быть указано соглашение о вызове (передаче параметров через стек. Также может быть определено внешнее (external) ИМЯ.
Необязательный список параметров - список типов данных которые передаются ПРОЦЕДУРЕ или ФУНКЦИИ, разделяются запятыми и заключается в круглые скобками. Любой параметр который может быть опущен при вызове PROCEDURE или FUNCTION, должен быть в список параметров прототипа и заключаться в угловые скобки ( <> ). Есть три типа параметров которые могут быть пропущены: параметры-значения, параметры-переменные, и параметры-указатели (?).
Параметры-значенияи "передаются по значению." В "вызванной" ПРОЦЕДУРЕ или ФУНКЦИИ используется копия переменной переданной в списке параметров "вызывающей" ПРОЦЕДУРЫ или ФУНКЦИИ. "Вызванная" PROCEDURE или FUNCTION не может изменить значение переменной переданной ей "вызывающей". Параметры-значения представлены в списке типом данных в прототипе ПРОЦЕДУРЫ или ФУНКЦИИ в MAP. Допустимые типы параметров-значений:

BYTE SHORT USHORT LONG ULONG SREAL REAL DATE TIME STRING

Параметры-переменные "передаются по адресу". Переменная переданная по адресу имеет только один адрес в памяти.
Изменение значения переменной в "вызванной" ПРОЦЕДУРЕ или ФУНКЦИИ изменяет значение самой переменной, а не ее копии. Параметры-переменные представлены в списке типами данных со звездочкой (*) в прототипе ПРОЦЕДУРЫ или ФУНКЦИИ в MAP. Допустимые типы параметров-переменных:

*BYTE *SHORT *USHORT *LONG *ULONG *SREAL *REAL
*DATE *TIME *STRING *PSTRING *CSTRING *GROUP

Параметры-указатели передают имя структуры данных "вызванной" ПРОЦЕДУРЕ или ФУНКЦИИ. Передача указателя позволяет "вызванной" ПРОЦЕДУРЕ или ФУНКЦИИ использовать те команды Кларион, которые требуют метку структуры как параметр. Параметры-указатели представлены в списке типом указатель в прототипе ПРОЦЕДУРЫ или ФУНКЦИИ в MAP. Параметры-указатели всегда "передаются по адресу." Допустимые типы параметров-указателей:

FILE KEY INDEX QUEUE SCREEN REPORT PULLDOWN

FUNCTION должна ВОЗВРАЩАТЬ (RETURN) значение. Тип данных который нужно возвратить внесен в список, отделяется запятой, после необязательного списка параметров. Допустимые типы результатов, возвращаемых функцией:

BYTE SHORT USHORT LONG ULONG
SREAL
REAL DATE TIME STRING

Вы можете, но не обязаны, указать способ передачи параметров - C или ПАСКАЛЬ для вашей ПРОЦЕДУРЫ или ФУНКЦИИ. Это обеспечивает совместимость библиотеками написанными на других языках. Если вы не указываете тип соглашения о вызове, по умолчанию используется внутреннее, основанное на регистрах соглашение.
Признак RAW позволяет вам передавать только адрес памяти СТРОКИ или ГРУППЫ, либо как параметр-значение, либо как параметр-переменную. Обычно, параметры STRING или GROUP передают адресату(?) еще и длину строки. Признак RAW подавляет передачу длины. Это наиболее полезно для функций внешних библиотек, которые ожидают получить только адрес строки.
Признак NAME обеспечивает внешнее имя для ПРОЦЕДУРЫ или ФУНКЦИИ. Это также сделано для совместимости с библиотеками написанными на других языках. Например: В некоторых компиляторах языка C, при C-шном соглашении о вызове заданном для функции, компилятор добавляет подчеркивание к имени функции.


Признак NAME позволяет линкеру разрешить нормальное имя функции не заставляя программу на Кларион обращаться к функции с именем, начинающимся с подчеркивания.
Пример:
MAP
MODULE('Test')
!'test.cla' содержит эту процедуру и функции
MyProcl(LONG) !LONG параметр-значение
MyProc2() !Hеобязательный LONG параметр-пере-
!менна
MyFuncl(*SREAL),REAL,C
!SREAL параметр-переменная, возвращаем REAL,
!C-шное соглашение вызова
MyFunc2(FILE),STRING
!FILE параметр-указатель, возвращаем STRING
. !конец MODULE и MAP
MODULE('Party3.Obj') !third-party библиотека
Func46(*CSTRING),REAL,C,RAW
!Передаем только адрес CSTRING в C-функцию
Func48(REAL),REAL,PASCAL !PASCALевский вызов
Func49(SREAL),REAL,C,NAME('_func49')
!C-шный вызов и внешнее имя функции
. . !конец MODULE и MAP
См. Также: , , , ,


ROUTINE (Обьявить локальную подпрограмму)

метка ROUTINE

метка Имя подпрограммы.

ROUTINE объявляет начало местной подпрограммы. Она локальна по отношению к ПРОЦЕДУРЕ или ФУНКЦИИ в которой она описана и должна быть в конце секции CODE ПРОЦЕДУРЫ или ФУНКЦИИ к которой она принадлежит.
ROUTINE вызывается оператором DO, за которым идет метка подпрограммы. Управление Программе после выполнения ROUTINE возвращается оператору после слова DO. ROUTINE заканчивается концом исходного модуля, или началом другой ROUTINE, ПРОЦЕДУРЫ, или ФУНКЦИЙ. Оператор RETURN может также использоваться для завершения кода ROUTINE (подобно RETURN в ПРОЦЕДУРЕ).
Пример:
SomeProc PROCEDURE
CODE
!операторы
DO CheckPage !вызов подрограммы
!еще операторы
CheckPage ROUTINE !начало подпрограммы, и одновремен-
!но - окончание процедуры
IF LineCount > 55 !Если больше 55 строк
PRINT(@FF) ! делаем перевод формата
LineCount = 0 ! сбросить счетчик строк
EXIT ! выход из подпрограммы
. !Конец условия if
См. Также: ,

SECTION (Определить секцию исходного кода)

SECTION(строка)

Строкастроковая постоянная который именует СЕКЦИЮ.

Директива компилятора SECTION описывает начало блока выполнимого Директива компилятора SECTION описывает начало блока выполнимого исходного кода или описаний данных. SECTION используется как необязательный параметр директивы INCLUDE чтобы включить конкретный блок исходного кода. SECTION завершается следующей СЕКЦИЕЙ или концом файла.
Пример:
SECTION('FirstSection') !Hачало секции
FieldOne STRING(20)
FieldTwo LONG
SECTION('SecondSection')
!Заканчиваем предыдущую, начинаем новую
!секцию
IF Number <> SavNumber
DO GetNumber
.
SECTION('ThirdSection')
!Заканчиваем предыдущую, начинаем новую
!секцию
CASE Action
OF 1
DO AddRec
OF 2
DO ChgRec
OF 3
DO DelRec !Третья секция завершается с кон-
. !цом файла
См. Также: INCLUDE

Специальные символы

Это список специальных символов используемых в языке Кларион:

Инициаторы!Восклицательный Знак начинает комментарий
? Вопросительный знак начинает equate-метку поля или меню
@ Знак "Коммерческое ЭТ" начинает элемент формата или управления(?).
* Звездочка начинает параметр передаваемый по адресу в прототип MAP.
Терминаторы
(завершители)
; Точка-с-запятой разделяет выполнимые операторы стоящие в одной строке CR/LF ВК/ПС разделитель выполнимых операторов
. Точка завершает структуру.
ЃВертикальная черта - символ продолжения строки исходного текста
#Знак фунта объявляет неявную LONG-переменную.
$Доллар объявляет неявную REAL-переменную.
"Двойная кавычка объявляет неявную
STRING-переменную.
Разделители( )Круглые Скобки окружают список параметров.
[ ]Скобки окружают список индексов массива
' 'Апострофы окружают строковую константу.
{ }Фигурные скобки окружают индекс повторения в строковой константе.
< >Угловые скобки окружают ASCII-код в строковой константе, или указывают параметр в прототипе MAP, который может быть опущен
Коннекторы
(соединители)
.Точка - десятичная точка используемая в числовых константах.
,Запятая соединяет параметры в списке параметров.
:Двоеточие соединяет префикс с меткой или группирует символы в метках.
_Подчеркивание соединяет группы символов в метках.
Операторы+Сложение.
-Вычитание
*умножение.
/ деление.
%деление по модулю.
^ Возведение в степень.
<меньше чем.
>больше чем.
=присвоение или равенство.
~логическое "НЕ".
&Конкатенация (строк)


SUBTITLE (Печатать подзаголовок МОДУЛЯ)

SUBTITLE(подзаголовок модуля)

подзаголовок модул строковая постоянная содержащая подлежащий печати подзаголовок.

SUBTITLE печатает в первой колонке третьей строки листинга Кларион. Директива SUBTITLE не печатается в листинге. Директива SUBTITLE должна быть помещена в начале исходного модуля до описаний PROGRAM или MEMBER. Подзаголовок остается одним и тем же на каждой странице листинга, если его не измененит директива EJECT.
Пример:
SUBTITLE ('Описания Глобальных Данных')

TITLE (Печатает заголовок МОДУЛЯ)

TITLE(заголовок модуля)

заголовок модул строковая постоянная, содержащая заголовок,
который нужно напечатать.

TITLE печатает в первой колонке первой строки листинга Кларион. Директива TITLE не печатается в листинге. Директива TITLE должна быть помещена в начале исходного модуля до описаний PROGRAM или MEMBER. Заголовок остается одним и тем же на каждой странице листинга.
Пример:
TITLE ('ORDERSYS - Листинг Системы Ввода Заказов')


Зарезервированные слова

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

ANDELSELOOPRETURN
BEGINELSIFMEMBERROUTINE
BREAKENDNOTSECTION
BYEXECUTEOFTDEN
CASEEXITOMITTIMES
COMPILEFUNCTIONORTO
CYCLEGOTOOROFUNTIL
DOIFPROCEDUREWHILE
EJECTINCLUDEPROGRAMXOR

Следующие ключевые слова могут использоваться как метки структур данных или выполнимых операторов. Они не могут использоваться как метки операторов PROCEDURE or FUNCTION:

CODEFOOTERMENUQUEUEROW
COLGROUPMODULERECORDSCREEN
DETAILHEADEROPTIONREPEATSUBTITLE
FILEMAPPULLDOWNREPORTTITLE


Завершение структуры

Составные структуры данных создаются, когда описания данных вложены в другие описания данных. Имеются множество составных структур данных в языке Кларион: SCREEN, REPORT, FILE, RECORD, GROUP, и т.д. Эти составные структуры данных должны завершать с точкой (.) или ключевым словом END. Операторы IF, CASE, EXECUTE, LOOP, и BEGIN, все формы управляющих структур должны также быть завершены точкой или оператором END.

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

BYTE (однобайтное целое без знака)

метка BYTE(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]

Формат: однобайтная переменная
Биты: 7___________________0
Диапазон: 0..255
initial value Числовая константа. Если опущена, то подразумевается ноль.
DIM Размерность(и) переменной как массива.
OVER Разделяет один и тот же участок памяти с другой переменной
NAME Задает альтернативное, "внешнее" имя для поля.
EXTERNAL Указывает, что переменная описывается и память под нее выделяется во внешней библиотеке. НЕ разрешено для описаний FILE, QUEUE и GROUP.

BYTE описывает однобайтное беззнаковое целое. Присвоение значения выходящего за пределы диапазона приводит к непредсказуемым результатам.
Пример:

Countl BYTE !Declare one byte integer
Count2 BYTE,OVER(Countl) !Declare OVER the one byte integer
Count3 BYTE,DIM(4) !Declare it an array of 4 bytes
Count4 BYTE(5) !Declare with initial value
Count5 BYTE,EXTERNAL !Declare as external
Count6 BYTE,NAME('SixCount') !Declare with external name

ExampleFile FILE,DRIVER('Clarion') !Declare a file
Record RECORD
CountS BYTE,NAME('Counter')!Declare with external name
. .

CSTRING (строка фиксированной длины, завершающаяся нулем)


метка СSTRING( length

string constant

picture
)[,DIM()][,OVER()][,NAME()] [,EXTERNAL]


Формат: Фиксированное число
байт.
Диапазон: От 1 до 65,535 байт
length Числовая константа,
которая задает размер
строки в байтах. При
использовании этого
параметра,строка
инициализируется
пробелами.
string constant Начальное значение строки. Длина СSTRING-a устанавливается (в байтах) по длине этой строковой константы плюс завершающий нулевой символ.
picture Используется для форматирования значений, присвоенных строке. Длина такой строки, это количество байт, достаточное для хранения форматированной строки и завершающего нулевого символа. Строка инициализируется пробелами.
DIM Размерность(и)
переменной как массива.
OVER Разделяет один и тот же участок памяти с другой переменной
NAME Задает внешнее имя для переменной.
EXTERNAL Указывает, что переменная описана и память под нее выделяется во внешней библиотеке. НЕ разрешено для описаний FILE, QUEUE и GROUP.

CSTRING описывает символьную строку, завершающуюся нулевым символом (ASCII NULL). Она соответствует строкам, используемым в языке C и типу данных "ZSTRING" в Btrieve Record Manager. Под CSTRING в памяти выделяется участок постоянной длины, при этом, завершающий нулевой символ помещается в конец введенных данных. CSTRING во время исполнения преобразовывается в промежуточный тип STRING. Тип CSTRING имеет смысл употреблять для совместимости с внешними файлами и/или процедурами.
Пример:
Name CSTRING(21) !Declare 21 byte field - 20 bytes data
OtherName CSTRING(21),OVER(Name) !Declare field over name field
Contact CSTRING(21),DIM(4) !Array 21 byte fields - 80
! bytes data Company
Company CSTRING('Clarion Software, Inc.') !23 byte string 22
! bytes data
Phone CSTRING(@P(###)###-####p) !Declare 14 bytes 13 bytes
! data
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
NameField CSTRING(21),NAME('ZstringField')
!Declare with external name
. .

DATE (четырехбайтная дата)

метка DATE[,DIM()][,OVER()][,NAME()][,EXTERNAL]

Формат: год мм дд
Диапазон: год: 1..9999

месяц: 1..12

день: 1..31
DIM Размерность(и)
переменной как массива.
OVER Разделяет один и тот же
участок памяти с другой
переменной
NAME Задает внешнее имя для
переменной.
EXTERNAL Указывает, что
переменная описана и
память под нее выделяется
во внешней библиотеке. НЕ
разрешено для описаний FILE,
QUEUE и GROUP.

DATE описывает четырех байтную переменную типа даты. Этот формат соответствует типу поля "DATE" в Btrieve Record Manager. DATE, используемые в числовых выражениях, преобразовываются в число дней, прошедших с 28 декабря 1800 года (стандартная кларионовская дата, обычно хранится как LONG). Допустимый диапазон стандартной кларионовской даты - от 1 января 1801 года по 31 декабря 2099 года. Использование значений, выходящих за пределы данного диапазона, приводит к непредсказуемым результатам. Тип DATE имеет смысл употреблять для совместимости с внешними файлами и/или процедурами.
Пример:
DueDate DATE !Declare a date field
OtherDate DATE,OVER(DueDate) !Declare field over date field
ContactDate DATE,DIM(4) !Array of 4 date fields
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
DateRecd DATE,NAME('DateField')
. . !Declare with external name
См. также: Standard Date

DECIMAL (упакованное десятичное число фиксированной длины со знаком)

метка DECIMAL(length[,places][,initial value])[,DIM()][,OVER()][,NAME()][,EXTERNAL]

Формат: s d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
Биты: 60____________________________________________0
Диапазон: -999,999,999,999,999..999,999,999,999,999
length ТРЕБУЕМАЯ числовая константа, содержащая общее число десятичных цифр (в целой и дробной частях вместе взятых) в переменной. Максимальная длина 15.
places Числовая константа, уточняющая количество цифр в дробной части (справа от десятичной точки) в переменной. Она должна быть меньше или равна параметру length. Если опущена, то описываема переменная считается целочисленной.
initial value Числовая константа. Если опущена, то подразумевается ноль.
DIM Размерность(и) переменной как массива.
OVER Разделяет один и тот же участок памяти с другой переменной
NAME Задает внешнее имя для переменной.
EXTERNAL Указывает, что переменная описана и память под нее выделяется во внешней библиотеке. НЕ разрешено для описаний FILE, QUEUE и GROUP.

DECIMAL описывает переменную переменной длины со знаком, в формате BCD (binary-coded-decimal) Intel 8087. Каждый байт в DECIMAL хранит две десятиные цифры (по 4 бита на цифру). Самый левый байт хранит знак числа в своем старшем ниббле (0 = плюс, что-нибудь другое - минус) и одну десятичную цифру. Таким образом, переменные типа DECIMAL всегда содержат нечетное число цифр (скажем, DECIMAL(10) и DECIMAL(11) оба занимают по 6 байт. Присвоение DECIMAL-переменным значений, выходящих за пределы DECIMAL приводит к непредсказуемым результатам.
Пример:
Countl DECIMAL(5,O) !Declare three-byte signed packed decimal
Count2 DECIMAL(5),OVER(Countl) !Declare OVER the three-byte
signed packed decimal
Count3 DECIMAL(5.0),DIM(4) !Declare it an array of 4 decimals
Count4 DECIMAL(5,0,5) !Declare with initial value
Count5 DECIMAL(5,O),EXTERNAL !Declare as external
Count6 DECIMAL(5,O),NAME('SixCount') !Declare with external name
ExampleFile FILE,DRIVER('Clarion') !Declare a file
Record RECORD
Count7 DECIMAL(5,O),NAME('Counter 1) !Declare with
. . !external name

DIM (размерность массива)

DIM(измерение,....,измерение)

измерение Числовая константа,
которая задает количество
элементов в данном измерении массива.

Атрибут DIM объявляет
перемнную-массив. Такая
переменная повторяется
столько раз, сколько указано в
параметрах ИЗМЕРЕНИЕ.
Многомерные массивы можно
рассматривать как вложенные
одномерные. Каждое измерение
массива имеет соответствующий
индекс. Таким образом,
обращаясь к переменной -
элементу трехмерного массива,
надо указать три индекса. Хотя
на число измерений не
накладывается ограничений, но
размер массива не должен
превышать 65,520б.С атрибутом DIM
можно использовать следующие
типы данных:

SHORT REAL STRING CSTRING PSTRING
ULONG USHORT SREAL DATE TIME

Индексы однозначно
определяют конкретный элемент
массива. Список индексов
содержит индексы для каждого
ИЗМЕРЕНИЯ массива. В списке,
индексы отделяются друг от
друга запятыми, а весь список
заключается в квадратные
скобки ([ ]). Индекс может быть
числовой константой,
выражением или функцией. Если
надо обратиться ко всему
массиву целиком, то надо
использовать метку этого
массива без списка индексов.
Структура GROUP - особый случай.
Каждый уровень вложенности
добавляет индексы и GROUP и ее
переменным. Данные, описанные в
GROUP можно использовать точно
так же, как и собственно GROUP.
Пример:
Screen GROUP !Текст на экране
Row GROUP,DIM(25) !25 строк
Pos GROUP,DIM(80) !Две тысячи знакомест
Attr BYTE !Байт атрибута
Char BYTE !Собственно символ
. . . !Завершаем все три группы
В предыдущей группе:
Screen это 4,000байтная GROUP
Row[1] это 160байтная GROUP
Pos[1,1] это 2хбайтная GROUP
Attr[1,1] это BYTE
Char[1,1] это BYTE
Month STRING(10),DIM(12) !Размерность для месяца - 12
CODE
CLEAR(Month) !Весь массив заполнить пробелами
Month[1] = 'January' !Заполнить массив названиями
Month[2] = 'February'
MonthE3] = 'March'
См. также: MAXIMUM
Массивы как
параметры процедур и функций
Массив можно передать в PROCEDURE
или FUNCTION.
Прототип, описанный в
MAP-структуре должен описывать
тип данных "массив" как
параметр-переменную
("передается по адресу") с
пустым списком индексов.
Вызывающий оператор может
передать массив в ROCEDURE или
FUNCTION.
Пример:
PROGRAM
MAP
MainProc
AddCount(*LONG[,],*LONG[,]) !Передаем 2 двумерных
. !масива типа LONG
CODE
MainProc
MainProc PROCEDURE
TotalCount LONG,DIM(10,10)
CurrentCnt LONG,DIM(10,10)
CODE
AddCount(TotalCount,CurrentCnt) !Вызывая процедуру, переда-
!ем ей массивы
AddCount PROCEDURE(Tot,Cur) ! Процедуре нужны два массива
CODE
LOOP I# = 1 TO MAXIMUM(Tot,1) !Цикл по первому индексу
LOOP J# = 1 TO MAXIMUM(Tot,2) !Цикл по второму индексу
Tot[I#,J#l += Cur[I#,J#] ! увеличить TotalCount на
. . ! CurrentCnt
CLEAR(Cur) !Очистить массив CurrentCnt
RETURN
См. также: , , MAXIMUM

EQUATE (назначить метку)


метка EQUATE( label

constant

picture
)


метка Метка исполняемого
оператора. Используется
для присвоения оператору
еще одной метки.
constant Числовая или символьная
константа. Используется
для описания сокращенного
названия содержимого
константы, и позволяет
легко изменять и находить
эту константу.
picture Элемент шаблона. Дает
сокращенное имя шаблону.
Тем не менее, форматтеры
экранов и отчетов в
кларионовском редакторе
не распознают назначенные
метки как разрешенные
шаблоны.

Директива EQUATE не занимает
память во время исполнения. Она
используется для присвоения
метки другой метке или
константе. Метка директивы EQUATE
не может быть такой же, как ее
параметр.
Пример:
Init EQUATE(SetUpProg) !Обзовем процедуру по другому
Off EQUATE(0) !Off означает нуль
On EQUATE(1) !On означает один
Pi EQUATE(3.1415927) !Значение числа ПИ
EnterMsg EQUATE('Press Ctrl-Enter to SAVE')
SocSecPic EQUATE(@P###-##-##IfltP)!Формат номера карточки
!социального страхован.
См. также: Зарезервированные
слова

EXTERNAL (переменная описана извне)

EXTERNAL
Атрибут EXTERNAL указывает на то, что переменная, которой он присвоен, описана во внешней библиотеке. Таким образом, переменная с атрибутом EXTERNAL определена и может использоваться кларионовским кодом, но под нее не будет выделена память. Память для такой переменной выделяется самой внешней библиотекой. Этот атрибут позволяет Clarion-программам иметь доступ к полям, описанным как PUBLIC во внешних библиотеках.
EXTERNAL допустим только для
переменных, описанных ВНЕ
структур FILE, QUEUE или GROUP.
Пример:
PROGRAM
MAP
MODULE('External.Obj')
AddCount,PASCAL !External library with PASCAL
. . ! calling convention
TotalCount LONG,EXTERNAL !Variable declared in external library
См. также: NAME

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


метка GROUP[,PRE()][,DIM()][,OVER()][,NAME()][,EXTERNAL]
declarations
.


declarations Одно или более
последовательных описаний
переменных.
PRE Метка-префикс для
переменных этой структуры.
DIM Размерность переменных
как массива.
OVER Разделяет одно и то же
место в памяти с
другойпеременной или
структурой.
NAME Задает "внешнее"
имя поля.
EXTERNAL Указывает на то, что
переменная описана и
память под нее выделена во
внешней библиотеке. НЕ
разрешено с описаниями FILE,
QUEUE или GROUP.

(SPA - Мне кажется, что они
противоречат сами себе - пишут,
что атрибут external не разрешен
для group, а сами указывают его в
списке возможных параметров...)
Структура GROUP позволяет
обращаться к нескольким
переменным по одной метке. Это
может использоваться для
измерения (?) набора переменных,
или для присвоения или
сравнения наборов переменных
одним оператором. В больших
сложных программах, структуры
GROUP удобны для подержки наборов
связанных разнотипных данных.
GROUP должна завершаться точкой
или оператором END.
При обращении оператора или
выражения к переменной типа
GROUP, GROUP рассамтривается как
STRING, составленная из всех
переменных этой структуры.
Структура GROUP может быть
вложена в другую структуру
данных, как например, RECORD или
другая GROUP.
Из-за внутреннего
представления, числовые
переменные (кроме DECIMAL)
описанные в группе не совсем
корректно обрабатываются, при
использовании их как строк. По
этой причине, построение ключа,
в котором используются поля
типа GROUP, содержащие числовые
переменные, может привест к
неожиданной
последовательности сравнения
(collating sequence).
Пример:
NameGroup GROUP,PRE(Nme) !Name group
First STRING(20) ! first name
Middle STRING(L) ! middle initial
Last STRING(20) ! last name
. !End group declaration
DateTimeGrp GROUP,PRE(Dtg),DIM(10) !Date/time array
Date LONG
Time LONG
. !End group declaration

ЭЛЕМЕНТЫ ШАБЛОНОВ

Элементы шаблонов предлагают формат масок для просмотра и/или редактирования переменных. Элементы шаблонов можно использовать как параметры для описания переменных типа STRING, ENTRY, или STRING OPTION в SCREEN-структурах; как параметры операторов STRING в REPORT-структурах; как параметры некоторых процедур и функций Клариона; или, как параметры описаний STRING, CSTRING и PSTRING. Есть семь типов элементов шаблонов: числовые и валюта, научная нотация, дата, время, образец, key-in template и строки.
Шаблоны
чисел и валюты
@N[валюта][знак][заполнение]размер[группирование][места][валюта][знак][B]

@N Все
шаблоны чисел и валюты
начинаются с @N.
валюта Либо знак доллара ($) либо строковая константа, заключенная в тильды (~). Если есть признак знака и нет признака заполнения, то символ валюты будет "плавать" возле старшей левой цифры. Если же есть признак заполнения, то символ валюты остается в крайней левой позиции. Если символ валюты стоит после размера и группирования, то он будет располагаться в конце показываемого числа.

знак Задает формат вывода отрицательных чисел. Если тире стоит перед ЗАПОЛНЕНИЕМ и РАЗМЕРом, то отрицательные числа будут выводиться с ведущим знаком "минус". Если же тире идет после РАЗМЕРа, ГРУППИРОВАНИя, places, и ВАЛЮТы, то числа будут выводиться с хвостовым минусом. Если в обоих позициях, предназначенных для ЗНАКа стоят скобки, то отрицательные числа будут выводиться без минуса, но заключенными в скобки.

заполнение Указывает вид ведущих нулей нули, пробелы или звездочки (*). Если ЗАПОЛНЕНИЕ опущено, то ведущие пробелы подавляются. 0 Ведущие нули выводятся, ГРУППИРОВАНИЕ подавлено Вместо нулей пробелы, ГРУППИРОВАНИЕ подавлено * Вместо ведущих нулей выводятся звездочки

размер РАЗМЕР требуется, чтобы указать общее число значащих цифр для вывода, включая количество цифр в признаке МЕСТА и всех символов форматирования.

группирование Признак ГРУППИРОВАНИЯ (кроме запятой, которая принимается по умолчанию) может быть помещен справа от РАЗМЕРА, для указания разделитель групп из трех цифр.
. Порождает точки
- Порождает
тире
_ Порождает
пробелы (НЕ подчеркивания!)
места
Задает символ десятичного разделителя и число цифр в дробной части. Число цифр в дробной части должно быть меньше, чем РАЗМЕР. Десятичным разделителем может быть точка (.), слабое ударение ('), или буква "v" (только для описания формата хранения STRING-полей, а не для вывода). . Точка порождает точку как десятичный разделитель ` Слабое ударение порождает запятую как десятичный разделитель. v НЕ порождает десятичный разделитель (только для хранения STRING-полей)

B Если значение нулевое, то число выводится в виде пробелов.

<
Элементы шаблонов чисел и валюты форматируют числа для вывода на экран или в отчет. Если значение больше, чем можно вывести в текущем шаблоне, такое значение выводится в виде строки из звездочек.
Пример:

Число Результат Формат
@N9 4,550,000 Девять
цифр, группирование
запятыми (по умолчанию)
@N_9B 4550000 Девять
цифр, без группирования,
ведущие нули выводятся как
пробелы
@N09 004550000 Девять
цифр, ведущие нули
выводятся
@N*9 ***45,000 Девять цифр, заполнение звездочками, группирование запятыми
@N9_ 4 550 000 Девять цифр, группирование пробелами
@N9. 4.550.000 Девять цифр, группирование точками


Десятич.

дробь
Результат Формат
@N9.2 4,550.75 Две цифры в
дробной части, десятичный
разделитель - точка
@N_9.2B 4550.75 То же, без группирования, если ноль, то выводится строка пробелов.
@N_9'2 4550,75 Две цифры в дробной части, десятичный разделитель запятая
@N9.'2 4.550,75 Десятичный разделитель запятая, группирование точками
@N9_'2 4 550,75 Десятичный разделитель запятая, группирование пробелами


Со знаком Результат Формат
@N-9.2B 2,347.25 Ведущий минус, если ноль, то вывести пустую строку
@N9.2- 2,347.25- Хвостовой
минус
@N(10.2) (2,347.25) Вывести в скобках, если отрицательное


Знак
доллара
Результат Формат
@N$9.2B $2,347.25 Ведущий знак доллара, вывести пустую строку, если ноль
@N$10.2- $2,347.25- Ведущий знак доллара, хвостовой минус, если отрицательное
@N$(11.2) $(2,347.25) Ведущий знак доллара, вывести в скобках, если отрицательное


Национальные
валюты
Результат Формат
@N12_'2~ F~ 1 5430,50 F Франция
@N~L. ~12' L.1.430.050 Италия
@N~L~12.2 L1,240.50 Великобритания
@N~kr~12'2 kr1.430,50 Норвегия
@N~DM~12'2 DM1.430,50 Германия
@N12_'2~ mk~ 1 430,50 mk Финляндия
@N12'2~ kr~ 1,430.50 kr Швеция

Только хранение
Шаблоны:
Variablel STRING(@N_6v2) !Шесть байт хранятся БЕЗ десятич-
!ного разделителя
CODE
Variablel="1234.56" !Храним в виде '123456'
SHOW(1,1,Variablel,@N_7.2)
!Выводим с десятичн. точкой: '1234.56'

LIKE (определяемые пользователем типы данных)

новое_описание LIKE(выглядит_как)[,DIM()][,OVER()][,PRE()][,NAME()]
новое_описание - Метка
описания нового типа данных.
выгдядит_как - Метка описания
элемента данных, чье
определение будет
использовано.
LIKE говорит компилятору
определить новое_описание
используя то же описание, что и
для выглядит_как, включая все
атрибуты.
Новое_описание может
использовать атрибуты DIM и OVER.
Если выглядит_как имело
атрибут DIM, то новое_описание
сразу будет массивом. Если в
будущем атрибут DIM добавится к
новому_описанию, то
размерности массива
определятся в будущем (???).
Атрибуты PRE и NAME могут быть
использованы, если надо. Если
выглядит_как уже имеет эти
атрибуты, новое_описание
унаследует их и может привести
к ошибке компилятора. Чтобы
исправить это положение, задай
принудительно PRE или NAME для
нового_описания, чтобы
перекрыть унаследованный(е)
атрибут(ы).
Пример:
Amount REAL !Описываем поле
QTDAmount LIKE(Amount) !Используем то же описание
YTDAmount LIKE(OTDAmount) !И еще раз
MonthlyAmts LIKE(Amount),DIM(12) !То же описание, но для массива
!из 12 элементов
AmtPrPerson LIKE(MonthlyAmts),DIM(10)
!То же описание, но уже для 120 элементов (12,10)
Construct GROUP,PRE(Con) !Описываем группу
Fieldl LIKE(Amount) ! con:field1 - real
Field2 STRING(10) ! con:field2 - string(10)
.
NewGroup LIKE(Construct),PRE(New)!Описываем новую группу с
! new:field1 - real
! new:field2 - string(10)
AmountFile FILE,DRIVER('Clarion'),PRE(Amt)
Record RECORD
Amount REAL !Define a field
OTDAmount LIKE(Amount) !Use same definition
. .
См. также: , , ,

LONG (четырехбайтное целое со знаком)

метка LONG(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]

Формат: знак_____значение_______
Биты: 31_____________________0
Диапазон: -2,147,483,648..2,147,483,647
initial value Числовая константа. Если опущена, то подразумевается ноль.
DIM Размерность(и) переменной как массива.
OVER Разделяет один и тот же участок памяти с другой переменной
NAME Задает внешнее имя для переменной.
EXTERNAL Указывает, что переменная описана и память под нее выделяется во внешней библиотеке. НЕ разрешено для описаний FILE, QUEUE и GROUP.

LONG описывает четырехбайтное целое со знаком в формате длинного целого Intel 8086. Старший бит - знаковый, (0 положительное, 1 отрицательное). Отрицательные значения представляются в стандартном дполнении до двух. Присвоение значения, выходящего за пределы диапазона LONG, приводит к непредсказуемым результатам
Пример:
Countl LONG !Declare four-byte signed integer
Count2 LONG,OVER(Countl) !Declare OVER the four-byte signed
! integer
Count3 LONG,DIM(4) !Declare it an array of 4 longs
Count4 LONG(5) !Declare with initial value
Count5 LONG,EXTERNAL !Declare as external
Counts LONG,NAME('SixCount') !Declare with external name
ExampleFile FILE,DRIVER('Clarion') !Declare a file
Record RECORD
Count7 LONG,NAME('Counter')!Declare with external name
. .

NAME (указать внешнее имя)


NAME([ constant

variable
]


constant Строковая константа.
variable Метка STRING-переменной,
описанной в области
описания глобальных
данных или в области
описания данных
модуля-члена.

Атрибут NAME задает
"внешнее" имя. Он
полностью независим от
атрибута EXTERNAL - между ними не
требуется никакой связи, хотя
оба этих атрибута могут быть у
одной и той же переменной.
Атрибут NAME можно
использовать в прототипах
процедур и функций, применять к
FILE, KEY, INDEX, MEMO, любому полю,
описанному в FILE или QUEUE
структурах, или к любому полю
вне структуры. Атрибут NAME имеет
различные свойства, в
зависимости от того, где он
использован.
NAME(константа) можно задать в
прототипах процедур или
функций. Константа - это
внешнее имя, используемое
компоновщиком для
идентификации процедуры или
функции из внешней библиотеки.
Атрибуты NAME(константа) или
NAME(переменная) в описании FILE
задает ДОСовскую спецификацию
полного имени файла. Если
константа или переменная не
содержит диск и путь, то
подразумеваются текущие диск и
каталог. Если опущено
расширение файла, то
подразумевается расширение,
стандартное для данного
файлового драйвера. Некоторые
файловые драйверы требуют,
чтобы KEYи, INDEXы, или MEMO-поля были
в отдельных файлах. Таким
образом, NAME можно применить к
описаниям KEY, INDEX или MEMO. Атрибут
NAME без константы или
переменной, ссылается на метку
того описательного оператора,
к которому он был применен
(включая префикс, если таковой
указан).
NAME(константа) может
применятся к любому полю,
описанному в структуре RECORD. Это
позволяет использовать имена
полей, не нарушающих
ограничений на имена,
накладываемые отдельными
файловыми драйверами.
NAME(константа) можно применять
к любому полю в структуре QUEUE.
Так достигается возможность
динамических сортировок во
время исполнения.
NAME(константа) можно также
применять к любой переменной,
описанной вне какой-либо
структуры. Это дает
возможность компоновщику по

внешнему имени
идентифицировать переменную,
описанную во внешней
библиотеке. Если переменная
имеет еще атрибут EXTERNAL, то она
описана, и память под нее
выделяется самой внешней
библиотекой. Без атрибута EXTERNAL,
такая переменная описывается,
и память под нее выделяется в
кларионовской программе, и она
является внешней по отношению
ко внешней библиотеке.
Пример:
PROGRAM
MAP
MODULE('External.Obj')
AddCount(LONG),LONG,C,NAME('_AddCount')
!C function named ' AddCount,
. .
Cust FILE,PRE(Cus),NAME(CustName) !Filename in CustName variable
CustKey KEY('Name'),NAME('c:\data\cust.idx')
!Declare key,cust.idx
Record RECORD
Name STRING(20),NAME !Default NAME to 'Cus:Name'
. !End file declaration
SortOue QUEUE,PRE(Que)
Fieldl STRING(10),NAME('FirstField') !QUEUE SORT NAME
Field2 LONG,NAME('SecondField') !QUEUE SORT NAME
.
CurrentCnt LONG,EXTERNAL,NAME('Cur') !Field declared public in
! external library as 'Cur'
TotalCnt LONG,NAME('Tot') !Field declared external
!in external library as 'Tot'
См. также: , FILE, , INDEX, QUEUE, EXTERNAL

НЕЯВНЫЕ ПЕРЕМЕННЫЕ

Неявные переменные НЕ
описываются в описаниях
данных. Они создаются
компилятором, когда он
встречает их впервые. Любая
неявная переменная,
использованная области
описания глобальных данных
(между ключевыми словами PROGRAM и
CODE) это "Глобальные
Статические Данные". Любая
неявная переменная между
ключевыми словами MEMBER и PROCEDURE
(или FUNCTION) это "Локальные
Статические Данные". Все
остальные неявные переменные -
это "Локальные Динамические
данные".
Неявные переменные обычно
используются для: индексов
массивов, флагов true/false,
промежуточных переменных в
сложных вычислениях; как
управляющие переменные циклов,
итд. Язык Clarion предлагает три
типа неявных переменных:

# Неявная LONG-переменная,
ее метка (имя) завершается
символом # (решетка, номер).
$ Знак доллара указывает
на неявную REAL-переменную,
метка котороя завершается
символом $ (доллар).
" Двойная кавычка (не
путать с двумя
апострофами!) означает
неявную 32хбайтную строку.
Имя такой переменной
заканчивается символом
" (кавычка или двойная
кавычка).

Пример:
LOOP Counter# - 1 TO 10 !Implicit LONG
ArrayField[Counter#] = Counter# * 2 !Initialize an array
.
Address"=CLIP(City) & ','&State &' '&ZIP!Implicit STRING(32)
SHOW(12,16,Address") !Used to display a temporary value
Percent$ = ROUND((Quota/Sales),.1) * 100 !Implicit REAL
SHOW(15,22,Percent$,@P%<<<.##P)
!Used to display a temporary value
См. также: .


OVER (разделяет место в памяти)

OVER(переменная)
переменная Метка переменной,
которая уже занимает память,
подлежащую разделу.
Атрибут OVER позволяет
ссылаться на один и тот же
участок памяти двумя разными
путями. Поле, описанное с
атрибутом OVER, должно быть НЕ
больше, чем переменная, поверх
которой она накладывается (хотя,
конечно, она может быть меньше).
(SPA. Для тех кому это трудно
понять сразу, как мне было в
свое время, скажу что этот
механизм аналогичен
паскалевским записям с
вариантами)
Поле в структуре GROUP НЕ может
быть описано поверх
переменной, которая находится
ВНЕ этой структуры GROUP. Также,
нельзя описать поле поверх
переменной, которая является
частью списка параметров
процедуры или функции.
Пример:
CustNote FILE,PRE(Csn) !Declare CustNote file
Notes MEMO(2000) !The memo field
Record RECORD
CustID LONG
. .
CsnMemoRow STRING(IO),DIM(200),OVER(Csn:Notes) !Csn:Notes
!можно рассматривать как одно
!целое или блоками по 10 байт
См. также:

PDECIMAL (то же, что и DECIMAL)

метка PDECIMAL(length[,places][,iinitial value])[,DIM()][,OVER()][,NAME()][,EXTERNAL]

Формат: dl5 dl4 d13 dl2 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0 s
Биты: 63________________________________________ 5_0
Диапазон: -999,999,999,999,999..999,999,999,999,999
length ТРЕБУЕМАЯ числовая константа, содержащая общее число десятичных цифр (в целой и дробной частях вместе взятых) в переменной. Максимальная длина 15.
places Числовая константа, уточняющая количество цифр в дробной части (справа от десятичной точки) в переменной. Она должна быть меньше или равна параметру length. Если опущена, то описываема переменная считается целочисленной.
initial value Числовая константа. Если опущена, то подразумевается ноль.
DIM Размерность(и) переменной как массива.
OVER Разделяет один и тот же участок памяти с другой переменной
NAME Задает внешнее имя для переменной.
EXTERNAL Указывает, что переменная описана и память под нее выделяется во внешней библиотеке. НЕ разрешено для описаний FILE, QUEUE и GROUP.

PDECIMAL описывает переменной длины десятичную переменную со знаком в формате Btrieve и IBM/EBCDIC. Каждый байт PDECIMAL содержит две десятичные цифры, по 4 бита на цифру. Самый правый байт содержит знак в своем младшем ниббле (OFh или OCh позитивный, ODh негативный и одну десятичную цифру. Таким образом, PDECIMAL-переменные всегда содержат строго "нечетное" число цифр (скажем, PDECIMAL(10) и PDECIMAL(ll) используют по 6 байт).
Присвоение числа, выходящего за диапазон PDECIMAL приводит к непредсказуемым результатам.
Пример:
Countl PDECIMAL(5,O) !Declare three-byte signed packed decimal
Count2 PDECIMAL(5),OVER(Countl) !Declare OVER the three-byte
signed packed decimal
Count3 PDECIMAL(5,O),DIM(4) !Declare it an array of 4 decimals
Count4 PDECIMAL(5,0,5) !Declare with initial value
Count5 PDECIMAL(5,O),EXTERNAL !Declare as external
Count6 PDECIMAL(5,O),NAME('SixCount') !Declare with external name
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
Count7 PDECIMAL(5,O),NAME('Counter') !Declare with
. . ! external name

PRE (префикс метки)

PRE(prefix)

prefix Допустимые
символы буквы, цифры от 0 до
9 и символ подчеркивания.
Префикс должен ничинаться
с буквы и не должен быть
зарезервированм словом.

Атрибут PRE
предусматривает префикс метки
для сложных структур данных. Он
используется для того, чтобы
различать переменные с
одинаковыми именами в разных
структурах. При обращении к
переменной исполняемымы
операторами, при присвоениях и
передаче в списках параметров,
префикс присоединяется к метке
двоеточием (Pre:Метка). PRE можно
использовать со следующими
структурами данных:

DETAIL FILE FOOTER
GROUP HEADER OPTION
QUEUE RECORD REPEAT
REPORT SCREEN

Пример:
MasterFile FILE,DRIVER('Clarion'),PRE(Mst) !Declare master
Record RECORD ! file layout
AcctNumber LONG
. .
Detail FILE,DRIVER('Clarion'),PRE(Dtl) !Declare detail
! file layout
Record RECORD
AcctNumber LONG
. .
GROUP,PRE(Mem) !Declare some memory variables
Message STRING(30)
Page LONG
Line LONG
Device STRING(30)
.
CODE
IF Dtl:AcctNumber <> Mst:AcctNumber !Is it a new account
Mem:Message - 'New Account' ! display message
DO MatchMaster ! get new record
.
См. также: Зарезервированные
слова

PSTRING (строка со встроенным байтом-счетчиком длины)


метка PSTRING( length

string constant

picture
)[,DIM()][,OVER()][,NAME()] [,EXTERNAL]


Формат: Фиксированное число
байт.
Диапазон: От 1 до 255 байт
length Числовая константа,
которая задает размер
строки в байтах, включая
место для первого по
порядку байта, в котором
хранится длина такой
строки.
string constant Начальное значение
строки.Длина PSTRING-a
устанавливается (в байтах)
по длине этой строковой
константы плюс начальный
байт-счетчик.
picture Используется для
форматирования значений,
присвоенных строке. Длина
такой строки, это
количество байт,
достаточное для хранения
форматированной строки и
начального байта длины.
DIM Размерность(и)
переменной как массива.
OVER Разделяет один и тот же
участок памяти с другой
переменной
NAME Задает внешнее имя для
переменной.
EXTERNAL Указывает, что
переменная описана и
память под нее выделяется
во внешней библиотеке. НЕ
разрешено для описаний FILE,
QUEUE и GROUP.

PSTRING описывает символьную строку с ведущим байтом длины и длиной, заданной для этой строки.. Она соответствует типу, используемому в Паскале и типу данных "LSTRING" из Btrieve Record Manager. Место в памяти под нее выделяется постоянной длины, но байт длины содержит число символов, реально хранящихся в такой переменной. Во время исполнения, PSTRING преобразуется в STRING. Тип PSTRING имеет смысл употреблять для совместимости с внешними файлами и/или процедурами.
Пример:
Name PSTRING(21) !Declare 21 byte field - 20 bytes data
OtherName PSTRING(21),OVER(Name) !Declare field over name field
Contact PSTRING(21),DIM(4) !Array 21 byte fields - 80 bytes data
Company PSTRING('Clarion Software,Inc.')!23 byte string - 22
! bytes data
Phone PSTRING(@P(###)###-####P) !Declare 14 bytes - 13 bytes
! data
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
NameField PSTRING(21),NAME('LstringField')
. . !Declare with external name

REAL (восьмибайтное вещественное со знаком)

метка REAL(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]

Формат: знак____порядок____мантисса
Биты: 63____________52__________0
Диапазон: 0,+/-2.22507385850720le-308..+/1.79769313496231e+308 (15 значащих цифр)
initial value Числовая константа. Если опущена, то подразумевается ноль.
DIM Размерность(и) переменной как массива.
OVER Разделяет один и тот же участок памяти с другой переменной
NAME Задает внешнее имя для переменной.
EXTERNAL Указывает, что переменная описана и память под нее выделяется во внешней библиотеке. НЕ разрешено для описаний FILE, QUEUE и GROUP.

REAL описывает восмибайтное вещественное число со знаком в формате длинного вещественного Intel 8087 (двойной точности. Присвоение числа, выходящего за пределы диапазона REAL приводит к непредсказуемым результатам.
Пример:
Countl REAL !Declare eight-byte signed floating point
Count2 REAL,OVER(Countl) !Declare OVER the eight-byte signed floating point
Count3 REAL,DIM(4) !Declare it an array of 4 rlelals
Count4 REAL(5) !Declare with initial value
Count5 REAL,EXTERNAL !Declare as external
Count6 REAL,NAME('SixCount') !Declare with external name
ExampleFile FILE,DRIVER('Clarion') !Declare a file
Record RECORD
Count5 REAL,NAME('Counter')!Declare with external name
. .

Шаблоны научной нотации

@Em.n[B]

@E Все шаблоны научной нотации начинаются с @E.
m Общее число символов в формате, предлагаемом данным шаблоном.
n Число цифр
после десятичной точки.
B Если число равно нулю, то вывести пустую строку

Шаблоны научной нотации форматируют очень большие или же очень маленькие числа. Вывод в виде десятичного числа в степени десяти.
Пример:

Шаблон Значение Результат
@E9.0 1,967,865 .20e+007
@E12.1 1,967,865 1.9679e+006
@E12.1B 0
@E12.1 1,967,865 1.9679 e+006
@E12.1 .000000032 3.2000e-008

Шаблоны даты
@Dn[s][B]

@D Все шаблоны даты начинаются с @D.
n Номер шаблоны даты. Допустимые номера от 1 до 16.
s Разделитель. Слэш (/) ставится между днем, месяцем и годом в большинстве шаблонов даты. Можно использовать альтернативные разделители, как то:

. Порождает точки

` (слабое ударение)порождает запятые

- Порождает тире

_
(подчеркивание) порождает пробелы
B Вывести пустую строку, если число равно нулю.

Даты можно хранить в числовых переменных (обычно LONG), DATE-полях (для совместимости с Btrieve), или в STRINGах описанных в виде дат. Дата, хранящаяся в числовой переменной называется Стандартной Кларионовской датой. Ее значение представляет собой количество дней, прошедших с 28 декабря 1800 года. Шаблон даты преобразует это число в один из форматов даты.
Для ввода данных нельзя использовать шаблоны @D3, @D4, @D7 и @D8 поскольку в них требуется вводить не только цифры, но и буквы.
Пример:

Шаблон Формат Результат
@Dl mm/dd/yy 10/31/59
@D2 mm/dd/yyyy 10/31/1959
@D3 mmm dd, yyyy OCT 31,1959
@D4 mmmmmmmmm dd, yyyy October 31, 1959
@D5 dd/mm/yy 31/10/59
@D6 dd/mm/yyyy 31/10/1959
@D7 dd mmm yy 31 OCT 59
@D8 dd mmm yyyy 31 OCT 1959
@D9 yy/mm/dd 59/10/31
@D10 yyyy/mm/dd 1959/10/31
@D11 yymmdd 591031
@D12 yyyymmdd 19591031
@D13 mm/yy 10/59
@D14 mm/yyyy 10/1959
@D15 yy/mm 59/10
@D16 yyyy/mm 1959/10


Альтернативные разделители
@Dl. mm.dd.yy Разделитель точка
@D2- mm-dd-yyyy Разделитель
тире
@D5_ dd mm yy Подчеркивание
порождает разделитель
пробел
@D6` dd,mm,yyyy Слабое ударение порождает разделитель запятую
<
Шаблоны времени
@Tn[s][B]

@T Все шаблоны времени начинаются с @T.
n Номер формата времени. Допустимые номера форматов от 1 до 6.
s Разделитель. Двоеточие (:) ставится по умолчанию между часами, минутами и секундами в большинстве форматов времени. Можно использовать альтернативные разделители, как то:

. Порождает
точки

' (слабое ударение) порождает запятые

- Порождает тире

_
(подчеркивание) порождает пробелы
B Если значение равно нулю, то вывести пустую строку.

Время можно хранить в числовой переменной (обычно LONG), в TIME- полях (для совместимости сBtrieve), или в STRINGах, описанных в формате времени. Время, хранящееся в числовой переменной называется стандартным кларионовским временем. Оно представляет из себя количество сотых долей секунды, прошедших с полуночи. Шаблон времени переводит это число в один из 6 форматов времени.
Нельзя
использовать для ввода шаблоны
(@T3 и @T6), в которых требуется
вводить не только цифры, но и
буквы.
Пример:

Шаблон Формат Результат
@T1 hh:mm 17:30
@T2 hhmm 1730
@T3 hh:mmXM 5:30PM
@T4 hh:mm:ss 17:30:00
@T5 hhmmss 173000
@T6 hh:mm:ssXM 5:30:00PM


Альтернативные
разделители
@T1. hh.mm Разделитель
точка
@T1- hh-mm Разделитель
тире
@T3_ hh mmXM Подчеркивание
порождает пробелы
@T4' hh,mm,ss Слабое
ударение порождает
запятые

Шаблоны
"по образцу"
@p[<][#][x]P[B]

@P Все
шаблоны "по образцу"
начинаются с разделителя @P
и заканчиваются
разделителем P. Регистр
обоих разделетелей должен
быть один и тот же.
< Целочисленная
позиция. Если в этой
позиции ноль, то вывести
пробел.
# Целочисленная
позиция. В этой позиции
вывести цифру, независимо
от ее значения.
x Необязательный
символ для вывода. Эти
символы будут
присутствовать в выводной
строке.
p Все
шаблоны "по образцу"
должны заканчиваться на P.
Если разделитель @p введен
на нижнем регистре, то и
конечный разделитель P
тоже должен быть в нижнем
регистре.
B Если ВСЕ
число равно нулю, то
вывести пустую строку.
<


Шаблоны "по
образцу" содержат
необязательные целочисленные
пози- ции и необязательные
символы редактирования. Любой
символ кроме < или # считается
символом редактирования,
который появится в
форматированной
строке-результате. Разделители
@P и P чувствительны к регистру,
на котором они введены. Это
сделано для того, чтобы, если
скажем, надо ввести символ
"Р", то можно использовать
разделители "р" и
наоборот.
Пример:

Шаблон Значение Результат
@P###-##-####P 215846377 215-84-6377
@P<#/##/##P 103159 10/31/59
@P(###)###-####P 3057854555 (305)785-4555
@P###/###-####P 7854555 000/785-4555
@p<#:##PMp 530 5:30PM
@P<#'<#"P 506 5' 6"
@P<#Ib. <#oz.P 902 91b. 2oz.
@P4##A-#P 112 411A-2

Key-in
Template Pictures
@K[@][#][<][x][\][?][^][_][Ѓ]K[B]

@K Все key-in
template шаблоны начинаются
разделителем @K и
завершаюися разделителем
K. Регистр обоих "К"
должен быть одним и тем же.
@ Разрешены
только буквы на верхнем и
нижнем регистрах.
# Разрешены
целые числа от 0 до 9.
< У целых
чисел выводить лидирующие
нули пробелами.
x Представляет
необязательные постоянные
символы для показа (любые
символы, пригодные для
вывода на экран). Эти
символы попадают без
изменений в
результирующую строку.
\ Следующий
за \ символ выводить на
экран как печатаемый. Так
можно включить в
результирующую строку
любые символы
форматирования
(@,#,<,\,?,^,_,Ѓ) как обычные
печатаемые символы.
? В этой
позиции может быть любой
символ.
^ В этой
позиции разрешены только
буквы на верхнем регистре.
В этой позиции разрешены
только буквы на нижнем
регистре
| Ограничитель.
Только данные введенные до
| и печатаемые символы,
введенные до | будут
помещены в результирующую
строку.
K Все key-in
template шаблоны завершаются
символом "K". Если
разделитель @k был введен
на нижнем регистре, то и
завершающий k должен быть
введен на нижнем регистре.
B Если ВСЕ
число рано нулю, то вывести
пустую строку.
<


Key-in шаблоны
могут содержать целочисленные
позиции ( # < ), символьные
позиции ( @ ^ _ ), места для любых
символов ( ? ), и печатаемые
символы. Любой символ, кроме
символов форматирования,
рассматривается как
печатаемый, который попадает в
форматированную
строку-результат. Разделители
@K иd K чувствительны к регистру
по той же причине, что и @P и P в
шаблонах "по образцу".
Key-in Шаблоны
специфичны для полей типа STRING,
PSTRING, и CSTRING для возможности
произвольного редактирования
и проверки допустимости поля.
Использование key-in шаблонов,
содержащих любые алфавитные
индикаторы ( @ ^ _ ) с полями для
ввода чисел дает
непредсказуемые результаты.
Поскольку
использование режима вставки
для key-in шаблонов, может также
привести к непредсказуемым
результатам, то key-in шаблоны
всегда принимают данные в
режиме надпечатки, даже если
есть атрибут INS.
Пример:

Шаблон Введено
значение
Строка-результат
@K###-##-###K 215846377 215-84-6377
@K####Ѓ-####K 33064 33064
@K####Ѓ-####K 330643597 33064-3597
@K<# ^^^ ##K 10AUG59 10 AUG 59
@K(###)@@@-##\@##K 305abc4555 (305)abc-45@55
@K###/?##-####K 7854555 000/785-4555
@k<#:##^Mk 530P 5:30PM
@K<#'
<#"K
506 5' 6"
@K4#_#A-#K 1g12 41glA-2

Строковые
шаблоны
@Slength

@S Все
строковые шаблоны
начинаются с @S.
length Определяет
количество символов в
шаблоне формата.

Строковый
шаблон описывает
НЕформатированную строку
заданной длины.
Пример:
Name STRING(@S20) !20-символьное поле-строка

SHORT (двухбайтное целое со знаком)

метка SHORT(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]

Формат: знак значение
Биты: 15_________0
Диапазон: -32,768..32,767
initial value Числовая константа. Если опущена, то подразумевается ноль.
DIM Размерность(и) переменной как массива.
OVER Разделяет место в памяти с другой переменной.
NAME Задает внешнее имя поля.
EXTERNAL Указывает на то, что переменная описана и память под нее выделена во внешней библиотеке. НЕ разрешено с описаниями FILE, QUEUE или GROUP.

SHORT описывает двухбайтное целое со знаком в формате целого слова Intel 8086. Старший бит в этой конфигурации - знаковый бит (0 = плюс, 1 = минус. Отрицательные значения представляются в стандартном дополнении до двух. Присвоение значения, выходящего за пределы диапазона SHORT дает к непредсказуемые результатам.
Пример:
Count2 SHORT,OVER(Countl) !Declare OVER the two-byte signed
! integer
Count3 SHORT,DIM(4) !Declare it an array of 4 shorts
Count4 SHORT(5) !Declare with initial value
Count5 SHORT,EXTERNAL !Declare as external
Count6 SHORT,NAME('SixCount') !Declare with external name
Examp]eFile FILE,DRIVER('Clarion') !Declare a file
Record RECORD
Count7 SHORT,NAME('Counter') !Declare with external
. . ! name

SIZE (размер памяти в байтах)


SIZE( label

constant

picture
)


метка Метка ранее описанной
переменной.
constant Числовая или символьная
константа.
picture Элемент шаблона.

SIZE заставляет компилятор
сообщить количество памяти (в
байтах) выделенной для
хранения параметра.
Пример:
SavRec STRING(1),DIM(SIZE(Cus:Record)
!Строк столько же, каков размер записи
StringVar STRING(SIZE('Clarion Software, Inc.'))
!Строка должна быть достаточной для этой
!константы длины
LOOP I# = 1 TO SIZE(ParseString)
!Цикл по все символам строки
PicLen = SIZE(@P(###)###-####P) !Сохраняем размер шаблона


SREAL (четырехбайтное вещественное со знаком)

метка SREAL(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]

Формат: знак____порядок____мантисса
Биты: 31____________23__________0
Диапазон: 0, +/- 1.17549435e-38 .. 3.40282347e+38 (6 значащих цифр)
initial value Числовая константа. Если опущена, то подразумевается ноль.
DIM Размерность(и) переменной как массива.
OVER Разделяет один и тот же участок памяти с другой переменной
NAME Задает внешнее имя для переменной.
EXTERNAL Указывает, что переменная описана и память под нее выделяется во внешней библиотеке. НЕ разрешено для описаний FILE, QUEUE и GROUP.

SREAL описывает четырехбайтную числовую переменную со знаком с плавающей запятой в формате короткого целого Intel 8087 (одинарной точности). Присвоение значения, выходящего за пределы диапазона SREAL приводит к непредсказуемым результатам.
Пример:
Countl SREAL !Declare four-byte signed floating point
Count2 SREAL,OVER(Countl) !Declare OVER the four-byte signed floating point
Count3 SREAL,DIM(4) !Declare it an array of 4 floats
Count4 SREAL(5) !Declare with initial value
Count5 SREAL,EXTERNAL !Declare as external
Count6 SREAL,NAME('SixCount') !Declare with external name
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
Count7 SREAL,NAME('Counter') !Declare with external name
. .

STRING (строка фиксированной длины)


метка STRING( length

string constant

picture
)[,DIM()][,OVER()][,NAME()] [,EXTERNAL]


Формат: Фиксированное число
байт.
Диапазон: От 1 до 65,535 байт
length Числовая константа, которая задает размер строки в байтах. При использовании этого параметра, строка инициализируется пробелами.
string constant Начальное значение строки. Длина STRING-a устанавливается (в байтах) по длине этой строковой константы.
picture Используется для форматирования значений, присвоенных строке. Длина такой строки, это количество байт, достаточное для хранения форматированной строки. Строка инициализируется пробелами.
DIM Размерность(и)
переменной как массива.
OVER Разделяет один и тот же
участок памяти с другой
переменной
NAME Задает внешнее имя для
переменной.
EXTERNAL Указывает, что переменная описана и память под нее выделяется во внешней библиотеке. НЕ разрешено для описаний FILE, QUEUE и GROUP.

STRING описывает символьную строку фиксированной длины.
Пример:
Name STRING(20) !Declare 20 byte name field
NameArray STRING(l),DIM(20),OVER(Name) !Declare array over name
!field
Company STRING('Clarion Software, Inc.,)!The software
! company - 22 bytes
Phone STRING(@P(###)###-####P) !Phone number field - 13
! bytes
ExampleFile FILE,DRIVER('Clarion') !Declare a file
Record RECORD
NameField STRING(20),NAME('Name') !Declare with external
. . ! name

TIME (четырехбайтное время)

метка TIME[,DIM()][,OVER()][,NAME()][,EXTERNAL]

Формат: чч мм сс ст
Диапазон: часы: 0..23

минуты: 0..59

секунда: 0..59

секунды/100: 0..99
DIM Размерность(и)
переменной как массива.
OVER Разделяет один и тот же
участок памяти с другой
переменной
NAME Задает внешнее имя для
переменной.
EXTERNAL Указывает, что
переменная описана и
память под нее выделяется
во внешней библиотеке. НЕ
разрешено для описаний FILE,
QUEUE и GROUP.

TIME описывает четырехбайтную переменную типа времени. Этот формат соответствует типу поля "TIME" в Btrieve Record Manager. TIME используемые в числовых выражениях, преобразовываются в число сотых долей секунды, прошедших с полуночи (стандартное кларионовское время, обычно хранится как LONG). Тип DATE имеет смысл употреблять для совместимости с внешними файлами и/или процедурами.
Пример:
ChkoutTime TIME !Declare checkout time field
OtherTime TIME,OVER(CheckoutTime) !Declare field over time field
ContactTime TIME,DIM(4) !Array of 4 time fields
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
TimeRecd TIME,NAME('TimeField') !Declare with external name
. .
См. также: Standard Time


ULONG (четырехбайтное целое без знака)

метка ULONG(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]

Формат: _________значение_______
Биты: 31_____________________0
Диапазон: 0..4,294,967,295
initial value Числовая константа. Если опущена, то подразумевается ноль.
DIM Размерность(и) переменной как массива.
OVER Разделяет один и тот же участок памяти с другой переменной
NAME Задает внешнее имя для переменной.
EXTERNAL Указывает, что переменная описана и память под нее выделяется во внешней библиотеке. НЕ разрешено для описаний FILE, QUEUE и GROUP.

ULONG описывает четырехбайтное целое без знака в формате длинного целого Intel 8086. В этой конфигурации НЕТ знакового бита. Присвоение значения, выходящего за пределы диапазона ULONG дает непредсказуемые результаты.
Пример:
Countl ULONG !Declare four-byte unsigned integer
Count2 ULONG,OVER(Countl) !Declare OVER four-byte unsigned integer
Count3 ULONG,DIM(4) !Declare it an array of 4 unsigned longs
Count4 ULONG(5) !Declare with initial value
Count5 ULONG,EXTERNAL !Declare as external
Counts ULONG,NAME('SixCount') !Declare with external name
Examp]eFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
Count7 ULONG,NAME('Counter') !Declare with external
. . ! name


USHORT (two-byte unsigned integer)

метка USHORT(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]

Формат: _____значение_______
Биты: 15__________________0
Диапазон: 0..65,535
initial value Числовая константа. Если опущена, то подразумевается ноль.
DIM Размерность(и) переменной как массива.
OVER Разделяет один и тот же участок памяти с другой переменной
NAME Задает внешнее имя для переменной.
EXTERNAL Указывает, что переменная описана и память под нее выделяется во внешней библиотеке. НЕ разрешено для описаний FILE, QUEUE и GROUP.

USHORT описывает двухбайтное целое без знака в формате слова Intel 8086. В этой конфигурации НЕТ знакового бита. Присвоение значения, выходящего за пределы диапазона USHORT приводит к не предсказуемым результатам.
Пример:
Countl USHORT !Declare two-byte unsigned integer
Count2 USHORT,OVER(Countl) !Declare OVER the two-byte unsi gned
! integer
Counts USHORT.DIM(4) !Declare it an array of 4 unsigned
! shorts
Count4 USHORT(5) !Declare with initial value
Count5 USHORT,EXTERNAL !Declare as external
Count6 USHORT,NAME('SixCount') !Declare with external name
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
Count7 USHORT,NAME('Counter') !Declare with external
. . ! name

Документация по 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 NOT Истина, если 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-коды

!Шестнадцатеричный ASCII-код
'A<< B'
!Вложенная левая угловая
скобка, A '*{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). Выражения могут вовсе не содержать операторов; они могут быть одиночной переменной, константой или вызовом функции.

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

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
См. также:

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

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('ЃЃ')
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 !Вызываем проц. соответствия
См. также:

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

ALIAS (установить альтернативный код клавиши)

ALIAS([код,новый-код])

код Числовой код или EQUATE-метка кода клавиши.
новый-код Числовой код или EQUATE-метка кода клавиши. Можно использовать неприсвоенные ранее коды.

ALIAS изменяет генерируемый при нажатии клавиши код. НОВЫЙ-КОД не находится в таблице кодов клавиш. Коды от 700 до 999 не присвоены, и могут быть использованы как НОВЫЕ-КОДЫ. Практический эффект от этого возможность запретить реагировать на КОД, если ваша программа не проверяет НОВЫЙ-КОД. Если оба параметра опущены, то ALIAS отменяет все переназначения клавиш.
Пример:
ALIAS(F3Key,F1Key) !Help теперь по F3
ALIAS(F1Key,F3Key) ! а нажатие F1 рассматрива-
! ется как нажатие F3
ALIAS(256,999) !Обзовем по-другому клавишу
! ESC
ALIAS !Отменим все переназначения
См. также: Equate-коды клавиш

ASK (получить один символ)

ASK
ASK читает код клавиши из буфера клавиатуры. Выполнение программы приостанавливается во время ожидания нажатия на клавишу. Если в буфере уже есть необработанные нажатия клавиш, ASK читает код без ожидания.
Пример:
SHOW(25,1,'Жми кнопочку, и продолжим') !Показать сообщение и
ASK !ждать нажатия клавиши
LOOP WHILE KEYBOARD() !Опустошаем буфер клавиатуры
ASK ! не обрабатывая нажатия клавиш
.
См. также:

BACKCOLOR (возвращает цвет фона)

BACKCOLOR(строка,столбец)

строка Числовое значение или выражение, которое задает строку на экране.
столбец Числовое значение или выражение, которое задает столбец на экране.

BACKCOLOR возвращает цвет фона для указанного знакоместа. Возвращаемое значение лежит в диапазоне от 0 до 15 включительно, что соответствует шестнадцати цветам переднего плана. Если параметры выходят за допустимые пределы, то возвращается ноль.
В байте видеоатрибута фоновый цвет хранится в старшем ниббле (4 бита). То есть, если значение, полученное от BackColor использовано для порождения кода цветового стиля, то сначала его надо умножить на шестнадцать, и затем прибавить к нему значение цвета для переднего плана.
Возвращаемый тип данных: BYTE
Пример:
SETCOLOR(BACKCOLOR(1,1)+(FORECOLOR(1,1)*16)!Поменять цвета
!местами
SaveBack = BACKCOLOR(1,1) !Сохранить цвет фона
См. также: , , ,

COLOR (возвращает код цветового стиля)

COLOR(строка,столбец)
Функция COLOR возвращает активный для знакоместа с координатами (СТРОКА,СТОЛБЕЦ) код цветового стиля (комбинацию цветов фона и переднего плана).
Возвращаемый тип данных: BYTE
Пример:
SaveColor = COLOR(1,1) !Сохранить раскраску
См. также: , , ,

ENTRY (принять ввод с клавиатуры)

ENTRY(строка,столбец,шаблон)

строка Числовое значение или выражение, которое задает строку, на которой производится ввод.
столбец Числовое значение или выражение, которое задает столбец, на котором производится ввод
шаблон Шаблон формата или метка строки, описанной с шаблоном формата. Параметр ШАБЛОН определяет длину поля вормат ввода с клавиатуры в переменную. Переменная показывается и редактируется в режиме реверсного отображения (цвета фона и текста меняются местами).

ENTRY читает нажатия клавиш с клавиатуры. Программа ждет, пока редактирование поля не завершится клавишей завершения поля (обычно ENTER) или клавишей взведенной (через ALERT). ENTRY устанавливает реверсные цвета для СТРОКИ и СТОЛБЦА и включает курсор на время редактирования поля.
Возвращаемый тип данных: STRING
Пример:
Address = ENTRY(10,12,@S20) !Ввести адрес
City = ENTRY(11,12,@S12) !Ввести город
См. также: ALERT

FORECOLOR (возвращает цвет переднего плана)

FORECOLOR(строка,столбец)
FORECOLOR возвращает цвет текста для знакоместа с координатами (СТРОКА,СТОЛБЕЦ). Возвращаемое значение лежит в диапазоне от 0 до 15 включительно. Если параметры выходят за допустимые пределы, то возвращается ноль.
В байте видеоатрибута цвет переднего плана хранится в младшем ниббле, то есть, для получения кода цветового стиля надо результат от FORECOLOR прибавить к результату от BACKCOLOR умноженному на шестнадцать.
Возвращаемый тип данных: BYTE
Пример:
SETCOLOR(BACKCOLOR(1,1)+(FORECOLOR(1,1)*16))!Поменять цвета
!местами
SaveFore = FORECOLOR(1,1) !Сохранить цвет текста
См. также: , , ,

ДОСТУП К ЭКРАНУ И КЛАВИАТУРЕ

  • Видеопроцедуры

  • (очистить прямоугольник на экране)
  • (видеоатрибуты)
  • (закрасить прямоугольник на экране)
  • (прокрутить прямоугольную область экрана)
  • (разрешить мигание)
  • (установить видеоатрибуты)
  • (включить курсор)
  • (установить графический режим)
  • (позиционировать курсор мышки)
  • (запретить мигание)
  • (установить размер экрана в текстовом режиме)
  • (показать на экране)
  • (вывести строку на экран)

  • Видеофункции
  • (возвращает цвет фона)
  • (возвращает код цветового стиля)
  • (возвращает цвет текста)
  • (возвращает текущий видеорежим)
  • (считать символ(ы) с экрана)
  • (возвращает код цветового стиля)
  • (X-координата мышки)
  • (Y-координата мышки)

  • Процедуры клавиатуры

  • (установить альтернативный код клавиши)
  • (получить один символ)
  • (поместить символ в буфер клавиатуры)
  • (задать код клавиши)

  • Функции клавиатуры

  • (возвращает введенное с клавиатуры)
  • (возвращает ожидающее нажатие на клавишу)
  • (возвращает код клавиши завершения поля)

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

    GRAPHIC(n)

    n Целочисленная константа, переменная или выражение.

    Функция GRAPHIC возвращает байт, содержащий текущий внутренний видеорежим. В зависимости от режима, возвращается следующее:
    Dec. Hex. Режим
    --- ---- ----
    90 5Ah Текстовый
    121 79h EGA
    89 59h VGA
    87 57h SVGA
    GRAPHIC(0) возвращает тип адаптера (EGA, VGA, SVGA) если текущий экран открыт не в графическом режиме. GRAPHIC(1) возвращает одно из приведенных выше значений для графических режимов или 5Ah для текстового.
    GRAPHIC(1) проверяет, не находится ли экран в графическом режиме и, если так, то какой адаптер используется. GRAPHIC(0) обычно используется для определения типа адаптера дисплея перед открытием экрана в графическом режиме.
    Возвращаемый тип данных: Byte
    Пример:
    EGA EQUATE(121)
    VGA EQUATE(89)
    SVGA EQUATE(87)
    GraphScreen SCREEN(25,80),GRAPHIC
    .
    CODE
    X# = GRAPHIC(0)
    IF X# = EGA OR X# = VGA OR X# = SVGA
    OPEN(GraphScreen)
    CASE GRAPHIC(1)
    OF EGA
    OROF VGA
    SHOWIMAGE(1,1,25,80,'EGALOGO.PCX',1)
    OF SVGA
    SHOWIMAGE(1,1,25,80,'SVGALOGO.PCX',1)
    . .
    См. также:

    KEYBOARD (возвращает ожидающее нажатие на клавишу)

    KEYBOARD()
    Функция KEYBOARD возвращает первый код из хранящихся в буфере клавиатуры нажатий на клавиши. Используется для определения, есть ли нажатия, которые надо обрабатывать операторами ASK или ACCEPT.
    Возвращаемый тип данных: LONG
    Пример:
    LOOP UNTIL KEYBOARD() !Ждем любую клавишу
    ASK
    IF KEYCODE() = EscKey THEN BREAK. !Если ESC,то прервать цикл
    .
    См. также: , ACCEPT, Equate-коды клавиш

    KEYCODE (возвращает код клавиши завершения поля)

    KEYCODE()
    Функция KEYCODE возвращает код клавиши, которой завершилось редактирование поля. Эта функция работает только для результатов функции ENTRY и операторов ASK, SETKEYCODE или ACCEPT.
    Возвращаемый тип данных: LONG
    Пример:
    LOOP !Loop on the display
    ASK ! wait for a keystroke
    CASE KEYCODE() !Process the keystroke
    OF UpKey ! up arrow
    SCROLL(,,,,1) ! scroll up one row
    DO GetRecordUp ! and get a record
    OF DownKey ! down arrow
    SCROLL(,,,,-1) ! scroll down one row
    DO GetRecordDn ! and get a record
    OF EscKey ! esc key
    BREAK ! break the loop
    . . !End case, end loop
    См. также: , ACCEPT, Equate-метки кодов
    клавиш


    Коды цветовых стилей (видео атрибуты)

    Каждое знакоместо в видеопамяти состоит из двух байт; один данные (символ) и второй - видеоатрибуты. Байт видеоатрибутов содержит трехбитный цвет фона, бит мигания/яркости и четырехбитный цвет переднего плана (текста). Эти биты скомпонованы в одно байтный код цветового стиля с возможными значениями 0..255, который задает комбинацию цветов фона/текста. Бит мигания может служить битом яркости фона при помощи процедуры SetNoBlink. При запрещенном мигании, для фона можно использовать те же 16 цветов, что и для текста. Если же мигание разрешено, то для фона можно использовать только 8 цветов, а остальные 8 будут приводить к миганию текста. Код цветового стиля получается сложением значений фона и текста. В нижеследующей таблице приведены значения, используемые для создания кодов цветовых стилей.
    Монохром
    Передний план Фон
    Dec Hex Цвет Dec Hex Цвет
    --- --- ---- --- --- ----
    0 0h Черный 0 0h Черный
    1 1h Белый Подчеркн. 16 10h Черный
    2 2h Белый 32 20h Черный
    3 3h Белый 48 30h Черный
    4 4h Белый 64 40h Черный
    5 5h Белый 80 50h Черный
    6 6h Белый 96 60h Черный
    7 7h Белый 112 70h Белый
    8 8h Серый
    9 9h Ярко-Белый Подчеркн. Добавь 128 (80h) к цвету
    10 0Ah Ярко-Белый фона, чтобы получить ми-
    11 0Bh Ярко-Белый гающий текст.
    12 0Ch Ярко-Белый
    13 0Dh Ярко-Белый
    14 0Eh Ярко-Белый
    15 0Fh Ярко-Белый
    Цветной
    Передний план
    Dec Hex Цвет
    --- --- ------
    0 Oh Черный
    1 lh голубой
    2 2h зеленый
    3 3h Салатный
    4 4h красный
    5 5h фиолетовый
    6 6h коричневый
    7 7h Белый
    8 8h Серый
    9 9h Светло-голубой
    10 OAh Светло-зеленый
    11 OBh Светло-Салатный
    12 OCli Светло-красный
    13 ODh Светло-фиолетовый
    14 OEh Желтый
    15 OFh Ярко-Белый
    Фон
    Dec Hex Цвет (без мигания) Цвет (с миганием)
    ---- --- ---------------- ------------------
    0 0h Черный Черный
    16 10h голубой голубой
    32 20h зеленый зеленый
    48 30h Салатный Салатный
    64 40h красный красный
    80 50h фиолетовый фиолетовый
    96 60h коричневый коричневый
    112 70h Белый Белый
    128 80h Серый Черный
    144 90h Светло-голубой голубой
    160 0A0h Светло-зеленый зеленый
    176 0B0h Светло-Салатный Салатный
    192 0C0h Светло-красный красный
    208 0D0h Светло-фиолетовый фиолетовый
    224 0E0h Желтый коричневый
    240 0F0h Ярко-Белый Белый

    LOOK (считать символ(ы) с экрана)

    LOOK(строка,столбец,шаблон)

    строка Числовое значение или выражение, которое задает Y-соординату для чтения. По умолчанию - последняя строка, которой было обращение.
    столбец Числовое значение или выражение, которое задает X-координату первого символа, который надо прочитать. По умолчанию - последний столбец, к которому было обращение.
    шаблон Шаблон формата или метка строки, описанной с шаблоном формата. Шаблон используется для деформатирования прочитанного с экрана значения в переменную. Длина шаблона определяет количество столбцов, которые будут прочитаны с экрана.

    Функция LOOK считывает ASCII-коды символов с экрана, начиная со знакоместа, с координатами (СТРОКА,СТОЛБЕЦ). Если какие-то параметры опущены, то чтобы это отметить, требуются запятые. LOOK работает одинаково как в текстовых, так и в графических режимах. (SPA - интересно, а для русских букв в графике работает?)
    Возвращаемый тип данных: STRING
    Пример:
    PageNumber = LOOK(1,75,@N2) !Получить номер страницы
    Cus:AccountNumber = LOOK(,,@NO5) !Считать из последней выве
    ! денной позиции и помес-
    ! тить в номер лиц. счета
    LastName = LOOK(5,20,@S20) !Считать имя


    MAKECOLOR (возвращает код цветового стиля)

    MAKECOLOR(текст,фон)

    текст Целая константа, переменная или выражение в диапазоне 0..15, представляющая собой цвет переднего плана (или текста).
    фон Целая константа, переменная или выражение в диапазоне 0..15, представляющая собой цвет заднего плана (или фона).

    MAKECOLOR возвращает код цветового стиля для заданной комбинации цветов текста/фона.
    Возвращаемый тип данных: BYTE
    Пример:
    MAKECOLOR(7,0) returns 7 White on Black
    MAKECOLOR(7,1) returns 23 White on Blue
    ColorStyle = MAKECOLOR(7,1) !Set ColorStyle variable to 23
    SETCOLOR(ColorStyle) ! and use it to set the color
    См. также: , , , ,

    MOUSECOL (X-координата мышки)

    MOUSECOL()
    MOUSECOL возвращает баутовое значение, соответствующее номеру
    столбца, в котором находится курсор мышки на виртуальном экране.
    Возвращаемый тип данных: BYTE
    Пример:
    SaveMouseCol = MOUSECOL() !Save mouse column position

    MOUSEROW (Y-координата мышки)

    MOUSEROW()
    MOUSEROW возвращает баутовое значение, соответствующее номеру строки, в которой находится курсор мышки на виртуальном экране.
    Возвращаемый тип данных: BYTE
    Пример:
    SaveMouseRow = MOUSEROW() !Save mouse row position

    PRESS (поместить код в буфер)

    PRESS( код )
    строка

    код Числовая константа или EQUATE-метка кода клавиши.
    string Строковая константа, переменная или выражение.

    PRESS имитирует нажатия на клавиши во внутреннем буфере клавиатуры Клариона (а не буфере DOS). PRESS(КОД) помещает в буфер одно нажатие. PRESS(СТРОКА) помещает в буфер строку целиком. Строка заполняет буфер (статическую очередь), размер которого ограничен лишь доступной основной памятью. На каждое нажатие в строке отводится 32 байта, т.е теоретический максимум равен примерно 2500 символов в большинстве "нормальных" приложений.
    Пример:
    IF Action = 'Add'!On the way into a memo field on an add record
    Cus:MemoField = FORMAT(TODAY(),@Dl) &' '& FORMAT(CLOCK(),@T4)
    !Preload first line of memo with date and time
    PRESS(EnterKey)! and position user on second line
    .

    SCROLL (прокрутить прямоугольную область экрана)

    SCROLL[строка][,столбец][,строк][,столбцов][,счетчик]

    строка Числовое значение или выражение, которое задает начальную (верхнюю) строку. По умолчанию - 1.
    столбец Числовое значение или выражение, которое задает начальный (левый) столбец прямоугольника. По умолчанию 1.
    строк Числовое значение или выражение, которое задает число строк в прямоугольнике. По умолчанию - вся высота экрана (структуры SCREEN)
    столбцов Числовое значение или выражение, которое задает число столбцов. По умолчанию вся ширина экрана (структуры SCREEN).
    счетчик Позитивное или негативное значение или выражение, которое задает на сколько строк прокрутить. Если СЧЕТЧИК положителен, то прокрутка вверх, если отрицательный, то вниз. По умолчанию СЧЕТЧИК=+1.

    SCROLL перемещает символы в прямоугольной области экрана вверх или вниз. По мере сдвига символов, СЧЕТЧИК строк удаляется сверху (снизу) прямоугольника, и СЧЕТЧИК пустых строк создается внизу (вверху). Параметры СТРОКА и СТОЛБЕЦ задают координаты верхнего левого угла прямоугольника относительно верхнего левого угла физического экрана; они НЕ ссылаются на верхний левый угол структуры SCREEN.
    SCROLL НЕ изменяет активные видеоатрибуты в прямоугольнике. Ранее активные атрибуты оператора PAINT в SCREEN-структуре или оператора SETCOLOR могут повлиять на цвета в прямоугольнике. Хотя символы сдвигаются, цвета раскраска прямоугольника НЕ меняется.
    Пример:
    SCROLL(4,10,16,60,-1) !Прокрутка данных вниз
    LOOP 5 TIMES !Повторять 5 раз
    SCROLL ! прокрутить весь экран
    . !Конец цикла
    См. также: ,

    SETBLINK (разрешить мигание)

    SETBLINK
    SETBLINK разрешает мигание. Если оно разрешено, то для фона можно использовать только 8 цветов. Это нормальный режим работы, до тех пор, пока мигание не запрещено процедурой SETNOBLINK.
    Пример:
    SETNOBLINK !Выключить мигание
    SHOW(1,15,CENTER('Ты ошибся, друже!',30))
    SETCOLOR(0EBh) ! цвет - светло салатный на желтом
    PAINT(1,15,1,30) ! закрасим область сообщения
    BEEP(0,200) !Ждем 2 секунды
    SETBLINK ! и делаем мигающий св.салатн. на кори
    ! чневом
    См. также: , ,

    SETCOLOR (установить видеоатрибуты)

    SETCOLOR(цвет)

    цвет Числовое значение или выражение, которое задает код цветового стиля. Допустимые значения ЦВЕТа - 0..255.

    SETCOLOR меняет байт выидеоатрибута для каждого символа, записываемого в видеопамять после него. ЦВЕТ точный код цветового стиля (это НЕ ссылка на внутренний массив, используемый в структуре SCREEN параметром COLOR).
    Если SETCOLOR использован без параметров, то символы, выводимые на экран после такого SETCOLOR НЕ будут изменять цвет знакомест, куда они выводятся.
    Пример:
    SETCOLOR(0) !Черный на черном
    SETCOLOR(47h) !Белый на красном
    SETCOLOR !Оставить атрибуты без изм.
    См. также:

    SETCURSOR (включить курсор)

    SETCURSOR([строка,столбец])

    строка Числовое значение или выражение, задающее строку на экране.
    столбец Числовое значение или выражение, задающее столбец на экране.

    SETCURSOR показывает курсор в позиции заданной СТОЛБЦОМ и СТРОКОЙ. Используется для позиционированного вывода на устройство "CON". SETCURSOR указывает первую строку и столбец для вывода оператором TYPE, или оператором PRINT, у которого устройством для вывода отчета является "CON." Если параметры не заданы, то SETCURSOR гасит курсор.
    Пример:
    SETCURSOR(2,5) !Turn on the cursor at row 2 column 5
    SETCURSOR !Turn off the cursor
    См. также:

    SETGRAPHIC (установить графический режим)

    SETGRAPHIC(режим)

    режим Целая константа или EQUATE, задающая графический видеорежим (EGA, VGA, SVGA).

    SETGRAPHIC задает графический режим для SCREEN-структур с атрибутом GRAPHIC. Графический режим определяется автоматически и не требует изменения, как правило. SETGRAPHIC перекрывает режим автоопределения режима для следующего открываемого SCREEN. Разрешенные для РЕЖИМа значения:
    Dec Hex Режим
    --- --- --------
    90 5Ah Текстовый
    121 79h EGA
    89 59h VGA
    87 57h SVGA
    Если экран уже открыт как графический, SETGRAPHIC(90) не повлияет на него. Если же экран ЕЩЕ не в графическом режиме, SETGRAPHIC(90) принудительно вызовет вывод следующих экранов в текстовом режиме, даже если у них установлен атрибут GRAPHIC.
    Пример:
    GraphScreen SCREEN(25,80),GRAPHIC
    !описание структуры экрана
    .
    CODE
    SETGRAPHIC(90) !Следующий экран принудительно в текст
    OPEN(GraphScreen) !GraphScreen открыть в текстовом режиме
    См. также:

    SETKEYCODE (вернуть код клавиши)

    SETKEYCODE(код)

    код Целая константа или EQUATE-метка кода клавиши.

    SETKEYCODE заставляет функцию KEYCODE вернуть заданный КОД. КОД НЕ помещается в буфер клавиатуры.
    Пример:
    SETKEYCODE(999) !Заставляем KEYCODE вернуть 999
    См. также: , , Equate-коды клавиш

    SETMOUSE (позиционирование курсора мышки)

    SETMOUSE([строка][,столбец])

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

    SETMOUSE размещает курсор мышки на экране. Если СТРОКА и СТОЛБЕЦ опущены, то SETMOUSE выключает курсор мышки. Если программа собирается использовать мышь, то по крайней мере, один SETMOUSE требуется (вероятно где-то ближе к началу программы).
    В графическом режиме курсор мышки представляет стрелку, а в текстовом - прямоугольный блок (знакоместо), до тех пор, пока не использованы операторы LOADSYMBOLS или USESYMBOLS.
    Пример:
    SETMOUSE() !Выключить мышку
    SETMOUSE(1,1) !Включить в верхнем левом углу
    См. также: LOADSYMBOLS, USESYMBOLS

    SETNOBLINK (запретить мигание)

    SETNOBLINK
    SETNOBLINK запрещает мигание на экране. Обычно, фон можно раскрасить в 8 цветов. При запрещенном мигании, бит отвечающий за мигание может быть использован как бит яркости фона. Это позволяет использовать для фона те же 16 цветов, что и для текста.
    Монохромные или CGA мониторы НЕ поддерживают запрещение мигания. Таким образом, для SETNOBLINK нужен, как минимум, EGA.
    Пример:
    SETNOBLINK !Выключить мигание
    SETCOLOR(OEh) ! установить черный на желтом
    PAINT ! и закрасить экран
    См. также: ,

    SETTEXT (установить размер экрана в текстовом режиме)

    SETTEXT(строк,столбцов)

    строк Целая константа, переменная или выражение, задающее число строк на физическом экране в текстовом режиме.
    столбцов Целая константа, переменная или выражение, задающее число столбцов на физическом экране в текстовом режиме.

    SETTEXT позволяет точно задать, скажем, режим 43 или 50 строк. Без применения SetText, текстовый режим остается таким же, каким он был при запуске программы.
    SETTEXT использует метод наилучшего размещения для параметров СТРОК и СТОЛБЦОВ. Видеоадаптер может поддерживать различные текстовые режимы, так что, в принципе, SETTEXT(200,200) может достичь максимально возможного разрешения в текстовом режиме.
    Пример:
    R# = ROWS() !Сохраняем текущие параметры экрана
    C# = COLS() !R# - строки и C# - столбцы
    GraphicScreenProc !Вызываем проц. с графическ.экраном
    SETTEXT(R#,C#) !Возвращаемся к предыдущ. значениям
    См. также: ROWS,

    SHOW (показать на экране)

    SHOW([строка][,столбец],выражение[,формат])

    строка Числовое значение или выражение, которое задает строку на экране, в которую будет выведено ВЫРАЖЕНИЕ. По умолчанию - последняя строка, в которой происходил вывод.
    столбец Числовое значение или выражение, которое задает столбец, в который будет выведено ВЫРАЖЕНИЕ. По умолчанию - последний столбец, в который производился вывод.
    выражение Метка переменной, константы, числовое или строковое выражение.
    формат Шаблон формата или метка строки (STRING) описанной с форматом вывода (picture).

    SHOW выводит переменные или выражения прямо на экран. Если выражение слишком длинно, чтобы разместиться в строке, оно усекается. Чтобы показать, что какие-то параметры пропущены, требуются запятые. То, что выводит SHOW, затирает то, что было ранее на экране.
    Пример:
    SHOW(1,1,TODAY(),@D3) !Показать дату
    SHOW(,,CLOCK(),@T3) !Показать время в том мес-
    !те, куда был последний
    !вывод
    SHOW(1,80 - SIZE(Msg),Msg) !Выровнять сообщение впра-
    !во
    SHOW(25,1,'Жми кнопочку, и продолжим')!Вывод подсказки

    TYPE (вывести строку на экран)

    TYPE(строка)

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

    TYPE выводит строку на стандартное устройство вывода (STDOUT). Пока не определено иначе, в качестве STDOUT DOS использует устройство CON. Строка появится на экране начиная с текущего положения курсора. Можно использовать SETCURSOR, чтобы разместить курсор в нужном месте.
    Устройство "CON" распознает символы CR, LF, TAB и BS. Перевод строки (LF) переводит курсор на строку ниже текущей. LF на последней строке экрана приводит к прокрутке всего экрана вверх на одну строку.
    Пример:
    TYPE(Cus:Notes) !Вывести поле примечаний
    SETCURSOR(1,25) !Идем в самый низ экрана
    TYPE(@LF5) ! и прокрутим вверх 5 строк
    См. также: , Элементы
    Управления Принтером

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

    ALRT (установить клавишу(и) завершения поля)

    ALRT(первый-код-клавиши[,последний-код-клавиши])

    первый-код-клавиши Числовой код клавиши или EQUATE-метка кода клавиши. Он может быть началом диапазона кодов клавиш.
    последний-код-клавиши Последний код клавиши или EQUATE-метка в диапазоне кодов клавиш.

    Атрибут ALRT задает клавиши завершения поля для отдельного поля на экране. Он используется с полями типа ENTRY, TEXT, OPTION, PAUSE или POINT. Если поле завершается ALRT-клавишей, то его USE-переменная НЕ обновляется автоматически.
    Атрибут ALRT разрешен и для оператора SCREEN. Клавиши, взведенные таким образом, активны для любого поля на экране.
    Пример:
    Screen SCREEN(6,40).PRE(Scr),ALRT(F10Key)
    !F10 взведена для всех полей
    ROW(2,5) ENTRY(@S20),USE(Name),ALRT(F5Key)
    !F5 взведена только для этого
    !поля
    ROW(4,5) TEXT(2,30),USE(Memo),ALRT(F7Key,F9Key)
    !F7 - F9 взведены только для
    !этого поля
    .
    CODE
    OPEN(Screen) !Открываем экран для обработки
    LOOP ! и обрабатываем все поля
    ACCEPT !Ждем завершения поля
    IF KEYCODE() = F10Key !Проверяем ALERT-клавишу экрана
    RETURN
    .
    CASE FIELD()
    OF ?Name !На ENTRY-поле
    IF KEYCODE() = F5Key !Проверяем его ALERT-клавишу
    UPDATE ! обновляем USE-переменную
    DO SomeRoutine ! и что-то делаем
    .
    OF ?Comments !На TEXT-поле
    CASE KEYCODE() !Проверяем его ALERT-клавиши
    OF F7Key !и обрабатываем каждую по-своему
    UPDATE
    DO SevenRoutine
    OF F8Key
    UPDATE
    DO EightRoutine
    OF F9Key
    UPDATE
    DO NineRoutine
    . . . !Конец case, case и loop

    AT (задает координаты экрана)

    AT(строка,столбец)

    строка Числовая константа или целая переменная, которая задает строку виртуального экрана, на которой будет верхняя строка окна.
    столбец Числовая константа или целая переменная, которая задает столбец виртуального экрана, на котором будет самый левый столбец окна.

    AT задает конкретное место для окна, так что оно не сможет "плавать". Обычно, это используется для экранов, меньших по размеру, чем виртуальный.
    SCREEN без атрибута AT пытается "плавать" так, чтобы не закрыть собой последние столбец и строку, к которым обращался предыдущий экран. Положение по умолчанию - под последней строкой, к которой было обращение и на последнем столбце, к которому было обращение. Если при этом край окна выходит за физический экран, то окно пытается разместиться над последней строкой, к которой было обращение. Если и это не получается, то SCREEN центрирует себя на виртуальном экране. Первый столбец окна помещается на последний столбец, к которому было обращение. Если при этом край окна выходит за пределы физического экрана, то окно сдвигается влево до тех пор, пока не будет виден самый правый край окна.
    Щелчок-и-перемещение мышки на верхней строке "плавающего" экрана, меньшего чем виртуальный, позволяет переместить окно в любое место виртуального экрана.
    Пример:
    Screen1 SCREEN(15,50),AT(27,15)!Fix window at row 27, column 15
    !(declarations) ! declare fields etc.
    . !End of screen structure

    BUTTON (поле-кнопка)

    BUTTON(текст),USE()[,COLOR()][,TRN][,MSG()][,ESC()]
    [,HLP()][,SHADOW][,REQ][,IMM]

    текст Строковая константа или переменная, содержащая надпись на кнопке.
    USE Equate-метка поля, которая позволяет оператора программы обращаться к этому полю.
    COLOR Задает цвета.
    TRN В графическом режиме указывает на то, что при выводе кнопки, использовать только цвет переднего плана, оставляя фон неизменным.
    MSG Сообщение, которое будет показано в строке сообщений экрана.
    ESC Поле, на которое перейти при нажатии ESC или BACKTAB.
    HLP Идентификатор окна подсказки, связанного с этим полем.
    KEY КОД_КЛАВИШИ для "горячей клавиши", вызывающей немедленное нажатие BUTTON.
    SHADOW Автоматически разместить тени вокруг кнопки.
    REQ Заставляет BUTTON проверять все поля на данном экране с атрибутом REQ на предмет наличия в них данных, отличных от нуля или пробелов.
    IMM BUTTON автоматически завершается при нажатии левой кнопки мыши и связанная с ней процедура вызывается непрерывно до отпускания кнопки мыши.

    BUTTON описывает поле-кнопку в SCREEN-структуре. Текстовая строка может содержать амперсанд (&),который означает, что следующий за ним символ - "горячая" клавиша для этого поля. Нажатие ALT и выделенного амперсандом символа взывает немедленное "нажатие" этой кнопки.
    Атрибут KEY также может назначить горячую клавишу для поля BUTTON. Это может быть любой кларионовский код клавиши или однобайтная строковая константа. Если атрибут KEY присутствует, то задаваемый им код клавиши всегда будет возвращаться функцией KEYCODE() при завершении поля-кнопки, независимо от того, какая клавиша на самом деле использовалась для этого.
    Клавиша TAB, и в CUA и в не-CUA экранах, НЕ завершает поле-кнопку. Клавиша же ENTER завершает поле кнопку в обоих режимах экрана.
    Текстовая строка может содержать также вертикальную черту (|), которая означает конец строки текста. Таким образом, можно создавать многострочные кнопки. Общая ширина прямоугольника-кнопки определяется наибольшим числом символов до вертикальной черты.
    BUTTON с атрибутом REQ - кнопка, которая "требует проверки полей". На CUA экранах, атрибут REQ для полей ENTRY или TEXT не проверяется, пока не будет нажата кнопка с атрибутом REQ.
    BUTTON без атрибута IMM, завершается при отпускании левой кнопки мыши. BUTTON с атрибутом IMM завершается при нажатии левой кнопки мыши. Это позволяет исполнять назначенный этой кнопке исполняемый код до тех пор, пока не будет отпущена кнопка мыши.
    Пример:
    BUTTON(' Ѓ ButtonTextЃ Ѓ'),USE(?Pushbutton)
    !трехстрочная кнопка

    CAP (Первые буквы слов делать заглавными)

    CAP
    Атрибут CAP задает автоматическую капитализацию для полей типа ENTRY и TEXT. Не важно, в каком регистре слова вводятся - каждый символ, следующий за пробелом, и первый символ первого слова будет переведен в верхний регистр, а остальные символы - в нижний.
    Пример:
    Screen SCREEN(6,40),PRE(Scr)
    ROW(2,5) ENTRY(@S20).USE(Name),CAP
    ROW(4,5) TEXT(2,30),USE(Comments),CAP
    .
    См. также: ,

    CENTER (центрирование на физическом экране)

    CENTER
    Атрибут CENTER указывает на то, что окно SCREEN-структуры всегда будет открываться в центре экрана. Его стоит использовать, когда заранее неизвестно, в каком режиме будет работать программа - 25 43 или 50 строк, и важно расположить окно в центре. С помощью мышки можно перетащить центрированный экран, размеры которого меньше чем у виртуального, в любое место на виртуальном экране.
    Пример:
    Screenl SCREEN(15,50),CENTER !Always pop up in center
    !(declarations) ! declare fields etc.
    . !End of screen structure

    CHECK (поле отметки (чекбокс)

    CHECK(text),USE()[,COLOR()][,TRN][,MSG()][,HLP()]
    [,ESC()]

    text Строковая константа или переменная, содержащая текст для вывода на экран.
    USE Целочисленная переменная или EQUATE-метка.
    COLOR Цвета для данного поля.
    TRN В графическом режиме цвет фона - прозрачный, и через него просвечивает фон предыдущего изображения.
    MSG Текст, который будет выведен в строку сообщений экрана.
    HLP Задает экран подсказки, связанный с этим полем.
    ESC Указывает поле, на которое надо перейти при нажатии ESC или BACKTAB.

    CHECK это поле с двумя состояниями - вкл/выкл. Чекбокс помещает пробел левее строки, заданной как параметр оператора CHECK. Когда это поле "включено", связанная с ним USE-переменная устанавливается в единицу и значок "отметка" (v) появляется в рамочке (до тех пор, пока иное не задано командами LOADSYMBOLS или USESYMBOLS). Если "выключен", то рамка очищается и USE-переменная устанавливается в ноль (ложь). Состояние чекбокса можно изменять клавишей пробела.
    Текстовая строка может содержать амперсанд, который действует так же как и в текстовой строке для BUTTON - задает "горячую клавишу" для данного поля.
    CHECK может быть отдельно, или может быть сгруппирован с другими операторами CHECK в структуру OPTION. Состояние полей переключается пробелом.
    Пример:
    ROW(12,23) CHECK('Employed?'),USE(Employed) !Одиночный чекбокс
    ROW(5,6) OPTION !Начало структуры OPTION
    ROW(6,9) CHECK('Deduct &Medical')! 'Alt-M' для медиков
    ROW(7,9) CHECK('Deduct &Dental') ! 'Alt-D' для стоматологов
    ROW(8,9) CHECK('Deduct &AD&&D') ! 'Alt-A' для любителей РПГ
    . !Конец структуры OPTION
    См. также: LOADSYMBOLS, USESYMBOLS

    Что такое Screen

    В языке Кларион есть два типа экранных структур - собственно экраны - SCREEN, и PULLDOWN-структуры. PULLDOWN-структуры являются SAA/CUA-совместимыми выпадающими меню. SCREEN-структуры используются для всех остальных типов экранов. SCREEN-структура может быть SAA/CUA-совместимой, а может и не быть. В обоих случаях для PULLDOWN и SCREEN-структур имеется полная поддержка мышки после выполнения команды SETMOUSE.
    Применение SAA/CUA-совместимости заметно влияет на интерфейс программы с пользователем. При наличии SAA/CUA-совместимости, вы можете делать свои программы "видом и ощущением" подобными программам с графическим интерфейсом пользователя (GUI). То есть, ваша программа будет интуитивно понятна тем, кто имел хоть какое то дело с GUI. Более того, ваши программы могут быть целиком графическими, используя атрибут GRAPHIC для SCREEN-структур. Хотя, если у вас есть собственный стиль "вида и ощущения", то вы можете отказаться от стандарта SAA/CUA.
    Главное отличие между SAA/CUA и не-CUA пользовательскими интерфейсами в действии клавиш ENTER и ESC при выборе и завершении поля. В не-CUA экранах, ENTER (или TAB) завершает ввод в поле и переводит оператора к следующему полю для ввода. Клавиша ESC (или BACKTAB) возвращает на предыдущие поля без завершения поля. В SAA/CUA-экранах, только TAB завершает поле и переходит к следующему. BACKTAB завершает поле и переходит к предыдущему. ENTER и Esc не перемещают по полям в CUA-экранах.
    Это - руководство по языку, следовательно, все атрибуты и операторы структур SCREEN и PULLDOWN и их синтаксис будут рассмотрены подробно. Как правило, SCREEN-ы и PULLDOWN-ы Кларион "рисуются" с помощью соответствующих иснтрументальных средств в Редакторе Текста и Генераторе Приложений, причем, для вас формируется корректный кларионовский синтаксис. Стало быть, ручное кодирование структур SCREEN или PULLDOWN не является необходимым.

    COL (задает столбец)

    COL(столбец)

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

    COL разделяет описания в пределах структуры SCREEN установкой столбца для следующего поля или строки в той же СТРОКЕ экрана, что и для непосредственно предыдущего поля.
    Пример:
    Fname ROW(2,2) STRING(@S12) !Вывод Fname в стр. 2 столб. 2
    Init COL(16) STRING(@S1) !Вывод Init в стр. 2 столб. 16
    Lname COL(18) STRING(@S12) !а Lname в стр. 2 столбце 18

    COLOR (задать цвета показа)

    COLOR(normal[,selected][,dim][,hot-normal][,hot-select])

    normal Цвет для обычного вывода.
    selected Цвет поля, когда оно выбрано.
    dim Цвет поля, когда оно запрещено оператором DISABLE.
    hot-normal Цвет "горячей" клавиши при обычном выводе.
    hot-select Цвет "горячей" клавиши, когда поле активно.

    Атрибут COLOR идентифицирует цвета, используемые в SCREEN-структуре, в любом поле SCREEN-структуры или в PULLDOWN-структуре. Каждый тип поля может использовать все или некоторые параметры, связанные с атрибутом COLOR. Ниже описаны параметры для каждого типа поля. (SPA. - вероятно рекомендуемые, а не обязательные)
    Оператор normal selected dim hot-normal hot-select
    ----------- ------ -------- --- ---------- ----------
    BUTTON x x x x x
    CHECK x x x x x
    ENTRY x x x
    LIST x x x
    OPTION x x x
    OPTION STRING x x x x x
    PAINT x
    PAUSE x
    POINT x
    PROMPT x x x x x
    RADIO x x x x x
    SCREEN x
    STRING x
    TEXT x x x
    PULLDOWN x x x x x
    MENU x x x x x
    Параметры атрибута COLOR, это числа, в диапазоне 0..255, которые задают номера элементов внутреннего массива Кодов Цветовых Стилей. Это 256-байтный массив, который хранит выбранные на данный момент Коды Цветовых Стилей. Каждый элемент инициализирован значением, равным его номеру (элемент 0 := 0, элемент 1 :=1 итд), до тех пор, пока иное не задано операторами SETSTYLES или GETSTYLES. Текущий цвет вывода есть Код Цветового Стиля, хранящийся в элементе массива.
    Пример:
    Screen SCREEN,COLOR(1) !Базовый цвет экрана
    ROW(4,2) PROMPT('&State:'),COLOR(5,6,7,8,9)
    ROW(4,10) ENTRY(@S2),USE(State),COLOR(5,6,7)
    .
    См. также: SETSTYLES, GETSTYLES, STYLES,

    COLS (задает столбцы в LIST-структуре)

    COLS(string,variable[,spaces])

    string Строковая константа или переменная, содержащая ASCII-значения, задающие число символов для подсветки в каждом столбце. Каждый символ этой строки задает ширину одного столбца в LIST. Общее число символов в строке зависит от числа столбцов в LIST-структуре.
    variable Имя целочисленной переменной, которая получает номер текущего подсвеченного столбца, когда LIST завершается оператором ACCEPT.
    spaces Целочисленная константа, задающая число пробелов между столбцами на экране.

    Атрибут COLS задает вывод элементов очереди в листбоксе подобно электронной таблице. Курсор подсвечивает только один столбец за раз. Строка, описывает число символов в каждом столбце, которые должен подсвечивать курсор. Параметр SPACES задает количество пробелов, автоматически вставляемых между выводимыми столбцами.
    Когда ACCEPT завершает LISTбокс, VARIABLE получает номер подсвеченного столбца. Если VARIABLE уже содержит какое-то значение при активизации листбокса, то сращу же активизируется столбец, номер которого хранится в VARIABLE.
    Если вместе с атрибутом COLS, к листбоксу применяется еще и атрибут FIX, то появляется возможность ввести заголовки столбцов в листбоксе. Эти заголовки не будут прокручиваться, и не могут быть выбраны.
    Пример:
    ListOue QUEUE,PRE(Lst) !Очередь номеров деталей
    PartNoA STRING(10) ! отформатированная для
    PartNoB STRING(10) ! вывода в две колонки
    .
    Screen SCREEN(20,30),PRE(Scr)
    ROW(3,45) ENTRY(@s10),USE(Trn:PartNo),SKIP
    ROW(4,45) LIST(10,20),FROM(Lst:PartNo), |
    USE(?PartList),COLS('',Column#,1)
    .
    CODE !Строим очередь для листбокса
    SET(PartsFile)
    LOOP
    NEXT(PartsFile)
    Lst:PartNoA = Par:PartNo
    IF EOF(PartsFile) THEN BREAK.
    NEXT(PartsFile)
    Lst:PartNoB = Par:PartNo
    IF EOF(PartsFile) THEN BREAK.
    ADD(ListQue)
    IF ERRORCODE() THEN STOP(ERROR()).
    CLEAR(ListQue)
    .
    ADD(ListQue)
    IF ERRORCODE() THEN STOP(ERROR()).
    OPEN(Screen) !Затем откроем экран
    ACCEPT ! и позволим сделать выбор
    GET(ListQue,CHOICE()) !Получаем выбранный элемент
    EXECUTE Column#
    Trn:PartNo = Lst:PartNoA !Выбрано из первого столца?
    Trn:PartNo = Lst:PartNOB !А может быть из второго?
    .
    См. также: ,

    CUA (объявляет пользовательский интерфейс типа SAA/CUA)

    CUA
    Атрибут CUA в операторе SCREEN задает SAA/CUA-подобный интерфейс. SAA/CUA-подобие включает множество возможностей, большинство из которых, включены в экраны Кларион с или без атрибута CUA. Атрибут CUA имеет свои специфичные методы перемещения по полям и обработки клавиш завершения.
    SAA/CUA-подобные экраны используют TAB и BACKTAB для перемещения по полям экрана. TAB завершает редактирование поля и переходит к следующему. BACKTAB завершает редактирование текущего поля и переходит к ПРЕДЫДУЩЕМУ. НЕ-SAA/CUA экраны используют ENTER и ESC (а также TAB и BACKTAB) для перемещения между полями экрана. ENTER (и TAB) завершают редактирование поля и переходит к следующему полю для обработки. ESC (и BACKTAB) обрывают обработку текущего поля и выбирают для редактирования предыдущее поле, НЕ завершая редактирования текущего.
    Пример:
    Screen1 SCREEN(15,50),AT(27,15).CUA
    !SAA/CUA navigation and completion
    !(declarations) ! declare fields etc.
    . !End of screen structure

    ENTRY (Поле для ввода)

    ENTRY([picture]),USE()[,COLOR()][,TRN][,HLP()]
    [,ESC()][,IMM][,LFT][,INS][,CAP][,ALRT()]
    OVR UPR
    [,MSG()][,SKIP][,HIDE][,REQ]

    picture Шаблон, по которому будут форматироваться вводимые в USE-переменную символы. Если шаблон не задан, то поле рассматривается как "пустое", которое оператор ACCEPT заполняет автоматически.
    USE Переменная, которая получает вводимое значение. Для "пустых" полей, это обычно EQUATE-метка.
    COLOR Задает цвета.
    TRN В графическом режиме цвет фона - прозрачный, и через него просвечивает фон предыдущего изображения.
    MSG Текст, который будет выведен в строку сообщений экрана.
    HLP Задает экран подсказки, связанный с этим полем.
    ESC Указывает поле, на которое надо перейти при нажатии ESC или BACKTAB.
    IMM Поле немедленно завершается, когда оно полностью заполнено.
    LFT Вводимые данные выравниваются влево.
    INS/OVR Режим ввода - вставка или замена.
    UPR/CAP ВСЕ БУКВЫ ДЕЛАТЬ ЗАГЛАВНЫМИ или только Первую Букву Каждого Введенного Слова.
    ALRT Задает активные alert-клавиши для данного поля.
    SKIP Это поле не может принимать какие-либо данные.
    HIDE Вводимые символы не видны на экране.
    REQ Это поле не может быть пустым или нулевым.

    Поле ENTRY позволяет оператору вводить и редактировать содержимое USE-переменной. Шаблон поля ENTRY может быть не такой длины, как его USE-переменная. Например, an ENTRY(@S30) может использоваться для изменения STRING(85), и USE-переменная будет прокручиваться влево или вправо в рамках, заданных шаблоном. То есть, когда поле ENTRY активно, можно использовать стрелки влево/вправо для перемещения в любое место USE-переменной.
    Если используется как "пустое" поле (без щаблона), то оператор ACCEPT немедленно завершает это поле. Таким образом, "пустые" поля позволяют программе получать управление в каких-то точках обработки SCREEN-структуре (обычно используется для обработки НЕ-CUA экранов).
    Поле ENTRY с атрибутом HIDE показывает на экране звездочки (*) при вводе данных. Обычно это используется для ввода паролей, чтобы нельзя было подглядеть из-за плеча вводимые данные.
    Если есть атрибут SKIP, то поле не может быть выбрано для ввода данных. Тем не менее, USE-переменая может быть показана оператором DISPLAY, что позволяет создавать поля "только для глаз".
    Пример:
    ROW(6,14) ENTRY(@S24),USE(Name),CAP,LFT,HLP('Name')
    ROW(8,16) ENTRY(@S2),USE(state),UPR.IMM,HLP('StateLst')
    ROW(12.20) ENTRY(@N4.1),USE(Percent),INS,REQ,ESC(?Amount)
    ROW(10,8) ENTRY(@P###-##-####P),USE(SocSecNbr),OVR,REQ.IMM
    ROW(1,1) ENTRY,USE(?FirstField)

    Equate-метки меню

    В PULLDOWN-структурах, компилятор назначает каждому полю MENU и ITEM свой номер. Эти номера полей - отрицательные, начинаются с минус единицы (-1) и назначаются полям по мере их появления в описании PULLDOWN-структуры.
    Equate-метки меню для PULLDOWN то же самое, что Equate-метки полей для SCREEN. Они всегда начинаются со знака вопроса (?). Поля MENU и ITEM в PULLDOWN-структурах могут иметь USE-переменные, которые могут быть только Equate-метками меню, что предоставляет способ обращения к этим полям из программы.

    Equate-метки полей

    В SCREEN-структурах, каждое поле с USE-переменной получает от компилятора свой номер. Эти номера полей начинаются с единицы и присваиваются полям по мере их появления в описании SCREEN-струк туры. Этот порядок определяет последовательность выбора полей оператором ACCEPT (хотя, его можно изменить оператором SELECT). Порядок появления полей в описании экрана НЕ зависит от атрибутов ROW и COL, которые задают месторасположение поля на экране. Таким образом, нет нужды в какой-либо корреляции между положением поля на экране и номером поля, присвоенным компилятором.
    Есть несколько операторов, которые используют эти номера полей как параметры: SELECT, DISPLAY, UPDATE, ERASE, DISABLE, ENABLE, и некоторые другие. Было бы довольно сложно задавать каждый раз номера полей для использования в этих операторах. Поэтому, Кларион имеет механизм решения этой проблемы: Equate-метки полей.
    Equate-метки полей всегда начинаются со знака вопроса (?), за которым идет имя USE-переменной поля. Ведущий знак вопроса означает для компилятора Equate-метку поля. Они очень похожи на нормальные директивы компилятора EQUATE. Компилятор подставляет номер поля для конкретной Equate-метки во время компиляции. Это делает ненужным знать или вычислять заранее номера полей.
    Поля LIST, POINT, BUTTON и PAUSE в SCREEN-структурах могут иметь USE-переменные, которые могут быть только Equate-метками, что предлагает способ обращения к этим полям из программы.

    ESC (куда перейти при нажатии ESC)

    ESC(field)

    field Целое число, EQUATE-метка поля или же выражение, задающее выбираемое поле.

    Атрибут ESC для полей типа ENTRY, TEXT, OPTION, PAUSE и POINT устанавливает поле, которое надо выбрать при нажатии Esc (НЕ-CUA экраны) или BACKTAB (CUA экраны). Обычно, нажатие ESC или BACKTAB приводит к выбору предыдущего поля в той последовательности, в которой поля выбирались. Атрибут ESC перекрывает нормальную последовательность.
    Пример:
    Screen SCREEN,COLOR(1)
    ROW(3,10) ENTRY(@S15),USE(Name) !Поле 1
    ROW(4,10) ENTRY(@S20),USE(Address)
    ROW(5,10) ENTRY(@S12),USE(City)
    ROW(5,24) ENTRY(@S2),USE(State).ESC(?Name)
    !по ESC - на поле 1
    ROW(5,28) ENTRY(@NO5),USE(Zip),ESC(1) !по ESC - на поле 1
    ROW(6,10) ENTRY(@P(###)###-####P),USE(Phone),ESC(?-5)
    . !по ESC - на поле 1
    См. также: , , ,

    EVERY (установить промежуток для REPEAT)

    EVERY(строк,столбцов)

    строк Целочисленная константа, которая указывает, на сколько строк ниже будут выводиться следующие поля в REPEAT-структуре.
    столбцов Целочисленная константа, которая указывает, на сколько столбцов правее будут выводиться следующие поля в REPEAT-структуре.

    EVERY задает числа СТРОК и СТОЛБЦОВ, разделяющих отдельные элементы в REPEAT-структуре. Например, EVERY(2,20) размещает элементы-повторения в каждой второй строе, через 20 столбцов. Если параметр пропущен, подразумевается единица. Если в описании структуры REPEAT вообще пропущен атрибут EVERY, то подразумевается EVERY(1,1).
    Пример:
    Screen SCREEN,PRE(Scr)
    REPEAT(12,3),EVERY(1,20),INDEX(Ndx)!12x3,20 cols apart
    ROW(2,5) ENTRY(@N-7.2),USE(Amt)!36 elements on screen
    .

    EXPAND (задает размножаемую строку)

    EXPEND(строка)

    строка Целочисленная константа в диапазоне 1..25, включительно.

    Атрибут EXPAND в SCREEN-структуре задает строку (для режима 25 строк), которая будет повторена несколько раз в режимах 43 или 50 строк. Это позволяет использовать экраны, разработанные для режима 25 строк в режиме 43/50 строк. Указанная строка повторяется столько раз, сколько надо, чтобы заполнить экран. Обычно, выбранная строка используется для раздвижки REPEAT-структуры или LISTбокса на добавочные 18 или 25 строк.
    Пример:
    Screen1 SCREEN(25,80),EXPAND(10)
    !В режиме 43/50 повторяем 10ю строку
    REPEAT(12),INDEX(Ndx),MAX(MaxRows)
    !Repeat-структура в строках 3..15
    ROW(3,5) POINT(1,16),USE(?Point)
    Month COL(5) STRING(3)
    COL(12) ENTRY(@N_7.2),USE(Amt),INS
    . . !End of screen structure
    См. также:

    FILL (переменная, получающая значение из листбокса)

    FILL(field)

    field EQUATE-метка поля, идентифицирующая экранное поле, которое будет принимать значение.

    Атрибут FILL задает поле экрана, в которое будет передано значение, которое выбрано из листбокса.
    Пример:
    PartOue QUEUE,PRE(Que)
    RecPtr LONG
    PartNo STRING(10)
    .
    Screen SCREEN.PRE(Scr)
    ROW(2,5) ENTRY(@N_7.2),USE(Fil:PartNo),SKIP
    ROW(3,5) LIST(10,10),FROM(Que:PartNo),FILL(?Fil:PartNo)
    . !Fil:PartNo получает выбранное значение
    См. также:

    FIX (заголовки листбокса)

    FIX(number)

    number Целочисленная константа, которая задает число фиксированных строк.

    Атрибут LIST-структуры FIX, задает число элементов очереди, которые содержат "статичную" информацию. Эти элементы выводятся в верхней части листбокса. Они не подлежат прокрутке, и не могут быть выбраны. Эти элементы используются для вывода заголовков в листбоксе, позволяя задать заголовок для каждого столбца, если LIST описан с атрибутом COLS.
    Пример:
    ListOue QUEUE,PRE(Lst) !Очередь номеров запчастей
    PartNoA STRING(10) ! отформатированная для вывода
    PartNoB STRING(10) ! на экран в две колонки
    .
    Screen SCREEN(20,30),PRE(Scr)
    ROW(3,45) ENTRY(@s10),USE(Trn:PartNo).SKIP
    ROW(4,45) LIST(10,20),FROM(Lst:PartNo), Ѓ
    USE(?PartList),COLS('',Column#,1),FIX(2)
    .
    CODE
    Lst:PartNoA = 'Part A' !Создаем заголовки столбцов
    Lst:PartNoB = 'Part B'
    ADD(ListQue) ! и добавляем их к очереди
    IF ERRORCODE() THEN STOP(ERROR()).
    ListOue = ALL('-') !Создаем разделители столбцов
    ADD(ListOue) ! и добавляем их в очередь
    IF ERRORCODE() THEN STOP(ERROR()).
    SET(PartsFile) !Строим очередь для листбокса
    LOOP
    NEXT(PartsFile)
    Lst:PartNoA = Par:PartNo
    IF EOF(PartsFile) THEN BREAK.
    NEXT(PartsFile)
    Lst:PartNoB = Par:PartNo
    IF EOF(PartsFile) THEN BREAK.
    ADD(ListOue)
    IF ERRORCODE() THEN STOP(ERROR()).
    CLEAR(ListQue)
    .
    ADD(ListQue)
    IF ERRORCODE() THEN STOP(ERROR()).
    OPEN(Screen) !Открываем экран
    ACCEPT ! и доверяем выбор пользователю
    GET(ListOue,CHOICE()) !Берем выбранный элемент очереди
    EXECUTE Column#
    Trn:PartNo = Lst:PartNoA !Выбрано из первого столбца?
    Trn:PartNo = Lst:PartNoB !Выбрано из второго столбца?
    .
    См. также: ,

    FROM (очередь для просмотра через LIST)

    FROM(field)

    field Метка очереди (QUEUE) или поля очереди. Может быть типа GROUP.

    Атрибут LIST-структуры FROM, задает поле, которое надо вывести
    в листбоксе.
    Пример:
    PartOue QUEUE,PRE(Que)
    RecPtr LONG
    PartNo STRING(10) !Это поле выводим на экран
    .
    Screen SCREEN,PRE(Scr)
    ROW(2,5) ENTRY(@N_7.2),USE(Fil:PartNo),SKIP
    ROW(3,5) LIST(10,10),FROM(Oue:PartNo),FILL(?Fil:PartNo)
    !Показываем список из Que:PartNo
    .
    См. также:

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

    GRAPHIC
    Атрибут GRAPHIC указывает на то, что экран надо открывать в графическом режиме. Этот атрибут требуется для любого экрана, содержащего IMAGE-поля.
    Войдя в графический режим, программа остается в нем, пока не закроется экран, вызвавший переход в этот режим. Любые экраны, открываемые после экрана с GRAPHIC, будут открываться в графическом режиме независимо от наличия у них этого атрибута. Переход к графическому режиму прозрачен для оператора; все экранные поля, все функции редактирования такие же, как и в текстовом режиме. Любой текст с предыдущих текстовых экранов, автоматически будет преобразован в графику. Функция BLINK не работает в графическом режиме. То есть, любой мигающий текст, в графике будет выведен на ярком фоне.
    Из-за ограничений по памяти, 25х80 - максимальный размер графического экрана. Если вы работаете в режиме 43/50, то, при открытии графического экрана, экран автоматически переводится в режим 25 строк. В графическом режиме НЕДОСТУПНЫ виртуальные экраны. Если при работе в графическом режиме попытаться открыть виртуальный экран, то программа аварийно остановится.
    Пример:
    Screenl SCREEN(15,50),GRAPHIC!Screen puts video in graphics mode
    ! (declarations) ! declare fields etc.
    . !End of screen structure

    HIDE (скрыть содержимое поля)

    HIDE
    ENTRY-поле с атрибутом HIDE не показывает данные на экране. По мере ввода символов в поле, они (только на экране) заменяются звездочками. Обычно это используется для полей для ввода паролей
    Атрибут HIDE можно использовать с листбоксами. В этом случае, по давляется полоса подсветки (курсор) когда листбокс не активен.

    HLP (идентификатор окна помощи для данного поля)

    HLP(window)

    window Строковая константа или переменная (до 20
    символов), которая задает идентификатор окна
    подсказки из HELP-файла программы.

    Атрибут HLP для полей типа ENTRY, TEXT, CHECK, LIST, BUTTON, OPTION, PAUSE или POINT задает окно подсказки для этого поля. Атрибут HLP в описании SCREEN, действует для всех полей экрана, у которых этот атрибут не задан.
    Активное (выбранное) окно подсказки вызывается по клавише F1 во время ожидания ввода операторами ASK или ACCEPT, либо выполнением оператора HELP без параметров. HELP-файл должен быть открыт перед вызовом окна.
    См. также: , , , , , , ,
    , , HELP

    HSCROLL, VSCROLL, HVSCROLL (линейки прокрутки для LIST)

    HSCROLL
    VSCROLL
    HVSCROLL
    Параметры HSCROLL, VSCROLL и HVSCROLL помещают в листбокс линейки прокрутки. HSCROLL - горизонтальную вниз листбокса, VSCROLL вертикальную справа, а HVSCROLL - обе. Линейки прокрутки занимают одну строку или один столбец из LIST(строк,столбцов).
    Вертикальные линейки прокрутки позволяют прокручивать список мышью вверх и вниз, а горизонтальные - панорамировать его мышью влево/вправо.

    IMAGE (поле-рисунок)

    IMAGE(row,columns),[NAME()][,USE()][,IMM][,REUSE]
    [,SKIP][,MSG()][,ESC()][,HLP()][,KEY()]

    rows Строк в IMAGE-поле, максимум - 25.
    columns Столбцов в IMAGE-поле, максимум - 80.
    NAME Строковая переменная или константа, содержащая имя PCX или GIF файла для показа. Если USE содержит метку MEMO-поля, то атрибут NAME не используется.
    USE EQUATE-метка поля, или метка переменной, которая содержит PCX или GIF рисунок для показа, обычно это MEMO_поле с атрибутом BINARY.
    IMM Немедленно показать рисунок, позволяя любым строковым литералам перекрывать его.
    REUSE В 256-цветном SVGA режиме, рисунок будет выводиться в палитре цветов, заданной другим .PCX или .GIF, показанным ранее, или в палит ре видеокарты по умолчанию, по принципу "наилучшего соответствия".
    SKIP Это поле не может быть выбрано пользователем.
    MSG Текст, который будет выведен в строку сообщений экрана.
    HLP Задает экран подсказки, связанный с этим полем.
    ESC Указывает поле, на которое надо перейти при нажатии ESC или BACKTAB.
    KEY "Горячая" клавиша, немедленно завершающая IMAGE-поле.

    IMAGE описывает область для вывода графики для SCREEN-структуры с атрибутом GRAPHIC. Параметры rows и columns определяют размер выводимого на экран рисунка. PCX или GIF рисунки автоматически масштабируются при необходимости.
    IMAGE-поле без атрибута SKIP действует как поле BUTTON. Оно может иметь EQUATE-метку поля, как и его USE-переменная, что позволяет ссылаться на нее операторами программы. Пользователь может: переместиться на это поле клавишей TAB и нажать ENTER, щелкнуть на нем мышкой, или нажать заданную атрибутом KEY горячую клавишу - ACCEPT завершит это поле. Если атрибут KEY указан, то задаваемый им код клавиши будет возвращаться функцией KEYCODE() при завершении IMAGE-поля, независимо от клавиши, действительно завершившей его. Если IMAGE-поле выбрано пользователем, то в его верхнем левом углу появляется мигающий ромбик (ASCII 4). Цвет ромбика - это цвет переднего плана для текущего Цветового Стиля, который имел символ в текстовом режиме в этой позиции.

    IMAGE-поля поддерживаются в графических режимах EGA, VGA и SVGA; CGA Color и Hercules graphics не поддерживаются. Поддерживаются все 16-цветные режимы. 256-цветные PCX или GIF рисунки автоматически выводятся в 16-цветном режиме на 16-цветном "железе". 256цветные SVGA режимы поддерживаются при определенном минимуме аппаратных средств:
    Карта/Чипсет Разрешение Требует Памяти
    ------------ ---------- --------------
    TSENG Chip Set 640 x 350 512K
    Video7/Headland 640 x 400 256K
    Ahead Systems 640 x 400 256K
    Paradise 640 x 400 256K
    VESA 640 x 400 256K
    Trident/Everex 640 x 400 256K
    Zymos 640 x 400 256K
    Genoa 640 x 400 256K
    Пример:
    Screen SCREEN(20,30),PRE(Scr),GRAPHIC
    ROW(3,5) IMAGE(14,25),NAME('picture.pcx'),SKIP
    !Показать рисунок
    ROW(3,35) IMAGE(14,25),NAME('picture.gif'),IMM
    !IMAGE как BUTTON
    ROW(3,37) STRING('Picture Select Button')
    !Строка накладывается на рисунок
    .
    См. также: , SHOWIMAGE

    IMM (немедленное исполнение)

    IMM
    Поля ENTRY или TEXT с атрибутом IMM считаются завершенными, как только они полностью забиты данными, без нажатия ENTER или TAB. Структура OPTION с атрибутом IMM, завершается, как только нажат первый непустой символ, содержащийся в элементах меню, или нажата "Горячая" клавиша, задаваемая амперсандом в строке. Поля типа LIST или POINT с атрибутом IMM, считаются завершенными при каждом перемещении курсора по списку или REPEAT-структуре. При этом программа получает управление при каждом нажатии клавиш ВВЕРХ или ВНИЗ.
    IMAGE-поля с атрибутом IMM, выводятся немедленно, позволяя любым строковым литералам, идущим за ними в описании SCREEN-структуры, перекрывать область рисунка. BUTTON с атрибутом IMM, завершается при нажатии ЛЕВОЙ кнопки мыши. Таким образом, можно непрерывно выполнять связанный с кнопкой код до тех пор, пока кнопка мыши не будет отпущена.
    См. также: , , , , , ,

    INDEX (индексная переменная для REPEAT)

    INDEX(varible)

    variable Метка численной переменной.

    Атрибут INDEX называет переменную, которая как и индекс массива, задает активный в данный момент элемент REPEAT-структуры. Значение 1 активизирует первый элемент, а значение равное произведению параметров структуры REPEAT (down и across) активизирует последний элемент.
    Если индексная переменная выходит за допустимые для НЕЕ пределы, то она сбрасывается в единицу. REPEAT INDEX проходит по строкам и по столбцам - сначала сверху вниз, а потом слева направо.
    См. также:

    INS (ввод - в режиме вставки)

    INS
    Атрибут INS можно использовать с полями типа ENTRY и TEXT для включения ввода в режиме вставки. Символа, введенные в режиме вставки, сдвигают введенные перед ними символы вправо. Цифры толкают другие цифры влево от десятичной точки. Для выключения режима вставки можно воспользоваться клавишей INS.
    См. также: ,

    ITEM (элемент выпадающего меню)

    ITEM(текст)[,KEY()][,USE()][,TOGGLE]

    текст Строковая константа, задающая выводимую на экран строку, связанную с ITEM.
    KEY Задает код клавиши или одиночный символ, который немедленно выполняет этот элемент.
    USE EQUATE-метка меню.
    TOGGLE Этот элемент типа ВКЛ/ВЫКЛ.

    ITEM описывает выбор из меню в структуре PULLDOWN. Текстовая строка может содержать амперсанд, который означает, что следующий за ним символ - "горячая" клавиша для этого поля. Нажатие такой клавиши БЕЗ ALT подсвечивает и исполняет данный элемент. Если в ТЕКСТе нет амперсанда, то в роли такой "горячей" клавиши выступает первый непустой символ ТЕКСТа.
    Атрибут KEY назначает отдельную "горячую" клавишу для поля. Это может быть любой допустимый код клавиши, он также вызовет немедленное выполнение элемента, независимо от того,показано PULLDOWN на экране или нет. Если атрибут KEY задан для ITEM, то заданный им код клавиши будет всегда возвращаться функцией KEYCODE(), независимо от того, какая клавиша завершила этот элемент.
    Полоска курсора подсвечивает отдельные ITEM-ы :) в структуре MENU. Каждый ITEM может быть связан с PROCEDURE, или неким кодом, который надо выполнить при выборе этого элемента.
    Пример:
    Pul]Down PULLDOWN
    MENU
    ITEM('&GL'),USE(?GL),KEY(AltG) !Hot key - Alt-G
    ITEM('A&R'),USE(?AR),KEY(AltR) !Hot key - Alt-R
    ITEM('A&P'),USE(?AP),KEY(A]tP) !Hot key - Alt-P
    . .

    KEY (клавиша быстрого выбора)

    KEY( character )
    keycode

    character Задает символ для выбора данного пункта меню или SCREEN BUTTON. Этот параметр не чувствителен к регистру букв.
    keycode Кларионовский код клавиши или EQUATE-метка кода клавиши.

    Атрибут KEY для элементов структуры PULLDOWN MENU, ITEM, SCREEN IMAGE или SCREEN BUTTON задает "горячую" клавишу для выбора и выполнения данного поля. Такая "горячая" клавиша отличается от той, которая задается амперсандом тем, как она связана с полями MENU, ITEM или BUTTON. "Амперсандовые" "горячие" клавиши используются для ПЕРЕХОДА на поля типа MENU или ITEM. "Горячие" клавиши атрибута KEY используются дл НЕМЕДЛЕННОГО выполнения связанного с полем кода.
    Если у какого-то поля есть атрибут KEY, то по завершении этого поля, функция KEYCODE() ВСЕГДА вернет код клавиши, заданный этим атрибутом, независимо от того, какая клавиша использовалась на самом деле.
    Пример:
    PuIlDown PULLDOWN
    MENU('Options'),USE(?Options)
    ITEM('43/50 Line Mode'),USE(?OptLine)
    ITEM('Colors'),USE(?OptColor)
    .
    MENU('Quit'),USE(?Quit),KEY(CtrIX) !Ctrl-X - ВЫХОД
    .
    Screen SCREEN(5,15),CENTER
    ROW(2,3) STRING('OK to continue?)
    ROW(4,5) BUTTON(' OK '),KEY(EnterKey) !Enter - OK
    COL(10) BUTTON(' Cancel '),KEY(EscKey) !Esc - отмена
    .
    См. также: , , , ,

    LFT (выравнивание влево)

    LFT
    Этот атрибут используется с ENTRY-полями для выравнивания строковых данных влево. При обновлении USE-переменной, из строки удаляются ведущие пробелы.
    Использование этого атрибута с TEXT-полями, позволяет перенос строк при редактировании.
    См. также: ,

    LIST (описывает список)

    LIST(rows,cols),FROM()[,COLOR()][,TRN][,HLP()]
    [ESC()][,IMM][,SKIP][,MSG()][,USE()][,HIDE]
    [,FILL()][,COLS()][,FIX()][,HSCROLL ]
    VSCROLL
    HVSCROLL

    rows Число строк (элементов) списка, выводимых на экран.
    cols Число столбцов для вывода в этом списке.
    FROM Метка QUEUE или элемента QUEUE для вывода Может быть типа GROUP.
    COLOR Задает цвета.
    TRN В графическом режиме в качестве цвета фона используется цвет перекрываемого изображения
    HLP Идентификатор окна помощи, связанного с этим полем.
    ESC Задает поле, на которое перейти при нажатии клавиш ESC или BACKTAB.
    IMM Поле считается заполненным, как только указатель попадает на него.
    SKIP Ввод данных в это поле невозможен.
    MSG Текст, показываемый в строке сообщений экрана.
    USE EQUATE-метка поля, которая позволяет операторам программы ссылаться на этот список.
    HIDE Курсор-указатель будет виден только тогда, когда данное поле активно.
    FILL Целочисленная константа или EQUATE-метка поля, задающая поле, которое принимает значение, выбранное из списка.
    COLS Задает ширину столбца в списке. Содержит строковую константу или переменную, задающую число символов в каждом столбце, целочисленную переменную, в которую передается номер подсвеченного столбца, когда список завершен, и целочисленную константу, задающую расстояние между столбцами.
    FIX Целочисленная константа, задающая число статичных строк в списке, что позволяет, при использовании атрибута COLS, помещать в список заголовки столбцов.
    HSCROLLЛинейка горизонтальной прокрутки, занимающая самую нижнюю строку списка.
    VSCROLLЛинейка вертикальной прокрутки, занимающая самый правый столбец списка.
    HVSCROLL Поместить в список обе линейки прокрутки - горизонтальную и вертикальную.

    LIST объявляет список в SCREEN-структуре. LIST выводит на экран rows элементов/полей из QUEUE, имя которой задается атрибутом FROM. Поле QUEUE выводится по одной записи в строке, в области, задаваемой параметрами rows и cols. Элементы очереди выводятся в список как есть, так что некоторые поля придется форматировать во время построения QUEUE.
    Если у LIST-а есть атрибут IMM и QUEUE изменяется в то время, когда LIST ждет ввода от пользователя, надо использовать оператор DISPLAY для обновления списка.
    Полоса курсора позволяет оператору выбирать элемент из списка. FILL-поле обновляется по мере продвижения курсора по списку. Список завершается нажатием TAB для CUA экранов (и TAB или ENTER для не-CUA экранов) и процесс обработки переходит к следующему полю для ввода. Двойной щелчок мышки также завершает список, но не переводит обработку автоматически на следующее поле. Функция CHOICE возвращает номер записи в QUEUE (значение возвращаемое функцией POINTER(queue)) соответствующий элементу, выбранному по завершении списка. Второй параметр оператора SELECT может быть использован для помещения курсора на НЕ первый элемент списка.
    Список с атрибутом IMM, прокручивается горизонтально на 255 символов. Без атрибута IMM, он прокручивается в пределах самой длин ной записи в QUEUE (до 255 символов).
    Если задан атрибут COLS, полоса курсора подсвечивает один столбец (заданный атрибутом COLS) за раз, и стрелки влево/вправо позволяют переходить от столбца к столбцу в пределах элемента списка. Атрибут FIX можно использовать для создания заголовков столбцов, которые прокручиваются только горизонтально, вместе со всем списком, не прокручиваясь по вертикали (они зафиксированы в списке). Пользователь не может отметить или изменить заголовки.
    Пример:
    SelectPart PROCEDURE
    ListOue QUEUE,PRE(Lst) !Очередь для номеров З/Ч
    PartNo STRING(10) ! отформатирована для
    . ! вывода на экран
    Screen SCREEN(20,30),PRE(Scr)
    ROW(3,45) ENTRY(@slO),USE(Trn:PartNo),SKIP
    ROW(4,45) LIST(10,10),FROM(Lst:PartNo)|
    ,FILL(?Trn:PartNo),USE(?PartList)
    .
    CODE
    SET(PartsFile) !Строим QUEUE для LISTбокса
    LOOP UNTIL EOF(PartsFile)
    NEXT(PartsFile)
    IF ERRORCODE() THEN STOP(ERROR()).
    Lst:PartNo = Par:PartNo
    ADD(ListOue,Lst:PartNo)
    IF ERRORCODE() THEN STOP(ERROR()).
    .
    OPEN(Screen) !Теперь откроем экран и...
    ACCEPT ! выбор за пользователем!
    См. также: QUEUE, SELECT

    LOCAL (позиция, в которой открывается PULLDOWN)

    LOCAL
    Атрибут LOCAL указывает, что PULLDOWN-структура открывается на первой строке физического экрана. Если он пропущен, то PULLDOWN открывается на первой строке последнего открытого экрана, если это был виртуальный экран.
    Первые строки физического и виртуального экранов различаются только тем, что первая строка физического экрана всегда остается на своем месте, в то время, как первая строка виртуального экрана может быть прокручена за пределы экрана физического. В этом случае, она возвращается на место при обращении к PULLDOWN если PULLDOWN-меню описано БЕЗ атрибута LOCAL.
    Пример:
    PuIlDown PULLDOWN,LOCAL !Открывать на первой строке ТЕКУЩЕГО
    !экрана
    См. также:

    MAX (переменная-счетчик столбцов в REPEAT)

    MAX(varible)

    variable Метка численной переменной.

    Атрибут MAX называет переменную, которая получает, во время работы программы, число столбцов экрана, занятых REPEAT-структурой. MAX, совместно с атрибутом EXPAND, позволяет использовать экраны с REPEAT-структурами, разработанные для режима 25 строк, в режимах 43/50 итд. строк. MAX-переменная позволяет вам во время исполнения определить, сколько элементов содержит REPEAT-структура. То есть появляется возможность писать некий обобщенный код для заполнения REPEAT-массива.
    Пример:
    Rows BYTE !Столбцов в REPEAT
    Ndx BYTE !Индекс повторения
    Amt DECIMAL(7,2),DIM(100) !Массив выплат
    Screen SCREEN(25,80),PRE(Scr),COLOR(7),EXPAND(4)
    REPEAT(12),INDEX(Ndx),MAX(Rows) !Переменная Rows
    !получаю число строк
    ROW(3,5) POINT(1,16),USE(?Point)
    Amnt ROW(3,12) STRING(@N_7.2)
    . .
    CODE
    OPEN(Screen)
    LOOP Ndx = 1 TO Rows !Заполняем экран вы-
    Scr:Amnt = Amt[Ndxl ! платами
    .
    См. также: ,

    MENU (подменю в выпадающем меню)

    MENU(текст)[,KEY()][,USE()][,COLOR()][,RIGHT()]
    [ITEM()]
    [MENU()]
    multiple other ITEM and/or MENU statements
    .

    текст Строковая константа, задающая выводимую на экран строку, связанную с MENU.
    KEY Задает код клавиши или одиночный символ, который немедленно выполняет этот элемент.
    USE EQUATE-метка меню.
    COLOR Цвета экрана для выборов в этом подменю.
    RIGHT Указывает, что MENU появится на правом краю полосы меню на первой строке экрана.

    MENU описывает выпадающее подменю в структуре PULLDOWN. Когда MENU выбрано, операторы MENU и/или ITEM в структуре MENU выводятся в отдельном окошке (дропбоксе). MENU не обязано содержать в себе другие операторы MENU или ITEM. Текстовая строка может содержать амперсанд, который означает, что следующий за ним символ - "горячая" клавиша для этого поля. Если MENU находится на полосе PULLDOWN, нажатие Alt вместе "горячей" клавишей подсвечивает и выполняет MENU. Если меню находится в другом MENU, то его выполнит нажатие "горячей" клавиши без ALT. Если в ТЕКСТе нет амперсанда, то в качестве "горячей" клавиши выступает первый непустой символ ТЕКСТа. Атрибут KEY назначает для этого подменю добавочную "горячую" клавишу. Это может быть любой допустимый код клавиши, он также вызовет немедленное выполнение элемента, независимо от того, показано PULLDOWN на экране или нет. Если атрибут KEY задан для MENU, то заданный им код клавиши будет всегда возвращаться функцией KEYCODE(), независимо от того, какая клавиша завершила этот элемент.
    Дропбокс для MENU появляется прямо под ТЕКСТом в полосе PULLDOWN. Если выбрать клавишами ENTER или СТРЕЛКА ВЛЕВО вложенные в это подменю другие подменю, то они будут появляться справа от текущего подменю. СТРЕЛКА ВЛЕВО возвращает в предыдущий дропбокс.
    Пример:
    PuIlDown PULLDOWN !Полоса PULLDOWN
    MENU('File'),USE(?File)!Выпадающее подменю
    ITEM('Open'),USE(?FileOpen)
    ! этот элемент находится в подменю
    ITEM('Close'),USE(?Fi]eClose)
    MENU('Tools'),USE(?Fi]eTools) !Еще одно подменю
    ITEM('Rebuild Keys'),USE(?FileTooIsRebuild)
    . . !Конец обоих меню
    MENU('Quit'),USE(?Quit)
    !Этот элемент выполняется из полосы PULLDOWN
    . .

    MSG (вывод сообщения на экран)

    MSG(text)

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

    Этот атрибут можно использовать с полями типа ENTRY,CHECK,RADIO, STRING, TEXT, LIST, BUTTON и OPTION STRING. MSG выводит текстовую строку в Область Сообщений Экрана, задаваемую SETMSG. Если эта область не была задана SETMSG, то по умолчанию ей становится нижняя строка экран, начиная с 1 столбца и длиной 80 символов.
    См. также: SETMSG

    NAME (файл с графикой для показа)

    NAME(filename)

    filename Строковая константа или переменная, содержащая спецификацию (путь+имя) .PCX или .GIF файла.

    Атрибут NAME поля IMAGE, задает имя файла с PCX или GIF рисунком
    который надо показать.
    Пример:
    Screen SCREEN(20,30),PRE(Scr),GRAPHIC
    ROW(3,5) IMAGE(14,20),NAME('picture.pcx')
    .
    См. также:

    OPTION (описывает меню опций)

    OPTION[,COLOR()][,TRN]
    CHECK()
    .
    OPTION[USE()][,COLOR()][,TRN][,HLP()][,ESC()]
    RADIO()
    .
    OPTION([picture])[USE()][,COLOR()][,TRN][,HLP()]
    [,ESC()][,ALRT()][,IMM][,REQ][,SKIP][,PRE()]
    [метка] STRING()
    .

    picture Шаблон формата используется для форматирования символов для вывода или присвоения USE-переменной. Этот параметр разрешен для STRING OPTION структур.
    USE Переменная или EQUATE-метка поля. Этот параметр разрешен для RADIO или STRING OPTION структур.
    COLOR Задает цвета экрана для данного поля. Этот параметр разрешен для структур CHECK, RADIO, и STRING OPTION.
    TRN В графическом режиме в качестве цвета фона используется цвет фона перекрываемого изображения. Этот параметр разрешен для структур CHECK, RADIO, и STRING OPTION.
    HLP Идентификатор окна помощи, связанного с этим полем. Этот параметр разрешен для структур RADIO или STRING OPTION.
    ESC Поле, на которое перейти при нажатии ESC или BACKTAB. Этот параметр разрешен для структур RADIO или STRING OPTION.
    ALRT Задает активные ALERT-клавиши для данного поля. Этот параметр разрешен для структур STRING OPTION.
    IMM Поле считается завершенным, как только оно заполнено. Этот параметр разрешен для структур STRING OPTION.
    REO Поле не может быть оставлено пустым или нулевым. Этот параметр разрешен для структур STRING OPTION.
    SKIP Это поле не может использоваться для ввода данных. Этот параметр разрешен для структур STRING OPTION.
    PRE Задает префикс структуры. Этот параметр разрешен для структур STRING OPTION.

    Структура OPTION формирует на экране структуру меню. В структуре OPTION разрешены три типа полей: CHECK (чекбоксы), RADIOкнопки и STRING (строки). Поля разных типов не могут использоваться в одой и той же структуре OPTION. Нажатием горячей клавиши, заданной амперсандом в предшествующем операторе PROMPT, можно выбрать для ввода целиком структуру OPTION.
    OPTION, содержащий операторы CHECK, группирует несколько чекбоксов вместе. Группа может иметь один общий цвет (атрибут COLOR оператора OPTION).

    Стрелки вверх/вниз перемещают курсор-указатель с одного чекбокса на другой и при необходимости - с самого нижнего на самый верхний. Каждый чекбокс может быть переключен индивидуально (пробелом) не влияя на остальные чекбоксы в структуре OPTION. Каждый чекбокс может иметь собственную горячую клавишу, задаваемую амперсандом в его строке параметров. USE-переменные не разрешены для OPTION-ов, и функция CHOICE не влияет на этот тип OPTION-ов.
    OPTION, содержащий RADIOкнопки позволяет выбрать только одну из списка, приведенного в структуре OPTION. Когда кнопка выбрана, любая другая выбранная ранее кнопка отключается (гаснет). USEпеременная получает значение строки от выбранной RADIOкнопки, а функция CHOICE возвращает относительную позицию кнопки в структуре OPTION.
    OPTION, содержащий операторы STRING, работает как меню в структуре SCREEN. Каждая строка может быть подсвечена курсором и выбрана нажатием ENTER на обычном экране, или нажатием TAB на CUAэкране. USE-переменная обновляется значением строки, а функция CHOICE возвращает относительную позицию выбранной строки в структуре OPTION. Можно использовать необязательный шаблон формата. Он выводит значение текущей строки в верхний левый угол структуры OPTION, и обновляет его при перемещении курсора.
    Пример:
    ROW(5,6) OPTION !Начало структуры CHECK OPTION
    ROW(6,9) CHECK('Deduct &Medical')!'Alt-M' для медиков
    ROW(7,9) CHECK('Deduct &Dental') !'Alt-D' для стоматологов
    ROW(8,9) CHECK('Deduct &AD&&D') !'Alt-A' для любителей RPG
    . !Конец структуры OPTION
    ROW(10,6) OPTION,USE(TaxSelection) !Начало структуры RADIO OPTION
    ROW(11.9) RADIO('Pre-Tax'),MSG('Это было до сбора налогов')
    ROW(12,9) RADIO('Post-Tax'),MSG('Это стало после сбора налогов')
    .
    ROW(15,6) OPTION !Begin item option structure
    ROW(16,9) STRING('Process &Medical')
    !'Alt-M' for medical procedure
    ROW(17,9) STRING('Process &Dental')
    !'Alt-D' for dental procedure
    ROW(18,9) STRING('Process &AD&&D')!'Alt-A' for AD&D procedure
    . !End option structure
    См. также: , , ,

    OVR (ввод - в режиме замены)

    OVR
    Этот атрибут используется с полями ENTRY и TEXT. Он переключает клавиатуру в режим замены. Во время ввода можно отменить его действие, нажав клавишу INS.
    См. также: ,

    PAINT (закраска части экрана)

    PAINT(строк,столбцов),COLOR()[,TRN]

    columns Сколько столбцов закрашивать. Целочисленная константа.
    rows Сколько строк закрашивать. Целочисленная константа.
    COLOR Цвет закраски.
    TRN Прозрачная закраска.

    При открытии SCREEN-структуры, все ее видеоатрибуты определяются ее атрибутом COLOR. PAINT изменяет байты видеоатрибутов в заданной прямоугольной области экрана.
    Пример:
    ROW(4,25) PAINT(13,32),COLOR(23)
    !Закрасить голубым 13 строк по 32 столбца
    ROW(6,58) PAINT(6,22),TRN
    !Закрасить прозрачно 6 строк по 22 столбца

    PAUSE (поле ожидания нажатия на клавишу)

    PAUSE(строка)[,USE()][,COLOR()][,TRN][,HLP()][,ESC()]
    [,ALRT()][,MSG()]

    string Строковая константа или переменная, содержащая сообщение, выводимое во время ожидания.
    USE EQUATE-метка поля, позволяющая операторам программы ссылаться на него.
    COLOR Цвета данного поля.
    TRN В графическом режиме, для изображения поля использовать только цвет переднего плана, оставляя фон "как есть".
    HLP Идентификатор окна помощи, связанного с данным полем.
    ESC Поле, на которое перейти при нажатии ESC или BACKTAB.
    ALRT Задает ALERT-клавиши, активные для данного поля.
    MSG Текст, выводимый в строке сообщений экрана.

    Когда PAUSE-поле выбрано, на экран выводится строка string. Любая клавиша кроме ESC или BACKTAB завершает PAUSE-поле. Завершение PAUSE-поля убирает строку string с экрана.
    PAUSE НЕ передает значение в USE-переменную. Тем не менее, вы можете ИСПОЛЬЗОВАТЬ (английская игра слов - USE=ИСПОЛЬЗОВАТЬ) EQUATE-метку, что позволяет вам определять это поле функцией FIELD для своих целей. PAUSE-поля обычно используются на НЕ-CUA экранах, для вывода сообщений типа "бьем/не бьем", требующих подтверждения от оператора.
    Пример:
    :
    PAUSE('F10 - Облом, любая другая клавиша - продолжаем')|
    ,USE(?Complete)
    :
    CODE
    CASE FIELD()
    OF ?Complete
    IF KEYCODE() = F10Key THEN RETURN.
    .
    См. также: FIELD

    POINT (указатель структуры REPEAT)

    POINT(строк,столбцов)[,USE()][,COLOR()][,TRN]
    [,ALRT()][,HLP()][,ESC()][,REQ()][,MSG()][,IMM]

    строк Высота указателя в строках.
    столбцов Ширина указателя в символах.
    USE EQUATE-метка поля, позволяющая ссылаться на него.
    COLOR Цвета для данного поля.
    TRN В графическом режиме, для изображения поля использовать только цвет переднего плана, оставляя фон "как есть".
    HLP Идентификатор окна помощи, связанного с данным полем.
    ESC Поле, на которое перейти при нажатии ESC или BACKTAB.
    ALRT Задает ALERT-клавиши, активные для данного поля.
    MSG Текст, выводимый в строке сообщений экрана.
    REQ Указывает, что элемент должен быть выбран.
    IMM Поле считается завершенным, как только оно подсвечено курсором.

    POINT-поле создает полоску подсветки (курсор) позволяющую опера тору выбрать элемент из REPEAT-структуры. С другой стороны, оно устанавливает значение REPEAT INDEX. POINT-указатель формируется изменением цветов в покрываемой им области. Размер курсора определяется параметрами СТРОК и СТОЛБЦОВ. Пропущенный параметр считается равным единице. Верхний левый угол указателя находится в позиции, задаваемой его параметрами ROW и COL, и изменяется в пределах области, заданной параметрами DOWN и ACROSS (вниз и поперек) REPEAT-структуры, и параметром EVERY. Стрелки, клавиши Home и End позволяют оператору перемещаться в пределах структуры REPEAT. POINT НЕ подсвечивает полностью пустой элемент.
    Следующие клавиши завершают POINT-поле, и устанавливают переменную REPEAT INDEX в относительную позицию в REPEAT. Они могут использоваться для передаче управления программе из REPEAT:
    Tab (CUA) Enter (non-CUA) Ins Del
    Backspace Pgup PgDn CtrlPgUp
    CtrlpgDn Up (с самого верха) Down (с самого низа)
    Любой алфавитно-цифровой символ.
    POINT-поле завершается, если СТРЕЛКА ВВЕРХ (или BACKTAB для CUAрежима) нажата в самой первой позиции REPEAT-структуры, или СТРЕЛКА ВНИЗ нажата в самой последней позиции. Тем не менее, поле типа POINT с атрибутом REQ будет "свертываться" в последнюю/ первую позиции соответственно, без завершения.
    Любой алфавитно-цифровой символ также завершит POINT-поле. Это позволяет программисту создавать "локаторные" поля. "Локаторное" поле динамически репозиционирует курсор не первую запись, содержащую введенные пользователем символы. Код для "локаторных" полей осуществляет "поиск с увеличением" для нахождения первой записи, содержащей данные, начинающиеся с этих символов.
    Пример:
    REPEAT(12),INDEX(Ndx)
    ROW(3,5) POINT(1,16),USE(?Point)
    Month COL(5) STRING(3)
    . !Конец структуры REPEAT
    См. также:


    PROMPT (строка подсказки для следующего поля)

    PROMPT(text)[,COLOR()][,TRN]

    text Строковая константа или переменная, содержащая текст подсказки.
    COLOR Задает цвета экрана для PROMPT
    TRN Указывает, что в графическом режиме поле выводится только цветом переднего плана, оставляя фон как есть.

    PROMPT задает текст, выводимый в связи со следующим за ним полем типа ENTRY, TEXT, LIST или OPTION. Текстовая строка PROMPT-а может содержать амперсанд (&), который означает, что следующий за амперсандом символ - "горячая" клавиша для вызова связанного поля. Одновременное нажатие Alt и "горячей клавиши" немедленно выбирает связанное поле типа ENTRY, TEXT, LIST или OPTION.
    Пример:
    ROW(6,14) PROMPT('Как Вас зовут: ')
    ROW(6,30) ENTRY(@S20),USE(Name)

    PULLDOWN (структура "выпадающее меню")

    метка PULDOWN[,COLOR()][,KEY()][,SINGLE()][,SHADOW][,LOCAL]
    DOUBLE()
    FULL()
    HALF()
    [MENU()
    [INTEM()]
    [MENU()
    [INTEM()]
    .]
    .]
    .

    COLOR Задает цвета вывода.
    KEY "Горячая" клавиша для PULLDOWN-структуры.
    SINGLE,DOUBLE,FULL,HALF Тип рамки для выпадающих меню.
    SHADOW Если есть, то нужны тени под выпадающими меню
    LOCAL Указывает, как открывать PULLDOWN - на первой строке физического или виртуального экрана (оставляя экран в том же самом положении)
    MENU Подменю с отдельным выпадающим окошком.
    ITEM Элемент меню.

    PULLDOWN описывает SAA/CUA-подобную структуры выпадающего меню. PULLDOWN-структуры задают несколько возможностей выбора из меню, которые можно активизировать при исполнении оператора ACCEPT.
    Все MENU и ITEM в структуре PULLDOWN нумеруются отрицательными числами в порядке, в котором они появляются в этой структуре, начиная с минус единицы (-1). Когда выбор сделан, функция FIELD возвращает номер выбранного элемента (ITEM).
    В PULLDOWN-структурах есть два вида "горячих" клавиш. Первый тип служит для перемещения по элементам меню, его "горячие" клавиши задаются вставкой амперсанда прямо перед нужным символом в строке для MENU или ITEM, при этом, при работе такой символ выделен. Если же в строке нет амперсанда, то подсвечивается первый НЕпустой символ строки. Такие "горячие" клавиши используются вместе с клавишей ALT для вызова полосы выпадающего меню, если оно не видно на экране в данный момент (разумеется, меню уже должно быть открыто оператором OPEN) и/или выбора конкретного подменю (MENU) или элемента меню (ITEM).
    Второй тип горячих клавиш, это клавиши, задаваемые атрибутом KEY для элементов MENU или ITEM. Они могут быть любыми разрешенными кодами клавиш (в т.ч. и EQUATE) и вызывают немедленное выполнение связанного с ними MENU или ITEM. Если атрибут KEY был задан для MENU или ITEM, то заданный им код клавиши будет всегда возвращаться функцией KEYCODE() при завершении MENU или ITEM, независимо от того, какой клавишей был завершен этот элемент.
    Пример:
    PullDown PULLDOWN !Полоса выпадающего меню
    MENU('File'),USE(?File)!Описываем подменю
    ITEM('Open'),USE(?FileOpen)
    ! элементы подменю
    ITEM('Close'),USE(?FileClose)
    ITEM('Save'),USE(?FileSave)
    .
    MENU('Options'),USE(?Options)
    ITEM('43/50 Line Mode'),USE(?OptLine)
    ITEM('Colors'),USE(?OptColor)
    .
    MENU('Quit'),USE(?Quit),KEY(CtrlQ).
    !Этот элемент выполняется без подменю, прямо из полосы PULLDOWN
    .

    RADIO (поле радио-кнопка)

    RADIO(text)[,COLOR()][,TRN][,MSG()]

    text Строковая константа или переменная, содержащая выводимую на экран строку.
    COLOR Задает цвета экрана для этого поля.
    TRN Указывает, что в графическом режиме поле выводится только цветом переднего плана, оставляя фон как есть.
    MSG Текст, выводимый в строке сообщений экрана.

    RADIO-кнопки - это элементы меню в структурах OPTION. Если иное не задано через LOADSYMBOLS или USESYMBOLS, text выводится в скобках. Если кнопка выбрана, то она представляет собой символ бубей (ASCII 4 = ). Только одна кнопка из структуры OPTION может быть выбрана в один момент времени.
    Пример:
    ROW(10,6) OPTION,USE(TaxSelection)!Начало структуры радиокнопки
    ROW(11,9) RADIO('Pre-Tax'),MSG('Было до сбора налогов')
    ROW(12,9) RADIO('Post-Tax'),MSG('Стало после сбора налогов')
    . !конец структуры
    См. также: LOADSYMBOLS, USESYMBOLS

    REPEAT (структура-посторение)

    REPEAT(down,across)[,EVERY()][,INDEX()][,PRE()][,MAX()]
    [POINT()]
    fields to repeat
    .

    down Целочисленная константа, задающая число повторений сверху вниз. Если пропущено, подразумевается 1.
    across Целочисленная константа, задающая число повторений слева направо. Если пропущено, подразумевается 1.
    EVERY Число строк и столбцов между повторяющимися полями. По умолчанию - EVERY(1,1).
    INDEX Индексная переменная для REPEAT-структуры.
    PRE Префикс для меток в составе REPEAT-структуры.
    MAX Переменная, получающая количество строк в REPEAT-структуре во время исполнения.
    POINT Курсор-указатель, подсвечивающий отдельные элементы REPEAT-структуры.

    REPEAT-структура может рассматриваться как "массив на экране". Каждое повторение структуры соответствует одному элементу массива. Общее число элементов - это произведение параметров down и across. Чаще всего в REPEAT-структуре используются поля типа STRING, для вывода прокручиваемой таблицы.
    Кроме этого, в REPEAT-структуру можно помещать и ENTRY-поля. USE переменные ENTRY-полей, помещенных в REPEAT-структуру, должны иметь атрибут DIM, с размером большим или равным произведению параметров down и across. Каждая USE-переменная в REPEAT-структуре имеет свой атрибут DIM, она не может быть частью группы, имеющей атрибут DIM.
    Номера повторяющимся полям назначаются в том порядке, в котором они появляются в SCREEN-структуре (так же, как и неповторяющимся полям). Не имеет значение, на каком элементе-повторении вы находитесь, поскольку номер поля будет один и тот же. Это означает, что EQUATE-метка REPEAT-структуры ссылается целиком на всю структуру, а не на отдельные ее элементы. Номер текущего элемента-повторения можно получить из переменной INDEX.
    Повторяющиеся поля выводятся в позициях, определяемых их параметрами row и column, атрибутом EVERY и значением индексной перемен ной (REPEAT INDEX). При открытии экрана, выводится каждый элемент-повторение инициализированного поля. Первый элемент-повторение в REPEAT-структуре, выводится с позиции, задаваемой координатами самой структуры REPEAT.
    Атрибут EVERY задает позиции последующих повторений, опираясь на число строк и столбцов, разделяющих отдельные элементы.
    Когда поле-повторение получает данные, значение индексной переменной определяет, какой элемент массива USE-переменной получает введенное значение. Оператор ACCEPT автоматически увеличивает индексную переменную, по мере заполнения очередного элемента в REPEAT-структуре, если INDEX превысит максимальное значение, то для ввода выбирается следующее поле для экрана. Нажатие клавиши Esc (на НЕ-SAA/CUA экранах) или BACKTAB (для SAA/CUA экранов), уменьшает INDEX, заставляя выбрать предыдущий элемент-повторение. Если был выбран первый элемент, то ESC, BACKTAB, или СТРЕЛ КА ВВЕРХ выбирает для ввода следующее поле на экране.
    Пример:
    Следующая REPEAT-структура позволяет оператору обновлять массив
    помесячных затрат:
    LoadMonthArray PROCEDURE
    Ndx BYTE !Индексная переменная
    Amt DECIMAL(7,2),DIM(12) !Массив помесячных
    !затрат
    Month STRING('JanFebMarAprMayJunJulAugSepOctNovDec')
    Mnth STRING(3),DIM(12),OVER(Month) !Этот массив наложен
    !поверх массива Month
    Screen SCREEN(16,22),AT(5,30),PRE(Scr),COLOR(7)
    ROW(2,5) STRING('Помесячные затраты')
    ROW(16,7) STRING('F10 - выход')
    REPEAT(12),INDEX(Ndx)
    ROW(3,5) POINT(1,16),USE(?Point),ESC(?-l),REQ
    Month COL(5) STRING(3)
    COL(12) ENTRY(@N_7.2),USE(Amt),INS
    .. !Конец структур REPEAT и SCREEN
    CODE
    OPEN(Screen)
    LOOP Ndx = 1 TO 12 !Заполняем месяцы
    Scr:Month = Mnth[Ndx] ! на экране
    .
    LOOP
    ALERT(2058) !Взводим клавишу F10
    ACCEPT
    IF KEYCODE() = 2058 !Если нажата F10
    RETURN ! то выходим
    . .
    См. также:

    REQ (поле не может быть нулевым или пустым)

    REQ
    Атрибут REQ означает, что поля ENTRY, TEXT, OPTION, или POINT требуют ввода в них. ТРЕБУЮЩИЕ строку поля ENTRY или TEXT не могут быть заполнены пробелами, а ТРЕБУЮЩЕЕ поле ENTRY не может быть нулем.
    ТРЕБУЮЩИЕ поля типа OPTION или POINT, заставляют курсор "вернуть ся на верх или в низ структуры (что зависит от направления движения курсора). Требующие поля типа OPTION и POINT заставляют делать выбор, чтобы завершить это поле.
    Поля типа BUTTON с атрибутом REQ, автоматически проверяют все остальные поля с этим же атрибутом на текущем экране, чтобы убедиться, что те поля не нулевые и не пустые. Это происходит и на не-CUA и на CUA экранах. Это позволяет пользователю перемещаться между полями с помощью мышки, оставаясь уверенным, что все ТРЕБУ ЮЩИЕ поля содержат правильные данные по завершении экрана.
    На не-CUA экранах, попытка завершить ТРЕБУЮЩЕЕ поле с нулем или пробелом, вызывает звуковой сигнал и мигание этого поля. Исправить положение можно нажатием ESC или вводом корректного значения. На CUA экранах, поля с атрибутом REQ не проверяют своих данных пока не нажата "кнопка" с атрибутом REQ.
    См. также: , , , , ,

    REUSE (использовать ранее установленную палитру)

    REUSE
    Атрибут REUSE для IMAGE-полей указывает, что PCX или GIF-образ будет выведен на экран в палитре, установленной другим рисунком, который уже на экране. Если на экране нет других рисунков, то ис пользуется стандартная палитра вышего адаптера. Если же этот атрибут вовсе не задан, то используется собственная палитра рисунка, а выведенные ранее образы перекрашиваются.
    Это атрибут нужен только для SVGA режима в 256 цветов. В 16-цвет ных VGA и EGA режимах используется только стандартная палитра выидеоадаптера.
    Пример:
    Screen SCREEN(20,30),PRE(Scr),GRAPHIC
    ROW(3,5) IMAGE(14,20),NAME('picture.pcx'),REUSE
    .
    См. также: IMAGE

    RIGHT (позиция для MENU)

    RIGHT
    Атрибут RIGHT указывает, что элемент меню должен появиться на самом правом краю полосы PULLDOWN. Этот атрибут игнорируется для элементов меню, появляющихся в дропбоксах.
    Пример:
    PuIlDown PULLDOWN
    MENU('Options')
    ITEM('43/50 Line Mode')
    ITEM('Colors')
    .
    MENU('Quit'),RIGHT !Поместить на самом краю
    .
    См. также:

    ROW (задает строку)

    ROW(строка[,столбец])

    строка Целая константа, означающая строку, в которой поле буде выведено на экран.
    столбец Целая константа, означающая столбец, начиная с которого, поле или строка будет выведено на экран. Если пропущен, то подразумевается столбец из последнего оператора ROW или COL.

    ROW управляет размещением полей и строк на экране. СТРОКА и СТОЛБЕЦ должны быть в пределах высоты и ширины экрана соответственно.
    Пример:
    ROW(4,12) PAINT(12,34),COLOR(7,4)
    ROW(9) ENTRY(@Sl2),USE(Status)

    SCREEN (описывает screen-структуру)

    метка SCREEN([rows][,columns])[,AT()][,ALRT()][,CENTER]
    [,COLOR()][,TRN][,EXPAND()][,GRAPHIC][,HLP()]
    [,PRE()][,SHADOW][, ZOOM ][,CUA]
    FADE
    WIPE
    FALL
    [ROW()]
    [COL()]
    [BUTTON()]
    [CHECK()]
    [ENTERY()]
    [IMAGE()]
    [LIST()]
    [OPTION
    [CHECK()]
    [RADIO()]
    [метка] [STRING()]
    .]
    [PAINT()]
    [PAUSE()]
    [PROMT()]
    [REPEAT()
    [POINT()]
    [multiple other fields]
    .]
    [метка] [STRING()]
    [TEXT()]
    .

    метка Допустима в Кларион метка. Она требуется для оператора SCREEN и не обязательна для экранных STRING-полей.
    rows Целочисленная константа, задающая число строк на экране. Под экраном, в данном случае, понимается окно, используемое SCREEN-структурой. Максимум - 255, но произведение ROWS и COLUMNS не может превышать 32767. Если этот параметр опущен, то изображение, затертое экраном не сохраняется.
    columns Целочисленная константа, задающая число колонок на экране. Максимум - 255, но произведение ROWS и COLUMNS не может превышать 32767. Если этот параметр опущен, то изображение, затертое экраном не сохраняется.
    AT Задает X и Y координаты для экрана, положение которого, фиксированно.
    ALRT Задает клавиши завершения поля, активные на всем экране.
    CENTER Указывает, что открываемое окно должно быть отцентрировано относительно физического экрана.
    COLOR Задает основной цвет экрана.
    TRN Указывает на то, что предыдущий экран может прозрачно "просвечивать" сквозь текущий.
    EXPAND Задает строку экрана, которая дублируется если экран, разработанный для режима 25 строк, открывается в режиме 43/50 строк.
    GRAPHIC Переводит дисплей в графический режим.
    HLP Задает окно помощи, связанное с экраном.
    PRE Задает префикс метки для STRING-переменных.
    SHADOW Указывает, что вокруг окна экрана автоматически размещается тень.
    ZOOM, FADE, WIPE, FALL WIPE, FALL CUA Управляет методом появления экрана на дисплее. Задает SAA/CUA-подобный пользовательский интерфейс.
    ROW Задает номер строки для описания в SCREEN-структуре.
    COL Задает столбец в последней заданной строке для описания элемента SCREEN-структуры.
    BUTTON Описывает поле-кнопку.
    CHECK Описывает поле, позволяющее пользователю выбирать одно из двух возможных состояний.
    ENTRY Описывает поле для ввода данных.
    IMAGE Описывает область графического экрана, в которой может быть показан файл типа GIF/PCX.
    LIST Описывает прямоугольник на экране для просмотра списка элементов.
    OPTION Описывает меню-подобную структуру, содержащую несколько полей типа CHECK, RADIO или STRING. Все поля в структуре OPTION, должны быть одного типа.
    RADIO Описывает выборы в меню для OPTION-структур. Только одна радиокнопка из нескольких, может быть активна в отдельный момент.
    STRING Объявляет экранную переменную или символьную константу для показа на экране.
    PAINT Устанавливает байты видеоатрибутов или цвета в прямоугольной области экрана.
    PAUSE Замораживает курсор и показывает приглашение нажать клавишу завершения поля.
    PROMPT Задает строку, которая ассоциируется с полем типа ENTRY, TEXT, LIST или OPTION.
    REPEAT Описывает циклический набор полей.
    POINT Описывает указатель (яркую полоску) в структуре REPEAT, используемую для выбора единичного элемента REPEAT.
    TEXT Описывает мнгострочное поле для редактирования текста подобно редактору.
    <
    SCREEN- структура объявляет экран. Внутри структуры могут быть описания и атрибуты, которые описывает вывод символов, цвета и
    поля для пользовательского ввода. Когда экран активен, его строковые (STRING) поля с метками могут обрабатываться как любые другие поля данных с метками. Другой экран может быть открыт БЕЗ закрывания предыдущих, хотя активным может быть только один. Последний открытый экран и является активным.
    SCREEN с параметрами ROWS и COLUMNS (размер не важен) описывает окно, которое автоматически сохраняет перекрываемое им видеоизображение. При закрытии экрана, сохраненное изображение восстанавливается. Если же параметры ROWS и COLUMNS опущены, то экран не сохраняет перекрытое изображение.
    Экран может быть описан с размерами, большими чем у физического экрана (область, которую можно одновременно видеть на мониторе). Такой экран называется виртуальным. Размер видимой части виртуального экрана задается оператором SETAREA. При необходимости, можно использовать SETAREA для изменения размеров виртуальной рабочей области.
    Виртуальный экран автоматически позиционируется так, чтобы его активное в данный момент поле было видно на физическом экране. Во время исполнения программы, когда активное поле находится за пределами физического экрана, рабочая область виртуального экрана сдвигается так, чтобы его верхний (или нижний, левый, правый) край находился двумя строками выше (ниже, левее, правее) выбранного поля.
    SCREEN-структуры предлагают автоматическое позиционирование от поля-к-полю. Нажатие клавиши завершения завершает текущее активное поле и переводит курсор не следующее поле, подлежащее редактированию. Порядок выбора полей задается размещением описаний полей в описании экрана. Таким образом, порядок выбора полей НЕ зависит от атрибутов полей COL и ROW, задающих расположение на экране.
    Все экранные структуры содержат полную поддержку мышки. Если перед запуском программы загружен драйвер мышки, достаточно выполнить команду SETMOUSE, и программа сможет работать с ней.


    Оператор может перемещать физический экран по виртуальному с помощью мышки. Помещение курсора мышки на край экрана вызывает сдвиг или прокрутку физического экрана в пределах экрана виртуального.
    Если оператор вручную переместил виртуальный экран так, что активное поле не видно на физическом экране, то автоматический выбор поля перенесет физический экран к выделенному полю, как только оператор нажмет какую-нибудь клавишу.
    Если у экрана есть атрибут GRAPHIC, то монитор переключается в графический режим при открытии такого экрана. Максимальный размер графического экрана - 25x80. Из-за ограничений по памяти, в графическом режиме НЕ разрешены виртуальные экраны. Открываемые в последствии экраны без атрибута GRAPHIC не изменят режим дисплея; он останется графическим до тех пор, пока не будет закрыт первоначальный экран с атрибутом GRAPHIC. Если какой-нибудь из последующих экранов больше, чем 25 x 80, программа аварийно завершит работу.
    Атрибут GRAPHIC требуется только для экранов с IMAGE-полями. Все остальные экраны работают одинаково как в текстовом, так и графическом режимах. Текстовый, конечно, намного быстрее чем графический, потому, что требуется перемещать гораздо меньше данных.
    Некоторые поля позволяют описать "горячие" клавиши, которые задаются амперсандом. Символ, стоящий за амперсандом и есть "горячая клавиша" поля. Для перехода к такому полю, надо нажать ALT и "горячую" клавишу.
    Пример:
    Screen SCREEN(75,160),PRE(Scr) !A virtual screen
    !(declarations) ! fields, strings, etc
    . !End screen structure
    См. также: SETAREA,

    SHADOW (автоматическая тень под окном)

    SHADOW
    Атрибут SHADOW вызывает автоматическое размещение "теней" у нижнего и правого краев окна или поля-кнопки, для имитации трехмерного эффекта. Тени - прозрачны, т.е. лежащий под ними текст виден как бы в дымке. SHADOW обычно используется в SCREEN-структурах, размер которых меньше физического экрана.
    В PULLDOWN-меню, SHADOW выделяет тенью только "выпадающие" подменю.
    Пример:
    Screen1 SCREEN(15,50),SHADOW !Automatic shadowing around screen
    !(declarations) ! declare fields etc.
    . !End of screen structure
    См. также: ,

    SINGLE, DOUBLE, FULL, HALF (виды рамок для меню)

    SINGLE(color)
    DOUBLE(color)
    FULL(color)
    HALF(color)

    color Код цветового стиля для символов рамки.

    Эти атрибуты задают, какой тип символов рамок будет использоваться для всех подменю в PULLDOWN-структуре. Для отдельного PULLDOWN-меню может быть задан только один из этих типов рамки.
    SINGLE одинарные линии
    DOUBLE двойные линии
    FULL блоки полной высоты
    HALF блоки полной высоты слева и справа, блоки половин-
    ной высоты снизу и сверху.
    Пример:
    PullDown PULLDOWN,SINGLE(5) !Рамка из одинарных линий
    .
    См. также:

    SKIP (пропустить это поле)

    SKIP
    Атрибут SKIP используется с полями ENTRY, TEXT, STRING OPTION и LIST. Поле с атрибутом SKIP не может редактироваться человеком или активизироваться оператором SELECT. SKIP создает экранные поля "только для просмотра". Его USE-переменная выводится на экран оператором DISPLAY.
    Пример:
    Screen SCREEN(20,60),PRE(Scr)
    ROW(6,14) ENTRY(@S24),USE(Name),SKIP!Только для показа
    ROW(15,10) TEXT(3,50),USE(Rec:Notes),SKIP
    !и текст тоже
    ROW(19,5) PAUSE('Press any key to continue')
    . !Весь экран - только для просмотра
    См. также: , , ,

    STRING (экранная переменная - строка)

    длина
    [метка] STRING (значен.)[,COLOR][,TRN][,MSG()]
    формат

    метка Имя, которое позволяет обращаться к полю.
    длина Числовая константа, задающая длину строки. В этом случае, строка изначально пуста.
    значение Строковая константа или переменная, содержащая начальное значение строки. ДЛИНА строки становится равной длине ЗНАЧЕНИЯ.
    формат Используется для форматирования ЗНАЧЕНИЯ строки. ДЛИНА, в таком случае, будет такой, чтобы вместить отформатированную строку. ЗНАЧЕНИЕ в этом случае - пусто.
    COLOR Задает цвета экрана для этого поля.
    TRN Указывает, что в графическом режиме поле выводится только цветом переднего плана, оставляя фон как есть. Таким образом, можно наложить строку на графический рисунок.
    MSG Текст, выводимый на строке сообщений экрана, которая задается функцией SETMSG.

    STRING выводится на экран в относительной позиции (ROW,COL) от верхнего левого угла экрана. STRING это единственный тип переменных, который можно описать в SCREEN-структурах.
    К экранной строке с меткой, можно обратиться как и к любой другой переменной, пока открыт содержащий ее экран. Она занимает видеопамять и требует, также, обычной памяти и специальной обработки для выполнения любых математических операций. Скажем, для увеличения значения СТРОКИ, ее надо преобразовать в число, увеличить, преобразовать число обратно в строку и вновь записать получившуюся строку в видеопамять. Гораздо эффективней будет использовать числовые переменные для вычислений, и уже их значения присваивать экранным строкам.
    Пример:
    Screen SCREEN(3,30),PRE(Scr),CENTER
    ROW(1,1) STRING('') ! Рисуем
    ROW(2,1) STRING('') ! рамочку
    ROW(3,1) STRING('') !
    Msg ROW(2,5) STRING(20) !Поле для сооб-
    !щений
    .

    TEXT (область для ввода текста)

    TEXT(строк,столбцов),USE()[,COLOR()][,TRN][,HLP()]
    [ESC()][,LFT][,REQ][,ЃINSЃ][,ЃCAPЃ][,ALRT()]
    ЃOVRЃ ЃUPRЃ
    [,MSG()][,SKIP]

    строк Целочисленная константа, задающая число строк в TEXT-поле.
    столбец Целочисленная константа, задающая число столбцов в TEXT-поле.
    USE Задает переменную, которая принимает введенное в TEXT-поле значение.
    COLOR Задает цвета экрана для этого поля.
    TRN Указывает, что в графическом режиме поле выводится только цветом переднего плана, оставляя фон как есть.
    HLP Задает идентификатор окна помощи, связанного с этим полем.
    ESC Поле, на которое перейти при нажатии клавиш ESC или BACKTAB.
    LFT Разрешает перенос слов во вводимых данных.
    REQ Поле не может быть пустым или нулевым.
    INS/OVR Режим ввода - ВСТавка/ЗАМена.
    UPR/CAP В каком режиме происходит ввод - ВСЕ БУКВЫ ЗАГЛАВНЫЕ или Первая Буква Каждого Слова.
    ALRT ALERT-клавиши, активные для данного поля.
    MSG Текст, выводимый в строке сообщений экрана.
    SKIP Это поле нельзя выбрать для ввода данных.

    TEXT-поле, это многорядное строковое поле с переносом слов, и вертикальной прокруткой, в SCREEN-структуре. Как и ENTRY-поле, TEXT-поле может отличаться по длин от своей USE-переменной. Длина TEXT-поля, это произведение параметров СТРОК и СТОЛБЦОВ. Если USE-переменая длиннее, чем TEXT-поле, то она делится на сегменты, длиной по СТОЛБЦОВ символов. Эти сегменты можно прокручивать вертикально в TEXT-поле так, что СТРОК сегментов USE-переменной одновременно видны в TEXT-поле в любой момент времени. Если же USE-переменная короче, чем TEXT-поле, то можно ввести не больше символов, чем длина USE-переменной.
    Когда TEXT-поле выбрано, курсор помещается в первый столбец первой строки. Клавиша ENTER переводит курсор в первый столбец следующей строки. Таким образом, ENTER эквивалента нажатию клавиш СТРЕЛКА ВНИЗ и HOME. Нажав ENTER на последней строке TEXT-поля, можно вызвать прокрутку поля вверх на одну строку, до тех пор, пока еще есть доступные для прокрутки сегменты USE-переменной. Нажатие ENTER или СТРЕЛКИ ВНИЗ на последнем сегменте, вызывает завершение поля и обновление USE-переменной.

    Атрибут ALRT или оператор ALERT можно использовать для назначения клавиши, которая завершает поле, не дожидаясь заполнения всех строк. ALERT-клавиши не обновляют USE-переменную, поэтому надо использовать оператор UPDATE.
    Стрелки ВВЕРХ и ВНИЗ, клавиши PgUp, PgDn, Ctrl-PgUp и Ctrl-PgDn позволяют прокручивать USE-переменную в TEXT-поле. Стрелки ВВЕРХ и ВНИЗ прокручивают за раз на один сегмент вверх или вниз с первой или последней строки TEXT-поля. PgUp и PgDn прокручивают сразу СТРОК сегментов. Ctrl-PgUp и Ctrl-PgDn переходят к первому или последнему сегменту USE-переменной. Нажатие ВВЕРХ из первого сегмента, приводит к выбору предыдущего поля, нажатие ВНИЗ из последнего сегмента, вызывает обновление USE-переменной и выбор следующего поля.
    Перенос слов разрешается атрибутом LFT. Перенос слов забивает хвост каждого сегмента пробелами так, чтобы слово попало целиком в следующий сегмент, если иначе оно попадает сразу в два сегмента. Таким образом, USE-переменные TEXT-полей становятся "чувствительными к ширине." Если чувствительная к ширине переменная использована в TEXT-поле переменной ширины, между словами появятся ненужные пробелы, и слова могут разбивать строки.
    Пример:
    ROW(18,15) TEXT(4,60),USE(Act:Comments),HLP('Comments')
    ROW(20,10) TEXT(3,50),USE(Rec:Notes),LFT,ESC(?Rec:Phone)
    ROW(10,15) TEXT(10,60)USE(Emp:History),LFT

    TOGGLE (элемент-переключатель типа ВКЛ/ВЫКЛ)

    TOGGLE(varible)

    variable Метка целочисленной переменной.

    Атрибут TOGGLE для элемента ITEM структуры PULLDOWN, указывает на то, что ITEM - переключатель. Когда ITEM включен, VARIABLE=1 и после ТЕКСТА связанного с ITEM появится значок (v). Когда же ITEM выключен, VARIABLE станет равной нулю, а значок (v) исчезнет.
    ITEM можно включить/выключить нажатием на нем клавиши ENTER, или присвоением нуля или единице переменной VARIABLE из исполняемого кода.
    Пример:
    LineMode BYTE(1) !Переключатель заранее включен
    PuIlDown PULLDOWN
    MENU('Options')
    ITEM('43/50 Line Mode'),TOGGLE(LineMode) !Переключатель
    ITEM('Colors')
    . .
    См. также:


    TRN (прозрачное изображение)

    TRN
    Атрибут TRN разрешен только для операторов PAINT или SCREEN в текстовом режиме. Это позволяет закрытому экраном изображению проглядывать через текущий экран, делая этот экран или закрашенный прямоугольник прозрачными. (С.П.А. - Ну и фразочка!)
    В графическом режиме, любое экранное поле с атрибутом TRN выводится только цветом переднего плана, оставляя фон как есть. Таким образом, можно делать надписи НА рисунках, сквозь которые будет виден рисунок.
    См. также:

    UPR (ввод преобразовывать в верхний регистр)

    UPR
    Атрибут UPR используется с полями ENTRY и TEXT для преобразования всех введенных БУКВ в заглавные.
    См. также: ,

    USE (связать с полем переменную или метку)

    USE( variable )
    label

    variable Метка переменной, принимающей введенные данные.
    метка EQUATE-метка поля или меню.

    USE с параметром-переменной поддерживает поля ENTRY, TEXT,CHECK, и RADIO (или STRING) OPTION переменной, которая обновляется при вводе данных. Когда поле завершено (завершен ввод данных в поле) эта переменная получает введенное значение.
    Для IMAGE-полей, USE(variable) задает переменную, которая содержит PCX или GIF-образ для вывода. Обычно, такая переменная - это MEMO-поле с атрибутом BINARY.
    USE(label) предлагает способ обращения к полю операторами программы.Параметр label может быть использован для полей RADIO или STRING OPTION, CHECK, TEXT и ENTRY. Метка должна использоваться для полей POINT, PAUSE и BUTTON в SCREEN-структурах, и для полей MENU и ITEM в структурах PULLDOWN.
    Пример:
    ROW(l,l) ENTRY.USE(?FirstField)
    ROW(6,14) ENTRY(@S24),USE(Name)
    ROW(8,16) TEXT(2,20),USE(comments)
    ROW(10,8) CHECK('Check String'),USE(CheckVar)
    ROW(12,20) PAUSE('Press any key to continue'),USE(?Pause)
    См. также: , , , , , , ,

    ZOOM, FADE, WIPE, FALL (методы открытия экрана)

    ZOOM
    FADE
    WIPE
    FALL
    Эти атрибуты позволяют открыть экран с использованием некоторых эффектов. Только один метод может быть применен к одному экрану. Эти атрибуты не действуют в графическом режиме.
    ZOOM окно "вырастает" на экране
    FADE окно "проявляется" на экране посимвольно
    WIPE окно "втирается" в экран
    FALL окно "выпадает" на экран
    Пример:
    Screen1 SCREEN(12,12),ZOOM
    Screen2 SCREEN(25,80),FADE
    Screen3 SCREEN(50,180),WIPE
    Screen4 SCREEN(10,30),FALL

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

    ACCEPT (обработчик полей экрана)


    ACCEPT

    ACCEPT ожидает от оператора (человека :) ввода в экранные поля или выбора из PULLDOWN.
    В PULLDOWN-структуре, ACCEPT производит внутреннюю обработку выпадающих подменю. Из полей типа ITEM, могут быть выбраны только те, которые не запрещены оператором DISABLE. PULLDOWN-структура завершается только если был выбран элемент типа ITEM. По завершении, функция FIELD возвращает номер поля для данного ITEM.
    В SCREEN-структурах, ACCEPT инициирует ввод в выбранное в данный момент поле. По умолчанию, выбор полей идет в том порядке, в котором они описаны в SCREEN-структуре. Можно, но не обязательно, выбирать конкретные поля оператором SELECT. Выбраны могут быть только те поля, которые имеют USE-переменную, НЕ имеют атрибута SKIP и не запрещены оператором DISABLE.
    (С.П.А. - в дальнейшем, я буду писать не "запрещены о...", а просто "DISABLED" - англ. ЗАПРЕЩЕНЫ)
    Для полей ENTRY и TEXT, ACCEPT подсвечивает поле, показывает USE-переменную, высвечивает курсор, разрешает ввод с клавиатуры и ждет действий оператор. Когда поле завершено нормально (не по ALERT-клавише), то введенное значение деформатируется, согласно шаблону поля, и автоматически переписывается в USE-переменную.
    Для полей OPTION (STRING или RADIO) и POINT, ACCEPT подсвечивает элемент меню, разрешает ввод с клавиатуры и ждет действий оператора. Когда поле завершено, функция CHOICE() возвращает относительную позицию выбранного эелемента в OPTION- или REPEAT-структуре. Для полей типа STRING и RADIO OPTION, USE-переменная получает выбранное значение. Для полей типа POINT, индексная переменная структуры REPEAT, также, получит номер выбранного элемента.
    Для полей типа PAUSE,ACCEPT показывает параметр оператора PAUSE, разрешает ввод с клавиатуры и ждет нажатия на клавишу. Любая клавиша завершит это поле, за исключением ESC или BackTAB для НЕ-CUA экранов.
    ACCEPT производит внутреннюю обработку ESC и BackTAB только для НЕ-CUA экранов. Esc или BackTab заставляют ACCEPT выбрать для ввода предыдущее поле, или поле, заданное атрибутом ESC. Если такого поля нет, то ACCEPT издаст звуковой сигнал и останется на том же поле.
    ACCEPT также проводит внутреннюю обработку полоски-курсора в полях типа OPTION STRING, OPTION RADIO, POINT и в листбоксах (без атрибута IMM) как для CUA- так и для НЕ-CUA экранов.
    Пример:
    Screen SCREEN(5,40),PRE(Scr),COLOR(1),ZOOM,CUA,SHADOW
    ROW(2,5) ENTRY(@N3),USE(Ctl:Code)
    ROW(3,5) ENTRY(@S30),USE(Ctl:Name)
    ROW(4,15)BUTTON('OK'),USE(?OkButton),KEY(EnterKey)
    ROW(4,25)BUTTON('Отмена'),USE(?CanxButton),KEY(EscKey)
    .
    CODE
    OPEN(Screen)
    LOOP
    ACCEPT !Ввод - в каждое поле
    CASE FIELD()
    OF ?OkButton
    EXECUTE DiskAction
    ADD(Control)
    PUT(Control)
    DELETE(Control)
    .
    BREAK
    OF ?CanxButton
    IF KEYCODE() EscKey THEN RETURN.
    . .

    ALERT (установка клавиши завершения поля)


    ALERT([first-keycode][,last-keycode])


    first-keycode Числовой код клавиши или EQUATE-метка кода клавиши. Он может быть нижним пределом для диапазона кодов клавиш.
    last-keycode Аналогично first-keycode, но является ВЕРХним пределом в диапазоне кодов клавиш.

    ALERT задает клавишу или ВКЛЮЧАЮЩИЙ диапазон клавиш, как клавишу завершения поля. (С.П.А. - говоря по-русски, ALERT "взводит" клавишу(и). Поэтому, в дальнейшем, я так и буду говорить - "взведенные клавиши" или "ALERT-клавиши"). Оператор ALERT без параметровотключает все ALERT-клавиши (клавиши, взведенные атрибутом ALRT для полей экрана НЕ отменяются).
    Любая клавиша, или комбинация клавиш, имеющая код, может стать параметром оператора ALERT. Если поле завершено ALERT-клавишей, то его USE-переменная НЕ обновляется, для обновления используйте оператор UPDATE.
    Пример:
    ALERT !Отменить все взведенные клавиши
    ALERT(F1Key,F12Key) !Взвести все F-клавиши
    ALERT(279) !Взвести "клавишу" Ctrl-ESC
    См. также: UPDATE

    BEEP (звуковой сигнал динамиком)


    BEEP([частота][,длительность])


    частота Числовая константа, переменная или выражение, дающее частоту тона. Если ЧАСТОТА не задана, подразумевается 150hz.
    длительность Числовая константа, переменная или выражение, дающее время (в сотых долях секунды) звучания сигнала. Если не задана, то подразумевается 16 сотых секунды.

    Оператор BEEP заставляет динамик компьютера издать звук. Если ЧАСТОТА=0 (звука нет), то BEEP становится эффективным средством для паузы в течении заданного времени, независимо от железа.
    Пример:
    IF ERRORCODE() !Блин! Неужели ошибка?
    BEEP(200,100) ! ну тогда длинно бибикнуть
    STOP(ERROR()) ! остановиться для вывода сообщения об ошибке
    . !Конец оператора IF
    BEEP(0,200) !Просто пауза аж на целых две секунды!

    CHOICE (относительная позиция элемента)


    CHOICE([field])


    field
    EQUATE-метка поля типа LIST, OPTION, POINT.

    Функция CHOICE возвращает порядковый номер выбранного элемента в структуре OPTION, LISTбоксе или поля POINT. Будучи вызвана без параметров, CHOICE возвращает порядковый номер выбранного элемента в последнем LIST, OPTION или POINT, завершенном оператором ACCEPT.
    CHOICE возвращает порядковый номер выбранной RADIO-кнопки или поля типа STRING в структуре OPTION. Порядковый номер элемента, это его относительная позиция от начала описания структуры. Первый элемент имеет порядковый номер 1, второй - 2 и т.д.
    CHOICE возвращает номер элемента очереди (QUEUE), выбранного из листбокса.
    CHOICE возвращает позицию указателя (POINT) в REPEAT-структуре, при завершении POINT-поля. Это же значение возвращает индексная переменная (INDEX) REPEAT-структуры.
    Возвращаемый тип данных: LONG
    Пример:
    Screen SCREEN
    ROW(4,13) OPTION,USE(MenuField),REQ !Структура меню
    ROW(5,13) STRING('Добавить запись') ! элемент 1
    ROW(7,13) STRING('Изменить запись') ! элемент 2
    ROW(9,13) STRING('Удалить запись') ! элемент 3
    ROW(11,18) STRING('Выход') ! элемент 4
    .
    CODE
    LOOP
    ACCEPT
    EXECUTE CHOICE() !В зависимости от выбранного элемента
    ! выполнить то или иное действие:
    AddRec ! добавить запись
    PutRec ! просмотреть/изменить запись
    DelRec ! удалить запись
    RETURN ! закончить работу
    . .

    CLOSE (закрыть текущий экран)


    CLOSE(метка)


    метка Метка структуры SCREEN или PULLDOWN.

    CLOSE прекращает обработку текущего SCREEN или PULLDOWN. Память, занятая текущим экраном освобождается при его закрытии. Если у текущего экрана были заданы параметры СТРОК и СТОЛБЦОВ, то будет восстановлено закрытое им изображение.
    Пример:
    CLOSE(MenuScr) !Закрыть экран с меню
    CLOSE(CustEntry) !Закрыть экран ввода данных о покупателе

    COL (номер столбца)

    COL([ screen ])
    field
    variable

    screen field variable
    Метка SCREEN-структуры (экрана)
    Номер или EQUATE-метка поля
    Метка поля типа STRING

    COL без параметров, возвращает номер последнего столбца, к которому было обращение.
    Если задан параметр SCREEN, COL возвращает позицию первого столбца на этом экране. Для SCREEN без параметров ROWS и COLUMNS всегда будет возвращаться единица. Для экрана, описанного с атрибутом AT, то COL вернет значение параметра COL, заданного в AT.
    С параметрами FIELD и VARIABLE, возвращается позиция первого столбца поля. Если это поле типа POINT, то возвращаемое значение определяется положением текущего столбца в REPEAT-структуре.
    Возвращаемый тип данных: LONG
    Пример:
    SaveCol = COL(Total) !Запоминаем положение поля ИТОГО:
    SHOW(ROW(),COL()+6,Status) !Показать состояние линии
    BLANK(ROW(?),COL(?),ROWS(?),COLS(?))
    !Спрятать текущее поле

    COLS (число столбцов)

    COLS([ screen ])
    field
    variable

    screen field variable
    Метка SCREEN-структуры.
    Номер или EQUATE-метка поля.
    Метка экранного поля типа STRING.

    Функция COLS возвращает число столбцов, занятых элементом экрана. COLS без параметров, возвращает число столбцов на физическом экране (текущий текстовый режим). Если задан параметр SCREEN, то возвращается ширина экрана в столбцах.
    Если заданы параметры FIELD или VARIABLE, возвращается число столбцов, занятых полем.
    Возвращаемый тип данных: LONG
    Пример:
    R# = ROWS() !Сохраняем число строк на физическом экране
    C# = COLS() !Сохраняем число столбцов на физическом экране
    GraphicScreenProc !Вызываем процедуру, работающую в графике
    SETTEXT(R#,C#) !Восстанавливаем предыдущий текстовый режим
    SaveCols = COLS(Total) !Сохраняем ширину поля ИТОГО:
    SHOW(ROW(),COL()+COLS(?)+1,Status) !Показать состояние линии
    BLANK(ROW(?),COL(?),ROWS(?),COLS(?))
    !Спрятать текущее поле
    См. также: ,

    CONTENTS (содержимое USE-переменной)


    CONTANTS(field)


    field
    Номер или EQUATE-метка поля.

    Функция CONTENTS возвращает строку, содержащую значение USE-переменной для полей типа ENTRY, OPTION (STRING или RADIO) или TEXT.
    USE-переменная может быть длиннее, чем шаблон формата связанного с ней поля. Поля типа TEXT могут иметь произведение СТРОК*СТОЛБЦОВ меньше, чем длина их USE-переменной. CONTENTS всегда возвращает строку длиной, равной полной длине USE-переменной.
    Возвращаемый тип данных: STRING
    Пример:
    IF CONTENTS(?LastName) ='' AND CONTENTS(?FirstName)
    !Если имя и фамилия пусты
    Scr:Message = 'Must Enter a First or Last Name'
    ! вывести сообщение об ошибке
    .

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


    DISABLE(first field [,last field])


    first field Номер или EQUATE-метка поля или элемента меню для отдельного поля или для первого поля из диапазона полей.
    last field
    То же, что и FIRST FIELD, но для последнего поля из диапазона поле.

    Оператор DISABLE запрещает ввод в поле или в диапазон полей экрана или PULLDOWN-меню. Поля экрана должны иметь USE-переменные. Когда поле запрещено, оно отображается в цвете, задаваемом третьим параметром атрибута COLOR, связанного с ним, и оператор не может вводить данные в такое поле. DISABLE влияет не целиком на PULLDOWN, а только на его элементы (ITEM).
    Пример:
    Screen SCREEN(5,40),PRE(Scr).COLOR(l),ZOOM,CUA,SHADOW
    ROW(2,5) ENTRY(@N3),USE(Ctl:Code)
    ROW(3,S) ENTRY(@S30),USE(Ctl:Name)
    ROW(4,15) BUTTON('OK').USE(?OkButton),KEY(EnterKey)
    ROW(4,25) BUTTON('Cancel'),USE(?CanxButton).KEY(EscKey)
    .
    CODE
    OPEN(Screen)
    DISABLE(?Ctl:Code) !Запретить поле
    DISABLE(?Ct]:Code,?Ctl:Name) !Запретить диапазон полей
    DISABLE(2) !Запретить второе по сче-
    ! ту поле
    PuIlDown PULLDOWN
    MENU('Выход'),USE(?FirstMenu)
    ITEM('Выход в Dos'),USE(?FirstItem)
    .
    MENU('Параметры')
    ITEM('Обработать запись'),USE(?ProcRec)
    ITEM('Удалить запись'),USE('DelRec')
    . .
    CODE
    OPEN(PuIlDown,1)
    DISABLE(?FirstItem)
    !Дезактивировать первый пункт меню в PULLDOWN
    SomeProcedure ! и выполнить некую процедуру
    ENABLE(?FirstItem) !Снова активировать пункт меню
    См. также: ENABLE

    DISPLAY (вывести USE-переменные на экран)


    DISPLAY(first field [,last field])


    first field Номер или EQUATE-метка поля или элемента меню для отдельного поля или для первого поля из диапазона полей.
    last field То же, что и FIRST FIELD, но для последнего поля из диапазона поле.

    DISPLAY записывает значения USE-переменных в связанные с ними поля текущего экрана. DISPLAY без параметров, выводит на экран все USE-переменные. Если задано только FIRST FIELD, то будет выведено значение USE-переменной только для заданного поля. Если заданы и FIRST и LAST FIELD, то будут показаны значения всех USE переменных в диапазоне FIRST FIELD..LAST FIELD включительно.
    Пример:
    DISPLAY !Показать все поля
    DISPLAY(2) !Показать поле номер 2
    DISPLAY(3,7) !Показать поля с 3 по 7
    DISPLAY(?MenuField) !Показать поле-меню
    DISPLAY(?TextBlock,?Pause) !Показать поля с TextBlock по Pause
    См. также: , ,

    ENABLE (разрешить выбор затемненного ранее поля)


    ENABLE(first field [,last field])


    first field Номер или EQUATE-метка поля или элемента меню для отдельного поля или для первого поля из диапазона полей.
    last field То же, что и FIRST FIELD, но для последнего поля из диапазона поле.

    Оператор ENABLE вновь активизирует поле или диапазон полей, которые были запрещены оператором DISABLE. Реактивированное поле вновь доступно оператору для ввода.
    Пример:
    SomeScreen PROCEDURE
    Screen SCREEN,COLOR(0)
    ROW(2,3) ENTRY(@N4),USE(Fieldl),COLOR(0,1,2)
    ROW(3,3) ENTRY(@N4),USE(Field2),COLOR(0,1.2)
    .
    CODE
    OPEN(Screen)
    DISABLE(?Field2) !Field2 дезактивировано
    IF Ctl:Password = 'Supervisor'
    ENABLE(?Field2) !Реактивируем Field2
    .
    SomeMenu PROCEDURE
    PuIlDown PULLDOWN
    MENU('Quit'),USE(?FirstMenu)
    ITEM('Exit to Dos'),USE(?FirstItem)
    .
    MENU('Options')
    ITEM('Process Record'),USE(?ProcRec)
    ITEM('Delete Record'),USE('DelRec')
    . .
    CODE
    DISABLE(?FirstItem) !Запретить первый пункт меню в
    ! PULLDOWN
    SomeProcedure ! и что-то сделать
    ENABLE(?FirstItem) !Снова активизировать этот пункт
    См. также:

    ERASE (очистить поле(я) на экране и его(их) USE-переменную(ые))


    ERASE([first field][,last field])


    first field Номер или EQUATE-метка поля или элемента меню для отдельного поля или для первого поля из диапазона полей.
    last field То же, что и FIRST FIELD, но для последнего поля из диапазона поле.

    ERASE очищает поля экрана и соответствующие им USE-переменные. ERASE без параметров очищает все поля на экране. Если задано только first field, то ERASE очистит конкретную USE-переменную и связанное с ней поле. Если заданы и first и last field, то будут очищены поля и USE-переменные в диапазоне от first field до last field включительно.
    Пример:
    ERASE(?) !Очистить текущее поле
    ERASE !Очистить все поля на экране
    ERASE(3,7) !Очистить поля с 3 по 7
    ERASE(?Name,?Zip) !Очистить все от ИМЕНИ до ИНДЕКСА
    ERASE(?City.?City+2) !Очистить ГОРОД и два поля после него
    См. также:

    FIELD (последнее завершенное поле)


    FIELD()

    Функция FIELD возвращает номер поля, к которому было обращение последний раз. Компилятор присваивает положительные номера полям экрана, использующим USE-переменные в том порядке, в котором они описаны в SCREEN-структуре. Отрицательные номера присваиваются всем элементам типа MENU и ITEM в PULLDOWN-структуре. В текстах программ номера полей, обычно, заменяются на EQUATE-метки полей или EQUATE-метки элементов меню.
    Возвращаемый тип данных: LONG
    (А.С.П - Что говорит о возможном количестве полей на экране...)
    Пример:
    Screen SCREEN
    ROW(4,13) ENTRY(@N4),USE(Fieldl)
    ROW(5,13) ENTRY(@N4),USE(Field2)
    ROW(6,13) ENTRY(@N4),USE(Field3)
    ROW(7,13) ENTRY(@N4),USE(Field4)
    .
    CODE
    LOOP
    ACCEPT
    CASE FIELD() !Управление редактированием
    ! полей
    OF ?Field1 !Поле номер 1
    IF Field1 = 0 ! если пусто,
    BEEP ! звуковой сигнал
    SELECT(?) ! и повторить ввод
    .
    OF ?Field2 !Поле номер 2
    IF Field2 > 4 ! если СУММА больше 4
    Scr:Message = 'Сумма должна быть меньше 4'
    ERASE(?) ! очистить поле
    SELECT(?) ! и вновь редактировать его
    ELSE ! значение допустимо?
    CLEAR(Scr:Message) ! очистить строку сообщений
    .
    OF ?Field4 !Поле номер 4
    BREAK ! закончить цикл обработки
    . . !Конец операторов CASE и LOOP

    FIELDS (число полей на экране)


    FIELDS()

    Функция FIELDS возвращает число полей, использующих USE-переменные, в текущей SCREEN-структуре. Если не открыто ни одного экрана, то FIELDS возвращает ноль.
    Возвращаемый тип данных: LONG
    Пример:
    SELECT(FIELDS()) !Выбрать последнее поле
    ERASE(?,FIELDS()) !Очистить остающиеся поля

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


    GETSTYLES([файл])


    файл Строковая константа или переменная содержащая спецификацию файла с Кодами Цветовых Стилей. Если этот параметр опущен, то будет установлен стандартный набор цветов.

    GETSTYLES читает файл стилей и присваивает внутреннему массиву Цветовых Стилей значения из этого файла. Если файл не найден, то GETSTYLES игнорируется и внутренний массив кодов цветовых стилей остается неизмененным.
    Массив кодов цветовых стилей это внутренний 256-байтный массив, который хранит текущие коды цветовых стилей. Его элементы нумеруются от 0 до 255. Каждый элемент инициализируется значением, равным его номеру (элемент 0=0, элемент 1=1..элемент 255=255). Каждый атрибут для SCREEN and PULLDOWN, который использует коды цветовых стилей, обращается к этому массиву и определяет настоящие цвета дисплея, хранящиеся в элементе массива.
    file это текстовый ASCII-файл. Каждая строка содержит один Код Цветового Стиля в четырех полях, разделенных запятыми. Первое поле - номер элемента внутреннего массива. Второе - Код Цветового Стиля для данного элемента (ТОЛЬКО десятичный а НЕ 16ричный!) при наличии цветного дисплея. Третье поле это код цвета для монохромного дисплея, и четвертое поле необязательное описание. Например, файл стилей может выглядеть так:
    0,0,0,Черный на Черном
    1,112,112,Окно на экране
    2,63,112,Заголовок экрана
    3,115,7,Рамка экрана
    4,113,7,Нормальный PROMPT
    5,116,7,Текущий PROMPT
    6,127,112,Горячая клавиша в PROMPT
    7,127,112,Горячая клавиша в текущем PROMPT
    8,126,7,Поле для ввода
    9,7,112,Текущее поле для ввода
    В файле стилей может быть от 1 до 256 строк и они не обязаны располагаться по порядку номеров элементов. Изменяться будут только те элементы массива, которые указаны в файле.
    Считая, что есть цветной дисплей и используя вышеприведенный файл, атрибут экранного поля COLOR(1,2,3,4,5) будет задавать следующие цвета:
    112 (Черный на Белом) для нормального текста
    63 (ЯркоБелый на Салатном) если это поле активно
    115 (Зеленый на Белом) когда поле затенено
    113 (Синий на Белом) для заданного амперсандом хоткея
    116 (Красный на Белом) для хоткея активного поля
    Пример:
    Файл STYLES.DEF содержит:
    0,31,7.ЯркоБелый на Синем/Белый на Черном
    1,48,112,Черный на Салатном/Черный на Белом
    2,23,8,Белый на Синeм/Серый на Черном
    Текст программы содержит:
    PROGRAM
    Screen SCREEN,COLOR(0) !Цвет по умолчанию Черный на Черном
    ROW(2,3) ENTRY(@N4),USE(Field1),COLOR(0,1,2)
    ROW(3,3) ENTRY(@N4),USE(Field2).COLOR(0,1.2)
    .
    CODE
    GETSTYLES('styles.def')!Прочитать файл styles.def
    OPEN(Screen) !Экран - Ярко-Белый на Синем
    !Field1 - Черный на Салатном (активное поле)
    !Field2 - Белый на Синем (затененное поле)
    DISABLE(?Field2)
    См. также: ,

    HELP (доступ к окну подсказки)


    HELP([helpfile][,window-id])


    helpfile Строковая константа или метка строковой переменной, содержащей спецификацию файла с окнами подсказки. Если в спецификации не задан путь к файлу, то подразумевается, что файл в текущем каталоге. Если опущено расширение файла, то подразумевается ".hlp". Если вообще не задан файл, то надо использовать запятую, чтобы показать, что этот параметр опущен.
    window-id Строковая константа или метка строковой переменной (до 20 символов) которая содержит идентификатор окна подсказки.

    Оператор HELP открывает указанный файл подсказки и активизирует окно с именем WINDOW-ID. Во время работы операторов ASK или ACCEPT, текущее окно подсказки можно вызвать нажатием клавиши F1. Файлы подсказки создаются утилитой Кларион HELPER.
    Если пропущен WINDOW-ID, то файл открывается, но никакое окно не активизируется. Если параметр HELPFILE не задан, то подразумевается, что файл уже открыт и активизируемое окно определяется параметром WINDOW-ID. Окна подсказки также активизируются атрибутом HLP для SCREEN или для элемента экрана. Без параметров, HELP показывает текущее окно подсказки.
    (А.С.П. - Для тех, кто не знает. Если окна помощи связаны в цепочку, то можно бегать по ним клавишами PgUp/PgDn. Примером такой связи может служить справочная система CPD 2.1x)
    Пример:
    HELP('C:\HLPDIR\LEDGER.HLP') !Открыть файл подсказки LEDGER
    HELP(,'CustUpd') !Подсказка по внесению изменений в список
    !покупателей
    HELP !Показать текущее окно подсказки
    См. также: , ,

    IDLE (периодически вызываемая процедура)


    IDLE([procedure][,separation])


    procedure Метка оператора PROCEDURE. Процедура должна описываться в MAP программы, но НЕ в MAP для модуля-члена.
    separation Целое число секунд, задающее минимальный
    промежуток между обращениями к ПРОЦЕДУРЕ. 0
    означает, что, по возможности, обращение к
    ней должно идти непрерывно. Если SEPARATION
    не задано, то по умолчанию - 1.

    IDLE-процедура активна во время работы операторов ASK или ACCEPT или функции ENTRY. В один момент времени может быть активна только одна IDLE-процедура. Задание новой IDLE-процедуры, отменяет старую. Оператор IDLE без параметров отменяет обращения к IDLE-процедуре.
    (А.С.П. - с помощью этой функции, например, можно выводить на экран ИДУЩИЕ часы, вообще, организовывать работу по прерываниям от таймера, хотя и достаточно примитивную)
    Пример:
    IDLE(ShoTime,10) !Вызывать shotime каждые 10 секунд
    IDLE(CheckNet) !Проверять активность ЛВС каждую секунду
    IDLE !Отключить IDLE-процедуру
    См. также: , , , ,

    LOADSYMBOLS (загрузка псевдографики)


    LOADSYMBOLS([string])


    string Строковая константа или переменная задающая модифицируемые символы. Если пропущено, то модифицируются символы по умолчанию.

    Процедура LOADSYMBOLS загружает "графические" символы для курсора мышки, RADIO-кнопок и CHECK-боксов, изменяя знакогенератор для текстового режима 25*80. LOADSYMBOLS НЕ влияет на прочие текстовые режимы, устанавливаемые процедурой SETTEXT.
    Указанные в STRING символы заменяются на символы, представляющие курсор мышки как стрелку, RADIO-кнопки как "бычьи глаза" (когда кнопка выбрана) и CHECK-боксы как квадраты с буквой "Х" внутри (когда чекбокс активен). Желательно, чтобы символы в STRING не использовались где-либо еще в программе.
    Если STRING пропущена, то модифицируется определенный набор символов, которые, обычно, редко используются. "Графические" символы для RADIO-кнопок и чекбоксов используют только два знакоместа, в то время, как обычное представление требует трех знакомест (т.е. (+) и [Х]). Коды символов должны задаваться в следующем порядке:

    Экранная "графика" Коды по умолчанию Вид на экране
    Курсор мышки 1 Стрелка
    RADIO выкл 198, 2, 32 Кружок
    RADIO вкл 207, 5, 32 Кружок с точкой
    CHECK выкл 209, 11, 32 Квадрат
    CHECK вкл 211, 19, 32 Квадрат с "Х"

    (А.С.П. - "1" для мышки это не опечатка, в книге так и стоит...)
    При завершении программы, знакогенератор восстанавливается в исходном виде. Также, знакогенератор восстанавливается на время выполнения процедур RUN и RUNSMALL.
    Если вы хотите использовать "графику" собственного изготовления, то загрузите свой знакогенератор какой-либо утилитой. После загрузки знакогенератора, используйте функцию USESYMBOLS, чтобы указать, какие именно символы использовать.USESYMBOLS аналогична LOADSYMBOLS, за исключением того, что она не модифицирует знакогенератор.
    Пример:
    LOADSYMBOLS !Использовать стандартный на-
    !бор символов
    LOADSYMBOLS('<1,198,2,33,207,5,32,209,11,32,211,19,32>')
    !Использовать стандартный на-
    !бор символов
    LOADSYMBOLS('<170>') !Код ASCII 170 для мышки,
    ! остальное - стандартно.
    LOADSYMBOLS('<228,229,230,231,232,233,234,235,236,237,238,239| ,240>')
    !Использовать коды от 228 до 240
    См. также:

    OPEN (открыть экран для обработки)


    OPEN(label[,value])


    метка value
    Метка структуры SCREEN или PULLDOWN.
    Числовая константа или переменная. Этот параметр используется только с PULLDOWN-структурами.

    OPEN открывает SCREEN для обработки. Только ОДИН SCREEN может быть активен. Когда SCREEN-структура открыта, отображаются ее инициализированные строки и первое поле структуры становится активным. USE-переменные должны выводиться оператором DISPLAY.
    OPEN открывает PULLDOWN-структуру для обработки, но не активизирует ее. PULLDOWN-структура становится активной при щелчке мышкой на ее элементе или нажатии горячей Alt-клавиши, заданной для MENU или ITEM. PULLDOWN может быть активизирована, когда при ее открытии нет экранных полей, которые можно активизировать.
    Если есть параметр VALUE, и он не равен нулю, то оператор OPEN немедленно показывает полосу меню. Полоса меню остается на экране до закрытия меню, независимо от того, активно меню или нет, (по крайней мере, до тех пор, пока ее не закроет другое изображение). Если VALUE пропущено или ноль, то полоса меню появится только при нажатии Alt-клавиши.
    Пример:
    OPEN(MenuScr) !Открыть экран меню
    OPEN(CustEntry) !Открыть экран ввода сведений о
    ! покупателях
    OPEN(PullDown,1) !Полоса меню всегда видна

    REFER (было обращение к полю или нет)


    REFER()

    Функция REFER возвращает 1 (истина) если было обращение к последнему завершенному полю, или 0 (ложь) если обращения не было. Обращение происходит при вводе любого печатного символа, выборе поля OPTION или POINT или передвижении указателя в листбоксе. REFER возвращает истину, даже если в поле были введены те же символы, что и были в нем раньше.
    Возвращаемый тип данных: LONG
    Пример:
    Screen SCREEN
    ROW(4,13) ENTRY(@N4),USE(Fieldl) !Поле для ввода
    ROW(5,13) ENTRY(@N4),USE(Field2) !Поле для ввода
    ROW(6,13) ENTRY(@N4),USE(Field3) !Поле для ввода
    ROW(7,13) ENTRY(@N4),USE(Field4) !Поле для ввода
    .
    CODE
    LOOP
    ACCEPT
    CASE FIELD() !Управление редактированием
    ! полей
    OF ?Field1 !Поле номер 1
    IF Field1 = 0 ! если пусто,
    BEEP ! звуковой сигнал
    SELECT(?) ! и повторить ввод
    .
    OF ?Field4 !Поле номер 4
    BREAK ! закончить цикл обработки
    . . !Конец операторов CASE и LOOP

    ROW (номер строки)

    ROW([ screen ])
    field
    variable

    screen field variable
    Метка SCREEN-структуры.
    Номер или EQUATE-метка поля.
    Метка поля типа STRING.

    ROW без параметров возвращает номер последней строки, к которой произошло обращение. Если задан параметр SCREEN то ROW возвращает физический номер строки для первой строки экрана. Для SCREEN без параметров ROWS и COLUMNS, всегда возвращается 1. Если экран описан с атрибутом AT, то ROW возвращает значение параметра ROW заданного в AT.
    Для параметров FIELD и VARIABLE возвращается номер первой строки поля (поля типа TEXT, BUTTON, LIST и IMAGE могут занимать несколько строк). Если поле типа POINT, то возвращаемое значение определяется текущей строки в REPEAT-структуре.
    Возвращаемый тип данных: LONG
    Пример:
    SaveRow = ROW(Total) !Save row of screen total
    SHOW(ROW(),COL()+6,Status) !Display the line status
    BLANK(ROW(?),COL(?),ROWS(?).COLS(?))
    !Blank out the current field

    ROWS (число строк)

    ROWS([ screen ])
    field
    variable

    screen field variable
    Метка SCREEN-структуры.
    Номер или EQUATE-метка поля.
    Метка поля типа STRING.

    Функция ROWS возвращает высоту элемента экрана в строках. Без параметров возвращает высоту физического экрана (текущий текстовый режим). Если задан параметр SCREEN, то возвращается высота текущего экрана.
    Если заданы параметры FIELD или VARIABLE, то возвращается высота поля в строках. Поля типа TEXT, BUTTON, LIST, IMAGE и POINT могут иметь высоту более чем в одну строку.
    Возвращаемый тип данных: LONG
    Пример:
    R# = ROWS() !Сохраняем число строк на физическом экране
    C# = COLS() !Сохраняем число столбцов на физическом экране
    GraphicScreenProc !Вызываем процедуру, работающую в графике
    SETTEXT(R#,C#) !Восстанавливаем предыдущий текстовый режим
    Y#=ROW(Screen1)+(ROWS(Screen1)/2)!Вычисляем центральную строку
    X#=COL(Screen1)+(COLS(Screen1)/2)!--//-- центральный столбец
    SHOW(Y#-1,X#-1,'') !Обращение к видеопамяти из центра Screen1
    OPEN(Screen2) !Открываем Screen2 в центре Screen1
    BLANK(ROW(?),COL(?),ROWS(?),COLS(?))
    !Спрятать текущее поле
    См. также: ,

    SELECT (выбрать поле для обработки)


    SELECT([field][,cursor position])


    field cursor position
    Номер поля или его EQUATE-метка для поля,
    подлежащего обработке.
    Задает позицию в поле, куда поместить курсор. Для полей ENTRY и TEXT, это номер символа. Для OPTION RADIO, OPTION STRING, или OPTION CHECK это номер выбора в структуре OPTION. Для LIST это номер элемента QUEUE.

    SELECT изменяет нормальный порядок обработки полей экрана. Параметр FIELD задает поле, подлежащее обработке. SELECT НЕ работает с полями в PULLDOWN.
    SELECT без параметров, переводит экран в "безостановочный" режим - завершение ВСЕХ полей экрана без ввода в них оператором. Каждое поле завершается в обычном порядке. Цикл оператора SELECT НЕ останавливается на последнем поле. Он переходит к первому и так далее до закрытия экрана. "Безостановочный" режим SELECT прекращается при одном из следующих обстоятельств:
    SELECT(?) прекращает цикл SELECT и позволяет оператору ре-
    дактировать текущее поле.
    Обнаружено пустое или нулевое поле с атрибутом REQ. Звучит
    сигнал, и возобновляется нормальный порядок обработки по-
    лей с поля с атрибутом REQ.
    Пример:
    LOOP !Обычный цикл обработки экрана
    ALERT(CtrlEnter) !Взвести хоткей
    ACCEPT !Принять ввод данных
    IF KEYCODE() = CtrIEnter !При нажатии хоткея
    SELECT(?) ! начат с того же самого поля
    SELECT ! и перейти в безостановочный
    CYCLE ! режим прямо сейчас
    .
    IF FIELD() = ?State !Если редактируемое поле - ШТАТ,
    IF State <> 'FL' AND State <> 'GA'
    ! и введен неправильный штат,
    BEEP ! то предупредить звуковым сигналом
    SELECT(?) ! остаться на этом поле (и отменить
    ! безостановочный режим)
    . . . !Конец операторов LOOP и IF
    См. также: , , ,

    SELECTED (выбранное для обработки поле)


    SELECTED()

    Функция SELECTED возвращает номер выбранного в данный момент поля. Это поле, которое оператор ACCEPT будет обрабатывать следующим. Значение функции SELECTED обычно определяется "естественным" порядком выбора полей, который используется оператором ACCEPT (порядок, в котором поля описаны в SCREEN-структуре). Этот порядок можно изменить, используя оператор SELECT.
    Возвращаемый тип данных: LONG
    Пример:
    SavField = SELECTED() !Сохранить положение текущего поля
    IF SELECTED() = ?Cus:Company AND Cus:CustType - 'ЧАСТНИК'
    SELECT(?Name) !Пропустить поле КОМПАНИЯ если счет
    !принадлежит физическому лицу
    .
    См. также: ,

    SETAREA (установить размер виртуального экрана)


    SETAREA(строк,столбцов)


    строк столбцов
    Числовая константа, которая задает число строк на виртуальном экране. Максимум - 255. Тем не менее, произведение СТРОК и СТОЛБЦОВ НЕ должно превышать 32767.
    Числовая константа, которая задает число столбцов на виртуальном экране. Максимум - 255. Тем не менее, произведение СТРОК и СТОЛБЦОВ НЕ должно превышать 32767.

    SETAREA задает размер области памяти для виртуального экрана. Она определяет область, в пределах которой может перемещаться физический экран. SETAREA ничего не выводит, так что ее можно использовать, когда экран уже открыт. Оператор имеет доступ только к той части экрана, которая попадает в заданную область.
    SETAREA требуется, когда открытый экран (без параметров строк/столбцов) имеет размер больше, чем ранее определенный виртуальный экран, или больше чем 25 x 80. Если SCREEN(строк,столбцов) больше, чем размер виртуального экрана, то виртуальная область автоматически переопределяется, настраиваясь на больший размер. Однажды установленный размер виртуальной области, остается без изменений, пока его не переопределит больший экран или процедура SETAREA.
    Если задать SETAREA с размером меньшим, чем у текущего экрана, все, что не попадает в новую, меньшую, область, становится недоступным оператору для ввода. Если затем задать SETAREA с нормальными параметрами, то поля, отсеченные ранее, вновь станут доступны. Тем не менее, все рамки, цвета и надписи сотрутся.
    Пример:
    Screen SCREEN,PRE(Scr),COLOR(1) !Экран 50строк на 160 столбцов
    описания полей для этого экрана
    .
    CODE
    SETAREA(50,160) !Установить размер виртуального экрана
    OPEN(Screen) ! и открыть его

    SETMSG (задать строку сообщений экрана)


    SETMSG(row,col,length)


    row col length
    Целочисленная константа, переменная или выражение, которое задает номер строки на виртуальном экране.
    Целочисленная константа, переменная или выражение, которое задает номер столбца на виртуальном экране.
    Целочисленная константа, переменная или выражение, которое задает число символов в строке сообщений.

    SETMSG описывает область экрана для вывода сообщений от атрибутов MSG. Если все три параметра равны нулю, то восстанавливается строка сообщений по умолчанию.
    По умолчанию, строка сообщений размещается внизу экрана, с первого столбца 25-ой строки и имеет длину 80 символов.
    Пример:
    Screen SCREEN(25,80),EXPAND(5)
    ROW(3,5) ENTRY(@N4),USE(Fieldl),MSG('Первое поле ввода')
    ROW(4,5) ENTRY(@N4),USE(Field2),MSG('Следующее поле')
    .
    CODE
    OPEN(Screen)
    SETMSG(25,25,30) !Строка сообщений на 25 строке экрана
    !экрана имеет длину 30 символов.
    SETTEXT(43,80) !Переходим в режим 43 строки
    SETMSG(0,0,0) !Строка сообщений - по умолчанию
    !строка 43, столбец 1, длина 80
    См. также:

    SETSTYLES (установить Коды Цветовых Стилей)


    SETSTYLES(program array)


    program array
    Массив из 256 элементов типа BYTE, или STRING(256).

    SETSTYLES присваивает значения, содержащиеся в PROGRAM ARRAY внутреннему массиву кодов цветовых стилей. Это дает возможность "на лету" изменять цветовую гамму программы.
    Внутренний массив кодов цветовых стилей - 256-байтный массив, хранящий текущие коды цветовых стилей. Его элементы нумеруются от 0 до 255. Каждый элемент, изначально, имеет значение, равное его номеру (эл-т[0]=0, эл-т[1]=1..эл-т[255]=255). Каждый атрибут и оператор, использующий коды цветовых стилей, обращается к этому массиву и определяет цвета для конкретного кода цветового стиля.
    Но, поскольку, массивы Кларион нумеруются с единицы, то SETSTYLES присваивает первый элемент PROGRAM ARRAY нулевому элементу внутреннего массива кодов цветовых стилей, второй - первому...
    Пример:
    StyleCodes STRING(256) !Программный массив
    StyleArray BYTE,DIM(256),OVER(StyleCodes)
    Screen SCREEN,COLOR(0) !По умолчанию - цвет черный на черном
    ROW(2,3) ENTRY(@N4),USE(Fieldl),COLOR(0,1,2)
    ROW(3,3) ENTRY(@N4),USE(Field2),COLOR(0,1,2)
    .
    CODE
    StyleCodes = STYLES() !Получаем текущие стили
    StyleArray[1] = 31 !ЯркоБелый на Синем
    StyleArray[2] = 48 !Черный на Салатном
    StyleArray[3] = 23 !Белый на Синем
    SETSTYLES(StyleArray) !Установить новые стили
    OPEN(Screen) !Экран теперь ЯркоБелый на Синем
    ! Field1 - Черный на Салатном (активное)
    DISABLE(?Field2) !Field2 - Белый на Синем (затененное)
    См. также: , ,

    SHOWIMAGE (показать .PCX или .GIF)


    SHOWIMAGE(row,col,[rows],[cols],file,usepal)


    row col rows cols file usepal
    Строка, в которой начать вывод PCX или GIF.
    Столбец, в котором начать вывод PCX или GIF.
    Высота рисунка в строках. Если пропущено, то столько, сколько нужно для размещения рисунка.
    Ширина рисунка в столбцах. Если пропущено, то столько, сколько нужно для размещения рисунка.
    Строковая константа или переменная содержащая имя PCX или GIF файла.
    Целочисленная константа или переменная. Если 0, то используется 256-цветная палитра .PCX или .GIF. Если НЕ-ноль, то используется 256-цветная палитра ранее выведенного рисунка (или стандартные аппаратные установки).

    SHOWIMAGE это низкоуровневая команда для вывода рисунка в формате PCX или GIF без поля типа IMAGE. Экран должен быть в графическом режиме, так что сначала надо открыть SCREEN с атрибутом GRAPHIC. Атрибуты ROWS и COLS могут быть опущены, но запятые, отмечающие пропущенные параметры, должны быть обязательно. Если атрибуты ROWS и COLS пропущены, то рисунок выводится в полный размер. При необходимости, рисунок масштабируется.
    Поддерживаются графические режимы EGA, VGA и SVGA. CGA и Hercules НЕ поддерживаются. Поддерживаются все 16-цветные режимы. На 16-цветных адаптерах, 256-цветные PCX и GIF выводятся в 16-цветном режиме. Режим SVGA 256 цветов поддерживается со следующим оборудованием (минимальная конфигурация):

    Марка видеокарты Разрешение Требуемая память
    TSENG Chip Set Video7 / Headland Ahead Systems Paradise VESA Trident Everex Zymos Genoa
    640 x 350 512K
    640 x 400 256K
    640 x 400 256K
    640 x 400 256K
    640 x 400 256K
    640 x 400 256K
    640 x 400 256K
    640 x 400 256K

    Пример:
    Screen SCREEN(25,80).COLOR(0),GRAPHIC.
    CODE
    OPEN(Screen) !Открыть фиктивный графический экран
    SHOWIMAGE(1,1,25,80,'logo.pcx',0)
    !Вывести эмблему в полный экран

    STYLES (возвращает внутренний массив Цветовых Стилей)


    STYLES()

    Функция STYLES возвращает 256-байтную строку, содержащую текущие значения внутреннего массива кодов цветовых стилей.
    Внутренний массив кодов цветовых стилей - 256-байтный массив, хранящий текущие коды цветовых стилей. Его элементы нумеруются от 0 до 255. Каждый элемент, изначально, имеет значение, равное его номеру (эл-т[0]=0, эл-т[1]=1..эл-т[255]=255). Каждый атрибут и оператор, использующий коды цветовых стилей, обращается к этому массиву и определяет цвета для конкретного кода цветового стиля.
    Массивы Кларион нумеруются начиная с единицы, а внутренний массив кодов цветовых стилей нумеруется с нуля. Поэтому, первый элемент строки соответствует НУЛЕВОМУ элементу массива, второй первому и т.п.
    Возвращаемый тип данных: STRING(256)
    Пример:
    StyleCodes STRING(256) !Программный массив стилей
    StyleArray BYTE,DIM(256),OVER(Sty]eCodes)
    !Рассматриваем строку как массив
    Screen SCREEN,COLOR(0) !Цвет по умолчанию черный на черном
    ROW(2,3) ENTRY(@N4),USE(Fieldl),COLOR(0,1,2)
    ROW(3,3) ENTRY(@N4),USE(Field2),COLOR(0,1,2)
    .
    CODE
    StyleCodes = STYLES() !Получить текущие стили
    StyleArray[1] = 31 !ЯркоБелый на Синем - код стиля: 0
    !Элемент программного массива #1 соответствует элементу #0
    !внутреннего массива
    StyleArray[2] = 48 !Черный на Салатном - код стиля: 1
    StyleArray[3] = 23 !Белый на Синем - код стиля: 2
    SETSTYLES(StyleCodes) !Перезаписать массив стилей
    OPEN(Screen) !Экран будет ЯркоБелый на синем. Полей
    !черное на салатном (активное)
    DISABLE(?Field2) !Field2 белое на синем (затененное)
    См. также: , ,


    UPDATE (записать данные с экрана в USE-переменные)


    UPDATE([first field][,last field])


    first field last field UPDATE UPDATE UPDATE(first field)UPDATE(first field,last field)
    Номер поля или EQUATE-метка поля для первого поля в диапазоне полей.
    Номер поля или EQUATE-метка поля для последнего поля в диапазоне полей.
    записывает содержимое полей экрана в их USE-переменные.
    Обновляет USE-переменные всех полей экрана.
    Обновляет USE-переменную конкретного поля.
    Обновляет USE-переменные полей в диапазоне от first field до last field.

    USE-переменные автоматически обновляются оператором ACCEPT при заполнении полей. Тем не менее, поля заполненный ALERT-клавишами НЕ обновляют USE-переменные автоматически. Для этого и служит оператор UPDATE.
    Пример:
    UPDATE(?) !Обновить USE-переменную текущего поля
    UPDATE !Обновить все USE-переменные
    UPDATE(?Address) !Обновить USE-переменную для АДРЕСА
    UPDATE(3,7) !Обновить USE-переменные полей с 3 по 7
    UPDATE(?Name,?Zip) !Обновляем поля от ИМЕНИ по самый ИНДЕКС
    UPDATE(?City,?City+2) !Обновляем ГОРОД и два поля после него
    См. также:

    USESYMBOLS (графические мышка, кнопки и рамочки)


    USESYMBOLS([string])


    string
    Строковая константа или переменная, задающая используемые символы. Если не задана, то используется стандартный набор.

    Процедура USESYMBOLS делает представление курсора мышки, радиокнопок и чекбоксов графическим, используя подгружаемый знакогенератор.
    Если вы хотите использовать свои изображения для вышеуказанных элементов, вы можете загрузить их заранее какой-либо утилитой. Когда знакогенератор загружен, вызывайте USESYMBOLS для того, чтобы указать, какие символы (коды ASCII) были вами заменены. USESYMBOLS аналогична LOADSYMBOLS, но она не модифицирует уже загруженный знакогенератор.
    Желательно, чтобы символы с кодами, указанными в STRING НЕ использовались где-либо еще в программе, так как это может привести к очень интересным но неприятным эффектам.
    Если STRING не задана, то используется стандартный набор символов для псевдографики.
    Подробности смотри в описании LOADSYMBOLS.
    При завершении программы, знакогенератор приводится в первоначальный вид. Также, он восстанавливается во время исполнения RUN или RUNSMALL.
    Пример:
    USESYMBOLS !Стандартный набор символов
    USESYMBOLS('<1,198,2,33,207,5,32,209,11,32,211,19,32>')
    !Тоже самое, что и выше
    USESYMBOLS('<170>') !Код ASCII 170 для мышки, остальное стан-
    ! дартно.
    USESYMBOLS('<228,229,230,231,232,233,234,235,236,237,238,239,| 240>')
    !Используем символы от228 до 240
    См. также:

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

    ALLOW (контроль висячей строки)


    ALLOW(value)


    value Целочисленная константа или переменная, содержащая число строк.

    Атрибут ALLOW разработан для подавления "сирот", висячих строк, при печати. VALUE задает минимальное число строк, которое должно оставаться для печати DETAIL-структур после печати заголовков, подножий и других DETAIL-структур. Если для размещения DETAIL-структуры не хватает строк, то происходит ПЕРЕПОЛНЕНИЕ СТРАНИЦЫ.
    Допустим, у отчета LENGTH(60) и 50 строк уже напечатано на странице (внутренний счетчик строк=51). Если подножие занимает 3 строки, то для DETAIL-структур остается 7 строк. Если DETAIL-структура занимает 5 строк, то все нормально - ей хватит места. Если же у DETAIL-структуры есть атрибут ALLOW(5), то произойдет ПЕРЕПОЛНЕНИЕ СТРАНИЦЫ перед печатью DETAIL-структуры. Элементарная арифметика: осталось 7 строк, минус 5 (которые займет сама DETAIL-структура) получим две. А 2, это несколько меньше, чем 5, требуемых атрибутом ALLOW(5).
    Для вычисления свободного места на странице используются еще и значения атрибутов SEPARATE.
    Пример:
    CustRpt REPORT,LENGTH(60) !60 строк на странице отчета
    Head HEADER
    !описания элементов структуры
    .
    GroupHead DETAIL,ALLOW(5) !Must allow 5 CustDetail lines
    !5 строк - элементы структуры ! after the group header
    .
    CustDetail DETAIL !Элементы DETAIL
    !1 строка - элемент структуры
    .
    Foot FOOTER !Это подножие занимает до 3 строк
    !3 строки - элементы структуры
    .
    . !Конец описаний отчета


    ALONE (структуру DETAIL печатать без HEADER/FOOTER)


    ALONE

    Этот атрибут говорит о том, что DETAIL-структуру надо печатать одну на странице без каких-либо HEADER и FOOTER. Возможное использование титульные листы отчетов и страницы ИТОГО.
    Пример:
    CustRpt REPORT !Отчет по покупателям
    Head HEADER ! начало описания заголовка
    !описания элементов структуры
    . ! конец описания заголовка
    TitlePage DETAIL,ALONE !DETAIL-структура титульного
    !листа
    !описания элементов структуры
    . ! конец описания DETAIL
    CustDetail DETAIL ! начало описания DETAIL
    !описания элементов структуры
    . ! конец описания DETAIL
    Foot FOOTER ! начало описания подножия
    !описания элементов структуры
    . . ! конец подножия и отчета


    APPEND (дописывает выводимое в конец файла)

    APPEND

    APPEND работает вместе с атрибутом DEVICE. Если в качестве устройства для печати задано имя файла, то параметр APPEND не позволит стереть существующий файл, отчет будет дописан в конец файла.
    Пример:
    Report REPORT,DEVICE('MYFILE.RPT'),APPEND
    !Печать дописыванием в конец фай-
    ! ла.
    !описания элементов отчета
    .


    CLIP (отсечь хвостовые пробелы)


    CLIP

    Атрибут CLIP удаляет из поля хвостовые пробелы.
    Пример:
    CustRpt REPORT
    CustDetail DETAIL,SEPARATE(l)
    ROW(2,5) STRING(15),USE(FirstName),CLIP
    !FirstName в стр.2 стлб.5
    ! усекается и сразу за ним
    STRING(' ') ! идет один пробел
    STRING(1),USE(Initial)
    !Initial в следующем стлб.
    ! За ним идет точка и еще
    STRING('. ') ! один пробел
    STRING(15),USE(LastName)
    !LastName в следующем стлб.
    COL(45) STRING(@P(###)###-####P),USE(Phone)
    !Phone в стр.2 стлб.45
    . .


    CLOSE (закрыть текущий отчет)


    CLOSE(report)


    report Метка структуры REPORT.

    Оператор CLOSE печатает структуру FOOTER (если, конечно, последняя напечатанная структура DETAIL не имела атрибута ALONE), закрывает отчет и его выходной файл (если атрибут DEVICE указывал на файл). RETURN из процедуры, открывшей отчет, неявно вызывает CLOSE.
    Пример:
    CLOSE(CustRpt) !Закрыть отчет


    COL (столбец)


    COL(column)


    column Целочисленная константа, которая задает абсолютный номер столбца для полей типа STRING, TEXT или CONTROL, которые находятся в одной строке с полем, описанным ранее.

    COL используется для размещения полей в строке в структурах HEADER, DETAIL или FOOTER. COL порождает пробелы, чтобы заполнить промежутки между полями.
    Пример:
    CustRpt REPORT !Отчет по покупателям
    CustDetail DETAIL,SEPARATE(l) ! начало описания DETAIL
    ROW(2.5) STRING(15),USE(FirstName)
    !FirstName в стр.2, стлб.5
    COL(22) STRING(I).USE(Initial) !Initial в стлб.22
    COL(24) STRING(15),USE(LastName)
    !LastName в стлб.24
    ROW(3) STRING(30),USE(Address)
    !Address в стр.3 стлб.1
    . ! конец описания DETAIL
    . !Конец описаний отчета


    CONTROL (управляющая последовательность для принтера)

    | length |
    [метка] CONTROL( |constant| )[,USE()]
    | picture|

    length Целочисленная константа. Должна быть такой же, как и длина USE-переменной.
    constant Строковая константа, посылаемая на принтер.
    picture Форматирует значение, присвоенное CONTROL-полю, или значение USE-переменной. LENGTH это размер, достаточный для хранения ОТФОРМАТИРОВАННОЙ строки. Изначально, PICTURE заполнена пробелами.
    USE Переменная, содержащая управляющую последовательность. Должна быть такой длины, какая задана параметром LENGTH.

    CONTROL задает символьную строку, которая управляет действиями принтера. CONTROL-поле не влияет на положение полей типа STRING или TEXT. Однако, это поле может использоваться для изменения управляющих кодов для любых следующих за ним полей типа STRING или TEXT (СПА: здесь я совсем не уверен, как перевести fields that occur following the CONTROL declaration.)
    Если у CONTROL есть атрибут USE, то на принтер посылается управляющая последовательность, которая содержится в USE-переменной. Таким образом можно хранить последовательности для разных типов принтеров, и присваивать USE-переменной нужную для используемого в данный момент принтера.
    Если у отчета есть атрибут PRINTER, то строковая константа или USE-переменная должна содержать имя принтера, как он описан в файле управления принтерами (PRINTER.CTL).
    Пример:
    PrinterType STRING('EPSON LQ-1500')
    ItalicOn STRING('ITALIC ON')
    CustRpt REPORT,PRINTER(PrinterType) !Отчет по покупателям
    CustDetail DETAIL,SEPARATE(1) ! начало описания DETAIL
    ROW(2,5) CONTROL(4),USE(ItalicOn)
    !Управляем из переменной
    !ItalicOn - включить курсив
    ROW(2,5) STRING(15),USE(FirstName)
    COL(22) STRING(15),USE(LastName)
    ROW(3,1) CONTROL('COMPRESSED ON')
    !А этот Control из printer.ctl
    ROW(3) STRING(30),USE(Address)
    . . !Конец описаний отчета
    См. также:


    DETAIL(тело отчета)

    [метка] [DETAIL[ALLOW()][ALONE][FIXED][PRE()][SEPARATE()]
    [ROW()]
    [COL()]
    [SUPPRESS()]
    [метка] [STRING()]
    [метка] [TEXT()]
    [метка] [CONTROL()]
    .]

    ALONE Структура DETAIL ДОЛЖНА печататься без заголовков или подножий.
    ALLOW Сколько строк, как минимум, оставить на странице для печати DETAIL-структур.
    FIXED Объявляет DETAIL как структуру фиксированной длины.
    PRE Префикс для элементов DETAIL-структуры.
    SEPARATE Сколько строк пропустить после DETAIL.
    ROW Номер строки для полей типа STRING, TEXT или CONTROL.
    COL Номер столбца для полей типа STRING, TEXT или CONTROL.
    SUPPRESS Не печатать строку, если она пустая.
    STRING Поле, содержащее значение переменной или символьная константа.
    TEXT Многострочное символьное поле.
    CONTROL Управляющая последовательность принтера.

    DETAIL-структура, это строки, составляющие тело отчета. Она должна заканчиваться точкой или оператором END. В отчете может быть несколько DETAIL-структур.
    DETAIL-структура НИКОГДА не печатается автоматически, следовательно, она ДОЛЖНА быть явно напечатана оператором PRINT. Из-за этого, каждая DETAIL-структура отчета должна иметь свою метку.
    DETAIL-структура может быть напечатана при необходимости. Поэтому можно иметь несколько DETAIL-структур, что даст возможность, скажем печатать необязательные заголовки и подножия для групп или печатать разные формы в зависимости от печатаемых данных.
    Пример:
    CustRpt REPORT !Отчет о покупателях
    Head HEADER ! начало описания заголовка
    !описания элементов структуры
    . ! конец описания заголовка
    GroupHead DETAIL ! начало описания DETAIL
    !описания элементов структуры
    . ! конец описания DETAIL
    CustDetail DETAIL ! начало описания DETAIL
    !описания элементов структуры
    . ! конец описания DETAIL
    . !Конец описаний отчета
    См. также:


    DEVICE (задает устройство, на которое вывести отчет)


    DEVICE(имя)


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

    Атрибут отчета DEVICE задает устройство, на которое будет выводиться отчет. Если ИМЯ не является именем стандартного устройством DOS, подразумевается, что это имя файла. Если ИМЯ, это имя файла, то файл создается на указанном диске в указанном каталоге. Если диск и/или каталог не заданы, то файл создается в текущем каталоге текущего диска. Если заданный файл уже существует, то он будет замещен новым, если отчет не будет иметь атрибута APPEND. Если спецификация файла некорректна, то DEVICE игнорируется и отчет печатается на LPT1. Если ИМЯ - CON, то отчет будет выводиться на экран, начиная с текущей позиции курсора. Можно использовать SETCURSOR для установки курсора перед его выводом на экран. Отчеты могут быть выведены на следующие стандартные устройства ДОС:
    CON Консоль
    PRN Первый параллельный порт
    LPT1 Первый параллельный порт
    LPT2 Второй --/-- --/--
    LPT3 Третий --/-- --/--
    AUX Первый последовательный порт
    COM1 Первый последовательный порт
    COM2 Второй последовательный порт
    NUL Пустое устройство
    Пример:
    Report REPORT,DEVICE('LPT2') !Отчет - на второй принтер
    Report1 REPORT,DEVICE('C:\REPORTS\CUSTLST.RPT')!Отчет - в файл
    Report2 REPORT,DEVICE(DeviceName)!Имя устройства хранится в пе-
    ! ременной DEVICENAME
    См. также:


    FIXED (структура фиксированной длины)


    FIXED

    FIXED используется совместно с оператором SUPPRESS. Он гарантирует, что структура ВСЕГА будет занимать заданное число строк на странице. Хорошим примером этому могут служить почтовые этикетки, для которых иногда надо подавлять пустые строки, но сами этикетки должны иметь постоянную длину. FIXED дополняет структуру таким же количеством пустых строк, какое было пропущено оператором SUPPRESS (по-английски SUPRESSed :).
    Пример:
    CustRpt REPORT !Отчет по покупателям
    Head HEADER ! начало описания заголовка
    !описания элементов структуры
    . ! конец описания заголовка
    GroupHead DETAIL ! начало описания DETAIL
    !описания элементов структуры
    ! конец описания DETAIL
    .
    CustDetail DETAIL,FIXED ! detail фиксированной длины
    !описания элементов структуры
    . ! конец описания DETAIL
    Foot FOOTER ! начало описания подножия
    !описания элементов структуры
    . . ! конец подножия и отчета


    FOOTER (подножие страницы, нижний колонтитул)

    [метка] [FOOTER[ALLOW()][FIXED][PRE()][SEPARATE()]
    [ROW()]
    [COL()]
    [SUPPRESS()]
    [метка] [STRING()]
    [метка] [TEXT()]
    [метка] [CONTROL()]
    .]

    ALLOW Сколько строк, как минимум, оставить на странице для печати DETAIL-структур.
    FIXED Объявляет FOOTER как структуру фиксированной длины.
    PRE Префикс для элементов FOOTER-структуры.
    SEPARATE Сколько строк пропустить после подножия.
    ROW Номер строки для полей типа STRING, TEXT или CONTROL.
    COL Номер столбца для полей типа STRING, TEXT или CONTROL.
    SUPPRESS Не печатать строку, если она пустая.
    STRING Поле, содержащее значение переменной или символьная константа.
    TEXT Многострочное символьное поле.
    CONTROL Управляющая последовательность принтера.

    Структура FOOTER содержит строки, которые печатаются в конце каждой страницы. FOOTER-структура ДОЛЖНА заканчиваться точкой или оператором END. В отчете может быть только одно подножие.
    FOOTER автоматически печатается внизу страницы при переполнении страницы. Можно явно отпечатать подножие оператором PRINT. Подножие автоматически печатается внизу последней страницы при закрытии отчета, кроме того случая, когда последняя напечатанная DETAIL-структура не имела атрибута ALONE.
    Пример:
    CustRpt REPORT !Отчет по покупателям
    Head HEADER ! начало описания заголовка
    !описания элементов структуры
    . ! конец описания заголовка
    GroupHead DETAIL ! начало описания DETAIL
    !описания элементов структуры
    . ! конец описания DETAIL
    CustDetail DETAIL ! начало описания DETAIL
    !описания элементов структуры
    . ! конец описания DETAIL
    Foot FOOTER ! начало описания подножия
    !описания элементов структуры
    . ! конец описания подножия
    . !Конец описаний отчета

    HEADER (заголовок страницы, верхний колонтитул)

    [метка] [HEADER[ALLOW()][FIXED][PRE()][SEPARATE()]
    [ROW()]
    [COL()]
    [SUPPRESS()]
    [метка] [STRING()]
    [метка] [TEXT()]
    [метка] [CONTROL()]
    .]

    ALLOW Сколько строк, как минимум, оставить на странице для печати DETAIL-структур.
    FIXED Объявляет заголовок фиксированной длины.
    PRE Префикс для элементов HEADER-структуры.
    SEPARATE Сколько строк пропустить после заголовка.
    ROW Номер строки для полей типа STRING, TEXT или CONTROL.
    COL Номер столбца для полей типа STRING, TEXT или CONTROL.
    SUPPRESS Не печатать строку, если она пустая.
    STRING Поле, содержащее значение переменной или символьная константа.
    TEXT Многострочное символьное поле.
    CONTROL Управляющая последовательность принтера.

    В HEADER-структуре задаются строки, которые печатаются в начале каждой страницы. HEADER-структура должна завершаться точкой или оператором END. В отчете может быть только один заголовок. Заголовок может быть явно выведен на печать оператором PRINT. Если этого не было, то он автоматически печатается при печати первой же структуры DETAIL, у которой нет атрибута ALONE. Заголовок автоматически печатается при переполнении страницы.
    Пример:
    CustRpt REPORT !Отчет о покупателях
    Head HEADER ! начало описания заголовка
    !элементы заголовка
    . ! конец описания заголовка
    . !Конец описаний отчета
    См. также:


    LENGTH (число строк на странице)


    LENGTH(value)


    value Целочисленная константа или переменная.

    Атрибут LENGTH задает максимальное число строк на странице. Автоматический переход на новую страницу происходит на основании значения VALUE. Если VALUE=0, то отслеживание переполнения страницы выключается. VALUE минус число_строк_для_HEADER_и_FOOTER будет числом строк, доступным для печати DETAIL-структур.
    Некоторые принтеры сами отслеживают длину страницы. Если VALUE больше или равно внутренней длине страницы принтера, то может произойти неожиданный перевод формата.
    Пример:
    CustRpt REPORT,LENGTH(60) !В отчете 60 строк на странице
    !описания элементов отчета
    . !Конец описаний отчета
    CustRpt2 REPORT,LENGTH(RptLength)!Число строк на странице хра-
    !нится в переменной RptLength
    !описания элементов отчета
    . !Конец описаний отчета
    См. также:


    LFT, RHT, CENT (методы выравнивания полей)


    LFT
    RHT
    CENT

    LFT выравнивает влево, RHT - вправо, а CENT центрирует текст в поле. Эти атрибуты разрешены с полями типа STRING и TEXT.
    Пример:
    CustRpt REPORT
    Head HEADER,SEPARATE(1)
    ROW(2,25) STRING(30),USE(Company).CENT
    . !Центрировать название фирмы
    CustDetail DETAIL,SEPARATE(1)
    ROW(2,5) STRING(15),USE(FirstName),RHT
    !Имя выровнять вправо
    COL(22) STRING(1).USE(Initial)
    COL(24) STRING(15),USE(LastName),LFT
    !а фамилию - влево
    . .


    LINE (переменная - счетчик строк)


    LINE(variable)


    variable Метка числовой переменной.

    Атрибут отчета LINE задает переменную, которая станет счетчиком строк. При открытии отчета, эта переменная получает значение 1 и сбрасывается в единицу при каждом переполнении страницы. По мере печати HEADER, DETAIL или FOOTER, переменная увеличивается на число напечатанных строк. Эту переменную можно использовать, например, для нумерации строк отчета.
    Пример:
    CustRpt REPORT,LINE(LineNbr) !Счетчик - переменная LineNbr
    !описания элементов отчета
    . !Конец описаний отчета
    См. также:


    OPEN (открыть отчет для обработки)


    OPEN(report)


    report Метка структуры REPORT.

    OPEN активизирует структуру REPORT. Вы должны открыть отчет прежде, чем сможете напечатать какую-либо структуру типа HEADER, DETAIL или FOOTER. К переменным отчета (полям с метками) можно обращаться НЕзависимо от того, открыт отчет или нет.
    Пример:
    OPEN(CustRpt) !Открыть отчет


    PAGE (переменная - счетчик страниц)


    PAGE(variable)


    variable Метка числовой переменной.

    Атрибут отчета PAGE задает переменную, которая будет использоваться как счетчик страниц. Эту переменную можно будет использовать для печати номера текущей страницы. При открытии отчета, переменная устанавливается в единицу, и увеличивается при переполнении страницы или под управлением программы.
    Пример:
    CustRpt REPORT,PAGE(PageCount) !Счетчик страниц - PageCount
    !описания элементов отчета
    . !Конец описаний отчета


    Переполнение страницы

    Переполнение страницы происходит, когда PRINT не может разместить структуру DETAIL на странице или когда недостаточно места, чтобы после структуры DETAIL оставить столько места, сколько задано ее атрибутом ALLOW. Ниже описано, что происходит при ПЕРЕПОЛНЕНИИ СТРАНИЦЫ.
    Если есть FOOTER, то добавляются переводы строк так, чтобы FOOTER попал в самый низ страницы (согласно атрибуту LENGTH). Затем печатается собственно FOOTER.
    Счетчик страниц увеличивается, а счетчик строк сбрасывается в единицу.
    Если есть HEADER, то он печатается и счетчик строк увеличивается на число строк, занятых под FOOTER.

    PRINT (напечатать элемент отчета)

    PRINT( |structure|)
    | string |

    structure Метка структуры HEADER, DETAIL или FOOTER.
    string Строковое выражение, переменная или символ управления принтером. Этот параметр игнорирует атрибут DEVICE и выводит строку на устройство PRN (LPT1).

    Оператор PRINT выводит элемент отчета на заданное атрибутом DEVICE устройство. PRINT автоматически увеличивает счетчики строк и страниц и вызывает, при необходимости, переполнение страницы.
    PRINT также может вывести строку непосредственно на LPT1.
    Пример:
    PRINT( 'Итого:'& FORMAT( Filetot @N10.2) & @LF)
    !Печатаем ИТОГО и ПС на LPT1
    PRINT(@FF) !Выбросить лист (ПФ) из LPT1
    PRINT(OrderDtl) !Вывести строку из счета на DEVICE
    См. также: ,


    PRINTER (логическая поддержка принтера)


    PRINTER(name)


    name Строковая константа, переменная или выражение содержащая имя принтера, в том виде, в котором оно задано в файле описаний принтеров.

    PRINTER задает логическую поддержку принтера для отчета. Параметр NAME содержит имя принтера, используемого для печати отчета, в том виде, в каком это имя заданно в файле описаний принтеров.
    Файл описаний принтеров, по умолчанию, PRINTER.CTL. Можно изменить это имя, задав переменную окружения CLAPRINTER. Она может быть задана: в файле конфигурации программы (.INI-файле), в командной строке при выполнении программы, оператором SETCOMMAND или оператором ДОС SET.
    Пример:
    Report REPORT,PRINTER('EPSON LQ-1500')
    !Используем Epson LQ-1500
    !описания элементов отчета
    .
    CODE
    SETCOMMAND(' CLAPRINTER=Control.Prn')
    !Меняем файл описаний принтеров
    OPEN(Report)
    См. также: SETCOMMAND


    REPORT (описывает структуру отчета)

    метка REPORT[APPEND][DEVICE()][LENGTH()][LINE()][PAGE()]
    [PRE()][PRINTER()][WIDTH()]
    [метка] [HEADER[ALLOW()][FIXED][PRE()][SEPARATE()]
    [ROW()]
    [COL()]
    [SUPPRESS()]
    [метка] [STRING()]
    [метка] [TEXT()]
    [метка] [CONTROL()]
    .]
    [метка] [DETAIL[ALLOW()][ALONE][FIXED][PRE()][SEPARATE()]
    [ROW()]
    [COL()]
    [SUPPRESS()]
    [метка] [STRING()]
    [метка] [TEXT()]
    [метка] [CONTROL()]
    .]
    [метка] [FOOTER[ALLOW()][FIXED][PRE()][SEPARATE()]
    [ROW()]
    [COL()]
    [SUPPRESS()]
    [метка] [STRING()]
    [метка] [TEXT()]
    [метка] [CONTROL()]
    .]
    .

    APPEND Дописать отчет в конец файла.
    DEVICE Устройство для вывода отчета.
    LENGTH Максимальное число строк на странице.
    LINE Переменная - счетчик строк.
    PAGE Переменная - счетчик страниц.
    PRE Префикс отчета или элемента отчета.
    PRINTER Название принтера из файла описаний принтеров.
    WIDTH Максимальная длина строки.
    HEADER Заголовок страницы.
    DETAIL Тело отчета.
    FOOTER Подножие страницы.
    ALLOW Задает минимальное число строк, которое надо пропустить после печати данного элемента отчета.
    ALONE Описывает отчет без заголовков или подножий.
    FIXED Описывает структуру фиксированной длины.
    SEPARATE Задает число пустых строк между элементами отчета.
    ROW Задает строку.
    COL Задает столбец.
    SUPPRESS Подавляет печать пустого элемента.
    STRING Переменная или символьная константа.
    TEXT Многострочное символьное поле.
    CONTROL Управляющий код принтера.

    Оператор REPORT задает начало структуры-отчета. HEADER, DETAIL и FOOTER это подструктуры, из которых формируется отчет. Отчет должен быть явно открыт оператором OPEN. Элементы открытого отчета можно выводить на печать оператором PRINT. При переполнении страницы могут автоматически печататься структуры HEADER и FOOTER. Поскольку этот документ - руководство по языку, то все атрибуты и операторы, связанные с отчетами, мы рассмотрим ниже более подробно. Обычно, отчеты Кларион "рисуются" с помощью средств форматирования РЕДАКТОРА ТЕКСТОВ и ГЕНЕРАТОРА ПРИЛОЖЕНИЙ с гарантированно правильным синтаксисом. При этом становится необязательным ручное создание структур отчетов.

    (А.С.П.


    (1) - Под выводом на печать подразумевается не только вывод на
    принтер, но и на любое устройство, пригодное для вывода
    сформированного отчета, например файл или экран.
    (2) - На данный момент (19.05.94) у меня есть версия Clarion Da-
    taBase Developer 3.007.105, в которой "ручное создание"
    отчетов, а точнее правка того, что в них наворотил ДИЗАЙ-
    НЕР, далеко не необязательна!)
    Пример:
    CustRpt REPORT !Отчет по покупателям
    !описания элементов отчета
    . !Конец описания отчета

    ROW (строка)


    ROW(row[,column])


    row Целочисленная константа, которая задает абсолютный номер строки для полей типа STRING, TEXT или CONTROL в составе структур HEADER, DETAIL или FOOTER.
    column Целочисленная константа, которая задает абсолютный номер столбца в столбце для полей типа STRING, TEXT или CONTROL в составе структур HEADER, DETAIL или FOOTER.

    ROW используется для управления размещением полей в структурах HEADER, DETAIL или FOOTER. Для размещения поля в заданном месте структуры, ROW порождает переводы строк, возвраты каретки и пробелы.
    Если пропущен параметр COLUMN, то поле помещается в первый столбец указанной строки. Параметр COLUMN порождает пробелы, как заполнитель для промежутков между полями.
    Пример:
    CustRpt REPORT !Отчет по покупателям
    CustDetail DETAIL,SEPARATE(1) ! начало описания DETAIL
    ROW(2,5) STRING(20),USE(Cus:Name)
    !Cus:Name в строке 2 столбце 5
    ROW(3) STRING(30),USE(Address)
    !Address at row 3 col 1
    . ! конец описания DETAIL
    . !Конец описаний отчета


    ROWS (количество строк)


    ROWS(structure)


    structure Метка структуры REPORT.

    Функция ROWS возвращает число строк, которые займет при печати тот или иной элемент отчета (HEADER, DETAIL или FOOTER). Результат НЕ включает в себя значение атрибута SEPARATE, но строки с атрибутом SUPPRESS учитываются.
    Возвращаемый тип данных: LONG
    Пример:
    IF Length - Line > ROWS(Detail)
    !Хватит ли места, чтобы распечатать
    ! Detail целиком?
    PRINT(Detail) ! если да, то печатаем
    ELSE ! если нет, то
    PRINT(Footer) ! сначала перейдем на новую страницу
    PRINT(Header) !
    PRINT(Detail) ! а уже затем напечатаем Detail
    .


    SEPARATE (промежуток между элементами отчета)


    SEPARATE(value)


    value Целочисленная константа или переменная.

    Параметр атрибута SEPARATE задает число пустых строк, которые должны быть напечатаны сразу же после структуры.
    Пример:
    CustRpt REPORT !Отчет по покупателям
    Head HEADER ! начало описания заголовка
    !описания элементов структуры
    . ! конец описания заголовка
    GroupHead DETAIL,SEPARATE(2) !
    !описания элементов структуры
    ! конец описания DETAIL
    .
    CustDetail DETAIL,SEPARATE(1) ! начало описания DETAIL
    !описания элементов структуры
    . ! конец описания DETAIL
    Foot FOOTER ! начало описания подножия
    !описания элементов структуры
    . . ! конец подножия и отчета

    Шаблоны управляющих кодов принтера

    @FF[n] Перевод листа (ПФ, Form feed, FF, ASCII 12)
    повторить n раз, затем выдать ВК.
    @LF[n] Перевод строки (ПС, Line feed, LF, ASCII 10)
    повторить n раз.
    @CR[n] Возврат каретки (ВК, Carriage return,
    ASCII 13) повторить n раз.
    n Целочисленная константа, задающая сколько
    раз повторить этот код. По умолчанию - один.
    Шаблоны управляющих кодов принтера представляют собой общие последовательности управления принтером. Аналогично шаблонам формата, шаблоны управления принтером начинаются со знака @. Эти шаблоны можно использовать совместно с оператором PRINT.
    Пример:
    PRINT(@LF3) ! 3 ПС
    PRINT(@CR4) ! 4 ВК
    PRINT(@FF) ! 1 ПФ


    STRING (переменная отчета)

    | length | |LFT | |UPR|
    [метка] STRING(|constant|)[,USE][,|RHT |][,|LWR|][,CLIP]
    | picture| |CENT| |CAP|

    length Числовая константа, задающая длину строки. В этом случае строка состоит из пробелов.
    constant Строковая константа. Длина строки становится равной длине константы.
    picture Используется для форматирования значения строки или ее USE-переменной. В этом случае длина строки это размер, достаточный для хранения отформатированной строки. Изначально строка заполняется пробелами.
    USE Задает переменную, со значением которой оперирует STRING.
    LFT, RHT, CENT Задает способ выравнивания текста в строке: влево, вправо или по центру соответственно.
    UPR, LWR, CAP Задает режим капитализации строки - верхний регистр, нижний регистр, первая буква заглавная.
    CLIP Указывает, что из строки надо удалять хвостовые пробелы.

    STRING описывает переменную отчета в позиции, заданной ROW или COL в структурах HEADER, DETAIL или FOOTER. Если не заданы ROW или COL, то STRING печатается в первом столбце справа от предыдущего поля. Если STRING имеет метку, то к ней можно обратиться, когда структура REPORT открыта или закрыта.
    Пример:
    CustRpt REPORT,PRINTER(PrinterType)!Отчет по покупателям
    CustDetail DETAIL,SEPARATE(1) ! начало описания DETAIL
    ROW(2,5) STRING(15),USE(FirstName),CLIP
    STRING(' ')
    STRING(1),USE(Initial)
    STRING('. ')
    STRING(15),USE(LastName)
    ROW(3,5) STRING(30),USE(Address)
    .
    ProdDetail DETAIL
    ROW(1) STRING('Товар:')
    !Печатаем строковую константу
    COL(10) STRING(@n3),USE(Itm:ProductNbr)
    COL(20) STRING(@n2),USE(Itm:Quantity)
    ExtPrice COL(34) STRING(12) !форматируется программой (?)
    .
    .


    SUPPRESS (не печатать элемент, если он пустой)


    SUPPRESS(строка)


    строка Номер строки, которую НЕ печатать.

    SUPPRESS задает строку, которая не печатается, если все переменные на ней пусты. Обычно используется с атрибутом FIXED.
    Пример:
    CustLabels REPORT !Почтовые этикетки
    CustDetail DETAIL,FIXED !detail постоянной длины
    ROW(2,5) STRING(15),USE(Company)
    ROW(3,5) STRING(1).USE(Contact)
    ROW(4,5) STRING(15),USE(Addressl)
    ROW(5,5) STRING(15),USE(Address2)
    Citystzip ROW(6,5) STRING(15)
    SUPPRESS(5) !Поле Address2 пусто?
    !Не печатать строку 5
    . . !конец detail и отчета

    TEXT (многострочное поле отчета)

    |LFT | |UPR|
    [метка] TEXT(rows,colomns)[,USE()][,|RHT |][,|LWR|][,|CLIP|]
    |CENT| |CAP| |WRAP|

    rows Сколько строк (максимум) печатать.
    s
    USE Задает переменную, со значением которой оперирует STRING.
    LFT, RHT, CENT Задает способ выравнивания текста в строке: влево, вправо или по центру соответственно.
    UPR, LWR, CAP Задает режим капитализации строки - верхний регистр, нижний регистр, первая буква заглавная.
    CLIP Указывает, что из строки надо удалять хвостовые пробелы.
    WRAP Разрешить перенос слов.

    Поле типа TEXT позволяет печатать многострочные тексты. ROWS задает максимальную высоту в строках, COLUMNS - ширину в столбцах. USE-перемене разделяются на сегменты по COLUMNS символов. Печатается до ROWS сегментов. Если сегментов меньше чем ROWS, то печатаются только сегменты, содержащие данные.
    Пример:
    CustRpt REPORT,PRINTER(PrinterType) !Отчет по покупателям
    ProdDetail DETAIL !Declare the detail line
    ROW(1) STRING('Product:')
    COL(10) STRING(@n3),USE(Itm:ProductNbr)
    COL(20) STRING(@n2),USE(Itm:Quantity)
    ExtPrice COL(34) STRING(12)
    ROW(2,5) TEXT(5,50),USE(Pro:Desc)
    ! 50 столбцов, до 5 строк
    . !End detail
    . !Конец описаний отчета

    UPR, LWR, CAP (методы капитализации)


    UPR
    LWR
    CAP

    Поля типа STRING, TEXT или CONTROL с атрибутом UPR выводят все буквы заглавными. Атрибут LWR печатает все в нижнем регистре. Атрибут CAP выводит текст в формате ИМЕНИ первая буква каждого слова заглавная, а остальные - строчные.
    Пример:
    CustRpt REPORT
    Head HEADER,SEPARATE(1)
    ROW(2,25) STRING(30),USE(Company),CENT,UPR
    !заглавными
    ROW(3,25) STRING(30),USE(Motto),CENT,LWR
    !прописными
    .
    CustDetail DETAIL,SEPARATE(1)
    ROW(2,5) STRING(15).USE(FirstName),CAP
    !Как имя
    COL(22) STRING(l),USE(Initial),UPR!Заглавными
    COL(24) STRING(15),USE(LastName),CAP
    !Как имя
    ROW(3) STRING(30),USE(Address)
    . .


    USE (переменная, связанная с полем)


    USE(variable)


    variable Метка переменной.

    Атрибут USE задает переменную, значение которой передается в поля отчета STRING, TEXT или CONTROL. Когда оператором PRINT или при переполнении страницы, печатаются структуры HEADER, DETAIL, или FOOTER, значения USE-переменных печатаются в связанных с ними полях STRING, TEXT или CONTROL.
    Пример:
    CustRpt REPORT
    Head HEADER
    ROW(1,1) CONTROL(5),USE(Boldon)
    ROW(2,25) STRING(30),USE(Company),CENT,UPR
    !Заглавными
    ROW(3.1) CONTROL(5),USE(BoldOff)
    ROW(3,25) STRING(30).USE(Motto),CENT,LWR!Строчными
    .
    CustDetail DETAIL,SEPARATE(1)
    ROW(2,5) STRING(15),USE(FirstName)
    COL(22) STRING(1),USE(Initial)
    COL(24) STRING(15).USE(LastName)
    ROW(3) STRING(30),USE(Address)
    .
    ProdDetail DETAIL
    ROW(1) STRING('Product:')
    COL(10) STRING(@n3),USE(Itm:ProductNbr)
    COL(20) STRING(@n2),USE(Itm:Quantity)
    ExtPrice COL(34) STRING(12)
    ROW(2,5) TEXT(5,50),USE(Pro:Desc)
    .
    . !Конец описаний отчета


    WIDTH (максимальная ширина страницы)


    WIDTH(value)


    value Целочисленная константа от 1 до 255.

    Атрибут WIDTH задает максимальное количество символов в самой длинной строке отчета. Значение VALUE используется форматером отчетов для горизонтального позиционирования и центрирования.
    Пример:
    CustRpt REPORT,WIDTH(80) !Report, max width 80 columns
    !описания элементов отчета
    . !Конец описаний отчета

    WRAP (разрешить перенос слов)


    WRAP

    Атрибут WRAP разрешает перенос слов в полях типа TEXT. Перенос слов гарантирует, что слова, не вмещающиеся в текущую будут перенесены в начало следующей, для чего в конец текущей строки добавляются пробелы.
    Пример:
    CustRpt REPORT,PRINTER(PrinterType)
    ProdDetail DETAIL
    ROW(1) STRING('Product:')
    COL(10) STRING(@n3),USE(Itm:ProductNbr)
    COL(20) STRING(@n2),USE(Itm:Quantity)
    ExtPrice COL(34) STRING(12)
    ROW(2,5) TEXT(5,50),USE(Pro:Desc),WRAP
    !Разрешен перенос слов
    . .

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

    ADD (добавить новую запись)


    ADD(файл,[длина])


    файл Метка файла.
    длина Целочисленная константа, переменная или выражение, содержащее число байт, записываемых в файл. ДЛИНА должная быть больше нуля но не больше длины структуры RECORD. Если ДЛИНА пропущена или выходит за разрешенный диапазон, то она сбрасывается до длины структуры RECORD.

    Оператор ADD создает в файле новую запись и заполняет ее данными из буфера структуры RECORD. При выполнении ADD, обновляются все ключевые файлы (НЕ индексы!). Если происходит какая-либо ошибка, то запись не добавляется в файл. Конкретное действие ADD зависит от файлового драйвера.
    Если на диске не хватает места для размещения новой записи, то возвращается ошибка "Доступ запрещен".
    Возвращаемые ошибки:
    05 Доступ запрещен
    37 Файл еще не открыт
    40 Такой ключ уже есть
    Пример:
    ADD(Customer) !Заносим данные о новом
    ! покупателе
    IF ERRORCODE() THEN STOP(ERROR()). !и проверяем на нали-
    ! чие ошибок.

    APPEND (добавить новую запись)


    APPEND(файл[,длина])


    файл Метка файла.
    длина Целочисленная константа, переменная или выражение, содержащее число байт, записываемых в файл. ДЛИНА должная быть больше нуля но не больше длины структуры RECORD. Если ДЛИНА пропущена или выходит за разрешенный диапазон, то она сбрасывается до длины структуры RECORD.

    Оператор APPEND вводит в файл данных новую запись из буфера, выделенного под структуру RECORD. Ключевые файлы НЕ обновляются. После добавления записи командой APPEND, надо перестроить ключи командой BUILD. Обычно APPEND используется для пакетного добавления нескольких записей в один прием (С.П.А - без обновления ключе, добавление записи, разумеется, происходит быстрее).
    Если на диске не хватает места для размещения новой записи, то возвращается ошибка "Доступ запрещен". Конкретное действие APPEND зависит от файлового драйвера.
    Возвращаемые ошибки:
    05 Доступ запрещен
    37 Файл еще не открыт
    Пример:
    LOOP UNTIL EOF(InFile) !Обработка входного файла
    NEXT(InFile) ! читаем все записи подряд
    IF ERRORCODE() THEN STOP(ERROR()). ! Есть ошибки?
    Cus:Record = Inf:Record !Копируем данные в буфер файла
    ! покупателей
    APPEND(Customer) ! и ДОБАВЛЯЕМ новую запись в
    ! этот файл
    IF ERRORCODE() THEN STOP(ERROR()). ! Есть ошибки?
    . !Конец цикла обработки
    BUILD(Customer) !А теперь перестроим ключи...
    См. также:

    BINARY (MEMO содержит двоичные данные)


    BINARY

    Атрибут МЕМО-поля BINARY указывает на то, что MEMO-поле может содержать не только текстовые, но и двоичные данные. Обычно, этот атрибут используется для хранения в МЕМО-полях небольших картинок, которые можно выводить в IMAGE-полях на экране.
    Пример:
    Names FILE,DRIVER('Clarion'),PRE(Nam),
    NameKey KEY(Nam:Name)
    NbrKey KEY(Nam:Number)
    Picture MEMO(48000),BINARY !Двоичное поле длиной
    ! до 48,000 байт
    Rec RECORD
    Name STRING(20)
    Number SHORT
    См. также: , IMAGE

    BOF (начало файла)


    BOF(файл)


    файл Метка файла.

    Функция BOF возвращает НЕнулевое значение (истину), если операторами PREVIOUS или SKIP(-count) была прочитана или пропущена самая первая запись последовательности. В противном случае возвращается ноль (ложь).
    Функция BOF наиболее часто используется для проверки условия в цикле LOOP UNTIL. Поскольку условие выполнения этого цикла вычисляется в НАЧАЛЕ цикла, то BOF вернет ИСТИНУ после прочтения первой записи последовательности.
    Тип возвращаемого результата: LONG
    Пример:
    SET(Trn:DateKey) !Пляшем от конца файла по ключу
    LOOP UNTIL BOF(Trans) !Обрабатываем файл с конца
    PREVIOUS(Trans) ! последовательно читая записи
    IF ERRORCODE() THEN STOP(ERROR()).
    DO LastInFirstOut ! вызываем процедуру LIFO
    . !Конец цикла
    См. также: , , LOOP

    BUILD (построить ключи и/или индексы для файла)

    | ключ |
    BUILD( |индекс| [,компоненты])
    | файл |

    ключ Метка описания КЛЮЧА.
    индекс Метка описания ИНДЕКСА.
    файл Метка описания ФАЙЛА.
    компоненты Строковая константа или переменная, содержащая список полей, на основе которых построить динамический ИНДЕКС. Имена полей должны разделяться запятыми, перед именем поля должен стоять знак плюс или минус, чтобы задать сортировку по возрастанию или по убыванию.

    Оператор BUILD строит ключи и индексы. BUILD(ключ), BUILD(индекс) и BUILD(файл) требуют монопольного доступа к файлу. Т.е., файл должен быть заблокирован (через LOCK) или открыт с кодом доступа 12h (ВСЕМ кроме меня запрещено чтение/запись) или 22h (ВСЕМ кроме меня запрещена запись). BUILD(индекс,компоненты) НЕ требует монопольного доступа к файлу.

    BUILD(ключ)
    BUILD(индекс)
    Строит только указанный КЛЮЧ или ИНДЕКС. Файл должен быть закрыт, заблокирован или открыт в режиме 12h или 22h.
    BUILD(файл) Строит все КЛЮЧИ или ИНДЕКСЫ ФАЙЛА. Файл должен быть закрыт, заблокирован или открыт в режиме доступа 12h или 22h.
    BUILD(индекс,компоненты) Позволяет строить динамический ИНДЕКС. Эта форма BUILD не требует монопольного доступа к файлу, тем не менее файл должен быть открыт в любом разрешенном режиме доступа. Динамический ИНДЕКС создается как временный файл только для строящего его пользователя. Этот временный файл автоматически удаляется при закрытии файла.

    Возвращаемые ошибки:
    37 Файл еще не открыт
    40 Такой ключ уже есть
    63 Требуется монопольный доступ
    76 Неверные параметры для индекса
    Пример:
    Names FILE,DRIVER('Clarion'),PRE(Nam)!Описание структуры файла
    NameKey KEY(Nam:Name).OPT !Описание ключа по имени
    NbrNdx INDEX(Nam:Number),OPT !Описание индекса по но-
    ! меру
    DynNdx INDEX() !Описываем динамический
    ! индекс
    Rec RECORD
    Name STRING(20)
    Number SHORT
    . .
    CODE
    OPEN(Names,12h) !Открываем файл с исключительным
    ! правом чтения/записи
    BUILD(Names) !Строим все ключи для файла имен
    BUILD(Nam:NbrNdx) !Строим индекс по номеру
    BUILD(Nam:DynNdx.'-Nam:Number,+Nam:Name')
    !Строим динамический индекс - по номеру с убыванием,
    ! по имени с возрастанием.
    См. также: ,

    BYTES (размер файла в байтах)


    BYTES(файл)


    файл Метка файла.

    Функция BYTES возвращает размер в байтах либо файла, либо последней записи, к которой было обращение. Если выполнить BYTES сразу после открытия файла, то она вернет размер этого файла. После того, как к файлу обратились операторами GET, NEXT, ADD или PUT, BYTES верней размер в байтах записи, прочитанной в структуру RECORD. Функцию BYTES можно использовать для того, чтобы узнать, сколько было прочитано байт при работе с записями переменной длины.
    Пример:
    OPEN(DosFile) !Открыть файл
    IF (BYTES(DosFile) % 80) > 0 !Check for short record
    SavPtr = INT(BYTES(DosFile)%80)+1
    ! compute short record pointer
    ELSE
    SavPtr = BYTES(DosFile)/80 ! compute last record pointer
    .
    GET(DosFile,SavPtr) !Get the last record
    LastRec = BYTES(DosFile) !Save size of the short record

    CLOSE (закрыть файл данных)


    CLOSE(файл)


    файл Метка ФАЙЛА.

    Оператор CLOSE закрывает ФАЙЛ. Обычно, это вызывает сброс дисковых буферов на диск и освобождение памяти, выделенной под них, кроме буфера, хранящего данные структуры RECORD. Точный порядок закрытия файла зависит от файлового драйвера.
    Пример:
    CLOSE(Customer) !Закрыть файл покупателей

    COMMIT (завершить успешно проведенную транзакцию)


    COMMIT

    Оператор COMMIT завершает активную транзакцию. Выполнение оператора COMMIT подразумевает, что транзакция успешно завершена и не возникнет необходимость выполнения ROLLBACK. После выполнения COMMIT, выполнение ROLLBACK становится НЕВОЗМОЖНЫМ.
    COMMIT информирует участвующий в транзакции файловый драйвер о том, что временные файлы, необходимые для приведения базы в исходное состояние (как было до транзакции), можно удалять. После этого, файловый драйвер производит действия, необходимые в его файловой системе для завершения транзакции.
    Пример:
    LOGOUT(.1,OrderHeader,OrderDetail) !Начинаем транзакцию
    DO ErrHandler ! нет ли ошибок?
    ADD(OrderHeader) !Добавим запись о родителе
    DO ErrHandler ! нет ли ошибок?
    LOOP X# = 1 TO RECORDS(DetailQue)
    !Обработка сохраненных подробностей
    GET(DetailQue,X#) !Читаем одну из очереди
    DO ErrHandler ! нет ли ошибок?
    Det:Record = DetailOue !Помещаем в буфер записи
    ADD(OrderDetail) ! и добавляем ее в файл
    DO ErrHandler ! нет ли ошибок?
    .
    COMMIT !Завершаем успешную транзакцию
    ErrHandler ROUTINE !Обработчик ошибок
    IF NOT ERRORCODE() THEN EXIT. !Ошибок нет? Вернемся.
    ROLLBACK !Отмена прерванной транзакции
    BEEP !Предупреждаем пользователя
    SHOW(25,1,'Ошибка транзакции - ' & ERROR())
    ASK ! и ждем нажатия клавиши
    RETURN ! затем возвращаемся
    См. также: ,

    COPY (копировать файл данных)


    COPY(файл,новый_файл)


    файл Метка копируемого файла.
    новый_файл Строковая константа или переменная, содержащая полную спецификацию файла (диск, каталог и имя). Если в спецификации отсутствуют диск и каталог, то подразумеваются текущий каталог текущего диска. Если указан только путь, то для имени НОВОГО_ФАЙЛа используются имя и расширение копируемого ФАЙЛа.

    Оператор COPY создает копию файла, и делает соответствующую запись в каталоге. Копируемый ФАЙЛ должен быть закрыт, иначе будет возвращена ошибка "Файл уже открыт". Если спецификация НОВОГО_ФАЙЛа совпадает со спецификацией оригинала, то такой оператор COPY игнорируется.
    Поскольку некоторые файловые драйверы используют несколько физических ФАЙЛОВ для работы с ними как с ОДНИМ ФАЙЛОМ, то подразумеваемые имя и расширение файла зависят от файлового драйвера. Если происходит какая-либо ошибка, то файл не копируется.
    Возвращаемые ошибки:
    02 Файл не найден
    03 Путь не существует
    05 Доступ запрещен
    52 Файл уже открыт
    Пример:
    COPY(Names,'A:\') !Копируем файл имен на дискету
    COPY(CompText,Filename) !Копируем текстовый файл под другим
    ! именем

    CREATE (разрешает создание файла)


    CREATE

    Атрибут CREATE, в описании файла, позволяет создавать файл на диске оператором CREATE из программы, в которой этот файл описан.
    Файлы, описанные без атрибута CREATE, могут быть созданы с помощью Clarion Data Dictionary Administrator.
    Пример:
    Names FILE,DRIVER('Clarion'),CREATE!Описываем файл и разрешаем
    !его создание
    Rec RECORD
    Name STRING(20)
    . . !Конец описания файла

    CREATE (создать пустой файл данных)


    CREATE(файл)


    файл Метка файла, который надо создать.

    Оператор CREATE создает в заданном каталоге пустой файл данных. Если файл уже существует, то он удаляется и пересоздается как файл, не содержащий данных. Файл должен быть закрыт, иначе возникает ошибка "Файл уже открыт". CREATE не оставляет созданный файл открытым.
    Возвращаемые ошибки:
    03 Путь не существует
    04 Слишком много открытых файлов
    05 Доступ запрещен
    52 Файл уже открыт
    54 Нет атрибута CREATE
    Пример:
    CREATE(Master) !Создать новый основной файл
    CREATE(Detail) !Создать новый файл подробностей

    DELETE (удалить запись)


    DELETE(файл)


    файл Метка файла.

    Этот оператор удаляет последнюю запись, к которой происходило обращение операторами NEXT, PREVIOUS, GET, ADD или PUT. Также удаляются сведения об этой записи из ключевых файлов. DELETE не очищает буфер структуры RECORD, таким образом, данные удаленной записи остаются по-прежнему доступны до тех пор, пока содержимое буфера RECORD не изменится.
    Если не было обращения к какой-либо записи или запись блокирована другой рабочей станцией, DELETE возвращает ошибку "Запись недоступна" и удаления записи не происходит. Точное действие оператора DELETE зависит от файлового драйвера.
    Возвращаемые ошибки:
    05 Доступ запрещен
    33 Запись недоступна
    Пример:
    Customer FILE,DRIVER('Clarion'),PRE(Cus)
    NameKey KEY(Cus:Name),OPT
    NbrKey KEY(Cus:Number),OPT
    Rec RECORD
    Name STRING(20)
    Number SHORT
    . .
    CODE
    Cus:Number = 12345 !Инициализируем ключевое
    ! поле
    GET(Customer,Cus:NbrKey) !Читаем соответствующую ему
    ! запись
    IF ERRORCODE() THEN STOP(ERROR()).
    DELETE(Customer) !Если это то, что нам надо,
    ! то удаляем эту запись.
    См. также: , , , , ,

    DRIVER (задает тип файла данных)

    DRIVER(filetype[,driver string])

    filetype Строковая константа, содержащая имя менеджера файлов (Btrieve, Clarion и т.д.).
    driver string Строковая константа или переменная. содержащая любые добавочные инструкции для драйвера. Атрибут DRIVER задает, какой драйвер используется для работы с файлом. Атрибут DRIVER требуется во всех описаниях файлов.

    Программы на Кларионе используют драйверы для доступа к файлам. Файловый драйвер служит переводчиком между программой и файловой системой, позволяя использовать одни и те же команды для разных файловых систем.
    Внутренняя реализация той или иной команды доступа к файлу зависит от файлового драйвера. Некоторые команды могут быть недоступны с определенным драйвером из-за ограничений, налагаемых файловой системой. Каждый файловый драйвер документируется отдельно. Все неподдерживаемые команды, атрибуты полей, типы данных и/или идиосинкразии файловой системы приводятся в документации.
    Пример:
    Names FILE,DRIVER('Clarion') !Начало описания файла
    Record RECORD
    Name STRING(20)
    !Конец описания файла

    DUP (разрешить повторяющиеся значения полей ключа)


    DUP

    Атрибут DUP, в описании ключа, позволяет иметь в файле несколько записей с одинаковым значением ключевых полей. Если атрибут DUP пропущен, то попытка добавить или перезаписать запись с уже существующими значениями ключевых полей, вызовет ошибку "Такая запись уже есть" ("Creates Duplicate Key"), и запись не будет записана в файл. Во время последовательной обработки по ключу, записи с одинаковыми ключевыми полями обрабатываются в том физическом порядке, в котором их ключевые поля расположены в файле ключа. Операторы GET и SET обращаются к первой записи из тех, что имеют одинаковые ключевые поля. Атрибут DUP НЕ нужен для индексов, поскольку индексы ВСЕГДА допускают дублированные значения ключевых полей.
    Пример:
    Names FILE,DRIVER('Clarion'),PRE(Nam)
    NameKey KEY(Nam:Name),DUP
    !Ключ по имени, разрешаем одинаковые имена
    NbrKey KEY(Nam:Number)
    !Ключ по номеру. Одинаковые номера запрещены
    Rec RECORD
    Name STRING(20)
    Number SHORT
    . .

    DUPLICATE (проверить на дублирование ключевых полей)

    DUBLICATE(ключ)
    файл

    ключ Метка описания ключа.
    файл Метка файла.

    Функция DUPLICATE возвращает НЕнулевое значение (истину), если при внесении записи в файл возникла ошибка "Такой ключ уже есть" ("CREATES DUPLICATE KEY"). Если задан параметр КЛЮЧ, то проверяется заданный ключевой файл. С параметром ФАЙЛ проверяются все ключи, описанные без атрибута DUP.
    Функция DUPLICATE подразумевает, что содержимое структуры RECORD аналогично содержимому записи, на которую указывает указатель текущей записи. Таким образом, при использовании DUPLICATE ДО добавления записи, указатель текущей записи должен быть очищен командой GET(файл,0).
    Тип возвращаемого результата: LONG
    Пример:
    IF Action = 'ADD' THEN GET(Vendor,0).
    !При добавлении очищаем указатель
    IF DUPLICATE(Vendor) !Если такой продавец уже есть, то
    SCR:MESSAGE = 'Уже есть продавец с таки номером'
    ! выводим сообщение
    SELECT(?) ! и снова ждем ввода в тоже самое
    ! поле
    . !Конец оператора if
    См. также:

    EMPTY (очистить файл данных)


    EMPTY(файл)


    файл Метка существующего файла.

    EMPTY удаляет ВСЕ записи из заданного файла. EMPTY требует монопольного доступа к файлу. То есть файл должен быть открыт в режиме доступа 12h (всем, кроме меня запрещены чтение/запись) или 22h (всем, кроме меня запрещена запись)
    Возвращаемые ошибки:
    63 Требуется монопольный доступ
    Пример:
    OPEN(Master,18) !Открыть основной файл
    EMPTY(Master) ! и опустошить его
    См. также: ,

    ENCRYPT (шифровать файл данных)


    ENCRYPT

    Атрибут ENCRYPT, используемый совместно с атрибутом OWNER, указывает на необходимость шифрования данных в файле. ENCRYPT разрешен ТОЛЬКО с атрибутом OWNER. Даже используя 16-ричный редактор, весьма трудно расшифровать зашифрованные данные.
    (С.П.А - Сильно сомневаюсь. Если ключ к шифру задан как в примере для OWNER, то расшифровка - дело нескольких минут.)
    Пример:
    Names FILE,DRIVER('Clarion'),OWNER('Clarion'),ENCRYPT
    Record RECORD
    Name STRING(20)
    . .
    См. также:

    EOF (конец файла)


    EOF(файл)


    файл Метка файла.

    Функция EOF возвращает ИСТИНУ (НЕ ноль) если была прочитана (оператором NEXT) или пропущена (оператором SKIP) последняя запись последовательности. В противном случае возвращается ЛОЖЬ (нулевое значение). Функция EOF обычно используется для проверки условия в циклах LOOP UNTIL. Поскольку условие в таком цикле вычисляется в начале цикла, то EOF вернет ИСТИНУ после того, как будет прочитана последняя запись.
    Тип возвращаемого результата: LONG
    Пример:
    SET(Trn:DateKey) !Пляшем от начала файла по ключу
    LOOP UNTIL EOF(Trans) !Обрабатываем файл с начала,
    PREVIOUS(Trans) ! последовательно читая записи
    IF ERRORCODE() THEN STOP(ERROR()).
    DO LastInFirstOut ! вызываем процедуру LIFO
    . !Конец цикла
    См. также: , , LOOP

    FILE (описание структуры файла данных)

    метка FILE,DRIVER()[,CREATE][,RECLAIM][,OWNER()][,ENCRYPT]
    [,NAME()][,PRE()]
    метка [INDEX()]
    метка [KEY()]
    метка [MEMO()]
    [метка] RECORD
    fields
    . .

    DRIVER Задает тип файла данных. Атрибут DRIVER требуется для всех описаний структуры FILE.
    CREATE Позволяет создать файл командой CREATE во время работы программы.
    RECLAIM Разрешает повторно использовать место, освобожденное удаленными записями.
    OWNER Задает пароль для шифрования данных.
    ENCRYPT Шифрует файл данных.
    NAME Останавливает имя файла в стандарте ДОС.
    PRE Объявляет префикс метки для структуры.
    INDEX Объявляет статический индекс файла, который должен быть перестроен во время исполнения.
    KEY Объявляет динамически обновляющийся индекс файла.
    MEMO Описывает текстовое поле переменной длины до 64K длиной).
    RECORD Объявляет структуру записи по полям. Структура RECORD ДОЛЖНА быть в описании каждого файла.
    fields Элементы данных в структуре RECORD.

    FILE объявляет структуру файла данных. Метка структуры FILE используется в операторах и функциях, работающих с файлами. Структура FILE должна завершаться точкой или оператором END.
    Атрибуты структур FILE, KEY, INDEX, MEMO, операторы описания данных и типы данных, которые могу содержаться в файле, целиком зависят от конкретного файлового драйвера. Все, что не поддерживается файловой системой, заданной в атрибуте DRIVER, при открытии файла вызовет сообщение об ошибке файлового драйвера. Атрибуты и (или) типы данных, разрешенных для конкретной файловой системы, перечислены в документации на файловый драйвер.
    Во время выполнения, под структуру RECORD выделяется память для использования в качестве буфера, где хранятся данные, считанные с диска. В файле обязательно должна быть структура RECORD.
    Пример:
    Names FILE,DRIVER('Clarion') !Описание структуры файла
    Rec RECORD
    Name STRING(20)
    . . !Конец описания файла

    FLUSH (сбросить буфера ДОС на диск)


    FLUSH(файл)


    файл Метка файла.

    Оператор FLUSH завершает операцию STREAM. Он сбрасывает буфера ДОС, что приводит к обновлению записи каталога для данного файла. Поддержка этого оператора зависит от файловой системы и конкретные результаты этой команды описаны в документации по файловому драйверу.
    Пример:
    STREAM(History) !Используем буфера ДОС
    SET(Current) !Идем в начало файла CURRENT.
    LOOP UNTIL EOF(Current)
    NEXT(Current)
    His:Record - Cur:Record
    ADD(History)
    . !Конец цикла
    FLUSH(History) !Заканчиваем поточную обра-
    ! ботку и сбрасываем буфера.
    См. также:

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

    файл,ключ
    GET( файл,указатель_в_файле[,длина] )
    ключ,указатель_в_ключе

    файл Метка файла.
    ключ Метка ключа или индекса.
    указатель_в_файле Числовая константа, переменная или выражение, содержащая значение, возвращаемое функцией POINTER(файл). Конкретное значение зависит от файлового драйвера.
    указатель_в_ключе Числовая константа, переменная или выражение, содержащая значение, возвращаемое функцией POINTER(ключ). Конкретное значение зависит от файлового драйвера.
    длина Целочисленная константа, переменная или выражение, содержащее число байт, записываемых в файл. ДЛИНА должная быть больше нуля но не больше длины структуры RECORD. Если ДЛИНА пропущена или выходит за разрешенный диапазон, то она сбрасывается до длины структуры RECORD.

    Оператор GET находит заданную запись в файле данных и считывает ее в буфер структуры RECORD. Прямой доступ к записи осуществляется либо по относительному номеру записи в файле либо совпадению ключевого поля со значением заданного ключа.

    GET(файл,ключ) Получает первую запись из файла (согласно ключу), которая содержит значения, совпадающие со значениями компонент ключа.
    GET(файл,указатель_в_файле[,длина]) Получает запись из файла на которую указывает указатель_в_файле. Если указатель_в_файле равен нулю, то указатель на текущую запись очищается и запись не считывается.
    GET(ключ,указатель_в_ключе) Получает запись на которую указывает указатель_в_ключе.

    Значения указателя_в_файле и указателя_в_ключе зависят от файлового драйвера. Это может быть: номер записи; номер байта в файле или какой-либо другой вид "опорной точки" в файле. Если значение указателя_в_файле или указателя_в_ключе выходят за разрешенные пределы или в файле нет подходящих по значениям записей, возникает ошибка "Запись не найдена".
    Возвращаемые ошибки:
    35 Запись не найдена
    37 Файл еще не открыт
    43 Запись уже заблокирована
    Пример:
    Customer FILE,DRIVER('Clarion'),PRE(Cus)
    NameKey KEY(Cus:Name),OPT
    NbrKey KEY(Cus:Number),OPT
    Rec RECORD
    Name STRING(20)
    Number SHORT
    . .
    CODE
    Cus:Name = 'Clarion' !Инициализируем ключевое поле
    GET(Customer,Cus:NameKey) ! получаем соответствующую запись
    IF ERRORCODE() THEN STOP(ERROR()).
    GET(Customer,3) !Читаем третью физическую запись
    ! файла
    IF ERRORCODE() THEN STOP(ERROR()).
    GET(Cus:NameKey,3) !Получаем третью запись в порядке,
    ! задаваемом ключом NameKey
    IF ERRORCODE() THEN STOP(ERROR()).
    См. также: ,

    HOLD (монопольный доступ к записи)


    HOLD(файл[,секунды])


    файл Метка файла, открытого для совместного доступа.
    seconds Числовая константа или переменная, которая задает максимальное время ожидания в секундах.

    Оператор HOLD включает блокирование записи для следующих за ним операторов GET, NEXT или PREVIOUS в многопользовательской среде. Когда GET, NEXT или PREVIOUS успешно захватывают запись, они выставляют флажок "held" (заблокирована). Обычно это не дает остальным пользователям изменять эту запись, но не мешает читать ее. Конкретное действие HOLD зависит от файлового драйвера.

    HOLD(файл) Запускает процесс блокировки так, что последующие GET, NEXT или PREVIOUS пытаются захватить запись до тех пор, пока это не удастся. Если запись уже захвачена другой рабочей станцией, то эти операторы будут ожидать освобождения этой записи.
    HOLD(файл,секунды) Запускает процесс так, что последующие GET, NEXT или PREVIOUS вернут ошибку "Запись уже заблокирована", если за заданное число секунд они не смогут захватить ее.

    В один момент времени только одна запись в каждом файле может быть заблокирована. Если происходит обращение к другой записи этого файла, то захваченная ранее запись автоматически освобождается.
    Так же как и для LOCK, существует проблема "смертельного объятия". Оно возникает когда две рабочих станции пытаются захватить один и тот же нвбор записей, но в разной последовательности и обе они используют оператор HOLD(файл). Одна станция уже захватила запись, которую пытается захватить другая и наоборот. Этой проблемы можно избежать, используя оператор HOLD(файл,секунды) и отслеживая возникновение ошибки "Запись уже заблокирована".
    Пример:
    LOOP !Цикл во избежание "смертельного
    ! объятия"
    HOLD(Master,1) !1 секунду пытаемся захватить запись глав-
    ! ного файла
    GET(Master,1) !Читаем и блокируем запись
    IF ERRORCODE() = 208 !Если кто-то уже захватил ее, то
    BEEP(0,100); CYCLE ! подождем секунду и попробуем
    ! снова
    .
    HOLD(Detail,1) !1 секунду пытаемся захватить запись из
    ! файла подробностей
    GET(Detail,1) !Читаем и блокируем запись
    IF ERRORCODE() = 208 !Если кто-то уже захватил ее, то
    RELEASE(Master) ! освободим захваченную ранее,
    BEEP(0,100); CYCLE ! подождем секунду и попробуем
    ! снова
    . . !Конец операторов IF и LOOP
    См. также: , , ,

    INDEX (описывает статический индекс для файла)

    метка INDEX([-][field])[NAME()][,NOCASE][,OPT]

    - Знак МИНУС перед компонентой индекса означает, что для полей с этой компонентой, индекс сортируется по убыванию (от больших значений к меньшим), по умолчанию сортировка по возрастанию.
    field Метка поля из структуры RECORD файла, для которого строится индекс. Поле - это компонента индекса. Переменные с атрибутом DIM (массивы) нельзя использовать в качестве индексных полей.
    NAME Имя файла для индекса.
    OPT В индекс не попадут сведения о тех записях,
    у которых все поля, используемые как компоненты индекса, пусты или содержат нуль.
    NOCASE Сортировку проводить без учета регистра.

    INDEX описывает "статичный" ключ для файла данных. INDEX обновляется только оператором BUILD. Он используется для доступа к записям в порядке, отличном от физического размещения записей в файле. INDEX можно использовать как для последовательного, так и для произвольного доступа к файлу. В INDEX-е ВСЕГДА разрешены записи с одинаковым значением индексных полей (duplicated entries).
    INDEX может строиться на основании более чем одного поля. Порядок, в котором заданы компоненты индекса, определяет порядок сортировки записей по этому индексу. Самые первые компоненты МЕНЕЕ значимы, самые последние - БОЛЕЕ. В общем, файл данных может иметь до 255 индексов (и/или ключей) и каждый индекс может быть длиной до 255 байт (имеется в виду суммарная длина всех полей, задействованных для построения индекса), хотя точное число индексных и ключевых файлов зависит от файлового драйвера.
    Если в описании INDEX не заданы имена полей, то создается "динамический" индекс, который позволяет использовать любые поля структуры RECORD в качестве своих компонент, за исключением массивов. Такие компоненты задаются во время исполнения вторым параметром оператора BUILD. Такой подход позволяет произвольно индексировать файлы во время исполнения (С.П.А - и позволяет избежать одинаковых, в целом, процедур, использующих разные порядки сортировки одного и того же файла).
    Пример:
    Names FILE,DRIVER('Clarion'),PRE(Nam)
    NameNdx INDEX(Nam:Name),NOCASE !Индекс по имени
    NbrNdx INDEX(Nam:Number),OPT !Индекс по номеру
    Rec RECORD
    Name STRING(20)
    Number SHORT
    . .
    См. также: ,

    KEY (описывает динамический индекс (ключ) для файла)

    метка KEY([-][field])[NAME()][,NOCASE][,OPT]

    - Знак МИНУС перед компонентой ключа означает, что для полей с этой компонентой, индекс сортируется по убыванию (от больших значений к меньшим), по умолчанию сортировка по возрастанию.
    field Метка поля из структуры RECORD файла, для которого строится ключ. Поле - это компонента ключа. Переменные с атрибутом DIM (массивы) нельзя использовать в качестве ключевых полей.
    NAME Имя файла для ключа.
    OPT В ключ не попадут сведения о тех записях, у которых все поля, используемые как компоненты ключа, пусты или содержат нуль.
    NOCASE Сортировку проводить без учета регистра.
    DUP В файле данных разрешены записи с одинаковыми значениями ключевых полей.

    KEY - это индекс файла данных, который автоматически обновляется при добавлении, изменении или удалении записей. Он используется для доступа к записям в порядке, отличном от физического размещения записей в файле. INDEX можно использовать как для последовательного, так и для произвольного доступа к файлу.
    KEY может строиться на основании более чем одного поля. Порядок, в котором заданы компоненты ключа, определяет порядок сортировки записей по этому индексу. Самые первые компоненты МЕНЕЕ значимы, самые последние - БОЛЕЕ. В общем, файл данных может иметь до 255 ключей (и индексов) и каждый ключ может быть длиной до 255 байт (имеется в виду суммарная длина всех полей, задействованных для построения ключа), хотя точное число ключевых и индексных файлов зависит от файлового драйвера.
    Пример:
    Names FILE,DRIVER('Clarion'),PRE(Nam)
    NameKey KEY(Nam:Name),NOCASE,DUP !Ключ по имени
    NbrKey KEY(Nam:Number),OPT !Ключ по номеру
    Rec RECORD
    Name STRING(20)
    Number SHORT
    CODE
    Nam:Name = 'Clarion Software' !Инициализируем ключевое
    ! поле
    GET(Names,Nam:NameKey) !Читаем запись
    SET(Nam:NbrKey) !Обрабатывать в порядке
    ! возрастания поля
    ! NAM:NUMBER
    См. также: , ,

    LOCK (монопольный доступ к файлу)


    LOCK(файл[,секунды])


    файл Метка файла, открытого для совместного доступа.
    секунды Числовая константа или переменная, которая задает максимальное время ожидание в секундах.

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

    LOCK(файл) Пытается заблокировать файл до тех пор, пока это не удастся. Если файл уже заблокирован другой станцией, то LOCK будет ждать, пока та станция не разблокирует файл.
    LOCK(файл,секунды) Если за заданное время не удалось заблокировать файл, то возвращается ошибка "Файл уже заблокирован".

    Главная проблема с блокированными файлами, это как избежать "смертельного объятия". Это происходит, когда две станции пытаются заблокировать один и тот же набор файлов в разной последовательности, и обе используют оператор LOCK(файл). Одна станция уже заблокировала файл, который хочет заблокировать другая, и наоборот. Этой проблемы можно избежать, если использовать оператор LOCK(файл,секунды) и всегда блокировать файлы в одном и том же порядке.
    Возвращаемые ошибки:
    32 Файл уже заблокирован
    Пример:
    LOOP !Цикл во избежание "смертельного
    ! объятия"
    LOCK(Master,1) !1 секунду пытаемся заблокировать
    ! основной файл
    IF ERRORCODE() = 201 !Если кто-то уже блокирует его, то
    BEEP(0,100) ! ждем секунду и
    CYCLE ! пытаемся снова...
    .
    LOCK(Detail,1) !За секунду пытаемся заблокировать
    ! файл подробностей
    IF ERRORCODE() = 201 !Если кто-то уже блокирует его, то
    UNLOCK(Master) ! разблокируем занятый нами файл,
    BEEP(0,100) ! подождем секунду и
    CYCLE ! еще разок попробуем
    . . !Конец операторов IF и LOOP

    LOGOUT (начать транзакцию)


    LOGOUT(таймаут,файл[,файл,...,файл])


    таймаут Числовая константа или переменная, задающая сколько секунд пытаться начать транзакцию для файла(ов), прежде чем прервать ее и вернуть ошибку.
    файл Метка файла. Можно задать сразу несколько параметров ФАЙЛ, разделенных запятыми. Должны быть перечислены все файлы, участвующие в транзакции.

    Оператор LOGOUT начинает обработку транзакции для заданного файла или набора файлов. Все задействованные файлы должны работать с одним и тем же файловым драйвером. LOGOUT сообщает драйверу о начале транзакции. Драйвер, в свою очередь, выполняет действия, необходимые в его файловой системе для начала обработки транзакции в заданном наборе файлов. Если файловая система требует, чтобы файлы были заблокированы перед началом транзакции, то LOGOUT автоматически блокирует их (для этого и нужен ТАЙМАУТ).
    Только одна транзакция, инициированная через LOGOUT, может выполняться одновременно. Второй LOGOUT (без предварительного COMMIT или ROLLBACK) останавливает программу с сообщением об ошибке и вываливается в DOS.
    Возвращаемые ошибки:
    32 Файл уже заблокирован
    Пример:
    LOGOUT(,1,OrderHeader,OrderDetail) !Начинаем транзакцию
    DO ErrHandler ! нет ли ошибок?
    ADD(OrderHeader) !Добавим запись о родителе
    DO ErrHandler ! нет ли ошибок?
    LOOP X# = 1 TO RECORDS(DetailQue)
    !Обработка сохраненных подробностей
    GET(DetailQue,X#) !Читаем одну из очереди
    DO ErrHandler ! нет ли ошибок?
    Det:Record = DetailQue !Помещаем в буфер записи
    ADD(OrderDetail) ! и добавляем ее в файл
    DO ErrHandler ! нет ли ошибок?
    .
    COMMIT !Завершаем успешную транзакцию
    ErrHandler ROUTINE !Обработчик ошибок
    IF NOT ERRORCODE() THEN EXIT. !Ошибок нет? Вернемся.
    ROLLBACK !Отмена прерванной транзакции
    BEEP !Предупреждаем пользователя
    SHOW(25,1,'Ошибка транзакции - ' & ERROR())
    ASK ! и ждем нажатия клавиши
    RETURN ! затем возвращаемся
    См. также: ,

    MEMO (описывает текстовое поле)

    метка MEMO(длина)[,BINARY][,NAME()]

    длина Числовая константа, задающая максимальную длину текста в символах. Должна быть в диапазоне от 1 до 65,536 байт.
    BINARY Указывает, что в МЕМО-поле должны храниться двоичные данные.
    NAME Задает имя файла, в котором будут находиться МЕМO-поля. Использование этого параметра зависит от файлового драйвера.

    (МЕМО - англ. записка, памятка, примечание)
    MEMO описывает строковое поле переменной длины, которое хранится на диске. Параметр ДЛИНА задает максимальный размер поля примечаний. МЕМО должно быть описано ПОСЛЕ описания структуры RECORD. Память под буфер МЕМО-полей выделяется при открытии файла, к которому это примечание относится, и освобождается при его закрытии.
    Теоретически, можно описать до 255 МЕОМ-полей для каждого файла. Точное же их число и способ их хранения на диске зависит от файлового драйвера. Просматриваются MEMO-поля, обычно, с помощью полей типа TEXT в экранах и отчетах.
    Пример:
    Names FILE,DRIVER('Clarion'),PRE(Nam)
    NameKey KEY(Nam:Name)
    NbrKey KEY(Nam:Number)
    Notes MEMO(4800) !Примечание длиной до 4800 байт.
    Rec RECORD
    Name STRING(20)
    Number SHORT
    . .

    NEXT (прочитать следующую запись последовательности)


    NEXT(файл)


    файл Метка файла.

    NEXT читает из файла данных следующую, в ранее заданной последовательности, запись и заносит ее в буфер структуры RECORD. Оператор SET устанавливает последовательность, в которой будут считываться записи. Первый NEXT, выполнившийся сразу после SET, читает запись в позиции, установленной оператором SET. Последующие NEXT-ы читают следующие записи в этой последовательности. Последовательность не изменяется операторами GET, ADD, PUT или DELETE.
    Выполнение NEXT, перед которым не был выполнен SET, или попытка считать запись после конца файла, приводит к ошибке "Запись недоступна".
    Возвращаемые ошибки:
    33 Запись недоступна
    37 Файл еще не открыт
    43 Запись уже заблокирована
    Пример:
    SET(Cus:NameKey) !Начинаем с начала файла, последова-
    ! тельность задается ключом NameKey.
    LOOP UNTIL EOF(Customer) !Читаем все, что можно, до конца фай-
    ! ла
    NEXT(Customer) ! последовательно читаем записи
    IF ERRORCODE() THEN STOP(ERROR()).
    DO PostTrans ! вызываем процедуру обслуживания
    ! транзакций.
    . !Конец цикла
    См. также: , , ,

    NOCASE (KEY или INDEX - НЕ чувствительны к регистру)


    NOCASE

    Атрибут NOCASE в описании KEY или INDEX означает, что сортировка полей по алфавиту будет производиться без учета регистра букв. При записи в ключевой файл, все буквы будут приводиться к верхнему регистру. Этот атрибут не влияет на данные, хранящиеся в файле данных и на не буквы.
    Пример:
    Names FILE,DRIVER('Clarion'),PRE(Nam)
    NameKey KEY(Nam:Name),NOCASE
    !Ключ по имени без учета регистра
    NbrKey KEY(Nam:Number) !Ключ по номеру
    Rec RECORD
    Name STRING(20)
    Number SHORT
    . .
    См. также: ,

    OPEN (открыть файл данных)


    OPEN(файл[,режим доступа])


    файл Метка файла.
    режим доступа Числовая константа, переменная или выражение, задающее уровень доступа к файлу как для открывающего его пользователя, так и для остальных пользователей многопользовательской системы. Если пропущен, то подразумевается 22h (всем, кроме меня запрещена запись в этот файл)

    Оператор OPEN открывает структуру FILE для обработки и устанавливает режим доступа. Поддержка различных уровней доступа зависит от файлового драйвера. Все файлы должны быть явно открыты перед их использованием. РЕЖИМ ДОСТУПА это битовая карта, указывающая операционке, какой доступ предоставить открывающему пользователю, и какой доступ запретить для остальных потенциальных пользователей этого файла. Допустимы следующие значения режима доступа:

    Дес. 16н. Режим доступа
    Открывающий пользователь 0 0h Только для чтения (Read Only)
    1 1h Только для записи (Write Only)
    2 2h Для чтения и записи (Read/Write)
    Остальные пользователи 0 0h Любой доступ (режим FCB-совместимости)
    16 10h Запрещен любой доступ (Deny All)
    32 20h Запрещена запись (Deny Write)
    48 30h Запрещено чтение (Deny Read)
    64 40h ??? (Deny None)

    Возвращаемые ошибки:
    02 Файл не найден
    04 Слишком много открытых файлов
    05 Доступ запрещен
    52 Файл уже открыт
    75 Неверный описатель типа поля
    Пример:
    ReadOnly EQUATE(0) !Мнемонические значения для режимов
    WriteOnly EQUATE(1) ! доступа
    ReadWrite EOUATE(2)
    DenyAll EQUATE(10h)
    DenyWrite EQUATE(20h)
    DenyRead EQUATE(30h)
    DenyNone EQUATE(40h)
    CODE
    OPEN(Names,ReadWrite+DenyNone) !Открываем полностью в
    ! режиме разделения.
    См. также:

    OPT (пустые или нулевые ключевые поля отбрасываются)


    OPT

    Если задан атрибут ОРТ, то в ключ или индекс НЕ попадут сведения о записях, у которых все ключевые поля пусты. В терминах атрибута ОРТ, "пустое поле" означает, что числовое поле содержит нуль, а символьное - только пробелы.
    Пример:
    Names FILE,DRIVER('Clarion'),PRE(Nam)!Описание структуры файла
    NameKey KEY(Nam:Name),OPT !Ключ по имени, имя не может быть
    ! пустым
    NbrKey KEY(Nam:Number),OPT !Ключ по номеру. Номера не могут
    ! быть нулевыми
    Rec RECORD
    Name STRING(20)
    Number SHORT
    . .
    См. также: ,

    OWNER (задает пароль для шифрования файла данных)


    OWNER(password)


    password Строковая константа или переменная.

    Атрибут OWNER задает пароль, который используется атрибутом ENCRYPT для шифрования данных. Реализация метода шифрования зависит от конкретного файлового драйвера.
    Пример:
    Customer FILE,DRIVER('Clarion'),OWNER('abCdeF'),ENCRYPT
    !Шифруем данные с
    !паролем "abCdeF"
    Record RECORD
    Name STRING(20)
    . .
    См. также:

    PACK (физически стереть удаленные записи)


    PACK(файл)


    файл Метка файла.

    Оператор PACK убирает удаленные записи из файла данных и перестраивает его ключи. Полученный файл будет компактен, насколько это возможно. PACK требует, как минимум, вдвое больше места на диске, чем занимает файл с ключами и МЕМО-файлами. Новые файлы создаются из старых, а старые файлы стираются ТОЛЬКО после успешного завершения процесса. PACK требует монопольного доступа к файлу.
    Возвращаемые ошибки:
    63 Требуется монопольный доступ
    Пример:
    OPEN(Trans,12h) !Монопольно открывает файл и
    PACK(Trans) ! упаковывает его.
    См. также: ,

    POINTER (относительный номер записи)

    POINTER(файл)
    ключ

    файл Метка файла. Этим указывается на физическое
    расположение записей в файле.
    ключ Метка ключа или индекса. Это указывает на порядок записей, задаваемый ключом или индексом.

    POINTER возвращает относительный номер записи в файле или в последовательности либо относительное положение указателя на запись в ключе или индексе (в последовательности "по ключу"). Значение, возвращаемое функцией, зависит от файлового драйвера. Это может быть номер записи, относительный номер байта в файле или какой-либо другой вид "опорной точки в файле".
    Тип возвращаемого результата: LONG
    Пример:
    SavePtr# = POINTER(Customer) !Сохраняем указатель на запись
    См. также:

    POSITION (номер записи в последовательности)


    POSITION(последовательность)


    последовательность Метка файла, ключа или индекса.

    POSITION возвращает строку, которая идентифицирует уникальный номер записи в последовательности. POSITION возвращает положение в файле последней записи, к которой происходило обращение (то есть содержимое записи находится в буфере структуры RECORD).
    Значение и длина возвращаемой строки зависят от файлового драйвера. POSITION используется совместно с RESET для временного изменения порядка обработки записей, и, затем, его восстановления.
    Тип возвращаемого результата: STRING
    Пример:
    RecordQue QUEUE,PRE(Dsp)
    QueFields LIKE(Trn:Record),PRE(Dsp)
    .
    SavPosition STRING(260)
    CODE !От начала файла идем по ключу
    SET(Trn:DateKey) !Последовательно читаем
    LOOP ! все записи
    NEXT(Trans)
    IF ERRORCODE() THEN STOP(ERROR()).
    RecordOue = Trn:Record !Добавляем запись в
    ADD(RecordQue) ! очередь
    IF ERRORCODE() THEN STOP(ERROR()).
    IF RECORDS(RecordOue) >= 20 OR EOF(Trans)
    !если в очереди 20 записей, то
    SavPosition = POSITION(Trn:DateKey) !сохраняем номер теку-
    ! щей записи,
    DO DisplayQue !показываем очередь и
    FREE(RecordQue) ! очищаем ее
    IF EOF(Trans) THEN BREAK.
    !Если все записи обработаны, то
    ! заканчиваем работу
    RESET(Trn:DateKey,SavPosition) !Восстанавливаем указатель
    . . !Конец цикла
    См. также:

    PREVIOUS (прочитать предыдущую запись последовательности)


    PREVIOUS(файл)


    файл Метка файла.

    PREVIOUS читает из файла данных предыдущую, в ранее заданной последовательности, запись и заносит ее в буфер структуры RECORD. Оператор SET устанавливает последовательность, в которой будут считываться записи. Первый PREVIOUS, выполнившийся сразу после SET, читает запись в позиции, установленной оператором SET. Последующие PREVIOUS-ы :) читают следующие записи этой последовательности В ОБРАТНОМ ПОРЯДКЕ. Последовательность не изменяется операторами GET, ADD, PUT или DELETE.
    Выполнение PREVIOUS, перед которым не был выполнен SET, или попытка считать запись перед началом файла, приводит к ошибке "Запись недоступна".
    Возвращаемые ошибки:
    33 Запись недоступна
    37 Файл еще не открыт
    43 Запись уже заблокирована
    Пример:
    SET(Trn:DateKey) !Устанавливаем последовательность обра-
    ! ботки записей
    LOOP UNTIL BOF(Trans) !Читаем все записи в обратном порядке
    PREVIOUS(Trans) ! читаем записи последовательно
    IF ERRORCODE() THEN STOP(ERROR()).
    DO LastInFirstOut ! вызываем процедуру LIFO
    . !Конец цикла
    См. также: , , ,

    PUT (записать запись обратно в файл)


    PUT(файл[,указатель_в_файле][,длина])


    файл Метка файла.
    указатель_в_файле Числовая константа, переменная или выражение, содержащая значение, возвращаемое функцией POINTER(файл). Конкретное значение зависит от файлового драйвера.
    длина Целочисленная константа, переменная или выражение, содержащее число байт, записываемых в файл. ДЛИНА должная быть больше нуля но не больше длины структуры RECORD. Если ДЛИНА пропущена или выходит за разрешенный диапазон, то она сбрасывается до длины структуры RECORD.

    Оператор PUT записывает содержимое буфера RECORD в последнюю запись, к которой производилось обращение.

    PUT(файл) Записывает запись в то место, к которому последний раз обращались NEXT, PREVIOUS, GET, или ADD. Если изменились значения ключевых полей, то ключи (НЕ индексы!) обновляются.
    PUT(файл,указатель_в_файле) Записывает запись в то место, на которое указывает указатель_в_файле и обновляет ключи.
    PUT(файл,указатель_в_файле,длина) Записывает ДЛИНА байтов в то место, на которое указывает указатель_в_файле и обновляет ключи.

    Если к записи не было обращения операторами NEXT, PREVIOUS, GET и ADD или она была удалена, то возвращается ошибка "Запись недоступна". PUT также может вернуть ошибку "Такой ключ уже есть". При возникновении какой-либо ошибки файл не изменяется.
    Возвращаемые ошибки:
    05 Доступ запрещен
    33 Запись недоступна
    40 Такой ключ уже есть
    Пример:
    SET(Trn:DateKey) !End/Beginning of file in keyed sequence
    LOOP UNTIL BOF(Trans) !Читаем все записи в обратном порядке
    PREVIOUS(Trans) ! одну за другой
    IF ERRORCODE() THEN STOP(ERROR()).
    DO LastInFirstOut !Вызываем процедуру LIFO
    PUT(Trans) !Записываем транзакцию обратно в файл
    IF ERRORCODE() THEN STOP(ERROR()).
    . !Конец цикла
    См. также: , , ,

    RECLAIM (использовать место от удаленных записей)


    RECLAIM

    Атрибут RECLAIM говорит о том, что файловый драйвер будет помещать новые записи в файл на место ранее удаленных, если таковые имеются. В противном случае запись будет добавлена в конец файла. Реализация метода RECLAIM зависит от файлового драйвера и поддерживается НЕ всем файловыми системами.
    Пример:
    Names FILE,DRIVER('Clarion'),RECLAIM !Помещать новые записи на
    !место ранее удаленных.
    Record RECORD
    Name STRING(20)
    . .

    RECORD (описывает структуру записи)

    [метка] RECORD[PRE()][,NAME()]
    поля
    .

    поля Одно или более описание переменных.
    PRE Задает метку-префикс структуры.
    NAME Задает внешнее имя структуры RECORD. Использование этого параметра зависит от файлового драйвера.

    Оператор RECORD описывает начало структуры файла данных. Структура RECORD обязательно должна быть в описании файла. Каждое ПОЛЕ элемент структуры RECORD. Длина структуры RECORD складывается из длин входящих в нее ПОЛЕЙ. При обращении к структуре RECORD, она рассматривается, как структура типа GROUP.
    Во время исполнения, под данные
    структуры RECORD, выделяется буфер в статической памяти. ПОЛЯ, в буфере записи, дрступны независимо от того открыт файл или нет. Записи считываются в буфер из файла операторами NEXT, PREVIOUS или GET. Данные ПОЛЕЙ обрабатываются, а затем записываются в файл в виде цельной структуры RECORD операторами ADD, PUT или DELETE.
    Пример:
    Names FILE,DRIVER('Clarion') !Описание структуры файла
    Record RECORD ! начало описания записи
    Name STRING(20) ! описываем поле ИМЯ
    Number SHORT ! описываем поле НОМЕР
    . . !Конец описаний записи и файла

    RECORDS (число записей)

    RECORDS(файл)
    ключ

    файл Метка файла.
    ключ Метка ключа или индекса.

    Эта функция количество записей в файле или ключе. Поскольку атрибут OPT для ключа или индекса не дает заносить в них данные о записях, у которых ключевые поля пусты, то RECORDS может вернуть для ключа или индекса меньшее значение чем для файла, к которому они принадлежат.
    Тип возвращаемого результата: LONG
    Пример:
    SaveCount = RECORDS(Master) !Сохраняем количество записей
    SaveNameCount = RECORDS(Nam:NameKey)
    !Число карточек, в которых заполнено
    ! поле NAME
    См. также: , ,

    RELEASE (освободить заблокированную запись)


    RELEASE(файл)


    файл Метка файла.

    Оператор RELEASE освобождает захваченную ранее запись. Он не может освободить запись, захваченную другим пользователем. Если запись не захвачена или захвачена другим пользователем, то этот оператор игнорируется.
    Пример:
    LOOP !Цикл во избежание "смертельного объятия"
    HOLD(Master,1) !1 секунду пытаемся захватить главный файл
    GET(Master,1) !получаем и блокируем запись
    IF ERRORCODE() = 208 !если кто-то успел раньше нас, то
    BEEP(0,100) ! секунду подождем
    CYCLE ! и попробуем еще раз
    .
    HOLD(Detail,1) !1 секунду пытаемся захватить файл
    ! подробностей
    GET(Detail,1) !получаем и блокируем запись
    IF ERRORCODEO = 208 !если кто-то успел раньше нас, то
    RELEASE(Master) ! осободим запись, захваченную ранее
    BEEP(0,100) ! секунду подождем
    CYCLE ! и попробуем еще раз
    . . !Конец операторов IF и LOOP

    REMOVE (стереть файл данных)


    REMOVE(файл)


    файл Метка файла, подлежащего удалению.

    Оператор REMOVE стирает заданный файл из каталога аналогично команде ДОС Delete. Файл должен быть закрыт, иначе будет ошибка "Файл уже открыт". При возникновении какой-либо ошибки файл НЕ удаляется.
    Возвращаемые ошибки:
    02 Файл не найден
    05 Доступ запрещен
    52 Файл уже открыт
    Пример:
    REMOVE(OldFile) !Удаляем старый файл
    REMOVE(Changes) !Удаляем файл изменений

    RENAME (переименовать файл данных)


    RENAME(файл,новый_файл)


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

    Оператор RENAME либо меняет имя файла, либо переносит его в другой каталог на этом же диске. Файл, подлежащий переименованию, должен быть закрыт, иначе произойдет ошибка "Файл уже открыт". Если ФАЙЛ и НОВЫЙ_ФАЙЛ идентичны, то оператор RENAME игнорируется. При возникновении какой-либо ошибки, файл не переименовывается.
    Поскольку некоторые файловые драйверы используют несколько физических ФАЙЛОВ для работы с ними как с ОДНИМ ФАЙЛОМ, то подразумеваемые имя и расширение файла зависят от файлового драйвера.
    Возвращаемые ошибки:
    02 Файл не найден
    03 Путь не существует
    05 Доступ запрещен
    52 Файл уже открыт
    Пример:
    RENAME(Text,'text.bak') !Делаем резервную копию
    RENAME(Master,'\newdir') !Перемещаем в другой каталог

    RESET (сброс указателя текущей записи)


    RESET(последовательность,строка)


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

    RESET устанавливает указатель записи на запись, задаваемую строкой, возвращаемой функцией POSITION. После того, как RESET установил указатель, NEXT или PREVIOUS могут считать эту запись.
    Значение, содержащееся в СТРОКЕ, и его длина зависят от файлового драйвера. RESET, обычно, используется вместе с POSITION для временного изменения порядка обработки записей.
    Пример:
    RecordQue QUEUE,PRE(Dsp)
    QueFields LIKE(Trn:Record),PRE(Dsp)
    .
    SavPosition STRING(260)
    CODE
    SET(Trn:DateKey) !Top of file in keyed sequence
    LOOP !Последовательно читаем
    NEXT(Trans) ! записи, одну за другой
    IF ERRORCODE() THEN STOP(ERROR()).
    RecordQue = Trn:Record !Помещаем запись в очередь
    ADD(RecordQue) !
    IF ERRORCODE() THEN STOP(ERROR()).
    IF RECORDS(RecordQue) >= 20 OR EOF(Trans)
    !В очереди 20 записей?
    SavPosition = POSITION(Trn:DateKey) !сохраним указатель
    !на текущую запись
    DO DisplayQue !Выведем очередь на экран
    FREE(RecordQue) ! и очистим ее
    IF EOF(Trans) THEN BREAK.
    !Если обработаны все записи, то выходим
    RESET(Trn:DateKey,SavPosition) !Сбрасываем указатель
    . . !Конец цикла
    См. также: , ,

    ROLLBACK (завершить ошибочную транзакцию)


    ROLLBACK

    Оператор ROLLBACK завершает текущую транзакцию как и COMMIT. Выполнение оператора ROLLBACK подразумевает, что транзакция прошла НЕВЕРНО и база данных нуждается в восстановлении в то состояние, в котором она была до транзакции.
    ROLLBACK сообщает файловому драйверу, участвующему в транзакции, о том, что временные файлы, необходимые для возвращения базы в первоначальное состояние, должны быть использованы для восстановления базы. Драйвер, в свою очередь, выполняет действия, которые необходимы в его файловой системе для отката транзакции.
    Пример:
    LOGOUT(,1,OrderHeader,OrderDetail) !Начинаем транзакцию
    DO ErrHandler ! нет ли ошибок?
    ADD(OrderHeader) !Добавим запись о родителе
    DO ErrHandler ! нет ли ошибок?
    LOOP X# = 1 TO RECORDS(DetailQue)
    !Обработка сохраненных подробностей
    GET(DetailQue,X#) !Читаем одну из очереди
    DO ErrHandler ! нет ли ошибок?
    Det:Record = DetailQue !Помещаем в буфер записи
    ADD(OrderDetail) ! и добавляем ее в файл
    DO ErrHandler ! нет ли ошибок?
    .
    COMMIT !Завершаем успешную транзакцию
    ErrHandler ROUTINE !Обработчик ошибок
    IF NOT ERRORCODE() THEN EXIT. !Ошибок нет? Вернемся.
    ROLLBACK !Отмена прерванной транзакции
    BEEP !Предупреждаем пользователя
    SHOW(25,1,'Ошибка транзакции - ' & ERROR())
    ASK ! и ждем нажатия клавиши
    RETURN ! затем возвращаемся
    См. также: ,


    SEND (отправить сообщение файловому драйверу)

    SEND(файл,сообщение)

    файл Метка файла. Атрибут файла DRIVER идентифицирует файловый драйвер, которому адресовано сообщение.
    сообщение Строковая константа или переменная, содержащая информацию, передаваемую драйверу.

    Функция SEND позволяет программе передать файловому драйверу, во время выполнения, специфичные параметры. Примеры таких специфичных параметров приведены в документации на драйвер.
    Тип возвращаемого результата: STRING
    Пример:
    FileCheck = SEND(ClarionFile,'RECOVER=120')
    !Запустить восстановление для файла
    ! в стандарте Кларион

    SET (инициировать последовательную обработку файла)

    файл
    SET( файл,ключ )
    файл,указатель_в_файле
    ключ
    ключ,ключ
    ключ,указатель_в_ключе
    ключ,ключ,указатель_в_файле

    файл Метка файла. Этот параметр указывает на то, что обработка происходит в том порядке, в котором записи физически расположены в файле.
    ключ Метка ключа или индекса. Если этот параметр стоит первым, то обработка происходит в последовательности, задаваемой ключом или индексом.
    указатель_в_файле Числовая константа, переменная или выражение, для значения, возвращаемого функцией POINTER(файл). Конкретное значение зависит от файлового драйвера.
    указатель_в_ключе Числовая константа, переменная или выражение, для значения, возвращаемого функцией POINTER(ключ). Конкретное значение зависит от файлового драйвера.

    SET инициирует последовательную обработку файла. SET НЕ считывает запись, а только устанавливает порядок обработки и начальную точкц для последующих операторов NEX или PREVIOUS. Первый параметр определяет порядок обработки записей. Второй и третий - задают первую обрабатываемую запись (начальную точку обработки). Если они опущены, то обработка начнется с начала (или конца) файла.

    SET(файл) Задает обработку в физической последовательности с начала (SET .. NEXT) или конца (SET ..PREVIOUS) файла.
    SET(файл,ключ) Обработка в физическом порядке, начиная с первой записи, значения ключевых полей которой, ближе всего подходят к установленным ранее значениям компонент ключа.
    SET(файл,указатель_в_файле) Обработка в физическом порядке, начиная с записи, на которую указывает указатель_в_файле.
    SET(ключ) Обработка в последовательности, задаваемой ключом, с начала (SET..NEXT) или конца (SET ..PREVIOUS) файла в этой последовательности.
    SET(ключ,ключ) Обработка в последовательности, задаваемой ключом, начиная с записи, значения ключевых полей которой, наиболее близки к установленным значениям компонент ключа.
    SET(ключ,указатель_в_ключе)Обработка в последовательности, задаваемой ключом, начиная с записи, на которую указывает указатель_в_ключе.
    SET(ключ, ключ, указатель_в_файле) Обработка по ключу, начиная с записи, содержащей данные, наиболее близкие к содержимому компонент ключа в (с - ?) конкретной записи, задаваемой указателем_в_файле.
    <
    Если второй параметр - ключ, то обработка начнется с первой записи, содержащей значения, наиболее близкие к значениям компонент ключа или индекса. Если найдено ТОЧНОЕ совпадение, то и NEXT и PREVIOUS считают найденную запись. Если нет точного совпадения, то NEXT прочитает запись с ближайшим БОЛЬШИМ значением, а PREVIOUS - с ближайшим меньшим.
    Значения указателя_в_файле и указателя_в_ключе зависят от файлового драйвера. Это может быть номер записи, относительный номер байта в файле или какой либо иной вид "опорной точки" в файле. Эти параметры используются для начала обработки с конкретной записи в файле.
    Пример:
    SET(Customer) !Обработка в физическом порядке
    Cus:Name = 'Smith'
    SET(Customer,Cus:NameKey)
    !Обработка в физическом порядке, начиная с записи, в
    ! которой поле Name = 'Smith'
    SavePtr = POINTER(Customer)
    SET(Customer,SavePtr)
    !Обработка в физическом порядке, начиная с записи,
    ! физический номер которой хранится в SavePtr
    SET(Cus:NameKey)
    !Обработка в порядке, задаваемом ключом NameKey
    SavePtr = POINTER(Cus:NameKey)
    SET(Cus:NameKey,SavePtr)
    !Обработка в порядке, задаваемом ключом NameKey, с за-
    ! писи, относительный номер которой в ключе содержит
    ! SavePtr
    Cus:Name = 'Smith'
    SET(Cus:NameKey,Cus:NameKey)
    !Обработка в порядке, задаваемом ключом NameKey, начи-
    ! ная с первой записи, в которой поле = 'Smith'
    Cus:Name = 'Smith'
    SavePtr = POINTER(Customer)
    SET(Cus:NameKey,Cus:NameKey,SavePtr)
    !Обработка в порядке, задаваемом ключом NameKey,
    ! Name = 'Smith' и номер записи = SavePtr
    См. также: , , , ,

    SHARE (открыть файл данных)


    SHARE(файл[,режим доступа])


    файл Метка файла.
    режим доступа Числовая константа, переменная или выражение, задающее уровень доступа к файлу как для открывающего его пользователя, так и для остальных пользователей многопользовательской системы. Если пропущен, то подразумевается 42h (всем, кроме меня, DENY NONE).

    Оператор SHARE открывает файл для обработки и устанавливает режим доступа к нему. Оператор SHARE аналогичен оператору OPEN и отличается от него только режимом доступа по умолчанию. РЕЖИМ ДОСТУПА это битовая карта, указывающая операционке, какой доступ предоставить открывающему пользователю, и какой доступ запретить для остальных потенциальных пользователей этого файла. Допустимы следующие значения режима доступа:

    Дес. 16н. Режим доступа
    Открывающий пользователь 0 0h Только для чтения (Read Only)
    1 1h Только для записи (Write Only)
    2 2h Для чтения и записи (Read/Write)
    Остальные пользователи 0 0h Любой доступ (режим FCB-совместимости)
    16 10h Запрещен любой доступ (Deny All)
    32 20h Запрещена запись (Deny Write)
    48 30h Запрещено чтение (Deny Read)
    64 40h ??? (Deny None)

    Возвращаемые ошибки:
    02 Файл не найден
    04 Слишком много открытых файлов
    05 Доступ запрещен
    52 Файл уже открыт
    75 Неверный описатель типа поля
    Пример:
    ReadOnly EQUATE(0) !Мнемонические значения для режимов
    WriteOnly EQUATE(1) ! доступа
    ReadWrite EOUATE(2)
    DenyAll EQUATE(10h)
    DenyWrite EQUATE(20h)
    DenyRead EQUATE(30h)
    DenyNone EQUATE(40h)
    CODE
    SHARE(Names,ReadOnly+DenyWrite) !Открываем в режиме толь-
    ! ко для чтения.
    См. также:

    SKIP (пропустить записи в последовательности)


    SKIP(файл,count)


    файл Метка файла.
    count Числовая константа или переменная. COUNT задает число пропускаемых записей. Если значение положительное, то записи пропускаются ВПЕРЕД (аналогично NEXT). Если же COUNT отрицательно, то записи пропускаются НАЗАД (аналогично PREVIOUS).

    Оператор SKIP используется для пропуска записей во время последовательной обработки файла. Он пропускает записи в порядке, задаваемом оператором SET, перемещая указатель записи в файле на COUNT записей вперед или назад. SKIP более эффективен, чем NEXT или PREVIOUS при пропуске нескольких записей, поскольку он НЕ считывает записи в буфер, отведенный под структуру RECORD.
    Если SKIP пытается выйти за конец или начало файла, то функции EOF() и BOF() возвращают истину. Если ранее не был выполнен SET, то SKIP игнорируется.
    Пример:
    SET(Itm:InvoiceKey) !Начинаем от начала файла товаров
    LOOP UNTIL EOF(Items) !Обрабатываем все записи
    NEXT(Items) !Читаем запись
    IF ERRORCODE() THEN STOP(ERROR()).
    IF Itm:InvoiceNo <> SavinvNo !Если это первый товар в зака-
    ! зе, то
    Hea:InvoiceNo = Itm:InvoiceNo !инициализируем ключевое
    ! поле и
    GET(Header,Hea:InvoiceKey)
    !получаем соответствующий ему за-
    ! головок столбца
    IF ERRORCODE() THEN STOP(ERROR()).
    IF Hea:InvoiceStatus = 'Cancel' !Если заказ отменен,
    SKIP(Items,Hea:ltemCount-1) ! то пропускаем осталь-
    ! ные товары
    CYCLE ! и обрабатываем следую-
    ! щий заказ
    . . ! конец операторов IF
    DO ItemProcess ! обрабатываем товар
    SavInvNo = Itm:lnvoiceNo ! сохраняем номер счета
    . !Конец цикла

    STREAM (разрешить буферизацию через ДОС)


    STREAM(файл)


    файл Метка файла.

    Некоторые файловые системы сбрасывают буфера при каждой записи на диск. Оператор STREAM запрещает это автоматический сброс. Буфера ДОС выделяются командой BUFFERS= в файле CONFIG.SYS. Они хранят записываемое на диск до тех пор, пока все буфера не заполнятся, а затем все сразу сбрасываются на диск. Элементы каталога обновляются только при физической записи буферов на диск. Операция STREAM завершается с закрытием файла, что автоматически сбрасывает буфера на диск, либо с выполнением оператора FLUSH.
    Поддержка этого оператора зависит от файловой системы и описана в документации по файловому драйверу данной системы.
    Пример:
    STREAM(History) !Используем буфера ДОС
    SET(Current) !Идем в начало файла CURRENT
    LOOP UNTIL EOF(Current)
    NEXT(Current)
    His:Record - Cur:Record
    ADD(History)
    . !End loop
    FLUSH(History) !Завершаем поточную обработку
    ! и сбрасываем буфера на диск
    См. также:

    UNLOCK (разблокировать заблокированный файл)


    UNLOCK(файл)



    файл Метка файла.

    Оператор UNLOCK разблокирует ранее заблокированный оператором LOCK файл данных. Он не может разблокировать файл, заблокированный другой станцией. Если файл не блокирован или блокирован другой станцией, то оператор UNLOCK игнорируется. UNLOCK не возвращает каких-либо ошибок. Точное действие UNLOCK зависит от файлового драйвера.
    Пример:
    LOOP !Цикл во избежание "смертельного
    ! объятия"
    LOCK(Master,1) !1 секунду пытаемся заблокировать
    ! основной файл
    IF ERRORCODE() = 201 !Если кто-то уже блокирует его, то
    BEEP(0,100) ! ждем секунду и
    CYCLE ! пытаемся снова...
    .
    LOCK(Detail,1) !За секунду пытаемся заблокировать
    ! файл подробностей
    IF ERRORCODE() = 201 !Если кто-то уже блокирует его, то
    UNLOCK(Master) ! разблокируем занятый нами файл,
    BEEP(0,100) ! подождем секунду и
    CYCLE ! еще разок попробуем
    . . !Конец операторов IF и LOOP


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

    ADD (добавить элемент)

    ADD(очередь[,указатель|[+]ключ,....[-]ключ имя ])

    очередь Метка ОЧЕРЕДИ, или метка
    переданного параметра типа QUEUE.
    указатель Числовая константа,
    переменная или выражение.
    Указатель должен быть в
    диапазоне от 1 до ЧИСЛА
    ЭЛЕМЕНТОВ В ОЧЕРЕДИ.
    +- Ведущий знак плюс/минус
    означает, что по данному ключу
    сортировка производится по
    возрастанию/убыванию.
    ключ Метка поля, описанного в
    составе ОЧЕРЕДИ. Если ОЧЕРЕДЬ
    имеет префикс, то КЛЮЧ также
    ДОЛЖЕН иметь его.
    имя Строковая константа,
    переменная или выражение,
    содержащая атрибуты NAME для
    полей, входящих в состав
    ОЧЕРЕДИ, разделенные запятыми
    и с необязательным ведущим
    знаком + или - для каждого
    атрибута. Этот параметр
    чувствителен к регистру букв.

    ADD записывает новый элемент в буфер данных ОЧЕРЕДИ. Если недостаточно памяти для добавления нового элемента, то возвращается ошибка "Недостаточно памяти" (Insufficient Memory).
    ADD(очередь) Дописывает новый элемент в конец ОЧЕРЕДИ.

    ADD(очередь,указатель) Вставляет новый элемент в относительную позицию, задаваемую параметром УКАЗАТЕЛЬ. Если в этой позиции уже есть элемент, то он "проталкивается вниз", чтобы освободить место для нового элемента. Все последующие указатели перестраиваются с учетом нового элемента. Например, элемент, добавленный в позицию 10, вытолкнет старый десятый элемент в позицию 11, элемент 11 в позицию 12 и т.д. Если УКАЗАТЕЛЬ=0 или больше общего числа элементов ОЧЕРЕДИ, то элемент будет добавлен в конец очереди.
    ADD(очередь,ключ) Вставляет новый элемент в отсортированную ОЧЕРЕДЬ. Можно использовать до 16 ключей, разделенных запятыми, с необязательным ведущим знаком плюс или минус, чтобы задать сортировку по возрастанию или убыванию. Элемент будет вставлен сразу после тех элементов, которые соответствуют значениям ключей. Если ОЧЕРЕДЬ еще пуста, то ADD(очередь,ключ) можно использовать для построения сразу отсортированной ОЧЕРЕДИ.
    ADD(очередь,имя) Вставляет новый элемент в отсортированную ОЧЕРЕДЬ. Строка ИМЯ должна содержать атрибуты полей NAME, разделенные запятыми и с необязательными знаками плюс или минус для задания порядка сортировки. Элемент вставляется сразу после тех записей, которые соответствуют значениям полей. Если ОЧЕРЕДЬ еще пуста, то ADD(очередь,имя) можно использовать для построения сразу отсортированной ОЧЕРЕДИ.

    Возвращаемые ошибки:
    08 Недостаточно памяти
    75 Неверный описатель типа
    поля
    Пример:
    NameQue QUEUE,PRE(Que)
    Name STRING(20),NAME('FirstField')
    Zip DECIMAL(5,0),NAME('SecondField')
    .
    CODE
    ADD(NameQue) !Добавить элемент в конец очереди
    ADD(NameQue,1) !Вставить элемент в первую позицию
    Que:Name = 'Иванов' !Инициализируем поля
    Que:Zip = 12345
    ADD(NameQue,+Que:Name,-Que:Zip)
    !ИМЯ - по возрастанию, ИНДЕКС - по
    ! убыванию
    Que:Name = 'Кузнецов' !Инициализируем поля
    Que:Zip = 12345
    ADD(NameQue,'+FirstField,-SecondField')
    !Add in name, descending zip order

    DELETE (удалить элемент)

    DELETE (очередь)

    очередь Метка QUEUE-структуры, или
    метка переданного параметра
    типа QUEUE.

    DELETE удаляет элемент ОЧЕРЕДИ в позиции, в которой последний раз успешно выполнены GET или ADD, и освобождает память. Если ранее не был выполнен GET или ADD, то возвращается ошибка "Элемент очереди не найден (Queue Entry Not Found). Все указатели вперед и назад будут перестроены, чтобы компенсировать удаленный элемент.
    Возвращаемые ошибки:
    08 Недостаточно памяти
    30 Элемент не найден
    Пример:
    Que:Name = 'Иванов' !Инициализируем ключ
    GET(NameQue,Que:Name) !Находим подходящую запись
    DELETE(NameQue) !И удаляем ее

    FREE (удалить очередь)

    FREE (очередь)

    очередь Метка QUEUE-структуры, или
    метка переданного параметра
    типа QUEUE.

    FREE удаляет все элементы очереди и освобождает занимаемую ими память. Кроме этого, он удаляет "излишек", выделяемый под саму очередь.
    Возвращаемые ошибки:
    08 Недостаточно памяти
    Пример:
    FREE(Location) !Удалить очередь МЕСТОНАХОЖДЕНИЕ
    FREE(NameQue) !Удалить очередь ИМЯ

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

    GET(очередь[,указатель [+]ключ,....[-]ключ имя])

    очередь Метка ОЧЕРЕДИ, или метка
    переданного параметра типа QUEUE.
    указатель Числовая константа,
    переменная или выражение.
    Указатель должен быть в
    диапазоне от 1 до
    ЧИСЛА_ЭЛЕМЕНТОВ_В_ОЧЕРЕДИ.
    +- Ведущий знак плюс/минус
    означает, что по данному ключу
    сортировка производится по
    возрастанию/убыванию.
    ключ Метка поля, описанного в
    составе ОЧЕРЕДИ. Если ОЧЕРЕДЬ
    имеет префикс, то КЛЮЧ также
    ДОЛЖЕН иметь его.
    имя Строковая константа, переменная или выражение, содержащая атрибуты NAME для полей, входящих в состав ОЧЕРЕДИ, разделенные запятыми и с необязательным ведущим знаком + или - для каждого атрибута. Этот параметр чувствителен к регистру букв.

    GET считывает элемент ОЧЕРЕДИ в буфер данных ОЧЕРЕДИ для обработки. Если GET не находит соответствия, то возвращается ошибка "Элемент очереди не найден (Queue Entry Not Found).

    GET(очередь,указатель) Возвращает элемент из
    позиции, задаваемой значением
    УКАЗАТЕЛЯ.
    GET(очередь,ключ) Ищет элемент ОЧЕРЕДИ, который соответствует значению поля(полей) ключа. Можно использовать до 16 ключей, разделенных запятыми. ОЧЕРЕДЬ должна быть уже отсортирована по полям, используемым в качестве ключевых.
    GET(очередь,имя) Ищет элемент ОЧЕРЕДИ, который соответствует значению поля(полей) имени. Строка ИМЯ должна содержать NAME-атрибуты полей, разделенные запятыми с необязательным ведущим знаком плюс или минус для задания порядка сортировки. ОЧЕРЕДЬ должна уже быть отсортирована по полям, перечисленным в параметре ИМЯ.

    Возвращаемые ошибки:
    08 Недостаточно памяти
    30 Элемент не найден
    75 Неверный описатель типа поля
    Пример:
    NameQue QUEUE,PRE(Que)
    Name STRING(20),NAME('FirstField')
    Zip DECIMAL(5,O),NAME('SecondField')
    .
    CODE
    !здесь мы строим очередь...
    GET(NameQue,1) !Читаем первый элемент
    IF ERRORCODE() THEN STOP(ERROR()).
    Que:Name = 'Иванов' !Инициализируем ключевое поле
    GET(NameQue,Que:Name) !Находим подходящую запись
    IF ERRORCODE() THEN STOP(ERROR()).
    Que:Name = Fil:Name !Берем начальное значение из Fil:Name
    GET(NameQue,Que:Name) !Находим подходящую запись
    IF ERRORCODE() THEN STOP(ERROR()).
    Que:Name = 'Кузнецов' !Инициализируем ключевые поля
    Que:Zip = 12345
    GET(NameQue,'FirstField,SecondField')
    !Находим подходящую запись
    IF ERRORCODE() THEN STOP(ERROR()).
    См. также:

    POINTER (указатель на последний элемент)

    POINTER (очередь)

    очередь Метка ОЧЕРЕДИ, или метка
    переданного параметра типа QUEUE.

    Функция POINTER возвращает длинное целое (тип LONG), задающее номер последнего элемента ОЧЕРЕДИ, к которому обращались ADD или GET.
    Возвращаемый тип данных: LONG
    Пример:
    Que:Name = 'Иванов' !Инициализируем ключевое поле
    GET(NameQue,Que:Name) !Получаем элемент
    IF ERRORCODE() THEN STOP(ERROR()). ! нет ли ошибок?
    SavPoint = POINTER(NameQue) !Сохраняем указатель

    PUT (перезаписать элемент)

    PUT(очередь[, [+]ключ,....[-]ключ имя])

    очередь Метка ОЧЕРЕДИ, или метка
    переданного параметра типа QUEUE.
    +- Ведущий знак плюс/минус означает, что по данному ключу сортировка производится по возрастанию/убыванию.
    ключ Метка поля, описанного в составе ОЧЕРЕДИ. Если ОЧЕРЕДЬ имеет префикс, то КЛЮЧ также ДОЛЖЕН иметь его.
    имя Строковая константа, переменная или выражение, содержащая атрибуты NAME для полей, входящих в состав ОЧЕРЕДИ, разделенные запятыми и с необязательным ведущим знаком + или - для каждого атрибута. Этот параметр чувствителен к регистру букв.

    PUT перезаписывает содержимое буфера ОЧЕРЕДИ обратно на то место где был выполнен GET или ADD. Если GET или ADD не были выполнены то возвращается ошибка "Элемент очереди не найден (Queue EntryNot Found).

    PUT(очередь) Записывает буфер обратно в
    ту же относительную позицию в
    очереди, где был выполнен по-
    следний успешный GET или ADD.
    PUT(очередь,ключ) Возвращает элемент в отсортированную очередь после успешного GET или ADD, соблюдая порядок сортировки если были изменены значения ключевых полей. Можно использовать до 16 ключей, разделенных запятыми, с необязательным ведущим знаком плюс или минус, чтобы задать сортировку по возрастанию или убыванию. Элемент будет вставлен сразу после тех элементов, которые соответствуют значениям ключей.
    PUT(очередь,имя) Возвращает элемент в отсортированную очередь после успешного GET или ADD, соблюдая порядок сортировки если были изменены значения ключевых полей. Строка ИМЯ должна содержать NAME-атрибуты полей, разделенные запятыми и с необязательными знаками плюс или минус для задания порядка сортировки. Элемент вставляется сразу после тех элементов, которые соответствуют значениям полей.

    Возвращаемые ошибки:
    08 Недостаточно памяти
    30 Элемент не найден
    75 Неверный описатель типа поля
    Пример:
    NameQue QUEUE,PRE(Que)
    Name STRING(20),NAME('FirstField')
    Zip DECIMAL(5,0),NAME('SecondField')
    .
    CODE
    !здесь мы строим очередь...
    Que:Name = 'Иванов' !Инициализируем ключевое поле

    GET(NameQue,Que:Name) ! Находим подходящую запись
    IF ERRORCODE() THEN STOP(ERROR()).
    Que:Zip = 12345 !Изменяем почтовый индекс
    PUT(NameQue) !Записываем изменения в очередь
    IF ERRORCODE() THEN STOP(ERROR()).
    Que:Name = 'Иванов' !Инициализируем ключевое поле
    GET(NameQue,Que:Name) !Находим подходящую запись
    IF ERRORCODE() THEN STOP(ERROR()).
    Que:Name = 'Кузнецов' !Изменяем ключевое поле
    PUT(NameQue.Que:Name) !Записываем изменения в очередь
    IF ERRORCODE() THEN STOP(ERROR()).
    Que:Name = 'Кузнецов' !Инициализируем ключевое поле
    GET(NameOue,'FirstField') !Находим подходящую запись
    IF ERRORCODE() THEN STOP(ERROR()).
    Que:Name = 'Иванов' !Изменяем ключевое поле
    PUT(NameQue,'FirstField') !Записываем изменения в очередь
    IF ERRORCODE() THEN STOP(ERROR()).

    QUEUE (описывает QUEUE-структуру)

    метка QUEUE[,PRE]
    метка field[,NAME()]

    PRE Задает префикс структуры.
    field Описание данных. Общий размер описанных данных может быть до 65,000 байт.

    QUEUE описывает очередь в памяти. Очередь (QUEUE) - это двусвязный список, каждый элемент имеет ссылку на предыдущий и последующий элементы. Метка QUEUE-структуры используется в операторах и функциях, работающих с очередями. При использовании в операторах присваивания, QUEUE рассматривается как данное типа GROUP.
    Очередь можно представить как "файл в памяти". Под описанную очередь выделяется буфер. При добавлении элемента в очередь, под него динамически выделяется память, и данные копируются из буфера в эту область памяти. При удалении элемента, выделенная под него память освобождается. В очереди может быть максимум 65,535 элементов.
    Очереди могут использовать виртуальную память, если таковая имеется. Это позволяет, теоретически, отвести под очереди до 42 мегов памяти. Под виртуальную память могут быть выделены EMS, XMS или место на диске. Она может быть разрешена или запрещена во время загрузки. Виртуальная память задается переменной окружения CLAVM. Если виртуальная память недоступна, то очередь хранится в стандартной памяти (нижние 640К). Если в качестве виртуальной памяти был выбран только диск, то очередь, насколько это возможно, хранится в стандартной памяти и в случае переполнения частично сбрасывается на диск. Если виртуальная память настроена на EMS/XMS, то очередь сначала будет вестись в EMS/XMS. Затем, если EMS/XMS не хватает, в стандартной (все это в пределах виртуальной памяти), затем снова в EMS/XMS но уже до исчерпания EMS/XMS, и затем уже будет сбрасываться на диск (если это разрешено).
    Память, отводимая под каждый элемент очереди, равна суммарному размеру полей элемента, плюс еще 28 байт (на системные данные и указатели), округленных с избытком до ближайшего числа кратного 16. Например: элемент состоит из двух полей: типа LONG и типа SHORT (всего 6 байт), и занимает 48 байт (6+26 и округляем до 48). Округление выполняется потому, что память выделяется 16-и байтными "параграфами". Существует, также, небольшой "излишек" памяти, выделяемый системой под вновь создающуюся очередь, который освобождается только оператором FREE.
    Пример:
    NameQue QUEUE,PRE(Nam) !Описываем очередь
    Name STRING(20)
    Zip DECIMAL(5,0),NAME('SortField')
    . !Конец описания
    См. также: , , , Приложение C

    RECORDS (количество элементов)

    RECORDS (очередь)

    очередь Метка ОЧЕРЕДИ, или метка
    переданного параметра типа QUEUE.

    Функция RECORDS возвращает длинное целое, содержащее количество элементов в ОЧЕРЕДИ.
    Возвращаемый тип данных: LONG
    Пример:
    Entries# = RECORDS(Location) !Узнаем количество элементов
    LOOP I# = 1 TO Entries# !Обрабатываем всю очередь
    GET(Location,I#) ! читая каждый ее элемент
    IF ERRORCODE() THEN STOP(ERROR()).
    DO SomeProcess ! и обрабатывая его
    . !Конец цикла


    SORT (отсортировать очередь)

    SORT(очередь[, [+]ключ,....[-]ключ имя])

    очередь Метка ОЧЕРЕДИ, или метка
    переданного параметра типа QUEUE.
    +- Ведущий знак плюс/минус
    означает, что по данному ключу
    сортировка производится по
    возрастанию/убыванию.
    ключ Метка поля, описанного в
    составе ОЧЕРЕДИ. Если ОЧЕРЕДЬ
    имеет префикс, то КЛЮЧ также
    ДОЛЖЕН иметь его.
    имя Строковая константа,
    переменная или выражение,
    содержащая атрибуты NAME для
    полей, входящих в состав
    ОЧЕРЕДИ, разделенные запятыми
    и с необязательным ведущим
    знаком + или - для каждого
    атрибута. Этот параметр
    чувствителен к регистру букв.

    SORT переупорядочивает элементы ОЧЕРЕДИ. SORT не занимается перемещением данных, она только изменяет указатели элементов.

    SORT(очередь,ключ) Сортирует ОЧЕРЕДЬ в порядке,
    задаваемом ключом. Можно
    использовать до 16 ключей,
    разделенных запятыми, с
    необязательным ведущим знаком
    плюс или минус, чтобы задать
    сортировку по возрастанию или
    убыванию.
    SORT(очередь,имя) Сортирует ОЧЕРЕДЬ в порядке,
    задаваемом строкой ИМЯ. Строка
    ИМЯ должна содержать
    NAME-атрибуты полей, разделенные
    запятыми и с необязательными
    знаками плюс или минус для
    задания порядка сортировки.

    Возвращаемые ошибки:
    08 Недостаточно памяти
    75 Неверный описатель типа поля
    Пример:
    Location QUEUE,PRE(Loc)
    Name STRING(20),NAME('FirstField')
    City STRING(10),NAME('SecondField')
    State STRING(2)
    Zip DECIMAL(5.0)
    .
    CODE
    SORT(Location,Loc:State,Loc:City,Loc:Zip)
    !Сортируем по индексу в пределах
    ! города в пределах штата
    SORT(Location,+Loc:State,-Loc:Zip)
    !Сортируем по индексу в пределах
    ! штата по убыванию
    SORT(Location,'FirstField,-SecondField')
    !Сортируем по убыванию по имени
    ! города

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

    ABS (абсолютное значение)


    ABS(выражение)



    выражение Константа, переменная или выражение.

    Функция ABS возвращает абсолютное значение ВЫРАЖЕНИЯ. Абсолютное значение всегда положительно (или ноль).
    Возвращаемый тип данных: REAL
    Пример:
    C = ABS(A - B) !C - абсолютное значение разницы между A и B
    IF B < 0 THEN B = ABS(B). !Если B отрицательно, то сменить
    ! его знак

    ACOS (арккосинус)


    ACOS(выражение)


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

    Функция ACOS возвращает ОБРАТНЫЙ косинус. "Обратить косинус" означает "найти угол, имеющий заданный косинус". Возвращается угол в радианах.
    Возвращаемый тип данных: REAL
    Пример:
    InvCosine = ACOS(CosineAngle) !Получаем арккосинус
    См. также:

    ADDRESS (адрес памяти)


    ADDRESS(переменная)


    переменная Метка элемента данных.

    Функцйя ADDRESS возвращает длинное целое (LONG), содержащее адрес ПЕРЕМЕННОЙ в памяти в стандартном формате сегмент:смещение. Эта функция позволяет передать адрес ПЕРЕМЕННОЙ внешним библиотекам, которы могут быть написаны на других языках. Если программа оверлейная, то после завершения процедуры, в которой использовалась значение ADDRESS, это значение не будет соответствовать истине. Это происходит из-за того, что загрузчик оверлеев выпоняет автоматическую подкачку и выгрузку сегментов.
    Возвращаемый тип данных: LONG
    Пример:
    MAP
    MODULE('External.Obj') !Внешняя библиотека
    SomeProc(LONG),C !Передаем параметры как в С
    . .
    Varl CSTRING(10) !Строка, завершающаяся нулем
    CODE
    SomeProc(ADDRESS(Varl))
    !Передаем адрес Varl во внешнюю процедуру

    AGE (возраст от базовой даты)


    AGE(дата_рождения,базовая_дата)


    дата_рождения Числовое выражение для стандартной даты.
    базовая_дата Числовое выражение для стандартной даты. Если пропущена, то для вычислений берется системная дата ДОС.

    Функция AGE возвращает строку, содержащую время, прошедшее между двумя датами. Возвращаемая строка имеет такой формат:
    1..60 дней - 'nn DAYS'
    61 день..24 месяца - 'nn MOS'
    2 года..999 лет - 'nnn YRS'
    Возвращаемый тип данных: STRING
    Пример:
    Message = 'Работнику ' & Emp:Name & 'на сегодняшний день' |
    & AGE(Emp:DOB.TODAYo)
    !Выводим возраст работника в сообщении
    См. также:

    ALL (строка из повторяющихся символов)


    ALL(строка[,длина])


    строка Строковое выражение, содержащее последовательность символов для повторения.
    длина Длина возвращаемой строки. Если пропущена, то будет возвращена строка из 255 символов.

    Функция ALL возвращает строку, содержащую СТРОКУ, повторенную несколько раз. Возвращаемый тип данных: STRING
    Пример:
    Starline = ALL('*',25) !Получить 25 звездочек
    Dotline = ALL('.') !Получить 255 точек

    ASIN (арксинус)


    ASIN(выражение)


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

    Функция ASIN возвращает ОБРАТНЫЙ синус. "Обратить синус" означает "получить угол, имеющий заданный синус". Возвращается угол в радианах.
    Возвращаемый тип данных: REAL
    Пример:
    InvSine = ASIN(SineAngle) !Получить арксинус
    См. также:

    ATAN (арктангенс)


    ATAN(выражение)


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

    Функция ATAN возвращает ОБРАТНЫЙ тангенсу "Обратить тангенс" означает "найти угол, имеющий заданный тангенс". Возвращается угол в радианах.
    Возвращаемый тип данных: REAL
    Пример:
    InvTangent = ATAN(TangentAngle) !Получить арктангенс
    См. также:

    BAND (побитовое И - AND)


    BAND(значение,маска)


    значение Числовая константа, переменная или выражение,
    задающее битовое значение, на которое накладывается МАСКА. ЗНАЧЕНИЕ, при необходимости, преобразуется к типу LONG перед операцией.
    маска Числовая константа, переменная или выражение, задающее битовую маску. При необходимости, МАСКА преобразуется к типу LONG перед выполнением операции.

    Функция BAND сравнивает ЗНАЧЕНИЕ с МАСКОЙ, выполняя операцию ЛОГИЧЕСКОЕ И над каждым битом. Возвращается длинное целое, в котором единицы будут только в тех местах, где они были и в ЗНАЧЕНИИ и в МАСКЕ, в остальных местах будут нули.
    BAND обычно используется для выяснения значения одного или нескольких бит (0 или 1) в переменной.
    Возвращаемый тип данных: LONG

    Пример:
    BAND(0110b,0010b) вернет 0010b !0110b = 6, 0010b = 2
    RateType BYTE !Тип оклада
    Female EQUATE(0001b) !Маска для женщин
    Male EQUATE(0010b) !Маска для мужчин
    Over25 EQUATE(0100b) !Маска для тех, кто старше 25 лет
    CODE
    IF BAND(RateType,Female) | !Если женщина
    AND BAND(RateType,Over25 ! старше 25 лет,
    DO BaseRate ! то премия - обычная
    ELSIF BAND(RateType,Male) !Если мужчина,
    DO AdjBase ! то подправить размер премии
    . !End if

    БИТОВЫЕ ФУНКЦИИ

    JOKE: -Что такое бит?
    -Это байт за вычетом налогов.
    -Что такое байт?
    -[восемь раз объясняется, что такое бит]
    -А что же такое килобайт?
    -Ну, это очень долго объяснять...


    BOR (побитовое ИЛИ - OR)


    BOR(значение,маска)


    значение Числовая константа, переменная или выражение,
    задающее битовое значение, на которое накладывается МАСКА. ЗНАЧЕНИЕ, при необходимости, преобразуется к типу LONG перед операцией.
    маска Числовая константа, переменная или выражение,
    задающее битовую маску. При необходимости, МАСКА преобразуется к типу LONG перед выполнением операции.

    Функция BOR сравнивает ЗНАЧЕНИЕ с МАСКОЙ, выполняя операцию
    ЛОГИЧЕСКОЕ ИЛИ над каждым битом. Возвращается длинное целое, в котором единице будут равны те биты, которые были единицами либо в ЗНАЧЕНИИ, либо в МАСКЕ либо и там и там, остальные биты будут нулями.
    BOR обычно используется для того, чтобы принудительно установить один или несколько битов переменной в единицу.
    Возвращаемый тип данных: LONG
    Пример:
    BOR(0110b,0010b) вернет 0110b !0110b = 6, 0010b = 2
    RateType BYTE !Тип оклада
    Female EQUATE(0001b) !Маска для женщин
    Male EQUATE(0010b) !Маска для мужчин
    Over25 EQUATE(0100b) !Маска для тех, кто старше 25 лет
    CODE
    RateType = BOR(RateType,Over25) !Установить признак "стар-
    ! ше 25 лет"
    RateType = BOR(RateType,Male) !Установить признак "оклад
    ! мужчин"

    BSHIFT (побитовый сдвиг)


    BSHIFT(значение,счетчик)


    значение Числовая константа, переменная или выражение.
    При необходимости, преобразуется к типу LONG перед операцией.
    счетчик Числовая константа, переменная или выражение,
    задающее на сколько бит нужно сдвинуть ЗНАЧЕНИЕ. Если СЧЕТЧИК положителен, значение сдвигается ВЛЕВО, если отрицателен - то ВПРАВО.

    Функция BSHIFT сдвигает биты ЗНАЧЕНИЯ на СЧЕТЧИК битов. ЗНАЧЕНИЕ может быть сдвинуто ВЛЕВО (от младших битов к старшим) или ВПРАВО (от старших к младшим), освобождающиеся места заполняются нулями.
    (А.С.П. - можно сказать, что BSHIFT умножает (СЧЕТЧИК>0) или делит (СЧЕТЧИК<0) ЗНАЧЕНИЕ на 2 в степени СЧЕТЧИК. Скажем, чтобы умножить Х на 16 можно выполнить либо А=Х*16 либо А=BSHIFT(X,4), причем последнее выражение выполнится быстрее первого, поскольку обычно реализуется на уровне процессорной команды сдвига. В ФОРТЕ используется именно этот принцип)
    Возвращаемый тип данных: LONG
    Пример:
    BSHIFT(0110b,1) вернет 1100b
    BSHIFT(0110b,-1) вернет 0011b
    Varswitch = BSHIFT(20,3) !Умножаем на 8
    Varswitch = BSHIFT(Varswitch,-2) !Делим на 4
    (А.С.П. - когда я писал свое примечание, я еще не смотрел на две предыдущие строки :)


    BXOR (Побитовое Исключающее ИЛИ - XOR)


    BXOR(значение,маска)


    значение Числовая константа, переменная или выражение,
    задающее битовое значение, на которое накладывается МАСКА. ЗНАЧЕНИЕ, при необходимости, преобразуется к типу LONG перед операцией.
    маска Числовая константа, переменная или выражение, задающее битовую маску. При необходимости, МАСКА преобразуется к типу LONG перед выполнением операции.

    Функция BXOR сравнивает ЗНАЧЕНИЕ с МАСКОЙ, выполняя операцию ЛОГИЧЕСКОЕ ИСКЛЮЧАЮЩЕЕ ИЛИ над каждым битом. Возвращается длинное целое, в котором в единицу будут установлены только те биты, которые были единицами и в ЗНАЧЕНИИ и в МАСКЕ. Те биты, которые не совпали в МАСКЕ и ЗНАЧЕНИИ, а также те, которые были нулями и там и там, будут нулями.
    BXOR обычно используется для переключения из 1 в 0 или наоборот одного или нескольких битов переменной.
    Возвращаемый тип данных: LONG
    Пример:
    BXOR(0110b,0010b) вернет 0100b !0110b=6, 0100b=4, 0010b=2
    RateType BYTE !Тип оклада
    Female EQUATE(0001b) !Маска для женщин
    Male EQUATE(0010b) !Маска для мужчин
    Over25 EQUATE(0100b) !Маска для тех, кто старше 25 лет
    Over65 EQUATE(1100b) !Маска для тех, кто старше 65 лет
    CODE
    RateType = BXOR(RateType,Over65) !Инвертировать признак "стар-
    ! ше 65 лет"

    CENTER (центрирование строки)


    CENTER(строка[,длина])


    строка Строковая константа, переменная или выражение.
    длина Длина результирующей строки. Если пропущена, то используется длина параметра СТРОКА.

    Функция CENTER сначала удаляет ведущие и хвостовые пробелы из СТРОКИ, затем дополняет ее ведущими и хвостовыми пробелами так, чтобы строка отцентрировалась в пределах ДЛИНЫ и затем возвращает полученный результат.
    Возвращаемый тип данных: STRING
    Пример:
    CENTER('ABC',5) вернет ' ABC '
    CENTER('ABC ') вернет ' ABC '
    CENTER(' ABC') вернет ' ABC '
    Message = CENTER(Message) !Сообщение - в центр
    Rpt:Title = CENTER(Name,60) !Имя - в центр

    CHR (переводит ASCII-код символа в символ)


    CHR(код)


    код Числовое выражение, содержащее числовой ASCII-код символа.

    Функция CHR возвращает символ, представленный его ASCII-кодом.
    Возвращаемый тип данных: STRING
    Пример:
    Stringvar = CHR(122) !Строчная "z"
    Stringvar = CHR(239) !Строчная "я"

    CLIP (строка без хвостовых пробелов)


    CLIP(строка)


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

    Функция CLIP удаляет хвостовые пробелы из строки. Возвращаемая строка - это подстрока СТРОКИ без хвостовых пробелов. CLIP часто используется вместе с оператором конкатенации (слияния) в строковых выражениях.
    Возвращаемый тип данных: STRING
    Пример:
    Name = CLIP(Last) &','& CLIP(First) & Init & '.'
    !ФИО по военному образцу,
    ! типа "Agarkoff, Serg P."

    CLOCK (системное время)


    CLOCK()

    Функция CLOCK возвращает время дня, исходя из системного времени ДОС.
    Возвращаемый тип данных: LONG
    Пример:
    Time = CLOCK() !Сохраняем системное время
    SHOW(1,1,CLOCK(),@T4) !Показать системное время

    COMMAND (командная строка)


    COMMAND(флаг[,операция])


    флаг Строковая константа или переменная, содержащая искомый параметр или номер параметра в командной строке.
    операция Целочисленная константа или переменная в диапазоне от 0 до 3. Если пропущена, то по умолчанию 0.

    Функция COMMAND возвращает значение параметра ФЛАГ из командной строки, файла конфигурации или переменной окружения. Если ФЛАГ не найден, COMMAND возвращает пустую строку. Если ФЛАГ описан многократно, то возвращается его первое значение.
    ОПЕРАЦИЯ указывает где искать:
    3 в командной строке
    2 в файле конфигурации
    1 в окружении
    0 во всех трех предыдущих, в порядке 3-2-1
    COMMAND ищет выражение ФЛАГ=VALUE и возвращает VALUE. Не должно быть пробелов между ФЛАГОМ, знаком равенства и VALUE. Из конфигурационного файла или окружения возвращается все, что находится справа от знака равенства. VALUE, получаемое из командной строки считывается до первой запятой или пробела. Если пробел или запятая являются значением ФЛАГА, то все, что стоит справа от знака равенства, должно заключаться в двойные кавычки (ФЛАГ="VALUE").
    Также, COMMAND ищет в командной строке ФЛАГ, перед которым стоит слэш (/). Если такое найдено, то COMMAND возвращает значение ФЛАГА без слэша. Если ФЛАГ содержит только число, то COMMAND возвращает параметр командной строки, номер которого содержится в ФЛАГЕ. Если ФЛАГ пустая строка ('') и ОПЕРАЦИЯ=3, то возвращается вся командная строка, к которой добавлен ведущий пробел.
    Файл конфигурации позволяет подстраивать программу во время исполнения. Это текстовый файл, который содержит любые желаемые параметры, которые имеют смысл во время исполнения. Каждый параметр должен занимать отдельную строку. По умолчанию, имя файла конфигурации, это имя программы, к которой этот файл относится, с расширением .INI. Это имя можно изменить из командной строки параметром CLAINI=новое_имя_фалй. CLAINI не утанавливается командой SETCOMMAND.
    Возвращаемый тип данных: STRING
    Пример:
    C:\>MYPROG CLAVM="EMS ... 16,3,6"
    !Параметр в командной строке содержит запятые
    C:\>MYPROG CLAINI=INITFILE.INI
    !Вместо MYPROG.INI используем INITFILE.INI
    RUN(COMMAND('COMSPEC',1) & '/C DIR /P')
    !Находим местоположение command.com
    ! и выполняем команду ДОС
    IF COMMAND('/N',3) !В командной строке есть /N?
    DO SomeProcess
    .
    IF UPPER(COMMAND('CLAVM',0)) = 'OFF'
    !Неужели виртуальная память отключена?
    DO NoVirtualMem ! ну тогда придется обойтись без нее :-(
    ELSE
    DO VirtualMem ! делаем нечто, интенсивно использущее
    ! память.
    .
    CommandString = COMMAND(",3) !Получаем всю командную строку
    SecondParm = COMMAND('2'.3)
    !Получаем из командной строки второй параметр
    См. также:

    COS (косинус)


    COS(радиан)


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

    Функция COS возвращает тригонометрический косинус угла, выраженного в радианах. Косинус это отношение стороны прилегающей к углу и гипотенузы.
    Возвращаемый тип данных: REAL
    Пример:
    Angle = 45 * Deg2Rad !Переводим 45њ в радианы
    CoSineAngle = SIN(Angle) !Получаем косинус угла в 45њ

    DATE (стандартная дата)


    DATE(месяц,число,год)


    месяц Числовая константа, переменная или выражение, задающее месяц.
    число Числовая константа, переменная или выражение,
    задающее число месяца.
    год Числовая константа, переменная или выражение,
    задающее год, в диапазоне от 00 до 99 (что
    означает годы 1900-1999) либо от 1801 до 2099

    Функция DATE возвращает стандартную дату для заданных месяца, числа и года. Параметры МЕСЯЦ и ДЕНЬ могут иметь значения, выходящие за пределы разумного. Скажем, 13й месяц рассматривается как январь следующего года. А день 32 января рассматривается как 1е февраля. Соответственно, DATE(12,32,87), DATE(13,1,87) и DATE(1,1,88) означают один и тот же день.
    Возвращаемый тип данных: LONG
    Пример:
    HireDate = DATE(Hir:Month,Hir:Day,Hir:Year) !Вычисляем дату
    ! приема на работу
    См. также:

    DAY (день месяца для заданной даты)


    DAY(дата)


    дата Числовая константа, переменная, выражение
    или метка переменной типа STRING, CSTRING или PSTRING, описанной в шаблоне даты. ДАТА должна быть стандартной датой. Переменная, описанная в шаблоне даты, автоматически преобразуется в промежуточное значение - стандартную дату.

    Функция DAY вычисляет число месяца (1..31) для заданной стандартной даты.
    Возвращаемый тип данных: LONG
    Пример:
    OutDay = DAY(TODAY()) !Какое у нас сегодня число?
    DueDay = DAY(TODAY()+2) !Вычисляем день выплат
    См. также:

    DEFORMAT (удаляет форматирование из числовых строк)


    DEFORMAT(строка[,шаблон])


    строка Строковое выражение, содержащее строку цифр.
    шаблон Шаблон формата или метка данного типа STRING,
    CSTRING или PSTRING, описанного как шаблон формата. Если пропущено, то используется шаблон, использованный для СТРОКИ. (?) Если СТРОКА описана без параметра ШАБЛОН, то возвращаемое значение будет содержать только те символы, которые разрешены в числовых константах.

    Функция DEFORMAT удаляет символы форматирования и строки, содержащей цифры, возвращается только то, что можно распознать как число.
    Возвращаемый тип данных: STRING
    Пример:
    DialString = 'ATDT1' & DEFORMAT(Phone,@P(###)###-####P) & |
    '@13,10)' !Составляем номер для набора модемом
    ClarionDate = DEFORMAT(dBaseDate,@D1)
    !Получаем стандартную дату из строки вида mm/dd/yy

    ERROR (сообщение об ошибке)


    ERROR()

    Функция ERROR возвращает строку, содержащую описание возникшей ошибки? Если ошибок не было, то ERROR вернет пустую строку.
    Возвращаемый тип данных: STRING
    Пример:
    PUT(NameQueue) !Пишем запись
    IF ERROR() = 'Queue Entry Not Found' !Если не найдена
    ADD(NameQueue) ! то добавим новую
    IF ERRORCODE() THEN STOP(ERROR()).
    !Может еще какие-то ЕГГОГИ?
    .

    ERRORCODE (номер кода ошибки)


    ERRORCODE()

    Функция ERRORCODE возвращает номер (код) возникшей ошибки. Если ошибок не было, то ERRORCODE возвращает ноль.
    Возвращаемый тип данных: LONG
    Пример:
    ADD(Location) !Добавим новую запись
    IF ERRORCODE() = 8 !Не хватает памяти?
    SHOW(1,5,'Памяти мало!') ! сообщим об этом вопиющем факте
    .

    ERRORFILE (имя ошибочного файла)


    ERRORFILE()

    Функция ERRORFILE возвращает имя файла, при обработке которого возникла ошибка. Если файл открыт, то возвращается его полная спецификация в формате ДОС. Если файл не открыт, то возвращается содержимое атрибута NAME оператора FILE. Если файл не открыт и оператор FILE был без атрибута NAME, то возвращается метка оператора FILE. Если ошибок не было, или возникшая ошибка не связана с файлами, то ERRORFILE возвращает пустую строку.
    Возвращаемый тип данных: STRING
    Пример:
    ADD(Location) !Добавляем новый элемент
    IF ERRORCODE()
    SHOW(1,5,'Проблема с файлом ' & ERRORFILE())
    !Вывести сообщение
    ASK ! и подождать нажатия на кнопку
    .

    FORMAT (форматирует число по шаблону)


    FORMAT(значение,шаблон)


    значение Числовое выражение, содержащее значение для
    форматирования.
    шаблон Шаблон формата или метка STRING, CSTRING или
    PSTRING описанной с параметром ШАБЛОН.

    Функция FORMAT возвращает числовую строку, отформатированную согласно параметру ШАБЛОН.
    Возвращаемый тип данных: STRING
    Пример:
    Rpt:SocSecNbr = FORMAT(Emp:SSN,@P###-##-####P)
    !Форматируем под номер карточки социального страхования
    Phone=FORMAT(DEFORMAT(Phone,@P###-###-####P),@P(###)###-####P)
    !Заменяем в номере некоторые дефисы на скобки
    DateString = FORMAT(DateLong,@D1) !Преобразуем дату в строку

    IN (читать данные из порта)


    IN(порт,данные)


    порт Числовая константа, переменная или выражение, задаюшее номер порта. Список разрешенных номеров портов можно найти в Техническом Руководстве по IBM PC.
    данные Метка переменной типа BYTE, SHORT или USHORT. Если ДАННЫЕ типа BYTE, то из порта читается младший байт через регистр AL. Если же ДАННЫЕ типа SHORT или USHORT, то читаются два байта через регистр AX.

    Оператор IN читает данные из порта
    ввода, исполняя машинную команду IN.
    Пример:
    IN(61h,SavePPI) !Сохраняем PPI
    IN(62h,PError) !Нет ли ошибок четности
    См. также:

    INRANGE (попадает ли число в заданный диапазон)


    INRANGE(выражение,нижний_предел,верхний_предел)


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

    Функция INRANGE сравнивает ВЫРАЖЕНИЕ с включительным диапазоном чисел. Если значение ВЫРАЖЕНИЯ попадает в этот диапазон, то функция возвращает единицу ("ИСТИНУ"). Если же ВЫРАЖЕНИЕ больше ВЕРХНЕГО_ПРЕДЕЛА или меньше НИЖНЕГО_ПРЕДЕЛА, то возвращается ноль ("ЛОЖЬ").
    Возвращаемый тип данных: LONG
    Пример:
    IF INRANGE(Date % 7,1,5) !Если день - рабочий
    DO WeekdayRate ! то оплата обычная
    ELSE !Иначе
    DO WeekendRate ! плата за работу в выходные
    . !конец условия

    INSTRING (позиция подстроки в строке)


    INSTRING(подстрока,строка[,шаг][,старт])


    подстрока Строковая константа, переменная или выражение, содержащее искомую строку.
    строка Метка переменной типа STRING, CSTRING или PSTRING, в которой искать.
    шаг Числовая константа, переменная или выражение, задающее размер шага поиска. ШАГ=1 означает, что ПОДСТРОКА будет искаться с каждого символа СТРОКИ, ШАГ=2 - с каждого второго символа и так далее. Если пропущен, то по умолчанию равен длине ПОДСТРОКИ.
    старт Числовая константа, переменная или выражение, задающее начальную точку, номер символа, для поиска ring. Если пропущен, поиск начнется с первого символа СТРОКИ.

    Функция INSTRING проходит по СТРОКЕ, отыскивая в ней вхождения ПОДСТРОКИ. Если ПОДСТРОКА найдена, то возвращается номер символа в СТРОКЕ, с которого начинается вхождение в нее ПОДСТРОКИ. Если же ПОДСТРОКА не найдена, то INSTRING возвращает 0.
    Возвращаемый тип данных: LONG
    Пример:
    INSTRING('DEF','ABCDEFGHIJ',1,1) вернет 4
    INSTRING('DEF','ABCDEFGHIJ',2,1) вернет 0
    INSTRING('DEF','ABCDEFGHIJ',2,2) вернет 2
    INSTRING('DEF','ABCDEFGHIJ',3,1) вернет 2
    Extension = SUB(FileSpec,INSTRING('.',FileSpec) + 1,3)
    !Выделяем расширение из полной спецификации файла
    IF INSTRING(Search.Cus:Notes,1,1) !Если искомая переменная
    ! найдена, то
    Scr:Message = 'Есть такая буква!' ! сообщить об этом
    .

    INT (отсекает дробную часть)


    INT(выражение)


    выражение Числовая константа, переменная или выражение.

    Функция INT возвращает целую часть числового ВЫРАЖЕНИЯ. Знак результата не меняется и округления не производится.
    Возвращаемый тип данных: REAL
    Пример:
    INT(8.5) вернет 8
    INT(-5.9) вернет -5

    LEFT (строка, выравненная влево)


    LEFT(строка[,длина])


    строка Строковая константа, переменная или выражение.
    длина Числовая константа, переменная или выражение, задающее длину возвращаемой строки. Если опущена, то длина результата равна длине СТРОКИ.

    Функция LEFT возвращает СТРОКУ, выравненную влево. Ведущие пробелы удаляются из СТРОКИ.
    Возвращаемый тип данных: STRING
    Пример:
    CompanyName = LEFT(CompanyName) !Название фирмы сдвинуть влево

    LEN (длина строки)


    LEN(строка)


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

    Функция LEN возвращает длину СТРОКИ. Если параметр СТРОКА это метка переменной, то LEN вернет ЗАДАННУЮ ПРИ ОПИСАНИИ длину этой переменной. Числовые значения автоматически преобразуются в промежуточные строковые.
    Возвращаемый тип данных: LONG
    Пример:
    IF LEN(CLIP(Title) &' '& CLIP(First) &' '& CLIP(Last)) > 30
    !Если полное ФИО не укладывается в заданную длину,
    Rpt:Name = CLIP(Title) &' '& SUB(First.1.1) &'.'& Last
    ! то вместо отчества используем инициал.
    ELSE
    Rpt:Name = CLIP(Title) &' '& CLIP(First) &' '& CLIP(Last)
    ! ну а если все в порядке, то поставим полное ФИО
    .
    Rpt:Title = CENTER(Cus:Name,LEN(Rpt:Title))
    !Центрируем имя в заголовке

    LOG10 (десятичный логарифм)


    LOG10(выражение)


    выражение Числовая константа, переменная или выражение. Если значение ВЫРАЖЕНИЯ меньше нуля, то возвращается ноль, поскольку десятичный логарифм не определен для отрицательных чисел.

    Функция LOG10 (произносится как "log ten"(ЛОГ ТЭН) ) возвращает десятичный логарифм числового ВЫРАЖЕНИЯ. Десятичный логарифм, это показатель степени, в которую надо возвести 10, чтобы получить заданное число.
    Возвращаемый тип данных: REAL
    Пример:
    LOG10(10) вернет 1
    LOG10(1) вернет 0
    LogStore = LOG10(Var) !Сохранить десятичный логарифм от VAR

    LOGE (натуральный логарифм)


    LOGE(выражение)


    выражение Числовая константа, переменная или выражение. Если значение ВЫРАЖЕНИЯ меньше нуля, то возвращается ноль, поскольку натуральный логарифм не определен для отрицательных чисел.

    Функция LOGE (произносится как "loge"(ЛОУГ) ) возвращает натуральный логарифм числового ВЫРАЖЕНИЯ. Натуральный логарифм это показатель степени, в которую надо возвести число е, чтобы получилось заданное число.
    Значение e мы приняли за 2.71828182846.
    Возвращаемый тип данных: REAL
    Пример:
    LOGE(2.71828182846) вернет 1
    LOGE(1) вернет 0
    LogVal = LOGE(Val) !Получить натуральный логарифм от VAL.

    LOWER (нижний регистр)


    LOWER(строка)


    строка Строковая константа, переменная или выражение
    для преобразования.

    Функция LOWER возвращает строку, в которой все буквы - строчные.
    (А.С.П. - Что не совсем верно для русского текста,с которым CLARION SoftWare ну никак не хочет дружить :( )
    Возвращаемый тип данных: STRING
    Пример:
    Name = SUB(Name,1,1) & LOWER(SUB(Name,2,19))
    !Все буквы имени, кроме первой, сделаем строчными

    MAXIMUM (максимальное значение индекса массива)


    MAXIMUM(переменная,индекс)


    переменная Метка переменной, описанной с атрибутом DIM.
    индекс Числовая константа, переменная или выражение, задающее номер индекса. ИНДЕКС определяет, какое измерение массива передается этой функции.

    Функция MAXIMUM возвращает максимальное значение заданного ИНДЕКСА для переменной-массива. Обычно это используется для определения размера массива, переданного в процедуру или функцию.
    Возвращаемый тип данных: LONG
    Пример:
    Array BYTE,DIM(10,12) !Описываем двумерный массив
    Для массива выше: MAXIMUM(Array,1) вернет 10
    MAXIMUM(Array,2) вернет 12
    LOOP X# = 1 TO MAXIMUM(Array,1)
    !Цикл до конца первого измерения
    LOOP Y# = 1 TO MAXIMUM(Array,2)
    ! Цикл до конца второго измерения
    Array[X#,Y#] = 27 ! Каждый элемент = 27
    . . !Конец циклов
    См. также: DIM, Массивы как параметры ПРОЦЕДУР и ФУНКЦИЙ

    MEMORY (доступная память)


    MEMORY([n])


    n Числовая константа, переменная или выражение. Допустимы значения 0..4, включительно. Если пропущено, то по умолчанию - 0.

    Функция MEMORY возвращает количество доступной свободной памяти в байтах. Если n=0 или n=1, то возвращается доступная стандартная (conventional) память, при n=2 возвращается количество свободной EMS, при n=3 возвращается общее количество свободной виртуальной памяти, и при n=4 возвращается размер максимального доступного блока памяти. Если n не в диапазоне 1..4, то возвращается ноль.
    Возвращаемый тип данных: LONG
    Пример:
    SysMem = MEMORY() !Возвращается количество
    SysMem = MEMORY(0) ! свободной
    SysMem = MEMORY(1) ! стандартной памяти
    SysMem = MEMORY(2) !Возвращается количество свободной EMS
    SysMem = MEMORY(3) !Возвращается общее количество свободной
    ! виртуальной памяти
    SysMem = MEMORY(4) !Возвращается наибольший виртуальный блок

    MONTH (месяц для заданной даты)


    MONTH(дата)


    дата Числовая константа, переменная, выражение или метка переменной типа STRING, CSTRING или PSTRING, описанной в шаблоне даты. ДАТА должна быть стандартной датой. Переменная, описанная в шаблоне даты, автоматически преобразуется в промежуточное значение - стандартную дату.

    Функция MONTH возвращает месяц года (1..12) для заданной стандартной даты.
    Возвращаемый тип данных: LONG
    Пример:
    PayMonth = MONTH(DueDate) !Месяц выплаты
    См. также:

    NAME (досовское имя файла или устройства)


    NAME(метка)


    метка Метка описания отчета или файла.

    Функция NAME возвращает строку, содержащую имя в стандарте ДОС для структуры, заданной МЕТКОЙ. Для файлов, если файл открыт, возвращается полная спецификация файла в DOS (диск, путь, имя и расширение). Если файл закрыт, то возвращается содержимое атрибута NAME для этого файла.
    Для отчетов, возвращается имя, заданное атрибутом DEVICE. Если отчет выводится в файл и файл открыт, то NAME вернет полную спецификацию этого файла. В противном случае, NAME вернет то, что записано в атрибуте DЕVICE. Если этого атрибута нет, то возвращается PRN.
    Возвращаемый тип данных: STRING
    Пример:
    OpenFile = NAME(Customer) !Сохраняем имя открытого файла
    OutputDevice = NAME(AcctRpt)
    !Сохраняем имя устройства, куда выводится отчет

    NUMERIC (состоит ли строка только из цифр?)


    NUMERIC(строка)


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

    Функция NUMERIC возвращает 1 (ИСТИНУ) если строка содержит разрешенное числовое значение. Она вернет 0 (ЛОЖЬ) если строка содержит нецифровые символы. Разрешенные символы, это цифры от 0 до 9, ведущий знак минус и десятичная точка.
    Возвращаемый тип данных: LONG
    Пример:
    IF NOT NUMERIC(PartNumber) !Если номер запчасти - не число,
    DO ChkValidPart !то проверим его на допустимость
    . !конец условия

    OMITTED (проверка пропущенных параметров)


    OMITTED(номер)


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

    Функция OMITTED проверяет был ли передан тот или иной параметр в процедуру или функцию. Если искомый параметр пропущен, то возвращается ИСТИНА (1). Если параметр с заданным НОМЕРОМ передан, то возвращается ЛОЖЬ (0). Любой НОМЕР после последнего переданного параметра соответствует пропущенному параметру.
    Разрешается пропускать только те параметры, чей тип данных заключен в угловые скобки (<>) в прототипе процедуры или функции в MAP-структуре.
    Возвращаемый тип данных: LONG
    Пример:
    SomeProc(Fieldl,,Field4)
    Для вышеприведенного примера:
    OMITTED(1) вернет 0
    OMITTED(2) вернет 1
    OMITTED(3) вернет 0
    OMITTED(4) вернет 1
    PROGRAM
    MAP
    SomeFunction(строка,),STRING !Прототип функции
    .
    CODE
    :
    :
    SomeFunction FUNCTION(Fieldl,Date)
    CODE
    IF OMITTED(2) !Если не задана дата,
    Date = TODAY() ! то подставляем системную.
    См. также: Прототипы процедур и функций

    OUT (записать данные в порт)


    OUT(порт,данные)


    порт Числовая константа, переменная или выражение, задаюшее номер порта. Список разрешенных номеров портов можно найти в Техническом Руководстве по IBM PC.
    данные Целочисленная константа, не более чем 65,535 (64К) или метка переменной типа BYTE, SHORT или USHORT. Если ДАННЫЕ типа BYTE, то в порт выводится младший байт через регистр AL. Если же ДАННЫЕ имеют тип SHORT или USHORT, то через регистр AX в порт записываются два байта.

    Оператор OUT записывает данные в порт вывода, выполняя машинную команду OUT.
    Пример:
    OUT(43h.Control) !Посылаем байт управления в таймер
    OUT(61h,Speaker) !Включаем динамик
    См. также:

    PATH (текущий диск и каталог)


    PATH()

    Функция PATH возвращает строку, содержащую текущий диск и каталог
    Возвращаемый тип данных: STRING
    Пример:
    IF PATH() = 'C:\' !Если мы в корне
    SHOW(12,12,'Мы сейчас в корневом каталоге')! то сообщим об
    ! этом
    См. также:

    PEEK (read memory address)


    PEEK(сегмент:смещение,приемник)


    сегмент:смещение Числовая константа, переменная или выражение, задающее адрес памяти. СЕГМЕНТ должен быть в двух старших байтах, а СМЕЩЕНИЕ в двух младших. Если этот параметр типа REAL, то в промежуточное значение преобрзуется только его целая часть, чтобы получить 32-хбитное целое.
    приемник Метка переменной.

    Оператор PEEK читает данные из памяти по адресу СЕГМЕНТ:СМЕЩЕНИЕ и записывает их в переменную ПРИЕМНИК. PEEK считывает столько байт, чколько нужно, чтобы заполнить ПРИЕМНИК.
    Пример:
    Segment USHORT
    Offset USHORT
    Destl BYTE
    Dest2 SHORT
    Dests REAL
    KeyboardFlag BYTE
    CODE
    PEEK(Segment*(256.0*256.0)+Offset,Destl) !Читаем 1 байт
    PEEK(BSHIFT(Segment,16)+Offset,Dest2) !Читаем 2 байта
    PEEK(BSHIFT(Segment,16)+Offset,Dest3) !Читаем 8 байт
    PEEK(00400017h,KeyboardFlag)
    !Читаем байт состояния клавиатуры
    См. также:

    POKE (записать в память по адресу)


    POKE(сегмент:смещение,источник)


    сегмент:смещение Числовая константа, переменная или выражение, задающее адрес памяти. СЕГМЕНТ должен быть в двух старших байтах, а СМЕЩЕНИЕ в двух младших. Если этот параметр типа REAL, то в промежуточное значение преобрзуется только его целая часть, чтобы получить 32-хбитное целое.
    источник Метка переменной.

    Оператор POKE записывает содержимое переменной ИСТОЧНИК в указанный дрес памяти. POKE пишет столько байт, сколько их в ИСТОЧНИКЕ.
    Пример:
    Segment USHORT
    Offset USHORT
    Destl BYTE
    Dest2 SHORT
    Dests REAL
    KeyboardFlag BYTE
    CODE
    PEEK(Segment*(256.0*256.0)+Offset,Source1) !Пишем 1 байт
    PEEK(BSHIFT(Segment,16)+Offset,Source2) !Пишем 2 байта
    PEEK(BSHIFT(Segment,16)+Offset,Source2) !Пишем 8 байт
    POKE(00400017h,KeyboardFlag) !читаем состояние клавиатуры
    KeyboardFlag = BOR(KeyboardFlag,40h) ! включаем CAPS
    POKE(00400017h,KeyboardFlag) !и перезаписываем состояние
    См. также:

    RANDOM (случайное число)


    RANDOM(нижний_предел,верхний_предел)


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

    Функция RANDOM возвращает случайное целое между НИЖНИМ и ВЕРХНИМ ПРЕДЕЛАМИ включительно. Параметры нижний_предел и верхний_предел могуь быть любыми числовыми выражениями, но в диапазон включается только их целая часть.
    Возвращаемый тип данных: LONG
    Пример:
    LOOP X# - 1 TO 6
    LottoNbr[X#] = RANDOM(1,49) !Выбираем числа для 6 из 49
    .

    RIGHT (строка, выравненная вправо)


    RIGHT(строка[,длина])


    строка Строковая константа, переменная или выражение.
    длина Числовая константа, переменная или выражение, задающее длину возвращаемой строки. Если пропущена, то длина результата равна длине СТРОКИ.

    Функция RIGHT возвращает строку, выравненную вправо. Хвостовые пробелы удаляются, затем строка дополняется слева ведущими пробелами до ДЛИНЫ.
    Возвращаемый тип данных: STRING
    Пример:
    Message = RIGHT(Message) !Сообщение сдвинуть вправо

    ROUND (округление числа)


    ROUND(выражение,точность)


    выражение Числовая константа, переменная или выражение.
    точность Числовое выражение, являющееся степенью десяти, как то: 1, 10, 100, 0.1, 0.001 и т.д. Если значение не является точной степенью десяти, то используется ближайшая меньшая степень т.е. 0.55 заменится на 0.1, а 155 - на 100.

    Функция ROUND возвращает значение ВЫРАЖЕНИЯ, округленное до
    заданного ТОЧНОСТЬЮ знака.
    Возвращаемый тип данных: REAL
    Пример:
    ROUND(5163,100) вернет 5200
    ROUND(657.50,1) вернет 658
    ROUND(51.63594,.O1) вернет 51.64
    Commission = ROUND(Price / Rate,.01)
    !Округляем комиссионные до целых копеек

    RUNCODE (код завершения ДОС)


    RUNCODE()

    Функция RUNCODE возвращает код завершения, переданный в ДОС командой, выполненной оператором RUN. Этот код выхода передается оператором HALT в программах на Кларион, и он же является ERRORLEVEL в DOS. Значение, возвращаемое функцией RUNCODE имеет тип LONG и может иметь любое значение, переданное в ДОС как код завершения порожденного процесса.
    Порожденный процесс может передать в DOS только значение типа BYTE в качестве кода завершения, поэтому, в качестве кодов завершения не могут использоваться отрицательные числа. Этот факт позволяет функции RUNCODE зарезервировать некоторые значения, чтобы обрабатывать ситуации, в которых код выхода недоступен:
    -0 нормальное завершение
    -1 программа прервана по Ctri-C
    -2 программа прервана из-за критической ошибки
    -3 TSR завершил работу
    -4 программа не запустилась (проверь функцию ERROR())
    Возвращаемый тип данных: LONG
    Пример:
    RUN('Nextprog.exe') !Запускаем следующую программу
    IF RUNCODE() = -4
    IF ERROR() = 'Not Enough Memory'
    !Если программа не запустилась из-за нехватки памяти
    SHOW(25,10,'Insufficient memory') ! то сообщить об этом
    RETURN ! и завершить процедуру
    ELSE
    STOP(ERROR()) ! прервать нашу программу
    . .
    См. также: RUN, RUNSMALL, HALT

    SETCLOCK (установка системного времени)


    SETCLOCK(время)


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

    Оператор SETCLOCK останавливает системное время ДОС.
    Пример:
    SETCLOCK(1) ! Да настанет полночь!!!

    SETCOMMAND (установить параметры командной строки)


    SETCOMMAND(командная_строка)


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

    SETCOMMAND позволяет программе "изнутри" задать параметры командной строки, которые может получить функция COMMAND. SETCOMMAND перекрывает любые параметры командной строки с такими же именами. Чтобы отменить параметр, начинающийся со слэша, добавь к нему знак равенства (=) в новой командной строке.
    SETCOMMAND нельзя использовать для установки параметров системного уровня, которые задаются в командной строке при загрузке программы. Эти параметры, как виртуальная память (CLAVM=) или файл конфигурации программы (CLAINI=) должны быть заданы при загрузке и не могут быть изменены с помощью SETCOMMAND. Но каталог для временных файлов (CLATMP=) можно переопределить в SETCOMMAND.
    Пример:
    SETCOMMAND(' /N') !Добавляем параметр /N
    SETCOMMAND(' /N=') !Отключаем параметр /N
    См. также:

    SETPATH (изменить текущий диск и каталог)


    SETPATH(диск_и_путь)


    диск_и_путь Строковая константа или метка переменной типа
    STRING, CSTRING или PSTRING, содержащей специфика-
    цию нового диска и пути. Если пропущена буква диска
    и двлеточие после нее, то подразумевается текущий
    диск.

    SETPATH изменяет текущий диск и каталог ДОС. Если диск или каталог заданы неправильно, возвращается ошибка "Путь не существует" (Path Not Found) и текущий каталог не меняется.
    Возвращаемые ошибки:
    03 Путь не существует
    Пример:
    SETPATH('C:\LEDGER') !Переходим в каталог бухгалтерских книг
    SETPATH(UserPath) !Переходим в пользовательский каталог

    SETTODAY (установка системной даты)


    SETTODAY(дата)


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

    Оператор SETTODAY устанавливает системную дату ДОС.
    Пример:
    SETTODAY(TODAY() + 1) !Установим завтрашнюю дату

    SIN (синус)


    SIN(радиан)


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

    Функция SIN возвращает тригонометрический синус угла, выраженного в радианах. Синус - это соотношение между длиной стороны противоположной углу и длиной гипотенузы.
    Возвращаемый тип данных: REAL
    Пример:
    Angle = 45 * Deg2Rad !Переводим 45њ в радианы
    SineAngle = SIN(Angle) !Получаем синус угла в 45њ

    SQRT (квадратный корень)


    SQRT(выражение)


    выражение Числовая константа, переменная или выражение. Если значение ВЫРЖЕНИЯ меньше нуля, то возвращается 0.

    Функция SORT возвращает квадратный корень из ВЫРАЖЕНИЯ. Если Х - это любое положительное вещественное число, то корень квадратный из Х,
    это такое число, которое, будучи умноженным само на себя, даст Х.
    Возвращаемый тип данных: REAL
    Пример:
    Length = SORT(X^2 + Y^2)
    !По теореме Пифагора находим расстояние от 0,0 до X,Y

    Стандартная дата

    Стандартная дата Кларион - это число дней, прошедших с 28 декабря 1800 года. Доступны даты в диапазоне от 1 января 1801 (стандартная дата 4) до 31 декабря 2099 (стандартная дата 109211). Функции работы с датой не могут вернуть правильных результатов для значений, выходящих за эти пределы. Календарь стандартной даты подстраивается для високосных лет в диапазоне доступных дат.
    Обычно, в качестве стандартной даты используются данные типа LONG описанные в шаблоне даты (@D). Типа данных DATE - это формат данных, используемый менеджером записей Btrieve. Поля DATE преобразуются в LONG, содержащее стандартную дату Кларион перед выполнением любых математических операций или операций работы с датами. Таким образом, DATE стоит использовать для файловой совместимости с Btrieve, а LONG для других файловых систем.

    Стандартное время

    Стандартное время Кларион - это число сотых долей секунды, прошедших с полуночи. Допустимые пределы: от 1 (что мы приняли за полночь) до 8,640,00 (23:59:59:99). Стандартное время 1 точно соответствует полуночи. Хотя время и выражается с точностью до сотых долей секунды, системный таймер обновляется только 18.2 раза в секунду (приблизительно каждые 5.5 сотых секунды).
    Обычно, в качестве стандартного времени используются данные типа LONG описанные в шаблоне времени (@T). Тип данных TIME используется в менеджере записей Btrieve. Поля типа TIME преобразуются в LONG, содержащее стандартное время Кларион перед выполнением любых математических операций или операций со временем. Таким образом, DATE имеет смысл использовать для файловой совместимости с Btrieve, а LONG - во всех остальных случаях.

    STATUS (состояние принтера/файла/диска/клавиатуры)

    STATUS(| принтер |)
    | диск |
    | файл |
    |клавиатура|

    принтер Строковая константа или переменная, содержащая допостимое в ДОС название принтерного порта: LPT1, LPT2 или LPT3.
    диск Строковая константа или переменная, содержащая допустимое в ДОС имя диска: A:, B:, C:, . . ., Z:.
    файл Метка оператора FILE.
    клавиатура Строковая константа или переменная, содержащая имя устройства: CON.

    Функция STATUS возвращает текущее состояние принтера, диска, файла или клавиатуры.

    STATUS(принтер) Возвращает 0, если принтер не готов и 1, если с принтером все в порядке.
    STATUS(диск) Возвращает 0, если диск не готов или свободное место на диске в байтах, если диск в порядке.
    STATUS(файл) Возвращает 0, если файл не открыт и режим доступа к файлу, если он открыт. Если текущий режим доступа - 0 (только для чтения, любой доступ), то возвращается код 40h (Read Only Deny None) (см. ).
    STATUS(клавиатура) Возвращает флаг состояния клавиатуры. Этот флаг рассматривается в виде совокупности битов в длинном целом. Значения битов приведены ниже (** означает, что бит установлен только пока клавиша нажата):
    x....... ........ Ins **
    .x...... ........ Caps Lock **
    ..x..... ........ Num Lock **
    ...x.... ........ Scroll Lock **
    ....x... ........ Режим паузы (Ctrl-Num Lock или Pause) **
    .....x.. ........ Sys Req **
    ......x. ........ Left Alt **
    .......x ........ Left Ctrl **
    ........ x....... Режим вставки
    ........ .x...... Caps Lock
    ........ ..x..... Num Lock
    ........ ...x.... Scroll Lock
    ........ ....x... Alt **
    ........ .....x.. Ctrl **
    ........ ......x. Left Shift **
    ........ .......x Right Shift **

    Возвращаемый тип данных: LONG
    Пример:
    IF STATUS(DataFile) % 16 = 0 !Файл открыт только для чтения?
    RETURN ! ну тогда отваливаем
    ELSE !В противном случае
    EXECUTE DiskAction ! пишем запись на диск
    ADD(DataFile)
    PUT(DataFile)
    DELETE(DataFile)
    . .
    LOOP
    IF STATUS('A:') = 0 !Проверяем состояние диска А:
    SHOW(1,1,'Вставьте, пожалуйста, диск в дисковод A:')
    BEEP
    ASK
    ELSE
    BREAK
    . .
    LOOP
    IF STATUS('LPT1') = 0 !Проверка состояния принтера
    SHOW(1,1,'Проверьте, пожалуйста, принтер.')
    BEEP
    ASK
    ELSE
    BREAK
    . .
    LOOP
    IF BAND(STATUS('CON'),00100000b) !Проверяем Num Lock
    SHOW(1,1,'Выключите, пожалуйста, Num Lock')
    BEEP
    ASK
    ELSE
    BREAK
    . .
    См. также:


    SUB (возвращает подстроку строки)


    SUB(строка,позиция,длина)


    строка Строковая константа, переменная или выражение.
    позиция Целочисленная константа, переменная или выражение. Ели ПОЗИЦИЯ положительна, то она задает номер символа от начала СТРОКИ, если отрицательная, то от конца СТРОКИ.
    длина Числовая константа, переменная или выражение,
    задающая количество возвращаемых символов.

    Функция SUB возвращает ДЛИНА символов из СТРОКИ, начиная с заданной ПОЗИЦИИ.
    Возвращаемый тип данных: STRING
    Пример:
    SUB('ABCDEFGHI',1,1) вернет 'A'
    SUB('ABCDEFGHI',-1,1) вернет 'I'
    SUB('ABCDEFGHI',4,3) вернет 'DEF'
    Extension = SUB(FileName,INSTRING('.',FileName,1,1),3)
    !Получаем расширение файла
    См. также:

    TAN (тангенс)


    TAN(радиан)


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

    Функция TAN возвращает тригонометрический тангенс угла, выраженного в радианах. Тангенс это отношение стороныы противоположной углу и стороны прилегающей к углу.
    Возвращаемый тип данных: REAL
    Пример:
    Angle = 45 * Deg2Rad !Переводим 45њ в радианы
    TangentAngle = SIN(Angle) !Получаем тангенс угла в 45њ

    TODAY (системная дата)


    TODAY()

    Функция TODAY возвращает системную дату DOS в формате стандартной даты Кларион.
    Возвращаемый тип данных: LONG
    Пример:
    SETTODAY(TODAY() + 1) !Установить завтрашнюю дату
    OrderDate = TODAY() !Проставить на счете сегодняшнюю дату

    ТРИГОНОМЕТРИЧЕСКИЕ ФУНКЦИИ

    Тригонометрические функции возвращают значения,
    представляющие углы и соотношения сторон прямоугольного
    треугольника (содержащего угол в 90њ). Гипотенуза, это сторона
    треугольника, противостоящая его прямому углу. (Остальные подробности можно узнать из любого нормального учебника тригонометрии, что по-гречески
    означает "измерение треугольников").
    Углы выражаются в радианах. PI (ПИ) -
    это константа, которая представляет соотношение между длиной окружности и ее радиусом. В окружности есть 2*Pl радиан (или 360 градусов).
    Ниже приведены более или менее точное значение ПИ и коэффициенты преобразований между радианами и градусами.
    Pi EQUATE(3.1415926535898) !Значение ПИ
    Rad2Deg EQUATE(57.295779513082) !Градусов в радиане
    Deg2Rad EQUATE(.0174532925199) !Радиан в градусе

    UPPER (верхний регистр)


    UPPER(строка)


    строка Строковая константа, переменная или выражение для преобразования.

    Функция UPPER возвращает СТРОКУ, в которой все символы - заглавные.
    (А.С.П. - Что не совсем верно для русского текста, с которым CLARION SoftWare ну никак не хочет дружить :( )
    Возвращаемый тип данных: STRING
    Пример:
    Name = UPPER(Name) !Все имя вывести на верхнем регистре

    VAL (код символа)


    VAL(символ)


    символ Однобайтная строка, содержащая СИМВОЛ.

    Функция VAL возвращает ASCII-код СИМВОЛА.
    Возвращаемый тип данных: LONG
    Пример:
    VAL('я') вернет 239
    VAT('z') вернет 122
    CharVal = VAL(StrChar)
    !Получить ASCII-код символа из StrChar

    YEAR (год для заданной даты)


    YEAR(дата)


    дата Числовая константа, переменная, выражение
    или метка переменной типа STRING, CSTRING или PSTRING, описанной в шаблоне даты. ДАТА должна быть стандартной датой. Переменная, описанная в шаблоне даты, автоматически пре образуется в промежуточное значение - стандартную дату.

    Функция YEAR возвращает четыре цифры номера года для заданной стандартной даты (1801 to 2099).
    Возвращаемый тип данных: LONG
    Пример:
    IF YEAR(LastOrd) < YEAR(TODAY())
    !Если дата последнего счета не в этом году,
    DO StartNewYear ! то начнем новый год
    .
    См. также:

    

        Программирование: Языки - Технологии - Разработка