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

⟦e4ad8938e⟧ TextFile

    Length: 21504 (0x5400)
    Types: TextFile
    Names: »readgeotx«

Derivation

└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ.  Detaljer om "HC8000" projekt.
    └─⟦0364f57e3⟧ 
        └─⟦bf33d74f6⟧ »iogeofile« 
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦bf33d74f6⟧ »iogeofile« 
            └─⟦this⟧ 

TextFile



;       read_geo_tx           * page 1   13 09 77, 10.35;  

(
readgeo     = set 1 
readgeor    = set bs readgeo
readident   = set bs readgeo
readcmt     = set bs readgeo
readstn     = set bs readgeo
readnl      = set bs readgeo
mil         = set bs readgeo

readgeo     = slang entry.no
readgeo readgeor readident readcmt readstn readnl mil
  
scope project read_geo read_geo_r read_ident read_cmt,
read_stn read_nl m_i_l
 
lookup read_geo read_geo_r read_ident read_cmt,
read_stn read_nl m_i_l
 
 
if 11.yes
(message read_geo interim login scope
scope login read_geo)
 
)

b.             ; outermost block

p.<:fpnames:>

m.girc 4000   readgeo  07.02.77,  08.21.46

\f



;       read_geo_tx           * page 2   13 09 77, 10.35;  

; long procedure read_geo( z, typedec );
; ______________________________________
;
; read_geo       (return, long) angle or distance of geotype
;
; z              (call and return, zone) open for char input
; typedec        (return, boolean) type shift 6  add dec
;
; further description of variables and actions on standard
; variables see read_geo_t;  
;

; real procedure read_geo_r( z, typedec );
; ________________________________________
;
; read_geo_r     (return, real) angle in radians
;                               or distance in meters
; z              (call and return, zone) open for char input
; typedec        (return, boolean) type shift 6 add dec
;
; further description of variables and actions on standard
; variables see read_geo_t;  
;

; long procedure read_ident( z, typedec );
; ________________________________________
;
; read_ident    (return, long) the number input, disregarding the
;                              first decimal point.
; z             (call and return, zone) open for char input
; typedec       (return, boolean) a short integer (12 bits) con-
;                                 taining the number of decimals.
;                                 the terminator m switches to
;                                 geotype (type=8) recorded as
;                                 typedec >= 8 shift 6 and mtr=true;  
;

; long procedure read_cmt( z, typedec, scmt );
; ____________________________________________
; read_cmt      (return, long) the value of the datetime or rundate
;                              input. a comma between date and time
;                              is permitted but not required. the
;                              same holds for decimal point between
;                              hour and minutes. a do is accepted 
;                              giving read_cmt the value of scmt.
;                              termination m switches to geotype, 
;                              signalled by mtr=true and then type-
;                              becomes the usual typedec for a
;                              geotype variable.
; typedec       (return, boolean) true when a do is input.
;                              used as typedec in case of geotype
;                              input.
; scmt          (call and return, long) the value used after input
;                              of a do. the return value equals 
;                              read_cmt, except for input of 
;                              geotype, where it is unchanged;  
; 

\f



;       read_geo_tx           * page 3   13 09 77, 10.35;  

; long procedure read_stn( z, numbertype );
; _________________________________________
; zone                     z;  
; integer                     numbertype;  
; 
; read_stn      (return, long) the landsnummer or station number
;                              input after a nl or ff. 200 00 0000
;                              is added to station numbers. K is
;                              totally neglected. old  landsnummer
;                              notation (without - ) is recognized
;                              and transformed correctly provided
;                              only 3 digits are used in the løbenr
;                              negative numbers are not transformed, 
;                              but their occurrence is reflected in
;                              the value of numbertype.  the termi-
;                              nator m switches to geotype with the  
;                              typedec packed in numbertype and
;                              with mtr=true.
; z             (call and return, zone) open for char input
; numbertype    (return, integer) the type of the number input
;                              1 : landsnummmer (ddd-dd-dddd)
;                              2 : station number
;                              3 : neg number term by x
;                              4 : neg number term by z
;                              5 : neg nmb term by anything else  
;                              >=8 shift 6 : geotype (mtr=true);  
; 

; boolean procedure read_nl( z, b );
; __________________________________
; zone                       z;  
; boolean                       b;  
; 
; read_nl          (return, boolean) true if the line contains 
;                                    information sensed by aid of the
;                                    boolean b, 
;                                    false if nl, ff or em is met.
;                                    em gives not_eof=false
; z                (call and return, zone) open for char input
; b                (call, boolean)   variable for use of jensens de-
;                                    vice in control of exit from
;                                    the procedure. i.e. reading  
;                                    stops when b == false;
; 
; 

