Как уже говорилось, блоки CAPER – основные средства определения процедурных единиц и групп данных, - могут иметь один из следующих типов: блоки команд, блоки данных, блоки образов, блоки массивов, блоки текстов. Фактически, категория блока нацелена на группирование и логическое представление данных, к которым отнесены и команды.
Блок команд - основная логически определяемая совокупность исполняемых команд.
Блок данных - средство логически представленной упорядоченной совокупности
данных - значений выражений.
Блок текста - логически представленная упорядоченная совокупность строк
не интерпретированного текста.
Блок образа - средство хранения образов файлов.
Блок массива - средство создания статического массива в теле модуля.
Блок определяется посредством записи следующей формы:
block <имя блока> [ [static] ( <параметр1>, <параметр2>, . . . ,
<параметр N> )]
[ as <тип блока> ]
. . .
endblock
<имя блока> является идентификатором.
<параметр> - формальный параметр блока, получающий конкретное значение в
момент вызова.
<тип блока> - command - блок команд
data - блок значений выражений.
image - блок образа,
text - блок текста,
array - блок массива.
Все блоки ограничиваются ключевым словом endblock.
Если <тип блока> опущен, то считается установленным тип command. Список
параметров допустим только для блоков типа command.
Ключевое слово static предписывает компилятору создание мест под фактические параметры внутри модуля и может использоваться только в определении блоков команд. В случае отсутствия static параметры создаются динамически в процессе вычислений.
В процессе компиляции по определителю BLOCK имя блока регистрируется в списке имен загруженных блоков. По сути блок является массивом, и, соответственно, каждый элемент адресуем. Элементы блока адресуются традиционным для массивов образом
<имя блока>[i], где i - индекс массива
Кроме того, введена специальная функция выбора элемента блока:
GetElement( <имя блока>, <номер адресуемого элемента> )
Примеры:
block bl1 as data
10.25
“string”
‘A’
2006
endblock
Данный блок хранит литеральные значения. Выбор элементов блока может быть
осуществлено посредством:
bl1[1] == 10.25
bl1[2] == “string”
и т.д., или же
GetElement( bl1, 1 ) == 10.25
GetElement( bl1, 2 ) == “string”
Блоки, определяемые как
func <имя блока>[ [static] (<параметр1>, <параметр2>, . . . , <параметр N> )]
. . .
endfunc
в процессе выполнения блокируют выполнение программы в псевдопараллельном режиме (если программа находилась в таком режиме) до момента своего завершения.
Блоки, определяемые как
flick <имя блока>[ [static] (<параметр1>, <параметр2>, . . . , <параметр N> )]
. . .
endflick
не только блокируют псевдопараллельное выполнение программ, но блокируют и обработку событий. |