top - download
⟦6594be373⟧ Wang Wps File
Length: 37223 (0x9167)
Types: Wang Wps File
Notes: CPS/SDS/029
Names: »1744A «
Derivation
└─⟦20fb15aa2⟧ Bits:30006084 8" Wang WCS floppy, CR 0130A
└─ ⟦this⟧ »1744A «
WangText
…02……00……00……00……00…G…0a……00……00…G…0b…G…0e…G…0f…?…05…>…0b…>…0f…>…00…> >…05…=…0a…=…0b…=…0c…=…0e…=…0f…=
= =…07…<…0a…<…0d…<…0f…<…01……86…1 …02… …02… …02…
…02…CPS/SDS/029
…02…820514 …02……02…
SYSTEM STATUS AND CONTROL
DETAILED DESIGN SPECIFICATION…02……02…CAMPS
4.2.6 D̲e̲v̲i̲c̲e̲ ̲M̲o̲n̲i̲t̲o̲r̲i̲n̲g̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲
4.2.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 Device monitoring and Control (DEMCO) functions
are detailed in figure 4.2.6.1-1
The following types of devices are controlled by DEMCO:
P̲T̲P̲
Queues related to PTP device subprocess:
- command queue : PTP ̲CCQ
- circuit queue : PTP ̲CIQ
P̲T̲R̲
Queue related to PTR device subprocess:
- command queue: PTR ̲CCQ
L̲T̲P̲/̲R̲O̲P̲/̲O̲C̲R̲
Queue related to LTP/ROP/OCR device subprocesses:
- print queue : PRIS ̲PRINTQ
figure 4.2.6.1-1
4.2.6.1.1 S̲A̲D̲ ̲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 SAD is controlled by the supervisor.
Using the accept/non accept SAD command the supervisor
can open or close the connection (logical connection)
to a SAD.
4.2.6.1.2 D̲e̲v̲i̲c̲e̲ ̲P̲r̲o̲f̲i̲l̲e̲ ̲C̲h̲a̲n̲g̲e̲d̲
The supervisor command DEVICE ̲PROFILE ̲CHANGED specifies
that the classification of a device profile is changed.
DEMCO changes the classification of the device subprocess
queues according to the new classification of the device
profile. Special handling, encryption, item type and
appl.fields in the access profile are not changed.
4.2.6.1.3 Q̲u̲e̲u̲e̲,̲ ̲s̲u̲b̲p̲r̲o̲c̲e̲s̲s̲ ̲s̲e̲c̲u̲r̲i̲t̲y̲
Q̲u̲e̲u̲e̲ ̲a̲c̲c̲e̲s̲s̲ ̲p̲r̲o̲f̲i̲l̲e̲
After the time of initialisation the queue access profiles
of the device subprocess are changed only when specified
by the supervisor.
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 security key is turned to the off position or
the device is disconnected by the supervisor, the access
profile of the device subprocess is set to no rights
(all bits are set to zero).
Is the security key in the on position and is the device
connected by the supervisor, the access profile of
the device subprocess is set according to fig. 4.2.6.1.6-5
to fig. 4.2.6.1.6-8.
4.2.6.1.4 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.6.1.5 S̲A̲D̲ ̲E̲v̲e̲n̲t̲s̲ ̲M̲ ̲a̲n̲d̲ ̲C̲
The command START is sent to the SAD 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 or after detection
of a line error.
The command RESUME ̲PRINT is used to resume printing
action after a printer error or after a paper out.
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 printer/reader/punch
subprocess to stop processing when a complete message
is printed/read/punched.
After receipt of a "final close down" the subprocess
terminates all activities and dismantles the IO-connection.
4.2.6.1.6 I̲n̲i̲t̲i̲a̲l̲i̲z̲a̲t̲i̲o̲n̲
As the coroutine is started the internal DEMCO Data
are initialized and it is checked in the device profile
whether the device is connected or not. It is determined
from the device profile which kind of device is connected
and if the device is equipped with a security key the
status of the key is checked.
In the PTP subprocess the queue access profiles for
the command queue PTP ̲CCQ and PTP ̲CIQ are set by DEMCO
according to fig. 4.2.6.6-1 and fig. 4.2.6.1.6-2.
In the PTP subprocess the queue access profile for
the command queue PTR ̲CCQ is set by DEMCO according
to fig. 4.2.6.1.6-3.
In the printer subprocess the queue access profile
for the print queue PRIS ̲PRINTQ is set by DEMCO according
to fig. 4.2.6.1.6-4.
When the device is connected and the security key is
in the on position, the access profile of the device
subprocess is set by DEMCO according to fig. 4.2.6.1.6-5
to fig. 4.2.6.1.6-8.
If the device is disconnected or the security key is
in the off position, the access profile of the device
subprocess is not changed by DEMCO(the access profile
bits are all zero)
Figs. 4.2.6.1.6-1/2/3/4//5/6/7/8
4.2.6.1.7 E̲r̲r̲o̲r̲ ̲P̲r̲o̲c̲e̲s̲s̲i̲n̲g̲
DEMCO 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 SAD ̲OS or in the queue
SAD ̲RQ. An error is reported via the procedure
COPSY ̲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 ANALYZE ̲ERROR (CC).
Internal logical program errors are reported via
the procedure COPSY ̲SEND ̲GARBLE.
4.2.6.2 S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲
The Device Monitoring and Control (DEMCO) functions
are implemented in one coroutine per device.
The DEMCO program is decomposed as defined in fig.
4.2.6.2-1.
The program is implemented in 2 modules and a number
of common procedures.…86…1 …02… …02… …02… …02…
figure 4.2.6.2-1
4 states for DEMCO are defined:
- initial
- connected
- key-disconnected
- supv-disconnected
15 input types are defined:
- accept
- non-accept
- change-device-profile
- set-access-profiles
- start-cor
- close-initial
- close-final
- line error
- start-supv
- stop-supv
- key ̲on
- key ̲off
- paper ̲out
- paper ̲in
- invalid ̲input
Every input type and state defines the next state of
DEMCO 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 DEMCO is connected the next
state of DEMCO is supv ̲disconnected and the action
to be executed is disconnected ̲device.
See table 4.2.6.2-1
4.2.6.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 DEMCO fig. 4.2.6.3-1 showing data
and control logic is depicted overleaf.
A simplified flowgram for the Main program is shown
in fig. 4.2.6.3-2.
Two state diagrams for DEMCO are defined in fig. 4.2.6.3-3
and 4.2.6.3-4.
figure 4.2.6.2-1
Fig. 4.2.6.3-1
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
Figure 4.2.6.3-2
A simplified flowgram for the main program
figure 4.2.6.3-3 + 4.2.6.3-4
4.2.6.4 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
4.2.6.4.1 D̲E̲M̲C̲O̲ ̲M̲A̲I̲N̲
4.2.6.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.
It reads and interprets the operations send to the
coroutine. The type of input to the coroutine is determined.
A new state of DEMCO and action to take, according
to the type of input received, is calculated. The action
to perform is executed in the action module.
4.2.6.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.6.4.1.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
The DEMCO main module contains the following procedures,
see fig. 4.2.6.4.1.3-1.
a) C̲F̲H̲ ̲C̲ ̲C̲M̲D̲
The procedure determines the type of CFH command
sent to DEMCO.
b) S̲U̲P̲V̲ ̲C̲ ̲C̲M̲D̲
The procedure determines the type of supervisor
command sent to DEMCO.
c) I̲O̲C̲ ̲S̲T̲A̲T̲U̲S̲
The procedure determines the type of IOC status
sent to DEMCO.
figure 4.2.6.4.1.3-1
4.2.6.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
US ̲ACTION
D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
S̲S̲C̲ ̲C̲O̲M̲M̲O̲N̲
SAD ̲OS
SHORT ̲OS
:LOGICAL ̲DEVICE ̲NO ̲TYPE
D.LOCAL ̲DNO " range: 1..NO ̲OF ̲SAD
D̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲
VAR D.ACTION ̲TABLE,D.STATE ̲TABLE
D.STATE : STATE ̲TYPE
D.INPUT : INPUT ̲TYPE
D.ACTION: ACTION ̲TYPE
D.CMD : INTEGER
D.SUPV ̲QEL ̲REF : QEL ̲REFERENCE
L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
S̲S̲C̲ ̲C̲O̲M̲M̲O̲N̲
VAR D ̲OP : SHORT ̲OP ̲TYPE
D.CMD ̲TYPE : S.CMD ̲TYPE
4.2.6.4.1.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
PROCEDURE DEMCO ̲MAIN
BEGIN
EQUIVALENCE (RUNNING ̲COROUTINE,D:DEVICE ̲COROUTINE)
D.STATE = INITIAL
LOOP FOREVER
WAIT ̲OPSEM(SAD ̲OS (D.LOCAL ̲DNO) (D ̲OP)
D.CMD ̲TYPE = D ̲OP.CMD ̲TYPE
D.CMD = D.OP.CMD
D.CMD ̲TYPE NE SUPV ?
D.SUPV ̲QEL ̲REF = D ̲OP.REFERENCE
SIGNAL ̲OPSEM(SHORT ̲OS,D ̲OP)
CASE D.CMD ̲TYPE
CFH ̲COMMAND ? C̲F̲H̲ ̲D̲ ̲C̲M̲D̲
SUPV ̲COMMAND ? S̲U̲P̲V̲ ̲D̲ ̲C̲M̲D̲
US ̲ACTION ? I̲O̲C̲ ̲S̲T̲A̲T̲U̲S̲
OTHER ? D.INPUT = D.INVALID ̲INPUT
END CASE
D.ACTION = C.ACTION ̲TABLE (D.STATE,D.INPUT)
D.STATE = STATE ̲TABLE (D.STATE, D.INPUT)
A̲C̲T̲I̲O̲N̲ ̲M̲O̲D̲U̲L̲E̲ (D.ACTION)
END ̲LOOP
END PROCEDURE
PROCEDURE CFH ̲D ̲CMD
BEGIN
CASE D.CMD OF
SET ̲ACCESS ̲PROFILES? -D.INPUT=D.SET ̲ACCESS ̲PROFILES
START ̲COR ? - D.INPUT = D.START ̲COR
CLOSE ̲INITIAL ? - D.INPUT = D.CLOSE ̲INITIAL
CLOSE ̲FINAL ? D.INPUT = D.CLOSE ̲FINAL
START ̲SUPV ? - D.INPUT = D.START ̲SUPV
STOP ̲SUPV ? - D.INPUT = D.STOP ̲SUPV
LINE ̲ERROR ? - D.INPUT = D.LINE ̲ERROR
OTHER ? D.INPUT = D.INVALID ̲INPUT
END CASE
END PROCEDURE
PROCEDURE SUPV ̲D.CMD
BEGIN
CASE D.CMD OF
ACCEPT ̲SAD ? D.INPUT = D.ACCEPT
NON ̲ACCEPT ̲SAD ? D.INPUT = D.NON
̲ACCEPT
DEVICE ̲PROFILE ̲CHANGE ? D.INPUT=D.CHANGE
̲DEVICE ̲PROFILE
OTHER ? D.INPUT = D.INVALID
̲INPUT
END CASE
END PROCEDURE
PROCEDURE IOC ̲STATUS
BEGIN
CASE D.CMD OF
KEY ̲ON ? D.INPUT = D.KEY ̲ON
KEY ̲OFF ? D.INPUT = D.KEY ̲OFF
PAPER ̲LOW ? D.INPUT = D.PAPER ̲OUT
PAPER ̲HIGH ? D.INPUT = D.PAPER ̲IN
OTHER ? D.INPUT = D.INVALID ̲INPUT
END CASE
END PROCEDURE
4.2.6.4.2 A̲c̲t̲i̲o̲n̲ ̲M̲o̲d̲u̲l̲e̲
4.2.6.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 DEMCO ̲MAIN
is executed in this module.
4.2.6.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 (D.ACTION:ACTION ̲TYPE)
b) ACTION ̲MODULE (R5, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲s̲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.6.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.6.4.2.3-1
a) S̲E̲T̲ ̲P̲R̲O̲F̲I̲L̲E̲S̲ ̲P̲
The procedure initializes local DEMCO data and
the queue access profiles of the device subprocess
are set according to sec. 4.2.6.1.6.
b) D̲E̲M̲C̲O̲ ̲I̲N̲I̲T̲ ̲P̲
If the device is connected and the security key
(ONLY PTR/MTP) is in the on position, the access
profile of the device subprocess is set according
to sec. 4.2.6.1.6. Then the procedure sends a
START- command containing offer-id and logical
device number to the device subprocess.
figure 4.2.6.4.2.3-1
c) C̲O̲N̲N̲E̲C̲T̲ ̲D̲E̲V̲I̲C̲E̲ ̲P̲
The procedure sends a START-command containing
offer-id to the device subprocess. Also the classification
of the device subprocess profile is changed to
the classification of the device profile.
d) D̲I̲S̲C̲O̲N̲N̲E̲C̲T̲ ̲D̲E̲V̲I̲C̲E̲ ̲P̲
The procedure sends a STOP-command to the device
subprocess and it dismantles the connection used
by the device subprocess. The device subprocess
profile is changed to no rights.
e) C̲H̲A̲N̲G̲E̲ ̲D̲E̲V̲I̲C̲E̲ ̲P̲R̲O̲F̲I̲L̲E̲ ̲P̲
The procedure changes the classification in the
profiles of the device subprocess queues.
f) S̲E̲N̲D̲ ̲R̲E̲P̲L̲Y̲ ̲P̲
The procedure sends an acknowledgement to the supervisor.
g) I̲ ̲C̲L̲O̲S̲E̲ ̲C̲O̲N̲N̲E̲C̲T̲E̲D̲ ̲D̲E̲V̲I̲C̲E̲ ̲P̲ ̲
The procedure sends a CLOSE ̲DOWN ̲INITIAL-command
to a device subprocess where the device is connected.
h) F̲ ̲C̲L̲O̲S̲E̲ ̲C̲O̲N̲N̲E̲C̲T̲E̲D̲ ̲D̲E̲V̲I̲C̲E̲ ̲P̲
The procedure sends a CLOSE ̲DOWN ̲FINAL-command
to a device subprocess where the device is connected.
It dismantles the connection used by the device
subprocess upon reception of a reply. The the device
subprocess profile is changed to no rights and
the CFH ̲S semaphore counter is increased.
i) F̲ ̲C̲L̲O̲S̲E̲ ̲D̲I̲S̲C̲O̲N̲N̲E̲C̲T̲E̲D̲ ̲D̲E̲V̲I̲C̲E̲ ̲P̲
The procedure increases the CFH ̲S semaphore counter.
j) R̲E̲S̲U̲M̲E̲ ̲P̲R̲I̲N̲T̲ ̲P̲
The procedure sends a RESUME ̲PRINT-command to the
device subprocess.
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.
l) N̲O̲ ̲A̲C̲T̲I̲O̲N̲ ̲P̲
The procedure performs nothing.
m) S̲T̲O̲P̲ ̲D̲E̲V̲I̲C̲E̲ ̲P̲
The procedure sends a STOP-command to the device
subprocess and it dismantles the connection used
by the device subprocess. The the device subprocess
profile is changed to no rights.
n) S̲T̲A̲R̲T̲ ̲D̲E̲V̲I̲C̲E̲ ̲P̲
The procedure changes the field KEY ̲STATUS to ON
in the DEVICE PROFILE, changes the classification
of the subprocess profile to the classification
of the device and sends a START command to the
device subprocess.
4.2.6.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 ̲ROP ̲NO
CONST OCR ̲NO
CONST FIRST ̲PTR ̲NO
CONST PTP ̲NO
CFH ̲S
VAR
D.DNO : LOGICAL ̲DEVICE ̲NO ̲TYPE
D.LTUX ̲LINE ̲REC : LTUX ̲LINE ̲REC
D.LINE ̲TABLE : PORT ̲TABLE ̲TYPE
D̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲
CONST D.TEP ̲PROFILE "unclass, none, no, none, none
CONST D.PTP ̲PTR ̲PROFILE "unclass, all, yes, message
only,
none
VAR
D.COMMAND ̲Q : QUEUE ̲REFERENCE
D.PRINT ̲Q : QUEUE ̲REFERENCE
D.ALT ̲Q : QUEUE ̲REFERENCE
D.REPLY ̲Q : QUEUE ̲REFERENCE
D.REPORT ̲Q : QUEUE ̲REFERENCE
D.STATE : STATE ̲TYPE
D.KEY ̲BUF : KEY ̲BUF ̲TYPE
D.DEVICE ̲PROFILE : DEVICE ̲PROFILE ̲TYPE
D.SUBP ̲NO : SUBPROCESS ̲INDEX
D.ATTRIBUTES: SUBPROCESS ̲ATTRIBUTES
D.ACCESS ̲PROFILE : ACCESS ̲PROFILE
D.CC : INTEGER
D.REPLY : BOOLEAN
D.SEND ̲BUF : TMS ̲PARAMS
L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
D.COM ̲1, D.COM ̲2: INTEGER
D.PARAMS: COPSY ̲GARBLE ̲PARAMS
4.2.6.4.2 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
PROCEDURE ACTION ̲MODULE (D.ACTION: ACTION ̲TYPE)
BEGIN
D.PARAMS.ERROR ̲TYPE = COPSY ̲SHORT ̲ERROR ̲INF
D.PARAMS.USER ̲ACTION = CONTINUE
D.PARAMS.ERROR ̲COR = DEMCO ̲COR
D.PARAMS.LOC = ACTION ̲MODULE
D.PARAMS.ERROR ̲INFO = D.ACTION
CASE D.ACTION OF
SET ̲PROFILE? S̲E̲T̲ ̲P̲R̲O̲F̲I̲L̲E̲S̲ ̲P̲
DEMCO ̲INIT? D̲E̲M̲C̲O̲ ̲I̲N̲I̲T̲ ̲P̲
CONNECT ̲DEVICE? C̲O̲N̲N̲E̲C̲T̲ ̲D̲E̲V̲I̲C̲E̲ ̲P̲
DISCONNECT ̲DEVICE? D̲I̲S̲C̲O̲N̲N̲E̲C̲T̲ ̲D̲E̲V̲I̲C̲E̲ ̲P̲
CHANGE ̲DEVICE ̲PROFILE? C̲H̲A̲N̲G̲E̲ ̲D̲E̲V̲I̲C̲E̲ ̲P̲R̲O̲F̲I̲L̲E̲ ̲P̲
SEND ̲REPLY? S̲E̲N̲D̲ ̲R̲E̲P̲L̲Y̲ ̲P̲
I ̲CLOSE ̲CONNECTED ̲DEVICE? I̲ ̲C̲L̲O̲S̲E̲ ̲C̲O̲N̲N̲E̲C̲T̲E̲D̲ ̲D̲E̲V̲I̲C̲E̲
̲P̲
F ̲CLOSE ̲CONNECTED ̲DEVICE? F̲ ̲C̲L̲O̲S̲E̲ ̲C̲O̲N̲N̲E̲C̲T̲E̲D̲ ̲D̲E̲V̲I̲C̲E̲
̲P̲
F ̲CLOSE ̲DISCONNECTED ̲DEVICE? F̲ ̲C̲L̲O̲S̲E̲ ̲D̲I̲S̲C̲O̲N̲N̲E̲C̲T̲E̲D̲ ̲D̲E̲V̲I̲C̲E̲
̲P̲
RESUME ̲PRINT? R̲E̲S̲U̲M̲E̲ ̲P̲R̲I̲N̲T̲ ̲P̲
ILLEGAL ̲ACTION I̲L̲L̲E̲G̲A̲L̲ ̲A̲C̲T̲I̲O̲N̲ ̲P̲
STOP ̲DEVICE? S̲T̲O̲P̲ ̲D̲E̲V̲I̲C̲E̲ ̲P̲
NO ̲ACTION ? N̲O̲ ̲A̲C̲T̲I̲O̲N̲ ̲P̲
START ̲DEVICE? S̲T̲A̲R̲T̲ ̲D̲E̲V̲I̲C̲E̲ ̲P̲
LINE ̲ERROR? L̲I̲N̲E̲ ̲E̲R̲R̲O̲R̲ ̲P̲
OTHER ? C̲O̲P̲S̲Y̲ ̲S̲E̲N̲D̲ ̲G̲A̲R̲B̲L̲E̲ (NIL,D.PARAMS)
N̲O̲ ̲A̲C̲T̲I̲O̲N̲ ̲P̲
END
END PROCEDURE
PROCEDURE SET ̲PROFILES ̲P
BEGIN
D.PARAMS.ERROR ̲TYPE = COPSY ̲INT ̲ERROR
D.PARAMS-USER ̲ACTION = GIVE ̲UP
D.PARAMS.LOC = SET ̲PROFILES ̲P
D.REPLY ̲Q.MAIN ̲QUEUE = SAD ̲RQ
D.ALT ̲Q.MAIN ̲QUEUE = SAD ̲RQ
D.ALT ̲Q.SUB ̲QUEUE = D.DNO
D.REPORT ̲Q.MAIN ̲QUEUE = SPIP ̲REPQ
D.REPORT ̲Q.SUB ̲QUEUE = 0
D.PRINT ̲Q.MAIN ̲QUEUE = PRIS ̲PRINTQ + D.DNO
D.PRINT ̲Q.SUB ̲QUEUE = 0
D.COMMAND ̲Q.MAIN ̲QUEUE = PRIS ̲CMDQ + D.DNO
D.COMMAND ̲Q.SUB ̲QUEUE = 0
D.CMD ̲ACCESS ̲PROFILE = D.ROP ̲CMD ̲PROFILE
D.PRINT ̲ACCESS ̲PROFILE = D.ROP ̲PRINT ̲PROFILE
D.KEY ̲BUF.KEY = D.DNO
SEARCH ̲ENTRY(DEVICE ̲TABLE,D,KEY ̲BUF,ALL,D.SEND ̲BUF)
(D.DEVICE ̲PROFILE)
D.DEVICE = D.DEVICE ̲PROFILE.DEVICE ̲TYPE
D.DEVICE EQ LTP? CASE D.DEVICE ̲PROFILE.LTP ̲MODE
OF
ROP? D.DEVICE = LTP ̲POP
PTR? D.DEVICE = LTP ̲PTR
OTHER? D.PARAMS.ERROR ̲INFO=D.DEVICE
̲
PROFILE.LTP
̲MODE
C̲O̲P̲S̲Y̲ ̲S̲E̲N̲D̲ ̲G̲A̲R̲B̲L̲E̲(NIL,D.PARMS)
END ̲CASE
CASE D.DEVICE OF
PTP? D.CMD ̲ACCESS ̲PROFILE = D.PTP ̲CMD ̲PROFILE
D.PRINT ̲ACCESS ̲PROFILE = D.PTP ̲PRINT
̲PROFILE
D.COMMAND ̲Q.MAIN ̲QUEUE = PTP ̲CCQ
D.PRINT ̲Q.MAIN ̲QUEUE = PTP ̲CIQ
PTR?
LTP ̲PTR? D.INIT ̲ACCESS ̲PROFILE=D.PTR ̲PROFILE
D.COMMAND ̲Q.MAIN ̲QUEUE=PTR ̲CCQ+D.DNO
OCR? D.COMMAND ̲Q.MAIN ̲QUEUE=OCP ̲CMDQ
MTP ̲ROP?
LTP ̲ROP?
OTHER? D.PARAMS.ERROR ̲INFO = D.DEVICE
C̲O̲P̲S̲Y̲ ̲S̲E̲N̲D̲ ̲G̲A̲R̲B̲L̲E̲ (NIL,D.PARAMS)
END ̲CASE
D.DEVICE EQ OCR?
D.ACCESS ̲PROFILE = D.CMD ̲ACCESS ̲PROFILE LOGOR
D.DEVICE ̲PROFILE.CLASS
CASE SET ̲P
̲Q)
(CC): ERROR ̲OK
ERROR? ANALYZE ̲ERROR (CC,0)
END ̲CASE
D.DEVICE EQ (PTR OR LTP ̲PTR) ?
D.ACCESS ̲PROFILE = D.PRINT ̲ACCESS ̲PROFILE LOGOR
D.DEVICE ̲PROFILE.CLASS
CASE SET ̲PROFILE (D.ACCESS ̲PROFILE,D.COMMAND-Q,D.ALT
̲Q)
(CC): ERROR ̲OK
ERROR? ANALYZE ̲ERROR (CC,0)
END ̲CASE
END ̲PROCEDURE
PROCEDURE DEMCO ̲INIT ̲P
BEGIN
D.PARAMS.ERROR ̲TYPE = COPSY ̲INT ̲ERROR
D.PARAMS.USER ̲ACTION = GIVE ̲UP
D.LOG = DEMCO ̲INIT ̲P
D.PARAMS.ERROR ̲INFO = NIL
D.KEY.BUF = D.DNO
SEARCH ̲ENTRY(DEVICE ̲TABLE,D.KEY ̲BUF, ALL, D.SEND ̲BUF)
(D.DEVICE ̲PROFILE)
D.A = D.DEVICE ̲PROFILE.CONNECTED
D.B = TRUE
GET ̲KEY ̲STATUS (D.KEY)
D.KEY EQ ON?
D.B = FALSE
D.A LOGAND D.B EQ FALSE ? D.STATE=SUPV ̲DISCONNECTED
D.A EQ FALSE? D.STATE=SUPV ̲DISCONNECTED
D.B EQ FALSE? D.STATE ̲KEY ̲DISCONNECTED
D.KEY ̲BUF.KEY=D.DEVICE ̲PROFILE.PORT ̲ID.TABLE
D.LINE ̲TABLE=D.DEVICE ̲PROFILE.PORT ̲ID.TABLE
SEARCH ̲ENTRY (LTUX ̲LINE ̲TABLE,D.KEY ̲BUF, All,D.SEND ̲BUF)
(D.LTUX ̲LINE ̲REC)
D.COM ̲1 = D.LTUX ̲LINE ̲REC.TYPE ̲DEV
D.COM ̲2 = D.DEVICE ̲PROFILE.DEVICE ̲TYPE
D.COM ̲1 EQ D.COM ̲2 ?
C̲O̲P̲S̲Y̲ ̲S̲E̲N̲D̲ ̲G̲A̲R̲B̲L̲E̲ (NIL,D. PARAMS)
C̲R̲E̲A̲T̲E̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N̲
SET SUBP ACCESS PROFILE (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 ̲SAD) (D.REPLY)
D.REPLY EQ OK?
S̲E̲N̲D̲ ̲W̲A̲R̲N̲I̲N̲G̲ ̲R̲E̲P̲O̲R̲T̲ (SOFTWARE ̲ERROR)
D.STATE = DISCONNECTED
C̲U̲T̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N̲
END PROCEDURE
PROCEDURE CHANGE ̲DEVICE ̲PROFILE ̲P
BEGIN
D.KEY ̲BUF.KEY = D.DNO
SEARCH ̲ENTRY(DEVICE ̲TABLE, D.KEY ̲BUF, ALL, D.SEND ̲BUF)
(D.DEVICE ̲PROFILE)
D.ACCESS ̲PROFILE = D.INIT ̲ACCESS ̲PROFILE LOGOR D.DEVICE
̲
PROFILE.
CLASS
CASE SET ̲PROFILE (D.ACCESS ̲PROFILE, D.COMMAND ̲Q, D.ALT
̲Q)
(D.CC) : ERROR ̲OK
ERROR ? ANALYZE ̲ERROR (D.CC, 0)
END
D.DEVICE ̲PROFILE.DEVICE ̲TYPE EQ PTR ?
CASE SET ̲PROFILE (D.ACCESS ̲PROFILE, D.PRINT ̲Q, D.ALT ̲Q)
(D.CC) : ERROR ̲OK
ERROR ? ANALYZE ̲ERROR (D.CC, 0)
END
S̲E̲N̲D̲ ̲R̲E̲P̲L̲Y̲ ̲T̲O̲ ̲S̲U̲P̲V̲ (OK)
END PROCEDURE
PROCEDURE CONNECT ̲DEVICE ̲P
BEGIN
D.KEY ̲BUF.KEY = D.DNO
UPDATE ̲ENTRY (DEVICE ̲TABLE,D.SEND ̲BUF,D.KEY ̲BUF,
CONNECTED,TRUE)
G̲E̲T̲ ̲K̲E̲Y̲ ̲S̲T̲A̲T̲U̲S̲ (D.KEY)
D.KEY EQ OFF? D.STATE = KEY ̲DISCONNECTED
D.KEY ̲BUF.KEY = D.DNO
UPDATE ̲ENTRY (DEVICE ̲TABLE,D.SEND ̲BUF,D.KEY ̲BUF,
KEY ̲STATUS,ON)
C̲R̲E̲A̲T̲E̲ ̲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̲ (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 ̲SAD) (D.REPLY)
S̲E̲N̲D̲ ̲R̲E̲P̲L̲Y̲ ̲T̲O̲ ̲S̲U̲P̲V̲ (D.REPLY)
D.REPLY EQ OK?
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲ (STOP)
D.STATE = SUPV ̲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 ̲DEVICE ̲P
BEGIN
S̲E̲N̲D̲ ̲C̲O̲M̲M̲A̲N̲D(STOP) (D.REPLY)
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲ (STOP)
D.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̲
D.KEY ̲BUF.KEY = D.DNO
UPDATE ̲ENTRY (DEVICE ̲TABLE,D.SEND ̲BUF,
D.KEY ̲BUF,KEY ̲STATUS,OFF)
S̲E̲N̲D̲ ̲R̲E̲P̲L̲Y̲ ̲T̲O̲ ̲S̲U̲P̲V̲ (OK)
END PROCEDURE
PROCEDURE I ̲CLOSE ̲CONNECTED ̲DEVICE ̲P
BEGIN
S̲E̲N̲D̲ ̲C̲O̲M̲M̲A̲N̲D̲ (CLOSE ̲DOWN ̲INITIAL) (D.REPLY)
D.REPLY EQ OK?
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲ (STOP)
C̲U̲T̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N̲
D.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 ̲DEVICE ̲P
BEGIN
S̲E̲N̲D̲ ̲C̲O̲M̲M̲A̲N̲D (CLOSE ̲DOWN ̲FINAL) (D.REPLY)
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲ (STOP)
C̲U̲T̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N
SIGNAL ̲SEM (CFH ̲S)
END PROCEDURE
PROCEDURE F ̲CLOSE ̲DISCONNECTED ̲DEVICE ̲P
BEGIN
SIGNAL ̲SEM (CFH ̲S)
END PROCEDURE
PROCEDURE STOP ̲DEVICE ̲P
BEGIN
S̲E̲N̲D̲ ̲C̲O̲M̲M̲A̲N̲D̲ (STOP) (D.REPLY)
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲ ̲(STOP)
C̲U̲T̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N̲
END PROCEDURE
PROCEDURE NO ̲ACTION ̲P
BEGIN
END PROCEDURE
PROCEDURE RESUME ̲PRINT ̲P
BEGIN
S̲E̲N̲D̲ ̲C̲O̲M̲M̲A̲N̲D̲ (RESUME ̲PRINT) (D.REPLY)
D.REPLY EQ OK?
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲(̲STOP)
C̲U̲T̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N̲
D.STATE = DISCONNECTED
S̲E̲N̲D̲ ̲W̲A̲R̲N̲I̲N̲G̲ ̲R̲E̲P̲O̲R̲T̲ (SOFTWARE ̲ERROR)
END PROCEDURE
PROCEDURE SEND ̲REPLY ̲P
BEGIN
C̲U̲T̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N̲
S̲E̲N̲D̲ ̲R̲E̲P̲L̲Y̲ ̲T̲O̲ ̲S̲U̲P̲V̲ (OK)
END PROCEDURE
PROCEDURE ILLEGAL ̲ACTION ̲P
BEGIN
D.PARAMS.ERROR ̲TYPE = COPSY ̲SHORT ̲ERROR
D.PARAMS.USER ̲ACTION = CONTINUE
D.PARAMS.ERROR ̲COR = DEMCO ̲COR
D.PARAMS:LOC = ILLEGAL ̲ACTION ̲P
D.PARAMS.ERROR ̲INFO = D.INPUT
C̲O̲P̲S̲Y̲ ̲S̲E̲N̲D̲ ̲G̲A̲R̲B̲L̲E̲ (NIL,D.PARAMS)
END ̲PROCEDURE
PROCEDURE START ̲DEVICE ̲P
BEGIN
D.KEY ̲BUF.KEY = D.DNO
UPDATE ̲ENTRY (DEVICE ̲TABLE,D.SEND ̲BUF,D.KEY ̲BUF,
KEY ̲STATUS,ON)
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲ (START)
S̲E̲N̲D̲ ̲C̲O̲M̲M̲A̲N̲D̲ (START SAD) (D.REPLY)
D.REPLY EQ OK?
S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ PROFILE (STOP)
CUT ̲CONNECTION
S̲E̲N̲D̲ ̲W̲A̲R̲N̲I̲N̲G̲ ̲R̲E̲P̲O̲R̲T̲ ̲(SOFTWARE ̲ERROR)
D.STATRE = SUPV ̲DISCONNECTED
END ̲PROCEDURE
4.2.6.5 D̲E̲M̲C̲O̲ ̲C̲o̲m̲m̲o̲n̲ ̲D̲a̲t̲a̲
STATE ̲TYPE = (INITIAL, CONNECTED,
KEY ̲DISCONNECTED, SUPV ̲DISCONNECTED)
ACTION ̲TYPE = (SET ̲PROFILES, DEMCO ̲INIT, CONNECT ̲DEVICE,
DISCONNECT ̲DEVICE, CHANGE ̲DEVICE ̲PROFILE,
SEND ̲REPLY, I ̲CLOSE ̲CONNECTED ̲DEVICE,
F ̲CLOSE ̲CONNECTED ̲DEVICE,
F ̲CLOSE ̲DISCONNECTED ̲DEVICE, RESUME ̲PRINT,
ILLEGAL ̲ACTION, NO ̲ACTION, STOP ̲DEVICE)
INPUT ̲TYPE = (D.ACCEPT, D.NON ̲ACCEPT, D.CHANGE ̲DEVICE ̲PROFILE,
D.SET ̲ACCESS ̲PROFILES, D.START ̲COR, D.CLOSE ̲
INITIAL,
D.CLOSE ̲FINAL, D.LINE ̲ERROR, D.START ̲SUPV,
D.STOP ̲SUPV, D.KEY ̲ON, D.KEY ̲OFF, D.PAPER ̲OUT)
D.PAPER ̲IN, D.INVALID ̲INPUT)
VAR D.STATE :STATE ̲TYPE
D.INPUT : INPUT ̲TYPE
D.ACTION : ACTION ̲TYPE
D.CMD : INTEGER
D.SUPV ̲QEL ̲REF : QEL ̲REFERENCE
D.COMMAND ̲Q : QUEUE ̲REFERENCE
D.ALT ̲Q : QUEUE ̲REFERENCE
D.REPORT ̲Q : QUEUE ̲REFERENCE
D.KEY ̲BUF : KEY ̲BUF ̲TYPE
D.ATTRIBUTES : SUBPROCESS ̲ATTRIBUTES
D.ACCESS ̲PROFILE : ACCESS ̲PROFILE
D.REPLY : BOOLEAN
D.PRINT ̲Q : QUEUE ̲REFERENCE
D.DEVICE ̲PROFILE : DEVICE ̲PROFILE
D.SUBP ̲NO : SUBPROCESS ̲INDEX
4.2.6.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.6.6.1 C̲R̲E̲A̲T̲E̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N̲
4.2.6.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.6.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.6.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
VAR D.LINE ̲TABLE : PORT ̲TABLE ̲TYPE
LTUX ̲CON = ARRAY (1..MAX ̲LTUX) OF FDCB-INDEX
D̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲
VAR D.KEY ̲BUF : KEY ̲BUF ̲TYPE
D.DEVICE ̲PROFILE : DEVICE ̲TYPE
D.CFH ̲CONN: FDCB ̲INDEX
D.CONN : FDCB ̲INDEX
D.OFFER ̲ID : OFFER ̲ID ̲TYPE
L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR D.LINE ̲REC : NEW ̲TMS ̲DEVICE (TMS)
D.CHAIN ̲STATUS : BOOLEAN
D.LTUX ̲LINE ̲REC : LTUX ̲LINE ̲REC
D.DEVICE ̲TYPE : PTP..LTP
D.SUBP ̲TYPE : SUBPROCESS ̲TYPE
D.PARAMS : COPSY ̲GARBLE ̲PARAMS
4.2.6.6.1.4 P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲D̲e̲s̲i̲g̲n̲
PROCEDURE CREATE ̲CONNECTION
BEGIN
D.PARAMS.ERROR ̲TYPE = COPSY ̲INT ̲ERROR
D.PARAMS.USER ̲ACTION = GIVE ̲UP
D.PARAMS.ERROR ̲COR = DEMCO ̲COP
D.PARAMS:LOC = CREATE ̲CONNECTION
D.PARAMS.ERROR ̲INFO = NIL
D.KEY ̲BUF.KEY = D.CHANNEL ̲PROFILE.PORT ̲ID
D.LINE ̲TABLE = D.CHANNEL ̲PROFILE.PORT ̲ID.TABLE
SEARCH ̲ENTRY (LTUX ̲LINE ̲TABLE,D.KEY ̲BUF,ALL,D.SEND ̲BUF)
(D.LTUX ̲LINE ̲REC)
D.CFH ̲CONN=LTUX ̲CON(D.LTUX ̲LINE ̲REC.LTUX ̲NO)
D.CHAIN ̲STATUS=D.LTUX ̲LINE ̲REC.CHAIN ̲STATUS
D.CHAIN ̲STATUS EQ FALSE ? COPSY ̲SEND ̲GARBLE(NIL,D.PARAMS)
D.CFH ̲CONN EQ -1 ? COPSY ̲SEND ̲GARBLE(NIL,D.PARAMS)
D.LINE ̲REC.SDA = (D.LTUX ̲LINE ̲REC.NO-1) MODULO 4
D.LINE ̲REC.U ̲SDID.PROFILE ̲TYPE=DEVICE ̲P
D.LINE ̲REC.U ̲SDID.LOGICAL ̲NO = D.DNO
D.LINE ̲REC.SD ̲TYPE = TERMINAL
D.LINE ̲REC.ACCESS ̲LEVEL = 0
D.LINE ̲REC.SELECT ̲BY ̲TMS = FALSE
D.DEVICE ̲PROFILE.DEVICE ̲TYPE EQ OCR ?
D.LINE ̲REC.PARAMS=OTH ̲LTUX ̲PARAMS ̲D
D.LINE ̲REC.PROTOCOL ̲ID = LTUX ̲OTH ̲PROTOCOL
D.LINE ̲REC.PARAMS=OCR ̲LTUX ̲PARAMS ̲D
D.LINE ̲REC.PARAMS=LTUX ̲OCR ̲PROTOCOL
CREATE ̲SUBDEVICE(D.CFH ̲CONN.D.LINE ̲REC,DEVICE ̲SE)
(D.CONN,D.CC) :ERROR ̲OK
ERROR ? ANALYZE ̲ERROR (D.CC, 0)
D.DEVICE ̲TYPE= D.DEVICE ̲PROFILE.DEVICE ̲TYPE
D.DEVICE ̲TYPE EQ ROP? D.SUBP ̲TYPE= ROP ̲S
D.DEVICE ̲TYPE EQ OCR? D.SUBP.TYPE= OCR ̲S
D.DEVICE ̲TYPE EQ PTR? D.SUBP ̲TYPE = PTR ̲S
D.SUBP ̲TYPE = PTP ̲S
D.ACCESS.ACCESS=SUBP ̲TABLE(D.SUBP ̲TYPE).CHILD ̲TMS ̲ACCESS
̲RIGHTS
D.PROCESS ̲NO=SUBP ̲PROCESS ̲TABLE(SUBPROCESS ̲NO)
D.ACCESS.USER.USER ̲GROUP=D.PROCESS ̲NO
D.ACCESS.SEQ ̲NBR=PROCESS ̲TABLE(PROCESS ̲NO).PROC ̲ID
OFFER (D.CONN,D.ACCESS)(D.OFFER ̲ID,D.CC) :ERROR ̲OK
ERROR ? ANALYZE ̲ERROR (D.CC, 0)
END PROCEDURE
4.2.6.6.2 S̲E̲T̲ ̲D̲A̲M̲O̲S̲ ̲L̲I̲N̲E̲ ̲P̲R̲O̲F̲I̲L̲E̲
4.2.6.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.6.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̲
R 6 link
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
None
4.2.6.6.2.3 D̲a̲t̲a̲
D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
D̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲
VAR D.CONN : FDCB ̲INDEX
VAR D.CC : INTEGER
L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR D.SECURITY ̲PROFILE:WORD
4.2.6.6.2.4 P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲D̲e̲s̲i̲g̲n̲
PROCEDURE SET ̲DAMOS ̲LINE ̲PROFILE
BEGIN
D.SECURITY ̲PROFILE = D.DEVICE ̲PROFILE.CLASS LOGAND
USE ̲2 ̲FIRST ̲BIT
CASE CHANGE ̲PROFILE (D.CONN,D.SECURITY ̲PROFILE
(CC) : ERROR ̲OK
ERROR ? ANALYZE ̲ERROR (CC, 0)
END ̲CASE
END PROCEDURE
4.2.6.6.3 S̲E̲N̲D̲ ̲R̲E̲P̲L̲Y̲ ̲T̲O̲ ̲S̲U̲P̲V̲
4.2.6.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.6.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 (REPLY:REPLY ̲TYPE)
b) SEND ̲REPLY ̲TO ̲SUPV (R5, R6)
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R 5 REPLY
R 6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
None
4.2.6.6.3.3 D̲a̲t̲a̲
VAR D.TIME : TIME ̲TYPE
S̲S̲C̲ ̲C̲O̲M̲M̲O̲N̲
VAR D.DNO : LOGICAL ̲DEVICE ̲NO ̲TYPE
D̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲
VAR D.CMD : INTEGER
VAR D.SUPV ̲QEL ̲REF: QEL ̲REFERENCE
VAR D.SEND ̲PARAMS : SEND ̲PARAMS ̲TYPE
VAR D.CC : INTEGER
REPLY ̲TYPE=(OK,VALIDATION ̲NOT ̲OK,EXECUTION ̲NOT
̲OK)
4.2.6.6.3.4 P̲R̲O̲C̲E̲D̲U̲R̲E̲ ̲D̲E̲S̲I̲G̲N̲
PROCEDURE SEND ̲REPLY ̲TO ̲SUPV (REPLY: REPLY ̲TYPE)
BEGIN
D.SEND ̲PARAMS.INFORMATION ̲TYPE = TRUE
D.SEND ̲PARAMS.CHECK ̲P ̲STATUS = FALSE
D.SEND ̲PARAMS.HEADER.MAINTYPE = ACK
D.SEND ̲PARAMS.HEADER.SUBTYPE = SSC ̲ACK
D.SEND ̲PARAMS.FLAGS = D.REPLY
D.SEND ̲PARAMS.HEADER ̲INF = D.CMD
D.SEND ̲PARAMS.INFORMATION (3) = D.DNO
READ ̲TIME (F ̲TIME ̲TYPE)(D.SEND,̲PARAMS.INFORMATION(1)):ERROR
̲OK
ERROR ? ANALYZE ̲ERROR (CC, 0)
SEND ̲REPLY (D.SEND ̲PARAMS, D.SUPV ̲QEL ̲REF, D.SUPV ̲QEL
̲REF)
(CC) : ERROR ̲OK
ERROR ? ANALYZE ̲ERROR (CC, 0)
END
DISMANTLE (D.SUPV ̲QEL ̲REF)(CC):ERROR ̲OK
ERROR ? ANALYZE ̲ERROR (CC, 0)
END
END PROCEDURE
4.2.6.6.4 C̲U̲T̲ ̲C̲O̲N̲N̲E̲C̲T̲I̲O̲N̲
4.2.6.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
device subprocess .
4.2.6.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̲
R 6 link
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
None
4.2.6.6.4.3 D̲a̲t̲a̲
D̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲
VAR D.CONN : FDCB ̲INDEX
4.2.6.6.4.4 P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲D̲e̲s̲i̲g̲n̲
PROCEDURE CUT ̲CONNECTION
BEGIN
DISMANTLE (D.CONN) (CC) : ERROR ̲OK
ERROR ? ANALYZE ̲ERROR (CC, 0)
D.KEY ̲BUF.KEY = D.DNO
UPDATE ̲ENTRY (DEVICE ̲TABLE,D.SEND ̲BUF,D-KEY ̲BUF,
CONNECT ̲KEY ̲MASK,RESET)
END PROCEDURE
4.2.6.6.5 S̲E̲N̲D̲ ̲C̲O̲M̲M̲A̲N̲D̲
4.2.6.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 device subprocess.
A reply from the subprocess is awaited, but is subject
to timeout.
4.2.6.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 (D.CMD : INTEGER) (D.REPLY:BOOLEAN)
b) SEND ̲COMMAND (R5, R6) (R5)
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R 5 COMMAND
R 6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R 5 reply from the device subprocess
4.2.6.6.5.3 D̲a̲t̲a̲
D̲E̲M̲C̲O̲ ̲C̲O̲M̲M̲O̲N̲
VAR D.CMD : INTEGER
VAR D.REPLY : BOOLEAN
VAR D.CMD ̲Q : QUEUE ̲REFERENCE
VAR D.TIME : SECONDS
VAR D.WRK : ARRAY (1..16) OF INTEGER
VAR D.ATT : QEL ̲ATTRIBUTES
VAR D.QEL : QEL ̲REFERENCE
VAR D.SUBQ : SUBQUEUE ̲INDEX
VAR D.CC : INTEGER
VAR D.SEND ̲PARAMS : SEND ̲PARAMS TYPE
VAR D.STATE : STATE ̲TYPE
VAR D.REPLY ̲Q : QUEUE ̲REFERENCE
VAR D.OFFER ̲ID = ARRAY (1..2) OF USER ̲CONNECTION ̲TYPE
REPLY ̲TYPE =(OK,VALIDATION ̲NOT ̲OK,EXECUTION ̲NOT ̲OK)
4.2.6.6.5.4 P̲R̲O̲C̲E̲D̲U̲R̲E̲ ̲D̲E̲S̲I̲G̲N̲ ̲
PROCEDURE SEND ̲COMMAND (D.CMD: INTEGER)(D.REPLY: REPLY
̲TYPE)
BEGIN
D.REPLY = EXECUTION ̲NOT ̲OK
D.SEND ̲PARAMS.HEADER.INFORMATION ̲TYPE = TRUE
D.SEND ̲PARAMS.CHECKP ̲STATUS=FALSE
D.SEND ̲PARAMS.HEADER.MAINTYPE=SSC ̲COMMAND
D.CMD NE (CLOSE ̲DOWN ̲INITIAL OR CLOSE ̲DOWN ̲FINAL) ?
D.SEND ̲PARAMS.HEADER.SUBTYPE = CLOSE ̲DOWN
D.CMD NE CLOSE ̲DOWN ̲INITIAL ?
D.SEND ̲PARAMS.HEADER.FLAGS = 0
D.SEND ̲PARAMS.HEADER.FLAGS = 1
D.SEND ̲PARAMS.HEADER.SUBTYPE = D.CMD
D.CMD NE START ̲SAD ?
D.SEND ̲PARAMS.HEADERINF = D.OFFER ̲ID
D.SEND ̲PARAMS.INFORMATION (1) = D.DNO
SEND ̲REQUEST (D.SEND ̲PARAMS,NIL,D.COMMAND ̲Q,D.REPLY ̲Q)
(D.CC) : ERROR ̲OK
ERROR ? ANALYZE ̲ERROR (D.CC, 0)
D.TIME = 2
WAIT ̲TIME ̲LIMITED ̲ON ̲QUEUE (D.REPLY ̲Q, D.TIME, D.WRK)
(D.QEL)
D.CC EQ OK ? D.REPLY = OK
S̲E̲N̲D̲ ̲W̲A̲R̲N̲I̲N̲G̲ ̲R̲E̲P̲O̲R̲T̲ (SOFTWARE ̲ERROR)
D.PARAMS.ERROR ̲TYPE = COPSY ̲Q ̲ERROR
D.PARAMS-USER ̲ACTION = CONTINUE
D.PARAMS.ERROR ̲COR = DEMCO ̲COR
D.PARAMS.LOC = SEND ̲COMMAND
D.ERROR ̲INFO = SAD ̲RQ
C̲O̲P̲S̲Y̲ ̲S̲E̲N̲D̲ ̲G̲A̲R̲B̲L̲E̲ (D.QEL,D.PARAMS)
D.STATE = DISCONNECTED
DISMANTLE (D.QEL) (D.CC) :ERROR ̲OK
ERROR ? ANALYZE ̲ERROR (D.CC, 0)
END PROCEDURE
4.2.6.5.6 S̲E̲N̲D̲ ̲W̲A̲R̲N̲I̲N̲G̲ ̲R̲E̲P̲O̲R̲T̲
4.2.6.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.6.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 (D.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
4.2.6.6.6.3 D̲A̲T̲A̲
TYPE D.REPORT =
RECORD
SIZE : INTEGER
TOC: TIME ̲TYPE
TEXT ̲REF: 1..MAX ̲REPORT ̲TEXT ̲REF
TD: ARRAY(1..16) OF CHAR
END
VAR D.SEND ̲PARAMS : SEND ̲PARAMS ̲TYPE
VAR D.DNO : LOGICAL ̲DEVICE ̲NO ̲TYPE (SSC COMMON)
VAR D.REPORT ̲Q : QUEUE ̲REFERENCE (DEMCO COMMON)
VAR D.TEXT ̲REF : 1.. MAX ̲REPORT ̲TEXT ̲REF)
VAR D.SIZE : INTEGER
4.2.6.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)
D.REPORT.TOC,CC) : ERROR ̲OK
ERROR?-ANALYZE ̲ERROR (CC,0)
END
D.REPORT.TEXT ̲REF = D.TEXT ̲REF
D.REPORT.TD = D.DNO
CASE RESERVE ̲BUFFER (D.REPORT.SIZE,D.REPLY ̲Q)
D-QEL,CC) : ERROR ̲OK
ERROR? ANALYZE ̲ERROR (CC,0)
END
CASE WRITE ̲BUFFER (D.QEL,D.REPORT,D.REPORT.SIZE, 1)
(D.SIZE; CC) : ERROR ̲OK
ERROR? ANALYZE ̲ERROR (CC,0)
END
D.SEND ̲PARAMS.INFORMATION ̲TYPE = FALSE
D.SEND ̲PARAMS.CHECKP ̲STATUS = FALSE
D.SEND ̲PARAMS.HEADER.MAINTYPE = REPORT
D.SEND ̲PARAMS.HEADER.SUBTYPE = WARNING ̲REPORT
CASE SEND ̲QEL (D.SEND ̲PARAMS, NIL, D.REPORT ̲Q)
(CC) : ERROR ̲OK
ERROR? ANALYZE ̲ERROR (CC,0)
END
END PROCEDURE
4.2.6.6.7 S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲C̲C̲E̲S̲S̲ ̲P̲R̲O̲F̲I̲L̲E̲
4.2.6.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 device
subprocess when the device is connected by the supervisor.
When the device is disconnected the access profile
of the subprocess is set to no rights (all bits are
zero).
4.2.6.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.6.6.7.3 D̲a̲t̲a̲
D.ATTRIBUTES : SUBPROCESS ̲ATTRIBUTES
D.SUBP ̲NO : SUBPROCESS ̲INDEX
D.DNO : LOGICAL ̲DEVICE ̲NO ̲TYPE
D.PARAMS : COPSY ̲GARBLE ̲PARAMS
4.2.6.6.7.4 P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲D̲e̲s̲i̲g̲n̲
PROCEDURE SET ̲SUBP ̲ACCESS ̲PROFILE (CMD)
BEGIN
D.PARAMS.ERROR ̲TYPE = VOPSY ̲INT ̲ERROR
D.PARAMS.USER ̲ACTION = GIVE ̲UP
D.PARAMS-ERROR ̲COR = DEMCO ̲COR
D.PARAMS.LOC = SET ̲SUBP ̲ACCESS ̲PROFILE
D.PARAMS.ERROR ̲INFO = NIL
D.ATTRIBUTES.PROFILE = 0
CMD EQ STOP?
CASE D.DEVICE ̲PROFILE.DEVICE ̲TYPE OF
ROP? D.SUBP ̲NO = FIRST ̲ROP ̲NO + D.DNO ̲T
OCR? D.SUBP ̲NO = FIRST ̲OCR ̲NO
PTR? D.SUBP ̲NO = PTR ̲SUBP ̲NO
PTP? D.SUBP ̲NO = PTP ̲NO
OTHER? COPSY ̲SEND ̲GARBLE(NIL,D.PARAMS)
END CASE
D.ATTRIBUTES.PROFILE = D.INIT ̲ACCESS ̲PROFILE LOGOR
D.DEVICE ̲PROFILE.CLASS
D.ATTRIBUTES.PROFILE ̲FLAG = TRUE
CASE CHANGE ̲SUBPROCESS ̲ATTRIBUTES (D.SUBP ̲NO,D.ATTRIBUTES)
(CC) : ERROR ̲OK
ERROR? ANALYZE ̲ERROR(CC,0)
END CASE
END ̲PROCEDURE