DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Wang WCS documentation floppies

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Wang WCS documentation floppies

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦0aaf79a5d⟧ Wang Wps File

    Length: 42506 (0xa60a)
    Types: Wang Wps File
    Notes: CPS/SDS/025               
    Names: »1602A «

Derivation

└─⟦c333b847f⟧ Bits:30005811 8" Wang WCS floppy, CR 0118A
    └─ ⟦this⟧ »1602A « 

WangText

'…00……00……00……00……19……0a……00……00……19……0b……19……00……19……02……19…
…19……07……18……0b……18……01……18……05……17……09……17……0d……17……01……17……06……16……0a……16……0b……16……00……16… …16……07……15……0a……15……0e……15……0f……15…
…15……07……14……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.2.4.6    F̲i̲e̲l̲d̲ ̲H̲a̲n̲d̲l̲i̲n̲g̲ ̲M̲o̲d̲u̲l̲e̲



4.2.2.4.6.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         The module performs the command CREATE FIELDS.  In
         addition, it contains service functions for other modules
         for handling of fields.



4.2.2.4.6.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         The module contains two subpackage interfaces:

         a)  Create Fields            refer 4.2.2.7.11
         b)  Extend Field             refer 4.2.2.7.15

         and 2 additional interfaces.

         c)  D̲e̲f̲i̲n̲e̲ ̲F̲i̲e̲l̲d̲s̲

             F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             Generates fields and field references for a View
             according to Field Information in Attributes. 
             The parameter New View specifies if the View is
             under creation, or if the procedure is called from
             CREATE FIELDS.

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             DEFINE ̲FIELDS(VCB:       VIEW ̲CONTROL ̲BLOCK,
                           NEW ̲VIEW:  BOOLEAN)
                          (CC:        COMPLETION ̲CODE):  ERROR
                                      ̲OK



4.2.2.4.6.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         The module consists of the following procedures:

         a)  Create Fields
         b)  Define Fields
         c)  Get Last Fragment
         d)  Check Field Parameters
         e)  Update Field References
         f)  Generate Field
         g)  Extend Field
         h)  Check FD





4.2.2.4.6.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
         b5) VIEW ̲CONTROL ̲BLOCK       (m)
         b6) FIELD ̲DESCRIPTOR         (m)

         c)  L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲

             None




















































                    Figure 4.2.2.4.6.3-1
                 Field Handling Control Flow



4.2.2.4.6.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̲

         -   Get CIF                  4.1.5.1
         -   Open CIF                 4.1.5.2
         -   Close CIF                4.1.5.3
         -   MMS ̲Receive Words        4.1.5.11
         -   Put Attributes           4.2.2.4.5.2 c)
         -   Allocate Sector          4.2.2.4.7.2 a)
         -   Get Field Desceiptor     4.2.2.4.5.2f
         -   Next Addr Element        4.2.2.4.5.2d
         -   Prev Addr Element        4.2.2.4.5.2e
         -   Put In Addr Element      

         a)  C̲r̲e̲a̲t̲e̲ ̲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̲ 

             Opens the CIF, reads field information from calling
             application, defines fields according to the field
             information and returns updated attributes.

             F̲l̲o̲w̲g̲r̲a̲m̲

             None


         b)  D̲e̲f̲i̲n̲e̲ ̲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̲

             Call the procedures Check Field Parameters and
             Update Field References.

             F̲l̲o̲w̲g̲r̲a̲m̲

             None

         c)  G̲e̲t̲ ̲L̲a̲s̲t̲ ̲F̲r̲a̲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̲

             Given an address element, the last fragment of
             the field or the last fragment of the field group
             is fetched.



         d)  C̲h̲e̲c̲k̲ ̲F̲i̲e̲l̲d̲ ̲P̲a̲r̲a̲m̲e̲t̲e̲r̲s̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             The Field Information Elements of Attributes are
             checked for internal consistency, and consistency
             with the Views of the CIF. The number of elements
             to be checked is CIF ̲CONTROL ̲BLOCK.NUMBER ̲OF ̲FIELD
             ̲GROUPS. The check depends upon the New View parameter.
             

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             CHECK ̲FIELD ̲PARAMETERS   (VCB:     VIEW ̲CONTROL
                                      ̲                                
                                                                      
                                                                      
                                                                      
                                                                      
                                                                      
                                                                      
                                                                      
                                                                      
                                                                      
                                                                      
                                                                      
                                                                      
                                                                      
                                                                      
                                                                      
                                                                      
                                                                      BLOCK,
                                      NEW ̲VIEW: BOOLEAN)
                                      (CC:      COMPLETION ̲CODE)
                                                : ERROR ̲OK

             F̲L̲O̲W̲G̲R̲A̲M̲

             Figure 4.2.2.4.6.5-1.

         e)  U̲p̲d̲a̲t̲e̲ ̲F̲i̲e̲l̲d̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Updates the field references of specified VCB by
             means of the information in ATTRIBUTES.FIELD ̲
             INFORMATION Generates new fields if required.

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             UPDATE ̲FIELD ̲REFERENCES (VCB:   VIEW ̲CONTROL ̲BLOCK)

             F̲l̲o̲w̲g̲r̲a̲m̲

             Figure 4.2.2.4.6.5-2.


         f)  G̲e̲n̲e̲r̲a̲t̲e̲ ̲F̲i̲e̲l̲d̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Adds a new field to specified Field Group according
             to specified Field Information. If the Field Group
             is currently empty, the empty Field Descriptor
             is used. Otherwise a new Field Descriptor is inserted
             at the end of the group. The Field Id is generated
             as the currently last Field Id of the group plus
             one. The reference count is set to one. Used Length
             is set to zero, and Allocated Length is set as
             specified in Field Information. If nonzero, space
             is allocated by calling Extend Field. It is checked
             that the number of fields in field group is not
             greater than MAX ̲FIELDS.

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲o̲n̲

             GENERATE ̲FIELD   (VCB:    VIEW ̲CONTROL ̲BLOCK,
                               FG:     FIELD ̲GROUP,
                               INFO:   FIELD ̲INFO ̲ELEMENT)
                              (FD:     FIELD ̲DESCRIPTOR,
                               CC:     COMPLETION ̲CODE):ERROR
                                      ̲OK

             F̲l̲o̲w̲g̲r̲a̲m̲

             Figure 4.2.2.4.6.5-3.

         g)  E̲x̲t̲e̲n̲d̲ ̲F̲i̲e̲l̲d̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Extends the specified field by specified number
             of sectors, by a series of Allocate Sectors calls.
             The sectors are attempted to be appended to currently
             last fragment of the field. If it is not possible,
             new fragments are generated. 

             F̲l̲o̲w̲g̲r̲a̲m̲

             Figure 4.2.2.4.6.5-4.

         h)  C̲h̲e̲c̲k̲ ̲F̲D̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Update the specified FD ̲ADDR if

             CC = MMS ̲ADDRESS ̲BLOCK ̲ADJUSTED


