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

⟦690bd0040⟧ TextFile

    Length: 16128 (0x3f00)
    Types: TextFile
    Names: »tlooksave«

Derivation

└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦2cfec6318⟧ »incsys« 
            └─⟦this⟧ 
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ.  Detaljer om "HC8000" projekt.
    └─⟦0364f57e3⟧ 
        └─⟦70d387dbb⟧ »incsys« 
            └─⟦this⟧ 

TextFile

looksave=algol connect.no xref.no blocks.no list.no  

begin
   message vk 1981.09.11 looksave;
  zone dumpcat,mtrecord(128,1,stderror);
  boolean all,maxbase,finis,scopeall,t1test,test,found1,outp,b1,
  basespec,error1,found2,found,scopelogin,scopeuser,scopeproj,
  listed,names;


  integer i,k,restondump,ensize,base1,base2,permkey,fpno,key,
  antal,j,bit,ik,gdate,hashentries,il,pk,number,nrtotal,ntotal,mtrsize,
  bittsize,nooftapen,dumpensize,nr,firstno,antale,antalf,outres,noonhash,
  more,ii,baselower,baseupper,kk,q;
  integer field lbase,ubase,date,pantal,
  total,wordno,bittstart,
  dumpkey,mttapenr,mtdate;
  long  array input,dumpname,mtpool,enname(1:2);
  real array outarr(1:3);
  long array field name,lo;
  integer array interval(1:8),tail(1:10);
\f


  procedure error(errorno);integer errorno;
  begin
    case errorno of
    begin
      <*1*>write(out,<:<10>Savecat does not exist:>);
      <*2*>write(out,<:<10>Mtpool does not exist:>);
      <*3*>write(out,<:<10>Savecat inconsisten:>);
      <*4*>write(out,<:<10>Param error:>);
    end;
    write(out,<:<10>looksave not ok :>,<:<10>:>);
    goto halt;
  end;
\f



  integer procedure readparam(val);long array val;
  begin
    integer ik;
    if q>=0 then 
    begin
      ik:= system(4,q,val);
      ik:= (if ik shift (-12) = 8 then 2 else 0)+
      ik shift(-2) extract 2;
      if q = 0 then
      begin
        long array a(1:2);
        if system(4,1,a)=6 shift 12 + 10 then ik:=-1;
      end;
      q:= if ik = 0 then -1 else q+1;
      readparam:=ik;
    end else readparam:=0;
  end readparam;
\f


  procedure outtape;
  begin
    procedure outshortclock(shortclock);integer shortclock;
    begin
      real r2;
      integer r1;
      r1:=shortclock;
      write(out,<: date  :>,<<zddddd.dddd>,systime(6,r1,r2)+r2/1000000);
    end;
    integer ii,i1;
    write(out,"nl",1);
    write(out,<:on:>,"sp",2);
    write(out,<:  :>);
    i1:=write(out, mtrecord.name);
    write(out,"sp",12-i1);
    if mtrecord.total extract 3 = 1 
    then write(out,<:total :>) else write(out,<:daily :>);
    write(out,<:save tape :>);
    outshortclock(mtrecord.mtdate);
  end;


  procedure  rhashentry;
  begin
    k:=inrec6(dumpcat,0);
    if k = 0 then
    begin
      setposition(dumpcat,0,0);
      inrec6(dumpcat,2);
    end;
    if test then write(out,<:<10> k=:>,k);
    if k = 512 then inrec6(dumpcat,2);
      if k = restondump then
      begin
        inrec6(dumpcat,k);
        k:=inrec6(dumpcat,0);
        if -,names then
        begin
        more:=noonhash+10;
        finis:=true;
        if test then write(out,<:<10>finis= true:>);
        end;
        if k=0 then
          setposition(dumpcat,0,0);
          inrec6(dumpcat,2);
          inrec6(dumpcat,dumpensize);
      end else
      inrec6(dumpcat,dumpensize);
    more:=more+1;
  end;
\f


  procedure openout;
  begin
    long array outname(1:2);
    outp:=true;
    outname(1):=input(1);outname(2):=input(2);
    fpproc(29)stack current out:(0,out,outarr);
    fpproc(28)connect out:(outres,out,outname);
    if outres <> 0 then
    begin
      outp:=false;
      fpproc(30)unstack out:(0,out,outarr);
      write(out,<:<10> connect error=  :>,outres);
    end;
  end;
  procedure closeout;
  begin
    write(out,<:<10>:>);
    if outp then
    begin
      fpproc(34)close up:(0,out,25);
      fpproc(30)unstack out:(0,out,outarr);
    end;
  end;
