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

⟦2918fd0c6⟧ TextFile

    Length: 8448 (0x2100)
    Types: TextFile
    Names: »fpatestout«

Derivation

└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
    └─⟦4334b4c0b⟧ 
        └─⟦this⟧ »fpatestout« 

TextFile

(elit=algol
elit)


begin
comment: print fpa testoutput from core.
         eli,  28.05.1976, 16.44,
         jenh, 01.01.1977, 00.00,
         jr,   09.02.1977, 14.00;



procedure fparecout(buf, addr);
integer array buf; integer addr;
begin
  comment: prints the testrecord stored in <buf> starting at index <addr>.
           at return, <addr> points to the first index after the record;

  own boolean notfirst;
  real array texts(0:95);
  integer type, length, last, i, j;
  long time; real day,hms; long field t;

  procedure inittexts(texts);
  real array texts;
  begin
    comment: initializes textinformation corresponding to testrecord-type;

    integer i;
    for i:= 0 step 1 until 95 do texts(i):= real <::>;

    comment: individual texts may be inserted here;

    for i:= 1 step 1 until 39 do
    texts(i):= real (case i of(
    <*  1 *> <:mainproc: send message:>,
    <*  2 *> <:mainproc: master clear received:>,
    <*  3 *> <:mainproc: call receiver:>,
    <*  4 *> <:mainproc: call transmitter:>,
    <*  5 *> <:mainproc: call transmitter (master clear):>,
    <*  6 *> <:mainproc: call receiver (master clear):>,
    <*  7 *> <::>,
    <*  8 *> <:mainproc: start receive:>,
    <*  9 *> <:mainproc: check receive result:>,
    <* 10 *> <::>,
    <* 11 *> <::>,
    <* 12 *> <:mainproc: start transmit:>,
    <* 13 *> <:mainproc: check transmit result:>,
    <* 14 *> <::>,
    <* 15 *> <::>,
    <* 16 *> <:enter subproc:>,
    <* 17 *> <:return from subproc:>,
    <* 18 *> <::>,
    <* 19 *> <::>,
    <* 20 *> <::>,
    <* 21 *> <::>,
    <* 22 *> <::>,
    <* 23 *> <::>,
    <* 24 *> <:rec: start io (io function):>,
    <* 25 *> <:rec: start wait:>,
    <* 26 *> <:rec: start io (channel program):>,
    <* 27 *> <:rec: after receive (channel program):>,
    <* 28 *> <:rec: interrupt:>,
    <* 29 *> <:rec: error:>,
    <* 30 *> <:rec: after receive (header):>,
    <* 31 *> <:rec: return to mainproc:>,
    <* 32 *> <:trm: execute message received:>,
    <* 33 *> <:trm: start transmit receive:>,
    <* 34 *> <:trm: start wait:>,
    <* 35 *> <:trm: after transmit (channel program):>,
    <* 36 *> <:trm: interrupt:>,
    <* 37 *> <:trm: after transmit (various):>,
    <* 38 *> <:trm: after transmit (header):>,
    <* 39 *> <:trm: return to mainproc:>

    ));

  end inittexts;

  if -,notfirst then
  begin
    inittexts(texts);
    notfirst:= true;
  end;

  type:= buf(addr) shift (-12);
  length:= (buf(addr) extract 12) shift (-1);
  if type<>0 then
  begin comment: not dummy record;
    t:= 2*addr+4;
    time:= buf.t mod 10000;
    day := systime(2,buf.t/10000,hms);
    write(out, <:<10>type: :>, <<_dd>, type, <:   :>,
               <:            time: :>,
               <<  dd dd dd>, day, hms, <:.:>, <<dddd>, time,<:<10>:>);
    if texts(type)<>real <::> then
      write(out, <:text:  :>, string texts(type), <:<10>:>);
    last:= addr+length-1;
    for i:= addr+3 step 1 until last do
    outword(buf(i));
  end type<>0;

  addr:= addr+length;
end fparecout;



procedure outword(word);
value word; integer word;

  begin integer i;
  comment: prints <word> as 24-, 12- and 8-bit integers;

  write(out, false add 32, 5,
             <<_-ddddddd>, word, false add 32, 4,
             <<__dddd>,    word shift (-12), word extract 12, 
                           false add 32, 4,
             <<__ddd>,     word shift (-16), word shift (-8) extract 8,
                           word extract 8,<:   :>);
  for i:=-7 step 1 until 0 do
    write( out, <<d>,word shift(3*i) extract 3);
  write(out,<:<10>:>);
end outword;



comment: start of program;

real mainname, recname, trmname, name;
integer i, j, l, pd, dl, inx, oldinx, setmask;
boolean flag4000, coredump;
integer array descr(1:3), oldtestmask(1:4), mess(1:12), workarr(1:1);
real array console(1:2);
zone z(1,1,stderror), zcons(50,1,stderror);
zone dz(256,1,stderror);

coredump:= false;
flag4000:=false;

open(dz, 4, <:dump8000:>, 0);

comment: get name of console;

system(7,i,console);
j:= 1;
open(zcons, 0, string console(increase(j)), 0);

