|
|
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: »algfortrat«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦7e928b248⟧ »algbib«
└─⟦this⟧
;gosav
lookup fortrat
if ok.no
(fortrat=set 150
permanent fortrat.17
fortrat=algol index.yes list.yes)
\f
Input-regler:
1) Overskrift i < >, max 71 karakterer. Denne overskrift
kommer på plotteroutput.
2) Navnet på zonen hvor output fra plotfrekv findes, i < >.
3) Et heltal, 1, 2 el. 3, for valg af plotter:
henholdsvis calcm, tek4006a, eller houstona.
4) Jmax samt 1 el. -1 for henhv. oblat el. prolat.
5) Fmin,Fmax samt C i MHz.
6) X-aksen (frekvensaksen) i cm.
7) Intensitetsgrænser som brøkdele af den maximale intensitet.
Overgangene klassificeres som følger:
Stærke: overgange med intensitet>I(1)*Imax.
Middel: overgange med intensitet>I(2)*Imax.
Svage: overgange med intensitet>I(3)*Imax.
8) Mya,myb,myc. Hvis myi<>0 plottes myi-spektret.
9) Et tal, M, med følgende virkning: M=>0 plotning ophører
efter den aktuelle plotning. M<0 nye data (pkt.1-8) indlæses;
begin
boolean ka,kb,kc,no,nl,closeres;
integer i,j,k,l,n,nr,myi,p,k1,k2,k3,k4,J,J1,J2,
Jmax,signkappa,Fmin,Fmax,dF,kmax,bmin,bmax;
real a,I,maxI,C,X,dX,b,cpu,time;
integer array my(1:3),s,r(1:50);
array Imax,dI(1:3),head(1:12),zonename,drawname(1:2);
zone res,L(128,1,stderror);
nl:=false add 10; closeres:=outmedium(res);
write(res,<:<12>:>); nr:= 0;
spectrum: nr:=nr+1;
readhead(in,head,1); readhead(in,zonename,1);
read(in,p,Jmax,signkappa,Fmin,Fmax,C,X,dI,my); plotunit:=100.0;
a:=zonename(1);
drawname(1):= real <:plot:> add (a shift (-32));
j:=8;
for i:=a extract 8 while i=0 do begin
a:=a shift (-8); j:=j+8 end;
drawname(2):= a shift 8 add (nr+48) shift j;
i:=1; open(L,4,string drawname(increase(i)),0);
for i:=2 step 1 until 10 do s(i):=0;
monitor(48,L,0,s); s(1):=Jmax;
monitor(40,L,0,s); monitor(50,L,15,s); close(L,true);
setplotname(case p of(<:calcm:>,<:tek4006a:>,<:houstona:>),0);
i:=1; saveplot(0,string drawname(increase(i)),0);
dF:=Fmax-Fmin; dX:=X/30;
begin
boolean array B(0:round(100*(X-dX)));
i:=1; open(L,4,string zonename(increase(i)),0);
comment
I denne blok findes den maximale intensitet
for henholdsvis a-, b- og c-type overgange;
Imax(1):=Imax(2):=Imax(3):=0;
p:=kmax:=0; inrec(L,128); a:=L(1);
ny_overgang:
k1:=a shift (-32) extract 8; k2:=a shift (-24) extract 8;
k3:=a shift (-8) extract 8; k4:=a extract 8;
if signkappa=-1 then begin k:=k1; l:=k3 end
else begin k:=k2; l:=k4 end;
for i:=k,l do if i>kmax then kmax:=i;
ka:= (k1+k3) mod 2=0; kc:= (k2+k4) mod 2=0; I:=L(p+3);
j:= if (ka and -,kc) then 1 else if (-,ka and kc) then 3 else 2;
a:=abs L(p+2); if I>Imax(j) and a<Fmax and a>Fmin then Imax(j):=I;
p:=(p+3) mod 126; if p=0 then inrec(L,128);
a:=L(p+1);if a shift (-16) extract 8<=Jmax then goto ny_overgang;
comment
I denne blok læses zonen L igennem 3 gange
for henholdsvis a- ,b- og c-type overgange.
Hvis intensiteten af en overgang er større
end I(3)*Imax, plottes denne;
for myi:=1,2,3 do begin
if my(myi)<>0 then begin
integer array branch(1:Jmax,0:kmax*2);
boolean array br(0:kmax*2);
bmax:=0; bmin:= Jmax*2;
for i:=1 step 1 until Jmax do
for j:=kmax*2 step -1 until 0 do branch(i,j):=0;
cpu:=systime(1,0,time);
for i:=0 step 1 until 100*(X-dX) do B(i):=false;
setposition(L,0,0); maxI:=Imax(myi);
i:=1; write(res,nl,3,string head(increase(i)),nl,1,
case myi of(<:a-:>,<:b-:>,<:c-:>),<:type spectrum.:>,nl,1,
<:Den maximale intensitet::>,<<ddddd.d>,maxI,nl,1,
<:Intensitetsgrænser i procent::>,<< dd.dd>,
dI(1)*100,dI(2)*100,dI(3)*100,nl,1,
<: Jmax=:>,<<dd>,Jmax,<: Fmin=:>,<<dddddd>,Fmin,<: Fmax=:>,
Fmax,<: C=:>,C); if -,closeres then setposition(res,0,0);
plotform(0,X+4,0.6*X+5); setmargin(0.5,0.3);
i:=1; writeplot(<:<12>:>,string head(increase(i)),<: :>,
case myi of(<:a-:>,<:b-:>,<:c-:>),<:type spectrum.:>);
i:=-1; penup; plotmove(2,3); pendown;
for i:=i+1 while 5.0*i<=Jmax do begin
a:=3+(1+12.5*i/Jmax)*X/6; plotmove(2,a);
plotmove(2+0.2*dX,a); plotmove(2,a);
end;
plotmove(2,0.6*X+3); plotmove(X+2,0.6*X+3);
for i:=i-1 while 5*i>=0 do begin
a:=3+(1+12.5*i/Jmax)*X/6; plotmove(X+2,a);
plotmove(X+2-0.2*dX,a); plotmove(X+2,a);
end;
plotmove(X+2,3); plotmove(2,3); penup;
plotsubform(2,X+2,3,0.6*X+3,false);
i:=-1; I:=9*X/60; plotmove(0,I); pendown;
for i:=i+1 while C*i<=dF do begin
a:=0.5*dX + C*i*(X-dX)/dF; plotmove(a,I);
plotmove(a,I-0.15*dX); plotmove(a,I+0.15*dX); plotmove(a,I);
end;
plotmove(X,I); penup;
n:=p:=i:=0; b:=100*(X-dX)/dF; no:=true;
J:=1; inrec(L,128); a:=L(1);
fler_J:
J1:=a shift (-40) extract 8;k1:=a shift (-32) extract 8;
k2:=a shift (-24) extract 8;J2:=a shift (-16) extract 8;
k3:=a shift (-8) extract 8; k4:=a extract 8;
ka:=(k1+k3) mod 2=0; kc:=(k2+k4) mod 2=0;
kb:= case myi of (ka and -,kc, -,ka and -,kc, -,ka and kc);
j:=abs(L(p+2)); I:=L(p+3);
kb:=kb and I>maxI*dI(3) and j>Fmin and j<Fmax;
if J1<=J then begin
if kb then begin
j:=j-Fmin; l:=b*j; B(l):=B(l) add round(I/25);
if J1=J2 and abs(k1-k3)<3 and abs(k2-k4)<3 then begin
l:=J+(if L(p+2)>0 then k2-k1 else k4-k3)*signkappa;
if l>bmax then bmax:=l; if l<bmin then bmin:=l;
branch(J,l):=j
end else begin
n:=n+1;
i:=4095*I/maxI;
s(n):= 0 add (if J1<J2 then J1 else J2) shift 2 add
(if J1=J2 then 2 else 1) shift 14 add i; r(n):=j;
end end;
end else begin
slut_J:
if n>0 then begin
for i:=1 step 1 until n do begin
k1:=r(i); k:=s(i);
for j:=i+1 step 1 until n do begin
if k1>r(j) then begin
r(i):=r(j); r(j):=k1; k1:=r(i);
s(i):=s(j); s(j):=k; k:=s(i);
end hr;
end j;
end i;
for i:=2 step 1 until n do
if r(i)-r(i-1)<b then begin
s(i-1):= s(i-1) + (s(i) extract 14); r(i):=0 end;
if J mod 2=1 then begin
i:=n; k:=-1; j:=1;
end else begin
i:=1; k:=1; j:=n;
end J;
for n:=i step k until j do if r(n)>0 then begin
I:= (s(n) extract 14)/4095;
l:= if I>dI(1) then 50 else
if I>dI(2) then 35 else 20;
pointsize:=X/3000*l;
plotpoint(0.5*dX+r(n)*(X-dX)/dF,
(1.0/6+(s(n) shift (-16) extract 8)*1.25/3/Jmax)
*X,s(n) shift(-14) extract 2);
end n;
n:=0;
end n>0;
J:=J+1; if no then goto fler_J;
end J1<=J;
if no then begin
p:=(p+3) mod 126; if p=0 then inrec(L,128); a:=L(p+1);
if a shift (-16) extract 8<=Jmax then goto fler_J
else begin no:=false; goto slut_J; end;
end no;
for i:=kmax*2 step -1 until 0 do br(i):=false; br(bmin):=true;
k3:=Jmax; k4:=1;
for i:=bmin+1 step 1 until bmax do begin
kc:=false; kb:=true;
for J:=1 step 1 until Jmax do begin
k1:=branch(J,i);
if k1>0 then begin
if J<k3 then k3:=J;
if J>k4 then k4:=J
end;
ka:=abs(branch(J,i-1)-k1)<b;
br(i):=br(i) or -,ka and k1>0;
if ka and kb and kc then branch(J-1,i):=0;
if J<Jmax then begin kc:=kb; kb:=ka end;
end;
if ka and kb then branch(Jmax,i):=0
end i;
J1:=k3; Jmax:=k4;
write(res,nl,3,<:Q-branches::>);
rep:
J2:=J1+5; if J2>Jmax then J2:=Jmax;
write(res,nl,2,<:J =:>);
for J:=J1 step 1 until J2 do write(res,<< dd>,J);
write(res,nl,1);
for i:=bmin step 1 until bmax do if br(i) then begin
ka:=false;
for J:=J1 step 1 until J2 do ka:=ka or branch(J,i)>0;
if ka then begin
k:=3-entier(ln(if i=0 then 1 else i)/ln10);
write(res,nl,1,<:Q:>,<<d>,i,false add 32,k);
for J:=J1 step 1 until J2 do if branch(J,i)>0 then
write(res,<< dddddd>,branch(J,i)+Fmin) else
write(res,<: :>);
end end;
if J2<Jmax then begin J1:=J2+1; goto rep end;
I:=1.25/3/Jmax; J1:=Jmax; J2:=1; j:=-1; pointsize:=X/100; penup;
for i:=bmin step 1 until bmax do if br(i) then begin
k2:=branch(J1,i); kb:=k2>0; kc:=false;
for J:=J1 step j until J2 do begin
k1:=if J<>J2 then branch(J+j,i) else 0; ka:=k1>0;
if kb then begin
a:=0.5*dX+k2*(X-dX)/dF;
b:=(1.0/6+J*I)*X;
if kc or ka then begin
plotmove(a,b);
if ka and -,kc then pendown;
if ka and abs(k1-k2)*(X-dX)/dF>I*X
or kc and abs(k2-k3)*(X-dX)/dF>I*X then begin
plotmove(a,b+0.05*dX); plotmove(a,b-0.05*dX)
end else begin
plotmove(a+0.05*dX,b); plotmove(a-0.05*dX,b) end;
plotmove(a,b)
end else plotpoint(a,b,2);
if -,ka and kc then penup;
end kb;
kc:=kb; kb:=ka; k3:=k2; k2:=k1;
end J;
p:=J1; J1:=J2; J2:=p; j:=-j;
end;
k:=round(100*(X-dX)); n:= B(0) extract 12;
for i:=1 step 1 until k do
if B(i) extract 12 > n then n:= B(i) extract 12;
penup; k1:=0;
for i:=0 step 1 until k do begin
I:= (B(i) extract 12)*2*X/15/n;
if I > 0.1 then begin
k1:=k1+1; a:=0.5*dX+i*0.01;
if k1 mod 2=0 then plotmove(a,I) else plotmove(a,0);
pendown;
if k1 mod 2=0 then plotmove(a,0) else plotmove(a,I);
penup;
end I;
end i;
cpu:=systime(1,time,time)-cpu; write(res,nl,2,
<:cpu tid::>,<<ddddd>,cpu,<: sec. real tid::>,
time,<: sec.:>);
end end myi;
close(L,true); plotclose; i:=1;
write(res,nl,2,<:Tegning lagret i filen: :>,
string drawname(increase(i)));
read(in,J); if J<0 then goto spectrum;
write(res,nl,5,<:<25>:>); close(res,closeres);
end end;
▶EOF◀