top - download
⟦91364178e⟧ Wang Wps File
Length: 52759 (0xce17)
Types: Wang Wps File
Notes: Spelunked
Names: »~ORPHAN61.00«
Derivation
└─⟦c518842e8⟧ Bits:30006081 8" Wang WCS floppy, CR 0125A
└─ ⟦this⟧ »~ORPHAN61.00«
WangText
<…09…<…0b…<…0e…;…0b…;…0f…;…00…; :…09…:…0d…:…01…:…02…:…07…9…0e…9…0f…9…00…9
9…07…8…09…8…0c…8…00…8…02…8…05…7…08…7…0d…7…0f…7…00…7…05…6…0a…6…0f…6…01…6 6…07…5…0a…5…0e…5…01……86…1
…02…
…02…
…02…
…02…CPS/SDS/034
…02…NJ/831101
…02…
MESSAGE
DISTRIBUTION
DETAILED
DESIGN
SPECIFICATION…02…ISSUE
1…02…CAMPS
4.2.1.4.14.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̲
MDP ̲WRITE ̲TYPE ref. sect.4.2.1.5
QUEUE ̲LIST ref. DBD, sect.10.1.7
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
MDP ̲PARAM ̲NUMBER.OF ̲ACTION ̲SCD MDP
̲PARAM.NUMBER
̲OF
̲INFO
̲SCD
MDP ̲PARAM.ACTION ̲SCD ̲OFFSET
MDP ̲FIELD ̲LIST
MDP ̲VIEW ̲REF ̲1
AC ̲INFO ̲SCD ̲OFFSET
ACTION ̲COUNT ̲OFFSET
ACTION ̲INFO ̲COUNT ̲LENGTH ref. sect.4.2.1.5
ACTION ̲OFFSET ̲OFFSET
ACTION ̲INFO ̲OFFSET ̲LENGTH
MDP ̲WRITE
̲LIST
QUEUE ̲LINE ̲LENGTH
Q ̲LIST ̲OFFSET
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
CONST NO ̲OF ̲QUEUE ̲LIST ̲AREAS = 1;
CONST NO ̲OF ̲SCD ̲LIST ̲AREAS = 3;
CONST COUNT ̲LENGTH = 1;
VAR WRITE ̲BUFFER ̲SIZE: INTEGER;
VAR MDP ̲WRITE ̲OFFSET: INTEGER;
4.2.1.4.14.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲g̲n̲
This utility module writes a specified part of the
MDP ̲BUFFER into the IMF. It is either the SCD list
field and the associated offsets and counts in the
administration field or the Queue list field. The main
procedure is the MDP ̲WRITE ̲BUFFER.Via this procedure
is the CREATE ̲SCD ̲LIST ̲WRITE ̲PARAMS and CREATE ̲QUEUE
̲LIST ̲WRITE ̲PARAMS called. This is done by a case statement.
In these procedures the appropriate WRITE ̲PARAMS are
setup. (See figure 4.2.1.4.1.4.5 -2 and 3. The actual
WRITE is erformed in the procedure MDP ̲WRITE ̲BUFFER.
See figure 4.2.1.4.1.4.5-1.…86…1…02… …02… …02… …02… …02… …02…
…02…
MDP ̲WRITE ̲BUFFER(MDP ̲WRITE)
START
CASE MDP ̲VIEW ̲WRITE
SCD ̲LIST ̲WRITE? CREATE ̲SCD ̲LIST ̲WRITE ̲PARAMS
QUEUE ̲LIST ̲WRITE? CREATE ̲QUEUE ̲LIST ̲WRITE ̲PARAMS
END CSE
WRITE ̲VIEW (WRITE ̲BUFFER ̲SIZE,
MDP ̲FIELD ̲LIST,
MDP ̲VIEW ̲REF ̲1,
MDP ̲WRITE ̲OFFSET,
(CC): ERROR ̲OK
STOP
Fig. 4.2.1.4.14.5-1…86…1…02… …02… …02… …02… …02… …02… …02…
CREATE ̲QUEUE ̲LIST ̲WRITE ̲PARAMS
START
EQUIVALENCE(MDP ̲BUFFER(Q ̲LIST ̲OFFSET),
Q ̲LIST: QUEUE ̲LIST);
MDP ̲FIELD ̲LIST.MDP NO ̲OF ̲FIELDS = NO ̲OF ̲QUEUE ̲LIST
̲AREAS
MDP ̲FELD ̲LIST.ELEMENTS(1).FIELD ̲GROUP ̲ID = QUEUE ̲LIST
̲FIELD;
MDP ̲FIELD ̲LIST.ELEMENTS(1).FIELD ̲BYTE ̲ADDRESS = ZERO
MDP ̲FIELD ̲LIST.ELEMENTS(1).RECORD ̲LENGTH = COUNT ̲LENGTH
+ (Q ̲LIST.
QUEUE ̲LINE ̲NUMBER * QUEUE ̲LINE ̲LENGTH)
MDP ̲WRITE ̲OFFSET = MDP ̲BUFER(Q ̲LIST ̲OFFSET)
WRITE ̲BUFFER ̲SIZE = COUNT ̲LENGTH + (Q ̲LIST.QUEUE ̲LINE
̲NUMBER *
QUEUE ̲LINE
̲LENGTH)
STOP
Fig. 4.2.1.4.14.5-2…86…1…02… …02… …02… …02… …02… …02… …02…
CREATE ̲SCD ̲LIST ̲WRITE ̲PARAMS
START
MDP ̲FIELD ̲LIST.MDP NO ̲OF ̲ELEMENTS = NO ̲OF ̲SCD ̲LIST
̲WRITE ̲AREAS
MDP ̲FIELD ̲LIST.FIELD ̲LIST ̲ENTRY(2).FIELD ̲GROUP ̲ID =
ADM ̲FIELD;
MDPFIELD ̲LIST.FIELD ̲LIST ̲ENTRY(2).FIELD ̲BYTE ̲ADDRESS=ACTION
̲COUNT ̲
OFFSET
*
2,
MDP ̲FIELD ̲LIST.FIELD ̲LIST ̲ENTRY(2).RECORD ̲LENGTH=ACTION
̲INFO ̲COUNT ̲
LENGTH
*
2,
MDP ̲FIELD ̲LIST.FIELD ̲LIST ̲ENTRY(3).FIELD ̲GROUP ̲ID =
ADMINISTRATION ̲
FIELD;
MDP ̲FIELD ̲LIST.FIELD ̲LIST ̲ENTRY(3).FIELD ̲BYTE ̲ADDRESS=ACTION
̲OFFSET ̲
OFFSET
*
2;
MDP ̲FIELD ̲LIST.FIELD ̲LIST ̲ENTRY(3).RECORD ̲LENGTH=ACTION
̲INFO ̲OFFSET ̲
LENGTH
*
2;
MDP ̲FIELD ̲LIST.FIELD ̲LIST ̲ENTRY(1).FIELD ̲GROUP ̲ID=SCD
̲LIST ̲IELD;
MDP ̲FIELD ̲LIST.FIELD ̲LIST ̲ENTRY(1).FIELD ̲BYTE ̲ADDRESS
=
MDP ̲PARAM.ACTION ̲SCD ̲OFFSET * 2;
MDP ̲FIELD ̲LIST.FIELD ̲LIST ̲ENTRY(1).RECORD ̲LENGTH =
(MDP ̲PARAM.NUMBER ̲OF ̲ACTION ̲SCD + MDP ̲PARAM.NUMBER
̲OF ̲INFO ̲SCD) * 4;
WRITE ̲BUFFER ̲SIZE =((MDP ̲ARAM.NUMBER ̲OF ̲ACTION ̲SCD
+
MDP
̲PARAM.NUMBER
̲OF
̲INFO
̲SCD)
*
4)
+
((ACTION
̲INFO ̲COUNT
̲LENGTH + ACTION
̲INFO ̲OFFSET
̲
LENGTH)
*
2)
MDP ̲WRITE ̲OFFSET: MPD ̲BUFFER(AC ̲INFO ̲SCD ̲OFFSET)
STOP
Fig. 4.2.1.4.14.5-3…86…1…02… …02… …02… …02… …02… …02… …02… …02…
4.2.1.4.15 T̲e̲s̲t̲ ̲M̲D̲C̲O̲ ̲I̲n̲v̲o̲c̲a̲t̲i̲o̲n̲
4.2.1.4.15.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 utility module controls the message on
basis of the specifications described in section
42.1.1.16, and requests updates of the MDCO
̲ERROR ̲LIST on basis of the control.
4.2.1.4.15.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
a) TEST ̲MDCO ̲INVOCATION (MDCO ̲ERROR ̲LIST :
INTEGER)
(MDCO
̲ERROR
̲LIST
:
INTEGER,
MDCO
̲INV
:
BOOLEAN)
b) TEST ̲DCO ̲INVOCATION(R0, R1, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 MDCO ̲ERROR ̲LIST (KEPT)
R6 LINK (DEST)
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R1 MDCO ̲INV
R2 - R7 (DEST)
4.2.1.4.15.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
UPDATE ̲MDCO ̲ERROR ̲LIST(xternal procedure)
TEST ̲MDCO ̲INVOCATION(Internal procedure)
TEST ̲MORE ̲THAN ̲ONE ̲SHI (Internal procedure)
TEST ̲SUPV ̲SPEC (Internal procedure)
CONTROL ̲MDCO ̲ERROR ̲LIST (Internal procedure)
See figure 4.2.1.4.15.3-1…86…1…02… …02… …02… …02…
…02… …02… …02… …02…
TEST ̲MDCO ̲INVOCATION COMPONENTS…01…Fig. 4.2.1.4.15.3-1…86…1…02… …02… …02… …02… …02… …02… …02… …02…
4.2.1.4.15.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̲
None
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
MDCO ̲ERROR ̲LIST (m)
MDP ̲QEL ̲ATTR.HEADER.INF
MDP ̲QEL ̲ATTR.PROFILE Ref
Sectio
4.2.1.5
MDCO ̲INV (m)
MDP ̲PARAM.CLASS
MDP ̲SYS ̲PARAM
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR
MORE ̲THAN ̲ONE : BOOLEAN
4.2.1.4.15.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
This utility module tests the following conditions
and updates the MDCO ̲ERROR ̲LIST in accordanc
with the result of each test.
- Garbled SIC
- Missing SIC
- Internal Handling Inst. detected
- Special Handling Inst. Crypto Security
detected
- Special Handling Inst. Exclusive detected
- More than one Special Handling Inst. deected
- All messages of specified classification
After end test of the parameters the MDCO ̲ERROR
̲LIST is checked an if MDCO ̲invocation is necessary
the MDCO ̲INV is set to true.…86…1…02… …02… …02… …02… …02…
…02… …02… …02… …02…
TEST ̲MDCO ̲INVOCATION
START
MDP ̲QEL ̲ATTR.HEADER.INF(BIT 9)? UPDATE ̲MDCO ̲ERROR ̲LIST(UP
̲GARBLED ̲SICS,
EQ GARBLED ̲SIC ̲DET
MDCO ̲ERROR
̲LIST)(MDCO
̲ERROR ̲LIST)
MP ̲QEL ̲ATTR.HEADER.INF(BIT 10)? UPDATE ̲MDCO ̲ERROR ̲LIST(UP ̲MISSING
̲SICS,
EQ MISSING ̲SIC ̲DET
MDCO
̲ERROR
̲LIST)(MDCO
̲ERROR
̲LIST)
MDP ̲QEL ̲ATTR.HEADER.INF(BIT 8)? UPDATE ̲MDCO ̲ERROR ̲LIST(UP
̲INT ̲HAND ̲INST
EQ IHI ̲DET
MDCO
̲ERROR
̲LIST)(MDCO
̲ERRO
̲LIST)
MDP ̲QEL ̲ATTR.PROFILE(BIT 6)? UPDATE ̲MDCO ̲ERROR ̲LIST(UP ̲S ̲H
̲I ̲CRYPTO ̲SEC
EQ CRYPTO ̲IND MDCO
̲ERROR ̲LIST)(MDP
̲ERROR ̲LIST)
MDP ̲QEL ̲ATTR.PROFILE(BIT 7)? UPDATE ̲MDCO ̲ERROR ̲LIST(UP ̲S ̲H
̲I ̲EXCL
EQ EXCL ̲IND MDCO ̲ERROR
̲LIST)(MDCO
̲EROR ̲LIST)
TEST ̲MORE ̲THAN ̲ONE ̲SHI ( ) (MORE ̲THAN ̲ONE)
MORE ̲THAN ̲ONE EQ TRUE? UPDATE ̲MDCO ̲ERROR ̲LIST(UP ̲MORE ̲THAN
̲ONE ̲SHI
MDCO
̲ERROR
̲LIST)(MDCO
̲ERROR
̲LIST)
TEST ̲SUPV ̲SPEC
CONTROL ̲MDCO ̲ERROR ̲LIST( )(MDCO ̲INV)
STOP
Fi. 4.2.1.4.15.5-1…86…1…02… …02… …02… …02… …02… …02… …02… …02…
TEST ̲SUPV ̲SPEC
START
CASE MDP ̲PARAM.CLASS OF
UNCLASSIFIED? - MDP ̲SYS ̲PARAM.MDCO
̲UNCLASSIFIED
EQ FALSE?
UPDATE
̲MDCO
̲ERROR
̲LIST(UP
̲SPEC
̲BY
̲SUPV,
MDCO
̲ERRR
̲LIST)(MDCO
̲ERROR
̲LIST)
RESTRICTED? - MDP ̲SYS ̲PARAM.MDCO
̲RESTRICTED
EQ FALSE?
UPDATE
̲MDCO
̲ERROR
̲LIST(UP
̲SPEC
̲BY
̲SUPV
MDCO
̲ERROR
̲LIST)(MDCO
̲ERROR
̲LIST)
CONFIDENTIAL? - MDP ̲SYS ̲PARAM.MDCO
̲CONFIDENTIAL
EQ FALSE?
UPDATE
̲MDCOERROR
̲LIST(OP
̲SPEC
̲BY
̲SUPV
MDCO
̲ERROR
̲LIST)(MDCO
̲ERROR
̲LIST)
SECRET? - MDP
̲SYS
̲PARAM.MDCO
̲SECRET
EQ
FALSE?
UPDATE
̲MDCO
̲ERROR
̲LIST(UP
̲SPEC
̲BY
̲SUPV
MDCO
̲ERROR
̲LIST)(MDCO
̲ERROR
̲LIST)
COSMIC ̲TOP ̲
SECRET? - MDP
̲SYS
̲PARAM.MDC
̲CTS
EQ
FALSE?
UPDATE
̲MDCO
̲ERROR
̲LIST(UP
̲SPEC
̲BY
̲SUPV
MDCO
̲ERROR
̲LIST)(MDCO
̲ERROR
̲LIST)
END CASE
STOP
Fig. 4.2.1.4.15.5-2…86…1…02… …02… …02… …02… …02… …02… …02… …02… …02… …02…
4.2.1.4.16 C̲O̲N̲V̲ ̲S̲C̲D̲ ̲L̲I̲S̲T̲ ̲T̲O̲ ̲Q̲ ̲L̲I̲S̲T̲
4.2.1.4.16.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 utility module converts a list of
SCDs to a Queue List. A fixed number of
SCDs is usedas keys for access of TMP during
each convertion loop run. This gives flexibility
in the number of SCD which can be converted.
4.2.1.4.16.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
a) CONV ̲SCD ̲LIST ̲TO ̲Q ̲LIST (SCD ̲POINTER: POINTER
̲TYPE,
NO
̲OF
̲SCD
: COUNER
̲TYPE,
MAX
̲Q
̲ENTRY: COUNTER
̲TYPE)
(SCD
̲POINTER: POINTER
̲TYPE,
MAX
̲Q
̲ENTRY: COUNTER
̲TYPE)
b) CONV ̲SCD ̲LIST ̲TO ̲Q ̲LIST(R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 NO ̲OF ̲SCD (DEST)
R4 MAX ̲Q ̲ENTRY (KEPT)
R5SCD ̲POINTER (KEPT)
R6 LINK (DEST)
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 - R3, R6 - R7 (DEST)…86…1…02… …02…
…02… …02… …02…
…02…
…02… …02…
…02… …02…
Fig. 4.2.1.4.16.3-1…01…CONV ̲SCD ̲LIST ̲TO ̲Q ̲LIST COMPONENTS…86…1…02… …02… …02… …02… …02… …02… …02… …02… …02…
…02…
4.2.1.4.16.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
CONV ̲SCD ̲LIST ̲TO ̲Q ̲LIST (Internal procedure)
GET ̲SCD ̲TABLE ̲OUTPUT (Internal procedure)
CREATE ̲KEY ̲LIST (Internal procedure)
UPDATEQ ̲LIST (Internal procedure)
COMPARE ̲REF ̲REC ̲WITH ̲Q ̲LIST (Internal procedure)
CREATE ̲NEW ̲Q ̲LINE (Internal procedure)
See figure 4.2.1.4.16.3-1
4.2.1.4.16.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̲
SCD ̲REC ref.
DBD
section
6
QUUE ̲LIST ref.
DBD
section
10.1.7
KEY ̲SCD ̲LIST ref.
section
4.2.1.5
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
SCD ̲POINTER (m) ref.
section
4.2.1.5
NO ̲OF ̲SCD "
MAX ̲Q ̲ENTRY (m) "
KEY ̲LIST ̲OFFSET "
OUTPUT ̲OFFSET "
OUTPUT ̲LENGTH "
Q ̲LIST (m) "
MAX ̲KEY "
KEY ̲LIST "
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
TYPE MDP ̲SCD ̲TABLE = ARRAY(1..MAX
̲KEY)OF SCD
̲REC;
VAR NO ̲OF ̲REMAIN ̲SCD : COUNTER
̲TYPE;
VAR NO ̲OF ̲KEY : COUNTER
̲TYPE;
VAR NO ̲OF ̲OUTPUT : COUNTER
̲TYPE;
CONST MDPREAD ̲MASK = # FFFF;
VAR CUR ̲ENTRY : COUNTER
̲TYPE;
VAR REF ̲ENTRY : COUNTER
̲TYPE;
CONST SCD ̲LENGTH = 2;…86…1…02… …02…
…02… …02… …02… …02…
…02… …02…
…02… …02…
4.2.1.4.16.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
This utility module contains six internal procedures
each of the procedures are described in the
following.
In figure 4.2.1.4.16.5-1 is shon the table
manipulations.
a) C̲O̲N̲V̲ ̲S̲D̲C̲ ̲L̲I̲S̲T̲ ̲T̲O̲ ̲Q̲ ̲L̲I̲S̲T̲
This procedure works on table A in figure
1.4.16.5-1. It divides the SCD LIST to
a set of key SCD lists which each contains
"MAX ̲KEY" SCDs, except the last one which
contains the remainng number of SCDs.
b) C̲R̲E̲A̲T̲E̲ ̲K̲E̲Y̲ ̲L̲I̲S̲T̲
This procedure creates the Input key List
(table B) from a specified key SCD List
(table A entry). The key list contains
max "MAX ̲KEY" keys.
c) G̲E̲T̲ ̲S̲C̲D̲ ̲T̲A̲B̲L̲E̲ ̲O̲U̲T̲P̲U̲T̲
This procedure requests TMPfor search in
the SCD table with the key list used as
input. The TMP output is shown in table
C.
The procedure checks the INFO parameter
in each single parameter record in the
key list too. By this check the number
of Output records are identifed.
d) U̲P̲D̲A̲T̲E̲ ̲Q̲ ̲L̲I̲S̲T̲
This procedure contains the reference loop.
This loop points out the actual SCD record
in table C which shall be used as reference
in the compare loop in COMPARE ̲REF ̲REC
̲WITH ̲Q ̲LIST.
e) C̲O̲M̲P̲A̲R̲E̲ ̲R̲E̲F̲ ̲R̲E̲C̲ ̲W̲I̲T̲H̲ ̲Q̲ ̲L̲I̲S̲T̲
This procedure contains the compare loop.
It compares the referenced SCD record with
each Queue line in the Queue list. Compare
is done on the logical designator and the
device ID. If equal the SCD from the referenced
SCD record is inserted inthe appropriate
Queue line. If no equality is found with
any of the Queue lines a new Queue line
is created.
f) C̲R̲E̲A̲T̲E̲ ̲N̲E̲W̲ ̲Q̲ ̲L̲I̲N̲E̲
This procedure creates a new Queueline
on basis on the referenced SCD record.…86…1…02…
…02… …02… …02… …02… …02… …02… …02…
…02… …02…
Fig. 4.2.1.4.16.5-1…86…1…02… …02… …02… …02… …02… …02… …02… …02… …02… …02…
CONV ̲SCD ̲LIST ̲TO ̲Q ̲LIST(SCD ̲POINTER,NO ̲OF
̲SCD, MAX-Q-ENTRY)
(SCD ̲POINTER,MA
̲ ̲Q ̲ENTRY)
START
NO ̲OF ̲REMAIN ̲SCD = NO ̲OF ̲SCD
LIST ̲CONVERT LOOP
NO ̲OF ̲REMAIN ̲SCDEQ ZERO? EXIT LIST ̲CONVERT
NO ̲OF ̲REMAIN ̲SCD GT MAX ̲KEY? - NO ̲OF ̲KEY
= MAX ̲KEY
NO ̲OF ̲KEY = NO ̲OF ̲REMAIN ̲SCD NO ̲OF
̲REMAIN
̲SCD
= NO
̲OF ̲REMAIN
̲SCD
̲MAX
̲KEY
NO ̲OF ̲REMAIN ̲SCD = ZERO
GET ̲SCD ̲TABLE ̲OUTPUT
SCD ̲POINTER = SCD ̲POINTER + (NO ̲OFKEY * SCD
̲LENGTH)
NO ̲OF ̲OUTPUT EQ ZERO?
UPDATE ̲Q ̲LIST
END LIST ̲CONVERT LOOP
STOP
Fig. 4.2.1.4.16.5-2…86…1…02… …02… …02… …02… …02… …02… …02… …02… …02… …02…
GET ̲SCD ̲TABLE ̲OUTPUT(SCD ̲POINTER, NO ̲OF ̲KEY)(NO
̲OF ̲OUTPUT)
START
EQUIVALENCE(MDP ̲BUFFER(SCD ̲POINTER),
SCD: KEY ̲SCD ̲LIST);
EQUIVALENCE(MDP ̲BUFFER(KEY ̲LIST ̲OFFSET), KEY
̲REC:MDP
KEY
̲LIST)
CREATE ̲KEY ̲LIST(NO ̲OF ̲KEY)
SEARCH ̲PRIMARY ̲KEY(SCD ̲TABLE, MDP ̲BUFFER(KEY ̲LIST
̲OFFSET),
NO ̲OF ̲KEY,OUTPUT ̲LENGTH, MDP
̲READ ̲MASK)
(MDP ̲SCD ̲REC, CC): ERROR ̲OK
ERROR? - ANALYZE ̲ERROR(CC,0)
SEARCH ̲COUNT = ZERO
NO ̲OF ̲OUTPUT = ZERO
OUTPUT ̲CHECK LOOP
SEARCH ̲COUNT = SEARCH ̲COUNT + 1
KEY ̲REC(SEARCH ̲COUNT).INFO EQ ZERO?
NO ̲OF ̲OUTPUT = NO ̲OF ̲OUTPUT + 1
SEARCH ̲COUNT EQ NO ̲OF ̲KEY? EXIT
END OUTPUT ̲CHECK LOOP
STOP
Fig. 4.2.1.4.16.53…86…1…02… …02… …02… …02… …02… …02… …02… …02… …02… …02…
CREATE ̲KEY ̲LIST(NO ̲OF ̲KEY)
START
SEARCH ̲COUNT = ZERO
MOVE ̲KEY ̲LIST LOOP
SEARCH ̲COUNT EQ NO ̲OF ̲KEY? EXIT MOVE ̲KEY
̲LIST
SEARCH ̲COUNT = SEARCH ̲COUNT + 1
KEY ̲RE(SEARCH ̲COUNT).KEY = SCD(SEARCH ̲COUNT)
END MOVE ̲KEY ̲LIST LOOP
STOP
Fig. 4.2.1.4.16.5-4…86…1…02… …02… …02… …02… …02… …02… …02… …02… …02… …02…
UPDATE ̲Q ̲LIST(NO ̲OF ̲OUTPUT)
START
EQUIVALENCE(MDP ̲BUFFER(OUTPUT ̲OFFSET),
MDP ̲SCD ̲REC: MDP ̲SCD ̲TABLE;
EQUIVALENCE (MDP ̲BUFFER(Q ̲LIST ̲OFFSET),
Q ̲LIST: QUEUE ̲LST);
REF ̲ENTRY = 1
REFERENCE LOOP
COMPARE ̲REF ̲REC ̲WITH ̲Q ̲LIST (MAX
̲Q ̲ENTRY)
REF ̲ENTRY EQ NO ̲OF ̲OUTPUT? EXIT
REF ̲ENTRY = REF ̲ENTRY + 1
END REFERENCE LOOP
Q ̲LIST.QUEUE ̲LINE ̲NUMBER = MAX ̲Q ̲ENTRY
STOP
Fig. 4..1.4.16.5-5…86…1…02… …02… …02… …02… …02… …02… …02… …02… …02… …02…
COMPARE ̲REF ̲REC ̲WITH ̲Q ̲LIST (MAX
̲Q ̲ENTRY)
START
CUR ̲ENTRY = 1
COMPARE LOOP
MAX ̲Q ̲ENTRY EQ ZERO? - CUR ̲ENTRY = 0
Q ̲LIST.QUEUE ̲LINE(CUR ̲ENTRY).LOGICAL ̲DESIGNATOR
E MDP ̲SCD ̲REC(REF ̲ENTRY).LLDD?
Q ̲LIST.QUEUE ̲LINE(CUR ̲ENTRY).DEVICE ̲ID
NE MDP ̲SCD ̲REC(REF ̲ENTRY).DEVICE ̲ID?
Q ̲LIST.QUEUE ̲LINE(CUR ̲ENTRY).COPIES=Q ̲LIST.QUEUE
̲LINE(CUR ̲ ̲ENTRY).COPIES + MDP ̲SCD ̲REC(REF
̲ENTRY).COPIES
Q ̲LIST.QUEUE ̲LINE(CUR ̲ENTY).DEVICE ̲ID EQ OK
̲SAD?
COMPARE Q ̲LINE ̲SCDS
EQUAL ̲SCD EQ TRUE EXIT
Q ̲LIST.QUEUE ̲LINE(CUR ̲ENTRY).Q ̲SCD ̲NO = Q
̲LIST.QUEUE ̲LINE(CUR ̲ENTRY)
Q ̲SCD ̲NO+1
Q ̲LIST,QUEUE ̲LINE(CUR ̲ENTRY).DIST ̲SCDS(Q ̲LIST.QUEUE
̲LINE(CUR ̲ENTRY).
Q ̲SCD ̲NO) = MDPSCD ̲REC(REF ̲ENTRY).SCD
EXIT
CUR ̲ENTRY EQ MAX ̲Q ̲ENTRY? - CREATE ̲NEW ̲Q ̲LINE(MAX
̲Q ̲ENTRY,REF ̲ENTRY)
(MAX
̲Q
̲ENTRY,REF
̲ENTRY)
CUR ̲ENTRY = CUR ̲ENTRY + 1 EXIT
END COMPARE LOOP
STOP
Fig. 4.2.1.4.16.5-6…86…1…02… …02… …02… …02… …02… …02… …02… …02… …02… …02…
COMPARE ̲Q ̲LINE ̲SCDS ()
SCD ̲LINE ̲COUNT = ZERO;
LOOP;
SCD ̲LINE ̲COUNT = SCD ̲LINE ̲COUNT + 1
Q ̲LIST ̲QUEUE ̲LINE (CUR ̲ENTRY ̲DIST ̲SCDS (SCD ̲LINE
̲COURT) EQ
MDP ̲SCD ̲REC (REFENTRY) SCD ? - EQUAL ̲SCD = TRUE
EXIT
EQUAL ̲SCD = FALSE;
SCD ̲LINE ̲COUNT EQ Q ̲LIST ̲QUEUE ̲LINE (CUR ̲ENTRY)
Q ̲SCD ̲NO ? EXIT
ENDLOOP
CREATE ̲NEW ̲Q ̲LINE(MAX ̲Q ̲ENTRY,REF ̲ENTRY)(MAX
̲Q ̲ENTRY,REF ̲ENTRY)
START
MAX ̲Q ̲ENTRY = MAX ̲Q ̲ENTRY + 1
Q ̲LIST.QUEUE ̲LINE(MAX ̲Q ̲ENTRY).DEVICE ̲ID =
MDP ̲SCD ̲REC(REF ̲ENTRY)DEVICE ̲ID
Q ̲LIST.QUEUE ̲LINE(MAX ̲Q ̲ENTRY).LOGICAL ̲DESIGNATOR=
MDP ̲SCD ̲REC(REF ̲ENTRY).LDLD
Q ̲LIST.QUEUE ̲LINE(MAX ̲Q ̲ENTRY).Q ̲SCD ̲NO = 1
Q ̲LIST.QUEUE ̲LINE(MAX ̲Q ̲ENTRY).DIST ̲SCDS(1) =
MDP ̲SCD ̲REC(REF ̲ENTRY).SCD
Q ̲LIST.QUEUE ̲LINE(MAX ̲Q ̲ENTRY).CPIES =
MDP ̲SCD ̲REC(REF ̲ENTRY).COPIES
STOP
Fig. 4.2.1.4.16.5-7…86…1 …02… …02… …02… …02… …02…
4.2.1.4.17 D̲e̲l̲i̲v̲e̲r̲y̲
4.2.1.4.17.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 utility module performs the actual delivery
to the terminal based on the specified Queue List.
This module contans delivery to the Atomal printer
too.
4.2.1.4.17.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
a) DELIVERY (PREC : PRECEDENCE ̲TYPE,
Q ̲LINE ̲NO: COUNTER ̲TYPE,
NO ̲OF ̲DELV:COUNTER ̲TYPE,
APP ̲PROFILE: APPLICATION ̲PROFILE)
(ALT ̲DIST: BOOLEAN)
b) DELIERY (R0, R1, R2, R3, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 PREC (DEST)
R1 Q ̲LINE ̲NO (DEST)
R2 NO ̲OF ̲DELV (DEST)
R3 APP ̲PROFILE (DEST)
R6 LINK (DEST)
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 ALT ̲DIST
R2 - R7 (DEST)…86…1 …02… …02… …02… …02…
…02…
4.2.1.4.17.3 M̲o̲d̲u̲l̲e̲ ̲c̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
DELIVERY (Internal procedure)
TEST ̲SIGN ̲ON ̲USER (Internal procedure)
CREATE ̲PROFILE ̲KEY ̲LIST (Internal procedure)
PERFORM ̲DELIVERY (Internalprocedure)
CREATE ̲USER ̲SEND ̲PARAMS (internal procedure)
CREATE ̲QUEUE ̲REF (External procedure)
MDP ̲USER ̲ERROR ̲HANDLING (Internal procedure)
SEND ̲FLASH (External procedure)
PERFORM ̲ATOMAL ̲PRINT (Internal procedure)
PERFORM ̲ATOMAL ̲DELIVERY(Internal procedure)
UPDATE ̲DELV ̲CODE (External procedure)
CREATE ̲QEL ̲INF (Internal procedure)
CREATE ̲ATOMAL ̲SEND ̲PARAMS (Internal procedure)
See figure 4.2.1.4.17.3-1
4.2.1.4.17.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̲
QUEUE ̲LIST ref DBD section 10.1.7
TERMINAL ̲PROFILE ref. DBD section
5.3.2
DEVICE ̲ID ̲TYPE ref. DBD section
4
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
PREC
Q ̲LINE ̲NO
NO ̲OF ̲DELV
APP ̲PROFILE
ALT ̲DIST(m) ref.section
4.2.1.5
Q ̲LIST (m)
ELV ̲CODE (m)
OUTPUT ̲OFFSET
OUTPUT ̲LENGTH
MDP ̲Q ̲GROUP(m)
QUEUE ̲REF(m)
MDP ̲VIEW ̲REF ̲1
MDP ̲SYS ̲PARAM.ATOMAL ̲PRINTER ̲LOG ̲DES
NEW ̲DELV ̲CODE
MDP ̲SEND ̲PARAMS (m)
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR REF ̲ENTRY :COUNTER ̲TYPE;
VAR SIGN ̲ON ̲USER :BOOLEAN;
VAR ATOMAL ̲PRINT :BOOLEAN;
TYPE PROFILE ̲KEY ̲TYPE = RECORD;
INFO : INTEGER;
LINK : INTEGER;
KEY : LOGICAL ̲DESIGNATOR ̲TYPE;
END;
VAR PROFILE ̲KEY : PROFILE ̲KEY ̲TYPE;
CONST SINGLE ̲KEY = 1;
CONST MDP ̲READ ̲MASK =FFFF;
VAR
;D< ̲PROFILE :TERMINAL ̲PROFILE;
Fig. 4.2.1.4.17.3-1…01…DELIVERY COMPONENTS…86…1 …02… …02… …02… …02… …02…
4.2.1.4.17.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
This utility module contains ten internal procedures,
each of the procedures is described in the following.
a) D̲E̲L̲I̲V̲E̲R̲Y̲
This procedure contains th main delivery loop.
Each run through of this loop performs a delivery
to a VDU or SAD. The current delivery is based
on the Queue line which is reference in the current
run through. The actual delivery is done in the
procedure PERFORM ̲DELIVERY.
The delivery code in the Queue line is updated in accordance
with the result from the procedure PERFORM ̲DELIVERY.
After end distribution the BOOLEAN ATOMAL ̲PRINT
is tested and if Atomal print is necessary the
PERFORM ̲ATOMAL ̲PRINT procedure is clled.
b) T̲E̲S̲T̲ ̲S̲I̲G̲N̲ ̲O̲F̲ ̲U̲S̲E̲R̲
In this procedure the Terminal profile is accessed
if the current delivery shall be performed to a
VDU. It is checked that the user is signed on and
that the user is working in USER ̲MODE. The Boolean
SIGN ̲ON ̲USER is pdated in accordance with the result.
c) P̲E̲R̲F̲O̲R̲M̲ ̲D̲E̲L̲I̲V̲E̲R̲Y̲
This procedure performs the actual delivery by
sending a QEL which reference the view.
Before sending the QEL the two procedures CREATE
̲USER SEND ̲PARAMS and CREATE ̲QUEUE ̲REF are called
after the send is performed it is checked if the
object is of precedence Flash. f that is the case
a Flash notification is sent to the current VDU
or SAD.
If the send QEL results in an error the MDP ̲USER
̲ ̲ERROR ̲HANDLING is called.
d) C̲R̲E̲A̲T̲E̲ ̲U̲S̲E̲R̲ ̲S̲E̲N̲D̲ ̲P̲A̲R̲A̲M̲S̲
This procedure creates the sends parameters.
Checkpoint staus is set to true.
The application profile received from the current
case module is inserted. The MAINTYPE and HEADER
̲FLAGS are copied from the received QEL ̲ATTRIBUTES.
The applicable subtype is inserted as follows:
Message/comment distributin to VDUS: FOR ̲DISPLAY
Message/comment distribution to SAD: FOR ̲PRINT
Message for coordination to VDUS: FOR ̲COORDINATION
Message for Release to VDUs: FOR ̲RELEASE
The second word in the QEL is created in the CREATE
̲QEL ̲IMF which is caled in the end of this procedure.
e) M̲D̲P̲ ̲U̲S̲E̲R̲ ̲E̲R̲R̲O̲R̲ ̲H̲A̲N̲D̲L̲I̲N̲G̲
This procedure analyses an error in connection
with a SEND ̲QEL. The Current delivery code is updated
in accordance with the error. The errors can be
ne of the following:
- PROFILE ̲FAULT
- BLOCKED ̲Q
- PRINT ̲ATOMAL ̲ON ̲SAD
f) P̲E̲R̲F̲O̲R̲M̲ ̲A̲T̲O̲M̲A̲L̲ ̲P̲R̲I̲N̲T̲
This procedure counts the total number of copies
which shall be printed on the Atomal printer. The
actual delivery to the Atomal printer is prformed
in the PERFORM ̲ATOMAL ̲DELIVERY procedure.
g) P̲E̲R̲F̲O̲R̲M̲ ̲A̲T̲O̲M̲A̲L̲ ̲D̲E̲L̲I̲V̲E̲R̲Y̲
This procedure send a QEL to the Atomal printer.
The printer is identified by a System parameter
in the distribution record. Before sending the
QEL the two proceduresCREATE ̲ATOMAL ̲SEND PARAMS
and CREATE ̲QUEUE ̲REF are called.
The Queue list is after send updated with the result
of the send (OK-NOT ̲OK) via the common procedure
UPDATE ̲DELV ̲CODE. If the object is of precedence
Flash the common procedure SEND ̲FLAH is called
and via this procedure a QEL is sent to the printers
command Queue.
h) C̲R̲E̲A̲T̲E̲ ̲A̲T̲O̲M̲A̲L̲ ̲S̲E̲N̲D̲ ̲P̲A̲R̲A̲M̲S̲
The following action on the MDP ̲SEND ̲PARAMS is
performed in this procedure:
Checkpoint status set equal TRUE
Maintype and Header Flags copie from QEL attributes
Subtype set equal FOR ̲PRINT
Second word in QEL. Total No of copies 0 -
128
Application profile as described in the CREATE
̲USER ̲PARAMS…86…1…02… …02… …02… …02… …02… …02… …02…
DELIVERY
START
EQUIVALENCE (MDP ̲BUFFER(Q ̲LIST ̲OFFSET),
Q ̲LIST: QUEUE ̲LIST);
REF ̲ENTRY = Q ̲LINE ̲NO
ALT ̲DIST = FALSE
ATOMAL ̲PRINT = FALSE
DELV LOOP
TEST ̲SGN ̲ON ̲USER
SIGN ̲ON ̲USER EQ TRUE? - PERFORM ̲DELIVERY
APP ̲PROFILE(BIT 0) EQ FALSE?
PREC EQ FLASH?
PERFORM ̲DELIVERY
PREC EQ IMMEDIATE? DELV = SIGN ̲OF
ALT
̲DIST
=
TRUE
Q ̲LIST.QUEUE ̲LINE(REF ̲ENTRY).DELIVERY ̲CODE = DELV
̲CODE
RF ̲ENTRY EQ Q ̲LINE ̲NO + NO ̲OF ̲DELV? EXIT
REF ̲ENTRY = REF ̲ENTRY + 1
END DELV LOOP
ATOMAL ̲PRINT EQ ̲FALSE?
PERFORM ̲ATOMAL ̲PRINT
STOP
Fig. 4.2.1.4.17.5-1…86…1…02… …02… …02… …02… …02… …02… …02…
TEST ̲SIGN ̲ON ̲USER
START
CASE Q ̲LIST.QUEUE ̲LINE(REF ̲ENTRY).DEVICE ̲ID OF
VDU?
EQUIVALENCE(MDP ̲BUFFER(OUTPUT ̲OFFSET),
MDP
̲PROFILE:
TERMINAL
̲PROFILE
SEARCH ̲PRIMARY ̲KEY (TERMINAL
̲TABLE,
PROFILE
̲KEY,
SINGLE
̲KEY,
OUTPUT
̲LENGTH,
MDP
̲READ
̲MASK)
(MDP
̲PROFILE,CC):
ERROR
̲OK
ERROR? ANALYZE ̲ERROR(CC,0)
MDP ̲PROFILE.SIGN EQ OFF?
MDP ̲PROFILE.CURRENT ̲CA NE USER ̲CAP? SIGN
̲ON ̲USER = FALSE
SIGN ̲ON ̲USER = TRUE
OTHERWISE? - SIGN ̲ON ̲USER = TRUE
END CASE
STOP
Fig. 4.2.1.4.17.5-2…86…1…02… …02… …02… …02… …02… …02… …02…
PERFORM ̲DELIVERY
START
CREATE ̲USER ̲SEND ̲PARAMS
CREATE ̲QUEUE ̲REF(MDP ̲Q ̲GROUP,Q ̲LIST.QUEUE ̲LINE(REF
̲ENTRY).
LOGICAL ̲DESIGNATOR,PREC)(QUEUE
̲REF)
SEND ̲QEL ̲ ̲ ̲ (MD ̲SEND ̲PARAMS,
MDP ̲VIEW ̲REF ̲1,
QUEUE ̲REF)
(MDP ̲SEND ̲PARAMS,
cc): ERROR ̲OK
ERROR? - MDP ̲USER ̲ERROR ̲HANDLING
PREC NE FLASH?
Q ̲LIST.QUEUE ̲LINE(REF ̲ENTRY). MDP
̲Q
̲GROUP
=
VDU
̲C
DEVICE ̲ID EQ VDU
MDP ̲Q ̲GROUP = PRINT ̲C
SEND ̲LASH(MDP ̲Q ̲GROUP,Q ̲LIST.QUEUE ̲LINE.LOGICAL ̲DESIGNATOR
DELV ̲CODE = DELIVERY ̲PERFORMED
STOP
Fig. 4.2.1.4.17.5-3…86…1…02… …02… …02… …02… …02… …02… …02…
CREATE ̲USER ̲SEND ̲PARAMS(APP ̲PROFILE,REF ̲ENTRY)
(MDP
̲Q
̲GROUP,MDP
̲SEND
̲PARAMS)
START
MDP ̲SEND ̲PARAMS.CHECK ̲STATUS = TRUE
MDP ̲SEND ̲PARAMS.PROFILE = APP ̲PROFIE
MDP ̲SEND ̲PARAMS.HEADER.FLAGS = MDP ̲QEL ̲ATT.HEADER.FLAGS
MDP ̲SEND ̲PARAMS.HEADER.MAINTYPE = MDP ̲QEL ̲ATT.HEADER.MAINTYPE
Q ̲LIST.QUEUE ̲LINE(REF ̲ENTRY) MDP
̲SEND
̲PARAMS.HEADER.
DEVICE ̲ID EQ VDU SUBTYPE
=
FOR
̲DISPLAY
MDP ̲SEND ̲PARAMS.HEADER. MP ̲Q ̲GROUP = VDU ̲REC
SUBTYPE = FOR ̲PRINT
MDP ̲Q ̲GROUP = PRINT ̲P
APP ̲PROFILE(BIT 1) EQ MSG ̲COOR? ̲ ̲ MDP
̲SEND
̲PARAMS.HEADER.
SUBTYPE
=
FOR
̲COORDINATION
APP ̲PROFILE(BIT2) EQ MSG ̲RELEASE? ̲MDP ̲SEND ̲PARAMS.HEADER.
SUBTYPE
=
FOR
̲RELEASE
MDP
̲Q
̲GROUP
=
VDU
̲REL
CREATE ̲QEL ̲INF(MDP ̲SEND ̲PARAMS.HEADER.INF=
Q ̲LIST.QUEUE ̲LINE(REF.ENTRY).COPIES SHIFT
LL8 +
MDP ̲SEND ̲PARAMS.HEADER.INF)
STOP
Fig. 4.2.1.4.17.5-4…86…1…02… …02… …02… …02… …02… …02… …02… …02…
MDP ̲USER ̲ERROR ̲HANDLING
START
SWITCH ANALYZE ̲ERROR(CC,2,QMON ̲PROFILE ̲CHECK,
QMON
̲BLOCKED
̲QUEUE)…02…
PROFILE ̲CHECK:
QLIST.QUEUE ̲LINE ̲DEVICE ̲ID EQ VDU ̲ ALT ̲DIST
= TRUE
DELV
̲CODE
=
ACESS
̲PROFILE
̲FAULT
MDP ̲QEL ̲ATTR.PROFILE.LEAST = ATOMAL ̲IND ?
ALT ̲DIST = TRUE ATOMAL
̲PRINT
=
TRUE
DELV ̲CODE = ACESS ̲PROFILE ̲FAULT DELV
̲CODE
=
PRINT
̲ATOMAL
̲ON
̲SAD
END PROFILE ̲CHECK
Q ̲UNE ̲BLCKED:
DELV ̲CODE = TERMINAL ̲BLOCKED
ALT ̲DIST = TRUE
END Q ̲UNE ̲BLOCKED
END
Fig. 4.2.1.4.17.5-5…86…1…02… …02… …02… …02… …02… …02… …02… …02…
PERFORM ̲ATOMAL ̲PRINT
START
DELV ̲CODE = PRINT ̲ATOMAL ̲ON ̲SAD
REF ̲ENTRY = Q ̲LINE ̲NO
NUMBER ̲OF ̲COPIES = 0
ATOMAL ̲COPY ̲NO LOOP
Q ̲LIST.QUEUE ̲LINE(REF ̲ENTRY).DELIVRY ̲CODE NE DELV
̲CODE?
NUMBER ̲OF ̲COPIES = NUMBER ̲OF ̲COPIES + Q ̲LIST.QUEUE
̲LINE(REF ̲ENTRY).
COPIES
REF ̲ENTRY EQ Q ̲LINE ̲NO + NO ̲OF ̲DELV? EXIT ATOMAL
̲COPY ̲NO
REF ̲ENTRY = REF ̲ENTRY + 1
END ATOMAL ̲COPY ̲NO LOOP
PERFOR ̲ATOMAL ̲DELIVERY
STOP
Fig. 4.2.1.4.17.5-6…86…1…02… …02… …02… …02… …02… …02… …02… …02…
PERFORM ̲ATOMAL ̲DELIVERY
START
CREATE ̲ATOMAL ̲SEND ̲PARAMS(APP ̲PROFILE)(MDP ̲SEND ̲PARAMS)
CREATE ̲QUEUE ̲REF
SEND ̲QEL(MDP ̲SEND ̲PARAMS,MDP ̲VIEW ̲REF ̲1, QUEUE ̲REF)
(MDP ̲END ̲PARAMS,CC):ERROR ̲OK
ERROR? - ANALYZE ̲ERROR(CC,2,PROFILE ̲CHECK, BLOCKED
̲QUEUE)
NEW ̲DELV ̲CODE = ATOMAL ̲PRINT ̲NOT ̲OK
NEW ̲DELV ̲CODE =
ATOMAL ̲PRINT ̲OK
UPDATE ̲DELV ̲CODE
NEW ̲DELV ̲CODE NE ATOMAL ̲PRINT ̲OK ?
PREC NE FLASH?
SENDFLASH(PRINT ̲C)
STOP
Fig. 4.2.1.4.17.5-7…86…1 …02… …02… …02… …02… …02…
4.2.1.4.18 A̲l̲t̲e̲r̲n̲a̲t̲i̲v̲e̲ ̲D̲i̲s̲t̲
4.2.1.4.18.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 utility module performs alternative distribution,
either to the Duty Officer or the MDCO or to both,
ifnecessary. Though the alternative distribution the
delivery codes are updated in the Q-List so it reflects
the current situation.
4.2.1.4.18.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
a) ALTERNATIVE ̲DIST (NO ̲OF ̲DELV : COUNTER ̲TYPE)
b) ALTERNATIVE ̲DIST (R0, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 NO ̲OF ̲DELV
R6 LINK (DEST)
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 - R7 (DEST)
4.2.1.4.18.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
ALTERNATIVE ̲DIST (Internal procedure)
QUIET ̲HOURS ̲DELIVERY (Internal procedure)
CREATE ̲QUIET ̲OURS ̲SEND ̲PARAMS (Internal procedure)
CREATE ̲QUEUE ̲REF (External procedure)
UPDATE ̲DELV ̲CODE (External procedure)
SEND ̲FLASH (External procedure)
MDCO ̲DELIVERY (External procedure)
See figure 4.2.1.4.18.3-1…86…1 …02… …02… …02… …02…
…02…
Fig. 4.2.1.4.18.3-1…01…ALTERNATIVE ̲DIST COMPONENTS…86…1 …02… …02… …02… …02…
…02…
4.2.1.4.18.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̲
QUEUE ̲LIST ref.DBD sect.10.1.7
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
NO ̲OF ̲DELV
MDP ̲SYS ̲PARAM.QUIET ̲HOURS ̲SWITCH
NEW ̲DELV ̲CODE (m)
Q ̲LINE ̲START ̲NO
MDP ̲SYS ̲PARAM.QUIET ̲HOURS ̲LOG ̲DES ref.section
4.2.1.5
MDP ̲SEND ̲PARAMS (m)
MDP ̲VIEW ̲REF ̲1
QUEUE ̲REF (m)
MDP ̲PARAM.ACTION ̲PREC
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR
MDCO ̲DELV :BOOLEAN;
QUIET ̲HOURS ̲DELV :BOOLEAN;
REF ̲ENTRY :COUNTER ̲TYE;
CONST
INFO ̲CONST
4.2.1.4.18.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
This utility module contains three internal procedures,each
of the procedure is described in the following.
a) A̲L̲T̲E̲R̲N̲A̲T̲I̲V̲E̲ ̲D̲I̲S̲T̲
This procedure tests if Quiet Hours delivery shall
be perfored. If so, the procedure QUIET ̲HOURS ̲DELIVERY
will be called. After return from this procedure
the delivery code in the Queue List is checked.
If other than the following three codes are detected
the object is sent to the MDCO too.
- DELV ̲PERFORED (Normal VDUs and SADs)
- ATOMAL ̲PRINT ̲OK
- QUIET ̲HOURS ̲DELV ̲OK
The delivery to the MDCO is performed via the common
procedure MDCO ̲DELIVERY (see figure 4.2.1.4.18.5-1.
b) Q̲U̲I̲E̲T̲ ̲H̲O̲U̲R̲S̲ ̲D̲E̲L̲I̲V̲E̲R̲Y̲
This procedure performs the actual delivery to
the Quiet Hours terminal position. Before sending
the Object the delivery codes are checked againstthe
code "SIGN ̲OFF". If no delivery codes of that type
are detected the message will not be sent. The
program will instead return to the procedure ALTERNATIVE
̲DIST, where the object will be sent to the MDCO.
If delivery shall be performed to th Quiet Hours
position the two procedures CREATE ̲QUIET ̲HOURS
̲SEND ̲PARAMS and CREATE ̲QUEUE ̲REF are called. After
Delivery the Delivery codes will be updated in
accordance with the result of the send by the common
procedure UPDATE ̲DELV ̲CODE.
If theObject is of precedence Flash a Flash notification
will be sent to the terminals common Queue via
the Common procedure SEND ̲FLASH. (See Figure 4.2.1.4.18.5-2)
c) C̲R̲E̲A̲T̲E̲ ̲Q̲U̲I̲E̲T̲ ̲H̲O̲U̲R̲S̲ ̲S̲E̲N̲D̲ ̲P̲A̲R̲A̲M̲S̲
The following Action on the MDP ̲SEND ̲PARAMS is
perormed in this procedure.
Check point status set equal TRUE
Maintype and Header Flags copies from QEL attributes
Subtype set equal FOR DISPLAY
Application profile set equal MSG ̲DELIVERY
Coordination repeat set equal FALSE
Quiet Hors tern. Delv set equal TRUE…86…1…02… …02…
…02… …02… …02… …02… …02…
ALTERNATIVE ̲DIST (NO ̲OF ̲DELV)
START
EQUIVALENCE(MDP ̲BUFFER(Q ̲LIST ̲OFFSET),
Q ̲LIST : QUEUE ̲LIST);
MDP ̲SYS ̲PARAM.QUIET ̲HOURS ̲SWITCH EQ FALSE? - MDCO
̲DELV
=
TRUE
QIET ̲HOURS ̲DELIVERY (NO ̲OF ̲DELV)
REF ̲ENTRY = 1
MDCO ̲CONTROL LOOP
Q ̲LIST.QUEUE ̲LINE(REF ̲ENTRY).DELIVERY ̲CODE EQ DELV
̲PERFORMED ?
Q ̲LIST.QUEUE ̲LINE(REF ̲ENTRY).DELIVERY ̲CODE EQ ATOMAL
̲PRINT ̲OK?
Q ̲LIST.QUEUE ̲LINE(REF ̲ENTRY).DELIVERY ̲CODE EQQUIET
̲HOURS ̲DELV?
MDCO ̲DELV = TRUE
REF ̲ENTRY = NO ̲OF ̲DELV
MDCO
̲DELV
=
FALSE
REF ̲ENTRY EQ NO ̲OF ̲DELV? EXIT MDCO ̲CONTROL
REF ̲ENTRY = REF ̲ENTRY + 1
END MDCO ̲CONTROL LOOP
MDP ̲WRITE ̲BUFFER (QUEUE ̲LIST ̲WRITE)
MDCO ̲DELV EQ FALS?
MDCO ̲DELIVERY(MDP ̲PARAM.ACTION ̲PREC, MDCO ̲ALT ̲ASS,
01)
STOP
Fig. 4.2.1.4.18.6-1…86…1…02… …02… …02… …02… …02… …02… …02… …02…
QUIET ̲HOURS ̲DELIVERY(NO ̲OF ̲DELV)(MDCO ̲DELV)
START
REF ̲ENTRY = 1;
QUIET ̲HOURS ̲CONTROL LOOP
Q ̲LIST.QUEUE ̲LINE(REF ̲ENTRY).DELIVERY ̲CODE NE SIGN
̲OFF?
QUIET ̲HOURSDELV = TRUE
REF ̲ENTRY = NO ̲OF ̲DELV
QUIET
̲HOURS
̲DELV
=
FALSE
REF ̲ENTRY EQ NO ̲OF ̲DELV? EXIT QUIET ̲HOURS ̲CONTROL
REF ̲ENTRY = REF ̲ENTRY + 1
END ̲QUIET ̲HOURS ̲CONTROL LOOP
QUIET ̲HOURS ̲DELV EQ FALSE?
CREATE ̲QUIET ̲HOURS ̲SEND ̲PARAMS
CEATE ̲QUEUE ̲REF(VDU ̲REC,MDP ̲SYS ̲PARAM.QUIET ̲HOURS ̲LOG
̲DES,
MDP
̲PARAM.ACTION
̲PREC)(QUEUE
̲REF)
SEND ̲QEL(MDP ̲SEND ̲PARAMS,MDP ̲VIEW ̲REF ̲1, QUEUE ̲REF)
(MDP ̲SEND ̲PARAMS,CC, ERROR ̲OK
ERROR? ANALYZE ̲ERROR(CC,2, PROFILE ̲CHECK, BLOCKED
̲QUEUE)
EW ̲DELV ̲CODE = QUIET ̲HOURS ̲DELV ̲FAULT
NEW ̲DELV ̲CODE =
QUIET ̲HOURS ̲DELV ̲OK
UPDATE ̲DELV ̲CODE(Q ̲LINE ̲START ̲NO,NO ̲OF ̲DELV,SIGN ̲OFF,NEW
̲DELV ̲CODE
MDP ̲PARAM.ACTION ̲PREC NE FLASH?
SEND ̲FLASH(VDU ̲C, MDP ̲SYS ̲PARAM.QUIET ̲HOURS ̲LOG ̲DES)
STOP
ig. 4.2.1.4.18.5-2…86…1…02… …02… …02… …02… …02… …02… …02… …02…
CREATE ̲QUIET ̲HOURS ̲SEND ̲PARAMS
START
MDP ̲SEND ̲PARAMS.CHECKP ̲STATUS = TRUE
MDP ̲SEND ̲PARAMS.PROFILE = APP ̲PROFILE
MDP ̲SEND ̲PARAMS.HEADER.MAINTYPE =
MDP
̲QEL
̲ATR.HEADER.MAINTYPE
MDP ̲SEND ̲PARAMS.HEADER.SUBTYPE = FOR DISPLAY
MDP ̲SEND ̲PARAMS.HEADER.FLAGS =
MDP
̲QEL
̲ATTR.HEADER.FLAGS
MDP ̲SEND ̲PARAMS.HEADER.INF = QUIET ̲HOURS ̲INF
END
4.2.1.4.19 P̲e̲r̲f̲o̲r̲m̲ ̲D̲i̲s̲t̲r̲i̲b̲u̲t̲i̲o̲n̲
4.2.1.4.19.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 utility module is used when distribution
shall be performed by both action and
info SCDs. Itcalls both of the utility
modules CONV ̲SCD ̲LIST ̲TO ̲Q ̲LIST and DELIVERY
twice. One time for action and one time
for Info.
4.2.1.4.19.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
a) PERFORM ̲DISTRIBUTION(SCD ̲POINTER:
POINTER ̲TYPE,
NO
̲OF
̲SCD: COUNTER
̲TYPE)
(ALT ̲DIST: BOOLEAN,
NO
̲OF
̲AC
̲Q
̲LINES:
COUNTER
̲TYPE,
NO
̲OF
̲INFO
̲Q
̲LINES:
COUNTER
̲TYPE)
b) PERFORM ̲DISTRIBUTION (R0, R1, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 NO ̲OF ̲SCD (DEST)
R1 SCD ̲POINTER (DEST)
R6 LINK (DEST)
4.2.1.4.19.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
PERFORM ̲DISTRIBUTION (Internal procedure)
CONV ̲SCD ̲LIST ̲TO ̲Q ̲LIST (External procedure)
DELIVERY (External procedure)
See figure 4.2.1.4.19.3-1…86…1…02… …02… …02… …02…
…02… …02… …02… …02…
Fig. 4.2.1.4.19.3-1…01…PERFORM DISTRIBUTION COMPONENTS…86…1…02… …02… …02… …02… …02… …02… …02…
…02…
4.2.1.4.19.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̲
None
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
SCD ̲POINTER (m)
NO ̲OF ̲SCD (m)
ALT ̲DIST
NO ̲OF ̲AC ̲Q ̲LINES (m)
NO ̲OF ̲INF ̲Q ̲LINES (m)
MAX ̲Q ̲ENTRY (m) ref.
section
4.2.1.5
MDP ̲PARAM.NUMBER ̲OF ̲INFO ̲SCD
MDP ̲PARAM.ACTION ̲PREC
MDP ̲PARAM.INFO ̲PREC
INFO ̲SCD ̲OFFSET (m)
Q ̲LINE ̲START ̲NO
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
None
4.2.1.4.19.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
The equence in this utility module is
shown on figure 4.2.1.4.19.5-1. First
the Utility module CONV ̲SDC ̲LIST ̲TO ̲Q
̲LIST is called with parameter for conversion
of the action part of the SCD list. The
SCD ̲POINTER received as input points out
where in theMDP ̲BUFFER the action SCDs
starts, and NO ̲OF ̲SCD gives the number
of action SCDs. The same utility module
is called one time more now with parameters
for conversion of the Info part of the
SCD List.
In the same way is the utility module
DELIVER called.…86…1…02… …02… …02… …02… …02… …02…
…02… …02…
PERFORM ̲DISTRIBUTION(NO ̲OF ̲SCD, SCD ̲POINTER)
START
AC ̲ALT ̲DIST = FALSE
DIST ̲CASE = OUT ̲PLAIN ̲MSG ̲DIST OR
MDCO ̲INV ̲OUTG ?
CONV
̲SCD
̲TO
̲QLINE
(SCD
̲POINTER,NO
̲OF
̲SCD,
ZERO,
DUMMY)(MAX
̲Q
̲ENTRY)
CUR ̲Q ̲LINE ̲NO = ZERO
CUR
̲Q
̲LINE
̲NO
=
MAX
̲Q
̲ENTRY
NO
̲OF
̲SCD
=
MDP
̲PARAM.NUMBER
̲OF
̲ACTION
̲SCD
SCD
̲POINTER
=
AC
̲INFO
̲SCD
̲OFFSET
MAX ̲Q ̲ENTRY = CUR ̲Q ̲LINE ̲NO
CONV ̲ ̲ ̲SCD ̲TO ̲Q ̲LNE (SCD ̲POINTER, NO ̲OF ̲SCD, MAX
̲Q ̲ENTRY, AC ̲SCD ̲
OFFSET)(MAX
̲Q
̲ENTRY)
NO ̲OF ̲AC ̲Q ̲LINES = MAX ̲Q ̲ENTRY
NO ̲OF ̲SCD = MDP ̲PARAM, NUMBER ̲OF ̲INFO ̲SCD
DIST ̲CASE = MSG ̲REDIST ?
SCD
̲POINTER
=
ALT
̲DIST
̲LIST
̲TYPE.ALT
̲INFO
̲SCD
CONV ̲SCD TO ̲ ̲LINE (SCD-POINTER, NO ̲OF ̲SCD, MAX ̲Q
̲ENTRY, INFO-SCD ̲
OFFSET)(MAX
̲Q
̲ENTRY)
NO ̲OF ̲INFO ̲Q ̲LINES = MAX ̲Q ̲ENTRY ̲NO ̲OF ̲AC ̲Q ̲LINES
DELIVERY (MDP ̲PARAM.ACTION ̲PREC, Q ̲LINE ̲START ̲NO,
NO ̲OF ̲AC ̲Q ̲LINES, MSG ̲DELIVERY)
ALT ̲DIST = TRUE ? - AC ̲AT ̲DIST = TRUE
DELIVERY (MDP ̲PARAM.ACTION ̲PREC, Q ̲LINE ̲START ̲NO,
NO ̲OF ̲AC ̲Q ̲LINES, MSG ̲DELIVERY)
ALT ̲DIST = TRUE ? - AC ̲ALT ̲SIDT = TRUE
END
fig. 4.2.4.4.19.5-1…86…1 …02… …02… …02… …02… …02…
4.2.1.4.20 S̲T̲A̲ ̲S̲A̲R̲ ̲D̲E̲L̲I̲V̲E̲R̲Y̲
4.2.1.4.20.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 utility module creates statistics and call
the statistics collection monitor procedure. In
the end of th module it sends the view for storage
too.
4.2.1.4.20.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
a) STA ̲SAR ̲DELIVERY (MDP ̲STA ̲1:STA
̲GROUP ̲NO ̲TYPE,
MDP ̲STA ̲2:STA ̲GROUP ̲NO ̲TYPE,
MDP ̲SAR ̲GROUP:SAR
̲STORAGE ̲TYPE;
NO ̲OF ̲TERM: COUNTER ̲TYPE,
ASS ̲REQ ̲INDIC: BOOLEAN)
b) STA ̲SAR ̲DELIVERY (R0, R1, R2, R3, R4, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 MDP ̲STA ̲1 (DEST)
R1 MDP ̲STA ̲2 (DEST)
R2 MDP ̲SAR ̲GROUP (DEST)
R3 NO ̲OF ̲TERM (DEST)
R4 ASS ̲REQ ̲INDIC (DEST)
R6 LINK (DES)
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 - R7 (DEST)
4.2.1.4.20.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s
SAR ̲STA ̲DELIVERY (Internal procedure)
CREATE ̲STA ̲RECORD (Internal procedure)
CREATE ̲SAR ̲SEND ̲PARAMS (Internal procedure)
CREATE ̲QUEUE ̲REF (External procedure)
Se figure 4.2.1.4.20.3-1…86…1 …02… …02… …02…
…02… …02…
Fig. 4.2.1.4.20.3-1…01…STA SAR DELIVLERY COMPONENTS…86…1 …02… …02… …02… …02… …02…
…02…
4.2.1.4.20.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̲
STA ̲GROUP ̲NO ̲TYPE ref DBD section
4
SAR ̲STORAGE ̲TYPE ref.DBD
section
4
QUEUE ̲LIST ref.DBD section
10.1.7
INC ̲MSG ̲DIST ̲ERM ref.DBD section
4
OUT ̲MSG ̲DIST ̲TERM ref.DBD section
4
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
Q ̲LIST
MDP ̲STA ̲1
MDP ̲STA ̲2
MDP ̲SAR ̲GROUP
NO ̲OF ̲TERM
ASS ̲REQ ̲INDIC
MDP ̲SEND ̲PARAMS (m) ref. section 4.2.1.5
QUEUE ̲REF (m)
MDP ̲VIEW ̲REF ̲1
REF ̲ATTR (m) MDP
̲PARAM
SAR ̲Q
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR MDP ̲STA ̲RECORD : INC ̲MSG ̲DIST ̲TERM;
VAR STA ̲COUNT : INTEGER;
4.2.1.4.20.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
This utility module creates statistics and send
the message for storage. It contains three internal
procedureswhich are described in the following:
a) S̲T̲A̲ ̲S̲A̲R̲ ̲D̲E̲L̲I̲V̲E̲R̲Y̲
This is the main procedure within the module.
In the start of the procedure it calls "CREATE
̲STA ̲RECORD" which creates the current statistics
record. Then first the statistics collectio
monitor procedure is called for the whole
distribution, and after this it is called
for each of the terminals in the distribution.
In the call parameters for these call the
current Device ID and the Logical Designator
is specified.…86…1 …02… …02… …02… …02… …02…
In the end of the procedure the message is
sent for storage. Before the actual send the
CREATE ̲SAR ̲SEND ̲PARAMS and CREATE ̲QUEUE ̲REF
are called. See figure 4.2.1.4.20.5-1.
b) C̲R̲A̲T̲E̲ ̲S̲T̲A̲ ̲R̲E̲C̲O̲R̲D̲
This procedure create the current Statistics
record. The MSG ̲LENGTH is calculated by adding
the length of the SCD ̲LIST ̲FIELD, the ADDRESS
̲FIELD and the TEXT ̲FIELD. The other parameters
are taken from the MDP ̲PARAM. See figure 4.2..4.20.5-2.
c) C̲R̲E̲A̲T̲E̲ ̲S̲A̲R̲ ̲S̲E̲N̲D̲ ̲P̲A̲R̲A̲M̲S̲
This procedure creates the send parameters.
Maintype and Flags are copied from the MDP
̲QEL ̲ATTR. Subtype is FOR ̲STORAGE and second
word in the QEL will contain the current SAR
̲STORAGE ̲TYPE. The APP ̲PROFILE ill be set equal
MSG ̲DELIVERY. The Checkpoint status will be
set equal true.…86…1…02… …02… …02… …02… …02… …02… …02…
STA ̲SAR ̲DELIVERY (MDP ̲STA ̲1, MDP ̲STA ̲2,MDP
̲SAR ̲GROUP,NO ̲OF ̲TERM)
START
EQUIVALENCE(MDP ̲BUFFER(Q ̲LIST ̲OFFSET) : QUEUE ̲LIST)
CREATE ̲STA ̲RECORD
SWITCH STA ̲COLL (MDP ̲ST ̲1, ZERO, ZERO, % MDP ̲STA
̲RECORD, STP ̲COLLECT)
ERROR ? ANALYZE ̲ERROR (CC, O)
END SWITCH
STA ̲COUNT = ZERO
STA ̲TERM LOOP
STA ̲COUNT + 1
STA ̲COUNT = NO ̲OF ̲TERM EXIT
SWITCH STA ̲COLL (MDP ̲STA ̲2, QUEUE ̲LINE, DEVICE
̲ID, QUEUE ̲
LINE.LOGICAL ̲DESIGNATOR, % MDP
̲STA ̲RECORD, STP ̲
COLLECT)
ERROR ? ANALYZE ̲ERROR (CC, O)
END SWITCH
END LOOP
MDP ̲PARAM.CLASS = COSMIC ̲TOP ̲SECRET ?
MDP ̲PARAM.SPEC ̲HAND ̲TYPE.LEAST = ATOMAL ̲IND ?
CREATE ̲SAR ̲SEND ̲PARAMS
CREATE ̲QUUE ̲REF (SINGLE, SAR ̲Q, SUB ̲Q ̲1) (QUEUE
̲REF)
SWITCH QMON ̲SEND ̲QEL (% MDP ̲SEND ̲PARAMS, MDP ̲VIEW
̲REF ̲1, % QUEUE ̲REF)
ERROR ? ANALYZE ̲ERROR (CC, O)
END SWITCH
END
Fig. 4.2.1.4.20.5-1…86…1…02… …02… …02… …02… …02… …02… …02…
CREATE ̲STA ̲RECORD (NO ̲OF ̲TERM)
START
GET ̲VIEW ̲ATTRIBUTES(MDP ̲VIEW ̲REF ̲1)
(REF ̲ATTR,CC):
ERROR ̲OK
MSG ̲LENGTH = REF ̲ATR.FIELD ̲INF(SCD ̲LIST ̲FIELD).USED
̲LENGTH
MG ̲LENGTH = REF ̲ATTR.FIELD ̲INF(ADDRESS ̲FIELD).USED
̲LENGTH + MSG ̲LENGTH
MSG ̲LENGTH = REF ̲ATTR.FIELD ̲INF(TEXT ̲FIELD).USED
̲LENGTH + MSG ̲LENGTH
MDP ̲STA ̲RECORD.MSG ̲LENGTH = MSG ̲LENGTH
MDP ̲STA ̲RECORD.ACT ̲PREC ̲LEV = MDP ̲PARAM.ACTION ̲PREC
MDP ̲STA ̲REORD.INF ̲PREC ̲LEV = MDP ̲PARAM.INFO ̲PREC
MDP ̲STA ̲RECORD.CLASSIFIC ̲CAT = MDP ̲PARAM.CLASS
MDP ̲STA ̲RECORD.SPEC ̲HAND = MDP ̲PARAM.SPEC ̲HAND ̲INST
MDP ̲STA ̲RECORD.TERM ̲IN ̲DIST = NO ̲OF ̲TERM
MDP ̲STA ̲RECORD.ASS ̲REQ ̲INDIC = ASS ̲REQ ̲INDIC
STOP
Fig. 4.2.1.4.20.5-…86…1…02… …02… …02… …02… …02… …02… …02…
CREATE ̲SAR ̲SEND ̲PARAMS
START
MDP ̲SEND ̲PARAMS.CHECK P ̲STATUS = TRUE
MDP ̲SEND ̲PARAMS.PROFILE = ZERO
MDP ̲SEND ̲PARAMS.HEADER.MAINTYPE =
MDP ̲QEL ̲ATTR.HEADER.MAINTYE
MDP ̲SEND ̲PARAMS.HEADER.SUBTYPE = FOR ̲STORAGE
MDP ̲SEND ̲PARAMS.HEADER.FLAGS =
MDP ̲QEL ̲ATTR.HEADER
̲FLAGS
MDP ̲SEND ̲PARAMS.HEADER.INF = MDP ̲SAR ̲GROUP
END
4.2.1.5 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲D̲a̲t̲a̲
The following data is used in connection
with the MDP ̲BUFFER the parameters specifies
offsets and data length within the buffer.
CONST
MP ̲BUFFER ̲SIZE = 1750;
Q ̲LINE ̲LENGTH = 15;
MAX ̲KEY this constant
is a configuration
parameter
and therefore
it is defined
in the common
CAMPS configuration
prefix which
is described
in the DBD
section 4.
However,
it is only
used by the
MDP ubpackage.
With a MDP
Buffer size
of 1750 the
constant
is equal
10.
TYPE MDP ̲DATA ̲BUFFER = ARRAY(1..MDP ̲BUFFER
̲SIZE) of INTEGER;
VAR
MDP ̲BUFFER :MDP ̲DATA
̲BUFFER;
KEY ̲LIST ̲LENGTH :COUNTER
̲TYPE;
OUTPUT ̲LENGTH :COUNTER
̲TPE;
Q ̲LIST ̲LENGTH :COUNTER
̲TYPE;
COOR ̲CHECK ̲MARK ̲LENGTH :COUNTER
̲TYPE;
COOR ̲SCD ̲LENGTH :COUNTER
̲TYPE;
DIST ̲SCD ̲LENGTH :COUNTER
̲TYPE;
KEY ̲LIST ̲OFFSET :POINTER
̲TYPE:
OUTPUT ̲OFFSET :POINTER
̲TYPE;
Q ̲LIST ̲OFFSET :POINTE
̲TYPE;
AC ̲INFO ̲SCD ̲OFFSET :POINTER
̲TYPE;
MDP ̲DIST ̲SCD ̲OFFSET :POINTER
̲TYPE;
MDP ̲COOR ̲SCD ̲OFFSET :POINTER
̲TYPE;
COOR ̲CHECK ̲MARK ̲OFFSET :POINTER
̲TYPE;
ALT ̲DIST ̲LIST ̲OFFSET :POINTER
̲TYPE;
IMF ̲READ ̲OFFSET :POINTER
̲TYPE;
Th following data is used in connection
with the Queue and Message monitor action.
For definition of the types ref. DBD section
4.
TYPE
MDP ̲FIELD ̲LIST ̲TYPE =
RECORD
MDP ̲NO ̲OF ̲FIELDS : NO ̲OF ̲FIELDS;
FIELD ̲LIST ̲ENTRY : ARRAY (1.3) OF FIELD ̲LIST ̲ELEMENT;
VAR
NEW ̲VIEW ̲REF :VIEW ̲REFERENCE;
DP ̲VIEW ̲REF ̲1 :VIEW
̲REFERENCE;
OLD ̲VIEW ̲REF :VIEW ̲REFERENCE;
MDP ̲QEL ̲ATTR :QEL ̲ATTRIBUTES;
QUEUE ̲REF :QUEUE ̲REFERENCE;
APP ̲PROFILE :APPLICATION
̲PROFILE;
MDP ̲FIELD ̲LIST :MDP
̲FIELD
̲LIST
̲TYPE;
MDP ̲SEND ̲PARAMS :SEND
̲PARAM;
REF ̲ATTR :VIEW ̲ATTRIBUTES;
The following data is used in connection
with the CSF monitor action.
As SUBPROCESS ̲IN ̲INDEX is used the CONST
̲MDP ̲NO which is defined in the DBD section
4.…86…1…02… …02… …02… …02… …02… …02… …02…
…02…
The following data is control parameters
used in the control logic between the
Modules within MDP.
VAR OLD ̲VIEW :BOOLEAN; SPECIFIES
BY TRUE THAT
a new view
had been
ceated during
the distribution.
VAR SIC ̲STATE :NO ̲OK; Specifies
by
OK
that
at
least
one
SIC
shall
be
used
for
a
distribution
VAR NO ̲OF ̲SIC :COUNTER
̲TYPE; Specifies
the
number
of
SICs
which
shall
be
used
during
a
distribution
…02… VAR MDCO ̲NV :NO ̲YES; Specifies
by YES that
no distribution
shall be
performed
on the message
but it shall
be sent to
the MDCO.
VAR ALT ̲DIST :BOOLEAN; Specifies
by TRUE that
alternative
distribution
shall be
performed
on the MSG
either to
Duty Officer
o/and MDCO.
VAR SDL ̲BUFFER ̲EMPTY :BOOLEAN; Specifies
by
TRUE
that
the
SDLs
is
empty
or
no
SDLs
have
been
identified.
VAR MAX ̲Q ̲ENTRY :COUNTER
̲TYPE; Specifies
the
actual
number
of
Queue
lines
in
the
Queue
List.
VAR SCD ̲POINTER :OFFSET ̲YPE; Specifies
the
Offset
for
the
Actual
SCD
List
which
shall
be
converted
to
a
Queue
List.…86…1…02…
…02…
…02…
…02…
…02…
…02…
…02…
…02…
VAR NO ̲OF ̲SCD :COUNTER
̲TYPE; Specifies
the
number
of
SCDs
in
the
actual
SCD
list,
which
shall
be
converted
to
a
Queue
List.
VAR NO ̲OF ̲AC ̲Q ̲LINES:COUNTER ̲TYPE;
N ̲OF ̲INFO ̲Q ̲LINES:COUNTER ̲TYPE;
VAR NO ̲OF ̲KEY :COUNTER
̲TYPE; Specifies
the
number
of
keys
contained
in
the
KEY
̲LIST
used
in
TMP
search.
TYPE MDP ̲WRITE ̲TYPE = (SCD ̲LIST ̲WRITE;QUEUE
̲LIST ̲WRITE);
VAR MDP ̲WRITE :MDP ̲WRITE
̲TYPE; Specifies
te
actual
write
to
the
IMF
VAR PREC :PRECEDENCE ̲TYPE; ref
DBD section 4
The
PREC
specifies
the
current
delivery
precedence.
VAR MDP ̲STA-1 :STA ̲GROUP
̲NO ̲
TYPE; ref
DBD
section
4
specifies
the
actual
statistics
group
fr
the
whole
distribution.
VAR MDP ̲STA ̲2 :STA ̲GROUP
̲NO
TYPE; ref
DBD
section
4
specifies
the
Actual
statistics
group
for
terminal
statistics
VAR MDP ̲SAR ̲
GROUP :SAR ̲STORAGE ̲TYPE; ref
DBD section 4
specifies
the
ctual
SAR
storage
group…86…1…02…
…02…
…02…
…02…
…02…
…02…
…02…
…02…
VAR NO ̲OF ̲TERM :COUNTER
̲TYPE; Specifies
the
current
no
of
terminals
to
which
distribution
has
been
performed.
VAR Q ̲LINE ̲NO :COUNTER
̲TYPE; Specifies
the
Queue
line
n
from
where
update
of
delivery
code
shall
be
performed
VAR NO ̲OF ̲DELV :COUNTER
̲TYPE; Specifies
the
number
of
Queue
lines
which
shall
be
updated
with
a
new
delivery
code.
TYPE MDCO ̲ASSISTANCE ̲TYPE=(MDCO ̲INV
̲ASS, MDCO ̲ALT ̲ASS);
VAR MDC ̲ASS ̲TYPE: MDCO ̲ASSISTANCE
̲TYPE;
VAR ASS ̲REQ ̲INDIC:BOOLEAN; Specifies
by
TRUE
that
the
message
has
been
or
shall
be
assisted
by
the
MDCO.
Used
in
connection
with
the
statistics
record.…86…1…02…
…02…
…02…
…02…
…02…
…02…
…02…
…02…
…02…
…02…
The following is common MDP data used
in the MDP subpackage.
CONST Q ̲LINE ̲START ̲NO = 1;
VAR MDP ̲SYS ̲PARAMS: DISTRIBUTION ̲PARAMETER
̲
TYPE ref.DBD
sectio
5.1.1
TYPE DESG ̲SINGLE ̲PARAM = RECORD
INFO :INTEGER;
LINK :INTEGER;
KEY :LONG;
END;
TYPE KEY ̲LIST = ARRAY(1..MAX ̲KEY) OF
DESG ̲SINGLE ̲PARAM;
TYPE KEY ̲SCD ̲LIST = ARRAY(1..MAX ̲KEY)OF
SCD ̲TYPE;
TYPE DELV ̲CODE ̲YPE = (DELIVERY
̲PERFORMED,SIGN
̲OF,ACCESS
̲PROFILE ̲FAULT
QUIET
̲HOURS
̲DELV
̲OK
QUIET
̲HOURS
̲DELV
̲FAULT
ATOMAL
̲PRINT
̲OK
ATOMAL
̲PRINT
̲NOT
̲OK
VAR DELV ̲CODE :DELV ̲CODE
̲TYPE;
NEW ̲DELV ̲CODE: DELV ̲CODE ̲TYPE;
TYPE
MDP ̲Q ̲GROUP ̲TYPE=SINGLE,VDU ̲C,VDU
̲REC,VDU ̲REL,PRINT
̲C,PRINT
̲P);
VAR
MDP ̲Q ̲GROUP: MDP ̲Q ̲GROUP ̲TYPE;
MDP ̲MAIN ̲Q ̲ID: INTEGER;
TYPE
MDP ̲SUB ̲Q ̲ID ̲TYPE = (Main-Q,SUB
̲Q ̲1,SUB ̲Q ̲2,SUB ̲Q-3,
SUB
̲Q
̲4,SUB
̲Q
̲5,
SU
̲Q
̲6);
VAR
MDP ̲SUB ̲Q ̲ID: MDP ̲SUB ̲Q ̲ID ̲TYPE;
CONST
MDQ = 1;
MDCO ̲MDQ = 2,
MDCO ̲CCMDQ = 3;
SAR ̲Q = 4;…86…1…02… …02… …02… …02… …02… …02… …02… …02… …02… …02… …02… …02… …02… …02… …02… …02… …02… …02…
…02… …02… …02… …02… …02… …02… …02… …02… …02… …02… …02… …02… …02…
VAR MDCO ̲ERROR ̲LIST: INTEGER;
TYPE ERROR ̲INPUT ̲TYPE=
(UP ̲GARBLED ̲SICS,UP ̲MISSING ̲SICS,
UP ̲MISSING ̲SICS,UP ̲SPECIAL ̲SICS,
UP ̲SDL ̲LISTS ̲EMPTY,
UP ̲SPEC ̲BY ̲SUPV,UP ̲INT ̲HAND ̲INST,
UP ̲S ̲H ̲I ̲EXCL,UP ̲S ̲H ̲I ̲CRYPTOSEC,UP ̲MORE ̲THAN ̲ONE ̲SHI,
UP ̲ABB ̲MSG ̲FORMAT), UP ̲NON ̲EXERMSG ̲EXERSICS, UP ̲EXERMSG ̲NON
̲EXERSICS,
UP ̲EXERMSL ̲NON ̲SUBJSICS, UP ̲MISSING ̲CONSISTENCE
̲SIC
UP ̲SUBJMSG ̲NON ̲SUBJSICS);
VAR ERROR ̲INPUT: ERROR ̲INPUT ̲TYPE;1̲6̲7̲5̲A̲…00…CPS/SDS/034
…00…rt …00…NJ …00…fra 4.2.1.4.14.4
…00…1̲0̲…00…0̲2̲…00…8̲2̲…00…0̲1̲…00…4̲6̲…00… ̲ ̲1̲1̲…00…4̲1̲…00… ̲6̲0̲6̲0̲5̲…00…15…00…12…00…83…00…10…00…51…00… …00…00…00… 11…00…1̲5̲…00…1̲2̲…00…8̲3̲…00…1̲0̲…00…5̲1̲…00…20…00…12…00…83…00…13…00…49…00…0125A…00…
37…00… ̲ ̲3̲2̲…00…06…00… 456…00… ̲8̲0̲3̲91…00……0f……00……00… B…00……00……00……01……10……06…'…10……11……02……80…*̲J̲…15……05……00……00……00……00……00……00……01…7
…84……00……86……00……00……00……00….…0a….…0b….…0c….…0f….
. -…09…-…0d…-…0e…- ,…08…,…09…,…86…1
…02… …02… …02…
…02…CPS/SDS/034
…02…NJ/831101 …02…
MESSAGE DISTRIBUTION
DETAILED DESIGN SPECIFICATION…02…ISSUE 1…02…CAMPS
4.2.1.4.14.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer Source Listings
4.2.1.4.14.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
This utility module writes a specified part of the
MDP ̲BUFFER into the IMF. It is either te SCD list field
and the associated offsets and counts in the administration
field or the Queue list field. The main procedure is
the MDP ̲WRITE ̲BUFFER. Via this procedure is the CREATE
̲SCD ̲LIST ̲WRITE ̲PARAMS and CREATE ̲QUEUE ̲LIST ̲WRITE ̲PARAMS
called This is done by a case statement. In these procedures
the appropriate WRITE ̲PARAMS are setup. The actual
WRITE is performed in the procedure MDP ̲WRITE ̲BUFFER.…86…1…02…
…02… …02… …02… …02… …02… …02…
4.2.1.4.15 T̲e̲s̲t̲ ̲M̲D̲C̲O̲ ̲I̲n̲v̲o̲c̲a̲t̲i̲o̲n̲
4.2.1.4.15.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 utility module controls the message on
basis of the specifications described in section
42.1.1.16, and requests updates of the MDCO
̲ERROR ̲LIST on basis of the control.
4.2.1.4.15.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
a) TEST ̲MDCO ̲INVOCATION (MDCO ̲ERROR ̲LIST :
INTEGER)
(MDCO
̲ERROR
̲LIST
:
INTEGER,
MDCO
̲INV
:
BOOLEAN)
b) TEST ̲DCO ̲INVOCATION(R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R6 LINK (DEST)
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 - R7 (DEST)
4.2.1.4.15.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
UPDATE ̲MDCO ̲ERROR ̲LIST(External procedure)
TEST ̲MDCO ̲INVOCATION(Internal prcedure)
TEST ̲MORE ̲THAN ̲ONE ̲SHI (Internal procedure)
TEST ̲SUPV ̲SPEC (Internal procedure)
See figure 4.2.1.4.15.3-1…86…1…02… …02… …02… …02…
…02… …02… …02… …02…
TEST ̲MDCO ̲INVOCATION COMPONENTS…01…Fig. 4.2.1.4.15.3-1…86…1…02… …02… …02… …02… …02… …02… …02… …02…
4.2.1.4.15.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer Source Listings
4.2.1.4.15.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
This utility module tests the following conditions
and updates the MDCO ̲ERROR ̲LIST n accordance
with the result of each test.
The message will be send to the MDCO if one
of the following conditions are fulfilled.
- Supervisor specified
a) All incoming
messages
b) All incoming
of specified
classification.
Thefunction is performed by a check in
the distribution system parameter record,
ref DBD section 5.1.1.
- Internal Handling Instruction detected.
The function is performed by a check in
the second word of the associated received
QEL.
- Spcial Handling Instruction of type:
Exclusive
Crypto Security
National Eyes
Only
More Than one
detected
The function is performed by a check in
the access profile of the associated received
QEL.
- Missing SICs These funtions
are performed
by checks in
the second
word of the
QEL.
- Garbled SICs
After end test of the parameters the MDCO ̲ERROR
̲LIST is checked an if MDCO ̲invocation is necessary
the MDCO ̲INV is set to true.…86…1…02… …02… …02… …02… …02…
…02… …02… …02… …02…
4.2.1.4.16 C̲O̲N̲V̲ ̲S̲C̲D̲ ̲L̲I̲S̲T̲ ̲T̲O̲ ̲Q̲ ̲L̲I̲S̲T̲
4.2.1.4.16.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 utility module converts a list of
SCDs to a Queue List. A fixed number of
SCDs is usedas keys for access of TMP during
each convertion loop run. This gives flexibility
in the number of SCD which can be converted.
4.2.1.4.16.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
a) CONV ̲SCD ̲LIST ̲TO ̲Q ̲LIST (SCD ̲POINTER: POINTER
̲TYPE,
NO
̲OF
̲SCD
: COUNER
̲TYPE,
MAX
̲Q
̲ENTRY: COUNTER
̲TYPE)
(SCD
̲POINTER: POINTER
̲TYPE,
MAX
̲Q
̲ENTRY: COUNTER
̲TYPE)
b) CONV ̲SCD ̲LIST ̲TO ̲Q ̲LIST(R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲s̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R6 LINK (DEST)
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0 - R7 (DEST)…86…1…02…
…02…
…02…
…02…
…02…
…02…
…02…
…02…
…02…
…02…
Fig. 4.2.1.4.16.3-1…01…CONV ̲SCD ̲LIST ̲TO ̲Q ̲LIST COMPONENTS…86…1…02… …02… …02… …02… …02… …02… …02… …02… …02…
…02…
4.2.1.4.16.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
CONV ̲SCD ̲LIST ̲TO ̲Q ̲LIST (Internal procedure)
GET ̲SCD ̲TABLE ̲OUTPUT (Internal procedure)
CREATE ̲KEY ̲LIST (Internal procedure)
UPDATEQ ̲LIST (Internal procedure)
COMPARE ̲REF ̲REC ̲WITH ̲Q ̲LIST (Internal procedure)
CREATE ̲NEW ̲Q ̲LINE (Internal procedure)
See figure 4.2.1.4.16.3-1
4.2.1.4.16.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer Source Listings
4.2.1.4.16.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
Thi