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

⟦4e3eeb5fb⟧ TextFile

    Length: 6912 (0x1b00)
    Types: TextFile
    Names: »tlookaux«

Derivation

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

TextFile

(lookupaux=set 1
(lookupaux=slang fpnames type.yes insertproc entry.no 
 lookupaux )
if ok.no
end
)



;hcø 19 6 72



;b.                 ;fpnames dummy block

b. g1, e20      w.  ;block with names for tails and insertproc

k=10000

s. g6,j46,f7,b15,i10,d3;start of slang segment for procedures
h.

g0=0                ;g0:=no of externals
e20:

g1:  g2  ,  g2      ;head word: rel of last point, rel of last abs word


j13: g0 + 13 , 0    ;RS entry 13, last used
j30: g0 + 30 , 0    ;RS entry 30, saved stack ref, saved w3
j3:  g0 +  3 , 0    ;RS entry 3, reserve
j4:  g0 +  4 , 0    ;RS entry  4, take expression
j6:  g0 +  6 , 0    ;RS entry  6, end register expression
j12: g0 + 12 , 0    ;RS entry 12, UV
j16: g0 + 16 , 0    ;RS entry 16, segment table base
j29: g0 + 29 , 0    ;RS entry 29, param alarm

g2 = k-2-g1         ;end of abs words:=end of points

w.

e0:  g0             ;start external list
      0
     80 01 28,14 00 00
b0:  rl  w1  0      ; result:=result monitor proc
     jl.    (j6.)   ; end register expression

b1:  rs. w1  b2.    ; save link
     dl  w1  x3+2   ; move name to reserved locations
     ds  w1  x2+2   ;
     dl  w1  x3+6   ;
     ds  w1  x2+6   ;
     jl.    (b2.)   ; return
b2: 0
w.
e1:                 ;entry lookup_aux
     rl. w2 (j13.)  ;w2:=last used
     ds. w3 (j30.)  ;saved stack ref, saved w3
     dl  w1  x2+16  ; take param tail
     ba  w1  0      ; w1:=abs dope
     rl  w3  x1     ; w3:=lower index - 2
     wa  w3 (x2+16) ;
     al  w1  x3+2   ; w3:=addr first elem
     rs  w1  x2+14  ;
     al  w1  -8     ; reserve 8 bytes in stack
     jl. w3 (j3.)   ;
     ds. w2 (j30.)  ; save stack ref, save w3
     dl  w1  x2+12  ;take param docname
     al  w2  x2-8   ;
     so  w0  16     ;if expression then
     jl. w3 (j4.)   ;take expression
     ds. w3 (j30.)  ;save stack ref,save w3
     al  w2  x2+12  ;
     jl. w3  d1.    ;take param name
     al  w2  x2-18  ;
     jl. w1  b1.    ; move docname
     dl  w1  x2+16  ; take param 1 name
     so  w0  16     ; if expression then
     jl. w3 (j4.)   ; take expression
     ds. w3 (j30.)  ; save stack ref, save w3
     al  w2  x2+8   ;
     jl. w3  d1.    ; w3:=takestring
     al  w2  x2-6   ; release reserved locations
     rs. w2 (j13.)  ;
     rl  w1  x2+14  ; w1:=tail
     al  w2  x2-8   ; w2:=doc
     jd  1<11+86    ; lookup auxillary entry
     jl.     b0.    ;end register expression
; takestring
; Anders Lindgård
; 1978-10-27


; procedure take string;
; registers  at entry                 at return
;   w0       not used                 destroyed
;   w1       abs addr of string/elem  destroyed
;   w2       addr of first formal     unchanged
;   w3       link                     addr of start of name

; procedure take string1;
; registers at entry                  at return
;   w0      not used                  destroyed
;   w1      abs address of elem       destroyed
;   w2      last used                 last used+6
;   w3      link                      addr of start of name

