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

⟦4f471181e⟧ TextFile

    Length: 18432 (0x4800)
    Types: TextFile
    Names: »writephtx«

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



;       otn ph proc           * page 1   29 11 79, 15.39;  

;  w r i t e _ p h
;  ***************
;  

write_ph = set 1 
write_ph = algol message.no

external
integer procedure write_ph(output, record, W, w_s, redf, st_no);  
________________________________________________________________

value   w_s;  
zone    output;  
real    array record, W, redf;  
integer w_s;  
long    procedure st_no;  

begin

  comment

  Function.
  _________

  Write_ph write a text representation of a  photogramme-
  try observation.
  Record format as the obs_zn of the  adjustment  system, 
  see the ico-procedure save_ph_obs  for  a  description.
  Text format as for read_steco  (gi program index 76092)
  and read_mono (78068).

  *

  Parameters.
  ___________

  write_ph       (integer, return value).  The number  of
  _               lines written on output.

  output         (zone, call and return value).    Output 
  _               zone, open and ready for character  out-
  _               put.

  record         (real array, call value).  The photogram-
  _               metric record to be written.

  W              (real array, call value). The differences
  _               between the adjusted and observed exter-
  _               nal coordinates, i.e. right hand side of
  _               observation equations.

  w_s            (integer, call value). The no of w's per
  _               point, i.e.:
  _               1 - height adjustment
  _               2 - horizontal adjustment
  _               3 - 3D-adjustment
  _               The typedecimal of the coordinates  is 
  _               added after a shift of 12.

  redf           (real array, call value). The  reduction 
  _               factor, used if < 1.0.
  ;  

\f



comment otn ph proc           * page 2   29 11 79, 15.39
0 1 2 3 4 5 6 7 8 9 ;  

  comment

  st_no          (long procedure, call value).   Transfor-
  _               mation of station index to  station  no.
  _               The procedure has one value integer  pa-
  _               rameter, the station index, and one  re-
  _               turn long parameter. The value  of  the 
  _               procedure is the station no (The return 
  _               value of the long parameter is not used).
  _               The procedure st_nmb of the  adj-module
  _               may be used.

  *
  ;  

  comment 

  *

  Externals.
  __________

  nl              character value of New Line
  prvers          text date of the procedure
  sp              character value of space
  write_geo_c     geo-type output of longs
  write_geo_r     geo output of reals
  write_ph_id     photo-record identification
  write_stn       output of station no

  *

  Identification.
  _______________

  write_ph

  WW, dec 1977, 
  KP, aug 1978, små blå søm, 
  KP, oct 1979, ret for number conventions
  WW, nov 1979, output of mono obs and resi

  ;  

\f



comment otn ph proc           * page 3   29 11 79, 15.39
0 1 2 3 4 5 6 7 8 9 ;  

  comment


  External representation of plane anblock orientations parameters.
  _________________________________________________________________

  In the coordinate adjustment  case  (i.e. job_type 2 and 3)
  the rhs-module compute a 6-parameter orientation of the an-  
  block model. The 6 parameters are:

  N0    )     External coordinates of 
  E0    )     the fictive point (x_m, y_m).
  x_m   )     The weighted mean of
  y_m   )     the observed model coordinates.
  m           The scale of the model.
  a           The rotation of the model (around the z-axis).

  The exate meaning of this parameters can be found from the
  procedure get_coord and the first lines of the sum-loop in
  the photogrammetry case in the obs_zn read-loop in the rhs
  module. This give the relations

  DN = N - N0
  DE = E - E0
  x  = x_obs - x_m
  y  = y_obs - y_m
  DN = x m cos a - y m sin a
  DE = x m sin a + y m cos a

  where (N, E) and (x_obs, y_obs) are the external  and  the 
  model coordinate of the point in question. Combining  this
  equations give

  N  = (x_obs - x_m) m cos a - (y_obs - y_m) m sin a + N0
  E  = (x_obs - x_m) m sin a + (y_obs - y_m) m cos a + E0

  Using (x_obs, y_obs) = (0, 0) in the above formular you 
  get the external coordinate of the main-point

  N  = - x_m m cos a + y_m m sin a + N0
  E  = - x_m m sin a - y_m m cos a + E0

  and the model is orientated using the 4 parameters

  N     )     External coordinates of the main point
  E     )    (i.e. the point with model coordinate (0, 0)).
  m           The scale of the model
  a           The rotation of the model.

  ;  

