|
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: »algstarkplo«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦7e928b248⟧ »algbib« └─⟦this⟧
\f begin integer i,j,k,m,s,t,J1,J,k1,k2,Jm,N,dev; real F,w,dw,a,b,c,d,e,skalax,skalay,hbr,yymmdd,hhmmss; boolean nl, sp, bu, bl, Q, closeres, down; integer array qtn(1:2); array name(1:2), head,my(1:3); zone res,z(128,1,stderror), L(128*2,2,stderror); closeres:=outmedium(res); readhead(in,head,1); readhead(in,name,1); read(in,dev,my); i:= 1; N:=-1; open(L,4,string name(increase(i)),0); sp:= false add 32; nl:= false add 10; J1:=100; nylinie: Jm:= 0; N:=(N+1) mod 4; repeatchar(in); for j:=1,2 do begin read(in,J,k1,k2); if Jm<J then begin m:= Jm; Jm:= J end else m:= J; qtn(j):= J shift 8 add k1 shift 8 add k2 end; read(in,F,hbr,skalax,skalay); down:=skalax<0; skalax:=abs(1/skalax); Q:= m=Jm; if m<J1+1 then begin setposition(L,0,0); k:= 0; inrec(L,128); e:= L(1) end; begin integer nrec; integer array tail(1:10); real min,max,X,I; array displ,I0(0:Jm); for i:=0 step 1 until Jm do displ(i):=0; repeat: for j:=1,2 do begin t:= qtn(j); s:= if t = e shift (-24) extract 24 then -1 else if t = e extract 24 then 1 else 0; if s<>0 then begin k1:= (e shift (-32) extract 8)-(e shift (-8) extract 8); k2:= (e shift (-24) extract 8)-(e extract 8); bu:= k1 = k1//2*2; bl:= k2 = k2//2*2; t:= if bu and -,bl then 1 else if -,bu and -,bl then 2 else if -,bu and bl then 3 else 0; if t=0 then goto stop; if my(t)>0 then begin J1:= e shift (-40) extract 8; J := e shift (-16) extract 8; if j=1 then s:= -s; b:= L(k+3)*0.06336397; d:= L(k+2)*s; if J1=J then a:= 0 else begin a:= b*J*J; b:= -b end; for k1:=1 step 1 until Jm do begin m:= if Q then k1 else k1-1; c:= (a + b*m*m)*(my(t)*F)**2; bu:= c*c>(d*d+c)*abs d*0.0001; dw:= c/d; if bu then begin w:= (c+c)/(d + sign(d)*sqrt(d*d+4*c)); dw:= w-dw end else w:= dw; displ(k1):= displ(k1) + w end end end end; k:= (k+3) mod 126; if k=0 then inrec(L,128); e:= L(k+1); J1:= e shift (-16) extract 8; if J1>=0 and J1<=Jm+1 then goto repeat; min:=max:=0; for i:=0 step 1 until Jm do begin a:=displ(i); if a>max then max:=a; if a<min then min:=a end; min:=min-4*hbr; max:=max+4*hbr; d:=0.25*hbr*hbr*skalax*skalax; for i:=0 step 1 until Jm do displ(i):=(if down then max-displ(i) else displ(i)-min)*skalax; nrec:=round((max-min)*skalax+0.5); tail(1):=nrec; for i:=2 step 1 until 10 do tail(i):=0; a:=0; if Q then begin for i:=1 step 1 until Jm do begin I0(i):=-i*i; a:=a+I0(i) end end else begin k:=Jm*Jm; for i:=1 step 1 until Jm-1 do begin I0(i+1):=i*i-k; a:=a+I0(i+1) end; I0(1):=-0.5*k; a:=a+I0(1) end; I0(0):=-a; a:=b:=0; open(z,4,<:lineplot:>,0); monitor(40,z,0,tail); for j:=0 step 1 until nrec-1 do begin outrec(z,128); for k:=1 step 1 until 100 do z(k):=0; for i:=0 step 1 until Jm do begin I:=I0(i); X:=displ(i)-j; for k:=1 step 1 until 100 do begin X:=X-0.01; z(k):=z(k)+I/(d+X*X); end end i; for k:=1 step 1 until 100 do begin c:=z(k); if c>b then begin dw:=j+0.01*k; b:=c end else if c<a then a:=c; end k; end j; systime(1,0,yymmdd); yymmdd:=systime(4,w,hhmmss); dw:=(displ(0)-dw)/skalax; if down then dw:=-dw; if N=0 then write(res,<:<12>:>,nl,2); i:=1; write(res,string head(increase(i)),<< dd dd dd>, yymmdd,hhmmss, << dd>,qtn(1) shift (-16) extract 8,qtn(1) shift (-8) extract 8,qtn(1) extract 8,<: -> :>,qtn(2) shift (-16) extract 8,qtn(2) shift (-8) extract 8, qtn(2) extract 8); write(res,nl,1,<:Mya = :>,<< d.ddd>,my(1),<: Myb = :>, my(2),<: Myc = :>,my(3),nl,1,<:corr. to top-frequency: :>, dw,<: MHz.:>,<: Stark-voltage: :>,<<dddd>,F,<: V/cm.:>, <<dd.dd>,1/skalax,<: MHz/cm. hbr = :>,hbr,<: MHz.:>); if dev<5 then begin c:=(skalay*(b-a))/b; catchbuf; plotmaxbuf:=byteload(owndescr+26)-1; setplotname(case dev of (<:plotter:>,<:calinch:>,<:calcm:>, <:tekdisp:>,<:tek4006:>)); plotform(0,4+nrec,4+c); setmargin(1,3+c); i:=1; b:=skalay/b; w:=1-a*b; penup; plotmove(1,w); pendown; for i:=4 step 1 until 4*(nrec+3) do begin if i mod 2=0 then penup; plotmove(0.25*i,w); pendown end; if down then begin penup; plotmove(1,w); pendown; plotmove(1.25,w+0.25); penup; plotmove(1,w); pendown; plotmove(1.25,w-0.25) end else begin pendown; plotmove(2.75+nrec,w+0.25); penup; plotmove(3+nrec,w); pendown; plotmove(2.75+nrec,w-0.25) end; penup; setposition(z,0,0); inrec(z,1); plotmove(2,w+z(1)*b); pendown; setposition(z,0,0); for j:=0 step 1 until nrec-1 do begin inrec(z,128); k:=j+2; for i:=1 step 1 until 100 do plotmove(k+0.01*i,w+z(i)*b) end; b:=b/d; for i:=0 step 1 until Jm do begin penup; plotmove(2+displ(i),w); pendown; plotmove(2+displ(i),w+I0(i)*b) end; plotclose; end dev<5; setposition(z,0,0); monitor(48,z,0,tail); close(z,true); end; for i:=readchar(in,j) while i<>2 and i<>6 and j<>25 do; if i=2 then goto ny_linie; stop:close(L,true); end ▶EOF◀