|
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: 45312 (0xb100) Types: TextFile Names: »tincload«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ. └─⟦4334b4c0b⟧ └─⟦this⟧ »tincload«
incload=algol list.no blocks.no connect.no begin procedure program(out); zone out; begin message vk 1981.11.29 incload; array fpparam(1:2); integer array iarr(1:21); integer sep,fpno,paramnos,spacename,catalogs, i,ownbase1,ownbase2,modekind; real ownname1, ownname2; zone zhelp(1,1,stderror); procedure nextfp; begin fpno:=fpno+1; sep:=system(4,fpno,fpparam); end nextfp; procedure lastfp; begin fpno:=fpno-1; sep:=system(4,fpno,fpparam); end lastfp; sep:=system(4,1,fpparam); if sep<>6 shift 12+10 then system(4,0,fpparam); i:=1; open(zhelp,0,string fpparam(increase(i)),0); monitor(76)lookup head and tail:(zhelp,0,iarr); close(zhelp,false); ownname1:=fpparam(1); ownname2:=fpparam(2); ownbase1:=iarr(2); ownbase2:=iarr(3); system(5)move core area:(92,iarr); catalogs:=(iarr(3)-iarr(1))/2-1; fpno:=if sep<>6 shift 12+10 then 0 else 1; comment ignore lefthand side; spacename:=4 shift 12 + 10; paramnos:=-1; nextfp; for sep:=sep while sep<>0 do begin if sep=spacename then paramnos:=paramnos+1; nextfp end; fpno:=if paramnos<1 then 1 else paramnos; begin boolean listnames,listmore,ok,endtape,singles,release,checkno,sp,hard, sysdump,noname,eof,eot,badrecord,bodoc,survey,loadno,missingclock,allspec; integer i,j,k,paramno,volumes,actualkitno,permkey,scopekey,skipped, recordtype,errors,rejected,entryno,segmno,totalsegm,actualscope, actualnewscope,vol,fileno,lastsurvey,loadedsegm,ztapeentry,created, ztapesegm,tapekits,totalloaded,segm,blocksize,device,counted; real r,scopedoc1,scopedoc2; integer field inf2,inf4,inf6,keys,kind,contents,shortclock; integer array field base; real array field tail,name,docname,segbase; integer array entrybase(1:2),entry(1:17),param(1:fpno),interval(1:10), fpscope,fpnewscope,fpkitno(1:fpno); array catname(-4:catalogs+10,1:4),tapenames(1:2), fpname,fpdocname(1:fpno,1:2); real procedure dumplabel(i,type); integer i; integer type; begin real spaces; comment returns the ith real of a dumplabel 1 : dump 2-3 : tapename 4 : fileno 5 : empty or vers. 6 : date 7 : hour 8 : segments 9-10 : dumplabelname 11 : in. 12-13: infile 14: nl 15: em the dumplabel is a textstring which may be read by edit; real procedure convintg(n); value n; integer n; comment converts a non negative integer to a textportion with the layout <<zddddd>; convintg:= if n < 10 then real<:00000:> add (n+48) else convintg(n//10) shift 8 add (n mod 10 + 48); real procedure spacefill(text); value text; real text; begin comment spacefill will replace trailing nulls by spaces; integer i; if text = real<::> then text:= spaces else begin i:= -1; for i:= i+1 while text extract 8=0 do text:=text shift(-8); for i:= i-1 while i>-1 do text:=text shift 8 add 32; end; spacefill:= text; end spacefill; spaces:=real<: :> add 32; dumplabel:= case i of ( spacefill(real<:dump:>), spacefill(tapenames( 1)), spacefill(tapenames( 2)), spacefill(convintg(fileno)shift 24), spacefill(case type of(real<:vers.:>,real<:empty:>,real<:cont.:>))); end dumplabel; procedure readlabel(type); integer type; comment readlabel reads a dumplabel if any, lists and checks same type=1: vers ok, cont ok if checkno else alarm type=2: empty ok type=3: cont ok, fortsæt if nodumplabel; begin integer i,modecase; boolean last; zone zlabel(25,1,nodump); procedure nodump(z,s,b); zone z; integer s,b; if last then goto found else if s shift (-14) extract 1=1 and (-,survey and type=1 or survey and fileno=1) then begin if modecase=0 then begin modecase:=1; setposition(zlabel,0,0); setposition(zlabel,0,0); modecase:=2; goto next end else if modecase=1 then begin b:=0; end else if modecase=2 then begin close(zlabel,false); modekind:=if modekind=18 then 4 shift 12+18 else 18; i:=1; open(zlabel,modekind,string tapenames(increase(i)),0); modecase:=1; setposition(zlabel,0,0); setposition(zlabel,0,0); modecase:=3; goto next end else stderror(zlabel,s,b); end else alarm3(0); procedure alarm3(i); integer i; begin write(out,<:<10>***load: :>); if i=0 then begin write(out,<:no dumplabel on file:>,fileno); if type<>1 then goto exitreadlabel else if -,survey then goto loadnotok else if fileno=lastsurvey then begin close(zlabel,if release then false add 1 else false); goto exit end else goto add1; end; write(out,<:dumplabel :>, case i of (<:tapename:>, <:fileno:>, <:cont.label:>, <:empty label: file not used by save:> )); if survey then begin if i=4 then begin if fileno<>lastsurvey then goto add1 else begin close(zlabel,if release then false add 1 else false); goto exitrecordloop end end else if -,checkno then goto exitreadlabel; end; if -,(i<>4 and checkno) then goto loadnotok; end alarm3; i:=1; last:=fileno=0 or lastsurvey=0; if fileno=0 then fileno:=1; mount; open(zlabel,modekind,string tapenames(increase(i)),0); modecase:=0; next: setposition(zlabel,if type=3 then 1 else fileno,0); i:=inrec6(zlabel,0); if modecase=3 then write(out,<:<10>***load, tape is :>, if modekind=18 then <:mto:> else <:nrz:>); if i<>100 then alarm3(0) else inrec6(zlabel,100); if (zlabel(5)=dumplabel(5,1) or zlabel(5)=dumplabel(5,3)) and last and -,survey then begin add1: fileno:=fileno+1; goto next end; if zlabel(1)<>dumplabel(1,1) then begin if last then begin found: if fileno=1 then alarm3(0); fileno:=lastsurvey:=fileno-1; last:=false; if -,survey then goto next; close(zlabel,if type=2 and release then false add 1 else false); goto if survey then exit else exitnorecords; end else alarm3(0) end; comment repair old versions of dumplabels; for i:=9 step 1 until 14 do if zlabel(i)=real<:<10><25>:> then zlabel(i):=real<:<10>:>; i:=1; write(out,if zlabel(11)=real<:<10>:> then <:<10>read : :> else <:<10>read:<10>:>,string zlabel(increase(i))); if type=1 then begin for i:=2,3 do if zlabel(i)<>dumplabel(i,1) then alarm3(1); if zlabel(4)<>dumplabel(4,1) then alarm3(2); if zlabel(5)=dumplabel(5,1) then entryno:=segmno:=0 else begin if zlabel(5)=dumplabel(5,3) and checkno then begin entryno:=zlabel(25) shift (-24) extract 24; segmno:=zlabel(25) extract 24; end else if last then goto found else alarm3(if zlabel(5)=dumplabel(5,3) then 3 else 4) end; end; segm:=zlabel(8) shift (-24) extract 8; segm:=if segm=32 then 1 else segm-48; exitreadlabel: close(zlabel,if type=1 or -,release then false else false add 1); end readlabel; procedure mount; begin integer array ia(1:12); integer i; zone z(128,1,stderror); i:=1; open(z,0,string tapenames(increase(i)),0); sense: monitor(6)initialize process:(z,0,ia); getshare6(z,ia,1); ia(4):=0 <*sense*>; setshare6(z,ia,1); monitor(16)send mess:(z,1,ia); if monitor(18)wait answ:(z,1,ia)<>1<*normal*> then begin <*not mounted*> ia(1):=(if device=0 then 14 shift 12 else 32 shift 12 + 1 shift 9) + 1 shift 0; ia(2):=real<:mou:> shift (-24) extract 24; ia(3):=real<:nt:> shift (-24) extract 24; ia(4):=device; ia(5):=tapenames(1) shift (-24) extract 24; ia(6):=tapenames(1) extract 24; ia(7):=tapenames(2) shift (-24) extract 24; ia(8):=tapenames(2) extract 24; system(10,0,ia); goto sense; end; close(z,true); end mount; procedure getmtname(file); integer file; begin file:=-1; close(zhelp,false); i:=1; open(zhelp,0,string fpparam(increase(i)),0); i:=monitor(42)lookup entry tail:(zhelp,0,iarr); if i=0 and iarr(1) extract 12=18 then begin modekind:=iarr(1) extract 23; fpparam(1):=real<::> add iarr(2) shift 24 add iarr(3); fpparam(2):=real<::> add iarr(4) shift 24 add iarr(5); file:=iarr(7); end; close(zhelp,true); open(zhelp,0,<::>,0); end getmtname; procedure listentry(bo); boolean bo; begin procedure outmodekind; begin integer i,modekind; modekind:=entry.kind; for i:=1 step 1 until 21 do begin if modekind=(case i of ( <*ip*> 1 shift 23 + 0 shift 12 + 0, <*bs*> 1 shift 23 + 0 shift 12 + 4, <*tw*> 1 shift 23 + 0 shift 12 + 8, <*tro*> 1 shift 23 + 0 shift 12 + 10, <*tre*> 1 shift 23 + 2 shift 12 + 10, <*trn*> 1 shift 23 + 4 shift 12 + 10, <*trf*> 1 shift 23 + 6 shift 12 + 10, <*tpo*> 1 shift 23 + 0 shift 12 + 12, <*tpe*> 1 shift 23 + 2 shift 12 + 12, <*tpn*> 1 shift 23 + 4 shift 12 + 12, <*tpf*> 1 shift 23 + 6 shift 12 + 12, <*tpt*> 1 shift 23 + 8 shift 12 + 12, <*lp*> 1 shift 23 + 0 shift 12 + 14, <*crb*> 1 shift 23 + 0 shift 12 + 16, <*crd*> 1 shift 23 + 8 shift 12 + 16, <*crc*> 1 shift 23 + 10 shift 12 + 16, <*mto*> 1 shift 23 + 0 shift 12 + 18, <*mte*> 1 shift 23 + 2 shift 12 + 18, <*nrz*> 1 shift 23 + 4 shift 12 + 18, <*nrze*> 1 shift 23 + 6 shift 12 + 18, <*pl*> 1 shift 23 + 0 shift 12 + 20 )) then goto found end; found: if i=22 then begin write(out,<<ddddd>,modekind shift (-12),<:.:>, <<d>,modekind extract 12,sp, if modekind extract 12<10 then 2 else 1); end else begin write(out,case i of ( <: ip :>, <: bs :>, <: tw :>, <: tro :>, <: tre :>, <: trn :>, <: trf :>, <: tpo :>, <: tpe :>, <: tpn :>, <: tpf :>, <: tpt :>, <: lp :>, <: crb :>, <: crd :>, <: crc :>, <: mto :>, <: mte :>, <: nrz :>, <: nrze :>, <: pl :> ) ); end end outmodekind; integer i,j,k; real r; monitor(72,zhelp,0,interval); i:=1; if bo then begin write(out,<:<10>:>); write(out,sp,(if listmore then 11 else 0) -write(out,string entry.name(increase(i)))); end; if listmore then begin if entry.kind<0 then outmodekind else write(out,<< dddd>,entry.kind,sp,2); if sysdump then write(out,<<d>,entry.keys,<:.:>) else write(out,case actualnewscope-2 of ( <: system.:>,<::>, <:project.:>, <: user.:>, <: login.:>, <: temp.:>)); r:=entry.docname(1); j:=1; i:=if r=0.0 or r=1.0 then write(out,<<d>,r) else write(out,string entry.docname(increase(j))); write(out,sp,11-i); if sysdump then begin write(out, << -ddddddd>,entry.base(1),entry.base(2)); end; i:=entry.contents shift (-12); missingclock:=false; if i<>4 and i<32 then begin i:=entry.shortclock; if i<>0 then write(out,<: d.:>,<<zddddd>, systime(4,(if i>0 then i else i + extend 1 shift 24) /625*1 shift 15+12,r), <:.:>,<<zddd>,r/100) end else if entry.kind>0 then missingclock:=-,loadno; end; monitor(72,zhelp,0,entrybase); end listentry; begin comment read fpparameters; integer pointname,pointinteger,min; real array catalog(1:2); integer array help(1:1); integer procedure findkitno; begin integer i; findkitno:=-4; if sep=pointinteger then begin if fpparam(1)=0 or fpparam(1)=1 then findkitno:=fpparam(1)-3 end else for i:=-1 step 1 until tapekits do if fpparam(1)=catname(i,1) and fpparam(2)=catname(i,2) then findkitno:=i; end findkitno; integer procedure findscopeno; begin integer i,j; i:=0; for j:=1 step 1 until 9 do if fpparam(1)=real (case j of (<:all:>, <:perm:>, <:syste:> add 109, <:own:>, <:proje:> add 99, <:user:>, <:login:>, <:temp:>, <:std:>)) then i:=j; if i=5 and fpparam(2)<>real<:t:> then i:=0; findscopeno:=i; end findscopeno; procedure listfp; begin long array field laf; laf:=0; for sep:=sep while sep<>0 do begin write(out,if sep shift (-12)=8 then <:.:> else <: :>); if sep extract 12=10 then write(out,fpparam.laf) else write(out,<<d>,fpparam(1)); nextfp; end end listfp; procedure readtapeparams; begin integer lastsep,file; procedure alarm1; begin write(out,<:<10>***load: error in tapeparam: :>); listfp; goto loadnotok; end alarm; lastsep:=sep; modekind:=18; if false then mountspecif: nextfp; r:=fpparam(1); if r=real<:mount:>add<*s*>115 and fpparam(2)=real<:pec:> then begin nextfp; if sep<>pointinteger then alarm1; device:=fpparam(1); goto mountspecif end else if r=real<:mto:> or r=real<:nrz:> then begin modekind:=(if r=real<:mto:> then 0 else 4) shift 12 + 18; goto mountspecif end else if r=real<:relea:>add<*s*>115 and fpparam(2)=real<:e:> then begin nextfp; r:=fpparam(1); if sep<>pointname or (r<>real<:yes:> and r<>real<:no:>) then alarm1; release:=r=real<:yes:>; goto mountspecif end; getmtname(file); tapenames(1):=fpparam(1); tapenames(2):=fpparam(2); nextfp; if lastsep<>spacename or -,(sep=pointinteger and (fpparam(1)<>0 and file=-1 or file+fpparam(1)>0) or sep=pointname and fpparam(1)=real<:last:>) then alarm1; fileno:=lastsurvey:=if sep=pointname then 0 else if file=-1 then fpparam(1) else file+fpparam(1); nextvol: nextfp; if sep=spacename or sep=0 then goto exitreadtapeparam; if sep<>pointname then alarm1; r:=fpparam(1); volumes:=volumes+1; if volumes>10 then alarm1; goto nextvol; exitreadtapeparam: end readtapeparams; procedure alarm2; begin write(out,<:<10>***load: error in param: :>); listfp; goto loadnotok; end alarm2; tapenames(1):=tapenames(2):=real<::>; device:=0; name:=6; docname:=16; keys:=2; base:=2; kind:=16; tail:=14; shortclock:=26; contents:=32; inf2:=2; inf4:=4; inf6:=6; endtape:=sysdump:=false; release:=true; sp:=false add 32; errors:=rejected:=0; pointname:=8 shift 12+10; pointinteger:=8 shift 12+4; system(11)get interval:(0,interval); entrybase(1):=interval(1); entrybase(2):=interval(2); open(zhelp,0,<::>,0); interval(9):=-8388607; interval(10):=8388605; catname(-3,1):=catname(-3,3):=0.0; catname(-3,2):=catname(-3,4):=real<::>; catname(-2,1):=catname(-2,3):=1.0; catname(-2,2):=catname(-2,4):=real<::>; catname(-1,1):=catname(-1,3):=real<:main:>; catname(-1,2):=catname(-1,4):=real<::>; system(5)move core area:(92,iarr); k:=iarr(1); tapekits:=catalogs; for j:=0 step 1 until catalogs do begin zone zbs(128,1,stderror); system(5,k,help); k:=k+2; system(5,help(1)-2,iarr); system(5,help(1)-28,catalog); i:=1; open(zbs,4,string catalog(increase(i)),0); monitor(76)lookup head and tail:(zbs,0,iarr); close(zbs,true); catname(j,1):=catname(j,3):=iarr.docname(1); catname(j,2):=catname(j,4):=iarr.docname(2); end; for j:=catalogs+1 step 1 until catalogs+10 do for i:=1,2,3,4 do catname(j,i):=real<::>; fpno:=0; nextfp; if sep<>6 shift 12+10 then fpno:=0; nextfp; paramno:=0; if paramnos=-1 then alarm2; volumes:=1; paramno:=1; readtapeparams; listnames:=listmore:=true;allspec:=false; loadno:=survey:=checkno:=false; specialparam: r:=fpparam(1); i:=if r=real<:list:> then 1 else if r=real<:load:> then 2 else if r=real<:surve:> add 121 and fpparam(2)=real<::> then 3 else if r=real<:check:> then 4 else if r=real <:all:> then 5 else 6; if i<6 then begin nextfp; r:=fpparam(1); if r<>real<:yes:> and r<>real<:no:> and (r<>real<:name:> and r<>real<:names:>) and i=1 or r<>real<:yes:> and r<>real<:no:> and i>=2 or sep<>pointname then begin lastfp; goto startloop end; end; case i of begin begin listnames:=r<>real<:no:>; listmore:=r=real<:yes:> end; begin loadno:=r=real<:no:>; end; begin survey:=r=real<:yes:>; loadno:=loadno or survey; lastsurvey:=fileno; fileno:=1; end; checkno:=r=real<:no:>; allspec:= r <> real <:no:>; goto startloop end; paramno:=paramno+1; nextfp; goto specialparam; startloop: paramnos:=0; actualnewscope:=4; actualkitno:=-1; loop: if sep=0 then goto exitloop; if sep shift (-12)<>4 then alarm2; paramno:=paramno+1; fpname(paramnos+1,1):=fpparam(1); fpname(paramnos+1,2):=fpparam(2); bodoc:=fpparam(1)=real<:docna:> add 109 and fpparam(2)=real<:e:>; fpdocname(paramnos+1,1):=fpdocname(paramnos+1,2):=real<::>; fpscope(paramnos+1):=0; fpnewscope(paramnos+1):=actualnewscope; fpkitno(paramnos+1):=actualkitno; nextfp; actualscope:=findscopeno; if sep=0 or sep=spacename then paramnos:=paramnos+1 else if sep=pointname and fpparam(1)=real<:scope:> then begin comment textscope; nextfp; if sep=0 or sep=spacename then begin if bodoc then goto docnameparam else alarm2 end; paramnos:=paramnos+1; actualscope:=findscopeno; if actualscope>8 then alarm2; fpscope(paramnos):=actualscope; if actualscope=0 then begin if bodoc and fpparam(1)=real<:scope:> then begin fpname(paramnos,1):=fpname(paramnos,2):=real<::>; fpdocname(paramnos,1):=real<:scope:>; nextfp; if sep<>pointname then alarm2; actualscope:=findscopeno; fpscope(paramnos):=actualscope; if actualscope=0 or actualscope>8 then alarm2; end else alarm2 end; nextfp; end else if fpname(paramnos+1,1)=real<:chang:> add 101 and fpname(paramnos+1,2)=real<:kit:> then begin i:=findkitno; if i=-4 then begin if tapekits>catalogs+10 then begin write(out,<:<10>***load param, kitnames exceeded:>); goto loadnotok end; tapekits:=i:=tapekits+1; catname(tapekits,1):=fpparam(1); catname(tapekits,2):=fpparam(2); end; nextfp; if sep<>pointname and sep<>pointinteger then alarm2; k:=findkitno; if k=-4 or k>catalogs then alarm2; catname(i,3):=fpparam(1); catname(i,4):=fpparam(2); nextfp; end else if fpname(paramnos+1,1)=real<:kit:> then begin actualkitno:=findkitno; if actualkitno=-4 then alarm2; nextfp end else if fpname(paramnos+1,1)=real<:newsc:> add 111 and fpname(paramnos+1,2)=real<:pe:> then begin if actualscope=9 then actualscope:=4; if actualscope<4 then alarm2; actualnewscope:=actualscope; nextfp; end else if fpname(paramnos+1,1)=real<:scope:> then begin paramnos:=paramnos+1; fpscope(paramnos):=actualscope; if actualscope>8 or actualscope=0 then alarm2; fpname(paramnos,1):=fpname(paramnos,2):=real<::>; nextfp end else if bodoc then begin docnameparam: paramnos:=paramnos+1; fpname(paramnos,1):=fpname(paramnos,2):=real<::>; fpdocname(paramnos,1):=fpparam(1); fpdocname(paramnos,2):=fpparam(2); nextfp; if sep=pointname then begin if fpparam(1)<>real<:scope:> then alarm2; nextfp; if sep<>pointname then alarm2; actualscope:=findscopeno; if actualscope=0 or actualscope>8 then alarm2; fpscope(paramnos):=actualscope; nextfp; end; end else alarm2; goto loop; exitloop: if paramnos=0 then begin paramnos:=1; fpscope(1):=1; fpnewscope(1):=actualnewscope; fpkitno(1):=actualkitno; fpname(1,1):=fpname(1,2):=fpdocname(1,1):=fpdocname(1,2):=real<::>; end; singles:=true; for i:=1 step 1 until paramnos do begin param(i):=i; fpscope(i):=fpscope(i)- (if fpname(i,1)<>real<::> then 20 else if fpdocname(i,1)<>real<::> then 10 else 0); j:=fpscope(i); if j<>0-20 and j<>3-20 and (j<5-20 or j>8-20) then singles:=false; end; for i:=1 step 1 until paramnos-1 do begin min:=fpscope(param(i)); k:=i; for j:=i+1 step 1 until paramnos do begin vol:=fpscope(param(j)); if vol<min then begin min:=vol; k:=j end; end; if i<>k then begin min:=param(k); param(k):=param(i); param(i):=min end; end; for i:=1 step 1 until paramnos do fpscope(i):=fpscope(i)+ (if fpname(i,1)<>real<::> then 20 else if fpdocname(i,1)<>real<::> then 10 else 0); end parameterindlæsning; vol:=1; nextlabel: created:=totalloaded:=counted:=0; readlabel(1); k:=2; if system(2,0,fpparam)-2048*segm<2600 then k:=1; begin zone zbs(k*128*segm,k,sterror),ztape(k*(2+128*segm),k,harderror); procedure sterror(z,s,b); zone z; integer s,b; begin monitor(72)set catbase:(zhelp,0,interval); stderror(z,s,b); end; procedure harderror(z,s,b); zone z; integer s,b; begin integer s1; monitor(72,zhelp,0,interval); s1:=s; if s shift (-18) extract 1=0 then begin if -,hard then begin if -,listnames and -,noname then listentry(true) else if noname then write(out,<:<10>***unknown :>); errors:=errors+1; hard:=true end; write(out,<:<10> bad tape::>); for i:=23,i-1 while s1<>0 do begin if s1<0 then write(out,<:+1<60>:>,<<d>,i); s1:=s1 shift 1; end; end; if s shift (-21) extract 1=1 or s shift (-20) extract 1=1 or s shift ( -6) extract 1=1 or s shift ( -5) extract 1=1 or s shift ( -3) extract 1=1 then sterror(z,s,b); if s shift (-18) extract 1=1 then eot:=true else if s shift (-16) extract 1=1 then begin eof:=true; b:=8+512*segm end; if b mod 512<>8 and -,(eot and b=100) then begin badrecord:=true; write(out,<: blocklength=:>,b); errors:=errors+1; end; if s shift (-22) extract 1=1 or s shift (-19) extract 1=1 then badrecord:=true; monitor(72,zhelp,0,entrybase); end harderror; procedure createentry; begin procedure trouble(n); value n; integer n; begin integer i; i:=n; errors:=errors+1; listentry(true); write(out,sp,6); if n=445 then n:=485; if n=906 then n:=506; monitor(72,zhelp,0,interval); if -,(n mod 10=2 or n=404 or n=506 or n=485) then write(out,<: monitor:>,n//10,<: result:>,n mod 10); write(out,if n mod 10=2 then <: device not mounted:> else if n=405 then <: process base error:> else if n=404 then <: no work resources:> else if n=506 then <: no perm resources:> else if n=485 then <: entry in use:> else <: impossible:>); if (n=404 or n=506) and entry.kind<0 then begin i:=3; write(out,<: on :>,string catname(actualkitno,increase(i))); end; monitor(72,zhelp,0,entrybase); if i<>445 then monitor(48)remove:(zbs,0,iarr); close(zbs,true); ok:=false; goto exitcreateentry end trouble; if -, allspec then begin entrybase(1):=entry.base(1); entrybase(2):=entry.base(2); open(zbs,4,<::>,0);close(zbs,true); i:=monitor(72)set catbase:(zbs,0,entrybase); i:=1; open(zbs,4,string entry.name(increase(i)),0); i:=monitor(76)look up head and tail:(zbs,0,iarr); close(zbs,true); monitor(72,zhelp,0,interval); if i = 0 then begin if entry(2) = iarr(2) and entry(3) = iarr(3) and entry(4) = iarr(4) and entry(5) = iarr(5) and entry(6) = iarr(6) and entry(7) = iarr(7) and entry.keys = iarr(1) extract 3 then begin ok:=false; listentry(true); write(out,<:*** entry exist :>); goto exitcreateentry; end; end; end; if entry.kind>=0 then begin entry.docname(1):=catname(actualkitno,3); entry.docname(2):=catname(actualkitno,4); if entry.docname(1)=real<:main:> then entry.docname(1):=catname(0,1); end; if entry.docname(1)=0.0 or entry.docname(1)=1.0 then entry.docname(1):=real<::> add (round entry.docname(1)); if actualnewscope<>actualscope then begin i:=actualnewscope; i:=if i=3 then 10 else (9-i)*2; entry.base(1):=interval(i-1); entry.base(2):=interval(i); entry.keys:=if i=2 then 0 else if i=4 then 2 else 3; end; if entry.name(1)=ownname1 and entry.name(2)=ownname2 and entry.base(1)=ownbase1 and entry.base(2)=ownbase2 then trouble(445); entrybase(1):=entry.base(1); entrybase(2):=entry.base(2); if entry.kind>=0 then begin open(zbs,4,<::>,0); close(zbs,true); i:=monitor(72)set catbase:(zbs,0,entrybase); if i<>0 then trouble(720+i); i:=1; open(zbs,4,string entry.name(increase(i)),0); i:=monitor(76)lookup head and tail:(zbs,0,iarr); if i=0 then begin if entrybase(1)=iarr(2) and entrybase(2)=iarr(3) and entry(9)=iarr(9) and entry(10)=iarr(10) and entry(11)=iarr(11) and entry(12)=iarr(12) then begin for i:=1 step 1 until 10 do iarr(i):=entry(i+7); i:=monitor(44)change entry:(zbs,0,iarr); if i=0 then goto done end end end; close(zbs,true); open(zbs,4,<::>,0); i:=monitor(72)set catbase:(zbs,0,interval); if i<>0 then trouble(720+i); for i:=1 step 1 until 10 do iarr(i):=entry(i+7); i:=monitor(40)generate wrk name create entry:(zbs,0,iarr); if i<>0 then trouble(400+i); if entry.keys>0 then begin if entry.kind<0 then begin iarr(1):=catname(actualkitno,3) shift (-24) extract 24; iarr(2):=catname(actualkitno,3) extract 24; iarr(3):=catname(actualkitno,4) shift (-24) extract 24; iarr(4):=catname(actualkitno,4) extract 24; i:=monitor(90)permanent into auxcat:(zbs,entry.keys,iarr); if i<>0 then trouble(900+i); end else begin i:=monitor(50)permanent:(zbs,entry.keys,iarr); if i<>0 then trouble(500+i); end end; i:=monitor(74)set entry base:(zbs,0,entrybase); if i<>0 then trouble(740+i); i:=monitor(72)set catbase:(zhelp,0,entrybase); if i<>0 then trouble(720+i); renameloop: for i:=1 step 1 until 4 do iarr(i):=entry(i+3); comment iarr:=entry.name; i:=monitor(46)rename:(zbs,0,iarr); if i<>0 and i<>3 then trouble(460+i); getzone(zbs,iarr); for j:=0 step 1 until 3 do begin comment store wrk name in iarr(18:21) and set entry.name in iarr(2:5); iarr(j+18):=iarr(j+2); iarr(j+2):=entry(j+4); end; setzone(zbs,iarr); if i=3 then begin i:=monitor(48)remove:(zbs,0,iarr); for j:=0 step 1 until 3 do iarr(j+2):=iarr(j+18); setzone(zbs,iarr); if i<>0 then trouble(480+i); goto renameloop end; done: listentry(listnames); exitcreateentry: end createentry; procedure listclock; begin integer field inf,clockadr,startext,seg; integer i; boolean started; procedure outdate; begin inf:=clockadr-2; write(out,<: d.:>,<<zddddd>,zbs.inf,<:.:>); end; procedure outclock; begin write(out,<<zddd>,zbs.clockadr/100); missingclock:=false; end; startext:=entry.contents extract 12+2; if startext>500 then begin write(out,<: entry inconsistent:>); goto exitlistclock end; i:=1; open(zbs,4,string entry.name(increase(i)),0); inrec6(zbs,512); seg:=entry.kind-1; monitor(72,zhelp,0,interval); inf:=startext+2; clockadr:=6+zbs.inf extract 12 +12*zbs.startext extract 12 +2*zbs.startext shift (-12) +startext; if clockadr<=502 and clockadr>4 then begin outdate; outclock end else begin started:=false; nextsegm: if clockadr=504 then begin outdate; started:=true end; inf:=504; if zbs.inf extract 12>500 or clockadr<6 or seg=0 then begin write(out,<: code inconsistent:>); goto exitlistclock end; clockadr:=clockadr-502+zbs.inf extract 12; inrec6(zbs,512); seg:=seg-1; if clockadr>502 then goto nextsegm; if -,started then outdate; outclock; end; exitlistclock: monitor(72,zhelp,0,entrybase); close(zbs,true); end listclock; if listmore and sysdump then write(out,<:<10>:>,sp,43,<:base:>); i:=1; open(ztape,modekind,string tapenames(increase(i)),0); setposition(ztape,fileno,1); totalsegm:=loadedsegm:=0; ok:=false; eot:=eof:=false; noname:=true; hard:=true; skipped:=0; recordloop: badrecord:=false; blocksize:=i:=inrec6(ztape,0); inrec6(ztape,i); if i<60 then begin skipped:=skipped+1; goto recordloop end; recordtype:=ztape.inf2; k:=ztape.inf4; ztapeentry:=ztape.inf6; ztapesegm:=ztape(2) extract 24; if recordtype<1 or recordtype>4 or recordtype=1 and k<>52 and k<>48 or recordtype=2 and (k mod 512<>8 or ztapesegm<segmno) or recordtype=3 and k<>8 or recordtype=4 and k<>16 or ztapeentry<entryno then begin recordtype:=0; if badrecord and ztape(12)=ztape(13) and ztape(14)=ztape(15) and ztape(12)=ztape(15) then begin ztape(1):=ztape(12); recordtype:=ztape.inf2; k:=ztape.inf4; if -,(recordtype=3 and k=8 or recordtype=4 and k=16) then recordtype:=0; end; if recordtype=0 then begin if eot and vol<volumes then recordtype:=4 else if eot then eof:=true; if eof then recordtype:=3; end; if recordtype=0 then begin skipped:=skipped+1; if skipped<8 then goto recordloop end; end; if skipped>0 then begin monitor(72,zhelp,0,interval); write(out,<:<10> bad tape, blocks skipped:>,skipped); if skipped=8 then goto exitrecordloop; monitor(72,zhelp,0,entrybase); skipped:=0; errors:=errors+1; end; if ok and (recordtype=3 or ztapeentry>entryno) then begin close(zbs,if missingclock then false else true); if missingclock then listclock; if loadedsegm<>entry.kind and -,(segmno=0 and entry.kind<0) then begin monitor(72,zhelp,0,interval); write(out,<:<10> bad tape, segm. loaded:>,loadedsegm); monitor(72,zhelp,0,entrybase); errors:=errors+1; end; ok:=hard:=false; noname:=true; end; if singles then begin if (recordtype=1 or recordtype=3) and counted=paramnos then begin totalloaded:=totalloaded+loadedsegm; close(ztape,if release then false add 1 else false); goto exitrecordloop end end; case recordtype of begin begin comment type 1, entry record; sysdump:=k=52; actualscope:=ztape(10); k:=if actualscope=3 then 10 else (9-actualscope)*2; entry.base(1):=if sysdump then ztape(13) shift (-24) extract 24 else interval(k-1); entry.base(2):=if sysdump then ztape(13) extract 24 else interval(k); entry.keys:=if sysdump then actualscope else if k=2 then 0 else if k=4 then 2 else 3; nextentryno: entryno:=entryno+1; if ztapeentry>entryno then begin monitor(72,zhelp,0,interval); write(out,<:<10> bad tape, entry no:>, entryno,<: missing:>); monitor(72,zhelp,0,entrybase); errors:=errors+1; goto nextentryno end; hard:=noname:=false; totalsegm:=totalsegm+segmno; totalloaded:=totalloaded+loadedsegm; segmno:=loadedsegm:=0; entry.name(1):=ztape(3); entry.name(2):=ztape(4); for i:=1 step 1 until 5 do entry.tail(i):=ztape(4+i); for k:=1 step 1 until paramnos do begin paramno:=param(k); scopekey:=fpscope(paramno); actualnewscope:=fpnewscope(paramno) extract 10; if actualnewscope=4 then actualnewscope:=actualscope; actualkitno:=-4; for i:=-3 step 1 until tapekits do if catname(i,1)=ztape(11) and catname(i,2)=ztape(12) then actualkitno:=i; if actualkitno=-4 then begin catname(-4,3):=ztape(11); catname(-4,4):=ztape(12); end; ok:=fpkitno(paramno)=actualkitno or fpkitno(paramno)=-1 or (fpkitno(paramno)=0 and actualkitno=-1); if ok and sysdump then ok:=extend entry.base(1)>=extend interval(7) and extend entry.base(2)<=extend interval(8) and (scopekey<2 or scopekey=2 and entry.keys>1 or scopekey>2) else if ok then ok:=scopekey<2 or scopekey=2 and entry.keys>1 or scopekey=actualscope or scopekey=4 and actualscope>4 ; if ok and sysdump then begin if -,(interval(5)=interval(7) and interval(6)=interval(8)) and (entry.base(1)=interval(7) and entry.base(2)=interval(8)) then ok:=fpname(paramno,1)<>fpdocname(paramno,1) and scopekey mod 10=5 end; if ok and fpname(paramno,1)<>fpdocname(paramno,1) then begin if fpname(paramno,1)<>real<::> then ok:=fpname(paramno,1)=entry.name(1) and fpname(paramno,2)=entry.name(2) else ok:=fpdocname(paramno,1)=entry.docname(1) and fpdocname(paramno,2)=entry.docname(2); end; if ok then goto found end scan parameters; found: if ok then begin if fpnewscope(paramno) shift (-10)=0 then counted:=counted+1; fpnewscope(paramno):=fpnewscope(paramno)+1 shift 10; if loadno then listentry(listnames) else createentry; if ok then created:=created+1; end; end type 1, entry record; begin comment type 2, segment record; k:=(k-8)//512; if ok then begin nextsegmno: if ztapesegm>segmno then begin monitor(72,zhelp,0,interval); write(out,<:<10> bad tape, segm.no:>,segmno); if k>1 then write(out,<<-d>,-(segmno+k-1)); write(out,<: missing:>); monitor(72,zhelp,0,entrybase); segmno:=segmno+k; errors:=errors+1; if ztapesegm>segmno+7 then begin skipped:=skipped+1; goto recordloop end; goto nextsegmno end; if blocksize mod 512<>8 then begin monitor(72,zhelp,0,interval); write(out,<:<10> bad tape, segm.no:>,segmno+1); if k>1 then write(out,<<-d>,-(segmno+k)); write(out,<:, bytes:>,blocksize-8); monitor(72,zhelp,0,entrybase); end; blocksize:=blocksize-8; segmno:=segmno+k; loadedsegm:=loadedsegm+k; if -,loadno then begin outrec6(zbs,blocksize); segbase:=8; tofrom(zbs,ztape.segbase,blocksize); end end; end type 2, segment record; begin comment type 3, end-record; totalsegm:=totalsegm+segmno; totalloaded:=totalloaded+loadedsegm; if ztapeentry<>entryno then begin monitor(72,zhelp,0,interval); write(out,<:<10> bad tape, entries read:>,entryno, <:, entries saved:>); if eof then write(out,<: unknown:>) else write(out,ztape.inf6); errors:=errors+1; end; close(ztape,false); goto exitrecordloop end type 3, endrecord; begin comment type 4, continue record; vol:=vol+1; begin tapenames(1):=ztape(3); tapenames(2):=ztape(4); end; close(ztape,false add 1); monitor(72,zhelp,0,interval); write(out,<:<10>tape shift: <10>:>,<<ddd>,created, <: entr.,:>,<< ddddd>,totalloaded+loadedsegm, <: segm. loaded<10>:>,<<ddd>,ztapeentry, <: entr.,:>,<< ddddd>,ztapesegm,<: segm. saved:>); if tapenames(1)=real<::> then goto exitrecordloop; i:=1; mount; readlabel(3); open(ztape,modekind,string tapenames(increase(i)),0); setposition(ztape,1,1); monitor(72,zhelp,0,entrybase); end type 4, continue record; end case recordtype; goto recordloop; end block for ztape declaration; exitrecordloop: monitor(72,zhelp,0,interval); write(out,<:<10>:>,<<ddd>,created,<: entr.,:>, << ddddd>,totalloaded,<: segm.<10>:>); if rejected>0 then write(out,<:<10>:>,<<ddd>,rejected,<: entr. rejected:>); if survey and (fileno<lastsurvey or lastsurvey=0) then begin fileno:=fileno+1; goto nextlabel end; ok:=true; for paramno:=1 step 1 until paramnos do if fpnewscope(paramno) shift (-10)=0 then begin actualscope:=fpscope(paramno); write(out,if ok then <:<10><10>***not found::> else <:<10> :>); ok:=false; i:=1; if fpname(paramno,1)<>real<::> then write(out,string fpname(paramno,increase(i)), if actualscope<>0 then <:.:> else <::>); i:=1; if fpdocname(paramno,1)<>real<::> then write(out,<:docname.:>,string fpdocname(paramno,increase(i)), if actualscope<>0 then <:.:> else <::>); if actualscope<>0 then write(out,<:scope.:>,case actualscope of ( <:all:>,<:perm:>,<:system:>,<:own:>, <:project:>,<:user:>,<:login:>,<:temp:>)); i:=1; if fpkitno(paramno)<>-1 then begin r:=catname(fpkitno(paramno),1); if r=0.0 or r=1.0 then write(out,<: kit.:>,<<d>,r) else write(out,<: kit.:>, string catname(fpkitno(paramno),increase(i))); end; end; fileno:=fileno+1; exitnorecords: if vol<>1 then fileno:=2; if -,singles then readlabel(2); exit: monitor(72)set catbase:(zhelp,0,interval); if rejected>0 or errors>0 then loadnotok: begin write(out,<:<10>***load not ok :>,<<d>,errors+rejected); errorbits:=1; end; end end \f ; boolean procedure openout(z,name); zone z; array name; begin integer i,result; integer array ia(1:17); long projectbaselow,projectbaseup; system(11,0,ia); projectbaselow:=ia(7); projectbaseup :=ia(8); i:=1; open(z,4,string name(increase(i)),0); openout:=true; result:=monitor(76,z,0,ia); if result=2 then begin openout:=false; goto exit_openout; end; if result=0 <*found and system*> and (extend ia(2)<projectbaselow or extend ia(3)>projectbaseup) or result=3 <*not found*> then begin ia(1):=8<*size*>; ia(2):=1; for i:=3 step 1 until 10 do ia(i):=0; ia(6):=systime(7,0,0.0); openout:=monitor(40,z,0,ia)=0; end else if result=0 then begin monitor(42,z,0,ia); i:=ia(9) shift (-12); if i=4 or i>=32 then ia(8):=0; ia(6):=systime(7,0,0.0); ia(7):=ia(9):=ia(10):=0; openout:=monitor(44,z,0,ia)=0; end; exit_openout: end openout; integer procedure changearea(z,i); zone z; integer i; begin integer array tail(1:10),ia(1:20); monitor(42<*lookup*>,z,0,tail); if i extract 1=1 then begin getzone6(z,ia); tail(1):=ia(9); end; if i shift(-1) extract 1=1 then tail(6):=systime(7,0,0.0); changearea:=monitor(44<*change*>,z,0,tail); end changearea; begin integer sep; array fpparam(1:2); real array field raf; sep:=system(4,1,fpparam); raf:=0; if sep shift (-12)<>6 then goto curout else begin zone z(128,1,stderror); system(4,0,fpparam); if -,openout(z,fpparam.raf) then goto curout; program(z); write(z,false add 25,1); changearea(z,1); close(z,true); end; end; if false then curout: program(out); end ▶EOF◀