CHECK ̲FIELD ̲PARAMETERS (VCB: VIEW ̲CONTROL ̲BLOCK, NEW
 ̲VIEW: BOOLEAN)
                             (CC: COMPLETION ̲CODE):
                             ERROR ̲CODE;
START

PVCB = VCB predecessor

LOOP       "through all field groups"

ATTR.FIELD ̲INF(FG).REFERENCED NE TRUE?

(PVCB) AND (PVCB exists. RS EQ NOT ̲REF)?

NEW ̲VIEW NE TRUE?    ATTR.FIELD ̲INF(FG).FIELD ̲STATUS
                     EQ NOT ̲EXISTING?

                 VCB.FIELD ̲ID NE 0?

                 VCB.RS EQ NOT ̲REF?

FIELD ̲STATUS EQ INCLUDED ̲FROM ̲PREDECESSOR?

 PVCB does not exist?

 (NEW ̲VIEW NE TRUE) AND (PVCB.FIELD ̲ID EQ 0)? -

 ATTR.FIELD ̲INF(FG).WRITE ̲ACCESS EQ TRUE? PVCB.RS EQ
 INCL ̲W ̲READ?

NEW ̲FIELD? max no of fields in group reached?

                           
advance to next field group            CC = FIELD ̲INFO
 ̲ERROR

EXIT    FG GE CIFCB.NO ̲OF ̲FG

END LOOP "field groups

CC = OK

RETURN (CC)

STOP




               Figure 4.2.2.4.6.5-1
         Check Field Parameters Flowgram



UPDATE ̲FIELD ̲REFERENCES (VCB: VIEW ̲CONTROL ̲BLOCK, NEW
 ̲VIEW:BOOLEAN)

START

PVCB = VCB.PREDECESSOR

LOOP "through all field groups

FATT.REFERENCED NE TRUE? -                NEW ̲VIEW NE
                                          TRUE?

CASE ATTR.FIELD ̲INF(FG).FIELD ̲STATUS      VCB.RS = NOT
                                          ̲REF

NOT ̲EXISTING?

  VCB.FIELD ̲ID = 0

INCLUDED ̲FROM ̲PREDECESSOR?

  VCB.FIELD ̲ID = PVCB.FIELD ̲ID

  INCREMENT (FD.REF ̲CONNT)

  ATTR.FIELD ̲INF(FG).WRITE ̲ACCESS EQ TRUE?

  VCBF.RS = INCL ̲W ̲READ VCBF.RS = INCL ̲W ̲WRITE

NEW ̲FIELD?

  GENERATE ̲FIELD (VCB, FG, INFO) (FD)

  VCBF.FIELD ̲ID = FD.FIELD ̲ID

  VCBF.RS = CREATED ̲BY ̲VIEW

END CASE

advance to next field group

EXIT    FG GE CIFCB.NO ̲OF ̲FG

END LOOP "field groups

RETURN 

STOP     

               Figure 4.2.2.4.6.5-2
         Update Field References Flowgram


EXTEND ̲FIELD (CIFCB: CIF ̲CONTROL ̲BLOCK, FIELD: SHORT
 OR LONG ̲FIELD ̲
                                      DESCRIPTOR, COUNT:
                     INTEGER)

START

repeat until no more sectors LOOP

CASE FIELD.SHORT ̲FIELD ̲INDICATOR:

SHORT?

 FIELD.SECTOR ̲COUNT EQ short ̲max?

 CASE ALLOCATE ̲SECTOR(CIFCB, first ̲sector + count, 
                      ADDRESS):ERROR ̲OK

    OK? INCREMENT (sector ̲count)

    ERROR?

    CONVERT ̲TO ̲LONG ̲FIELD(CIFCB,ADDR(FIELD))    ALLOCATE
 ̲FRAGMENT

    ALLOCATE ̲FRAGMENT (CIFCB,ADDR(FIELD),ADDRESS)

 END CASE "ALLOCATE ̲SECTOR"

LONG?

 locate last fragment

 CASE ALLOCATE ̲SECTOR (CIFCB,first ̲sector+count,ADDRESS):ERROR
 ̲OK

    OK? INCREMENT (sector ̲count)

    ERROR? ALLOCATE ̲FRAGMENT(CIFCB,ADDR(FRAGMENT),ADDRESS)

 END CASE 

END CASE

DECREMENT (COUNT)

COUNT EQ 0    EXIT

END LOOP

RETURN

STOP


               Figure 4.2.2.4.6.5-4
              Extend Field Flowgram


GENERATE FIELD (VCB: VIEW ̲CONTROL ̲BLOCK, FE: FIELD ̲INFO ̲ELEMENT,
                                                                  
                                                                 
                                                                 
                                                                 
                                                                 
                                                                 
                                                                 
                                                                 
                                                                 
                                                                 
                                                                 
                                                                 
                                                                 CURRENT
                                                                 ̲FD:
                                                                 FIELD
                                                                 ̲DESCRIPTOR)
                                                                 
                                 (NEW ̲FD: FIELD ̲DESCRIPTOR)

START

SEARCH ̲FG (CURRENT ̲FD, NEW ̲FD)

NEW ̲FD.FIELD ̲ID EQ 0? - NEW ̲FD.FIELD ̲ID = 1

search last ̲field ̲descr. of group

PUT ̲IN ̲ADDRESS ̲ELEMENT (VCB.CIFCB.ADDRESS ̲LIST,
                           last ̲field ̲descr.)

NEW ̲FD = new element

sector ̲count = first ̲sector = field ̲length = 0

reference count = 0

set not NG and short field

NEW ̲FD = last ̲field ̲descr.FIELD ̲ID + 1

FE.ALLOCATED-LENGTH EQ 0?

COUNT = FE.ALLOCATED ̲LENGTH/512

FE.ALLOCATED ̲LENGTH MOD 512 NE 0? - INCREMENT (COUNT)

EXTEND ̲FIELD (VCB.CIFCB, NEW ̲FD, COUNT)

RETURN

STOP











                   Figure 4.2.2.4.6.5-3
                 Generate Field Flowgram


4.2.2.4.7    S̲t̲o̲r̲a̲g̲e̲ ̲M̲a̲n̲a̲g̲e̲m̲e̲n̲t̲ ̲M̲o̲d̲u̲l̲e̲



4.2.2.4.7.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲o̲n̲

         The module contains functions for allocation and deallocation
         of STS storage.



