top - download
⟦fc6657167⟧ Wang Wps File
Length: 58546 (0xe4b2)
Types: Wang Wps File
Notes: CPS/SDS/029
Names: »1748A «
Derivation
└─⟦080c9775e⟧ Bits:30006085 8" Wang WCS floppy, CR 0131A
└─ ⟦this⟧ »1748A «
WangText
…02…CPS/SDS/029
…02…850501…02……02…
SYSTEM STATUS AND CONTROL
DETAILED DESIGN SPECIFICATION…02…ISSUE
1…02…CAMPS
4.2.4.7 S̲y̲s̲t̲e̲m̲ ̲E̲r̲r̲o̲r̲ ̲H̲a̲n̲d̲l̲e̲r̲,̲ ̲S̲E̲H̲
F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲o̲f̲ ̲S̲E̲M̲
The SEH functions are decomposed and defined in figure
4.2.4.7-1.
SEH handles only SW-error and I/O Bus errors. DAMOS
and CFH send SW-reports to PSE, and CESE. SEH receives
these via the operation semaphore SEH ̲OS.
SEH
INITIALIZATION
ERROR
SERVE ̲INPUT
CLOSE ̲DOWN ̲SEH
COPSY ̲ERROR ̲HANDLING
PSE/GAQ ̲REPORT ̲HANDLING
CESE ̲REPORT ̲HANDLING
TIMEOUT ̲HANDLING
CLEAN ̲UP ̲PRC
DUMP ̲REPORTS
FIGURE 4.2.4.7-1
SEH FUNCTION DECOMPOSITION
4.2.4.7.1 I̲n̲i̲t̲i̲a̲l̲i̲z̲a̲t̲i̲o̲n̲
After SEH has received a start command from CFH, it
defines the service system corresponding to PSE and
CESE, and initializes the waiting operation on these.
If CAMPS ̲MODE = AT ̲RISK a request to TMON for periodically
time outs is sent.
4.2.4.7.2 S̲E̲R̲V̲E̲ ̲I̲N̲P̲U̲T̲
During operation SEH receives
- CLOSE ̲DOWN commands in SEH ̲OS
- COPSY error reports in SEH ̲OS
- PSE reports in PSE
- CESE reports in CESE
- TIMEOUTS in GAQ
The GAQ error reports are first received when the corresponding
PSE report is received.
4.2.4.7.3 C̲l̲o̲s̲e̲ ̲D̲o̲w̲n̲ ̲o̲f̲ ̲S̲E̲H̲
If the CAMPS ̲MODE is equal to AT ̲RISK the periodically
time outs are cancelled.
4.2.4.7.4 C̲O̲P̲S̲Y̲-̲E̲r̲r̲o̲r̲-̲H̲a̲n̲d̲l̲i̲n̲g̲
For CAMPS ̲MODE equal to NORMAL, or the coroutine which
has sent the report, has given up a report is dumped
in the memory of the KERNEL, and the PU is shut down.
Else a report is sent to the operator printer. All
reports are saved on the disk in the file GARBLE ̲POOL.
4.2.4.7.5 H̲a̲n̲d̲l̲i̲n̲g̲ ̲o̲f̲ ̲P̲S̲E̲/̲G̲A̲Q̲-̲R̲e̲p̲o̲r̲t̲s̲
If the received report has connection with a GAQ-report
the corresponding GAQ-report is found. A standard report
is made. If the sending process not shall be resumed
the QELs of the process are dumped in the report. If
a GAQ-report has connection with a VIEW, this is dismantled
and dumped in the Garble Pool.
4.2.4.7.6 H̲a̲n̲d̲l̲i̲n̲g̲ ̲o̲f̲ ̲C̲E̲S̲E̲ ̲R̲e̲p̲o̲r̲t̲s̲
A error-report is made, which is dumped in the KERNEL-memory
when the PU is shut down.
4.2.4.7.7 H̲a̲n̲d̲l̲i̲n̲g̲ ̲o̲f̲ ̲T̲i̲m̲e̲ ̲O̲u̲t̲s̲
When SEH has received a time out it resets the error
counter in the process table.
4.2.4.7.8 D̲u̲m̲p̲i̲n̲g̲ ̲o̲f̲ ̲R̲e̲p̲o̲r̲t̲s̲
For system errors (CAMPS ̲MODE = NORMAL all errors,
for CAMPS ̲MODE = AT ̲RISK when a VITAL or DUMMY process
is retired without being resumed) the report is dumped
in the memory of the KERNEL, else it is printed on
the operation printer and on the disk.
4.2.4.7.9 C̲l̲e̲a̲n̲ ̲u̲p̲ ̲o̲f̲ ̲p̲r̲c̲.̲
Send clean up commands to all processes. When SEH has
received answers, it closes the disks.
4.2.4.8 S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲ ̲o̲f̲ ̲S̲E̲H̲
SEH is implemented in one coroutine, which consists
of the modules:
- SEH ̲MAINPRG
- SERVE ̲SEH ̲INPUT
- PSE ̲GAQ ̲REPORT ̲HANDLING
- CLEAN ̲UP ̲PRC
and the common procedures
- INIT ̲SEH ̲SYS ̲CALL
- ERROR ̲SEH
- SAVE ̲GARBLE
For the software structure refer figure 4.2.4.8-1.
SEH ̲ AIN ̲PEG
REPORT ̲MAKER
SERVE ̲INPUT
SUMP ̲QEL
PSE ̲GAQ ̲REPORT ̲HANDLING
SEND ̲REPORT
INIT ̲SEH ̲SVS ̲CALL
CLEAN ̲UP ̲PRC
SAVE ̲GARBLE
SET ̲REPORT ̲HEADER
ERROR ̲SEH
FIGURE 4.2.4.8-1
SOFTWARE STRUCTURE OF SEH
4.2.4.9 D̲a̲t̲a̲ ̲F̲l̲o̲w̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲L̲o̲g̲i̲c̲ ̲i̲n̲ ̲S̲E̲H̲
For data flow refer figure 4.2.4.9-1.
For control logic refer figure 4.2.4.9-2.
Figure 4.2.4.9-1
4.2.4.10 M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲o̲f̲ ̲S̲E̲H̲
4.2.4.10.1 S̲E̲H̲ ̲M̲A̲I̲N̲P̲R̲G̲
4.1.4.10.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̲
Waits for a start command from CFH to arrive in SEH
̲OS. Defines the service-system corresponding to PSE
and CESE. Initializes the operation for waiting on
PSE and CESE. If the CAMPS ̲MODE is equal to AT ̲RISK
a request for periodically TIMEOUTs is sent to TMON,
and a operation for waiting on the queue receiving
the TIMEOUTs is initialized.
4.2.4.10.1.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲
N/A.
4.2.4.10.1.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
This module contains the procedures
- SEH ̲MAINPRG
- INIT ̲SEH
- SEND ̲TIMEOUTS
- GARBLE ̲FILE ̲HANDLING
This module calls the modules/procedures
- SERVE ̲INPUT
- INIT ̲SEH ̲SYS ̲CALL
- ERROR ̲SEH
AND THE CSF-procedures
- WAIT ̲OPSEM
- SIGNAL ̲SEMAPHORE
- RECEIVE ̲FIRST ̲QEL
- DEFINE ̲SERVICE ̲SYSTEM
- REQUEST ̲TIMEOUT
- ANALYZE ̲ERROR
- INIT ̲OPERATION
4.2.4.10.1.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
a1) T̲y̲p̲e̲ ̲a̲n̲d̲ ̲C̲o̲n̲s̲t̲a̲n̲t̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
PCF element in SS ̲KIND SEE DBD
BY ̲SYNCEL element in SS ̲COMMUNICATION see DBD
PCF ̲SIZE see DBD.
a2) D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
PSE,
CESE See DBD
SEH ̲OS See 4.1.4
CLOSE ̲DOWN ̲STARTED,
GAQUEUE,
GAQ ̲ATT,
GAQEL,
GAQSUB ̲NO,
CC,
AWAIT ̲PSE,
AWAIT ̲CESE,
PSE ̲OP,
CESE ̲OP,
TMON ̲REQUESTS,
GAQ ̲OP See 4.2.4.11
GARBLE ̲FILE
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
CLOSE ̲DOWN ̲STARTED (m)
GAQUEUE.MAINQUEUE (m)
GAQUEUE.SUBQUEUE (m)
GAQ ̲ATT (m)
GAQ ̲EL (m)
GAQ ̲SUB ̲NO (m)
CC (m)
AWAIT ̲PSE.SS ̲ID (m)
AWAIT ̲PSE.SS ̲CODE (m)
AWAIT ̲CESE,SS ̲ID (m)
AWAIT ̲CESE.SS ̲CODE (m)
PSE ̲OP.CMD ̲TYPE (m)
PSE ̲OP.CMD (m)
CESE.OP.CMD ̲TYPE (m)
CESE.OP.CMD (m)
TMON ̲REQUEST.MAINQUEUE (m)
.SUBQUEUE (m)
.TIMEOUT (m)
.FORMAT (m)
.TIME ̲PERIOD (m)
.EVENT.ID (m)
GAQ ̲OP.CMD ̲TYPE (m)
GAQ ̲OP.CMD (m)
4.2.4.10.1.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
a) S̲E̲H̲ ̲M̲A̲I̲N̲P̲R̲G̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
Waits for SEH ̲OS for a start command. In a loop
the module SERVE ̲INPUT is called. SEH ̲MAINPRG exist
the loop when SEH ̲OS.COUNTER is equal to zero and
the variable CLOSE ̲DOWN ̲STARTED is equal to TRUE.
F̲l̲o̲w̲g̲r̲a̲m̲
See figure 4.2.4.10.1.5-1.
b) I̲N̲I̲T̲ ̲S̲E̲H̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
When the system calls DEFINE ̲SERVICE ̲SYSTEM the
service system associated with PSE and CESE is
defined. The SCM funtion for awaiting on PSE and
CESE is defined and the corresponding operations
are initialized.
F̲l̲o̲w̲g̲r̲a̲m̲
See figure 4.2.4.10.1.5-2
c) S̲E̲N̲D̲ ̲T̲I̲M̲E̲O̲U̲T̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
The parameters for a timeout is set. The operation
for waiting for the timeouts is initialized.
F̲l̲o̲w̲g̲r̲a̲m̲
See figure 4.2.4.10.1.5-3
d) G̲A̲R̲B̲L̲E̲ ̲F̲I̲L̲E̲ ̲H̲A̲N̲D̲L̲I̲N̲G̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
Open the garble pool file and sets the parameter,
used when writing on the file.
F̲l̲o̲w̲g̲r̲a̲m̲
See figure 4.2.4.10.1.5-4.
PROCEDURE
SEH ̲MAINPRG
BEGIN
WAIT ̲OPSEM (SEH ̲OS)(OP)
OP.CMD ̲TYPE NE CFH ̲CMD ̲L
? ERROR ̲SEH
…02… (SEH ̲MAIN,COPSY ̲LONG ̲ERR)
LOGOR OP.CMD NE START ̲SEH
INIT ̲SEH
LOOP
SEH ̲OS EQ 0 LOG AND
? EXIT
CLOSE ̲DOWN ̲STARTED EQ TRUE
SERVE ̲SEH ̲INPUT
END LOOP
SIGNAL ̲SEMAPHORE (CFH ̲S)
CASE RECEIVE ̲FIRST ̲QEL(TRUE, GAQUEUE)
(GAQ ̲ATT,GAQSL, GAQSUB ̲NO, CC) OF
ERROR? ANALYZE ̲ERROR (CC,0)
OK ?
END CASE RECEIVE ̲FIRST ̲QEL
END PROCEDURE SEH ̲MAINPRG
Figure 4.2.4.10.1.5-1
PROCEDURE
INIT ̲SEH
BEGIN
CASE DEFINE ̲SERVICE ̲SYSTEM(AWAIT ̲PSE.SS ̲ID,PCF,
BY ̲SYNCEL, PSE, PCF ̲SIZE)
ERROR? ANALYZE ̲ERROR(CC,0)
OK? AWAIT ̲PSE.SS ̲CODE = 1
END CASE DEFINE ̲SERVICE ̲SYSTEM
CASE DEFINE ̲SERVICE ̲SYSTEM(AWAIT ̲CESE.SS ̲ID, PCF,
BY ̲SYNCEL, CESE, PSE
̲SIZE)
ERROR? ANALYZE ̲ERROR (CC,0)
OK? AWAIT ̲PSE.SS ̲CODE-1
END CASE DEFINE ̲SERVICE ̲SYSTEM
INIT ̲OPERATION(0, PSE ̲OP)
PSE ̲OP.CMD ̲TYPE = SEH ̲INT ̲CMD
PSE ̲OP.CMD = AWAIT ̲PSEL
INIT ̲OPERATION (0, CESE ̲OP)
CESE ̲OP.CMD ̲TYPE = SEH ̲INT ̲CMD
CESE ̲OP.CMD = AWAIT ̲CESEL
INIT ̲SEH ̲SYS ̲CALL(AWAIT ̲PSEL)
INIT ̲SEH ̲SYS ̲CALL(AWAIT ̲CESEL)
GARBLE ̲FILE ̲HANDLING
CAMPS ̲MODE EQ AT ̲RISK? SEND ̲TIMEOUT
END PROCEDURE INIT ̲SEH
Figure 4.2.4.10.1.5-2
PROCEDURE
SEND ̲TIMEOUT
BEGIN
TMON ̲REQUEST.MAINQUEUE = SYQ
TMON ̲REQUEST.SUBQUEUE = TMON ̲Q
TMON ̲REQUEST.TIME OUT = PERIODIC
TMON ̲REQEST.FORMAT = HOURS
TMON ̲REQUEST.TIME.PERIODE = 24
TMON ̲REQUEST.EVENT ̲ID = 0
CASE REQUEST ̲TIMEOUT(TMON ̲REQUEST)(CC)
ERROR? ANALYSE ̲ERROR(CC,0)
OK?
END CASE REQUEST ̲TIMEOUT
END PROCEDURE SEND ̲TIMEOUT
Figure 4.2.4.10.1.5-3
PROCEDURE
GARBLE ̲FILE ̲HANDLING
BEGIN
CASE GET ̲ROOT(MIR ̲MOVING)(ROOT ̲FDCB, CC))
ERROR? ANALYZE ̲ERROR(CC,0)
OK?
END GET ̲ROOT
CASE DESCENT(SSC ̲DIR, ROOT ̲FDCB)(SSC ̲DIR ̲FDCB,
CC)
ERROR? ANALYZE ̲ERROR(CC,0)
OK?
END CASE DESCENT
CASE DESCENT (GARBLE, SSC ̲DIR ̲FDCB)(GARBLE ̲FDCB,CC)
ERROR? ANALYZE ̲ERROR(CC,0)
OK?
END CASE DESCENT
GARBLE ̲SPEC.FIRST ̲BYTE = GARBLE ̲TABLE.START
GARBLE ̲SPEC.BYTE ̲COUNT = GARBLE ̲SECTOR ̲SIZE
GARBLE ̲BLE.KIND = BNLOCALLOWER
GARBLE ̲BLE.LINK = NIL
GARBLE ̲BLE.SIZE = GARBLE ̲SECTOR ̲SIZE/2
TABLE ̲SPEC.FIRST ̲BYTE = TABLE ̲START
TABLE ̲SPEC.BYTE ̲COUNT = TABLE ̲SIZE
TABLE ̲BLE.KIND = BNLOCALLOWER
TABLE ̲BLE.LINK = NIL
TABLE ̲BLE.SIZE = TABLE ̲SIZE/2
END PROCEDURE GARBLE ̲FILE: HANDLING
Figure 4.2.4.10.1.5-4
4.2.4.10.2 S̲E̲R̲V̲E̲ ̲I̲N̲P̲U̲T̲
4.2.4.10.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̲
Receives operation from SEH ̲OS for the operation containing:
- close down command SEH cancels, if CAMPS ̲MODE equal
to AT ̲RISK, the timeouts and sets CLOSE ̲DOWN ̲STARTED
to TRUE.
- awaiting operation on PSE it calls the module PSE
̲GAQ ̲REPORT ̲HANDLING
- awaiting operation on CESE it performed this and
dumps the corresponding error-report.
- awaiting operation on GAQ it checks that the received
QEL is a wanted timeout and resets the error counter
in the PROCESS ̲TABLE.
4.2.4.10.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) SERVE ̲INPUT
b) SERVE ̲INPUT (R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R1 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0-R7 (destr)
4.2.4.10.2.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲
This module contains the following procedures
- SERVE ̲INPUT
- CLOSE ̲DOWN ̲SEH
- COPSY ̲ERROR ̲HANDLING
- CESE ̲REPORT ̲HANDLING
- RESET ̲PROCESS ̲TABLE
This module calls the modules/procedures
- PSE ̲GAQ ̲REPORT ̲HANDLING
- INIT ̲SEH ̲SYS ̲CALL
- ERROR ̲SEH
- SAVE ̲GARBLE
and the commom SSC-procedures
- PU ̲DOWN
- REPORT ̲ERROR
and the CSF-procedures
- WAIT ̲OPSEM
- CANCEL ̲TIMEOUT
- RECEIVE ̲FIRST ̲QEL
- DISMANTLE
- WAIT ̲SYSTEM ̲CALL
- ANALYZE ̲ERROR
4.2.4.10.2.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
a1) D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
PROCESS ̲TABLE see 4.1.4
SEH ̲OS see 4.1.4
OP,
CLOSE ̲DOWN ̲STARTED,
TMON ̲REQUEST,
GAQUEUE,
GAQ ̲ATT,
GAQEL,
GAQSUB ̲NO,
CC,
PRINT ̲INFO, see 4.2.4.11
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
PROCESS ̲TABLE(I).ERROR ̲COUNTER (m)
SEH ̲OS
OP
OP ̲CMD ̲TYPE
OP ̲CMD
CLOSE ̲DOWN ̲STARTED (m)
TMON ̲REQUEST
GAQUEUE ̲SUBQUEUE (m)
GAQ ̲ATT (m)
GAQ ̲ATT.MAINTYPE
GAQ ̲ATT.SUBTYPE
GAQ ̲ATT.FLAG
GAQEL (m)
GAQ ̲SUB ̲NO (m)
CC (m)
PRINT ̲INFO(I) (m)
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR I: INTEGER
Used as counter
4.2.4.10.2.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
a) S̲E̲R̲V̲E̲ ̲I̲N̲P̲U̲T̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
Receives an operation from SEH ̲OS. Depending on
the operation CMD ̲TYPE and CMD a procedure/module
is called. This is done in a double CASE statement.
F̲l̲o̲w̲g̲r̲a̲m̲
See 4.2.4.10.2.5-1
b) C̲L̲O̲S̲E̲ ̲D̲O̲W̲N̲ ̲S̲E̲H̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
The periodically timeouts are cancelled and CLOSE
̲DOWN ̲STARTED sets for TRUE.
F̲l̲o̲w̲g̲r̲a̲m̲
See 4.2.4.10.2.5-2
c) C̲O̲P̲S̲Y̲ ̲E̲R̲R̲O̲R̲ ̲H̲A̲N̲D̲L̲I̲N̲G̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
An error report is made and dumped
F̲l̲o̲w̲g̲r̲a̲m̲
See 4.2.4.10.2.5-3
d) C̲E̲S̲E̲ ̲R̲E̲P̲O̲R̲T̲ ̲H̲A̲N̲D̲L̲I̲N̲G̲
An error report is made and dumped.
F̲l̲o̲w̲g̲r̲a̲m̲
See 4.2.4.10.2.5-4
e) R̲E̲S̲E̲T̲ ̲P̲R̲O̲C̲E̲S̲S̲ ̲T̲A̲B̲L̲E̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
In a loop the error-counter for each process is
set to zero.
F̲l̲o̲w̲g̲r̲a̲m̲
See 4.2.4.10.2.5-5.
PROCEDURE
SERVE ̲INPUT
BEGIN
WAIT ̲OPSEM(SEH ̲OS)(OP)
CASE OP.CMD ̲TYPE OF
CFH ̲LONG ̲CMD? OP.CMD.EQ FAILURE?
CLEAN ̲UP ̲PRC
CLOSE ̲DOWN ̲SEH
COPSY ̲ERROR ̲REPORT? COPSY ̲ERROR ̲HANDLING
SEH ̲INT ̲CMD?
CASE OP.CMD OF
AWAIT ̲PSEL? PSE ̲GAQ ̲REPORT
̲HANDLING
INIT ̲SEH ̲SYS ̲CALL(AWAIT
̲PSEL)
AWAIT ̲CESEL? RECEIVE ̲CESE ̲REPORT
̲HANDLING
INIT ̲SEH ̲SYS ̲CALL(AWAIT
̲CESEL)
RESET ̲PRC ̲TBL?
RESET ̲PROCESS
̲TABLE
OTHERWISE? ERROR ̲SEH(SER
̲INPUT,
COPSY ̲LONG ̲ERROR)
END CASE OP.CMD
OTHERWISE? ERROR ̲SEH (SER ̲INPUT, OP ̲ERROR)
END CASE OP.CMD ̲TYPE
END PROCEDURE SERVE ̲INPUT
Figure 4.2.4.10.2.5-1
PROCEDURE
CLOSE ̲DOWN ̲SEH
BEGIN
OP.CMD ̲TYPE NE CFH ̲CMD ̲L LOGOR ? ERROR ̲SEH (CLOSE
̲SEH ̲DOWN
OP.CMD NE CLOSE ̲COR COPY ̲LONG ̲ERROR)
CLOSE ̲DOWN ̲STARTED = TRUE
CAMPS ̲MODE NE AT ̲RISK?
CANCEL ̲TIMEOUT (TMON ̲REQUEST)
GAQUEUE.SUBQUEUE = TMON ̲Q
CASE RECEIVE ̲FIRST ̲QEL (TRUE, GAQUEUE)
(GAQ ̲ATT, GAQEL, GAQ ̲SUB
̲NO, CC) OF
ERROR? ANALYZE ̲ERROR (CC,0)
OK
END CASE RECEIVE ̲FIRST ̲QEL
GAQ ̲ATT.MAINTYPE NE TIMEOUT? ERROR ̲SEH ̲SEH ̲(CLOSE
̲DOWN,
COPSY ̲Q ̲ERROR)
GAQ ̲ATT.SUBTYPE NE CANCEL?
DISMANTLE (GAQEL)
CASE RECEIVE ̲FIRST ̲QEL (TRUE, GAQUEUE)
(GAQ ̲ATT, GAQEL, GAQSUB
̲NO, CC) OF
ERROR? ANALYSE ̲ERROR CC,0)
OK?
GAQ ̲ATT.MAINTYPE NE TIMEOUT ̲EVENT LOG
OR
GAQ ̲ATT.SUBTYPE NE CANCELLED ?
ERROR ̲SEH(SEH ̲CLOSE ̲DOWN, COPSY
̲Q ̲ERROR)
END CASE RECEIVE ̲FIRST ̲QEL
DISMANTLE (GAQEL)
END PROCEDURE CLOSE ̲DOWN ̲SEH
Figure 4.2.4.10.2.5-2
PROCEDURE
COPSY ̲ERROR ̲HANDLING
BEGIN
I=0
LOOP
I = I + 1
PRINT ̲REP.REPORT(I) = LONG ̲OP.INF(I)
I EQ 8 EXIT
END LOOP
LONG ̲OP.INF(1) EQ COPSY ̲Q ̲ERROR
PRINT ̲REP.REPORT(9) = LONG ̲OP.CMD
PRINT ̲REP.SIZE = 9
SAVE ̲GARBLE(COPSY ̲ERROR ̲REPORT, PRINT ̲REP)
EQUIVALENCE(LONG ̲OP.INF, COPSY ̲PARAMS: COPSY ̲GARBLE
̲PARAMS)
COPSY ̲PARAM.USER ̲ACTION EQ ̲GIVE ̲UP LOGOR
CAMPS ̲MODE EQ NORMAL ?
PU ̲DOWN (COPSY ̲GAQ ̲REPORT, PRINT ̲REP)
REPORT ̲ERROR (COPSY ̲GAQ ̲REPORT, PRINT ̲REP)
END PROCEDURE COPSY ̲ERROR ̲HANDLING
Figure 4.2.4.10.2.5-3
PROCEDURE
CESE ̲REPORT ̲HANDLING
BEGIN
CASE WAIT ̲SYSTEM ̲CALL(OP)(CESE ̲REPORT,CC) OF
ERROR? ANALYZE ̲ERROR(CC, 0)
OK?
END CASE WAIT ̲SYSTEM ̲CALL
EQUIVALENCE(CESE ̲REPORT, REPORT: ARRAY (1..8) OF
INTEGER;
I = 0
LOOP
I = I = 1
PRINT ̲REP.REPORT(I) REPORT(I)
I EQ 1? EXIT
END LOOP
SAVE ̲GARBLE(CESE ̲ERROR ̲REPORT, PRINT ̲INFO)
PU ̲DOWN(CESE ̲REPORT, PRINT ̲INFO)
END PROCEDURE RECEIVE ̲CESE ̲REPORT
Figure 4.2.4.10.2.5-4
PROCEDURE RESET ̲PROCESS ̲TABLE
BEGIN
CASE WAIT ̲SYSTEM ̲CALL(OP)(GAQ ̲ATT, GAQEL, GAQ ̲SUB
̲NO,CC)
ERROR? ANALYSE ̲ERROR (CC,0)
OK?
GAQ ̲ATT.MAINTYPE NE TIMEOUT LOGOR
GAQ ̲ATT.SUBTYPE NE TIMEOUT ̲EVENT LOGOR
?
GAQ ̲ATT.FLAG NE 0
ERROR ̲SEH(RESET ̲PROG ̲TABLE,
COPSY ̲Q ̲ERROR)
I = 0
LOOP RESET PROCESS ̲TABLE
I = I + 1
PROCESS ̲TABLE(I)
ERROR ̲COUNTER = 0
I EQ NO ̲OF ̲PROCESSES? EXIT
END LOOP RESET PROCESS TABLE
END CASE WAIT ̲SYSTEM ̲CALL
END PROCEDURE TIMEOUT ̲EVENT
Figure 4.2.4.10.2.5-5
4.2.4.10.3 P̲S̲E̲ ̲G̲A̲Q̲ ̲R̲E̲P̲O̲R̲T̲ ̲H̲A̲N̲D̲L̲I̲N̲G̲
4.2.4.10.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̲
Receives a report from PSE and find the type of the
report. If the report has connecton with a GAQ-report
the corresponding GAQ-report is found. If the PSE report
is an error report the module REPORT ̲MAKER is called.
If the PSE-report has connection with the clean-up
procedure for a process the process table is updated.
4.2.4.10.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) PSE ̲GAQ ̲REPORT ̲HANDLING
b) PSE ̲GAQ ̲REPORT ̲HANDLING (R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲
R 6 link
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲
R 0 - R7 destr.
4.2.4.10.3.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
This module consists of the procedures:
- PSE ̲GAQ ̲REPORT ̲HANDLING
̲ FIND ̲TYPE ̲OF ̲REPORT
- RECEIVE ̲GAQ ̲REPORT
- CLEAN ̲UP ̲ACTION
This module calls the procedures
- REPORT ̲MAKER
- ERROR ̲SEH
and the CSF-procedures
- WAIT ̲SYSTEM ̲CALL
- RECEIVE ̲FIRST ̲QEL
- GET ̲GARBLE ̲INFORMATION
- RETURN
- RECEIVE ̲NEXT ̲QEL
and the DAMOS-procedures
- INIT ̲AWAIT
4.2.4.10.3.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
a) D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
PSE DBD
PROCESS ̲TABLE 4.1.4
OP,
PSE ̲REPORT,
GAQUEUE;
GAQ ̲ATT,
GAQEL,
GAQSUB ̲NO,
CC,
GAQ ̲REPORT,
PRINT ̲INFO,
VIEW ̲ATT see 4.2.4.11
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
PSE
PROCESS ̲TABLE (I) OBJECT
PSE ̲REPORT (m)
PSE ̲REPORT.INFO ̲TYPE
PSE ̲REPORT.PARENT ̲INDEX
PSE ̲REPORT.PRIMARY
PSE ̲REPORT.SECONDARY
PSE ̲REPORT.TERTIRY
GAQUEUE.SUBQUEUE (m)
GAQ ̲ATT (m)
GAQEL (m)
GAQSUB ̲NO (m)
CC (m)
GAQ ̲REPORT (m)
GAQ ̲REPORT.STANDARD ̲PART.(m)
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR TYPE ̲OF ̲REPORT : ERROR ̲REPORT ̲TYPE, see 4.1.4
"used to indicate the type of a received PSE
report.
VAR PSE ̲ID : INTEGER
"used to indicate the grable id of a PSE-report
which has connection with a GAQ-report.
VAR RETIRE:BOOLEAN
"indicate of a process shall be retired or
not
VAR SYSTEM ̲CLOSE:BOOLEAN
"indicate of the system shall be closed or
not
4.2.4.10.3.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
a) PSE ̲GAQ ̲REPORT ̲HANDLING
N̲a̲r̲r̲a̲t̲i̲v̲e̲
Performed the system call ass. with OP. Find the type
of the received report. Depending on the type it calls
REPORT ̲MAKER.
F̲l̲o̲w̲g̲r̲a̲m̲ see 4.2.4.10.3.5-1
b) F̲I̲N̲D̲ ̲T̲Y̲P̲E̲ ̲O̲F̲ ̲R̲E̲P̲O̲R̲T̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
From the PSE-report INFO ̲TYPE-field and primary code
it finds the type of the PSE-report.
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) FIND ̲TYPE ̲OF ̲REPORT () (TYPE ̲OF ̲REPORT:ERROR:REPORT
̲
TYPE
PSE ̲ID:GARBLE ̲ID)
b) FIND ̲TYPE ̲OF ̲REPORT (R0, R1, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
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̲
R 0 TYPE ̲OF ̲REPORT
R 1 PSE ̲ID
R 2 - R 7 destr.
F̲l̲o̲w̲g̲r̲a̲m̲ ̲ see fig. 4.2.4.10.3.5-2
c) R̲E̲C̲E̲I̲V̲E̲ ̲G̲A̲Q̲ ̲R̲E̲P̲O̲R̲T̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
Take the first QEL in the garble queue and the corresponding
GAQ-report. If the GAQ-report has same ID as the PSE-report
it stops, else it takes the next QEL and make the same
procedure on this until the right GAQ-report has been
received.
F̲l̲o̲w̲g̲r̲a̲m̲ see fig. 4.2.4.10.3.5-3
d) C̲L̲E̲A̲N̲ ̲U̲P̲ ̲A̲C̲T̲I̲O̲N̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
In a loop the entry for the process is found and the
status is set to CLEANED.
F̲l̲o̲w̲g̲r̲a̲m̲ see fig. 4.2.4.10.3.5-4
PROCEDURE
PSE ̲GAQ ̲REPORT ̲HANDLING
BEGIN
WAIT ̲SYSTEM ̲CALL (OP) (PSE ̲REPORT)
CASE INIT ̲AWAIT (PSE) (CC) OF
ERROR ? ANALYZE ̲ERROR (CC,0)
OK ?
END CASE INIT ̲AWAIT
FIND ̲TYPE ̲OF ̲REPORT ()(TYPE ̲OF ̲REPORT,PSE ̲ID)
CASE TYPE ̲OF ̲REPORT OF
GARBLE ?
RECEIVE ̲GAQ ̲REPORT
REPORT ̲MAKER(GARBLE)
PSE ̲ERROR ? REPORT ̲MAKER(PSE ̲ERROR)
CLEAN ̲UP ̲REPORT ? CLEAN ̲UP ̲ACTION
OTHERWISE ? ERROR ̲SEH (RECEIVE ̲PSE,COPSY ̲INT
̲ERROR)
END CASE TYPE ̲OF ̲REPORT
END PROCEDURE RECEIVE ̲PSE ̲REPORT
Figure 4.2.4.10.3.5-1
PROCEDURE
FIND ̲TYPE ̲OF ̲REPORT ( )
(TYPE ̲OF ̲REPORT:ERROR ̲REPORT ̲TYPE,PSE
̲ID:
GARBLE ̲ID)
BEGIN
CASE PSE ̲REPORT.INFO ̲TYPE OF
RETIRED ̲WITH ̲TIME ̲LIMIT,
RETIRED ̲WITHOUT ̲RESTART ?
TYPE ̲OF ̲REPORT=PSE ̲ERROR
RETIRED ̲WITH ̲RESTART ?
PSE ̲REPORT.PRIMARY EQ SEND ̲GARBLE ̲CAUSE
?
TYPE ̲OF ̲REPORT = GARBLE
PSE ̲ID = PSE ̲REPORT.TERTIARY
TYPE ̲OF ̲REPORT = PSE ̲ERROR
PASSIVATED ? ERROR ̲SEH(FIND ̲TYPE ̲REPORT,COPSY
̲INT ̲ERROR)
CLEANED ? TYPE ̲OF ̲REPORT = CLEAN ̲UP ̲REPORT
END CASE PSE ̲REPORT.INFO ̲TYPE
END PROCEDURE FIND ̲TYPE ̲OF ̲REPORT
Figure 4.2.4.10.3.5-2
RECEIVE ̲GAQ ̲REPORT
BEGIN
CASE RECEIVE ̲FIRST ̲QEL(FALSE,GAQUEUE)
(GAQ ̲ATT, GAQEL, GAQSUB ̲NO,
CC)
ERROR ? ANALYZE ̲ERROR (CC,0)
OK ?
END CASE RECEIVE ̲FIRST ̲QEL
CASE GET ̲GARBLE ̲INFORMATION (GAQEL)GAQREPORT)
ERROR ? ANALYZE ̲ERROR (CC,0)
OK?
END CASE GET ̲GARBLE ̲INFORMATION
LOOP
GAQ ̲REPORT.STANDARD-PART.ID EQ PSE ̲ID? EXIT
RETURN (QEL)
CASE RECEIVE ̲NEXT ̲QEL (GAQEL)(GAQEL,GAQ ̲ATT,CC)
ERROR ? ANALYZE ̲ERROR (CC,0)
OK ?
END CASE RECEIVE ̲NEXT ̲QEL
CASE GET ̲GARBLE ̲INFORMATION(GAQEL,GAQ ̲REPORT)
ERROR ANALYZE ̲ERROR (CC, 0)
OK ?
END CASE GET ̲GARBLE ̲INFORMATION
END LOOP
END PROCEDURE RECEIVE ̲GAQ ̲REPORT
Figure 4.2.4.10.5.3-3
PROCEDURE
CLEAN ̲UP ̲ACTION
BEGIN
I = COPSY ̲P ̲NO = 1
LOOP
I = I + 1
PROCESS ̲TABLE (I).OBJECT EQ PSE ̲REPORT.PARENT
̲INDEX ?
PROCESS ̲TABLE (I).STATUS = CLEANED
I EQ NO ̲OF ̲PROCESSES ? EXIT
END LOOP
END PROCEDURE CLEAN ̲UP ̲ACTION
Figure 4.2.4.10.3.5-4
4.2.4.10.4 C̲L̲E̲A̲N̲ ̲U̲P̲ ̲P̲R̲C̲
4.2.4.10.4.1 F̲u̲n̲c̲t̲i̲o̲n̲e̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
This module sends clean up commands to all processes
exept COPSY. When the processes have notified that
the clean up action is performed the mirrored disks
are dismounted. At last PU ̲ERROR is called.
4.2.4.10.4.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) CLEAN ̲UP ̲PRC(OP: LONG ̲OP)
b) CLEAN ̲UP ̲PRC(R5, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲
R5 pointer to OP
R6 link
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
N/A
4.2.4.10.4.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
This module consists of the procedure
- CLEAN ̲UP ̲PRC
- CLEAN ̲UP ̲DISKS
It calls the common SSC procedure
- DISMOUNT ̲DISK
and the DAMOS procedure
- CLEAN ̲UP ̲PROCESS
- AWAIT
- DISMANTLE
4.2.4.10.4.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
a) D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
PROCESS ̲TABLE ,
NO ̲OF ̲PROCESSES ,
COPSY ̲P ̲NO 4.1.4
PSE DBD
PSE ̲REPORT 4.2.4.11
MMS ̲STORAGE ̲FDCB
T ̲COP ̲FDCB
MIR ̲FIXED
MIR ̲MOVING
OP VF-data
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
PROCESS ̲TABLE(PRC ̲NO).STATUS
PROCESS ̲TABLE(PRC ̲NO).PROCESS ̲NO
PSE ̲REPORT (m)
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR
PRC ̲NO: INTEGER
NO ̲OF ̲PRC ̲CLEANED: INTEGER
4.2.4.10.4.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
a) C̲L̲E̲A̲N̲ ̲U̲P̲ ̲P̲P̲C̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
In a loop the clean up commands are sent to the
processes. It is checked whether or not a process
is previous been cleaned up. In an other loop the
procedure awaits the acknowledges about the clean
up from DAMOS.
F̲l̲o̲w̲g̲r̲a̲m̲ refer figure 4.2.4.10.4.5-1.
b) C̲L̲E̲A̲N̲ ̲U̲P̲ ̲D̲I̲S̲K̲S̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
First the files opened by COPSY are dismantled.
Thereafter the mirrored disks are dismounted, and
PU ̲ERROR is called.
F̲l̲o̲w̲g̲r̲a̲m̲ refer figure 4.2.4.10.4.5-2.
PROCEDURE
CLEAN ̲UP ̲PRC
BEGIN
PRC ̲NO = COPSY ̲P ̲NO
NO ̲OF ̲PRC ̲CLEANED = 0
LOOP
PRC ̲NO EQ NO ̲OF ̲PROCESSES? EXIT
PRC ̲NO = PRC ̲NO + 1
PROCESS ̲TABLE(PRC ̲NO).STATUS NE CLEANED?
CASE CLEAN ̲UP ̲PROCESS(
PROCESS ̲TABLE(PRC ̲NO).PROCESS
̲NO, ̲1)(CC)
ERROR? ANALYZE ̲ERROR(CC,0)
OK?
EMD CASE CLEAN ̲UP ̲PROCESS
NO ̲OF ̲PRC ̲CLEANED = NO ̲OF ̲PRC ̲CLEANED
+ 1
END LOOP
LOOP
NO ̲OF ̲PRC ̲CLEANED EQ 0? EXIT
CASE AWAIT(1, 1, PSE, PSE ̲REPORT)
ERROR? ANALYZE ̲ERROR(CC,0)
OK?
END CASE AWAIT
PSE ̲REPORT.INFO ̲TYPE EQ CLEANED?
NO ̲OF ̲PRC ̲CLEANED = NO ̲OF ̲PRC ̲CLEANED-1
END LOOP
CLEAN ̲UP ̲DISKS
END PROCEDURE CLEAN ̲UP ̲DISKS
Figure 4.2.4.10.4.5-1
PROCEDURE
CLEAN ̲UP ̲DISKS
BEGIN
CASE DISMANTLE(MMS ̲STORAGE ̲FDCB)(CC)
ERROR? ANALYZE ̲ERROR(CC,0)
OK?
END CASE DISMANTLE
TRACE ̲MODE EQ TRUE?
CASE DISMANTLE(T ̲COP ̲FDCB)(CC)
ERROR? ANALYZE ̲ERROR(CC,0)
OK?
END CASE DISMANTLE
DISMOUNT ̲DISK(MIR ̲FIXED)
DISMOUNT ̲DISK(MIR ̲MOVING)
PU ̲ERROR(OP.INF(1))
END.PROCEDURE CLEAN ̲UP ̲DISK
Figure 4.2.4.10.4.5-2
4.2.4.10.5 R̲E̲P̲O̲R̲T̲ ̲M̲A̲K̲E̲R̲
4.2.4.10.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̲
This module receives from the GARBLE ̲REPORT SEMaphore
reports which are field up with data concerning error
report. These are sent further to the coroutine REPORT
̲ERROR. The report is marked as described in sec. 4.2.4.11.
4.2.4.10.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) REPORT ̲MAKER(REP: ERROR ̲REPORT ̲TYPE)
b) REPORT ̲MAKER(R0, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 REP
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 - R7 dest.
4.2.4.10.5.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
This module consists of the following procedures:
- REPORT ̲MAKER
- PSE ̲ERROR ̲HANDLING
- DUMP ̲PSE ̲REPORT
- GARBLE ̲HANDLING
- DUMP ̲PSE ̲GAR ̲REPORT
- DUMP ̲GAQ ̲REPORT
- COPY ̲GAQ
- HANDLE ̲PROCESS ̲TABLE
- DUMP ̲PSE ̲REP
- PRINT ̲SUBPROCESS ̲QEL
- SEND ̲REPORT
4.2.4.10.5.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
a1) T̲y̲p̲e̲ ̲a̲n̲d̲ ̲C̲o̲n̲s̲t̲a̲n̲t̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
ERROR ̲REPORT ̲TYPE 4.1.4
COPSY ̲P ̲NO 4.1.4
SUBPROCESS ̲INDEX DBD
STRING ,
MAX ̲QEL ̲PRINT ,
REP ̲TYPE ,
GQE ̲LENGTH ,
GTE ̲LENGTH ,
GIE ̲LENGTH 4.2.4.11
GAQ ̲INFO ̲TYPE DBD
a2) D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
PROCESS ̲TABLE ,
SUBP ̲PROCESS ̲TABLE ,
NO ̲OF ̲PROCESSES 4.1.4
PSE ̲REPORT ,
GAQ ̲ATT ,
GAQEL ,
GAQ ̲REPORT ,
REPORT ,
QEL ̲PRINT ,
NUMBER 4.2.11
REP 1/F-data
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
PROCESS ̲TABLE.OBJECT
PROCESS ̲TABLE.ERROR ̲COUNT (M)
PROCESS ̲TABLE.MAX ̲COUNT (M)
PROCESS ̲TABLE.STATUS (M)
SUBP ̲PROCESS ̲TABLE.PROCESS ̲NO
PSE ̲REPORT.PARENT
PSE ̲REPORT.PRIMARY
PSE ̲REPORT.SECONDARY
PSE ̲REPORT.TERTIARY
GAQ ̲ATT.OBJECT
GAQ ̲ATT equivalent with
ARRAY(1..GAQ ̲ATT ̲LENGTH) OF INTEGER
GAQEL
GAQ ̲REPORT.STANDARD ̲PART.USER ̲ACTION
REPORT(NUMBER).R ̲TYPE (M)
REPORT(NUMBER).CONTINUE (M)
REPORT(NUMBER).SECTOR ̲ID (M)
REPORT(NUMBER).ID (M)
REPORT(NUMBER).REP (M)
REPORT(NUMBER).INFO(I) (M)
QEL ̲PRINT (M)
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR I, J: INTEGER
VAR PROC ̲TYPE: ERROR ̲REPORT ̲TYPE
used to indicate the error type of an erroneous
process.
VAR RETIRE: BOOLEAN
used to indicate if an erroneous process shall
be resumed or cleaned up.
4.2.4.10.5.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
a) R̲E̲P̲O̲R̲T̲ ̲M̲A̲R̲K̲E̲R̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
Initializes the parameter used for making the error
report. In a case-statement procedure for the report
making is called. At last the report is sent.
I̲n̲t̲e̲r̲f̲a̲c̲e̲ Refer sec. 4.2.4.10.5.2
F̲l̲o̲w̲g̲r̲a̲m̲ See figure 4.2.4.10.5.5-1
b) P̲S̲E̲ ̲E̲R̲R̲O̲R̲ ̲H̲A̲N̲D̲L̲I̲N̲G̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
Depending on the CAMPS ̲MODE and the error type
of the erroneous process DUMP ̲PSE ̲REPORT is called
with different parameters.
I̲n̲t̲e̲r̲f̲a̲c̲e̲ Standard
F̲l̲o̲w̲g̲r̲a̲m̲ See figure 4.2.4.10.5.5-2
c) D̲U̲M̲P̲ ̲P̲S̲E̲ ̲R̲E̲P̲O̲R̲T̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
DUMP ̲PSE ̲REP is called. In a loop-statement the
process no of the erroneous process is found. In
an other loop-statement the qel's of the process
is found. At last SAVE ̲GARBLE is called and depending
on the call-parameter SYSTEM ̲CLOSE, SEND ̲REPORT
or
PU ̲DOWN is called.
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) DUMP ̲PSE ̲REPORT(SYSTEM ̲CLOSE: BOOLEAN)
b) DUMP ̲PSE ̲REPORT(R0, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲
R0 SYSTEM ̲CLOSE
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲
R0 - R7 destr.
F̲l̲o̲w̲g̲r̲a̲m̲:̲ See figure 4.2.4.10.5.5-3
d) G̲A̲R̲B̲L̲E̲ ̲H̲A̲N̲D̲L̲I̲N̲G̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
Depending on the CAMPS ̲MODE and error type, useraction
of the erroneous process
DUMP ̲PSE ̲GAQ ̲REPORT is called.
I̲n̲t̲e̲r̲f̲a̲c̲e̲ Standard
F̲l̲o̲w̲g̲r̲a̲m̲ See figure 4.2.4.10.5.5-4
e) D̲U̲M̲P̲ ̲P̲S̲E̲ ̲G̲A̲Q̲ ̲R̲E̲P̲O̲R̲T̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
A calling parameter indicates if the erroneous
process shall be resumed or cleaned up, and an
other calling parameter indicates if the system
shall be closed down or not. The PSE-report and
GAQ-report are dumped by some procedure call. If
the process shall be cleaned up, the process qels
are dumped, else the process is resumed. At last
the report is printed.
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) DUMP ̲PSE ̲GAQ ̲REPORT(SYSTEM ̲CLOSE, RETIRED:
BOOLEAN)
b) DUMP ̲PSE ̲GAQ ̲REPORT(R0, R1, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 SYSTEM ̲CLOSE
R1 RETIRED
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲
R0 - R7 destr.
F̲l̲o̲w̲g̲r̲a̲m̲ See figure 4.2.4.10.5.5-5
f) D̲U̲M̲P̲ ̲G̲A̲Q̲ ̲R̲E̲P̲O̲R̲T̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
NUMBER is increased by one and in a CASE-statement
SET ̲REPORT ̲HEADER and COPY ̲GAQ are called with
relevant parameters. If the GAQ-report has connection
with a qel the erroneous qel is dumped.
I̲n̲t̲e̲r̲f̲a̲c̲e̲ Standard
F̲l̲o̲w̲g̲r̲a̲m̲ See figure 4.2.4.10.5.5-6
g) C̲O̲P̲Y̲ ̲G̲A̲Q̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
Copy the information standing in GAQ ̲REPORT over
in REPORT(NUMBER). This is done in a loop statement.
If the GAQ-Report has connection with an internal
error the information standing in GAQ ̲ATT's info-fields
are copied over in REPORT(NUMBER).
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) COPY ̲GAQ(LENGTH: INTEGER, ERR: GAQ ̲INFO ̲TYPE)
b) COPY ̲GAQ(R0, R1, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 LENGTH
R1 ERR
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 - R7 destr.
F̲l̲o̲w̲g̲r̲a̲m̲ See figure 4.2.4.10.5.5-7
h) H̲A̲N̲D̲L̲E̲ ̲P̲R̲O̲C̲E̲S̲S̲ ̲T̲A̲B̲L̲E̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
In a loop the entry for the process is found. The
type of the process is found, the error-counter
is incremented by one and it is checked that the
error-conter has not reached a threshold.
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) HANDLE ̲PROCESS ̲TABLE( )(PROC ̲TYPE:
ERROR ̲PROCESS ̲TYPE,
RET: BOOLEAN)
b) HANDLE ̲PROCESS ̲TABLE(R0, R1, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 PROC ̲TYPE
R1 RET
R2 - R7 destr.
i) D̲U̲M̲P̲ ̲P̲S̲E̲ ̲R̲E̲P̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
The report id is incremented by one and
SET ̲REPORT ̲HEADER is called. In a loop statement
the PSE-report is copied over in REPORT(NUMBER).
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) DUMP ̲PSE ̲REP(REP: REP ̲TYPE)
b) DUMP ̲PSE ̲REP(R0, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 REP
R6 Link
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 - R7 destr.
F̲l̲o̲w̲g̲r̲a̲m̲ See figure 4.2.4.10.5.5-9
j) P̲R̲I̲N̲T̲ ̲S̲U̲B̲P̲R̲O̲C̲E̲S̲S̲ ̲Q̲E̲L̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
In a loop-statement the qels occurred by the subprocess,
specified in the call parameter SUBPROC, are dumped.
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) PRINT ̲SUBPROCESS ̲QEL(SUBPROC: SUBPROCESS ̲INDEX)
b) PRINT ̲SUBPROCESS ̲QEL(R0, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 SUBPROC
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 - R6 destr.
F̲l̲o̲w̲g̲r̲a̲m̲ See figure 4.2.4.10.5.5.10
PROCEDURE
REPORT ̲MAKER(REP: ERROR ̲REPORT ̲TYPE)
BEGIN
CASE REP OF
GARBLE? GARBLE ̲HANDLING
PSE ̲ERROR? PSE ̲ERROR ̲HANDLING
END CASE REP
SEND ̲REPORTS
END PROCEDURE REPORT ̲MAKER
Figure 4.2.4.10.5.5-1
PROCEDURE
PSE ̲ERROR ̲HANDLING
BEGIN
CAMPS ̲MODE EQ NORMAL? DUMP ̲PSE ̲REPORT (TRUE)
HANDLE ̲PROCESS ̲TABLE( ) (PROC ̲TYPE, RETIRE)
CASE PROC ̲TYPE OF
VITAL, DUMMY? DUMP ̲PSE ̲REPORT (TRUE)
RETIREABLE? DUMP ̲PSE ̲REPORT (FALSE)
CASE CLEAN ̲UP ̲PROCESS
(PSE ̲REPORT.
PARENT ̲INDEX, -1) OF
ERROR? ANALYZE ̲ERROR(CC;0)
OK?
END CASE CLEAN ̲UP ̲PROCESS
END CASE PROC ̲TYPE
END PROCEDURE PSE ̲ERROR ̲HANDLING
Figure 4.2.4.10.5.5-2
PROCEDURE
DUMP ̲PSE ̲REPORT(SYSTEM ̲CLOSE: BOOLEAN)
BEGIN
DUMP ̲PSE ̲REP(PSE)
QEL ̲PRINT = 0
J = COPSY ̲P ̲NO
LOOP "FIND ̲PROCESS ̲NO
J = J + 1
PSE ̲REPORT ̲PARENT ̲INDEX EQ PROCESS ̲TABLE(J).OBJECT?
PROCESS ̲NO = PROCESS ̲TABLE(J).PROCESS
̲NO EXIT
J EQ NO ̲OF ̲PROCESSES? ERROR ̲SEH(COPSY ̲INT
̲ERROR)
QEL.PRINT = MAX ̲QEL ̲PRINT
EXIT
END LOOP FIND ̲PROCESS ̲NO
J = 0
LOOP PRINT ̲QEL
J EQ NO ̲OF ̲SUBPROCESSES LOGOR
? EXIT
QEL ̲PRINT EQ MAX ̲QEL ̲PRINT
J = J + 1
SUBP ̲PROCESS ̲TABLE(J).PROCESS ̲NO EQ PROCESS ̲NO?
PRINT ̲SUBPROCESS ̲QEL(J)
END LOOP PRINT ̲QEL
SAVE ̲GARBLE(PSE)
SYSTEM ̲CLOSE EQ FALSE? PRINT ̲REPORT(PSE ̲REP)
PU ̲DOWN(PSE ̲REPORT, REPORT ̲ID)
END PROCEDURE DUMP ̲PSE ̲REPORT
Figure 4.2.4.10.5.5-3
PROCEDURE
GARBLE ̲HANDLING
CAMPS ̲MODE EQ NORMAL? DUMP ̲PSE ̲GAQ ̲REPORT(TRUE,
TRUE)
HANDLE ̲PROCESS ̲TABLE( ) (PROC ̲TYPE, RETIRE)
CASE PROC ̲TYPE OF
VITAL,
DUMMY?
GAQ ̲REPORT.STANDARD ̲PART.USER ̲ACTION EQ
GIVE ̲UP
?
LOGOR RETIRE EQ TRUE
DUMP ̲PSE ̲GAQ ̲REPORT (TRUE, TRUE)
DUMP ̲PSE ̲GAQ ̲REPORT (FALSE, FALSE)
RETIREABLE?
GAQ ̲REPORT.STANDARD ̲PART.USER ̲ACTION EQ
GIVE ̲UP
?
LOGORE RETIRE EQ TRUE
DUMP ̲PSE ̲GAQ ̲REPORT (TRUE, FALSE)
DUMP ̲PSE ̲GAQ ̲REPORT (FALSE, FALSE)
END CASE PROC ̲TYPE
END PROCEDURE GARBLE ̲HANDLING
Figure 4.2.4.10.5.5-4
PROCEDURE
DUMP ̲PSE ̲GAQ ̲REPORT(RETIRED: BOOLEAN, SYSTEM ̲CLOSE)
BEGIN
DUMP ̲PSE ̲REP(PGE)
DUMP ̲GAQ ̲REPORT
QEL ̲PRINT = 0
RETIRED EQ TRUE?
PRINT ̲SUBPROCESS ̲QEL(PSE ̲REPORT.SECONDARY)
CASE CLEAN ̲UP ̲PROCESS(PSE ̲REPORT.PARENT ̲INDEX,-1)
ERROR? ANALYZE ̲ERROR(CC,0)
OK?
END CASE CLEAN ̲UP ̲PROCESS
I = 0
LOOP
I EQ NO ̲OF ̲PROCESSES? EXIT
I = I + 1
PROCESS ̲TABLE(I).OBJECT EQ
PSE ̲REPORT.PARENT ̲INDEX?
PROCESS ̲TABLE(I).STATUS = ERROR
END LOOP
CASE RESUME ̲PROCESS(PSE ̲REPORT.PARENT ̲INDEX,-1)
ERROR? ANALYZE ̲ERROR(CC,0)
OK?
END CASE RESUME ̲PROCESS
SAVE ̲GARBLE
SYSTEM ̲CLOSE EQ FALSE? SEND ̲REPORT
PU ̲DOWN(PSE ̲REPORT, REP ̲ID)
END PROCEDURE DUMP ̲PSE ̲GAQ ̲REPORT
Figure 4.2.4.10.5.5-5
PROCEDURE
DUMP ̲GAQ ̲REPORT
BEGIN
NUMBER = NUMBER + 1
CASE GAQ ̲REPROT.STANDARD ̲PART.ERROR ̲TYPE OF
QERROR?
SET ̲REPORT ̲HEADER(NUMBER)
COPY ̲GAQ (GQE ̲LENGTH, QERROR)
DUMP ̲QEL(GAQEL, GAQ ̲ATT, PSE ̲REPORT.SECONDARY)
INTERNAL?
SET ̲REPORT ̲HEADER(NUMBER)
COPY ̲GAQ(GIE ̲LENGTH, INTERNAL)
TIMEOUT?
SET ̲REPORT ̲HEADER(NUMBER)
COPY ̲GAQ(GTE ̲LENGTH, TIMEOUT)
END CASE GAQ ̲REPORT.STANDARD ̲PART.ERROR ̲TYPE
END PROCEDURE DUMP ̲GRQ ̲REPORT
Figure 4.2.4.10.5.5-6
PROCEDURE
COPY ̲GAQ(LENGTH: INTEGER, ERR: GAQ ̲INFO ̲TYPE)
BEGIN
EQUIVALENCE(GAQ ̲REPORT, REP: ARRAY(1..LENGTH)
OF INTEGER)
I = 0
LOOP
I EQ LENGTH? EXIT
I = I + 1
CONVERT ̲INTEGER ̲TO ̲HEX(REP(I))(HEXA)
REPORT(NUMBER).INFO(I) = HEXA
END LOOP
ERR = INTERNAL?
EQUIVALENCE(GAQ ̲ATT.HEADER.INFO, REP:
ARRAY(LENGTH + 1, LENGTH +
4) OF INTEGER)
LOOP
I EQ LENGTH + 4? EXIT
I = I + 1
CONVERT ̲INTEGER ̲TO ̲HEX(REP(I))(HEXA)
REPORT ̲NUMBER.INFO(I) = HEXA
END LOOP
END PROCEDURE COPY ̲GAQ
Figure 4.2.4.10.5.5-7
PROCEDURE HANDLE ̲PROCESS ̲TABLE( )(PRO ̲TYPE, RET)
BEGIN
I = 0
LOOP
I = I + 1
PROCESS ̲TABLE(I).OBJECT EQ PSE ̲REPORT.PARENT
̲INDEX?
PRO ̲TYPE = PROCESS ̲TABLE(I).TYPE ̲OF ̲PROCESS
PROCESS ̲TABLE(I).ERROR ̲COUNT = PROCESS
̲TABLE.
ERROR ̲COUNT
+ 1)
PROCESS ̲TABLE(I).ERROR ̲COUNT GT PROCESS
̲TABLE(I).
MAX
̲COUNT?
RET = TRUE
RET = FALSE
EXIT
I GE MAX ̲PROCESSES?
ERROR ̲SEH(HANDLING ̲PROC ̲TAB, COPSY ̲INT ̲ERROR)
PROC ̲TYPE = VITAL EXIT
END LOOP
END PROCEDURE HANDLE ̲PROCESS ̲TABLE
Figure 4.2.4.10.5.5-8
PROCEDURE
DUMP ̲PSE ̲REP(REP: REP ̲TYPE)
BEGIN
NUMBER = 1
REP ̲ID = REP ̲ID + 1
SET ̲REPORT ̲HEADER(NUMBER, REP, REP ̲ID)(REPORT(NUMBER))
EQUIVALENCE(PSE ̲REPORT: REPORT ARRAY(1..PSE ̲LENGTH)
OF INTEGER)
I = 0
LOOP
I EQ PSE ̲LENGTH? EXIT
I = I + 1
CONVERT ̲INTEFER ̲TO ̲HEX(REPORT(I))(HEXA)
REPORT(NUMBER).INFO(I) = HEXA
END LOOP
END PROCEDURE DUMP ̲PSE ̲REPORT
Figure 4.2.4.10.5.5-9
PROCEDURE
PRINT ̲SUBPROCESS ̲QEL(SUBPROC: SUBPROCESS ̲INDEX)
BEGIN
LOOP
QEL ̲PRINT EQ MAX ̲QEL ̲PRINT? EXIT
QEL ̲PRINT = QEL ̲PRINT + 1
CASE GET ̲SUBPROC ̲QEL(SUBPROC)
(GAQEL, GAQ ̲ATT, GAQSUB ̲NO,CC) OF
ERROR? EXIT
OK? DUMP ̲QEL(GAQEL, GAQ ̲ATT, SUBPROC)
END CASE GET ̲SUBPROC ̲QEL
GAQ ̲ATT.OBJECT EQ VIEW?
QEL ̲PRINT = MAX ̲QEL ̲PRINT
END LOOP
END PROCEDURE PRINT ̲SUBPROCESS ̲QE
Figure 4.2.4.10.5.5-10
4.2.4.10.6 D̲U̲M̲P̲ ̲Q̲E̲L̲
4.2.4.10.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̲
This module takes the attributes of a qel, specified
in the calling parameter, and dumps these in a report.
If the qel has connection to a view, the attributes
of the view are dumped in the report.
4.2.4.10.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) DUMP ̲QEL(QEL: QEL ̲REFERENCE,
ATT: QEL ̲ATTRIBUTES,
SUBP: SUBPROCESS ̲INDEX)
b) DUMP ̲QEL(R1, R2, R3, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R1 pointer to ATT
R2 QEL
R3 SUBP
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 - R7 destr.
4.2.4.10.6.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
This module consists of the procedure
- DUMP ̲QEL
- DUMP ̲VIEW
- DUMP ̲FIELD ̲INFORMATION
- DUMP ̲FIELD ̲INFO
and calls the common SEH procedures
- SET ̲REPORT ̲HEADER
- CONVERT ̲INTEGER ̲TO ̲HEX
and the CSF-functions
- GET ̲VIEW ̲ATTRIBUTES
4.2.4.10.6.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
a1) T̲y̲p̲e̲ ̲a̲n̲d̲ ̲C̲o̲n̲s̲t̲a̲n̲t̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
QEL ̲REFERENCE,
QEL ̲ATTRIBUTES,
SUBPROCESS ̲INDEX DBD
Q ̲ATT ̲SIZE,
MAX ̲QEL ̲PRINT,
VIEW ̲LENGTH, 4-2-4-11
VIEW ̲INFO ̲SIZE
a2) D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
QEL,
ATT,
SUBP I/F-data
NUMBER,
REP ̲ID,
REPORT,
HEXA, 4.2.4.11
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
QEL
ATT
ATT.OBJECT
SUBP
NUMBER (M)
REP ̲ID
REPORT (M)
HEXA (M)
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
CONST
VIEW ̲LENGTH = 77
"indicates the size of a view attribute
VIEW ̲INF ̲SIZE = 5
"indicates the size of the "description" of
a view
MAX ̲VIEW ̲R = 4
"indicates the number of reports used to dump
the information of view attributes.
FIELD ̲INFO ̲IN ̲R = 3
"indicates the size of an info field in the
view attributes.
Q ̲ATT ̲SIZE = 16
"indicates the length for qel attributes
VAR
VIEW ̲ATT: VIEW ̲ATTRIBUTES
"keep the attributes of a VIEW
INFO ̲NO: INTEGER
"indicates the number in the info field of
an error report in which data shall be stored
VAR
FIELD ̲INFO ̲NO: 1..2
"indicates the number of the field information
in the view attributes to be dumped
NO ̲OF ̲VIEW ̲R: 1..4
"indicates how many report the view field up
NO ̲OF ̲FIELD ̲INFO: 1..3
"indicates the number of field information,
which are copied over in a report
I: INTEGER "counts
4.2.4.10.6.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
a) D̲U̲M̲P̲ ̲Q̲E̲L̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
Increase NUMBER by one and call the common SEH-procedure
SET ̲REPORT ̲HEADER. In a loop statement the attributes
of the qel are copied over in a report. If the
qel has connection to a view GET ̲VIEW ̲ATTRIBUTES
and DUMP ̲VIEW are called.
I̲n̲t̲e̲r̲f̲a̲c̲e̲ Refer sec. 4.2.4.10.6.2
F̲l̲o̲w̲g̲r̲a̲m̲ See figure 4.2.4.10.6.5-1
b) D̲U̲M̲P̲ ̲V̲I̲E̲W̲ ̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
Increase NUMBER by one and call the procedure
SET ̲REPORT ̲HEADER. In a loop the first 5 words
of the view attributes are copied over in the report.
At last DUMP ̲FIELD ̲INFORMATION is called.
I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲ Standard
F̲l̲o̲w̲g̲r̲a̲m̲ See figure 4.2.4.10.6.5-2
c) D̲U̲M̲P̲ ̲F̲I̲E̲L̲D̲ ̲I̲N̲F̲O̲R̲M̲A̲T̲I̲O̲N̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
Dumps the information fields of a view in four
reports.
I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲S̲t̲a̲n̲d̲a̲r̲d̲
F̲l̲o̲w̲g̲r̲a̲m̲ See figure 4.2.4.10.6.5-3
d) D̲U̲M̲P̲ ̲F̲I̲E̲L̲D̲ ̲I̲N̲F̲O̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
Copies the information from a field of a view attribute
over in a report.
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) DUMP ̲FIELD ̲INFO(FIELD ̲INFO ̲NO, INFO ̲NO: INTEGER)
(INFO ̲NO: INTEGER)
b) DUMP ̲FIELD ̲INFO(R0, R1, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 FIELD ̲INFO ̲NO
R1 INFO ̲NO
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲
R1 INFO ̲NO
R0 R2-R destr.
F̲l̲o̲w̲g̲r̲a̲m̲ See figure 4.2.4.10.6.5-4
PROCEDURE
DUMP ̲QEL(QEL: QEL ̲REFERENCE, ATT: ATTRIBUTES, SUBP:
SUB-
PROCESS ̲INDEX)
BEGIN
NUMBER = NUMBER + 1
SET ̲REPORT ̲HEADER(NUMBER, QEL ̲R, REP ̲ID, SUBP)
(REPORT(NUMBER))
EQUIVALENCE(ATT, Q ̲ATT: ARRAY(1..Q ̲ATT ̲SIZE)
OF
INTEGER)
I = 0
LOOP
I GE Q ̲ATT ̲SIZE? EXIT
I = I + 1
CONVERT ̲INTEGER ̲TO ̲HEX(Q ̲ATT(I)(HEXA)
REPORT(NUMBER).INFO(I) = HEXA
END LOOP
ATT.OBJECT EQ VIEW?
GET ̲VIEW ̲ATTRIBUTES(QEL)(VIEW ̲ATT)
DUMP ̲VIEW
QEL ̲PRINT = MAX ̲QEL ̲PRINT
END PROCEDURE DUMP ̲QEL
Figure 4.2.4.10.6.5-1
PROCEDURE
DUMP ̲VIEW
BEGIN
NUMBER = NUMBER + 1
SET ̲REPORT ̲HEADER(NUMBER, VIEW ̲R, REP ̲ID, SUBP)
(REPORT(NUMBER))
EQUIVALENCE(VIEW ̲ATT, VIEW ̲A: ARRAY(1..VIEW ̲LENGTH)
OF INTEGER)
INFO ̲NO = 0
LOOP
INFO ̲NO EQ VIEW ̲INF ̲SIZE? EXIT
INFO ̲NO = INFO ̲NO + 1
CONVERT ̲INTEGER ̲TO ̲HEX(VIEW ̲A(INFO ̲NO)(HEXA)
REPORT(NUMBER).INFO(INFO ̲NO))(HEXA
END LOOP
DUMP ̲FIELD ̲INFORMATION
END PROCEDURE DUMP ̲VIEW
Figure 4.2.4.10.6.5-2
PROCEDURE
DUMP ̲FIELD ̲INFORMATION
BEGIN
FIELD ̲INFO ̲NO = 1
DUMP ̲FIELD ̲INFO(FIELD.INFO ̲NO, INFO ̲NO)(INFO ̲NO)
FIELD ̲INFO ̲NO = 2
DUMP ̲FIELD ̲INFO(FIELD ̲INFO ̲NO, INFO ̲NO)(INFO ̲NO)
NO ̲OF ̲VIEW ̲R = 1
LOOP DUMP ̲VIEW ̲ATT
NO ̲OF ̲VIEW ̲R EQ MAX ̲VIEW ̲R? EXIT
NO ̲OF ̲VIEW ̲R = NO ̲OF ̲VIEW ̲R + 1
NUMBER = NUMBER + 1
SET ̲REPORT ̲HEADER(NUMBER, VIEW ̲R, REP ̲ID, SUBP)
(REPORT(NUMBER))
NO ̲OF ̲FIELD ̲INFO = 0
INFO ̲NO = 0
LOOP DUMP ̲FIELD ̲INFO
NO ̲OF ̲FIELD ̲INFO EQ FIELD ̲INFO ̲IN ̲R? EXIT
NO ̲OF ̲FIELD ̲INFO = NO ̲OF ̲FIELD ̲INFO + 1
FIELD ̲INFO ̲NO = FIELD ̲INFO ̲NO + 1
DUMP ̲FIELD ̲INFO(FIELD ̲INFO ̲NO,
INFO ̲NO)(INFO ̲NO)
END LOOP DUMP ̲FIELD ̲INFO
END LOOP DUMP ̲VIEW ̲ATT
NUMBER = NUMBER + 1
SET ̲REPORT ̲HEADER(NUMBER, VIEW ̲R,
REP ̲ID, SUBP)(REPORT(NUMBER))
DUMP ̲FIELD ̲INFO(12,0)(INFO ̲NO)
END PROCEDURE DUMP ̲FIELD ̲INFORMATION
Figure 4.2.4.10.6.5-3
PROCEDURE
DUMP ̲FIELD ̲INFO(FIELD ̲INFO ̲NO, INFO ̲NO, INTEGER)(INFO
̲NO)
BEGIN
EQUIVALENCE(VIEW ̲ATT, VIEW ̲A; ARRAY(1..VIEW
̲LENGTH)
OF
INTEGER
INFO ̲NO = INFO ̲NO + 1
CONVERT ̲INTEGER ̲TO ̲HEX(FIELD ̲INFO ̲NO)(HEXA)
REPORT(NUMBER).INFO(INFO ̲NO) = HEXA
I = 0
LOOP
I GE FIELD ̲INFO ̲SIZE EXIT
I = I + 1
VIEW ̲INFO ̲NO = VIEW ̲INFO ̲NO + 1
INFO ̲NO = INFO ̲NO + 1
CONVERT ̲INTEGER ̲TO ̲HEX(VIEW ̲A(VIEW ̲INFO
̲NO)
(HEXA)
REPORT(NUMBER).INFO(INFO ̲NO) = HEXA
END LOOP
END PROCEDURE DUMP ̲FIELD ̲INFO
Figure 4.2.4.10.6.4.5-4
PROCEDURE
DUMP ̲FIELD ̲INFO(FIELD ̲INFO ̲NO, INFO ̲NO, INTEGER)(INFO
̲NO)
BEGIN
LOOP
EQUIVALENCE (VIEW ̲ATT, VIEW ̲A, ARRAY(1..VIEW
̲LENGTH)
OF
INTEGER)
INFO ̲NO = INFO ̲NO + 1
CONVERT ̲INTEGER ̲TO ̲HEX(FIELD ̲INFO ̲NO)(HEXA)
REPORT(NUMBER).INFO(INFO ̲NO) = HEXA
END LOOP
END PROCEDURE DUMP ̲FIELD ̲INFO
Figure 4.2.4.10.6.4.5-4
4.2.4.11 C̲o̲m̲m̲o̲n̲ ̲S̲E̲H̲ ̲D̲a̲t̲a̲
E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
PSE,
CESE see DBD
PROCESS ̲TABLE see 4.1.4
SUBP ̲PROCESS ̲TABLE see 4.1.4
T̲y̲p̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
ROP ̲REPORT ̲TYPE see 4.1.4
ERROR ̲PROCESS ̲TYPE see 4.1.4
SEH ̲INT ̲CMD ̲SUBTYPE = (AWAIT ̲PSEL,
AWAIT ̲CESEL,
RESET ̲PRC ̲TABL)
SEH ̲LOC ̲TYPE = (SEH ̲MAIN SER ̲INPUT,
SEH ̲CLOSE ̲DOWN,
RESET ̲PROC ̲TABLE
FIND ̲TYPE ̲REPORT,
HANDLE ̲PROC ̲TAB,
SYS ̲CALL)
V̲a̲r̲i̲b̲a̲l̲e̲
VAR AWAIT ̲SECE:SCM ̲FUNCTION see DBD
"used as system call function for awaiting on
CESE.
VAR AWAIT ̲PES : SCM ̲FUNCTION see DBD
"used as system call function for awaiting on
PSE
VAR CESE ̲OP : LONG ̲OP ̲TYPE see 4.1.4
"keep the awaiting operation on CESE,
VAR PSE ̲OP : LONG ̲OP ̲TYPE see 4.1.4
"keep the awaiting operation on PSE
VAR OP : LONG ̲OP ̲TYPE see 4.1.4
"keep a received operation
VAR TMON ̲REQUEST : REQUEST ̲TIME see DBD
"used to send request to TMON for periodically
timeouts
VAR CESE ̲REPORT : CESE ̲INFO see DAMOS
"used to keep information received from CESE
VAR PSE ̲REPORT : CHILD ̲INFO see DAMOS
"used to keep information received from PSE
VAR GAQEL : QEL ̲REFERENCE see DBD
"pointer to a QEL, which is received from GAQ
VAR GAQ ̲ATT : QEL ̲ATTRIBUTES see DBD
"keep the attributes of a received qel
VAR GAQSUB ̲NO : INTEGER
"the relativ number of the subqueue within GAQ,
from which a QEL is received
VAR GAQ ̲REPORT : QUEUE ̲GARBLE ̲OUTPUT see DBD
"keeps the information from a received GAQ-report
VAR PRINT ̲REP : REPORT ̲TYPE, see 4.1.4
"used to keep the information of an error-report,
which shall be printed (dumped)
VAR CLOSE ̲DOWN ̲STARTED : BOOLEAN
"indicates that a close-down command is received
or not.
VAR CC : INTEGER
"used as completion code
VAR I, J : INTEGER
"help variable
TYPE
REPORT ̲TYPE = RECORD
R ̲TYPE: REPTYPE "see sec. 4.1.4
CONTINUE: BOOLEAN
SECTOR ̲ID,
REP ,
ID ,
SUBP : STRING "see sec. 4.1.4
INFO : ARRAY(1..REPORT ̲SIZE)
OF STRING
see sec. 4.1.4
END RECORD
VAR
REPORT = ARRAY(1..NO ̲OF ̲REPORTS) OF REPORT ̲TYPE
"used to hold the information of an error-report.
NUMBER: 1..NO ̲OF ̲REPORTS
"indicates the number of the report actual used.
HEXA: STRING
"keep information about an element, which shall
be dumped in a report.
TABLE ̲SPEC
GARBLE ̲SPEC: FILE ̲ADDR refer DAMOS
"used when writing on the garble pool file.
TABLE ̲BLE,
GARBLE ̲BLE: BUFFER ̲LIST ̲ELEMENT refer DAMOS
"indicates startaddr of element, which shall be
dumped on the garble pool file.
CONST
GQE ̲LENGTH = 7
GIE ̲LENGTH = 5
GTE ̲LENGTH = 6
TABLE ̲SIZE = 4
GARBLE ̲SECTOR ̲SIZE = 112
MAX ̲QEL ̲PRINT = 4
NO ̲OF ̲REPORTS = 11
VAR
QEL ̲PRINT: 0..MAX ̲QEL ̲PRINT
"used to indicate how many qels of a (3ub)
process, which have been dumped.
D̲a̲t̲a̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲ ̲o̲f̲ ̲S̲W̲-̲E̲r̲r̲o̲r̲-̲R̲e̲p̲o̲r̲t̲
A SW-error report is build of a number of part report,
where each part report is of the type REPORT ̲TYPE.
The first part report will always be a RSE-report.
If the PSE-report has connection with a GAQ-report
the next part report will be the GAQ-report.
At last a number of qel/view comes. It notices that
a VIEW-report fields four part reports.
When written on the WDP ̲ROP every part report will
have a "header" as described below. Every field is
of four chars. The header of a report is :
SECTOR ̲ID REP ̲TYPE REP ̲ID SUBP
SECTOR ̲ID indicates on which garble sector the part
report is dumped.
REP ̲TYPE indicates the type of a part report.
REP ̲ID is an unambiguous identification of an error
report.
SUBP is identification of the erroneous subprocess.
For PSE report this field is undefined.
After the header comes the information of the part
report written in hex, as SEH receives it from the
system.
D̲a̲t̲a̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲ ̲o̲f̲ ̲t̲h̲e̲ ̲G̲A̲R̲B̲L̲E̲ ̲P̲O̲O̲L̲-̲f̲i̲l̲e̲
The GARBLE ̲POOL file will for SEH point of view be
considered as a number of garble-sections each of a
length on 112 bytes. In the start of the file lies
a table, which describes the sections.
Each part of an error report will lie in an sector
stating in the beginning of the sector. The data will
be copy to the file in ASCII and if a data is an integer
it will be written in hex.
For each garble sector the table contains a field indicating
the type of the report stored in the garble-sector
and a field indicating about the report continues or
not.
A garble sector contains a part of an error report
written in ASCII.
4.2.4.12 C̲o̲m̲m̲o̲n̲ ̲S̲E̲H̲ ̲p̲r̲o̲c̲e̲d̲u̲r̲e̲
4.2.4.12.1 I̲N̲I̲T̲ ̲S̲E̲H̲ ̲S̲Y̲S̲ ̲C̲A̲L̲L̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
This initiates an coroutine operation and associates
this to SEH ̲OS.
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) INIT ̲SEH ̲SYS ̲CALL(SEH ̲SYS ̲CALL:SEH ̲SYS ̲CALL ̲TYPE)
SEH ̲SYS ̲CALL ̲TYPE = (AWAIT ̲PSEL,
RECEIVE ̲FIRST ̲QEL ̲FROM
̲GAQ)
b) INIT ̲SEH ̲SYS ̲CALL (R0, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R 0 SEH ̲SYS ̲CALL
R 6 link
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
F̲l̲o̲w̲g̲r̲a̲m̲ See Fig. 4.2.4.12.1-1
PROCEDURE INIT ̲SEH ̲SYS ̲CALL(SEH ̲SYS ̲CALL:SEH ̲SYS ̲CALL
̲TYPE)
BEGIN
CASE SEH ̲SYS ̲CALL
AWAIT ̲PSEL ?
CASE INIT ̲AWAIT ̲PSE (PSE ̲OP)
ERROR ? ANALYZE ̲ERROR(CC, 0)
OK ? ASSOCIATE(SEH ̲OS,PSE ̲OP)
END CASE INIT ̲AWAIT ̲PSE
AWAIT ̲CESEL?
CASE INIT ̲AWAIT ̲CESEL(CESE ̲OP)
ERROR ? ANALYZE ̲ERROR(CC,0)
OK ? ASSOCIATE (SEH ̲OS,CESE
̲OP)
END CASE
OTHERWISE ? ERROR ̲SEH(SYC ̲CALL,SEH ̲SYS
̲CALL)
END CASE TRUE SEH ̲SYS ̲CALL
END PROCEDURE INIT ̲SEH ̲SYS ̲CALL
Figure 4.2.4.12.1-1
4.2.4.12.2 E̲R̲R̲O̲R̲ ̲S̲E̲H̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
Makes an error-report and dumps it in the memory of
the
KERNEL.
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) ERROR ̲SEH(LOC:TYPE,ERR:COPSY ̲INFO ̲TYPE)
b) ERROR ̲SEH (R0, R1, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R 0 LOC
R 1 ERR
R 6 link
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲
N/A
D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
a 1) T̲y̲p̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
SEH ̲LOC ̲TYPE see 4.2.4.11
COPSY ̲INFO ̲TYPE see 4.1.4
a 2) D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
LOC,
ERR I/F data
PRINT ̲REP,
OP,
GAQ ̲ATT
PSE ̲REPORT see 4.2.4.11
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
PRINT ̲REP.REPORT (16) (m)
.
.
PRINT ̲REP.REPORT (6) (m)
PRINT ̲REP.REPORT (I) (m)
PRINT ̲REP.SIZE (m)
OP.CMD-TYPE
OP.CMD
GAQ ̲ATT.HEADER.MAINTYPE
GAQ ̲ATT.HEADER.SUBTYPE
PSE ̲REPORT equivalent with REPORT:ARRAY(5..22)
OF INTEGER
F̲l̲o̲w̲g̲r̲a̲m̲ see fig. 4.2.4.12.2-1
PSE ̲REPORT. PARANT ̲INDEX
PROCEDURE
ERROR ̲SEH
BEGIN
PRINT ̲REP.REPORT (1) = ERR
PRINT ̲REP.REPORT (2) = CONTINUE
PRINT ̲REP.REPORT (3) = SEH ̲COR
PRINT ̲REP.REPORT (4) = LOC
CASE ̲LOC OF
SEH ̲MAIN, SER ̲INPUT, SEH ̲CLOSE ̲DOWN?
PRINT ̲REP.REPORT (5) = OP.CMD ̲TYPE
PRINT ̲REPORT (6) = OP.CMD
PRINT ̲REP. SIZE = 6
RESET ̲PROC ̲TABLE?
PRINT ̲REP. REPORT (5) = GAQ ̲ATT.HEADER.MAINTYPE
PRINT ̲REP. REPORT (6) = GAQ ̲ATT.HEADER.SUBTYPE
PRINT ̲REP. SIZE = 6
FIND ̲TYPE ̲REPORT?
EQUIVALENCE(PSE ̲REPORT, REPORT: ARRAY(5..22)
OF INTEGER
I = 4
LOOP
I = I + 1
PRINT ̲REP.REPORT (I) .REPORT (I)
I EQ 22? EXIT
END LOOP
Figure 4.2.4.12.2-1 (1/2)
HANDLE ̲PROC ̲TAB?
PRINT ̲REP.SIZE = 5
SYS ̲CALL?
PRINT ̲REP.REPORT (1) = COPSY ̲INT.ERROR
PRINT ̲REP.REPORT (5) = ERR
PRINT ̲REP.SIZE = 5
PU ̲DOWN (COPSY ̲, PRINT ̲REP)
END CASE LOC
REPORT ̲ERROR (ERR, PRINT ̲REP)
END PROCEDURE ERROR ̲SEH
Fig. 4.2.4.12.2-1 (2/2)
4.2.4.12.3 S̲A̲V̲E̲ ̲G̲A̲R̲B̲L̲E̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲
This procedure dumped an error-report on the file GARBLE
̲POOL. This is done in a loop, in which a garble report
part is dumped and the garble table is updated.
I̲n̲t̲e̲r̲f̲a̲c̲e̲
a) SAVE ̲GARBLE
b) SAVE ̲GARBLE(R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
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̲
R0 - R7 destr.
F̲l̲o̲w̲g̲r̲a̲m̲ refer figure 4.2.4.12.3-1
PROCEDURE
SAVE ̲GARBLE
BEGIN
PRINT ̲NUMBER = 0
LOOP
PRINT ̲NUMBER EQ NUMBER? EXIT
PRINT ̲NUMBER = PRINT ̲NUMBER + 1
GARBLE ̲SPEC.FIRST ̲BYTE =
GARBLE ̲SPEC.FIRST ̲BYTE + GARBLE ̲SECTOR
̲SIZE
GARBLE ̲BLE.ADDR = ADDRESS(REPORT(NUMBER).SECTOR
̲ID)
CASE MODIFY ̲BYTES(GARBLE, GARBLE: SPEC, GARBLE
̲BLE)
(GARBLE
̲SPEC, CC)
ERROR? ANALYZE ̲ERROR(CC,0)
OK?
END CASE MODIFY ̲BYTES
TABLE ̲SPEC.FIRST ̲BYTE =
TABLE ̲SPEC.FIRST ̲BYTE + TABLE ̲SIZE
TABLE ̲BLE.ADDR = ADDRESS(REPORT ̲NUMBER)
CASE MODIFY ̲BYTES(GARBLE, TABLE ̲SPEC, TABLE
̲BLE)
(TABLE ̲SPEC,
CC)
ERROR? ANALYZE ̲ERROR(CC,0)
OK?
END CASE MODIFY ̲BYTES
END LOOP
END PROCEDURE
Figure 4.2.4.12.3-1
4.2.4.12.4 S̲E̲T̲ ̲R̲E̲P̲O̲R̲T̲ ̲H̲E̲A̲D̲E̲R̲
F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
This procedure receives an empty report from ERROR
̲REPORT ̲OS
and sets the header in this on basic of calling parameter.
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) SET ̲REPORT ̲HEADER(NUMBER: INTEGER, REP ̲T: REP ̲TYPE,
REP ̲ID: INTEGER, SUBP: SUB-
PROCESS ̲INDEX, SIZE: INTEGER)(REPORT
(NUMBER): REPORT ̲TYPE)
b) SET ̲REPORT ̲HEADER(R0, R1, R2, R3, R4, R5, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲
R0 NUMBER
R1 REP ̲T
R2 REP ̲ID
R3 SUBP
R4 SIZE
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲
R5 pointer to REPORT(NUMBER)
R0 - R4, R6 - R7 destr.
F̲l̲o̲w̲g̲r̲a̲m̲ See figure 4.2.4.12.4-1
PROCEDURE
SET ̲REPORT ̲HEADER(NUMBER: INTEGER, REP ̲T: REP ̲TYPE,
REP ̲ID: INTEGER,
SUBP: SUBPROCESS ̲INDEX, SIZE: INTEGER)(REPORT(NUMBER):
REPORT ̲TYPE)
BEGIN
WAIT ̲OPSEM(ERROR ̲REPORT ̲OS)(REPORT(NUMBER))
SEC ̲NO EQ NO ̲OF ̲GARBLE ̲SEC? SEC ̲NO = 1
SEC ̲NO = SEC ̲NO + 1
CONVERT ̲INTEGER ̲TO ̲HEX(SEC ̲NO)(HEXA)
REPORT(NUMBER).SECTOR ̲ID = HEXA
CONVERT ̲INTEGER ̲TO ̲HEX(REP ̲ID)(HEXA)
REPORT(NUMBER).ID = HEXA
CASE REP ̲T OF
PSE? REPORT(NUMBER).REP =
"PSE "
PGE? REPORT(NUMBER).REP =
"PGE "
GQE? REPORT(NUMBER).REP =
"GQE " GTE? REPORT(NUMBER).REP
=
"GTE
"
GIE? REPORT(NUMBER).REP =
"GIE "
QEL ̲R? REPORT(NUMBER).REP =
"QEL "
VIEW ̲R? REPORT(NUMBER).REP =
"VIEW "
END CASE REP ̲T
CONVERT ̲INTEGER ̲TO ̲HEX
REPORT(NUMBER).SUBP = HEXA
REPORT(NUMBER).R ̲TYPE = REP ̲T
REPORT(NUMBER).SIZE = SIZE
REPORT(NUMBER).CONTINUE = FALSE
NUMBER GT 1? REPORT(NUMBER-1).CONTINUE
= TRUE
END PROCEDURE SET ̲REPORT ̲HEADER
Figure 4.2.4.12.4-1…86…1 …02… …02… …02… …02… …02…
4.2.4.12.5 C̲O̲N̲V̲E̲R̲T̲ ̲I̲N̲T̲E̲G̲E̲R̲ ̲T̲O̲ ̲H̲E̲X̲
F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
Gets an integer as input parameter, and converts this
to a hexdecimal number, which is the output.
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) CONVERT ̲INTEGER ̲TO ̲HEX(I: INTEGER)(HEXA:STRING)
b) CONVERT ̲INTEGER ̲TO ̲HEX(R0, R1, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲
R0 I
R1 pointer to HEXA (kept)
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲
R0, R2 - R7 destr.
F̲l̲o̲w̲g̲r̲a̲m̲ See figure 4.2.4.12.5-1
PROCEDURE
CONVERT ̲INTEGER ̲TO ̲HEX(I: INTEGER)(HEXA:STRING)
BEGIN
STRING ̲NO = 0
LOOP
STRING ̲NO EQ 4? EXIT
STRING ̲NO = STRING ̲NO + 1
CHAR = I MOD 16 + # 30
HEXA(STRING ̲NO) = LOW ̲BYTE ̲OF(CHAR)
I = rigth shift by 4 (I)
END LOOP
END PROCEDURE CONVERT ̲INTEGER ̲TO ̲HEX
Figure 4.2.4.12.5-2