next up previous contents index
Next: LZHEAD - find Up: Data structure utilities Previous: Data structure utilities

MZFLAG et al. - logical walk through a data-structure

By following the structural links, MZFLAG sets the selected status-bit into the status words of all the banks of the data-structure supported by the down-links of the specified start bank. Optionally it can include into the marking also the banks of the linear structure supported by link 0 of the start bank and all their dependents. The start bank itself may or may not be marked.

The request is

CALL MZFLAG (IXSTOR,!L,IBIT,chOPT)

with

      IXSTOR  index of the store or of any division in this store,
              zero for the primary store

          !L  address of the start bank supporting
              the partial data-structure; no action if L=0.

        IBIT  the bit-number of the status-bit to be set

       chOPT  character string of options:

         default  mark the bank at L (and its down dependents),
                  the 'next' link of this bank is not followed,
                  status-bit ITBIT is set to one

               L  mark the linear structure pointed to by L
                  ie. the 'next' link of the bank at L is followed

               V  mark only the partial data-structure
                  dependent vertically downwards from the bank at L,
                  but not the bank itself

               Z  set to zero bit IBIT in each bank to be marked

MZFLAG will store into the two words of the common /ZLIMIT/ the addresses of the lowest and of the highest bank marked during the scan, ready for use by the table-building routines of FZOUT for example.

MZFLAG is not a routine commonly called directly by the users; its main current use is as a service routine to MZDROP.

Similarly, the routine MZMARK described below is not normally needed by the users except for a special problem mentioned there. MZMARK is also used as a service routine by FZOUT.

The function MZVOLM walks through a data-structure to calculate the space occupied, returning the number of words as the function value.

MZVOLMNWORDS = MZVOLM (IXSTOR,!L,chOPT)

with

      IXSTOR  index of the store or of any division in this store,
              zero for the primary store

          !L  address of the start bank supporting
              the partial data-structure; no action if L=0.

       chOPT  character string of options:

         default  the 'next' link of the bank at L is not followed

               L  the 'next' link of the bank at L is followed

Examples:

      CALL MZFLAG (0,LQMAIN,IQDROP,'L')
this will scan the banks of the data-structure supported by the bank at LQMAIN and its sisters (option L), setting the system bit IQDROP to be 'on' in each bank found. This is equivalent to CALL \Rind{MZDROP (0,LQMAIN,'L')}, except that it does not set the contents of the word LQMAIN to zero.

      PARAMETER  (NID=3)
      DIMENSION  IDLIST(NID)
      DATA       IDLIST  /  4HBGO , 4HTEC  , 4HMUC  /

      CALL MZMARK (0,LQMAIN,'L-',NID,IDLIST)
this will scan the banks of the data-structure supported by the bank at LQMAIN and its sisters (option L), but exclude (option - ) from the scan any lower level linear structure starting with a bank whose IDH is any of BGO, TEC, MUC (and its dependents), setting in each bank found system status bit IQMARK to be 'on'.

The primary purpose of MZMARK is to give the user a possibility to select parts of a data-structure for output with FZOUT. The selection works on IDH, the Hollerith ID, of the first bank of each linear sub-structure of the full data-structure. For convenience, one may give to MZMARK either the list of the IDH's to be included into the scan, or the list of the IDH's to be excluded from the scan; hopefully one gets away with a short list by selecting the right mode.

MZMARK is a modified version of MZFLAG, it is simpler in that the bit-number and the bit value are not parameterized: the bit is IQMARK and the value is 1, as needed by FZOUT; it is more complex in that linear structures can be selected or anti-selected.

The request is

CALL MZMARK (IXSTOR,!L,chOPT,NID,IDLIST)

with

      IXSTOR  index of the store or of any division in this store,
              zero for the primary store

          !L  address of the start bank supporting
              the data-structure; no action if L=0.

       chOPT  character string of options:

         default  mark the bank at L (and its down dependents),
                  the 'next' link of this bank is not followed,
                  lower level linear structures are accepted only
                     if they start with a bank whose IDH appears in
                     the list IDLIST (or if NID=0)

               L  mark the linear structure pointed to by L
                  ie. the 'next' link of the bank at L is followed

               V  mark only the partial data-structure
                  dependent vertically downwards from the bank at L,
                  but not the bank itself

               -  accept a lower level linear structure only if
                  it starts with a bank whose IDH does
                  n o t  appear in IDLIST

      NID       number of elements in the list IDLIST,
                if =zero all banks are accepted ('-' option ignored)

      IDLIST    list of the Hollerith ID for selection

On return |lit(2) contains the total number of words occupied by all the banks marked (unless L is zero on entry).

As for MZFLAG, the addresses of the lowest and the highest bank are stored into /ZLIMIT/, ready for FZOUT.



next up previous contents index
Next: LZHEAD - find Up: Data structure utilities Previous: Data structure utilities


Janne Saarela
Mon May 15 08:34:47 METDST 1995