\f



comment otn ph proc           * page 4   29 11 79, 15.39
0 1 2 3 4 5 6 7 8 9 ;  

  boolean field bf, obs_count_f, clock,  
  _             obs_kind_f, obs_type_f;  
  integer field intf;  
  real    field rf, x_rot, y_rot, z_rot,  
  _             scale, x_m_f, y_m_f, z_m_f;  
  long    field lf, anb_date,  
  _             N0, E0, H0;  

  integer array field iaf;  
  real    array field x1, y1, x2, y2, rel;  
  integer array field stn;  

  boolean type_dec, c_type_dec;  
  integer a, char, chars, i, nls, length, 
  _       obs_type, q, t, oc_state;  
  real    m_cosa, m_sina, 
  _       x_m, y_m, z_m,  
  _       f2 <* segn of second coordinate *>;  
  long    l, exp_id,  
  _       N, E, H;  

  long    array id_array(1:2);  

  nls     := 0;  
  iaf     := 0;  

  comment fixed fields of photo obs_zn record;  
  obs_kind_f  := 5;  
  obs_type_f  := 6;  
  obs_count_f := 7;  
  clock   := 12;  
  a       := 34;  

  obs_type:= record.obs_type_f extract 12;  
  q       := record.obs_count_f extract 12;  
  bf      := 10;  
  oc_state:= record.bf extract 12;  

\f



