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

⟦559e5fc1b⟧ TextFile

    Length: 10752 (0x2a00)
    Types: TextFile
    Names: »ttestbuf«

Derivation

└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦e3baaaa97⟧ »tslprog« 
            └─⟦this⟧ 

TextFile

(testbuf=set 2
 testbuf=slang fpnames type.yes
availbuf=assign testbuf
availbuf=changeentry bs testbuf testbuf testbuf testbuf 2.6 testbuf
global testbuf
 end)
; HCØ 8.08.73
; Heinrich Bjerregaard.


s. a6,b24,i24,c8,e12    ; begin slang segment
w.
k=h55                  m.testbuf
      0,0               ;standard for fp-programs
      jl.     e0.       ;   entry sender buf
      jl.     e2.       ;   entry

b0:   0                 ;   last parameter
b1:   0                 ;   fp-base
b2:   0                 ;   sender/receiver address
b3:   0                 ;   counter for available buf
b4:   0                 ;   sender/receiver
b5:   0                 ;
b6:   0,0               ;   sender, receiver
b7:   0                 ;   sender/receiver addr
b8:   <:<0><0>r:>
b9:   <:<0><0>s:>

b10:  <:<10>available buf: <0>:>
b11:  <:  existing sender pending<10><0>:>
b12:  <:  existing sender received<10><0>:>
b13:  <:  removed sender pending<10><0>:>
b14:  <:  removed sender received<10><0>:>
b15:  <:  normal answer pending<10><0>:>
b16:  <:  message rejected<10><0>:>
b17:  <:  message unintelligible<10><0>:>
b18:  <:  receiver malfunction<10><0>:>
b19:  <:  receiver unknown<10><0>:>
b20:  <:param:>
b21:  <:<10>***testbuf <0>:>
b22:  <: name unknown<0>:>


; procedure Next_parameter
; registers  at entry      at return
; w0         not used      unchanged
; w1         -             separator
; w2          -            address of name/constant
; w3         link          length of item

b. g5                   ; begin
w.
g0:   0                 ;
c6:   rs. w3  g0.       ;    save link
      rl. w2  b0.       ;   
      ba  w2  x2+1      ;    item pointer:=item pointer
      rs. w2  b0.       ;                  + core(item pointer + 1);
      bl  w1  x2        ;    w1:=separator;
      bl  w3  x2+1      ;    w3:=length of item;
      al  w2  x2+2      ;
      jl.    (g0.)      ;    return;
e.                      ; end Next_parameter;

; procedure endprogram(ok);
; The procedure returns to the file processor with
; the ok-bit set to succes or not succes.
      am      1         ;
c8:   al  w0  0         ;
      al  w2  10        ;   
      jl. w3  h33.-2    ;   outend(10);
      rl  w2  0         ;
      jl.     h7.       ;   goto fileprocessor;

e0:   rs. w3  b0.       ;   save param_pointer
      rs. w1  b1.       ;   save fp-base
      jl. w3  c6.       ;   Nextparameter;
      sh  w1  2         ;   if no parameter then
      jl.     e2.       ;   goto Avail buf;
i5:                     ; Continue:
      jl. w3  c0.       ;   i:=procaddr(name);
      se  w3  0         ;   if name unknown then
      jl.     i0.       ;   begin
      al. w0  b21.      ;
      jl. w3  h31.-2    ;  
      al  w0  2         ;
      wa. w0  b0.       ;
      jl. w3  h31.      ;    write(out,<:<10>***testbuf :>,
      al. w0  b22.      ;          name,<: name unknown:>);
      jl. w3  h31.      ;
      jl.     c8.-2     ;    endprogram(not succes);
                        ;   end;

i0:   rs. w3  b2.       ;   save sender addr
      ac  w3  x3        ;
      rs. w3  b7.       ;   save neg sender/receiver
      jl. w3  c6.       ;   Nextparameter;
      sn  w1  8         ;
      se  w3  10        ;   if not a text then
      jl.     i2.       ;   goto Illegal param;

      al  w3  0         ;
      rl  w0  x2        ;
      ls  w0 -16        ;
      se. w0 (b8.)      ;   if name=sender then
      jl.     i1.       ;   goto S;
      al  w3  2         ;
      jl.     i3.       ;

