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

⟦aef835396⟧ TextFile

    Length: 19200 (0x4b00)
    Types: TextFile
    Names: »uti32«

Derivation

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

TextFile



; rc 01.03.73    compress algol library       page 1



s. b20, c20, f20, g20, w. ; start segment...
k = h55

     g0.   ,    0      ; length, not used

     jl.        g1.    ; entry: goto initialize;

; definitions of zones and shares:

b. a5, w. ; a-names used for initialization-chain...

; b0 = inputzone , b1 = input share

h.a0:4     ,    g2.    ; h0+0: base buffer area = g2
     0     ,    0      ;   +2: last of buffer = last of process = h8
     2     ,    b1.    ;   +4: used share =
     2     ,    b1.    ;   +6: first share =
     a1.   ,    b1.    ;   +8: last share = b1

     0     ,  r.18     ; h1+0: process description

     0     ,    0      ; h2+0: give up mask = 0
  a1:4     ,    f0.    ;   +2: give up action = f0
     0     ,    0      ;   +4
     a2.   ,    h22.   ;   +6: free parameter = abs addr of fp inblock

b0:  0     ,  r.6      ; h3+0: record description

b1:  0     ,    0      ; s+0: share state = 0
  a2:a3.   ,    g3.    ;  +2: first shared = g3
     0     ,  r.20     ;  +4

; b2 = output zone , b3 = output share

  a3:4     ,    g2.    ; h0+0: base buffer area = g2
     0     ,    0      ;   +2: last of buffer = last of process = h8
     2     ,    b3.    ;   +4: used share =
     2     ,    b3.    ;   +6: first share =
     a4.   ,    b3.    ;   +8: last share = b2

     0     ,  r.18     ; h1+0: process description

     0     ,    0      ; h2+0: give up mask = 0
  a4:4     ,    f1.    ;   +2: give up action = f1
     0     ,    0      ;   +4
     a5.   ,    h23.   ;   +6: free parameter = abs addr of fp outblock

b2:  0     ,  r.6      ; h3+0: record description

b3:  0     ,    0      ; s+0: share state = 0
  a5:a0.   ,    g3.    ;  +2: first shared = g3
     0     ,  r.20     ;  +4

e. w.     ; end a-names

\f


; rc 06.03.73    compress algol library       page 2



; other variables

b4:  0     ,  r.17     ; lookup area, 
b5:  0                 ; parameter pointer (points at item before
                       ;   current parameter, right byte)
b6:  1<23  +  4        ; constant = <bs>
     0, r.9            ; room for tail in connect;
b7:  4095-32           ; largest byte value - 32;
b8:  0                 ; saved return from c7
b9:  0                 ; fp result



; remove parameter from parameter list

c6:  rl. w3     b5.    ; remove from area list:
     ba  w3  x3        ;
     ba  w3  x3        ;
     ws. w3     b5.    ;
     hs. w3    (b5.)   ;

; find the next legal item (i.e. a name not followed by a
; point) in the parameter list.
; (illegal items are removed from the parameter-chain)

c0:  rl. w3     b5.    ; next param:
     ba  w3  x3        ;   w3 := item head(param);

     bl  w0  x3-1      ;   w0 := preceding separator;
     sh  w0     3      ;   if end param-list then
     jl.        c1.    ;     goto change descriptors;

     bl  w0  x3        ;   if parameter <> <name> then
     se  w0     10     ;     alarm(parameter);
     jl.        f2.    ;

     ba  w3  x3        ;   w3 := item head(following);
     bl  w0  x3-1      ;   w0 := following separator;
     sn  w0     8      ;   if point then
     jl.        f2.    ;     alarm(parameter);

; the parameter must describe a bs-area, with content = 4
; and with an entry interval equal to the catalog base.

     al  w3  x3-9      ;   w3 := addr of parameter name;
     jl. w2     c7.    ;   check param(w2,w3);
     se  w1     0      ;   if result <> ok then
     jl.        f5.    ;     alarm(error on input, w1);

     rl. w0     b2.+h1+16; move segment count in output zone into
     sl. w0    (b7.)   ;   if segment > max possible
     jl.        f11.   ;   then goto alarm(too many);
     rs. w0     b2.+h1+14;   blockcount of output zone 
     rl. w3     b5.    ;     ...and into separator byte of current
     ba  w3  x3        ;     parameter head;
     hs  w0  x3-1      ;

