|  | 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: 6912 (0x1b00)
    Types: TextFile
    Names: »proctranstx«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ.  Detaljer om "HC8000" projekt.
    └─⟦0364f57e3⟧ 
        └─⟦80900d603⟧ »giprocfile« 
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦80900d603⟧ »giprocfile« 
            └─⟦this⟧ 
;       proctrans_tx          * page 1   27 09 77, 13.56;  
;  proc_transla
;  ************
if listing.yes
char 10 12 10
proc_transla = set 1
proc_transla = algol
external long procedure proc_transla
____________________________________
_             (proc_name);  
string         proc_name;  
begin 
  zone                  pz(128, 1, stderror);  
  integer array         entry(1:10);  
  array                 name_a(1:3);  
  integer       field   extnls, qbytes, date, time;  
  integer               size, nta, content, ng, ne, nb, segm, t;  
  boolean       field   content_f, glb_f, ext_f, next_f;  
  boolean               ext_info, ok;  
  long    array field   name_f;  
  array         field   rname_f;  
  move_string_1(name_a, 1, proc_name);  
  ok   := true;  
  segm := 0;  
  open(pz, 4, string pump(name_a), 0);  
  if monitor(42)lookup:(pz, 0, entry) = 0 then
  begin
    _
    comment fixed fields;  
    _____________________
    rname_f   :=
    name_f    :=   2;  
    content_f :=  17;  
    ext_f     :=  18;  
    next_f    := 504;  
\f
comment proctrans_tx          * page 2   27 09 77, 13.56
0 1 2 3 4 5 6 7 8 9 ;  
    comment status after lookup
    ___________________________
    entry_type      size  doc_name    nta  cont   ext_i
    _____________________________________________________
    head_proc        >0   e.g. disc    <0    4    used
    head_aux_proc    <0   head_proc    <0    4    not u
    head_own_var     <0   head_proc   >=0    4    not u
    cmpr_proc        <0   head_proc    <0  >=32   used
    cmpr_aux proc    <0   cmpr_proc    <0    4    not u 
    cmpr_own_var     <0   cmpr_proc    <0    4    not u
    syst_own_var      0   e.g. disc     0    4    not u
    syst_own_var is  treated  separately.   all entries 
    with size < 0 are looked up again. the position of 
    the external list is saved for head_proc and 
    cmpr_proc;  
    comment check for external proc or var;  
    _______________________________________
    content := entry.content_f extract 12;  
    if content = 4 or content >= 32 then
    begin
      size    := entry(1);  
      nta    := entry(6);  
      if size <> 0 then
      begin
        ext_info := size > 0 or content >= 32;  
        if ext_info then
        begin
          ext_f  := (entry.ext_f extract 12) + 2;  
          glb_f  := ext_f - 1;  
          qbytes := ext_f + 2;  
        end;  
        if size < 0 then
        begin
          if content >= 32 then segm := content - 32;  
          close(pz, true);  
          open(pz, 4, string pump(entry.rname_f), 0);  
\f
comment proctrans_tx          * page 3   27 09 77, 13.56
0 1 2 3 4 5 6 7 8 9 ;  
          if monitor(42)lookup:(pz, 0, entry) = 0 then
          begin
            _
            comment status after lookup
            ___________________________
            entry_type     size  doc_name    nta  cont   ext_f
            __________________________________________________
            head_aux_proc   >0   e.g. disc    <0    4    used
            head_own_var    >0   e.g. disc    <0    4    used
            cmpr_proc       >0   e.g. disc    <0    4    not u
            cmpr_aux_proc   <0   head_proc    <0  >=32   used
            cmpr_aux_var    <0   head_proc    <0  >=32   used
            all entries with  size < 0  are looked up again to
            get information  for loading the code from bs-dev.
            the position of the external list is taken when 
            not found before;  
            size := entry(1);  
            content := entry.content_f extract 12;  
            if -, ext_info then
            begin
              ext_f  := (entry.ext_f extract 12) + 2;  
              glb_f  := ext_f - 1;  
              qbytes := ext_f + 2;  
            end;  
            if size < 0 then
            begin
              if content >= 32 then segm := content - 32;  
              close(pz, true);  
              open(pz, 4, string pump(entry.rname_f), 0);  
              ok := monitor(42)lookup:(pz, 0, entry) = 0;  
            end last lookup;  
          end  
          else ok := false;  
        end;  
\f
comment proctrans_tx          * page 4   27 09 77, 13.56
0 1 2 3 4 5 6 7 8 9 ;  
        comment input of procedure code;  
        ________________________________
        if ok then
        begin 
          setposition(pz, 0, segm);  
          inrec_6(pz, 512);  
          ng := pz.glb_f extract 12;  
          ne := pz.ext_f extract 12;  ;  
          if qbytes >= 504 then
          begin comment qbytes on next segm;  
            t     := 10 - 512 + (pz.next_f extract 12);  
            qbytes := qbytes + t;  
            ext_f  := ext_f + t;  
            inrec_6(pz, 512);  
          end;  
          nb := pz.qbytes;  
          date := ext_f + 2*ng + 12*ne + nb + 4;  
          for t := 10 - 512 + (pz.next_f extract 12)
          _        while date >= 504 do
          begin
            date := date + t;  
            inrec_6(pz, 512);  
          end;  
          time := date + 2;  
          date := pz.date;  
          if time = 504 then
          begin
            time := 10 - 512 + time + (pz.next_f extract 12);  
            inrec_6(pz, 512);  
          end;  
          time := pz.time;  
        end input of proc code;  
\f
comment proctrans_tx          * page 5   27 09 77, 13.56
0 1 2 3 4 5 6 7 8 9 ;  
      end size <> 0
      else if nta = 0 then
      <*system_own_variable*>
      _______________________
      begin
        time := 0;  
        close(pz, true);  
        open(pz, 4, <:algol:>, 0);  
        if monitor(42)lookup:(pz, 0, entry) = 0 then
        begin
          date := ((entry(6) extract 12) - 1900)
          _      + (entry(6) shift (-12))*100;  
          time := 0;  
        end
        else 
        begin
          close(pz, true);  
          open(pz, 4, <:fortran:>, 0);  
          date := 
          if monitor(42)lookup:(pz, 0, entry) = 0 then
          (((entry(6) extract 12) - 1900)
          _      + (entry(6) shift (-12))*100)  
          else (-1);  
        end;  
      end system_own_var
      else
      date := -1;  
    end else date := -1;  
  end else date := -1;  
  if date > 0 and ok then
  begin
    if date > 311300 then
    <*to hell with ISO*>
    date := (date mod 100)*1 00 00
    _     +((date//100) mod 100)*100
    _     +  date//1 00 00;  
    proc_transla := extend 10000*date + (time + 70)//100;  
  end
  else
  proc_transla := -1;  
  close(pz, true);  
end proc_transla;  
end;  
if warning.yes
(mode 0.yes
message proc_transla not ok
lookup proc_transla)
▶EOF◀