\f


  procedure readfp;
  begin
     real  array field  rf;
      rf:=0;
    if test then
    begin
      write(out,<:<10>input = :>, input);
      write(out,<:<10>fpno =:>,fpno);
    end;
    if fpno = - 1 then 
    begin
      openout;
      fpno:=readparam(input);
    end;
    if input(1) = long <:all:> then
    begin
      fpno:=readparam(input);
      if fpno = 4 then
      begin
        if input(1) = long <:yes:> then all:= true else 
        if input(1) = long <:no:>  then all:=false else error(4);
        fpno:=readparam(input);
        if fpno <> 0 then
        begin
          if antale = 0 then antalf:=antalf+1;
          names:=true;
          enname(1):=input(1);enname(2):=input(2);
        end;
      end else begin names:=true;
               if antale = 0 then antalf:=antalf+1;
               q:=q-1;
           enname(1):=long <:all:>;enname(2):=long<::>;
           end;
    end;
    if input(1) = long <:scope:>  then
    begin
      fpno:=readparam(input);
      if fpno = 4 then
      begin
        scopeall:=false;
        if test then write(out,<:<10> scope spec:>);
        if input(1) = long <:login:> then scopelogin:=true else
        if input(1) = long <:user:> then scopeuser:=true  else
        if input(1) = long <:proje:> add 99 and
        input(2) = long <:t:> then
        begin
          scopeproj:=true;
        end else 

        if input(1) = long <:own:> then scopeall:=true  else error(4);
        fpno:=readparam(input);
        if fpno <> 0 then 
        begin
          if antale = 0 then antalf:=antalf+1;
          names:=true;
          enname(1):=input(1);enname(2):=input(2);
        end;
      end else begin names:=true;
      q:=q-1;
      enname(1):= long <:scope:>;enname(2):=long<::>;
      if antale = 0 then antalf:=antalf+1;
     end;
    end;
    if input(1) = long <:base:> then
    begin
      fpno:=readparam(input);
      if fpno = 3 then
      begin
        scopeall:=false;basespec:=true;permkey:=3;
        baselower:=input.rf(1);
        readparam(input);
        baseupper:=input.rf(1);
        fpno:=readparam(input);
        if fpno <> 0 then
        begin
          if antale = 0 then antalf:=antalf+1;
          names:=true;
          enname(1):=input(1);enname(2):=input(2);
        end;
      end else begin names:=true;
      q:=q-1;
      if antale = 0 then antalf:=antalf+1;
      enname(1):=long <:base:>;enname(2):=long <::>;
      end;
    end;
    if test then
    begin
      if all then
      write(out,<:<10>all true:>) else write(out,<:<10>all false:>);
      if scopeall then write(out,<:<10>scopeall true:>) 
      else write(out,<:<10>scopeall false:>);
    end;
  end;
\f


  integer procedure hashkey(hname);long array hname;
  begin
    comment
   ******************************************************
            *                                                    *
            * This procedure computes the hashkey used to insert * 
            * the entry in the savecat.                          *
            *                                                    *    
            ******************************************************;
    long sum,part_1_of_name,part_2_of_name;
    part_1_of_name:=  hname(1);
    part_2_of_name:=  hname(2);
    sum:=part_1_of_name+part_2_of_name;
    sum:=sum shift (-24)+sum extract (24);
    sum:=(sum extract 24 + (sum shift (-12) shift 36) ) shift (-36);
    sum:=sum extract 24;
    hashkey:= sum mod hashentries;
  end;