; boolean procedure m_i_l( z, b );
; ________________________________
; zone                     z;  
; boolean                     b;  
; 
; m_i_l            (return, boolean) true if the line contains digi-
;                                    tal info or information sensed
;                                    by aid of the boolean b, 
;                                    false if nl, ff or em is met.
;                                    em gives not_eof=false
; z                (call and return, zone) open for char input
; b                (call, boolean)   variable for use of jensens de-
;                                    vice in control of exit from
;                                    the procedure. i.e. reading  
;                                    stops when b == false;
; 

\f



;       read_geo_tx           * page 4   13 09 77, 10.35;  

b. g1, e9       ; block with names for tail and insertproc

w.
k=10000         ; load addr

s. g10, j70, d15, f1   ; start of slang segm

h.
g0=9               ; number of extern.

e5:
g1:     g3,  g2    ; headword, rel of last point, absword

g2=k-2-g1          ; fin of abswords

; points:

g3=k-2-g1          ; fin of points

; fill with    aw 0   :
w.
           aw   0     , r. 250-(:+12*g0+4:)>1;

; extern. list:
w.
e0:      g0        ; number of extern.;
         g10       ; number of bytes to be initialized
g10=k-e0-4

 <:rg:>, 0,0,0     ; rg
10<18+0, 0         ; own real

 <:readgeot:>, 0   ; readgeot
5<18+2<12+8<6+13, 0; long proc, bool, zone, int.val

 <:tchar:>, 0, 0   ;
9<18+0,  0         ; own integer

 <:mtr<0>:>, 0, 0  ; mtr
8<18+0,  0         ; own boolean

 <:readnmb:>, 0    ;
5<18+3<12+8<6+0, 0 ; long proc, integer zone

 <:readchar:>, 0   ;
3<18+19<12+8<6+0, 0 ; integer proc, integer, zone

 <:noteof<0>:>, 0  ;
8<18+0,  0         ; own boolean

 <:inclass:>, 0    ; 
9<18+0,  0         ; own integer

 <:repeatchar:>    ;
1<18+8<12+0, 0     ; procedure, zone;

\f



;       read_geo_tx           * page 5   13 09 77, 10.35;  

; continuation-address on next segm of ext.list
g9

g4:
c.g4-e5-506
m.code readgeo too long
z.

c.502-g4+e5
     jl         -1    , r.252-(:g4-e5:)>1; fill whith -1

z.
   <:readgeo<0>:>, 0

;     slut første segm;

;     start andet segm;

h.

e8:
g5:     g7,  g6    ; headword, rel of last point, absword

; abswords:
j3:   g0+3 ,  0    ; RS entry  3: reserve
j4:   g0+ 4,  0    ;  do       4: take expression
j6:   g0+ 6,  0    ;  do       6: stop reg expression
j13:  g0+13,  0    ;  do      13: last used
j30:  g0+30,  0    ;  do      30: saved stack ref. saved w3
j46:  g0+46,  d15  ;  do      46: convert long to real 
j60:      1,  0    ; first of extern. rg
j61:      2,  d0   ; second  do       read_geo_t
j62:      3,  0    ; third   do       t_char
j63:      4,  0    ; fourth  do       mtr
j64:      5,  d6   ; fifth   of extn. read_nmb
j65:      6,  d9   ; sixth   do       read_char
j66:      7,  0    ; seventh do       not_eof
j67:      8,  0    ; eighth  do       in_class
j68:      9,  d12  ; nineth  do       repeat_char

g6=k-2-g5          ; fin of abswords

; points:

g7=k-2-g5          ; fin of points

; continuation ext.list :
w.
g9=k-g5
s3           ; date
s4           ; time

\f



;       read_geo_tx           * page 6   13 09 77, 10.35;  

f.
f1:  '-6            ; constant  used in geo_t_r and r_t_geo
w.

h.
d2:   12, d1        ; appetite, rel return from read_geo_t
d5:   10, d4        ; appetite, rel return from mil
d11:   8, d10       ; appetitte, rel return from read_char
d14:   4, d13       ; appetite, rel return from repeatchar
w.

b. a20, c2   ; start of read_geo

w.

a3:
; entrypoint   read_cmt_2
;              **********
     am          5-4    ; proc_info

e7:
; entrypoint   read_cmt
;              ********
     am          4-3    ; proc_info

e6:
; entrypoint   read_ident
;              **********
     am          3-2    ; proc_info
e1:
; entrypoint   read_geo_r
;              **********
     am          2-1    ; proc_info

