<<< BACK NEXT >>>

ОПРЕДЕЛИТЕЛИ БЛОКОВ

Как уже говорилось, блоки 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

не только блокируют псевдопараллельное выполнение программ, но блокируют и обработку событий.

<<< BACK NEXT >>>