top - download
⟦b24fd6bed⟧ Wang Wps File
Length: 43795 (0xab13)
Types: Wang Wps File
Notes: CPS/SDS/025
Names: »1608A «
Derivation
└─⟦c333b847f⟧ Bits:30005811 8" Wang WCS floppy, CR 0118A
└─ ⟦this⟧ »1608A «
WangText
…09……00……00……00……00…(…0a……00……00…(…0b…(…0f…$ #…0b…#…00…#…05…"…08…"…0b…"…0e…"…00…" !…09…!…0c…!…0d…!…02…!…07… …0d… …86…1 …02… …02… …02…
…02…CPS/SDS/025
…02…850401…02……02…
MESSAGE MANAGEMENT
DETAILED DESIGN SPECIFICATION…02…ISSUE 1…02…CAMPS
4.2.3.4.2.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̲
Refer source list.
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
b1 ) ITS ̲FIRST
b2 ) ITS ̲LAST
b3 ) ITS ̲UNLOAD (m)
b4 ) ITS ̲CLEAR
b5 ) ITS ̲FREE ̲SECTORS (m)
b6 ) ITS ̲THRESHOLD
b7 ) ITS ̲ENABLE ̲THRESHOLD
b8 ) ITS ̲WARNING ̲ENABLE (m)
b9 ) ITS ̲WARNING ̲PENDING (m)
b10) CIF ̲CONTROL ̲BLOCK
b11) VIEW ̲CONTROL ̲BLOCK
b12) FIELD ̲DESCRIPTOR
STORAGE ̲STATUS (m)
b13) ITS ̲BUF (m)
b14) IO ̲BUF (m)
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
None
4.2.3.4.2.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
E̲x̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
- Read Block 4.2.5.7.1
- Init Write Block 4.2.5.7.2
- Write Buffer 4.2.5.7.4
- Release Buffer 4.2.5.7.5
- Get Sequential 4.2.5.7.8
- Get Random 4.2.5.7.9
- Write ̲and release buffer 4.2.5.7.5.a
- Put Sequential 4.2.5.7.10
- Put Random 4.2.5.7.11
- Move Buffer 4.2.5.7.14
- OCD Unload Update 4.2.4.7.7
- MMS ̲REPLY ̲CMD ̲LARGE 4.1.5.11
- Delete OCD 4.2.4.7.5
- Impossible 4.1.5.4
a) U̲n̲l̲o̲a̲d̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
It is checked that the CIF is permanent and has
been checkpointed. If not, nothing is done. If
a Store command has not been issued for the CIF,
the OCD entry is deleted. Otherwise the CIF is
packed and put into ITS , and OCD entry is updated,
reflecting the unload.
OCD must be reserved, and ITS ̲BUF and IO ̲BUF available
at call. ITS ̲BUF and IO ̲BUF are released before
return.
Flowgram: Refer figure 4.2.3.4.2.5-1.
b) P̲a̲c̲k̲ ̲C̲I̲F̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Converts a CIF in STS to packed format, either
in ITS or in a dump file. First the length of the
packed CIF is determined. If the CIF shall be packed
to a Dump File, the call parameter Maxlength specifies
the maximum allowed CIF Length, and an error return
with CC = File Full is made if CIF Length is too
large. Otherwise Maxlength is zero, and CIF Length
is then used in a call of CHECK ̲FREE ̲ITS to check
that space is available in ITS.
OCD must be reserved, and ITS ̲BUF and IO ̲BUF available
at call. The buffers are released before return.
Flowgram: None
c) W̲r̲i̲t̲e̲ ̲P̲a̲c̲k̲e̲d̲ ̲H̲e̲a̲d̲e̲r̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
WRITE ̲PACKED ̲HEADER(CIFCB: CIF ̲CONTROL ̲BLOCK,
VCBCOUNT,
FIELDCOUNT: INTEGER,
CIFLENGTH,
START: SECTOR ̲NUMBER)
(CC: COMPLETION ̲CODE):
ERROR ̲OK
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Initiates a write at sectornumber START in ITS
̲BUF.
Outputs CIF header to ITS ̲buffer, updating ITS
̲BUF.REMAINING. The output is done by calling PUT
̲SEQUENTIAL in following steps:
1) Output CIFLENGTH, STATE and CIFCB.
2) Output VCBCOUNT, and all VCBs having storage
status true. In the packed VCBs field references
of temporary fields are cleared.
3) Output FIELDCOUNT and all field descriptors
from field group one and onwards having storage
status true.
OCD must be reserved and ITS ̲BUF available at call.
ITS ̲BUF is still reserved for continued writing
at return, except if an error occurred.
Flowgram: None
d) P̲a̲c̲k̲ ̲F̲i̲e̲l̲d̲s̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲
PACK ̲FIELDS(CIFCB: CIF ̲CONTROL ̲BLOCK)
(CC: COMPLETION ̲CODE): ERROR
̲OK
Reads fields from CIF into IO ̲BUF and outputs them
into ITS ̲BUF by calling MOVE ̲FIELD ̲BUF ̲TO ̲CACHE.
The fields read are those from group one and onwards,
having storage status true. The operation may require
several cycles in a loop with intervening WRITE
̲BUFFER and PREPARE ̲FIELD ̲BUFFER calls, if buffers
are not large enough. The procedure releases IO
̲BUF and ITS ̲BUF.
OCD must be reserved and IO ̲BUF available at call.
ITS ̲BUF must be initiated for the write at call.
Flowgram: Refer fig. 4.2.3.4.2.5-2
e) C̲h̲e̲c̲k̲ ̲F̲r̲e̲e̲ ̲I̲T̲S̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
CHECK ̲FREE ̲ITS(LENGTH: SECTOR ̲NUMBER)
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Checks that a contiguous block of LENGTH sectors
are available in ITS starting at UNLOAD pointer.
If the pointer is near the top of ITS, it may be
necessary to write an empty CIF to fill out the
remaining space and then set Unload pointer to
ITS ̲START. This is done using ITS ̲BUF.
ITS threshold variables are updated.
OCD must be reserved and ITS ̲BUF available at call.
ITS ̲BUF is released before return.
If space not available, IO ̲ERROR is called with
CC = ITS ̲OVERFLOW.
Flowgram: Refer figure 4.2.3.4.2.5-3.
f) D̲e̲t̲e̲r̲m̲i̲n̲e̲ ̲P̲a̲c̲k̲e̲d̲ ̲C̲I̲F̲ ̲L̲e̲n̲g̲t̲h̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
DETERMINE ̲PACKED ̲CIF ̲LENGTH
(CIFCB: CIF ̲CONTROL ̲BLOCK)
(CIFLENGTH: SECTORNUMBER,
VCBCOUNT,
FIELDCOUNT: INTEGER)
Calculates the key figures for a CIF to be unloaded
in the following way:
…86…1 …02… …02… …02… …02… …02…
1) Walk through the View List of the CIFCB.
If a VCB has storage status equal to true,
VCBCOUNT is incremented, and all fields of
the view are inspected. For each field belonging
to a permanent field group, the storage status
is set to true in field descriptor.
2) Walk through the address list of CIFCB, starting
with field group number one. For each field
descriptor having storage status equal to true,
FIELDCOUNT is incremented, and USED ̲LENGTH
is added to CIFLENGTH.
3) Add 2 x SIZE(PACKED ̲CIFCB) +
2 x SIZE(PACKED ̲VCB) x VCBCOUNT +
2 x SIZE(PACKED ̲FD) x FIELDCOUNT + 8
to CIFLENGTH. Then convert CIFLENGTH from bytecount
to sectorcount.
Flowgram: None
g) D̲e̲c̲r̲e̲a̲s̲e̲ ̲F̲r̲e̲e̲ ̲I̲T̲S̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
DECREASE ̲FREE ̲ITS(LENGTH: SECTOR ̲NUMBER)
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Subtracts LENGTH from ITS ̲FREE ̲SECTORS. If it then
becomes smaller than ITS ̲WARNING ̲THRESHOLD, and
ITS ̲WARNING ̲ENABLE is true, the following is done:
1) ITS ̲WARNING ̲ENABLE is set to false.
2) If an MMS Threshold Warning operation is queued,
it is returned with warning type equal to ITS
̲WARNING. Otherwise ITS ̲WARNING ̲PENDING is set
to true.
Flowgram: None
h) M̲o̲v̲e̲ ̲F̲i̲e̲l̲d̲ ̲B̲u̲f̲f̲e̲r̲ ̲T̲o̲ ̲C̲a̲c̲h̲e̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
MOVE ̲FIELD ̲BUF ̲TO ̲CACHE (SOURCE ̲BUF,
DEST ̲BUF: DISK ̲BUFFER)
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Moves contents of field buffer in Source disk buffer
to the cache buffer in destination buffer.
If necessary destination disk buffer is written
out by calling NEXT ̲DEST ̲DISK ̲BUF
Flowgram: None
i) N̲e̲x̲t̲ ̲D̲e̲s̲t̲ ̲D̲i̲s̲k̲ ̲B̲u̲f̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
NEXT ̲DEST ̲DISK ̲BUF (O ̲BUF: DISK ̲BUFFER)
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Specified disk ̲buffer is written out and a new
buffer initiated to next set of consecutive sectors.
Flowgram: None
PROCEDURE UNLOAD (CIFCB)
CIFCB.FIELD ̲GROUP ̲TYPES EQ O OR
?
CIFCB.CHECKPOINT ̲STATUS EQ O?
CIFCB.STORE ̲TIME EQ O ? DELETE ̲OCD(CIFCB.CIF
ID)
CASE PACK ̲CIF(CIFCB.ITS ̲UNLOAD, 0)(CIFLENGTH, CC):
ERROR ̲OK
ERROR? IMPOSSIBLE
END CASE
CIF ̲REF = ITS ̲UNDLOAD
ITS ̲UNLOAD = ITS ̲UNLOAD + CIFLENGTH
OCD ̲UNLOAD ̲UPDATE(CIFCB.CIF ̲ID, CIF ̲REF, ITS ̲UNLOAD)
RETURN
Figure 4.2.3.4.2.5-1 Unload Flowgram
PROCEDURE PACK ̲FIELDS (CIFCB: CIF ̲CONTROL ̲BLOCK)
(CC: INTEGER)
"collect the marked field into field buffers and output
them
"via ITS buffer
initialize IO ̲buf.fse-deser
- CIFCB,
- CHECK ̲BUF ̲SIZE = false
- purpose = unload
- fse ̲index = fse ̲rem = 0
initialize IO ̲buf. fd ̲addr
- fg = 0
LOOP
prepare ̲field ̲buffer (10 ̲buf, read) (finish, CC)
CC OK ? IMPOSSIBLE
IO ̲BUF. SLE ̲COUNT L O ?
MOVE ̲FIELD ̲BUF ̲TO ̲CACHE(IO ̲BUF,
ITS ̲BUF)
RELEASE (IO ̲BUF)
FINISH = TRUE ? EXIT
END ̲LOOP
WRITE ̲AND ̲RELEASE ̲BUFFER (ITS ̲BUF) (CC)
RETURN
Figure 4.2.3.4.2.5-2 Pack-Fields
PROCEDURE CHECK ̲FREE ̲ITS(LENGTH: SECTOR ̲NUMBER)
ITS ̲UNLOAD LT ITS ̲CLEAR?
L = ITS ̲LAST-ITS ̲UNLOAD + 1
L GE LENGTH?
DECREASE ̲FREE ̲ITS(L)
Write empty CIF of length L at
ITS ̲UNLOAD, using ITS ̲BUF
ITS ̲UNLOAD = ITS ̲FIRST
LENGTH GT ITS ̲FREE? IMPOSSIBLE(INTERNAL ̲ERROR)
DECREASE ̲FREE ̲ITS(LENGTH)
RETURN
CHECK FREE ITS FLOWGRAM
FIGURE 4.2.3.4.2.5-3
4.2.3.4.3 D̲u̲m̲p̲ ̲M̲o̲d̲u̲l̲e̲
4.2.3.4.3.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The module takes care of dump of CIFs from STS and
ITS to Dump Files on offline volumes.
The module contains the command handling procedures:
- Init Dump,
- Dump CIF Sequence,
- Terminate Dump,
4.2.3.4.3.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
The module has 3 subpackage Interfaces:
a) Init Dump, refer 4.2.3.7.2
b) Dump CIF Sequence, refer 4.2.3.7.3
c) Terminate Dump, refer 4.2.3.7.4
And 2 additional module interfaces:
d) C̲h̲e̲c̲k̲ ̲D̲u̲m̲p̲ ̲F̲i̲l̲e̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
CHECK ̲DUMP ̲FILE(FILE: FILE ̲DESCRIPTOR)
(START,
LENGTH: SECTOR ̲NUMBER,
DCB: DEVICE ̲CONTROL ̲BLOCK
CC: COMPLETION ̲CODE):
ERROR ̲OK
C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲:̲
File not found
Not Dump File
Not Initiated
e) G̲e̲t̲ ̲S̲e̲g̲m̲e̲n̲t̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
GET ̲SEGMENT(SEGMENT: SEGMENT ̲ID
DUMP ̲FILE ̲START: SECTOR ̲NUMBER)
(START,
LENGTH,
DIRECTORY: SECTOR ̲NUMBER,
CC: COMPLETION ̲CODE):
ERROR ̲OK
C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲
Empty Segment
4.2.3.4.3.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
All components are procedures.
a) Init Dump,
b) Dump CIF Sequence
c) Terminate Dump,
d) Initialize Dump File Header.
Prepares a new Dump File by initializing the File
Header, refer 4.2.3.1.1.4 b. This is done the first
time an Init Dump command is issued for the file.
e) I̲n̲i̲t̲i̲a̲l̲i̲z̲e̲ ̲D̲u̲m̲p̲ ̲V̲a̲r̲i̲a̲b̲l̲e̲s̲
The control variables for a dump are initialized
as part of the Init Dump command.
f) D̲u̲m̲p̲ ̲t̲h̲e̲ ̲C̲I̲F̲
Performs the dump of a CIF either from STS or ITS,
depending upon the storage status of the CIF.
g) D̲u̲m̲p̲ ̲P̲a̲c̲k̲e̲d̲ ̲C̲I̲F̲
Performs the dump of a CIF from ITS.
h) M̲a̲k̲e̲ ̲D̲i̲r̲e̲c̲t̲o̲r̲y̲ ̲E̲n̲t̲r̲y̲
Updates a Dump Segment with a new entry.
i) C̲h̲e̲c̲k̲ ̲D̲u̲m̲p̲ ̲V̲a̲r̲i̲a̲b̲l̲e̲s̲
Checks that a Dump CIF Sequence command is legal.
Refer
j) C̲h̲e̲c̲k̲ ̲D̲u̲m̲p̲ ̲F̲i̲l̲e̲
Locates the specified file and checks that it has
been initialized as a dump file. DUMP ̲FILE ̲HEADER
̲SIZE sectors are read into ITS ̲BUF, and remain
there at return unless an error occurred.
OCD must be reserved, and ITS ̲BUF available at
call.
k) G̲e̲t̲ ̲S̲e̲g̲m̲e̲n̲t̲
The specified segment is located in dump file,
the header of which has been read into ITS ̲BUF
before call. Checks that Dump File Label has been
initialised, and that Segment is used.
ITS ̲BUF is released before return.
Figure 4.2.3.4.3.3-1
Dump Control Flow
4.2.3.4.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̲
Refer source list.
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
b1) OPERATION
b2) CC (m)
b3) IO ̲BUF (m)
b4) ITS ̲BUF (m)
b5) FIELD ̲DESCRIPTOR (m)
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
c1) VAR FREE ̲DUMP ̲SECTORS: SECTOR ̲NUMBER
Number of free sectors in Dump File.
c2) VAR NEXT ̲FREE ̲SECTOR: SECTOR ̲NUMBER
Absolute number of next free sector in Dump
File.
c3) VAR DUMP ̲FILE ̲START: SECTOR ̲NUMBER
Absolute number of first sector in Dump File.
c4) VAR SEGMENT ̲START: SECTOR ̲NUMBER
Absolute number of first sector in current
Dump Segment.
c5) VAR CURRENT ̲DIRECTORY ̲SECTOR: SECTOR ̲NUMBER
Absolute number of current sector of directory
in Dump Segment.
c6) VAR SEGMENT ̲LENGTH: INTEGER
Number of sectors in current Dump Segment.
c7) VAR CURRENT ̲DIRECTORY ̲LOCATION:
1..255
Offset of next free byte in Current Directory
Sector.
c8) VAR SEGMENT ̲NUMBER: SEGMENT ̲ID
Segment Id of current Dump Segment
c8a)VAR DUMP ̲DEVICE: POINTER
Pointer to DCB of Dump Device
c8a)VAR DUMP ̲DEVICE: POINTER;
Pointer to DCB of dump device
c9) VAR DUMP ̲IN ̲PROGRESS: BOOLEAN
True, if a Dump has been initiated and not
yet terminated.
INIT DUMP ̲IN ̲PROGRESS = FALSE
c10)VAR ERROR ̲IN ̲DUMP: BOOLEAN
True, if an error has occurred during a Dump.
Then the Dump must be terminated.
4.2.3.4.3.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
E̲x̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
- Read Block 4.2.5.7.1
- Init Write Block 4.2.5.7.2
- Init Update Block 4.2.5.7.3
- Write Buffer 4.2.5.7.4
- Release Buffer 4.2.5.7.5
- Get Sequential 4.2.5.7.8
- Get Random 4.2.5.7.9
- Put Sequential 4.2.5.7.10
- Put Random 4.2.5.7.11
- Move Buffer 4.2.5.7.14
- Find CIF 4.2.3.4.5.2 b
- Close CIF 4.1.5.3
- Reserve OCD 4.1.5.7
- Release OCD 4.1.5.8
- Check Passivation 4.2.2.7.13
- Pack CIF 4.2.3.4.2.2 b
a) I̲n̲i̲t̲ ̲D̲u̲m̲p̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Performs the Init Dump Command. It is checked,
that specified Dump File is open and is a legal
Dump File. The Dump File Header is read, and if
no dumps have been performed previously to the
file, the File Header is initialized.
Finally the Dump Control Variables are initialized,
and reply is returned. If an error is discovered,
a CC is returned, and Terminate Dump shall then
not be called.
OCD is reserved during the command, and ITS ̲BUF
is used.
Flowgram: Refer figure 4.2.3.4.3.5-1
b) D̲u̲m̲p̲ ̲C̲I̲F̲ ̲S̲e̲q̲u̲e̲n̲c̲e̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Performs the Dump CIF Sequence command. It is checked
that a Dump has been initiated, and that Dump File
is still open. The specified CIF ̲IDs are processed
one by one. OCD is reserved during processing of
each CIF ̲ID, and released in between in order to
allow other commands in parallel with this one.
ITS ̲BUF is used during each cycle.
If a CIF is passive in STS, it is made active before
the dump of it. This is done by FIND ̲CIF procedure.
After dump of the CIF it is checked if it shall
be made passive again.
Flowgram: Refer figure 4.2.3.4.3.5-2.
c) T̲e̲r̲m̲i̲n̲a̲t̲e̲ ̲D̲u̲m̲p̲
Performs the Terminate Dump command. It is checked
that a Dump has been initiated and that Dump File
is still open. The current Dump Segment is terminated
by moving its directory to end of the segment.
Then the Dump File Header is updated.
OCD is reserved, and ITS ̲BUF used during the command.
Flowgram: Refer figure 4.2.3.4.3.5-3
d) I̲n̲i̲t̲i̲a̲l̲i̲z̲e̲ ̲D̲u̲m̲p̲ ̲F̲i̲l̲e̲ ̲H̲e̲a̲d̲e̲r̲
Called by Init Dump.
Initializes the Header of an empty Dump File.
OCD must be reserved and ITS ̲BUF available at call.
ITS ̲BUF is released before return.
Flowgram: Refer figure 4.2.3.4.3.5-4.
e) I̲n̲i̲t̲i̲a̲l̲i̲z̲e̲ ̲D̲u̲m̲p̲ ̲V̲a̲r̲i̲a̲b̲l̲e̲s̲
Called by Init Dump. Initializes the Dump Control
Variables specified in 4.2.3.4.3.4 c1) - c9) from
Dump File Header.
OCD must be reserved and ITS ̲BUF available at call.
ITS ̲BUF is released before return.
Flowgram: Refer figure 4.2.3.4.3.5-5.
f) D̲u̲m̲p̲ ̲t̲h̲e̲ ̲C̲I̲F̲
Called by Dump CIF Sequence. Performs the actual
dump of a CIF depending upon its storage status
as specified at call.
OCD must be reserved and ITS ̲BUF available at call.
ITS ̲BUF is released before return.
Flowgram: Refer figure 4.2.3.4.3.5-6
g) D̲u̲m̲p̲ ̲P̲a̲c̲k̲e̲d̲ ̲C̲I̲F̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
DUMP ̲PACKED ̲CIF(CIFREF: SECTOR ̲NUMBER)
(CIF ̲LENGTH: SECTOR ̲NUMBER,
CC: COMPLETION ̲CODE):
ERROR ̲OK
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
The packed CIF at sector number CIFREF in ITS is
moved to sector number NEXT ̲FREE ̲SECTOR in Dump
File.
It is checked that CIF ̲LENGTH is not greater than
FREE ̲DUMP ̲SECTORS.
IO ̲BUF and ITS ̲BUF are used, and released before
return.
OCD must be reserved at call.
Flowgram: None
h) M̲a̲k̲e̲ ̲D̲i̲r̲e̲c̲t̲o̲r̲y̲ ̲E̲n̲t̲r̲y̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
MAKE ̲DIRECTORY ̲ENTRY(CIF: CIF ̲ID,
CIF ̲ADDRESS: SECTOR
̲NUMBER)
(CC COMPLETION ̲CODE)):ERROR
̲OK
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Makes a new directory entry and updates the sector
specified by CURRENT ̲DIRECTORY ̲SECTOR at CURRENT
̲DIRECTORY ̲LOCATION. The latter is then increased
by entry length. If it was the last entry at the
sector, a new sector is allocated by:
- CURRENT ̲DIRECTORY ̲SECTOR = CURRENT ̲DIRECTORY
̲SECTOR-1
- CURRENT ̲DIRECTORY ̲LOCATION = 2
- FREE ̲DUMP ̲SECTORS = FREE ̲DUMP ̲SECTORS-1
- SEGMENT ̲LENGTH = SEGMENT ̲LENGTH + 1
ITS ̲BUF is used for the update and released before
return.
If FREE ̲DUMP ̲SECTORS LT 0, error return with CC
= DUMP
̲FILE
̲FULL
Flowgram: None
i) C̲h̲e̲c̲k̲ ̲D̲u̲m̲p̲ ̲V̲a̲r̲i̲a̲b̲l̲e̲s̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Checks that Dump File specified in Operation is
open, and that Dump Variables allow a Dump CIF
Sequence i.e. DUMP ̲IN ̲PROGRESS equal FALSE and
ERROR ̲IN ̲DUMP equal TRUE.
Flowgram: None
j) C̲h̲e̲c̲k̲ ̲D̲u̲m̲p̲ ̲F̲i̲l̲e̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Checks that the specified file is a dump file.
Dump File Header is read in.
k) G̲e̲t̲ ̲S̲e̲g̲m̲e̲n̲t̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Locates specified dump segment in file. Checks
that the Segment has been used for storing CIF's.
PROCEDURE INIT DUMP
RESERVE ̲OCD
DUMP ̲INPROGREE EQ TRUE? CC = ILLEGAL ̲DUMP
CASE CHECK ̲DUMP ̲FILE(OPERATION.DUMP ̲REF)
(DUMP ̲FILE ̲START, LENGTH, CC):
ERROR ̲OK
ERROR?
END CASE
READ DUMP ̲FILE ̲LABEL EQ MMS ̲DUMP ̲FILE ̲LABEL?
RELEASE ̲BUFFER(ITS ̲BUF)
CASE INITIALIZE ̲DUMP ̲FILE ̲HEADER
(DUMP ̲FILE ̲START, LENGTH)
(CC): ERROR ̲OK
ERROR?
END CASE
RELEASE ̲BUFFER
(ITS ̲BUF)
INITIALIZE ̲DUMP ̲VARIABLES
Put into reply: SEGMENT ̲NUMBER
CC = OK
RELEASE ̲OCD
RETURN
DUMP MODULE COMPONENTS
FIGURE 4.2.3.4.3.5-1
PROCEDURE DUMP ̲CIF ̲SEQUENCE
CASE CHECK ̲DUMP ̲VARIABLES( )(CC): ERROR ̲OK
ERROR?
END CASE
NO ̲OF ̲CIFS = OPERATION.NUMBER
DUMP LOOP
NO ̲OF ̲CIFS EQ 0? CC = OK, ((EXIT
Get next CIF ̲ID, DECREMENT(NO ̲OF ̲CIFS)
CASE FIND ̲CIF(CIF ̲ID)
(CIFREF, ST, LOCK): ERROR ̲OK
ERROR? CC = NOT ̲FOUND
ERROR ̲IN ̲DUMP = TRUE ((EXIT
END CASE
CASE DUMP ̲THE ̲CIF(CIFREF, ST)(CIF ̲ADDRESS, CC):
ERROR
̲OK
ERROR?
END CASE
CASE MAKE ̲DIRECTORY ̲ENTRY(CIF ̲ID, CIF ̲ADDRESS)(CC):
ERROR
̲OK
ERROR?
END CASE
CASE ST OF
STS? CHECK ̲PASSIVATION(CIFREF, LOCK)
ITS? RELEASE ̲OCD
END CASE
ERROR ̲IN ̲DUMP EQ TRUE? ((EXIT
END DUMP LOOP
RETURN
FIGURE 4.2.3.4.3.5-2
DUMP CIF SEQUENCE FLOWGRAM
PROCEDURE TERMINATE ̲DUMP
DUMP ̲IN ̲PROGRESS EQ FALSE? CC = NOT ̲INITIATED
ERROR ̲IN ̲DUMP EQ TRUE? CC = DUMP ̲ERROR
RESERVE ̲OCD
CASE CHECK ̲DUMP ̲FILE(OP.DUMP ̲REF)(START,LENGTH, CC):
ERROR ̲OK
ERROR?
END CASE
Update Dump File using ITS ̲BUF:
Move Directory Sectors to Next Free Sector,
Move Dump Variables to Dump File Header:
CURRENT ̲TIME to DUMP ̲TIME
FREE ̲DUMP ̲SECTORS to FREE ̲SECTORS
NEXT ̲FREE ̲SECTOR to NEXT ̲FREE ̲SECTOR
SEGMENT ̲NUMBER + 1 to NEXT ̲SEGMENT
SEGMENT ̲START, SEGMENT ̲LENGTH to SEGMENT ̲ DESCRIPTOR(SEGMENT ̲NUMBER) Error
during
update?
End update by releasing ITS ̲BUF
CC = OK
RELEASE ̲OCD
DUMP ̲IN ̲PROGRESS = FALSE
RETURN
Figure 4.2.3.4.3.5-3
Terminate Dump Flowgram
PROCEDURE INITIALIZE ̲DUMP ̲FILE ̲HEADER
(START, LENGTH)(CC): ERROR ̲OK
CASE INIT ̲WRITE ̲BLOCK(START,
DUMP ̲FILE ̲HEADER ̲SIZE)
(ITS ̲BUF, CC): ERROR ̲OK
ERROR? -EXITNO = ERROR
END CASE
Put into ITS ̲BUF:
DUMP ̲FILE ̲LABEL = MMS ̲DUMP ̲FILE ̲LABEL
DUMP ̲TIME = 0,
FREE ̲SECTORS = LENGTH-DUMP ̲FILE ̲HEADER ̲SIZE,
NEXT ̲FREE ̲SECTOR = DUMP ̲FILE ̲HEADER ̲SIZE,
NEXT ̲SEGMENT = 1,
ALL SEGMENT ̲DESCRIPTORS = 0
CASE WRITE ̲BUFFER(ITS ̲BUF)(CC): ERROR ̲OK
ERROR? EXITNO = ERROR
END CASE
EXITNO = OK
RELEASE ̲BUFFER(ITS ̲BUF)
RETURN(EXITNO)
Figure 4.2.3.4.3.5-4
Initialize Dump File Header Flowgram
PROCEDURE INITIALIZE ̲DUMP ̲VARIABLES: ERROR ̲OK;
Read DUMP ̲FILE ̲HEADER in ITS ̲BUF,
and move following variables:
FREE ̲SECTORS to FREE ̲DUMP ̲SECTORS,
NEXT ̲FREE ̲SECTOR to NEXT ̲FREE ̲SECTOR
NEXT ̲SEGMENT to SEGMENT ̲NUMBER
RELEASE ̲BUFFER(ITS ̲BUF)
CURRENT ̲DIRECTORY ̲SECTOR = NEXT ̲FREE ̲SECTOR
+ FREE ̲DUMP ̲SECTORS-1
CURRENT ̲DIRECTORY ̲LOCATION = 2
DECREMENT(FREE ̲DUMP ̲SECTORS)
SEGMENT ̲START = NEXT ̲FREE ̲SECTOR
SEGMENT ̲LENGTH = 1
DUMP ̲IN ̲PROGRESS = TRUE
ERROR ̲IN ̲DUMP = FALSE
RETURN
Figure 4.2.3.4.3.5-5
Initialize Dump Variables Flowgram
PROCEDURE DUMP ̲THE ̲CIF(CIFREF: CIF ̲REFERENCE,
ST: STORAGE ̲STATUS)
(CIF ̲ADDRESS: SECTOR ̲NUMBER,
CC: COMPLETION ̲CODE):
ERROR ̲OK
CASE ST OF
STS? CASE PACK ̲CIF(CIFREF, NEXT ̲FREE ̲SECTOR,
FREE ̲DUMP ̲SECTORS)
(CIF ̲LENGTH, CC): ERROR ̲OK
ERROR?
END CASE
ITS? CASE DUMP ̲PACKED ̲CIF(CIFREF)
(CIF ̲LENGTH, CC): ERROR
̲OK
ERROR?
END CASE
END CASE
CIF ̲ADDRESS = NEXT ̲FREE ̲SECTOR
Subtract CIF ̲LENGTH from FREE ̲DUMP ̲SECTORS
Add CIF ̲LENGTH to NEXT ̲FREE ̲SECTOR
Add CIF ̲LENGTH to SEGMENT ̲LENGTH
CC = OK ERROR ̲IN ̲DUMP = TRUE
EXITNO = OK EXITNO = ERROR
RETURN(EXITNO)
Figure 4.2.3.4.3.5-6
Dump the CIF Flowgram
4.2.3.4.4 C̲l̲e̲a̲r̲ ̲M̲o̲d̲u̲l̲e̲
4.2.3.4.4.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The Clear module handles the Clear command.
The Clear command has a Clear Time parameter, and the
command shall delete CIFs in ITS having Store Time
less than or equal to Clear Time. This is done in the
following way:
ITS is read sequentially from Clear Pointer. The process
will stop on two criteria:
- Unload Pointer is reached
- A CIF is read with Store Time greater than Clear
Time.
For each CIF read the corresponding OCD entry is deleted,
and the Unload Pointer is positioned to next CIF in
ITS. The space occupied by the CIF is released, and
this may cause update of the boolean ITS Warning Enable.
In order to enable recovery of Clear Pointer it is
written to the ITS Control Block each time Maxclearcount
CIFs have been read, and at end of the command.
4.2.3.4.4.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
The module has two subpackage interface:
a) Clear Refer 4.2.3.7.5
4.2.3.4.4.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
All components are procedures. The modules b), c) and
d) are subcomponents of the Clear Procedure.
a) Clear
b) Write Clear Pointer
c) Update ITS Clear
d) Increase Free ITS
4.2.3.4.4.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer source list.
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
b1) ITS ̲BUF (m)
b2) ITS ̲CLEAR (m)
b3) ITS ̲FIRST
b4) ITS ̲LAST
b5) ITS ̲FREE ̲SECTORS (m)
b6) ITS ̲ENABLE ̲THRESHOLD
b7) ITS ̲WARNING ̲ENABLE (m)
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
None
4.2.3.4.4.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
E̲x̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
- Reserve OCD 4.1.5.7
- Release OCD 4.1.5.8
- Read Block 4.2.5.7.1
- Get Sequential 4.2.5.7.8
- Init Write Block 4.2.5.7.2
- Put Random 4.2.5.7.11
- Write Buffer 4.2.5.7.4
- Release Buffer 4.2.5.7.5
- Delete OCD 4.2.4.7.5
- Impossible 4.1.5.4
a) C̲l̲e̲a̲r̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer 4.2.3.4.4.1. In order to allow other commands
to be executed in parallel, OCD and ITS ̲BUF are
released each time a CIF has been read from ITS.
Flowgram: Refer figure 4.2.3.4.4.5-1.
b) W̲r̲i̲t̲e̲ ̲C̲l̲e̲a̲r̲p̲o̲i̲n̲t̲e̲r̲
PROCEDURE WRITE ̲CLEARPOINTER
Update ITS Control Block with current value of
ITS ̲CLEAR. ITS ̲BUF is used for the update.
Flowgram: None
c) U̲p̲d̲a̲t̲e̲ ̲I̲T̲S̲ ̲C̲l̲e̲a̲r̲
PROCEDURE UPDATE ̲ITS ̲CLEAR(LENGTH: SECTOR ̲NUMBER)
Adds LENGTH to ITS ̲CLEAR, taking a possible wrap-around
into account.
Flowgram: None
d) I̲n̲c̲r̲e̲a̲s̲e̲ ̲F̲r̲e̲e̲ ̲I̲T̲S̲
PROCEDURE INCREASE ̲FREE ̲ITS.(LENGTH: SECTOR
̲NUMBER)
Adds LENGTH to ITS ̲FREE ̲SECTORS. If it then becomes
greater than ITS ̲ENABLE ̲THRESHOLD, ITS ̲WARNING
̲ENABLE is set TRUE.
Flowgram: None
PROCEDURE CLEAR
CLEARCOUNT = MAXCLEARCOUNT
CLEAR LOOP
RESERVE ̲OCD
ITS ̲CLEAR EQ ITS ̲UNLOAD? EXIT
CASE READ ̲BLOCK(ITS ̲CLEAR,1)(ITS ̲BUF, CC): ERROR ̲OK
ERROR? IMPOSSIBLE(CC)
END CASE
GET ̲SEQUENTIAL(ITS ̲BUF, CIFLENGTH, 1)
GET ̲SEQUENTIAL(ITS ̲BUF, CIFSTATE, 1)
CIFSTATE EQ EMPTY? RELEASE ̲BUFFER(ITS ̲BUF)
GET ̲SEQUENTIAL(ITS ̲BUF, CIFCB, CIFCBLENGTH)
RELEASE ̲BUFFER(ITS ̲BUF)
CIFCB.STORE ̲TIME GE OPERATION.STORE ̲TIME? EXIT
DELETE ̲OCD(CIFCB.CIF ̲ID)
UPDATE ̲ITS ̲CLEAR(CIFLENGTH)
DECREMENT(CLEARCOUNT) NE 0?
CLEARCOUNT = MAXCLEARCOUNT
WRITE ̲CLEARPOINTER
INCREASE ̲FREE ̲ITS(CIFLENGTH)
RELEASE ̲OCD
END CLEAR LOOP
WRITE ̲CLEARPOINTER
RELEASE ̲OCD
CC = OK
RETURN
Figure 4.2.3.4.4.5-1 Clear Flowgram
4.2.3.4.5 R̲e̲t̲r̲i̲e̲v̲e̲ ̲M̲o̲d̲u̲l̲e̲
4.2.3.4.5.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The module performs the Retrieve Command. Retrieval
may be from online or offline disk as specified in
the type parameter of the command.
Online retrieval may take place from either ITS or
STS, depending upon the CIF Storage Status recorded
in OCD Entry. Retrieval from STS requires that the
CIF is made active. If it was not already active, it
is made passive again after retrieval.
In any case the retrieval will result in a copy in
STS of that part of the CIF specified by the View Id.
4.2.3.4.5.2 ̲M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
The module has the following subpackage interface:
a) Retrieve Refer 4.2.3.7.6
b) Copy Fields Refer 4.2.3.7.8
and one additional interface:
c) F̲i̲n̲d̲ ̲C̲I̲F̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
FIND ̲CIF(NAME: CIF ̲ID,
VERS: CIF ̲VERSION)
(REF: CIF ̲REFERENCE,
STORAGE: STORAGE ̲STATUS,
LOCK: LOCK ̲POINTER):ERROR ̲OK
4.2.3.4.5.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
All components are procedures:
a) Retrieve
b) Retrieve Online
c) Retrieve Offline
d) Retrieve from STS
e) Find CIF
f) Unpack
g) Unpack Field Descriptors
h) Generate Retrieved CIFCB
i) Unpack Views
j) Unpack Fields
k) Generate Retrieve Field Info
l) Move Retrieved Fields
m) Search Directory
n) Move Sectors
o) Move Fields to Copy
p) Copy Fields
q) Transfer Block
4.2.3.4.5.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̲
Refer source list.
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
b1) OPERATION (m)
b2) CC (m)
b3) ATTRIBUTES (m)
b4) CIF ̲CONTROL ̲BLOCK (m)
b5) VIEW ̲CONTROL ̲BLOCK
b6) FIELD ̲DESCRIPTOR
b7) ITS ̲BUF (m)
b8) IO ̲BUF (m)
b9) NUMBER ̲OF ̲RETRIEVE ̲CALLS (m)
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
None
Figure 4.2.3.4.5.3-1
Retrieve Control flow
4.2.3.4.5.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
E̲x̲t̲e̲r̲n̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
- Open CIF 4.1.5.2
- Close CIF 4.1.5.3
- Reserve OCD 4.1.5.7
- Release OCD 4.1.5.8
- Read Block 4.2.5.7.1
- Init Write Block 4.2.5.7.2
- Init Update Block 4.2.5.7.3
- Read Fields 4.2.5.7.6
- Init Write Fields 4.2.5.7.7
- Write Buffer 4.2.5.7.4
- Release Buffer 4.2.5.7.5
- Get Sequential 4.2.5.7.8
- Put Sequential 4.2.5.7.10
- Get Random 4.2.5.7.9
- Put Random 4.2.5.7.11
- Move Buffer 4.2.5.7.14
- Put Attributes 4.2.2.4.5.2 c
- Check Dumpfile 4.2.3.4.3.2 d
- Get Segment 4.2.3.4.3.2 e
- Check Passivation 4.2.2.7.13
- Search OCD 4.2.4.7.4
- Read Checkpoint 4.2.4.7.13
- Check CIF Status 4.2.4.7.15
- Activate CIF 4.2.4.7.8
- Impossible 4.1.5.4
a) R̲e̲t̲r̲i̲e̲v̲e̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Performs the command Retrieve. Online or offline
retrieval determined by type parameter in command.
Flowgram: Refer figure 4.2.3.4.5.5-1
b) R̲e̲t̲r̲i̲e̲v̲e̲ ̲O̲n̲l̲i̲n̲e̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Finds the CIF and determines if it shall be retrieved
from ITS or STS. OCD is reserved during retrieval.
ITS Buffer and IO Buffer must be available at call.
Flowgram: Refer figure 4.2.3.4.5.5-2
c) R̲e̲t̲r̲i̲e̲v̲e̲ ̲O̲f̲f̲l̲i̲n̲e̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Retrieves a CIF from the dump file and dump segment
specified in command.
OCD is reserved during retrieval.
ITS Buffer and IO Buffer must be available at call.
Flowgram: Refer figure 4.2.3.4.5.5-3
d) R̲e̲t̲r̲i̲e̲v̲e̲ ̲f̲r̲o̲m̲ ̲S̲T̲S̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Retrieves a CIF from STS by making a copy of a
CIF already in STS.
Flowgram: Refer figure 4.2.3.4.5.5-4.
e) F̲i̲n̲d̲ ̲C̲I̲F̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Searches in OCD a CIF identified by name, and returns
a reference to the CIF either in STS or in ITS.
If the CIF is passive in STS, it is made active,
and opened. OCD is reserved at return. The reason
for the loop is that the CIF might be about to
be made passive caused by another command. If so,
it must be searched again in OCD.
Flowgram: Refer figure 4.2.3.4.5.5-5.
f) U̲n̲p̲a̲c̲k̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Unpacks a CIF from ITS or a dump file and generates
a partial copy of the CIF in STS.
Flowgram: Refer figure 4.2.3.4.5.5-6.
g) U̲n̲p̲a̲c̲k̲ ̲F̲i̲e̲l̲d̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲o̲r̲s̲
PROCEDURE UNPACK ̲FIELD ̲DESCRIPTORS(VCB)(CC): ERROR
̲OK
Read sequentially through ITS ̲BUF the Field Descriptors
of the packed CIF. Three Data Structures are initialized
during this scan:
- Field Information of ATTRIBUTES
- Field Sequence of IO ̲BUF for later write of
the fields of the generated CIF
- Field Sequence of ITS ̲BUF for later read of
fields from packed CIF
For each Field Reference of VCB the following is
done:
- If REFERENCE ̲STATUS = NOT ̲REFERENCED or FIELD
̲ID = 0, FIELD ̲STATUS is set to NOT ̲EXISTING
in Field Information for corresponding group,
and the field group is bypassed in packed CIF.
- Otherwise:
FIELD ̲STATUS is set to NEW-FIELD, and the Field
Descriptor of the packed CIF is located. Its
USED ̲LENGTH is inserted as ALLOCATED ̲LENGTH
in Field Information, and as LENGTH in Field
Sequence of IO ̲BUF and ITS ̲BUF.
The sector number of field contents is inserted
as OFFSET in Field Sequence of ITS ̲BUF. The Field
Group and Field Id are inserted in Field Sequence
of IO ̲BUF, and OFFSET is set to zero.
- In any case PERMANENT is set false and WRITE
̲
ACCESS true in Field Information.
In case of an IO error, ITS ̲BUF is released, and
error return is taken.
Flowgram: None
h) G̲e̲n̲e̲r̲a̲t̲e̲ ̲R̲e̲t̲r̲i̲e̲v̲e̲d̲ ̲C̲I̲F̲C̲B̲
Generates a CIFCB with VCB and Fields according
to contents of Attributes.
Flowgram: Refer figure 4.2.3.4.5.5-7
i) U̲n̲p̲a̲c̲k̲ ̲V̲i̲e̲w̲s̲
PROCEDURE UNPACK ̲VIEWS( )(CC): ERROR ̲OK
Read sequentially through ITS ̲BUF the VCBs of the
packed CIF, until a VCB is found with View ID =
OPERATION.VIEW ̲ID. Error return if not found or
if IO error occurs. In that case ITS ̲BUF is released.
Flowgram: None
j) U̲n̲p̲a̲c̲k̲ ̲F̲i̲e̲l̲d̲s̲
PROCEDURE UNPACK ̲FIELDS(CIFCB)(LOCK, CC): ERROR
̲OK
Opens the CIF described by CIFCB. Then moves field
contents, one field at a time, from packed CIF
to fields of CIFCB, as described in IO ̲BUF.FIELD
̲SEQUENCE. The sectornumbers and lengths of the
fields in packed CIF are found in ITS ̲BUF.FIELD
̲SEQUENCE. Upon termination, IO ̲BUF and ITS ̲BUF
are released.
In case of an IO error, CC is set, and CIFCB is
removed by calling DELETE ̲CIF ̲FROM ̲STS and REMOVE
̲
CIFCB. Finally CIF is closed by calling CLOSE ̲CIF.
Flowgram: None
k) G̲e̲n̲e̲r̲a̲t̲e̲ ̲R̲e̲t̲r̲i̲e̲v̲e̲ ̲F̲i̲e̲l̲d̲ ̲I̲n̲f̲o̲
PROCEDURE GENERATE ̲RETRIEVE ̲FIELD ̲INFO(CIFCB, VCB)
Same function as Unpack Field Descriptors except
that the source is an active CIF.
Prepares creation of a retrieved CIF in STS by
initializing the following three data structures:
- ATTRIBUTES.FIELD ̲INFORMATION
Shall describe the permanent fields referenced
by VCB.
- IO ̲BUF.FIELD ̲SEQUENCE
Shall describe fields of the new CIF
- ITS ̲BUF.FIELD ̲SEQUENCE
Shall describe the fields to be moved.
For details refer to procedure UNPACK ̲FIELD ̲
DESCRIPTORS.
Flowgram: None
l) M̲o̲v̲e̲ ̲R̲e̲t̲r̲i̲e̲v̲e̲d̲ ̲F̲i̲e̲l̲d̲s̲
PROCEDURE MOVE ̲RETRIEVED ̲FIELDS(OLD ̲VCB, CIFCB1,
CIFCB2)
The FIELD ̲SEQUENCE described by ITS ̲BUF belonging
to CIFCB1 is moved to the FIELD ̲SEQUENCE described
by IO ̲BUF, belonging to CIFCB2. The following IO
procedures are used:
- GET ̲FIELD ̲DESCRIPTOR
- NEXT ̲ADDR ̲ELEMENT
- MOVE ̲SECTORS
Flowgram: None
m) S̲e̲a̲r̲c̲h̲ ̲D̲i̲r̲e̲c̲t̲o̲r̲y̲
PROCEDURE SEARCH ̲DIRECTORY (NAME: CIF ̲ID,
VERS: CIF ̲VERSION,
LAST ̲SECTOR: SECTOR
̲NUMBER)
(CIF ̲REF: SECTOR
̲NUMBER,
CC: COMPLETION
̲CODE):
ERROR
̲OK
Uses ITS ̲BUF to search the specified dump segment
directory for an entry with NAME. The start of
the packed CIF is returned. ITS ̲BUF is released
before return.
Completion Codes: Not Found
Flowgram: None
n) C̲o̲p̲y̲ ̲F̲i̲e̲l̲d̲s̲
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Source and destination CIF are made available for
a copy. It is checked that USED ̲LENGTH of all the
referenced fields of destination VIEW are zero.
If not, error return. It is checked that the access
profile of the involved CIFS are identical, if
not, error return. Then fields are moved by calling
MOVE ̲FIELDS ̲TO ̲COPY. Finally attributes of the
destination CIF are updated and the CIFS are closed.
F̲l̲o̲w̲g̲r̲a̲m̲: None.
o) M̲o̲v̲e̲ ̲F̲i̲e̲l̲d̲s̲ ̲t̲o̲ ̲C̲o̲p̲y̲
MOVE ̲FIELDS ̲TO ̲COPY (SOURCE ̲CIFCB, DEST ̲CIFCB)
N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲ ̲
For each field with FIELD ̲STATUS equal to INCLUDED
̲FROM ̲PREDECESSOR the contents of SOURCE ̲CIFCB are
moved to dest ̲CIFCB. The following procedures are
used:
- GET ̲FIELD ̲DESCRIPTOR
- NEXT ̲ADDR ̲ELEMENT
- MOVE ̲SECTORS
F̲l̲o̲w̲g̲r̲a̲m̲: None
p) M̲o̲v̲e̲ ̲S̲e̲c̲t̲o̲r̲s̲
PROCEDURE MOVE ̲SECTORS (SECTOR,
SOURCE ̲SECTOR,
DEST ̲SECTOR: SECTOR ̲NUMBER)
The specified no. of sectors in STS are moved from
source to destination.
OCD must be reserved at call.
Flowgram: None
q) T̲r̲a̲n̲s̲f̲e̲r̲ ̲B̲l̲o̲c̲k̲
PROCEDURE TRANSFER ̲BLOCK (SECTOR,
COUNT: SECTOR ̲NUMBER)
(BYTES ̲REMAINING: INTEGER)
Transfer a contiguous block of data from ITS or
dump file to field of CIF currently under retrieval.
PROCEDURE RETRIEVE
INCREMENT(NUMBER ̲OF ̲RETRIEVE ̲CALLS)
CASE OPERATION.RETRIEVE ̲TYPE
ONLINE? RETRIEVE ̲ONLINE( )(CIFCB, VCB, LOCK, CC)
OFFLINE? RETRIEVE ̲OFFLINE ( )(CIFCB, VCB, LOCK,
CC)
END CASE
CC NE OK?
COMPUTE ̲OBJ ̲REF(VCB ̲POOL)(INDEX OF VCB)
Put into reply: CIFCB.PROFILE,
Index of VCB
PUT ̲ATTRIBUTES(VCB)
CLOSE ̲CIF(LOCK)
RETURN
Figure 4.2.3.4.5.5-1
Retrieve Flowgram
PROCEDURE RETRIEVE ̲ONLINE( )
(CIFCB: CIF ̲CONTROL ̲BLOCK,
VCB: VIEW ̲CONTROL
̲BLOCK,
LOCK: LOCK ̲DESCRIPTOR,
CC: COMPLETION ̲CODE)
CASE FIND ̲CIF(OPERATION.CIF ̲ID)(CIF ̲REF, ST, LOCK):
ERROR ̲OK
ERROR? CC = NOT ̲FOUND
END CASE
CASE ST
STS? RETRIEVE ̲FROM ̲STS(CIF ̲REF, LOCK)
(CIFCB, VCB, LOCK, CC)
ITS? UNPACK(CIF ̲REF)(CIFCB, VCB, LOCK, CC)
RELEASE ̲OCD
END CASE
RETURN
Figure 4.2.3.4.5.5-2
Retrieve Online Flowgram
PROCEDURE RETRIEVE ̲OFFLINE( )(CIFCB, VCB, LOCK, CC)
RESERVE ̲OCD
CASE CHECK ̲DUMPFILE(OPERATION.DUMP ̲REF)
(START, LENGTH, CC): ERROR ̲OK
ERROR?
END CASE
CASE GET ̲SEGMENT(OPERATION.SEGMENT)
(START, LENGTH, DIRECTORY, CC): ERROR
̲OK
ERROR? CC = NOT FOUND
END CASE
CASE SEARCH ̲DIRECTORY(OPERATION.CIF ̲ID, DIRECTORY)
(CIF ̲REF, CC): ERROR ̲OK
ERROR? CC = NOT FOUND
END CASE
UNPACK(CIF ̲REF)(CIFCB, VCB, LOCK, CC)
RELEASE ̲OCD
RETURN
Figure 4.2.3.4.5.5-3
Retrieve Offline Flowgram
PROCEDURE RETRIEVE ̲FROM ̲STS(OLDCIFCB, OLD LOCK)
(CIFCB, VCB, LOCK, CC)
Move from OLDCIFCB to ATTRIBUTES:
ACCESS ̲PROFILE, SECURITY ̲PROFILE, CIF ̲ID
Search OLDCIFCB.VIEW ̲LIST for VCB with
VCB.VIEW ̲ID EQ OPERATION.VIEW ̲ID
Not found or VCB.STORAGE ̲STATUS NE TRUE?
CC = NOT ̲FOUND
CLOSE ̲CIF(OLDLOCK)
GENERATE ̲RETRIEVE ̲FIELD ̲INFO(OLDCIFCB, VCB)
GENERATE ̲RETRIEVED ̲CIFCB( )(CIFCB, VCB)
OPEN ̲CIF(CIFCB, FALSE)(LOCK, DUMMY)
MOVE ̲RETRIEVED ̲FIELDS(OLDCIFCB, CIFCB)
CHECK ̲PASSIVATION(OLDCIFCB, OLDLOCK)
CC = OK
RETURN
Figure 4.2.3.4.5.5-4
Retrieve from STS Flowgram
FIND ̲CIF (NAME: CIF ̲ID,
VERS: CIF ̲VERSION)
(REF: CIF ̲REFERENCE,
STORAGE: STORAGE ̲STATUS,
LOCK: LOCK ̲DESCRIPTOR): ERROR ̲OK
FIND ̲CIF LOOP
RESERVE ̲OCD
CASE SEARCH ̲OCD(NAME)(ENTRY): ERROR ̲OK
ERROR? EXITNO = ERROR; RELEASE ̲OCD;
EXIT
END CASE
REF = ENTRY.CIF ̲REFERENCE; STORAGE = ENTRY.STORAGE
̲
STATUS
STORAGE EQ ITS? EXITNO = OK; EXIT
READ ̲CHECKPOINT(ENTRY)(IO ̲BUF)
CASE CHECK ̲CIF ̲STATUS(IO ̲BUF)(REF): ERROR ̲OK
ERROR? ACTIVATE ̲CIF( )(REF)
END CASE
RELEASE ̲BUFFER (IO ̲BUF)
RELEASE ̲OCD
CASE OPEN ̲CIF(REF, TRUE)(LOCK, CC): ERROR ̲OK
OK? EXITNO = OK; EXIT
END CASE
END FIND ̲CIF LOOP
RETURN(EXITNO)
Figure 4.2.3.4.5.5-5
Find CIF Flowgram
PROCEDURE UNPACK(CIFREF: SECTOR ̲NUMBER)
(CIFCB, VCB, LOCK, CC): ERROR ̲OK;
CASE READ ̲BLOCK (CIFREF)(ITS BUF): ERROR ̲OK
ERROR?
END CASE
Read CIFLENGTH and CIFCB by GET ̲SEQUENTIAL
Move from CIFCB to ATTRIBUTES:
ACCESS ̲PROFILE, SECURITY ̲PROFILE, CIF ̲ID.
CASE UNPACK ̲VIEWS( )(CC): ERROR ̲OK
ERROR?
END CASE
UNPACK ̲FIELD ̲DESCRIPTORS
GENERATE ̲RETRIEVED ̲CIFCB( )(CIFCB, VCB)
CASE UNPACK ̲FIELDS(CIFCB)(LOCK, CC): ERROR ̲OK
ERROR? DELETE ̲CIF ̲FROM ̲STS
LOCK 0 ? REMOVE ̲CIFCB (CIFCB)
CLOSE ̲CIF(CIFCB)
DELETE ̲CIFCB(CIFCB)
END CASE
CC = OK
RETURN
Figure 4.2.3.4.5.5-6
Unpack Flowgram
PROCEDURE GENERATE ̲RETRIEVED ̲CIFCB(NEW ̲SEGM)(CIFCB,
VCB)
CASE GENERATE ̲CIFCB(NEW ̲SEGM)(CIFCB, CC): ERROR ̲OK
ERROR? IMPOSSIBLE(CC)
END CASE
Initialize CIFCB with:
Access Profile, Security Profile, CIF ̲ID
from ATTRIBUTES. RETRIEVE ̲STATUS = TRUE
VCB = CIFCB.VIEW ̲LIST.FIRST
VCB.VIEW ̲ID = OPERATION.VIEW ̲ID
RETURN
Figure 4.2.3.4.5.5-7
Generate Retrieved CIFCB Flowgram
4.2.3.5 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲D̲a̲t̲a̲
Refer MMS ̲PREFIX.S
4.2.3.6 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
N/A
4.2.3.7 S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲s̲
4.2.3.7.1 S̲t̲o̲r̲e̲
F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
The procedure performs the STORE command. Operation
must contain the command parameters at call. REPLY
and CC are updated. Referenced CIF is reserved during
processing. No Disk Accesses.
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
STORE
C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲
illegal view reference
none existing CIF
store not allowed
4.2.3.7.2 I̲n̲i̲t̲ ̲D̲u̲m̲p̲
F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The procedure performs the INIT DUMP Command. Operation
must contain the command parameters at call.
Reply and CC are updated. OCD is reserved, and ITS
Buffer used during processing. Disk Access to Dump
File on Offline Volume.
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
INIT ̲DUMP
C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲
illegal dump
not dumpfile
DCM error codes
4.2.3.7.3 D̲u̲m̲p̲ ̲C̲I̲F̲ ̲S̲e̲q̲u̲e̲n̲c̲e̲
F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The procedure performs the DUMP CIF SEQUENCE Command.
Operation must contain the command parameters at call.
REPLY and CC are updated. OCD is reserved, and ITS
Buffer and IO Buffer are used. They are, however, released
each time a single CIF has been dumped, in order to
allow other commands to be processed in parallel. Disk
Access to STS, ITS and Dump File, and to OCD.
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
DUMP ̲CIF ̲SEQUENCE
C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲
not dumpfile
not initiated
dump error
DCM error codes
4.2.3.7.4 T̲e̲r̲m̲i̲n̲a̲t̲e̲ ̲D̲u̲m̲p̲
F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The procedure performs the TERMINATE DUMP Command.
Operation must contain command parameters at call.
REPLY and CC are updated. OCD is reserved and ITS Buffer
is used. Disk Access to Dump File.
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
TERMINATE ̲DUMP
C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲
not initiated
dump error
not dumpfile
DCM error codes
4.2.3.7.5 C̲l̲e̲a̲r̲
F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The procedure performs the CLEAR command. Operation
must contain command parameters at call. REPLY and
CC are updated. OCD is reserved, and ITS Buffer is
used. They are, however, released between each CIF
cleared, in order that other commands can be processed
in parallel. Disk accesses to ITS and OCD.
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
CLEAR
4.2.3.7.6 R̲e̲t̲r̲i̲e̲v̲e̲
F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The procedure performs the RETRIEVE command. Operation
must contain command parameters at call. REPLY and
CC are updated. OCD is reserved, and ITS Buffer and
IO Buffer are used. Disk accesses to STS, ITS, Dump
File and OCD.
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
RETRIEVE
C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲
view not found
offline retrieval
not dumpfile
empty segment
4.2.3.7.7 U̲n̲l̲o̲a̲d̲
F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The procedure unloads a CIF from STS to ITS, and updates
OCD accordingly if applicable. Unload is performed,
only if the CIF is permanent, has been checkpointed,
and has been subject to at least one Store command.
If the first two conditions but not the latter are
fulfilled, the OCD entry is deleted.
OCD and CIF must be reserved at call. They are not
released by the procedure. ITS Buffer and IO Buffer
used during processing. Disk Accesses to ITS, STS and
OCD.
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
UNLOAD(CIFCB: CIF ̲CONTROL ̲BLOCK)
4.2.3.7.8 C̲o̲p̲y̲ ̲F̲i̲e̲l̲d̲s̲
The procedure performs the COPY ̲FIELDS command. REPLY,
CC and ATTRIBUTES are updated.
OCD is reserved, ITS ̲BUF and IO ̲BUF are used.
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
COPY ̲FIELDS
C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲
Copy not allowed