4.2.2.4.7.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         The module has 3 interfaces:

         a)  A̲l̲l̲o̲c̲a̲t̲e̲ ̲S̲e̲c̲t̲o̲r̲

             F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             Allocates a new sector to specified CIF. If possible,
             it is allocated at specified sector address in
             STS. A zero address specified means, that the address
             does not matter. If it is not possible to allocate
             at specified address, a sector is allocated at
             another address, and error return is made.

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             A̲L̲L̲O̲C̲A̲T̲E̲ ̲S̲E̲C̲T̲O̲R̲   (CIFCB:       CIF-CONTROL ̲BLOCK,
                                ADDRESS:     STS ̲SECTOR)
                               (NEW ̲ADDRESS: STS ̲SECTOR):ERROR
                     ̲OK

         b)  R̲e̲l̲e̲a̲s̲e̲ ̲S̲e̲c̲t̲o̲r̲

             F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             Release a sector previously occupied by specified
             CIF.

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲o̲n̲

             RELEASE ̲SECTOR    (CIFCB:       CIF ̲CONTROL ̲BLOCK,
                                ADDRESS:     STS ̲SECTOR)



         c)  R̲e̲l̲e̲a̲s̲e̲ ̲S̲T̲S̲ ̲B̲l̲o̲c̲k̲

             F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲o̲n̲

             Releases a complete STS Block. The specified profile
             is the security profile of the information stored
             in the block. If it is not contained in the Purge
             Profile, the block is purged.

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             RELEASE ̲STS ̲BLOCK     (BLOCK:   STS ̲BLOCK,
                                   PROFILE:  SECURITY ̲PROFILE)



4.2.2.4.7.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         The module consists of 6 procedures:

         a)  Allocate Sector
         b)  Release Sector
         c)  Release STS Block
         d)  Extend CIF
         e)  Remove Addr Element
         f)  Put In Addr Element



4.2.2.4.7.4 D̲a̲t̲a̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲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) CIF ̲CONTROL ̲BLOCK         (M)
         b2) BLOCK ̲LIST ̲ELEMENT        (M)
         b3) FREE ̲BLOCK ̲MAP            (M)
         b4) PURGE ̲BLOCK ̲MAP           (M)
         b5) FREE ̲STS ̲BLOCKS           (M)
         b6) PENDING ̲THRESHOLD ̲WARNING (M)
         b7) STS ̲WARNING ̲PENDING       (M)

















































                  Figure 4.2.2.4.7.3-1 

             Storage Management Control Flow



         c)  L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲

             None



4.2.2.4.7.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̲

         -   MMS Reply Command Large  4.1.5.11
         -   Cm Signal                (j)
         -   Allocate                 4.2.2.4.9.2a
         -   Deallocate               4.2.2.4.9.2b
         -   Next Addr Element        4.2.2.4.5.2d
         -   Prev Addr Element        4.2.2.4.5.2e

         a)  A̲l̲l̲o̲c̲a̲t̲e̲ ̲s̲e̲c̲t̲o̲r̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             A sector is allocated to the CIF, possibly by extending
             the CIF with a new block, calling Extend CIF.

             If the specified address is 0, the sector may be
             allocated anywhere, else the sector is allocated
             at the specified address.  If this is not possible,
             an error is returned.

             Flowgram:  Figure 4.2.2.4.7.5-1.

         b)  R̲e̲l̲e̲a̲s̲e̲ ̲S̲e̲c̲t̲o̲r̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             The Block List Element containing the specified
             sector is located in the CIF Address List, and
             is released from the block.  If it was the last
             reserved sector of the block, it is released by
             Release STS Block.  

             Flowgram:         None.

         c)  R̲e̲l̲e̲a̲s̲e̲ ̲S̲T̲S̲ ̲B̲l̲o̲c̲k̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             If Profile is not contained in Purge Profile, the
             corresponding bit is set in PBM, and Purge Semaphore
             is signalled.  Otherwise the specified block is
             released by freeing its bit in FBM.



             FREE ̲STS ̲BLOCKS is then incremented, and Warning
             Enable Threshold is inspected.

             Flowgram:  None

         d)  E̲x̲t̲e̲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̲

             Allocates a new STS Block to specified CIF. If
             no free blocks are available, retire.  Decrement
             FREE ̲STS ̲BLOCKS and check STS Threshold and return
             a warning if appropriate.  Search FBM for a free
             bit.  When found, reserve bit and return bit number
             in FBM as block number.

             Flowgram:  Figure 4.2.2.4.7.5-2.

         e)  R̲e̲m̲o̲v̲e̲ ̲A̲d̲d̲r̲ ̲E̲l̲e̲m̲e̲n̲t̲

             The specified address element is removed, i.e.
             the following elements are moved upwards in the
             list. A Cif Address Block may be released.

             Flowgram:  None

         f)  P̲u̲t̲ ̲I̲n̲ ̲A̲d̲d̲r̲ ̲E̲l̲e̲m̲e̲n̲t̲

             A new address element is allocated in specified
             position of address block. A new Cif Address Block
             may be allocated.

             Flowgram:  None


             ALLOCATE ̲SECTOR(CIFCB: CIF ̲CONTROL ̲BLOCK,

                        (ADDRESS:STS ̲SECTOR)
                        (NEW ̲ADDRESS:STS ̲SECTOR):ERROR ̲OK


         ADDRESS EQ 0?

         BLOCK ̲NO = ADDRESS/SECTORS ̲IN ̲BLOCK

         find BLE with BLOCK ̲NO

         not found ?

         ADDRESS not free ?

         reserve sector

         NEW ̲ADDRESS = ADDRESS

             find BLE with free sector

             found ?

             EXTEND ̲CIF(CIFCB)

             reserve sector

             initialize NEW ̲ADDRESS

             ADDRESS EQ 0 ? - EXIT=OK

             EXIT=ERROR

         EXIT = OK

         RETURN (EXIT)






       Fig. 4.2.2.4.7.5-1…01…Allocate Sector Flowgram


EXTEND ̲CIF (CIFCB: CIF ̲CONTROL ̲BLOCK)

START

decrement (NO ̲OF ̲STS ̲BLOCKS)

NO ̲OF ̲STS ̲BLOCKS EQ 0? - IMPOSSIBLE (INTERNAL ERROR)

CHECK ̲STS ̲WARNING

set first cleared bit of FBM

locate last BLE of CIF

BLE.BLOCK2 EQ 0? - BLE.BLOCK2 = blocknumber 

PUT ̲IN ̲ADDRESS ̲ELEMENT (CIFCB.ADDRESS ̲LIST, ADDRESS
 (FIRST FD))

NEW ̲BLE.BLOCK1 = blocknumber

NEW ̲BLE.BLOCK ̲SECTOR ̲MAP1 = 0

NEW ̲BLE.BLOCK ̲SECTOR ̲MAP2 = 0

RETURN
























              Figure 4.2.2.4.7.5-2

               Extend Cif Flowgram


4.2.2.4.8    P̲u̲r̲g̲e̲ ̲M̲o̲d̲u̲l̲e̲



4.2.2.4.8.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 purge of disk blocks
             in STS, refer 4.2.2.1.8.



4.2.2.4.8.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

             The module has one subpackage interface:

             a)  Purge Block, refer 4.2.2.7.16



