Абриаль 2.1 Назад Начало Выше Дальше29/09/04 А.И.Пацкин [packin.ru]
Абрис 1 - Руководство ] [ Примитивы Абриса ] Операции - справочник ] Справочник примитивов Абриса ]

Примитивы Абриса


2 Примитивы языка Абрис1.


ADD - Прибавление числа к числовому значению локальной переменной

<#ADD local-var-name numeric-expression >
Параметры Описание
local-var-name Задает имя локальной переменной. Ожидается в позиции 1.
numeric-expression Задает числовое выражение прибавляемое к значению локальной переменной. Ожидается в позиции 2.

Описание

Присваивает результат сложения числа numeric-expression и числового значения локальной переменной local-var-name переменной local-var-name.

Ничего не возвращает.

Пример

Функция подсчитывает и возвращает количество строк в тексте txt:

<#FUNC
LineCount=(PARAM txt;
 SCAN TEXT=(txt) AS=LINES INIT=(i=0) (ADD i 1);
 (i)
)
>

AFT - Строковое сравнение: больше (после)

<#AFT source pattern [onmatch-action {pattern onmatch-action}* [default-action]] >
Параметры Описание
source Задает исходное выражение строку для сравнения. Ожидается в позиции 1.
pattern Задает образец для сравнения. Ожидается в позиции 2.
[onmatch-action] Задает действие, выполняемое при успехе операции сравнения исходной строки с образцом. Ожидается в позиции 3. Опциональный.
[default-action] Задает действие, выполняемое при неуспехе операции сравнения с образцами. Ожидается в позиции 4. Опциональный.

Описание

Последовательно производит строковое сравнение 'больше' значения первого аргумента source со значением четных аргументов pattern. Если найден аргумент pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action.

Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто.

Пример

Функция возвращает список только тех строк текста, которые начинаются с латинстких букв (A-Z).

<#FUNC
AZList=(PARAM text;
 SCAN TEXT=(text) AS=LINES INIT=(res="")
  (AFT (str) "Z" "" (BEF (str) "A" "" (LOCALS res APP=(str))));
 (res)
)
>
См. также: A, Операции сравнения., Строчные операции, Ленивые примитивы., Простые примитивы.,

AND - Логическое 'И'

<#AND {expression}*>
Параметры Описание
expression Задает выражения для операции логическое 'И'.

Описание

Возвращает результат вычисления последнего аргумента expression, если результаты вычислений всех аргументов не пустые, в остальных случаях пусто.

Пример

Функция ShowItems возвращает в виде таблицы объекты класса.

<#FUNC
msg1="У этого класса могут быть представители, но сейчас их нет."
msg2=("Объекты этого класса - безымянные."\
"Доступ к ним организуется через другие (имеющие имена) объекты."
)
msg3=("Объекты этого класса - подчиненные."\
"Доступ к ним организуется через другие (старшие) объекты."
)
msg4=("У этого класса нет представителей."\
"<br>Это абстрактный класс, играющий роль общего предка для других классов,"
" и объединяющий группу общих свойств для своих потомков."
)
ShowItems=(OR
 (AND (NEMPTY (ITEMS)) (ShowItemTable) )
 (CAT "<B> "
  (OR
   (AND (ClassIsSUPER) (msg4) )
   (AND (CLassIsDATA) (msg2) )
   (AND(IS (Class_Categ_Name) VALUE) (msg2)  )
   (AND (NEMPTY "GENLK\GENLK") (msg3) )
   (msg1)
  )
  "</B>"
 )
)
>
См. также: A, Логические операции., Ленивые примитивы., Простые примитивы.,

APP - Конкатенация строкового значения локальной переменной и строки

<#APP local-var-name[\] expression[\] >
Параметры Описание
local-var-name Задает имя локальной переменной. Ожидается в позиции 1.
expression Задает выражение, добавляемое к текстовому значению локальной переменной. Ожидается в позиции 2.

Описание

Дописывает в конец строкового значения переменной с именем local-var-name значение выражения expression, упакованное в строку (переводы строк заменены пробелами). Переменной local-var-name присваивает новое значение.

