Блоки, влияющие на значения параметров транзактов в GPSS
PRIORITY А [,BUFFER] устанавливает транзакту, входящему в данный блок, значение приоритета A (целое без знака в диапазоне от 0 до 127). Если операнд BUFFER отсутствует, то продолжается обработка текущего транзакта, иначе текущей транзакт помещается в список текущих событий и возобновляется просмотр списка для выбора текущего транзакта с учетом нового значения приоретета.
Примеры.
1. PRIORITY 4
Назначить транзакту приоритет 4 и попытаться продвинуть его по модели в следующий блок.
2. PRIORITY XF$4, BUFFER
Назначить транзакту приоритет, равный значению, хранящемуся в полнословной ячейке 4, поместить транзакт в список текущих событий и возобновить его просмотр.
ASSIGN A,B присваивает в текущем транзакте параметру, номер которого указан в поле А, значение, указанное в поле В; если номер поля сопровождается знаком + или -, то данный блок модифицирует (увеличивает или уменьшает) значение параметра на В.
Примеры.
1. ASSIGN 2,8 ; P(2) := 8
2. ASSIGN 4+,V$5 ; P(4) := P(4) + V$5,
INDEX A,B если поле А равно 1, то блок модифицирует значение первого параметра транзакта, вошедшего в данный блок, на величину, задаваемую полем В, если же в поле А записано некоторое другое число, то это число воспринимается как номер параметра транзакта и блок присваивает первому параметру транзакта сумму значения поля В и значения параметра, указанного полем А.
Примеры.
1. INDEX 1,2; P(1) := P(1) + 2
2. INDEX 2, FN$5; где — FN$5 — значение функции номеp 5, выбираемое из таблицы (см. ФУНКЦИИ И ПЕРЕМЕННЫЕ, рис.1).
INCREMENT A,B увеличивает значение параметра, номер которого указан в поле А, на величину, указанную в поле В.
DECREMENT A,B уменьшает значение параметра, номер которого указан в поле А, на величину, указанную в поле В.
Примеры.
INCREMENT 5,7; P(5) := P(5) + 7
DECREMENT 5,7; P(5) := P(5) — 7
INCREMENT P$5,FN$7; P(P(5)) := P(P(5)) + FN$7 — здесь в поле А косвенное задание номера параметра транзакта: номер модифицируемого параметра определяется как содержимое пятого параметра транзакта, поступившего в данный блок.
DECREMENT P$5,FN$7 ; P(P(5)) := P(P(5)) — FN$7
INCREMENT XH$5,V$7; Р(ХН$5) := P(XH$5) + V$7
MARK A записывает текущее значение абсолютного модельного времени в указанный в поле А параметр транзакта; если же параметр не указан, то заменяет значение отметки времени (время создания транзакта) на текущее значение таймера.
USING A,B,C,D,E осуществляет доступ текущего транзакта к параметрам другого транзакта, номер которого указан в поле A. Параметр, номер которого определяется полем B (может иметь суффиксы PB, PF, PH), копируется в ячейку или в параметр, заданный в поле C. Если транзакт, заданный в поле A, не активен, то поле E не определено и требуемый транзакт не является активным, происходит ошибка.
LOCATE A,B,C,D определяет и записывает в параметр текущего транзакта номер блока, в который должен войти транзакт, определенный номером в поле A. Этот номер блока записывается в параметре или в ячейке, которые указаны в полях В и С. В поле В записывается СЧА ячейки или параметра (X, XB, XH, P, PF, PH), а в поле C — номер ячейки или параметра, указанного в поле В. Если требуемый транзакт не активен, то текущий транзакт переходит в альтернативный блок, указанный в поле D. Если поле D не задано и транзакт неактивный, то возникает ошибка.
Пример:
LOCATE XH$TRANS, P, 3, INACT
В параметр 3 текущего транзакта записывается номер следующего блока в который должен войти транзакт, при этом номер блока записан в полусловной ячейке с именем TRANS. Если данный транзакт не активен, то текущий транзакт посылается в блок с меткой INACT.