// GDOC.SR clean docs get "BRAVO.DF"; get "HEAP.DF"; // Incoming Procedures external [ movec; errck; ugt; ult; hpalloca; insertlf; setlf; errhlt; confirm; stcopy; cpadjust; enww; invalidatewindow; hpfree; enpspecs // ** freespec // ** createdocp // ** ]; // Incoming Statics external [ ckproc; vpzone; ckperr; macww; rgdoc; sbpast; dnlf; rgcfn; rgdirty // ** rgsdoc rgpara rgsfile ]; // Outgoing Procedures external [ ckdoc; createdoce; createdocm; docalloc; // ** docunused; deleted; invalidatedoc; ]; // Outgoing Statics external [ rgpctb; rgmaccp; vpc; vcp; ppcd; macdoc; ]; // Local Statics static [ rgpctb; rgmaccp; vpc; vcp; ppcd; macdoc; ]; // C K D O C // catalogue no. = 89 let ckdoc( ) be [ ckproc = "ckdoc"; movec(rgcfn,rgcfn+maxfn-1,0); let hpmax = vpzone >> ZONE.max; let hpmin = vpzone >> ZONE.min; for doc = 0 to maxdoc-1 do [ let tpctb = rgpctb ! doc; if tpctb eq -1 then loop; let macpc = tpctb >> PCTB.macpc; let rgcp = lv (tpctb >> PCTB.rgcp); for i = 1 to (macpc) do [ if ult(rgcp ! i, rgcp ! (i-1)) do [ ckperr = rgcp+i; errck("pc"); ] ] if rgcp ! macpc ne rgmaccp ! doc do [ ckperr = rgcp+macpc; errck("ds"); ] // check piece descriptors let rgpcd = rgcp+(tpctb >> PCTB.maxpc)+1; for i = 0 to (macpc-1) lshift 1 by 2 do [ ckperr = rgpcd+i; let addr = ckperr >> PCD.vpaddr; test ckperr >> PCD.live ifso if ugt(addr,hpmax) % ult(addr,hpmin) do errck("lp"); ifnot [ let fn = addr << VPA.fn; if fn ge maxfn do errck("fne"); rgcfn ! fn = rgcfn ! fn+1; ] ] ] ] // C R E A T E D O C E // catalogue no. = SPE-99 and createdoce(doc,maxpc) be [ rgpctb ! doc = hpalloca(maxpc*3+1+pctbl); rgmaccp ! doc = 0; (rgpctb ! doc) >> PCTB.maxpc = maxpc; (rgpctb ! doc) >> PCTB.macpc = 0; (rgpctb ! doc) >> PCTB.rgcp = 0; createdocp(doc) // ** ] // C R E A T E D O C M // and createdocm(doc) be [ createdoce(doc,1); // ** insertlf(doc,0,lfedoc,doc,4); // **setlf(lfedoc,doc," *201"); // ** rgdirty ! doc = false // ** ] // D O C A L L O C // catalogue no. = 127 and docalloc( ) = valof [ for doc = 0 to maxdoc-1 do if rgpctb ! doc eq -1 then resultis doc; resultis -1; ] // D O C U N S E D // // ** GYPSY USES wipedoc IN GPARA.SR INSTEAD // D E L E T E D // SPE catalogue no. and deleted(doc) be [ cpadjust(doc,0,-(rgmaccp ! doc)); rgmaccp ! doc = 0; let pctb = rgpctb ! doc; pctb >> PCTB.macpc = 0; pctb >> PCTB.rgcp = 0; ] // I N V A L I D A T E D O C // and invalidatedoc(doc) be enww(invalidatewindow,doc);