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

ZSHUNT - change structural relation

Unlike in HYDRA, and because of the reverse pointers, the operation of moving a bank by re-linking from one data-structure to another one is a non-trivial operation. The routine ZSHUNT is provided to execute such an operation.

ZSHUNT may be used to extract either a single bank (IFLAG=0) or a whole linear structure (IFLAG=1) from the old context, for insertion into the new context as described by the parameters LSUP and JB, which have the same significance as in MZLIFT.

CALL ZSHUNT (IXSTOR,!LSH, !LSUP,JB,IFLAG)

with

      IXSTOR  index of the store, zero for the primary store;
              IXDIV, the index of the division containing
              the bank to be shunted, may be given instead

        !LSH  address of the bank or of the linear structure

       !LSUP  if JB < 1:  address of the new supporting bank
              if JB = 1:  the new supporting link*

          JB  if JB < 1:  link bias in the new supporting bank
              if JB = 1:  LSUP is the new supporting link,
                           the origin-link in the bank at LSH
                           will be made to point to it
              if JB = 2:  detach without insertion

       IFLAG  if IFLAG = 0:  shunt the one single bank at LSH
              if IFLAG = 1:  shunt the whole linear structure
                              pointed to by LSH
If the bank or the structure to be re-linked is in fact inserted or added into an existing linear structure, both must be contained in the same division.

Examples:

Suppose we have the following data-structures to start with:

       ______
      |      |                         up
      |  UA  | <---.-------------.-------------.
      |______|     |             |             |
         |         |             |             |
      -3 |         |             |             |
         |       ______        ______        ______
         |      |      |  <-- |      |  <-- |      |
         `----> |  A1  | ---> |  A2  | ---> |  A3  |
                |______|      |______|      |______|

and
       ______
      |      |                              up
      |  UN  | <---.-------------.-------------.
      |______|     |             |             |
         |         |             |             |
      -7 |         |             |             |
         |       ______        ______        ______
         |      |      |  <-- |      |  <-- |      |
         `----> |  N1  | ---> |  N2  | ---> |  N3  |
                |______|      |______|      |______|


and
                    ______        ______        ______
              <--- |      |  <-- |      |  <-- |      |
      LQMAIN  ---> |  X1  | ---> |  X2  | ---> |  X3  |
                   |______|      |______|      |______|
Any bank may support further dependent partial data-structures, the corresponding structural down-links are not changed by ZSHUNT.

In what follows the notation Lxx is used to designate a link pointing to bank xx.

Examples:

         CALL ZSHUNT (0,LA2,LUN,-7,0)     gives:
       ______
      |      |
      |  UA  | <---.-------------.
      |______|     |             |
         |         |             |
      -3 |       ______        ______
         |      |      |  <-- |      |
         `----> |  A1  | ---> |  A3  |
                |______|      |______|
and
       ______
      |      |
      |  UN  | <---.-------------.-------------.-------------.
      |______|     |             |             |             |
         |         |             |             |             |
      -7 |       ______        ______        ______        ______
         |      |      |  <-- |      |  <-- |      |  <-- |      |
         `----> |  A2  | ---> |  N1  | ---> |  N2  | ---> |  N3  |
                |______|      |______|      |______|      |______|

This moves a single bank (with is dependents, if any) out of a linear structure, and inserts it at the head of the linear structure supported by link -7 of the bank UN.

         CALL ZSHUNT (0,LA2,LUN,-7,1)     gives:
       ______
      |      |
      |  UA  |
      |______|
         |
      -3 |       ______
         |      |      |
         `----> |  A1  |
                |______|
and   ______
     |      |
     |  UN  |  <--.-------------.-------------.------------------.
     |______|     |             |             |                  |
        |         |             |             |                  |
     -7 |       ______        ______        ______             ______
        |      |      |  <-- |      |  <-- |      |  <- ... - |      |
        `----> |  A2  | ---> |  A3  | ---> |  N1  | -- ... -> |  N3  |
               |______|      |______|      |______|           |______|
This is the same as example 1, except that the (partial) linear structure starting with bank A2 is re-linked.

         CALL ZSHUNT (0,LA2,LN2,0,0)      gives:
       ______
      |      |
      |  UN  | <---.-------------.-------------.-------------.
      |______|     |             |             |             |
         |         |             |             |             |
      -7 |       ______        ______        ______        ______
         |      |      |  <-- |      |  <-- |      |  <-- |      |
         `----> |  N1  | ---> |  N2  | ---> |  A2  | ---> |  N3  |
                |______|      |______|      |______|      |______|
This is again like example 1, but the bank is inserted inside the linear structure, rather than ahead of it.

          CALL ZSHUNT (0,LA2,LQMAIN,1,0)   gives:

                  0             0             0             0
                  ^             ^             ^             ^
                  |             |             |             |
                 ______        ______        ______        ______
         <----  |      |  <-- |      |  <-- |      |  <-- |      |
  LQMAIN -----> |  A2  | ---> |  X1  | ---> |  X2  | ---> |  X3  |
                |______|      |______|      |______|      |______|

This relinks bank A2 to be the first in the top-level linear structure supported by LQMAIN.

          L = LQMAIN
          CALL ZSHUNT (0,LA2,L,1,0)
has exactly the same effect as Example 4 above because, LQMAIN not being zero initially, the origin-link of the bank pointed to by L (and the up-link, but this is zero) is used for the connection.

         CALL ZSHUNT (0,LA1,LHEAD,1,1)     gives:
       ______
      |      |
      |  UA  |
      |______|
         |
      -3 |
          ----> zero

and               0             0             0
                  ^             ^             ^
                  |             |             |
                 ______        ______        ______
         <----  |      |  <-- |      |  <-- |      |
  LHEAD  -----> |  A1  | ---> |  A2  | ---> |  A3  |
                |______|      |______|      |______|

supposing LHEAD=0 initially; this connects the linear structure to the (structural) link LHEAD, ie. the origin-link of the header bank A1 points back to the location of LHEAD.

         CALL ZSHUNT (0,LA1,LDUMMY,2,1)    gives:
       ______
      |      |
      |  UA  |
      |______|
         |
      -3 |
         `----> zero

and               0             0             0
                  ^             ^             ^
                  |             |             |
                 ______        ______        ______
         0 <--  |      |  <-- |      |  <-- |      |
  LA1    -----> |  A1  | ---> |  A2  | ---> |  A3  |
                |______|      |______|      |______|
This detaches the linear structure from its old context without inserting it into a new one. This should only be temporary, one should insert the floating structure into a new context by a second call to ZSHUNT not too much later.



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


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