b. a8,c6,b24            ; begin
w.
c0: 0, c1: 0            ;   first formal,link
c2:   0,r.5             ;   name
c3:   0                 ;   work
c4:   0                 ;   work
d1:   al  w2  x2+6  ;entry take string1
d0:                 ;entry take string
     ds. w3  c1.    ;save link , save w2
     rl  w0  x2+0   ;w0:=first formal
     al w3  2.11111 ;
     la w3  0       ;w3:=kind+()
     se  w3  10     ;if integer expression
     sn  w3  26     ;or integer then
     jl.     a8.    ;goto proc addr
     se  w3  24     ;if -,string variable or
     sn  w3  8      ;-,string expression
     jl.     a1.    ;begin comment array;
     sh  w3  22     ;if variable or
     sh  w3  15     ;procedure or expression then
     jl. w3 (j29.)  ;param alarm
     ba  w1  0      ;w1:=abs dope addr
     rl w3  x1      ;
     wa w3 (x2+2)   ;w3:=first addr-2
     bz w0 x2+1     ;w0  :=kind
     al w3 x3+0     ;
     sh w0 17       ;if kind = l7 then boolean array
     jl.   (c1.)    ;
     al w3 x3 +1    ;
     sh w0 18       ;if kind = 18 then integer array
     jl.   (c1.)    ;
     al w3 x3+0     ;
     sh w0  20      ;if kind = 20 then real array
     jl.    (c1.)   ;
     al w3 x3+4     ;
     jl.    (c1.)   ;
a8:                 ;proc addr:
     al. w3  c2.    ;w3:=name addr
     rl  w2  x1     ;w2:=name address
     dl  w1  x2+4   ;w1w0:=first part name
     ds  w1  x3+2   ;
     dl  w1  x2+8   ;w1w0:=last part name
     ds  w1  x3+6   ;
     rs  w2  x3+8   ;store name addr as name table entry
     rl. w2  c0.   ;w2:=stack ref
     jl.    (c1.)   ;end;
a1: 
     dl  w1  x1     ;w1w0:=string value
     sh  w0  0      ;if layout then
     jl. w3 (j29.)  ;param alarm
     sh  w1  -1     ;if long string then
     jl.     a3.    ;goto long string
     al. w3  c2.    ;w3:=name addr
     ds  w1  x3+2   ;store string value
     ld  w1 -65     ;w1w0:=0;
     ds  w1  x3+6   ;last part name:=0;
     jl.    (c1.)   ;end get string
a3:                 ;long string:
     ds. w1  c4.    ;store item
     ld  w1 -65     ;w1w0:=0
     ds. w1  c2.+6  ;name(3):=name(4):=0;
     rl. w0  c1.    ;w0:=return addr
     al. w3  a7.    ;w3:=exit addr
     ws  w0  6      ;w0:=rel return adr
     rs. w0 (j12.)  ;save rel return in UV
     dl. w1  c4.    ;w1w0:=item
a4:                 ;find first part:
     bz  w3  0      ;w3:=rel segm no
     ls  w3  1      ;w3:=w3*2
     wa. w3 (j16.)  ;w3:=segment addr
     rl  w3  x3     ;w3:=first addr(segment);
     bz  w0  1      ;w0:=rel
     wa  w3  0      ;w3:=segment+rel
     dl  w1  x3     ;w1:=item (ref out of this segment)
     sh  w1  -1     ;if long string then goto long string
     jl.     a4.    ;goto long string
     ds  w1  x2+2   ;save first part
     al  w3  x3-4   ;x3:=addr next
a5:  dl  w1  x3     ;take next: (ref out of this segment?)
     sh  w1  -1     ;if long string then
     jl.     a6.    ;goto next long
     al. w3  c2.    ;w3:=name addr
     ds  w1  x3+6   ;name 3,4:=second part
     dl  w1  x2+2   ;w1w0:=first part
     ds  w1  x3+2   ;name 1,2:=first part
     rl. w1 (j12.)  ;w1:=rel return addr
a7:  jl.     x1+0   ;return
a6:                 ;long string second item
     bz  w3  0      ;w3:=rel segm no
     ls  w3  1      ;w3:=w3*2
     wa. w3 (j16.)  ;w3:=segment
     rl  w3  x3     ;w3:=first addr(segment);
     bz  w0  1      ;w0:=rel
     wa  w3  0      ;w3:=addr second item
     jl.     a5.    ;goto take second
e.
m.   end code of this segment
h.    0,r.(:10504-k:) w.
<:lookupaux  <0>:>
e.                  ;end slang segment

; lookup_aux
g1:
g0: 1               ;first tail: area with 1 segment
    0,0,0,0         ;fill
    1<23+e1-e20     ;entry point read_dev
    3<18+25<12+41<6+41,0;integer procedure(undef,undef,integer array);
    4<12+e0-e20     ;code proc start of external
    1<12            ;1 code segment
n.
▶EOF◀