write(zcons, <:<10>select process:
   1: main, transmitter, receiver
   2: main3500, trm3500, rec3500
   3: main3600, trm3600, rec3600
   4: print from 'post mortem' dump: dump8000<10>:>);
setposition(zcons, 0, 0);
read(zcons, i);
if i=4 then
begin comment: post mortem dump;
  setposition(zcons, 0, 0);
  write(zcons, <:proc. descr. address of mainproc: :>);
  setposition(zcons, 0, 0);
  read(zcons, pd);
  coredump:= true;
  mainname:= real <:post mortem:>;
end;
close(zcons, true);

if coredump then
begin
  comment: get buffer pointers;
  integer field tbuffirst, tbuftop, tbufcur, ifi;
  
  tbuffirst:= 27;
  tbuftop:= 25;
  tbufcur:= 23;
  setposition(dz, 0, pd//512);
  inrec6(dz, pd mod 512);
  inrec6(dz, 40);
  descr(1):= dz.tbufcur;
  descr(2):= dz.tbuftop;
  descr(3):= dz.tbuffirst;
  i:= 1;
  for ifi:= 31 step 2 until 37 do
  begin
    oldtestmask(i):= dz.ifi;
   i:= i+1;
 end;
end else
begin
  mainname:= real (case i of (<:main:>, <:main3500:>, <:main3600:>));
  trmname:=  real (case i of (<:transmitter:>, <:trm3500:>, <:trm3600:>));
  recname:=  real (case i of (<:receiver:>, <:rec3500:>, <:rec3600:>));

  setmask:= 12 shift 12;

  if -,flag4000 then
  begin
    comment: print statistics information;
    integer array core(1:30);

    for name:= recname, trmname do
    begin
      write(out, <:<10><10><10>:>, string name, <:___statistics<10>:>);
      open(z, 0, string name, 0);
      pd:= monitor(4,z,0,descr);
      if pd=0 then
      begin
        write(out, <:<10>:>, string name, <:___:>);
        system(9, 0, <:<10>no proc:>);
      end;
      system(5, pd+22, core);
      for i:= 1 step 1 until 27 do
      outword(core(i));
      close(z, true);
    end;
  end block for statistics;

  comment: print testbuffer;

  open(z, 0, string mainname, 0);
  pd:= monitor(4, z, 0, descr);
  if pd=0 then
  begin
    write(out, <:<10>:>, string mainname, <:___:>);
    system(9, 0, <:<10>no proc:>);
  end;

  comment: get old testmask and disable generation of
           testoutput while the testbuffer and -pointers
           are inspected;

  if flag4000 then
    system(5, pd+26, oldtestmask)
  else
    system(5, pd+30, oldtestmask);
  getshare(z, mess, 1);
  mess(4):= setmask;
  mess(5):= mess(6):= mess(7):= mess(8):= 0;
  setshare(z, mess, 1);
  j:= monitor(16, z, 1, mess);
  monitor(18, z, 1, mess);

  system(5, pd+22, descr);
  if flag4000 then
  begin
    system(5, pd+36, workarr);
    descr(3):=workarr(1);
  end;
  if descr(1)=0 then system(9, 0, <:<10>no buffer:>);

end;

write(out, <:<10><10><10>:>, string mainname,
           <:___testbuffer<10><10>:>,
           <:bufferpointers: :>,
           <<_ddddddd>, descr(1), descr(2), descr(3),
           <:<10><10>:>,
           <:testmask: :>,
           <:<10>:>);

for i:= 1 step 1 until 4 do
begin
  write(out, false add 32, 19);
  l:= oldtestmask(i);
  for j:= -23 step 1 until 0 do
    write(out, if l shift j extract 1=1 then <:1:> else <:.:>);
  write(out, <:<10>:>);
end;
write(out, <:<10>:>);

dl:= (descr(2) - descr(3)) shift (-1);
begin
  integer array core(0:dl-1);

  if coredump then
  begin comment: read from bs-area into array 'core';
    integer field ifi;
    ifi:= 2;
    setposition(dz, 0, descr(3)//512);
    inrec6(dz, descr(3) mod 512);
    for i:= 0 step 1 until dl-1 do
    begin
      inrec6(dz, 2);
      core(i):= dz.ifi;
    end;
  end else
 
  begin
    system(5, descr(3), core);

    comment: now testoutput may be enabled again;

    getshare(z, mess, 1);
    mess(4):= setmask;
    for i:= 1, 2, 3, 4 do mess(i+4):= oldtestmask(i);
    setshare(z, mess, 1);
    j:= monitor(16, z, 1, mess);
    monitor(18, z, 1, mess);

  end;

  comment: find first usable entry;

  oldinx:= (descr(1)-descr(3)) shift (-1);
  for inx:= oldinx step 1 until dl-1 do
  begin
    i:= j:= inx;
    l:= 0;
    for j:= j, j+l while (j<dl and l<>0) do
    l:= core(j) extract 12 shift (-1);
    if j=dl then inx:= dl;
  end;

  inx:= if inx=dl then 0 else i;
  for i:= inx while i<dl, 0, inx while i<>oldinx do
  begin
    inx:= i;
    fparecout(core, inx);
  end;
end
end
▶EOF◀