\f


; rc 27.03.73    compress algol library       page 3


     dl  w1  x3+3      ;   move name of area
     ds. w1     b6.+4  ;   to connection tail;
     dl  w1  x3+7      ;
     ds. w1     b6.+8  ;
     al. w3     g3.    ;   input.first shared:=
     rs. w3     b1.+2  ;     first buffer;
     al. w1     b0.    ;   zone:= input;
     al. w2     b6.    ;   descr:= connection tail;
     jl. w3     h27.   ;   connect input (zone, descr);
     se  w0     0      ;   if not ok
     jl.        f6.    ;   then connect alarm;
     bz. w3     b4.+32 ;
     ls  w3     9      ;   last transport:=
     wa. w3     b1.+2  ;   segments*512+first shared;
     al  w3  x3-2      ;
     sl. w3    (b0.+h0+2); if last transport > last buffer
     jl.        f4.    ;   then goto alarm(processes too small);
     rs. w3     b1.+4  ;   input. last shared:=
     rs. w3     b1.+10 ;   input.last transf:=
     rs. w3     b3.+10 ;   output.last transf:= last transport;
     jl  w3 (x1+h2+6)  ;   inblock (zone);
     jl. w3     c2.    ;   ps processes ext list;
     al. w1     b0.    ;
     jl. w3     h79.   ;   terminate inputzone;
     al. w1     b2.    ;   zone:= output;
     jl  w3 (x1+h2+6)  ;   outblock (zone);

;  increase param pointer...
; and goto next param...

     rl. w3     b5.    ;   increase parameter pointer;
     ba  w3  x3        ;
     rs. w3     b5.    ;

     jl.        c0.    ;   goto next param;

\f


; rc 27.03.73    compress algol library       page 4




; at end of parameter list: terminate the output zone and
; change the output entry so that it describes all the output
b. a5 w.               ;   local block;

c1:  al  w3  x3-1      ; change descriptors:
     rs. w3     b5.    ;   save end param address...
     al. w1     b2.    ;
     jl. w3     h79.   ;   terminate outputzone;

     al. w1     b4.    ;   w1 := lookup area;
     al. w3     b2.+h1+2;  w3 := output area name;
     jd         1<11+42;   lookup entry(w1,w3);

     rl. w0     b2.+h1+16; length in tail :=
     rs  w0  x1        ;           segm count;

     jd         1<11+44;   change entry(w1,w3);

a2:  rl. w3     h8.    ;   w3 := start of area chain;
     ba  w3  x3+1      ;

     sn. w3    (b5.)   ;   if start = end param addr then
     jl.        c5.    ;     goto finis program;
     rs. w3      h8.   ;   area chain start:= this area;
     al  w3  x3+2      ;   w3:= name addr;
     jl. w2      c7.   ;   check entry;
     se  w1      0     ;   if not ok
     jl.         f9.   ;   then goto alarm;
     al. w3      b4.+6 ;   w3:= entry.name addr;
     jd         1<11+48;   remove entry;
     al. w1      b4.+14;   w1:= tail addr;
     dl. w0      b2.+h1+4; move name of output
     ds  w0  x1+4      ;   to document name;
     dl. w0      b2.+h1+8; 
     ds  w0  x1+8      ;
     bz. w2     (h8.)  ;
     al  w2  x2+32     ;   content:= startsegm + 32;
     hs  w2  x1+16     ;
     rl. w0      b6.   ;   modekind:= bs;
     rs  w0  x1+0      ;
     al. w3     b4.+6  ;   w3:=address of entry name;
     jd        1<11+40 ;   create entry;
     al  w1    2.111   ;
     la. w1    b4.     ;
     se  w1    0       ;   if key <> 0
     jd        1<11+50 ;   then permanent entry;


     jl.        a2.    ;   goto next entry;

e.   ; end a-names of catalog scan

\f


; rc 76.10.27    compress algol library       page ...5...



; finis program: set result and return to fp...
c5:  rl. w3     h8.    ;   for all parameters left in
     al  w0     4      ;     paramlist do
     hs  w0  x3        ;       preceding separator (param)
     ba  w3  x3+1      ;         := <s>;
     se. w3    (b5.)   ;
     jl.       -6      ;
     rl. w2     b9.    ;   w2 := fp result;
     jl.        h7.    ;   goto fp end program;