e2:
; entrypoint   read_geo
;              ********
     al  w0      1      ; proc_info

     al  w1     -26     ; work + stack to readgeot
     jl. w3     (j3.)   ; reserve 26 bytes
     sn  w0      5      ; only 18 bytes are released
     am          8      ; on return from read_geo_t;
     al  w2   x1+26     ; w2:= last used
     ds. w3     (j30.)  ; saved w3

     rs  w0   x2-2      ; save proc info

\f



;       read_geo_tx           * page 7   13 09 77, 10.35;  

; set kind
     sn  w0      5      ; 
     al  w0      4      ;
     sn  w0      2      ;
     al  w0      1      ;
     rs  w0   x2-4      ;

     rs  w2   x1        ; stack ref of readgeot stack
     rl. w3      g5.    ; segm. table of this segm.
     rl. w0      d2.    ;  appetite, rel. return
     ds  w0   x1+4      ;

; set kind :
     al  w3      26     ; formals kind = integer
     al  w0   x2-4      ; addr of readgeot kind
     ds  w0   x1+8      ; save formals
; move formals :
     dl  w0   x2+12     ; tpd
     ds  w0   x1+16     ; save formals
     dl  w0   x2+8      ; z
     ds  w0   x1+12     ; save formals

; read_geo_t( kind, z, typedec );
     rl. w3     (j61.)  ; addr read_geo_t
d0=k+1-e8               ; rel chain
     jl  w3   x3+0      ; goto read_geo_t
d1=k-e8                 ; rel. return

     ds. w3     (j30.)  ; save stack ref
     dl  w1   x1        ; w0w1 := read_geo_t;
     rl  w3   x2-2      ; load procinfo
     as  w3      1      ; 
; goto proc.
     rl. w3   x3+c1.    ; rel addr.
c0:  jl.      x3        ;

; read_geo_r
; ==========
a10: rl. w3     (j46.)  ; load addr of conv long to real
d15=k+1-e8              ; rel chain
     jl  w3   x3+0      ; goto conv long to real
     ds  w1   x2+8      ; save real
     dl  w1   x2+12     ; load formals tpd
     so  w0      16     ; if expr then
     jl. w3     (j4.)   ; take this
     bz  w3   x1        ; load tpd
     dl  w1   x2+8      ; load load real
     sl  w3      512    ; if (tpd shift(-6))extract 6 < 8
     jl.         a1.    ; then
     fm. w1     (j60.)  ; geo_r:= geo_r * rg
     jl.         a2.    ; else
a1:  fm. w1      f1.    ; geo_r:= geo_r * '-6

; stop:
a2:  rs. w2     (j13.)  ; release stack
     jl.        (j6.)   ; stop reg expr

\f



;       read_geo_tx           * page 8   13 09 77, 10.35;  

; read_cmt
; ========
a4:
     bl. w3     (j63.)  ; load mtr
     sz  w3      1      ; if mtr
     jl.         a2.    ; then goto stop;
     ds  w1   x2-6      ; save icmt
     rl. w3     (j62.)  ; load t_char
     sn  w3      44     ; if t_char = 44 then
     jl.         a6.    ; goto read more;
     dl  w1   x2+12     ; load formals of typedec;
     so  w0      16     ; if expression then
     jl. w3     (j4.)   ; take this;
     ds. w3     (j30.)  ;
     bz  w1   x1        ; w1:= typedec;
; scmt
a8:  rs  w1   x2-2      ; save this;
     dl  w1   x2+16     ; load formals scmt;
     so  w0      16     ; if expression then
     jl. w3     (j4.)   ; take this;
     ds. w3     (j30.)  ;
     rl  w3   x2-2      ; w3:= typedec;
     sz  w3      1      ; if -, typedec 
     jl.         a5.    ; then
     rl  w3      2      ; beginnn
     dl  w1   x2-6      ; load icmt
     ds  w1   x3        ; save  in scmt
     jl.         a2.    ; enddddd else
a5:  dl  w1   x1        ; load scmt;
     jl.         a2.    ; goto stop.

; read more
a6:
; long mult
     ad  w1      8      ; icmt :=
     ds  w1   x2-2      ;
     ad  w1     -4      ;         16 * icmt
     ss  w1   x2-2      ;       -256 * icmt
     ds  w1   x2-6      ;
     dl  w1   x2-2      ;
     ad  w1      3      ;
     ds  w1   x2-2      ;
     ad  w1      2      ;      +8192 * icmt
     aa  w1   x2-2      ;      +2048 * icmt
     aa  w1   x2-6      ; <* = 10000 * icmt *> ;
     ds  w1   x2-6      ; save icmt;
     jl.         a3.    ; goto read_cmt_2;

