Эти операции добавляются в язык вместе с процессором, который используется на схеме для выполнения Ci-программ.
send
Формат вызова:
send <parameter0> <parameter1> [<parameter2>...<parameter31>];
первый параметр типа str или типа uint, допустим любой операнд, массив не допустим;
второй и следующие параметры любого типа, допустимы любые операнды, массивы допустимы
назначение операции: на выход с именем или порядковым номером (от 0), получаемым в первом параметре, передаются все последующие параметры, независимо от их типов; массивы передаются поэлементно, начиная с 0-го элемента; ВАЖНО! у процессора Ci, в программе которого используется эта операция, должен иметься выход с именем или номером, точно совпадающим с передаваемым в первом параметре, если такой выход отсутствует, то программа будет остановлена с сообщением об ошибке; примеры использования:
send "Сигнал" TRUE "данные переданы"; ``передаст логическое TRUE и строку "данные переданы" на выход "Сигнал", если такой имеется
str a[3];
data a "Привет", "мир", "!";
send 0 (sizeof a) a; ``передаст на самый верхний выход процессора Ci число 3, затем содержимое массива a
hasdata
Формат вызова:
(hasdata)
возвращает bool;
параметров нет;
назначение операции: возвращает TRUE, если по какому-либо входу есть данные; для получения номера входа, на котором есть данные, надо их получить с помощью операции getinput; пример использования:
str d;
if (hasdata)
{
puts "получена строка на входе номер:" (getinput s) "с содержимым:" s;
}
getinput
Формат вызова:
getinput <parameter0> [<parameter1>];
(getinput <parameter0> [<parameter1>])
возвращает uint, возвращаемое значение можно игнорировать;
первый параметр типа bool, int, uint, float или str, обязательно переменная, массив не допустим;
второй параметр может отсутствовать, типа типа str, обязательно переменная, массив не допустим;
назначение операции: если на каком-либо входе есть принятое данное, то получает его и записывает в переменную, полученную первым параметром, при этом если тип полученного данного не совпадает с типом переменной, то производится попытка конвертировать данное, если она не удалась, то программа останавливается с сообщением об ошибке; если операция вызвана, но данных ни на одном из входов нет, то программа останавливается в ожидании получения данных, чтобы этого не происходило, нужно проверять наличие принятых данных с помощью операции hasdata; если операция используется со вторым параметром, то в него записывается имя отправителя; пример использования:
str s;
int i;
float f;
getinput i s;
puts "получено целое число" i "от отправителя" s;
i = (getinput f);
puts "получено вещественное число" f "на входе" i;
oninput
Формат вызова:
oniput <parameter0> [<parameter1>];
первый параметр типа str или uint, допустим любой операнд, массив не допустим;
второй параметр, если присутствует, то типа block, допустим любой операнд, массив не допустим;
назначение операции: если используется с двумя параметрами, то устанавливает для входа с именем или порядковым номером, указанным первым параметром, блок программы, который указывается вторым параметром, и который будет вызван при получении сигнала по установленому входу; функционально это аналогично установке обработчика прерывания, поскольку текущее выполнение программы сразу при получении сигнала будет прервано (текущая выполняемая операция будет завершена, и после этого произойдет прерывание) и будет выполнен установленный блок, после чего выполнение прерванной программы будет продолжено; обработка по прерыванию удобна в тех случаях, когда надо циклически выполнять какие-то действия, но сразу же обрабатывать приходящие данные, без проверки и ожидания; допускается установка нового блока обработки прерывания внутри блока обработки прерывания даже для того же входа - но надо иметь в виду, что при следующем прерывании будет вызываться блок, установленный последним, восстановление обработчика прерывания не происходит; если операция вызывана с одним параметром, то происходит отключение ранее установленного обработчика для указанного в первом параметре входа; если в первом параметре указан отсутствующий вход, то выполнение программы будет прекращено с сообщением об ошибке; примеры использования:
str s;
bool p;
oninput "Сигнал"
{
getinput s;
p = TRUE;
};
loop ``ожидание данного и вывод времени через каждую секунду
{
delay 1000;
if p
{
puts "получена строка" s;
} `else` {
puts (time)
};
breakif p;
};
oninput "Сигнал"; `` обработка сигнала отключена