; procedure pseudo process external list;
; call: jl. w3  c2.
; return: all registers spoiled.
; the procedure inputs one extra segment
; for each segment occupied by the external list,
; and corrects the output zone accordingly;

b.   a5, d3  w.        ;
c2:  rs. w3  d0.       ; entry: save return
c4:  bz. w3  b4.+31    ; entry, return saved:  k:= rel start ext list;
     al. w2  g3.       ;   j:= first segm start;
     sl  w3      502   ;   if k >= 502
     jl. w3      c3.   ;   then input extra segm;
     am      x2        ;
     rl  w0  x3        ;
     bz  w1      0     ;   ne:= byte(k+j+1);
     bz  w0      1     ;   ng:= byte(k+j);
     ds. w1      d2.   ;
     al  w3  x3+2      ;   k:= k + 2;
     sl  w3      502   ;   if k >= 502
     jl. w3      c3.   ;   then input extra segm;
     am      x2        ;
     rl  w1  x3        ;
     rx. w1      d1.   ;   nb:= word(k+j);
     wm. w1      d3.   ;
     wa. w1      d2.   ;   i:= (ne*6+ng)*2+nb;
     ls  w1      1     ;   comment i + 6 is
     wa. w1      d1.   ;   number of unprocessed
     al  w0  x1        ;   bytes in ext list;
a0:  wa  w0      6     ; rep: i:= i + k;
     sh  w0      502-7 ;   if i + 6 < 502 - 2
     jl.        (d0.)  ;   then return;
                       ;   comment if there is only one word left
                       ;   then it is used as continuation word
     jl. w3      c3.   ;   input extra segm;
     al  w3      x3-502;   i:= i - 502;
     jl.         a0.   ;   goto rep;
d0: b10:         0     ;   saved return
d1:  0 , d2:0          ;   ne, ng
d3:         6          ;   constant 6
e.                     ;   end ps process ext list;

\f


; rc 09.08.73    compress algol library       page 6



; procedure input extra segment;
; the procedure inputs one extra segment after
; the last and sets the zone variables:
; k:= input.first shared:= input.first transfer:= input.last transfer+2;
; input.last shared:= output.last transfer:= input.last transfer:= k + 510;
; call:  w2 : some machine address
;        w3 : return address;
; return w0 : unchanged; w1: spoiled
;        w2 : w2(entry)+512; w3: byte(x2(entry)+503);
b.   d1  w.            ;
c3:  ds. w3      d1.   ; entry: save registers;
     al. w1      b0.   ;
     rl. w2      b1.+10;   set share variables;
     al  w2  x2+2      ;
     al  w3  x2+510    ;
     ds. w3      b1.+4 ;
     ds. w3      b1.+10;
     rs. w3      b3.+10;
     sl  w3 (x1+h0+2)  ;   if k + 510 > last buffer
     jl.         f4.   ;   then alarm (process too small);
     jl  w3 (x1+h2+6)  ;
     rl. w2      d0.   ;   w2:= saved w2;
     bz  w3  x2+503    ;   w3:= byte(x2+503);
     al  w2  x2+512    ;   w2:= w2 + 512;
     jl.        (d1.)  ;   return
d0:     0 , d1: 0      ;   saved w2, return;
e.                     ; end input extra segm;



; procedure check entry.
;  call:  jl. w2  c7.  ; w3 = addr of entry name.
; the procedure checks that the entry is a legal compress-parameter.
; at return w1 is the result of the check:
;   w1 = 0  ==  normal return, entry is ok
;   w1 = 1  ==  entry is unknown
;   w1 = 2  ==  wrong interval
;   w1 = 3  ==  illegal content
;   w1 = 4  ==  not area

b. a5 w.
c7:  al. w1     b4.    ;   w1 := lookup area;
     jd         1<11+76; check single entry:
     se  w0     0      ;   if unknown then
     jl.        a4.    ;     result := 1 else
     am        (66)    ;
     dl  w0    +70     ;   if entry interval is not equal to
     sn  w3 (x1+2)     ;     the catalog base then
     se  w0 (x1+4)     ;     result := 2 else
     jl.        a3.    ;
     bz  w0  x1+30     ;   if content <> 4 then
     se  w0     4      ;     result := 3 else
     jl.        a2.    ;
     rl  w0  x1+14     ;   if size > 0 then
     sl  w0     1      ;     result := 0 else
     am         0-4    ;     result := 4
     am         4-3    ;   ;
