This routine measures the free space available in a particular division, either the space available immediately or the space after garbage collection.
CALL MZNEED (IXDIV, NEED, chOPT)
with
IXDIV index of the division NEED number of words needed, trigger garbage collection if G option selected and less than NEED words available chOPT character string of options: G execute garbage collection if less than NEED words available On return /QUEST/IQUEST(100) contains the following information about the division IXDIV: IQUEST(11) NEX, the number of free words beyond NEED, negative if less than NEED words available, ie. the total available is NEED+IQUEST(11); IQUEST(12) the space occupied by the banks, including dead banks if any, of the division; IQUEST(13) the maximum space allowed for this division, as given to MZDIV.
Example:
Suppose IXDIV is a forward division, and the user wants to take all its space into one single maximum size bank, which will be filled by a variable amount of data, but less than NEED words; when the filling is complete the bank will be reduced to its true size:
NEED = 8000 CALL MZNEED (IXDIV, NEED, 'G') IF (IQUEST(11).LT.0) GO TO no luck ND = NEED + IQUEST(11) - 19 (7 links, 12 system words) CALL MZBOOK (IXDIV,L,LSUP,JB, 'name',7,2,ND,2, -1) fill words IQ(L+1) TO IQ(L+NU) CALL MZPUSH (IXDIV,L,0, NU-ND, 'R')