|
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 - download
Length: 5376 (0x1500) Types: TextFile Names: »slicestx «
└─⟦110021343⟧ Bits:30007476 RC8000 Backup tape fra HT's bus-radio system └─⟦a957ba283⟧ └─ ⟦this⟧ »slicestx «
message procedure slices side 1. hko,(ar) 790427; integer procedure slices(doc,første_slice,slicenr,chainhead); value første_slice; integer første_slice; integer array doc, slicenr,chainhead; <* proceduren returnerer sliceantal og slicenumre i en kæde i chaintabel hørende til dokumentet angivet i 'doc' og startende med et angivet slicenummer. desuden returneres indholdet af chainhead i særligt format. kald: slices(doc,første_slice,slicenr,chainhead); slices (retur, integer) >=0 ok. antal_slices i kæden. (0: fri slice) -2049 -,ok. illegalt dokumentnavn. -2048 -,ok. illegalt slicenummer. -2048< og <0 -,ok. -antal slices (slicenr for lille). doc (kald,integer array) dokumentnavn i ord 1-4. første_slice (kald,integer) første slice i kæden, skal ligge mellem 0 og sidste slicenr i doc (positivt). slicenr (retur, integer array) antal_slices elementer eller alle elementer indeholder slicenumre i kæden. første element indeholder 'første_slice', hvis der en eller flere slices i kæden. overskydende elementer er nulstillede. chainhead (retur,integer array) indeholder beskrivelse af 'chaintable' og doc., hvis dokumentet eksisterer, ellers er samtlige elementer nulstillet. indhold af element nr: 1 rel. adr. af 'chains' på dette dokument i procesbeskrivelsen for interne processer. ( altid <> 0 hvis dokumentet eksisterer). 2 første 'slice' i hjælpekatalog. 3 'bs-kind'. 0 == drum 1 == disc 4 perm. nøgle ( == 'max-key'). 5-8 navn på hjælpekatalog. 9 størrelse af hjælpekatalog. 10-13 dokumentnavn. 14 første 'slice' i 'chain table area'. 15 slicelængde. 16 sidste 'slice' på dokumentet. 17 tilstand for dokument 1 'idle' 2 'after prepare' 4 'during insert' 8 'ready' 16 'during delete' 64 'during aux' 18 cylinderlængde. 19 1. ord i 'chaintable'. 20 2. ord i 'chaintable'. fejlreaktioner: se ovenfor. kaldte procedurer: ingen. *> \f message procedure slices side 2. hko 790301; begin integer i,j,ngr,øgr,slnr,n,ø; real array ra(1:512); integer array ia,ib(1:20); boolean array field baf; ngr:=system(3,øgr,slicenr); for i:=ngr step 1 until øgr do slicenr(i):=0; baf:=1; slices:=-2049; system(5,92,ib); n:=system(3,ø,chainhead); for i:=n step 1 until ø do chainhead(i):=0; \f message procedure slices side 3. hko 790427; i:=ib(1)-2; for i:=i+2 while i<ib(3) do <* søg chaintable for doc *> begin integer array chadr(1:1); long array field laf,navn; integer docnr; system(5,i,chadr); system(5,chadr(1)-36,ia); docnr:=(i-ib(1)+2)//2; laf:=0; navn:=18; if doc.laf(1)=ia.navn(1) and doc.laf(2)= ia.navn(2) then begin j:=0; for j:=j+1 while j<=(ø-n+1) and j<=20 do begin integer akt; akt:= case j of ( 1,2,3,4,1, 1,1,1,1,1, 1,1,1,5,1, 2,2,6,1,1); case akt of begin <*1*> chainhead(n+j-1):=ia(j); <*2*> chainhead(n+j-1):=ia(j) shift (-12); <*3*> chainhead(n+j-1):=ia(j-1) extract 12 shift (-3); <*4*> chainhead(n+j-1):=ia(j-2) extract 3; <*5*> chainhead(n+j-1):=ia(j+2) extract 12; <*6*> chainhead(n+j-1):=( if docnr<4 then (case docnr of ( 105,<* disc *> 1000,<* disc1 *> 84 <* disc2 *>)) else 1000000); end; end; system(5,chadr(1)<*startadresse chaintable*>,ra); if første_slice<0 or første_slice>ia(16) shift (-12) then slices:=-2048 else begin slnr:=første_slice; i:=0; if ra.baf(slnr) extract 12 <> 2048<* fri slice *> then repeat if ngr+i<=øgr then slicenr(ngr+i):=slnr; i:=i+1; j:=ra.baf(slnr) extract 12; if j>2047 then j:=j-4096; slnr:=slnr+j; until j=0; slices:=if i>øgr-ngr+1 then -i else i; end; i:=ib(3); <* afslut søgning efter chaintable *> end; end; end slices; ▶EOF◀