; read_cmt_2
; ==========
a7:  aa  w1   x2-6      ; scmt :=
     ds  w1   x2-6      ; read_cmt :=
     al  w1      0      ;      icmt + read_geo_t;
     jl.         a8.    ; goto scmt;

\f



;       read_geo_tx           * page 9   13 09 77, 10.35;  

c2:
; goto addresses after call of read_geo_t :
       a2-c0   ; read_geo
       a10-c0  ; read_geo_r
       a2-c0   ; read_ident
       a4-c0   ; read_cmt
       a7-c0   ; read_cmt_2
c1=c2-2

i.
e.

; slut read_geo

b. a20, b3, c1  ; start of read_stn
w.

e3:
; entrypoint read_stn
; *******************
     al  w1     -16     ;
     jl. w3     (j3.)   ; save stack + stack to mil call
     al  w2   x1+16     ; last used
     ds. w3     (j30.)  ;

     al  w0     -1      ; b <*in mil_call*> := true;
     rs  w0   x2-2      ; save this

     rs  w2   x1        ; save stack info to call of mil
     rl. w3      g5.    ;
     rl. w0      d5.    ;
     ds  w0   x1+4      ;
     dl  w0   x2+8      ; move formals of z
     ds  w0   x1+8      ;
     al  w3      25     ; kind = boolean
     al  w0   x2-2      ; addr(b)
     ds  w0   x1+12     ; save formals(b)

; read_nl( z, b );
d3=k+1-e8
     jl. w3      a0.    ; subentry mil with inclass_lim = 0;
d4=k-e8
     ds. w3     (j30.)  ;

; read_nmb( z, tpd ); <* return from there *>
     rl. w3     (j64.)  ;
d6=k+1-e8
     jl       x3+0      ; goto read_nmb , return from there;

\f



;       read_geo_tx           * page 10   13 09 77, 10.35;  

a0:
e9:
; entrypoint read_nl
; ******************
     am         -4      ; inclass_lim := 0;

e4:
; entrypoint mil
; **************
     al  w0      4      ; inclass_lim := 4;

     al  w1     -4      ;
     jl. w3     (j3.)   ; save work to inbranckets and classlim
     al  w2   x1+4      ; last used
     ds. w3     (j30.)  ;

     rs  w0   x2-2      ; save inclasslim
     al  w0      0      ; in_branckets := false;

; read next char:
b0:  rs  w0   x2-4      ; save inbranckets;

     al  w1     -14     ; save stack read_char(z, t_char );
     jl. w3     (j3.)   ;
     ds. w3     (j30.)  ;

     rs  w2   x1        ; return info
     rl. w3     g5.     ;
     rl. w0     d11.    ;
     ds  w0   x1+4      ;
     dl  w0   x2+8      ; move formals(z)
     ds  w0   x1+8      ;
     al  w3      26     ; kind = integer
     rl. w0      j62.   ; addr( t_char );
     ds  w0   x1+12     ; save formals( t_char )

; read_char( z, t_char );
     rl. w3     (j65.)  ;
d9=k+1-e8
     jl  w3   x3+0      ; goto read_chat( z, t_char );
d10=k-e8
     ds. w3     (j30.)  ;

     rl  w1   x1        ; w1 := read_char;
     rs. w1     (j67.)  ; save inclass
     rl. w0     (j62.)  ; load t_char
     sn  w0      25     ; if t_char = 25
     jl.         b3.    ; then goto set not_eof;

     dl  w1   x2+12     ; load formals b
     so  w0      16     ; if expression then
     jl. w3     (j4.)   ; take this
     ds. w3     (j30.)  ;

     rl. w0     (j62.)  ; w0:= t_char
     rl  w3   x2-4      ; w3:= in_branckets;
     sz  w3      1      ; if in_branckets then
     jl.         b2.    ; goto set in_branckets;
     bl  w1   x1        ; w1:= b;
     sz  w1      1      ; if -, b
     sn  w0      10     ; or t_char = 10 then
     jl.         b3.    ; goto set not_eof;

\f



;       read_geo_tx           * page 11   13 09 77, 10.35;  

     rl. w1     (j67.)  ; w1:= in_class;
     se  w0      12     ; if t_char = 12
     sh  w1  (x2-2)     ; or inclass <= inclass_lim then
     jl.         b3.    ; goto set not_eof;

; set in_branckets:
b1:  se  w0      42     ; if t_char = 42
     jl.         b2.    ; then
     al  w0     -1      ; in_branckets := true
     jl.         b0.    ; goto read next char ;
