|
|
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: 3840 (0xf00)
Types: TextFile
Names: »extreadstru«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦58ca399f1⟧ »extbib«
└─⟦this⟧
readstruct=algol list.yes index.no
external
boolean procedure readstruct(res,X,N);
value N; integer N; zone res; array X;
begin
integer i,j,k,l,m,n,p,s,t,Ni,Nj,Nk,Nl;
real r,v,s1,s2,rad,li,lj,lz,sinv,cosv,sn2;
boolean lin,nl;
array ei,ej,ez(1:3);
real procedure vector(e,Ni,Nj);
value Ni,Nj; integer Ni,Nj; array e;
begin
real l,r; integer k;
r:= 0;
for k:=1 step 1 until 3 do begin
e(k):= l:= X(Nj+k)-X(Ni+k); r:= r+ l*l end;
r:= vector:= sqrt(r); r:= 1/r;
for k:= 1 step 1 until 3 do e(k):= e(k)*r
end vector;
procedure wd(i,j,r);
value i,j,r; integer i,j; real r;
begin
write(res,nl,1,<:dist(:>,<<d>,i,<:,:>,j,
<:) = :>,<<d.dddd>,r)
end;
procedure wa(i,j,k,v,p);
value i,j,k,v,p; integer i,j,k,p; real v;
begin
write(res,<: angle(:>,<<d>,i,<:,:>,j,<:,:>,k);
if p=111 then write(res,<:':>);
write(res,<:) = :>,<<ddd.dd>,v)
end;
procedure ws(i,j,k,l,st,v);
value i,j,k,l,v; integer i,j,k,l; real v; string st;
begin
write(res,<: :>,st,<<d>,i,<:,:>,j,<:,:>,k,
<:,:>,l,<:) = :>,<<ddd.dd>,v)
end;
nl:= false add 10; rad:= pi/180;
read(in,i,j,k,s1,s2,v); p:= 0;
wd(i,j,s1); wd(j,k,s2); wa(i,j,k,v,0);
lin:= v=180 or v=0; v:= v*rad;
Ni:= (i-1)*3; Nj:= (j-1)*3; Nk:= (k-1)*3;
for m:=1 step 1 until 3 do
X(Ni+m):= X(Nj+m):= X(Nk+m):= 0;
X(Ni+1):= -s1; X(Nk+1):= -cos(v)*s2; X(Nk+2):= sin(v)*s2;
for n:=4 step 1 until N do begin
read(in,i,j,k);
Ni:= (i-1)*3; Nj:= (j-1)*3; Nk:= (k-1)*3;
if lin then begin
read(in,r,v); lin:= v=180 or v=0;
wd(j,k,r); wa(i,j,k,v,0); v:= v*rad;
X(Nk+1):= X(Nj+1)+cos(v)*r*sign(X(Ni+1)-X(Nj+1));
X(Nk+2):= sin(v)*r; X(Nk+3):= 0
end else begin
read(in,l,r);
if l=180 or l=0 then begin
wd(j,k,r); wa(i,j,k,l,0);
vector(ei,Nj,Ni); li:= if l=0 then 1 else -1;
lj:= lz:= 0; Nl:= Nk; Nk:= Nj; p:= 0
end else begin
repeatchar(in); readchar(in,p);
read(in,s1,s2); Nl:= (l-1)*3;
vector(ei,Nk,Ni); vector(ej,Nk,Nj); sn2:= cosv:= 0;
for m:=1 step 1 until 3 do begin
s:= m mod 3 + 1; t:= (m+1) mod 3 + 1;
ez(m):= li:= ei(s)*ej(t)-ei(t)*ej(s);
cosv:= cosv+ei(m)*ej(m); sn2:= sn2+li*li
end;
sinv:= sqrt(sn2); wd(k,l,r); wa(j,k,l,s1,p); s1:= s1*rad;
end;
if p=97 then begin real pi,pj;
wa(i,k,l,s2,0); pi:= cos(s2*rad); pj:= cos(s1);
li:= (pi-pj*cosv)/sn2; lj:= (pj-pi*cosv)/sn2;
lz:= sqrt(1-li*li-lj*lj-2*li*lj*cosv)/sinv; p:= 0
end angle;
if p=111 then begin
ws(i,j,k,l,<:outo(:>,s2); s2:= s2*rad;
lz:= cos(s2); li:= -sin(s1)*lz/sinv;
lj:= cos(s1)*lz-li*cosv; lz:= sin(s2)/sinv; p:= 0
end outo;
if p=116 then begin
ws(i,j,k,l,<:tors(:>,s2); s2:= s2*rad;
li:= sin(s1)/sinv; lz:= -sin(s2)*li;
li:= cos(s2)*li; lj:= cos(s1)-cosv*li; p:= 0
end;
if p<>0 then begin
write(res,<:
***readstruct error. Illegal del. after dist.: :>,
false add p,1,<: = (:>,<<d>,p,<:)<10>:>);
goto stop end;
for m:=1 step 1 until 3 do
X(Nl+m):= X(Nk+m)+(ei(m)*li+ej(m)*lj+ez(m)*lz)*r;
end end n;
stop: readstruct:= p<>0 end;
end
▶EOF◀