|
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: 15360 (0x3c00) Types: TextFile Names: »layoutxt«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦this⟧ »layoutxt« └─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦this⟧ »layoutxt« └─⟦this⟧ »tplot/layoutxt« └─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦dd2c1b53f⟧ »tplot« └─⟦this⟧
;rene moss 8-6-78/17-1-79 scope temp origo minlay laypos numbdigit cutlay, packlay splitlay charlay exactlay, approxnumb digits writelay fixexplay clear temp origo minlay laypos numbdigit cutlay, packlay splitlay charlay exactlay, approxnumb digits writelay fixexplay origo=set 2 minlay=set 2 laypos=set 1 cutlay=set 1 packlay=set 2 splitlay=set 3 charlay=set 3 exactlay=set 2 approxnumb=set 2 digits=set 1 numbdigit=set 1 writelay=set 1 fixexplay=set 3 \f message approxnumb approxnumb=algol message.no list.no external real procedure approxnumb(a,e,digit); value a,e; real a,e; integer digit; comment finds a number r such that an interval of length l around r contains a. r contains as few digits as possible less signifikant digit 5 better than even better than odd; begin integer i,c,p,s; s:=sign(a); a:=abs a; e:=abs e; i:=entier(ln(e)/ln10); e:=e/10**i; a:=a/10**i; p:=a; c:=p//10*10; if abs(a-c)<=e then p:=c else begin c:=p//5*5; if abs(a-c)<=e then p:=c else begin c:=p//2*2; if abs(a-c)<=e then p:=c end end; digit:=entier(ln(if p=0 then 1 else p)/ln10)+1; approxnumb:=s*p*10**i; end approxnumb ; end \f message charlay charlay=algol message.no list.no external boolean procedure charlay(T,lay); array T; real lay; begin integer l1,l2,l,b,h,d,s,pe,fe,pn,fn,v,vg,c,i; boolean npart; real t; charlay:=false; c:=1 shift 23; l1:=l2:=l:=b:=h:=d:=s:=pe:=fe:=pn:=fn:=v:=vg:=0; vg:=T(1) shift (-24) extract 24; T(1):=T(1) shift 16 shift (-16); if vg shift (-8)<>60 shift 8 add 60 or vg extract 8 = 0 then goto END; for i:=0,i+1 while T(i) extract 8 <> 0 do; t:=T(i); for v:=v+1 while t extract 8 = 0 do begin t:=t shift (-8); if v=6 then begin i:=i-1; t:=T(i) end end; if t extract 8<>62 then goto END; t:=t shift(-8); for v:=t extract 8 while v=100 or v=0 do begin if v=0 then begin if i=1 then goto E; i:=i-1; t:=T(i) end else begin h:=h+1; t:=t shift (-8); vg:=v end end ds; npart:=t extract 8>=48 or vg=100; for v:=t extract 8 while v=102 or v=122 or v=45 or v=43 or v=39 or v=0 do begin if v=0 then begin if i=1 then goto E; i:=i-1; t:=T(i) end else begin if (v=102 or v=122) and npart then begin h:=h+1; npart:=false; pn:=v shift (-2) extract 2 end else if v=39 and h<4 and h>0 then begin pe:=pn; fe:=fn; s:=h; h:=fn:=pn:=0; npart:=true end else if v=43 and vg>97 then begin fn:=2; npart:=false end else if v=45 and vg>97 then begin fn:=1; npart:=false end else goto END; t:=t shift (-8); vg:=v end v<>0; end exp-lay or integer lay without space; if vg=39 and v<47 then goto END; for v:=t extract 8 while i>1 or v>0 do begin if v=0 then begin i:=i-1; t:=T(i) end else begin if v=46 and npart and vg<>32 and d=0 then begin d:=h; h:=0 end else if v=43 and vg>97 then begin fn:=2; npart:=false end else if v=45 and vg>97 then begin fn:=1; npart:=false end else begin if v=32 and vg<>46 then begin l1:=l1 add c; npart:=vg<>32 end else if v=48 and d+h+b=0 or npart and (v=98 or v=100 or v=102 or v=122) then begin h:=h+1; if v=48 then b:=b-1; if v extract 2 = 2 then begin pn:=(if v=102 then 1 else if v=122 then 2 else 3); npart:=false end; if vg=32 then l1:=l1 shift 2 add c shift (-1) end else goto END; if l1 extract 1=1 then goto END; l1:=l1 shift (-1) end; t:=t shift (-8); vg:=v end end; E:b:=b+h+d; if b>0 and h<16 and d<16 then begin l1:=l1 add c; charlay:=true; lay:=(-1.0) add l1 shift 6 add b shift 4 add h shift 4 add d shift 2 add pn shift 2 add fn shift 2 add s shift 2 add pe shift 2 add fe; end; END: end charlay ; end \f message cutlay cutlay=algol message.no list.no external real procedure cutlay(lay,digit); value digit; integer digit; string lay; comment changes a given layout to show max. digit digits; begin real l; integer l1,i,j,b,h,d; cutlay:=l:=real lay; b:=l shift(-18) extract 5; if digit<b and digit>0 then begin h:=l shift(-14) extract 4; i:=b-digit; b:=digit; l1:=l shift (-24) extract 24; j:=0; if l shift (-4) extract 2 <>0 then begin if i>=h then i:=h-1; h:=h-i; for j:=0,j+1 while l1<0 do l1:=l1 shift 1; j:=j+i+1; for i:=i step -1 until 0 do begin if l1<0 then j:=j+1; l1:=l1 shift 1 end end; cutlay:=(-1.0) add (-1) shift (25-j) add (l1 shift (-j)) shift 6 add b shift 4 add h shift 14 add (l extract 14) end end cutlay ; end \f message digits digits=algol message.no list.no external real procedure digits(z,nexp,nd); value z; real z; integer nexp,nd; begin integer b,p; real a,r,roundr; r:=abs z; if r<=0.0 then begin digits:=0; nexp:=nd:=0 end else begin roundr:=2**34; p:=entier(ln(roundr*2/r)/ln10)-1; r:=r*10**p+roundr-roundr; b:=(if r>=1000000000 then 11 else 10); for p:=p+1,p-1 while r*10-a=0.0 do begin a:=r; b:=b-1; r:=a/10-.5+roundr-roundr end; digits:=if z>0 then a else -a; nexp:=-p; nd:=b end end digits ;end \f message exactlay exactlay=algol message.no list.no external real procedure exactlay(z,npos,zr); value z; real z,zr; integer npos; begin integer b,h,d,s,fn,fe,n,p; real r,roundr,zb; zr:=z; h:=b:=1; d:=s:=fn:=fe:=n:=0; if z<0 then begin fn:=1; z:=-z end; if z>0 then begin roundr:=2**34; p:=entier(ln(roundr*2/z)/ln10)-1; r:=z*10**p+roundr-roundr; b:=(if r>=1000000000 then 10 else 9); p:=p-b; for b:=b+1,b-1 while r*10-zb=0.0 do begin zb:=r; r:=zb/10+.5+roundr-roundr-1 end; h:=b; p:=-p-b; if p>2 or p<-2-b then begin if p<0 then fe:=1; s:=(if abs p>99 then 3 else if abs p>9 then 2 else 1); n:=1 end else begin if p<0 then begin d:=-p; n:=1 end; h:=b+p; if h<=0 then h:=1 end end; exactlay:=1.0 shift 29 add b shift 4 add h shift 4 add d shift 4 add fn shift 2 add s shift 4 add fe; npos:=n+h+d+s+fe+fn end exactlay ; end \f message fixexplay fixexplay=algol message.no list.no external real procedure fixexplay(lay,zref,z,zr); value lay,zref,z; real lay,zref,z,zr; begin integer l,h,b,d,pref,p,r,l1,n; fixexplay:=lay; zr:=z; l1:=lay shift (-24) extract 24; h:=lay shift (-14) extract 4; b:=lay shift (-18) extract 5; n:=lay shift (-4) extract 2; d:=lay shift (-10) extract 4; r:=l:=0; for l1:=l1 shift 1 while l1<0 do l:=l+1; if z=0.0 then begin for l1:=l1 shift (-1) while l1<>0 do l:=l+l1 extract 1; l:=33-l-h-(if n>0 then n+1 else 0)+(if lay extract 2<>0 then 0 else 1)- (if d>0 then d+1 else 0)-(if lay shift(-6) extract 2>0 then 1 else 0); fixexplay:=(-1.0) add (-1) shift l add 17 shift 14 end else if zref<>0.0 then begin p:=entier(ln(abs z)/ln10); pref:=entier(ln(abs zref)/ln10); if p<>pref then begin if n>0 then begin n:=d+h-b; r:=-(pref-h+1) mod (n+1); if r<0 then r:=r+3; p:=p-pref end else n:=p:=p-h+1; if p>r shift 1 then begin for p:=p-1 while l>0 and p>=0 do begin h:=h+1; b:=b+1; l:=l-1; l1:=l1 shift (-1) end end else if p<r shift 1-n then begin r:=(if n>d then n-d+1 else 1); for p:=p+1 while h>r and p<=0 do begin l1:=l1 shift 1; l:=(if l1<0 then l+2 else l+1); h:=h-1; b:=b-1 end; if b<1 then b:=1 end; fixexplay:=(-1.0) add (-1) shift 24 add (l1 extract 23) shift (5-l) add b shift 4 add h shift 14 add (lay extract 14) end end expdel end fixexplay ; end \f message laypos laypos=algol message.no list.no external integer procedure laypos(lay,b); value lay; real lay; integer b; comment the value is the number of positions for the layout lay; begin integer i,pos; pos:=0; if lay extract 2 <> 0 then pos:=pos+1; lay:=lay shift(-4); pos:=pos+lay extract 2; lay:=lay shift (-2); if pos>0 then pos:=pos+1; if lay extract 2 <> 0 then pos:=pos+1; lay:=lay shift(-4); if lay extract 4 <> 0 then pos:=pos+lay extract 4+1; lay:=lay shift(-4); pos:=pos+lay extract 4; lay:=lay shift(-4); b:=lay extract 4; lay:=lay shift (-6); for i:=1 step 1 until 23 do begin pos:=pos+lay extract 1; lay:=lay shift (-1) end; laypos:=pos; end laypos ; end \f message minlay minlay=algol message.no list.no external real procedure minlay(z,errz,npos,zr); value z,errz; real z,errz,zr; integer npos; begin integer b,h,d,fn,s,fe,p,n; zr:=z; b:=h:=1; d:=s:=fn:=fe:=n:=0; if z<0 then begin z:=-z; fn:=1 end; if z>0 then begin if errz=0.0 then b:=h:=11 else begin if errz<0.0 then errz:=-z/errz else errz:=1/errz; if errz>1.0 then begin h:=b:=ln(errz)/ln10+.5; if b>11 then b:=h:=11; end end; p:=ln(z)/ln10-.5; if b=11 and z*10**(-p)>3.4359738368 then b:=h:=10; p:=p-b+1; if p>2 or p<-1-b then begin if p<0 then fe:=1; s:=(if abs p>99 then 3 else if abs p>9 then 2 else 1); n:=1 end else begin if p<0 then begin d:=-p; n:=1 end; h:=b+p; if h<1 then h:=1 end end z>0; minlay:=1.0 shift 29 add b shift 4 add h shift 4 add d shift 4 add fn shift 2 add s shift 4 add fe; npos:=n+h+d+s+fe+fn end minlay ; end \f message numbdigit numbdigit=algol message.no list.no external integer procedure numbdigit(a,c,ar); value a; real ar,a; integer c; begin integer n; real b,r,roundr; ar:=a; a:=abs a; if a=0.0 then begin numbdigit:=0; c:=0 end else begin roundr:=2**34; r:=a*10**entier(ln(roundr*2/a)/ln10-1)+roundr-roundr; n:=(if r>=1000000000 then 10 else 9); for n:=n,n-1 while r*10-b=0.0 do begin b:=r; r:=b/10+.5+roundr-roundr-1 end; numbdigit:=n+1; c:=b-10*r end end numbdigit ; end \f message origo origo = algol message.no list.no external real procedure origo(zl,zh,zde); value zl,zh; real zl,zh; integer zde; begin real s,roundr,h,l; integer p; if zh<zl then begin s:=zl; zl:=zh; zh:=s end; if zl<0 then begin s:=zl; zl:=-zh; zh:=-s; s:=-1 end else s:=1; if zl<=0 then begin origo:=0; zde:=0 end else begin roundr:=2**34; p:=entier(ln(roundr*2/zh)/ln10)-1; l:=zl*10**p; h:=zh*10**p; for p:=p+1,p-1 while l<h or zl=10*l or zh=10*h do begin zl:=l; zh:=h; h:=zh/10+.5+roundr-roundr-1; l:=-(-zl/10-.5-roundr+roundr) end; zl:=zl-l*10; if zl<0 then begin zl:=zl+10; l:=l-1 end; if zh-l*10>=10 then begin origo:=s*(l+1)*10**(1-p); zde:=1-p end else begin zh:=zh-h*10; if zh>=5 and 5>=zl then zl:=5 else begin if s<0 then begin h:=zl; zl:=zh; zh:=h end; h:=entier((zl+s)/2)*2; if s*h<=s*zh then zl:=h end; origo:=(l*10+zl)*10**(-p)*s; zde:=-p end end end origo ; end \f message packlay packlay=algol message.no list.no external boolean procedure packlay(l,b,h,d,s,type,lay); value l,b,h,d,s; integer l,b,h,d,s; string type; real lay; begin integer l1,l2,v; real r; packlay:=false; if l>22 or b>32 or h>15 or d>15 or s>3 or l<0 or b<0 or h<0 or d<0 or s<0 then goto END; l1:=(-1) shift (23-l); l2:=b shift 4 add h shift 4 add d; r:=real type; v:=r shift (-32) extract 8; l:=(if v=100 then 0 else if v=102 then 1 else if v=122 then 2 else if v=98 then 3 else -1); if l<0 then goto END; l2:=l2 shift 2 add l; v:=r shift (-40) extract 8; l:=(if v=32 then 0 else if v=45 then 1 else if v=43 then 2 else -1); if l<0 then goto END; l2:=l2 shift 2 add l; if s=0 then l2:=l2 shift 6 else begin v:=r shift (-24) extract 8; if v<>39 then goto END; v:=r shift (-16) extract 8; l:=(if v=32 then 0 else if v=45 then 1 else if v=43 then 2 else -1); if l<0 then goto END; v:=r shift (-8) extract 8; v:=(if v=100 then 0 else if v=102 then 1 else if v=122 then 2 else -1); if v<0 then goto END; l2:=l2 shift 2 add s shift 2 add v shift 2 add l end; packlay:=true; lay:=(-1.0) add l1 shift 24 add l2; END: end packlay ; end \f message splitlay splitlay=algol message.no list.no external integer procedure splitlay(lay,l,b,h,d,s,CF); integer l,b,h,d,s; real lay; array CF; begin integer i,j,k,no,v,ind,l1,l2; real r; procedure addchar(A,val); value val; array A; integer val; begin no:=no+1; if no mod 6 = 1 then begin ind:=ind+1; CF(ind):=(-1.0) add val end else CF(ind):=CF(ind) shift 8 add val end addchar; CF(1):=(-1.0) add 60 shift 8 add 60; no:=2; ind:=1; l1:=lay shift (-24) extract 24; l2:=lay extract 24; i:=0; for l1:=l1 shift 1 while l1<0 do begin i:=i+1; addchar(CF,32) end; k:=l:=i; i:=l2 shift (-6) extract 2 +1; v:=case i of (32,45,43); if v<>32 then addchar(CF,v); r:=(-1.0) add v; i:=l2 shift (-8) extract 2+1; v:=case i of (100,102,122,98); addchar(CF,v); r:=r shift 8 add v; h:=i:=l2 shift (-14) extract 4; b:=l2 shift (-18) extract 5; j:=b-1; for i:=i-1 step -1 until 1 do begin l1:=l1 shift 1; if l1<0 then addchar(CF,32); addchar(CF,if j>0 then 100 else 48); j:=j-1 end; d:=i:=l2 shift (-10) extract 4; if i>0 then begin addchar(CF,46); for i:=i step -1 until 1 do begin l1:=l1 shift 1; if l1<0 then addchar(CF,32); addchar(CF,if j>0 then 100 else 48); j:=j-1 end end; s:=i:=l2 shift (-4) extract 2; if i<=0 then lay:=r shift 32 else begin addchar(CF,39); r:=r shift 8 add 39; j:=l2 extract 2 +1; v:=case j of (32,45,43); if v<>32 then addchar(CF,v); r:=r shift 8 add v; j:=l2 shift (-2) extract 2 + 1; v:=case j of (100,102,122); addchar(CF,v); lay:=r shift 8 add v shift 8; for i:=i-1 step -1 until 1 do addchar(CF,100) end; splitlay:=no-2; addchar(CF,62); for no:=no while no mod 6 <> 0 do addchar(CF,0); end splitlay ; end \f message writelay writelay=algol message.no list.no external procedure writelay(z,lay); value lay; real lay; zone z; begin integer i; array A(1:11); cleararray(A); splitlay(lay,i,i,i,i,i,A); i:=1; write(z,A(increase(i))); end writelay ; end ▶EOF◀