4.2.2.4.8.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

             The module consists of one coroutine,
             and one procedure

             a)  Purge
             b)  Purge Word String



4.2.2.4.8.4 D̲a̲t̲a̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲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) PBM                      (m)
         b2) FBM                      (m)
         b3) ITS ̲BUF                  (m)
         b4) FREE ̲STS ̲BLOCKS          (m)

         c)  L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲

             C̲o̲r̲o̲u̲t̲i̲n̲e̲ ̲R̲e̲c̲o̲r̲d̲

             VAR PURGE ̲COROUTINE:     MMS ̲COROUTINE

















































                   Figure 4.2.2.4.8.3-1

                    Purge Control Flow



4.2.2.4.8.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
         -   Init Write Block         4.2.5.7.2
         -   Release Buffer           4.2.5.7.5
         -   Put Sequential           4.2.5.7.10
         -   Write Buffer             4.2.5.7.4

         a)  P̲u̲r̲g̲e̲ ̲C̲o̲r̲o̲u̲t̲i̲n̲e̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             The coroutine waits in Purge Semaphore for a signal
             that a block must be purged.  Then locates a set
             bit in PBM.  The bit number is the number of the
             block to be purged.  OCD is reserved.  The ITS
             buffer is filled with the random pattern and written
             the prescribed number of times.  ITS buffer and
             OCD are released.  The block is released by resetting
             its bit in PBM and in FBM.  FREE ̲STS ̲BLOCKS are
             incremented and Warning Enable Threshold is inspected.

             F̲l̲o̲w̲g̲r̲a̲m̲

             None

         a)  P̲u̲r̲g̲e̲ ̲W̲o̲r̲d̲ ̲S̲t̲r̲i̲n̲g̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             Fill a data area with a random purge pattern.





4.2.2.4.9    C̲o̲n̲t̲r̲o̲l̲ ̲B̲l̲o̲c̲k̲ ̲A̲l̲l̲o̲c̲a̲t̲i̲o̲n̲ ̲M̲o̲d̲u̲l̲e̲



4.2.2.4.9.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 manages 3 pools of control blocks, namely:

         -   Free CIF Control Blocks, refer 4.1.4.3.1
         -   Free View Control Blocks, refer 4.1.4.3.2
         -   Free CIF Address Blocks, refer 4.1.4.3.3.3



4.2.2.4.9.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲

         a)  A̲l̲l̲o̲c̲a̲t̲e̲

             F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             Allocates a control block from specified pool.
              

             If NEW ̲SEGM = FALSE the CIFCB must be allocated
             in the present segment.

             Retires process if no free element available.

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             ALLOCATE (NEW ̲SEGM:      BOOLEAN)
                      (POOL:          POOL ̲TYPE,
                       ELEMENT:       POINTER)

         b)  D̲e̲a̲l̲l̲o̲c̲a̲t̲e̲

             F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             Returns a control block to specified pool.

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             DEALLOCATE(POOL:         POOL ̲TYPE,
                        ELEMENT:      POINTER)



4.2.2.4.9.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         The module consists of the procedures:

         -   Allocate
         -   Deallocate





4.2.2.4.9.4 D̲a̲t̲a̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         a)  D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲

         a1) Pool Descriptors         4.1.4.3.3.5

         b)  E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲

         b1) POOLDESCR (m)



4.2.2.4.9.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲

         Allocate - flowgram, fig. 4.2.2.4.9.5-1

         Deallocate - flowgram, fig. 4.2.2.4.9.5-2





         ALLOCATE(POOL:               POOL ̲TYPE,
                  NEW ̲SEGM:           BOOLEAN)
                 (ELEMENT:            POINTER)

         START

         DECREMENT(POOLDESCR(POOL).FREE ̲COUNT)

         POOLDESCR(POOL).FREE ̲COUNT LT 0? IMPOSSIBLE

         CIFIB ̲POOL AND NEW ̲SEGM=TRUE? FIND BEST SEGMENT

         RETURN

         STOP
















                   Figure 4.2.2.4.9.5-1

                    Allocate Flowgram



         DEALLOCATE(POOL:             POOL ̲TYPE,
                    ELEMENT:          POINTER)

         START

         INCREMENT(POOLDESCR(POOL).FREE ̲COUNT)

         FREE ̲COUNT GE ENABLE ̲THRESHOLD? ENABLE=TRUE

         RETURN

         STOP

































                   Figure 4.2.2.4.9.5-2

                   Deallocate Flowgram



4.2.2.5  C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲D̲a̲t̲a̲

         None



4.2.2.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̲

         None



4.2.2.7  S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲s̲



4.2.2.7.1    C̲r̲e̲a̲t̲e̲ ̲C̲I̲F̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Performs CREATE CIF Command.  Operation must contain
         parameters at call.  Reply and CC are updated.  Attributes
         are read from and returned to calling application.
          No Disk Accesses.

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         CREATE ̲CIF

         C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲

         field info error



4.2.2.7.2    C̲r̲e̲a̲t̲e̲ ̲N̲e̲w̲ ̲C̲I̲F̲ ̲V̲e̲r̲s̲i̲o̲n̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Performs the CREATE NEW CIF VERSION command.  Operation
         must contain parameters at call.  Reply and CC are
         updated.  Attributes are read from and returned to
         calling application.  Referenced CIF is opened.  No
         Disk accesses.

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         CREATE ̲NEW ̲CIF ̲VERSION



         C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲

         illegal view reference
         none existing CIF
         CIF not permanent
         not latest version
         CIF stopped
         field info error



4.2.2.7.3    C̲r̲e̲a̲t̲e̲ ̲V̲i̲e̲w̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Performs the CREATE ̲VIEW command.  Operation must contain
         parameters at call.  Reply and CC are updated.  Attributes
         are read from and returned to calling application.
          Referenced CIF is opened.  No Disk Access.

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         CREATE ̲VIEW

         C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲

         illegal view reference
         none existing CIF
         view id overflow
         field info error



4.2.2.7.4    R̲e̲m̲o̲v̲e̲ ̲V̲i̲e̲w̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Performs the REMOVE ̲VIEW command.  Operation must contain
         parameter at call.  Reply and cc are updated.  Referenced
         CIF is opened.  Disk accesses for Unload and passivation
         may take place.  CIF is opened with OCD reservation.

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         REMOVE ̲VIEW

         C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲

         illegal view reference
         none existing CIF





4.2.2.7.5    L̲o̲c̲k̲ ̲V̲i̲e̲w̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Performs LOCK VIEW command.

         Operation must contain parameters at call.  Reply and
         CC are updated.  Referenced CIF is opened with OCD
         reservation.  Disk Access for checkpoint update.

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         LOCK ̲VIEW

         C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲

         illegal view references
         none existing CIF
         view not checkpointed



