top - download
⟦e706587df⟧ Wang Wps File
Length: 39361 (0x99c1)
Types: Wang Wps File
Notes: CPS/SDS/029
Names: »1738A «
Derivation
└─⟦20fb15aa2⟧ Bits:30006084 8" Wang WCS floppy, CR 0130A
└─ ⟦this⟧ »1738A «
WangText
G…06…G…07…F…0d…F
…00… …05…
…06……1f……09……1f……0a……1f……0c……1f……0d……1f……0f……1f……00……1f… …1f……05……1e……08……1e……0c……1e……0e……1e……00……1e……02……1e……06……86…1
…02…
…02…
…02…
…02…CPS/SDS/029
…02…820514
…02……02…
SYSTEM
STATUS
AND CONTROL
DETAILED
DESIGN
SPECIFICATION CAMPS
4.2.7 C̲h̲a̲n̲n̲e̲l̲ ̲M̲o̲n̲i̲t̲o̲r̲i̲n̲g̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲
4.2.7.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The Channel Monitoring and Control (CEMCO) functions
are detailed on figure 4.2.7.1-1.
The following types of channels are controlled by CEMCO:
N̲I̲C̲S̲-̲T̲A̲R̲E̲
Queues related to NICS-TARE channel subprocess:
- Command queue: NT-CCQ
- Circuit queue: NT-CIQ
T̲R̲C̲/̲p̲o̲i̲n̲t̲ ̲t̲o̲ ̲p̲o̲i̲n̲t̲ ̲c̲o̲n̲n̲e̲c̲t̲i̲o̲n̲
Queues related to TRC channel subprocess:
- Command queue: TP-CCQ
- Circuit queue: NT-CIQ
S̲C̲A̲R̲S̲-̲C̲C̲I̲S̲
Queues related to SCARS-CCIS channel subprocess:
- Command queue: SC-CCQ
- Circuit queue: SC-CIQ.
The functions performed are described in the following
sections.
Fig. 4.2.7.1-1 …01…CEMCO Functions
4.2.7.1.1 E̲X̲C̲ ̲L̲o̲g̲i̲c̲a̲l̲ ̲L̲T̲U̲-̲l̲i̲n̲e̲ ̲h̲a̲n̲d̲l̲e̲
The access control to NICS-TARE and SCARS-CCIS channel
are controlled by the supervisor.
Using the accept/non accept EXC command the supervisor
can open or close the logical connection to an EXC.
4.2.7.1.2 E̲X̲C̲ ̲L̲o̲g̲i̲c̲a̲l̲ ̲L̲T̲U̲X̲-̲l̲i̲n̲e̲ ̲h̲a̲n̲d̲l̲e̲
The access control to a TRC/point to point connection
is controlled by the supervisor.
Using the accept/non accept EXC command the supervisor
can open or close the logical connection to an EXC.
4.2.7.1.3 E̲X̲C̲ ̲C̲o̲n̲t̲r̲o̲l̲
The command START is sent to the channel subprocess
after supervisor specification of a connection for
input/output or during initialization.
The command STOP is sent after supervisor specification
of a disconnection for input/output, after detection
of a line error or after a software error.
The commands "init close down" and "final close down"
are sent after operator specification of ordered close
down/switchover of a PU.
The command "init close down" causes the channel subprocess
to stop processing when a complete message is received/transmitted.
After receipt of a "final close down" the subprocess
terminates all activities and dismantles the IO-connection.
4.2.7.1.4 U̲p̲d̲a̲t̲e̲ ̲p̲r̲o̲f̲i̲l̲e̲
The supervisor command CHANGE ̲CIRCUIT ̲PROFILE specifies
that the classification of a circuit profile is changed.
CEMCO changes the circuit queue profile according to
the new classification of the circuit. Special handling,
encryption, item type and applictaion fields in circuit
queue profile is not changed.
Prior to sending a CHANGE ̲CIRCUIT ̲PROFILE command the
supervisor has
- emptied the circuit queue
- blocked the circuit queue
4.2.7.1.5 Q̲u̲e̲u̲e̲,̲ ̲s̲u̲b̲p̲r̲o̲c̲e̲s̲s̲ ̲s̲e̲c̲u̲r̲i̲t̲y̲
C̲h̲a̲n̲n̲e̲l̲ ̲s̲u̲b̲p̲r̲o̲c̲e̲s̲s̲ ̲p̲r̲o̲f̲i̲l̲e̲
The queue access profile of the device subprocess is
set when the channel is connected by the supervisor
(see fig. 4.2.7.1.7-1,fig. 4.2.7.1.7-3,fig. 4.2.7.1.7-5).
S̲u̲b̲p̲r̲o̲c̲e̲s̲s̲ ̲a̲c̲c̲e̲s̲s̲ ̲p̲r̲o̲f̲i̲l̲e
If the channel is disconnected by the supervisor the
access profile of the channel subprocess is set to
no rights (all bits are set to zero). When the supervisor
connects a channel the access profile is set according
to fig. 4.2.7.1.7-7 to fig. 4.2.7.1.7-9.
4.2.7.1.6 T̲M̲S̲ ̲l̲i̲n̲e̲ ̲s̲e̲c̲u̲r̲i̲t̲y̲
The TMS lines have a security level, which are set
when the lines are created.
If the security level of a TMS line is greater than
the general security level of TMS, then TMS purges
all buffer, which has been used in the actual input/output
operation.
4.2.7.1.7 I̲n̲i̲t̲i̲a̲l̲i̲z̲a̲t̲i̲o̲n̲
As the coroutine is started the internal CEMCO data
are initialized and it is checked in the channel profile
whether the channel is connected or not.
The type of device in the port table and the type of
circuit in the circuit profile are compared. The chain-status
in the port table is also checked.
In the NICS/TARE subprocess the queue access profiles
for the command queue NTf̲CCQ and the circuit queue
NTc̲Q are set by CEMCO according to fig. 4.2.7.1.7-1
and fig. 4.2.7.1.7-4.
In the TRC/point to point subprocess the queue access
profiles for the command queue TP ̲CCQ are set by CEMCO
according to fig. 4.2.7.1.7-3 and fig. 4.2.7.1.7-6.
In the SCARS/CCISS subprocess the queue access profiles
for the command queue SC-̲CCQ and circuit queue SC ̲CIQ
are set by CEMCO according to fig. 4.2.7.1.7-5 and
fig. 4.2.7.1.7-6.
If the channel is connected, the access profile of
the channel subprocess is set by CEMCO according to
fig. 4.2.7.1.7-7 to fig. 4.2.7.1.7-9
If the device is disconnected, the access profile of
the device subprocess is not changed by CEMCO (the
access profile bits are all zero)
4.2.7.1.8 E̲r̲r̲o̲r̲ ̲P̲r̲o̲c̲e̲s̲s̲i̲n̲g̲
CEMCO recognizes the following software error types.
1) E̲x̲t̲e̲r̲n̲a̲l̲
These errors relate to input validity check in
the operation semaphore EXC ̲OS or in the queue
EXC ̲RQ. An error report is sent via the procedure
COPPSY ̲SEND ̲GARBLE.
2) I̲n̲t̲e̲r̲n̲a̲l̲
These errors relate to errors from system calls
and internal logical errors. System call errors
are reported via the procedure ANALYSE ̲ERROR (CC).
Internal logical program errors are reported via
the procedure COPSY ̲SEND ̲GARBLE.
4.2.7.2 S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲
The channel monitoring and control (CEMCO) functions
are implemented in one coroutine per channel.
The CEMCO program is decomposed as defined in fig.
4.2.7.2-1.
The program is implemented in 2 modules and a number
of common procedures.
Figs: 4.2.7.1.7-1/2/3/4/5/6/7/8/9/
Fig. 4.2.7.2-1…01…CEMCO Software Modules
Three states for CEMCO are defined:
- initial
- connected
- disconnected
Eight input types are defined:
- accept
- non ̲accept
- change ̲circuit ̲profile
- set ̲access ̲profiles
- start ̲cor
- close ̲initial
- line ̲error
- invalid ̲input
Every input type and state defines the next state of
CEMCO and the action to be executed. E.g. if the input
type is non-accept (the supervisor command NON ̲ACCEPT)
and the present state of CEMCO is connected, the next
state of CEMCO is disconnected and the action to be
executed is disconnect ̲channel. See table 4.2.7.2-1.
TABLE 4.2.7.2-1
4.2.7.3 D̲a̲t̲a̲ ̲f̲l̲o̲w̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲L̲o̲g̲i̲c̲
A blockdiagram for CEMCO fig. 4.2.7.3-1 showing data
and control logic is depicted overleaf. A simplified
flowgram for the Main program is shown in fig. 4.2.7.3-2.
A State diagram for CEMCO is defined in fig. 4.2.7.3-3.
Fig. 4.2.7.3-1…01…Blockdiagram for CEMCO
INITIALIZATION
LOOP
WAIT OPERATION SEMAPHORE
ACTION = ACTION ̲TABLE (OLD ̲STATE, INPUT)
NEW ̲STATE = STATE ̲TABLE (OLD ̲STATE; INPUT)
CALL ACTION ̲MODULE (ACTION)
OLD ̲STATE = NEW ̲STATE
END LOOP
Fig. 4.2.7.3-2…01…A Simplified Flowgram for the Main Program
Fig. 4.2.7.3-3…01…State Diagram for a CEMCO coroutine
4.2.7.4.1 M̲a̲i̲n̲ ̲P̲r̲o̲g̲r̲a̲m̲
4.2.7.4.1.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The main program module initializes the coroutine.
Thereafter it reads and interprets the operation sent
to the coroutine from the configuration handler or
the command dispatcher.
The type of input to the coroutine is determined. A
new state of CEMCO is determined and the action to
take, according to the type of input received, is calculated.
The action to perform is executed in the action module.
4.2.7.4.1.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲d̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
None
4.2.7.4.1.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
The CEMCO main module contains the following procedures,
see fig. 4.2.7.4.1.3-1.
a) C̲F̲H̲ ̲C̲ ̲C̲M̲D̲
The procedure determines the type of CFH command
sent to CEMCO.
b) S̲U̲P̲V̲ ̲C̲ ̲C̲M̲D̲
The procedure determines the type of supervisor
command sent to CEMCO:
Fig. 4.2.7.4.1.3-1…01…CEMCO Main Module Procedures
4.2.7.4.1.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲ ̲f̲o̲r̲ ̲t̲h̲e̲ ̲M̲a̲i̲n̲ ̲p̲r̲o̲g̲r̲a̲m̲
T̲y̲p̲e̲ ̲r̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
S̲S̲C̲ ̲C̲O̲M̲M̲O̲N̲
SUPV ̲CMD
CFH ̲CMD
D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
S̲S̲C̲ ̲C̲O̲M̲M̲O̲N̲
EXC ̲OS
SHORT ̲OS
C.LOCAL ̲CNO: LOGICAL ̲CHANNEL ̲NO ̲TYPE
range: 1..NO ̲OF ̲EXC
C̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲
VAR C. ACTION ̲TABLE, C.STATE ̲TABLE
C.STATE: STATE ̲TYPE
C.INPUT: INPUT ̲TYPE
C.ACTION: ACTION ̲TYPE
C.CMD: INTEGER
C.SUPV ̲QEL ̲REFERENCE: QEL ̲REFERENCE
C.INFORMATION: INTEGER " used when a circuit queue
profile is changed, contains the reference to the
circuit queue.
L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
S̲S̲C̲ ̲C̲O̲M̲M̲O̲N̲
VAR C ̲OP: SHORT ̲OP ̲TYPE
C.CMD ̲TYPE: S.CMD ̲TYPE
4.2.7.4.1.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
PROCEDURE CEMCO ̲MAIN
BEGIN
EQUIVALENCE(RUNNING ̲COROUTINE,C:CHANNEL ̲COROUTINE)
C.STATE = INITIAL
LOOP FOREVER
WAIT ̲OPSEM(EXC ̲OS(C.LOCAL ̲CNO)(C ̲OP)
C.CMD ̲TYPE = C ̲OP.CMD ̲TYPE
C.CMD = C ̲OP.CMD ̲TYPE
C.CMD = C ̲OP.CMD
C.INFORMATION = C ̲OP.INFORMTION "contains
reference
to
circuit
queue,
used
by
UPDATE
̲PROFILE
C.CMD ̲TYPE NE SUPV ̲CMD?
C.SUPV ̲QEL ̲REF = C ̲OP.REFERENCE
SIGNAL ̲OPSEM (SHORTS ̲OS, C ̲OP)
CASE C.CMD ̲TYPE OF
CFH ̲CMD? C̲F̲H̲ ̲C̲ ̲C̲M̲D̲
SUPV ̲CMD? S̲U̲P̲V̲ ̲C̲ ̲C̲M̲D̲
OTHER? C.INPUT = C.INVALID
̲INPUT
END CASE
C.ACTION = C.ACTION ̲TABLE(C.STATE, C.INPUT)
C. STATE = C.STATE ̲TABLE (C.STATE, C.INPUT)
A̲C̲T̲I̲O̲N̲ ̲M̲O̲D̲U̲L̲E̲ (C. ACTION)
END ̲LOOP
END PROCEDURE
PROCEDURE CFH ̲C.CMD
BEGIN
CASE C.CMD OF
SET-ACCESSS ̲PROFILES? C.INPUT = C.SET
̲ACCESSS ̲PROFILES
START ̲COR? C.INPUT = C.START ̲COR
CLOSE ̲INITIAL? C.INPUT = C.CLOSE ̲INITIAL
CLOSE ̲FINAL? C.INPUT = C.CLOSE
̲FINAL
LINE ̲ERROR? C.INPUT = C.LINE
̲ERROR
OTHER? C.INPUT = C.INVALID ̲INPUT
END CASE
END PROCEDURE CFH ̲C ̲CMD
PROCEDURE SUPV ̲C.CMD
BEGIN
CASE C.CMD OF
ACCEPT ̲EXC? - C.INPUT = C.ACCEPT
NON ̲ACCEPT ̲EXC? - C.INPUT = C.NON ̲ACCEPT
CIRCUIT ̲PROFILE ̲CHANGE? - C.INPUT=C.CHANGE
̲CIRCUIT ̲PROFILE
OTHER? - C.INPUT = C.INVALID ̲INPUT
END CASE
END PROCEDURE SUPV ̲C ̲CMD
4.2.7.4.2 A̲c̲t̲i̲o̲n̲ ̲M̲o̲d̲u̲l̲e̲
4.2.7.4.2.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
The action determined in the main program CEMCO ̲MAIN
is executed in this module.
4.2.7.4.2.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) ACTION ̲MODULE (C.ACTION : ACTION ̲TYPE)
b) ACTION ̲MODULE (R5, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
R5 action to perform
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
None
4.2.7.4.2.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
The action module contains the following procedures,
see fig. 4.2.7.4.2.3-1.
a) S̲E̲T̲ ̲P̲R̲O̲F̲I̲L̲E̲S̲ ̲P̲
The procedure initializes local CEMCO data, and
sets the classification of the circuit queue profile
and the command queue profile of the channel subprocess
according to the classification of the circuit
profile.
The classification of the command queue profile
is set according to the classification of the circuit
profile, while two types of views (flash ack. and
self-addressed-channel-check-asm.) are sent to
the command queue.
The subprocess access profile is set to no rights.
b) C̲E̲M̲C̲O̲ ̲I̲N̲I̲T̲ ̲P̲
If the channel is connected the procedure sends
a START-command containing offer-id, to the channel
subprocess. Also the classification of the channel
subprocess profile is changed to the classification
of the circuit.
Fig. 4.2.7.4.2.3-1…01…Action Module Procedures
c) C̲O̲N̲N̲E̲C̲T̲ ̲C̲H̲A̲N̲N̲E̲L̲ ̲P̲
The procedure sends a START-command containing
offer-id, to the channel subprocess. Also the classification
of the channel subprocess profile is changed to
the classification of the circuit.
A reply is sent to the suprvisor.
d) D̲I̲S̲C̲O̲N̲N̲E̲C̲T̲ ̲C̲H̲A̲N̲N̲E̲L̲ ̲P̲
The procedure sends a STOP-command to the channel
subprocess, and it dismantles the connection used
by the channel subprocess.
The channel subprocess access profile is changed
to no rights.
A reply is sent to the supervisor.
e) C̲H̲A̲N̲G̲E̲ ̲C̲I̲R̲C̲U̲I̲T̲ ̲P̲R̲O̲F̲I̲L̲E̲ ̲P̲
The procedure changes the classification of a circuit.
f) I̲ ̲C̲L̲O̲S̲E̲ ̲C̲O̲N̲N̲E̲C̲T̲E̲D̲ ̲C̲H̲A̲N̲N̲E̲L̲ ̲P̲
The procedure sends a CLOSE ̲DOWN ̲INITIAL command
to a channel subprocess, where the channel is connected.
g) F̲ ̲C̲L̲O̲S̲E̲ ̲C̲O̲N̲N̲E̲C̲T̲E̲D̲ ̲C̲H̲A̲N̲N̲E̲L̲ ̲P̲
The procedure sends a CLOSE ̲DOWN ̲FINAL command
to a channel subprocess, where the channel is connected.
It dismantles the connection used by the channel
subprocess upon reception of a reply. The channel
subprocess access profile is changed to no rights
and the CFH ̲S semaphore counter is increased.
h) F̲ ̲C̲L̲O̲S̲E̲ ̲D̲I̲S̲C̲O̲N̲N̲E̲C̲T̲E̲D̲ ̲C̲H̲A̲N̲N̲E̲L̲ ̲P̲
The procedure increases the semaphore counter CFH
̲S.
i) L̲I̲N̲E̲ ̲E̲R̲R̲O̲R̲ ̲P̲
The procedure sends a STOP-command to the channel
subprocess, and it dismantles the connection used
by the channel subprocess. The channel subprocess
access profile is changed to unclassified.
j) N̲O̲ ̲A̲C̲T̲I̲O̲N̲ ̲P̲
The procedure performs nothing.
k) I̲L̲L̲E̲G̲A̲L̲ ̲A̲C̲T̲I̲O̲N̲ ̲P
The procedure sends an error report to CFH via
the procedure COPSY ̲SEND ̲GARBLE.
4.2.7.2.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲ ̲f̲o̲r̲ ̲a̲c̲t̲i̲o̲n̲ ̲m̲o̲d̲u̲l̲e̲
D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
S̲S̲C̲ ̲C̲O̲M̲M̲O̲N̲
CONST FIRST ̲TRC ̲PTOP ̲NO
CONST FIRST ̲NICS ̲TARE ̲NO
CONST FIRST ̲SCARS ̲CCIS ̲NO
CFH ̲S
VAR C.LOCAL ̲CNO: LOGICAL ̲CHANNEL ̲NO ̲TYPE
"range 1..MAX ̲EXC
C.CNO: LOGICAL ̲CHANNEL ̲NO ̲TYPE
"range 1..NO ̲OF ̲EXC
LOG ̲CI ̲TO ̲LOCAL(1..MAX ̲CIRCUITS) OF BYTES
C.CI ̲NO: LOGICAL ̲CIRCUIT ̲NO ̲TYPE
"range 1..MAX ̲CIRCUITS
C.LTU ̲LINE ̲REC: LTU ̲LINE ̲REC
C.LTUX ̲LINE ̲REC: LTUX ̲LINE ̲REC
C.LINE ̲TABLE: PORT ̲TABLE ̲TYPE
C̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲
CONST C.INIT ̲ACCESS ̲PROFILE "unclass,all,yes,message
only,more
VAR
C.COMMAND ̲Q: QUEUE ̲REFERENCE
C.CIRCUIT ̲Q: QUEUE ̲REFERENCE
C.ALT ̲Q: QUEUE ̲REFERENCE
C.REPLY ̲Q: QUEUE ̲REFERENCE
C.REPORT ̲Q: QUEUE ̲REFERENCE
C.STATE: STATE ̲TYPE
C.KEY ̲BUF: KEY ̲BUF ̲TYPE
C.CHANNEL ̲PROFILE: CHANNEL ̲PROFILE ̲TYPE
C.CIRCUIT ̲PROFILE: CIRCUIT ̲PROFILE ̲TYPE
C.SUBPROCESS ̲NO: SUBPROCESS ̲INDEX
C.ATTRIBUTES: SUBPROCESS ̲ATTRIBUTES
C.ACCESS ̲PROFILE: ACCESS ̲PROFILE
C.CC: INTEGER
C.REPLY: BOOLEAN
C.SEND ̲BUF: TMS ̲PARAMS
L̲o̲c̲a̲l̲ ̲d̲a̲t̲a̲
VAR
C.PROFILE: CIRCUIT ̲PROFILE
C.CHANGE ̲Q: QUEUE ̲REFERENCE
C.COM1, COM2: INTEGER
C.TYPE: INTEGER
C.PARAMS : COPSY ̲GARBLE ̲PARAMS
4.2.7.4.2.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
PROCEDURE ACTION ̲MODULE(C.ACTION)
BEGIN
C.PARAMS.ERROR ̲TYPE = COPSY ̲SHORT ̲ERROR ̲INF
C.PARAMS ̲USER ̲ACTION = CONTINUE
C.PARAMS.LOC = ACTION ̲MODULE
C.PARAMS-ERROR ̲INFO = C.ACTION
CASE C.ACTION OF
SET ̲PROFILES? - S̲E̲T̲ ̲P̲R̲O̲F̲I̲L̲E̲S̲ ̲P̲
CEMCO ̲INIT? - C̲E̲M̲C̲O̲ ̲I̲N̲I̲T̲ ̲P̲
CONNECT ̲CHANNEL? - C̲O̲N̲N̲E̲C̲T̲ ̲C̲H̲A̲N̲N̲E̲L̲ ̲P̲
DISCONNECT ̲CHANNEL? - D̲I̲S̲C̲O̲N̲N̲E̲C̲T̲ ̲C̲H̲A̲N̲N̲E̲L̲ ̲P̲
CHANGE ̲CIRCUIT ̲PROFILE? - C̲H̲A̲N̲G̲E̲ ̲C̲I̲R̲C̲U̲I̲T̲ ̲P̲R̲O̲F̲I̲L̲E̲
̲P̲
I ̲CLOSE ̲CONNECTED ̲CHANNEL? I̲ ̲C̲L̲O̲S̲E̲ ̲C̲O̲N̲N̲E̲C̲T̲E̲D̲
̲C̲H̲A̲N̲N̲E̲L̲ ̲P̲
F ̲CLOSE ̲CONNECTED ̲CHANNEL? - F̲ ̲C̲L̲O̲S̲E̲ ̲C̲O̲N̲N̲E̲C̲T̲E̲D̲
̲C̲H̲A̲N̲N̲E̲L̲ ̲P̲
F ̲CLOSE ̲DISCONNECTED ̲CHANNEL? -F̲ ̲C̲L̲O̲S̲E̲ ̲D̲I̲S̲C̲O̲N̲N̲E̲C̲T̲E̲D̲
̲C̲H̲A̲N̲N̲E̲L̲ ̲P̲
NO ̲ACTION? - N̲O̲ ̲A̲C̲T̲I̲O̲N̲ ̲P̲
ILLEGAL ̲ACTION? - I̲L̲L̲E̲G̲A̲L̲ ̲A̲C̲T̲I̲O̲N̲ ̲P̲
OTHER? - C̲O̲P̲S̲Y̲ ̲S̲E̲N̲D̲ ̲G̲A̲R̲B̲L̲E̲ ̲(NIL,C.PARAMS)
N̲O̲ ̲A̲C̲T̲I̲O̲N̲ ̲P̲
END PROCEDURE
PROCEDURE SET ̲PROFILES ̲P
BEGIN
C.PARAMS.ERROR ̲TYPE = COPSY ̲INT ̲ERROR
C.PARAMS.USER ̲ACTION = GIVE ̲UP
C.PARAMS.ERROR ̲COR = CEMCO ̲COR
C.PARAMS.LOC = SET ̲PROFILES ̲P
C.PARAMS.ERROR ̲INFO = NIL
C.COMMAND ̲Q. SUB ̲QUEUE = O
C.CIRCUIT ̲Q.MAIN ̲QUEUE = CIO + C ̲CI ̲NO
C.CIRCUIT ̲Q.SUB ̲QUEUE = O
C.ALT ̲Q.MAIN ̲QUEUE = EXC ̲RQ
C.ALT ̲Q.SUB ̲QUEUE = C.CNO
C.REPLY ̲Q.MAIN ̲QUEUE = EXC ̲RQ
C.REPLY ̲Q.SUB ̲QUEUE = C.LOCAL ̲CNO
C.REPORT ̲Q.MAIN ̲QUEUE = SPIP ̲REPQ
C.REPORT ̲Q.SUB ̲QUEUE = O
C.KEY ̲BUF.KEY = C.CNO
SEARCH ̲ENTRY(CHANNEL ̲TABLE, C.KEY ̲BUF, ALL,
C.SEND ̲BUF)(C.CHANNEL ̲PROFILE)
C.KEY ̲BUF.KEY = C.CHANNEL ̲PROFILE. CIRCUIT ̲NO
SEARCH ̲ENTRY(CIRCUIT ̲TABLE, C.KEY ̲BUF, ALL,
C.SEND ̲BUF)(C.CIRCUIT ̲PROFILE)
CASE C.CIRCUIT ̲PROFILE.CIRCUIT OF
NICS ̲TARE? C.COMMAND ̲Q.MAIN ̲QUEU = NT ̲CCQ + C.CNO
C.CIRCUIT ̲Q.MAIN ̲QUEUE = NT ̲CIQ + C.CNO
C.CMD ̲ACCESS ̲PROFILE = C.NT ̲CMD ̲PROFILE
C.CIRCUIT ̲ACCESS ̲PROFILE = C.NT ̲CIRCUIT
̲PROFILE
TRC ̲PTOP? C.COMMAND ̲Q.MAIN ̲QUEUE = TP ̲CCQ + C.CNO
C.CIRCUIT ̲Q.MAIN ̲QUEUE = TP ̲CIQ + C.CNO
C.CMD ̲ACCESS ̲PROFILE = C.TP ̲CMD ̲PROFILE
C.CIRCUIT ̲ACCESS ̲PROFILE = C.TP ̲CIRCUIT
̲PROFILE
SCARS/CCISS? C.COMMAND ̲Q.MAIN ̲QUEUE = SC ̲CCQ + C.CNO
C.CIRCUIT ̲Q.MAIN ̲QUEUE = SC ̲CIQ + C.CNO
C.CMD ̲ACCESS ̲PROFILE = C.SC ̲CMD ̲PROFILE
C.CIRCUIT ̲ACCESS ̲PROFILE = C.SC ̲CIRCUIT
̲PROFILE
OTHER? C̲O̲P̲S̲Y̲ ̲S̲E̲N̲D̲ ̲G̲A̲R̲B̲L̲E̲ (NIL,C.PARAMS)
END ̲CASE
C.ACCESS ̲PROFILE = C.CIRCUIT ̲ACCESS ̲PROFILE LOG OR
C.CIRCUIT ̲PROFILE.CLASS
SET ̲PROFILE(C.ACCESS ̲PROFILE, C.CIRCUIT ̲Q, C.ALT ̲Q)
(CC): ERROR ̲OK
ERROR? - ANALYSE ̲ERROR (CC, O)
C.ACCESS ̲PROFILE = C.CMD ̲ACCESS ̲PROFILE LOG OR
C.CIRCUIT ̲PROFILE.CLASS
SET ̲PROFILE(C.ACCESS ̲PROFILE,C.COMMAND ̲Q, C.ALT ̲Q)
(C.CC): ERROR ̲OK
ERROR? ANALYZE ̲ERROR (CC.CC,O)
END PROCEDURE
PROCEDURE CEMCO ̲INIT ̲P
BEGIN
C.KEY.BUF = C.CNO
SEARCH ̲ENTRY(CHANNEL ̲TABLE, C.KEY ̲BUF, ALL, C.SEND
̲BUF)
(C.CHANNEL ̲PROFILE)
C.CHANNEL ̲PROFILE.CONNECTED EQ FALSE?
C.STATE = DISCONNECTED
C.CIRCUIT ̲PROFILE.CIRCUIT EQ SCARS ̲CCIS? - C.COM1
= SCARS ̲CCIS
C.COM1 = C.CIRCUIT ̲PROFILE.CIRCUIT
C.KEY ̲BUF.KEY = C.CHANNEL ̲PROFILE.PORT ̲ID.TABLE
C.LINE ̲TABLE = C.CHANNEL ̲PROFILE.PORT ̲ID.TABLE
C.LINE ̲TABLE EQ LTUX ̲LINE ̲TABLE?
SEARCH ̲ENTRY(LTU ̲LINE ̲TABLE, C.KEY ̲BUF, ALL, C.SEND
̲BUF)
(C.LTU ̲LINE ̲REC)
C.TYPE = C.LTU ̲LINE ̲REC.TYPE ̲DEV
SEARCH ̲ENTRY(LTUX ̲LINE ̲TABLE,C.KEY ̲BUF,ALL,
C.SEND ̲BUF
(C.LTUS ̲LINE ̲REC)
C.TYPE = C.LTUX ̲LINE ̲REC.TYPE ̲DEV
C.TYPE EQ NICS ̲TARE ̲LOCAL LOG OR NICS ̲TARE ̲REMOTE?
C.COM2 = C.TYPE C.COM2 = NICS ̲TARE
C.COM1 EQ C.COM2?
C.PARAMS.ERROR ̲TYPE = COPSY ̲INT ̲ERROR
C.PARAMS.USER ̲ACTION = GIVE ̲UP
C.PARAMS.ERROR ̲INFO = NIL
C̲O̲P̲S̲Y̲ ̲S̲E̲N̲D̲ ̲G̲A̲R̲B̲L̲E̲ (NIL,C.PARAMS)
CREATE ̲CONNECTION
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲ (START)
S̲E̲T̲ ̲D̲A̲M̲O̲S̲ ̲L̲I̲N̲E̲ ̲P̲R̲O̲F̲I̲L̲E̲
S̲E̲N̲D̲ ̲C̲O̲M̲M̲A̲N̲D̲ (START ̲EXC)(C.REPLY)
C.REPLY EQ OK? - C.STATE = CONNECTED
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲ (STOP)
S̲E̲N̲D̲ ̲W̲A̲R̲N̲I̲N̲G̲ ̲R̲E̲P̲O̲R̲T̲ (SOFTWARE ̲ERROR)
C.STATE = DISCONNECTED
C̲U̲T̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N
END PROCEDURE
PROCEDURE CONNECT ̲CHANNEL ̲P
BEGIN
CREATE ̲CONNECTION
C.KEY ̲BUF.KEY = C.CI ̲NO
SEARCH ̲ENTRY(CIRCUIT ̲TABLE, C.KEY ̲BUF,ALL, C.SEND
̲BUF)
(C.CIRCUIT ̲PROFILE)
C.ACCESS ̲PROFILE = C.CMD ̲ACCESS ̲PROFILE LOG OR
C.CIRCUIT ̲PROFILE.CLASS
SET ̲PROFILE(C.ACCESS ̲PROFILE,C.COMMAND ̲Q, C. ALT
̲Q)
(C.CC): ERROR ̲OK
ERROR? - ANALYZE ̲ERROR(C.CC,O)
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲ (START)
S̲E̲T̲ ̲D̲A̲M̲O̲S̲ ̲L̲I̲N̲E̲ ̲P̲R̲O̲F̲I̲L̲E̲
S̲E̲N̲D̲ ̲C̲O̲M̲M̲A̲N̲D̲(START ̲EXC)(C.REPLY)
S̲E̲N̲D̲ ̲R̲E̲P̲L̲Y̲ ̲T̲O̲ ̲S̲U̲P̲V̲(C.REPLY)
C.REPLY EQ OK?
S̲E̲T̲ ̲S̲U̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲ (STOP)
C.STATE = DISCONNECTED
C̲U̲T̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N̲
S̲E̲N̲D̲ ̲W̲A̲R̲N̲I̲N̲G̲ ̲R̲E̲P̲O̲R̲T̲(SOFTWARE ̲ERROR)
END PROCEDURE
PROCEDURE DISCONNECT ̲CHANNEL ̲P
BEGIN
S̲E̲N̲D̲ ̲C̲O̲M̲M̲A̲N̲D̲(STOP)(C.REPLY)
C.REPLY EQ OK?
S̲E̲N̲D̲ ̲W̲A̲R̲N̲I̲N̲G̲ ̲R̲E̲P̲O̲R̲T(SOFTWARE ̲ERROR)
C̲U̲T̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N̲
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲ ̲(STOP)
C.REPLY = OK
S̲E̲N̲D̲ ̲R̲E̲P̲L̲Y̲ ̲T̲O̲ ̲S̲U̲P̲V̲(C.REPLY)
END PROCEDURE
PROCECURE CHANGE ̲CIRCUIT ̲PROFILE ̲P
BEGIN
C.KEY ̲BUF.KEY = C.INFORMATION
"C.INFORMATION contains reference
to circuit queue
SEARCH ̲ENTRY(CIRCUIT ̲TABLE, C.KEY ̲BUF, ALL, C.SEND
̲BUF)
(C.CIRCUIT ̲PROFILE)
C.CHANGE ̲Q.MAIN ̲QUEUE = CIO + LOG ̲CI ̲TO ̲LOCAL(C.INFORMATION)
C.CHANGE ̲Q.SUB ̲QUEUE = O
C.ACCESS ̲PROFILE = C.CIRCUIT ̲ACCESS ̲PROFILE LOG OR
C.CIRCUIT.̲PROFILE.CLASS
SET ̲PROFILE(C.ACCESS ̲PROFILE,C.CHANGE ̲Q,C.ALT ̲Q)
(C.CC): ERROR ̲OK
ERROR? - ANALYZE ̲ERROR (C.CC,O)
C.REPLY = OK
S̲E̲N̲D̲ ̲R̲E̲P̲L̲Y̲ ̲T̲O̲ ̲S̲U̲P̲V(C.REPLY)
END PROCEDURE
PROCEDURE I ̲CLOSE ̲CONNECTED ̲CHANNEL ̲P
BEGIN
S̲E̲N̲D̲ ̲C̲O̲M̲M̲A̲N̲D(CLOSE ̲DOWN ̲INITIAL)(C.REPLY)
C.REPLY EQ OK?
C̲U̲T̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲ (STOP)
C.STATE = DISCONNECTED
S̲E̲N̲D̲ ̲W̲A̲R̲N̲I̲N̲G̲ ̲R̲E̲P̲O̲R̲T̲(SOFTWARE ̲ERROR)
END PROCEDURE
PROCEDURE F ̲CLOSE ̲CONNECTED ̲CHANNEL ̲P
BEGIN
S̲E̲N̲D̲ ̲C̲O̲M̲M̲A̲N̲D̲(CLOSE ̲DOWN ̲FINAL)(C.REPLY)
C̲U̲T̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N̲
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲ (STOP)
SIGNAL ̲SEM(CFH ̲S)
END PROCEDURE
PROCEDURE F ̲CLOSE ̲DISCONNECTED ̲CHANNEL ̲P
BEGIN
SIGNAL ̲SEM(CFH ̲S)
END PROCEDURE
PROCEDURE LINE ̲ERROR ̲P
BEGIN
S̲E̲N̲D̲ ̲C̲O̲M̲M̲A̲N̲D̲(STOP)(C.REPLY)
C̲U̲T̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N̲
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲ (STOP)
END PROCEDURE
PROCEDURE NO ̲ACTION ̲P
BEGIN
END
PROCEDURE ILLEGAL ̲ACTION ̲P
BEGIN
C.PARAMS.ERROR ̲TYPE = COPSY ̲SHORT ̲ERROR
C.PARAMS.USER ̲ACATION = CONTINUE
C.PARAMS.ERROR ̲COR = CEMCO ̲COR
C.PARAMS.LOC = ILLEGAL ̲ACTION ̲P
C.PARAMS:ERROR ̲INFO = C.INPUT
C̲O̲P̲S̲Y̲ ̲S̲E̲N̲D̲ ̲G̲A̲R̲B̲L̲E̲ ̲( NIL,C.PARAMS)
END ̲PROCEDURE
4.2.7.5 C̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲ ̲D̲A̲T̲A̲
STATE ̲TYPE = (INITIAL, CONNECTED, DISCONNECTED)
ACTION ̲TYPE = (CEMCO ̲INIT, CONNECT ̲CHANNEL,
DISCONNECT ̲CHANNEL, CHANGE ̲CIRCUIT ̲
PROFILE, I ̲CLOSE ̲CONNECTED ̲CHANNEL,
F ̲CLOSE ̲CONNECTED ̲CHANNEL,
F ̲CLOSE ̲DISCONNECTED ̲CHANNEL,
LINE ̲ERROR, NO ̲ACTION, ILLEGAL ̲ACTION)
INPUT ̲TYPE = (C.ACCEPT, C.NON ̲ACCEPT,
C.CHANGE ̲CIRCUIT ̲PROFILE,
C.SET ̲ACCESS ̲PROFILES, C.START ̲COR
C.CLOSE ̲INITIAL, C.CLOSE ̲FINAL,
C.LINE ̲ERROR, C.INVALID ̲INPUT)
VAR C.STATE: STATE ̲TYPE
C.INPUT: INPUT ̲TYPE
C.ACTION: ACTION ̲TYPE
C.CMD: INTEGER
C.SUPV ̲QEL ̲REF: QEL ̲REFERENCE
C. INFORMATION: INTEGER
C.COMMAND ̲Q: QUEUE ̲REFERENCE
C.CIRCUIT ̲Q: QUEUE ̲REFERENCE
C.ALT ̲Q: QUEUE ̲REFERENCE
C.KEY ̲BUF: KEY ̲BUF ̲TYPE
C.CHANNEL ̲PROFILE: CHANNEL ̲PROFILE ̲TYPE
C.CIRCUIT ̲PROFILE: CIRCUIT ̲PROFILE ̲TYPE
C.SUBPROCESS ̲NO: SUBPROCESS ̲INDEX
C.ATTRIBUTES: SUBPROCESS ̲ATTRIBUTES
C.ACCESS ̲PROFILE: ACCESS ̲PROFILE
C.REPLY: BOOLEAN
4.2.7.6 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲ ̲
4.2.7.6.1 C̲R̲E̲A̲T̲E̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N̲
4.2.7.6.1.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The procedure creates a connection to a device.
4.2.7.6.1.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) CREATE ̲CONNECTION
b) CREATE ̲CONNECTION (R6)
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
None
4.2.7.6.1.3 D̲A̲T̲A̲
D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
S̲S̲C̲ ̲C̲O̲M̲M̲O̲N̲
SUBP ̲TABLE
C.LINE ̲TABLE: PORT ̲TABLE ̲TYPE
LTUX ̲CON = ARRAY(1..MAX ̲LTUX) OF FDCB ̲INDEX
LTU ̲CON = ARRAY(1..MAX ̲LTUS) OF FDCB ̲INDEX
C̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲
VAR
C.KEY ̲BUF: KEY ̲BUF ̲TYPE
C.CHANNEL ̲PROFILE: CHANNEL ̲PROFILE
C.CNO: LOGICAL ̲CHANNEL ̲NUMBER ̲TYPE
C.CONN = ARRAY(1..2) OF USER ̲CONNECTION ̲TYPE
C.OFFER ̲ID = ARRAY(1..2) OF USER ̲CONNECTION ̲TYPE
L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR C.LINE ̲REC: NEW ̲TMS ̲DEVICE (TMS)
C.CFH ̲CONN: FDCB ̲INDEX
C.CHAIN ̲STATUS: BOOLEAN
C.LTUX ̲LINE ̲REC: LTUX ̲LINE ̲REC
C.LTU ̲LINE ̲REC: LTU ̲LINE ̲REC
C.ACCESS: ACCESS ̲TYPES
C.PARAMS:COPSY ̲GARBLE ̲PARAMS
4.2.7.6.1.4 P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲D̲e̲s̲i̲g̲n̲
PROCEDURE CREATE ̲CONNECTION
BEGIN
C.PARAMS ̲ERROR ̲TYPE = COPSY ̲INT ̲ERROR
C.PARAMS.USER ̲ACTION = GIVE ̲UP
C:PARAMS.ERROR ̲COR = CEMCO ̲COR
C.PARAMS.LOC = CREATE ̲CONNECTION
C.PARAMS.ERROR ̲INFO = NIL
C.KEY ̲BUF.KEY = C.CHANNEL ̲PROFILE.PORT ̲ID
C.LINE ̲TABLE = C.CHANNEL ̲PROFILE.PORT ̲ID.TABLE
C.LINE ̲TABLE EQ LTUX ̲LINE ̲TABLE?
SEARCH ̲ENTRY(LTU ̲LINE ̲TABLE, C.KEY ̲BUF,ALL,C.SEND
̲BUF)
(C.LTU ̲LINE ̲REC)
C.CFH ̲CONN = LTU ̲CON(C.LTU ̲LINE ̲REC.LTU ̲NO)
C.CHAIN ̲STATUS = C.LTU ̲LINE ̲REC.CHAIN ̲STATUS
SEARCH ̲ENTRY(LTUX ̲LINE ̲TABLE, C.KEY ̲BUF,ALL,
C.SEND ̲BUF)
(C.LTUX ̲LINE ̲REC)
C.CFH ̲CONN = LTUX ̲CON(C.LTU ̲LINE ̲REC.LTUX ̲NO)
C.CHAIN ̲STATUS = C.LTUX ̲LINE ̲REC.CHAIN ̲STATUS
C.CHAIN ̲STATUS EQ FALSE? - COPSY ̲SEND ̲GARBLE(NIL,C.
PARAMS)
C.CFH ̲CONN EQ - 1? COPSY ̲SEND ̲GARBLE(NIL,C.
PARAMS)
CASE C.CIRCUIT ̲PROFILE.TYPE OF
NICS ̲TARE? - CREATE ̲NICS ̲TARE ̲SUBDEVICES(C.LTU ̲LINE
̲REC.TYPE.DEV,
C.CFH ̲CONN)(C.OFFER ̲ID(1), C.OFFER
̲ID (2))
SCARS ̲CCIS? - CREATE ̲SCARS ̲CCIS ̲SUBDEVICE(C.CFH ̲CONN)
(C.OFFER ̲ID(1), C. OFFER
̲ID (2))
TRC ̲PTOP? - CREATE ̲TRC ̲PTOP(C.LTUX ̲LINE ̲REC, C.CFH
̲CONN)
(C.OFFER ̲ID(1), (C.OFFER
̲ID(2))
OTHER? - COPSY ̲SEND ̲GARBLE(NIL,C.PARAMS)
END CASE
END PROCEDURE
PROCEDURE CREATE ̲NICS ̲TARE ̲SUBDEVICES(NICS ̲TARE ̲TYPE:
LTU ̲LINE ̲DEV,CFH ̲CONN: USER ̲CONNECTION ̲TYPE)
(OFFER ̲ID(1):USER ̲CONNECTION
̲TYPE,
OFFER ̲ID(2):USER ̲CONNECTION
̲TYPE)
BEGIN
C.LINE ̲REC.PARAMS = NICS ̲TARE ̲PARAMS ̲D
C.ACCESS ̲ACCESS = SUBP ̲TABLE(NICS ̲TARE ̲S).CHILD ̲TMS
̲ACCESS ̲RIGHTS
C.PROCESS ̲NO = SUBP ̲PROCESS ̲TABLE(SUBPROCESS ̲NO)
C.ACCESS.USER.USER ̲GROUP = C.PROCESS ̲NO
C.ACCESS.SEQ ̲NBR = PROCESS ̲TABLE(PROCESS ̲NO).PROC ̲ID
I = 0
LOOP
I = I + 1
C. LINE ̲REC.SDA = I
C. LINE ̲REC.U ̲SDID.PROFILE ̲TYPE = CHANNEL ̲P
C. LINE ̲REC.V ̲SDID.LOGICAL ̲NO = C.CNO
C.LINE ̲REC.PROTOCOL ̲ID = CASE NICS-TARE ̲TYPE OF
NICS ̲TARE ̲LOCAL? - NICS ̲TARE
̲LOCAL ̲PROTOCOL
NICS ̲TARE ̲REMOTE?- NICS ̲TARE
̲REMOTE ̲PROTOCOL
END CASE
C.LINE ̲REC.SD ̲TYPE = TERMINAL
C.LINE ̲REC.ACCESS ̲LEVEL = 0
C.LINE ̲REC.SELECT ̲BY ̲TMS = FALSE
CREATE ̲SUBDEVICE(CFH ̲CONN,C.LINE ̲REC, DEVICE ̲SE)
(C.CONN(I), C.CC): ERROR ̲OK
ERROR? - ANALYZE ̲ERROR(C.CC, O)
OFFER(C.CONN(I), C.ACCESS)(OFFER ̲ID(I), C.CC): ERROR
̲OK
ERROR? - ANALYZE ̲ERROR(C.CC, O)
I = 2? EXIT
END LOOP
END PROCEDURE
PROCEDURE CREATE ̲SCARS ̲CCIS ̲SUBDEVICE(
CHF ̲CONN:USER ̲CONNECTION ̲TYPE)
(OFFER ̲ID(1): USER ̲CONNECTION ̲TYPE,
OFFER ̲ID(2): USER ̲CONNECTION ̲TYPE)
BEGIN
C.LINE ̲REC.PARAMS = SCARS ̲CCIS ̲PARAMS ̲D
C. LINE ̲REC.SDA = 1
C. LINE ̲REC.U ̲SDID.PROFILE ̲TYPE = CHANNEL ̲P
C. LINE ̲REC. LOGICAL ̲NO = C. CND
C. LINE ̲REC. PROTOCOL ̲ID = SCARS ̲CCIS
C. LINE ̲REC. SD ̲TYPE = TERMINAL
C. LINE ̲REC. ACCESS ̲LEVEL = 0
C. LINE ̲REC. SELECT ̲BY ̲TMS = FALSE
CREATE ̲SUBDEVICE(CFH ̲CONN, C.LINE.REC, DEVICE ̲SE)
(C ̲CONN, C.CC): ERROR ̲OK
ERROR? ANALYZE ̲ERROR(C.CC, O)
C.ACCESS.ACCESS = SUBP ̲TABLE(SCARS ̲CCIS ̲S).CHILD
̲TMS ̲ACCESS ̲RIGHTS
C.PROCESS ̲NO = SUBP ̲PROCESS ̲TABLE(SUBPROCESS ̲NO)
C.ACCESS.USER.USER ̲GROUP = C.PROCESS ̲NO
C.ACCESS.SEQ ̲NBR = PROCESS ̲TABLE(PROCESS ̲NO).PROC
̲ID
OFFER(C.CONN, C.ACCESS)(OFFER ̲ID(1), C.CC): ERROR
̲OK
ERROR? - ANALYZE ̲ERROR(C.CC, O)
OFFER ̲ID(2) = NIL
END PROCEDURE
PROCEDURE CREATE ̲TRC ̲PTOP ̲SUBDEVICE(W ̲REC: LTUX ̲LINE
̲REC ̲TYPE,
CONN: USER ̲CONNECTION ̲TYPE)
(OFFER ̲ID(1): USER ̲CONNECTION ̲TYPE,
OFFER ̲ID(2): USER ̲CONNECTION ̲TYPE)
BEGIN
C.LINE ̲REC. SDA = (W ̲REC.NO-1) MODULE 4
C.LINE ̲REC.U ̲SDID.PROFILE ̲TYPE = CHANNEL ̲P
C.LINE ̲REC.U ̲SDID.LOGICAL ̲NO = C.CNO
C.LINE ̲REC.SD ̲TYPE = TERMINAL
C.LINE ̲REC.ACCESS ̲LEVEL = 0
C.LINE ̲REC.SELECT ̲BY ̲TMS = FALSE
C.LINE ̲REC.PARAMS = OTH ̲LTUX ̲PARAMS ̲D
C.LINE ̲REC.PROTOCOL ̲ID = LTUX ̲OTH ̲PROTOCOL
CREATE ̲SUBDEVICE(CONN, C.LINE ̲REC, DEVICE ̲SE)
(C.CONN, C.CC)ERROR ̲OK
ERROR? - ANALYZE ̲ERROR(C.CC,0)
C.ACCESS.ACCESS = SUBP ̲TABLE(TRC ̲PTOP ̲S).CHILD ̲TMS
̲ACCESS ̲RIGHTS
C.PROCESS ̲NO = SUBP ̲PROCESS ̲TABLE(SUBPROCESS ̲NO)
C.ACCESS.USER.USER ̲GROUP = C.PROCESS ̲NO
C.ACCESS.SEQ ̲NBR = PROCESS ̲TABLE(PROCESS ̲NO).PROC
̲ID
OFFER(C.CONN, C.ACCESS)(OFFER ̲ID ̲(1), C.CC): ERROR
̲OK
ERROR? - ANALYZE ̲ERROR(C.CC,O)
OFFER ̲ID(2) = NIL
END PROCEDURE
4.2.7.6.2 S̲E̲T̲ ̲D̲A̲M̲O̲S̲ ̲L̲I̲N̲E̲ ̲P̲R̲O̲F̲I̲L̲E̲
4.2.7.6.2.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The procedure changes the DAMOS line profile.
4.2.7.6.2.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲
a) SET ̲DAMOS ̲LINE ̲PROFILE
b) SET ̲DAMOS ̲LINE ̲PROFILE (R6)
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
None
4.2.7.6.2.3 D̲a̲t̲a̲
D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
C̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲
TYPE CONN = ARRAY(1..2) OF USER ̲CONNECTION ̲TYPE
VAR C.CONN: CONN
VAR C.CIRCUIT ̲PROFILE: CIRCUIT ̲PROFILE
L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR C.SECURITY ̲PROFILE: WORD
4.2.7.6.2.4 P̲R̲O̲C̲E̲D̲U̲R̲E̲ ̲D̲E̲S̲I̲G̲N̲
PROCEDURE SET ̲DAMOS ̲LINE ̲PROFILE
BEGIN
C.SECURITY ̲PROFILE = C.CIRCUIT ̲PROFILE.CLASS LOG
AND USE ̲2 ̲
FIRST
̲BIT
CHANGE ̲PROFILE(C.CONN(1), C.SECURITY ̲PROFILE)
(CC):ERROR ̲DONE
ERROR? - ANALYZE ̲ERROR(C.CC, O)
C.CIRCUIT ̲PROFILE.CIRCUIT NE NICS ̲TARE?
CHANGE ̲PROFILE(C.CONN(2), C.SECURITY ̲PROFILE)
(CC): ERROR ̲DONE
ERROR? - ANALYZE ̲ERROR(CC, O)
END PROCEDURE
4.2.7.6.3 S̲E̲N̲D̲ ̲R̲E̲P̲L̲Y̲ ̲T̲O̲ ̲S̲U̲P̲V̲
4.2.7.6.3.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The procedure sends a reply to the supervisor
after execution of a supervisor command.
4.2.7.6.3.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) SEND ̲REPLY ̲TO ̲SUPV(C.REPLY: BOOLEAN)
b) SEND ̲REPLY ̲TO ̲SUPV(R5, R6)
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R6 REPLY
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
None
4.2.7.6.3.3 D̲a̲t̲a̲
VAR C.TIME: TIME ̲TYPE
S̲S̲C̲ ̲C̲O̲M̲M̲O̲N̲
VAR C.CNO: LOGICAL ̲CHANNEL ̲NO ̲TYPE
C̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲
VAR C.CMD: INTEGER
VAR C.REPLY: REPLY ̲TYPE
VAR C.SUPV ̲QEL ̲REF: QEL ̲REFERENCE
VAR C.SEND ̲PARAMS: SEND ̲PARAMS ̲TYPE
VAR C.CC: INTEGER
REPLY ̲TYPE = (OK,VALIDATION ̲NOT ̲OK,EXECUTION
̲NOT ̲OK)
4.2.7.6.3.4 P̲R̲O̲C̲E̲D̲U̲R̲E̲ ̲D̲E̲S̲I̲G̲N̲
PROCEDURE SEND ̲REPLY ̲TO ̲SUPV(C.REPLY: REPLY ̲TYPE)
BEGIN
C.SEND ̲PARAMS.INFORMATION ̲TYPE = TRUE
C.SEND ̲PARAMS.CHECKP ̲STATUS = FALSE
C.SEND ̲PARAMS.HEADER.MAINTYPE = ACK
C.SEND ̲PARAMS.HEADER.SUBTYPE = SSC ̲ACK
C.SEND ̲PARAMS.FLAGS = C.REPLY
C.SEND ̲PARAMS.HEADER ̲INF = C.CMD
C.SEND ̲PARAMS.INFORMATION(3) = C.CNO
READ ̲TIME(F ̲TIME ̲TYPE)(T.SEND ̲PARAMS.INFORMATION(1)CC):
ERROR ̲OK
ERROR? - ANALYZE ̲ERROR(CC,O)
SEND ̲REPLY(C.SEND ̲PARAMS, C.SUPV ̲QEL ̲REF, C.SUPV
̲QEL ̲REF)
(CC): ERROR ̲OK
ERROR? - ANALYZE ̲ERROR(CC,O)
DISMANTLE(C.SUPV ̲QEL ̲REF)(CC) : ERROR ̲OK
ERROR? - ANALYZE ̲ERROR(CC,O)
END PROCEDURE
4.2.7.6.4 C̲U̲T̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N̲
4.2.7.6.4.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The procedure dismantles a connection offered to a
transport subprocess and changes the classification
in the access profile of the subprocess to unclassified.
4.2.7.6.4.2 I̲N̲T̲E̲R̲F̲A̲C̲E̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
a) CUT ̲CONNECTION
b) CUT ̲CONNECTION(R6)
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
None
4.2.7.6.4.3 D̲a̲t̲a̲
C̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲
TYPE CONN = ARRAY (1..2) OF USER ̲CONNECTION ̲TYPE
VAR C.CONN: CONN
VAR C.SUBPROCESS ̲NO: SUBPROCESS ̲INDEX
VAR C.CC: INTEGER
VAR C.ATTRIBUTES: SUBPROCESS ̲ATTRIBUTES
4.2.7.6.4.4 P̲R̲O̲C̲E̲D̲U̲R̲E̲ ̲D̲E̲S̲I̲G̲N̲
PROCEDURE CUT ̲CONNECTION
BEGIN
DISMANTLE(C.CONN(1))(C.CC): ERROR ̲OK
ERROR? - ANALYZE ̲ERROR(C.CC,O)
C.CONN(2) EQ NIL?
DISMANTLE(C.CONN(2))(C.CC): ERROR ̲OK
ERROR? - ANALYZE ̲ERROR(C.CC,O)
END PROCEDURE
4.2.7.6.5 S̲E̲N̲D̲ ̲C̲O̲M̲M̲A̲N̲D̲
4.2.7.6.5.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The procedure sends a command to a transport
subprocess. A reply from the subprocess is awaited,
but is subject to timeout.
4.2.7.6.5.2 I̲N̲T̲E̲R̲F̲A̲C̲E̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) SEND ̲COMMAND(C.CMD: INTEGER)(C.REPLY: BOOLEAN)
b) SEND ̲COMMAND(R5, R6)(R5)
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R5 COMMAND
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R5 reply from the transport subprocess
4.2.7.6.5.3 D̲a̲t̲a̲
C̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲
VAR C.CMD: INTEGER
VAR: C.REPLY: REPLY ̲TYPE
VAR: C.CMD ̲Q: QUEUE ̲REFERENCE
VAR: C.TIME: SECONDS
VAR: C.WRK: ARRAY(1..NO) OF INTEGER
VAR: C.ATT: QEL ̲ATTRIBUTES
VAR: C.SUBQ: SUBQUEUE ̲INDEX
VAR: C.CC: INTEGER
VAR: C.SEND ̲PARAMS: SEND ̲PARAMS TYPE
VAR: C.STATE: STATE ̲TYPE
VAR: C.REPLY ̲Q: QUEUE ̲REFERENCE
VAR: C.OFFER ̲ID = ARRAY(1..2) OF USER ̲CONNECTION
TYPE
REPLY ̲TYPE = (OK,VALIDATION ̲NOTok,EXECUTION ̲NOT ̲OK)
4.2.7.6.5.4 P̲R̲O̲C̲E̲D̲U̲R̲E̲ ̲D̲E̲S̲I̲G̲N̲
PROCEDURE SEND ̲COMMAND(C.CMD:INTEGER)(C.REPLY:REPLY
̲TYPE)
BEGIN
C.REPLY = EXECUTION ̲NOT ̲OK
C.SEND ̲PARAMS.HEADER.INFORMATION ̲TYPE = TRUE
C.SEND ̲PARAMS.CHECKP ̲STATUS = FALSE
C.SEND ̲PARAMS.HEADER.MAINTYPE = SSC ̲COMMAND
C.CMD NE (CLOSE ̲DOWN ̲INITIAL OR CLOSE ̲DOWN ̲FINAL)
?
C.SEND ̲PARAMS.HEADER.SUBTYPE = CLOSE ̲DOWN
C.CMD NE CLOSE ̲DOWN ̲INITIAL?
C.SEND ̲PARAMS.HEADER.FLAGS = 0
C.SEND ̲PARAMS.HEADER.FLAGS = 1
C.SEND ̲PARAMS.HEADER.SUBTYPE = C.CMD
C.CMD NE START ̲EXC?
C.SEND ̲PARAMS.HEADER ̲INF = C.OFFER ̲ID(1)
C.SEND ̲PARAMS.INFORMATION(1) = C.OFFERE ̲ID(2)
C.SEND ̲PARAMS.INFORMTION(2) = C.CNO
SEND ̲REQUEST(C.SEND ̲PARAMS,NIL, C.COMMAND ̲Q, C.REPLY
̲Q)
(C.CC): ERROR ̲OK
ERROR? - ANALYZE ̲ERROR(C.CC,O)
C.TIME = 2
WAIT ̲TIME ̲LIMITED ̲ON ̲QUEUE(C.REPLY ̲Q, C.TIME, C. WRK)
(C.ATT, C.QEL, C.SUBQ,
C.CC)
C.CC EQ OK? - C.REPLY = OK
S̲E̲N̲D̲ ̲W̲A̲R̲N̲I̲N̲G̲ ̲R̲E̲P̲O̲R̲T(SOFTWARE ̲ERROR)
C.STATE = DISCONNECTED
C.PARAMS.ERROR ̲TYPE = COPSY ̲Q ̲ERROR
C.PARAMS.USER ̲ACTION = CONTINUE
C.PARAMS-ERROR ̲COR = CEMCO ̲COR
C.PARAMS.LOC = SEND ̲PARAMS
C.ERROR ̲INFO = EXC ̲RQ
C̲O̲P̲S̲Y̲ ̲S̲E̲N̲D̲ ̲G̲A̲R̲B̲L̲E̲ (C.QEL,C.PARAMS)
DISMANTLE(C.QEL)(C.CC) : ERROR ̲OK
ERROR? - ANALYZE ̲ERROR(C.CC,O)
END PROCEDURE
4.2.7.6.6 S̲E̲N̲D̲ ̲W̲A̲R̲N̲I̲N̲G̲ ̲R̲E̲P̲O̲R̲T̲
4.2.7.6.6.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The procedure sends a warning report, which is
printed out at a supervisor position.
4.2.7.6.6.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) SEND ̲WARNING ̲REPORT(C.TEXT ̲REF: 1..MAX ̲REPORT
TEXT ̲REF)
b) SEND ̲WARNING ̲REPORT (R5, R6)
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R5 type of warning report
R6 link
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
None
F̲a̲t̲a̲l̲ ̲E̲r̲r̲o̲r̲s̲
None
4.2.7.6.6.3 D̲A̲T̲A̲
TYPE C.REPORT =
RECORD
SIZE : INTEGER
TOC : TIME ̲TYPE
TEXT ̲REF: 1..MAX ̲REPORT ̲TEXT ̲REF
TD : ARRAY(!..16) OF CHAR)
END
VAR C.SEND ̲PARAMS : SEND ̲PARAMS ̲TYPE
VAR C.TNO : LOGICAL ̲CHANNEL ̲NO ̲TYPE (SSC COMMON)
VAR C.REPORT ̲Q : QUEUE ̲REFERENCE (CEMCO COMMON)
VAR.C.TEXT REF : !.. MAX ̲REPORT ̲TEXT ̲REF)
VAR C.SIZE : INTEGER
4.2.7.6.6.4 P̲R̲O̲C̲E̲D̲U̲R̲E̲ ̲D̲E̲S̲I̲G̲N̲
PROCEDURE SEND ̲WARNING REPORT(T.TEXT REF:
1..MAX ̲REPORT ̲TEXT ̲REF)
BEGIN
CASE READ ̲TIME (F ̲TIME ̲TYPE)
C.REPORT.TOC,CC) : ERROR ̲OK
ERROR?-ANALYZE ̲ERROR ( CC,0)
END
C.REPORT-TEXT ̲REF = C.TEXT ̲REF
C.REPORT.TD = C.CNO
CASE RESERVE ̲BUFFER (C.REPORT.SIZE,C.REPLY ̲Q)
C.QEL,CC) : ERROR ̲OK
ERROR? ANALYZE ̲ERROR (CC,0)
END
CASE WRITE ̲BUFFER (C.QEL,C.REPORT,C.REPORT.SIZE 1)
C.SIZE,CC) : ERROR ̲OK
ERROR? ANALYZE ̲ERROR (CC,0)
END
C.SEND ̲PARAMS.INFORMATION ̲TYPE = FALSE
C.SEND ̲PARAMS ̲CHECKP ̲STATUS = FALSE
C.SEND ̲PARAMS-HEADER ̲MAINTYPE = REPORT
C.SEND ̲PARAMS.HEADER.SUBTYPE = WARNING ̲REPORT
CASE SEND ̲QEL (C.SEND ̲PARAMS,NIL,C.REPORT ̲REPORT
̲Q)
(CC) : ERROR ̲OK
ERROR? ANALYZE ̲ERROR (CC,0)
END
END PROCEDURE
4.2.7.6.7 S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲
4.2.7.6.7.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The procedure changes the access profile of the
channel subprocess when the chnnel is connected
`by the supervisor. When the channel is disconnected
the access profile of the subprocess is set to
no rights (all bits are zero).
4.2.7.6.7.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲
a) SET ̲SUBP ̲ACCESS ̲PROFILE (CMD : INTEGER)
b) SET ̲SUBP ̲ACCESS ̲PROFILE (R5, R6)
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R5 COMMAND
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
None
4.2.7.6.7.3 D̲A̲T̲A̲
C.ATTRIBUTES : SUBPROCESS ̲ATTRI@BUTES
C.SUBPROCESS ̲NO : SUBPROCESS ̲INDEX
C.CNO : LOGICAL ̲CHANNEL ̲NO ̲TYPE
C.PARAMS : COPSY ̲GARBLE ̲PARAMS
4.2.7.6.7.4 S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲
PROCEDURE SET ̲SUBP ̲ACCESS ̲PROFILE (CMD
BEGIN
C.PARAMS.ERROR ̲TYPE = COPSY ̲INT ̲ERROR
C.PARAMS.USER ̲ACTION = GIVE ̲UP
C.PARAMS.ERROR ̲COR = CEMCO ̲COR
C.PARAMS.LOC = SET SUBP ̲ACCESS ̲PROFILE
C.PARAMS.ERROR ̲INFO = NIL
C.ATTRIBUTES:PROFILE = 0
CMD EQ STOP?
CMD NE START? COPSY ̲SEND ̲GARBLE(NIL,C.PARAMS)
CASE C.CIRCUIT ̲PROFILE.CIRCUIT OF
TRC-PTOP? C.SUBPROCESS ̲NO = FIRST ̲TRC ̲PTOP
̲NO
SCARS ̲CISS? C.SUBPROCESS ̲NO = FIRST ̲SCARS ̲CCISS
̲NO
NICS ̲TARE? C.SUBPROCESS ̲NO = FIRST ̲NICS ̲TARE
̲NO
OTHER? COPSY ̲SEND ̲GARBLE(NIL,C.PARAMS)
END ̲CASE
C.SUBPROCESS ̲NO = C.SUBPROCESS ̲NO + C.CNO-1
C.ATTRIBUTESS.PROFILE = C.INITA ̲ACCESS ̲PROFILE LOG
OR
C.DEVICE ̲PROFILE.CLASS
C.ATTRIBUTES.PROFILE ̲FLAG = TRUE
CASE CHANGE ̲SUBPROCESS ̲ATTRIBUTES (C.SUBPROCESS ̲NO,
C.ATTRIBUTES)(CC):ERROR ̲OK
ERROR? ANALYZE ̲ERROR (CC,0)
END CASE
END ̲PROCEDURE