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 - download

⟦ccb85eb2f⟧ TextFile

    Length: 6912 (0x1b00)
    Types: TextFile
    Names: »gentabtx    «

Derivation

└─⟦110021343⟧ Bits:30007476 RC8000 Backup tape fra HT's bus-radio system
    └─⟦a957ba283⟧ 
        └─ ⟦this⟧ »gentabtx    « 

TextFile

begin message gentab side 1 - 811211/jg;

<* gentab initialiserer cldp's tabelfil udfra kataloget dbkatt

   kald:  <tabelfil>=gentab <dbkatt>

   tabelfil: binær fil indeholdende tabellerne samt oversat dbkatt.
             hvis filen ikke findes oprettes en temporær fil.
             i tail sættes tail(1)=antal segmenter
                           tail(6)=shortclock for initialisering
                           tail(10)=antal tabeller

   dbkatt: textfil indeholdende katalog på formen

             tabelnr  postantal  postlængde  segmentantal  filnavn

           hvortil kommer kommentarer på formen  ;kommentar<nl>

           tabelnr:skal være fortløbende fra 1025 til max 2047.
           postantal:skal være >=0 og <= segres*(256//postlængde).
           postlængde:angives i antal ord, dvs. >0 og <=256.
           segmentantal:skal være >=0,hvis =0 tages resulterende
             antal segmenter segres fra evt. filnavns tail(1).
           filnavn: navn på fil hvis første segres segmenter kopieres
             ind i tabellen, hvis filen mangler eller hvis filnavn= -
             initialiseres med binære 0'er.
             hvis tabelnr er ledigt skal indgangen have flg. udseende

                tabelnr  0  0  0  -    ; ledig

             dbkatt afsluttes med <em> og læses fra current input.

   current output: rapport over indhold af tabelfil af flg. udseende

             tabelfil  dato

             tabelnr  blok  seg  filnavn  dato
             ...

             antal tabeller = tantal   antal segmenter = santal
         iøvrigt gælder at tantal < 1024 og santal < 2**18-1.
         hvis anført fil mangler skrives *** istedet for dato. 
         det oversatte dbkatt lægges i de første 8 segmenter af
         tabelfil

   de indkopierede procedurer ligger på csupproce.

   ref. cpb udv cldp sd. 12.1
*>

\f

message gentab side 2 - 811211/jg;

  <*erklæringer*>

      boolean fri,fil,mangler,nl,sp,ff;
      integer i,mk,nr,pa,pl,seg,s,blok,tant,shclock,tshclock,side,c;
      integer array tail(1:10),alfa(0:511),dbkatt(1:1024,1:2);
      long array tdato(1:2);
      real array field raf;
      integer array field iaf;
      zone oz,iz(128,1,stderror);
      real array navn(1:2); real r;

      procedure sf(i);
        value i; integer i;
      begin
        write(out,nl,1,case i of
         (<:*** uddatafil mangler:>,
          <:*** fejl i næste indgang:>,
          <:*** fejl i næste indgangs filnavn.seg:>));
        system(9,nr,<:<10>gentab:>);
      end;

  <*initialiser*>
  iaf:= 0;
  if fp_output(mk,navn.iaf)<0 or mk<>4 then sf(1);
  tail(1):= 8; for i:= 2 step 1 until 10 do tail(i):= 0;
  tail(6):= systime(7,0.0,0.0);
  open(oz,4,navn,0);
  if monitor(42,oz,0,tail)<>0 or monitor(52,oz,0,tail)<>0 or
     monitor(8,oz,0,tail)<>0
  then
    monitorcall(40,oz,0,tail,1);
  blok:=8;
  setposition(oz,0,blok);
  tant:= side:= 0;
  raf:= 4;
  tshclock:= systime(7,0.0,r);
  iaf:= 0;
  skriv_short(tdato.iaf,tshclock);
  nl:= false add 10;
  ff:= false add 12;
  sp:= false add 32;
  alfabet(alfa);
  alfa(59):=1 shift 12 +256;
  iaf:= 512;
  for i:= 0 step 1 until 255 do alfa.iaf(i):= 0;
  for i:= 10,12,25 do alfa.iaf(i):= 1 shift 12;
  intable(alfa);
  tableindex:= 0;
\f

message gentab side 3 - 780928/jg;

  for s:= read(in,nr,pa,pl,seg) while s=4 do
    begin

      <*check parametre*>

      tant:= tant +1;
      if nr <> 1024 +tant or tant > 1023 then sf(2);
      fri:= pa = 0 and pl = 0 and seg = 0;
      if fri then goto rapport;
      if pl < 1 or pl > 256 then sf(2);
      if pa < 0 or seg > 0 and pa > 256//pl*seg then sf(2);
      if seg < 0 or seg > 2**18-1 then sf(2);

      <*kildedata fil*>

      if readstring(in,navn,1) < 1 then sf(2);
      fil:= navn(1) <> real<:-:>;
      if fil then
        begin
          i:= 1;
          open(iz,4,navn,0);
          mangler:= monitor_call(42,iz,i,tail,9) = 3;
          if mangler then goto init;
          if seg = 0 then
            begin
              seg:= tail(1);
              if seg > 2**18-1 then sf(3);
            end
          else if seg > tail(1) then sf(3);
          shclock:= tail(6);
          monitor_call(52,iz,i,tail,1);
        end;

      <*init tabel*>

init:
      for i:= 1 step 1 until seg do
        begin
          outrec6(oz,512);
          if fil and -,mangler then
            begin
              inrec6(iz,512);
              tofrom(oz,iz,512);
            end
          else
            begin
              oz(1):= real<::>;
              tofrom(oz.raf,oz,508);
            end;
        end i;
\f

message gentab side 4 - 811211/jg;

      <*rapport*>

    rapport:
      if tant mod 50 = 1 then
        begin side:= side +1;
          write(out,ff,1,nl,2,<:tabelfil  :>,
                  tdato,sp,4,<:side:>,side,nl,3,
            <:tabelnr  blok   seg     filnavn      dato:>,nl,1);
        end;
      write(out,nl,1,<<dddd>,sp,1,nr,sp,4,blok,sp,2,seg,sp,5);
      if fri then outchar(out,42) else
        begin
          outtext(out,13,navn,1);
          if fil then
            begin
              if mangler then write(out,false add 42,11) else
                begin integer array ia(1:4);
                      real array field raf;
                  skriv_short(ia,shclock);
                  raf:= 0;
                  outtext(out,11,ia.raf,1);
                end;
            end;
        end;

      <*dbkatt*>

      blok:=blok+seg;
      dbkatt(tant,1):=pa shift 9 add pl;
      dbkatt(tant,2):=blok;

      <*luk*>

      if fil then close(iz,-,mangler);
      repeatchar(in);
      repeat until readchar(in,c) = 8;
      if c = 25 then repeatchar(in);
  end s;

  <*slut*>

  if s <> 0 then sf(2);
  monitor_call(42,oz,i,tail,1);
   tail(1):= blok;
   tail(6):= tshclock;
   tail(10):= tant;
  monitor_call(44,oz,i,tail,1);

  setposition(oz,0,0);
  dbkatt(tant+1,1):=dbkatt(tant+1,2):=8388607; <*eof*>
  for i:=tant+2 step 1 until 1024 do
    dbkatt(i,1):=dbkatt(i,2):=0;
  for i:=1 step 1 until 8 do
    begin
      outrec6(oz,512);
      iaf:=(i-1)*512+4;
      tofrom(oz,dbkatt.iaf,512);
    end;
  close(oz,true);

  write(out,nl,2,<:antal tabeller =:>,tant,sp,5,
    <:antal segmenter =:>,blok,nl,2);
  trapmode:= 1 shift 10;

end;
▶EOF◀