4.2.2.7.6    U̲n̲l̲o̲c̲k̲ ̲V̲i̲e̲w̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Performs UNLOCK VIEW command.  Otherwise as 4.2.2.7.5

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         UNLOCK ̲VIEW

         C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲

         illegal view reference
         none existing CIF
         view not checkpointed
         no matching lock



4.2.2.7.7    S̲t̲o̲p̲ ̲C̲I̲F̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Performs STOP CIF command.  Operation must contain
         parameters at call.  Reply and CC are updated.  The
         CIFs found are opened with OCD reservation while their
         checkpoints are updated.  Disk accesses for checkpoint
         update.



         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         STOP ̲CIF



4.2.2.7.8    L̲o̲o̲k̲u̲p̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Performs the LOOKUP command.  Operation must contain
         parameters at call.  Reply and CC are updated.

         Attributes are returned to calling application.  OCD
         reserved during search.  Disk accesses for OCD search
         and CIF activation.

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         LOOKUP

         C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲

         illegal view reference
         nonexisting CIF
         unknown view name
         CIF not in STS
         no matching look



4.2.2.7.9    G̲e̲t̲ ̲V̲i̲e̲w̲ ̲A̲t̲t̲r̲i̲b̲u̲t̲e̲s̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Performs the GET VIEW ATTRIBUTES Command.  Operation
         must contain parameters at call.  Reply and CC are
         updated.  Attributes are returned to calling application.
          CIF opened.  No disk accesses.

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         GET ̲VIEW ̲ATTRIBUTES

         C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲

         illegal view reference
         none existing CIF





4.2.2.7.10 C̲h̲a̲n̲g̲e̲ ̲A̲t̲t̲r̲i̲b̲u̲t̲e̲s̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Performs the CHANGE ATTRIBUTES command.  Operation
         must contain parameters at call.  Reply and CC are
         updated.  CIF opened.  No disk access.

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         CHANGE ̲ATTRIBUTES

         C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲

         illegal view reference
         none existing CIF
         security violation



4.2.2.7.11 C̲r̲e̲a̲t̲e̲ ̲F̲i̲e̲l̲d̲s̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Performs the CREATE FIELD command.  Operation must
         contain parameters at call.  Reply and CC are updated.
          Attributes are read from and returned to calling application.
          CIF opened.  No disk accesses.

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         CREATE ̲FIELDS

         C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲

         illegal view reference
         none existing CIF
         field info error



4.2.2.7.12 G̲e̲n̲e̲r̲a̲t̲e̲ ̲C̲I̲F̲C̲B̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Generates a CIF Control Block with Address List, and
         the first View Control Block for a CIF as specified
         in Attributes.



         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         GENERATE ̲CIFCB (       )
                        (CIFCB:       CIF ̲CONTROL ̲BLOCK,
                         CC:          COMPLETION ̲CODE) : ERROR
                                      ̲OK



4.2.2.7.13 C̲h̲e̲c̲k̲ ̲P̲a̲s̲s̲i̲v̲a̲t̲i̲o̲n̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Checks, if specified CIF shall be made passive, and
         passivates it if appropriate.  The CIF must have been
         opened with OCD reservation.  The Lock Descriptor is
         specified at call.  CIF is closed.

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         CHECK ̲PASSIVATION(CIFCB:     CIF ̲CONTROL ̲BLOCK,
                           LOCK:      LOCK ̲DESCRIPTOR)



4.2.2.7.14 D̲e̲l̲e̲t̲e̲ ̲V̲i̲e̲w̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Deletes a view of a CIF.  All field references are
         removed, and if the View is the last one referencing
         a field, the field is removed from disk.

         Note that a view must not be deleted, if it exists
         in the current checkpoint of the CIF.

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         DELETE ̲VIEW (VCB:            VIEW ̲CONTROL ̲BLOCK)



4.2.2.7.15 E̲x̲t̲e̲n̲d̲ ̲F̲i̲e̲l̲d̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Extends the specified field with specified number of
         sectors.



         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         EXTEND ̲FIELD (CIFCB:         CIF ̲CONTROL ̲BLOCK,
                       FD:            FIELD ̲DESCRIPTOR,
                       COUNT:         INTEGER)
                      (CC:            COMPLETION ̲CODE):  ERROR
                                      ̲OK



4.2.2.7.16 P̲u̲r̲g̲e̲ ̲B̲l̲o̲c̲k̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Assigns a block in STS to be purged.  When the block
         has been purged, it is set free, and can then be reused.

         I̲n̲v̲o̲c̲a̲t̲i̲o̲n̲

         In PBM, the bit corresponding to the block must be
         set, and the Purge Semaphore must be signalled.  There
         must be one semaphore signal for each block to be purged.



4.2.2.7.17   P̲u̲t̲ ̲A̲t̲t̲r̲i̲b̲u̲t̲e̲s̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Sends attributes of specified view to calling application.

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         PUT ̲ATTRIBUTES (VCB:  VIEW ̲CONTROL ̲BLOCK)



4.2.2.7.18 C̲h̲e̲c̲k̲ ̲D̲e̲l̲e̲t̲i̲o̲n̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         Checks wheather the next Remove View command will result
         in removal of the CIF from STS.



         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         CHECK ̲DELETION

         C̲o̲m̲p̲l̲e̲t̲i̲o̲n̲ ̲C̲o̲d̲e̲s̲

         last handle



4.2.2.7.19   M̲a̲k̲e̲ ̲C̲I̲F̲ ̲P̲e̲r̲m̲a̲n̲e̲n̲t̲

         F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         A temporary CIF, specified by view, is made permanent.

         A new CIF Reference Number is generated. Version is
         set to one. For each field group of View Attributes,
         FIELD ̲IN-
         FO.PERMANENT indicates wheather group should be made
         permanent.

         C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         MAKE ̲CIF ̲PERMANENT





4.2.3    C̲I̲F̲ ̲S̲t̲o̲r̲a̲g̲e̲ ̲a̲n̲d̲ ̲R̲e̲t̲r̲i̲e̲v̲a̲l̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲



