home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / x / volume12 / acm / part04 < prev    next >
Internet Message Format  |  1991-03-01  |  48KB

  1. Path: uunet!elroy.jpl.nasa.gov!decwrl!sun-barr!newstop!male!jethro!exodus!mipsdal.mips.com
  2. From: riley@mipsdal.mips.com (Riley Rainey)
  3. Newsgroups: comp.sources.x
  4. Subject: v12i009: acm - X aerial combat simulation, Part04/09
  5. Message-ID: <8986@exodus.Eng.Sun.COM>
  6. Date: 2 Mar 91 08:32:28 GMT
  7. References: <csx-12i006:acm@uunet.UU.NET>
  8. Sender: news@exodus.Eng.Sun.COM
  9. Lines: 1742
  10. Approved: argv@sun.com
  11.  
  12. Submitted-by: riley@mipsdal.mips.com (Riley Rainey)
  13. Posting-number: Volume 12, Issue 9
  14. Archive-name: acm/part04
  15.  
  16. #! /bin/sh
  17. # This is a shell archive.  Remove anything before this line, then unpack
  18. # it by saving it into a file and typing "sh file".  To overwrite existing
  19. # files, type "sh file -c".  You can also feed this as standard input via
  20. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  21. # will see the following message at the end:
  22. #        "End of archive 4 (of 9)."
  23. # Contents:  acm/V/test/Makefile acm/V/test/animate.c
  24. #   acm/fsim/doRadar.c acm/fsim/newPlane.c acm/fsim/rwy
  25. # Wrapped by riley@mipsdal on Thu Feb 14 10:09:18 1991
  26. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  27. if test -f 'acm/V/test/Makefile' -a "${1}" != "-c" ; then 
  28.   echo shar: Will not clobber existing file \"'acm/V/test/Makefile'\"
  29. else
  30. echo shar: Extracting \"'acm/V/test/Makefile'\" \(7148 characters\)
  31. sed "s/^X//" >'acm/V/test/Makefile' <<'END_OF_FILE'
  32. X# Makefile generated by imake - do not edit!
  33. X# $XConsortium: imake.c,v 1.37 88/10/08 20:08:30 jim Exp $
  34. X
  35. X###########################################################################
  36. X# X Window System Makefile generated from template file Imake.tmpl
  37. X# $XConsortium: Imake.tmpl,v 1.91 88/10/23 22:37:10 jim Exp $
  38. X#
  39. X# Do not change the body of the imake template file.  Server-specific
  40. X# parameters may be set in the appropriate .macros file; site-specific
  41. X# parameters (but shared by all servers) may be set in site.def.  If you
  42. X# make any changes, you'll need to rebuild the makefiles using
  43. X# "make World" (at best) or "make Makefile; make Makefiles" (at least) in
  44. X# the top level directory.
  45. X#
  46. X# If your C preprocessor doesn't define any unique symbols, you'll need
  47. X# to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
  48. X# "make Makefile", "make Makefiles", or "make World").
  49. X#
  50. X# If you absolutely can't get imake to work, you'll need to set the
  51. X# variables at the top of each Makefile as well as the dependencies at the
  52. X# bottom (makedepend will do this automatically).
  53. X#
  54. X
  55. X# WARNING:  Imake.tmpl not configured; guessing at definitions!!!
  56. X# This might mean that BOOTSTRAPCFLAGS wasn't set when building imake.
  57. X
  58. X###########################################################################
  59. X# platform-specific configuration parameters - edit Guess.macros to change
  60. X
  61. X# platform:  $XConsortium: Guess.macros,v 1.30 88/10/23 11:00:33 jim Exp $
  62. X
  63. X               AR = ar clq
  64. X  BOOTSTRAPCFLAGS =
  65. X               CC = cc
  66. X         COMPRESS = compress
  67. X              CPP = /lib/cpp
  68. X          INSTALL = install
  69. X               LD = ld
  70. X             LINT = lint
  71. X      LINTLIBFLAG = -C
  72. X         LINTOPTS = -axz
  73. X               LN = ln -s
  74. X               MV = mv
  75. X           RANLIB = ranlib
  76. X  RANLIBINSTFLAGS =
  77. X               RM = rm -f
  78. X  STD_CPP_DEFINES =             */
  79. X      STD_DEFINES =
  80. XSYSLAST_LIBRARIES =
  81. X             TAGS = ctags
  82. X
  83. X###########################################################################
  84. X# site-specific configuration parameters - edit site.def to change
  85. X
  86. X# site:  $XConsortium: site.def,v 1.16 88/10/12 10:30:24 jim Exp $
  87. X
  88. X###########################################################################
  89. X# definitions common to all Makefiles - do not edit
  90. X
  91. X          SHELL =     /bin/sh
  92. X
  93. X        DESTDIR =
  94. X      USRLIBDIR = $(DESTDIR)/usr/lib
  95. X         BINDIR = $(DESTDIR)/usr/bin/X11
  96. X         INCDIR = $(DESTDIR)/usr/include/X11
  97. X         ADMDIR = $(DESTDIR)/usr/adm
  98. X         LIBDIR = $(USRLIBDIR)/X11
  99. X     LINTLIBDIR = $(USRLIBDIR)/lint
  100. X        FONTDIR = $(LIBDIR)/fonts
  101. X       XINITDIR = $(LIBDIR)/xinit
  102. X         XDMDIR = $(LIBDIR)/xdm
  103. X         UWMDIR = $(LIBDIR)/uwm
  104. X         AWMDIR = $(LIBDIR)/awm
  105. X         TWMDIR = $(LIBDIR)/twm
  106. X        MANPATH = $(DESTDIR)/usr/man
  107. X  MANSOURCEPATH = $(MANPATH)/man
  108. X         MANDIR = $(MANSOURCEPATH)n
  109. X      LIBMANDIR = $(MANSOURCEPATH)3
  110. X    XAPPLOADDIR = $(LIBDIR)/app-defaults
  111. X
  112. X   INSTBINFLAGS = -m 0755
  113. X   INSTUIDFLAGS = -m 4755
  114. X   INSTLIBFLAGS = -m 0664
  115. X   INSTINCFLAGS = -m 0444
  116. X   INSTMANFLAGS = -m 0444
  117. X   INSTAPPFLAGS = -m 0444
  118. X  INSTKMEMFLAGS = -m 4755
  119. X        FCFLAGS = -t
  120. X    CDEBUGFLAGS = -O
  121. X
  122. X        PATHSEP = /
  123. X         DEPEND = $(DEPENDSRC)/makedepend
  124. X          IMAKE = $(IMAKESRC)/imake
  125. X            RGB = $(RGBSRC)/rgb
  126. X             FC = $(BDFTOSNFSRC)/bdftosnf
  127. X      MKFONTDIR = $(MKFONTDIRSRC)/mkfontdir
  128. X      MKDIRHIER = $(SCRIPTSSRC)/mkdirhier.sh
  129. X
  130. X         CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES) $(DEFINES)
  131. X      LINTFLAGS = $(LINTOPTS) $(INCLUDES) $(STD_DEFINES) $(DEFINES) -DLINT
  132. X        LDFLAGS = $(CDEBUGFLAGS) $(SYS_LIBRARIES) $(SYSAUX_LIBRARIES)
  133. X            TOP = /people/riley/R3
  134. X      CLIENTSRC = $(TOP)/clients
  135. X        DEMOSRC = $(TOP)/demos
  136. X         LIBSRC = $(TOP)/lib
  137. X        FONTSRC = $(TOP)/fonts
  138. X     INCLUDESRC = $(TOP)/X11
  139. X      SERVERSRC = $(TOP)/server
  140. X        UTILSRC = $(TOP)/util
  141. X     SCRIPTSSRC = $(UTILSRC)/scripts
  142. X     EXAMPLESRC = $(TOP)/examples
  143. X     CONTRIBSRC = $(TOP)/contrib
  144. X         DOCSRC = $(TOP)/doc
  145. X         RGBSRC = $(TOP)/rgb
  146. X      DEPENDSRC = $(UTILSRC)/makedepend
  147. X       IMAKESRC = $(UTILSRC)/imake
  148. X       IRULESRC = $(UTILSRC)/imake.includes
  149. X        XLIBSRC = $(LIBSRC)/X
  150. X         XMUSRC = $(LIBSRC)/Xmu
  151. X     TOOLKITSRC = $(LIBSRC)/Xt
  152. X     AWIDGETSRC = $(LIBSRC)/Xaw
  153. X     OLDXLIBSRC = $(LIBSRC)/oldX
  154. X    BDFTOSNFSRC = $(FONTSRC)/bdftosnf
  155. X   MKFONTDIRSRC = $(FONTSRC)/mkfontdir
  156. X   EXTENSIONSRC = $(TOP)/extensions
  157. X   EXTENSIONLIB = $(EXTENSIONSRC)/lib/libXext.a
  158. X           XLIB = $(XLIBSRC)/libX11.a
  159. X         XMULIB = $(XMUSRC)/libXmu.a
  160. X        OLDXLIB = $(OLDXLIBSRC)/liboldX.a
  161. X       XTOOLLIB = $(TOOLKITSRC)/libXt.a
  162. X         XAWLIB = $(AWIDGETSRC)/libXaw.a
  163. X       LINTXLIB = $(XLIBSRC)/llib-lX11.ln
  164. X        LINTXMU = $(XMUSRC)/llib-lXmu.ln
  165. X      LINTXTOOL = $(TOOLKITSRC)/llib-lXt.ln
  166. X        LINTXAW = $(AWIDGETSRC)/llib-lXaw.ln
  167. X       INCLUDES = -I$(TOP)
  168. X      MACROFILE = Guess.macros
  169. X   ICONFIGFILES = $(IRULESRC)/Imake.tmpl \
  170. X            $(IRULESRC)/$(MACROFILE) $(IRULESRC)/site.def
  171. X  IMAKE_DEFINES =
  172. X      IMAKE_CMD = $(NEWTOP)$(IMAKE) -TImake.tmpl -I$(NEWTOP)$(IRULESRC) \
  173. X            -s Makefile $(IMAKE_DEFINES)
  174. X         RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a \
  175. X            .emacs_* tags TAGS make.log MakeOut
  176. X
  177. X###########################################################################
  178. X# rules:  $XConsortium: Imake.rules,v 1.71 88/10/23 22:46:34 jim Exp $
  179. X
  180. X###########################################################################
  181. X# start of Imakefile
  182. X
  183. XCDEBUGFLAGS = -systype bsd43 -O
  184. X
  185. XSRCS=            animate.c app.c
  186. XOBJS=            animate.o app.o
  187. XSYS_LIBRARIES=        -L../lib -lV -lm -lX11
  188. X
  189. X        PROGRAM = animate
  190. X
  191. Xall:: animate
  192. X
  193. Xanimate: $(OBJS) $(LOCAL_LIBRARIES)
  194. X    $(RM) $@
  195. X    $(CC) -o $@ $(OBJS) $(LOCAL_LIBRARIES) $(LDFLAGS) $(SYSLAST_LIBRARIES)
  196. X
  197. Xrelink::
  198. X    $(RM) $(PROGRAM)
  199. X    $(MAKE) $(MFLAGS) $(PROGRAM)
  200. X
  201. Xinstall:: animate
  202. X    $(INSTALL) -c $(INSTALLFLAGS) animate $(BINDIR)
  203. X
  204. Xinstall.man:: animate.man
  205. X    $(INSTALL) -c $(INSTMANFLAGS) animate.man $(MANDIR)/animate.n
  206. X
  207. Xdepend:: $(DEPEND)
  208. X
  209. Xdepend::
  210. X    $(DEPEND) -s "# DO NOT DELETE" -- $(CFLAGS) -- $(SRCS)
  211. X
  212. X$(DEPEND):
  213. X    @echo "making $@"; \
  214. X    cd $(DEPENDSRC); $(MAKE)
  215. X
  216. Xclean::
  217. X    $(RM) $(PROGRAM)
  218. X
  219. X###########################################################################
  220. X# Imake.tmpl common rules for all Makefiles - do not edit
  221. X
  222. Xemptyrule::
  223. X
  224. Xclean::
  225. X    $(RM_CMD) \#*
  226. X
  227. XMakefile:: $(IMAKE)
  228. X
  229. XMakefile:: Imakefile \
  230. X    $(IRULESRC)/Imake.tmpl \
  231. X    $(IRULESRC)/Imake.rules \
  232. X    $(IRULESRC)/site.def \
  233. X    $(IRULESRC)/$(MACROFILE)
  234. X    -@if [ -f Makefile ]; then \
  235. X        echo "$(RM) Makefile.bak; $(MV) Makefile Makefile.bak"; \
  236. X        $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
  237. X    else exit 0; fi
  238. X    $(IMAKE_CMD) -DTOPDIR=$(TOP)
  239. X
  240. X$(IMAKE):
  241. X    @echo "making $@"; \
  242. X    cd $(IMAKESRC); $(MAKE) BOOTSTRAPCFLAGS=$(BOOTSTRAPCFLAGS)
  243. X
  244. Xtags::
  245. X    $(TAGS) -w *.[ch]
  246. X    $(TAGS) -xw *.[ch] > TAGS
  247. X
  248. X###########################################################################
  249. X# empty rules for directories that do not have SUBDIRS - do not edit
  250. X
  251. Xinstall::
  252. X    @echo "install done"
  253. X
  254. Xinstall.man::
  255. X    @echo "install.man done"
  256. X
  257. XMakefiles::
  258. X
  259. X###########################################################################
  260. X# dependencies generated by makedepend
  261. X
  262. END_OF_FILE
  263. if test 7148 -ne `wc -c <'acm/V/test/Makefile'`; then
  264.     echo shar: \"'acm/V/test/Makefile'\" unpacked with wrong size!
  265. fi
  266. # end of 'acm/V/test/Makefile'
  267. fi
  268. if test -f 'acm/V/test/animate.c' -a "${1}" != "-c" ; then 
  269.   echo shar: Will not clobber existing file \"'acm/V/test/animate.c'\"
  270. else
  271. echo shar: Extracting \"'acm/V/test/animate.c'\" \(7198 characters\)
  272. sed "s/^X//" >'acm/V/test/animate.c' <<'END_OF_FILE'
  273. X#include <stdio.h>
  274. X#include <X11/Xlib.h>
  275. X#include <X11/Xutil.h>
  276. X
  277. Xstatic char *id = "V library animation test -- Riley Rainey";
  278. X
  279. X#define STRING    "Double Buffered Animation"
  280. X#define BORDER    1
  281. X#define FONT    "fixed"
  282. X#define    ARG_FONT        "font"
  283. X#define    ARG_BORDER_COLOR    "borderColor"
  284. X#define    ARG_BACKGROUND        "background"
  285. X#define ARG_BORDER        "borderWidth"
  286. X#define    ARG_GEOMETRY        "geometry"
  287. X#define DEFAULT_BACKGROUND    "#29350B"
  288. X#define DEFAULT_BORDER        "black"
  289. X
  290. X#define SW_BORDER    1
  291. X#define SW_BG        3
  292. X#define SW_GEOM        4
  293. X
  294. Xstruct {
  295. X    char    *sw;
  296. X    int    value;
  297. X    }    switches[] = {
  298. X    "-bw", SW_BORDER,
  299. X    "-bg", SW_BG,
  300. X    "-geometry", SW_GEOM,
  301. X    NULL, 0}, *swp;
  302. X
  303. Xchar *background = NULL, *filename;
  304. Xint  borderWidth = 1;
  305. Xint  mono;
  306. X
  307. X
  308. X/*
  309. X * This structure forms the WM_HINTS property of the window,
  310. X * letting the window manager know how to handle this window.
  311. X * See Section 9.1 of the Xlib manual.
  312. X */
  313. XXWMHints    xwmh = {
  314. X    (InputHint|StateHint),    /* flags */
  315. X    False,            /* input */
  316. X    NormalState,        /* initial_state */
  317. X    0,                /* icon pixmap */
  318. X    0,                /* icon window */
  319. X    0, 0,            /* icon location */
  320. X    0,                /* icon mask */
  321. X    0,                /* Window group */
  322. X};
  323. X
  324. XDisplay        *dpy;        /* X server connection */
  325. XWindow        win;        /* Window ID */
  326. XGC        gc;        /* GC to draw with */
  327. XXGCValues    gcv;
  328. XXSizeHints    xsh;        /* Size hints for window manager */
  329. XColormap    cmap;
  330. X
  331. Xstatic unsigned long    planemask [6];    /* plane masks from XAllocColorCells */
  332. Xstatic unsigned long   pixels [16];    /* pixel values from XAllocColorCells */
  333. XGC        curGC;
  334. X
  335. Xmain(argc,argv)
  336. X    int argc;
  337. X    char **argv;
  338. X{
  339. X    char       *fontName;    /* Name of font for string */
  340. X    XFontStruct *fontstruct;    /* Font descriptor */
  341. X    unsigned long ftw, fth, pad;/* Font size parameters */
  342. X    unsigned long bg, bd;    /* Pixel values */
  343. X    unsigned long bw;        /* Border width */
  344. X    char       *tempstr;    /* Temporary string */
  345. X    XColor      color;        /* Temporary color */
  346. X    char       *geomSpec = NULL;/* Window geometry string */
  347. X    XSetWindowAttributes xswa;    /* Temporary Set Window Attribute struct */
  348. X    char    **c;
  349. X
  350. X/*
  351. X *  Parse command line
  352. X */
  353. X
  354. X    for (c= &argv[1]; *c != (char *) NULL; ++c)
  355. X    if (**c == '-') {
  356. X        for (swp= &switches[0]; swp->value != 0; ++swp)
  357. X        if (strcmp (swp->sw, *c) == 0) {
  358. X            switch (swp->value) {
  359. X            case SW_GEOM: 
  360. X                geomSpec = *(++c);
  361. X                break;
  362. X            case SW_BG:
  363. X                background = *(++c);
  364. X                break;
  365. X            case SW_BORDER:
  366. X                borderWidth = atoi (*(++c));
  367. X                break;
  368. X            }
  369. X                break;
  370. X        }
  371. X        if (swp->value == 0) {
  372. X        fprintf (stderr, "%s: invalid switch %s", argv[0], *c);
  373. X        exit (1);
  374. X        }
  375. X    }
  376. X    else
  377. X        filename = *c;
  378. X
  379. X    /*
  380. X     * Open the display using the $DISPLAY environment variable to locate
  381. X     * the X server.  See Section 2.1.
  382. X     */
  383. X    if ((dpy = XOpenDisplay(NULL)) == NULL) {
  384. X    fprintf(stderr, "%s: can't open %s\n", argv[0], XDisplayName(NULL));
  385. X    exit(1);
  386. X    }
  387. X
  388. X    mono = (DisplayPlanes(dpy, 0) < 2) ? 1 : 0;
  389. X
  390. X    /*
  391. X     * Load the font to use.  See Sections 10.2 & 6.5.1
  392. X     */
  393. X    if ((fontName = XGetDefault(dpy, argv[0], ARG_FONT)) == NULL) {
  394. X    fontName = FONT;
  395. X    }
  396. X    if ((fontstruct = XLoadQueryFont(dpy, fontName)) == NULL) {
  397. X    fprintf(stderr, "%s: display %s doesn't know font %s\n",
  398. X        argv[0], DisplayString(dpy), fontName);
  399. X    exit(1);
  400. X    }
  401. X    fth = fontstruct->max_bounds.ascent + fontstruct->max_bounds.descent;
  402. X    ftw = fontstruct->max_bounds.width;
  403. X
  404. X    /*
  405. X     * Select colors for the border,  the window background,  and the
  406. X     * foreground.  We use the default colormap to allocate the colors in.
  407. X     * See Sections 2.2.1, 5.1.2, & 10.4.
  408. X     */
  409. X
  410. X    cmap = DefaultColormap(dpy, DefaultScreen(dpy));
  411. X
  412. X    if ((tempstr = XGetDefault(dpy, argv[0], ARG_BORDER_COLOR)) == NULL)
  413. X    tempstr = DEFAULT_BORDER;
  414. X    if (XParseColor(dpy, cmap, tempstr, &color) == 0) {
  415. X    fprintf (stderr, "Can't get border color %s\n", tempstr);
  416. X    exit (1);
  417. X    }
  418. X    bd = color.pixel;
  419. X
  420. X/*
  421. X *  Allocate Color Planes and one extra cell for the border color.
  422. X */
  423. X
  424. X    if (mono == 0)
  425. X    if (XAllocColorCells (dpy, cmap, False, planemask, 0, pixels, 1) == 0) {
  426. X    fprintf (stderr, "Cannot allocate color cells\n");
  427. X    exit (1);
  428. X    }
  429. X    bg = WhitePixel (dpy, 0);
  430. X
  431. X/*
  432. X *  Store border color
  433. X */
  434. X
  435. X    if (mono)
  436. X    bd = BlackPixel (dpy, 0);
  437. X    else {
  438. X        bd = color.pixel = pixels [0];
  439. X        XStoreColor (dpy, cmap, &color);
  440. X    }
  441. X
  442. X/*
  443. X *  Background Color (pixels [0] defines this).
  444. X */
  445. X
  446. X    if (background == NULL)
  447. X    background = XGetDefault (dpy, argv[0], ARG_BACKGROUND);
  448. X    if (background == NULL)
  449. X    background = DEFAULT_BACKGROUND;
  450. X
  451. X    /*
  452. X     * Set the border width of the window,  and the gap between the text
  453. X     * and the edge of the window, "pad".
  454. X     */
  455. X    pad = BORDER;
  456. X    if ((tempstr = XGetDefault(dpy, argv[0], ARG_BORDER)) == NULL)
  457. X    bw = 1;
  458. X    else
  459. X    bw = atoi(tempstr);
  460. X
  461. X    /*
  462. X     * Deal with providing the window with an initial position & size.
  463. X     * Fill out the XSizeHints struct to inform the window manager. See
  464. X     * Sections 9.1.6 & 10.3.
  465. X     */
  466. X    if (geomSpec == NULL)
  467. X        geomSpec = XGetDefault(dpy, argv[0], ARG_GEOMETRY);
  468. X
  469. X    if (geomSpec == NULL) {
  470. X    /*
  471. X     * The defaults database doesn't contain a specification of the
  472. X     * initial size & position - fit the window to the text and locate
  473. X     * it in the center of the screen.
  474. X     */
  475. X    xsh.flags = (PPosition | PSize);
  476. X    xsh.height = 800;
  477. X    xsh.width = 1000;
  478. X    xsh.x = (DisplayWidth(dpy, DefaultScreen(dpy)) - xsh.width) / 2;
  479. X    xsh.y = (DisplayHeight(dpy, DefaultScreen(dpy)) - xsh.height) / 2;
  480. X    }
  481. X    else {
  482. X    int         bitmask;
  483. X
  484. X    bzero(&xsh, sizeof(xsh));
  485. X    bitmask = XGeometry(dpy, DefaultScreen(dpy), geomSpec, geomSpec,
  486. X                bw, ftw, fth, pad, pad, &(xsh.x), &(xsh.y),
  487. X                &(xsh.width), &(xsh.height));
  488. X    if (bitmask & (XValue | YValue)) {
  489. X        xsh.flags |= USPosition;
  490. X    }
  491. X    if (bitmask & (WidthValue | HeightValue)) {
  492. X        xsh.flags |= USSize;
  493. X    }
  494. X    }
  495. X
  496. X    /*
  497. X     * Create the Window with the information in the XSizeHints, the
  498. X     * border width,  and the border & background pixels. See Section 3.3.
  499. X     */
  500. X    win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy),
  501. X                  xsh.x, xsh.y, xsh.width, xsh.height,
  502. X                  bw, bd, bg);
  503. X
  504. X    /*
  505. X     * Set the standard properties for the window managers. See Section
  506. X     * 9.1.
  507. X     */
  508. X    XSetStandardProperties(dpy, win, STRING, STRING, None, argv, argc, &xsh);
  509. X    XSetWMHints(dpy, win, &xwmh);
  510. X
  511. X    /*
  512. X     * Ensure that the window's colormap field points to the default
  513. X     * colormap,  so that the window manager knows the correct colormap to
  514. X     * use for the window.  See Section 3.2.9. Also,  set the window's Bit
  515. X     * Gravity to reduce Expose events.
  516. X     */
  517. X    xswa.colormap = DefaultColormap(dpy, DefaultScreen(dpy));
  518. X    xswa.bit_gravity = NorthWestGravity;
  519. X    XChangeWindowAttributes(dpy, win, (CWColormap | CWBitGravity), &xswa);
  520. X
  521. X    /*
  522. X     * Create the GC for drawing the picture.
  523. X     */
  524. X    gcv.font = fontstruct->fid;
  525. X    curGC = XCreateGC(dpy, win, GCFont, &gcv);
  526. X
  527. X    /*
  528. X     * Specify the event types we're interested in - only Exposures.  See
  529. X     * Sections 8.5 & 8.4.5.1
  530. X     */
  531. X    XSelectInput(dpy, win, ExposureMask);
  532. X
  533. X    /*
  534. X     * Map the window to make it visible.  See Section 3.5.
  535. X     */
  536. X    XMapWindow(dpy, win);
  537. X
  538. X    app(background);
  539. X
  540. X    exit(1);
  541. X}
  542. X
  543. END_OF_FILE
  544. if test 7198 -ne `wc -c <'acm/V/test/animate.c'`; then
  545.     echo shar: \"'acm/V/test/animate.c'\" unpacked with wrong size!
  546. fi
  547. # end of 'acm/V/test/animate.c'
  548. fi
  549. if test -f 'acm/fsim/doRadar.c' -a "${1}" != "-c" ; then 
  550.   echo shar: Will not clobber existing file \"'acm/fsim/doRadar.c'\"
  551. else
  552. echo shar: Extracting \"'acm/fsim/doRadar.c'\" \(9804 characters\)
  553. sed "s/^X//" >'acm/fsim/doRadar.c' <<'END_OF_FILE'
  554. X/*
  555. X *    xflight : an aerial combat simulator for X
  556. X *
  557. X *    Written by Riley Rainey,  riley@mips.com
  558. X *
  559. X *    Permission to use, copy, modify and distribute (without charge) this
  560. X *    software, documentation, images, etc. is granted, provided that this 
  561. X *    comment and the author's name is retained.
  562. X *
  563. X */
  564. X#include "pm.h"
  565. X#include <stdio.h>
  566. X#include <math.h>
  567. X
  568. X#define scanSlope     2.1445
  569. X
  570. Xvoid plotPrimaryTarget(), plotNormalTarget();
  571. X
  572. Xstatic char *thirty = "30";
  573. X
  574. X/*
  575. X *  We'll build an array that contains the amount of radar radiation that each
  576. X *  craft can "see" coming from another player.  This is used to build each players
  577. X *  radar threat display.
  578. X *
  579. X *  rval[i][j] will represent the amount of radar energy that player j sees coming from
  580. X *  player i.
  581. X *
  582. X *  For neatness, the rval array has been moved to the ptbl vector.
  583. X */
  584. X
  585. Xchar *ItoA (n, s)
  586. Xint    n;
  587. Xchar    *s; {
  588. X
  589. X    if (abs(n) > 999) {
  590. X        sprintf (s, "%d,%3.3d", n/1000, abs(n) % 1000);
  591. X    }
  592. X    else 
  593. X        sprintf (s, "%d", n);
  594. X
  595. X    return s;
  596. X}
  597. X
  598. Xint doRadar (c, u)
  599. Xcraft *c;
  600. Xviewer *u; {
  601. X
  602. X    register craft *p;
  603. X    register int    i, t, x, y;
  604. X    register int    xc, yc;
  605. X    register double    xs, ys;
  606. X    char        *buf;
  607. X
  608. X    t = c->curRadarTarget = getRadarTarget (c, 0);
  609. X    xc = (u->radarWidth + 1) / 2;
  610. X    yc = (u->radarHeight + 1) / 2;
  611. X
  612. X/*
  613. X *  Set drawing colors and font
  614. X */
  615. X
  616. X    XSetForeground (u->dpy, u->gc, u->v->flags & VPMono ?
  617. X            BlackPixel(u->v->dpy, u->v->screen) :
  618. X            u->v->pixel[blackPixel]);
  619. X    XFillRectangle (u->dpy, u->rwin, u->gc, 0, 0,
  620. X         u->radarWidth, u->radarHeight);
  621. X    XSetForeground (u->dpy, u->gc, u->v->flags & VPMono ?
  622. X            WhitePixel(u->v->dpy, u->v->screen) :
  623. X            u->v->pixel[whitePixel]);
  624. X    XSetFont (u->dpy, u->gc, u->rfont->fid);
  625. X
  626. X/*
  627. X *  Draw reference "thing"
  628. X */
  629. X
  630. X    XDrawLine (u->dpy, u->rwin, u->gc, xc, yc, xc - 5, yc + 5);
  631. X    XDrawLine (u->dpy, u->rwin, u->gc, xc - 10, yc, xc - 5, yc + 5);
  632. X    XDrawLine (u->dpy, u->rwin, u->gc, xc - 10, yc, xc - 18, yc);
  633. X    XDrawLine (u->dpy, u->rwin, u->gc, xc, yc, xc + 5, yc + 5);
  634. X    XDrawLine (u->dpy, u->rwin, u->gc, xc + 10, yc, xc + 5, yc + 5);
  635. X    XDrawLine (u->dpy, u->rwin, u->gc, xc + 10, yc, xc + 18, yc);
  636. X    XDrawLine (u->dpy, u->rwin, u->gc, 0, 0, u->radarWidth-1, 0);
  637. X    XDrawLine (u->dpy, u->rwin, u->gc, u->radarWidth-1, 0,
  638. X        u->radarWidth-1, u->radarHeight-1);
  639. X    XDrawLine (u->dpy, u->rwin, u->gc, 0, u->radarHeight-1,
  640. X        u->radarWidth-1, u->radarHeight-1);
  641. X    XDrawLine (u->dpy, u->rwin, u->gc, 0, u->radarHeight, 0, 0);
  642. X
  643. X/*
  644. X *  Radar dead?
  645. X */
  646. X
  647. X    if (isFunctioning (c, SYS_RADAR) == 0)
  648. X        return 0;
  649. X
  650. X/*
  651. X *  Radar off?
  652. X */
  653. X
  654. X    if (c->radarMode <= RM_STANDBY) {
  655. X        if (c->radarMode == RM_OFF)
  656. X            buf = "RADAR OFF";
  657. X        else
  658. X            buf = "RADAR STBY";
  659. X        c->curRadarTarget = -1;
  660. X        XDrawString (u->dpy, u->rwin, u->gc, u->rftw * 4,
  661. X            u->fth * 2, buf, strlen(buf));
  662. X        return 0;
  663. X    }
  664. X
  665. X/*
  666. X *  Plot reference lines
  667. X */
  668. X
  669. X    i = (u->radarWidth + 3) / 4;
  670. X    y = u->rfth + 3;
  671. X    XDrawLine (u->dpy, u->rwin, u->gc, xc, y, xc, y+4);
  672. X    y = u->radarHeight - 5 - u->rfth;
  673. X    XDrawLine (u->dpy, u->rwin, u->gc, xc, y, xc, y+4);
  674. X
  675. X    x = xc - i;
  676. X    y = u->rfth + 6;
  677. X    XDrawLine (u->dpy, u->rwin, u->gc, x, y, x, y+4);
  678. X    y = u->radarHeight - 6 - u->rfth;
  679. X    XDrawLine (u->dpy, u->rwin, u->gc, x, y, x, y+4);
  680. X    XDrawString (u->dpy, u->rwin, u->gc, x-u->rftw, y+2+u->rfth,
  681. X        thirty, 2);
  682. X
  683. X    x = xc + i;
  684. X    y = u->rfth + 6;
  685. X    XDrawLine (u->dpy, u->rwin, u->gc, x, y, x, y+4);
  686. X    y = u->radarHeight - 6 - u->rfth;
  687. X    XDrawLine (u->dpy, u->rwin, u->gc, x, y, x, y+4);
  688. X    XDrawString (u->dpy, u->rwin, u->gc, x-u->rftw, y+2+u->rfth,
  689. X        thirty, 2);
  690. X
  691. X    i = (u->radarHeight + 3) / 4;
  692. X    x = 2;
  693. X    XDrawLine (u->dpy, u->rwin, u->gc, x, yc, x+4, yc);
  694. X    x = u->radarWidth - 6;
  695. X    XDrawLine (u->dpy, u->rwin, u->gc, x, yc, x+4, yc);
  696. X
  697. X    x = 5 + 2 * u->rftw;
  698. X    y = yc - i;
  699. X    XDrawLine (u->dpy, u->rwin, u->gc, x, y, x+4, y);
  700. X    x = 3;
  701. X    XDrawString (u->dpy, u->rwin, u->gc, x, y+u->rfth/3,
  702. X        thirty, 2);
  703. X    x = u->radarWidth - 6;
  704. X    XDrawLine (u->dpy, u->rwin, u->gc, x, y, x+4, y);
  705. X
  706. X    x = 5 + 2 * u->rftw;
  707. X    y = yc + i;
  708. X    XDrawLine (u->dpy, u->rwin, u->gc, x, y, x+4, y);
  709. X    x = 3;
  710. X    XDrawString (u->dpy, u->rwin, u->gc, x, y+u->rfth/3,
  711. X        thirty, 2);
  712. X    x = u->radarWidth - 6;
  713. X    XDrawLine (u->dpy, u->rwin, u->gc, x, y, x+4, y);
  714. X    
  715. X/*
  716. X *  Now plot all targets visible to the radar system.
  717. X */
  718. X
  719. X    for ((i=0, p=ptbl); i<MAXPLAYERS; (++i, ++p)) {
  720. X        if (c->relValid[i] > 0 && c->relPos[i].x >= 0.0) {
  721. X
  722. X            xs = c->relPos[i].y / c->relPos[i].x / scanSlope;
  723. X            ys = c->relPos[i].z / c->relPos[i].x / scanSlope;
  724. X            if (fabs(xs) <= 1.0 && fabs(ys) <= 1.0) {
  725. X                x = xs * (double) xc + xc;
  726. X                y = ys * (double) yc + yc;
  727. X                if (t == i)
  728. X                    plotPrimaryTarget (c, u, i, x, y);
  729. X                else
  730. X                    plotNormalTarget (u, x, y);
  731. X            }
  732. X        }
  733. X    }
  734. X    return 0;
  735. X}
  736. X
  737. Xint isRadarVisible (c, i)
  738. Xcraft *c;
  739. Xint    i; {
  740. X
  741. X    register double d, xs, ys;
  742. X    VPoint    r1;
  743. X
  744. X    if (ptbl[i].type == CT_FREE || i == c->index)
  745. X        return 0;
  746. X
  747. X/*
  748. X *  Is the set on ?
  749. X */
  750. X
  751. X    if (c->radarMode <= RM_STANDBY ||
  752. X        isFunctioning (c, SYS_RADAR) == 0) {
  753. X        ptbl[i].rval[c->index] = 0.0;
  754. X        return 0;
  755. X    }
  756. X
  757. X/*
  758. X *  Calculate the coordinates of the target relative to the craft's frame.
  759. X */
  760. X
  761. X    r1.x = ptbl[i].Sg.x - c->Sg.x;
  762. X    r1.y = ptbl[i].Sg.y - c->Sg.y;
  763. X    r1.z = ptbl[i].Sg.z - c->Sg.z;
  764. X    VTransform (&r1, &(c->Itrihedral), &(c->relPos[i]));
  765. X
  766. X    ptbl[i].rval[c->index] = 0.0;
  767. X
  768. X    if (c->relPos[i].x <= 0.0)
  769. X        return 0;
  770. X
  771. X    d = c->relPos[i].x * scanSlope;
  772. X    xs = c->relPos[i].y / d;
  773. X    ys = c->relPos[i].z / d;
  774. X
  775. X/*
  776. X *  if the absolute values of xs and ys are both less than 1.0, then
  777. X *  we are painting this target with radar energy.  Estimate the value of
  778. X *  the energy that the target sees.
  779. X */
  780. X
  781. X    if ((fabs(xs) <= 1.0) && (fabs(ys) <= 1.0)) {
  782. X        d = mag(c->relPos[i]);
  783. X        ptbl[i].rval[c->index] = c->cinfo->radarOutput / (d * d);
  784. X        if (d >= c->cinfo->radarDRange)
  785. X            return 0;
  786. X        else if (d >= c->cinfo->radarTRange)
  787. X            return 1;
  788. X        else
  789. X            return 2;
  790. X    }
  791. X    else
  792. X        return 0;
  793. X
  794. X}
  795. X
  796. Xint getRadarTarget (c, new)
  797. Xcraft     *c;
  798. Xint    new; {
  799. X
  800. X    register int    i, minID;
  801. X    register double minD, d;
  802. X
  803. X    for (i=0; i<MAXPLAYERS; ++i)
  804. X        c->relValid[i] = isRadarVisible(c, i);
  805. X
  806. X    if (new == 0) {
  807. X        i = c->curRadarTarget;
  808. X        if (i != -1 && c->relValid[i] != 0)
  809. X            return i;
  810. X    }
  811. X
  812. X    minD = 1000.0 * NM;
  813. X    minID = -1;
  814. X    for (i=0; i<MAXPLAYERS; ++i) {
  815. X        if (c->relValid[i] == 2) {
  816. X            if (new == 1 && i == c->curRadarTarget)
  817. X                continue;
  818. X            d = mag (c->relPos[i]);
  819. X            if (d < minD) {
  820. X                minD = d;
  821. X                minID = i;
  822. X            }
  823. X        }
  824. X    }
  825. X
  826. X    return minID;
  827. X}
  828. X
  829. Xvoid doDroneRadar (c)
  830. Xcraft *c; {
  831. X
  832. X    register int i;
  833. X
  834. X    for (i=0; i<MAXPLAYERS; ++i)
  835. X        (void) isRadarVisible(c, i);
  836. X}
  837. X
  838. Xvoid plotNormalTarget (u, x, y)
  839. Xviewer *u;
  840. Xint    x, y; {
  841. X
  842. X    XDrawLine (u->dpy, u->rwin, u->gc, x-2, y-2, x-2, y+2);
  843. X    XDrawLine (u->dpy, u->rwin, u->gc, x-2, y+2, x+2, y+2);
  844. X    XDrawLine (u->dpy, u->rwin, u->gc, x+2, y+2, x+2, y-2);
  845. X    XDrawLine (u->dpy, u->rwin, u->gc, x+2, y-2, x-2, y-2);
  846. X}
  847. X
  848. Xextern double heading();
  849. X
  850. Xvoid plotPrimaryTarget (c, u, i, x, y)
  851. Xcraft  *c;
  852. Xviewer *u;
  853. Xint    i;
  854. Xint    x, y; {
  855. X
  856. X    int    xp, yp;
  857. X    char    s[16];
  858. X    VPoint    rel, deltaV;
  859. X    double    d, cl;
  860. X
  861. X    xp = 150 * u->radarWidth / RADAR_WINDOW_WIDTH;
  862. X    yp = 150 * u->radarHeight / RADAR_WINDOW_HEIGHT;
  863. X
  864. X    XFillRectangle (u->dpy, u->rwin, u->gc, x-3, y-3, 7, 7);
  865. X
  866. X/*
  867. X *  Heading of target
  868. X */
  869. X
  870. X    sprintf (s, "  %3.3d \007", (int) (RADtoDEG(ptbl[i].curHeading)));
  871. X    XDrawString (u->dpy, u->rwin, u->gc, xp, yp, s, strlen(s));
  872. X
  873. X/*
  874. X *  Relative heading to target.
  875. X */
  876. X
  877. X    rel.x = ptbl[i].Sg.x - c->Sg.x;
  878. X    rel.y = ptbl[i].Sg.y - c->Sg.y;
  879. X    rel.z = ptbl[i].Sg.z - c->Sg.z;
  880. X    sprintf (s, "  %3.3d R", (int) RADtoDEG(heading(&rel)));
  881. X    XDrawString (u->dpy, u->rwin, u->gc, xp, yp+u->rfth, s, strlen(s));
  882. X
  883. X/*
  884. X *  Closure rate
  885. X */
  886. X
  887. X    deltaV.x = ptbl[i].Cg.x - c->Cg.x;
  888. X    deltaV.y = ptbl[i].Cg.y - c->Cg.y;
  889. X    deltaV.z = ptbl[i].Cg.z - c->Cg.z;
  890. X    d = mag (rel);
  891. X    cl = - (deltaV.x * rel.x + deltaV.y * rel.y + deltaV.z + rel.z) /
  892. X        d / NM * 3600.0;
  893. X    c->targetDistance = d;
  894. X    c->targetClosure = cl;
  895. X    sprintf (s, "%5d C", (int)cl);
  896. X    XDrawString (u->dpy, u->rwin, u->gc, xp, yp+2*u->rfth, s, strlen(s));
  897. X
  898. X/*
  899. X *  Range to target
  900. X */
  901. X
  902. X    xp = 40 * u->radarWidth / RADAR_WINDOW_WIDTH;
  903. X    yp = u->rfth + 4;    
  904. X    sprintf (s, "%d", (int) (d / NM));
  905. X    XDrawString (u->dpy, u->rwin, u->gc, xp, yp, s, strlen(s));
  906. X
  907. X/*
  908. X *  Altitude of target
  909. X */
  910. X
  911. X    xp = 150 * u->radarWidth / RADAR_WINDOW_WIDTH;
  912. X    yp = u->rfth + 4;    
  913. X    sprintf (s, "%d", (int) (- ptbl[i].Sg.z / 1000.0));
  914. X    XDrawString (u->dpy, u->rwin, u->gc, xp, yp, s, strlen(s));
  915. X}
  916. X
  917. X/*
  918. X *  doTEWS :  update the threat display for player i.
  919. X */
  920. X
  921. Xvoid doTEWS (c, u)
  922. Xcraft    *c;
  923. Xviewer    *u; {
  924. X
  925. X    register int    i, x, y;
  926. X    VPoint    rel, tmp;
  927. X    double    m, unit;
  928. X
  929. X    XSetForeground (u->dpy, u->gc, u->v->flags & VPMono ?
  930. X            BlackPixel(u->v->dpy, u->v->screen) :
  931. X            u->v->pixel[blackPixel]);
  932. X    XFillRectangle (u->dpy, u->win, u->gc, u->TEWSx-u->TEWSSize/2,
  933. X        u->TEWSy-u->TEWSSize/2, u->TEWSSize, u->TEWSSize);
  934. X    XSetForeground (u->dpy, u->gc, u->v->flags & VPMono ?
  935. X            WhitePixel(u->v->dpy, u->v->screen) :
  936. X            u->v->pixel[whitePixel]);
  937. X
  938. X    XDrawArc(u->dpy, u->win, u->gc, u->TEWSx-u->TEWSSize/2,
  939. X        u->TEWSy-u->TEWSSize/2, u->TEWSSize, u->TEWSSize,
  940. X        0, 360*64);
  941. X
  942. X    for (i=0; i<MAXPLAYERS; ++i) {
  943. X
  944. X        if (c->index == i)
  945. X            continue;
  946. X
  947. X        if (c->rval[i] > c->cinfo->TEWSThreshold) {
  948. X            tmp.x = ptbl[i].Sg.x - c->Sg.x;
  949. X            tmp.y = ptbl[i].Sg.y - c->Sg.y;
  950. X            tmp.z = ptbl[i].Sg.z - c->Sg.z;
  951. X            VTransform (&tmp, &(c->Itrihedral), &(rel));
  952. X            m = mag(rel);
  953. X            rel.x /= m;
  954. X            rel.y /= m;
  955. X            rel.z /= m;
  956. X            unit = sqrt (rel.x * rel.x + rel.y * rel.y);
  957. X            if (unit == 0.0) {
  958. X                rel.x = 1.0;
  959. X                rel.y = 0.0;
  960. X            }
  961. X            x = u->TEWSx + (int) (rel.y * u->TEWSSize * 0.4 / unit);
  962. X            y = u->TEWSy - (int) (rel.x * u->TEWSSize * 0.4 / unit);
  963. X            if (c->team == ptbl[i].team) {
  964. X                XDrawLine (u->dpy, u->win, u->gc, x-2, y-2, x-2, y+2);
  965. X                XDrawLine (u->dpy, u->win, u->gc, x-2, y+2, x+2, y+2);
  966. X                XDrawLine (u->dpy, u->win, u->gc, x+2, y+2, x+2, y-2);
  967. X                XDrawLine (u->dpy, u->win, u->gc, x+2, y-2, x-2, y-2);
  968. X            }
  969. X            else
  970. X                XFillRectangle (u->dpy, u->win, u->gc, x-3, y-3, 7, 7);
  971. X        }
  972. X    }
  973. X}
  974. END_OF_FILE
  975. if test 9804 -ne `wc -c <'acm/fsim/doRadar.c'`; then
  976.     echo shar: \"'acm/fsim/doRadar.c'\" unpacked with wrong size!
  977. fi
  978. # end of 'acm/fsim/doRadar.c'
  979. fi
  980. if test -f 'acm/fsim/newPlane.c' -a "${1}" != "-c" ; then 
  981.   echo shar: Will not clobber existing file \"'acm/fsim/newPlane.c'\"
  982. else
  983. echo shar: Extracting \"'acm/fsim/newPlane.c'\" \(9352 characters\)
  984. sed "s/^X//" >'acm/fsim/newPlane.c' <<'END_OF_FILE'
  985. X/*
  986. X *    xflight : an aerial combat simulator for X
  987. X *
  988. X *    Written by Riley Rainey,  riley@mips.com
  989. X *
  990. X *    Permission to use, copy, modify and distribute (without charge) this
  991. X *    software, documentation, images, etc. is granted, provided that this 
  992. X *    comment and the author's name is retained.
  993. X *
  994. X */
  995. X#include "pm.h"
  996. X#include <stdio.h>
  997. X#include <string.h>
  998. X
  999. Xstatic craftType ctype[MAXCRAFTTYPES];
  1000. X
  1001. Xextern FILE * acm_fopen ();
  1002. X
  1003. XcraftType *lookupCraft (name)
  1004. Xchar * name; 
  1005. X{
  1006. X    int    i;
  1007. X
  1008. X    for (i=0; i<MAXCRAFTTYPES; ++i)
  1009. X        if (ctype[i].name != (char *) NULL)
  1010. X        if (strcmp(name, ctype[i].name) == 0)
  1011. X            return &ctype[i];
  1012. X
  1013. X    return (craftType *) NULL;
  1014. X}
  1015. X
  1016. XcraftType *newCraft () {
  1017. X
  1018. X    int    i;
  1019. X    
  1020. X    for (i=0; i<MAXCRAFTTYPES; ++i)
  1021. X        if (ctype[i].name == (char *) NULL) {
  1022. X            ctype[i].name = "*allocated*";
  1023. X            return &ctype[i];
  1024. X        }
  1025. X
  1026. X    return (craftType *) NULL;
  1027. X}
  1028. X
  1029. Xstatic struct {
  1030. X    double mach;
  1031. X    double Cdi;
  1032. X    } *p, cdTable[] = {
  1033. X        { 0.0, 0.02 },
  1034. X        { 0.2, 0.02 },
  1035. X        { 0.95, 0.015},
  1036. X        { 1.05, 0.045},
  1037. X        { 2.0,  0.03 },
  1038. X        { 10.0, 0.03 }
  1039. X    };
  1040. X
  1041. Xstatic double CDi (c)
  1042. Xcraft *c; {
  1043. X
  1044. X    register double    b, deltaMach;
  1045. X
  1046. X    for (p=cdTable; c->mach>(p+1)->mach; ++p) ;
  1047. X    deltaMach = (p+1)->mach - p->mach;
  1048. X    b = ((p+1)->Cdi - p->Cdi) / deltaMach;
  1049. X    return p->Cdi + b * (c->mach - p->mach);
  1050. X}
  1051. X
  1052. Xvoid initf16 () {
  1053. X
  1054. X    FILE        *f;
  1055. X    craftType    *c;
  1056. X
  1057. X    c = newCraft();
  1058. X    c->name = strdup("f-16c");
  1059. X    c->CLOrigin = 0.129871;
  1060. X
  1061. X    c->CLSlope = 4.0;
  1062. X
  1063. X    c->CLNegStall = DEGtoRAD (-17.0);
  1064. X    c->CLPosStall = DEGtoRAD (30.0);
  1065. X
  1066. X    c->aspectRatio = 3.0;
  1067. X
  1068. X    c->CDOrigin = 0.03642;
  1069. X    c->CDi = CDi;
  1070. X    c->CDFactor = -2.54200;
  1071. X    c->CDPhase = 0.0349066;
  1072. X
  1073. X    c->CDBOrigin = 1.0;
  1074. X    c->CDBFactor = -1.0;
  1075. X    c->CDBPhase = 0.0;
  1076. X
  1077. X    c->CLbeta = -0.2;
  1078. X
  1079. X    c->CMOrigin = 0.0;
  1080. X    c->CMFactor = -0.95;
  1081. X
  1082. X    c->CNOrigin = 0.0;
  1083. X    c->CNFactor = -7.50;    /* based on 60 ft^2 tail; CLa = 1.0; Ivx = 15 ft */
  1084. X
  1085. X    c->CYbeta = -1.5;
  1086. X
  1087. X    c->effElevator = 0.40;
  1088. X    c->effAileron = 0.20;
  1089. X    c->effRudder = 0.35;
  1090. X
  1091. X    c->maxFlap = DEGtoRAD (40.0);    /* 40 degree maximum flap setting */
  1092. X    c->cFlap = 0.64279;        /* yields Clift of 1.0 at max extension */
  1093. X    c->cFlapDrag = 0.0467;        /* yields 0.03 of extra drag at max ext */
  1094. X    c->flapRate = 0.1745;        /* about 4 seconds to fully extend flaps */
  1095. X
  1096. X    c->maxSpeedBrake = DEGtoRAD (80.0);
  1097. X    c->cSpeedBrake = 0.03;        /* drag coefficient added by speed brakes */
  1098. X    c->speedBrakeRate = DEGtoRAD (40.0); /* about 2.0 seconds to fully extend */
  1099. X    c->speedBrakeIncr = DEGtoRAD (80.0); /* one keystoke means full extension */
  1100. X
  1101. X    VIdentMatrix(&(c->I));
  1102. X
  1103. X    c->I.m[0][0] =  7240.7;
  1104. X    c->I.m[1][1] = 49785.9;
  1105. X    c->I.m[2][2] = 54389.5;
  1106. X
  1107. X    c->LDamp = 40000.0;
  1108. X    c->MDamp = -0.6;
  1109. X    c->NDamp = -0.6;
  1110. X
  1111. X    c->cmSlope = -2.00;
  1112. X    c->cmFactor = -1.30;
  1113. X    c->cnSlope = -1.30;
  1114. X    c->cnFactor = -1.00;
  1115. X    c->betaStall = DEGtoRAD (15.0);
  1116. X
  1117. X    c->wingS = 300.0;
  1118. X    c->emptyWeight = 14576.0;
  1119. X    c->maxFuel = 6972.0;
  1120. X
  1121. X/*
  1122. X * Engine data for F100-PW-100
  1123. X * source "Modern Combat Aircraft Design", Klaus Huenecke
  1124. X */
  1125. X
  1126. X    c->maxThrust = 14080.0;
  1127. X    c->maxABThrust = 23540.0;
  1128. X    c->spFuelConsump = 0.68;
  1129. X    c->spABFuelConsump = 2.55;
  1130. X
  1131. X    c->groundingPoint.x = 0.0;
  1132. X    c->groundingPoint.y = 0.0;
  1133. X    c->groundingPoint.z = 6.0;
  1134. X    c->viewPoint.x = 12.5;
  1135. X    c->viewPoint.y = 0.0;
  1136. X    c->viewPoint.z = -3.0;
  1137. X    c->crashC = 90.0;
  1138. X
  1139. X    c->sCount = 3;
  1140. X    c->wStation[0].x = 7.0;
  1141. X    c->wStation[0].y = -4.0;
  1142. X    c->wStation[0].z = 0.0;
  1143. X    c->wStation[1].x = 0.357;
  1144. X    c->wStation[1].y = 15.6;
  1145. X    c->wStation[1].z = 0.0;
  1146. X    c->wStation[2].x = 0.357;
  1147. X    c->wStation[2].y = -15.6;
  1148. X    c->wStation[2].z = 0.0;
  1149. X
  1150. X    c->muStatic = 0.08;
  1151. X    c->muKinetic = 0.05;
  1152. X    c->muBStatic = 0.7;
  1153. X    c->muBKinetic = 0.6;
  1154. X
  1155. X    c->maxNWDef = 1.27; /* 72.7 degrees */
  1156. X    c->NWIncr = 1.27 / 32.0;
  1157. X    c->maxNWS = 85.0 * 6076.0 / 3600.0;
  1158. X    c->gearD1 = 13.5;
  1159. X    c->gearD2 = -2.5;
  1160. X    f = acm_fopen ("f16", "r");
  1161. X    c->object = VReadObject(f);
  1162. X    fclose (f);
  1163. X
  1164. X    c->TEWSThreshold = 0.0;        /* zero, for now */
  1165. X    c->radarOutput = 15000.0;    /* estimated */
  1166. X    c->radarDRange = 80.0 * NM;
  1167. X    c->radarTRange = 60.0 * NM;
  1168. X
  1169. X    c->placeProc = NULL;
  1170. X
  1171. X    c->damageBits = SYS_NODAMAGE;
  1172. X    c->damageBits &= ~ SYS_ENGINE2;
  1173. X    c->structurePts = 15;
  1174. X
  1175. X}
  1176. X
  1177. Xvoid initmig23 () {
  1178. X
  1179. X    FILE        *f;
  1180. X    craftType    *c;
  1181. X
  1182. X    c = newCraft();
  1183. X    c->name = strdup("mig-23");
  1184. X    c->CLOrigin = 0.129871;
  1185. X    c->CLSlope = 3.9;
  1186. X    c->CLNegStall = -17.0 * pi / 180.0;
  1187. X    c->CLPosStall =  26.0 * pi / 180.0;
  1188. X
  1189. X    c->aspectRatio = 2.27;
  1190. X
  1191. X    c->CDOrigin = 0.03642;
  1192. X    c->CDi = CDi;
  1193. X    c->CDFactor = -2.54200;
  1194. X    c->CDPhase = 0.0349066;
  1195. X
  1196. X    c->CDBOrigin = 1.0;
  1197. X    c->CDBFactor = -1.0;
  1198. X    c->CDBPhase = 0.0;
  1199. X
  1200. X    c->CLbeta = -0.2;
  1201. X
  1202. X    c->CMOrigin = 0.0;
  1203. X    c->CMFactor = -0.95;
  1204. X
  1205. X    c->CNOrigin = 0.0;
  1206. X    c->CNFactor = -0.90;
  1207. X
  1208. X    c->CYbeta = -1.3;
  1209. X
  1210. X    c->effElevator = 0.40;
  1211. X    c->effAileron = 0.20;
  1212. X    c->effRudder = 0.35;
  1213. X
  1214. X    c->maxFlap = 40.0 * pi / 180.0;    /* 40 degree maximum flap setting */
  1215. X    c->cFlap = 0.64279;        /* yields Clift of 1.0 at max extension */
  1216. X    c->flapRate = 0.1745;        /* about 4 seconds to fully extend flaps */
  1217. X
  1218. X    c->maxSpeedBrake = DEGtoRAD (80.0);
  1219. X    c->cSpeedBrake = 0.03;        /* drag coefficient added by speed brakes */
  1220. X    c->speedBrakeRate = DEGtoRAD (40.0); /* about 0.25 seconds to fully extend */
  1221. X    c->speedBrakeIncr = DEGtoRAD (80.0); /* one keystoke means full extension */
  1222. X
  1223. X    VIdentMatrix(&(c->I));
  1224. X    c->I.m[0][0] =  9000.0;
  1225. X    c->I.m[1][1] = 75000.0;
  1226. X    c->I.m[2][2] = 95000.0;
  1227. X
  1228. X    c->LDamp =  50000.0;
  1229. X    c->MDamp = -0.2;
  1230. X    c->NDamp = -0.4;
  1231. X
  1232. X    c->cmSlope = -1.80;
  1233. X    c->cmFactor = -1.30;
  1234. X    c->cnSlope = -1.30;
  1235. X    c->cnFactor = -1.00;
  1236. X    c->betaStall = DEGtoRAD (15.0);
  1237. X
  1238. X    c->wingS = 325.0;
  1239. X    c->emptyWeight = 25000.0;
  1240. X    c->maxFuel = 9914.0;
  1241. X/*
  1242. X * Engine data for Tumansky R-29B
  1243. X * source "Modern Fighter Combat"
  1244. X */
  1245. X
  1246. X    c->maxThrust = 17635.0;
  1247. X    c->maxABThrust = 25350.0;
  1248. X    c->spFuelConsump = 0.68;
  1249. X    c->spABFuelConsump = 2.55;
  1250. X
  1251. X    c->groundingPoint.x = 0.0;
  1252. X    c->groundingPoint.y = 0.0;
  1253. X    c->groundingPoint.z = 6.0;
  1254. X    c->viewPoint.x = 12.5;
  1255. X    c->viewPoint.y = 0.0;
  1256. X    c->viewPoint.z = -3.0;
  1257. X    c->crashC = 90.0;
  1258. X
  1259. X    c->sCount = 3;
  1260. X    c->wStation[0].x = 7.0;
  1261. X    c->wStation[0].y = -4.0;
  1262. X    c->wStation[0].z = 0.0;
  1263. X    c->wStation[1].x = 0.357;
  1264. X    c->wStation[1].y = 15.6;
  1265. X    c->wStation[1].z = 0.0;
  1266. X    c->wStation[2].x = 0.357;
  1267. X    c->wStation[2].y = -15.6;
  1268. X    c->wStation[2].z = 0.0;
  1269. X
  1270. X    c->muStatic = 0.08;
  1271. X    c->muKinetic = 0.05;
  1272. X    c->muBStatic = 0.7;
  1273. X    c->muBKinetic = 0.6;
  1274. X
  1275. X    c->maxNWDef = 1.27; /* 72.7 degrees */
  1276. X    c->NWIncr = 1.27 / 32.0;
  1277. X    c->maxNWS = 100.0 * 6076.0 / 3600.0;
  1278. X    c->gearD1 = 13.5;
  1279. X    c->gearD2 = -2.5;
  1280. X    f = acm_fopen ("mig23", "r");
  1281. X    c->object = VReadObject(f);
  1282. X    fclose (f);
  1283. X    
  1284. X    c->TEWSThreshold = 0.0;        /* zero, for now */
  1285. X    c->radarOutput = 15000.0;    /* estimated */
  1286. X    c->radarDRange = 80.0 * NM;
  1287. X    c->radarTRange = 30.0 * NM;
  1288. X
  1289. X    c->placeProc = NULL;
  1290. X
  1291. X    c->damageBits = SYS_NODAMAGE;
  1292. X    c->damageBits &= ~ SYS_ENGINE2;
  1293. X    c->structurePts = 19;
  1294. X
  1295. X}
  1296. X
  1297. Xextern void initPanel();
  1298. X
  1299. Xint newPlane(planeType)
  1300. Xchar *planeType; {
  1301. X
  1302. X    int     i, j;
  1303. X    craft    *c;
  1304. X
  1305. X    for (i=0; i<MAXPLAYERS; ++i) {
  1306. X        if (ptbl[i].type == CT_FREE) {
  1307. X
  1308. X            c = &ptbl[i];
  1309. X            c->type = CT_PLANE;
  1310. X            c->cinfo = lookupCraft (planeType);
  1311. X            c->fuel = c->cinfo->maxFuel;
  1312. X
  1313. X            c->Cg.x = 0.0;
  1314. X            c->Cg.y = 0.0;
  1315. X            c->Cg.z = 0.0;
  1316. X            c->Sg.x = 90.0;
  1317. X            c->Sg.y = 0.0;
  1318. X            c->Sg.z = - c->cinfo->groundingPoint.z;
  1319. X            c->prevSg = c->Sg;
  1320. X
  1321. X            c->p = c->q = c->r = 0.0;
  1322. X            c->Se = c->Sr = c->Sa = 0.0;
  1323. X
  1324. X            c->throttle = 8192;
  1325. X            c->curThrust = calcThrust (c);
  1326. X            c->curFlap = 0.0;
  1327. X            c->flapSetting = 0.0;
  1328. X            c->curSpeedBrake = 0.0;
  1329. X            c->speedBrakeSetting = 0.0;
  1330. X            c->curHeading = c->curPitch = c->curRoll = 0.0;
  1331. X            VIdentMatrix(&(c->trihedral));
  1332. X            c->Itrihedral = c->trihedral;
  1333. X            c->groundContact = 1;
  1334. X            c->curNWDef = 0.0;
  1335. X            c->flags = FL_NWS;
  1336. X            c->radarMode = RM_NORMAL;
  1337. X            c->curRadarTarget = -1;
  1338. X            c->viewDirection.x = 1.0;
  1339. X            c->viewDirection.y = 0.0;
  1340. X            c->viewDirection.z = 0.0;
  1341. X            c->viewUp.x = 0.0;
  1342. X            c->viewUp.y = 0.0;
  1343. X            c->viewUp.z = -1.0;
  1344. X            for (j=0; j<3; ++j) {
  1345. X                c->leftHUD[j] = Vmalloc (32);
  1346. X                c->rightHUD[j] = Vmalloc (32);
  1347. X            }
  1348. X
  1349. X            c->curWeapon = WEAPONTYPES - 1;
  1350. X            selectWeapon (c);
  1351. X
  1352. X/* a trick to select a valid weapon */
  1353. X
  1354. X/*
  1355. X * give the player 8 Sidewinders and a cannon.
  1356. X */
  1357. X
  1358. X            c->station[0].type = WK_M61A1;
  1359. X            c->station[0].info = 500;
  1360. X            c->station[0].info2 = 0;
  1361. X            c->station[0].info3 = 0;
  1362. X            c->station[1].type = WK_AIM9M;
  1363. X            c->station[2].type = WK_AIM9M;
  1364. X            c->station[3].type = WK_AIM9M;
  1365. X            c->station[4].type = WK_AIM9M;
  1366. X            c->station[5].type = WK_AIM9M;
  1367. X            c->station[6].type = WK_AIM9M;
  1368. X            c->station[7].type = WK_AIM9M;
  1369. X            c->station[8].type = WK_AIM9M;
  1370. X            initDamage (c);
  1371. X            initPanel (c);
  1372. X            break;            
  1373. X        }
  1374. X    }
  1375. X
  1376. X    if (i == MAXPLAYERS)
  1377. X        return -1;
  1378. X
  1379. X    return i;
  1380. X}
  1381. X
  1382. Xint newDrone(p)
  1383. Xcraft *p; {
  1384. X
  1385. X
  1386. X    int     i, j;
  1387. X    craft    *c;
  1388. X    VPoint    s;
  1389. X
  1390. X    for (i=0; i<MAXPLAYERS; ++i) {
  1391. X        if (ptbl[i].type == CT_FREE) {
  1392. X
  1393. X            c = &ptbl[i];
  1394. X            *c = *p;
  1395. X
  1396. X            c->index = i;
  1397. X            c->team = i;
  1398. X
  1399. X            c->vl = NULL;
  1400. X            c->type = CT_DRONE;
  1401. X            c->cinfo = lookupCraft ("f-16c");
  1402. X
  1403. X/*
  1404. X *  Position the drone 200 feet ahead of the player's craft.
  1405. X */
  1406. X
  1407. X            s.x = 5400.0;
  1408. X            s.y = 2030.0;
  1409. X            s.z = 0.0;
  1410. X            VTransform (&s, &(p->trihedral), &(c->Sg));
  1411. X            c->Sg.x += p->Sg.x;
  1412. X            c->Sg.y += p->Sg.y;
  1413. X            c->Sg.z += p->Sg.z;
  1414. X            c->prevSg = c->Sg;
  1415. X
  1416. X/*            c->p = c->q = c->r = 0.0;
  1417. X            c->Se = c->Sr = c->Sa = 0.0;
  1418. X
  1419. X            c->throttle = 8192;
  1420. X            c->curThrust = calcThrust (c);
  1421. X            c->curHeading = c->curPitch = c->curRoll = 0.0;
  1422. X            VIdentMatrix(&(c->trihedral));
  1423. X            c->Itrihedral = c->trihedral;
  1424. X*/
  1425. X            c->groundContact = 0;
  1426. X            c->curNWDef = 0.0;
  1427. X            c->flags = 0;
  1428. X            c->radarMode = RM_NORMAL;
  1429. X
  1430. X            for (j=0; j<3; ++j) 
  1431. X                c->leftHUD[j] = c->rightHUD[j] = NULL;
  1432. X
  1433. X            break;            
  1434. X        }
  1435. X    }
  1436. X
  1437. X    if (i == MAXPLAYERS)
  1438. X        return -1;
  1439. X
  1440. X    return i;
  1441. X}
  1442. END_OF_FILE
  1443. if test 9352 -ne `wc -c <'acm/fsim/newPlane.c'`; then
  1444.     echo shar: \"'acm/fsim/newPlane.c'\" unpacked with wrong size!
  1445. fi
  1446. # end of 'acm/fsim/newPlane.c'
  1447. fi
  1448. if test -f 'acm/fsim/rwy' -a "${1}" != "-c" ; then 
  1449.   echo shar: Will not clobber existing file \"'acm/fsim/rwy'\"
  1450. else
  1451. echo shar: Extracting \"'acm/fsim/rwy'\" \(8674 characters\)
  1452. sed "s/^X//" >'acm/fsim/rwy' <<'END_OF_FILE'
  1453. X*runway-with-lines
  1454. X216 54
  1455. X1 0.000000 -75.000000 0.000000
  1456. X2 12000.000000 -75.000000 0.000000
  1457. X3 12000.000000 75.000000 0.000000
  1458. X4 0.000000 75.000000 0.000000
  1459. X5 0.000000 -75.000000 0.000000
  1460. X6 12000.000000 -75.000000 0.000000
  1461. X7 12000.000000 -72.000000 0.000000
  1462. X8 0.000000 -72.000000 0.000000
  1463. X9 0.000000 75.000000 0.000000
  1464. X10 12000.000000 75.000000 0.000000
  1465. X11 12000.000000 72.000000 0.000000
  1466. X12 0.000000 72.000000 0.000000
  1467. X13 1000.000000 -68.000000 0.000000
  1468. X14 1125.000000 -68.000000 0.000000
  1469. X15 1125.000000 -45.500000 0.000000
  1470. X16 1000.000000 -45.500000 0.000000
  1471. X17 1000.000000 68.000000 0.000000
  1472. X18 1125.000000 68.000000 0.000000
  1473. X19 1125.000000 45.500000 0.000000
  1474. X20 1000.000000 45.500000 0.000000
  1475. X21 11000.000000 -68.000000 0.000000
  1476. X22 10875.000000 -68.000000 0.000000
  1477. X23 10875.000000 -45.500000 0.000000
  1478. X24 11000.000000 -45.500000 0.000000
  1479. X25 11000.000000 68.000000 0.000000
  1480. X26 10875.000000 68.000000 0.000000
  1481. X27 10875.000000 45.500000 0.000000
  1482. X28 11000.000000 45.500000 0.000000
  1483. X29 4.000000 -68.000000 0.000000
  1484. X30 129.000000 -68.000000 0.000000
  1485. X31 129.000000 -56.444443 0.000000
  1486. X32 4.000000 -56.444443 0.000000
  1487. X33 4.000000 -52.444443 0.000000
  1488. X34 129.000000 -52.444443 0.000000
  1489. X35 129.000000 -40.888889 0.000000
  1490. X36 4.000000 -40.888889 0.000000
  1491. X37 4.000000 -36.888889 0.000000
  1492. X38 129.000000 -36.888889 0.000000
  1493. X39 129.000000 -25.333334 0.000000
  1494. X40 4.000000 -25.333334 0.000000
  1495. X41 4.000000 -21.333334 0.000000
  1496. X42 129.000000 -21.333334 0.000000
  1497. X43 129.000000 -9.777778 0.000000
  1498. X44 4.000000 -9.777778 0.000000
  1499. X45 4.000000 9.777778 0.000000
  1500. X46 129.000000 9.777778 0.000000
  1501. X47 129.000000 21.333334 0.000000
  1502. X48 4.000000 21.333334 0.000000
  1503. X49 4.000000 25.333334 0.000000
  1504. X50 129.000000 25.333334 0.000000
  1505. X51 129.000000 36.888889 0.000000
  1506. X52 4.000000 36.888889 0.000000
  1507. X53 4.000000 40.888889 0.000000
  1508. X54 129.000000 40.888889 0.000000
  1509. X55 129.000000 52.444443 0.000000
  1510. X56 4.000000 52.444443 0.000000
  1511. X57 4.000000 56.444443 0.000000
  1512. X58 129.000000 56.444443 0.000000
  1513. X59 129.000000 68.000000 0.000000
  1514. X60 4.000000 68.000000 0.000000
  1515. X61 11996.000000 -68.000000 0.000000
  1516. X62 11871.000000 -68.000000 0.000000
  1517. X63 11871.000000 -56.444443 0.000000
  1518. X64 11996.000000 -56.444443 0.000000
  1519. X65 11996.000000 -52.444443 0.000000
  1520. X66 11871.000000 -52.444443 0.000000
  1521. X67 11871.000000 -40.888889 0.000000
  1522. X68 11996.000000 -40.888889 0.000000
  1523. X69 11996.000000 -36.888889 0.000000
  1524. X70 11871.000000 -36.888889 0.000000
  1525. X71 11871.000000 -25.333334 0.000000
  1526. X72 11996.000000 -25.333334 0.000000
  1527. X73 11996.000000 -21.333334 0.000000
  1528. X74 11871.000000 -21.333334 0.000000
  1529. X75 11871.000000 -9.777778 0.000000
  1530. X76 11996.000000 -9.777778 0.000000
  1531. X77 11996.000000 9.777778 0.000000
  1532. X78 11871.000000 9.777778 0.000000
  1533. X79 11871.000000 21.333334 0.000000
  1534. X80 11996.000000 21.333334 0.000000
  1535. X81 11996.000000 25.333334 0.000000
  1536. X82 11871.000000 25.333334 0.000000
  1537. X83 11871.000000 36.888889 0.000000
  1538. X84 11996.000000 36.888889 0.000000
  1539. X85 11996.000000 40.888889 0.000000
  1540. X86 11871.000000 40.888889 0.000000
  1541. X87 11871.000000 52.444443 0.000000
  1542. X88 11996.000000 52.444443 0.000000
  1543. X89 11996.000000 56.444443 0.000000
  1544. X90 11871.000000 56.444443 0.000000
  1545. X91 11871.000000 68.000000 0.000000
  1546. X92 11996.000000 68.000000 0.000000
  1547. X93 258.000000 -2.000000 0.000000
  1548. X94 383.000000 -2.000000 0.000000
  1549. X95 383.000000 2.000000 0.000000
  1550. X96 258.000000 2.000000 0.000000
  1551. X97 633.000000 -2.000000 0.000000
  1552. X98 758.000000 -2.000000 0.000000
  1553. X99 758.000000 2.000000 0.000000
  1554. X100 633.000000 2.000000 0.000000
  1555. X101 1008.000000 -2.000000 0.000000
  1556. X102 1133.000000 -2.000000 0.000000
  1557. X103 1133.000000 2.000000 0.000000
  1558. X104 1008.000000 2.000000 0.000000
  1559. X105 1383.000000 -2.000000 0.000000
  1560. X106 1508.000000 -2.000000 0.000000
  1561. X107 1508.000000 2.000000 0.000000
  1562. X108 1383.000000 2.000000 0.000000
  1563. X109 1758.000000 -2.000000 0.000000
  1564. X110 1883.000000 -2.000000 0.000000
  1565. X111 1883.000000 2.000000 0.000000
  1566. X112 1758.000000 2.000000 0.000000
  1567. X113 2133.000000 -2.000000 0.000000
  1568. X114 2258.000000 -2.000000 0.000000
  1569. X115 2258.000000 2.000000 0.000000
  1570. X116 2133.000000 2.000000 0.000000
  1571. X117 2508.000000 -2.000000 0.000000
  1572. X118 2633.000000 -2.000000 0.000000
  1573. X119 2633.000000 2.000000 0.000000
  1574. X120 2508.000000 2.000000 0.000000
  1575. X121 2883.000000 -2.000000 0.000000
  1576. X122 3008.000000 -2.000000 0.000000
  1577. X123 3008.000000 2.000000 0.000000
  1578. X124 2883.000000 2.000000 0.000000
  1579. X125 3258.000000 -2.000000 0.000000
  1580. X126 3383.000000 -2.000000 0.000000
  1581. X127 3383.000000 2.000000 0.000000
  1582. X128 3258.000000 2.000000 0.000000
  1583. X129 3633.000000 -2.000000 0.000000
  1584. X130 3758.000000 -2.000000 0.000000
  1585. X131 3758.000000 2.000000 0.000000
  1586. X132 3633.000000 2.000000 0.000000
  1587. X133 4008.000000 -2.000000 0.000000
  1588. X134 4133.000000 -2.000000 0.000000
  1589. X135 4133.000000 2.000000 0.000000
  1590. X136 4008.000000 2.000000 0.000000
  1591. X137 4383.000000 -2.000000 0.000000
  1592. X138 4508.000000 -2.000000 0.000000
  1593. X139 4508.000000 2.000000 0.000000
  1594. X140 4383.000000 2.000000 0.000000
  1595. X141 4758.000000 -2.000000 0.000000
  1596. X142 4883.000000 -2.000000 0.000000
  1597. X143 4883.000000 2.000000 0.000000
  1598. X144 4758.000000 2.000000 0.000000
  1599. X145 5133.000000 -2.000000 0.000000
  1600. X146 5258.000000 -2.000000 0.000000
  1601. X147 5258.000000 2.000000 0.000000
  1602. X148 5133.000000 2.000000 0.000000
  1603. X149 5508.000000 -2.000000 0.000000
  1604. X150 5633.000000 -2.000000 0.000000
  1605. X151 5633.000000 2.000000 0.000000
  1606. X152 5508.000000 2.000000 0.000000
  1607. X153 5883.000000 -2.000000 0.000000
  1608. X154 6008.000000 -2.000000 0.000000
  1609. X155 6008.000000 2.000000 0.000000
  1610. X156 5883.000000 2.000000 0.000000
  1611. X157 6258.000000 -2.000000 0.000000
  1612. X158 6383.000000 -2.000000 0.000000
  1613. X159 6383.000000 2.000000 0.000000
  1614. X160 6258.000000 2.000000 0.000000
  1615. X161 6633.000000 -2.000000 0.000000
  1616. X162 6758.000000 -2.000000 0.000000
  1617. X163 6758.000000 2.000000 0.000000
  1618. X164 6633.000000 2.000000 0.000000
  1619. X165 7008.000000 -2.000000 0.000000
  1620. X166 7133.000000 -2.000000 0.000000
  1621. X167 7133.000000 2.000000 0.000000
  1622. X168 7008.000000 2.000000 0.000000
  1623. X169 7383.000000 -2.000000 0.000000
  1624. X170 7508.000000 -2.000000 0.000000
  1625. X171 7508.000000 2.000000 0.000000
  1626. X172 7383.000000 2.000000 0.000000
  1627. X173 7758.000000 -2.000000 0.000000
  1628. X174 7883.000000 -2.000000 0.000000
  1629. X175 7883.000000 2.000000 0.000000
  1630. X176 7758.000000 2.000000 0.000000
  1631. X177 8133.000000 -2.000000 0.000000
  1632. X178 8258.000000 -2.000000 0.000000
  1633. X179 8258.000000 2.000000 0.000000
  1634. X180 8133.000000 2.000000 0.000000
  1635. X181 8508.000000 -2.000000 0.000000
  1636. X182 8633.000000 -2.000000 0.000000
  1637. X183 8633.000000 2.000000 0.000000
  1638. X184 8508.000000 2.000000 0.000000
  1639. X185 8883.000000 -2.000000 0.000000
  1640. X186 9008.000000 -2.000000 0.000000
  1641. X187 9008.000000 2.000000 0.000000
  1642. X188 8883.000000 2.000000 0.000000
  1643. X189 9258.000000 -2.000000 0.000000
  1644. X190 9383.000000 -2.000000 0.000000
  1645. X191 9383.000000 2.000000 0.000000
  1646. X192 9258.000000 2.000000 0.000000
  1647. X193 9633.000000 -2.000000 0.000000
  1648. X194 9758.000000 -2.000000 0.000000
  1649. X195 9758.000000 2.000000 0.000000
  1650. X196 9633.000000 2.000000 0.000000
  1651. X197 10008.000000 -2.000000 0.000000
  1652. X198 10133.000000 -2.000000 0.000000
  1653. X199 10133.000000 2.000000 0.000000
  1654. X200 10008.000000 2.000000 0.000000
  1655. X201 10383.000000 -2.000000 0.000000
  1656. X202 10508.000000 -2.000000 0.000000
  1657. X203 10508.000000 2.000000 0.000000
  1658. X204 10383.000000 2.000000 0.000000
  1659. X205 10758.000000 -2.000000 0.000000
  1660. X206 10883.000000 -2.000000 0.000000
  1661. X207 10883.000000 2.000000 0.000000
  1662. X208 10758.000000 2.000000 0.000000
  1663. X209 11133.000000 -2.000000 0.000000
  1664. X210 11258.000000 -2.000000 0.000000
  1665. X211 11258.000000 2.000000 0.000000
  1666. X212 11133.000000 2.000000 0.000000
  1667. X213 11508.000000 -2.000000 0.000000
  1668. X214 11633.000000 -2.000000 0.000000
  1669. X215 11633.000000 2.000000 0.000000
  1670. X216 11508.000000 2.000000 0.000000
  1671. X#b7b19f 4  1 2 3 4
  1672. Xwhite 4  5 6 7 8
  1673. Xwhite 4  9 10 11 12
  1674. Xwhite 4  13 14 15 16
  1675. Xwhite 4  17 18 19 20
  1676. Xwhite 4  21 22 23 24
  1677. Xwhite 4  25 26 27 28
  1678. Xwhite 4  29 30 31 32
  1679. Xwhite 4  33 34 35 36
  1680. Xwhite 4  37 38 39 40
  1681. Xwhite 4  41 42 43 44
  1682. Xwhite 4  45 46 47 48
  1683. Xwhite 4  49 50 51 52
  1684. Xwhite 4  53 54 55 56
  1685. Xwhite 4  57 58 59 60
  1686. Xwhite 4  61 62 63 64
  1687. Xwhite 4  65 66 67 68
  1688. Xwhite 4  69 70 71 72
  1689. Xwhite 4  73 74 75 76
  1690. Xwhite 4  77 78 79 80
  1691. Xwhite 4  81 82 83 84
  1692. Xwhite 4  85 86 87 88
  1693. Xwhite 4  89 90 91 92
  1694. Xwhite 4  93 94 95 96
  1695. Xwhite 4  97 98 99 100
  1696. Xwhite 4  101 102 103 104
  1697. Xwhite 4  105 106 107 108
  1698. Xwhite 4  109 110 111 112
  1699. Xwhite 4  113 114 115 116
  1700. Xwhite 4  117 118 119 120
  1701. Xwhite 4  121 122 123 124
  1702. Xwhite 4  125 126 127 128
  1703. Xwhite 4  129 130 131 132
  1704. Xwhite 4  133 134 135 136
  1705. Xwhite 4  137 138 139 140
  1706. Xwhite 4  141 142 143 144
  1707. Xwhite 4  145 146 147 148
  1708. Xwhite 4  149 150 151 152
  1709. Xwhite 4  153 154 155 156
  1710. Xwhite 4  157 158 159 160
  1711. Xwhite 4  161 162 163 164
  1712. Xwhite 4  165 166 167 168
  1713. Xwhite 4  169 170 171 172
  1714. Xwhite 4  173 174 175 176
  1715. Xwhite 4  177 178 179 180
  1716. Xwhite 4  181 182 183 184
  1717. Xwhite 4  185 186 187 188
  1718. Xwhite 4  189 190 191 192
  1719. Xwhite 4  193 194 195 196
  1720. Xwhite 4  197 198 199 200
  1721. Xwhite 4  201 202 203 204
  1722. Xwhite 4  205 206 207 208
  1723. Xwhite 4  209 210 211 212
  1724. Xwhite 4  213 214 215 216
  1725. END_OF_FILE
  1726. if test 8674 -ne `wc -c <'acm/fsim/rwy'`; then
  1727.     echo shar: \"'acm/fsim/rwy'\" unpacked with wrong size!
  1728. fi
  1729. # end of 'acm/fsim/rwy'
  1730. fi
  1731. echo shar: End of archive 4 \(of 9\).
  1732. cp /dev/null ark4isdone
  1733. MISSING=""
  1734. for I in 1 2 3 4 5 6 7 8 9 ; do
  1735.     if test ! -f ark${I}isdone ; then
  1736.     MISSING="${MISSING} ${I}"
  1737.     fi
  1738. done
  1739. if test "${MISSING}" = "" ; then
  1740.     echo You have unpacked all 9 archives.
  1741.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1742. else
  1743.     echo You still need to unpack the following archives:
  1744.     echo "        " ${MISSING}
  1745. fi
  1746. ##  End of shell archive.
  1747. exit 0
  1748. -- 
  1749. Riley Rainey            Internet: riley@mips.com
  1750. MIPS Computer Systems        Phone:    +1 214 770-7979
  1751. Dallas, Texas
  1752.