a2:  am         3-2    ;
a3:  am         2-1    ;
a4:  al  w1     1      ;
     jl      x2        ;   return;
e.

\f


; rc 06.03.73    compress algol library       page 7


; alarms ..........



; procedure alarm head.
;
; the procedure writes <:***<program name> :> on current out...
;
;  call:  jl. w2  f10. ;

b. a1 w.
f10: al. w0     a0.    ;   w0 := <:***<0>:>;
     jl. w3     h31.-2 ;   outtext;

     rl. w3     h8.    ;
     al  w0  x3+2      ;
     jl. w3     h31.   ;   outtext(program name);

     al. w0     a1.    ;
     jl. w3     h31.   ;   outtext(<: :>);

     al  w0     1      ;   fp result := sorry;
     rs. w0     b9.    ;

     jl      x2        ;   return;

a0:  <:***<0>:>
a1:  <: :>
e.

; alarmtexts.............

b. a11 w.

a0: h. a1  ; result = 0 , connect error
       a2  ;          1 , unknown
       a3  ;          2 , interval
       a4  ;          3 , content
       a5  ;          4 , not area
       a6  ;          5 , intervals
       a7  ;          6 , no collection area
       a8  ;          7 , transport error
       a9  ;          8 , process too small
       a11 ;          9 , too many segments
w.
a1=k-a0 , <: connect error<10><0>:>
a2=k-a0 , <: unknown<10><0>:>
a3=k-a0 , <: interval<10><0>:>
a4=k-a0 , <: content<10><0>:>
a5=k-a0 , <: not area<10><0>:>
a6=k-a0 , <: intervals<10><0>:>
a7=k-a0 , <: no collection area<10><0>:>
a8=k-a0 , <: transport error<10><0>:>
a9=k-a0 , <: process too small<10><0>:>
a11=k-a0, <: too many segments<10><0>:>

a10:    0              ; saved errortext

\f


; rc 06.03.73    compress algol library       page 8



; process too small...
f4:  am         1      ; process too small: result := 8;

; transport error on input...
f0:  al  w2    -2      ;   result:=7
     al. w1     b0.    ;   terminate input zone...
     jl. w3     h79.   ;
     am      x2        ;

; alarms on input parameters...
f11: am         9      ; too many segments: result:=9;

f6:  al  w1     0      ; connect error: result := 0;

f5:  bl. w1  x1+a0.    ; other error, result is in w1...
     al. w0  x1+a0.    ;   w0 := alarmtext
     rs. w0     a10.   ;

     jl. w2     f10.   ;   alarm head...

     rl. w3     b5.    ;
     ba  w3  x3        ;   w0 := parameter address;
     al  w0  x3+1      ;
     jl. w3     h31.   ;   outtext(parameter);

     rl. w0     a10.   ;   w0 := saved alarmtext;
     jl. w3     h31.   ;   outtext.

     jl.        c6.    ;   goto remove item...

; alarms on output parameter...
f1:  am         7      ; transport error: result:=7;

f3:  al  w1     0      ; connect error: result := 0;

f9:  bl. w1  x1+a0.    ; other error: result is in w1...
     al. w0  x1+a0.    ;   w0 := alarmtext;
     rs. w0     a10.   ;

     jl. w2     f10.   ;   alarm head

     al. w0     b2.+h1+2;  w0 := outfile name;
     jl. w3     h31.   ;   outtext;

     rl. w0     a10.   ;   w0 := saved alarmtext;
     jl. w3     h31.   ;

     jl.        c5.    ;   goto finis program;

\f


; rc 01.03.73    compress algol library       page 9




; other alarms...
f7:  am         1      ; no left side: result := 6;

f8:  al  w1     5      ; intervals: result := 5;
     al  w0     0      ;
     rs. w0     b2.+h1+2;  outfilename := 0;
     jl.        f9.    ;   goto other error on output parameter...

e.   ; end a-names for alarms...

; parameter error...

b. a10 w.
f2:  jl. w2     f10.   ;   alarm head...

     al. w0     a0.    ;
     jl. w3     h31.   ;   outtext (<:param :>);