b2:  se  w0      59     ; in_branckets :=  if t_char <> 59
     am       x3        ; then in_branchets
     al  w0      0      ; else false;
     jl.         b0.    ; goto read next char;

; set not_eof:
b3:  sn  w0      25     ; not_eof :=
     am          1      ; t_char <> 25;
     al  w3     -1      ;
     hs. w3     (j66.)  ; save not_eof;

     se  w0      10     ; mil :=
     sn  w0      12     ;     t_char <> 10
     am          1      ; and t_char <> 12
     al  w1     -1      ;
     la  w1      6      ; and not_eof;
     rs  w1   x2-4      ; save mil;

     al  w1     -10     ; save stack to repeat_char
     jl. w3     (j3.)   ;
     ds. w3     (j30.)  ;

     rs  w2   x1        ; return info;
     rl. w3      g5.    ;
     rl. w0      d14.   ;
     ds  w0   x1+4      ;
     dl  w0   x2+8      ; move formals(z);
     ds  w0   x1+8      ;

; repeat_char( z );
     rl. w3     (j68.)  ;
d12=k+1-e8
     jl  w3   x3+0      ;
d13=k-e8
     ds. w3     (j30.)  ;

     rl  w1   x2-4      ; load mil
     rs. w2     (j13.)  ; release stack;
     al  w0      0      ;
     jl.        (j6.)   ; stop by reg expr;

g8:
c.g8-e8-506
m. code readstn too long

z.
c.502-g8+e8
     jl          -1     , r.252-(:g8-e8:)>1; fill with -1

z.
   <:readgeo<0>:>, 0
i.
e.

\f



;       read_geo_tx           * page 12   13 09 77, 10.35;  

i.
e.

; entry tail:

; read_geo
g0:     2               ; first tail: 2 segm
        0, 0, 0, 0      ; fill
        1<23+0<12+e2-e8 ; entrypoint
  5<18+2<12+8<6+0,  0   ; long proc, boolean, zone
        4<12 + e0-e5    ; code proc start of extern. list
        1<12 + 0        ; 1 code segm. 0 bytes in perm core

; read_geo_r
        1<23 + 4        ; modekind = backing storage
        0, 0, 0, 0      ; fill
        1<23+0<12+e1-e8 ; entrypoint
  4<18+2<12+8<6+0,   0  ; real proc, boolean, zone
        4<12 + e0-e5    ; code proc start of extern. list
        1<12 + 0        ; 1 segm, 0 bytes in perm core

; read_ident
        1<23 + 4        ; modekind = backing storage
        0, 0, 0, 0      ; fill
        1<23+0<12+e6-e8 ; entrypoint
  5<18+2<12+8<6+0,   0  ; long proc, boolean, zone
        4<12 + e0-e5    ; code proc start of extern. list
        1<12 + 0        ; 1 segm, 0 bytes in perm core

; read_cmt
        1<23 + 4        ; modekind = backing storage
        0, 0, 0, 0      ; fill
        1<23+0<12+e7-e8 ; entrypoint
  5<18+5<12+2<6+8,   0  ; long proc, long, boolean, zone
        4<12 + e0-e5    ; code proc start of extern. list
        1<12 + 0        ; 1 segm, 0 bytes in perm core

; read_stn
        1<23 + 4        ; modekind = backing storage
        0, 0, 0, 0      ; fill
        1<23+0<12+e3-e8 ; entrypoint
  5<18+3<12+8<6+0,   0  ; long proc, integer, zone
        4<12 + e0-e5    ; code proc start of extern. list
        1<12 + 0        ; 1 segm, 0 bytes in perm core

; read_nl
        1<23 + 4        ; modekind = backing storage
        0, 0, 0, 0      ; fill
        1<23+0<12+e9-e8 ; entrypoint
  2<18+2<12+8<6+0,   0  ; boolean proc, boolean, zone
        4<12 + e0-e5    ; code proc start of extern. list
        1<12 + 0        ; 1 segm, 0 bytes in perm core

; mil
g1:     1<23 + 4        ; modekind = backing storage
        0, 0, 0, 0      ; fill
        1<23+0<12+e4-e8 ; entrypoint
  2<18+2<12+8<6+0,   0  ; boolean proc, boolean, zone
        4<12 + e0-e5    ; code proc start of extern. list
        1<12 + 0        ; 1 segm, 0 bytes in perm core

p.<:insertproc:>

e.              ; stop outermost block

\f



;       read_geo_tx           * page 13   13 09 77, 10.35;  

if ok.no
( mode 0.yes
message readgeo not ok
lookup readgeo )

end

▶EOF◀