|
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: 9216 (0x2400) Types: TextFile Names: »discinfo4tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »discinfo4tx «
(discinfo = algol connect.no end) begin <* initboot fra rc8000, tilrettet rc9000 _ discinfo 890224/pon *> boolean change_disc, change_dev_no, lookupkit; integer autodesc, i, j, k, p, process_addr, _ newline_separator, space_separator, point_separator, _ integer_kind, name_kind, device_no, l_disc, test, _ max_discs, dev_no_idx; integer array dummy(1:1), process_description(1 : 6), dev_no(1 : 256), discdesc(1:256); integer array field iaf; real array discname, arr, paramname(1:2); zone discfile(128,1,stderror); procedure syntax(no); integer no ; begin write(out,"nl",1, <:***discinfo syntax, param no:>,<<ddd>,no, _ "nl",2, <:discinfo <discname> (lookupkit/discs/disc/chdevno):>, _ "nl",1, <: * lookupkit /:>, _ "nl",1, <: discs.<no of log. discs> /:>, _ "nl",1, <: disc.<discno>.<1.segm>.<no of segm>.<type>.<log. devno> /:>, _ "nl",1, <: chdevno.<old devno>.<new devno>:>, _ "nl",2 ); goto stop; end; procedure monitor_error(text,no); integer text,no ; begin write(out,<:<10>***discinfo :>); if text = 1 then write(out,<:create, :>, case no of ( <:function forbidden in calling process:>, <:calling proc not user; catalog i/o error:>, <:name conflict:>, <:device no does not exist:>, <:device is reserved by another user:>, <:name format illegal:>),<:<10>:>) else write(out,<:reserve, :>, case no of ( <:reserved by another process:>, <:calling proc not user; proc cannot be reserved:>, <:process does not exist:>),<:<10>:>); goto stop; end; procedure print_discinfo (d); integer array d; begin if test > 255 then test := 255 else test := ((test + 3) // 4) * 4 - 1; for i := 0 step 4 until test do begin write (out, "nl",1, <<ddd>, i * 2); for j := 1 step 1 until 4 do write (out, <<ddddd>, d.iaf(i+j) shift (-12) extract 12, _ d.iaf(i+j) extract 12, _ <<-dddddddd>, d.iaf(i+j) ); if d.iaf (i + 4) = -1 then i := test; end; end; trapmode := 1 shift 10; newline_separator := 2; space_separator := 4; point_separator := 8; integer_kind := 4; name_kind := 10; deviceno := -1; lookupkit := true; change_dev_no := false; test := 0; l_disc := 6; <* length of a logical disc description *> iaf := 0; maxdiscs := 7000; dev_no(1) := -1; dev_no_idx := -1; discdesc(1) := 0; for i:= 2 step 1 until 256 do begin dev_no(i) := discdesc(i):= -1; end; <********** check <discname> **********> k:= system(4, 1, discname); if k extract 12 <> name_kind then syntax (1); <********** check <params> **********> p := 2; <* parameter no of next param *> for k:= system(4,p,paramname) while k <> 0 do begin if k <> space_separator shift 12 add name_kind then syntax(p); p:= p + 1; k:= system(4,p,arr); if paramname(1) = real <:test:> then test := arr(1) else if paramname(1) shift (-16) shift 16 = real <:look:> then lookupkit:= true else if paramname(1) = real<:discs:> then <* discs.<no of log. discs> *> maxdiscs:= arr(1) else if paramname(1) = real<:disc:> then begin <* disc.<discno>.<1.segm>.<no of segm>.<type>.<log. devno> *> change_disc := true; if change_dev_no then syntax(p); if k <> point_separator shift 12 add integer_kind then syntax(p); i:= arr(1); if i > discdesc(1) then discdesc(1):= i; for j:= 0 step 1 until 3 do begin k:= system(4,p+1,arr); if k <> point_separator shift 12 add integer_kind then syntax(p+1); if j=3 then discdesc(i*3+1):= discdesc(i*3+1) shift 12 + arr(1) else discdesc(i*3+j-1):= arr(1); p:= p+1; end; end else if paramname(1) shift (-24) shift 24 = real <:chd:> then begin <* chdevno.<old devno>.<new devno> *> change_dev_no := lookupkit := true; if change_disc then syntax(p); if k <> point_separator shift 12 add integer_kind then syntax(p); dev_no_idx := dev_no_idx + 2; dev_no (dev_no_idx) := arr(1); k := system (4, p+1, arr); if k <> point_separator shift 12 add integer_kind then syntax(p+1); dev_no (dev_no_idx + 1) := arr(1); p := p + 1; end else syntax (p); <* not found *> p:= p + 1; end; <********** open discfile, create and reserve discprocess **********> trap (error); i:= 1; open(discfile, 0, string discname(increase(i)),0); process_addr := monitor(4)process_description:(discfile, 0, dummy); i:= monitor(8)reserve_process:(discfile,0,dummy); if i <> 0 then monitor_error(2,i); <* check if discprocess*> system(5)copy core:(process_addr, process_description); if process_description(1) = 6 then begin setposition(discfile,0,0); inrec6(discfile,512); if test > 0 then print_discinfo (discfile.iaf); i:= discfile.iaf(1)*2+1; autodesc := discfile.iaf(1); if maxdiscs <= discfile.iaf(i+1) extract 12 then discdesc(1):= maxdiscs else if discfile.iaf(i+1) extract 12 > discdesc(1) then discdesc(1):=discfile.iaf(i+1) extract 12; discdesc(1):= discdesc(1) + l_disc shift 12; j:= (discfile.iaf(i+1) extract 12) * (l_disc/2); i:= i+1; for k:= 1 step 1 until j do if discdesc(k+1)=-1 then discdesc(k+1):= discfile.iaf(k+i); setposition(discfile,0,0); end else begin i := 1; write (out, <:<10>***discinfo, :>, string discname(increase(i)), _ <:, not an disc:>, "nl",1, _ <: kind =:>, process_description(1) ); if test > 0 then for i := 1 step 1 until 6 do write (out, "nl",1, <<ddddddddd>, process_description (i) ); goto stop; end; if change_disc or change_dev_no then begin i:= autodesc * 2 + 2; j:= (discdesc(1) extract 12) * (l_disc/2); if i+j > 256 then write(out,<:<10>***discinfo descriptor segment too big:>) else begin setposition(discfile,0,0); outrec6(discfile,512); if change_dev_no then begin boolean not_found; integer i; for i := 1 step 2 until dev_no_idx do begin not_found := true; for k := 2 step 3 until j+1 do if dev_no(i) = discdesc(k+2) extract 12 then begin <* log. device number found *> boolean dev_no_used; integer x; <* undersøg om nyt devno er i brug *> dev_no_used := not_found := false; for x := 2 step 3 until j+1 do if dev_no(i+1) = discdesc (x+2) extract 12 then dev_no_used := true; if -,dev_no_used then begin <* indsæt nyt devno *> discdesc(k+2) := discdesc(k+2) shift (-12) shift 12 + dev_no (i+1); write (out, <:<10>logical devno changed from:>, dev_no (i), <: to:>, dev_no(i+1) ); dev_no(i) := dev_no(i+1) := 0; end else _ write (out, <:<10>*** new logical devno :>, dev_no(i+1), _ <: in use:>); end for k; if not_found then write (out, <:<10>*** logical devno :>, dev_no(i), <: not found:>); end for i; end; <* flyt discbeskriv tilbage *> for k:= 1 step 1 until j+1 do discfile.iaf (i+k-1) := discdesc (k); if test > 0 then print_discinfo (discdesc); end; end; if lookupkit then begin j := 1; i := discdesc(1) extract 12; write(out, "nl",2, <:lookupkit, disc: :>, string discname(increase(j)), "nl",1, <:no of logical discs:>, <<ddd>,i, "nl",2, <:discno:>, "sp",11, <:1st segm no of segms type devno:>, "nl",1 ); for j:= 1 step 1 until i do write(out, <<dddd>, j, "sp",10, <:: :>, <<dddddddd>, discdesc(j*3-1), "sp",5, discdesc(j*3), <<dddd>, "sp",5, discdesc(j*3+1) shift (-12), "sp",5, discdesc(j*3+1) extract 12, "nl",1 ); end; error: <* trap label *> close (discfile, false); monitor (10)release process:(discfile, 0, dummy); stop: end ▶EOF◀