i1:   sn. w0 (b9.)      ; S:
      jl.     i3.       ;

i2:   al. w0  b21.      ; Illegal param:
      jl. w3  h31.-2    ;
      al. w0  b20.      ;
      jl. w3  h31.      ;
      jl.     c8.-2     ;   endprogram(not succes);

i3:   rs. w3  b4.       ;
      rl  w1  86        ;   w1:=message pool start;
      jl.     6         ;

i4:   rl. w1  b5.       ;
      wa  w1  90        ;
      rs. w1  b5.       ;
      am     (88)       ;
      sl  w1  2         ;   if last buffer then
      jl.     i20.      ;   goto Stop;

i6:   dl  w3  x1+6      ;
      se  w3  0         ;   if buffer not available then
      jl.     i10.      ;   goto Used;

      rl. w2  b3.       ; Avail:
      al  w2  x2+1      ;   buffer avail:=
      rs. w2  b3.       ;        buffer avail + 1;
      jl.     i4.       ;   goto Loop;

i10:  rx  w2  6         ;
      ds. w3  b6.+2     ;   save sender, receiver
      am.    (b4.)      ;
      rl. w0  b6.       ;
      sn. w0 (b7.)      ;
      jl.     6         ;   if receiver<>message.receiver 
      se. w0 (b2.)      ;      and sender<>message.sender then
      jl.     i4.       ;   goto Loop;
      al  w0  x1        ;
      am.    (b1.)      ;   
      jl  w3  h32-2     ;   write(out,<<dddddddd>,buffer addr);
      32<12+8           ;
      al  w0  2         ;
      jl. w3  c4.       ;   outspace(2);
      sl  w2  0         ;   if sender>0 then
      jl.     i14.      ;   goto Pos sender;

      ac  w2  x2        ; Neg sender:
      jl. w3  c2.       ;   outname(sender addr);
      rl. w1  b6.+2     ;
      al  w2  x1        ;
      sh  w2  0         ;   if receiver<0 then
      ac  w2  x2        ;   receiver:=-receiver;
      jl. w3  c2.       ;   outname(receiver addr);
      al. w0  b13.      ;
      sh  w1  0         ;   write(out, state);
      al. w0  b14.      ;
      am.    (b1.)      ;
      jl  w3  h31-2     ;
      jl.     i4.       ;   goto Loop;

i14:  jl. w3  c2.       ; Pos sender:
      rl. w0  b6.+2     ;   outname(sender addr);
      rl  w2  0         ;
      sh  w0  5         ;   if receiver<1 or
      sh  w0  0         ;      receiver>5 then
      jl.     i16.      ;   goto Exist;

      am.    (b1.)      ; Answer:
      jl  w3  h32-2     ;   write(out,<<dddddddddddd>,result);
      32<12+12          ;
      ls  w2  1         ;
      jl.     x2        ;
      am      b15-b16   ;
      am      b16-b17   ;
      am      b17-b18   ;
      am      b18-b19   ;
      al. w0  b19.      ;   write(out,case result of
      am.    (b1.)      ;         (-b15-,-b16-,-b17-,-b18-,-b19-));
      jl  w3  h31-2     ;
      jl.     i4.       ;   goto Loop;

i16:  sh  w0  0         ; Exist:
      ac  w2  x2        ;
      jl. w3  c2.       ;   outname(receiver addr);
      sh  w0  0         ;
      am      b12-b11   ;
      al. w0  b11.      ;
      am.    (b1.)      ;
      jl  w3  h31-2     ;   write(out, state);
      jl.     i4.       ;   goto Loop;

i20:  jl. w3  c6.       ; Stop:   Nextparameter;
      sl  w1  3         ;   if more parameters then
      jl.     i5.       ;   goto Continue;
      jl.     c8.       ;   goto FINIS;

e2:                     ; Avail buf:
      rl  w2  86        ;   w2:=start message pool;
      al  w1  0         ;   avail buf:=0;
