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

⟦a01a53ab7⟧ TextFile

    Length: 19968 (0x4e00)
    Types: TextFile
    Names: »catcontracx«

Derivation

└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
    └─⟦4334b4c0b⟧ 
        └─⟦this⟧ »catcontracx« 
        └─⟦this⟧ »gi/catcontracx« 
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ.  Detaljer om "HC8000" projekt.
    └─⟦0364f57e3⟧ 
        └─⟦baac87bee⟧ »gi« 
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
    └─⟦4334b4c0b⟧ 
        └─⟦baac87bee⟧ »gi« 
            └─⟦this⟧ 

TextFile



;        catsort contract     * page 1   12 08 80, 10.36 ;

cat_contract = set 1

cat_contract = algol

begin

<*

call :
----
_       cat_contract <basespec> 0/1
<res> = cat_contract <basespec> 0/1

<res>       ::= resultfile
_               when no <res> is specified then current out is used.
_               if not present then set on user scope or lover.

<basespec> ::= base.(project//user//login//temp)
_               default is system
_ NOTE          only content of contractfiles with catbase containing
_ NOTE          the standarbase (i.e loginbase under boss) is dis-
_ NOTE          played.

function :
--------   All visible contract entryes is lookup in the catalog
_          and the content of the contractfiles are sorted :
_               1 after increasing lower base
_               2 after decreasing upper base
_               3 after decreasing permanentkey
_               4 contract_catalog_entries before contententries
_               5 in aphabetic order

The cat_contract_sort list contain the usual first line
describing the entry and a second line :
for contract files :
_            ; <entries> <texts> <procs> <bins> <nonars>
for contarcted entries
_            ; <contractfilename> <pos>

*>

\f



comment  catsort contract     * page 2   12 08 80, 10.36
0 1 2 3 4 5 6 7 8 9 ;  

boolean        check_base, test;  
integer        no_of_entries, i, j, length, 
_              segm, segm_bytes, new_share, sort_lng;  
real    array  res_name, param(1:2), sort_names(1:6);  
long    array  sort_base, std_base_long(1:2);  
integer array  std_base, base(1:2), bases(1:8);  
integer procedure out_shortclock(ud, cl);  
zone                             ud;  
integer                              cl;  
begin
real r;  
outshortclock := write(ud, <:d.:>, <<zddddd>, 
systime(4, (if cl>0 then cl
else cl + extend 1 shift 24)
/625*1 shift 15+12, r), 
<:.:>, <<zddd>, r/100);  
end outshortclck;  

segm       := 3;  
segm_bytes := segm * 512;  
sort_lng   := 48;  
new_share  := ((segm_bytes // sort_lng) - 1) * sort_lng;  

system(11)bases:(i, bases);  
std_base(1)      := bases(1);  
std_base(2)      := bases(2);  
std_base_long(1) := extend bases(1);  
std_base_long(2) := extend bases(2);  

res_name(1)      :=
res_name(2)      := real <::>;  

check_base       := false;  
test             := false;  

\f



comment  catsort contract     * page 3   12 08 80, 10.36
0 1 2 3 4 5 6 7 8 9 ;  

i := read_param(param);  
if i = -1 then
begin
res_name(1) := param(1);  
res_name(2) := param(2);  
i := read_param(param);  
end;  

if i = 2 then
begin
if param(1) = real <:base:> then
begin
  if read_param(param) <> 4 then
  _  system(9)alarm:(2, <:<10>***base:>);  
  i := nr_string( j, 4, string param(1), case j of (
  _               <:temp:>, <:user:>, <:proj:>, <:syst:>));  
  if j = 1 then system(9, 2, <:<10>***scope:>);  
  check_base := j < 5;  
  if check_base then
  begin
    sort_base(1) := extend bases(i+i-1);  
    sort_base(2) := extend bases(i+i);  
  end;  
end
else system(9, 1, <:<10>***scope:>);  
end;  

\f



comment  catsort contract     * page 4   12 08 80, 10.36
0 1 2 3 4 5 6 7 8 9 ;  

begin

zone   cat(128, 1, std_error), 
_      set_base(1, 1, std_error), 
_      sort(128*segm, 1, std_error);  
integer array        tail(1:10);  
integer array field  cat_w, con_w,  sor_w;  
long    array field  name, con_name;  
boolean              shift_bases;  
integer              permkey, entries, text, proc, bin, non, 
_                    c_skift, q;  
long                 b_lo, b_hi;  

open(set_base, 0, <::>, 0);  

open(cat, 4, <:catalog:>, 0);  
if monitor(42)lookup:(cat, i, tail) <> 0 then
_  system(9)alarm:(0, <:<10>*catalog:>);  

entries := tail(1);  

begin
  long array field  lf;  

  long array        devi(1:12), scope(1:2);  

  lf := 0;  
  for i := 1 step 1 until 6 do
  begin
    sort_names.lf(i) :=
    devi(i+i)        := long <::>;  
    devi(i+i-1)      := long(case i of (<:disc5:>, 
    _                   <:disc4:>, <:disc3:>, <:disc2:>, 
    _                   <:disc1:>, <:disc:>));  
  end;  
  scope(1) := long <:temp:>;  
  scope(2) := long <::>;  
  if set_bsarea(sort_names.lf, devi, scope, entries, 
  _             11 shift 12, true) <> 0 then
  _  system(9, 0, <:<10>*** set:>);  
  sort_names(3) := sort_names(1);  
  sort_names(4) := sort_names(2);  
end;  

open(sort, 4, string pump(sort_names), 0);  

no_of_entries := 0;  
length        := 0;  

cat_w     := 476;  
sor_w     := new_share;  
name      := 6;  
con_name  := 38;  

\f



comment  catsort contract     * page 5   12 08 80, 10.36
0 1 2 3 4 5 6 7 8 9 ;  

for q := 15 * entries step -1 until 1 do
begin
  zone  contr(128, 1, contr_error);  

  procedure contr_error(z, s, b);  
  zone                  z;  
  integer                  s, b;  
  begin
    long array field  devi_f;  

    devi_f := 16;  

    write(out, nl, 2, cat.cat_w.name, cat.cat_w(8), 
    _     sp, 1, cat.cat_w.devi_f, sp, 1);  
    out_short_clock(out, cat.cat_w(13));  
    for j := 14 step 1 until 17 do
    if cat.cat_w(j) < 4096 then
    _  write(out, cat.cat_w(j)) else
    _  write(out, <<d>, sp, 1, cat.cat_w(j) shift (-12), 
    _        <:.:>, cat.cat_w(j) extract 12);  
    write(out, nl, 1, sp, 11, <:;:>, cat.cat_w(1) shift (-12), 
    _     cat.cat_w(1) shift (-3) extract 9, cat.cat_w(1) extract 3, 
    _     cat.cat_w(2), cat.cat_w(3), nl, 1, 
    _     <:errorstatus::>);  
    write_status(out, s);  
    set_position(out, 0, 0);  
    if cat.cat_w(1) extract 3 <= 3 then go_to CONT
    else go_to CONT1;  

  end;  

  if cat_w = 476 then
  begin
    inrec6(cat, 512);  
    cat_w := 0;  
  end
  else cat_w := cat_w + 34;  

\f



comment  catsort contract     * page 6   12 08 80, 10.36
0 1 2 3 4 5 6 7 8 9 ;  

  b_lo := extend cat.cat_w(2);  
  b_hi := extend cat.cat_w(3);  
  if b_lo <> -1 or b_hi <> -1 then
  begin

    if cat.cat_w(16) shift(-12) = 10 then
    begin

      if (
      _  if check_base
      _  then sort_base(1) <= b_lo and
      _       sort_base(2) >= b_hi 
      _  else true)
      then
      begin

        shift_bases := std_base_long(1) < b_lo 
        _           or std_base_long(2) > b_hi;  

        if shift_bases then
        begin
          base(1) := cat.cat_w(2);  
          base(2) := cat.cat_w(3);  
          i := monitor(72, set_base, j, base);  
        end
        else
        i := 0;  

        if i = 0 then
        begin

          entries  :=
          text     :=
          proc     :=
          bin      :=
          non      := 0;  

          perm_key := (cat.cat_w(1) extract 2) * 2;  

          open(contr, 4, cat.cat_w.name, (-1 shift 2) -(1 shift 5));  
          inrec_6(contr, 512);  
          if shift_bases then monitor(72, set_base, j, std_base);  

          entries := contr(128) extract 24;  
          con_w   := -34;  
          c_skift := if contr.con_w(18) shift (-12) = (entries+14)//15
          _          then (-12) else (-6);  

          no_of_entries := no_of_entries + entries + 1;  

\f



comment  catsort contract     * page 7   12 08 80, 10.36
0 1 2 3 4 5 6 7 8 9 ;  

          for j := entries step -1 until 1 do
          begin

            if con_w = 476 then
            begin
              inrec_6(contr, 512);  
              con_w := 0;  
            end
            else con_w := con_w + 34;  

            if contr.con_w(8) <= 0 then non := non + 1 else
            if contr.con_w(16) = 0 then text := text + 1 else
            if contr.con_w(16) shift (-12) = 4 then proc := proc + 1
            else bin := bin + 1;  

            if sor_w = new_share then
            begin
              outrec_6(sort, segm_bytes);  
              length := length + segm;  
              sor_w  := 0;  
            end
            else sor_w := sor_w + sort_lng;  

            for i := 4 step 1 until 17 do
            _   sort.sor_w(i) := contr.con_w(i);  
            sort.sor_w(1)         := perm_key;  
            sort.sor_w.name(0)    := b_lo;  
            sort.sor_w.con_name(0) := b_hi;  
            sort.sor_w.con_name(1) := cat.cat_w.name(1);  
            sort.sor_w.con_name(2) := cat.cat_w.name(2);  
            sort.sor_w(24)        :=
            _          contr.con_w(1) shift c_skift;  

          end;  

          CONT:

          if sor_w = new_share then
          begin
            outrec_6(sort, segm_bytes);  
            length := length + segm;  
            sor_w  := 0;  
          end
          else sor_w := sor_w + sort_lng;  

          for i := 2 step 1 until 17 do
          _   sort.sor_w(i) := cat.cat_w(i);  
          sort.sor_w(1)  := permkey + 1;  
          sort.sor_w.name(0) := b_lo;  
          sort.sor_w.con_name(0) := b_hi;  
          sort.sor_w(20) := entries;  
          sort.sor_w(21) := text;  
          sort.sor_w(22) := proc;  
          sort.sor_w(23) := bin;  
          sort.sor_w(24) := non;  

          CONT1:

          if shift_bases then monitor(72, set_base, 0, base);  
          close(contr, true);  
          if shift_bases then monitor(72, set_base, 0, std_base);  

\f



comment  catsort contract     * page 8   12 08 80, 10.36
0 1 2 3 4 5 6 7 8 9 ;  

        end
        else
        begin
          if shift_bases then monitor(72, set_base, j, std_base);  
          if test then
          begin
            write(out, nl, 1, cat.cat_w.name, b_lo, b_hi, i);  
          end;  
        end;  
      end
      else if test then
      begin
        write(out, nl, 1, cat.cat_w.name, b_lo, b_hi, 
        _     if check_base then <:checkbase:> else <:notcheckbase:>);  
      end;  

    end contract entry ;  

  end b_lo = b_hi = -1;  

end q_step;  

close(cat, true);  

changerec_6(sort, sor_w);  
monitor(42)lookup:(sort, 0, tail);  
tail(1) := length;  
monitor(44)change_entry:(sort, 0, tail);  
close(sort, false);  

end;  

\f



comment  catsort contract     * page 9   12 08 80, 10.36
0 1 2 3 4 5 6 7 8 9 ;  

if no_of_entries > 0 then
begin  <* catsort *>
boolean        sort_ok;  
integer array  par(1:7), keydesc(1:5, 1:2);  

par(1) := segm;  <*segs pr inblock *>
par(2) :=    1;  <* clear inputfile *>
par(3) := segm;  <* segs pr outblock *>
par(4) :=    1;  <* fixed length *>
par(5) :=   sort_lng;  <* length *>
par(6) :=    5;  <* 5 keys *>
par(7) :=    0;  <* no comment printed *>

key_desc(1, 1) := +3;  <* ascending long *>
key_desc(1, 2) :=  6;  <* base low *>
key_desc(2, 1) := -3;  <* decending long *>
key_desc(2, 2) := 38;  <* base high *>
key_desc(3, 1) := -2;  <* decending integer *>
key_desc(3, 2) :=  2;  <* perm_key *>
key_desc(4, 1) := +3;  <* increasing long *>
key_desc(4, 2) := 10;  <* name(1) *>
key_desc(5, 1) := +3;  <* increasing long *>
key_desc(5, 2) := 14;  <* name(2) *>

md_sort_proc(par, key_desc, sort_names, 0, no_of_entries, 
_            i, j);  
if i <> 1 then
begin
  long array field  nf;  
  nf := 16;  
  write(out, nl, 2, <:*** md sort error : :>, nl, 1, 
  _     case (i-1) of (
  _     _    <:not sufficient core. needed core :>, 
  _     _    <:not sufficient backingstore. needed segm :>, 
  _     _    <:unknown name of backingstore :>), 
  _     j, if i = 4 then string pump(sort_names.nf) else <::>, nl, 1);  
  system(9)alarm:(0, <:<10>**mdsort:>);  
end;  

end;  

\f



comment  catsort contract     * page 10   12 08 80, 10.36
0 1 2 3 4 5 6 7 8 9 ;  

if no_of_entries > 0 then
begin <* output module *>

procedure print(ud);  
zone            ud;  
begin
  zone sort(128*segm, 1, std_error);  
  long                 b_lo, b_hi;  
  integer              perm_key, mode, lines, sub_lines, chars, 
  _                    tot_segm, tot_contr, loc_contr, loc_entr;  
  integer array        tail(1:10);  
  integer array field  sor_w;  
  long    array field  name, con_name, devi_f;  

  boolean procedure out_mode_kind(h_tail);  
  ________________________________________
  integer array                   h_tail;  
  begin
    integer           i, j, mdk;  
    long array field  name;  

    name := 16;  
    j    := -1;  
    mdk  := h_tail(8) extract 23;  
    for i := 1 step 1 until 21 do
    if case i of ( 0, 4, 8, 10, 2 shift 12 + 10, 4 shift 12 + 10, 
    _    6 shift 12 + 10, 12, 2 shift 12 + 12, 4 shift 12 + 12, 
    _    6 shift 12 + 12, 8 shift 12 + 12, 14, 16, 8 shift 12 + 16, 
    _    10 shift 12 + 16, 18, 2 shift 12 + 18, 4 shift 12 + 18, 
    _    6 shift 12 + 18, 20) = mdk then
    begin
      j := i;  
      i := 21;  
    end;  

    i := if j > 0 then
    _  write(ud, case j of (<:ip:>, <:bs:>, <:tw:>, <:tro:>, 
    _        <:tre:>, <:trn:>, <:trf:>, <:tpo:>, <:tpe:>, <:tpn:>, 
    _        <:tpf:>, <:tpt:>,  <:lp:>, <:crb:>, <:crd:>, <:crc:>, 
    _        <:mto:>, <:mte:>, <:nrz:>, <:nrze:>, <:pl:>))
    else
    write(ud, <<d>, 1 shift 11 + mdk shift (-12), 
    _     <:.:>, mdk extract 12);  
    chars := (if h_tail(9) = 0 or h_tail(9) = 1 then
    _  write(ud, << z>, h_tail(9))
    else write(ud, sp, 1, h_tail.name)) + chars + i + 1;  
    out_char(ud, 32);  
    out_mode_kind := j <> 1 and j <> 2;  
  end;  

\f



comment  catsort contract     * page 11   12 08 80, 10.36
0 1 2 3 4 5 6 7 8 9 ;  

  procedure write_head(ud);  
  zone ud;  
  begin
    own integer  page;  

    page := page + 1;  
    write(ud, nl, 1, ff, 1, nl, 1, <:contract catsort page:>, 
    _     page, sp, 22);  
    out_short_clock(ud, short_clock);  
    write(ud, nl, 2);  
    lines := 3;  
    sub_lines := 0;  
  end;  

  name      := 6;  
  devi_f    := 16;  
  con_name  := 38;  
  tot_segm  := 
  tot_contr :=
  loc_contr :=
  loc_entr  := 0;  
  sub_lines := 0;  
  sor_w     := -sort_lng;  

  open(sort, 4, sort_names, 0);  
  monitor(42)lookup:(sort, 0, tail);  
  tail(1) := ((tail(1) + segm - 1) // segm) * segm;  
  monitor(44)change_entry:(sort, 0, tail);  

  in_rec6(sort, segm_bytes);  
  b_lo := sort.name(0) + 1;  
  b_hi := sort.con_name(0) - 1;  

  for i := 1 step 1 until no_of_entries do
  begin

    if sor_w = new_share then
    begin
      inrec_6(sort, segm_bytes);  
      sor_w := 0;  
    end
    else sor_w := sor_w + sort_lng;  

    if b_lo <> sort.sor_w.name(0) or
    _  b_hi <> sort.sor_w.con_name(0) then
    begin
      perm_key := sort.sor_w(1);  
      mode     := (perm_key mod 2) + 1;  
      b_lo     := sort.sor_w.name(0);  
      b_hi     := sort.sor_w.con_name(0);  
      if loc_contr > 0 then
      write(ud, nl, 1, <:contract<95>files:>, <<__dddd>, loc_contr, 
      _     nl, 1, <:sub<95>entries   :>, loc_entr, nl, 1);  
      tot_contr := tot_contr + loc_contr;  
      loc_contr :=
      loc_entr  := 0;  
      write_head(ud);  
      write(ud, sp, 4, <:base::>, b_lo, b_hi, sp, 1, 
      _     case (perm_key//2+1) of (<:temp:>, <:login:>, 
      _     _    <:perm:>, <:perm:>), nl, 2, 
      _     sp, 4, <:contract<95>files::>, nl, 1);  
      lines := lines + 2;  
    end;  

\f



comment  catsort contract     * page 12   12 08 80, 10.36
0 1 2 3 4 5 6 7 8 9 ;  

    if perm_key <> sort.sor_w(1) then
    begin
      perm_key := sort.sor_w(1);  
      mode     := (perm_key mod 2) + 1;  

      case mode of
      begin

        begin
          if lines > 54 then write_head(ud)
          else lines := lines + write(ud, nl, 1)+sub_lines;  
          sub_lines := 0;  
          write(ud, sp, 4, 
          _     <:sub<95>entries::>, nl, 1);  
          lines := lines + 1;  
        end;  

        begin
          write_head(ud);  
          write(ud, sp, 4, <:base::>, b_lo, b_hi, sp, 1, 
          _     case (perm_key//2+1) of (<:temp:>, 
          _     _    <:login:>, <:perm:>, <:perm:>), nl, 2, 
          _     sp, 4, <:contract<95>files:>, nl, 1);  
          lines := lines + 2;  
        end;  

      end cases;  

    end new perm_key;  

    if sub_lines >= 5 then
    begin
      lines := lines + sublines;  
      sub_lines := 0;  
      if lines > 63 then write_head(ud);  
    end;  

    chars := write(ud, true, 12, sort.sor_w.name);  
    j := 14;  
    if sort.sor_w(8) >= 0 then 
    begin
      chars := write(ud, <<ddddd>, sort.sor_w(8), sp, 1, 
      _        true, 6, sort.sor_w.devi_f) + chars; 
      if sort.sor_w(16) shift (-12) <> 4 and sort.sor_w(16) shift (-12) < 32 then
      _  chars := out_shortclock(ud, sort.sor_w(13)) + chars else j := 13;
    end
    else
    if out_mode_kind(sort.sor_w) then
    _  chars := out_short_clock(ud, sort.sor_w(13)) + chars
    _  else j := 13;  

    for j := j step 1 until 17 do
    chars := (if sort.sor_w(j) < 4096 then
    _  write(ud, sp, 1, <<d>, sort.sor_w(j))
    else write(ud, sp, 1, <<d>, sort.sor_w(j) shift (-12), 
    _          <:.:>, sort.sor_w(j) extract 12)) + chars;  

\f



comment  catsort contract     * page 13   12 08 80, 10.36
0 1 2 3 4 5 6 7 8 9 ;  

    case mode of
    begin

      begin
        loc_entr := loc_entr + 1;  
        if chars < 53 then write(ud, sp, 52 - chars)
        else sub_lines := write(ud, nl, 1, sp, 52)*0+sub_lines+1;  
        write(ud, <:; :>, true, 12, sort.sor_w.con_name, 
        _     <<dddddd>, sort.sor_w(24), nl, 1);
      end;  

      begin
        tot_segm  := tot_segm + sort.sor_w(8);  
        loc_contr := loc_contr + 1;  
        if chars < 53 and sort.sor_w(20) = sort.sor_w(21) then
        _  write(ud, sp, 52 - chars, <:;:>, sort.sor_w(20), 
        _        <: textentries:>, nl, 1)
        else
        begin
          sub_lines := sub_lines + 1;  
          write(ud, nl, 1, sp, 12, <:;:>);  
          if sort.sor_w(20) = sort.sor_w(21) then
          _  write(ud, sort.sor_w(20), <: textentries:>, nl, 1)
          else
          begin
            for j := 1 step 1 until 5 do
            if sort.sor_w(19+j) > 0 then
            _  write(ud, sort.sor_w(19+j), 
            _        case j of(<: entries:>, <: texts:>, <: procs:>, 
            _        <: bins:>, <: nonar:>), <:,:>);  
            write(ud, nl, 1);  
          end;  
        end;  

      end;  

    end mode;  

    sub_lines := sub_lines + 1;  

  end;  
  tot_contr     := tot_contr + loc_contr;  
  no_of_entries := no_of_entries - tot_contr;  
  write(ud, nl, 1, <:contract<95>files:>, <<__ddddddd>, loc_contr, 
  _     nl, 1, <:sub<95>entries   :>, loc_entr, 
  _     nl, 3, <:contract<95>files total         :>, tot_contr, 
  _     nl, 1, <:sub<95>entries total            :>, no_of_entries, 
  _     nl, 1, <:contract<95>segments total      :>, tot_segm, 
  _     nl, 1, <:sub<95>entries pr contract<95>file :>, 
  _     round(no_of_entries / tot_contr), 
  _     nl, 1, <:segments pr contract<95>file    :>, 
  _     round(tot_segm/tot_contr), nl, 2);  

  close(sort, true);  
  monitor(48)remove_entry:(sort, 0, base);  

end procedure print;  

\f



comment  catsort contract     * page 14   12 08 80, 10.36
0 1 2 3 4 5 6 7 8 9 ;  

if res_name(1) = real <::> then print(out)
else
begin
  zone ud(128, 1, std_error);  

  begin
    long array field  lf;  
    long array        devi, scope(1:2);  

    lf       := 0;  
    devi(1)  :=
    devi(2)  :=
    scope(2) := long <::>;  
    scope(1) := long <:user:>;  
    i        := (75 * no_of_entries + 767) // 768;  
    if set_bsarea(res_name.lf, devi, scope, i, 
    _ 4, true) <> 0 then system(9, 0, <:<10>*** set:>);  
    write(out, nl, 2, res_name.lf, <: = set :>, i, sp, 1, 
    _     devi, <: scope :>, scope, nl, 2);  

  end;  

  open(ud, 4, string pump(res_name), 0);  

  print(ud);  
  write(ud, em, 3);  
  close(ud, true);  

end;  

end
else
write(out, nl, 2, <:++ no contract files on requested base:>, nl, 2);  

end;  

\f



;        catsort contract     * page 15   12 08 80, 10.36 ;

if ok.no
mode warning.yes

if warning.yes
(
mode 0.yes
message  catcontract not ok
)

if 0.no
(
if 1.yes 
scope user cat_contract

if 2.yes
scpe project catcontract

)

lookup catcontract

end

finis

▶EOF◀