Subject: v09i046: xengine: reciprocating engine for X, Part01/01 Newsgroups: comp.sources.x Approved: argv@sun.com Submitted-by: kddlab!isl.yamaha.co.jp!shutoh@uunet.UU.NET (Kazuhiko Shutoh) Posting-number: Volume 9, Issue 46 Archive-name: xengine/part01 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'Imakefile' <<'END_OF_FILE' X# SCCS ID : @(#)Imakefile 1.1 9/12/90 X# X# Imakefile - Imakefile for xengine X# X# Author: Kazuhiko Shutoh, 1990. X# X# Permission to use, copy, modify and distribute without charge this X# software, documentation, images, etc. is granted, provided that this X# comment and the author's name is retained. The author assumes no X# responsibility for lost sleep as a consequence of use of this software. X# X# Send any comments, bug reports, etc. to: shutoh@isl.yamaha.JUNET or, X# for oversea: shutoh%isl.yamaha.JUNET%kddlab@uunet.uu.net X# X X INCLUDES = -I$(TOP)/X11 XLOCAL_LIBRARIES = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB) X SYS_LIBRARIES = -lm X SRCS = xengine.c X OBJS = xengine.o X XComplexProgramTarget(xengine) END_OF_FILE if test 752 -ne `wc -c <'Imakefile'`; then echo shar: \"'Imakefile'\" unpacked with wrong size! fi # end of 'Imakefile' fi if test -f 'Makefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Makefile'\" else echo shar: Extracting \"'Makefile'\" \(9481 characters\) sed "s/^X//" >'Makefile' <<'END_OF_FILE' X# Makefile generated by imake - do not edit! X# $XConsortium: imake.c,v 1.51 89/12/12 12:37:30 jim Exp $ X# X# The cpp used on this machine replaces all newlines and multiple tabs and X# spaces in a macro expansion with a single space. Imake tries to compensate X# for this, but is not always successful. X# X X########################################################################### X# Makefile generated from "Imake.tmpl" and X# $XConsortium: Imake.tmpl,v 1.77 89/12/18 17:01:37 jim Exp $ X# X# Platform-specific parameters may be set in the appropriate .cf X# configuration files. Site-wide parameters may be set in the file X# site.def. Full rebuilds are recommended if any parameters are changed. X# X# If your C preprocessor doesn't define any unique symbols, you'll need X# to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing X# "make Makefile", "make Makefiles", or "make World"). X# X# If you absolutely can't get imake to work, you'll need to set the X# variables at the top of each Makefile as well as the dependencies at the X# bottom (makedepend will do this automatically). X# X X########################################################################### X# platform-specific configuration parameters - edit sun.cf to change X X# platform: $XConsortium: sun.cf,v 1.38 89/12/23 16:10:10 jim Exp $ X# operating system: SunOS 4.0.3 X X########################################################################### X# site-specific configuration parameters - edit site.def to change X X# site: $XConsortium: site.def,v 1.21 89/12/06 11:46:50 jim Exp $ X X SHELL = /bin/sh X X TOP = . X CURRENT_DIR = . X X AR = ar cq X BOOTSTRAPCFLAGS = X CC = cc X X COMPRESS = compress X CPP = /lib/cpp $(STD_CPP_DEFINES) X PREPROCESSCMD = cc -E $(STD_CPP_DEFINES) X INSTALL = install X LD = ld X LINT = lint X LINTLIBFLAG = -C X LINTOPTS = -axz X LN = ln -s X MAKE = make X MV = mv X CP = cp X RANLIB = ranlib X RANLIBINSTFLAGS = X RM = rm -f X STD_INCLUDES = X STD_CPP_DEFINES = X STD_DEFINES = X EXTRA_LOAD_FLAGS = X EXTRA_LIBRARIES = X TAGS = ctags X X SHAREDCODEDEF = -DSHAREDCODE X SHLIBDEF = -DSUNSHLIB X X PROTO_DEFINES = X X INSTPGMFLAGS = X X INSTBINFLAGS = -m 0755 X INSTUIDFLAGS = -m 4755 X INSTLIBFLAGS = -m 0664 X INSTINCFLAGS = -m 0444 X INSTMANFLAGS = -m 0444 X INSTDATFLAGS = -m 0444 X INSTKMEMFLAGS = -m 4755 X X DESTDIR = X X TOP_INCLUDES = -I$(INCROOT) X X CDEBUGFLAGS = -O X CCOPTIONS = X COMPATFLAGS = -DXAW_BC X X ALLINCLUDES = $(STD_INCLUDES) $(TOP_INCLUDES) $(INCLUDES) $(EXTRA_INCLUDES) X ALLDEFINES = $(ALLINCLUDES) $(STD_DEFINES) $(PROTO_DEFINES) $(DEFINES) $(COMPATFLAGS) X CFLAGS = $(CDEBUGFLAGS) $(CCOPTIONS) $(ALLDEFINES) X LINTFLAGS = $(LINTOPTS) -DLINT $(ALLDEFINES) X LDLIBS = $(SYS_LIBRARIES) $(EXTRA_LIBRARIES) X LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS) X LDCOMBINEFLAGS = -X -r X X MACROFILE = sun.cf X RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut X X IMAKE_DEFINES = X X IRULESRC = $(CONFIGDIR) X IMAKE_CMD = $(IMAKE) -DUseInstalled -I$(IRULESRC) $(IMAKE_DEFINES) X X ICONFIGFILES = $(IRULESRC)/Imake.tmpl $(IRULESRC)/Imake.rules \ X $(IRULESRC)/Project.tmpl $(IRULESRC)/site.def \ X $(IRULESRC)/$(MACROFILE) $(EXTRA_ICONFIGFILES) X X########################################################################### X# X Window System Build Parameters X# $XConsortium: Project.tmpl,v 1.63 89/12/18 16:46:44 jim Exp $ X X########################################################################### X# X Window System make variables; this need to be coordinated with rules X# $XConsortium: Project.tmpl,v 1.63 89/12/18 16:46:44 jim Exp $ X X PATHSEP = / X USRLIBDIR = $(DESTDIR)/usr/lib X BINDIR = $(DESTDIR)/usr/bin/X11 X INCROOT = $(DESTDIR)/usr/include X BUILDINCROOT = $(TOP) X BUILDINCDIR = $(BUILDINCROOT)/X11 X BUILDINCTOP = .. X INCDIR = $(INCROOT)/X11 X ADMDIR = $(DESTDIR)/usr/adm X LIBDIR = $(USRLIBDIR)/X11 X CONFIGDIR = $(LIBDIR)/config X LINTLIBDIR = $(USRLIBDIR)/lint X X FONTDIR = $(LIBDIR)/fonts X XINITDIR = $(LIBDIR)/xinit X XDMDIR = $(LIBDIR)/xdm X AWMDIR = $(LIBDIR)/awm X TWMDIR = $(LIBDIR)/twm X GWMDIR = $(LIBDIR)/gwm X MANPATH = $(DESTDIR)/usr/man X MANSOURCEPATH = $(MANPATH)/man X MANDIR = $(MANSOURCEPATH)n X LIBMANDIR = $(MANSOURCEPATH)3 X XAPPLOADDIR = $(LIBDIR)/app-defaults X X SOXLIBREV = 4.2 X SOXTREV = 4.0 X SOXAWREV = 4.0 X SOOLDXREV = 4.0 X SOXMUREV = 4.0 X SOXEXTREV = 4.0 X X FONTCFLAGS = -t X X INSTAPPFLAGS = $(INSTDATFLAGS) X X IMAKE = imake X DEPEND = makedepend X RGB = rgb X FONTC = bdftosnf X MKFONTDIR = mkfontdir X MKDIRHIER = /bin/sh $(BINDIR)/mkdirhier.sh X X CONFIGSRC = $(TOP)/config X CLIENTSRC = $(TOP)/clients X DEMOSRC = $(TOP)/demos X LIBSRC = $(TOP)/lib X FONTSRC = $(TOP)/fonts X INCLUDESRC = $(TOP)/X11 X SERVERSRC = $(TOP)/server X UTILSRC = $(TOP)/util X SCRIPTSRC = $(UTILSRC)/scripts X EXAMPLESRC = $(TOP)/examples X CONTRIBSRC = $(TOP)/../contrib X DOCSRC = $(TOP)/doc X RGBSRC = $(TOP)/rgb X DEPENDSRC = $(UTILSRC)/makedepend X IMAKESRC = $(CONFIGSRC) X XAUTHSRC = $(LIBSRC)/Xau X XLIBSRC = $(LIBSRC)/X X XMUSRC = $(LIBSRC)/Xmu X TOOLKITSRC = $(LIBSRC)/Xt X AWIDGETSRC = $(LIBSRC)/Xaw X OLDXLIBSRC = $(LIBSRC)/oldX X XDMCPLIBSRC = $(LIBSRC)/Xdmcp X BDFTOSNFSRC = $(FONTSRC)/bdftosnf X MKFONTDIRSRC = $(FONTSRC)/mkfontdir X EXTENSIONSRC = $(TOP)/extensions X X DEPEXTENSIONLIB = $(USRLIBDIR)/libXext.a X EXTENSIONLIB = -lXext X X DEPXLIB = $(DEPEXTENSIONLIB) X XLIB = $(EXTENSIONLIB) -lX11 X X DEPXAUTHLIB = $(USRLIBDIR)/libXau.a X XAUTHLIB = -lXau X X DEPXMULIB = X XMULIB = -lXmu X X DEPOLDXLIB = X OLDXLIB = -loldX X X DEPXTOOLLIB = X XTOOLLIB = -lXt X X DEPXAWLIB = X XAWLIB = -lXaw X X LINTEXTENSIONLIB = $(USRLIBDIR)/llib-lXext.ln X LINTXLIB = $(USRLIBDIR)/llib-lX11.ln X LINTXMU = $(USRLIBDIR)/llib-lXmu.ln X LINTXTOOL = $(USRLIBDIR)/llib-lXt.ln X LINTXAW = $(USRLIBDIR)/llib-lXaw.ln X X DEPLIBS = $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB) X X DEPLIBS1 = $(DEPLIBS) X DEPLIBS2 = $(DEPLIBS) X DEPLIBS3 = $(DEPLIBS) X X########################################################################### X# Imake rules for building libraries, programs, scripts, and data files X# rules: $XConsortium: Imake.rules,v 1.67 89/12/18 17:14:15 jim Exp $ X X########################################################################### X# start of Imakefile X X# SCCS ID : %W% %G% X# X# Imakefile - Imakefile for xengine X# X# Author: Kazuhiko Shutoh, 1990. X# X# Permission to use, copy, modify and distribute without charge this X# software, documentation, images, etc. is granted, provided that this X# comment and the author's name is retained. The author assumes no X# responsibility for lost sleep as a consequence of use of this software. X# X# Send any comments, bug reports, etc. to: shutoh@isl.yamaha.JUNET or, X# for oversea: shutoh%isl.yamaha.JUNET%kddlab@uunet.uu.net X# X X INCLUDES = -I$(TOP)/X11 XLOCAL_LIBRARIES = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB) X SYS_LIBRARIES = -lm X SRCS = xengine.c X OBJS = xengine.o X X PROGRAM = xengine X Xall:: xengine X Xxengine: $(OBJS) $(DEPLIBS) X $(RM) $@ X $(CC) -o $@ $(OBJS) $(LDOPTIONS) $(LOCAL_LIBRARIES) $(LDLIBS) $(EXTRA_LOAD_FLAGS) X Xsaber_xengine: X #load $(ALLDEFINES) $(SRCS) $(LOCAL_LIBRARIES) $(SYS_LIBRARIES) $(EXTRA_LIBRARIES) X Xosaber_xengine: X #load $(ALLDEFINES) $(OBJS) $(LOCAL_LIBRARIES) $(SYS_LIBRARIES) $(EXTRA_LIBRARIES) X Xinstall:: xengine X $(INSTALL) -c $(INSTPGMFLAGS) xengine $(BINDIR) X Xinstall.man:: xengine.man X $(INSTALL) -c $(INSTMANFLAGS) xengine.man $(MANDIR)/xengine.n X Xdepend:: X $(DEPEND) -s "# DO NOT DELETE" -- $(ALLDEFINES) -- $(SRCS) X Xlint: X $(LINT) $(LINTFLAGS) $(SRCS) $(LINTLIBS) Xlint1: X $(LINT) $(LINTFLAGS) $(FILE) $(LINTLIBS) X Xclean:: X $(RM) $(PROGRAM) X X########################################################################### X# common rules for all Makefiles - do not edit X Xemptyrule:: X Xclean:: X $(RM_CMD) \#* X XMakefile:: X -@if [ -f Makefile ]; then \ X echo " $(RM) Makefile.bak; $(MV) Makefile Makefile.bak"; \ X $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \ X else exit 0; fi X $(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR) X Xtags:: X $(TAGS) -w *.[ch] X $(TAGS) -xw *.[ch] > TAGS X Xsaber: X #load $(ALLDEFINES) $(SRCS) X Xosaber: X #load $(ALLDEFINES) $(OBJS) X X########################################################################### X# empty rules for directories that do not have SUBDIRS - do not edit X Xinstall:: X @echo "install in $(CURRENT_DIR) done" X Xinstall.man:: X @echo "install.man in $(CURRENT_DIR) done" X XMakefiles:: X Xincludes:: X X########################################################################### X# dependencies generated by makedepend X END_OF_FILE if test 9481 -ne `wc -c <'Makefile'`; then echo shar: \"'Makefile'\" unpacked with wrong size! fi # end of 'Makefile' fi if test -f 'README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'README'\" else echo shar: Extracting \"'README'\" \(2136 characters\) sed "s/^X//" >'README' <<'END_OF_FILE' X X X xengine - reciprocating engine for X :-) X X Author: Kazuhiko Shutoh X X Permission to use, copy, modify and distribute without charge this X software, documentation, images, etc. is granted, provided that this X comment and the author's name is retained. The author assumes no X responsibility for lost sleep as a consequence of use of this software. X X--- Compile X X If you can't use imake, Please manually compile, X X cc -O -o xengine xengine.c -lXaw -lXmu -lXt -lX11 -lXext -lm X or X cc -O -o xengine xengine.c -lXaw -lXmu -lXt -lX11 -lm X X--- Note X X Xengine is count rotational per minutes 10 times, And indicate mean X value. X Xengine request protocol as (one cycle) : X X code count name X 43 2 GetInputFocus X 56 7 ChangeGC X 62 20 CopyArea X 66 20 PolySegment X 70 120 PolyFillRectangle X 71 100 PolyFillArc X X X--- Benchmarks ** X XMachine Server Release rpm X----------------------------------------------------------------------------- XSparcStation 370 Memory 56M X11R4(fix-14),256 color 230 XSparcStation 1 X11R4(applied fix-14) 256 color 186.33 Xluna-88K,2 CPU,mach Memory 32M X11R4, 16 color 180 *1 XSun 3/60C(CG4) X11R4 fix-14 gcc-1.35.1 16color about 90 XSun 3/60C X11R4 no-fix 73.3 XCIT-X Terminal X11R3 mono 45.5 XX-mint Memory 8M X11R3,mono 45 XX-station Memory 8M X11R3,256 color 40 XNEWS841 memory 16M X11R2, 16 color 11 XX640 X11R3?(mono) 10.4 XMASSCOMP RTU X11R2? 16 color 8.5 X X*1 beta version OS(MACH). X X** These rpm are *not* official. If you want exact server's performance, X use other benchmark tools (such as xperf or xtest). X X--- Special thanks to: X X Yasushi Ohba(YAMAHA/ISL) Mathematical suggestion. X Toshihisa Sadakata(YAMAHA/ISL) Engine movement suggestion. X Susumu Mukawa (NTT) Benchmark data correction. X Kazunari "ISSEY" Nakamura (NKK) Benchmark data correction. X X Send any comments, bug reports, etc. are welcome. X X X-- X Kazuhiko Shutoh X InSoft System Lab. X YAMAHA Corp. X shutoh@isl.yamama.co.jp X END_OF_FILE if test 2136 -ne `wc -c <'README'`; then echo shar: \"'README'\" unpacked with wrong size! fi # end of 'README' fi if test -f 'patchlevel.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'patchlevel.h'\" else echo shar: Extracting \"'patchlevel.h'\" \(22 characters\) sed "s/^X//" >'patchlevel.h' <<'END_OF_FILE' X X#define PATCHLEVEL 0 END_OF_FILE if test 22 -ne `wc -c <'patchlevel.h'`; then echo shar: \"'patchlevel.h'\" unpacked with wrong size! fi # end of 'patchlevel.h' fi if test -f 'xengine.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'xengine.c'\" else echo shar: Extracting \"'xengine.c'\" \(11425 characters\) sed "s/^X//" >'xengine.c' <<'END_OF_FILE' Xstatic char sccsid[] = "@(#)xengine.c 1.9 9/19/90"; X X/* X * xengine - reciprocating engine for X :-) X * X * Author: Kazuhiko Shutoh, 1990. X * X * Permission to use, copy, modify and distribute without charge this software, X * documentation, images, etc. is granted, provided that this comment and the X * author's name is retained. The author assumes no responsibility for lost X * sleep as a consequence of use of this software. X * X * Send any comments, bug reports, etc. to: shutoh@isl.yamaha.JUNET or, for X * oversea: shutoh%isl.yamaha.JUNET%kddlab@uunet.uu.net X * X */ X X#include X#include X#include X#include X#include X#include X#include X#include X#include X X#include "patchlevel.h" X X#define PI 3.141592654 X XXtCallbackProc redraw_callback(); XXtTimerCallbackProc Cylcle(); X XWidget toplevel, base, rpm_info, engine; XGC gcPiston, gcShaft, gcCylinder, gcRoter, gcBack, gcDep, gcPre, gcEngine; XPixmap enginePixmap; Xint width, height; X XString colors[] = {"gray", "lightseagreen", "dimgrey", "forestgreen", "black", "red", "cyan", "firebrick"}; X Xmain(argc, argv) X int argc; X char **argv; X{ X X Arg args[10]; X XtTranslations newTranslations; X static XtActionsRec redrawActions[] = { X {"expose", (XtCallbackProc) redraw_callback}, X }; X X static char *overrideTranslations = X ": expose() \n\ X : expose()"; X X XColor srcColor, dummyColor; X X int i; X int count; X X XtTimerCallbackProc Cycle(); X X toplevel = XtInitialize("xengine", "XEngine", NULL, 0, &argc, argv); X X for (count = 1; count < argc; count++) { X if ((strcmp("-piston", argv[count]) == 0) && (count + 1 <= argc)) X strcpy(colors[0], argv[++count]); X else if ((strcmp("-shaft", argv[count]) == 0) && (count + 1 <= argc)) X strcpy(colors[1], argv[++count]); X else if ((strcmp("-cylinder", argv[count]) == 0) && (count + 1 <= argc)) X strcpy(colors[2], argv[++count]); X else if ((strcmp("-roter", argv[count]) == 0) && (count + 1 <= argc)) X strcpy(colors[3], argv[++count]); X else if ((strcmp("-back", argv[count]) == 0) && (count + 1 <= argc)) X strcpy(colors[4], argv[++count]); X else if ((strcmp("-dep", argv[count]) == 0) && (count + 1 <= argc)) X strcpy(colors[5], argv[++count]); X else if ((strcmp("-pre", argv[count]) == 0) && (count + 1 <= argc)) X strcpy(colors[6], argv[++count]); X else if ((strcmp("-patchlevel", argv[count]) == 0) && (count + 1 <= argc)) X { X printf("xengine - written by Kazuhiko Shutoh\nSCCS ID : %s\nPatchlevel : %d\n", sccsid, PATCHLEVEL); X exit(0); X } X else if ((strcmp("-mono", argv[count]) == 0) && (count + 1 <= argc)) { X for (i = 0; i < 8; i++) X strcpy(colors[i], "white"); X strcpy(colors[4], "black"); X } else { X fprintf(stderr, "Usage : xengine [Toolkit-Options][-piston piston_color][-shaft shaft_color][-cylinder cylinder_color][-roter roter_color][-back background_color][-dep depression_colore][-pre pression color][-mono][-patchlevel]\n"); X exit(0); X } X } X X base = XtCreateManagedWidget("base", formWidgetClass, toplevel, NULL, 0); X X i = 0; X XtSetArg(args[i], XtNwidth, 200); X i++; X XtSetArg(args[i], XtNheight, 200); X i++; X engine = XtCreateManagedWidget("engine", boxWidgetClass, base, args, i); X width = height = 200; X X i = 0; X XtSetArg(args[i], XtNfromHoriz, engine); X i++; X XtSetArg(args[i], XtNheight, 200); X i++; X rpm_info = XtCreateManagedWidget("rpm_info", asciiTextWidgetClass, base, args, i); X X XtAddActions(redrawActions, XtNumber(redrawActions)); X newTranslations = XtParseTranslationTable(overrideTranslations); X XtOverrideTranslations(engine, newTranslations); X X XtRealizeWidget(toplevel); X X /* Get graphic context */ X X gcPiston = XCreateGC(XtDisplay(engine), XtWindow(engine), (unsigned long) 0, NULL); X XAllocNamedColor(XtDisplay(engine), DefaultColormap(XtDisplay(engine), 0), colors[0], &srcColor, &dummyColor); X X XSetForeground(XtDisplay(engine), gcPiston, srcColor.pixel); X X gcShaft = XCreateGC(XtDisplay(engine), XtWindow(engine), (unsigned long) 0, NULL); X XAllocNamedColor(XtDisplay(engine), DefaultColormap(XtDisplay(engine), 0), colors[1], &srcColor, &dummyColor); X X XSetForeground(XtDisplay(engine), gcShaft, srcColor.pixel); X XSetLineAttributes(XtDisplay(engine), gcShaft, 2, LineSolid, CapButt, JoinMiter); X X gcCylinder = XCreateGC(XtDisplay(engine), XtWindow(engine), (unsigned long) 0, NULL); X XAllocNamedColor(XtDisplay(engine), DefaultColormap(XtDisplay(engine), 0), colors[2], &srcColor, &dummyColor); X X XSetForeground(XtDisplay(engine), gcCylinder, srcColor.pixel); X X gcRoter = XCreateGC(XtDisplay(engine), XtWindow(engine), (unsigned long) 0, NULL); X XAllocNamedColor(XtDisplay(engine), DefaultColormap(XtDisplay(engine), 0), colors[3], &srcColor, &dummyColor); X X XSetForeground(XtDisplay(engine), gcRoter, srcColor.pixel); X X gcBack = XCreateGC(XtDisplay(engine), XtWindow(engine), (unsigned long) 0, NULL); X XAllocNamedColor(XtDisplay(engine), DefaultColormap(XtDisplay(engine), 0), colors[4], &srcColor, &dummyColor); X X XSetForeground(XtDisplay(engine), gcBack, srcColor.pixel); X X gcDep = XCreateGC(XtDisplay(engine), XtWindow(engine), (unsigned long) 0, NULL); X XAllocNamedColor(XtDisplay(engine), DefaultColormap(XtDisplay(engine), 0), colors[5], &srcColor, &dummyColor); X X XSetForeground(XtDisplay(engine), gcDep, srcColor.pixel); X X gcPre = XCreateGC(XtDisplay(engine), XtWindow(engine), (unsigned long) 0, NULL); X XAllocNamedColor(XtDisplay(engine), DefaultColormap(XtDisplay(engine), 0), colors[6], &srcColor, &dummyColor); X X XSetForeground(XtDisplay(engine), gcPre, srcColor.pixel); X X gcEngine = XCreateGC(XtDisplay(engine), XtWindow(engine), (unsigned long) 0, NULL); X XAllocNamedColor(XtDisplay(engine), DefaultColormap(XtDisplay(engine), 0), colors[7], &srcColor, &dummyColor); X X XSetForeground(XtDisplay(engine), gcEngine, srcColor.pixel); X X /* Create engine Pixmap */ X X enginePixmap = XCreatePixmap(XtDisplay(engine), XtWindow(engine), width, height, DefaultDepth(XtDisplay(engine), 0)); X X /* Interval timer start */ X XtAddTimeOut(1, Cycle, NULL); X X XtMainLoop(); X} X XXtCallbackProc Xredraw_callback(w, event, params, nparams) X Widget w; X XEvent *event; X String *params; X Cardinal *nparams; X{ X X Arg args[10]; X X XtSetArg(args[0], XtNwidth, 0); X XtSetArg(args[1], XtNheight, 0); X XtGetValues(w, args, 2); X X width = args[0].value; X height = args[1].value; X X XFreePixmap(XtDisplay(engine), enginePixmap); X enginePixmap = XCreatePixmap(XtDisplay(engine), XtWindow(engine), width, height, DefaultDepth(XtDisplay(engine), 0)); X X} X XXtTimerCallbackProc XCycle(client_data, id) X caddr_t client_data; X XtIntervalId id; X{ X X Arg args[10]; X static char label[256]; X char tmp_str[16]; X static int i = 0; X static int sample_count = 0; X static double mean = 0.0; X double DrawEngine(); X X if (i++ > 10) { X sprintf(tmp_str, "%4.1f rpm\n", mean / 10.0); X X if (sample_count++ > 14) { X strcpy(label, ""); X sample_count = 0; X } X strcat(label, tmp_str); X XtSetArg(args[0], XtNstring, label); X XtSetValues(rpm_info, args, 1); X i = 0; X mean = 0.0; X } X mean += DrawEngine(); X XtAddTimeOut(1, Cycle, NULL); X} X Xdouble XDrawEngine() X{ X X double cycle; X static int sw = 1; X double angle, theta; X double piston_x1, piston_y1; X double piston_x2, piston_y2; X struct timeval start, end; X struct timezone dummy; X X sw ^= 1; X X XSync(XtDisplay(engine), 0); X gettimeofday(&start, &dummy); X for (angle = -180; angle < 180; angle += 18) { X theta = angle * (PI / 180.0); X piston_x1 = sin(theta) * (width * 0.1) + (width / 2); X piston_y1 = cos(theta) * (height * 0.1) + (height * 0.7); X piston_x2 = width / 2; X piston_y2 = piston_y1 - (height * 0.3); X X /* Crear Window */ X X XFillRectangle(XtDisplay(engine), enginePixmap, gcBack, 0, 0, width, height); X X /* Draw heat sink */ X X XFillRectangle(XtDisplay(engine), enginePixmap, gcEngine, X (int) (width * 0.35), (int) (height * 0.3), X (int) (width * 0.3), (int) (height * 0.02)); X X XFillRectangle(XtDisplay(engine), enginePixmap, gcEngine, X (int) (width * 0.35), (int) (height * 0.35), X (int) (width * 0.3), (int) (height * 0.02)); X X XFillRectangle(XtDisplay(engine), enginePixmap, gcEngine, X (int) (width * 0.35), (int) (height * 0.4), X (int) (width * 0.3), (int) (height * 0.02)); X X /* Draw Cylinder */ X X XFillRectangle(XtDisplay(engine), enginePixmap, gcEngine, X (int) (width * 0.42), (int) (height * 0.24), X (int) (width * 0.16), (int) (height * 0.5)); X X XFillArc(XtDisplay(engine), enginePixmap, gcEngine, X (int) (piston_x2 - (width * 0.15)), (int) ((height * 0.7) - (height * 0.15)), (int) (width * 0.3), (int) (height * 0.3), 0 * 64, 360 * 64); X X XFillArc(XtDisplay(engine), enginePixmap, gcBack, X (int) (piston_x2 - (width * 0.14)), (int) ((height * 0.7) - (height * 0.14)), (int) (width * 0.28), (int) (height * 0.28), 0 * 64, 360 * 64); X X XFillRectangle(XtDisplay(engine), enginePixmap, gcBack, X (int) (width * 0.43), (int) (height * 0.25), X (int) (width * 0.14), (int) (height * 0.5)); X X /* Draw Gas */ X X if (sw != 0) { X XFillRectangle(XtDisplay(engine), enginePixmap, gcPre, X (int) (width * 0.435), (int) (height * 0.25), X (int) (width * 0.13), (int) (piston_y2 - (height * 0.05) - (height * 0.26) + (height * 0.1))); X } else { X XFillRectangle(XtDisplay(engine), enginePixmap, gcDep, X (int) (width * 0.435), (int) (height * 0.25), X (int) (width * 0.13), (int) (piston_y2 - (height * 0.05) - (height * 0.26) + (height * 0.1))); X } X X /* Draw Piston arm */ X X XDrawLine(XtDisplay(engine), enginePixmap, gcShaft, X (int) piston_x1, (int) piston_y1, (int) piston_x2, (int) piston_y2); X XDrawLine(XtDisplay(engine), enginePixmap, gcShaft, X (int) piston_x1, (int) piston_y1, (int) piston_x2, (int) (height * 0.7)); X X X /* Draw Piston & ring */ X X XFillRectangle(XtDisplay(engine), enginePixmap, gcPiston, X (int) (width * 0.435), (int) (piston_y2 - (height * 0.05)), X (int) (width * 0.13), (int) (height * 0.1)); X X XFillRectangle(XtDisplay(engine), enginePixmap, gcShaft, X (int) (width * 0.435), (int) (piston_y2 - (height * 0.045)), X (int) (width * 0.13), (int) (height * 0.01)); X X XFillArc(XtDisplay(engine), enginePixmap, gcShaft, X (int) (piston_x2 - (width * 0.015)), (int) (piston_y2 - (height * 0.015)), (int) (width * 0.03), (int) (height * 0.03), 0, 360 * 64); X X /* Draw Roter */ X XFillArc(XtDisplay(engine), enginePixmap, gcRoter, X (int) (piston_x2 - (width * 0.1)), (int) ((height * 0.7) - (height * 0.1)), (int) (width * 0.2), (int) (height * 0.2), (int) (angle + 30) * 64, 120 * 64); X X XFillArc(XtDisplay(engine), enginePixmap, gcPiston, X (int) (piston_x2 - (width * 0.025)), (int) ((height * 0.7) - (height * 0.025)), (int) (width * 0.05), (int) (height * 0.05), 0, 360 * 64); X X XCopyArea(XtDisplay(engine), enginePixmap, XtWindow(engine), gcCylinder, 0, 0, width, height, 0, 0); X } X X XSync(XtDisplay(engine), 0); X gettimeofday(&end, &dummy); X X cycle = 60 / ((double) ((end.tv_sec * 1000000 + end.tv_usec) - (start.tv_sec * 1000000 + start.tv_usec)) / 1000000); X X X return (cycle); X X} X END_OF_FILE if test 11425 -ne `wc -c <'xengine.c'`; then echo shar: \"'xengine.c'\" unpacked with wrong size! fi # end of 'xengine.c' fi if test -f 'xengine.man' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'xengine.man'\" else echo shar: Extracting \"'xengine.man'\" \(1142 characters\) sed "s/^X//" >'xengine.man' <<'END_OF_FILE' X.TH XENGINE 1 "19 September 1990" "X Version 11" X.SH NAME Xxengine - reciprocationg engine for X. X.SH SYNOPSIS X.B xengine X[-\fItoolkitoption\fP ...] [-patchlevel] [-piston \fIpiston-color\fP] [-cylinder \fIcylinder-color\fP] [-roter \fIroter-color\fP] [-back \fIbackground-color\fP] [-dep \fIdepression-color\fP] [-pre \fIpression-color\fP] X.SHb DESCRIPTION XThe X.I xengine Xdisplays a animating reciprocating engine. Please don't ask me why. :-) X.SH OPTIONS X.PP X.I Xtacho Xaccepts all of the standard X Toolkit command line options along with the Xfollowing additional options: X.PP X.TP 8 X.B \-patchlevel XThis option specifies the show patchlevel. X.TP 8 X.B \-(parts-name) \fIparts-color\fP XThis option specifies the color each parts of engine. X.SH SEE ALSO XX(1), X Toolkit Athena widgets. X.SH COPYRIGHT NOTICE XPermission to use, copy, modify and distribute without charge this Xsoftware, documentation, images, etc. is granted, provided that this Xcomment and the author's name is retained. The author assumes no Xresponsibility for lost sleep as a consequence of use of this software. X.SH AUTHOR XKazuhiko Shutoh X.br Xshutoh@isl.yamaha.co.jp END_OF_FILE if test 1142 -ne `wc -c <'xengine.man'`; then echo shar: \"'xengine.man'\" unpacked with wrong size! fi # end of 'xengine.man' fi echo shar: End of shell archive. exit 0 dan ---------------------------------------------------- O'Reilly && Associates argv@sun.com / argv@ora.com Opinions expressed reflect those of the author only.