Обратный слэш ("\") выполняет роль символа перевода строки. Если отсутствует переменная с указанным именем, или значение переменной не присвоено, или указан только первый аргумент - не выполняет никаких действий.

Ничего не возвращает.

Пример

Добавляем к имени файла расширение ".bak".

<#APP dbName ".bak" > 
См. также: A, Строчные операции, Ленивые примитивы., Простые примитивы.,

ASLITERAL - Преобразование строки в литерал JScript

<#ASLITERAL text [quote] >
Параметры Описание
text Задает исходный текст для преобразования в литерал JScript. Ожидается в позиции 1.
quote Задает строку (кавычку) для обрамления преобразованного в литерал JScript исходного текста. Ожидается в позиции 2.

Описание

Преобразует исходную строку или текст в литерал JavaScript.

В исходной строке или тексте text, перед символами кавычка (''), апостроф ('), обратный слэш (\), табуляция, новая строка, перевод строки, вставляет символ обратный слэш (\). Затем, если указан второй аргумент quote, результат заключается в кавычки, состоящие из символов quote.

Возвращает полученную таким образом строку или текст.

Пример

Вызываем при наведении указателя мышки смену рисунка.

<img border=0 src='Img\img1.gif'
 onmouseover=<#ASLITERAL 'this.src = "Img\img2.gif";' "'">
 onmouseout=<#ASLITERAL 'this.src = "Img\img1.gif";' "'">
>
См. также: A, Строчные операции, Ленивые примитивы., Простые примитивы.,

ASP - Получение изображения или ссылки для значения бинарного аспекта

<#ASP [[AN=]aspect-name | A=aspect] [O=object] [D=dbname] [TO=target-aspect-name] [ATAG=atag] [M=method | ACT=action] [NEAR={offset | FIRST | LAST | NEXT | PREV}] {Custom=expression}* [[RET=]reference-image] >
Параметры Описание
[[AN=]aspect-name] Задает исходный аспект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий аспект.
[A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
[O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
[D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
[TO=target-aspect-name] Задает целевой аспект именем. По умолчанию используется целевой аспект альтернативный исходному. Для многоместных аспектов объекта целевой аспект необходимо задавать явно.
[ATAG=atag] Задает дополнительные атрибуты ссылки (A-тэга). Опциональный.
[M=method] Задает метод, формирующий целевую страницу ссылки. По умолчанию (нет ни M ни ACT) принимается: M=_HOME если не указана БД (D=) или если БД указана, но не указан объект, то M=_ROOT, а если объект указан, то M=PAGE.
[ACT=action] Задает действие, выполняемое при переходе по ссылке. По умолчанию формирует навигационный запрос.
[NEAR=offset] Задает режим возврата ссылки на целевой объект для связи, определяемой по смещению относительно текущей связи в списке. Опциональный.
[NEAR=FIRST] Задает режим возврата ссылки на первый объект в списке связей по целевому аспекту. Опциональный.
[NEAR=LAST] Задает режим возврата ссылки на последний объект в списке связей по целевому аспекту. Опциональный.
[NEAR=NEXT] Задает режим возврата ссылки на следующий объект в списке связей по целевому аспекту. Опциональный.
[NEAR=PREV] Задает режим возврата ссылки на предыдущий объект в списке связей по целевому аспекту. Опциональный.
[Custom=expression] Задает любые именованные параметры для передачи формирующему страницу методу (например, начальную позицию сегмента итераций и размер сегмента итераций: POS=segment-start NUM=segment-size). Опциональный.
[[RET=]reference-image] Задает явно изображение ссылки. Без атрибута ожидается в позиции последнего аргумента. По умолчанию в качестве изображения ссылки устанавливается значение атрибута объекта.

Описание

Формирует изображение/ссылку для значения бинарного аспекта объекта (значения атрибута), в общем виде:

<a href='ab://ab/[&D=dbname] [&O=object] [&A=aspect] [AN=aspect-name] [&TO=target-aspect-name] [&M=method] [&ACT=action] [&POS=segment-start] [&NUM=segment-size] [{&Custom=expression}*] ' [atag]> [ref-image] </a>

Значение атрибута 'href=' A-тега формируется следующим образом:

К URL - программы (ab://ab/) добавляются с аналогичными атрибутами все указанные именованные параметры, кроме RET и ATAG, а также значение первого безымянного аргумента и значения по умолчанию.

С атрибутом ATAG могут быть указаны дополнительные параметры -тега (name=, id=, frame=, title=, methods=, accesskey= ... ).

С атрибутом RET или без него последним аргументом, может быть явно указано изображение ссылки reference-image. В тело A-тега добавляется изображение ссылки ref-image - вычисленное значение reference-image. По умолчанию в качестве изображения ссылки ref-image устанавливается значение атрибута объекта. Внутри цикла FORASP значение атрибута определяется по очередной связи, вне цикла FORASP - по первой из имеющихся связей объекта по аспекту.

Исходный аспект может быть указан либо своим именем aspect-name с атрибутом AN, или без него, первым аргументом, либо с атрибутом A числовым идентификатором aspect. По умолчанию в качестве исходного используется текущий аспект.

Целевой аспект может быть указан своим именем target-aspect-name. Для многоместных аспектов объекта целевой аспект необходимо задавать явно с атрибутом TO. По умолчанию берется целевой аспект альтернативный исходному.

Объект может быть указан с атрибутом O числовым идентификатором object. По умолчанию используется текущий объект.

Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект (исходный и целевой для многоместных аспектов). По умолчанию используется текущая БД.

Могут быть указаны также любые именованные параметры Custom=expression, которые будут включены в ссылку для передачи параметров обрабатывающему методу. В их числе могут быть NUM, POS, определяющие сегмент итераций по умолчанию в циклах обрабатывающего метода.

В случае успеха возвращает сформированный таким образом A-тег (изображение/ссылку), иначе пусто.

Если указан атрибут NEAR, то в зависимости от его значения возвращает:

  • NEAR=offset - ссылку на целевой объект связи в позиции определяемой смещением offset относительно позиции текущей связи в списке, где offset - число, прибавляемое к порядковому номеру текущей связи внутри цикла FORASP/FORLINE.
  • NEAR=FIRST - ссылку на целевой объект первой связи.
  • NEAR=LAST - ссылку на целевой объект последней связи.
  • NEAR=PREV - ссылку на целевой объект предыдущей связи (эквивалентно NEAR=(-1)).
  • NEAR=NEXT - ссылку на целевой объект следующей связи (эквивалентно NEAR=1).

Пример

Ученая степень Иванова И.И.

Ученая степень Иванова И.И.:
<#FORDB D=((XBASE)"Test\AIS.ab")>
<#ASP AN="уч-ст\ученая степень"
 O=(OBJ N="Иванов ИИ" C="Личность") 
 TO="уч-ст\об-ты уч-ст">
<#/>
См. также: A, Просмотр и навигация по БД, Обращение к БД через HTML-ссылку., Ленивые примитивы., Простые примитивы.,

ASPECT - Получение стандартного изображения аспекта объекта

<#ASPECT [[AN=]aspect-name | A=aspect] [{[N=]object-name [C=]class-name} | O=object] [D=dbname] >
Параметры Описание
[[AN=]aspect-name] Задает исходный аспект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий аспект.
[A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
[[N=]object-name] Задает исходный объект именем. Без атрибута ожидается в позиции 2. По умолчанию используется текущий объект.
[[C=]class-name] Задает исходный объект именем своего класса. Без атрибута ожидается в позиции 3. По умолчанию используется текущий объект.
[O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
[D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.

Описание

Формирует стандартное изображение аспекта объекта.

Стандартным изображением является, в зависимости от категории аспекта - либо HTML-таблица, либо список (через 'пробел') либо одиночное изображение объекта, которое является в свою очередь либо текстом значения объекта для объектов-значений или простейшей гиперссылкой на объект, для всех остальных классов.

Аспект может быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию используется текущий аспект.

Объект может быть указан числовым идентификатором object или своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве второго и третьего аргументов. По умолчанию используется текущий объект.

Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущая БД.

В случае успеха возвращает стандартное изображение аспекта объекта, иначе пусто.

Пример

Выводим текст с фамилией, именем, отчеством личности Иванов ИИ.

<#ASPECT AN="фио\ФИО"
  N="Иванов ИИ" C="Личность"
  D=((XBASE)"Test\AIS.ab")
>
См. также: A, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы.,

ASPID - Получение идентификатора аспекта

<#ASPID [[AN=]aspect-name] [D=dbname]>
Параметры Описание
[[AN=]aspect-name] Задает исходный аспект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий аспект.
[D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.

Описание

Определяет по имени аспекта его числовой идентификатор.

Аспект должен быть указан своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию используется текущий аспект.

Если указана БД dbname, отличная от текущей, необходимо явно указывать имя аспекта. По умолчанию используется текущая БД.

В случае успеха возвращает числовой идентификатор аспекта, иначе пусто (#0).

Пример

Выводим форму для редактирования ФИО Иванова ИИ  HTML-редактором.

<#ON (OBJ "Иванов ИИ" "Личность")
  AN="фио\ФИО"
  D=((XBASE)"Test\AIS.ab")
  RET=(_HtmlEd(OBJ)(ASPID) 200 600)
>
См. также: A, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы.,

ASPSIZE - Определение количества связей по аспекту

<#ASPSIZE [[AN=]aspect-name | A=aspect] [{N=object-name C=class-name} | O=object] [D=dbname] >
Параметры Описание
[[AN=]aspect-name] Задает имя исходного аспекта. Без атрибута ожидается в позиции 1. Опциональный. По умолчанию используется текущий аспект. Альтернатива для 'A='.
[A=aspect] Задает исходный аспект числовым идентификатором. Опциональный. По умолчанию используется текущий аспект. Альтернатива для 'AN='.
[[N=]object-name] Задает имя исходного объекта. Без атрибута ожидается в позиции 2. Опциональный. По умолчанию используется текущий объект. Используется только совместно с 'C='. Альтернатива для 'O='.
[[C=]class-name] Задает имя класса исходного объекта. Без атрибута ожидается в позиции 3. Опциональный. По умолчанию используется текущий объект. Используется только совместно с 'N='. Альтернатива для 'O='.
[O=object] Задает исходный объект числовым идентификатором. Опциональный. По умолчанию используется текущий объект. Альтернатива для 'N=' 'C='.
[D=]dbname]

Задает путь к файлу БД. Опциональный. По умолчанию используется текущая БД.

Описание

Вычисляет количество наличных связей по аспекту объекта.

Исходный аспект может быть указан либо именем аспекта, с атрибутом AN= или без него, первым аргументом, либо с атрибутом A= числовым идентификатором. По умолчанию используется текущий аспект.

Объект может быть указан либо именем объекта с атрибутом N=, или без него, вторым аргументом, и именем класса объекта с атрибутом C=, или без него, третьим аргументом, либо с атрибутом O= числовым идентификатором. По умолчанию используется текущий объект.

Если с атрибутом D= БД указана явно, то необходимо явно указывать объект и аспект. По умолчанию используется текущая БД.

Возвращает число наличных связей по аспекту объекта.

Пример:

Получаем количество увлечений Иванова ИИ.

<#asz=(ASPSIZE "увлечения" N="Иванов ИИ" C="Личность")>

AT - Получение идентификатора объекта - значения атрибута

<#AT [[AN=]aspect-name | A=aspect] [[O=]object] [D=dbname] [TO=target-aspect-name] [NEAR={offset | FIRST | LAST | NEXT | PREV | ISFIRST | ISLAST | POS | TOTAL}]>
Параметры Описание
[[AN=]aspect-name] Задает исходный аспект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий аспект.
[A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
[[O=]object] Задает исходный объект числовым идентификатором. Без атрибута ожидается в позиции 2. По умолчанию используется текущий объект.
[D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
[TO=target-aspect-name] Задает целевой аспект именем. По умолчанию используется целевой аспект альтернативный исходному. Для многоместных аспектов объекта целевой аспект необходимо задавать явно.
[NEAR=offset] Задает режим возврата числового идентификатора целевого объекта Целевой объект находится по смещению к связи относительно текущей связи относительно текущей связи в списке. возвращает числового идентификатора целевого объекта первой связи. Опциональный.
[NEAR=FIRST] Задает режим возврата числового идентификатора целевого объекта первой связи. Опциональный.
[NEAR=LAST] Задает режим возврата числового идентификатора целевого объекта последней связи. Опциональный.
[NEAR=NEXT] Задает режим возврата числового идентификатора целевого объекта следующей связи. Опциональный.
[NEAR=PREV] Задает режим возврата числового идентификатора целевого объекта предыдующей связи. Опциональный.
[NEAR=ISFIRST] Задает режим проверки позиции связи в списке связей по целевому аспекту. Опциональный. Возвращает непустое значение (пробел), если текущая связь - первая в цикле.
[NEAR=ISLAST] Задает режим проверки позиции связи в списке связей по целевому аспекту. Опциональный. Возвращает непустое значение (пробел), если текущая связь - последняя в цикле.
[NEAR=POS] Задает режим возврата позиции текущей связи в списке связей по целевому аспекту. Опциональный.
[NEAR=TOTAL] Задает режим возврата количества связей в списке (Аналог ASPSIZE). Опциональный.

Описание

По связи исходного аспекта с целевым аспектом определяется объект - значение атрибута заданного объекта.

Для бинарных аспектов по умолчанию используется целевой аспект, альтернативный заданному. Внутри цикла FORASP/FORLINE значение атрибута определяется по очередной связи, вне цикла - по первой из имеющихся связей объекта по аспекту.

Исходный аспект может быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию используется текущий аспект.

Целевой аспект может быть указан своим именем target-aspect-name. Для многоместных аспектов объекта целевой аспект необходимо задавать явно с атрибутом TO. По умолчанию берется целевой аспект, альтернативный исходному.

Объект может быть указан числовым идентификатором object, без атрибута O ожидается в качестве второго аргумента. По умолчанию используется текущий объект.

Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и исходный аспект. По умолчанию используется текущая БД.

В случае успеха возвращает числовой идентификатор найденного объекта - значения аспекта, иначе пусто.

Если указан атрибут NEAR, то в зависимости от его значения выполняет одно из действий:

  • NEAR=offset - возвращает числовой идентификатор целевого объекта связи в позиции определяемой смещением offset относительно позиции текущей связи в списке, где offset - число, прибавляемое к порядковому номеру текущей связи внутри цикла.
  • NEAR=FIRST - возвращает числовой идентификатор целевого объекта первой связи.
  • NEAR=LAST - возвращает числовой идентификатор целевого объекта последней связи.
  • NEAR=PREV - возвращает числовой идентификатор целевого объекта предыдущей связи (offset=-1).
  • NEAR=NEXT - возвращает числовой идентификатор целевого объекта следующей связи (offset=1).
  • NEAR=ISFIRST - возвращает НЕ пусто, если текущая связь - первая.
  • NEAR=ISLAST - возвращает НЕ пусто, если текущая связь - последняя.
  • NEAR=POS - возвращает порядковый номер текущей связи.
  • NEAR=TOTAL - возвращает количество связей.

Пример

Функция Last возвращает id атрибута объекта последней связи в списке связей по аспекту объекта.

<#FUNC
Last=(PARAM AN O;
 FORASP(AN) O=(O) (AT NEAR=LAST)
)
Part=(PARAM O; AT(APartOf) O=(O))
>
См. также: A, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы.,

BEF - Строковое сравнение: меньше (перед)

<#BEF source pattern [onmatch-action {pattern onmatch-action}* [default-action]] >
Параметры Описание
source Задает исходное выражение строку для сравнения. Ожидается в позиции 1.
pattern Задает образец для сравнения. Ожидается в позиции 2.
[onmatch-action] Задает действие, выполняемое при успехе операции сравнения исходной строки с образцом. Ожидается в позиции 3. Опциональный.
[default-action] Задает действие, выполняемое при неуспехе операции сравнения с образцами. Ожидается в позиции 4. Опциональный.

Описание

Последовательно производит строковое сравнение 'меньше' значения первого аргумента source со значением четных аргументов pattern. Если найден аргумент pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action.

Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто.

Пример

Функция возвращает список всех строк исходного текста text, которые меньше строки patt.

<#FUNC
ListBefore=(PARAM text patt;
 SCAN TEXT=(text) AS=LINES INIT=(res="")
  (BEF (VALUE) (patt) (LOCALS res APP=(str)));
 (res)
)
>
См. также: B, Операции сравнения., Ленивые примитивы., Простые примитивы.,

BREAK - Отделение разделителя внутри циклического тега

<#BREAK>

Описание

Внутри цикла, на последнем шаге, игнорируются все последующие содержимое.

Ничего не возвращает.

Пример

Функция возвращает список ссылок на объекты по указанному аспекту указанного объекта, обрамляемый при необходимости префиксом prefix (открывающий тэг), постфиксом postfix (закрывающий тэг), и разделенные текстом delim (по умолчанию запятая).

<#FUNC
AspList=(PARAM AN O delim prefix postfix; PARAM O=(OBJ) delim=", ";
 FORALLOBJ(AN) O=(O)
 ((prefix)
  (REFER PAGE ATAG="title='Перейти'" (ASPECT NICKNAME|NAME))
  (postfix)
  (BREAK)
  (delim)\
 )
)
>
См. также: B, Составные примитивы. , Энергичные примитивы.,

CAT - Конкатенация строк

<#CAT [\] {text[\]}* >
Параметры Описание
text Задает выражение для преобразования текста в строку.

Описание

Преобразует текст значений аргументов в строки и соединяет их в единый текст. В значениях аргументов expression переводы строк заменяются на символ 'пробел' - текст аргумента пакуется в одну строку.

Обратный слэш ("\") перед первым аргументом или между аргументами выполняет роль символа перевода строки, которые подставляются в текст результата.

Возвращает полученный таким образом текст.

Пример

Функция возвращает относительный путь к файлу гифа с указанным именем.

<#FUNC
FindImgFile=(CAT
 (OR(FILEEXIST((PATH TYPE=DBASE)"Img\"(1)".gif")&("Img\"(1)".gif"))
    (FILEEXIST((PATH TYPE=DBASE)(1)".gif")&((1)".gif"))
    (FILEEXIST((PATH TYPE=HOME)"Img\"(1)".gif"))
 )
)
>
См. также: C, Строчные операции, Энергичные примитивы., Простые примитивы.,

CLASS - Получение идентификатора класса

<#CLASS [{[N=]object-name [C=]class-name} | O=object] >
Параметры Описание
[[N=]object-name] Задает исходный объект именем Без атрибута ожидается в позиции 1. По умолчанию используется текущий объект
[[C=]class-name] Задает исходный объект именем своего класса. Без атрибута ожидается в позиции 2. По умолчанию используется текущий объект.
[O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.

Описание

Определяет числовой идентификатор объекта - словаря (класса указанного объекта) текущей БД.

Объект может быть указан числовым идентификатором object либо своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве первого и второго аргумента. По умолчанию используется текущий объект текущей БД.

В случае успеха возвращает числовой идентификатор объекта - словаря (класса указанного объекта), иначе пусто (#0).

Пример

Функция ClassName возвращает имя класса указанного или текущего объекта.

<#FUNC
ClassName=(PARAM O; PARAM O=(OBJ);
 (NAME(CLASS O=(O)))
)
>
См. также: C, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы.,

CLOSE - Закрытие БД

<#CLOSE [D=dbname] [TYPE={NOSAVE | DELETE}]>
Параметры Описание
[D=dbname] Задает путь к файлу БД По умолчанию используется текущая БД
[TYPE=NOSAVE] Задает режим закрытия БД без записи в ассоциированный с БД файл
[TYPE=DELETE] Задает режим закрытия БД с последующим удалением файла БД.

Описание

Закрывает БД dbname с возможным сохранением или удалением.

Без атрибута TYPE БД сохраняется в ассоциированном с БД файле.

В зависимости от значения атрибута TYPE:

  • NOSAVE - сохранения БД в файл при закрытии не происходит
  • DELETE - сохранения БД в файл при закрытии не происходит, удаляется ассоциированный с БД файл.

По умолчанию сохраняет и закрывает текущую БД.

Ничего не возвращает.

Пример

Закрываем БД "MyDB.ab" и удаляем ассоциированный с БД файл.

<#CLOSE "MyDB.ab" TYPE=DELETE>
См. также: C, Операции со всей базой данных., Ленивые примитивы., Простые примитивы.,

CODE - Получение текста DDL-кода БД полностью или частично

<#CODE [TYPE={ALL | DATA | STRUCT | {OBJ [{N=object-name C=class-name} | O=object]} | {CLA C=class-name} | {REL R=relation-name}}] [D=dbname]>
Параметры Описание
[TYPE=ALL] Задает режим получения DDL-кода всей БД целиком (по умолчанию).
[TYPE=DATA] Задает режим получения DDL-кода только данных.
[TYPE=STRUCT] Задает режим получения DDL-кода только дескрипторов данных.
[TYPE=OBJ] Задает режим получения DDL-кода только указанного объекта.
[TYPE=CLA] Задает режим получения DDL-кода только объектов указанного класса.
[TYPE=REL] Задает режим получения DDL-кода только связей указанного отношения.
N=object-name Задает исходный объект именем.
C=class-name Задает исходный объект именем своего класса.
[O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
R=relation-name Задает имя отношения, для получения связей отношения.
[D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.

Описание

Возвращает текст на языке описания данных (DDL-код) содержимого БД dbname или текущей (по умолчанию) полностью или частично.

В зависимости от значения аргумента атрибута TYPE возвращается:

  • ALL- вся БД целиком (по умолчанию);
  • DATA- только данные;
  • STRUCT- только дескрипторы данных;
  • CLA- только объекты с именем класса class-name;
  • REL- только связи с именем отношения relation-name;
  • OBJ- только объект, либо указанный числовым идентификатором object или своим именем object-name и именем своего класса class-name, либо текущий, по умолчанию.

Пример

Загружаем в текущую БД DDL-код объектов класса "Личность" из БД "AIS.AB"

<#LOAD TEXT=(CODE D=((XBASE)"Test\AIS.AB") TYPE=CLA C="Личность" )>
См. также: C, Операции со всей базой данных., Ленивые примитивы., Простые примитивы.,

COMP - Строковое сравнение

<#COMP source pattern>
Параметры Описание
source Задает исходную строку для сравнения с образцом. Ожидается в позиции 1.
pattern Задает образец для сравнения с исходной строкой. Ожидается в позиции 2.

Описание

Сравнивает две строки c учетом регистра.

Возвращает результат сравнения в числовом виде:

  • eсли первая строка больше второй, или указан всего один аргумент, возвращает положительное число (1);
  • если первая строка меньше второй, то возвращает отрицательное число (-1 );
  • если строки равны, или не указано ни одного аргумента, возвращает 0.

Пример

Функция GtList1 возвращает список строк текста txt, строки которых больше указанной строки str (сравнение без учета регистра).

<#FUNC
GtList1=(PARAM list str;
 SCAN TEXT=(list) AS=LINES INIT=(pos=1)
 (GT (COMP(VALUE)(str)) 0 (LIST res APP=(VALUE)));
 (res)
)
>
См. также: C, Операции сравнения., Ленивые примитивы., Простые примитивы.,

COMPIC - Строковое сравнение без учета регистра

<#COMPIC source pattern>
Параметры Описание
source Задает исходную строку для сравнения с образцом. Ожидается в позиции 1.
pattern Задает образец для сравнения с исходной строкой. Ожидается в позиции 2.

Описание

Сравнивает две строки без учета регистра.

Возвращает результат сравнения в числовом виде:

  • если первая строка больше второй, или указан всего один аргумент, возвращает положительное число (1);
  • если первая строка меньше второй, то возвращает отрицательное число (-1 );
  • если строки равны, или не указано ни одного аргумента, возвращает 0.

Пример

Функция GtList2 возвращает список строк текста txt, строки которых больше указанной строки str (сравнение c учетом регистра).

<#FUNC
GtList2=(PARAM list str;
 SCAN TEXT=(list) AS=LINES INIT=(pos=1)
 (GT (COMPIC(VALUE)(str)) 0 (LIST res APP=(VALUE)));
 (res)
)
>
См. также: C, Операции сравнения., Ленивые примитивы., Простые примитивы.,

COND - Выбор действия по условию

<#COND {condition onmatch-action}+ [default-action] >
Параметры Описание
condition Задает условие. Ожидается в позиции 1.
onmatch-action Задает действие на выполнение условия. Ожидается в позиции 2.
default-action Задает действие на невыполнение всех условий. Ожидается в позиции последнего аргумента.

Описание

Последовательно проверяет каждое из представленных условий condition. При выполнении одного из условий выполняется единственное действие onmatch-action. Если не выполняется ни одно из условий, выполняется действие по умолчанию default-action.

Возвращает результат выполненного действия.

Пример

Функция Save - сохраняет в указанный или текущий файл всю БД целиком или только указанный класс.

<#FUNC
Save=(PARAM File Class;
 COND(Class)
  (COND(File)(SAVE FILE=(File) TYPE=CLA C=(Class))
   (SAVE FILE=((PATH TYPE=DBASE)"AB\"(Class)".ab") TYPE=CLA C=(Class))
  )
  (COND(File)(SAVE FILE=(File))
   (SAVE)
  )
)
>
См. также: C, Условные операторы., Ленивые примитивы., Простые примитивы.,

CONV - Преобразования строки, заданной выражением

<#CONV {{UPP | LOW | ARRANGE | SORT | W2D | D2W | ENCODE | DECODE | NAMECHK | IDCHK | NAMEVER} = text} | {MATCH=text MASK=mask}>
Параметры Описание
UPP=text Задает режим конвертирования букв текста в верхний регистр.
LOW=text Задает режим конвертирования букв текста в нижний регистр.
ARRANGE=text Задает режим конвертирования текста в упорядоченный по возрастанию список строк вида Name=Value без повторений.
SORT=text Задает режим конвертирования текста в упорядоченный по возрастанию список строк без повторений.
W2D=text Задает режим конвертирования символов текста из кодировки WIN(1251-Cyrillic) в кодировку DOS(866-Cyrillic).
D2W=text Задает режим конвертирования символов текста из кодировки DOS(866-Cyrillic) в кодировку WIN(1251-Cyrillic).
ENCODE=text Задает режим конвертирования текста.
DECODE=text Задает режим конвертирования текста.
NAMECHK=text Задает режим конвертирования текста.
IDCHK=text Задает режим конвертирования текста в список строк соответствующих допустимым идентификаторам объектов.
NAMEVER=text Задает режим конвертирования текста в список строк, соответствующих допустимым именам.
MATCH=text Задает режим конвертирования текста в список строк соответствующих маске (шаблону).
MASK=mask Задает маску (шаблон) для выявления строк текста соответствующих маске.

Описание

В соответствии с атрибутом производит различные преобразования текста:

  • UPP - конвертирует исходный текст text в текст, каждый буквенный символ которого переводится в верхний регистр;
  • LOW- конвертирует исходный текст text в текст, каждый буквенный символ которого переводится в нижний регистр;
  • ARRANGE- конвертирует исходный текст text в текст с упорядоченными по возрастанию строками. Исходный текст рассматривается как множество строк 'Name=Value'. В результирующем тексте эти строчки упорядочиваются и среди них удаляются строчки с дублирующими 'Name'. При равенстве Name остается более поздняя в исходном тексте строка;
  • SORT- конвертирует исходный текст text в текст с упорядоченными по возрастанию строками;
  • W2D- конвертирует исходный текст text из кодировки WIN в кодировку DOS;
  • D2W- конвертирует исходный текст textиз кодировки DOS в кодировку WIN;
  • ENCODE- конвертирует по отдельности каждую строку исходного текста text в текст формата URL. Все символы в строках исходного текста, кроме цифр и букв латинского алфавита, заменяются на ascii-коды символов в шестнадцатеричной записи с символом '%' перед каждым ascii-кодом. Если исходный текст из множества строк - они преобразуются по отдельности и переводы строк не перекодируются;
  • DECODE- конвертирует исходный текст text из формата URL в обычный текст (обратный ENCODE). Если исходный текст из множества строк - они преобразуются по отдельности и переводы строк не перекодируются;
  • NAMECHK- конвертирует исходный текст text в текст, состоящий только из строк, соответствующих разрешенным именам объектов, остальные строки (или единственная неправильная строка) в результате удаляются;
  • IDCHK- конвертирует исходный текст text в текст, состоящий только из строк, соответствующих идентификаторам, остальные строки (или единственная неправильная строка) в результате удаляются;
  • NAMEVER- конвертирует исходный текст text в текст, состоящий только из букв латинского и русского алфавита, цифр, знаков '_' и '-'; остальные символы заменяются на знак '_'. Если исходный текст из множества строк - они преобразуются по отдельности и переводы строк не перекодируются;
  • MATCH- конвертирует исходный текст text в текст, состоящий только из строк, соответствующих маске, остальные строки (или единственная неправильная строка) в результате удаляются. Если маска не указана, возвращает пусто;
  • MASK- маска mask для поиска совпадений в строках исходного текста, состоит из:
    1. символов. Каждый символ маски должен соответствовать единственному символу в исходной строке. Сравнение нечувствительно к регистру.
    2. наборов символов. Каждый набор начинается с открывающей скобки '[' и заканчивается закрывающей скобкой ']'. Между скобками - элементы набора. Каждый элемент - символ или диапазон. Диапазоны определяются начальным символом диапазона, далее черта (-), и заключительным символом. Не используйте пробелы или запятые для определения элементов набора. Набор должен соответствовать единственному символу в исходной строке. Символ исходной строки соответствует набору, если он имеется в наборе, или он находится в одном из диапазонов в наборе. Символ находится в диапазоне, если он соответствует начальному символу диапазона, конечному символу, или находится между ними. Все сравнения нечувствительны к регистру. Если первый символ после открывающей скобки набора - знак восклицания (!), то набор соответствует любому символу, который не находится в наборе.
    3. групповых символов. Групповые символы - звездочка '*' или знак вопроса '?'. Звездочка '*' соответствует последовательности любой длины произвольных символов исходной строки. Знак вопроса '?' соответствует единственному произвольному символу исходной строки.

Возвращает результат преобразования текста.

Пример

Функция MaskList возвращает только строки исходного текста text соответствующие маске mask.

<#FUNC
MaskList=(PARAM text mask;
 CONV MATCH=(text) MASK=(mask)
)
>
См. также: C, Строчные операции, Ленивые примитивы., Простые примитивы.,

DBASE - Получение пути к файлу текущей БД

<#DBASE>

Описание

Возвращает полный путь к файлу текущей БД, если с текущей БД ассоциирован файл, иначе пусто.

Пример

<#SET CurrDB=(DBASE)>
См. также: D, Просмотр и навигация по БД, Энергичные примитивы., Простые примитивы.,

DIAL_ASK - Диалог подтверждения или отказа

<#DIAL_ASK [[PROMPT=]prompt] [[YES=]positive-ansver]>
Параметры Описание
[PROMPT=]prompt Задает текст вопроса пользователю в диалоге. Без атрибута ожидается в позиции 1.
[YES=]positive-ansver Задает текст результата при положительном ответе на вопрос. Без атрибута ожидается в позиции 2.

Описание

Выдает пользователю диалог с информационным сообщением prompt для подтверждения или отказа.

Возвращает в случае подтверждения пользователем positive-ansver или по умолчанию строку YES, иначе пусто.

Примечания:

Параметры могут быть либо все позиционные, либо все ключевые.

Пример

<#COND (DIAL_ASK "Удалить текущую БД?")
 (CLOSE TYPE=DELETE)
>
См. также: D, Диалоги с пользователем., Ленивые примитивы., Простые примитивы.,

DIAL_INFO - Диалог с информационным сообщением

<#DIAL_INFO [[PROMPT=]prompt] >
Параметры Описание
[PROMPT=]prompt Задает текст вопроса пользователю в диалоге. Без атрибута ожидается в позиции 1.

Описание

Выдает пользователю информационное сообщение.

Ничего не возвращает.

Пример

<#DIAL_INFO "ОШИБКА! Повторите ввод">
См. также: D, Диалоги с пользователем., Ленивые примитивы., Простые примитивы.,

DIAL_INPUT - Диалог ввода с информационным сообщением

<#DIAL_INPUT [[CAPT=]caption] [[PROMPT=]prompt] [[INIT=]init-string] >
Параметры Описание
[CAPT=]dialog-caption Задает заголовок диалога ввода. Без атрибута ожидается в позиции 1.
[PROMPT=]prompt Задает текст вопроса пользователю в диалоге. Без атрибута ожидается в позиции 2.
[INIT=]init-string Задает начальное значение для редактирования. Без атрибута ожидается в позиции 3.

Описание

Выдает пользователю диалог ввода с заголовком caption подсказкой prompt и значением по умолчанию init-string.

Возвращает введенное пользователем значение. Если ввод отменен (кнопка [Cancel]), возвращается значение по умолчанию init-string.

Примечания:

Параметры могут быть либо все позиционные, либо все ключевые. 

Пример

<#DIAL_INPUT "Ввод имени" "Имя:" "">
См. также: D, Диалоги с пользователем., Ленивые примитивы., Простые примитивы.,

DIV - Арифметическое деление

<#DIV numeric-expression-1 numeric-expression-2 >
Параметры Описание
divided Задает числитель для операции деления. Ожидается в позиции 1.
divider Задает знаменатель для операции деления. Ожидается в позиции 2.

Описание

Производит деление числа divider на число devisor.

Отсутствующие аргументы и нечисловые значения указанных аргументов заменяются нулем (0).

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

Пример

<#SET Len=(DIV (x) 2)>
См. также: D, Арифметические операции., Ленивые примитивы., Простые примитивы.,

DO - Выполнение последовательности действий

<#DO {action}+ >
Параметры Описание
action Задает одно из последовательности выражений для вычисления.

Описание

Выполняет заданную последовательность действий.

Возвращает результат последнего действия.

Пример

Функция Menu возвращает ссылку с гифом.

<#FUNC
Menu=(DO (PARAM mac gif bar hint tag)
 (t1=(r_body (gif) (bar) (hint)))
 ((tag)
  (COND
   (AND (IS(MACNAME)(mac))(IS(D)(DBASE) Y "" Y )(EQ(ENV O)(O))) (t1)
   (AND (O)(D)) (REFER M=(mac) D=(D) O=(O) ATAG=("title='"(hint)"'") (t1))
   (O) (REFER M=(mac) O=(O) ATAG=("title='"(hint)"'") (t1))
   (D) (REFER M=(mac) D=(D) ATAG=("title='"(hint)"'") (t1))
       (REFER M=(mac) ATAG=("title='"(hint)"'") (t1))
  )
 )
)
>
См. также: D, Ленивые примитивы., Простые примитивы.,

ELSE - Отделение тела блока 'ИНАЧЕ' внутри условия

<#{IF | IFNOT} condition> [then-body] [<#ELSE> [else-body]]<#/>
Параметры Описание
else-body Задает тело блока ИНАЧЕ внутри сложного тега.

Описание

Отделяет блок else-body внутри IF, IFNOT.

Пример

<#IF (FILEEXIST "MyDB.ab")>
 <#LOAD "MyDB.ab">
 <#ELSE>
 <#ERROR "Файл MyDB.ab отсутствует!">
</#>
См. также: E, Условные операторы., Составные примитивы. , Энергичные примитивы.,

EMPTY - Проверка на пустоту аспекта объекта

<#EMPTY [[AN=]aspect-name | A=aspect] [[O=]object] [D=dbname]>
Параметры Описание
[[AN=]aspect-name] Задает исходный аспект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий аспект.
[A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
[[O=]object] Задает исходный объект числовым идентификатором. Без атрибута ожидается в позиции 2. По умолчанию используется текущий объект.
[D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.

Описание

Проверяет, имеет ли объект связи по аспекту.

Аспект может быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию используется текущий аспект.

Объект может быть указан числовым идентификатором object, без атрибута O ожидается в качестве второго аргумента. По умолчанию используется текущий объект.

Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущая БД.

Возвращает непустое значение (символ 'пробел'), если указанный аспект объекта пустой (отсутствуют связи по аспекту объекта), иначе пусто.

Пример

Функция NodeType возвращает тип узла дерева.

<FUNC
NodeType=(PARAM O;PARAM O=(OBJ);
 (COND(EMPTY(APartOf) O=(O)) "r" (COND(HelpIsLast(O))"l" "t"))
)
>
См. также: E, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы.,

ENV - Операции с массивом параметров вызова страницы

<#ENV {{[NUM=]index} | {[KEY=]name}}* [{[KEY=]{# | #L | #C}} | {LINES={index | name}} | {SIZE={index | name}} | {HAS=name} | {DEL={index | name}} | {PUT=value} | {APP=value}] >
Параметры Описание
[[NUM=]index] Задает элемент массива позиционным индексом. Промежуточный.
[[KEY=]name] Задает элемент массива именным индексом. Промежуточный.
[[KEY=]{#|#L}] Возвращает размер списка в значении всего или указаного элемента массива. Опциональный. Ожидается последним параметром.
[[KEY=]#C] Возвращает размер в байтах значения всего или указаного элемента массива. Опциональный. Ожидается последним параметром.
[LINES=index] Возвращает размер списка в значении указаного позиционным индексом элемента массива. Опциональный. Ожидается последним параметром.
[LINES=name] Возвращает размер списка в значении указаного именным индексом элемента массива. Опциональный. Ожидается последним параметром.
[SIZE=index] Возвращает размер в байтах значения указаного позиционным индексом элемента массива. Опциональный. Ожидается последним параметром.
[SIZE=name] Возвращает размер в байтах элемента массива, указаного именным индексом. Опциональный. Ожидается последним параметром.
[HAS=name] Проверяет наличие элемента массива с указанным именным индексом. Опциональный. Ожидается последним параметром.
[DEL=index] Удаляет элемент массива с указанным позиционным индексом. Опциональный. Ожидается последним параметром.
[DEL=name] Удаляет элемент массива с указанным именным индексом. Опциональный. Ожидается последним параметром.
[PUT=value] Присваивает новое значение переменной или указанному элементу массива. Опциональный. Ожидается последним параметром.
[APP=value] Добавляет новое значение к значению переменной или указанного элемента массива. Опциональный. Ожидается последним параметром.

Описание

Производит различные действия с массивом параметров вызова страницы.

Параметры вызова страницы передаются в командной строке запроса к БД сразу после указания URL через символ "&" парами вида name=value. При поступлении запроса к БД параметры вызова страницы пакуются в специальный массив. Операция ENV позволяет обращаться с параметрами вызова страницы как с обычным массивом. Для доступа к внутренней структуре значения параметров вызова используется цепочка индексных параметров.

  • ENV {{[NUM=]index} | {[KEY=]key}}* - возвращает текст значения массива параметров вызова или указанного элемента массива.
  • ENV {{[NUM=]index} | {[KEY=]key}}* [KEY=]{# | #L} - возвращает количество элементов в массиве параметров вызова или указанного элемента массива.
  • ENV {{[NUM=]index} | {[KEY=]key}}* [KEY=]#C - возвращает размер в байтах значения массива ENV или указанного элемента массива.
  • ENV {{[NUM=]index} | {[KEY=]key}}* LINES={key | index} - возвращает количество элементов в значении указанного именным или позиционным индексом элемента массива.
  • ENV {{[NUM=]index} | {[KEY=]key}}* SIZE={key | index} - возвращает размер в байтах значения указанного именным или позиционным индексом элемента массива.
  • ENV {{[NUM=]index} | {[KEY=]key}}* HAS=key - возвращает не пусто, если имеется элемент массива с указанным именным индексом.
  • ENV {{[NUM=]index} | {[KEY=]key}}* DEL={key | index} - удаляет указанный именным или позиционным индексом элемент массива. Ничего не возвращает.
  • ENV {{[NUM=]index} | {[KEY=]key}}* PUT=value - присваивает новое значение указанному элементу массива ENV. Ничего не возвращает.
  • ENV {{[NUM=]index} | {[KEY=]key}}* APP=value - добавляет новое значение к значению указанного элемента массива ENV. Ничего не возвращает.

Пример

<#FUNC
aid=(ENV A)
Ob1=(COND (Asp_Back(aid))  (OBJ) (ENV O))
Ob2=(COND (Asp_Back(aid)) (ENV O) (OBJ) )
Obj_Ref_Item=(COND (REFER)
 ((COND(Mode_Edit)
    (REFER ACT="_Delk2O" R=(NAME(Asp_Rel(aid))) O1=(Ob1) O2=(Ob2)
            (img1 gif=delete alt="Удалить СВЯЗЬ с этим объектом!"),
     "   "
    )
  )
  (REFER)
 )
)
>
См. также: E, Ленивые примитивы., Простые примитивы.,

EQ - Числовое сравнение: равно

<#EQ numberic-source numberic-pattern [onmatch-action {numberic-pattern onmatch-action}* [default-action]]>
Параметры Описание
numeric-source Задает исходное число для операции сравнения с образцом Ожидается в позиции 1.
numeric-pattern Задает образец число для операции сравнения с исходным числом. Ожидается в позиции 2.
[onmatch-action] Задает действие, выполняющееся при совпадении исходного числа с образцом. Ожидается в позиции 3. Опциональный.
[default-action] Задает действие, выполняющееся при несовпадении образцов с исходным числом. Ожидается в позиции последнего аргумента. Опциональный.

Описание

Последовательно производит числовое сравнение 'равно' значения первого аргумента numberic-source со значением четных аргументов numberic-pattern. Нечисловые значения исходного выражения или образца заменяются нулем (0). Если найден аргумент numberic-pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action.

Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто.

Пример

Функция ErrorText возвращает текст ошибки по ее номеру.

<#FUNC
ErrorText=(PARAM errnum;
 EQ(errnum)
 1 "Отсутствует идентификатор"
 2 "Неверно задан идентификатор"
 3 "Отсутствует описание"
 "Неизвестная ошибка"
)
>
См. также: E, Операции сравнения., Ленивые примитивы., Простые примитивы.,

ERROR - Операции с массивом ошибок

<#ERROR {{[NUM=]index} | {[KEY=]name}}* [{[KEY=]{# | #L | #C}} | {LINES={index | name}} | {SIZE={index | name}} | {HAS=name} | {DEL={index | name}} | {PUT=value} | {APP=value}] >
Параметры Описание
[[NUM=]index] Задает элемента массива позиционным индексом. Промежуточный.
[[KEY=]name] Задает элемента массива именным индексом. Промежуточный.
[[KEY=]{#|#L}] Задает режим возврата размера списка в значении всего или указанного элемента массива. Опциональный. Ожидается последним параметром.
[[KEY=]#C] Возвращает размер в байтах в значении всего или указанного элемента массива. Опциональный. Ожидается последним параметром.
[LINES=index] Возвращает размер списка в значении указанного позиционным индексом элемента массива. Опциональный. Ожидается последним параметром.
[LINES=name] Возвращает размер списка в значении указанного именным индексом элемента массива. Опциональный. Ожидается последним параметром.
[SIZE=index] Возвращает размер в байтах значения указанного позиционным индексом элемента массива. Опциональный. Ожидается последним параметром.
[SIZE=name] Возвращает размер в байтах значения указанного именным индексом элемента массива. Опциональный. Ожидается последним параметром.
[HAS=name] Проверяет наличие элемента массива с указанным именным индексом. Опциональный. Ожидается последним параметром.
[DEL=index] Удаляет элемент массива с указанным позиционным индексом. Опциональный. Ожидается последним параметром.
[DEL=name] Удаляет элемент массива с указанным именным индексом. Опциональный. Ожидается последним параметром.
[PUT=value] Присваивает новое значение всему или указанному элементу массива. Опциональный. Ожидается последним параметром.
[APP=value] Добавляет новое значение к значению всего или указанного элемента массива. Опциональный. Ожидается последним параметром.

Описание

Производит различные действия с потоком ошибок в зависимости от параметров.

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

  • ERROR {{[NUM=]index} | {[KEY=]name}}* - возвращает текст значения переменной ERROR или указанного элемента массива.
  • ERROR {{[NUM=]index} | {[KEY=]name}}* [KEY=]{# | #L} - возвращает размер списка в значении переменной ERROR или указанного элемента массива.
  • ERROR {{[NUM=]index} | {[KEY=]name}}* [KEY=]#C - возвращает размер в байтах значения переменной ERROR или указанного элемента массива.
  • ERROR {{[NUM=]index} | {[KEY=]name}}* LINES={index | name} - возвращает размер списка указанного позиционным либо именным индексом элемента массива.
  • ERROR {{[NUM=]index} | {[KEY=]name}}* SIZE={index | name} - возвращает размер в байтах значения указанного позиционным либо именным индексом элемента массива.
  • ERROR {{[NUM=]index} | {[KEY=]name}}* HAS=name - возвращает 'истина' (не пусто), если имеется элемент массива с указанным именным индексом.
  • ERROR {{[NUM=]index} | {[KEY=]name}}* DEL={index | name} - удаляет элемент массива, указанный позиционным либо именным индексом. Ничего не возвращает.
  • ERROR {{[NUM=]index} | {[KEY=]name}}* PUT=value - присваивает новое значение указанному элементу массива. Ничего не возвращает.
  • ERROR {{[NUM=]index} | {[KEY=]name}}* APP=value - добавляет новое значение к значению указанного элемента массива. Ничего не возвращает.

Пример

<#ERROR PUT="Ошибка 1">
<#ERROR APP="Ошибка 2">
<#ERROR>
См. также: E, Энергичные примитивы., Простые примитивы.,

EXEC - Выполнение внешней программы

<#EXEC [PATH=]path [[ARG=]parameters] [TYPE=[START | EXPLORE | PRINT | CMD | OVER | DETACH | NOWAIT | WAIT]] >
Параметры Описание
[PATH=]path Задает путь к файлу или папке либо команду операционной системы. Без атрибута ожидается в позиции 1.
[[ARG=]parameters] Задает параметры вызова программы. Без атрибута ожидается в позиции 2. Опциональный. Дополнительный параметр для 'TYPE={OVER|DETACH|NOWAIT|WAIT}'
[TYPE=START] Задает режим запуска программы либо документа. По умолчанию 'TYPE=START'.
[TYPE=EXPLORE] Задает режим открытия директории для просмотра. По умолчанию 'TYPE=START'.
[TYPE=PRINT] Задает режим вывода документа на печать. По умолчанию 'TYPE=START'.
[TYPE=CMD] Задает режим запуска программы либо команды операционной системы. По умолчанию 'TYPE=START'.
[TYPE=OVER] Задает режим запуска программы с указанными параметрами вместо себя. По умолчанию 'TYPE=START'.
[TYPE=DETACH] Задает режим запуска программы с указанными параметрами в фоновом режиме. По умолчанию 'TYPE=START'.
[TYPE=NOWAIT] Задает режим запуска программы с указанными параметрами в фоновом режиме без ожидания окончания ее выполнения. По умолчанию 'TYPE=START'.
[TYPE=WAIT] Задает режим запуска программы с указанными параметрами с ожиданием окончания выполнения запущенной программы. По умолчанию 'TYPE=START'.

Описание

Выполняет одно из действий в соответствии со значением атрибута TYPE.

По умолчанию TYPE=START. С атрибутом PATH или без него, первым аргументом, в зависимости от аргумента атрибута TYPE, ожидается path - это может быть команда ОС либо имя файла программы, документа или папки. Для аргументов атрибута 'TYPE={OVER | DETACH | NOWAIT | WAIT}' с атрибутом ARG или без него, вторым аргументом, могут быть указаны параметры parameters передаваемые программе при вызове - это строка в которой параметры должны быть разделены символами 'пробел', общая длина строки не должна превышать 260 символов.

  • START- выполняет программу path ( '.exe', '.com', '.bat') либо стартует документ path (запускает приложение, ассоциированное с расширением файла) либо открывает папку path для просмотра. Возвращает непустое значение (символ 'пробел'). (0, 2, 3, 5, 8, 11,26, 27, 28, 29, 30, 31, 32)-возможные ошибки.
  • EXPLORE- открывает указанную директорию path для просмотра. Возвращает непустое значение (символ 'пробел'). (0, 2, 3, 5, 8, 11,26, 27, 28, 29, 30, 31, 32)-возможные ошибки.
  • PRINT- выводит документ path на печать. Возвращает непустое значение (символ 'пробел'). (0, 2, 3, 5, 8, 11,26,27,28,29,30,31,32)-возможные ошибки.
  • CMD- выполняет команду операционной системы path или запускает программу path ( '.exe', '.com', '.bat'). В случае успеха возвращает хэндл приложения - число больше 31, иначе код ошибки [0..31]. (0,2,3,11)-возможные ошибки.
  • OVER- запускает с параметрами parameters программу path ( '*.exe', '*.com', '*.bat' ) вместо себя - после запуска программы текущее приложение (Абриаль) закрывается (дочерний процесс располагается в памяти прежде занятой родительским процессом). В случае успеха возвращает хэндл дочернего процесса - число больше 32, иначе код ошибки [0..32], (-1) - ошибка запуска. (2,8,19,20,21)-возможные ошибки
  • DETACH- запускает с параметрами parameters программу path ( '.exe', '.com', '.bat') в фоновом режиме (продолжается выполнение родительского процесса, параллельно запускается дочерний процесс в фоновом режиме / без доступа ввода с клавиатуры и вывода на дисплей - так в хелпе spawnlp/). В случае успеха возвращает хэндл дочернего процесса - число больше 32, иначе код ошибки [0..32], (-1) - ошибка запуска. (2,8,19,20,21)-возможные ошибки.
  • NOWAIT- запускает с параметрами parameters программу path ( '.exe', '.com', '.bat') и не ждет окончания еx выполнения (продолжается выполнение родительского процесса, параллельно запускается дочерний процесс). В случае успеха возвращает хэндл дочернего процесса - число больше 32, иначе код ошибки [0..32], (-1) - ошибка запуска. (2,8,19,20,21)-возможные ошибки.
  • WAIT- запускает с параметрами parameters программу path ( '.exe', '.com', '.bat') и ждет окончания ее выполнения (запускает дочерний процесс, родительский процесс ожидает завершения дочернего). Возвращает числовой результат завершения выполнения дочернего процесса (0) - для нормального завершения, иначе код ошибки [1..32], (2,8,19,20,21)-возможные ошибки, (-1) - ошибка запуска.

Коды возможных ошибок:

  • 0 - системе не хватает памяти или ресурсов;
  • 2 - указанный файл или путь не найден;
  • 3 - указанный путь не найден;
  • 5 - ОС не имеет доступа к указанному файлу;
  • 8 - недостаточно памяти, чтобы закончить действие;
  • 11 - файл не является запускаемым приложением Win32 (не '*.exe', '*.com', '*.bat');
  • 19 - недопустимый аргумент;
  • 20 - слишком длинный список аргументов;
  • 21 - недопустимый формат запускаемого приложения.
  • 26 - произошло нарушение прав доступа;
  • 27 - ассоциация с именем файла неполна или недействительна;
  • 28 - транзакция DDE не может быть завершена - закончилось время обработки транзакции;
  • 29 - транзакции DDE потерпела неудачу;
  • 30 - транзакция DDE не может быть завершена - обрабатываются другие транзакции;
  • 31 - с указанным расширением файла не ассоциировано приложение;
  • 32 - указанная DLL не найдена.

Для поиска указанного файла path используется стандартный алгоритм ОС. Если в имени файла отсутствует расширение или точка, ищет точное имя файла. Если файл не найден, ищет файл сначала с расширением '.exe', потом '.com', затем '.bat'. Если же расширение имеется, ищет только точное имя файла. Если имеется точка без расширения, ищет только имя файла без расширения. Если в имени файла явно не указан путь, ищет сначала в директории откуда запущено текущее приложение (Абриаль), затем в текущей директории, затем в директории Windows \System, затем директории Windows, далее в директориях из списка переменной окружающей среды ОС 'PATH'.

За исключением TYPE=OVER, после запуска активизируется и показывается окно текущего приложения (Абриаль). Если окно минимизировано или максимизировано, восстанавливает к его первоначальному размеру и положению на экране.

Пример

Функция Print запускает печать документа.

<#FUNC
Print=(PARAM File;
 EXEC (File) TYPE=PRINT;
)
>
См. также: E, Ленивые примитивы., Простые примитивы.,

FILE - Операции с файлами

<#FILE [APP | IN | OUT | REC | NDX | LIST | ALL | CLOSE | DEL | END | GET | LINES | ON | SAVE=]file-id {{[NUM=]index} | {[KEY=]name}}* [{[KEY=]{# | #L | #C}} {LINES={index | name}} | {SIZE={index | name}} | {HAS=name} | {DEL={index | name}} | {PUT=value} | {APP=value} | {SAVEAS=file-name}} [PATH=file-name] [FROM=in-file-name] [TO=out-file-name] [SIZE=max-size] >
Параметры Описание
[REC=file-id] Задает операцию открытия словарного файла и присваивает файлу указанный идентификатор для последующего обращения.
[NDX=file-id] Задает операцию открытия индексного файла и присваивает файлу указанный идентификатор для последующего обращения.
[LIST=file-id] Задает операцию открытия списочного файла присваивает файлу указанный идентификатор для последующего обращения.
[APP=file-id] Задает операцию открытия файла для последовательной записи присваивает файлу указанный идентификатор для последующего обращения.
[OUT=file-id] Задает операцию открытия файла для последовательной записи присваивает файлу указанный идентификатор для последующего обращения.
[IN=file-id] Задает операцию открытия файла присваивает файлу указанный идентификатор для последующего обращения.
[PATH=file-name] Задает путь к файлу для чтения/записи. Чтение и запись производятся в один файл. Используется для APP, OUT, IN, LIST, REC, NDX. Альтернатива для FROM, TO.
[FROM=in-file-name] Задает путь к файлу для последовательного чтения. Операция чтения может производится для файла, отличного от указанного в TO файла, в который производится запись. Используется для IN, LIST, REC NDX. Альтернатива PATH.
[TO=out-file-name] Задает путь к файлу для записи. Операция записи может производится для файла, отличного от указанного с атрибутом FROM файла, из которого производится чтение. Используется только совместно c APP, OUT, LIST, REC, NDX, LIST. Альтернатива PATH.
[ALL=file-id] Возвращает текст файла, указанного идентификатором.
[CLOSE=file-id] Закрывает файл с сохранением внесенных изменений в заранее заданный при открытии выходной файл.
[END=file-id] Проверяет, достигнут ли конец файла (или нет файла) EOF. Возвращает 'истина' (не пусто) если достигнут конец файла.
[ON=file-id] Проверяет нормальность чтения файла. Возвращает 'истина' (не пусто) если не достигнут конец файла и работает операция чтения.
[GET=file-id] Получает очередную строчку из IN файла.
[NUM=index] Задает элемент массива позиционным индексом для файлов памяти (только для REC, NDX, LIST - файлов).
[KEY=name] Задает элемент массива именным индексом для файлов памяти (только для REC, NDX, LIST - файлов).
[KEY=]{# | #L} Задает режим возврата количества записей в значении указанного элемента массива (только для REC, NDX, LIST - файлов).
[KEY=]#C Задает режим возврата размера в байтах указанного элемента массива (только для REC, NDX, LIST - файлов).
[LINES=file-id] Задает режим возврата количества строк файла.
[LINES=name] Задает режим возврата количества записей для указанного именным индексом элемента массива (только для REC, NDX, LIST - файлов).
[LINES=index] Задает режим возврата количества записей для указанного позиционным индексом элемента массива (только для REC, NDX, LIST - файлов).
[SIZE=max-size] Задает размер REC-файла в байтах. По умолчанию 1600000. При превышении размера выдает диалог с предложением увеличить размер файла. Может быть указан только при открытии REC-файла.
[SIZE=name] Задает режим возврата размера в байтах элемента массива указанного именным индексом. (только для REC, NDX, LIST - файлов)
[SIZE=index] Задает режим возврата размера в байтах элемента массива указанного позиционным индексом. (только для REC, NDX, LIST - файлов)
[HAS=name] Задает режим проверки наличия элемента массива с указанным именным индексом. (только для REC, NDX, LIST - файлов)
[DEL=file-id] Задает режим удаления файла их списка открытых файлов без сохранения внесенных изменений.
[DEL=index] Задает режим удаления элемента массива с указанным позиционным индексом.
[DEL=name] Задает режим удаления элемента массива с указанным именным индексом.
[PUT=value] Задает режим установки нового значения.
[APP=value] Задает режим добавления нового значения. (только для REC, NDX, LIST - файлов).
[SAVE=file-id] Задает идентификатор файла для записи внесенных изменений в выходной файл. Путь к выходному файлу должен быть указан при открытии атрибутами PATH или TO.
[SAVETO=file-name] Задает путь к файлу для записи на диск REC, NDX, LIST - файлов (первым аргументом указывается идентификатор файла).

Описание

Производит различние операции с текстовыми файлами в зависимости от указанных параметров.

Обращение к файлу организовано через идентификаторы файлов - любое допустимое уникальное имя переменной. Идентификатор файла в операции FILE доступен в любом макросе или функции подобно глобальной переменной с момента открытия файла до момента закрытия файла.

Любой операции доступа к файлу должна предшествовать операция открытия файла. Способ открытия файла определяет способ доступа к содержимому файла. Некоторые операции допустимы только при одном определенном способе открытия файла.

Операции открытия файла в общем виде:

  1. FILE REC=file-id [PATH=file-name] [FROM=in-file] [TO=out-file] [SIZE=max-size]
  2. FILE NDX=file-id [PATH=file-name] [FROM=in-file] [TO=out-file]
  3. FILE LIST=file-id [PATH=file-name] [FROM=in-file] [TO=out-file]
  4. FILE APP=file-id {{PATH=file-name} | {TO=out-file}}
  5. FILE OUT=file-id {{PATH=file-name} | {TO=out-file}}
  6. FILE IN=file-id {{PATH=file-name} | {FROM=in-file}}

1-3) открытие файла с произвольным доступом к содержимому для чтения и записи. Содержимое файла рассматривается как массив с именем идентификатора файла. Идентификатор файла и тип доступа к содержимому файла задается атрибутами:

  • REC - содержимое файла рассматривается как ассоциативный массив (фреймовая структура),
  • NDX - содержимое файла рассматривается как ассоциативный массив, значения атрибутов (ключей) могут быть только положительные целые числа - индексы (обычно это числовые идентификаторы объектов БД).
  • LIST - содержимое файла рассматривается как списочный массив.

Если предполагается, чтение и запись будут производиться в один и тот же файл, то путь к файлу может быть указан одним атрибутом PATH. Если же предполагается, что чтение будет производиться из одного файла, а запись изменений в другой, то пути к входному и выходному файлам могут быть указаны соответственно с атрибутами FROM и TO или в комбинациях: PATH, TO либо FROM, PATH.

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

4-5) - открытие файла с последовательным доступом только для записи (построчная запись). Содержимое файла рассматривается как текст, очередная операция записи дописывает порцию текста с новой строки в конец файла. Идентификатор файла задается атрибутами:

  • APP - предыдущее содержимое файла не теряется.
  • OUT - предыдущее содержимое файла теряется.

Выходной файл должен быть указан атрибутом PATH или TO.

6) - открытие файла с последовательным доступом только для чтения (построчное чтение). Идентификатор файла задается атрибутом IN. Входной файл должен быть указан атрибутом PATH или FROM.

Файлы, открытые с атрибутами REC, NDX, LIST рассматриваются как массивы. Для них допустимы операции с массивами использующиеся в GLOBALS, LOCALS ..), вместо имен переменных/массивов задаются идентификаторы файлов.

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

Операции чтения:

  1. FILE file-id {{[NUM=]index} | {[KEY=]name}}* - возвращает значение элемента массива указанного именным или позиционным индексом. Использование возможно только для REC, NDX, LIST - файлов.
  2. FILE file-id GET=file-id - получение очередной строки текста IN-файла (только для IN - файлов). Если достигнут конец файла, возвращает пусто.

Операции записи:

  1. FILE file-id {{[NUM=]index} | {[KEY=]name}}* PUT=value - установка указанного с атрибутом PUT значения элементу массива. Ничего не возвращает. Использование возможно только для REC, NDX, LIST - файлов; для OUT- файлов без указания индексных параметров.
  2. FILE file-id {{[NUM=]index} | {[KEY=]name}}* APP=value - добавление указанного с атрибутом APP значения к значению элемента массива. Использование возможно только для REC, NDX, LIST - файлов.

Удаление элемента массива:

  1. FILE file-id {{[NUM=]index} | {[KEY=]name}}* DEL={index | name} - удаление элемента массива указанного именным или позиционным индексом. Использование возможно только для REC, NDX, LIST - файлов.

Сохранение файла:

  • FILE SAVE=file-id - сохранение внесенных измененний в заданный при открытии выходной файл для записи.
  • FILE file-id SAVEAS=file-name - сохранение в файл, возможно отличный от файла, заданного при открытии для записи. Первым аргументом должен быть указан идентификатор ранее открытого файла. Атрибутом SAVEAS должен быть указан путь к файлу для сохранения.

Закрытие файла:

  1. FILE CLOSE=file-id - закрытие указанного файла с сохранением внесенных изменений. Файл удаляется из списка открытых файлов, внесеннные изменения сохранаются в выводном файле, указанном при открытии.
  2. FILE DEL=file-id - удаление файла из списка открытых файлов без сохранения внесенных изменений.

Получение информации об открытых файлах.

  • FILE - получение информации обо всех открытых файлах в виде ассоциативного массива с указанной ниже структурой, где ключами верхнего уровня являются идентификаторы файлов.
  • FILE file-id - получение информации только об одном файле, указаном идентификатором.

Информация об открытых файлах возвращается в виде структуры:

  • TYPE={REC | NDX | LIST | APP | OUT | IN} - тип открытия доступа к файлу.
  • [SOURPATH=in-file-name] - путь к файлу для чтения.
  • [SAVEPATH=out-file-name] - путь к файлу для записи.
  • [EOF=Y] - признак конца файла.
  • [OKEY=Y] - признак нормального чтения файла (файл читается без ошибок и не достигнут конец файла).
  • [CANGET=Y] - признак разрешенной операции чтения из файла.
  • [CANPUT=Y] - признак разрешенной операции записи в файл.
  • [KEYS=Y] - признак словарного файла.
  • [LIST=Y] - признак списочного файла.

Другие:

  • FILE LINES=file-id - получение количества строк файла.
  • FILE file-id {{[NUM=]index} | {[KEY=]name}}* [KEY=]{# | #L},
  • FILE file-id {{[NUM=]index} | {[KEY=]name}}* LINES={index | name} - возвращает размер списка в значении указанного элемента массива.
  • FILE file-id {{[NUM=]index} | {[KEY=]name}}* [KEY=]#C
  • FILE file-id {{[NUM=]index} | {[KEY=]name}}* SIZE={index | name} - возвращает размер в байтах значения указанного элемента массива.
  • FILE file-id {{[NUM=]index} | {[KEY=]name}}* HAS=name - возвращает 'истина' (не пусто), если имеется элемент массива с указанным атрибутом HAS именным индексом.

Пример:

Разные действия с глобальными переменными и настройками.

<#FUNC
// открыть
Globs_Open=(FILE REC=Globs PATH=(Data_Path Globals ini) SIZE=400;)
// получить указнанный именными индексами элемент
Globs_Get=(FILE Globs KEY=(1)  KEY=(2))
// получить значение
Globs_Val=(FILE Globs KEY=(1)  KEY=VAL)
//  сохранить
Globs_Put=(FILE Globs KEY=(1)  KEY=(2)  PUT=(3))
//  значение сохранить
Globs_Put_Val=(Globs_Put(1) VAL (2);GLOBALS (1) PUT=(2);FILE SAVE=Globs)
Globs_Name=(FILE Globs KEY=(1) KEY=NAME) // Наименование
Globs_Size=(FILE Globs KEY=(1) KEY=SIZE) // ширина поля редактир-я
Globs_Sav=(FILE Globs KEY=(1)  KEY=SAV)   // сохранять ли?
Globs_Load=(///  загрузка в память сохраненных глобалов из файла
    Globs_Open;   /// открыли файл глобалов
    SCAN KEYFILE=Globs ( // сканируем файл
      GLOBALS (KEY) PUT=(VALUE KEY=VAL); // сохраняем у всех элементов атрибут VAL
         (DBG&DIAL_INFO ("Берем Глобал=" (KEY) " со значением="(VALUE KEY=VAL)
             \ ,GLOBALS (KEY) ) );
    );
)
Globs_Save=( // сохранение в файле сохраняемых глобалов и самого файла
     Globs_Open;
     SCAN TEXT=(GLOBALS) AS=REC
     ( val=VAlUE;
       COND
        (Globs_Sav(KEY)) //  Если там  есть такой элемент с непустым атрибутом SAV
        (Globs_Put_Val(KEY)(val));  // то сохраняем в нем
     );
     FILE SAVE=Globs;  // и наконец сохраняем сам файл
)
Globs_New_Elem=(
   //  создаем элемент с именем Key значением Val
  //  названием Nam  размером редакт-я Siz
   PARAM Key Val Nam Siz Sav;
   FILE Globs KEY=(Key) PUT=(REC NAME (Nam) VAL (Val) SIZE (Siz) SAV (Sav));
                        // то сохраняем в нем
   IF (Sav)  // если есть признак сохранения - сохраняем за одно и сам файл
        (FILE SAVE=Globs; )
)
>

FILEAPPEND - Добавление текста в конец файла

<#FILEAPPEND file-name appendix-text>
Параметры Описание
file-name Задает путь к файлу для добавления текста. Ожидается в позиции 1.
appendix-text Задает добавляемый в конец указанного файла текст. Ожидается в позиции 2.

Описание

Дописывает в конец файла file-name текст appendix-text.

В случае успеха возвращает имя файла без изменений, иначе пусто.

Пример

Дописываем текст файла "text.txt" в конец "result.txt", в случае неудачи генерируем ошибку.

<#IFNOT (FILEAPPEND "result.txt" (FILELOAD "text.txt"))>
<#ERROR "Ошибка записи">
<#/>
См. также: F, Операции с файлами., Ленивые примитивы., Простые примитивы.,

FILEEXIST - Проверка наличия файла

<#FILEEXIST file-name>
Параметры Описание
file-name Задает путь к файлу для проверки существования файла. Ожидается в позиции 1.

Описание

Проверяет наличие файла по указанному пути file-name.

Возвращает имя файла без изменений, если файл существует, иначе пусто.

Пример

Выводим сообщение об ошибке, если указанный файл отсутствует.

<#IFNOT (FILEEXIST (FileName))>
 <#ERROR (CAT "Ошибка! " (FileName) " отсутствует!")>
<#/>
См. также: F, Операции с файлами., Ленивые примитивы., Простые примитивы.,

FILELOAD - Получение текста файла

<#FILELOAD file-name>
Параметры Описание
file-name Задает путь к файлу для получения текста файла. Ожидается в позиции 1.

Описание

В случае успеха возвращает текст содержимого указанного текстового файла file-name, иначе пусто.

Пример

Переменной ftext присваиваем текст содержимого файла "Mytext.txt" из текущей директории.

<#SET ftext=(FILELOAD "Mytext.txt")> 
См. также: F, Операции с файлами., Ленивые примитивы., Простые примитивы.,

FILESAVE - Создание текстового файла и запись текста файла

<#FILESAVE file-name text>
Параметры Описание
file-name Задает путь к файлу для записи в него указанного текста. Ожидается в позиции 1.
text Задает текст для записи в указанный файл. Ожидается в позиции 2.

Описание

Создает текстовый файл с именем file-name, записывает в него указанный текст text.

В случае успеха возвращает имя файла без изменений, иначе пусто.

Пример

Функция BackUp создает резервную копию файла, который указан первым аргументом.

<#FUNC
BackUp=(PARAM File;
 FILESAVE (PATH CHANGE=(File) TO=".bak") (FILELOAD (File)))
>
См. также: F, Операции с файлами., Ленивые примитивы., Простые примитивы.,

FIND - Поиск подстроки в строке

<#FIND source substring>
Параметры Описание
source Задает исходную строку или текст для определения позиции первого вхождения указанной подстроки. Ожидается в позиции 1.
substring Задает подстроку для определения позиции ее первого вхождения в исходную строку. Ожидается в позиции 2.

Описание

Производит поиск первого вхождения подстроки substring в исходной строке source.

Возвращает номер позиции первого символа подстроки substring в исходной строке source, начиная с единицы, если вхождение найдено, иначе пусто (0).

Пример

Получаем позицию "." в строке (fname)

<#IF (pointpos=(FIND (fname) "."))>
 найдена "." в позиции <#pointpos>
<#ELSE>
 "." отсутствует
<#/>
См. также: F, Строчные операции, Ленивые примитивы., Простые примитивы.,

FOR - Цикл

<#FOR initialization condition iteration [body] > [complex-body] <#/>
Параметры Описание
init-action Задает действие, выполняемое только перед первым шагом цикла. Ожидается в позиции 1.
condition Задает условие выполнения очередного шага цикла. Ожидается в позиции 2.
iteration Задает действие, выполняемое перед проверкой условия после очередного шага цикла. Ожидается в позиции 3.
[body] Задает тело цикла внутри простого тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Ожидается в позиции 4 (последний аргумент). Опциональный.
[complex-body] Задает тело цикла внутри сложного тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Опциональный.

Описание

Выполняет тело цикла до тех пор, пока выполняется условие condition.

Аргументом init-action может быть указано выражение, которое выполняется только перед началом выполнения итераций.

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

Если в результате вычисления выражения condition возвращается пустое значение, очередная итерация не выполняется, цикл заканчивается.

Аргументом iteration может быть указано выражение, которое выполняется перед проверкой условия condition после очередного шага цикла.

Последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле.

Возвращает результат выражения init-action объединенный с вычисленным для каждой итерации телом цикла, если оно указано, внутри простого тега, затем внутри сложного тега.

Пример

Функция SortByNick упорядочивает по имени заголовка подразделы указанного раздела Part.

<#FUNC
SortByNick=(PARAM Part; PARAM Part=(OBJ);
 List=(CONV SORT=(FORALLOBJ(AParts) O=(Part) ("Nick="(HelpTitle)" O1="(OBJ)\)));
 FOR(i=1 sz=(ASPSIZE(AParts)))(LE(i)(sz))(ADD i 1)
 (obj=(LOCALS List (i) "O1")
  dlk=(_DELK R=PartOf O1=(obj) O2=(Part))
  lnk=(_LINK R=PartOf O1=(obj) O2=(Part))
 )
)
>
См. также: F, Операторы цикла., Составные примитивы. , Энергичные примитивы.,

FORALLASP - Цикл по всем аспектам объекта

<#FORALLASP [{[N=]object-name [C=]class-name} | O=object] [[RET=]body] > [complex-body] <#/>
Параметры Описание
[[N=]object-name] Задает исходный объект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий объект.
[[C=]class-name] Задает исходный объект именем класса. Без атрибута ожидается в позиции 2. По умолчанию используется текущий объект.
[O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
[[RET=]body] Задает тело цикла внутри простого тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Без атрибута ожидается в позиции последнего аргумента. Опциональный.
[complex-body] Задает тело цикла внутри сложного тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Опциональный.

Описание

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

Объект может быть указан числовым идентификатором object или своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве первого и второго аргументов. По умолчанию используется текущий объект текущей БД.

С атрибутом RET, или без него последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле.

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

Пример

Функция AspNames возвращает список имен аспектов указанного класса.

<#FUNC
AspNames=(PARAM classname;
 FORALLASP N=(classname) C="CLASS"
 ((NAME)\)
)
>
См. также: F, Операторы цикла., Составные примитивы. , Ленивые примитивы.,

FORALLOBJ - Цикл по всем объектам - значениям атрибута

<#FORALLOBJ [AN=]aspect-name | A=aspect] [{N=object-name C=class-name} | O=object] [D=dbname] [TO=target-aspect-name] [POS=segment-start] [NUM=segment-size] [BY=step] [INIT=initialization] [ITER=iteration] [FROM=begin-condition] [FROMOBJ=begin-obj] [IF=step-condition] [UNTIL=until-condition] [WHILE=while-condition] [[RET=]body] > [complex-body] <#/>
Параметры Описание
[[AN=]aspect-name] Задает исходный аспект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий аспект.
[A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
[N=object-name] Задает исходный объект именем. По умолчанию используется текущий объект.
[C=class-name] Задает исходный объект именем класса. По умолчанию используется текущий объект.
[O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
[D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
[TO=target-aspect-name] Задает целевой аспект именем. По умолчанию используется целевой аспект альтернативный исходному. Для многоместных аспектов объекта целевой аспект необходимо задавать явно.
[POS=segment-start] Задает начало сегмента итераций Опциональный.
[NUM=segment-size] Задает размер сегмента итераций. Опциональный.
[INIT=initialization] Задает выражение вычисляющееся один раз перед циклом. Опциональный.
[FROM=begin-condition] Задает выражение, которое вычисляется перед всеми шагами внутри интервала. Пока не станет истиной, интервал исполнения не начинается. Потом уже не вычисляется. Опциональный.
[FROMOBJ=begin-obj] Задает числовой идентификатор целевого объекта в списке по аспекту, не достигнув которого, тело цикла не вычисляется. Опциональный.
[IF=step-condition] Задает выражение, которое вычисляется непосредственно перед шагом. Если возвращает пусто шаг пропускается. Опциональный.
[BY=step] Задает шаг цикла. Если BY=2, то исполняется только каждый второй в пределах интервала. Опциональный.
[ITER=iteration] Задает выражение, которое вычисляется после шага, что возвращает безразлично. Опциональный.
[UNTIL=until-condition] Задает выражение-условие, которое вычисляется после каждого шага. Если возвращает НЕ-пусто выход из цикла. Опциональный.
[WHILE=while-condition] Задает выражение-условие, которое вычисляется перед шагом. Если возвращает пусто - выход из цикла. Опциональный.
[[RET=]body] Задает тело цикла внутри простого тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов Без атрибута ожидается в позиции последнего аргумента. Опциональный.
[complex-body] Задает тело цикла внутри сложного тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов Опциональный.

Описание

Поочередно перебирает все связи указанного объекта по исходному аспекту. В теле цикла, внутри сегмента итераций, устанавливает текущим объект, участвующий в очередной связи по целевому аспекту. Для бинарных связей целевым аспектом является аспект, альтернативный исходному. Таким образом, в теле цикла поочередно для каждой связи итерации устанавливает текущими объекты - значения атрибута указанного объекта.

Итерации не начинаются (не вычисляется тело цикла), если:

  • не достигнуто начало сегмента итераций, указанное с атрибутом POS
  • начало сегмента итераций превосходит имеющееся количество связей указанного объекта по исходному аспекту.
  • выражение, указанное с атрибутом FROM на очередном шаге приняло значение 'ложь' (пусто).
  • не достигнут указанный с атрибутом FROMOBJ целевой объект по указанному аспекту в списке связей.

Итерации заканчиваются, если:

  • пройдены все наличные связи.
  • достигнут конец сегмента - пройдено указанное с атрибутом NUM число шагов.
  • выражение, указанное с атрибутом WHILE перед очередным шагом приняло значение 'ложь' (пусто).
  • выражение, указанное с атрибутом UNTIL после очередного шага приняло значение 'истина' (не пусто).

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

Сегмент итераций может быть задан с атрибутом POS позицией segment-start первой связи, начиная с единицы и, с атрибутом NUM, размером segment-size. По умолчанию POS=1 - сканирование начинается с первой наличной связи. По умолчанию NUM сканируются все наличные связи начиная с указанной в POS позиции.

Если с атрибутом BY=step указан шаг итераций, то внутри сегмента пропускаются step-1 связь (берется каждая step связь, начиная с POS)

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

С атрибутом ITER может быть указано выражение, которое вычисляется на каждом шаге итераций, не влияет на результат оператора.

P>Целевой аспект может быть указан с атрибутом TO своим именем target-aspect-name. Если целевой аспект не указан, и по умолчанию, используется целевой аспект, альтернативный исходному. Для бинарных аспектов достаточно указать исходный аспект, для многоместных аспектов необходимо задавать целевой аспект.

Объект может быть указан с атрибутом O числовым идентификатором object либо с атрибутом N своим именем object-name и с атрибутом C именем своего класса class-name. По умолчанию используется текущий объект.

Если с атрибутом D указана БД dbname, отличная от текущей, то необходимо явно указывать аспект и объект. По умолчанию используется текущая БД.

С атрибутом RET, или без него, последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле.

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

Пример

Выводим список увлечений конкретной личности.

<#FORALLOBJ AN="увлеч\увлечения"
 N="Иванов ИИ" C="Личность"
 D=((XBASE)"Test\AIS.ab")>
  <#NAME>&nbsp;
<#>
См. также: F, Операторы цикла., Составные примитивы., Ленивые примитивы.,

FORASP - Цикл по всем связям аспекта

<#FORASP [[AN=]aspect-name | A=aspect] [{N=object-name C=class-name} | O=object] [D=dbname] [POS=segment-start] [NUM=segment-size] [INIT=initialization] [FROM=begin-condition] [FROMOBJ=begin-obj] [IF=step-condition] [BY=step] [ITER=iteration] [UNTIL=until-condition] [WHILE=while-condition] [[RET=]body] > [complex-body] <#/>
Параметры Описание
[[AN=]aspect-name] Задает исходный аспект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий аспект.
[A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
[N=object-name] Задает исходный объект именем. По умолчанию используется текущий объект.
[C=class-name] Задает исходный объект именем класса. По умолчанию используется текущий объект.
[O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
[D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
[POS=segment-start] Задает начало сегмента итераций. Опциональный.
[NUM=segment-size] Задает размер сегмента итераций. Опциональный.
[INIT=initialization] Задает выражение вычисляющееся один раз перед циклом. Опциональный.
[FROM=begin-condition] Задает выражение, которое вычисляется перед всеми шагами внутри интервала. Пока не станет истиной, интервал исполнения не начинается. Потом уже не вычисляется. Опциональный.
[FROMOBJ=begin-obj] Задает числовой идентификатор целевого объекта в списке по аспекту, не достигнув которого, тело цикла не вычисляется. Опциональный.
[IF=step-condition] Задает выражение, которое вычисляется непосредственно перед шагом. Если возвращает пусто шаг пропускается. Опциональный.
[BY=step] Задает шаг цикла. Если BY=2, то исполняется только каждый второй в пределах интервала. Опциональный.
[ITER=iteration] Задает выражение, которое вычисляется после шага, что возвращает безразлично. Опциональный.
[UNTIL=until-condition] Задает выражение-условие, которое вычисляется после каждого шага. Если возвращает НЕ-пусто выход из цикла. Опциональный.
[WHILE=while-condition] Задает выражение-условие, которое вычисляется перед шагом. Если возвращает пусто - выход из цикла. Опциональный.
[[RET=]body] Задает тело цикла внутри простого тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов Без атрибута ожидается в позиции последнего аргумента. Опциональный.
[complex-body] Задает тело цикла внутри сложного тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Опциональный.

Описание

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

Итерации не начинаются (не вычисляется тело цикла), если:

  • не достигнуто начало сегмента итераций, указанное с атрибутом POS
  • начало сегмента итераций превосходит имеющееся количество связей указанного объекта по исходному аспекту.
  • выражение, указанное с атрибутом FROM на очередном шаге приняло значение 'ложь' (пусто).
  • не достигнут указанный с атрибутом FROMOBJ целевой объект по указанному аспекту в списке связей.

Итерации заканчиваются, если:

  • пройдены все наличные связи.
  • достигнут конец сегмента - пройдено указанное с атрибутом NUM число шагов.
  • выражение, указанное с атрибутом WHILE перед очередным шагом приняло значение 'ложь' (пусто).
  • выражение, указанное с атрибутом UNTIL после очередного шага приняло значение 'истина' (не пусто).

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

Сегмент итераций может быть задан с атрибутом POS позицией segment-start первой связи, начиная с единицы и, с атрибутом NUM, размером segment-size. По умолчанию POS=1 - сканирование начинается с первой наличной связи. По умолчанию NUM сканируются все наличные связи начиная с указанной в POS позиции.

Если с атрибутом BY=step указан шаг итераций, то внутри сегмента пропускаются step-1 связь (берется каждая step связь, начиная с POS)

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

С атрибутом ITER может быть указано выражение, которое вычисляется на каждом шаге итераций, не влияет на результат оператора.

Исходный аспект может быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию в качестве исходного аспекта используется текущий.

Объект может быть указан с атрибутом O числовым идентификатором object либо с атрибутом N своим именем object-name и с атрибутом C именем своего класса class-name. По умолчанию используется текущий объект.

Если с атрибутом D=dbname указана БД, отличная от текущей, то необходимо явно указывать аспект и объект. По умолчанию используется текущая БД.

С атрибутом RET, или без него, последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле.

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

Пример

<#FORASP
 AN="уч-ст\ученая степень"
 N="Иванов ИИ" C="Личность"
 D=((XBASE)"Test\AIS.ab")>
 <#NAME>&nbsp(<#ASP AN="фио\ФИО" ТО="фио\ФИО для">)&nbsp;
 <#ASP AN="уч-зв\ученое звание" TO="уч-зв\об-ты уч-зв">&nbsp;
 <#ASP TO="уч-ст\об-ты уч-ст">&nbsp;
 <#ASP TO="уч-ст\область наук">
<#/>
См. также: F, Операторы цикла., Составные примитивы. , Ленивые примитивы.,

FORCLASSES - Цикл по всем классам БД

<#FORCLASSES [D=dbname] [[RET=]body] > [complex-body] <#/>
Параметры Описание
[D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
[[RET=]body] Задает тело цикла внутри простого тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Без атрибута ожидается в позиции последнего аргумента. Опциональный.
[complex-body] Задает тело цикла внутри сложного тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Опциональный.

Описание

В теле цикла поочередно устанавливает текущими объекты - дескрипторы всех пользовательских классов БД dbname или текущей, по умолчанию.

С атрибутом RET, или без него последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле.

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

Пример

Выводим имена всех пользовательских классов БД "AIS.ab".

<#FORCLASSES D=((XBASE)"Test\AIS.ab") RET="<br>">
  <#NAME>
<#/>
См. также: F, Операторы цикла., Составные примитивы. , Ленивые примитивы.,

FORDB - Установка текущей БД

<#FORDB [D=]dbname [[RET=]body] > [complex-body] <#/>
Параметры Описание
[[RET=]body] Задает тело оператора внутри простого тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Без атрибута ожидается в позиции 2. Опциональный.
[complex-body] Задает тело оператора внутри сложного тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Опциональный.

Описание

В теле body устанавливает текущей указанную БД dbname.

С атрибутом RET, или без него последним аргументом, тело body может быть указано внутри простого тега в функциональном стиле.

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

Пример

<#FORDB D=(NewDB)>
 <#HS_Act F="NewHelp" New_N=(New_N) New_C="DeveloperMan" New_N1=(New_N1) New_N2=(New_N2)>
 <#_LINK AN=(APartOf) O1=(OBJ "AssocCreation" "DeveloperMan") O2=(RESULT)>
<#/>
См. также: F, Операторы устанавливающие контекст, Составные примитивы. , Ленивые примитивы.,

FOREACH - Цикл по всем объектам - значениям атрибута

<#FOREACH [AN=]aspect-name | A=aspect] [{N=object-name C=class-name} | O=object] [D=dbname] [TO=target-aspect-name] [POS=segment-start] [NUM=segment-size] [BY=step] [INIT=initialization] [ITER=iteration] [FROM=begin-condition] [FROMOBJ=begin-obj] [IF=step-condition] [UNTIL=until-condition] [WHILE=while-condition] [[RET=]body] > [complex-body] <#/>
Параметры Описание
[[AN=]aspect-name] Задает исходный аспект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий аспект.
[A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
[N=object-name] Задает исходный объект именем. По умолчанию используется текущий объект.
[C=class-name] Задает исходный объект именем класса. По умолчанию используется текущий объект.
[O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
[D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
[TO=target-aspect-name] Задает целевой аспект именем. По умолчанию используется целевой аспект альтернативный исходному. Для многоместных аспектов объекта целевой аспект необходимо задавать явно.
[POS=segment-start] Задает начало сегмента итераций Опциональный.
[NUM=segment-size] Задает размер сегмента итераций. Опциональный.
[INIT=initialization] Задает выражение вычисляющееся один раз перед циклом. Опциональный.
[FROM=begin-condition] Задает выражение, которое вычисляется перед всеми шагами внутри интервала. Пока не станет истиной, интервал исполнения не начинается. Потом уже не вычисляется. Опциональный.
[FROMOBJ=begin-obj] Задает числовой идентификатор целевого объекта в списке по аспекту, не достигнув которого, тело цикла не вычисляется. Опциональный.
[IF=step-condition] Задает выражение, которое вычисляется непосредственно перед шагом. Если возвращает пусто шаг пропускается. Опциональный.
[BY=step] Задает шаг цикла. Если BY=2, то исполняется только каждый второй в пределах интервала. Опциональный.
[ITER=iteration] Задает выражение, которое вычисляется после шага, что возвращает безразлично. Опциональный.
[UNTIL=until-condition] Задает выражение-условие, которое вычисляется после каждого шага. Если возвращает НЕ-пусто выход из цикла. Опциональный.
[WHILE=while-condition] Задает выражение-условие, которое вычисляется перед шагом. Если возвращает пусто - выход из цикла. Опциональный.
[[RET=]body] Задает тело цикла внутри простого тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов Без атрибута ожидается в позиции последнего аргумента. Опциональный.
[complex-body] Задает тело цикла внутри сложного тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов Опциональный.

Описание

Поочередно перебирает все связи указанного объекта по исходному аспекту. В теле цикла, внутри сегмента итераций, устанавливает текущим объект, участвующий в очередной связи по целевому аспекту. Для бинарных связей целевым аспектом является аспект, альтернативный исходному. Таким образом, в теле цикла поочередно для каждой связи итерации устанавливает текущими объекты - значения атрибута указанного объекта.

Итерации не начинаются (не вычисляется тело цикла), если:

  • не достигнуто начало сегмента итераций, указанное с атрибутом POS
  • начало сегмента итераций превосходит имеющееся количество связей указанного объекта по исходному аспекту.
  • выражение, указанное с атрибутом FROM на очередном шаге приняло значение 'ложь' (пусто).
  • не достигнут указанный с атрибутом FROMOBJ целевой объект по указанному аспекту в списке связей.

Итерации заканчиваются, если:

  • пройдены все наличные связи.
  • достигнут конец сегмента - пройдено указанное с атрибутом NUM число шагов.
  • выражение, указанное с атрибутом WHILE перед очередным шагом приняло значение 'ложь' (пусто).
  • выражение, указанное с атрибутом UNTIL после очередного шага приняло значение 'истина' (не пусто).

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

Сегмент итераций может быть задан с атрибутом POS позицией segment-start первой связи, начиная с единицы и, с атрибутом NUM, размером segment-size. По умолчанию POS=1 - сканирование начинается с первой наличной связи. По умолчанию NUM сканируются все наличные связи начиная с указанной в POS позиции.

Если с атрибутом BY=step указан шаг итераций, то внутри сегмента пропускаются step-1 связь (берется каждая step связь, начиная с POS)

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

С атрибутом ITER может быть указано выражение, которое вычисляется на каждом шаге итераций, не влияет на результат оператора.

P>Целевой аспект может быть указан с атрибутом TO своим именем target-aspect-name. Если целевой аспект не указан, и по умолчанию, используется целевой аспект, альтернативный исходному. Для бинарных аспектов достаточно указать исходный аспект, для многоместных аспектов необходимо задавать целевой аспект.

Объект может быть указан с атрибутом O числовым идентификатором object либо с атрибутом N своим именем object-name и с атрибутом C именем своего класса class-name. По умолчанию используется текущий объект.

Если с атрибутом D указана БД dbname, отличная от текущей, то необходимо явно указывать аспект и объект. По умолчанию используется текущая БД.

С атрибутом RET, или без него, последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле.

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

Пример

Выводим список увлечений конкретной личности.

<#FOREACH AN="увлеч\увлечения"
 N="Иванов ИИ" C="Личность"
 D=((XBASE)"Test\AIS.ab")>
  <#NAME>&nbsp;
<#>
См. также: F, Операторы цикла., Составные примитивы., Ленивые примитивы.,

FORLINE - Цикл по всем связям аспекта

<#FORLINE [[AN=]aspect-name | A=aspect] [{N=object-name C=class-name} | O=object] [D=dbname] [POS=segment-start] [NUM=segment-size] [INIT=initialization] [FROM=begin-condition] [FROMOBJ=begin-obj] [IF=step-condition] [BY=step-size] [ITER=iteration] [UNTIL=until-condition] [WHILE=while-condition] [[RET=]body] > [complex-body] <#/>
Параметры Описание
[[AN=]aspect-name] Задает исходный аспект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий аспект.
[A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
[N=object-name] Задает исходный объект именем. По умолчанию используется текущий объект.
[C=class-name] Задает исходный объект именем класса. По умолчанию используется текущий объект.
[O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
[D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
[POS=segment-start] Задает начало сегмента итераций. Опциональный.
[NUM=segment-size] Задает размер сегмента итераций. Опциональный.
[INIT=initialization] Задает выражение вычисляющееся один раз перед циклом. Опциональный.
[FROM=begin-condition] Задает выражение, которое вычисляется перед всеми шагами внутри интервала. Пока не станет истиной, интервал исполнения не начинается. Потом уже не вычисляется. Опциональный.
[FROMOBJ=begin-obj] Задает числовой идентификатор целевого объекта в списке по аспекту, не достигнув которого, тело цикла не вычисляется. Опциональный.
[IF=step-condition] Задает выражение, которое вычисляется непосредственно перед шагом. Если возвращает пусто шаг пропускается. Опциональный.
[BY=step-size] Задает шаг цикла. Если step-size=2, то исполняется только каждый второй в пределах интервала. Опциональный.
[ITER=iteration] Задает выражение, которое вычисляется после шага, что возвращает безразлично. Опциональный.
[UNTIL=until-condition] Задает выражение-условие, которое вычисляется после каждого шага. Если возвращает НЕ-пусто выход из цикла. Опциональный.
[WHILE=while-condition] Задает выражение-условие, которое вычисляется перед шагом. Если возвращает пусто - выход из цикла. Опциональный.
[[RET=]body] Задает тело цикла внутри простого тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов Без атрибута ожидается в позиции последнего аргумента. Опциональный.
[complex-body] Задает тело цикла внутри сложного тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Опциональный.

Описание

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

Итерации не начинаются (не вычисляется тело цикла), если:

  • не достигнуто начало сегмента итераций, указанное с атрибутом POS
  • начало сегмента итераций превосходит имеющееся количество связей указанного объекта по исходному аспекту.
  • выражение, указанное с атрибутом FROM на очередном шаге приняло значение 'ложь' (пусто).
  • не достигнут указанный с атрибутом FROMOBJ целевой объект по указанному аспекту в списке связей.

Итерации заканчиваются, если:

  • пройдены все наличные связи.
  • достигнут конец сегмента - пройдено указанное с атрибутом NUM число шагов.
  • выражение, указанное с атрибутом WHILE перед очередным шагом приняло значение 'ложь' (пусто).
  • выражение, указанное с атрибутом UNTIL после очередного шага приняло значение 'истина' (не пусто).

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

Сегмент итераций может быть задан с атрибутом POS позицией segment-start первой связи, начиная с единицы и, с атрибутом NUM, размером segment-size. По умолчанию POS=1 - сканирование начинается с первой наличной связи. По умолчанию NUM сканируются все наличные связи начиная с указанной в POS позиции.

Если с атрибутом BY=step указан шаг итераций, то внутри сегмента пропускаются step-1 связь (берется каждая step связь, начиная с POS)

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

С атрибутом ITER может быть указано выражение, которое вычисляется на каждом шаге итераций, не влияет на результат оператора.

Исходный аспект может быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию в качестве исходного аспекта используется текущий.

Объект может быть указан с атрибутом O числовым идентификатором object либо с атрибутом N своим именем object-name и с атрибутом C именем своего класса class-name. По умолчанию используется текущий объект.

Если с атрибутом D указана БД dbname, отличная от текущей, то необходимо явно указывать аспект и объект. По умолчанию используется текущая БД.

С атрибутом RET, или без него, последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле.

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

Пример

<#FORASP
 AN="уч-ст\ученая степень"
 N="Иванов ИИ" C="Личность"
 D=((XBASE)"Test\AIS.ab")>
 <#NAME>&nbsp(<#ASP AN="фио\ФИО" ТО="фио\ФИО для">)&nbsp;
 <#ASP AN="уч-зв\ученое звание" TO="уч-зв\об-ты уч-зв">&nbsp;
 <#ASP TO="уч-ст\об-ты уч-ст">&nbsp;
 <#ASP TO="уч-ст\область наук">
<#/>
См. также: F, Операторы цикла., Составные примитивы. , Ленивые примитивы.,

FORMEDIT - Редактирование строки

<#FORMEDIT [[AN=]aspect-name | A=aspect] [{[N=]object-name [C=]class-name}| O=object] [D=dbname] [LABEL=label] [ROWS=rows] [COLS=cols] [SIZE=size] [OTHER=other] >
Параметры Описание
[[AN=]aspect-name] Задает исходный аспект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий аспект.
[A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
[[N=]object-name] Задает исходный объект именем. Без атрибута ожидается в позиции 2. По умолчанию используется текущий объект.
[[C=]class-name] Задает исходный объект именем класса. Без атрибута ожидается в позиции 3. По умолчанию используется текущий объект.
[O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
[D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
[LABEL=label] Задает название кнопки подтверждения внесенных изменений. По умолчанию 'LABEL=OK'.
[ROWS=rows] Задает количество строк в форме ввода для тэга 'TEXTAREA' (атрибут ROWS=rows). Опциональный.
[COLS=cols] Задает количество столбцов в форме ввода для тэга 'TEXTAREA' (атрибут COLS=cols). По умолчанию IE устанавливает стандартную ширину.
[SIZE=size] Задает количество столбцов в форме ввода для тэгов 'INPUT TYPE=TEXT' (атрибут SIZE=size)/'TEXTAREA' (атрибут COLS=size). По умолчанию IE устанавливает стандартную ширину.
[OTHER=other] Задает другие атрибуты для тэгов 'INPUT TYPE=TEXT'/'TEXTAREA'. Опциональный.

Описание

Генерирует форму редактирования значения аспекта заданного объекта с кнопкой подтверждения внесенных изменений, в общем виде:

<form name='Fobject_aspect' method='post' action='ab://ab/D=dbname&O=object&A=aspect&M=method&POS=1'>
<input type='hidden' name='ACT ' value={'_EDIT' | '_TEXT'}>
<input type='hidden' name='O' value='object'> <input type='hidden' name='A' value='aspect'>
{<input type='text' name='_VAL' [size='size'] [other] value='value'> |
 <textarea name='_VAL' [rows='rows'] [cols={'cols' | 'size'}] [other]> [value] </textarea>}
<input type='submit' value={'label' | 'OK!'}>
</form>

где: method-метод формирующий текущую страницу; value-значение аспекта объекта БД dbname.

По нажатию кнопки подтверждения, выполняется одно из действий _EDIT или _TEXT. Затем вызывается метод, формирующий текущую страницу (&M=method).

Если установлен аспект (текущий или указанный), выполняется действие (&ACT=) _EDIT _VAL=value, иначе выполняется действие (&ACT=)_TEXT _VAL=value.

Исходный аспект может быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута 'AN=' ожидается в качестве первого аргумента.

Объект может быть указан числовым идентификатором object или своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве второго и третьего аргумента.

По умолчанию используется текущий аспект текущего объекта текущей БД.

Если указана БД dbname, отличная от текущей, необходимо явно указывать объект и аспект.

Если указаны ROWS или COLS, то формируется тег TEXTAREA для редактирования значения аспекта value с указанным количеством строк rows. <textarea name='_VAL' [rows='rows'] [cols={'cols' | 'size'}] [other]> [value] </textarea> Если rows отрицательный, либо нулевой, либо не указан, то по умолчанию rows=3 (три строки). Ширина области редактирования текста устанавливается либо в columns, если COLS указан, либо в size, если SIZE указан. По умолчанию IE устанавливает стандартную ширину.

Если не указаны атрибуты ROWS и COLS, генерирует однострочное поле ввода с шириной size, если SIZE указан. <input type='text' name='_VAL' [size='size'] [other] value='value'> По умолчанию IE устанавливает стандартную ширину. Другие параметры формы ввода задаются аргументом other. ('disabled','maxlength=').

Аргументом label устанавливается название кнопки подтверждения По умолчанию LABEL='OK!'.

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

Пример

Выводим форму редактирования ученой степени для личности Иванов ИИ.

<br>Ученая степень:
<#FORMEDIT AN="уч-ст\ученая степень"
  N="Иванов ИИ" C="Личность"
  D=((XBASE)"Test\AIS.ab")
  LABEL="Изменить">
См. также: F, Обращение к БД через HTML-форму, Ленивые примитивы., Простые примитивы.,

FORNEMPASP - Цикл по всем непустым аспектам объекта

<#FORNEMPASP [{[N=]object-name [C=]class-name} | O=object] [[RET=]body] > [complex-body] <#/>
Параметры Описание
[[N=]object-name] Задает исходный объект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий объект.
[[C=]class-name] Задает исходный объект именем класса. Без атрибута ожидается в позиции 2. По умолчанию используется текущий объект.
[O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
[[RET=]body] Задает тело цикла внутри простого тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Без атрибута ожидается в позиции последнего аргумента. Опциональный.
[complex-body] Задает тело цикла внутри сложного тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Опциональный.

Описание

В теле цикла поочередно устанавливает текущими все непустые аспекты объекта (имеющие хотя бы одну связь по аспекту объекта).

Объект может быть указан своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве первого и второго аргументов. По умолчанию используется текущий объект текущей БД.

С атрибутом RET, или без него последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле.

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

Пример

<#FOROBJ (OBJ N="Иванов ИИ" C="Личность") D=((XBASE)"Test\AIS.ab")>
  <#FORNEMPASP RET="<br>">
    <#NAME> 
  <#/>
</#>
См. также: F, Операторы цикла., Составные примитивы. , Ленивые примитивы.,

FOROBJ - Установка текущего объекта и аспекта

<#FOROBJ [[O=]object] [AN=aspect-name | A=aspect] [D=dbname] [[RET=]body] > [complex-body] <#/>
Параметры Описание
[[O=]object] Задает исходный объект числовым идентификатором. Без атрибута ожидается в позиции 1. По умолчанию используется текущий объект.
[AN=aspect-name] Задает исходный аспект именем. По умолчанию используется текущий аспект.
[A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
[D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
[[RET=]body] Задает тело цикла внутри простого тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Без атрибута ожидается в позиции последнего аргумента. Опциональный.
[complex-body] Задает тело цикла внутри сложного тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Опциональный.

Описание

В теле оператора устанавливает текущим объект и аспект.

Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущая БД.

Объект может быть указан числовым идентификатором object, без атрибута O ожидается в качестве первого аргумента. По умолчанию используется текущий объект.

Аспект может быть указан числовым идентификатором aspect или своим именем aspect-name.

С атрибутом RET, или без него последним аргументом, тело body может быть указано внутри простого тега в функциональном стиле.

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

Пример

Выводим в виде таблицы свойства класса Names БД "MyDB.ab".

<#FOROBJ
  O=(OBJ N="Names" C="CLASS")
  D="MyDB.ab"
  RET="<hr>")>
    <#OBJFORM>
<#/>
См. также: F, Операторы устанавливающие контекст, Составные примитивы. , Ленивые примитивы.,

FUNC - Объявление функций

<#FUNC {function-name=function-body}* >
Параметры Описание
function-name Задает имя функции. Ожидается в позиции 1.
function-body Задает тело функции. Ожидается в позиции 2.

Описание

Объявляет функции с именем function-name и телом функции function-body.

Ничего не возвращает.

Пример

<#FUNC
HelpTitle=(PARAM O;PARAM O=(OBJ);ASPECT(ATitle) O=(O)|(NAME(O)))
HelpText=(PARAM O;PARAM O=(OBJ);ASPECT(AText) O=(O))
>
См. также: F, Энергичные примитивы., Простые примитивы.,

GE - Числовое сравнение: больше или равно

<#GE numberic-source numberic-pattern [onmatch-action {numberic-pattern onmatch-action}* [default-action]] >
Параметры Описание
numeric-source Задает исходное число для операции сравнения с образцом Ожидается в позиции 1.
numeric-pattern Задает образец число для операции сравнения с исходным числом. Ожидается в позиции 2.
[onmatch-action] Задает действие, выполняющееся при совпадении исходного числа с образцом. Ожидается в позиции 3. Опциональный.
[default-action] Задает действие, выполняющееся при несовпадении образцов с исходным числом. Ожидается в позиции последнего аргумента. Опциональный.

Описание

Последовательно производит числовое сравнение 'больше или равно' значения первого аргумента numberic-source со значением четных аргументов numberic-pattern. Нечисловые значения исходного выражения или образца заменяются нулем (0). Если найден аргумент numberic-pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action.

Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто.

Пример

Функция WaterTemp возвращает словесное описание температуры воды.

<#FUNC
WaterTemp=(PARAM t;
 (GE(t)
  100 "кипяток"
   80 "очень горячая"
   50 "горячая"
   30 "теплая"
    0 "холодная"
   "лед"
 )
)
>
См. также: G, Операции сравнения., Ленивые примитивы., Простые примитивы.,

GLOB - Установка значений глобальным переменным

<#GLOB {global-var-name=value}* >
Параметры Описание
global-var-name Задает имя глобальной переменной для присваивания нового значения. Ожидается в позиции 1.
value Задает новое значение, присваиваемое глобальной переменной. Ожидается в позиции 2.

Описание

Присваивает глобальным переменным global-var-name вычисленного значения аргумента value. Аргумент value может быть выражением или константой.

Ничего не возвращает.

Пример

<#GLOB
 GLB_EditMode="Y"
 GLB_DB=(DBASE)
>
См. также: G, Ленивые примитивы., Простые примитивы.,

GLOBALS - Операции с массивом глобальных переменных

<#GLOBALS {{[NUM=]index} | {[KEY=]name}}* [{KEY=]{# | #L | #C}} | {LINES={index | name}} | {SIZE={index | name}} | {HAS=name} | {DEL={index | name}} | {PUT=value} | {APP=value} ]
Параметры Описание
[[NUM=]index] Задает элемент глобального массива позиционным индексом. Опциональный. Промежуточный.
[[KEY=]name] Задает элемент глобального массива именным индексом. Опциональный. Промежуточный.
[[KEY=]{# | #L}] Возвращает размер списка указанного элемента массива. Опциональный. Ожидается последним параметром.
[[KEY=]#C] Возвращает размер в байтах указанного элемента массива. Опциональный. Ожидается последним параметром.
[LINES=index] Возвращает размер списка указанного позиционным индексом элемента массива. Опциональный. Ожидается последним параметром.
[LINES=name] Возвращает размер списка указанного именным индексом элемента массива. Опциональный. Ожидается последним параметром.
[SIZE=index] Возвращает размер в байтах указанного позиционным индексом элемента массива. Опциональный. Ожидается последним параметром.
[SIZE=name] Возвращает размер в байтах указанного именным индексом элемента массива. Опциональный. Ожидается последним параметром.
[HAS=name] Проверяет наличие элемента массива с указанным именным индексом. Опциональный. Ожидается последним параметром.
[DEL=index] Удаляет элемент массива указанного позиционным индексом. Опциональный. Ожидается последним параметром.
[DEL=name] Удаляет элемент массива указанного именным индексом. Опциональный. Ожидается последним параметром.
[PUT=value] Присваивает новое значение указанному элементу массива. Опциональный. Ожидается последним параметром.
[APP=value] Добавляет новое значение к значению указанного элемента массива. Опциональный. Ожидается последним параметром.

Описание

В зависимости от параметров производит различные операции с глобальными переменными.

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

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

  • GLOBALS {{[KEY=]name} | {[NUM=]index}}* - возвращает текст значения глобальной переменной или указанного элемента массива.
  • GLOBALS {{[KEY=]name} | {[NUM=]index}}* [KEY=]{# | #L} - возвращает размер списка в значении переменной или указанного элемента массива.
  • GLOBALS {{[KEY=]name} | {[NUM=]index}}* [KEY=]#C - возвращает количество элементов всего массива или указанного элемента массива.
  • GLOBALS {{[KEY=]name} | {[NUM=]index}}* LINES={name | index} - возвращает размер списка указанного элемента массива.
  • GLOBALS {{[KEY=]name} | {[NUM=]index}}* SIZE={name | index} - возвращает количество элементов указанного элемента массива.
  • GLOBALS {{[KEY=]name} | {[NUM=]index}}* HAS=name - проверяет наличие ключа в значении переменной или указаного элемента массива.
  • GLOBALS {{[KEY=]name} | {[NUM=]index}}* DEL={name | index} - удаляет ключ либо элемент из значения переменной или указанного элемента массива.
  • GLOBALS {{[KEY=]name} | {[NUM=]index}}* PUT=value - присваивает новое значение переменной или элементу массива.
  • GLOBALS {{[KEY=]name} | {[NUM=]index}}* APP=value - добавляет новое значение к значению переменной или указанного элемента массива.

Пример

Выводим значения полей FIO из глобального массива GLB_Array

<#FOR(i=1)(LT(i)(N))(ADD i 1)
  ((i)". "(GLOBALS GLB_Array (i) KEY="FIO")"
"\)
>
См. также: G, Ленивые примитивы., Простые примитивы.,

GT - Числовое сравнение: больше

<#GT numberic-source numberic-pattern [onmatch-action {numberic-pattern onmatch-action}* [default-action]] >
Параметры Описание
numeric-source Задает исходное число для операции сравнения с образцом. Ожидается в позиции 1.
numeric-pattern Задает образец число для операции сравнения с исходным числом. Ожидается в позиции 2.
[onmatch-action] Задает действие, выполняющееся при совпадении исходного числа с образцом. Ожидается в позиции 3. Опциональный.
[default-action] Задает действие, выполняющееся при несовпадении образцов с исходным числом. Ожидается в позиции последнего аргумента. Опциональный.

Описание

Последовательно производит числовое сравнение 'больше' значения первого аргумента numberic-source со значением четных аргументов numberic-pattern. Нечисловые значения исходного выражения или образца заменяются нулем (0). Если найден аргумент numberic-pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action.

Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто.

Пример

Функция iref возвращает в виде гифа ссылку на объект.

<#FUNC
iref=(PARAM gif O hint;PARAM O=(OBJ);
 (GT(O) 0
  (REFER PAGE O=(O) ATAG=("title='"(hint|HelpTitle(O))"'")
   (img(gif) ("alt='"(hint|HelpTitle(O))"' align='middle'"))
  )
  (img(gif) "style='FILTER: alpha(opacity=40)' align='middle'")
 )
)
>
См. также: G, Операции сравнения., Ленивые примитивы., Простые примитивы.,

HREF - Формирование ссылки на объект

<#HREF [[M=]method | ACT=action] [{N=object-name C=class-name} | O=object] [D=dbname] [ATAG=atag] [{Custom=expression}*] > [reference-image] <#/>
Параметры Описание
[[M=]method] Задает метод, формирующий целевую страницу ссылки. Без атрибута ожидается в позиции 1. По умолчанию (нет ни M ни ACT) принимается: M=_HOME если не указана БД (D=) или если БД указана, но не указан объект, то M=_ROOT, а если объект указан, то M=PAGE.
[ACT=action] Задает действие, выполняемое при переходе по ссылке. По умолчанию формирует навигационный запрос.
[N=object-name] Задает исходный объект именем. По умолчанию используется текущий объект.
[C=class-name] Задает исходный объект именем своего класса. По умолчанию используется текущий объект.
[O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
[D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
[ATAG=atag] Задает дополнительные атрибуты A-тэга. Опциональный.
[Custom=expression] Задает любые именованные параметры для передачи формирующему страницу методу. (например, начальную позицию сегмента итераций и размер сегмента итераций: POS=segment-start NUM=size). Опциональный.
[reference-image] Задает явно изображение ссылки внутри сложного тега. Опциональный.

Описание

Формирует полную ссылку на объект БД или изображение его значения (A-тег), в общем виде:

<a href='ab://ab/[&D=dbname] [&O=object] [&N=object-name&C=class-name] [&M=method] [&ACT=action] [&POS=segment-start] [&NUM=size] [{&parameters}*] ' [atag] < [reference-image] </a>.

Значение атрибута 'href=' A-тега формируется аналогично URL/_HREF.

Могут быть указаны любые именованные параметры Custom=expression, которые будут включены в ссылку для передачи параметров обрабатывающему методу. В их числе могут быть NUM, POS, определяющие сегмент итераций по умолчанию в циклах обрабатывающего метода.

С атрибутом ATAG могут быть указаны дополнительные параметры A-тега. (name=, id=, frame=, title=, methods=, accesskey= ... ). По умолчанию формируется атрибут 'title=' A-тэга, дублирующий текст 'href=' ссылки.

Изображение ссылки reference-image внутри сложного тега вычисляется для указанного, или, по умолчанию, для текущего объекта.

Возвращает в случае успеха сформированный таким образом A-тег ( изображение/ссылку), иначе пусто.

Пример

Пункт меню для сохранения БД целиком.

<#HREF ACT="_SAVE"
  ATAG="title='Сохранение изменений внесённых в БД'">
  Сохранить
<#/>
См. также: H-I, Обращение к БД через HTML-ссылку., Составные примитивы. , Ленивые примитивы.,

IF - Оператор условного выполнения

<#IF condition [then-body [else-body]]> [complex-then-body] [<#ELSE> [complex-else-body]] <#/>
Параметры Описание
condition Задает выражение - условие. Ожидается в позиции 1.
[then-body] Задает тело внутри простого тэга, выполняемое при непустом значении выражения в условии. Ожидается в позиции 2. Опциональный.
[else-body] Задает тело внутри простого тэга, выполняемое при пустом значении выражения в условии. Ожидается в позиции 3. Опциональный.
[complex-then-body] Задает тело внутри сложного тэга, выполняемое при непустом значении выражения в условии. Опциональный.
[complex-else-body] Задает тело внутри сложного тэга, выполняемое при пустом значении выражения в условии. Опциональный.

Описание

При выполнении условия (непустом значении первого аргумента) condition выполняет блок then-body, иначе выполняет блок else-body.

Тело then-body и else-body могут быть указаны вторым и третьим аргументами внутри простого тега.

Возвращает объединенный результат вычисления тела then-body либо else-body, сначала внутри простого тега, затем внутри сложного тега.

Пример

<#IF (FILEEXIST "MyDB.ab") (OPEN D="MyDB.ab")>
<br>Текщая БД: <#DBASE>
<#ELSE>
<#ERROR "Файл не найден">
<#/>
См. также: H-I, Условные операторы., Составные примитивы. , Ленивые примитивы.,

IFNOT - Оператор условного выполнения

<#IFNOT condition [then-body [else-body]]> [complex-then-body] [<#ELSE> [complex-else-body]] <#/>
Параметры Описание
condition Задает выражение - условие. Ожидается в позиции 1.
[then-body] Задает тело внутри простого тэга, выполняемое при пустом значении выражения в условии. Ожидается в позиции 2. Опциональный.
[else-body] Задает тело внутри простого тэга, выполняемое при непустом значении выражения в условии. Ожидается в позиции 3. Опциональный.
[complex-then-body] Задает тело внутри сложного тэга, выполняемое при пустом значении выражения в условии. Опциональный.
[complex-else-body] Задает тело внутри сложного тэга, выполняемое при непустом значении выражения в условии. Опциональный.

Описание

При невыполнении условия (пустом значении первого аргумента) condition выполняет блок then-body, иначе выполняет блок else-body.

Тело then-body и else-body могут быть указаны вторым и третьим аргументами внутри простого тега.

Возвращает объединенный результат вычисления тела then-body либо else-body, сначала внутри простого тега, затем внутри сложного тега.

Пример

Обработка результата

Функция DeLink_Result удаляет указанную связь. В случае неуспеха возвращает текст ошибки.

<#GLOB
DeLink_Result=(
 IFNOT(_DELK D=(D) R=(R) O1=(O1) O2=(O2) )
 ("Связь типа" (R) " между "
  (NAME(O1)) " и "
  (NAME(O2))
  " не удалена/не найдена."
 )
)
>
См. также: H-I, Условные операторы., Составные примитивы. , Ленивые примитивы.,

IS - Строковое сравнение: равно

<#IS source pattern [onmatch-action {pattern onmatch-action}* [default-action]]>
Параметры Описание
source Задает исходное выражение строку для сравнения. Ожидается в позиции 1.
pattern Задает образец для сравнения. Ожидается в позиции 2.
[onmatch-action] Задает действие, выполняемое при успехе операции сравнения исходной строки с образцом. Ожидается в позиции 3. Опциональный.
[default-action] Задает действие, выполняемое при неуспехе операции сравнения с образцами. Ожидается в позиции последнего аргумента. Опциональный.

Описание

Последовательно производит строковое сравнение 'равно' значения первого аргумента source со значением четных аргументов pattern. Если найден аргумент pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action.

Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто.

Пример

Функция ModeEdit возвращает непусто ("Y"), если включен режим редактирования.

<#FUNC
ModeEdit=(IS(GLB_Edit_Mode)
 "YES" "Y"
 "OK" "Y"
)
>
См. также: H-I, Операции сравнения., Ленивые примитивы., Простые примитивы.,

KEY - Сканированное имя ключа

<#KEY>

Описание

Получает имя ключа на очередном шаге внутри тела цикла SCAN при типе сканирования AS=REC и AS=NAMES.

Возвращает имя ключа, сканированное на очередном шаге цикла SCAN.

Пример

Функция Globs_Save cохраняет в файле глобальные переменные с непустым атрибутом "SAV" в значении переменной.

<#FUNC
Globs_Save=(
  FILE REC=Globs PATH=(Globs_Path) SIZE=(GLOBALS #C);
  SCAN TEXT=(GLOBALS) AS=REC
  (COND(FILE Globs KEY=(KEY) KEY=SAV) //Если есть элемент с непустым атрибутом SAV
   (FILE Globs (KEY) VAL PUT=(VALUE));  // то сохраняем
  );
  FILE CLOSE=Globs;
)
>
См. также: Результаты сканирования текста

LE - Числовое сравнение: меньше или равно

<#LE numberic-source numberic-pattern [onmatch-action {numberic-pattern onmatch-action}* [default-action]]>
Параметры Описание
numeric-source Задает исходное число для операции сравнения с образцом. Ожидается в позиции 1.
numeric-pattern Задает образец число для операции сравнения с исходным числом. Ожидается в позиции 2.
[onmatch-action] Задает действие, выполняющееся при совпадении исходного числа с образцом. Ожидается в позиции 3. Опциональный.
[default-action] Задает действие, выполняющееся при несовпадении образцов с исходным числом. Ожидается в позиции последнего аргумента. Опциональный.

Описание

Последовательно производит числовое сравнение 'меньше или равно' значения первого аргумента numberic-source со значением четных аргументов numberic-pattern. Нечисловые значения исходного выражения или образца заменяются нулем (0). Если найден аргумент numberic-pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action.

Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто.

Пример

Функция Time возвращает название времени суток.

<#FUNC
Time=(PARAM hour;
 LE(hour)
  4 "ночь"
  6 "раннее утро"
  11 "утро"
  13 "полдень"
  17 "день"
  23 "вечер"
  "ночь"
)
>
См. также: L, Операции сравнения., Ленивые примитивы., Простые примитивы.,

LEN - Получение длины строки

<#LEN expression >
Параметры Описание
expression Задает исходную строку для получения ее длины. Ожидается в позиции 1.

Описание

Возвращает длину строки expression.

Пример

Функция возвращает максимальную длину строки текста text.

<#FUNC
TextWidth=(PARAM text;
 SCAN TEXT=(text) AS=LINES
 (len=(LEN(VALUE))
  maxlen=(GT(len)(maxlen)(len))
 )
 (maxlen)
)
>
См. также: L, Строчные операции, Ленивые примитивы., Простые примитивы.,

LIST - Создание списочного массива

<#LIST {{[TEXT=]list-item} | {LIST=list}}* >
Параметры Описание
[[TEXT=]list-item] Задает очередной элемент формируемого списка. Текст указанного значения упаковывается в одноэлементный массив перед вставкой в формируемый список. Опциональный.
[LIST=list] Задает готовый список для вставки в формируемый список. Опциональный.

Описание

Создает списочный массив.

Очередным аргументом или атрибутом TEXT может быть указан очередной элемент формируемого списочного массива. Текст указанного значения упаковывается в одну строку и добавляется в список как один элемент массива.

Атрибутом LIST может быть задан другой списочный массив, который подключается в формируемый список без предварительной упаковки (1:1). Каждая строка текста указанного значения подключается как отдельный элемент списочного массива.

    Возвращает собранный таким образом текст списочного массива.

    Пример

    <#SET
      text=(TEXT "Васин ВВ"\"Константинов КК"\"Гаврилов ГГ")
      list1=(LIST "Иванов ИИ" "Петров ПП")
      list2=(LIST "Сидоров СС" LIST=(list1))
      list3=(LIST LIST=(list2) TEXT=(text))
    >
    
    См. также: L, Строчные операции, Ленивые примитивы., Простые примитивы.

    LOAD - Загрузка из файла кода БД

    <#LOAD [D=dbname] [{FILE=file-name [SHOW=Y]} | TEXT=ddl-code]>
    Параметры Описание
    [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
    FILE=file-name Задает путь к файлу содержащему DDL-код для загрузки.
    [SHOW=Y] Выводит диалог отображения процесса загрузки DDL-кода с кнопками остановки, продолжения и отмены загрузки. Опциональный. Дополнительный параметр для FILE.
    TEXT=ddl-code Задает текст DDL-кода для загрузки.

    Описание

    Загружает текст кода DDL ddl-code или из файла file-name в БД dbname или, по умолчанию, в текущую.

    С ключом SHOW=Y выводится окно, в котором отображается процесс загрузки в БД текста DDL-кода из указанного файла file-name и кнопками завершения приостановки и продолжения процесса загрузки. По завершению загрузки окно автоматически закрывается.

    В случае успеха возвращает имя файла file-name без изменений, если текст кода DDL был загружен из файла, непустое значение (символ 'пробел'), если загружен текст кода ddl-code, иначе пусто.

    Пример

    Догружаем из файла "C:\Abrial\Bases\MyDataBase.ab" DDL-код в текущую БД, отображаем процесс загрузки.

    <#LOAD FILE="C:\Abrial\Bases\MyDataBase.ab" SHOW=Y>
    
    См. также: L, Операции со всей базой данных., Ленивые примитивы., Простые примитивы.,

    LOCALS - Операции с массивом локальных переменных

    <#LOCALS {{[NUM=]index} | {[KEY=]name}}* [{[KEY=]{# | #L | #C}} | {LINES={index | name}} | {SIZE={index | name}} | {HAS=name} | {DEL={index | name}} | {PUT=value} | {APP=value} ] >
    Параметры Описание
    [[NUM=]index] Задает элемента массива позиционным индексом. Опциональный. Промежуточный.
    [[KEY=]name] Задает элемент массива именным индексом. Опциональный. Промежуточный.
    [[KEY=]{#|#L}] Возвращает размера списка в значении массива или указанного элемента массива. Опциональный. Ожидается последним параметром.
    [[KEY=]#C] Возвращает размер в байтах значения массива или указанного элемента массива. Опциональный. Ожидается последним параметром.
    [LINES=index] Возвращает длину списка указанного позиционным индексом элемента массива. Опциональный. Ожидается последним параметром.
    [LINES=name] Возвращает длину списка указанного именным индексом элемента массива. Опциональный. Ожидается последним параметром.
    [SIZE=index] Возвращает размер в байтах значения указанного позиционным индексом элемента массива. Опциональный. Ожидается последним параметром.
    [SIZE=name] Возвращает размер в байтах значения указанного именным индексом элемента массива. Опциональный. Ожидается последним параметром.
    [HAS=name] Проверяет наличие элемента массива с указанным именным индексом. Опциональный. Ожидается последним параметром.
    [DEL=index] Удаляет элемент массива с указанным позиционным индексом. Опциональный. Ожидается последним параметром.
    [DEL=name] Удаляет элемент массива с указанным именным индексом. Опциональный. Ожидается последним параметром.
    [PUT=value] Присваивает новое значение массива или указанного элемента массива. Опциональный. Ожидается последним параметром.
    [APP=value] Добавляет новое значение к значению массива или указанного элемента массива. Опциональный. Ожидается последним параметром.

    Описание

    Производит различные операции с локальными переменными в зависимости от указанных параметров.

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

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

    • LOCALS {{[NUM=]index} | {[KEY=]name}}* - возвращает значение локальной переменной или указанного элемента массива.
    • LOCALS {{[NUM=]index} | {[KEY=]name}}* [KEY=]{# | #L} - возвращает количество элементов в значении переменной или указанного элемента массива.
    • LOCALS {{[NUM=]index} | {[KEY=]name}}* [KEY=]#C - возвращает общее количество элементов в значении переменной или указанного элемента массива.
    • LOCALS {{[NUM=]index} | {[KEY=]name}}* LINES={index | name} - возвращает размер списка в значении указанного элемента массива.
    • LOCALS {{[NUM=]index} | {[KEY=]name}}* SIZE={index | name} - возвращает общее количество элементов в значении переменной или указанного элемента массива.
    • LOCALS {{[NUM=]index} | {[KEY=]name}}* HAS=name - возвращает 'истина' (не пусто), если имеется элемент массива с указанным именным индексом.
    • LOCALS {{[NUM=]index} | {[KEY=]name}}* DEL={index | name} - удаляет указанный индексом или ключом элемент массива. Ничего не возвращает.
    • LOCALS {{[NUM=]index} | {[KEY=]name}}* PUT=value - присваивает новое значение переменной или элементу массива. Ничего не возвращает.
    • LOCALS {{[NUM=]index} | {[KEY=]name}}* APP=value - добавляет новое значение к имеющемуся значению переменной или указанного элемента массива. Ничего не возвращает.

    Пример

    Функция упорядочивания подразделов хэлпа по заголовку.

    <#FUNC
    SortByNick=(PARAM O; PARAM O=(OBJ);
     List=(CONV SORT=(FORALLOBJ(AParts) O=(O) ("Nick="(HelpTitle)" O1="(OBJ)\)));
     FOR(i=1 sz=(ASPSIZE(AParts) O=(O)))(LE(i)(sz))(ADD i 1)
     (nxtobj=(LOCALS List (i) "O1")
      dlkres=(_DELK R=PartOf O1=(nxtobj) O2=(O))
      lnkres=(_LINK R=PartOf O1=(nxtobj) O2=(O))
     )
     (dlkres)&(lnkres)
    )
    >
    
    См. также: G, Ленивые примитивы., Простые примитивы.,

    LT - Числовое сравнение: меньше

    <#LT numberic-source numberic-pattern [onmatch-action {numberic-pattern onmatch-action}* [default-action]] >
    Параметры Описание
    numeric-source Задает исходное число для операции сравнения с образцом. Ожидается в позиции 1.
    numeric-pattern Задает образец число для операции сравнения с исходным числом. Ожидается в позиции 2.
    onmatch-action Задает действие, выполняющееся при совпадении исходного числа с образцом Ожидается в позиции 3.
    default-action Задает действие, выполняющееся при несовпадении образцов с исходным числом. Ожидается в позиции последнего аргумента.

    Описание

    Последовательно производит числовое сравнение 'меньше' значения первого аргумента numberic-source со значением четных аргументов numberic-pattern. Нечисловые значения исходного выражения или образца заменяются нулем (0). Если найден аргумент numberic-pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action.

    Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто.

    Пример

    Функция img1 выводит рисунок с заданными размерами.

    <#FUNC
    img1=(PARAM iname h w;
     LT (h) 100 (h=100) 600 "" (h=600);
     LT (w) 200 (w=200) 800 "" (w=800);
     (img iname ("width="(w)" height="(h)))
    >
    
    См. также: L, Операции сравнения., Ленивые примитивы., Простые примитивы.,

    MACNAME - Получение имени текущего метода

    <#MACNAME>

    Описание

    Возвращает имя главного метода образующего текущую HTML-страницу.

    Пример

    <p>Текущуя HTML-страница формируется методом <#MACNAME></p>
    
    См. также: M, Просмотр и навигация по БД, Энергичные примитивы., Простые примитивы.,

    MACRO - Определение макроса

    <#MACRO macro-name {parameter-name[=value]}* > [macro-body] <#/>
    Параметры Описание
    macro-name Задает имя макроса. Ожидается в позиции 1.
    [parameter-name[=value]] Задает параметры вызова макроса. Опциональный. Ожидается после имени макроса начиная с позиции 2.
    [macro-body] Задает тело макроса Опциональный.

    Описание

    Задает в тексте тело макроса macro-body с именем macro-name.

    Если после имени макроса указаны параметры, эти параметры обрабатываются сразу при входе в макрос как аргументы операции PARAM. Второй аргумент MACRO соответвует 1-му аргументу PARAM.

    Ничего не возвращает.

    Пример

    Макрос с параметром 'COL' для формирования в виде таблицы списка имен всех классов текущей БД порциями по указанному в первом параметре (COL) количеству имен в строке.

    <#MACRO ShowClasses COL>
    <table><#FORALLOBJ (ITEMS) N=CLASS C=CLASS>
     <tr>
     <#PORTION (COL)><td><#(NAME)><#/>
    <#/></table>
    <#/>
    
    См. также: M, Составные примитивы. , Ленивые примитивы.,

    MOVE - Изменение порядка связей списочного отношения

    <#MOVE {[AN=]aspect-name | A=aspect-id} [{N=object-name C=class-name} | O=object] {POS=absolute-pos | STEP=offset} >
    Параметры Описание
    [AN=]aspect-name Задает аспект смежного объекта именем. Ожидается в позиции 1. Альтернатива 'A='.
    A=aspect-id Задает аспект смежного объекта числовым идентификатором. Ожидается в позиции 1. Альтернатива 'AN='.
    [N=object-name] Задает объект именем. Опциональный. По умолчанию используется текущий объект. Имеет смысл только вместе с атрибутом 'С='. Альтернатива 'O='.
    [C=class-name] Задает объект имя класса. Опциональный. По умолчанию используется текущий объект. Имеет смысл только вместе с атрибутом 'N='. Альтернатива 'O='.
    [O=object-id] Задает объект числовым идентификатором. Опциональный. По умолчанию используется текущий объект. Альтернатива 'N=','C='.
    POS=absolute-pos Задает новую абсолютную позицию связи в списочном аспекте. Опциональный. Если указанная новая позиция связи превышает количество наличных связей перемещает указанную связь в конец списка, если отрицательная либо 0 - в начало списка. Альтернатива 'STEP='.
    STEP=offset Задает смещение к новой позиции связи в списочном аспекте. Опциональный. Если вычисленная новая позиция связи превышает количество наличных связей перемещает указанную связь в конец списка, если отрицательная либо 0 - в начало списка. Альтернатива 'POS='.

    Описание

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

    Аспект может быть задан именем аспекта с атрибутом AN=, или без него первым аргументом, либо числовым идентификатором аспекта с атрибутом A=. Аспект должен быть НЕ списочным аспектом списочного отношения. (Если аспект aspect-name сам списочный, операция теряет смысл, т.к. в остальных аспектах перемещать вручную нельзя и неясно какой из них взять.)

    Объект связи может быть задан либо именем объекта, с атрибутом N=, и именем класса объекта, с атрибутом C=, либо числовым идентификатором с атрибутом O=. По умолчанию используется текущий объект.

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

    Если новая позиция связи POS= отрицательная или ноль (<=0) или превышает количество наличных связей по аспекту, связь перемещается на последнее место в списке.

    Отрицательным значениям STEP= (задавать в кавычках!) соответствует перемещение на заданное число к началу списка, положительным - к концу. Если вычисленное значение новой позиции связи выходит за границы списка (<=0 либо превышает размер списка) то новой позицией связи будет граничное значение (первая либо поледняя в списке).

    В случае успешного перемешения возвращает непустое значение (пробел).

    Пример

    Функции перемещения связей в списочном отношении.

    <#FUNC
    MoveUp=(PARAM O;MOVE "PartOf\PartOf" O=(O) STEP="-1")
    MoveDown=(PARAM O;MOVE AN="PartOf" O=(O) STEP=1)
    MoveFirst=(PARAM O;MOVE A=(ASPID PartOf) O=(O) POS=1)
    MoveLast=(PARAM Name Class;MOVE PartOf N=(Name) C=(Class) POS=0)
    MovePos=(PARAM Pos O;MOVE "PartOf" O=(O) POS=(Pos))
    >
    
    См. также: M, Простые примитивы., Ленивые примитивы.,

    MUL - Числовое умножение

    <#MUL {numeric-expression}* >
    Параметры Описание
    numeric-expression Задает числовые выражения для перемножения.

    Описание

    Возвращает 1, если аргументы отсутствуют, если указан единственный аргумент, возвращает его значение, в остальных случаях возвращает результат умножения указанных чисел numeric-expression.

    Пример

    <#FUNC
    S=(MUL (1) (1) 3.14)
    >
    
    См. также: M, Арифметические операции., Ленивые примитивы., Простые примитивы.,

    NA - Строковое сравнение: меньше или равно

    <#NA source pattern [onmatch-action {pattern onmatch-action}* [default-action]] >
    Параметры Описание
    source Задает исходное выражение строку для сравнения. Ожидается в позиции 1.
    pattern Задает образец для сравнения. Ожидается в позиции 2.
    [onmatch-action] Задает действие, выполняемое при успехе операции сравнения исходной строки с образцом. Ожидается в позиции 3. Опциональный.
    [default-action] Задает действие, выполняемое при неуспехе операции сравнения с образцами. Ожидается в позиции последнего аргумента. Опциональный.

    Описание

    Последовательно производит строковое сравнение 'меньше или равно' значения первого аргумента source со значением четных аргументов pattern. Если найден аргумент pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action.

    Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто.

    Пример

    <#FUNC
    IsA=(PARAM str;
     NA(str)
      (s1) ((s0) " <= "(s1))
      (s2) ((s0) " <= "(s2))
    )
    >
    
    См. также: N, Операции сравнения., Ленивые примитивы., Простые примитивы.,

    NAME - Получение имени или значения объекта БД

    <#NAME [[O=]object] >
    Параметры Описание
    [[O=]object] Задает исходный объект числовым идентификатором. Без атрибута ожидается в позиции 1. По умолчанию используется текущий объект.

    Описание

    Формирует для объекта текущей БД изображение.

    Изображением может быть имя объекта для объектов-сущностей, либо значение для объектов-значений, либо индекс (числовой идентификатор с символом '#' вначале) для объектов-структур.

    Объект может быть указан числовым идентификатором object.

    По умолчанию используется текущий объект текущей БД.

    В случае успеха возвращает полученное изображение, иначе пусто.

    Пример

    Функция ClassName возвращает имя класса объекта.

    <#FUNC
    ClassName=(NAME(CLASS O=(1)))
    >
    
    См. также: N, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы.,

    NB - Строковое сравнение: больше или равно (не перед)

    <#NB source pattern [onmatch-action {pattern onmatch-action}* [default-action]] >
    Параметры Описание
    source Задает исходное выражение строку для сравнения. Ожидается в позиции 1.
    pattern Задает образец для сравнения. Ожидается в позиции 2.
    [onmatch-action] Задает действие, выполняемое при успехе операции сравнения исходной строки с образцом. Ожидается в позиции 3. Опциональный.
    [default-action] Задает действие, выполняемое при неуспехе операции сравнения с образцами. Ожидается в позиции последнего аргумента. Опциональный.

    Описание

    Последовательно производит строковое сравнение 'больше или равно' значения первого аргумента source со значением четных аргументов pattern. Если найден аргумент pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action.

    Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто.

    Пример

    <#NB (s0) (s1) ((s0) " >= "(s1)) (s2) ((s0) " >= "(s2))>
    
    См. также: N, Операции сравнения., Ленивые примитивы., Простые примитивы.,

    NE - Числовое сравнение: не равно

    <#NE numberic-source numberic-pattern [onmatch-action {numberic-pattern onmatch-action}* [default-action]] >
    Параметры Описание
    numeric-source Задает исходное число для операции сравнения с образцом. Ожидается в позиции 1.
    numeric-pattern Задает образец число для операции сравнения с исходным числом. Ожидается в позиции 2.
    [onmatch-action] Задает действие, выполняющееся при совпадении исходного числа с образцом Ожидается в позиции 3. Опциональный.
    [default-action] Задает действие, выполняющееся при несовпадении образцов с исходным числом. Ожидается в позиции последнего аргумента. Опциональный.

    Описание

    Последовательно производит числовое сравнение 'не равно' значения первого аргумента numberic-source со значением четных аргументов numberic-pattern. Нечисловые значения исходного выражения или образца заменяются нулем (0). Если найден аргумент numberic-pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action.

    Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто.

    Пример

    <#NE (x0) (x1) ((x0) " >< "(x1)) (x2) ((x0) " >< "(x2))>
    
    См. также: N, Операции сравнения., Ленивые примитивы., Простые примитивы.,

    NEG - Изменение знака числа

    <#NEG numeric-expression >
    Параметры Описание
    numeric-source Задает числовое выражение для замены знака значения выражения. Ожидается в позиции 1.

    Описание

    Изменяет знак числа - умножает число numeric-expression на (-1). Нечисловой аргумент заменяет нулем (0).

    Возвращает значение аргумента со знаком минус.

    Пример

    <#ADD y (NEG (x))>
    
    См. также: N, Арифметические операции., Ленивые примитивы., Простые примитивы.,

    NEMPTY - Проверка на непустоту аспекта

    <#NEMPTY [[AN=]aspect-name | A=aspect] [[O=]object] [D=dbname] >
    Параметры Описание
    [[AN=]aspect-name] Задает исходный аспект именем Без атрибута ожидается в позиции 1. По умолчанию используется текущий аспект.
    [A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
    [[O=]object] Задает исходный объект числовым идентификатором. Без атрибута ожидается в позиции 2. По умолчанию используется текущий объект.
    [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.

    Описание

    Проверяет, имеет ли объект связи по аспекту.

    Аспект может быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию используется текущий аспект.

    Объект может быть указан числовым идентификатором object, без атрибута O ожидается в качестве второго аргумента. По умолчанию используется текущий объект.

    Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущая БД.

    Возвращает непустое значение (символ 'пробел'), если аспект непустой (у объекта имеется как минимум одна связь по аспекту), иначе пусто.

    Пример

    Функция HelpPrev возвращает ид предыдущего хэлпа.

    <FUNC
    HelpPrev=(PARAM O;PARAM O=(OBJ);
     part=(AT(APartOf) O=(O));
     FORALLOBJ(AParts) O=(part) INIT=(prev=0) WHILE=(NE(OBJ)(O)(prev=(OBJ);"Y"));
     GT(prev) 0
      (COND(NEMPTY(AParts) O=(prev)) (HelpLastChild(prev)) (prev))
      (part)
    )
    >
    
    См. также: N, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы.,

    NEW - Создание новой БД

    <#NEW D=dbname [PROTO=prototype] >
    Параметры Описание
    D=dbname Задает путь к файлу БД.
    [PROTO=prototype] Задает путь к БД-прототипу. Опциональный.

    Описание

    Создает новую БД с именем dbname.

    Если с атрибутом PROTO указан файл-прототип БД prototype, то новая БД будет создана как копия БД-прототипа с именем dbname, иначе создается пустая БД.

    В случае успеха возвращает имя БД dbname без изменений, иначе пусто.

    Пример

    Создаем новую БД ассоциированную с файлом "MyDB.am" в каталоге БД Abrial.

    <#NEW D=(CAT (PATH TYPE=DBASE) "MyDB.am")>
    
    См. также: N, Операции со всей базой данных., Ленивые примитивы., Простые примитивы.,

    NI - Строковое сравнение: не равно

    <#NI source pattern [onmatch-action {pattern onmatch-action}* [default-action]] >
    Параметры Описание
    source Задает исходное выражение строку для сравнения. Ожидается в позиции 1.
    pattern Задает образец для сравнения. Ожидается в позиции 2.
    [onmatch-action] Задает действие, выполняемое при успехе операции сравнения исходной строки с образцом. Ожидается в позиции 3. Опциональный.
    [default-action] Задает действие, выполняемое при неуспехе операции сравнения с образцами. Ожидается в позиции последнего аргумента. Опциональный.

    Описание

    Последовательно производит строковое сравнение 'не равно' значения первого аргумента source со значением четных аргументов pattern. Если найден аргумент pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action.

    Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто.

    Пример

    <#NI (s0) (s1) ((s0) " >< "(s1)) (s2) ((s0) " >< "(s2))>
    
    См. также: N, Операции сравнения., Ленивые примитивы., Простые примитивы.,

    NOT - Логическое 'НЕ'

    <#NOT expression >
    Параметры Описание
    expression Задает выражение для операции логическое 'НЕ'. Ожидается в позиции 1.

    Описание

    Возвращает непустое значение (символ 'пробел') на пустое значение аргумента expression. На непустое значение аргумента - возвращает пусто.

    Пример

    Функция AppText добавляет в указанный файл указанный текст.

    <#FUNC
    AppText=(PARAM fname text;
     COND(NOT(FILEEXIST(fname))) (FILESAVE(fname)(text))
      (FILEAPPEND(fname)(text))
    )
    >
    
    См. также: N, Логические операции., Ленивые примитивы., Простые примитивы.,

    OBJ - Получение идентификатора объекта

    <#OBJ [{[N=]object-name [C=]class-name} | O=object] >
    Параметры Описание
    [[N=]object-name] Задает исходный объект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий объект.
    [[C=]class-name] Задает исходный объект именем своего класса. Без атрибута ожидается в позиции 2. По умолчанию используется текущий объект.
    [O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.

    Описание

    Получает числовой идентификатор объекта текущей БД по имени и имени класса.

    Объект может быть указан числовым идентификатором object или своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве первого и второго аргументов.

    По умолчанию возвращает числовой идентификатор текущего объекта текущей БД.

    Возвращает числовой идентификатор объекта текущей БД, (0) - для несуществующих объектов.

    Пример

    Функция db_Insert_In_Grp добавляет в указанную группу БД с указанным именем.

    <#FUNC
    db_Insert_In_Grp=(PARAM N GN;
     _LINK R=InGroup
           O1=(OBJ N=(N) C=DBase)
           O2=(OBJ N=(GN) C=Grp)
    >
    
    См. также: O, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы.,

    OBJFORM - Получение стандартного изображения объекта в виде таблицы

    <#OBJFORM [{[N=]object-name [C=]class-name} | O=object] [D=dbname] >
    Параметры Описание
    [[N=]object-name] Задает исходный объект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий объект.
    [[C=]class-name] Задает исходный объект именем своего класса. Без атрибута ожидается в позиции 2. По умолчанию используется текущий объект.
    [O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
    [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.

    Описание

    Формирует в виде таблицы стандартное изображение объекта, в общем виде:

    <table border=1> <tr align=center><th><a href='ab://ab/D=dbname'>[class-name]</a>[#object]</th><th>[object-name]</th></tr> {<tr><td><b><a href='ab://ab/D=dbname&O=aspect'>aspect-name</a>>/b></td> <td>{<a href='ab://ab/D=dbname&O=value'>value-image</a> }* </td></tr> }+ </table>

    где: aspect - числовой идентификатор аспекта; aspect-name - имя аспекта; value - числовой идентификатор объекта - значения аспекта; value-image - изображение значения аспекта объекта.

    Формируется таблица из двух столбцов. В заголовке первого столбца отображается ссылка на класс объекта и числовой идентификатор объекта. В заголовке второго столбца отображается имя объекта. В каждой строке таблицы в первом столбце отображается ссылка на аспект класса объекта, во втором столбце - ссылки на все значения аспекта объекта.

    Объект может быть указан числовым идентификатором object или своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве первого и второго аргументов. По умолчанию используется текущий объект.

    Если указана БД dbname, отличная от текущей, то необходимо явно задавать объект. По умолчанию используется текущая БД.

    В случае успеха возвращает сформированный таким образом тег TABLE (стандартное изображение объекта), иначе пусто.

    Пример

    <#OBJFORM N="Иванов ИИ" C="Личность">
    
    См. также: O, Обращение к БД через HTML-форму, Ленивые примитивы., Простые примитивы.,

    ON - Установка текущего объекта и аспекта

    <#ON [[O=]object] [AN=aspect-name | A=aspect] [D=dbname] [[RET=]body] >
    Параметры Описание
    [[O=]object] Задает исходный объект числовым идентификатором. Без атрибута ожидается в позиции 1. По умолчанию используется текущий объект.
    [AN=aspect-name] Задает исходный аспект именем. По умолчанию используется текущий аспект.
    [A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
    [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
    [[RET=]body] Задает тело цикла внутри простого тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Без атрибута ожидается в позиции последнего аргумента. Опциональный.

    Описание

    В теле body устанавливает текущим объект и аспект.

    Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущая БД.

    Объект может быть указан числовым идентификатором object, без атрибута O ожидается в качестве первого аргумента. По умолчанию используется текущий объект.

    Аспект может быть указан числовым идентификатором aspect или своим именем aspect-name.

    С атрибутом RET, или без него последним аргументом, может быть указано тело body.

    В случае успеха возвращает результат вычисленного тела body, иначе пусто.

    Пример

    Выводим в виде таблицы свойства класса Names БД "MyDB.ab".

    <#ON (OBJ N="Names" C=CLASS) D="MyDB.ab" RET=(OBJFORM)>
    
    См. также: O, Операторы устанавливающие контекст, Ленивые примитивы., Простые примитивы.,

    OPEN - Открытие БД

    <#OPEN D=dbname>
    Параметры Описание
    D=dbname Задает путь к файлу БД.

    Описание

    Открывает БД с именем файла dbname.

    Стандартными расширениями файла БД являются:

    • '.AB' - для текстовых файлов, содержащих DDL-код БД,
    • '.AM' - для файлов с внутренним форматом БД (образов памяти).

    В случае успеха возвращает имя файла открытой БД, иначе пусто.

    Пример

    Открываем БД.

    <#OPEN (CAT (PATH TYPE=DBASE) "MyDB.ab")>
    
    См. также: O, Операции со всей базой данных., Ленивые примитивы., Простые примитивы.,

    OR - Логическое 'ИЛИ'

    <#OR {expression}* >
    Параметры Описание
    expression Задает выражения для операции логическое 'ИЛИ'.

    Описание

    Возвращает вычисленное значение первого непустого аргумента, если таковой имеется среди указанных аргументов expression, иначе пусто.

    Пример

    Функция FindImgFile возвращает путь к файлу гифа.

    <#FUNC
    FindImgFile=(CAT
     (OR(FILEEXIST((PATH TYPE=DBASE)"Img\"(1)".gif")&("Img\"(1)".gif"))
        (FILEEXIST((PATH TYPE=DBASE)(1)".gif")&((1)".gif"))
        (FILEEXIST((PATH TYPE=HOME)"Img\"(1)".gif"))
     )
    )
    >
    
    См. также: O, Логические операции., Ленивые примитивы., Простые примитивы.,

    PARAM - Установка именованных параметров макроса или функции

    <#PARAM {local-var-name[=value]}+ >
    Параметры Описание
    local-var-name Задает имя локальной переменной для присваивания нового значения. Ожидается в позиции 1.
    [value] Задает новое значение присваиваемое локальной переменной. Ожидается в позиции 2. По умолчанию если локальной переменной внутри макроса/функции ранее не присвоено значения, присаивается значение параметра вызова макроса/функции в сответствующей позиции.

    Описание

    Локальным переменным local-var-name, которым внутри макроса или функции не присвоены значения:

    •  либо устанавливает значения value, если для очередной переменной local-var-name указан аргумент value,
    • либо устанавливает значения параметров вызова макроса или функции в той же позиции, в которой указана переменная, если не указан аргумент value для очередной переменной.

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

    Ничего не возвращает.

    Пример

    Функция menuact возвращает ссылку на объект.

    <#FUNC
    menuact=(PARAM mac gif bar hint tag;PARAM O=(OBJ);
     t1=(r_body (gif) (bar) (hint));
     ((tag)
      (OR
       (AND (O) (D) (REFER ACT=(mac) D=(D)  O=(O) ATAG=("title='"(hint)"'") (t1)) )
       (AND (O) (REFER ACT=(mac) O=(O) ATAG=("title='"(hint)"'") (t1)) )
       (AND (D) (REFER ACT=(mac) D=(D) ATAG=("title='"(hint)"'") (t1)) )
       (REFER ACT=(mac) ATAG=("title='"(hint)"'") (t1))
      )
     )
    )
    >
    
    См. также: P, Ленивые примитивы., Простые примитивы.,

    PATH - Операции с именами файлов

    <#PATH {{DIR | DRIVE | EXT | EXPAND | NAME | PATH | DLMAPP | DLMCUT}=file-name} | {CHANGE=file-name TO=file-extension} | {MATCH=file-name MASK=mask} | {TYPE={CURR | HOME | DBASE | TEMP}} >
    Параметры Описание
    DIR=file-name Задает режим получения директории.
    DRIVE=file-name Задает режим получения имени диска.
    EXT=file-name Задает режим получения расширения.
    EXPAND=file-name Задает режим получения полного пути.
    NAME=file-name Задает режим получения имени файла без пути.
    PATH=file-name Задает режим получения директории.
    DLMAPP=file-name Задает режим добавления обратного слеша в конец.
    DLMCUT=file-name Задает режим удаления обратного слеша на конце.
    CHANGE=file-name Задает режим замены расширения файла.
    MATCH=file-name Задает режим поиска среди строк.
    TO=file-extension Задает новое расширение файла для режима замены расширения.
    MASK=mask Задает маску для режима поиска совпадений по маске.
    TYPE=CURR Задает режим получения текущей директории.
    TYPE=HOME Задает режим получения директории программы.
    TYPE=DBASE Задает режим получения директории текущей БД.
    TYPE=TEMP Задает режим получения директории /TEMP операционной системы.

    Описание

    Выполняет операции над именами файлов в соответствии с указанным атрибутом.

    • DIR- возвращает путь к директории файла без расширения, названия файла и обратного слэша на конце (символ '\'), если исходная строка содержит путь, иначе пусто.
    • DRIVE- возвращает имя логического диска, включая двоеточие на конце (символ ':'), если исходная строка содержит имя логического диска, иначе пусто.
    • EXT- возвращает расширение файла.
    • EXPAND- возвращает полный путь к файлу, если в исходной строке указан относительный путь.
    • NAME- возвращает название файла с расширением без пути к директории.
    • PATH- возвращает путь к директории файла, включая обратный слэш на конце (символ '\'), без расширения и названия файла, если исходная строка содержит путь, иначе пусто.
    • DLMAPP- добавляет в конец строки file-name обратный слэш (символ '\'), если таковой отсутствует.
    • DLMCUT- удаляет из конца строки file-name обратный слэш (символ '\'), если таковой присутствует.
    • CHANGE- изменяет расширение указанного файла на новое расширение file-extension, указанное с атрибутом TO.
    • TO- указывает строку с новым расширением (только вместе с атрибутом CHANGE)
    • MATCH - возвращает список имен файлов состоящий только из тех имен, которые соответствуют маске mask, указанной с атрибутом MASK, если маска не указана возвращает пусто.
    • MASK - указывает маску mask, по которой производится поиск совпадений в исходном тексте, указанному с атрибутом MATCH. Маска состоит из:
      1. символов. Каждый символ маски должен соответствовать единственному символу в исходной строке. Сравнение нечувствительно к регистру.
      2. наборов символов. Каждый набор начинается с открывающей скобки '[' и заканчивается закрывающей скобкой ']'. Между скобками - элементы набора. Каждый элемент - символ или диапазон. Диапазоны определяются начальным символом диапазона, далее черта (-), и заключительным символом. Не используйте пробелы или запятые для определения элементов набора. Набор должен соответствовать единственному символу в исходной строке. Символ исходной строки соответствует набору, если он имеется в наборе, или он находится в одном из диапазонов в наборе. Символ находится в диапазоне, если он соответствует начальному символу диапазона, конечному символу, или находится между ними. Все сравнения нечувствительны к регистру. Если первый символ после открывающей скобки набора - знак восклицания (!), то набор соответствует любому символу, который не находится в наборе.
      3. групповых символов. Групповые символы - звездочка '*' или знак вопроса '?'. Звездочка соответствует последовательности любой длины произвольных символов исходной строки. Знак вопроса соответствует единственному произвольному символу исходной строки.
    • TYPE - возвращает в зависимости от значения аргумента атрибута TYPE:
      • CURR- текущую директорию;
      • HOME- директорию, где находится программа (Абриаль);
      • DBASE- директорию текущей БД;
      • TEMP- временную директорию ОС.

      Пример

      Функция DeleteFile удаляет файл с именем fn.

      <#FUNC
      DeleteFile=(PARAM fn;
       path=(PATH EXPAND=(fn));
       COND(DIAL_ASK (CAT "Удалить файл: " (path) "?"))
        (EXEC TYPE=WAIT PATH="command.com" ARG=(CAT "/C del " (path) ))
      )
      >
      
      См. также: P, Строчные операции, Ленивые примитивы., Простые примитивы.,

      PORTION - Установка сегмента повтора внутри цикла

      <#PORTION rep-number > [complex-body] <#/>
      Параметры Описание
      rep-number Задает размер порции. Ожидается в позиции 1.
      [complex-body] Задает тело порции внутри сложного тега. Опциональный.

      Описание

      Задает внутри цикла сегмент повтора complex-body заданное в rep-segment-size количество раз. Разделяет выдачу на порции заданного размера.

      В цикле перебираются шаги объемлющего цикла и поочередно устанавливает контекст для них. При выходе из сегмента повтора выполняется завершение (и, если цикл еще не окончен - начало) объемлющего цикла.

      Сегмент повтора всегда выполняется заданное число раз, даже тогда, когда объемлющий цикл оканчивается при неоконченном сегменте повтора. Таким образом, например, в HTML-таблицах формируется заданное число элементов, (строк, столбцов, ячеек), в том числе и не заполненных содержанием.

      Возвращает объединенный результат вычислений тела порции.

      Пример

      Макрос ShowItemTable выводит в виде таблицы объекты класса порциями по 6 столбцов 10 строк.

      <#MACRO ShowItemTable>
       <#SET pos=(OR (ENV POS) 1) seg=60>
       <#LT (pos) 1 (SET pos=1)>
       <#_pagebar1 p=(pos) n=(seg) a=(ITEMS)>
       <TABLE border=2 width=100%>
       <#FORALLOBJ (ITEMS) POS=(pos) NUM=(seg)>
         <TR>
         <#PORTION 6>
           <TD valign=top><TABLE>
             <#PORTION 10>
               <TR><TD>
                <#GT (OBJ) 0 (Obj_Ref_Item) " ">
             <#/>
           </TABLE></TD>
         <#/>
         </TR>
       <#/>
       </TABLE>
      <#/MACRO>
      
      См. также: P, Составные примитивы. , Ленивые примитивы.,

      REC - Создание ассоциативных массивов

      <#REC {{name value} | {TEXT=text} | {REC=expression}}* >
      Параметры Описание
      [name] Задает именной индекс очередного элемента ассоциативного массива.
      value Задает значение очередного элемента ассоциативного массива.
      [TEXT=text] Задает подключаемый текст. Строки текста пакуются в одноэлементный массив. Опциональный.
      [REC=expression] Задает подключаемую запись (текст, сформированный другим REC или другим способом в формате REC). Опциональный.

      Описание

      Создает ассоциативный массив вида name1=value1 name2=value2 ...

      Пара name value рассматривается как один элемент списочного массива. Четным аргументом ожидается именной индекс (ключ) очередного элемента массива. Нечетным аргументом ожидается значение для элемента массива, указанного именным индексом (четным аргументом). Текст значения упаковывается в одну строку и добавляется как один элемент массива Значением может быть произвольный текст, строки которого пакуются в одноэлементный массив перед подключением.

      Атрибутом TEXT может быть указан сырой текст для включения в массив. Каждая строка текста подключается как один элемент массива и ожидается как пара name=value. Все символы от начала строки до первого встреченного знака "=" рассматриваются как именной индекс (ключ name), часть строки после знака "=" рассматривается как значение ключа (value).

      Атрибутом REC может быть указан текст другого ассоциативного массива, подключаемый 1:1 в данной позиции.

      Возвращает собранный таким образом текст ассоциативного массива.

      Пример

      <#Rec1=(REC Id (i) Name (NAME) Fio (ASPECT(AFio) Age (ASPECT(AAge))>
      
      См. также: L, Строчные операции, Ленивые примитивы., Простые примитивы.

      REFER - Полная ссылка на объект или изображение его значения

      <#REFER [[M=]method | ACT=action] [{N=object-name C=class-name} | O=object] [D=dbname] [ATAG=atag] {Custom=expression}* [[RET=]reference-image] >
      Параметры Описание
      [[M=]method] Задает метод, формирующий целевую страницу ссылки. Без атрибута ожидается в позиции 1. По умолчанию (нет ни M ни ACT) принимается: M=_HOME если не указана БД (D=) или если БД указана, но не указан объект, то M=_ROOT, а если объект указан, то M=PAGE.
      [ACT=action] Задает действие, выполняемое при переходе по ссылке. По умолчанию формирует навигационный запрос.
      [N=object-name] Задает исходный объект именем. По умолчанию используется текущий объект.
      [C=class-name] Задает исходный объект именем своего класса. По умолчанию используется текущий объект.
      [O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
      [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
      [ATAG=atag] Задает дополнительные атрибуты A-тэга. Опциональный.
      [Custom=expression] Задает любые именованные параметры для передачи формирующему страницу методу (например, начальную позицию сегмента итераций и размер сегмента итераций: POS=segment-start NUM=segment-size). Опциональный.
      [[RET=]reference-image] Задает явно изображение ссылки. Без атрибута ожидается в позиции последнего аргумента. Опциональный.

      Описание

      Формирует полную ссылку на объект БД или изображение его значения (A-тег), в общем виде:

      <a href='ab://ab/[&D=dbname] [&O=object] [&N=object-name&C=class-name] [&M=method] [&ACT=action] [{&Custom=expression}*] ' [atag] > [reference-image] </a>.

      Значение атрибута 'href=' A-тега формируется аналогично URL/_HREF.

      Могут быть указаны любые именованные параметры Custom=expression, которые будут включены в ссылку для передачи параметров обрабатывающему методу. В их числе могут быть NUM, POS, определяющие сегмент итераций по умолчанию в циклах обрабатывающего метода.

      С атрибутом ATAG могут быть указаны дополнительные параметры A-тега. (name=, id=, frame=, title=, methods=, accesskey=, ... ).

      С атрибутом RET или без него последним аргументом, может быть явно указано изображение ссылки reference-image.

      Если ссылка внутренняя на значение в качестве изображения reference-image устанавливается значение указанного или текущего объекта БД.

      Возвращает в случае успеха сформированный таким образом A-тег (изображение/ссылку), иначе пусто.

      Пример

      Функция menu возвращает ссылку с изображением.

      <#FUNC
      r_body=(CAT
       (img (1) ("align='middle' alt='"(OR(3)(2))"'"))
       " "
       (2)
       ""
      )
      menu=(DO (PARAM mac gif bar hint tag)
       (t1=(r_body (gif) (bar) (hint)))
       ((tag)
        (COND
         (AND (IS(MACNAME)(mac))(IS(D)(DBASE) Y "" Y )(EQ(ENV O)(O))) (t1)
         (AND (O)(D)) (REFER M=(mac) D=(D) O=(O) ATAG=("title='"(hint)"'") (t1))
         (O) (REFER M=(mac) O=(O) ATAG=("title='"(hint)"'") (t1))
         (D) (REFER M=(mac) D=(D) ATAG=("title='"(hint)"'") (t1))
             (REFER M=(mac) ATAG=("title='"(hint)"'") (t1))
        )
       )
      )
      >
      
      См. также: R, Обращение к БД через HTML-ссылку., Ленивые примитивы., Простые примитивы.,

      REM - Комментарий

      <#REM comment-text >
      Параметры Описание
      comment Задает текст комментария. Ожидается в позиции 1.

      Описание

      Пропускает текст comment, ничего не делает.

      Пример

      <#REM Это комментарий>
      
      См. также: R, Операторы комментариев., Энергичные примитивы., Простые примитивы.,

      RENAME - Переименование объекта-сущности

      <#RENAME [{[N=]object-name [C=]class-name} | O=object] TO=new-name >
      Параметры Описание
      [[N=]object-name] Задает исходный объект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий объект.
      [[C=]class-name] Задает исходный объект именем своего класса. Без атрибута ожидается в позиции 2. По умолчанию используется текущий объект.
      [O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
      TO=new-name Задает новое имя для переименования указанного объекта.

      Описание

      Присваивает указанному объекту-сущности текущей БД новое имя new-name.

      Объект может быть указан числовым идентификатором object или своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве первого и второго аргументов. По умолчанию присваивает новое имя текущему объекту, если текущий объект - сущность.

      В случае успешного переименования возвращает непустое значение (символ "пробел"), иначе пусто.

      Пример

      <ON N="Иванов ИИ" C="Личность"
        D=((XBASE)"Test\AIS.ab")
        RET=(RENAME TO="Петров ПП") >
      
      См. также: R, Операции изменяющие БД., Ленивые примитивы., Простые примитивы.,

      RESULT - Операции с массивом результатов глобального действия

      <#RESULT {{[NUM=]index} | {[KEY=]name}}* [{[KEY=]{# | #L | #C}} {LINES={index | name}} | {SIZE={index | name}} | {HAS=name} | {DEL={index | name}} | {PUT=value} | {APP=value}]
      Параметры Описание
      [[NUM=]index] Задает элемент массива результатов глобального действия позиционным индексом. Опциональный. Промежуточный.
      [[KEY=]name] Задает элемент массива результатов глобального действия именным индексом. Опциональный. Промежуточный.
      [[KEY=]{#|#L}] Возвращает размер списка массива результатов глобального действия. Опциональный. Ожидается последним параметром.
      [[KEY=]#C] Возвращает размер в байтах массива результатов глобального действия. Опциональный. Ожидается последним параметром.
      [LINES=index] Возвращает размер списка в значении элемента массива, указанного позиционным индексом. Опциональный. Ожидается последним параметром.
      [LINES=name] Возвращает размер списка для значения элемента массива, указанного именным индексом. Опциональный. Ожидается последним параметром.
      [SIZE=index] Возвращает размер в байтах значения элемента массива, указанного позиционным индексом. Опциональный. Ожидается последним параметром.
      [SIZE=name] Возвращает размер в байтах значения элемента массива, указанного именным индексом. Опциональный. Ожидается последним параметром.
      [HAS=name] Проверяет наличие элемента массива с указанным именным индексом в массиве результатов глобального действия. Опциональный. Ожидается последним параметром.
      [DEL=index] Удаляет элемент массива результатов глобального действия, указаного позиционным индексом. Опциональный. Ожидается последним параметром.
      [DEL=name] Удаляет элемент массива результатов глобального действия, указаного именным индексом. Опциональный. Ожидается последним параметром.
      [PUT=value] Присваивает новое значение всему или указанному элементу массива. Опциональный. Ожидается последним параметром.
      [APP=value] Добавляет новое значение к результату глобального действия или указанному элементу массива результата глобального действия. Опциональный. Ожидается последним параметром.

      Описание

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

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

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

      • RESULT {{[NUM=]index} | {[KEY=]name}}* - возвращает текст значения массива или указанного элемента массива.
      • RESULT {{[NUM=]index} | {[KEY=]name}}* [KEY=]{# | #L} - возвращает размер списка в значении массива или указанного элемента массива.
      • RESULT {{[NUM=]index} | {[KEY=]name}}* [KEY=]#C - возвращает размер в байтах массива или указанного элемента массива.
      • RESULT {{[NUM=]index} | {[KEY=]name}}* LINES={index | name} - возвращает размер списка в значении указанного элемента массива.
      • RESULT {{[NUM=]index} | {[KEY=]name}}* SIZE={index | name} - возвращает размер в байтах указанного элемента массива результатов глобального действия.
      • RESULT {{[NUM=]index} | {[KEY=]name}}* HAS=name - возвращает 'истина' (не пусто), если имеется указанный именным индексом элемент массива.
      • RESULT {{[NUM=]index} | {[KEY=]name}}* DEL={index | name} - удаляет указанный позиционным либо именным индексом элемент массива. Ничего не возвращает.
      • RESULT {{[NUM=]index} | {[KEY=]name}}* PUT=value - присваивает новое значение массиву или указанному элементу массива. Ничего не возвращает.
      • RESULT {{[NUM=]index} | {[KEY=]name}}* APP=value - добавляет новое значение к имеющемуся значению массива или указанному элементу массива. Ничего не возвращает.

      Пример

      Если имеется результат глобального действия и в нем есть элемент FIO со значением Name выводим на экран.

      <#AND
        (RESULT)
        (RESULT KEY=FIO HAS=(Name))
        ("ФИО: "(RESULT KEY=FIO))
      >
      
      См. также: R, Энергичные примитивы., Простые примитивы.,

      ROOTREF - Получение ссылки на текущую страницу

      <#ROOTREF [[POS=]segment-start] [[NUM=]segment-size] >
      Параметры Описание
      [[POS=]segment-start] Задает начальную позицию сегмента итераций. Без атрибута ожидается в позиции 1. По умолчанию добавляет в ссылку параметр '&POS=1'.
      [[NUM=]segment-size] Задает размер сегмента итераций Без атрибута ожидается в позиции 2. По умолчанию ничего не добавляет в ссылку.

      Описание

      Формирует ссылку на текущую страницу без обрамляющих тегов и без кавычек, добавляя или изменяя в ней параметры POS и NUM. В общем виде:

      'ab://ab/D=dbname&O=object&M=method&POS=segment-start[&NUM=segment-size]'

      где: dbname-полный путь к текущей БД; object-числовой идентификатор текущего объекта текущей БД; method-метод формирующий текущую страницу.

      При переходе по ссылке с параметрами '&POS=' и '&NUM=', внутри метода method текущие установки POS и NUM заменяются на указанные в ссылке. Внутри метода POS и NUM сами по себе ничего не значат - просто переменные, но могут использоваться в циклах FORALLOBJ, FORASP/FORLINE для выделения сегмента. Это обстоятельство можно использовать для формирования с помощью единственного метода связанного списка страниц для листания длинных списков.

      Если указан атрибут POS, в ссылку добавляет параметр '&POS=segment-start' со значением абсолютной позиции начала сегмента. Без атрибута POS, первым аргументом, ожидается относительное изменение текущей позиции. К текущей позиции прибавляется указанное смещение segment-start. В ссылку добавляет параметр '&POS=' с новым значением позиции начала сегмента.

      С атрибутом NUM или без него, вторым аргументом, ожидается размер сегмента segment-size. В ссылку добавляется параметр '&NUM=segment-size'. По умолчанию вносит в ссылку параметр '&POS=1', параметр '&NUM=' не добавляется.

      Возвращает сформированную таким образом ссылку на текущую страницу.

      Пример

      Форма ссылки на и удаления текущего объекта.

      <#MACRO _delit>
      <FORM name=<#_frm_nam> action="<#ROOTREF>" method=post>
      <input type=hidden name=ACT>
      <input type=hidden name=O>
      <#REFER>
      <#_delbtn1>
      </FORM>
      <#/>
      
      См. также: R, Обращение к БД через HTML-ссылку., Ленивые примитивы., Простые примитивы.,

      SAVE - Сохранение БД в файл полностью или частично

      <#SAVE [FILE=file-name] [TYPE= {ALL | DATA | STRUCT | {OBJ [{N=object-name C=class-name} | O=object]} | {CLA C=class-name} | {REL R=relation-name}}] [D=dbname] >
      Параметры Описание
      [FILE=file-name] Задает имя файла для сохранения DDL-кода. По умолчанию DDL-код сохраняется в файл текущей или указанной БД.
      [TYPE=ALL] Задает режим сохранения DDL-кода всей БД целиком. По умолчанию 'TYPE=ALL'.
      [TYPE=DATA] Задает режим сохранения DDL-кода только данных. По умолчанию 'TYPE=ALL'.
      [TYPE=STRUCT] Задает режим сохранения DDL-кода только дескрипторов данных. По умолчанию 'TYPE=ALL'.
      [TYPE=OBJ] Задает режим сохранения DDL-кода только указанного объекта. По умолчанию 'TYPE=ALL'.
      [TYPE=CLA] Задает режим сохранения DDL-кода только объектов указанного класса. По умолчанию 'TYPE=ALL'.
      [TYPE=REL] Задает режим сохранения DDL-кода только связей указанного отношения. По умолчанию 'TYPE=ALL'.
      [N=object-name] Задает сохраняемый объект именем. Дополнительный параметр для 'TYPE=OBJ'. По умолчанию используется текущий объект.
      [C=class-name] Задает сохраняемый(ые) объект(ы) именем класса. Дополнительный параметр для 'TYPE=OBJ'/'TYPE=CLA'. По умолчанию используется текущий объект.
      [O=object] Задает сохраняемый объект числовым идентификатором. Дополнительный параметр для 'TYPE=OBJ'. По умолчанию используется текущий объект.
      R=relation-name Задает имя отношения сохраняемых связей.
      [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.

      Описание

      Сохраняет БД dbname в файл file-name полностью или частично.

      В зависимости от значения атрибута TYPE сохраняется:

      • ALL- вся БД целиком (по умолчанию);
      • DATA- только данные;
      • STRUCT- только дескрипторы данных;
      • CLA- только объекты с именем класса class-name;
      • REL- только связи с именем отношения relation-name;
      • OBJ- только объект, либо указанный числовым идентификатором object или своим именем object-name и именем своего класса class-name, либо текущий, по умолчанию.

      Если не указано имя БД dbname, по умолчанию используется текущая БД.

      Без атрибута FILE по умолчанию используется имя файла, приписанного к текущей БД.

      Стандартными расширениями файла БД являются:

      • '.AB' - для текстовых файлов, содержащих DDL-код БД
      • '.AM' - для файлов с внутренним форматом БД (образов памяти).

      В случае успеха возвращает имя файла сохраненной БД, иначе пусто.

      Пример

      Сохраняем структуру текущей БД в файл "c:/my/mydb.am".

      <#SAVE FILE="c:\my\struct.ab" TYPE=STRUCT>
      
      См. также: S, Операции со всей базой данных., Ленивые примитивы., Простые примитивы.,

      SCAN - Сканирование текста

      <#SCAN {[TEXT=]text | {{FILE | FILELIST | KEYFILE}=file-id}} [AS= {{WORDS WORDSABC=alphabet [DIV=local-var-name]} | CHARS | LINES | LIST | REC | NAMES | FORMS ] [VAR=local-var-name] [POS=start-pos] [NUM=iter-num] [INIT=initialization] [ITER=iteration] [FROM=begin-condition] [IF=step-condition] [BY=step-size] [UNTIL=until-condition] [WHILE=while-condition] [[RET=]body] > [complex-body] <#/>
      Параметры Описание
      [TEXT=]text Задает исходный текст для сканирования.
      FILE=file-id Пока не работает. (* Задает идентификатор IN-файла, содержащего исходный текст для сканирования.)
      FILELIST=file-id Пока не работает. (* Задает идентификатор LIST-файла, содержащего исходный текст для сканирования.)
      KEYFILE=file-id Задает идентификатор REC-файла, содержащего исходный текст для сканирования.
      [AS=WORDS] Задает режим сканирования исходного текста по словам с алфавитом WORDSABC. Все символы не входящие в алфавит WORDSABC между словами игнорируются. На каждом шаге итерации очередное слово кладется в VALUE. Опциональный. Используется по умолчанию.
      [AS=CHARS] Задает посимвольный режим сканирования исходного текста. На каждом шаге итерации очередной символ кладется в VALUE. Опциональный. По умолчанию AS=WORDS.
      [AS=LINES] Задает построчный режим сканирования исходного текста. На каждом шаге итерации очередная строка без изменений (1:1) кладется в VALUE. Опциональный. По умолчанию AS=WORDS.
      [AS=LIST] Задает построчный режим сканирования исходного текста. На каждом шаге итерации очередная строка распаковывается перед попаданием в VALUE. Опциональный. По умолчанию AS=WORDS.
      [AS=REC] Задает построчный в алфавитном порядке имен без повторов режим сканирования исходного текста. На каждом шаге итерации в KEY попадает очередное имя в VALUE - распакованное значение (структурно-распакованная строка после имени и знака "="). Опциональный. По умолчанию AS=WORDS.
      [AS=NAMES] Задает построчный в алфавитном порядке имен без повторов режим сканирования исходного текста. На каждом шаге итерации в KEY попадает очередное имя в VALUE - значение строки (строка 1:1, не распаковывается в текст). Опциональный. По умолчанию AS=WORDS.
      [AS=FORMS] Пока не реализовано. (* Задает режим сканирования элементов исходного текста совпадающих по образцу. Опциональный. По умолчанию AS=WORDS.)
      [VAR=local-var-name] Задает имя локальной переменной куда на шаге кладется очередное сканируемое значение. По умолчанию и вообще всегда результат кладется в VALUE. При сканировании типа AS=NAMES или AS=REC - результат кладется: в KEY - имя, в VALUE - значение.
      [DIV=local-var-name] Задает имя локальной переменной куда на шаге кладется очередной разделитель между сканируемыми значениями - последовательность символов не входящая в алфавит WORDSABC. Используется только для режима сканирования AS=WORDS
      [WORDSABC=alphabet] Задает строку с допустимыми символами алфавита в словах. Используется только для режима сканирования AS=WORDS.
      [POS=segment-start] Задает позицию символа текста (начиная с единицы) для начала сканирования. Все символы до указанной позиции пропускаются. Опциональный. По умолчанию сканирование начинается с первого символа (POS=1).
      [NUM=segment-size] Задает размер сегмента итераций (максимальное число итераций). После указанного числа сканирование снимается. Опциональный. По умолчанию сканируется до тех пор, пока не пройден весь текст.
      [INIT=initialization] Задает выражение, которое вычисляется один раз перед началом итераций. Опциональный.
      [FROM=begin-condition] Задает выражение, которое вычисляется перед всеми шагами внутри интервала. Пока не станет истиной, интервал исполнения не начинается. Потом уже не вычисляется. Опциональный.
      [IF=step-condition] Задает выражение, которое вычисляется непосредственно перед шагом. Если возвращает пусто шаг пропускается. Опциональный.
      [BY=step-size] Задает шаг цикла. Если step-size=2, то исполняется только каждый второй в пределах сегмента итераций, начиная с POS=start-pos. Опциональный.
      [ITER=iteration] Задает выражение, которое вычисляется после шага, что возвращает безразлично. Опциональный.
      [UNTIL=until-condition] Задает выражение-условие, которое вычисляется после каждого шага. Если возвращает НЕ-пусто выход из цикла. Опциональный.
      [WHILE=while-condition] Задает выражение-условие, которое вычисляется перед шагом. Если возвращает пусто - выход из цикла. Опциональный.
      [[RET=]body] Задает тело цикла внутри простого тега. Без атрибута ожидается в позиции последнего аргумента. Опциональный.
      [complex-body] Задает тело цикла внутри сложного тега. Опциональный.
      Описание

      Сканирует исходный текст в соответствии с указанным режимом.

      Исходный текст для сканирования может быть задан:

      • [TEXT=]text - выражением, с атрибутом или без него, первым аргументом (по умолчанию);
      • KEYFILE=file-id - содержимым текстового REC или NDX-файла, указанного идентификатором файла;
      • FILE=file-id - пока не реализовано.. (* содержимым текстового файла, указанного идентификатором файла;)
      • FILELIST=file-id - пока не реализовано.. (* содержимым текстового LIST-файла, указанного идентификатором файла;)

      Режимы сканирования:

      • AS=WORDS - сканирование исходного текста по словам с алфавитом 'WORDSABC='. Все символы не входящие в алфавит счатаются разделителями.
      • AS=CHARS - посимвольный режим сканирования исходного текста.
      • AS=LINES - построчный режим сканирования исходного текста.
      • AS=LIST - построчный режим сканирования исходного текста с распаковкой очередной строки.
      • AS=REC - построчный в алфавитном порядке имен без повторов с распаковкой строки режим сканирования исходного текста.
      • AS=NAMES - построчный в алфавитном порядке имен без повторов режим сканирования исходного текста.
      • AS=FORMS - пока не реализовано...
      По умолчанию устанавливается режим AS=WORDS.

      Итерации не начинаются (не вычисляется тело цикла), если:

      • не достигнуто начало сегмента итераций, указанное с атрибутом POS
      • начало сегмента итераций превосходит имеющееся количество связей указанного объекта по исходному аспекту.
      • выражение, указанное с атрибутом FROM на очередном шаге приняло значение 'ложь' (пусто).

      Итерации заканчиваются, если:

      • достигнут конец сканируемого текста.
      • достигнут конец сегмента - пройдено указанное с атрибутом NUM число шагов.
      • выражение, указанное с атрибутом WHILE перед очередным шагом приняло значение 'ложь' (пусто).
      • выражение, указанное с атрибутом UNTIL после очередного шага приняло значение 'истина' (не пусто).

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

      Сегмент итераций может быть задан с атрибутом POS позицией segment-start начала сегмента, начиная с единицы и, с атрибутом NUM, размером сегмента segment-size. По умолчанию POS=1 - сканирование начинается с первого элемента (символа, слова, строки, в зависимости от типа сканирования). По умолчанию NUM сканирование продолжается до конца текста, начиная с указанной атрибутом POS позиции.

      Если с атрибутом BY=step указан шаг итераций, то внутри сегмента пропускаются step-1 шаг (тело вычисляется только на каждом step шаге, начиная с POS).

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

      С атрибутом ITER может быть указано выражение, которое вычисляется на каждом шаге итераций, не влияет на результат оператора.

      На каждом шаге в теле цикла переменной с указанным в атрибуте VAR именем устанавливается очередное сканированное значение. По умолчанию очередное сканированное значение попадает в специальную переменную с именем VALUE. Для режима AS=WORDS с атрибутом DIV может быть указано имя переменной которой на очередном шаге будет установлено значение разделителя - пропущенных символов исходного текста (не входящих в алфавит). Для режимов AS=REC и AS=NAMES переменной KEY устанавливается значением имя очередного ключа.

      Тело цикла может быть задано с атрибутом RET или без него, последним аргументом в функциональном стиле.

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

      Пример:

      Функция Words_Link связывает текущую словоформу с лексемами.

      <#FUNC
       Words_Link=( //
          si=(OBJ);
          SCAN TEXT=(FILE wf KEY=(CONV LOW=(NAME))) AS=LIST
            (_LINK
              R=prod
              O1=(_NITM N=(VALUE NUM=2) C=Lex)
              O2=(_NITM N=(VALUE NUM=1) C=Frm)
              O3=(si) ;
            );
       )
      >
      

      SET - Присваивание значений локальным переменным

      <#[SET] {local-var-name=value}+ >
      Параметры Описание
      local-var-name Задает имя локальной переменной для присваивания нового значения. Ожидается в позиции 1.
      value Задает новое значение присваиваемое локальной переменной. Ожидается в позиции 2.

      Описание

      Объявляет локальные переменные с именами local-var-name, если они не объявлены ранее, и присваивает им значения value.

      Ничего не возвращает.

      Пример

      <#SET
        path1="c:\my\mydb.am"
        y=1
        x=(y*5/3)
      >
      
      См. также: S, Ленивые примитивы., Простые примитивы.,

      SUB - Числовое вычитание

      <#SUB numeric-source {subtrahend}+ >
      Параметры Описание
      numeric-source Задает исходное числовое выражение. Ожидается в позиции 1.
      subtrahend Задает числа, вычитаемые из исходного числа Ожидается в позиции 2.

      Описание

      Возвращает результат вычитания из значения numeric-source значений subtrahend. Значения нечисловых аргументов заменяет нулем (0).

      Пример

      Результат: z=10-2-5=3

      <#SET z=(SUB 10 2 5)>
      
      См. также: S, Арифметические операции., Ленивые примитивы., Простые примитивы.,

      SUBSTR - Выделение подстроки в строке

      <#SUBSTR source start length >
      Параметры Описание
      source Задает исходную строку или текст. Ожидается в позиции 1.
      start Задает позицию первого символа подстроки начиная с единицы. Ожидается в позиции 2.
      length Задает длину подстроки. Ожидается в позиции 3.

      Описание

      Извлекает подстроку исходного текста source в позиции strart (начиная с единицы) указанной длины length.

      Переводы строк в исходном тексте заменяются пробелами (исходный текст пакуется в строку).

      Возвращает извлеченную подстроку.

      Пример

      Результат: "our".

      <#SUBSTR "Source string" 2 3>
      
      См. также: S, Строчные операции, Ленивые примитивы., Простые примитивы.,

      SUM - Числовое сложение

      <#SUM {numeric-expression}* >
      Параметры Описание
      numeric-expression Задает числовые выражения для вычисления суммы.

      Описание

      Возвращает сумму указанных аргументов numeric-expression. Значения нечисловых аргументов заменяет нулем (0). При отсутствии аргументов возвращает 0.

      Пример

      Возвращает результат x=x+y+5.

      <#SET x=(SUM (x) (y) 5) >
      
      См. также: S, Арифметические операции., Ленивые примитивы., Простые примитивы.,

      TEXT - Сборка текста

      <#[TEXT] [\]{expression[\]}* >
      Параметры Описание
      expression Задает выражения для конкатенации в единый текст.

      Описание

      Соединяет в единый текст значения указанных expression.

      Обратный слэш ("\") выполняет роль символа новой строки. В отличие от CAT никак не изменяет сцепляемые строки, внутренние переводы строк сохраняются.

      Возвращает полученный таким образом текст.

      Пример

      <#TEXT "Name:" (N1) "  Age:" (A1) >
      
      См. также: T-X, Строчные операции, Энергичные примитивы., Простые примитивы.,

      URL - Получение ссылки на объект без обрамляющего тега

      <#URL [[M=]method | ACT=action] [{N=object-name C=class-name} | O=object] [D=dbname] [POS=segment-start] [NUM=segment-size] {Custom=expression}* >
      Параметры Описание
      [[M=]method] Задает метод, формирующий целевую страницу ссылки. Без атрибута ожидается в позиции 1. По умолчанию (нет ни M ни ACT) принимается: M=_HOME если не указана БД (D=) или если БД указана, но не указан объект, то M=_ROOT, а если объект указан, то M=PAGE.
      [ACT=action] Задает действие, выполняемое при переходе по ссылке. По умолчанию формирует навигационный запрос.
      [N=object-name] Задает исходный объект именем. По умолчанию используется текущий объект.
      [C=class-name] Задает исходный объект именем своего класса. По умолчанию используется текущий объект.
      [O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
      [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
      [POS=segment-start] Задает начальную позицию сегмента итераций. Опциональный.
      [NUM=segment-size] Задает размер сегмента итераций. Опциональный.
      [Custom=expresiion] Задает любые именованные параметры для передачи формирующему страницу методу. Опциональный.

      Описание

      Формирует ссылку на объект БД без обрамляющих тегов и без кавычек, в общем виде:

      'ab://ab/[&D=dbname][&O=object] [&N=object-name&C=class-name] [&M=method] [&ACT=action] [&POS=segment-start] [&NUM=segment-size] [{&Custom=expression}*]'.

      Если не указана БД, используется текущая, формируется внутренняя ссылка. В ссылке формируется параметр '&D=dbname', где dbname - полный путь к файлу текущей БД. Объект может быть указан числовым идентификатором object либо своим именем object-name и именем своего класса class-name. В ссылке формируются параметры: '&O=object[&N=object-name&C=class-name]'. По умолчанию формируется параметр '&O=' с числовым идентификатором текущего объекта.

      Если явно указана БД dbname, формируется внешняя ссылка. В ссылке формируется параметр с указанным именем БД без изменений '&D=dbname'. Объект может быть указан только своим именем object-name и именем своего класса class-name. По имени и имени класса объекта определяется числовой идентификатор объекта object. В ссылке формируются параметры: '&O=object[&N=object-name&C=class-name]'. Если объект не указан, либо отсутствует, либо указан числовым идентификатором, идентификатор обнуляется ('&O=0').

      С атрибутом M, или без него первым аргументом, может быть указан метод method формирующий страницу при переходе по ссылке.

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

      Могут быть указаны также любые именованные параметры Custom=expression, которые будут включены в ссылку для передачи параметров обрабатывающему методу. В их числе могут быть NUM, POS, определяющие сегмент итераций по умолчанию в циклах обрабатывающего метода.

      В случае успеха возвращает сформированную таким образом ссылку (значение атрибута 'href=' A-тэга).

      Пример

      Макрос Load формирует страничку с формой выбора загружаемого файла.

      <#MACRO Load O=(OBJ)>
      <form action='<#URL ACT="HS_Act" F="Load">'  method='post'>
      <table class='cItems'>
      <thead>Загрузка справочника.</thead>
      <tr><th>Файл:</th></tr>
      <tr><td>
      <input type='file' name='File'>
      </td></tr>
      <tr><td><input type='submit' value='Загрузить'></td></tr>
      </table>
      </form>
      <#/>
      
      См. также: T-X, Обращение к БД через HTML-ссылку., Ленивые примитивы., Простые примитивы.,

      USE - Подключение библиотечного макроса

      <#USE library-name >
      Параметры Описание
      library-name Задает имя библиотечного файла. Ожидается в позиции 1.

      Описание

      Подключает библиотечный макрос с именем library-name.

      В отличие от вызова метода/функции всx содержимое вызванного макроса обрабатывается на том же уровне, что и оператор USE. Все определения функций FUNC и макросов MACRO, встретившиеся внутри библиотечного макроса продолжают действовать и после выхода из макроса и из оператора USE.

      Библиотечный макрос не ищется среди ранее определенных в тексте FUNC, MACRO, только в БД или на диске. Внутрь библиотечного макроса нельзя передать аргументы, как для функции. В порядке поиска макроса и использовании имени, подключение макроса эквивалентно вызову метода.

      Имя библиотечного макроса library-name должно быть указано без пути и расширения. Вначале файл ищется в директории БД, потом в директории запуска программы, затем в директории программы. В каждой из них сначала берется поддиректория \tem\, потом сама директория. В каждой из указанных сначала ищется поддиректория с именем базы и с расширением '.tem', потом сама. В указанных директориях ищется сначала файл с именем library-name и расширением '.txt', затем, если не найден, с расширением '.htm'.

      Возвращает результат вычисления библиотечного макроса. В случае успеха возвращает указанное имя library-name без изменений, иначе пусто.

      Пример

      <#USE MyLibrary>
      
      См. также: T-X, Ленивые примитивы., Простые примитивы.,

      VALUE - Операции со сканированным значением

      <#VALUE {{[NUM=]index} | {[KEY=]name}}* [{[KEY=]{# | #L | #C}} {LINES={index | name}} | {SIZE={index | name}} | {HAS=name} | {DEL={index | name}} | {PUT=value} | {APP=value}] >
      Параметры Описание
      [[NUM=]index] Задает элемент массива сканированного значения позиционным индексом. Опциональный. Промежуточный.
      [[KEY=]name] Задает элемент массива сканированного значения именным индексом. Опциональный. Промежуточный.
      [[KEY=]{#|#L}] Возвращает размер списка сканированного значения. Опциональный. Ожидается последним параметром.
      [[KEY=]#C] Возвращает размер в байтах сканированного значения. Опциональный. Ожидается последним параметром.
      [LINES=index] Возвращает размер списка в значении элемента массива указанного позиционным индексом. Опциональный. Ожидается последним параметром.
      [LINES=name] Возвращает размер списка для значения элемента массива указанного именным индексом. Опциональный. Ожидается последним параметром.
      [SIZE=index] Возвращает размер в байтах значения элемента массива указанного позиционным индексом. Опциональный. Ожидается последним параметром.
      [SIZE=name] Возвращает размер в байтах значения элемента массива указанного именным индексом. Опциональный. Ожидается последним параметром.
      [HAS=name] Проверяет наличие элемента массива с указанным именным индексом в сканированном значении. Опциональный. Ожидается последним параметром.
      [DEL=index] Удаляет элемент массива сканированного значения, указаного позиционным индексом. Опциональный. Ожидается последним параметром.
      [DEL=name] Удаляет элемент массива сканированного значения, указаного именным индексом. Опциональный. Ожидается последним параметром.
      [PUT=value] Присваивает новое значение всему или указанному элементу массива сканированного значения. Опциональный. Ожидается последним параметром.
      [APP=value] Добавляет новое значение к результату глобального действия или указанному элементу массива сканированного значения. Опциональный. Ожидается последним параметром.

      Описание

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

      Внутри тела цикла SCAN результат очередного шага сканирования помещаются в специальную переменную - сканированное значение. Для доступа к внутренней структуре сканированного значения используется цепочка индексных параметров.

      • VALUE {{[NUM=]index} | {[KEY=]name}}* - возвращает текст значения массива или указанного элемента массива, сканированного на очередном шаге цикла SCAN.
      • VALUE {{[NUM=]index} | {[KEY=]name}}* [KEY=]{# | #L} - возвращает размер списка в значении массива или указанного элемента массива.
      • VALUE {{[NUM=]index} | {[KEY=]name}}* [KEY=]#C - возвращает размер в байтах массива или указанного элемента массива.
      • VALUE {{[NUM=]index} | {[KEY=]name}}* LINES={index | name} - возвращает размер списка в значении указанного элемента массива.
      • VALUE {{[NUM=]index} | {[KEY=]name}}* SIZE={index | name} - возвращает размер в байтах указанного элемента массива результатов глобального действия.
      • VALUE {{[NUM=]index} | {[KEY=]name}}* HAS=name - возвращает 'истина' (не пусто), если имеется указанный именным индексом элемент массива.
      • VALUE {{[NUM=]index} | {[KEY=]name}}* DEL={index | name} - удаляет указанный позиционным либо именным индексом элемент массива. Ничего не возвращает.
      • VALUE {{[NUM=]index} | {[KEY=]name}}* PUT=value - присваивает новое значение массиву или указанному элементу массива. Ничего не возвращает.
      • VALUE {{[NUM=]index} | {[KEY=]name}}* APP=value - добавляет новое значение к имеющемуся значению массива или указанному элементу массива. Ничего не возвращает.

      Пример

      <#FUNC
      //  загрузка в память сохраненных глобалов из файла
      Globs_Load=(Globs_Open;   /// открыли файл глобалов
        // сканируем файл
        SCAN KEYFILE=Globs
        ( // сохраняем у всех элементов атрибут VAL
          GLOBALS (KEY) PUT=(VALUE KEY=VAL)
        );
      )
      >
      
      См. также: Результаты сканирования текста

      WHILE - Цикл по условию

      <#WHILE condition [body] > [complex-body] <#/>
      Параметры Описание
      condition Задает условие выполнения очередного шага цикла. Ожидается в позиции первого аргумента.
      [body] Задает тело цикла внутри простого тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Ожидается в позиции последнего аргумента. Опциональный.
      [complex-body] Задает тело цикла внутри сложного тэга - выражение, вычисляемое на каждом шаге цикла и добавляемое к результату предыдущих шагов. Опциональный.

      Описание

      Выполняет тело цикла body до тех пор, пока значение условия condition не пусто.

      Последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле.

      Возвращает объединенный результат вычислений на каждом шаге тела цикла body, сначала внутри простого тега, затем внутри сложного тега.

      Пример

      Выполняем 5 раз макрос Macro1.

      <#SET cnt=0 Num=5>
      <#WHILE (LT (cnt) (Num))>
       <#Macro1>
       <#ADD cnt 1>
      <#/>
      
      См. также: T-X, Операторы цикла., Составные примитивы. , Энергичные примитивы.,

      XBASE - Получение пути к директории программы

      <#XBASE>

      Описание

      Возвращает полный путь к директории программы (Абриаль) с обратным слэшем (символ '\') на конце.

      Пример

      Присваиваем переменной Root путь к к директории программы (Абриаль).

      <#FUNC
       Root=(XBASE)
       MyFile=((XBASE)"My\Myfile.txt")
      >
      
      См. также: T-X, Энергичные примитивы., Простые примитивы.,

      XXX - Структурный комментарий

      <#XXX [comment]> [complex-comment] </#>
      Параметры Описание
      [comment] Задает исключаемый текст (комментарий) внутри простого тэга. Ожидается в позиции 1. Опциональный.
      [complex-comment] Задает исключаемый текст (комментарий) внутри сложного тэга. Опциональный.

      Описание

      Предназначен для временного исключения блоков текста внутри сложных примитивов.

      Ничего не возвращает.

      Пример

      Закомментировали весь блок FORDB, включая вложенные конструкции.

      <#XXX FORDB D="MyDB.ab">
      <#_NITM N="Иванов ИИ" C="Личность" >
      <#/>
      
      См. также: T-X, Операторы комментариев., Составные примитивы. , Ленивые примитивы.,

      _BLNK - Добавление или изменение бинарной связи

      <#_BLNK [AN=aspect-name | A=aspect] [O=object] [D=dbname] [TO=target-object]>
      Параметры Описание
      [AN=aspect-name] Задает исходный аспект именем. По умолчанию используется текущий аспект.
      [A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
      [O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
      [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
      [TO=target-object] Задает целевой объект числовым идентификатором. По умолчанию создается новый целевой объект.

      Описание

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

      Исходный аспект может быть указан числовым идентификатором aspect либо своим именем aspect-name.

      Объект и целевой объект могут быть указаны числовым идентификатором object и target-object.

      Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущий аспект текущего объекта текущей БД.

      В случае успеха возвращает числовой идентификатор указанного или созданного целевого объекта, иначе пусто.

      Пример

      Устанавливаем объект увлечения у конкретной личности.

      <#FORDB D=((XBASE)"Test\AIS.ab")>
      <#_BLNK AN="увлеч\об-ты увлечен"
        O=(OBJ N="Иванов ИИ" C="Личность")
        TO=(_NITM N="охота" C="увлечения")>
      <#/>
      
      См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы.,

      _DELA - Удаление аспекта объекта

      <#_DELA [[AN=]aspect-name | A=aspect] [O=object] [D=dbname] >
      Параметры Описание
      [[AN=]aspect-name] Задает исходный аспект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий аспект.
      [A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
      [O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
      [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.

      Описание

      Удаляет аспект объекта. Если аспект держащий, то удаления не происходит.

      Аспект может быть указан числовым идентификатором aspect или своим именем aspect-name. Без атрибута AN ожидается в качестве первого аргумента.

      Объект может быть указан числовым идентификатором object.

      Если указана БД dbname, отличная от текущей, то необходимо явно указывать аспект и объект. По умолчанию удаляется текущий аспект текущего объекта текущей БД.

      В случае успеха возвращает непустое значение (символ 'пробел'), иначе пусто.

      Пример

      Устанавливаем отсутствие увлечений у конкретной личности.

      <#FORDB D=((XBASE)"Test\AIS.ab")>
       <#_DELA AN="увлеч\об-ты увлечен"
        O=(OBJ N="Иванов ИИ" C="Личность")>
      <#/>
      
      См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы.,

      _DELI - Удаление объекта

      <#_DELI [O=object] [D=dbname] >
      Параметры Описание
      [O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
      [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.

      Описание

      Удаляет объект из БД.

      Если указана БД dbname отличная от текущей, то необходимо явно указывать объект числовым идентификатором object. По умолчанию удаляется текущий объект текущей БД.

      В случае успешного удаления возвращает непустое значение (символ 'пробел'), иначе пусто.

      Пример

      Удаляем конкретную личность из БД.

      <#FORDB D=((XBASE)"Test\AIS.ab")>
        <#_DELI O=(OBJ N="охота" C="увлечения")>
      <#/>
      
      См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы.,

      _DELK - Удаление одной связи объекта

      <#_DELK {LK=link | {{R=relation-name | RID=relation | AN=aspect-name | A=aspect} {Oi=object | Vi=value}+}} [D=dbname] >
      Параметры Описание
      LK=link Задает связь числовым идентификатором.
      R=relation-name Задает связь числовым идентификатором отношения.
      RID=relation Задает связь числовым идентификатором отношения.
      AN=aspect-name Задает связь именем исходного аспекта.
      A=aspect Задает связь числовым идентификатором исходного аспекта.
      On=object Задает в соответствующем O1..On (n -размерность связи) слоте связи числовой идентификатор объекта - значения атрибута.
      Vn=aspect-value Задает в соответствующем V1..Vn (n -размерность связи) слоте связи значение атрибута.
      [D=dbname] Задает путь к файлу БД По умолчанию используется текущая БД.

      Описание

      Удаляет из БД связь любой размерности, заданную либо числовым идентификатором связи, либо исходным аспектом или отношением и списком целевых объектов или значений.

      Если указан аспект, и он держащий, то удаления не происходит.

      Если не указана БД dbname, используется текущая.

      Связь должна быть указана явно:

      1) С атрибутом LK числовым идентификатором связи link;

      2)

      • с атрибутом R именем отношения relation-name
      • с атрибутом RID числовым идентификатором отношения relation
      • с атрибутом AN именем исходного аспекта aspect-name
      • с атрибутом A числовым идентификатором aspect исходного аспекта

      и списком числовых идентификаторов целевых объектов с атрибутом Oi, или значений с атрибутом Vi, где i=1,2,3...N, N-размерность связи.

      В случае успеха возвращает числовой идентификатор удаленной связи, иначе пусто.

      Пример

      Удаляем связь "уч-ст".

      <#FORDB D=((XBASE)"Test\AIS.ab")>
      <#_DELK R="уч-ст"
        O1=(OBJ N="Иванов ИИ" C="Личность")
        O2=(OBJ N="доктор" C="ученая степень")
        O3=(OBJ N="физ.-мат. наук" C="область наук")>
      <#/>
      
      См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы.,

      _EDIT - Изменение значения атрибута объекта

      <#_EDIT _VAL=value [AN=aspect-name | A=aspect] [O=object] [D=dbname] >
      Параметры Описание
      _VAL=aspect-value Задает новое значение атрибута объекта.
      [AN=aspect-name] Задает исходный аспект именем. По умолчанию используется текущий аспект.
      [A=aspect] Задает исходный аспект числовым идентификатором. По умолчанию используется текущий аспект.
      [O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
      [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.

      Описание

      Добавляет или изменяет на value значение атрибута объекта.

      Аспект может быть указан числовым идентификатором aspect или своим именем aspect-name.

      Объект может быть указан числовым идентификатором object.

      Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект.

      По умолчанию используется текущий аспект текущего объекта текущей БД.

      В случае успеха возвращает непустое значение (символ 'пробел'), иначе пусто.

      Пример

      Устанавливаем дату рождения личности.

      <#ON
        O=(OBJ N="Иванов ИИ" С="Личность")
        AN="дата-рожд\дата рожд"
        D=((XBASE)"Test\AIS.ab")
        RET=(_EDIT _VAL= "25.04.1817")
      >
      
      См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы.,

      _HREF - Получение чистой ссылки на объект без обрамляющих тегов

      <#_HREF [[M=]method | ACT=action] [{N=object-name C=class-name} | O=object] [D=dbname] [{Custom=expression}*]>
      Параметры Описание
      [[M=]method] Задает метод, формирующий целевую страницу ссылки. Без атрибута ожидается в позиции 1. По умолчанию (нет ни M ни ACT) принимается: M=_HOME если не указана БД (D=) или если БД указана, но не указан объект, то M=_ROOT, а если объект указан, то M=PAGE.
      [ACT=action] Задает действие, выполняемое при переходе по ссылке. По умолчанию формирует навигационный запрос.
      [N=object-name] Задает исходный объект именем. По умолчанию используется текущий объект.
      [C=class-name] Задает исходный объект именем своего класса. По умолчанию используется текущий объект.
      [O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
      [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
      [Custom=expression] Задает любые именованные параметры для передачи формирующему страницу методу (например, начальную позицию сегмента итераций и размер сегмента итераций: [NUM=segment-size [POS=segment-start). Опциональный.

      Описание

      Формирует ссылку на объект БД без обрамляющих тегов и без кавычек, в общем виде:

      'ab://ab/[&D=dbname][&O=object] [&N=object-name&C=class-name] [&M=method] [&ACT=action] [{&Custom=expression}*]'.

      Если не указана БД, используется текущая, формируется внутренняя ссылка. В ссылке формируется параметр '&D=dbname', где dbname - полный путь к файлу текущей БД. Объект может быть указан числовым идентификатором object либо своим именем object-name и именем своего класса class-name. В ссылке формируются параметры: '&O=object[&N=object-name&C=class-name]'. По умолчанию формируется параметр '&O=' с числовым идентификатором текущего объекта.

      Если явно указана БД dbname, формируется внешняя ссылка. В ссылке формируется параметр с указанным именем БД без изменений '&D=dbname'. Объект может быть указан только своим именем object-name и именем своего класса class-name. По имени и имени класса объекта определяется числовой идентификатор объекта object. В ссылке формируются параметры: '&O=object[&N=object-name&C=class-name]'. Если объект не указан, либо отсутствует, либо указан числовым идентификатором, идентификатор обнуляется ('&O=0').

      С атрибутом M, или без него первым аргументом, может быть указан метод method формирующий страницу при переходе по ссылке.

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

      Могут быть указаны также любые именованные параметры Custom=expression, которые будут включены в ссылку для передачи параметров обрабатывающему методу. В их числе могут быть NUM, POS, определяющие сегмент итераций по умолчанию в циклах обрабатывающего метода.

      В случае успеха возвращает сформированную таким образом ссылку (значение атрибута 'href=' A-тэга).

      Пример

      Для атрибута 'action=' тэга FORM формируем ссылку-действие с параметрами.

      <#MACRO RenObj O=(OBJ) SIZE=15>
      <form  action='<#_HREF ACT="acts" O=(O) F="Ren">' method='post'>
        <input type='text' name='N' value='<#NAME O=(O)>' size='<#SIZE>'>
        <input type='submit' value='Переименовать'>
      </form>
      <#/>
      
      См. также: _, Обращение к БД через HTML-ссылку., Ленивые примитивы., Простые примитивы.,

      _LINK - Добавление или изменение связи любой размерности

      <#_LINK {R=relation-name | RID=relation | AN=aspect-name | A=aspect} {Oi=object | Vi=value}+ [D=dbname] >
      Параметры Описание
      R=relation-name Задает связь числовым идентификатором отношения.
      RID=relation Задает связь числовым идентификатором отношения.
      AN=aspect-name Задает связь именем исходного аспекта.
      A=aspect Задает связь числовым идентификатором исходного аспекта.
      On=object Задает в соответствующем O1..On (n -размерность связи) слоте связи числовой идентификатор объекта - значения атрибута.
      Vn=aspect-value Задает в соответствующем V1..Vn (n -размерность связи) слоте связи значение атрибута.
      [D=dbname] Задает путь к файлу БД По умолчанию используется текущая БД.

      Описание

      Создает или изменяет связь любой размерности.

      Если не указана БД dbname, используется текущая.

      Связь должна быть указана явно:

      • с атрибутом R именем отношения relation-name
      • с атрибутом RID числовым идентификатором отношения relation
      • с атрибутом AN именем исходного аспекта aspect-name
      • с атрибутом A числовым идентификатором aspect исходного аспекта

      и списком целевых объектов с атрибутом Oi, или значений с атрибутом Vi, где i=1,2,3...N, N-размерность связи.

      В случае успеха возвращает числовой идентификатор связи, иначе пусто.

      Пример

      Создаем связь "уч-ст".

      <#FORDB D=((XBASE)"Test\AIS.ab")>
      <#_LINK R="уч-ст" O1=(OBJ N="Иванов ИИ" C="Личность")
        O2=(OBJ N="доктор" C="ученая степень")
        O3=(OBJ N="физ.-мат. наук" C="область наук")>
      <#/>
      
      См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы.,

      _LOAD - Загрузка DDL-кода в БД

      <#_LOAD [D=dbname] [{FILE=file-name [SHOW=Y]} | TEXT=ddl-code]>
      Параметры Описание
      [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.
      FILE=file-name Задает путь к файлу, содержащему DDL-код для загрузки.
      [SHOW=Y] Выводит диалог отображения процесса загрузки DDL-кода с кнопками остановки, продолжения и отмены загрузки. Опциональный. Дополнительный параметр для FILE.
      TEXT=ddl-code Задает текст DDL-кода для загрузки.

      Описание

      Загружает текст кода DDL ddl-code или из файла file-name в БД dbname или, по умолчанию, в текущую.

      С ключом SHOW=Y выводится окно, в котором отображается процесс загрузки в БД текста DDL-кода из указанного файла file-name и кнопками завершения приостановки и продолжения процесса загрузки. По завершению загрузки окно автоматически закрывается.

      В случае успеха возвращает имя файла file-name без изменений, если текст кода DDL был загружен из файла, непустое значение (символ 'пробел'), если загружен текст кода ddl-code, иначе пусто.

      Пример

      Догружаем из файла "MyDB.ab" DDL-код в текущую БД, отображаем процесс загрузки.

      <#_LOAD FILE=((DBASE)"MyDB.ab") SHOW=Y>
      
      См. также: _, Операции со всей базой данных., Ленивые примитивы., Простые примитивы.,

      _NEW - Создание новой БД

      <#_NEW D=dbname [PROTO=prototype]>
      Параметры Описание
      D=dbname Задает путь к файлу БД.
      [PROTO=prototype] Задает путь к БД-прототипу. Опциональный.

      Описание

      Создает новую БД с именем dbname.

      Если с атрибутом PROTO указан файл-прототип БД prototype, то новая БД будет создана как копия БД-прототипа с именем dbname, иначе создается пустая БД.

      В случае успеха возвращает имя БД dbname без изменений, иначе пусто.

      Пример

      Создаем новую БД "New.ab" на основе БД-прототипа "AIS.ab".

      <#_NEW D=((DBASE)"New.ab") PROTO=((XBASE)"Test\AIS.ab")>
      
      См. также: _, Операции со всей базой данных., Ленивые примитивы., Простые примитивы.,

      _NITM - Добавление элемента в БД

      <#_NITM [N=object-name] C=class-name [O=object] [AN=aspect-name | A=aspect] [D=dbname] >
      Параметры Описание
      [N=object-name] Задает новый объект именем (для объектов-сущностей). По умолчанию создается безымянный объект указанного класса.
      C=class-name Задает новый объект именем своего класса (для объектов-сущностей).
      [O=object] Задает объект-словарь числовым идентификатором (словарь - объект содержащий образующий аспект для нового объекта). По умолчанию используется класс с указанным в С= именем.
      [AN=aspect-name] Задает исходный образующий аспект именем. По умолчанию используется текущий аспект.
      [A=aspect] Задает исходный образующий аспект числовым идентификатором. По умолчанию используется текущий аспект.
      [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.

      Описание

      Создает новый объект с именем object-name класса class-name или присваивает новое имя существующему объекту.

      С атрибутом O числовым идентификатором object может быть указан объект-словарь. Объект-словарь есть старший объект для порождающей связи (словарь,содержащий имя). Для дескрипторов аспектов такими является дескриптор отношения, для сущностей этим словарем является их дескриптор класса. По умолчанию в качестве объекта-словаря используется текущий объект.

      Образующий аспект может быть указан с атрибутом A числовым идентификатором aspect либо с атрибутом AN своим именем aspect-name. По умолчанию используется 'NAME/ITEMS'.

      Если БД dbname указана явно, необходимо явно указывать объект-словарь. По умолчанию используется текущая БД.

      В случае успеха возвращает идентификатор объекта - или нового или обнаруженного старого с таким именем, иначе пусто.

      Пример

      Добавляем увлечение к возможным увлечениям личностей.

      <#_NITM
        N="шахматы" C="увлечения"
        O=(OBJ N="увлечения" C="CLASS")
        D=((XBASE)"Test\AIS.ab")
      >
      
      См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы.,

      _OPEN - Открытие БД

      <#_OPEN D=dbname >
      Параметры Описание
      D=dbname Задает путь к файлу БД.

      Описание

      Открывает БД с именем файла dbname.

      Стандартными расширениями файла БД являются:

      • '.AB' - для текстовых файлов, содержащих DDL-код БД,
      • '.AM' - для файлов с внутренним форматом БД (образов памяти).

      В случае успеха возвращает имя файла открытой БД, иначе пусто.

      Пример

      Открываем БД.

      <#_OPEN D=((XBASE)"Test\AIS.ab">
      
      См. также: _, Операции со всей базой данных., Ленивые примитивы., Простые примитивы.,

      _SAVE - Сохранение БД полностью или частично

      <#_SAVE [FILE=file-name] [TYPE= {ALL | DATA | STRUCT | {OBJ [{N=object-name C=class-name} | O=object]} | {CLA C=class-name} | {REL R=relation-name}}] [D=dbname]>
      Параметры Описание
      [FILE=file-name] Задает путь к файлу для сохранения. По умолчанию DDL-код сохраняется в файл текущей или указанной БД.
      [TYPE=ALL] Задает режим сохранения всей БД (по умолчанию). По умолчанию 'TYPE=ALL'.
      [TYPE=DATA] Задает режим сохранения только данных из БД. По умолчанию 'TYPE=ALL'.
      [TYPE=STRUCT] Задает режим сохранения только дескрипторов данных из БД. По умолчанию 'TYPE=ALL'.
      [TYPE=OBJ] Задает режим сохранения только указанного объекта. По умолчанию 'TYPE=ALL'.
      [TYPE=CLA] Задает режим сохранения только объектов указанного класса. По умолчанию 'TYPE=ALL'.
      [TYPE=REL] Задает режим сохранения только связей указанного отношения. По умолчанию 'TYPE=ALL'.
      [N=object-name] Задает сохраняемый объект именем Дополнительный параметр для 'TYPE=OBJ'. По умолчанию используется текущий объект.
      [C=class-name] Задает сохраняемый(ые) объект(ы) именем класса. Дополнительный параметр для 'TYPE=OBJ', 'TYPE=CLA'. По умолчанию используется текущий объект.
      [O=object] Задает сохраняемый объект числовым идентификатором. Дополнительный параметр для 'TYPE=OBJ'. По умолчанию используется текущий объект.
      R=relation-name Задает имя отношения сохраняемых связей.
      [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.

      Описание

      Сохраняет БД dbname в файл file-name полностью или частично.

      В зависимости от значения атрибута TYPE сохраняется:

      • ALL- вся БД целиком (по умолчанию);
      • DATA- только данные;
      • STRUCT- только дескрипторы данных;
      • CLA- только объекты с именем класса class-name;
      • REL- только связи с именем отношения relation-name;
      • OBJ- только объект, либо указанный числовым идентификатором object или своим именем object-name и именем своего класса class-name, либо текущий, по умолчанию.

      Если не указано имя БД dbname, по умолчанию используется текущая БД.

      Без атрибута FILE по умолчанию используется имя файла, приписанного к текущей БД.

      Стандартными расширениями файла БД являются:

      • '.AB' - для текстовых файлов, содержащих DDL-код БД
      • '.AM' - для файлов с внутренним форматом БД (образов памяти).

      В случае успеха возвращает имя файла сохраненной БД, иначе пусто.

      Пример

      Сохраняем из БД AIS.ab в файл "c:\my\structAIS.ab" только объекты - дескрипторы данных.

      <#_SAVE
        D=((XBASE)"Test\AIS.ab")
        FILE="c:\my\structAIS.ab"
        TYPE=STRUCT
      >
      
      См. также: _, Операции со всей базой данных., Ленивые примитивы., Простые примитивы.,

      _SWAP - Переключение связи унарного аспекта объекта

      <#_SWAP [[AN=]aspect-name | A=aspect] [O=object] [D=dbname] >
      Параметры Описание
      [[AN=]aspect-name] Задает исходный унарный аспект именем. Без атрибута ожидается в позиции 1. По умолчанию используется текущий аспект.
      [A=aspect] Задает исходный унарный аспект числовым идентификатором. По умолчанию используется текущий аспект.
      [O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
      [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.

      Описание

      Создает унарную связь объекта, если она отсутствует, либо удаляет, если связь имеется.

      Унарный аспект должен быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию используется текущий аспект.

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

      Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущая БД.

      В случае успеха возвращает непустое значение (символ 'пробел'), иначе пусто.

      Пример

      Устанавливаем признак нестандартности мышления для конкретной личности.

      <#ON
        O=(OBJ N="Иванов ИИ" С="Личность")
        AN="нестанд-ть\нестандартность мышления"
        D=((XBASE)"Test\AIS.ab")
        RET=(COND (EMPTY) (_SWAP))
      >
      
      См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы.,

      _TEXT - Изменение значения объекта

      <#_TEXT _VAL=value [O=object] [D=dbname]>
      Параметры Описание
      _VAL=aspect-value Задает значение для объектов-значений либо новое имя для объектов-сущностей.
      [O=object] Задает исходный объект числовым идентификатором. По умолчанию используется текущий объект.
      [D=dbname] Задает путь к файлу БД. По умолчанию используется текущая БД.

      Описание

      Устанавливает объекту object новое значение valueдля объектов-значений или имя для объектов-сущностей.

      Новое значение (имя) value должно быть указано с атрибутом _VAL.

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

      Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект. По умолчанию используется текущая БД.

      В случае успеха возвращает непустое значение (символ 'пробел'), иначе пусто.

      Пример

      Устанавливаем дату рождения конкретной личности.

      <#ON
       O=(OBJ N="Иванов ИИ" C="Личность")
       AN="дата-рожд\дата рожд"
       D=((XBASE)"Test\AIS.ab")
       RET=(_TEXT _VAL="25.04.1817" O=(AT))
      >
      
      См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы.,
     

    Все права защищены. © 2000-2004 РосНИИ ИИ
    http://artint.ru
    Copyright. © 2000-2004 by RRIAI
    Александр Иосифович Пацкин [mailto:aleksandr@tochka.ru].
    29/09/04

    К началу документа.