|
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: 6144 (0x1800) Types: TextFile Names: »tchangeerr«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ. └─⟦4334b4c0b⟧ └─⟦this⟧ »tchangeerr«
changeerror=algol connect.no begin integer maxchars,mintextno,maxtextno; <* below 3 values may be changed *> maxchars:=47; <*(maxchars+1) mod 6 must be 0*> mintextno:=0; maxtextno:=223; begin real r; integer i,j,k,reals,halfs,persegm,size; zone zto,zfrom,zcor(128,1,stderror); real array programname, ra(1:2); integer array ia(1:10),alfa(0:255); long array field laf,laf0; boolean c,cor,to,from,list; long array toname,fromname,corname(1:2); procedure correct(z); zone z; begin real array ra(1:reals); if -,to then begin close(zto,true); open(zto,4,fromname,0); end else for i:=1 step 1 until size do begin if from then inrec6(zfrom,512); outrec6(zto,512); if from then tofrom(zto,zfrom,512); end; system(8,0,ia.laf0); if ia.laf0(1)=long<:boss:> then c:=false; if c then list:=true; rep: if c then setposition(out,0,0); for j:=readchar(z,i) while j=8 and i<>25 do; if i=101<*e*> or i=25<*em*> then goto programexit; repeatchar(z); j:=read(z,i); if c then setposition(in,0,0); if j=0 then goto program_exit; if i<mintextno or i>maxtextno then begin if -,c then begin error; write(out,<:<10>:>,<<zdd>,i); end; write(out,<: illegal error number<10>:>); if -,c then begin repeatchar(z); for j:=readchar(z,k) while j<>8 do; end; goto rep; end; setposition(zto,0,(i-mintextno)//persegm); inrec6(zto,512); laf:=((i-mintextno) mod persegm)*halfs; if -,c and list then write(out,<:<10>:>,<<zdd>,i,<: :>); if list and from then write(out,zto.laf); if c then begin write(out,<:<10>:>); setposition(out,0,0); end; for k:=1 step 1 until reals do ra(k):=real<::>; if -,c then repeatchar(z); j:=readchar(z,k); if j<>8 and -,c then j:=readchar(z,k); if j<>8 then repeatchar(z); if j=8 then k:=0 else k:=readstring(z,ra,1); if k<0 then begin if -,c then error; write(out,<:<10>:>); if -,c then write(out,<<zdd>,i); write(out,<: text too long<10>:>); for j:=readchar(z,k) while j<>8 do; goto rep; end; if c and ra(1)=real<:ok:> then goto rep; tofrom(zto.laf,ra,halfs); if -,c and list then begin if from then write(out,<:<10> :>); write(out,zto.laf); end; setposition(zto,0,(i-mintextno)//persegm); if to then outrec6(zto,512); goto rep; end correct; procedure error; write(out,<:<10>***:>,programname.laf0,<: :>); isotable(alfa); for i:=32 step 1 until 126 do if alfa(i) shift (-12)=7 then alfa(i):=6 shift 12+i; for i:=128 step 1 until 255 do alfa(i):=0; intable(alfa); laf0:=0; c:=cor:=to:=from:=list:=false; reals:=(maxchars+1)//6; halfs:=4*reals; persegm:=128//reals; size:=(maxtextno-mintextno+persegm)//persegm; for i:=1 step 1 until 128 do zto(i):=real<::>; system(4,0,programname); if (maxchars+1) mod 6<>0 then begin error; write(out,<: (maxchars+1) mod 6 must be = 0<10>:>); goto program_exit; end; if mintextno>maxtextno then begin error; write(out,<: mintextno>maxtextno<10>:>); goto program_exit; end; i:=1; read_fp_param: if system(4,i,ra)=0 then goto finis_read_fp_param; i:=i+1; r:=ra(1); j:=system(4,i,ra); if r=real<:to:> then begin to:=true; toname(1):=long ra(1); toname(2):=long ra(2); end else if r=real<:from:> then begin from:=true; fromname(1):=long ra(1); fromname(2):=long ra(2); end else if r=real<:list:> then begin list:=ra(1)=real<:yes:>; end else if r=real<:cor:> then begin cor:=true; c:=ra(1)=real<:c:>; corname(1):=long ra(1); corname(2):=long ra(2); end else begin error; i:=i-1; system(4,i,ra); i:=1; write(out,<:error in fpparam: :>, string ra(increase(i)),<:<10>:>); goto program_exit; end; i:=i+1; goto read_fp_param; finis_read_fp_param: if -,from and -,to then begin error; write(out,<:neither input nor output specified:>); goto program_exit; end; if from then begin open(zfrom,4,fromname,0); if monitor(42<*lookup*>,zfrom,0,ia)<>0 then begin error; write(out,<:fromname not found<10>:>); goto program_exit; end; end; if to then begin open(zto,4,toname,0); i:=monitor(42<*lookup*>,zto,0,ia); ia(1):=size; for j:=2 step 1 until 10 do ia(j):=0; ia(6):=systime(7,0,0.0); if i=0 then i:=monitor(44<*change*>,zto,0,ia) else i:=monitor(40<*create*>,zto,0,ia); if i<>0 then begin error; write(out,<:toname not found<10>:>); goto program_exit; end; end; if -,cor then begin k:=0; for i:=1 step 1 until size do begin inrec6(zfrom,512); if list then begin for laf:=0 step halfs until halfs*(persegm-1) do begin if zfrom.laf(1)<>0 then write(out,<:<10>:>,<<zdd>,k,<: :>,zfrom.laf); k:=k+1; end end; if to then begin outrec6(zto,512); tofrom(zto,zfrom,512); end; end; end else if c then correct(in) else begin open(zcor,4,corname,0); if monitor(42<*lookup*>,zcor,0,ia)<>0 then begin error; write(out,<:corname not found<10>:>); goto program_exit; end; correct(zcor); close(zcor,true); end; program_exit: if to then close(zto,true); close(zfrom,true); end end ▶EOF◀