i22:  am     (88)       ;
      sl  w2  2         ;   if last buffer then
      jl.     i24.      ;   return;
      dl  w0  x2+6      ;
      wa  w2  90        ;
      se  w0  0         ;
      jl.     i22.      ;   if sender=0 and receiver=0 then
      se  w3  0         ;   avail buf:=avail buf+1;
      jl.     i22.      ;
      al  w1  x1+1      ;
      jl.     i22.      ;

i24:  al  w2  x1        ;
      al. w0  b10.      ;
      jl. w3  h31.-2    ;
      al  w0  x2        ;
      jl. w3  h32.-2    ;
      32<12+3           ;
      jl.     c8.       ;



; procedure procaddr(name);
; The procedure looks for a process with a name
; name. If it exsist it returns with the according process
; description address.
; registers  at entry  at return
; w0,w1      not used  unchanged
; w2         name addr destroyed
; w3         link      0 or pda
b. d12                  ; begin 
w.
d0:0,0
d1:   0
d2:   0
c0:   ds. w1  d0.+2     ;   save registers
      rs. w3  d1.       ;   save return
      rl  w3  72        ;   w3:=nametable start;
      rs. w3  d2.       ;
d6:   rl. w3  d2.       ; Loop:
      sn  w3 (80)       ;   if name table end then
      jl.     d8.       ;   goto Stop;
      al  w3  x3+2      ;   get next item in name table
      rx. w3  d2.       ;
      rl  w3  x3        ;   get proc addr
      dl  w1  x3+4      ;
      sn  w0 (x2)       ;
      se  w1 (x2+2)     ;   if name <> proc name then
      jl.     d6.       ;   goto Loop;
      dl  w1  x3+8      ;
      sn  w0 (x2+4)     ;
      se  w1 (x2+6)     ;
      jl.     d6.       ;   procaddr:=pda;
      jl.     4         ;   goto END;
d8:   al  w3  0         ; Stop:  procaddr:=0;
      dl. w1  d0.+2     ; END:
      jl.    (d1.)      ;   return
e.                      ; end procaddr;

; procedure outname(addr);
; The procedure prints a name given by addr+2 and
; fill up with spaces so 12 characters are printed
; totally.
; registers  at entry  at return
; w0,w1      not used  unchanged
; w2         addr          -
; w3         link          -
b. d12                  ; begin
w.
d0:   0,r.4             ;   saved registers
d1:   8.177 600         ;   second character in a word
c2:   ds. w1  d0.+2     ;
      ds. w3  d0.+6     ;   save registers
      al  w2  x2+2      ;
      al  w0  x2        ;
      am.    (b1.)      ;
      jl  w3  h31-2     ;   write(out,
      rl  w1  0         ;         false add 32,
      ws  w0  4         ;         12-write(out,
      rl  w3  0         ;                  string name));
      ls  w3 -1         ;
      wa  w3  0         ;
      ac  w0  x3-12     ;
      rl  w2  x1-2      ;
      sn  w2  0         ;
      ba. w0  1         ;
      sz. w2 (d1.)      ;
      jl.     4         ;
      ba. w0  1         ;
      sz  w2  8.177     ;
      jl.     4
      ba. w0  1         ;
      jl. w3  c4.       ;
      dl. w1  d0.+2     ;   restore registers
      dl. w3  d0.+6     ;
      jl      x3        ;   return
e.                      ; end outname;

; procedure outspace(no);
; The procedure outputs no spaces on current
; output.
; registers  at entry    at return
;    w0      no of char  destroyed
;    w1      not used        -
;    w2         -        unchanged
;    w3      link        destroyed
b. d6                   ; begin
w.
d0: 0,0
c4:   ds. w3  d0.+2     ;   save w2, return
      al. w3  2         ;
      rl. w2  d0.       ;
      bs. w0  1         ;
      sh  w0 -1         ;   write(out,false add 32,no);
      jl.    (d0.+2)    ;
      al  w2  32        ;
      am.    (b1.)      ;
      jl  w0  h26-2     ;
e.                      ; end outspace;

e.                      ; end slang segment
e.

▶EOF◀