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

⟦c4728d20d⟧ TextFile

    Length: 12288 (0x3000)
    Types: TextFile
    Names: »readasobstx«

Derivation

└─⟦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⟧ 

TextFile



;       astro satellite input * page 1    6 06 79, 15.28;  

;  read_as_obs
;  ***********

if listing.yes
char 10 12 10

read_as_obs = set 1

read_as_obs = algol

external long procedure read_as_obs
___________________________________
_       (in, reg_label, obs_rec, last_ST);  
zone     in;  
array        reg_label, obs_rec;  
long                                                  last_ST;  

comment input of directions, laplaceaz, and distances.
______________________________________________________

read_as_obs r(return value long) represented in 4 booleans:
_           obs_kind
_           obs_type
_           false add q <* = no_of_directions in horizont *>
_           false add (if no_of_z_dst = 0 then 0 else 4095)

obs_rec.nrf(0)  contains in any case stnmb
obs_rec.identif contains in any case identification.

;  

\f



comment astro satellite input * page 2    6 06 79, 15.28
0 1 2 3 4 5 6 7 8 9 ;  

_
comment

fixed fields in obs_rec
_______________________

byte nr         type     name         content

2               integer  obsrcl       recordlength
4               integer    -          recordsum for in/outvar
boolean  obskind      16
6               boolean  obstype      for obskind=16:
1=vinkeldif=70, 2=vinkeldif=0, 
7               boolean  q            number of objects
8               boolean  year         year of observ, 
_                                      0=no info
9               boolean  sets
10              boolean  oc-state     0=not known
_                                     1=known but not fixed
11              boolean  tpd_obs      typedec for obs
12              boolean  tpd_oc       typedec for oc/objh
16              long     identif      identification
20              long     tapenr       no. of tape
24              long     oconst       oc/instrh
28              real     md=1sx           m.e. of dir or rel. dist
32              real     mc=0           m.e. of centering

variable part of obs_rec
_________________________
hl := 32

hl+4            long     nr(0)        station number
hl+4(1+t)       long     nr(t)        obj. number(t)
hl+4(1+q)+1+t   boolean  exc_bit(t)   false add if exc 1

round upwards to even byte no.
hl+5(1+q)+4t    long       obs(t)
hl+5(1+q)+4q+4t long       objh(t)    objheight

with ub = hl+5(1+q)+4q     (kind=2 or kind=3)
_      or hl+5(1+q)+8q     (kind=4) we get

ub+1            boolean    exc_dst_tpd
ub+2            boolean    exc_dir_tpd
ub+2+4t         long       exc_dst(t)
ub+2+4r+4t      long       exc_dir(t)

total use of bytes:
_          kind=2 or 3 , r<>0 :   32+5(1+q)+4q+2+8r
_          kind=2 or 3 , r=0  :   32+5(1+q)+4q
_          kind=4             :   32+5(1+q)+8q;  

\f



comment astro satellite input * page 3    6 06 79, 15.28
0 1 2 3 4 5 6 7 8 9 ;  

begin

  comment datamatic variables;  
  ___________________________
  integer               t, t1, nr_tp;  

  long                  pf_char;  

  integer       field   lng_f;  

  long    array field   nr_f;  

  real          field   weight;  

  real          field   me1, me2;  

  real          field   sets_f;  

  long          field   ident_f;  

  long    array field   obs;  

  long          field   y1, y2, z1, z2, w_f;  

  long          field   Bz, Lz;  

  long                  read_as_obs_1;  

  boolean               v_tpd, tpd,tpd1, PF1, PF2;  

  _
  comment geodetic variables;  
  ___________________________
  boolean       field   tpd_f, obs_kind_f, obs_type_f, 
  _                     obs_count_f, PF_state_f, w_state_f;  
  boolean array field   pff;

  long                  st1, st2, bz, lz, w;  

  long array            obs_a(1:80);  

  boolean array         pf_byte(1:80);  
  integer               max_dec;  
  real          field   tobs;  

  real                  sets, mdir, mcdir, mdst, mcdst, obs_r;  

  long                  tapenr, instrh, identif;  

  integer               obs_count, obskind, obstype, save_udt;  

\f



comment astro satellite input * page 4    6 06 79, 15.28
0 1 2 3 4 5 6 7 8 9 ;  

  long procedure read_star(in, nr_tp, pf);  
  ________________________________________
  zone                     in;  
  integer                      nr_tp;  
  boolean                             pf;  
  begin
    integer pf_char;  
    long st;  
    st := read_stn(in, nr_tp);  
    if st <> 200 00 0000 shift 19 and st > 0 then
    begin
      pf_char := (st shift (-12)) extract 7;  
      if pf_char = 80 <*P*> or pf_char = 70 <*F*> then
      begin
        t_char := pf_char;  
        st     := st - (pf_char shift 12);  
      end;  
      pf := t_char =112 <*p*> or t_char = 80 <*P*>;  
      if -, pf and t_char <> 102 <*f*> and t_char <> 79 <*F*> then
      nr_tp := 5;  
    end;  
    read_star := st;  
  end read_star;  

