|
|
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: 34560 (0x8700)
Types: TextFile
Names: »resoupdtx«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦this⟧ »resoupdtx«
└─⟦this⟧ »resoupdtx«
; boss resource opd * page 1 7 01 81, 16.06;
if listing.yes
char 10 12 10
resoupd = set 1 disc2
resoupd = algol connect.no
begin
comment the program sums up the resources used by BOSS
_ and SOS (from the auxiliary catalogs).
_ the resources claimed by BOSS are found by
_ scanning "usercattx".
_ the resources claimed by SOS are found by
_ scanning "soscattx".
_ the resources used by boss and sos and the
_ restclaim's are printed.
_ if "bossout.<file>" is specified a "scatup delete
_ and insert command" is generated in this file.
_ When boss is closed down this file may be used
_ to make a new boss entry in "susercat".
_ The same for "sosout.<file2>".
syntax of call:
! !1 ! !1 ! !1
!<printfile>=! resoupd !bossout.<file>! !sosout.<file2>!
! !0 ! !0 ! !0
januar 1981 annette
;
\f
comment boss resource opd * page 2 7 01 81, 16.06;
integer max_bs_no, max_proj, max_proj_used;
integer i, j, r, q, t, s, ss, ds, es, bs, s_dif, e_dif, par;
integer c, c2; <*character count - s_up_z,out_z*>
array doc(1:2);
long array field name;
zone out_z(128, 1, stderror);
begin
procedure error(no);
_________________
integer no;
begin
case no of
begin
<*1*> write(out, "nl", 1, <:parameter error:>);
<*2*> write(out, "nl", 1, <:entry missing in susercat:>);
<*3*> write(out, "nl", 1, <:claimproc!:>);
end;
goto stop;
end;
procedure outputfile(doc);
_________________________
array doc;
begin
long array field ln_f;
long array scope(1:2);
integer array tail(1:10);
scope(1) := scope(2) := 0;
ln_f := 0;
i := lookup_proc(scope, doc.ln_f, tail);
if (scope(1) = long <:syste:> add 109 and scope(2) = 0)
or scope(1) = long <:***:> then i := 3;
if i <> 0 then
begin
for i := 1 step 1 until 10 do tail(i) := 0;
tail(1) :=1; <*size*>
ln_f := 2; tail.ln_f(1) := long <:disc:>;
tail(6) := shortclock;
ln_f := 0; i := setproc(doc.ln_f, tail);
end create new entry;
if i <> 0 then system(9)alarm:(i, <:<10>settroubl:>);
end;
procedure clos_cut(z, file, char);
_________________________________
zone z;
long array file;
integer char;
begin
integer array tail(1:10);
integer i;
long array scope(1:2);
close(z, true);
scope(1) := scope(2) := long <::>;
i := lookup_proc(scope, file, tail);
if (scope(1) = long <:syste:> add 109 and scope(2) = long <::>)
_ or scope(1) = long <:***:> then i := 3;
if i = 0 then
begin
tail(1) := char // 768; <*size*>
if char mod 768 <> 0 then tail(1) := tail(1) + 1;
chngentrpr(file, tail);
end
else system(9)alarm:(i, <:<10>cat i/o err:>);
end;
\f
comment boss resource opd * page 3 7 01 81, 16.06;
procedure dummy(out_z); <*declare arrays*>
___________________________________________
zone out_z;
begin
long array bs_name(1:2),
_ bs_names(-1:2*max_bs_no);
integer array slices,
_ entries(1:max_proj_used//2 - 2, 0:max_bs_no),
_ sos_rest_sl, sos_rest_entr,
_ sumslic, sument(0:max_bs_no),
_ sos_entr_res, sos_segm_res, sos_sl_res,
_ discsum, slicsum, entrsum, bssum, smalldisc,
_ smallentr(0:max_bs_no), pr_discsum,
_ pr_entrsum, pr_slicsum, pr_bssum, pr_small_disc,
_ pr_small_entr(1:2*max_proj, 0:max_bs_no),
_ proj_no, base(1:2*max_proj);
array proj_name(1:2*max_proj);
<*print head*>
procedure ph(i, proj_name, proj_nr, small);
___________________________________________
value i, proj_nr, small;
integer i, proj_nr;
string proj_name;
boolean small;
begin
c2 := c2 + write(out_z,
_ "ff", i, "nl", 3, <:fordeling af plads på disc's:>);
c2 := c2 + wrdatetime(out_z, datetime);
c2 := c2 + write(out_z, "nl", 1,
_ false add 95, 45, "nl", 2, "sp", 16, proj_name);
if proj_nr >= 0 then
c2:=c2+write(out_z, << -ddddddddd>, proj_nr);
c2:=c2+write(out_z, "nl", 2,
<:device slices segm ar_ent bs_ent:>);
if small then c2:=c2+write(out_z, "sp", 10, <:small:>, "nl", 1,
_ "sp", 48, <:segm.__entries:>)
else c2:=c2+write(out_z, "nl", 1);
end ph;
\f
comment boss resource opd * page 4 7 01 81, 16.06;
integer procedure pr_restclaim(z, point);
________________________________________
zone z;
boolean point;
begin
integer char;
char := 0;
for t := 0 step 1 until max_bs_no do
begin
name := (t - 1) * 8;
if point and t = 0 then char := char +
_ write(z, "nl", 1, true, 13, <:temp:>, <:.:>,
_ << -ddddddd>, 300, <:.:>, 300, <:,:>, "nl", 1);
char := char + write(z, true, 13, bs_names.name,
_ if point then <:.:> else <: :>,
_ << -ddddddd>, sum_slic(t) - slic_sum(t),
_ if point then <:.:> else <: :>,
_ sument(t) - entr_sum(t) - bs_sum(t),
_ if point and t <> max_bs_no then <:,:> else <::>,
_ "nl", 1);
end;
pr_restclaim := char;
end pr_restclaim;
integer procedure sos_restclaim(z, point);
________________________________________
zone z;
boolean point;
begin
integer char;
char := 0;
for t := 0 step 1 until max_bs_no do
begin
name := (t - 1) * 8;
if point and t = 0 then char := char +
_ write(z, "nl", 1, true, 13, <:temp:>, <:.:>,
_ << -ddddddd>, 0, <:.:>, 0, <:,:>, "nl", 1);
char := char + write(z, true, 13, bs_names.name,
_ if point then <:.:> else <: :>,
_ << -ddddddd>, sos_rest_sl(t),
_ if point then <:.:> else <: :>,
_ sos_rest_entr(t),
_ if point and t <> max_bs_no then <:,:> else <::>,
_ "nl", 1);
end;
sos_restclaim := char;
end sos_restclaim;
\f
comment boss resource opd * page 5 7 01 81, 16.06;
<*find resources used by boss and sos *>
procedure find_used;
____________________________
begin
zone cat(128, 1, stderror);
long b_lo, b_hi;
integer p, ci, bs_no, entries, segm, slice_lng;
long array bs_name, cat_name(1:2);
boolean found;
integer array ix(1:2*max_proj), tail(1:10);
long array field doc;
integer field base_lo, base_hi, size, key;
key := 2;
base_lo := 4;
base_hi := 6;
name := 6;
size := 16;
doc := 16;
<*nulstil opsummeringsfelter*>
for p := max_bs_no step -1 until 0 do
begin
_ discsum(p) := slicsum(p) :=
_ entrsum(p) := bssum(p) :=
_ smalldisc(p) := smallentr(p) := 0;
for r := max_proj_used step -1 until 1 do
_ pr_discsum(r, p) := pr_entrsum(r, p) :=
_ pr_slicsum(r, p) := pr_bssum(r, p) :=
_ pr_small_disc(r, p) := pr_small_entr(r, p) :=0;
end;
<*initier base-, projno- og projname tabeller*>
for r := max_proj_used step -1 until 1 do
begin
ix(r) := r;
if r mod 2 = 0 then
proj_name(r-1) :=
proj_name(r) := real (case r//2 of (
<* -1*> <:gi_system:>,
<* 51*> <:account:>,
<* 53*> <:geo/top_project:>,
<*3002*> <:ga1/ga2:>,
<*6001*> <:top_afd:>,
<*7001*> <:seism._afd:>,
<* -1*> <:sos:>));
end;
base(1) := -8388607; <*gi system (not used) *>
base(2) := 8388605;
proj_no(1) := proj_no(2) := -1;
\f
comment boss resource opd * page 6 7 01 81, 16.06;
for r := max_proj_used step -2 until 2 do
begin
s := ix(r); <*ix=14,13,12,...1 s=1,3,5,6...*>
q := r; <*r=14,12,10...*>
b_lo := base(s-1);
b_hi := base(s);
for t := r-2 step -2 until 2 do
begin
i := ix(t); <*i=3,5,7,9,11*>
if base(i-1) <= b_lo and b_hi <= base(i) then
begin
q := t;
s := i;
b_lo := base(s-1);
b_hi := base(s);
end;
end;
if r <> q then
begin
ix(q) := ix(r);
ix(r) := s;
s := ix(q-1);
ix(q-1) := ix(r-1);
ix(r-1) := s;
end;
end;
bs_no := -1;
for bs_no := bs_no + 1 while
_ claim_proc(0, bsno, bs_name, entries, segm, slice_lng) do
begin
cat_name(1) := long <:cat:> add (bs_name(1) shift (-24));
cat_name(2) :=
_ (bs_name(1) shift 24) add (bs_name(2) shift(-24));
bs_names(2*bs_no-1) := bs_name(1);
bs_names(2*bs_no) := bs_name(2);
open(cat, 4, cat_name, 0);
if monitor(42)lookup:(cat, i, tail) <> 0 then
system(9)alarm:(bs_no, <:<10>-disc no:>);
<*15 entries in each segm, tail(1) = catalog size*>
for q := 15*tail(1) step -1 until 1 do
begin
inrec6(cat, 34); <*one entry*>
b_lo := extend cat.base_lo;
b_hi := extend cat.base_hi;
if b_lo<>-1 or b_hi<>-1 then
begin
p := 0;
repeat
begin
p := p + 1;
ci := ix(p);
i := ((ci - 1) // 2) * 2;
t := ci - i;
found := case t of (
_ <*user*> base(i+1) <= b_lo and b_hi < base(i+2),
_ <*project*> base(i+1) = b_lo and b_hi = base(i+2));
end;
until found or p = max_proj_used;
\f
comment boss resource opd * page 7 7 01 81, 16.06;
if found and cat.key extract 3 = 3 then <*perm files only*>
begin
if cat.size > 0 then
begin
i := cat.size;
t := (i + slicelng - 1) // slicelng;
pr_discsum(ci, bs_no) := pr_discsum(ci, bs_no) + i;
pr_slicsum(ci, bs_no) := pr_slicsum(ci, bs_no) + t;
pr_entrsum(ci, bs_no) := pr_entrsum(ci, bs_no)+1;
if long proj_name(p) <> long <:sos:> then
begin
disc_sum(bs_no) := disc_sum(bs_no) + i;
slic_sum(bs_no) := slic_sum(bs_no) + t;
entr_sum(bs_no) := entr_sum(bs_no) + 1;
end;
if i < slicelng then
begin
pr_small_disc(ci, bs_no) :=
_ pr_small_disc(ci, bs_no) + i;
pr_small_entr(ci, bs_no) :=
_ pr_small_entr(ci, bs_no) + 1;
if long proj_name(p) <> long <:sos:> then
begin
small_disc(bs_no) := small_disc(bs_no) + i;
small_entr(bs_no) := small_entr(bs_no) + 1;
end;
end;
end
else
begin
pr_bssum(ci, bs_no) := pr_bssum(ci, bs_no) + 1;
if long proj_name(p) <> long <:sos:> then
_ bs_sum(bs_no) := bs_sum(bs_no) + 1;
end;
end;
end; <*opsummering pr used entry*>
end; <*repeat for each entry*>
close(cat, true);
end bs_no-loop;
end find_used;
\f
comment boss resource opd * page 8 7 01 81, 16.06;
___________________________________________________
comment find resources reserved by boss;
___________________________________________________
procedure find_reserved;
begin
zone ucatz(128, 1, stderror);
boolean end_of_catalog;
integer array alfabet(0:255);
integer array inarr, kind(1:160);
integer bsno, numb;
procedure testud;
begin
write(out, "nl", 1);
if j < 0 then write(out, <:array fyldt :>) else
for i := 1 step 1 until j-1 do
case kind(i) of
begin
<*1*> write(out, <:kind 1 illegal number :>);
<*2*> write(out, <<-ddd>, inarr(i));
<*3,4,5*> ; ; ;
<*6*>
begin
write(out, "sp", 1, string(0.0 shift 24 add
_ inarr(increase(i)) shift 24 add inarr(increase(i))));
i := i - 1;
end;
<*7*> write(out, false add inarr(i), 1);
end;
end;
procedure read_to_semicolon;
begin
repeat
readchar(ucatz, inarr(1));
until inarr(1) = 59;
kind(1) := readchar(ucatz, inarr(1));
if kind(1) <> 8 then repeatchar(ucatz);
end;
procedure read_spaces;
begin
repeat
readchar(ucatz, inarr(1));
until inarr(1) <> 'sp';
repeatchar(ucatz);
end;
procedure read_to_nl;
begin
intable(0); <*ff,"nl",em as delimiter*>
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then begin
write(out, "nl", 1, <:from read_to_nl :>);
testud; end;
end;
\f
comment boss resource opd * page 9 7 01 81, 16.06;
comment housekeeping;
open(ucatz, 4, <:usercattx:>, 0);
end_of_catalog := false;
for i := 1 step 1 until max_proj_used / 2 - 2 do
for j := 0 step 1 until max_bs_no do
slices(i, j) := entries(i, j) := 0;
for i := 0 step 1 until max_bs_no do
sumslic(i) := sument(i) := 0;
numb := 0;
stdtable(alfabet);
<*first alfabet uses "sp","nl",ff,em as delimiters*>
alfabet('sp') := 8 shift 12 + 'sp';
<*second alfabet uses "nl",ff,"em",")" ,"," as delimiters*>
alfabet(128 + ')') := 8 shift 12 + ')';
alfabet(128 + 44) := 8 shift 12 + 44; <*,*>
while -, end_of_catalog do
begin
intable(alfabet); tableindex := 0; <*sp as delimiter*>
j := readall(ucatz, inarr, kind, 1);
if kind(1) = 2 <*legal number*> then i := inarr(1)
else i := 14;
if i = 0 then i := 1 <*not used*>;
if i = -1 <*end of catalog*> then i := 15;
if fp_mode(2) then write(out, "nl", 1, <:i= :>, i);
case i of
begin
<*1*> read_to_nl;
<*2*> read_to_nl;
<*3*> read_to_semicolon;
<*4*>
begin
intable(alfabet); tableindex := 128; <*), as delimiter*>
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then testud;
read_spaces;
tableindex := 0; <*space as delimiter*>
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then testud;
bsno := (inarr(2) shift (-8) extract 8) - 48;
intable(alfabet); tableindex := 128; <*), as delimeter*>
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then testud;
read_spaces;
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then testud;
slices(numb, bsno) :=
_ slices(numb, bsno) + inarr(1);
tableindex := 0; <*sp as delimiter*>
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then testud;
entries(numb, bsno) :=
_ entries(numb, bsno) + inarr(1);
read_to_nl;
end;
\f
comment boss resource opd * page 10 7 01 81, 16.06;
<*5*> read_to_nl;
<*6*> read_to_nl;
<*7*> ;
<*8*> read_to_nl;
<*9*> ;
<*10*>
begin
integer no2;
numb := numb + 1;
no2 := numb*2+1;
bsno := 0;
intable(alfabet); tableindex := 128; <*), as delimiter*>
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then testud;
read_spaces;
tableindex := 0; <*sp as delimiter*>
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then testud;
proj_no(no2) := proj_no(no2+1) :=inarr(1);
tableindex := 128; <* ) , as delimiter*>
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then testud;
read_spaces;
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then testud;
slices(numb, bsno) :=
_ slices(numb, bsno) + inarr(1);
tableindex := 0; <*sp as delimiter*>
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then testud;
entries(numb, bsno) :=
_ entries(numb, bsno) + inarr(1);
tableindex := 128; <*), as delimiter*>
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then testud;
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then testud;
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then testud;
read_spaces;
tableindex := 0; <* sp as delimiter*>
j := readall(ucatz, inarr, kind, 1);
if fp_mode(2) then testud;
base(no2) := inarr(1);
read(ucatz, base(no2+1));
if fp_mode(2) then write(out, base(no2+1));
read_to_nl;
end;
<*11*> read_to_nl;
<*12*> read_to_nl;
<*13*> ;
<*14*> if kind(1) <> 8 then read_to_nl;
<*15*> end_of_catalog := true;
end case;
end while;
\f
comment boss resource opd * page 11 7 01 81, 16.06;
for i := 1 step 1 until max_proj_used/2 - 2 do
for j := 0 step 1 until max_bs_no do
begin
sumslic(j) := sumslic(j) + slices(i, j);
sument(j) := sument(j) + entries(i, j);
end;
if fp_mode(2) then
begin
for i := 0 step 1 until max_bs_no do
c2:=c2+write(out, "nl", 1, sumslic(i), "sp", 2, sument(i));
end;
stdtable(alfabet); tableindex := 0;
end of find_reserved;
\f
comment boss resource opd * page 12 7 01 81, 16.06;
procedure sos_reserved;
begin
zone sos_cat_z(128, 1, stderror);
long array inarr(1:200);
integer array kind(1:200);
integer bs_no, i, j;
boolean procedure end_of_cat(elements);
___________________________________________
integer elements;
begin
integer i;
end_of_cat := false;
for i := 1 step 1 until elements do
begin
if inarr(i) = long <:end:> then end_of_cat := true;
if inarr(i) = 'em' and kind(i) = 8 then end_of_cat := true;
end;
end;
procedure testud;
begin
write(out, "nl", 1);
if j < 0 then write(out, <:array fyldt :>) else
for i := 1 step 1 until j-1 do
case kind(i) of
begin
<*1*> write(out, <:kind 1 illegal number :>);
<*2*> write(out, <<-ddd>, inarr(i));
<*3,4,5*> ; ; ;
<*6*>
begin
write(out, "sp", 1, string inarr(increase(i)));
i := i - 1;
end;
<*7*> write(out, false add inarr(i), 1);
end;
end;
open(sos_cat_z, 4, <:soscattx:>, 0);
proj_no(13) := proj_no(14) := -1;
for i := 0 step 1 until max_bs_no do
sos_entr_res(i) := sos_segm_res(i) := sos_sl_res(i) := 0;
<* find sos_bases *>
base(13) := 8388605; <*initial values*>
base(14) := -8388607;
for j:=readall(sos_cat_z, inarr, kind, 1) while -, end_of_cat(j) do
begin
if fp_mode(1) then testud;
i := 1;
while kind(i) <> 6 <*text string*> and i < j do
i := i + 1;
if inarr(i) = long <:maxb:> then
begin
i := i + 1;
while kind(i) <> 2 <*number*> do
i := i + 1;
if inarr(i) < base(13) then base(13):=inarr(i); <*baselow*>
i := i + 1;
while kind(i) <> 2 <*number*> do
i := i + 1;
if inarr(i) > base(14) then base(14):=inarr(i); <*basehigh*>
end;
end;
\f
comment boss resource opd * page 13 7 01 81, 16.06;
<*find the reserved resources*>
setposition(sos_cat_z, 0, 0);
for j:=readall(sos_cat_z, inarr, kind, 1) while -, end_of_cat(j) do
begin
if fp_mode(1) then testud;
i := 1;
while kind(i) <> 6 <*text string*> and i < j do
i := i + 1;
if inarr(i) = long <:bs:> then
begin
integer e, s, slicelng;
long array bsname(1:2);
i := i + 1;
while kind(i) <> 6 <*text string*> do
i := i + 1;
bs_no := (inarr(i) shift (-8) extract 8);
if bs_no <> 0 then bs_no := bs_no - 48;
if -, claimproc(0, bsno, bsname, e, s, slicelng) then error(3);
i := i + 2;
while kind(i) <> 2 <*number*> do
i := i + 1;
sos_entr_res(bs_no) := sos_entr_res(bs_no) + inarr(i);
i := i + 1;
while kind(i) <> 2 <*number*> do
i := i + 1;
sos_segm_res(bs_no) := sos_segm_res(bs_no) + inarr(i);
sos_sl_res(bs_no) := sos_sl_res(bs_no) +
_ (inarr(i) + slicelng - 1) // slicelng;
end;
end;
end of sos_reserved;
\f
comment boss resource opd * page 14 7 01 81, 16.06;
procedure print(out_z);
_______________________
zone out_z;
begin
for r := 3 step 1 until max_proj_used do
begin
i := ((r - 1) // 2) * 2; <*i = 2,2,4,4,6...*>
q := r - i; <*q=1,2,1,2,1,2...*>
if q = 1 then
ph(if r mod 4 = 1 then 1 else 0,
_ string proj_name(r), proj_no(r), false);
c2:=c2+write(out_z, "nl", 1, "sp", 16, true, 8,
_ case q of (<:users:>, <:project:>), "sp", 29,
_ <:small:>, "nl", 1, "sp", 48, <:segm. entries:>,
_ "nl", 1);
for t := 0 step 1 until max_bs_no do
begin
if pr_slicsum(r, t) <> 0
or pr_discsum(r, t) <> 0
or pr_entrsum(r, t) <> 0
or pr_bssum(r, t) <> 0 then
begin
name := (t - 1) * 8;
c2:=c2+write(out_z, true, 8, bs_names.name,
_ << -ddddddd>, pr_slicsum(r, t), pr_discsum(r, t),
_ pr_entrsum(r, t), pr_bssum(r, t),
_ pr_small_disc(r, t), pr_small_entr(r, t), "nl", 1);
end;
end;
if q = 2 then
begin
c2:=c2+write(out_z, "nl", 2, "sp", 16, <:project total:>,
_ "sp", 22, <:restclaim:>, "nl", 1,
_ "sp", 47, <:slices entries:>, "nl", 1);
for t := 0 step 1 until max_bs_no do
begin
ss := pr_slicsum(r-1, t) + pr_slicsum(r, t);
ds := pr_discsum(r-1, t) + pr_discsum(r, t);
es := pr_entrsum(r-1, t) + pr_entrsum(r, t);
bs := pr_bssum(r-1, t) + pr_bssum(r, t);
if long proj_name(r) <> long <:sos:> then
begin
s_dif := slices(i//2, t) - ss; <*reserved - used*>
e_dif := entries(i//2, t) - es - bs;
end
else
begin
sos_rest_sl(t) := s_dif := sos_sl_res(t) - ss;
sos_rest_entr(t) := e_dif := sos_entr_res(t) - es - bs;
end;
if ss + ds + es + bs + s_dif + e_dif <> 0 then
begin
name := (t - 1)*8;
c2:=c2+write(out_z, true, 8, bs_names.name,
_ << -ddddddd>, ss, ds, es, bs,
_ s_dif, e_dif, "nl", 1);
end;
end;
end q=2;
end r-loop;
\f
comment boss resource opd * page 15 7 01 81, 16.06;
ph(1, <:boss total:>, -1, true);
____________________________
c2:=c2+write(out_z, "nl", 1);
for t := 0 step 1 until max_bs_no do
begin
name := (t - 1)*8;
c2:=c2+write(out_z, true, 8, bs_names.name, << -ddddddd>,
_ slic_sum(t), disc_sum(t),
_ entr_sum(t), bs_sum(t),
_ small_disc(t), small_entr(t),
_ "nl", 1);
end;
c2:=c2+write(out_z, "nl", 5, "sp", 20, <:restclaim:>,
_ "nl", 1, "sp", 16, <:slices__entries :>, "nl", 1);
c2 := c2 + pr_restclaim(out_z, false);
end print;
\f
comment boss resource opd * page 16 7 01 81, 16.06;
procedure scatupfile(name);
___________________
long name;
begin
zone s_up_z(128, 1, stderror); <*outputfile*>
zone s_cat(128, 1, stderror); <*susercat*>
integer rec_lng, t, max_tracks, rest;
integer field segm_f, lng_f, prio_com_f, buf_area_f, int_fnc_f,
_ std_lo, std_hi, max_lo, max_hi, usr_lo, usr_hi,
_ h_key_f, addr_f, size;
long array field name_f, prog_f;
boolean found;
integer h;
long array proc_name(1:2);
integer procedure hash(name, catsize);
___________________________________
comment compute hashvalue;
long array name;
integer catsize;
begin
integer nv;
long name1;
name1 := name(1) + name(2);
nv := name1 extract 24 + name1 shift (-24);
if nv < 0 then nv := - nv;
hash := nv mod catsize;
end;
boolean procedure search(start_segm, end_segm, proc_name);
___________________________________________________________
comment search segment;
comment find <proc_name> entry in s_catalog
value start_segm, end_segm;
integer start_segm, end_segm;
long array proc_name;
begin
boolean found;
integer h_key;
search := found := false;
setposition(s_cat, 0, start_segm);
for t := start_segm + 1 step 1 until end_segm do
begin
repeat
begin
rest := inrec_6(s_cat, rec_lng);
h_key := s_cat.h_key_f;
if h_key <> -1 and h_key <> -2 and
_ s_cat.name_f(1) = proc_name(1) and
_ s_cat.name_f(2) = proc_name(2) then
begin
search := found := true;
t := end_segm + 1;
end;
end;
until rest < rec_lng or found;
end;
end search;
\f
comment boss resource opd * page 17 7 01 81, 16.06;
procedure pr_proc(s_up_z); <*write boss entry*>
_________________________________
zone s_up_z;
begin
integer procedure write_base(basel, baseu, text);
_________________________________________
value basel, baseu;
integer basel, baseu;
string text;
write_base :=
write(s_up_z, "nl", 1, text, <<ddddddd>,
_ if basel < 0 then <:n.:> else <: :>,
_ if basel >= 0 then basel else
_ - basel, <:.:> , if baseu < 0 then <:n.:> else <: :>,
_ if baseu >= 0 then baseu else
_ - baseu, <:,:>); <*end of writebase*>
c :=c+ write(s_up_z, "nl", 1, <:scatup_insert.:>,
_ s_cat.name_f, <:,:>);
c := c + write(s_up_z, "nl", 1,
_ <:prio.:>, s_cat.prio_com_f shift (-12), "sp", 1,
_ <:comm.:>, s_cat.prio_com_f extract 12, <:,:>);
c := c + write(s_up_z, "nl", 1,
_ <:buf.:>, s_cat.buf_area_f shift (-12), "sp", 1,
_ <:area.:>, s_cat.buf_area_f extract 12, <:,:>);
c := c + write(s_up_z, "nl", 1,
_ <:inter.:>, s_cat.int_fnc_f shift (-12),
_ "sp", 1, <:func.:>, s_cat.int_fnc_f extract 12, <:,:>);
c:=c+ write_base(s_cat.std_lo, s_cat.std_hi, <:std .:>);
c:=c+ write_base(s_cat.usr_lo, s_cat.usr_hi, <:user.:>);
c:=c+ write_base(s_cat.max_lo, s_cat.max_hi, <:max .:>);
c:=c+ write(s_up_z, "nl", 1, <:addr.:>, s_cat.addr_f);
c:=c+ write(s_up_z, "sp", 1, <:size.:>, <<ddddddd>,
_ s_cat.size, "sp", 1, <:prog.:>, s_cat.prog_f, <:,:>);
c:=c+ write(s_up_z, "nl", 1, <:,resource____slices___entr,:>);
if proc_name(1) = long <:boss:> then
c := c + pr_restclaim(s_up_z, true)
else c := c + sos_restclaim(s_up_z, true);
c:=c+ write(s_up_z, "nl", 3);
end pr_proc;
\f
comment boss resource opd * page 18 7 01 81, 16.06;
comment scatupfile;
____________________
open(s_cat, 4, <:susercat:>, 0);
<*initialize entry 0*>
lng_f := 4;
segm_f := 8;
<*initialize process entry*>
h_key_f := 2;
prio_com_f := 4;
name_f := 4;
buf_area_f := 18;
int_fnc_f := 20;
max_lo := 24;
max_hi := 26;
std_lo := 28;
std_hi := 30;
size := 32;
prog_f := 32;
usr_lo := 42;
usr_hi := 44;
addr_f := 14;
inrec6(s_cat, 4);
rec_lng := s_cat.lng_f;
rest := changerec6(s_cat, rec_lng);
max_tracks := s_cat.segm_f;
if readparam(doc) = 4 then
begin
outputfile(doc);
open(s_up_z, 4, doc, 0);
procname(1) := name;
procname(2) := long <::>;
h := hash(procname, s_cat.segm_f);
found := search(h, max_tracks, procname);
if -, found then found := search(0, h, procname);
if found then
begin
long array field l_f;
l_f := 0;
c := c + write(s_up_z,
_ "nl", 1, <:scatup delete.:>, s_cat.name_f);
pr_proc(s_up_z);
c := c + write(s_up_z, "em", 3, false, 3);
clos_cut(s_up_z, doc.l_f, c);
close(s_cat, true);
end
else error(2);
end
else error(1);
end of scatupfile;
\f
comment boss resource opd * page 19 7 01 81, 16.06;
<* DUMMY *>
c2 := c := 0; <*character count*>
find_reserved; <*boss*>
sos_reserved;
find_used;
print(out_z);
if par = -1 then par := readparam(doc);
while par = 2 do
begin
if long doc(1) = long <:bosso:> add 'u' and
_ long doc(2) = long <:t:> then scatupfile(long <:boss:>)
else if long doc(1) = long <:sosou:> add 't'
_ then scatupfile(long <:sos:>)
else error(1);
par := readparam(doc);
end;
if par <> 0 then error(1);
end dummy;
<* MAIN PROG *>
max_proj := 10;
max_proj_used := 7*2;
<*max_bs_no := antal bs_devices*>
begin
integer bs_no, slice_lng, segm, entries;
long array bs_name(1:2);
bs_no := max_bs_no := -1;
for bs_no := bs_no + 1 while
_ claim_proc(0, bs_no, bs_name, entries, segm, slice_lng) do
_ max_bs_no := bs_no;
end;
par := readparam(doc);
if par = -1 then
begin
long array file(1:2);
file(1) := long doc(1);
file(2) := long doc(2);
outputfile(doc);
open(out_z, 4, doc, 0);
dummy(out_z);
c2:=c2+write(out_z, "em", 3, false, 3);
clos_cut(out_z, file, c2);
end
else dummy(out);
end;
stop: <*****stop****>
trap_mode := 1 shift 10;
end
if ok.no
mode warning.yes
if warning.yes
(mode 0.yes
message resoupd not ok
lookup resoupd)
if 0.no
(scope user resoupd
lookup resoupd)
end
finis
▶EOF◀