4.2.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 subpackage manages I̲ntermediate S̲torage and L̲ong
         T̲erm S̲torage and transfers between the three storage
         types. Cf. figure. 2.2.1.1.-2

         The functional break down of the subpackage is shown
         on figure 4.2.3.1-1.

         G̲e̲n̲e̲r̲a̲l̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

         To store a CIF means to retain it in the system in
         a way that allows subsequent retrieval. CIFs which
         can be subject to storage are those having at least
         one permanent field. However, not all those CIFs will
         be stored. Only those for which an application process
         issues a STORE command will be stored. All other CIFs
         will just be deleted from Short Term Storage when they
         are no longer in use.

         A STORE command actually refers to a View of a CIF,
         and only those views for which at least one STORE command
         has been issued will be retained.  Furthermore, only
         permanent fields of those views will be retained.

         Stored CIFs are identified by a CIF ID consisting of
         a 32 bit CIF REFERENCE NUMBER and an 8 bits VERSION
         INDICATOR. The CIF ID is allocated when the CIF is
         created, cf. section 2.2.1.4.1. The CIF REFERENCE NUMBER
         is increased by one each time a new permanent CIF is
         created. Different versions of the same CIF carry same
         reference number but different version indicators.
         

         For each CIF, a sequence of STORE commands may be issued
         by applications.  The STORE commands for a CIF may
         be widely dispersed in time. The Store Time for a CIF
         is the latest time at which a STORE command has been
         issued. It is represented by the 32 most significant
         bits of the KERNEL Real Time Clock. The store Time
         is used to determine when a CIF shall be removed from
         Intermediate Storage, refer 4.2.3.1.1.2.

         The first STORE command must not be issued until the
         CIF has been checkpointed.



         The MMS Storage and Retrieval functions assume that
         STORE commands are issued in a̲l̲m̲o̲s̲t̲ the same sequence
         as that in which the CIFs were created. This assumption
         is not a requirement, but large deviations will decrease
         the efficiency of the algorithms for OCD and ITS management.
         To retrieve a CIF means to make a copy in STS of a
         view of the CIF.  As shown on figure 2.2.1.1-2, a CIF
         may be retrieved from STS, ITS or LTS.

         The retrieved CIF will be temporary, and it is thus
         not recoverable.

         Note that the STORE command will have no effect on
         a CIF, unless the CIF Security profile is contained
         in the STORE Profile, refer 2.2.2.6.3  Such CIFs will
         consequently never be unloaded or dumped.

         The sequence of events for a permanent CIF is as follows,
         cf. figure 4.2.3.1-2.

             1)  The CIF is created in STS by CREATE CIF or
                 CREATE NEW CIF VERSION command. A CIF ID is
                 generated.

             2)  A SAVE command is issued.  This will cause
                 an OCD entry to be created for the CIF.  Until
                 step 4, additional SAVE commands may be issued.

             3)  During processing of the CIF, one or more STORE
                 commands may be issued. 

                 The CIF can be retrieved by a RETRIEVE command
                 from the time the first STORE command has been
                 issued.              
             4)  CIF Handling Subpackage determines when the
                 CIF is no longer referenced. At that time,
                 the CIF shall be u̲n̲l̲o̲a̲d̲e̲d̲ to ITS. 

             5)  The CIF is Dumped to Long Term Storage when
                 it is referenced in a DUMP command. If the
                 processing of the CIF takes unusually long
                 time, for instance because of several edit
                 cycles, step 5 may actually take place before
                 step 4. In that case, the CIF is dumped directly
                 from STS as shown on figure 2.2.1.1-2.

                 In any case, step 4 will always be performed,
                 and step 5 may possibly be repeated a number
                 of times.

             6)  After step 4, the CIF may be removed from ITS
                 by a CLEAR command. This will take place when
                 the time parameter in CLEAR is greater than
                 the Store Time of the CIF.





           Fig. 4.2.3.1-1…01…Functional Break Down









         Fig. 4.2.3.1-2…01…Event Sequence for a CIF


4.2.3.1.1    S̲t̲o̲r̲a̲g̲e̲ ̲M̲a̲n̲a̲g̲e̲m̲e̲n̲t̲



4.2.3.1.1.1 P̲a̲c̲k̲e̲d̲ ̲C̲I̲F̲ ̲R̲e̲p̲r̲e̲s̲e̲n̲t̲a̲t̲i̲o̲n̲

         A CIF in ITS or LTS is packed into a format taking
         up as little space as possible. The packed CIF contains
         the data fields together with copies of the control
         blocks containing attributes and structure information
         for the CIF.

         The packed format is shown in figure 4.2.3.1.1-1 through
         4, and the parts are explained in the following:

         a)  Length.
             The length in sectors of the packed CIF.

         b)  Packed CIF Control Block.
             A copy of the fields ACCESS ̲PROFILE through FIELD
             ̲GROUP ̲TYPES of CIF Control Block.

         c)  Packed View Control Blocks.
             An array containing copies of the view control
             blocks for the CIF. Only those views for which
             at least one STORE command have been issued are
             included.

         d)  Packed Field Descriptors.
             An array containing a Field Descriptor for each
             stored field. The field descriptors are placed
             in sequence of increasing field group id and increasing
             field id within same field group. Only those descriptors
             referenced by View Control Blocks are included.

         e)  Fields.
             The fields of the CIF, stored in same sequence
             as the field descriptors.

         A packed CIF will always start on a sector boundary.



4.2.3.1.1.2 I̲n̲t̲e̲r̲m̲e̲d̲i̲a̲t̲e̲ ̲S̲t̲o̲r̲a̲g̲e̲ ̲O̲r̲g̲a̲n̲i̲z̲a̲t̲i̲o̲n̲

         Intermediate Storage is a contiguous disk area used
         as a cyclical buffer for unloaded CIFs, see figure
         4.2.3.1.1-5.

         When a CIF is unloaded, it is converted to packed format
         and stored in ITS from Unload Pointer and onwards,
         and Unload Pointer is then moved correspondingly. It
         will thus come closer to Clear Pointer.

         After a dump of CIFs to Long Term Storage, a CLEAR
         command may be issued. It will normally cause a number
         of CIFs to be removed from ITS, and will thus normally
         but not necessarily cause the Clear Pointer to move
         upwards thus freeing storage space in ITS. 

         The CLEAR command will cause ITS to be read sequentially
         from Clear Pointer and onwards.  For each packed CIF
         read, the Store Time of the CIF will be compared with
         Clear Time.  If Store Time is smaller or equal, the
         following will be done:

         -   Clear Pointer is updated to point to next CIF in
             ITS.

         -   The OCD entry for the CIF is deleted.

         This process is stopped when Clear Pointer reaches
         Unload Pointer or a CIF is met with Store Time greater
         than Clear Time.

         During unload, an ITS Threshold Warning may be issued.


