+CHESSOBJS=chessmodels.o $(TRACK_OBJS) $(HACK_OBJS)
+endgame: endgame.o $(CHESSOBJS)
+ $(CC_HACK) -o $@ $@.o $(CHESSOBJS) $(HACK_LIBS)
+
+glblur: glblur.o $(HACK_OBJS) $(TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(TRACK_OBJS) $(HACK_LIBS)
+
+TOASTOBJS1=\
+ toaster.o toaster_base.o toaster_handle.o toaster_handle2.o \
+ toaster_jet.o toaster_knob.o toaster_slots.o toaster_wing.o \
+ toast.o toast2.o
+TOASTOBJS=flyingtoasters.o gllist.o $(TOASTOBJS1) xpm-ximage.o
+flyingtoasters: $(TOASTOBJS) $(TRACK_OBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $(TOASTOBJS) $(TRACK_OBJS) $(HACK_OBJS) $(XPM_LIBS)
+
+COWOBJS1=\
+ cow_face.o cow_hide.o cow_hoofs.o cow_horns.o cow_tail.o cow_udder.o
+COWOBJS=bouncingcow.o gllist.o $(COWOBJS1) xpm-ximage.o
+bouncingcow: $(COWOBJS) $(TRACK_OBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $(COWOBJS) $(TRACK_OBJS) $(HACK_OBJS) $(XPM_LIBS)
+
+glslideshow: glslideshow.o $(HACK_OBJS) $(GRAB_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB_OBJS) $(HACK_LIBS)
+
+jigglypuff: jigglypuff.o xpm-ximage.o $(HACK_OBJS) $(TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o xpm-ximage.o $(HACK_OBJS) $(TRACK_OBJS) $(XPM_LIBS)
+
+klein: klein.o $(HACK_OBJS) $(TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(TRACK_OBJS) $(HACK_LIBS)
+
+hypertorus: hypertorus.o $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS)
+
+glmatrix: glmatrix.o $(HACK_OBJS) xpm-ximage.o
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) xpm-ximage.o $(XPM_LIBS)
+
+cubestorm: cubestorm.o $(TRACK_OBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(TRACK_OBJS) $(HACK_OBJS) $(HACK_LIBS)
+
+glknots: glknots.o tube.o $(TRACK_OBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o tube.o $(TRACK_OBJS) $(HACK_OBJS) $(HACK_LIBS)
+
+blocktube: blocktube.o $(HACK_OBJS) xpm-ximage.o
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) xpm-ximage.o $(XPM_LIBS)
+
+flipflop: flipflop.o $(TRACK_OBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(TRACK_OBJS) $(HACK_OBJS) $(HACK_LIBS)
+
+antspotlight: antspotlight.o $(TRACK_OBJS) $(GRAB_OBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(TRACK_OBJS) $(GRAB_OBJS) $(HACK_OBJS) $(HACK_LIBS)
+
+polytopes: polytopes.o $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS)
+
+# This one works differently (it's not xlock-like.)
+#
+STONER_OBJS=stonerview.o stonerview-move.o stonerview-osc.o stonerview-view.o \
+ $(UTILS_BIN)/yarandom.o $(UTILS_BIN)/usleep.o
+stonerview: $(STONER_OBJS)
+ $(CC_HACK) -o $@ $(STONER_OBJS) $(HACK_LIBS)
+
+molecules.h:
+ @tmp=molecules.h.$$$$ ; \
+ rm -f $$tmp ; \
+ echo "building molecules.h from $(HACK_SRC)/images/molecules/*.pdb" ; \
+ for f in $(HACK_SRC)/images/molecules/*.pdb ; do \
+ $(SHELL) $(UTILS_SRC)/ad2c "$$f" | \
+ sed 's/",$$/\\n"/' >> $$tmp ; \
+ echo ',' >> $$tmp ; \
+ done ; \
+ mv $$tmp molecules.h
+
+MOLECULEOBJS=sphere.o tube.o $(TRACK_OBJS)
+molecule: molecule.o $(MOLECULEOBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(MOLECULEOBJS) $(HACK_OBJS) $(HACK_LIBS)
+
+gleidescope: gleidescope.o xpm-ximage.o $(HACK_OBJS) $(GRAB_OBJS)
+ $(CC_HACK) -o $@ $@.o xpm-ximage.o $(HACK_OBJS) $(GRAB_OBJS) $(XPM_LIBS)
+
+mirrorblob: mirrorblob.o $(HACK_OBJS) $(GRAB_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB_OBJS) $(XPM_LIBS)
+
+blinkbox: blinkbox.o sphere.o $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o sphere.o $(HACK_OBJS) $(HACK_LIBS)
+
+noof: noof.o $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS)
+
+PH_OBJS=polyhedra-gl.o $(TRACK_OBJS)
+polyhedra: polyhedra.o $(PH_OBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(PH_OBJS) $(HACK_OBJS) $(HACK_LIBS)
+
+antinspect: antinspect.o $(TRACK_OBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(TRACK_OBJS) $(HACK_OBJS) $(HACK_LIBS)
+
+providence: providence.o $(TRACK_OBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(TRACK_OBJS) $(HACK_OBJS) $(HACK_LIBS)
+
+dnalogo: dnalogo.o tube.o $(TRACK_OBJS) $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o tube.o $(TRACK_OBJS) $(HACK_OBJS) $(HACK_LIBS)