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

⟦1f0dc166f⟧ TextFile

    Length: 9984 (0x2700)
    Types: TextFile
    Names: »writegeotx«

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



;       write_geo_tx          * page 1   13 09 77, 10.36;  

(
write_geo      = set 1
write_geo_r    = set bs write_geo
write_geo_c    = set bs write_geo
write_geo_c_r  = set bs write_geo

write_geo = slang entry.no
writegeo writegeor writegeoc writegeocr
 
scope project write_geo write_geo_r writegeo_c write_geo_c_r
 
lookup write_geo write_geo_r write_geo_c write_geo_c_r
 
if 11.yes
(message write_geo interim login scope
scope login write_geo)

)

b.             ; outermost block

p. <:fpnames:>

m. girc 4000 write_geo 14.05.77

\f



;       write_geo_tx          * page 2   13 09 77, 10.36;  

; integer procedure write_geo( z, obs, typedec );
; _______________________________________________
;
; write_geo        (return)            integer
; the number of characters output by the procedure
;
; z                (call and return)   zone
; the zone used for buffering, open and ready for char output
;
; obs              (call)              long
; the angle or distance output. angles are counted in the
; interval 0, 2 pi and output according to the typedec
;
; typedec          (call)              boolean
; the type and number of decimals of obs (see write_geo_t);  
;

; integer procedure write_geo_c( z, obs, typedec );
; _________________________________________________
;
; write_geo_c      (return)            integer
; the number of characters output by the procedure
;
; z                (call and return)   zone
; the zone used for buffering, open and ready for char output
;
; obs              (call)              long
; the angle or distance output. angles are counted in the
; interval -pi, pi and output according to the typedec
;
; typedec          (call)              boolean
; the type and number of decimals of obs (see write_geo_t);  
;

; integer procedure write_geo_r( z, obs, typedec );
; _________________________________________________
;
; write_geo_r      (return)            integer
; the number of characters output by the procedure
; 
; z                (call and return)   zone
; the zone used for buffering, open and ready for char output
; 
; obs              (call)              real
; the angle or distance output. angles are counted in the
; interval 0, 2 pi and output according to the typedec
; 
; typedec          (call)              boolean
; the type and number of decimals of obs (see write_geo_t);  
;

\f



;       write_geo_tx          * page 3   13 09 77, 10.36;  

; integer procedure write_geo_c_r( z, obs, typedec );
; ___________________________________________________
;
; write_geo_c_r    (return)            integer
; the number of characters output by the procedure
; 
; z                (call and return)   zone
; the zone used for buffering, open and ready for char output
; 
; obs              (call)              real
; the angle or distance output. angles are counted in the
; interval -pi, pi and output according to the typedec
; 
; typedec          (call)              boolean
; the type and number of decimals of obs (see write_geo_t);  
;

\f



;       write_geo_tx          * page 4   13 09 77, 10.36;  

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=2               ; 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

 <:writegeot:>, 0  ; writegeot
3<18+12<12+15<6+8  ; integer proc, bool val, long val, zone
13<18              ; int val.

\f



;       write_geo_tx          * page 5   13 09 77, 10.36;  

; 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.
   <:writegeo<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
j43:  g0+47,  d15  ;  do      47: convert real to long 
j60:      1,  0    ; first of extern. rg
j61:      2,  d0   ; second  do       write_geo_t

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.
f1:  '-6            ; constant  used in geo_t_r and r_t_geo
w.
d2:  12<12          ; appetite increase constant

\f



;       write_geo_tx          * page 6   13 09 77, 10.36;  

b. a20, c2   ; start of write_geo

w.

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

e6:
; entrypoint   write_geo_c
;              ***********
     am          3-2    ; proc_info
e1:
; entrypoint   write_geo_r
;              ***********
     am          2-1    ; proc_info

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

     al  w1     -12     ; work + stack to readgeot
     jl. w3     (j3.)   ; reserve 12 bytes
     al  w2   x1        ; w2:= last used
     ds. w3     (j30.)  ; saved w3

     rl  w3      0      ; move procinfo

     rl  w0   x2+12     ; move return point
     rs  w0   x2        ; to new stack top
     dl  w1   x2+16     ;
     wa. w1      d2.    ; new appetite := app. + 12
     ds  w1   x2+4      ;

     dl  w1   x2+20     ; move formals z
     ds  w1   x2+12     ;
     dl  w1   x2+24     ;              obs
     ds  w1   x2+16     ;

; set kind
     sl  w3      3      ;
     am          1      ;
     al  w0      1      ;
     rs  w0   x2+22     ;

; set kind :
     al  w0      26     ; formals kind = integer
     al  w1   x2+22     ; addr of readgeot kind
     ds  w1   x2+8      ; save formals

     dl  w1   x2+28     ; move formals tpd
     ds  w1   x2+20     ;

\f



;       write_geo_tx          * page 7   13 09 77, 10.36;  

     so  w3      1      ; if _r then
     jl.         a1.    ; goto conv. obs.

a0:
; write_geo_t( kind, z, obs, typedec );
     rl. w3     (j61.)  ; addr write_geo_t
d0=k+1-e8               ; rel chain
     jl  w3   x3        ; goto write_geo_t
                        ; return from there.

a1:
; if _r proc_info then convert obs long :
     so  w0      16     ; if expr then
     jl. w3     (j4.)   ; take this;
     bz  w3   x1        ;
     rs  w3   x2+24     ; save value tpd;
     al  w0      25     ; new formals
     al  w1   x2+25     ; tpd;
     ds  w1   x2+20     ;

     dl  w1   x2+16     ; load formals obs
     so  w0      16     ; if expr then
     jl.        (j4.)   ; take this;
     dl  w1   x1        ; load obs
     rl  w3   x2+14     ; load first formal obs
     so  w3      1      ; if integer then
     ci  w0      0      ; convert this

     rl  w3   x2+24     ; load tpd
     sl  w3      512    ; obs := obs /
     jl.         a2.    ; (
     fd. w1     (j60.)  ; if tpd shift (-6) extract 6 < 8 then
     jl.         a3.    ; rg
a2:  fd. w1      f1.    ; else '-6 );

a3:  rl. w3     (j43.)  ; convert to long
d15=k+1-e8              ;
     jl  w3   x3+0      ;
     ds  w1   x2+28     ; save obs
     al  w0      28     ; new formals obs
     al  w1   x2+28     ;
     ds  w1   x2+16     ;
     jl.         a0.    ; goto call write_geo_t

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.
   <:writegeo<0>:>, 0
i.
e.

\f



;       write_geo_tx          * page 8   13 09 77, 10.36;  

i.
e.

; entry tail:

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

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

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

; write_geo_c_r
g1:     1<23 + 4        ; modekind = backing storage
        0, 0, 0, 0      ; fill
        1<23+0<12+e7-e8 ; entrypoint
  3<18+12<12+14<6+8, 0  ; integer proc, bool val, real val, 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



;       write_geo_tx          * page 9   13 09 77, 10.36;  

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

end

▶EOF◀