4.2.3.1.1.3 L̲o̲n̲g̲ ̲T̲e̲r̲m̲ ̲S̲t̲o̲r̲a̲g̲e̲ ̲O̲r̲g̲a̲n̲i̲z̲a̲t̲i̲o̲n̲

         Long Term Storage is organized by a 3 level storage
         hierarchy:

         a)  LTS consists of a number of removable disk volumes.

         b)  Each volume consists of one or more d̲u̲m̲p̲ ̲f̲i̲l̲e̲s̲.

         c)  Each dump file consists of a number of d̲u̲m̲p̲ ̲s̲e̲g̲m̲e̲n̲t̲s̲.

         The concepts are explained below.

         By a Dump is meant the process of moving a specified
         set of CIFs from Online Storage to Long Term Storage.
         The result of a dump is a Dump Segment. It consists
         of a CIF storage area containing the dumped CIFs in
         packed format, and a CIF directory with an entry for
         each dumped CIF. See figure 4.2.3.1.1.3-1. 

         A Dump File is a contiguous file containing sequence
         of Dump Segments. A Dump Segment is identified by Dump
         Segment Id, which is its sequence number within the
         Dump File. A Dump File starts with a Dump File Header
         containing the number of Dump Segments and the location
         of each segment. See figure 4.2.3.1.1.3-2 through 5.

         When a Dump File is created, it is initialized to be
         empty. Each dump to the file will automatically add
         a new Dump Segment. A Dump Segment is created by the
         following sequence of commands from an application
         process:

         1)  I̲n̲i̲t̲ ̲D̲u̲m̲p̲

             Prepares a new Dump segment and returns its Id.
             Reserves the Dump File, thus preventing concurrent
             dumps to the file.

         2)  D̲u̲m̲p̲ ̲C̲I̲F̲ ̲S̲e̲q̲u̲e̲n̲c̲e̲

             Specifies a list of CIF IDs for CIFs to be dumped
             to the segments. The CIFs are moved to the CIF
             Storage Area of the segment while the corresponding
             directory entries are temporarily stored in an
             area at the top of the Dump File. See figure 4.2.3.1.1.3-6.



         3)  T̲e̲r̲m̲i̲n̲a̲t̲e̲ ̲D̲u̲m̲p̲

             Closes the Dump Segment. The CIF directory entries
             are moved to the Dump Segment. Then the Dump File
             header is updated to reflect the existence of the
             new segment. It is not until this time that the
             new segment can be recovered after a system failure.










                     Fig. 4.2.3.1.1-1
                        Packed CIF












             Fig. 4.2.3.1.1-2…01…Packed CIF Tail








            Fig. 4.2.3.1.1-3 Packed CIF Header





         Fig. 4.2.3.1.1-4…01…Packed Field Descriptor







    Fig. 4.2.3.1.1-5…01…Intermediate Storage Organization





             Fig. 4.2.3.1.1.3-1  Dump Segment













               Fig. 4.2.3.1.1.3-2…01…Dump File





           Fig. 4.2.3.1.1.3-3…01…Dump File Header




          Fig. 4.2.3.1.1.3-4…01…Segment Descriptor







     Fig. 4.2.3.1.1.3-5…01…Dump Segment Directory Sector








         Fig. 4.2.3.1.1.3-6…01…Dump Segment Creation


4.2.3.1.1.4 I̲n̲i̲t̲i̲a̲l̲i̲z̲a̲t̲i̲o̲n̲ ̲a̲n̲d̲ ̲R̲e̲c̲o̲v̲e̲r̲y̲

         a)  I̲n̲i̲t̲a̲l̲i̲z̲a̲t̲i̲o̲n̲ ̲o̲f̲ ̲I̲n̲t̲e̲r̲m̲e̲d̲i̲a̲t̲e̲ ̲S̲t̲o̲r̲a̲g̲e̲

             Upon a dead start the disk area used for ITS shall
             be allocated based on system generation parameters.

             Upon a dead or cold start ITS is initialized to
             be empty.

             The ITS Control Variables Unload Pointer and Clear
             Pointer are recovered as follows:

         a1) U̲n̲l̲o̲a̲d̲ ̲P̲o̲i̲n̲t̲e̲r̲

             As part of each Unload, the new Unload Pointer
             is saved in OCD by Checkpoint and Recovery Subpackage
             function OCD Unload Update.  It is restored as
             part of recovery upon a warm start.

         a2) C̲l̲e̲a̲r̲ ̲P̲o̲i̲n̲t̲e̲r̲

             The Clear Pointer is saved in the ITS Control Sector.
              This is done at regular intervals during processing
             of the Clear command, and upon termination of this
             command.  The sector is read upon a warm start.

         b)  I̲n̲i̲t̲i̲a̲l̲i̲z̲a̲t̲i̲o̲n̲ ̲o̲f̲ ̲L̲o̲n̲g̲ ̲T̲e̲r̲m̲ ̲S̲t̲o̲r̲a̲g̲e̲

             LTS volumes and Dump Files on those volumes must
             be initialized by an application process using
             ordinary FMS Commands.

             A Dump File must be created as a contiguous file,
             and the first sector in the file must be overwritten
             with zeroes.  By the first Init Dump command for
             the file, MMS will then initialize the file with
             a Dump File Header, refer 4.2.3.1.1.3.



4.2.3.1.2 D̲i̲r̲e̲c̲t̲o̲r̲y̲ ̲M̲a̲n̲a̲g̲e̲m̲e̲n̲t̲

         A CIF Directory is a table of references to retrievable
         CIFs, organized directly or sequentially with CIF REFERENCE
         NUMBER as key.

         There are two kinds of CIF Directories:



         a)  O̲nline C̲IF D̲irectory.
             Contains references to all permanent CIFs in STS
             and ITS. All CIFs in ITS are referenced via this
             directory.  It is maintained by Checkpoint and
             Recovery Subpackage.

         b)  L̲ong Term Storage C̲IF D̲irectory.
             Each dump segment contains an LCD referencing the
             CIFs in the segment. Cf figure 4.2.3.1.1.3-1.

         L̲o̲n̲g̲ ̲T̲e̲r̲m̲ ̲S̲t̲o̲r̲a̲g̲e̲ ̲C̲I̲F̲ ̲D̲i̲r̲e̲c̲t̲o̲r̲i̲e̲s̲

         Each dump segment contains its own LCD which is completely
         self-contained. The entry format is shown in figure
         4.2.3.1.2.-1.

         The LCD is a simple list of entries.

         During the dump process directory entries for the dumped
         CIFs are created and collected in an area at the top
         of the dump file. During dump termination, the entries
         are moved to the end of the dump segment.

         After termination of a dump, the corresponding LCD
         can never be changed.









  Fig. 4.2.3.1.2-1…01…Long Term Storage CIF Directory Entry


4.2.3.1.3    E̲r̲r̲o̲r̲ ̲H̲a̲n̲d̲l̲i̲n̲g̲

         Parameter Errors and Disk Errors on Offline Volumes
         are returned as completion codes to calling application.

         Internal Errors result in a Retire of the FMS process.
          This is done in the procedure Impossible, refer 4.1.5.1.6.

         Disk Errors on Online Volumes result in a Retire of
         the FMS process. This is done in the procedure Impossible.
         Refer 4.1.5.1.6.



