next up previous contents index
Next: MZIXCO - create Up: Memory management Previous: MZGARB - garbage

MZXREF - set cross-reference between divisions

 

To save time when wiping a given division (or divisions), and also on garbage collection, ZEBRA will relocate the links of only those divisions which reference the division(s) being changed. To know which division may have links pointing to which other division, ZEBRA keeps internally a cross-reference matrix; the entry for a given division is intialized by MZDIV and this may be modified by the user calling MZXREF:

CALL MZXREF (IXFROM,IXTO,chOPT)

with

      IXFROM  index of the division which contains links pointing
              to the divisions indicated by IXTO;
              this must be the index of one particular division.

        IXTO  index of the division(s) which are referenced

       chOPT  character string of options:

            none  set reference(s), ie. overwrite the previous
                  content of the matrix entry
               A  add reference(s), ie. add to the matrix entry,
                  keeping what was there before
               R  remove reference(s), ie. take the references
                  out from the matrix entry, but keep the others
                  (R over-rules A)
               C  contained division, ie. clear the matrix entry
                  (C over-rules A and R)

      IXTO may be any of the three possible forms of a division index:

        a) specific division index, as returned by MZDIV

        b) generic division index, [ IXSTOR + ] n, where

              n = 21:  all user short range divisions
                  22:  all user long  range divisions
                  23:  all package divisions
                  24:  the system division

        c) compound division index as created by MZIXCO.

MZDIV creates a division with its matrix row initialized (unless C option) as follows:

      user division:  references all other user divisions
      package div.:  no references at all

Note: if division FR contains a bank which supports structurally banks in division TO, then the forward links point from division FR to division TO, but there are also the reverse links in the supported banks which point from division TO to division FR. As a result one would need both

          CALL MZXREF (IXFR,IXTO,'A')
     and  CALL MZXREF (IXTO,IXFR,'A')

Examples:

for the primary store one has:

  1) User's division IXTHIS may reference all other user divisions:

         nothing needs to be done, this is the default assumption

  2) Division IXTHIS references only banks in division 2:

                   CALL MZXREF (IXTHIS, 2, '.')

  3) Division IXTHIS references only, but maybe all,
     the short-range divisions:

                   CALL MZXREF (IXTHIS, 21, '.')

  4) Division IXTHIS references all short-range divisions
     and also the long-range division IXLONG:

                   CALL MZXREF (IXTHIS, 21, '.')
                   CALL MZXREF (IXTHIS, IXLONG, 'A')

  5) Division IXTHIS to reference all short-range divisions
     except the division IXSH:

                   CALL MZXREF (IXTHIS, 21, '.')
                   CALL MZXREF (IXTHIS, IXSH, 'R')

To print the matrix entry for one particular division, or the complete cross-reference matrix of a store, one may

CALL MZXRPR (IXDIV)

with

       IXDIV  1) index of the division to be shown
              2) = IXSTOR, index of the store to be shown


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