|
|
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: 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◀