Mouse rotations source
Bates TAD/HRNAB ms294 x2601
blbates at AERO4.LARC.NASA.GOV
Tue Mar 15 22:59:57 AEST 1988
program solidshade
character file*80,reverse*1,type*1
integer*2 bx,by,numdev,numlights,sleep,val
integer*4 ax,ay,curentdev(0:3),dev,fovy,g,i,inorm(162,66,4),lamps
integer*4 nullwin,oldwin,rankleft,rankmid,rankright,shadesolid
integer*4 xwinlen,xwinorg,ywinlen,ywinorg
integer*4 j,k,nx(4),ny(4),nz(4)
logical bflag,btogl,cflag,ctogl,extflag,currentwin,front
logical ltemp,mflag,pflag,sflag,stogl
logical xflag,xtogl,yflag,ytogl,zflag,ztogl
real data(3,162,66,4),far,lightlen,mag,magrate
real near,nmag1,nmag2,nmag3,nmag4
real norm(3,162,66,4),normlength
real nx1,nx2,nx3,nx4,ny1,ny2,ny3,ny4,nz1,nz2,nz3,nz4
real rprate,rxrate,ryrate,rzrate,scale,tempdircos
real totdircos,totext,txrate,tyrate
real viewpnt,vx1,vx2,vx3,vx4,vy1,vy2,vy3,vy4,vz1,vz2,vz3,vz4
real xangle,xdiff,xdircos(3),xmax,xmid,xmin,xpos
real yangle,ydiff,ydircos(3),ymax,ymid,ymin,ypos
real zangle,zdircos(3),zmax,zmid,zmin
$ include /usr/include/fgl.h
$ include /usr/include/fdevice.h
call getarg(2,file)
call getarg(3,type)
call getarg(4,reverse)
if(type.eq.'b') then
open(79,file=file,form='binary')
read(79) ngrid
read(79) (nx(i),ny(i),nz(i),i=1,ngrid)
do 20 g=1,ngrid
write(*,1000) g,nx(g),g,ny(g),g,nz(g)
if(reverse.eq.'r') then
read(79)(((data(1,i,j,g),i=1,nx(g)),j=ny(g),1,-1),k=1,nz(g)),
. (((data(2,i,j,g),i=1,nx(g)),j=ny(g),1,-1),k=1,nz(g)),
. (((data(3,i,j,g),i=1,nx(g)),j=ny(g),1,-1),k=1,nz(g))
else
read(79)(((data(1,i,j,g),i=1,nx(g)),j=1,ny(g)),k=1,nz(g)),
. (((data(2,i,j,g),i=1,nx(g)),j=1,ny(g)),k=1,nz(g)),
. (((data(3,i,j,g),i=1,nx(g)),j=1,ny(g)),k=1,nz(g))
endif
if(nz(g).gt.1) then
open(80,file='out.bin',form='binary')
write(80) ngrid
write(*,1000) g,nx(g),g,ny(g),g,1
write(80) (nx(i),ny(i),1,i=1,ngrid)
write(80)((data(1,i,j,g),i=1,nx(g)),j=1,ny(g)),
. ((data(2,i,j,g),i=1,nx(g)),j=1,ny(g)),
. ((data(3,i,j,g),i=1,nx(g)),j=1,ny(g))
endif
20 continue
else
open(79,file=file,form='formatted')
read(79,*) ngrid
read(79,*) (nx(i),ny(i),nz(i),i=1,ngrid)
do 30 g=1,ngrid
write(*,1000) g,nx(g),g,ny(g),g,nz(g)
if(reverse.eq.'r') then
read(79,*)(((data(1,i,j,g),i=1,nx(g)),j=ny(g),1,-1),k=1,nz(g)),
. (((data(2,i,j,g),i=1,nx(g)),j=ny(g),1,-1),k=1,nz(g)),
. (((data(3,i,j,g),i=1,nx(g)),j=ny(g),1,-1),k=1,nz(g))
else
read(79,*)(((data(1,i,j,g),i=1,nx(g)),j=1,ny(g)),k=1,nz(g)),
. (((data(2,i,j,g),i=1,nx(g)),j=1,ny(g)),k=1,nz(g)),
. (((data(3,i,j,g),i=1,nx(g)),j=1,ny(g)),k=1,nz(g))
endif
nz(g)=1
30 continue
open(80,file='out.bin',form='binary')
write(80) ngrid
write(80) (nx(i),ny(i),nz(i),i=1,ngrid)
do 40 g=1,ngrid
write(*,1000) g,nx(g),g,ny(g),g,nz(g)
c if(g.ne.3) then
write(80)(((data(1,i,j,g),i=1,nx(g)),j=1,ny(g)),k=1,nz(g)),
. (((data(2,i,j,g),i=1,nx(g)),j=1,ny(g)),k=1,nz(g)),
. (((data(3,i,j,g),i=1,nx(g)),j=1,ny(g)),k=1,nz(g))
c else
c write(80)(((data(1,i,j,g),i=1,nx(g)),j=ny(g),1,-1),k=1,nz(g)),
c . (((data(2,i,j,g),i=1,nx(g)),j=ny(g),1,-1),k=1,nz(g)),
c . (((data(3,i,j,g),i=1,nx(g)),j=ny(g),1,-1),k=1,nz(g))
c endif
40 continue
endif
close(79)
close(80)
extflag=.true.
do 220 g=1,ngrid
do 220 i=1,nx(g)
do 220 j=1,ny(g)
x1=data(1,i,j,g)
y1=data(2,i,j,g)
z1=data(3,i,j,g)
if(i.gt.1.and.i.lt.nx(g).and.j.gt.1.and.j.lt.ny(g)) then
vx1=data(1,i+1,j,g)-x1
vy1=data(2,i+1,j,g)-y1
vz1=data(3,i+1,j,g)-z1
vx2=data(1,i,j+1,g)-x1
vy2=data(2,i,j+1,g)-y1
vz2=data(3,i,j+1,g)-z1
vx3=data(1,i-1,j,g)-x1
vy3=data(2,i-1,j,g)-y1
vz3=data(3,i-1,j,g)-z1
vx4=data(1,i,j-1,g)-x1
vy4=data(2,i,j-1,g)-y1
vz4=data(3,i,j-1,g)-z1
nx1=vy1*vz2-vz1*vy2
ny1=vz1*vx2-vx1*vz2
nz1=vx1*vy2-vy1*vx2
nmag1=sqrt(nx1*nx1+ny1*ny1+nz1*nz1)
if(nmag1.gt.0) then
nx1=nx1/nmag1
ny1=ny1/nmag1
nz1=nz1/nmag1
endif
nx2=vy2*vz3-vz2*vy3
ny2=vz2*vx3-vx2*vz3
nz2=vx2*vy3-vy2*vx3
nmag2=sqrt(nx2*nx2+ny2*ny2+nz2*nz2)
if(nmag2.gt.0) then
nx2=nx2/nmag2
ny2=ny2/nmag2
nz2=nz2/nmag2
endif
nx3=vy3*vz4-vz3*vy4
ny3=vz3*vx4-vx3*vz4
nz3=vx3*vy4-vy3*vx4
nmag3=sqrt(nx3*nx3+ny3*ny3+nz3*nz3)
if(nmag3.gt.0) then
nx3=nx3/nmag3
ny3=ny3/nmag3
nz3=nz3/nmag3
endif
nx4=vy4*vz1-vz4*vy1
ny4=vz4*vx1-vx4*vz1
nz4=vx4*vy1-vy4*vx1
nmag4=sqrt(nx4*nx4+ny4*ny4+nz4*nz4)
if(nmag4.gt.0) then
nx4=nx4/nmag4
ny4=ny4/nmag4
nz4=nz4/nmag4
endif
norm(1,i,j,g)=nx1+nx2+nx3+nx4
norm(2,i,j,g)=ny1+ny2+ny3+ny4
norm(3,i,j,g)=nz1+nz2+nz3+nz4
else if(i.eq.1.and.j.eq.ny(g)) then
vx1=data(1,i+1,j,g)-x1
vy1=data(2,i+1,j,g)-y1
vz1=data(3,i+1,j,g)-z1
vx4=data(1,i,j-1,g)-x1
vy4=data(2,i,j-1,g)-y1
vz4=data(3,i,j-1,g)-z1
nx4=vy4*vz1-vz4*vy1
ny4=vz4*vx1-vx4*vz1
nz4=vx4*vy1-vy4*vx1
nmag4=sqrt(nx4*nx4+ny4*ny4+nz4*nz4)
if(nmag4.gt.0) then
nx4=nx4/nmag4
ny4=ny4/nmag4
nz4=nz4/nmag4
endif
norm(1,i,j,g)=nx4
norm(2,i,j,g)=ny4
norm(3,i,j,g)=nz4
else if(i.eq.1.and.j.eq.1) then
vx1=data(1,i+1,j,g)-x1
vy1=data(2,i+1,j,g)-y1
vz1=data(3,i+1,j,g)-z1
vx2=data(1,i,j+1,g)-x1
vy2=data(2,i,j+1,g)-y1
vz2=data(3,i,j+1,g)-z1
nx1=vy1*vz2-vz1*vy2
ny1=vz1*vx2-vx1*vz2
nz1=vx1*vy2-vy1*vx2
nmag1=sqrt(nx1*nx1+ny1*ny1+nz1*nz1)
if(nmag1.gt.0) then
nx1=nx1/nmag1
ny1=ny1/nmag1
nz1=nz1/nmag1
endif
norm(1,i,j,g)=nx1
norm(2,i,j,g)=ny1
norm(3,i,j,g)=nz1
else if(i.eq.nx(g).and.j.eq.ny(g)) then
vx3=data(1,i-1,j,g)-x1
vy3=data(2,i-1,j,g)-y1
vz3=data(3,i-1,j,g)-z1
vx4=data(1,i,j-1,g)-x1
vy4=data(2,i,j-1,g)-y1
vz4=data(3,i,j-1,g)-z1
nx3=vy3*vz4-vz3*vy4
ny3=vz3*vx4-vx3*vz4
nz3=vx3*vy4-vy3*vx4
nmag3=sqrt(nx3*nx3+ny3*ny3+nz3*nz3)
if(nmag3.gt.0) then
nx3=nx3/nmag3
ny3=ny3/nmag3
nz3=nz3/nmag3
endif
norm(1,i,j,g)=nx3
norm(2,i,j,g)=ny3
norm(3,i,j,g)=nz3
else if(i.eq.nx(g).and.j.eq.1) then
vx2=data(1,i,j+1,g)-x1
vy2=data(2,i,j+1,g)-y1
vz2=data(3,i,j+1,g)-z1
vx3=data(1,i-1,j,g)-x1
vy3=data(2,i-1,j,g)-y1
vz3=data(3,i-1,j,g)-z1
nx2=vy2*vz3-vz2*vy3
ny2=vz2*vx3-vx2*vz3
nz2=vx2*vy3-vy2*vx3
nmag2=sqrt(nx2*nx2+ny2*ny2+nz2*nz2)
if(nmag2.gt.0) then
nx2=nx2/nmag2
ny2=ny2/nmag2
nz2=nz2/nmag2
endif
norm(1,i,j,g)=nx2
norm(2,i,j,g)=ny2
norm(3,i,j,g)=nz2
else if(i.eq.1.and.j.gt.1.and.j.lt.ny(g)) then
vx1=data(1,i+1,j,g)-x1
vy1=data(2,i+1,j,g)-y1
vz1=data(3,i+1,j,g)-z1
vx2=data(1,i,j+1,g)-x1
vy2=data(2,i,j+1,g)-y1
vz2=data(3,i,j+1,g)-z1
vx4=data(1,i,j-1,g)-x1
vy4=data(2,i,j-1,g)-y1
vz4=data(3,i,j-1,g)-z1
nx1=vy1*vz2-vz1*vy2
ny1=vz1*vx2-vx1*vz2
nz1=vx1*vy2-vy1*vx2
nmag1=sqrt(nx1*nx1+ny1*ny1+nz1*nz1)
if(nmag1.gt.0) then
nx1=nx1/nmag1
ny1=ny1/nmag1
nz1=nz1/nmag1
endif
nx4=vy4*vz1-vz4*vy1
ny4=vz4*vx1-vx4*vz1
nz4=vx4*vy1-vy4*vx1
nmag4=sqrt(nx4*nx4+ny4*ny4+nz4*nz4)
if(nmag4.gt.0) then
nx4=nx4/nmag4
ny4=ny4/nmag4
nz4=nz4/nmag4
endif
norm(1,i,j,g)=nx1+nx4
norm(2,i,j,g)=ny1+ny4
norm(3,i,j,g)=nz1+nz4
else if(i.eq.nx(g).and.j.gt.1.and.j.lt.ny(g)) then
vx2=data(1,i,j+1,g)-x1
vy2=data(2,i,j+1,g)-y1
vz2=data(3,i,j+1,g)-z1
vx3=data(1,i-1,j,g)-x1
vy3=data(2,i-1,j,g)-y1
vz3=data(3,i-1,j,g)-z1
vx4=data(1,i,j-1,g)-x1
vy4=data(2,i,j-1,g)-y1
vz4=data(3,i,j-1,g)-z1
nx2=vy2*vz3-vz2*vy3
ny2=vz2*vx3-vx2*vz3
nz2=vx2*vy3-vy2*vx3
nmag2=sqrt(nx2*nx2+ny2*ny2+nz2*nz2)
if(nmag2.gt.0) then
nx2=nx2/nmag2
ny2=ny2/nmag2
nz2=nz2/nmag2
endif
nx3=vy3*vz4-vz3*vy4
ny3=vz3*vx4-vx3*vz4
nz3=vx3*vy4-vy3*vx4
nmag3=sqrt(nx3*nx3+ny3*ny3+nz3*nz3)
if(nmag3.gt.0) then
nx3=nx3/nmag3
ny3=ny3/nmag3
nz3=nz3/nmag3
endif
norm(1,i,j,g)=nx2+nx3
norm(2,i,j,g)=ny2+ny3
norm(3,i,j,g)=nz2+nz3
else if(i.gt.1.and.i.lt.nx(g).and.j.eq.ny(g)) then
vx1=data(1,i+1,j,g)-x1
vy1=data(2,i+1,j,g)-y1
vz1=data(3,i+1,j,g)-z1
vx3=data(1,i-1,j,g)-x1
vy3=data(2,i-1,j,g)-y1
vz3=data(3,i-1,j,g)-z1
vx4=data(1,i,j-1,g)-x1
vy4=data(2,i,j-1,g)-y1
vz4=data(3,i,j-1,g)-z1
nx3=vy3*vz4-vz3*vy4
ny3=vz3*vx4-vx3*vz4
nz3=vx3*vy4-vy3*vx4
nmag3=sqrt(nx3*nx3+ny3*ny3+nz3*nz3)
if(nmag3.gt.0) then
nx3=nx3/nmag3
ny3=ny3/nmag3
nz3=nz3/nmag3
endif
nx4=vy4*vz1-vz4*vy1
ny4=vz4*vx1-vx4*vz1
nz4=vx4*vy1-vy4*vx1
nmag4=sqrt(nx4*nx4+ny4*ny4+nz4*nz4)
if(nmag4.gt.0) then
nx4=nx4/nmag4
ny4=ny4/nmag4
nz4=nz4/nmag4
endif
norm(1,i,j,g)=nx3+nx4
norm(2,i,j,g)=ny3+ny4
norm(3,i,j,g)=nz3+nz4
else if(i.gt.1.and.i.lt.nx(g).and.j.eq.1) then
vx1=data(1,i+1,j,g)-x1
vy1=data(2,i+1,j,g)-y1
vz1=data(3,i+1,j,g)-z1
vx2=data(1,i,j+1,g)-x1
vy2=data(2,i,j+1,g)-y1
vz2=data(3,i,j+1,g)-z1
vx3=data(1,i-1,j,g)-x1
vy3=data(2,i-1,j,g)-y1
vz3=data(3,i-1,j,g)-z1
nx1=vy1*vz2-vz1*vy2
ny1=vz1*vx2-vx1*vz2
nz1=vx1*vy2-vy1*vx2
nmag1=sqrt(nx1*nx1+ny1*ny1+nz1*nz1)
if(nmag1.gt.0) then
nx1=nx1/nmag1
ny1=ny1/nmag1
nz1=nz1/nmag1
endif
nx2=vy2*vz3-vz2*vy3
ny2=vz2*vx3-vx2*vz3
nz2=vx2*vy3-vy2*vx3
nmag2=sqrt(nx2*nx2+ny2*ny2+nz2*nz2)
if(nmag2.gt.0) then
nx2=nx2/nmag2
ny2=ny2/nmag2
nz2=nz2/nmag2
endif
norm(1,i,j,g)=nx1+nx2
norm(2,i,j,g)=ny1+ny2
norm(3,i,j,g)=nz1+nz2
endif
c if(y1.eq.0) norm(2,i,j,g)=0.0
normlength=sqrt(norm(1,i,j,g)*norm(1,i,j,g)+
. norm(2,i,j,g)*norm(2,i,j,g)+
. norm(3,i,j,g)*norm(3,i,j,g))
norm(1,i,j,g)=norm(1,i,j,g)/normlength
norm(2,i,j,g)=norm(2,i,j,g)/normlength
norm(3,i,j,g)=norm(3,i,j,g)/normlength
if(extflag) then
xmax=x1
xmin=x1
ymax=y1
ymin=y1
zmax=z1
zmin=z1
extflag=.false.
else
if(x1.gt.xmax) then
xmax=x1
else if(x1.lt.xmin) then
xmin=x1
endif
if(y1.gt.ymax) then
ymax=y1
else if(y1.lt.ymin) then
ymin=y1
endif
if(z1.gt.zmax) then
zmax=z1
else if(z1.lt.zmin) then
zmin=z1
endif
endif
220 continue
write(*,'(''Enter number of light sources:'',$)')
read(*,*) numlights
do 225 k=1,numlights
write(*,1010) k,k,k
read(*,*) xdircos(k),ydircos(k),zdircos(k)
225 continue
xmid=(xmax+xmin)/2.0
ymid=(ymax+ymin)/2.0
zmid=(zmax+zmin)/2.0
totext=max(abs(xmax-xmin),abs(ymax-ymin),abs(zmax-zmin))*1.25
scale=totext/875.0
curentdev(0)=0
curentdev(1)=0
curentdev(2)=0
curentdev(3)=0
fovy=200
mag=0.10
magrate=0.0
numdev=0
rankleft=0
rankmid=0
rankright=0
rxrate=0.0
ryrate=0.0
rzrate=0.0
txrate=0.0
tyrate=0.0
xangle=0.0
xpos=0.0
yangle=0.0
ypos=0.0
viewpnt=0.0
zangle=0.0
bflag=.false.
btogl=.true.
cflag=.false.
ctogl=.true.
mflag=.true.
pflag=.false.
sflag=.false.
stogl=.true.
xflag=.false.
xtogl=.true.
yflag=.true.
ytogl=.false.
zflag=.true.
ztogl=.false.
lamps=14
call lampon(lamps)
call foregr
shadesolid=winope('solidshade',5)
oldwin=winatt()
currentwin=.true.
call double
call gconfi
call qdevic(redraw)
call qdevic(bkey)
call qdevic(ckey)
call qdevic(ekey)
call qdevic(lkey)
call qdevic(mkey)
call qdevic(pkey)
call qdevic(skey)
call qdevic(xkey)
call qdevic(ykey)
call qdevic(zkey)
call qdevic(uparro)
call qdevic(downar)
call qdevic(leftmo)
call qdevic(middle)
call qdevic(rightm)
call tie(leftmo,mousex,mousey)
call tie(middle,mousex,mousey)
call tie(rightm,mousex,mousey)
call noise(mousex,2)
call noise(mousey,2)
call backfa(.true.)
print *,'Making color map'
do 230 i=768,1023
c call mapcol(i,i-768,i-768,i-768)
call mapcol(i-256,0,0,i-768)
call mapcol(i,i-768,i-768,255)
C call mapcol(i-512,0,0,i-768)
C call mapcol(i-256,0,i-768,255)
C call mapcol(i,i-768,255,255)
230 continue
call getori(xwinorg,ywinorg)
call getsiz(xwinlen,ywinlen)
240 print *,'Calculating surface shading colors'
do 245 k=1,numlights
lightlen=sqrt(xdircos(k)*xdircos(k)+ydircos(k)*ydircos(k)+
. zdircos(k)*zdircos(k))
xdircos(k)=xdircos(k)/lightlen
ydircos(k)=ydircos(k)/lightlen
zdircos(k)=zdircos(k)/lightlen
245 continue
do 250 g=1,ngrid
do 250 i=1,nx(g)
do 250 j=1,ny(g)
totdircos=0.0
do 255 k=1,numlights
tempdircos=norm(1,i,j,g)*xdircos(k)+
. norm(2,i,j,g)*ydircos(k)+
. norm(3,i,j,g)*zdircos(k)
if(tempdircos.gt.0) then
totdircos=totdircos+tempdircos
endif
255 continue
c inorm(i,j,g)=768+nint(255*totdircos)
c if(inorm(i,j,g).gt.1023) then
c inorm(i,j,g)=1023
c else if(inorm(i,j,g).lt.768) then
c inorm(i,j,g)=768
c endif
inorm(i,j,g)=512+nint(511*totdircos)
if(inorm(i,j,g).gt.1023) then
inorm(i,j,g)=1023
else if(inorm(i,j,g).lt.511) then
inorm(i,j,g)=511
endif
C inorm(i,j,g)=256+nint(767*totdircos)
C if(inorm(i,j,g).gt.1023) then
C inorm(i,j,g)=1023
C else if(inorm(i,j,g).lt.256) then
C inorm(i,j,g)=256
C endif
250 continue
call qreset
260 call frontb(.true.)
front=.true.
sleep=0
270 continue
if(bflag) call zclear
call color(black)
call clear
call pushma
viewpnt=viewpnt-magrate
xpos=xpos+txrate
ypos=ypos+tyrate
fovy=fovy+rprate
if(fovy.lt.2) then
fovy=2
else if(fovy.gt.1800) then
fovy=1800
endif
far=totext*1.5-viewpnt
if(far.le.0) then
far=totext*1.0e-4
endif
near=-viewpnt
if(near.ge.far.or.near.le.far*1.0e-3.or.near.le.0) then
near=far*1.0e-2
endif
if(bflag) then
call perspe(fovy,real(xwinlen)/real(ywinlen),near,far)
else
call perspe(fovy,real(xwinlen)/real(ywinlen),0.0,far)
endif
call lookat(viewpnt-totext,xpos,ypos,viewpnt,xpos,ypos,-900)
xangle=xangle+rxrate
yangle=yangle+ryrate
zangle=zangle+rzrate
call rot(zangle,'z')
call rot(yangle,'y')
call rot(xangle,'x')
call color(green)
call move(0.0,0.0,0.0)
call draw(10.0*scale,0.0,0.0)
call move(10.0*scale,0.0,-0.5*scale)
call draw(10.5*scale,0.0,0.5*scale)
call move(10.0*scale,0.0,0.5*scale)
call draw(10.5*scale,0.0,-0.5*scale)
call color(cyan)
call move(0.0,0.0,0.0)
call draw(0.0,10.0*scale,0.0)
call move(0.0,10.0*scale,0.5*scale)
call draw(0.0,10.25*scale,0.0)
call draw(0.0,10.25*scale,-0.5*scale)
call move(0.0,10.5*scale,0.5*scale)
call draw(0.0,10.25*scale,0.0)
call color(magent)
call move(0.0,0.0,0.0)
call draw(0.0,0.0,10.0*scale)
call move(0.25*scale,0.0,11.25*scale)
call draw(-0.25*scale,0.0,11.25*scale)
call draw(0.25*scale,0.0,10.25*scale)
call draw(-0.25*scale,0.0,10.25*scale)
call transl(-xmid,0.0,-zmid)
call color(white)
if(sflag) then
if(cflag) then
do 280 g=1,ngrid
do 280 j=1,ny(g)-1
do 280 i=1,nx(g)-1
call setsha(inorm(i,j,g))
call pmv(data(1,i,j,g),
. -data(2,i,j,g),data(3,i,j,g))
call setsha(inorm(i,j+1,g))
call pdr(data(1,i,j+1,g),
. -data(2,i,j+1,g),data(3,i,j+1,g))
call setsha(inorm(i+1,j+1,g))
call pdr(data(1,i+1,j+1,g),
. -data(2,i+1,j+1,g),data(3,i+1,j+1,g))
call setsha(inorm(i+1,j,g))
call pdr(data(1,i+1,j,g),
. -data(2,i+1,j,g),data(3,i+1,j,g))
call spclos
280 continue
endif
do 290 g=1,ngrid
do 290 j=1,ny(g)-1
do 290 i=1,nx(g)-1
call setsha(inorm(i,j,g))
call pmv(data(1,i,j,g),
. data(2,i,j,g),data(3,i,j,g))
call setsha(inorm(i+1,j,g))
call pdr(data(1,i+1,j,g),
. data(2,i+1,j,g),data(3,i+1,j,g))
call setsha(inorm(i+1,j+1,g))
call pdr(data(1,i+1,j+1,g),
. data(2,i+1,j+1,g),data(3,i+1,j+1,g))
call setsha(inorm(i,j+1,g))
call pdr(data(1,i,j+1,g),
. data(2,i,j+1,g),data(3,i,j+1,g))
call spclos
290 continue
else
if(cflag) then
do 300 g=1,ngrid
do 310 j=1,ny(g)
call move(data(1,1,j,g),
. -data(2,1,j,g),data(3,1,j,g))
do 310 i=2,nx(g)
call draw(data(1,i,j,g),
. -data(2,i,j,g),data(3,i,j,g))
310 continue
do 320 i=1,nx(g)
call move(data(1,i,1,g),
. -data(2,i,1,g),data(3,i,1,g))
do 320 j=2,ny(g)
call draw(data(1,i,j,g),
. -data(2,i,j,g),data(3,i,j,g))
320 continue
300 continue
endif
do 330 g=1,ngrid
do 340 j=1,ny(g)
call move(data(1,1,j,g),data(2,1,j,g),data(3,1,j,g))
do 340 i=2,nx(g)
call draw(data(1,i,j,g),data(2,i,j,g),data(3,i,j,g))
340 continue
do 350 i=1,nx(g)
call move(data(1,i,1,g),data(2,i,1,g),data(3,i,1,g))
do 350 j=2,ny(g)
call draw(data(1,i,j,g),data(2,i,j,g),data(3,i,j,g))
350 continue
330 continue
endif
call popmat
if(front.and.btogl) then
call frontb(.false.)
front=.false.
endif
370 if(qtest().eq.0) then
if(btogl) call swapbu
else
sleep=0
dev=qread(val)
if(dev.eq.redraw.and.val.eq.shadesolid) then
call reshap
call getori(xwinorg,ywinorg)
call getsiz(xwinlen,ywinlen)
curentdev(0)=0
curentdev(1)=0
curentdev(2)=0
curentdev(3)=0
numdev=0
rankleft=0
rankmid=0
rankright=0
magrate=0.0
rprate=0.0
rxrate=0.0
ryrate=0.0
rzrate=0.0
txrate=0.0
tyrate=0.0
call qreset
goto 260
else if(dev.eq.inptch) then
if(val.eq.shadesolid) then
curentdev(0)=0
curentdev(1)=0
curentdev(2)=0
curentdev(3)=0
numdev=0
rankleft=0
rankmid=0
rankright=0
magrate=0.0
rprate=0.0
rxrate=0.0
ryrate=0.0
rzrate=0.0
txrate=0.0
tyrate=0.0
currentwin=.true.
call qreset
goto 260
else
currentwin=.false.
endif
else if(dev.eq.uparro) then
if(val.gt.0) then
mag=mag*1.5
txrate=txrate*1.5
tyrate=tyrate*1.5
rprate=rprate*1.5
rxrate=rxrate*1.5
ryrate=ryrate*1.5
rzrate=rzrate*1.5
magrate=magrate*1.5
endif
else if(dev.eq.downar) then
if(val.gt.0) then
mag=mag/1.5
txrate=txrate/1.5
tyrate=tyrate/1.5
rprate=rprate/1.5
rxrate=rxrate/1.5
ryrate=ryrate/1.5
rzrate=rzrate/1.5
magrate=magrate/1.5
endif
else if(dev.eq.middle) then
if(val.gt.0) then
dev=qread(bx)
dev=qread(by)
if(numdev.lt.3.and.rankmid.eq.0) then
numdev=numdev+1
rankmid=numdev
curentdev(numdev)=middle
endif
else
dev=qread(bx)
dev=qread(by)
magrate=0.0
rprate=0.0
rxrate=0.0
if(numdev.gt.0) then
do 380 i=rankmid,numdev-1
curentdev(i)=curentdev(i+1)
380 continue
curentdev(numdev)=0
numdev=numdev-1
rankmid=0
endif
endif
else if(dev.eq.leftmo) then
if(val.gt.0) then
dev=qread(bx)
dev=qread(by)
if(numdev.lt.3.and.rankleft.eq.0) then
numdev=numdev+1
rankleft=numdev
curentdev(numdev)=leftmo
endif
else
dev=qread(bx)
dev=qread(by)
rzrate=0.0
ryrate=0.0
if(numdev.gt.0) then
do 390 i=rankleft,numdev-1
curentdev(i)=curentdev(i+1)
390 continue
curentdev(numdev)=0
numdev=numdev-1
rankleft=0
endif
endif
else if(dev.eq.rightm) then
if(val.gt.0) then
dev=qread(bx)
dev=qread(by)
if(numdev.lt.3.and.rankright.eq.0) then
numdev=numdev+1
rankright=numdev
curentdev(numdev)=rightm
endif
else
dev=qread(bx)
dev=qread(by)
txrate=0.0
tyrate=0.0
if(numdev.gt.0) then
do 400 i=rankright,numdev-1
curentdev(i)=curentdev(i+1)
400 continue
curentdev(numdev)=0
numdev=numdev-1
rankright=0
endif
endif
else if(dev.eq.mkey) then
if(val.gt.0) then
call lampof(15)
if(mflag) then
mflag=.false.
lamps=iand(lamps,7)
call lampon(lamps)
else
mflag=.true.
pflag=.false.
xflag=.false.
lamps=iand(lamps,14)
lamps=ior(lamps,8)
call lampon(lamps)
endif
endif
else if(dev.eq.pkey) then
if(val.gt.0) then
if(pflag) then
pflag=.false.
else
call lampof(15)
pflag=.true.
mflag=.false.
xflag=.false.
lamps=iand(lamps,6)
call lampon(lamps)
endif
endif
else if(dev.eq.bkey) then
if(val.gt.0) then
ltemp=bflag
bflag=btogl
btogl=ltemp
if(bflag) then
call single
call gconfi
call setdep($0000,$7fff)
call zbuffe(bflag)
call zclear
sleep=sleep+3
else
call zbuffe(bflag)
call double
call gconfi
endif
call backfa(.true.)
front=.true.
call qreset
goto 270
else if(bflag) then
sleep=sleep+3
call qreset
endif
else if(dev.eq.ckey) then
if(val.gt.0) then
ltemp=cflag
cflag=ctogl
ctogl=ltemp
goto 270
endif
else if(dev.eq.lkey) then
if(val.gt.0) then
call noport
nullwin=winope('null',4)
oldwin=winatt()
call winclo(nullwin)
print *,''
do 410 k=1,numlights
read(*,*) xdircos(k),ydircos(k),zdircos(k)
410 continue
call winset(shadesolid)
oldwin=winatt()
call qreset
goto 240
endif
else if(dev.eq.skey) then
if(val.gt.0) then
ltemp=sflag
sflag=stogl
stogl=ltemp
goto 270
endif
else if(dev.eq.zkey) then
if(val.gt.0) then
call lampof(15)
ltemp=zflag
zflag=ztogl
ztogl=ltemp
lamps=ieor(lamps,4)
call lampon(lamps)
endif
else if(dev.eq.ykey) then
if(val.gt.0) then
call lampof(15)
ltemp=yflag
yflag=ytogl
ytogl=ltemp
lamps=ieor(lamps,2)
call lampon(lamps)
endif
else if(dev.eq.xkey) then
if(val.gt.0) then
call lampof(15)
if(xflag) then
xflag=.false.
lamps=iand(lamps,14)
call lampon(lamps)
else
xflag=.true.
mflag=.false.
pflag=.false.
lamps=iand(lamps,7)
lamps=ior(lamps,1)
call lampon(lamps)
endif
endif
else if(dev.eq.ekey) then
call curson
call lampof(15)
stop
endif
endif
if(curentdev(numdev).ne.0) then
if(currentwin) then
ax=getval(mousex)
ay=getval(mousey)
if(ax.ne.bx.and.ay.ne.by) then
xdiff=ax-bx
ydiff=ay-by
if(ax.ge.1023) then
ax=1
call setval(mousex,ax,0,1023)
else if(ax.le.0) then
ax=1022
call setval(mousex,ax,0,1023)
endif
if(ay.ge.767) then
ay=1
call setval(mousey,ay,0,767)
else if(ay.le.0) then
ay=766
call setval(mousey,ay,0,767)
endif
bx=ax
by=ay
if(curentdev(numdev).eq.leftmo) then
if(zflag) rzrate=rzrate+xdiff*mag/50.0
if(yflag) ryrate=ryrate+ydiff*mag/50.0
else if(curentdev(numdev).eq.middle) then
if(mflag) then
magrate=magrate+ydiff*mag/10.0*scale
else if(pflag) then
rprate=rprate+xdiff*mag/40.0
else if(xflag) then
rxrate=rxrate+xdiff*mag/40.0
endif
else if(curentdev(numdev).eq.rightm) then
txrate=txrate+xdiff*mag/40.0*scale
tyrate=tyrate-ydiff*mag/40.0*scale
endif
endif
else
goto 270
endif
else
sleep=sleep+1
if(bflag) sleep=sleep+2
if(sleep.ge.3) then
sleep=3
goto 370
endif
endif
goto 270
stop
1000 format(' nx(',i1,')=',i3,' ny(',i1,')=',i3,' nz(',i1,')=',i3)
1010 format('Enter xdircos(',i1,'),ydircos(',i1,'),zdircos(',i1,'):',$)
end
More information about the Comp.sys.sgi
mailing list