\f


  procedure listtape;
  begin
    listed:=true;
    open(mtrecord,4, mtpool,0);
    if monitor(42)lookup entry:(mtrecord,0,tail) <> 0 then error(2);
    inrec6(mtrecord,2);
    nrtotal:=number:=mtrecord.pantal;
    nooftapen:=0;
    bittsize:=((nrtotal-1)//24)+1;
    begin
      integer array tapenr(0:nrtotal-1,1:2);
      for k:=1 step 1 until 2 do
      begin
        for i:=0 step 1 until nrtotal-1 do tapenr(i,k):=-1;
      end;
      write(out,"nl",2);
      ii:=write(out, dumpcat.name);
      write(out,"sp",12-ii,<: scope.:>);
      i:=0;
      if dumpcat.lbase = interval(3) and dumpcat.ubase = interval(4)
      and dumpcat.dumpkey extract 3 = 2 then i:=write(out,<:login :>);
      if dumpcat.lbase = interval(5) and dumpcat.ubase = interval(6)
      and dumpcat.dumpkey extract 3 = 3 
      and i = 0 then i:=write(out,<:user  :>);
      if dumpcat.lbase = interval(7) and dumpcat.ubase = interval(8)
      and dumpcat.dumpkey extract 3 = 3 
      and i = 0 then i:=write(out,<:project:>)
      else
      if -,(dumpcat.lbase > interval(7)) and
      -,(dumpcat.ubase < interval(8)) and i = 0
      then i:=write(out,<:system :>);
      if i = 0 then write(out,<:***    :>);
      if dumpcat.dumpkey > 3 then write(out,<:  area :>) 
      else write(out,<:  entry :>);
      write(out,<:  key.:>,<<d>,dumpcat.dumpkey extract 3);
      write(out,"sp",3,dumpcat.lbase,"sp",2,dumpcat.ubase);
      found2:=true;
      for i:=0 step 1 until bittsize-1 do
      begin
        wordno:=i*2+bittstart;
        for j:=1 step 1 until 24 do
        begin
          bit:=dumpcat.wordno extract j shift (-j+1);
          if bit = 1 and test then write(out,<:<10>bitno=:>,j-1);
          if bit = 1 then
          begin
            if nooftapen = 0 then firstno:=j-1;
            nooftapen:=nooftapen+1;
            tapenr(j-1+i*24,1):=j-1+i*24;
          end;
        end;
      end;
      if test then write(out,<:<10>antal baand =:>,nooftapen);
      inrec6(mtrecord,mtrsize);
      gdate:=-2;ntotal:=0;nr:=0;
      for i:=0 step 1 until nrtotal-1 do
      begin
        if gdate < mtrecord.date and mtrecord.total extract 1 = 1 then
        begin
          gdate:=mtrecord.date;
          nr:=mtrecord.mttapenr;
        end;
        if mtrecord.total = 17 then
        begin
          gdate:=mtrecord.date;nr:=mtrecord.mttapenr;
          inrec6(mtrecord,mtrsize);
          while mtrecord.total = 1 do
          begin
            inrec6(mtrecord,mtrsize);
            ntotal:=ntotal+1;
          end;
        end else
        begin
          inrec6(mtrecord,mtrsize);
          ntotal:=ntotal+1;
        end;
      end;
      for i:= 0 step 1 until nrtotal-1 do
      begin
        if tapenr(i,1) <> -1 then
        begin
          setposition(mtrecord,0,0);
          inrec6(mtrecord,2);
          for j:=1 step 1 until i+1 do
          inrec6(mtrecord,mtrsize);
          tapenr(i,1):=mtrecord.date;
          tapenr(i,2):=mtrecord.total extract 1;
        end;
      end;
      for ii:= 0 step 1 until 1 do
      begin
        for i:= 0 step 1 until nrtotal-2 do
        begin
          j:=0;ik:=0;
          for kk:=0 step 1 until nrtotal-2 do
          begin
            if tapenr(kk,1) <> -1 and j = 0 and tapenr(kk,2) = ii then
            begin
              j:=kk;ik:=1;
            end;
            if tapenr(kk+1,1) <> -1 and tapenr(kk+1,2) = ii then
            begin
              if tapenr(j,1) < tapenr(kk+1,1) and
              tapenr(kk+1,2) = ii then
              begin
                j:=kk+1;
                ik:=1;
              end;
            end;
          end;
          if ik <> 0 then
          begin
            setposition(mtrecord,0,0);
            inrec6(mtrecord,2);
            for k:= 1 step 1 until j+1 do inrec6(mtrecord,mtrsize);
            outtape;
            if  -, all then i:=nrtotal-1;
            tapenr(j,1):=-1;
          end;
        end;
      end;
    end;
    close(mtrecord,true);
  end;
\f


  procedure findentry;
  begin
    more:=1;
    if test then write(out,<:<10>key = :>,key);
    setposition(dumpcat,0,key);
    inrec6(dumpcat,2);
    noonhash:=dumpcat.pantal;
    if test then
    write(out,<:<10>key=:>,key);
    if test then write(out,<:<10>noonhash = :>,noonhash);
    finis:=false;
    while -, finis  do
    begin
      if test then write(out,<: noonhash = :>,noonhash);
      if noonhash = 0 then
      finis:=true else
      begin
      while noonhash >= more  do
      begin
        rhashentry;
        while dumpcat.pantal=-1 do rhashentry;
        if finis then goto stop;
        if (-,names and more<=noonhash) or dumpcat.name(1) = enname(1) and
        dumpcat.name(2) = enname(2) then
        begin
          if test  then write(out,<:entry found:>);
          if -,scopeall then
          begin
            if scopelogin and dumpcat.lbase = base1 and
               dumpcat.ubase = base2 and dumpcat.dumpkey extract 3 = 2
               then
               begin
               listtape;
               if names then finis:=true;
               end
               else
            if -,scopelogin and
             dumpcat.lbase = base1 and dumpcat.ubase = base2 
             and dumpcat.dumpkey extract 3 = 3 then

            begin
              listtape;
              if names then finis:=true;
            end;
          end;
          if scopeall then
          begin
            if -,(dumpcat.lbase > interval(1)) and
            -,(dumpcat.ubase < interval(2))
            then
            listtape else
            if dumpcat.lbase > interval(1) and dumpcat.ubase < interval(2)
            then listtape;
          end;
        end;
        if more > noonhash  then
        begin
          if -,listed and names then
          begin
            listed:=true;
            write(out,<:<10>*** entry  :>,
             enname,<:  does not exist in savecat:>);
          end;
          finis:=true;
        end;
      end;
     end;
    end;
stop:
  end *** findentry;
  q:=0;
  scopelogin:=false;scopeuser:=false;scopeproj:=false;
  names:=false;
  error1:=false;
  t1test:=false;;test:=false;
  if test then write(out,<:<10> readfp called:>);
  outp:=false;
  all:=false;basespec:=false;
  scopeall:=true;
  mtpool(1):= long <:mtpoo:> add 108;
  mtpool(2):= long <::>;
  dumpname(1):= long <:savec:> add 97;
  dumpname(2):= long <:t:>;
  mtrsize:=16;
  date:=12;
  restondump:=10;
   lo:=0;
  name:=2;
  bittstart:=18;
  mttapenr:=2;
  mtdate:=12;
  lbase:=12;
  ubase:=14;
  dumpkey:=16;
  total:=14;
  pantal:=2;
  antale:=0;antalf:=0;
  system(11)get catalog base:(0,interval);
  fpno:=   readparam(input);
  if fpno = -1 then readfp;
  for fpno:=readparam(input) while fpno <> 0 do
  begin
    enname(1):=input(1);enname(2):=input(2);
    if input(1) = long <:all:> or input(1) = long <:scope:>
    or
    input(1) = long <:base:> 
    then readfp  else 
    begin
     antalf:=antalf+1;
     names:=true;
    end;
  end;
  q:=0;
  fpno:=readparam(input);
  if fpno = - 1 then readparam(input);
   antale:=antale+1;
   fpno:=readparam(input); 
  repeat
  begin
    if input(1) = long <:all:> or input(1) = long <:scope:>
    or input(1) = long <:base:> then readfp  else
     begin
       enname(1):= input(1);enname(2):=input(2);
     end;

    begin
      listed:=false;

      maxbase:=false;
      found1:=false;b1:=false;
      nooftapen:=0;
      firstno:=0;
      if test then
      begin
        write(out,<:<10>key=:>,key);
        write(out,<:navn =:>, enname);
      end;
      open(dumpcat,4, dumpname,0);
      i:=monitor(42)lookup entry:(dumpcat,0,tail);
      if i <> 0 then error(1);
      if tail(9) shift (-12) <> 11 then error(3);
      if tail(10) = 0 then dumpensize:=18 else dumpensize:=tail(10);
      if tail(1) = 0 then hashentries:=217 else hashentries:=tail(1);
      restondump:=510 mod dumpensize;
      if names then
      key:=hashkey(enname);
      if test then write(out,<:<10>key = :>,key);
      if basespec then
      begin
        base1:=baselower;base2:=baseupper;
      end;
      if scopelogin then
      begin
        base1:=interval(3);base2:=interval(4);
      end;
      if scopeuser then
      begin
        base1:=interval(5);base2:=interval(6);
      end;
      if scopeproj then
      begin
        base1:=interval(7);base2:=interval(8);
      end;
      if names then findentry else
      begin
        for key:= 0 step 1 until hashentries-1 do findentry;
      end;
    end;
    close(dumpcat,true);
  antalf:=antalf-1;
  fpno:=readparam(input);
  end
  until antalf = 0 or -,names;
  closeout;
halt:
  fpproc(7)end_of_program:(0,0,0);
end;
▶EOF◀