4.2.3.2  S̲o̲f̲t̲w̲a̲r̲e̲ ̲S̲t̲r̲u̲c̲t̲u̲r̲e̲

         The subpackage consists of a set of procedures executed
         by the Command Handling coroutines, refer 4.1.2.



4.2.3.3  D̲a̲t̲a̲ ̲F̲l̲o̲w̲ ̲a̲n̲d̲ ̲C̲o̲n̲t̲r̲o̲l̲ ̲L̲o̲g̲i̲c̲



4.2.3.3.1    C̲I̲F̲ ̲a̲n̲d̲ ̲O̲C̲D̲ ̲R̲e̲s̲e̲r̲v̲a̲t̲i̲o̲n̲

         Most functions of the subpackage reserve CIF and/or
         OCD.  Details are described in section 4.2.3.7.

         The functions CLEAR and DUMP CIF SEQUENCE may require
         a long processing time.  They thus release OCD after
         each processing cycle in order to allow other commands
         accessing OCD to be performed in parallel.



4.2.3.3.2    D̲u̲m̲p̲ ̲C̲o̲n̲t̲r̲o̲l̲

         Two booleans DUMP IN PROGRESS and ERROR IN DUMP are
         used to control the processing of a Dump. DUMP IN PROGRESS
         must be false when INIT DUMP command is issued. It
         is set true by INIT DUMP and must be true when commands
         DUMP CIF SEQUENCE and TERMINATE DUMP are issued. It
         is set false by TERMINATE DUMP.

         ERROR IN DUMP is set true if any error occurs during
         a dump.  Further DUMP CIF SEQUENCE commands are then
         rejected. It is set false by INIT DUMP.







                     Figure 4.2.3.3-1

        Procedures influence on Disk buffer states









                     Figure 4.2.3.3-2

                        Continued



4.2.3.3.3    A̲c̲t̲i̲v̲e̲ ̲a̲n̲d̲ ̲P̲a̲s̲s̲i̲v̲e̲ ̲C̲I̲F̲s̲

         A CIF in STS may be passive at the time it shall be
         Dumped or Retrieved.  In that case the CIF is made
         active, and when the command has been performed, it
         is made passive again.  Refer 2.2.1.7.



4.2.3.4  M̲o̲d̲u̲l̲e̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲s̲



4.2.3.4.1    S̲t̲o̲r̲e̲ ̲M̲o̲d̲u̲l̲e̲



4.2.3.4.1.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         The Store module handles the STORE command.  This command
         has only an effect on the memory resident control information
         for the referenced View and CIF.

         A Store command is only accepted for a permanent CIF,
         and only if the CIF has been checkpointed at least
         once.

         The effect of the Store command is not recoverable
         until the next checkpoint is made for the CIF.

         If the CIF security profile has any compartment higher
         than or equal to corresponding compartment in STORE
         PROFILE, the command is accepted but has no effect.

         The STORE TIME of the CIF is updated by the command.



4.2.3.4.1.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         The module has 1 subpackage interface:

         -   Store, refer 4.2.3.7.1



4.2.3.4.1.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         The module has 2 components: 

         a)  Store

         b)  Get Current Time











                   Figure 4.2.3.4.1.3-1

                    Store Control Flow



4.2.3.4.1.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
         b3) CIF ̲CONTROL ̲BLOCK
                 CHECKPOINT ̲STATUS
                 FIELD ̲GROUP ̲TYPES
                 STORE ̲TIME                  (m)
                 SECURITY ̲PROFILE
                 CIF ̲ID
         b4) VIEW ̲CONTROL ̲BLOCK    
                 STORAGE ̲STATUS              (m)
         b5) NUMBER ̲OF ̲STORE ̲CALLS           (m)

         c)  L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲

             None.



4.2.3.4.1.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̲

         -   Get CIF                      4.1.5.1
         -   Open CIF                     4.1.5.2
         -   Close CIF                    4.1.5.3

         a)  S̲t̲o̲r̲e̲

             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.1.1

             Flowgram:  Refer figure 4.2.3.4.1.5-1

         b)  G̲e̲t̲ ̲C̲u̲r̲r̲e̲n̲t̲ ̲T̲i̲m̲e̲

             N̲a̲r̲r̲a̲t̲i̲v̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲

             The procedure reads and delivers current time in
             seconds.



         PROCEDURE STORE

         INCREMENT(NUMBER ̲OF ̲STORE ̲CALLS)

         CASE GET ̲CIF( )(CIFCB,VCB,CC):ERROR ̲OK

            ERROR?

         END CASE

         CASE OPEN ̲CIF(CIFCB,FALSE)(LOCK,CC):ERROR
         ̲OK
              ERROR ?

         END CASE

         CIFCB.CHECKPOINT ̲STATUS EQ FALSE OR ? CC =
         STORE ̲NOT ̲ALLOWED

         CIFCB.FIELD ̲GROUP ̲TYPES EQ 0

         CIFCB.SECURITY ̲PROFILE NOT

              CONTAINED IN STORE PROFILE ?

         VCB.STORAGE ̲STATUS = TRUE

         GET ̲CURRENT ̲TIME (TIME)

         CIFCB.STORE ̲TIME = TIME

         Put CIFCB.CIF ̲ID and VCB.VIEW ̲ID into reply


         CC = OK


         CLOSE ̲CIF(LOCK)


         RETURN










        Fig. 4.2.3.4.1.5-1…01…STORE FLOWGRAM


4.2.3.4.2    U̲n̲l̲o̲a̲d̲ ̲M̲o̲d̲u̲l̲e̲



4.2.3.4.2.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

         The module performs the unload of a CIF from STS to
         ITS, and contains service functions for the Dump module
         to pack a CIF which shall be dumped.

         In connection with ITS storage allocation, it controls
         the ITS Threshold Warning.



4.2.3.4.2.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲

         The module has one subpackage interface:

         a)  Unload, refer 4.2.3.7.7

         and one additional interface:

         b)  P̲a̲c̲k̲ ̲C̲I̲F̲

             C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲

             PACK ̲CIF (CIFCB:        CIF ̲CONTROL ̲BLOCK,
                       START,
                       MAXLENGTH:    SECTOR ̲NUMBER)
                      (CIFLENGTH:    SECTOR ̲NUMBER,
                       CC:           COMPLETION ̲CODE): ERROR
                 ̲OK



4.2.3.4.2.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲

         The components are procedures.

         a)  Unload.  

         b)  Pack CIF.

             An active CIF in STS is converted to packed format
             and written at specified sector location in ITS
             or a Dump File on an offline volume.  It is checked,
             that the length of the packed CIF does not exceed
             the specified max. length.



         c)  Write Packed Header.  

         d)  Pack Fields.  

         e)  Check Free ITS. 

         f)  Determine Packed CIF Length.  

         g)  Decrease Free ITS.  

         h)  Next dest disk buf

         i)  Move field buf to cache