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
with
IXDIV 1) index of the division to be shown 2) = IXSTOR, index of the store to be shown