a1:  rl. w2     b5.    ; next: w2 := param pointer;
     ba  w2  x2        ;
     bl  w1  x2        ;   w1 := parameter kind;
     se  w1     10     ;   if <name> then
     jl.        a2.    ;
     al  w0  x2+1      ;     outtext(param name)
     jl. w3     h31.-2 ;
     jl.        a3.    ;   else
a2:  rl  w0  x2+1      ;
     jl. w3     h32.-2 ;     outinteger(param);
             0         ;     ...layout...

a3:  ba  w2  x2        ;
     bl  w1  x2-1      ;   w1 := following separator;
     ws. w2     b5.    ;   remove item from parameterlist...
     hs. w2    (b5.)   ;

     al  w2     46     ;   w2 := point-character;
     al. w3     a1.    ;   set return to next;
     sn  w1     8      ;   if separator is point then
     jl.        h26.-2 ;     outchar(point);

     al  w2     10     ;
     jl. w3     h26.-2 ;   outchar(<10>);

     jl.        c0.    ;   goto next param;

a0:  <:param <0>:>

e.

\f


; rc 01.03.73    compress algol library       page 10


; initialisation of program ....... 

c8:  bz. w2     b4.+32 ; finish init:
     wa. w2     b0.+h1+16; 
     al  w2  x2-1      ;   output.segmentcount :=
     rs. w2     b2.+h1+16;  codesegments + length of extlist - 1;
     jl.        c0.    ;   goto next praram;

; define the copy-buffer:

g2 = k-1  ; base buffer area
g3 = k    ; first shared
     0     ,  r.17     ; secondary lookup area

; initialize outputname

b. a1 w.
g1:  am        -1000   ;
     rs. w3     h8.+1000; initialize: current command := program name...
     al  w0  x3+1     ;   param pointer:=
     rs. w0      b5.  ;   byte before program;
     sn  w2  x3        ;   if no leftside then
     jl.        f7.    ;     alarm (no leftside)
     al  w3  x3-8      ;     w3 := outfile name;
     dl  w1  x3+2      ;     move outfile name to output zone...
     ds. w1     b2.+h1+4;
     ds. w1      b6.+4;     and connection tail;
     dl  w1  x3+6      ;
     ds. w1     b2.+h1+8;
     ds. w1      b6.+8;
     jl. w2     c7.    ;     check entry(w3);
     se  w1     0      ;     if not  ok then
     jl.        f9.    ;       alarm(error on output);

; check catalog base and standard interval...

a0:  rl  w3     66     ;
     dl  w1  x3+70     ;   w0w1 := catalog base;
     al  w1  x1-1      ;
     sl  w0 (x3+76)    ;   if catalog base is outside
     sl  w1 (x3+78)    ;     the standard interval then
     jl.        f8.    ;     alarm(intervals);

\f


; rc 01.03.73    compress algol library       page 11




; initialize abs addresses in zones...

     al. w1     b0.+h0+1;  w1 := chain start;
     bl  w0  x1-1      ;

a1:  wa  w1      0     ; next: w1 := next element;
     bl  w2  x1        ;
     bl  w0  x1-1      ;
     wa  w2     2      ;   w2 := abs address of element;
     rs  w2  x1        ;
     se. w1     b0.+h0+1;  if not chain start then
     jl.        a1.    ;     goto next;
     rl. w3     b5.    ;
     al  w3  x3-3      ;   initialize last of buffer in zones...
     rs. w3     b0.+h0+2;
     rs. w3     b2.+h0+2;

; connect output zone...

     al  w0     0      ;   define area-size;
     al. w1     b2.    ;   w1 := output zone;
     al. w2     b6.   ;   w2 := outfile;
     jl. w3     h28.   ;   connect output;
     se  w0     0      ;   if not ok then
     jl.        f3.    ;     alarm(connect error);
     al. w1     b0.    ;
     jl. w3     h27.   ;   connect input (outfile);
     se  w0     0      ;   if not ok then
     jl.        f9.    ;   alarm (error on output)
     al. w3     c8.    ;   set return addresses to go
     rs. w3     b10.   ;    via pseudo process ext list 
     al. w3     c4.    ;    to finish init and then call
     jl     (x1+h2+6)  ;   inblock;

e.    ; end a-names of initialization.

g0:  0                 ; length of segment, length of next segment...

 i. e.


m. compresslib 27.03.73
e.                      ;  end fp names
▶EOF◀