|
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: »theadparami «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »theadparami «
external procedure headparamsi(z, keyfield, nk, maxreclength, maxbucks, segsperbuck, segsperblock); integer nk, maxreclength, maxbucks, segsperbuck, segsperblock; integer array keyfield; zone z; begin comment release 12.02: ib, 15.06.79 release 13.00: eah, 01.02.79 cor: no use of 'repeat' (because of fortran) release 13.02: fb, 1982.08.19 cor: accept key=-3 i.e. long integer descending order ; comment the procedure will read the filehead to z and extract the parameters originally used by headfilei. the parameters are analogous to headfilei, but return values. z must be open and able to hold the head in one block, but not necessarily in an i-zone. the use of variable names is analogous to headfilei, where the generation of codepieces is also described. ; integer type, n, i10, i11, jl, bs, ws, fs, rl, bl, dl, cf, ss, ls, se; integer field ifi, i0, i1, i2, i3, i4, i5, i6, i7, i8; se:= 42; jl:= 13; bs:= 17; ws:= 8; fs:= 49; rl:= 20; bl:= 2; dl:= 54; cf:= 53; ss:= 57; ls:= 38; setposition(z, 0, 0); inrec6(z, 512); i0:= z(1) shift (-24) extract 24 +1; if i0 < 38 or i0 > 2046 or i0 mod 2 <> 0 then system(9, i0, <:<10>head i :>); i1:= i0 +14; i2:= i1 +20; i10:= 18; i11:= 4; i3:= i2 +26; i4:= i3 +i10; i5:= i4 +i10; i6:= i5 +i10 +2; i7:= i6 +30; i8:= i7 +30; if i7 > 512 then begin setposition(z, 0, 0); inrec6(z, i7); end; ifi:= i2 +16; <*maxrecsize*> maxreclength:= z.ifi//4; ifi:= i2 +14; <*bucktablesize*> maxbucks:= z.ifi -(i8 -i7); ifi:= i3 +4; <*descrsize bucks*> maxbucks:= maxbucks//z.ifi; ifi:= i5 +16; segsperbuck:= z.ifi shift (-12); segsperblock:= z.ifi extract 12; ifi:= z.i0 -2; <*addr of compare1*> for n:= 1, n+1 while z.ifi shift (-18) <> jl do begin ifi:= ifi +6; <*sub. instr.*> <*types may be distinguised by the sub. instr.*> type:= z.ifi shift (-18); keyfield(n, 1):= if type = bs then 1 else if type = ws then 2 else if type = ss then 3 else if type = fs then 4 else 0; if keyfield(n, 1) = 0 then system(9, type, <:<10>comp ins:>); if z.ifi shift (-15) <*rel*> extract 1 = 1 then begin <*descending order*> keyfield(n, 1):= -keyfield(n, 1); ifi:= ifi -2; <*addr. in the load instr.*> keyfield(n, 2):= z.ifi extract 12; ifi:= ifi +2; end else <*addr. in the sub. instr.*> keyfield(n, 2):= z.ifi extract 12; <*point at jl or se instr.*> ifi:= ifi + ( if keyfield (n, 1) = 3 or keyfield (n, 1) =-3 then 6 else 2); end; nk:= n-1; ifi:= i0 +10; ifi:= z.ifi +2; <*addr of getsize*> ifi:= ifi +2; if z.ifi shift (-18) = jl then <*fix*> keyfield(n, 1):= keyfield(n, 2):= 0 else begin ifi:= ifi -2; keyfield(n, 2):= z.ifi extract 12; type:= z.ifi shift (-18); if type = bl then keyfield(n, 1):= 1 else if type = rl then keyfield(n, 1):= 2 else if type <> dl then system(9, type, <:<10>gets ins:>) else begin ifi:= ifi +4; type:= z.ifi shift (-18); keyfield(n, 1):= if type = ls then 3 else if type = cf then 4 else 0; end dw; end var; setposition(z, 0, 0); end proc; end ▶EOF◀