\f



comment astro satellite input * page 5    6 06 79, 15.28
0 1 2 3 4 5 6 7 8 9 ;  

  _
  comment init of variables and fixed field variables;  
  ____________________________________________________
  read_as_obs_1 := 0;  
  mdir        := reg_label(6);  
  mcdir       := reg_label(7);  
  tapenr      := long reg_label(4);  
  obskind     := reg_label(2) extract 12;  

  save_udt    := udt;  
  udt         := 115;  <*sexages as standard*>  

  lng_f       :=  2;  
  obs_kind_f  :=  5;  
  obs_type_f  :=  6;  
  obs_count_f :=  7;  
  PF_state_f  :=  8;  
  w_state_f   := 10;  
  tpd_f       := 11;  
  ident_f     := 16;  
  sets_f      := 
  tobs        := 20;  
  w_f         := 
  weight      := 24;  
  me1         := 28;  
  me2         := 32;  
  nr_f        := 36;  
  y1          := 44;  
  y2          := 48;  
  z1          := 52;  
  z2          := 56;  
  Bz          := 60;  
  Lz          := 64;  

  comment
  obsid, tobs, vægt, Bz, Lz, 
  st1, P, F, y1, z1, 
  st2, P, F, y2, z2, 
  identification;  

  last_ST :=
  st1 := read_ident(in, tpd);  
  if st1<>-1 then
  begin
    if fp_mode(5) then write(out, nl, 3, st1);  
    read_as_obs_1 := 1;  

    obs_type := if t_char = 100 <*d*> or t_char = 68 <*D*> then 1
    _      else if t_char = 103 <*g*> or t_char = 71 <*G*> then 2
    _      else                                                 3;  

\f



comment astro satellite input * page 6    6 06 79, 15.28
0 1 2 3 4 5 6 7 8 9 ;  

    case obs_type of
    begin

      comment case 1, instantaneous directions;  
      begin
        max_dec := 0;  
        obs_count := 0;  
        obs_rec.ident_f := st1;  
        read(in, obs_rec.t_obs);  
        bz := read_geo(in, tpd);  
        lz := read_geo(in, tpd);  
        if mil(in, true) then
        begin
          obs_rec.w_f       := read_geo(in, tpd);  
          obs_rec.w_state_f := false add 1;  
        end
        else
        begin
          obs_rec.w_f       := 0;  
          obs_rec.w_state_f := false;  
        end;  

t1 := 0;
        for st1 := read_star(in, nr_tp, PF1) 
        _          while st1 <> (200 00 0000) shift 19
        _                and st1 > 0 do
        begin
          obs_count := obs_count + 1;  
          obs_rec.nr_f(obs_count) := st1;  
          pf_byte(obs_count)      := PF1;  
t1 := t1 + 1;
          obs_a(t1)        := read_geo(in, tpd);  
t1 := t1 + 1;
obs_a(t1) := read_geo(in,tpd1);
          if tpd extract 6 > max_dec then   
          max_dec := tpd extract 6;
        end input loop;  

        _
        comment save obs and PF;  
        ________________________
        obs := nr_f + 4*obs_count;  
        pff := obs + 8*obs_count + 8;  
t1 := 0;
        for t := 1 step 1 until obs_count do
        begin
t1 := t1 + 1;
          obs_rec.obs(t1) := obs_a(t1);  
