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

⟦a810cb587⟧ TextFile

    Length: 4608 (0x1200)
    Types: TextFile
    Names: »takestring«

Derivation

└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦545a06c52⟧ »tcodeproc« 
            └─⟦this⟧ 
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦this⟧ »takestring« 
        └─⟦this⟧ »tcodeproc/takestring« 

TextFile

; 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.
▶EOF◀