|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 3840 (0xf00) Types: TextFile Names: »theadpm «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »theadpm «
external integer procedure headparamsm(filename, fileno, chains, recdescr, noofkeys, sizem); string filename; integer fileno, noofkeys; integer array chains, recdescr, sizem; comment the procedure performs the reverse function of headm. the only call parameter is filename. the result of the procedure is indicated by its value: headparamsm meaning 0 ok -1 the file is not a cfmaster file >0 the number of last chain is returned. array chains is not declared (1:maxchain*4) it must be mentioned that array chains is initialized only partly as the number of the daugtherfile of a chain cannot be found in the motherfile head. the initialization is sufficient though for a subsequent call of headm. the procedure headparamsi is used as a subroutine. ; begin integer i, maxchain, chainno, cfbufrefrel, chainpartsize, maxreclength, maxbucks, segsperbuck, segsperblock; integer field ifld; integer array field chtab, iaf; zone z(256, 1, stderror); headparamsm:= 0; <* ok *> if system(3, maxchain, chains) <> 1 then maxchain:= 0 else maxchain:= maxchain // 4; for i:= 0 step 1 until maxchain - 1 do begin chains(i*4 + 1):= -1; chains(i*4 + 2):= -2; chains(i*4 + 3):= 0; chains(i*4 + 4):= 0; end; open(z, 4, filename, 0); inrec6(z, 1024); iaf:= 0; if z.iaf(1) > 0 <* ibufrefrel *> and z.iaf(2) > 0 <* cfbufrefrel *> and z.iaf(1) > z.iaf(2) and z.iaf(2) <= 1024 - 1 - 24 <* = b15 *> then begin comment great chance for a master file. find the filenumber and chainpartsize; cfbufrefrel:= z.iaf(2) + 1; ifld:= cfbufrefrel + 24 <* = b25 *>; fileno:= z.ifld shift(-4); if z.ifld extract 4 <> 0 <* type master *> then goto notok; ifld:= cfbufrefrel + 20 <* = b9 *>; chainpartsize:= z.ifld; comment now find the first mother chaintable. the format of a mother table is 4 words of the following contents: -1, -1, chfldrel, chainnumber shift 12 add chainsequencenumber. end of tables is signalled through a word containing the value 0. ; ifld:= cfbufrefrel + 26 <* = b16, first mother chaintable *>; chtab:= cfbufrefrel + z.ifld - 2; if chtab < 4 or chtab > 6 then goto notok; while z.chtab(1) = -1 do begin chainno:= z.chtab(4) shift(-12); if chainno <= maxchain then chains((chainno-1)*4 + 1):= fileno else headparamsm:= chainno; chtab:= chtab + 8; end go through mother tables; if z.chtab(1) <> 0 <* end tables *> then goto notok; headparamsi(z, recdescr, noofkeys, maxreclength, maxbucks, segsperbuck, segsperblock); sizem(1):= maxreclength * 4 - chainpartsize; sizem(2):= maxbucks; sizem(3):= segsperbuck; sizem(4):= segsperblock; end ok master file else begin comment not ok masterfile; notok: headparamsm:= -1; end; close(z, true); end headparamsm; end ▶EOF◀