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

⟦3e42a4d69⟧ TextFile

    Length: 6912 (0x1b00)
    Types: TextFile
    Names: »proctranstx«

Derivation

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

TextFile



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