t1 := t1 + 1;
obs_rec.obs(t1) := obs_a(t1);
          obs_rec.pff(t) := pf_byte(t);  
        end;  
        obs_rec.obs(2*obs_count+1) := bz;  
        obs_rec.obs(2*obs_count+2) := lz;  
        obs_rec.lng_f := nr_f + ((13*obs_count+1)//2)*2 + 8;  
        obs_rec.tpd_f := false add (1 shift 6 + max_dec);
        obs_rec.me1   := '-6*m_dir;
        obs_rec.me2   := '-6*m_dir*mc_dir;
write(out,nl,2,obs_rec.ident_f,nl,1);
t1 := 0;
v_tpd := false add(1 shift 6 + 4);
for t := 1 step 1 until obs_count do
begin
write(out, nl,1);
write_stn(out,long obs_rec(9+t));
write(out,sp,2);
t1 := t1 + 1;
write_geo_c(out,long obs_rec(2*t-1+9+obs_count), v_tpd);
write(out,sp,2);
t1 := t1 + 1;
write_geo_c(out, long obs_rec(2*t+9+obs_count),vtpd);
end;
write(out,nl,1);
write_geo_c(out,long obs_rec(9+3*obs_count+1),vtpd);
write_geo_c(out,long obs_rec(9+3*obs_count+2),vtpd);
write(out,nl,2);
end case 1;
comment * page  ;
      comment case 2, anomaly groups, pt no action;  ;  
      comment case 3, instantaneous angles, crab;  
      ___________________________________________
      begin

        for t := 1 step 1 until 16 do
        obs_rec(t) := real <::>;  
        obs_rec.ident_f := st1;  
        obs_rec.lng_f := 64;  
        read(in, obs_rec.tobs, obs_rec.weight);  
        if fp_mode(5) then write(out, <<   -d.ddddd>, 
        obs_rec.tobs, obs_rec.weight);  
        read(in, obs_r);  
        if fp_mode(5) then 
        write(out, <<___-.ddddddd>, obs_r);  
        obs_rec.Bz := obs_r/rg;  
        if fp_mode(5) then
        write(out, <<___-.ddddddd>, obs_r);  
        read(in, obs_r);  
        obs_rec.Lz := obs_r/rg;  

\f



comment astro satellite input * page 7    6 06 79, 15.28
0 1 2 3 4 5 6 7 8 9 ;  

        repeat_char(in);  
        st1 := read_stn(in, nrtp);  
        pf_char := (st1 shift (-12)) extract 7;  
        if pf_char = 80 <*P*> or pf_char = 70 <*F*> then
        begin
          t_char := pf_char;  
          st1    := st1 - (pf_char shift 12);  
        end;  
        PF1 := t_char = 112 <*p*> or t_char = 80 <*P*>;  
        obs_rec.PF_state_f := false add (PF1 extract 1);  
        if -, PF1 and t_char <> 102 <*f*> and t_char <> 70 <*F*> then 
        read_as_obs_1 := 0;  
        if fp_mode(5) then write(out, nl, 1);  
        if fp_mode(5) then write_stn(out, st1);  
        if fp_mode(5) then
        write(out, sp, 1, if PF1 then <:p:> else <:f:>);  
        read(in, obs_r);  
        if fp_mode(5) then 
        write(out, <<___-dddddd.ddd>, obs_r);  
        obs_rec.y1 := obs_r/rg/rho;  
        read(in, obs_r);  
        if fp_mode(5) then
        write(out, <<___-dddddd.ddd>, obs_r);  
        obs_rec.z1 := obs_r/rg/rho;  
        repeat_char(in);  
        st2:=read_stn(in, nrtp);  
        pf_char := (st2 shift (-12)) extract 7;  
        if pf_char = 80 <*P*> or pf_char = 70 <*F*> then
        begin
          t_char := pf_char;  
          st2    := st2 - (pf_char shift 12);  
        end;  
        PF2 := t_char = 112 <*p*> or t_char = 80 <*P*>;  
        obs_rec.PF_state_f := obs_rec.PF_state_f
        _                     add ((PF2 extract 1) shift 1);  
        if -, PF2 and t_char <> 102 <*f*> and t_char <> 70 <*F*> then 
        read_as_obs_1 := 0;  
        if fp_mode(5) then
        begin
          write(out, nl, 1);  
          write_stn(out, st2);  
          write(out, sp, 1, if PF2 then <:p:> else <:f:>);  
        end;  
        obsrec.tpd_f:= false add (1 shift 6 + 3);  
        read(in, obs_r);  
        if fp_mode(5) then
        write(out, <<___-dddddd.ddd>, obs_r);  
        obsrec.y2:= obs_r/rg/rho;  
        read(in, obs_r);  
        if fp_mode(5) then
        write(out, <<___-dddddd.ddd>, obs_r);  
        obs_rec.z2 := obs_r/rg/rho;  
        obs_rec.me_1 := '-6*m_dir;  
        obs_rec.me_2 := '-6*mc_dir;  
        obs_rec.nr_f(0) := st1;  
        obs_rec.nr_f(1) := st2;  
        obs_count := 1;  
      end case 3;  

    end obs_type-cases;  
comment * page  ;

    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;  ;  
  end;  

  udt := save_udt;  

  read_as_obs := read_as_obs_1;  

end read_as_obs;  

end

if warning.yes
(mode 0.yes
message  read_as_obs not ok
lookup read_as_obs)

end

▶EOF◀