+
+ /* manipulate(gettime());
+ var+=PI/500;
+ if (var>=TWOPI) var=PI/500; */
+
+ if(st->hsvcycl!=0.0)
+ {
+ dtime=st->hsvcycl*dtime/10.0+st->hue/360.0;
+ dtime=360*(dtime-floor(dtime));
+
+ hsv2rgb(dtime,st->sat,st->val,&st->r,&st->g,&st->b);
+ changeColor(st,st->r,st->g,st->b);
+ }
+
+ XCopyArea (st->dpy, st->buffer, st->window, st->gc, 0, 0, st->scrnWidth, st->scrnHeight, 0, 0);
+
+
+ /*-------------------------------------------------*/
+
+ XQueryPointer (st->dpy, st->window, &st->junk_win, &st->in_win, &st->junk, &st->junk,
+ &st->px, &st->py, &st->kb);
+
+ if ((st->px>0)&&(st->px<st->scrnWidth)&&(st->py>0)&&(st->py<st->scrnHeight) )
+ {
+ if ((st->px !=st->startx)&&(st->kb&Button2Mask))
+ {
+ /* printf("y=(%f,%f,%f)",y[0],y[1],y[2]);*/
+ turn(st->y,st->x,((double)(st->px-st->startx))/(8000*st->mag));
+ /* printf("->(%f,%f,%f)\n",y[0],y[1],y[2]);*/
+ }
+ if ((st->py !=st->starty)&&(st->kb&Button2Mask))
+ {
+ /* printf("x=(%f,%f,%f)",x[0],x[1],x[2]);*/
+ turn(st->x,st->y,((double)(st->py-st->starty))/(-8000*st->mag));
+ /* printf("->(%f,%f,%f)\n",x[0],x[1],x[2]);*/
+ }
+ if ((st->kb&Button1Mask))
+ {
+ if (st->vturn==0.0) st->vturn=.005; else if (st->vturn<2) st->vturn+=.01;
+ turn(st->x,st->v,.002*st->vturn);
+ turn(st->y,st->v,.002*st->vturn);
+ }
+ if ((st->kb&Button3Mask))
+ {
+ if (st->vturn==0.0) st->vturn=.005; else if (st->vturn<2) st->vturn+=.01;
+ turn(st->x,st->v,-.002*st->vturn);
+ turn(st->y,st->v,-.002*st->vturn);
+ }
+ }
+ if (!(st->kb&Button1Mask)&&!(st->kb&Button3Mask))
+ st->vturn=0;
+
+ st->speed=st->speed+st->speed*st->vspeed;
+ if ((st->speed<0.0000001) &&(st->vspeed>0.000001)) st->speed=0.000001;
+ st->vspeed=.1*st->vspeed;
+ if (st->speed>0.01) st->speed=.01;
+ st->a[0]=st->a[0]+st->speed*st->v[0];
+ st->a[1]=st->a[1]+st->speed*st->v[1];
+ st->a[2]=st->a[2]+st->speed*st->v[2];
+
+ return st->timewait;
+}
+
+static void
+t3d_reshape (Display *dpy, Window window, void *closure,
+ unsigned int w, unsigned int h)
+{
+ struct state *st = (struct state *) closure;
+ if (w != st->scrnWidth ||
+ h != st->scrnHeight)
+ {
+ XFreePixmap (st->dpy, st->buffer);
+ st->scrnWidth = w;
+ st->scrnHeight = h;
+ st->buffer = XCreatePixmap (st->dpy, st->window, st->scrnWidth, st->scrnHeight, st->xgwa.depth);
+
+ st->startx=st->scrnWidth/2;
+ st->starty=st->scrnHeight/2;
+ st->scrnH2=st->startx;
+ st->scrnW2=st->starty;
+ }
+}
+
+static Bool
+t3d_event (Display *dpy, Window window, void *closure, XEvent *event)
+{
+ struct state *st = (struct state *) closure;
+ if (event->type == KeyPress)
+ {
+ KeySym kpr=XKeycodeToKeysym(st->dpy,event->xkey.keycode,0);
+
+ switch (kpr)
+ {
+ case 's': case 'S':
+ st->vspeed = 0.5;
+ return True;
+ case 'a': case 'A':
+ st->vspeed = -0.3;
+ return True;
+ case '0':
+ st->speed = 0;
+ st->vspeed = 0;
+ return True;
+ case 'z': case 'Z':
+ st->mag *= 1.02;
+ return True;
+ case 'x': case 'X':
+ st->mag /= 1.02;
+ return True;
+ default:
+ break;
+ }
+ }
+ return False;
+}
+
+static void
+t3d_free (Display *dpy, Window window, void *closure)
+{