|
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: 12288 (0x3000) Types: TextFile Names: »rcoordobstx«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦787c125fb⟧ »adjprocfile« └─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦787c125fb⟧ »adjprocfile« └─⟦this⟧
; r_coord_obs_tx * page 1 14 09 78, 14.40; ; r_coord_obs ; *********** if listing.yes char 10 12 10 r_coord_obs = set 1 r_coord_obs = algol external long procedure r_coord_obs ___________________________________ _ (in, reg_lab, obs_rec); zone in; array reg_lab, obs_rec; comment r_coord_obs (return, long) Inputs a record of coordinates ot sam-heights and stores the ecord in the array obs_rec. The values of r_coord_obs id obs_kind shift 36 + obstype shift 24 + obs_count shift 12, however in case of no data a value of 0 is returned, and a useless call (wrong reg_lab) the value -1 is returned. incomplete data lines are reported and skipped. reg_lab (call, array) an ordinary register label as defined in read_reg_lab. obs_rec (return, array) an array holding the data input i a format as follows: byte type internal name content 2 int lng record-length in bytes 4 int - checksum 5 sh int obs_kind 13 = coord_obs _ 15 = sam_heights 6 sh int obs_type kind 13 : _ 1 = 1 coord (height) _ 2 = 2 coord (geo or recta) _ 3 = 3 (cartesian) _ kind 15 : _ 1 = all zero by default _ 2 = obs value input 7 sh int obs_count number of stations 8 _ not used 9 sh int (weight) 1 (set by proc) 10 sh int h_state irrelev for obskind 13, _ 0 = no mean height _ 1 = mean height input 11 sh int c_tpd typedec of obs 12 sh int h_tpd typedec of mean height 16 long ident identific of rec. 20 long stmw reg_lab(6) =systemword 24 long Hm mean hght for samheights 28 long zl reg_lab(7) = zone etc. 32 real mc mean error sq in m**2 the last fields are of type long, and only the number of fields needed to hold the coord are used 32+ 4*t station(t) station no. t 32+ 4*obs_count+4*t N_obs(t) 1. coord no. t 32+ 8*obs_count+4*t E_obs(t) 2. coord no. t 32+12*obs_count+4*t H_obs(t) 3. coord no. t heights input as sam-heights are stored in N_obs; \f comment r_coord_obs_tx * page 2 14 09 78, 14.40 0 1 2 3 4 5 6 7 8 9 ; comment the length and sum are as for invar/outvar _ ext. used: __________ read_hak read_ident read_stn read_geo m_i_l nl sp _ Prog: Knud Poder, JULY 1978, SEP 1978, MAY 1979, AUG 1979 ; begin long ST, Hm, ident, Ep; long array NEH(1:240); integer obs_kind, obs_type, obs_count, _ exp_tpd, max_dec, nr_type, h_state, _ lng, cps, q, r, t, save_udt, impl_obs; real mc; boolean c_tpd, h_tpd, tpd, cw_cstm, error, _ sam_h, sam_coord, sam, c_obs; integer field lng_f; long array field station, N_obs, E_obs, H_obs; boolean field obs_kind_f, obs_type_f, obs_count_f, _ tpd_f, h_tpd_f, h_state_f, P_f; real field mc_f; long field ident_f, stmw_f, Hm_f, zl_f, Ep_f; \f _ comment init op; ________________ save_udt := udt; r_coord_obs := 0; ident := read_hak(in, tpd); comment ON TEST: : write(out, nl, 4, <:ident__:>, ident, sp, 3, _ <:tpd:>, tpd extract 12, _ if tpd then <:__true:> else <:__false:>); comment * page ; if ident > 0 then begin _ comment decode reg_lab; _______________________ obs_kind := reglab(2) extract 12; c_obs := obs_kind = 13; sam_h := obs_kind = 15; sam_coord := obs_kind = 16; sam := sam_h or sam_coord; if c_obs then <*coord_obs*> begin error := false; t := reg_lab(6) extract 12; cw_cstm := t <> 5 and -, (t = 8 and long reg_lab(7) < 0); cps := obs_type := if t = 9 then 1 _ else if t<>8 and abs long reg_lab(7)<>3 then 2 _ else 3; Ep := long reg_lab(9); exp_tpd := if t <> 2 then 8 else 1; udt := if t <> 2 then 109 <*m*> else 115 <*s*>; end else if sam_h then <*sam heights*> begin error := false; obs_type := 6; <*modified to 5 if implicit obs*> cps := 1; exp_tpd := 8; udt := 109 <*m*>; impl_obs := 0; end else if sam_coord then <*sam coord*> begin error := false; obs_type := 2*(reg_lab(5) extract 24); _ <*reduced by 1 if implicit obs*> cps := 1; exp_tpd := if reg_lab(6) extract 12 <> 2 then 8 _ else 1; udt := if exp_tpd = 8 then 109 <*m*> _ else 115 <*s*>; impl_obs := 0; end else <*others*> begin error := true; r_coord_obs := -1; write(out, nl, 1, <:***skipped obs_kind ;:>); write_reg_lab(out, reg_lab); end; \f comment r_coord_obs_tx * page 4 14 09 78, 14.40 0 1 2 3 4 5 6 7 8 9 ; _ comment input and store actions; ________________________________ if -, error then begin _ comment mean error; ___________________ <*input unit sx or m if stated else cm assumed*> mc := read_ident(in, tpd); if mtr then mc := ('-6*mc)**2 else begin for t := tpd extract 12 step -1 until 1 do mc := mc/10; if t_char <> 115 <*s*> then <*store in m**2*> mc := (mc/100)**2 else <*store in radians**2*> mc := (mc/rho)**2; end -, mtr; _ comment input mean height; __________________________ if (if sam then m_i_l(in, true) _ else false) then begin H_m := read_geo(in, h_tpd); h_state := 1; end else begin H_m := 0; h_tpd := false add (8 shift 6 + 3); h_state := 1; end; _ comment fixed field in obs_rec; ______________________________ station := 36; _ comment clear head of obs_rec; ______________________________ for t := 0 step -1 until -7 do obs_rec.station(t) := 0; \f comment r_coord_obs_tx * page 5 14 09 78, 14.40 0 1 2 3 4 5 6 7 8 9 ; _ comment input loop; ___________________ max_dec := obs_count := 0; for ST := read_stn(in, nr_type) _ while ST <> 200 00 0000 shift 19 and ST > 0 do begin comment ON TEST: : write_stn(out, ST + 0*write(out, nl, 1, <:stat_:>)); q := obs_count*cps; obs_count := obs_count + 1; obs_rec.station(obs_count) := ST; error := false; for t := 1 step 1 until cps do begin q := q + 1; if m_i_l(in, true) then NEH(q) := read_geo(in, c_tpd) else if sam then begin NEH(q) := 0; c_tpd := false add (exp_tpd shift 6); impl_obs := impl_obs + 1; end else begin error := true; write(out, nl, 1); write_stn(out, ST); write(out, <:__koordinat no._:>, t, <:__mangler:>); c_tpd := false add (exp_tpd shift 6); end; if (c_tpd shift (-6)) extract 6 <> exp_tpd then begin error := true; write(out, nl, 1); write_stn(out, ST); write(out, <:__koordinat no. :>, t, sp, 4); write_geo_c(out, NEH(q), c_tpd); write(out, <:__inkonsistent:>); c_tpd := false; end; if max_dec < c_tpd extract 6 then max_dec := c_tpd extract 6; end t-loop; if error then obs_count := obs_count - 1; end ST- loop; comment ON TEST: : write_stn(out, ST + write(out, nl, 1, <:slut_:>)); _ comment restore udt; ____________________ udt := save_udt; \f comment r_coord_obs_tx * page 6 14 09 78, 14.40 0 1 2 3 4 5 6 7 8 9 ; _ comment check for implicit sam obs; ___________________________________ if (if sam then impl_obs = obs_count else false) then begin obs_type := obs_type - 1; cps := 0; end; _ comment fields in obs_rec; __________________________ lng_f := 2; obs_kind_f := 5; obs_type_f := 6; obs_count_f := 7; P_f := 9; h_state_f := 10; tpd_f := 11; h_tpd_f := 12; ident_f := 16; stmw_f := 20; Hm_f := 24; zl_f := 28; mc_f := 32; Ep_f := 36; N_obs := station + 4*obs_count; E_obs := N_obs + 4*obs_count; H_obs := E_obs + 4*obs_count; _ comment rec-head; _________________ lng := obs_rec.lng_f := station + 4*(1 + cps)*obs_count; obs_rec.obs_kind_f := false add obs_kind; obs_rec.obs_type_f := false add obs_type; obs_rec.obs_count_f := false add obs_count; obs_rec.P_f := false add 1; obs_rec.h_state_f := false add h_state; obs_rec.tpd_f := false add (exp_tpd shift 6) _ add max_dec; obs_rec.h_tpd_f := h_tpd; obs_rec.ident_f := ident; obs_rec.stmw_f := long reg_lab(6); obs_rec.Hm_f := Hm; obs_rec.zl_f := long reg_lab(7); obs_rec.mc_f := mc; obs_rec.Ep_f := Ep; \f comment r_coord_obs_tx * page 7 14 09 78, 14.40 0 1 2 3 4 5 6 7 8 9 ; _ comment move obs-subrec; ________________________ q := 0; for r := 1 step 1 until obs_count do begin for t := 1 step 1 until cps do begin q := q + 1; case t of begin obs_rec.N_obs(r) := NEH(q); obs_rec.E_obs(r) := if cw_cstm then (NEH(q) - Ep) _ else (- (NEH(q) - Ep)); obs_rec.H_obs(t) := NEH(q); end; end t-loop; end r-loop; _ comment checksum; _________________ t := 3 + obs_rec.lng_f; for lng_f := lng_f + 4 step 2 until lng do t := t + obs_rec.lng_f; lng_f := 4; obs_rec.lng_f := -t; r_coord_obs := (((((long <::> add obs_kind) shift 12) _ add obs_type) shift 12) _ add obs_count) shift 12; end -, error; end ident <> 0; end r_coord_obs; end if ok.no mode warning.yes if warning.yes (mode 0.yes message r_coord_obs not ok lookup r_coord_obs) end finis ▶EOF◀