DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦c36ca5127⟧ TextFile

    Length: 2304 (0x900)
    Types: TextFile
    Names: »tbuflengthi «

Derivation

└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
    └─⟦75ff9bef3⟧ 
        └─⟦this⟧ »tbuflengthi « 

TextFile



external
integer procedure buflengthi (filename, fullinsert);
  string filename;  boolean fullinsert;
  comment yields the needed buflength for the indexed sequential 
  file which is stored in the backing storage area with the name
  given by filename.
  the test for legal bufrefrel or the last assignment to buflengthi
  may have to be changed if the definitions of f16 or the i-names in
  the file-i-procedures are changed, see below;
begin
zone z(256,1,stderror);  integer array ia(1:10);
integer bufrefrel, doublewords, bytes, i0, i1, i2, i3, i4, i5, i6, i7, i8, i10;
integer procedure word(byteno);
  value byteno; integer byteno;
  comment yields the word in the zone z with the even bytenumber
  byteno+bufrefrel, first word having byte number zero;
  word:= z((bufrefrel+byteno+4)//4) shift
         (if (bufrefrel+byteno) mod 4 = 0 then -24 else 0) extract
         24;
i0:= 0;
i10:= 18;
i1:= i0 +14;
i2:= i1 +20;
i3:= i2 +26;
i4:= i3 +i10;
i5:= i4 +i10;
i6:= i5 +i10 +2;
i7:= i6 +30;
i8:= i7 +30;
buflengthi:=0;  open(z,4,filename,0);  monitor(42,z,0,ia);
  comment ia(1):= numberofsegments in area;
inrec6(z, 1024);
bytes:= bufrefrel:= z(1) shift (-24) extract 24  - 1;
if bufrefrel<38 or bufrefrel>2046 or bufrefrel mod 2 <> 0 then
  goto exit;
if bufrefrel > 512 then
  begin 
  setposition(z,0,bufrefrel//512);
  bufrefrel:= bufrefrel mod 512;  inrec6(z, 1024);
  end;
doublewords:=
  (bytes + i8 + ia(1)//word(i2+2)*word(i3+4) + word(i4) + word(i5) +
  (if fullinsert then word(i5) else 0) + 3) // 4;
buflengthi:= if doublewords < 384 then 384 else doublewords;
exit:  close(z, false);
end buflengthi;

end;
\f

▶EOF◀