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

⟦94230d5bd⟧ TextFile

    Length: 11520 (0x2d00)
    Types: TextFile
    Names: »kktit«

Derivation

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

TextFile

kkti=algol
begin
  integer c,g,f,n,top,knp,i,j,k,u,max;
  real r,s;
  g:=3;
  read(in,c,f);
  n:=g**c-1;
  top:=n//12+1;
  knp:=1; r:=1.0;
  for i:=1 step 1 until f do
  begin
    r:=r*(c-i+1)/i;
    knp:=knp+r*2**i;
  end;
  max:=knp;
  begin
    boolean ff,fri,forfra;
    integer array buf(1:256);
    boolean array a(0:top+5);
    integer array ans(1:8),mes(1:8),tail(1:10);
    integer array rk(1:c),rk1(0:c),stak(1:knp+1),stak1(1:knp+20);
    integer array største(1:2),pr(1:f);
    real array name(1:3);
    integer fab,faa,lab,laa,ri,nx,nx1,t,gr,gr1,tæller,nxstop,fejl,w,ww;
    integer m,nxstop1,rest,fas,las,snr;
    integer i3,i2,i1,i0,j3,j2,j1,j0,in0,in1,in2,in3;
    integer array s(0:g-1,0:c-1);
    procedure sendandwait(ioo,af,al,sf);
    integer ioo,af,al,sf;
    begin
      mes(1):=ioo shift 12+0;
      mes(2):=af;
      mes(3):=al;
      mes(4):=sf;
      k:=waitanswer(sendmessage(name,mes),ans);
      if k<>1 then
      begin
        write(out,<:<10>io error :>,k);
        goto E;
      end;
    end;
    procedure testout(nr,nn);
    value nn; integer nr, nn;
    begin
      integer array cf(1:9),tx(1:6);
      integer ij,ji,jk;
      mes(1):=5 shift 12+0;
      mes(2):=firstaddr(tx)-1;
      mes(3):=mes(2)+11;
      ji:=0;
      for ij:=9 step -1 until 1 do
      begin
        cf(ij):=(nn mod 10) + 48;
        nn:=nn//10;
      end;
      for ij:=1 step 1 until 6 do tx(ij):=0;
      tx(1):=(nr+48) shift 16 + 45 shift 8 + 32;
      for ij:=0 step 1 until 8 do
      begin
        if ij<8 and ji=0 and cf(ij+1)=48 then cf(ij+1):=32 else ji:=1; 
        tx(ij//3+2):=tx(ij//3+2) + cf(ij+1) shift ((2-ij mod 3)*8);   
      end;
      tx(5):=32 shift 16 + 10 shift 8 + 0;
      waitanswer(sendmessage(<:terminal3:>,mes),ans);
    end;
    procedure gem;
    begin
      repeat
      i:=reserveproc(name,0);
      until i=0;
      sendandwait(5,fab,lab,0);
      sendandwait(5,faa,laa,1);
      releaseproc(name);
      tail(8):=største(2);
      tail(9):=buf(1);
      changetail(name,tail);
    end;
    procedure skriva;
    begin
      integer ji,jj,ptl;
      ptl:=0;
      for ji:=0 step 1 until top do
      begin
        if ptl mod 6=0 then outchar(out,10);
        ptl:=ptl+1;
        for jj:=0 step 1 until 11 do
        outchar(out,48+(a(ji) shift (-jj) extract 1));
      end;
      outchar(out,10);
    end;
    name(1):=real(<:kktif:> add 105); name(2):=real <:l:>;
    fab:=firstaddr(buf)-1;
    lab:=fab+511;
    faa:=firstaddr(a)-1;
    laa:=faa+((top+5) shift (-9) shift 9)+511;
    fas:=firstaddr(stak1);
    las:=fas+((knp+20) shift (-9) shift 10) +511;
    snr:=(laa-faa) shift (-9) +3;
comment write(out,faa,laa,fab,lab,fas,las,snr) goto E;
    i:=lookuptail(name,tail);
    if i=0 and tail(9)>0  then
    begin
      i:=careaproc(name);
      if i<>0 then 
      begin
        write(out,<:<10>,c a p error:>,i); goto E 
      end;
      sendandwait(3,fab,lab,0);
      sendandwait(3,faa,laa,1);
      sendandwait(3,fas,las,snr);
      forfra:=false;
      nx:=tail(10);      
      nxstop1:=stak1(knp+11);
      største(1):=stak1(knp+12);
      største(2):=stak1(knp+13);
    end else
    begin
      forfra:=true;
      for i:=0 step 1 until top do a(i):=false;
      for i:=1 step 1 until 256 do buf(i):=0;
      for i:=1 step 1 until 10 do tail(i):=0;
      tail(1):=(laa-faa+las-fas) shift (-9)+5;
      tail(2):=1;
      removeentry(name);
      i:=createentry(name,tail);
      j:=careaproc(name);
      k:=reserveproc(name,0);
      if i<>0 then 
      begin
        write(out,<:<10>create error :>,i,j,k); goto E; 
      end;
      sendandwait(5,fab,lab,0);
      sendandwait(5,faa,laa,1);
      releaseproc(name);
    end;
    gr1:=1;
    for i:=0 step 1 until c-1 do s(0,i):=0;
    for i:=0 step 1 until c-1 do s(1,i):=3**i;
    for i:=0 step 1 until c-1 do s(2,i):=s(1,i)*2;
    repeat
      if forfra then
      begin
        nx:=nxstop1:=(round(random(ri)*100000) mod n) -1 ;
        største(1):=største(2):=0;
      end else
      begin
        forfra:=true;
        nx:=nx-1;
      end;
      nxstop:=-1;
      fri:=true;
      repeat
        tæller:=1;
        gr:=0;
        ff:=true;
        repeat
          nx:=nx+1;
          if nx  > n then nx:=0;
        until nx=nxstop1 or a(nx//12) shift (-(nx mod 12)) extract 1 = 0;
        if nx=nxstop1 then fri:=false;
        if fri then
        begin
          nxstop:=nx;
          tail(10):=nx;
          changetail(name,tail);
          gr:=gr+1;
          stak(gr):=nx;
          t:=nx;
          nx1:=0;
          for i:=1 step 1 until c do
          begin
            rk(i):=t mod g;
            t:=t//g;
            rk1(i-1):=s(rk(i),i-1);
            nx1:=nx1+rk1(i-1);
          end;
          rest:=knp;
          tæller:=1;
          for fejl:=4-f+1 step 1 until 4 do
          case fejl of
          begin
            begin
              for i3:=c-1 step -1 until 3 do
              for j3:=g-1 step -1 until 0 do
              if rk1(i3)<>s(j3,i3) then
              begin
                in3:=s(j3,i3)-rk1(i3);
                nx1:=nx1+in3;
                for i2:=i3-1 step -1 until 2 do
                for j2:=g-1 step -1 until 0 do
                if rk1(i2)<>s(j2,i2) then
                begin
                  in2:=s(j2,i2)-rk1(i2);
                  nx1:=nx1+in2;
                  for i1:=i2-1 step -1 until 1 do
                  for j1:=g-1 step -1 until 0 do
                  if rk1(i1)<>s(j1,i1) then
                  begin
                    in1:=s(j1,i1)-rk1(i1);
                    nx1:=nx1+in1;
                    for i0:=i1-1 step -1 until 0 do
                    for j0:=g-1 step -1 until 0 do
                    if rk1(i0)<>s(j0,i0) then
                    begin
                      in0:=s(j0,i0)-rk1(i0);
                      nx1:=nx1+in0;
                      rest:=rest-1;
                      if a(nx1//12) shift(-(nx1 mod 12)) extract 1 = 0 then
                      begin
                        tæller:=tæller+1;
                        gr:=gr+1;
                        stak(gr):=nx1;
                      end else
                      begin
                        if rest+tæller<største(2) then goto EF;
                      end;
                      nx1:=nx1-in0;
                    end;
                    nx1:=nx1-in1;
                  end;
                  nx1:=nx1-in2;
                end;
                nx1:=nx1-in3;
              end;
            end;
            comment *****************************************;
            begin
              for i2:=c-1 step -1 until 2 do
              for j2:=g-1 step -1 until 0 do
              if rk1(i2)<>s(j2,i2) then
              begin
                in2:=s(j2,i2)-rk1(i2);
                nx1:=nx1+in2;
                for i1:=i2-1 step -1 until 1 do
                for j1:=g-1 step -1 until 0 do
                if rk1(i1)<>s(j1,i1) then
                begin
                  in1:=s(j1,i1)-rk1(i1);
                  nx1:=nx1+in1;
                  for i0:=i1-1 step -1 until 0 do
                  for j0:=g-1 step -1 until 0 do
                  if rk1(i0)<>s(j0,i0) then
                  begin
                    in0:=s(j0,i0)-rk1(i0);
                    nx1:=nx1+in0;
                    rest:=rest-1;
                    if a(nx1//12) shift(-(nx1 mod 12)) extract 1 = 0 then
                    begin
                      tæller:=tæller+1;
                      gr:=gr+1;
                      stak(gr):=nx1;
                    end else
                    begin
                      if rest+tæller<største(2) then goto EF;
                    end;
                    nx1:=nx1-in0;
                  end;
                  nx1:=nx1-in1;
                end;
                nx1:=nx1-in2;
              end;
            end;
            comment *******************************************************;
            begin
              for i1:=c-1 step -1 until 1 do
              for j1:=g-1 step -1 until 0 do
              if rk1(i1)<>s(j1,i1) then
              begin
                in1:=s(j1,i1)-rk1(i1);
                nx1:=nx1+in1;
                for i0:=i1-1 step -1 until 0 do
                for j0:=g-1 step -1 until 0 do
                if rk1(i0)<>s(j0,i0) then
                begin
                  in0:=s(j0,i0)-rk1(i0);
                  nx1:=nx1+in0;
                  rest:=rest-1;
                  if a(nx1//12) shift(-(nx1 mod 12)) extract 1 = 0 then
                  begin
                    tæller:=tæller+1;
                    gr:=gr+1;
                    stak(gr):=nx1;
                  end else
                  begin
                    if rest+tæller<største(2) then goto EF;
                  end;
                  nx1:=nx1-in0;
                end;
                nx1:=nx1-in1;
              end;
            end;
            comment ***********************************************************;
            begin
              for i0:=c-1 step -1 until 0 do
              for j0:=g-1 step -1 until 0 do
              if rk1(i0)<>s(j0,i0) then
              begin
                in0:=s(j0,i0)-rk1(i0);
                nx1:=nx1+in0;
                rest:=rest-1;
                if a(nx1//12) shift(-(nx1 mod 12)) extract 1 = 0 then
                begin
                  tæller:=tæller+1;
                  gr:=gr+1;
                  stak(gr):=nx1;
                end else
                begin
                  if rest+tæller<største(2) then goto EF;
                end;
                nx1:=nx1-in0;
              end;
            end;
          end;
EF:       
          if tæller>=max then
          begin
            ff:=false;
            for i:=1 step 1 until gr do
            begin
              j:=stak(i)//12; k:=stak(i) mod 12;
              a(j):=a(j) or (false add (1 shift k));
            end;
            j:=buf(1);
            j:=j+2;
            buf(1):=j;
            buf(j+1):=tæller;
            k:=22;
            buf(j):=0;
            for i:=c step -1 until 1 do
            begin
              outchar(out,48+rk(i));
              buf(j):=buf(j)+(rk(i) shift k);
              k:=k-2;
            end;
            write(out,<< ddd>,tæller,<:*:>); outendcur(10);
            gem;

          end;
          if tæller>største(2) then
          begin
            for i:=1 step 1 until gr do stak1(i):=stak(i);
            stak1(knp+11):=nxstop1;
            stak1(knp+10):=stak1(knp+12):=største(1):=nx;
            stak1(knp+13):=største(2):=tæller;
            reserveproc(name,0);
            sendandwait(5,fas,las,snr);
            releaseproc(name);
            write(out,<< dddddd>,største(1),største(2)); outendcur(10);
          end;
        end fri;
        if -,fri and ff and største(2)>0 then
        begin
          max:=største(2);
          ff:=false;
          for i:=største(2) step -1 until 1 do
          begin
            j:=stak1(i)//12; k:=stak1(i) mod 12;
            a(j):=a(j) or (false add (1 shift k));
          end;
          j:=buf(1);
          j:=j+2;
          buf(1):=j;
          buf(j+1):=største(2);
          k:=22;
          t:=største(1);
          for i:=c step -1 until 1 do
          begin
            outchar(out,48+(t mod g));
            buf(j):=buf(j)+(t mod g) shift k;
            k:=k-2;
            t:=t//g;
          end;
          write(out,<< ddd>,største(2)); outendcur(10);
          gem;
        end;
      until -,fri or -,ff;
    until -,fri and nxstop=-1;
    skriva;
  end;
E:
end;
▶EOF◀