|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 4608 (0x1200) Types: TextFile Names: »writegeottx«
└─⟦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⟧
; write_geo_t_tx * page 1 13 09 77, 10.45; ; write_geo_t ; *********** if listing.yes char 10 12 10 write_geo_t = set 1 disc write_geo_t = algol external integer procedure write_geo_t ______________________________________ _ (kind, z, obs, typedec); value kind, obs, typedec; integer kind; zone z; long obs; boolean typedec; comment write geo (return) integer number of characters output kind (call) integer kind=1 => output of angles in the interval 0, 2pi kind=2 => output of angles in the interval -pi, pi distances are output in the same way indep. of kind z (call and return) zone for char output obs (call) long angle or distance treated according to typedec typedec (call) boolean contains type shift 6 + number of decimals nr type termination 1 degr min sec sexagesimal sx 2 degr min sexagesimal nt 3 degr nonagesimal dg 4 hours min sec tm 5 degr min sec centesimal cc 6 degr min centesimal eu 7 degr centesimal (grads) gr 8 meters (>=1000 km) m_ 9 meters (>=1 km and <1000 km) m_ 10 meters (< 1 km) m_; begin integer type, dec, char, dbfp, chlng, spmask, multmask, _ signchar, zerochar, t; long rounding; boolean neg; integer array chstr(1:20); type := (typedec shift (-6)) extract 6; dec := typedec extract 6; if type<1 or 10<type then begin type := 8; dec := 6; end; t := case type of (6, 8, 10 , 7, 6, 8, 10, 6, 6, 6); if dec>t then dec := t; \f comment write_geo_t_tx * page 2 13 09 77, 10.45 0 1 2 3 4 5 6 7 8 9 ; neg := obs<0 and (type>=8 or kind=2); if neg then begin obs := -obs; signchar := 45; end else signchar := 32; dbfp := case type of (7, 5, 3, 6, 7, 5, 3, 8, 6, 3); chlng := dbfp+dec; spmask := multmask := case type of ( (1 shift 19)+(1 shift 17), (1 shift 19), 0, (1 shift 20)+(1 shift 18), (1 shift 19)+(1 shift 17), (1 shift 19), 0, (1 shift 20)+(1 shift 17), (1 shift 19), 0); if type>4 then multmask := 0; rounding := case type of (108 593 741, 6 515 624 461, 390 937 467 654, 1 628 906 115, 35 184 372, 3 518 437 209, 351 843 720 888, obs, obs, obs); for t := if type<8 then dec else (t-dec) step -1 until 1 do begin if t=1 then rounding := rounding+5; rounding := rounding//10; end; if type<8 then begin comment angle action; obs := obs+rounding; obs := obs shift (-1); if type<=3 then obs := obs-obs//10 else if type=4 then obs := obs//2+obs//10; char := chstr(1) := (obs shift (-45)) extract 2; obs := (obs-((extend char) shift 45)) shift (-2); multmask := multmask shift 1; for t := 2 step 1 until chlng do begin multmask := multmask shift 1; obs := obs*(if multmask>=0 then 10 else 6); char := chstr(t) := (obs shift (-43)) extract 4; obs := obs-((extend char) shift 43); end; end angle action else begin comment distance action; obs := rounding; for t := chlng step -1 until 1 do begin chstr(t) := obs mod 10; obs := obs//10; end; end distances; \f comment write_geo_t_tx * page 3 13 09 77, 10.45 0 1 2 3 4 5 6 7 8 9 ; zerochar := 32; dec := 4; for t := 1 step 1 until chlng do begin comment writechar into zone; if t=dbfp+1 then begin outchar(z, 46); dec := dec+1; end; spmask := spmask shift 1; if spmask<0 then begin outchar(z, 32); dec := dec+1; end; char := chstr(t); if signchar<>0 then begin comment test for output of sign; if char>0 or t=dbfp then begin outchar(z, signchar); signchar := 0; zerochar := 48; end; end test for sign output; outchar(z, char+zerochar); end output of digits; write(z, case type of (<:_sx:>, <:_nt:>, <:_dg:>, <:_tm:>, <:_cc:>, <:_eu:>, <:_gr:>, <:_m_:>, <:_m_:>, <:_m_:>)); write_geo_t := chlng+dec; end write geo t; end if warning.yes (mode 0.yes message write_geo_t not ok lookup write_geo_t) ▶EOF◀