comment otn ph proc           * page 5   29 11 79, 15.39
0 1 2 3 4 5 6 7 8 9 ;  

  if record.obs_kind_f extract 12 = 6 <* anblock *>
  and 1<= obs_type and obs_type <= 3 then
  begin

    comment variable fields in photo obs_zn;  
    x_m_f   := a + (6 + 4 * obs_type) * q + 4;  
    y_m_f   := x_m_f + 4;  
    z_m_f   := y_m_f + 4;  
    N_0     := z_m_f + 4;  
    E_0     := N_0   + 4;  
    H_0     := E_0   + 4;  
    x_rot   := H_0   + 4;  
    y_rot   := x_rot + 4;  
    z_rot   := y_rot + 4;  
    scale   := z_rot + 4;  

    comment date of messurement, operator id and serial no;  

    id_array(1):= long record(20//4);  
    id_array(2):= 0;  

    i:= 1;  
    chars:= write(out_put, nl, 2, 
    <<   zd dd dd>, record.iaf(14/2) <*mes date *>, 
    sp, 3, string id_array(increase(i)));  
    nls:= nls + 2;  
    write(out_put, sp, 2 + 11 + 3 + 7 - chars, 
    <<   ddd>, record.iaf(16//2));  

    c_type_dec := false add (w_s shift (-12));  
    w_s        := w_s extract 12;  

\f



comment otn ph proc           * page 6   29 11 79, 15.39
0 1 2 3 4 5 6 7 8 9 ;  

    comment exposure identifications;  

    l:= 0;  
    if ( if   record.iaf(1) > scale 
    _    then record.iaf((scale + 10) // 2) <> 0
    _    else false ) 
    then
    begin
      comment write exp id;  
      for lf:= (scale + 4), (scale + 8) do
      begin
        exp_id:= record.lf;  
        if (lf  =  (scale +  4) or (
        record.iaf((scale + 10)//2) <>
        record.iaf((scale + 12)//2) <* date *> or 
        record.iaf((scale +  2)//2) shift (-7) <>
        record.iaf((scale +  6)//2) shift (-7) <* route  *>)) then
        begin
          comment write new date, route and camera constant;  
          write(out_put, nl, 1, <<   zd dd dd>, 
          record.iaf((if lf = (scale + 4)
          _           then (scale + 10)
          _           else (scale + 12)) // 2 ));  
          nls := nls + 1;  
          i   := exp_id shift (-36) <* route no *>;  
          char:= exp_id shift (-31) extract 5 add (1 shift 6);  
          if ((64 < char and char <  94)
          or  (96 < char and char < 126)) then
          write(out_put, sp, 4, <<dddd>, i, false add char, 1)
          else
          write(out_put, << dddd>, i, <:.:>, <<d>, char extract 6);  

          rf:= lf + 12 <* camera constant *>;  
          write(out_put, <<___ddd.ddd>, record.rf);  
        end new;  

        comment picture no and sub-no;  
        write(out_put, sp, 5, <<dd>, exp_id shift (-19) extract 12);  
        i:= exp_id extract 12;  
        if i > 0 then
        write(out_put, <:.:>, <<d>, i);  
      end for lf;  
    end
    else
    begin comment no exp id in record;  
      write(out_put, <:  <10>  :>);  
      nls := nls + 1;  
    end;  

\f



comment otn ph proc           * page 7   29 11 79, 15.39
0 1 2 3 4 5 6 7 8 9 ;  

    comment write abs ori elem;  

    if oc_state > 0 then
    begin
      comment write abs orientation;  
      N:= record.N0;  
      E:= record.E0;  
      H:= record.H0;  
      comment ON TEST : :  
      write(out, <<  -d.dddddd'-d>, <:<10>write ph test output:>, 
      <:<10>N0, E0      :>, record.N0, record.E0, 
      <:<10>N, E        :>, N, E, 
      <:<10>mcosa, msina:>, mcosa, msina, 
      <:<10>x<95>m, y<95>m    :>, x_m, y_m);  

      write(out_put, <:<10>Scale     : :>, <<  -d.dddddd'd>,  
      _             record.scale / '6, sp, 3,   
      _             <:<10>Main point: :>);  
      nls:= nls + 2;  
      type_dec:= false add 8 shift 6 add 3;  
      write_geo_c(out_put, N, c_type_dec);  
      write(out_put, sp, 3);  
      write_geo_c(out_put, E, c_type_dec);  
      if oc_state > 1 then
      begin
        write_geo(out_put, H, type_dec);  
      end oc_state > 1;  
      write(out_put, sp, 3,  
      _             <:<10>Rotation  : :>);  
      nls:= nls + 1;  
      if oc_state > 1 then
      begin
        write_geo_c_r(out_put, record.x_rot, false add 1 shift 6);  
        write_geo_c_r(out_put, record.y_rot, false add 1 shift 6);  
      end oc_state > 1;  
      write_geo_r(out_put, record.z_rot, false add 1 shift 6);  
    end
    else
    begin
      comment no abs orientation in record;  
      write(out_put, <:  <10>  :>);  
      nls:= nls + 1;  
    end;  

\f



comment otn ph proc           * page 8   29 11 79, 15.39
0 1 2 3 4 5 6 7 8 9 ;  

    rel:= rf := scale + 24 <* bx *>;  

    comment ON TEST : :
    write(out, <:<10>rel, scale :>, rel, scale);  

    if ( if   record.iaf(1) > rf
    _    then abs(record.rf) > 100
    _    else false )
    then
    begin
      comment relativ orientation;  

      write(out_put, nl, 1, sp, 11, 
      <<  -ddddd.ddd>, 
      record.rel(0), record.rel(1), record.rel(2), 
      <<  -d.ddddddd>, nl, 1, sp, 11, 
      record.rel(3), record.rel(4), record.rel(5));  
      rf:= 24;  
      write(out_put, <<  ddd>, record.rf, sp, 3);  
      nls:= nls + 2;  
    end 
    else
    begin
      comment no relativ orientation in record;  
      write(out_put, <:  <10>  :>);  
      nls:= nls + 1;  
    end;  

\f



comment otn ph proc           * page 9   29 11 79, 15.39
0 1 2 3 4 5 6 7 8 9 ;  

    comment messurements;  

    bf   := 7;  
    q    := record.bf extract 12;  

    stn  := a;  
    x1   := a +  2 * q;  
    y1   := a +  6 * q;  
    x2   := a + 10 * q;  
    y2   := a + 14 * q;  
    f2   := if record.clock then 1 else -1;  

    comment ON TEST:  :
    write(out, <:<10>f2    : :>, f2, 
    _          <:<10>clock : :>, 
    _          if record.clock then <: true:> else <: false:>);  

    for t:= 1 step 1 until q do
    begin

      if t mod 5 = 1 then
      begin
        write(out_put, nl, 2);  
        nls:= nls + 2;  
      end
      else
      begin
        write(out_put, nl, 1);  
        nls:= nls + 1;  
      end;  

      comment ON TEST : :
      bf <* dummy *> :=
      write(out, nl, 1, << ddd>, t, <<  -ddd ddd>, record.stn(t)) +
      write_stn(out, st_no(record.stn(t), l));  

      write_stn(out_put, st_no(record.stn(t), l));  
      write(out_put, <<  -ddddd.ddd>, 
      record.x1(t), record.y1(t) * f2);  
      case obs_type of
      begin
        ;  
        write(out_put, <<  -ddddd.ddd>, record.x2(t));  
        write(out_put, <<  -ddddd.ddd>, record.x2(t), record.y2(t));  
      end;  
      write(out_put, sp, 3);  

\f



comment otn ph proc           * page 10   29 11 79, 15.39
0 1 2 3 4 5 6 7 8 9 ;  

      case w_s of
      begin

        begin
          comment case 1: height adjustment;  
          write(out_put, <:<10>*:>, sp, 10 + 2 * 12, 
          _             <<  -ddddd.ddd>, W(t));  
          nls:= nls + 1;  
          comment check red fact;  
          if redf(t) < 1 then write(out_put, <<  -.dd'-dd>, redf(t));  
          write(out_put, <:  ;  :>);  
        end case 1;  

        begin
          comment case 2: horizontal adjustment;  
          write(out_put, <:<10>*:>, sp, 10, <<  -ddddd.ddd>, 
          _             W(2*t-1), W(2*t));  
          nls:= nls + 1;  
          comment check red fakt;  
          if redf(t) < 1 then write(out_put, <<  -.dd'-dd>, redf(t));  
          write(out_put, <:  ;  :>);  
        end case 2;  

        begin
          comment case 3: 3D-adjustment;  
          write(out_put, <:<10>*:>, sp, 10, <<__-ddddd.ddd>, 
          W(3*t-2), W(3*t-1), W(3*t));  
          if redf(t) < 1 then write(out_put, <<__-.dd'-dd>, redf(t));  
          write(out_put, <:__;:>);  
        end case 3;  

      end case w_s of;  
    end for t;  

    write(out_put, <:<10>__________0<10><10>:>);  
    nls:= nls + 3;  
  end
  else

\f



<*       otn ph proc           * page 11   29 11 79, 15.39
0 1 2 3 4 5 6 7 8 9 *>

  if record.obs_kind_f extract 12 = 14 <* mono *> then
  begin
    comment fields in mono record;  
    boolean field sets_f, oc_state_f, 
    _             tpd_obs_f, sub_f, cam_tpd, rot_tpd;  
    integer field length, sum, exp_day, cam;  
    long    field ident_f;  
    real    field m_f, cc_f;  

    boolean array field last_f;  
    integer array field model_no, model_date, st_nmb;  
    long    array field operator, ori_f;  
    real    array field x, y;  

    procedure set_var_fields;  
    begin
      integer sub, t;  
      sub:= record.sub_f extract 12;  
      t  := 4 * q;  
      x  := st_nmb + 2*q;  
      y  := x      + t;  
      model_no   := y + t;  
      t  := sub * 2;  
      model_date := model_no   + t;  
      operator   := model_date + t;  
      last_f     := operator   + 2 * t;  
      ori_f      := last_f + (sub + 1) // 2 * 2;  
      cam_tpd    := ori_f + 6*4 + 1;  
      rot_tpd    := cam_tpd + 1;  
    end set_var_fields;  

    comment init of fixed mono fields;  
    sets_f     := 9;  
    oc_state_f := 10;  
    tpd_obs_f  := 11;  
    sub_f      := 12;  
    ident_f    := 16;  
    exp_day    := 18;  
    cam        := 20;  
    m_f        := 28;  
    cc_f       := 32;  
    st_nmb     := 34;  

\f



comment otn ph proc           * page 12   29 11 79, 15.39
0 1 2 3 4 5 6 7 8 9 ;  

    if record.obs_kind_f extract 12 = 14 <* mono *> then
    begin
      boolean tpd_obs;  
      integer object_no, sub_no, sub, last, t, chars;  
      long array txt(1:2);  

      f2        := 1 <* T E M P   G R I S *>;  
      chars     := 0;  
      tpd_obs   := record.tpd_obs_f;  
      tpd_obs   := false add (8 shift 6 add 3) <* G R I S *>;  
      sub       := record.sub_f extract 12;  
      object_no := 1;  
      txt(2)    := 0;  
      set_var_fields;  

      chars:= chars + write(out_put, nl, 3)
      _             + wr_ph_id(out_put, record)
      _             + write(out_put, <: a :>, 
      _                     <<   zd dd dd>, record.exp_day, 
      _                     <<   dddd>, record.cam, 
      _                     <<   -ddd.ddd>, record.cc_f);  
      nls:= nls + 3;  
 
comment ON TEST: ;
if fp_mode(2) then
t:= write(out, nl, 1)
+   wr_ph_id(out, record)
+   write(out, sp, 2, q, sub, x, y, model_no, model_date, ori_f, rot_tpd);

      if record.oc_state_f extract 12 > 0 then
      begin
        write(out_put, <:<10>Camera _ ::>);  
        nls:= nls + 1;  
        for t:= 1 step 1 until 3 do
        write_geo(out_put, record.ori_f(t), <*record.cam_tpd*>  
        <* T E M P   G R I S *> false add 8 shift 6 add 0);
        write(out_put, <:<10>Rotation ::>);  
        nls:= nls + 1;  
        for t:= 4 step 1 until 6 do
        write_geo_c_r(out_put, real record.ori_f(t), <*record.rot_tpd*>  
        <* T E M P   G R I S *>    false add 1 shift 6 add 2);
      end;  

\f



comment otn ph proc           * page 13   29 11 79, 15.39
0 1 2 3 4 5 6 7 8 9 ;  

      for sub_no:= 1 step 1 until sub do
      begin
        txt(1):= record.operator(sub_no);  
        chars:= chars +
        write(out_put, <:<10><10>M:>, <<d>, record.model_no(sub_no), 
        <<  zd dd dd>, record.model_date(sub_no), 
        sp, 3, txt);  
        nls:= nls + 2;  
        last:= record.last_f(sub_no) extract 12;  
        t:= 0;  
        for object_no:= object_no, object_no + 1
        while object_no <= last 
        and   object_no <= q <*temp gris*>
        do
        begin
          t:= t + 1;  
          chars:= chars +
          write(out_put, nl, if t mod 5 = 0 then 2 else 1) +  
          write_stn(out_put, stno(record.st_nmb(object_no), l)) +  
          write(out_put, sp, 3) +  
          write_geo_r(out_put, record.x(object_no), tpd_obs) +  
          write(out_put, sp, 3) +  
          write_geo_r(out_put, f2 * record.y(object_no), tpd_obs) +  
          write(out_put, sp, 3, <:<10>*:>, sp, 10+3) +  
          write_geo_r(out_put, W(2*object_no-1), tpd_obs) +
          write(out_put, sp, 3) +
          write_geo_r(out_put, W(2*object_no), tpd_obs) +
          (if redf(object_no) < 1
          then write(out_put, sp, 3, << -.dd'-dd>, 
          _               redf(object_no), sp, 3)
          else write(out_put, sp, 3)) +
          write(out_put, <:;:>);  
          nls:= nls + (if t mod 5 = 0 then 3 else 2);  
        end for object_no;  
      end for sub_no;  
    end else system(9,  record.obs_kind_f extract 12,   
    _              <:<10>wrphkind:>);  
  end write mono obs+resi  
  else
  write(out, <:<10>***write<95>ph obs kind/type error:>, 
  _          record.obs_kind_f extract 12, obs_type);  

  prvers:= 29 11 79  15 39;  
  write_ph:= nls;  

end write_ph;  

end

if warning.yes
(mode 0.yes
message write ph not ok
lookup write_ph)



end
finis
▶EOF◀