home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / volume14 / xpilot / part16 < prev    next >
Encoding:
Internet Message Format  |  1992-08-30  |  57.4 KB

  1. Path: uunet!zephyr.ens.tek.com!master!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v14i018:  xpilot - Multiplayer gravity war game hand-shake program, Part16/24
  5. Message-ID: <3313@master.CNA.TEK.COM>
  6. Date: 4 Aug 92 19:30:20 GMT
  7. Sender: news@master.CNA.TEK.COM
  8. Lines: 2254
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: Bjoern Stabell <bjoerns@staff.cs.uit.no>
  12. Posting-number: Volume 14, Issue 18
  13. Archive-name: xpilot/Part16
  14. Environment: X11, ANSI C
  15.  
  16.  
  17.  
  18. #! /bin/sh
  19. # This is a shell archive.  Remove anything before this line, then unpack
  20. # it by saving it into a file and typing "sh file".  To overwrite existing
  21. # files, type "sh file -c".  You can also feed this as standard input via
  22. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  23. # will see the following message at the end:
  24. #        "End of archive 16 (of 24)."
  25. # Contents:  src/default.c src/draw.c src/lib/Makefile
  26. # Wrapped by billr@saab on Tue Aug  4 10:38:57 1992
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. if test -f 'src/default.c' -a "${1}" != "-c" ; then 
  29.   echo shar: Will not clobber existing file \"'src/default.c'\"
  30. else
  31. echo shar: Extracting \"'src/default.c'\" \(6943 characters\)
  32. sed "s/^X//" >'src/default.c' <<'END_OF_FILE'
  33. X/* $Id: default.c,v 1.6 1992/07/10 21:40:59 bjoerns Exp $
  34. X *
  35. X *    This file is part of the XPilot project, written by
  36. X *
  37. X *        Bjxrn Stabell (bjoerns@stud.cs.uit.no)
  38. X *        Ken Ronny Schouten (kenrsc@stud.cs.uit.no)
  39. X *
  40. X *    Copylefts are explained in the LICENSE file.
  41. X */
  42. X
  43. X#include <X11/keysym.h>
  44. X#include "global.h"
  45. X#include "pack.h"
  46. X#include "limits.h"
  47. X
  48. X#ifndef    lint
  49. Xstatic char sourceid[] =
  50. X    "@(#)$Id: default.c,v 1.6 1992/07/10 21:40:59 bjoerns Exp $";
  51. X#endif
  52. X
  53. X#define ON(x)          ( (strcasecmp(x, "true")==0) || (strcasecmp(x, "on")==0) )
  54. X#define NELEM(a)    (sizeof(a) / sizeof((a)[0]))
  55. X
  56. X
  57. X
  58. Xstatic double atod(char *str)
  59. X{
  60. X    double tmp;
  61. X
  62. X    sscanf(str, "%lf", &tmp);
  63. X    return (tmp);
  64. X}
  65. X
  66. X
  67. Xvoid Get_defaults(int ind)
  68. X{
  69. X    char        *str;
  70. X    int            i;
  71. X    player        *pl = Players[ind];
  72. X    static struct _keyResources
  73. X    {
  74. X    char    *resource;
  75. X    keys_t    key;
  76. X    } keyResources[] = {
  77. X    "keyLockNext",         KEY_LOCK_NEXT,
  78. X    "keyLockPrev",         KEY_LOCK_PREV,
  79. X    "keyLockClose",     KEY_LOCK_CLOSE,
  80. X    "keyChangeHome",    KEY_CHANGE_HOME,
  81. X    "keyShield",        KEY_SHIELD,
  82. X    "keyFireShot",        KEY_FIRE_SHOT,
  83. X    "keyFireMissile",    KEY_FIRE_MISSILE,
  84. X    "keyDropMine",        KEY_DROP_MINE,
  85. X    "keyTurnLeft",        KEY_TURN_LEFT,
  86. X    "keyTurnRight",        KEY_TURN_RIGHT,
  87. X    "keySelfDestruct",    KEY_SELF_DESTRUCT,
  88. X    "keyIdMode",        KEY_ID_MODE,
  89. X    "keyPause",        KEY_PAUSE,
  90. X    "keyToggleVelocity",    KEY_TOGGLE_VELOCITY,
  91. X    "keyToggleCompass",    KEY_TOGGLE_COMPASS,
  92. X    "keySwapSettings",    KEY_SWAP_SETTINGS,
  93. X    "keyRefuel",        KEY_REFUEL,
  94. X    "keyIncreasePower",    KEY_INCREASE_POWER,
  95. X    "keyDecreasePower",    KEY_DECREASE_POWER,
  96. X    "keyIncreaseTurnspeed",    KEY_INCREASE_TURNSPEED,
  97. X    "keyDecreaseTurnspeed",    KEY_DECREASE_TURNSPEED,
  98. X    "keyThrust",        KEY_THRUST,
  99. X    "keyCloak",        KEY_CLOAK,
  100. X    "keySlowdown",        KEY_SLOWDOWN,
  101. X    "keySpeedup",        KEY_SPEEDUP
  102. X    };
  103. X    static struct _keyDefs keyDefs[MAX_KEY_DEFS] =
  104. X    {
  105. X    XK_Left,        KEY_LOCK_PREV,
  106. X    XK_Right,        KEY_LOCK_NEXT,
  107. X    XK_Next,        KEY_LOCK_NEXT,
  108. X    XK_Prior,        KEY_LOCK_PREV,
  109. X    XK_Up,            KEY_LOCK_CLOSE,
  110. X    XK_Down,        KEY_LOCK_CLOSE,
  111. X    XK_Select,        KEY_LOCK_CLOSE,
  112. X    XK_Home,        KEY_CHANGE_HOME,
  113. X    XK_Meta_R,        KEY_SHIELD,
  114. X    XK_space,        KEY_SHIELD,
  115. X    XK_Return,        KEY_FIRE_SHOT,
  116. X    XK_backslash,        KEY_FIRE_MISSILE,
  117. X    XK_Linefeed,        KEY_FIRE_MISSILE,
  118. X    XK_Tab,            KEY_DROP_MINE,
  119. X    XK_a,            KEY_TURN_LEFT,
  120. X    XK_s,            KEY_TURN_RIGHT,
  121. X    XK_q,            KEY_SELF_DESTRUCT,
  122. X    XK_i,            KEY_ID_MODE,
  123. X    XK_p,            KEY_PAUSE,
  124. X    XK_v,            KEY_TOGGLE_VELOCITY,
  125. X    XK_c,            KEY_TOGGLE_COMPASS,
  126. X    XK_Escape,        KEY_SWAP_SETTINGS,
  127. X    XK_f,            KEY_REFUEL,
  128. X    XK_Control_L,        KEY_REFUEL,
  129. X    XK_KP_Multiply,        KEY_INCREASE_POWER,
  130. X    XK_KP_Divide,        KEY_DECREASE_POWER,
  131. X    XK_KP_Add,        KEY_INCREASE_TURNSPEED,
  132. X    XK_KP_Subtract,        KEY_DECREASE_TURNSPEED,
  133. X    XK_Shift_L,        KEY_THRUST,
  134. X    XK_Shift_R,        KEY_THRUST,
  135. X    XK_Delete,        KEY_CLOAK,
  136. X    XK_BackSpace,        KEY_CLOAK,
  137. X    XK_bracketright,    KEY_SPEEDUP,
  138. X    XK_bracketleft,        KEY_SLOWDOWN
  139. X    };
  140. X
  141. X
  142. X    /*
  143. X     * Defaults.
  144. X     */
  145. X    pl->power            = 45.0;
  146. X    pl->turnspeed        = 30.0;
  147. X    pl->turnresistance        = 0.12;
  148. X
  149. X    pl->power_s            = 35.0;
  150. X    pl->turnspeed_s        = 25.0;
  151. X    pl->turnresistance_s    = 0.12;
  152. X    pl->team            = 0;
  153. X    pl->fuel3            = 500.0;
  154. X    pl->fuel2            = 200.0;
  155. X    pl->fuel1            = 100.0;
  156. X    pl->instruments        = SHOW_HUD_INSTRUMENTS | SHOW_HUD_HORIZONTAL;
  157. X    bcopy(keyDefs, pl->keyDefs, sizeof(keyDefs));
  158. X
  159. X    /*
  160. X     * Name
  161. X     */
  162. X    if (pl->name[0] == '\0') {
  163. X    if ((pl->disp != NULL)
  164. X        && (str = XGetDefault(pl->disp, "xpilot", "name")) != NULL)
  165. X        strncpy(pl->name, str, MAX_NAME_LEN);
  166. X    else
  167. X        strcpy(pl->name, pl->realname);
  168. X    }
  169. X    CAP_LETTER(pl->name[0]);
  170. X
  171. X
  172. X    /*
  173. X     * Control sensitivity.
  174. X     */
  175. X    str = XGetDefault(pl->disp, "xpilot", "power");
  176. X    if (str)
  177. X    pl->power = atod(str);
  178. X    str = XGetDefault(pl->disp, "xpilot", "turnSpeed");
  179. X    if (str)
  180. X    pl->turnspeed = atod(str);
  181. X    str = XGetDefault(pl->disp, "xpilot", "turnResistance");
  182. X    if (str)
  183. X    pl->turnresistance = atod(str);
  184. X
  185. X    str = XGetDefault(pl->disp, "xpilot", "altPower");
  186. X    if (str)
  187. X    pl->power_s = atod(str);
  188. X    str = XGetDefault(pl->disp, "xpilot", "altTurnSpeed");
  189. X    if (str)
  190. X    pl->turnspeed_s = atod(str);
  191. X    str = XGetDefault(pl->disp, "xpilot", "altTurnResistance");
  192. X    if (str)
  193. X    pl->turnresistance_s = atod(str);
  194. X
  195. X
  196. X    /*
  197. X     * Misc. data, fuel limits on HUD.
  198. X     */
  199. X    str = XGetDefault(pl->disp, "xpilot", "team");
  200. X    if (str)
  201. X    pl->team = atoi(str);
  202. X    str = XGetDefault(pl->disp, "xpilot", "fuelNotify");
  203. X    if (str)
  204. X    pl->fuel3 = atod(str);
  205. X    str = XGetDefault(pl->disp, "xpilot", "fuelWarning");
  206. X    if (str)
  207. X    pl->fuel2 = atod(str);
  208. X    str = XGetDefault(pl->disp, "xpilot", "fuelCritical");
  209. X    if (str)
  210. X    pl->fuel1 = atod(str);
  211. X    
  212. X    /*
  213. X     * Instruments.
  214. X     */
  215. X
  216. X    /* HUD */
  217. X    str = XGetDefault(pl->disp, "xpilot", "showHUD");
  218. X    if (str) {
  219. X    if (ON(str)) {
  220. X        SET_BIT(pl->instruments, SHOW_HUD_INSTRUMENTS);
  221. X    } else {
  222. X        CLR_BIT(pl->instruments, SHOW_HUD_INSTRUMENTS);
  223. X    }
  224. X    }
  225. X    str = XGetDefault(pl->disp, "xpilot", "verticalHUDLine");
  226. X    if (str) {
  227. X    if (ON(str)) {
  228. X        SET_BIT(pl->instruments, SHOW_HUD_VERTICAL);
  229. X    } else {
  230. X        CLR_BIT(pl->instruments, SHOW_HUD_VERTICAL);
  231. X    }
  232. X    }
  233. X    str = XGetDefault(pl->disp, "xpilot", "horizontalHUDLine");
  234. X    if (str) {
  235. X    if (ON(str)) {
  236. X        SET_BIT(pl->instruments, SHOW_HUD_HORIZONTAL);
  237. X    } else {
  238. X        CLR_BIT(pl->instruments, SHOW_HUD_HORIZONTAL);
  239. X    }
  240. X    }
  241. X
  242. X    /* FUEL */
  243. X    str = XGetDefault(pl->disp, "xpilot", "fuelMeter");
  244. X    if (str) {
  245. X    if (ON(str)) {
  246. X        SET_BIT(pl->instruments, SHOW_FUEL_METER);
  247. X    } else {
  248. X        CLR_BIT(pl->instruments, SHOW_FUEL_METER);
  249. X    }
  250. X    }
  251. X    str = XGetDefault(pl->disp, "xpilot", "fuelGauge");
  252. X    if (str) {
  253. X    if (ON(str)) {
  254. X        SET_BIT(pl->instruments, SHOW_FUEL_GAUGE);
  255. X    } else {
  256. X        CLR_BIT(pl->instruments, SHOW_FUEL_GAUGE);
  257. X    }
  258. X    }
  259. X
  260. X    /* Misc. meters. */
  261. X    str = XGetDefault(pl->disp, "xpilot", "turnSpeedMeter");
  262. X    if (str) {
  263. X    if (ON(str)) {
  264. X        SET_BIT(pl->instruments, SHOW_TURNSPEED_METER);
  265. X    } else {
  266. X        CLR_BIT(pl->instruments, SHOW_TURNSPEED_METER);
  267. X    }
  268. X    }
  269. X    str = XGetDefault(pl->disp, "xpilot", "powerMeter");
  270. X    if (str) {
  271. X    if (ON(str)) {
  272. X        SET_BIT(pl->instruments, SHOW_POWER_METER);
  273. X    } else {
  274. X        CLR_BIT(pl->instruments, SHOW_POWER_METER);
  275. X    }
  276. X    }
  277. X
  278. X    /* key bindings */
  279. X    for (i = 0; i < NELEM(keyResources); i++)
  280. X    if (str = XGetDefault(pl->disp, "xpilot", keyResources[i].resource))
  281. X    {
  282. X        KeySym ks;
  283. X        char *p, *p1;
  284. X        int j;
  285. X
  286. X        p1 = (char *)malloc(sizeof(char) * strlen(str));
  287. X        strcpy(p1, str);
  288. X        p = strtok(p1, " \t\n");
  289. X
  290. X        while (p) {
  291. X        if ((ks = XStringToKeysym(p)) == NoSymbol) {
  292. X            printf("%s is not a valid keysym.\n", p);
  293. X            break;
  294. X        }
  295. X
  296. X        for (j = 0; j < MAX_KEY_DEFS; j++)
  297. X            if (!pl->keyDefs[j].keysym || pl->keyDefs[j].keysym == ks) {
  298. X            pl->keyDefs[j].keysym = ks;
  299. X            pl->keyDefs[j].key = keyResources[i].key;
  300. X            break;
  301. X            }
  302. X
  303. X        if (j >= MAX_KEY_DEFS) {
  304. X            printf("Too may key definitions.  Only %d allowed.\n",
  305. X               MAX_KEY_DEFS);
  306. X            i = NELEM(keyResources);
  307. X            break;
  308. X        }
  309. X
  310. X        p = strtok(NULL, " \t\n");
  311. X        }
  312. X
  313. X        free(p1);
  314. X    }
  315. X}
  316. END_OF_FILE
  317. echo shar: 1 control character may be missing from \"'src/default.c'\"
  318. if test 6943 -ne `wc -c <'src/default.c'`; then
  319.     echo shar: \"'src/default.c'\" unpacked with wrong size!
  320. fi
  321. # end of 'src/default.c'
  322. fi
  323. if test -f 'src/draw.c' -a "${1}" != "-c" ; then 
  324.   echo shar: Will not clobber existing file \"'src/draw.c'\"
  325. else
  326. echo shar: Extracting \"'src/draw.c'\" \(35828 characters\)
  327. sed "s/^X//" >'src/draw.c' <<'END_OF_FILE'
  328. X/* $Id: draw.c,v 1.14 1992/07/10 21:41:00 bjoerns Exp $
  329. X *
  330. X *    This file is part of the XPilot project, written by
  331. X *
  332. X *        Bjxrn Stabell (bjoerns@stud.cs.uit.no)
  333. X *        Ken Ronny Schouten (kenrsc@stud.cs.uit.no)
  334. X *
  335. X *    Copylefts are explained in the LICENSE file.
  336. X */
  337. X
  338. X#include <X11/Xproto.h>
  339. X#include <X11/Xlib.h>
  340. X#include <X11/Xos.h>
  341. X
  342. X#include <stdio.h>
  343. X#include <math.h>
  344. X
  345. X#include "global.h"
  346. X#include "map.h"
  347. X#include "draw.h"
  348. X#include "version.h"
  349. X
  350. X#ifndef    lint
  351. Xstatic char sourceid[] =
  352. X    "@(#)$Id: draw.c,v 1.14 1992/07/10 21:41:00 bjoerns Exp $";
  353. X#endif
  354. X
  355. X
  356. X#define X(i, co)  ((int) ((co) - Players[i]->world.x))
  357. X#define Y(i, co)  ((int) (FULL-((co) - Players[i]->world.y)))
  358. X
  359. X#define Draw_meter(_p, x, y, title, per)                \
  360. X{                                    \
  361. X    player *p=(_p);                            \
  362. X    XSetForeground(p->disp, p->gc, p->colors[RED].pixel);        \
  363. X    XFillRectangle(p->disp, p->p_draw, p->gc, x+2, y+2,            \
  364. X           (int)(298*per), 8);                    \
  365. X    XSetForeground(p->disp, p->gc, p->colors[WHITE].pixel);        \
  366. X    XDrawRectangle(p->disp, p->p_draw, p->gc, x, y, 300, 10);        \
  367. X    XDrawLine(p->disp, p->p_draw, p->gc, x, y-4, x, y+14);        \
  368. X    XDrawLine(p->disp, p->p_draw, p->gc, x+300, y-3, x+300, y+13);    \
  369. X    XDrawLine(p->disp, p->p_draw, p->gc, x+150, y-3, x+150, y+13);    \
  370. X    XDrawLine(p->disp, p->p_draw, p->gc, x+75, y-1, x+75, y+11);    \
  371. X    XDrawLine(p->disp, p->p_draw, p->gc, x+225, y-1, x+225, y+11);    \
  372. X    XDrawString(p->disp, p->p_draw, p->gc, (x)+305, (y)+10,        \
  373. X        title, strlen(title));                    \
  374. X}
  375. X
  376. X#define UNKOWN_PLAYER    "* Unknown *"
  377. X#define NO_PLAYER    "** None **"
  378. X
  379. X
  380. X/*
  381. X * Globals.
  382. X */
  383. Xunsigned long        loops = 0;
  384. Xmessage_t        *Msg[MAX_MSGS];
  385. X
  386. Xstatic XPoint        points[5];
  387. Xstatic XGCValues    gcv;
  388. X
  389. XXPoint    diamond[] = {
  390. X    { 0, -DSIZE },
  391. X    { DSIZE, -DSIZE },
  392. X    { -DSIZE, -DSIZE },
  393. X    { -DSIZE, DSIZE },
  394. X    { DSIZE, DSIZE }
  395. X};
  396. X
  397. X
  398. X
  399. X#ifdef SCROLL
  400. Xchar *scroll(char *string, int start, int length)
  401. X{
  402. X    static char str[MAX_SCROLL_LEN];
  403. X    int i;
  404. X    
  405. X    
  406. X    for (i=0; string[i+start] && i<length; i++)
  407. X    str[i] = string[i+start];
  408. X    
  409. X    str[length]='\0';
  410. X    return (str);
  411. X}
  412. X#endif
  413. X
  414. X
  415. X
  416. Xvoid Draw_objects()
  417. X{
  418. X    static long scroll_i = 0;
  419. X    int i, j;
  420. X    player *dr;
  421. X    
  422. X    
  423. X    if (++loops >= ULONG_MAX)        /* Used for misc. timing purposes */
  424. X    loops = 0;
  425. X    
  426. X#ifdef SCROLL
  427. X    if ((loops%SCROLL_DELAY) == 0)
  428. X    if (++scroll_i >= ULONG_MAX)
  429. X        scroll_i = 0;
  430. X#else
  431. X    if ((loops%TITLE_DELAY) == 0)
  432. X    scroll_i = !scroll_i;
  433. X#endif
  434. X    
  435. X    for(j=0; j<NumPlayers; j++) {
  436. X    dr = Players[j];
  437. X    if (dr->disp_type == DT_NONE)
  438. X        continue;
  439. X
  440. X    XSync(dr->disp, False);
  441. X    
  442. X    /*
  443. X     * If status is GAME_OVER, the user may look through the other
  444. X     * players 'eyes'.  This is done by using two indexes, one determining
  445. X     * which data should be used (i, set below) and one determining where
  446. X     * to draw it (j).
  447. X     */
  448. X    if (BIT(dr->status, GAME_OVER) && (BIT(dr->status, PLAYING)) &&
  449. X        (dr->lock.tagged == LOCK_PLAYER))
  450. X        i = GetInd[dr->lock.pl_id];
  451. X    else
  452. X        i = j;
  453. X    
  454. X#ifdef SCROLL
  455. X    /*
  456. X     * Scroll a message in the window title.
  457. X     */
  458. X    if ((loops%SCROLL_DELAY) == 0)
  459. X        XStoreName(dr->disp, dr->top,
  460. X               scroll(dr->scroll, scroll_i%dr->scroll_len, SCROLL_LEN));
  461. X#else
  462. X    /*
  463. X     * Switch between two different window titles.
  464. X     */
  465. X    if ((loops%TITLE_DELAY) == 0) {
  466. X        if (scroll_i)
  467. X        XStoreName(dr->disp, dr->top, COPYRIGHT);
  468. X        else
  469. X        XStoreName(dr->disp, dr->top, TITLE);
  470. X        
  471. X    }
  472. X#endif
  473. X    
  474. X    gcv.dash_offset = 0;
  475. X    Display_hud(j, i);
  476. X    Draw_world(j, i);
  477. X    Draw_shots(j, i);
  478. X    gcv.dash_offset = DASHES_LENGTH-(loops%DASHES_LENGTH);
  479. X    Draw_ships(j, i);
  480. X    XSetForeground(dr->disp, dr->gc, dr->colors[WHITE].pixel);
  481. X    Draw_cannon(j, i);
  482. X    /*
  483. X      old stuff, will be totally removed
  484. X      if (BIT(Players[i]->used, OBJ_COMPASS))
  485. X      Display_compass(j, i);
  486. X      
  487. X      if (BIT(Players[i]->status, VELOCITY_GAUGE))
  488. X      Display_velocity_gauge(j, i);
  489. X      
  490. X      if (BIT(Players[i]->status, POWER_GAUGE))
  491. X      Display_power_gauge(j, i);
  492. X      
  493. X      if (BIT(World.rules->mode, TIMING))
  494. X      Display_time(j, i);
  495. X      */
  496. X    if (BIT(Players[i]->instruments, SHOW_FUEL_GAUGE))
  497. X        Display_fuel_gauge(j, i);
  498. X    
  499. X    Draw_meters(j, i);
  500. X    
  501. X    Display_message(j, i);
  502. X    
  503. X    Draw_radar(j, i);
  504. X    
  505. X    /*
  506. X     * Now switch planes and clear the screen.
  507. X     */
  508. X    dbuff_switch(j, dr->dbuf_state);
  509. X    if (dr->p_radar != dr->radar)
  510. X        XCopyArea(dr->disp, dr->p_radar, dr->radar, dr->gc,
  511. X              0, 0, 256, RadarHeight, 0, 0);
  512. X    if (dr->p_draw != dr->draw)
  513. X        XCopyArea(dr->disp, dr->p_draw, dr->draw, dr->gc,
  514. X              0, 0, 768, 768, 0, 0);
  515. X
  516. X    if (BIT(dr->disp_type, DT_HAVE_PLANES))
  517. X        XSetPlaneMask(dr->disp, dr->gc, dr->dbuf_state->drawing_planes);
  518. X
  519. X    XSetPlaneMask(dr->disp, dr->gc, dr->dbuf_state->drawing_planes);
  520. X    XSetForeground(dr->disp, dr->gc, dr->colors[BLACK].pixel);
  521. X    XFillRectangle(dr->disp, dr->p_draw, dr->gc, 0, 0, 768, 768);
  522. X    /*    XFlush(dr->disp);   */
  523. X    }
  524. X}
  525. X
  526. X
  527. Xvoid Draw_ships(int draw, int data)
  528. X{
  529. X    int i;
  530. X    player *dr = Players[draw];
  531. X    player *pl = Players[data];
  532. X    player *pl_i;
  533. X    unsigned long mask=0;
  534. X    
  535. X    
  536. X    for(i=0; i<NumPlayers; i++) {
  537. X    pl_i = Players[i];
  538. X    if (BIT(pl_i->status, PLAYING|PAUSE) &&
  539. X        (!BIT(pl_i->status, GAME_OVER)) &&
  540. X        (pl->world.x < pl_i->pos.x) &&
  541. X        (pl->world.x+FULL > pl_i->pos.x) &&
  542. X        (pl->world.y  < pl_i->pos.y) &&
  543. X        (pl->world.y+FULL > pl_i->pos.y)) {
  544. X        
  545. X        if (BIT(pl_i->status, PAUSE)) {
  546. X        
  547. X        XSetForeground(dr->disp, dr->gc, dr->colors[BLUE].pixel);
  548. X        
  549. X        XFillRectangle(dr->disp, dr->p_draw, dr->gc,
  550. X                   X(data, pl_i->pos.x-10),
  551. X                   Y(data, pl_i->pos.y+13),
  552. X                   20, 26);
  553. X        
  554. X        XSetForeground(dr->disp, dr->gc, dr->colors[WHITE].pixel);
  555. X        
  556. X        if (pl_i->count<=0 || (loops%10)>=5) {
  557. X            XDrawRectangle(dr->disp, dr->p_draw, dr->gc,
  558. X                   X(data, pl_i->pos.x-10),
  559. X                   Y(data, pl_i->pos.y+13),
  560. X                   20, 26);
  561. X            
  562. X            XDrawString(dr->disp, dr->p_draw, dr->gc,
  563. X                X(data, pl_i->pos.x-2),
  564. X                Y(data, pl_i->pos.y-4),
  565. X                "P", 1);
  566. X        }
  567. X        continue;
  568. X        }
  569. X        
  570. X        if (!pl->visibility[i].canSee && i!=data && !TEAM(i, draw))
  571. X        continue;
  572. X        
  573. X        points[0].x = X(data, pl_i->pos.x + ships[pl_i->dir].pts[0].x);
  574. X        points[0].y = Y(data, pl_i->pos.y + ships[pl_i->dir].pts[0].y);
  575. X        points[1].x = X(data, pl_i->pos.x + ships[pl_i->dir].pts[1].x);
  576. X        points[1].y = Y(data, pl_i->pos.y + ships[pl_i->dir].pts[1].y);
  577. X        points[2].x = X(data, pl_i->pos.x + ships[pl_i->dir].pts[2].x);
  578. X        points[2].y = Y(data, pl_i->pos.y + ships[pl_i->dir].pts[2].y);
  579. X        points[3].x = X(data, pl_i->pos.x + ships[pl_i->dir].pts[0].x);
  580. X        points[3].y = Y(data, pl_i->pos.y + ships[pl_i->dir].pts[0].y);
  581. X        
  582. X        XSetForeground(dr->disp, dr->gc, dr->colors[pl_i->color].pixel);
  583. X        
  584. X        /*
  585. X         * Determine if you the name of the player should be drawn below
  586. X         * his/her ship.
  587. X         */
  588. X        if ((BIT(pl->status, ID_MODE) && (data!=i)) ||
  589. X        ((draw != data) && (i == data)))
  590. X        XDrawString(dr->disp, dr->p_draw, dr->gc,
  591. X                X(data, pl_i->pos.x-pl_i->name_length/2),
  592. X                Y(data,pl_i->pos.y-30),
  593. X                pl_i->name, strlen(pl_i->name));
  594. X        
  595. X        if (BIT(pl_i->used, OBJ_REFUEL|OBJ_SHIELD|OBJ_CLOAKING_DEVICE)) {
  596. X        
  597. X        mask = GCLineStyle;
  598. X        gcv.line_style = LineOnOffDash;
  599. X        
  600. X#ifndef NO_ROTATING_DASHES
  601. X        mask |= GCDashOffset;
  602. X#endif
  603. X        XChangeGC(dr->disp, dr->gc, mask, &gcv);
  604. X        
  605. X        if (BIT(pl_i->used, OBJ_CLOAKING_DEVICE))
  606. X            XDrawLines(dr->disp, dr->p_draw, dr->gc, points, 4, 0);
  607. X        
  608. X        if (BIT(pl_i->used, OBJ_REFUEL)) {
  609. X            XDrawLine(dr->disp, dr->p_draw, dr->gc,
  610. X                  X(data, World.fuel[pl_i->fs].pos.x),
  611. X                  Y(data, World.fuel[pl_i->fs].pos.y),
  612. X                  X(data, pl_i->pos.x),
  613. X                  Y(data, pl_i->pos.y));
  614. X        }
  615. X        
  616. X        if (BIT(pl_i->used, OBJ_SHIELD)) 
  617. X            XDrawArc(dr->disp, dr->p_draw, dr->gc,
  618. X                 X(data,pl_i->pos.x - 17),
  619. X                 Y(data,pl_i->pos.y + 17),
  620. X                 34, 34, 0, 64 * 360);
  621. X        } 
  622. X        
  623. X        gcv.line_style = LineSolid;
  624. X        XChangeGC(dr->disp, dr->gc, GCLineStyle, &gcv);
  625. X        
  626. X        if (!BIT(pl_i->used, OBJ_CLOAKING_DEVICE) &&
  627. X        ((i == data) || pl->visibility[i].canSee)) {
  628. X        if (pl->lock.tagged==LOCK_PLAYER && GetInd[pl->lock.pl_id]==i)
  629. X            XFillPolygon(dr->disp, dr->p_draw, dr->gc, points, 4,
  630. X                 Convex, CoordModeOrigin);
  631. X        else
  632. X            XDrawLines(dr->disp, dr->p_draw, dr->gc, points, 4, 0);
  633. X        }
  634. X    }
  635. X    }
  636. X}
  637. X
  638. X
  639. X
  640. Xvoid Draw_shots(int draw, int data)
  641. X{
  642. X    int i, x, y;
  643. X    char str[2];
  644. X    player *pl = Players[data];
  645. X    player *dr = Players[draw];
  646. X    object *shot;
  647. X    
  648. X    
  649. X    for(i=0; i<NumObjs; i++) {
  650. X    shot = Obj[i];
  651. X    
  652. X    if (shot->pos.x >= pl->world.x && shot->pos.x < pl->world.x+FULL &&
  653. X        shot->pos.y >= pl->world.y && shot->pos.y < pl->world.y+FULL) {
  654. X        
  655. X        x = X(data, shot->pos.x);
  656. X        y = Y(data, shot->pos.y);
  657. X        
  658. X        if ((shot->id!=-1) &&
  659. X        (TEAM(data, GetInd[shot->id])) && (shot->id != pl->id) &&
  660. X        (shot->type != OBJ_CANNON_DEBRIS)) 
  661. X        XSetForeground(dr->disp, dr->gc, dr->colors[BLUE].pixel);
  662. X        else
  663. X        XSetForeground(dr->disp, dr->gc, dr->colors[shot->color].pixel);
  664. X        
  665. X        switch (shot->type) {
  666. X        case OBJ_SHOT:
  667. X        case OBJ_CANNON_SHOT:
  668. X        XDrawRectangle(dr->disp, dr->p_draw, dr->gc, x, y, 2, 2);
  669. X        break;
  670. X        case OBJ_SPARK:
  671. X        case OBJ_DEBRIS:
  672. X        case OBJ_CANNON_DEBRIS:
  673. X        if (!BIT(dr->disp_type, DT_HAVE_COLOR))
  674. X            XDrawPoint(dr->disp, dr->p_draw, dr->gc, x, y);
  675. X        else
  676. X            XDrawRectangle(dr->disp, dr->p_draw, dr->gc, x, y, 2, 2);
  677. X        break;
  678. X
  679. X        case OBJ_SMART_SHOT:
  680. X        XSetLineAttributes(dr->disp, dr->gc, 4,
  681. X                   LineSolid, CapButt, JoinMiter);
  682. X        
  683. X        XDrawLine(dr->disp, dr->p_draw, dr->gc,
  684. X              x, y,
  685. X              (int)(x-tcos(shot->dir)*SMART_SHOT_LEN),
  686. X              (int)(y+tsin(shot->dir)*SMART_SHOT_LEN));
  687. X        
  688. X        XSetLineAttributes(dr->disp, dr->gc, 0,
  689. X                   LineSolid, CapButt, JoinMiter);
  690. X        break;
  691. X
  692. X        case OBJ_MINE:
  693. X        XDrawArc(dr->disp, dr->p_draw, dr->gc, x, y, 8, 8, 0, 64*360);
  694. X        break;
  695. X        case OBJ_WIDEANGLE_SHOT:
  696. X        str[0] = 'W';
  697. X        goto draw;
  698. X        break;
  699. X        case OBJ_REAR_SHOT:
  700. X        str[0] = 'R';
  701. X        goto draw;
  702. X        break;
  703. X        case OBJ_SMART_SHOT_PACK:
  704. X        str[0] = 'S';
  705. X        goto draw;
  706. X        break;
  707. X        case OBJ_ENERGY_PACK:
  708. X        str[0] = 'F';
  709. X        goto draw;
  710. X        break;
  711. X        case OBJ_MINE_PACK:
  712. X        str[0] = 'M';
  713. X        goto draw;
  714. X        break;
  715. X        case OBJ_SENSOR_PACK:
  716. X        str[0] = 'I';
  717. X        goto draw;
  718. X        break;
  719. X        case OBJ_CLOAKING_DEVICE:
  720. X        str[0] = 'C';
  721. X        draw:
  722. X        points[0].x = x-10;
  723. X        points[0].y = y+10;
  724. X        points[1].x = x;
  725. X        points[1].y = y-10;
  726. X        points[2].x = x+10;
  727. X        points[2].y = y+10;
  728. X        points[3].x = x-10;
  729. X        points[3].y = y+10;
  730. X        
  731. X        XDrawLines(dr->disp, dr->p_draw, dr->gc,
  732. X               points, 4, CoordModeOrigin);
  733. X        str[1] = '\0';
  734. X        XDrawString(dr->disp, dr->p_draw, dr->gc, x-3, y+8, str, 1);
  735. X        break;
  736. X
  737. X        default:
  738. X        error("Draw_shots: Shot type %d not defined.", shot->type);
  739. X        break;
  740. X        }
  741. X    }
  742. X    }
  743. X}
  744. X
  745. X
  746. Xvoid Draw_meters(int draw, int data)
  747. X{
  748. X    player *dr=Players[draw], *pl=Players[data];
  749. X
  750. X
  751. X    if (BIT(pl->instruments, SHOW_FUEL_METER) ||
  752. X    (pl->fuel_count && !BIT(pl->instruments, SHOW_FUEL_GAUGE)))
  753. X    Draw_meter(dr, 10, 10, "Fuel", (pl->fuel/pl->max_fuel));
  754. X    if (BIT(pl->instruments, SHOW_POWER_METER) || pl->control_count)
  755. X    Draw_meter(dr, 10, 40, "Power", ((double)pl->power/MAX_PLAYER_POWER));
  756. X    if (BIT(pl->instruments, SHOW_TURNSPEED_METER) || pl->control_count)
  757. X    Draw_meter(dr, 10, 60, "Turnspeed",
  758. X           ((double)pl->turnspeed/MAX_PLAYER_TURNSPEED));
  759. X    
  760. X    if (BIT(pl->status, SELF_DESTRUCT) && pl->count>0)
  761. X    Draw_meter(dr, (FULL-300)/2 -32, 3*FULL/4,
  762. X           "Self destructing", pl->count/150.0);
  763. X    if (Shutdown != -1)
  764. X    Draw_meter(dr, (FULL-300)/2 -32, 4*FULL/5,
  765. X           "SHUTDOWN", (double)Shutdown/(double)ShutdownDelay);
  766. X    
  767. X    /*    Draw_meter(dr, 10, 30, "Shots", ((double)pl->shots/pl->shot_max));  */
  768. X}
  769. X
  770. X
  771. X
  772. Xvoid Display_hud(int draw, int data)
  773. X{
  774. X    player *dr=Players[draw], *pl=Players[data];
  775. X    player *target=Players[GetInd[dr->lock.pl_id]];
  776. X    int size, vert_pos;
  777. X    char str[20];
  778. X    double dx, dy, theta;
  779. X    
  780. X    
  781. X    XSetForeground(dr->disp, dr->gc, dr->colors[BLUE].pixel);
  782. X    
  783. X    if (!BIT(pl->instruments, SHOW_HUD_INSTRUMENTS))
  784. X    return;
  785. X    
  786. X    /*
  787. X     * HUD frame.
  788. X     */
  789. X    gcv.line_style = LineOnOffDash;
  790. X    XChangeGC(dr->disp, dr->gc, GCLineStyle | GCDashOffset, &gcv);
  791. X    
  792. X    if (BIT(pl->instruments, SHOW_HUD_HORIZONTAL)) {
  793. X    XDrawLine(dr->disp, dr->p_draw, dr->gc,
  794. X          CENTER-HUD_SIZE, CENTER-HUD_SIZE+HUD_OFFSET,
  795. X          CENTER+HUD_SIZE, CENTER-HUD_SIZE+HUD_OFFSET);
  796. X    XDrawLine(dr->disp, dr->p_draw, dr->gc,
  797. X          CENTER-HUD_SIZE, CENTER+HUD_SIZE-HUD_OFFSET,
  798. X          CENTER+HUD_SIZE, CENTER+HUD_SIZE-HUD_OFFSET);
  799. X    }
  800. X    if (BIT(pl->instruments, SHOW_HUD_VERTICAL)) {
  801. X    XDrawLine(dr->disp, dr->p_draw, dr->gc,
  802. X          CENTER-HUD_SIZE+HUD_OFFSET, CENTER-HUD_SIZE, 
  803. X          CENTER-HUD_SIZE+HUD_OFFSET, CENTER+HUD_SIZE);
  804. X    XDrawLine(dr->disp, dr->p_draw, dr->gc,
  805. X          CENTER+HUD_SIZE-HUD_OFFSET, CENTER-HUD_SIZE,
  806. X          CENTER+HUD_SIZE-HUD_OFFSET, CENTER+HUD_SIZE);
  807. X    }
  808. X    gcv.line_style = LineSolid;
  809. X    XChangeGC(dr->disp, dr->gc, GCLineStyle, &gcv);
  810. X    
  811. X    
  812. X    /*
  813. X     * Special items.
  814. X     */
  815. X    vert_pos = CENTER - HUD_SIZE + HUD_OFFSET;
  816. X    
  817. X    if (pl->mines > 0) {
  818. X    vert_pos += HUD_ITEMS_SPACE;
  819. X    sprintf(str, "M%02d", pl->mines);
  820. X    XDrawString(dr->disp, dr->p_draw, dr->gc,
  821. X            CENTER-HUD_SIZE-4, vert_pos, str, 3);
  822. X    }
  823. X    if (pl->missiles > 0) {
  824. X    vert_pos += HUD_ITEMS_SPACE;
  825. X    sprintf(str, "S%02d", pl->missiles);
  826. X    XDrawString(dr->disp, dr->p_draw, dr->gc,
  827. X            CENTER-HUD_SIZE-4, vert_pos, str, 3);
  828. X    }
  829. X    if (pl->cloaks > 0) {
  830. X    vert_pos += HUD_ITEMS_SPACE;
  831. X    sprintf(str, "C%02d", pl->cloaks);
  832. X    XDrawString(dr->disp, dr->p_draw, dr->gc,
  833. X            CENTER-HUD_SIZE-4, vert_pos, str, 3);
  834. X    }
  835. X    if (pl->sensors > 0) {
  836. X    vert_pos += HUD_ITEMS_SPACE;
  837. X    sprintf(str, "I%02d", pl->sensors);
  838. X    XDrawString(dr->disp, dr->p_draw, dr->gc,
  839. X            CENTER-HUD_SIZE-4, vert_pos, str, 3);
  840. X    }
  841. X    if (pl->extra_shots > 0) {
  842. X    vert_pos += HUD_ITEMS_SPACE;
  843. X    sprintf(str, "W%02d", pl->extra_shots);
  844. X    XDrawString(dr->disp, dr->p_draw, dr->gc,
  845. X            CENTER-HUD_SIZE-4, vert_pos, str, 3);
  846. X    }
  847. X    if (BIT(pl->have, OBJ_REAR_SHOT)) {
  848. X    vert_pos += HUD_ITEMS_SPACE;
  849. X    str[0] = 'R';
  850. X    XDrawString(dr->disp, dr->p_draw, dr->gc,
  851. X            CENTER-HUD_SIZE-4, vert_pos,
  852. X            str, 1);
  853. X    }
  854. X    
  855. X    
  856. X    /* Fuel notify, HUD meter on */
  857. X    if (pl->fuel_count || pl->fuel<pl->fuel3) {
  858. X    sprintf(str, "%4.0f", pl->fuel);
  859. X    XDrawString(dr->disp, dr->p_draw, dr->gc, CENTER+HUD_SIZE-HUD_OFFSET+2,
  860. X            CENTER+HUD_SIZE-HUD_OFFSET/2+6, str, 4);
  861. X    }
  862. X    
  863. X    /*
  864. X     * Display direction arrow and miscellaneous target information.
  865. X     */
  866. X    switch (pl->lock.tagged) {
  867. X    case LOCK_PLAYER:
  868. X    dx=(target->pos.x - pl->pos.x);
  869. X    dy=(target->pos.y - pl->pos.y);
  870. X    if ((BIT(World.rules->mode, LIMITED_VISIBILITY) &&
  871. X         (pl->lock.distance > pl->sensor_range)) ||
  872. X        (!pl->visibility[GetInd[target->id]].canSee &&
  873. X         !TEAM(data, GetInd[dr->lock.pl_id])) ||
  874. X        (dy==0.0 && dx==0.0))
  875. X        goto no_target;
  876. X    sprintf(str, "%03d", (int)(pl->lock.distance/BLOCK_SZ));
  877. X    XDrawString(dr->disp, dr->p_draw, dr->gc,
  878. X            CENTER+HUD_SIZE-HUD_OFFSET+2,
  879. X            CENTER-HUD_SIZE+HUD_OFFSET/2+3, str, 3);
  880. X    break;
  881. X    
  882. X    case LOCK_NONE:
  883. X    goto no_target;
  884. X    break;
  885. X    
  886. X    default:
  887. X    error("Unkown pl->lock.tagged.");
  888. X    break;
  889. X    }
  890. X    
  891. X    theta=atan2(dy, dx);    /* Only works for LOCK_PLAYER */
  892. X    
  893. X    if ((pl->lock.distance>WARNING_DISTANCE) || ((loops%2)==0)) {
  894. X    size = 10000/(800+pl->lock.distance);
  895. X    if (TEAM(data, GetInd[pl->lock.pl_id]))
  896. X        XDrawArc(dr->disp, dr->p_draw, dr->gc,
  897. X             (int)(CENTER+HUD_SIZE*0.6*cos(theta)),
  898. X             (int)(CENTER-HUD_SIZE*0.6*sin(theta)),
  899. X             size, size, 0, 64*360);
  900. X    else
  901. X        XFillArc(dr->disp, dr->p_draw, dr->gc,
  902. X             (int)(CENTER+HUD_SIZE*0.6*cos(theta)),
  903. X             (int)(CENTER-HUD_SIZE*0.6*sin(theta)),
  904. X             size, size, 0, 64*360);
  905. X    }
  906. X    
  907. X    size=strlen(target->name);
  908. X    XDrawString(dr->disp, dr->p_draw, dr->gc,
  909. X        CENTER-target->name_length/2, CENTER-HUD_SIZE+HUD_OFFSET/2+3,
  910. X        target->name, size);
  911. X    
  912. X    
  913. X    /* Fuel gauge, must be last */
  914. X no_target:
  915. X    
  916. X    if (!((pl->fuel_count) ||
  917. X      (pl->fuel<pl->fuel3 &&
  918. X       ((pl->fuel<pl->fuel1 && (loops%4)<2) ||
  919. X        (pl->fuel<pl->fuel2 && pl->fuel>pl->fuel1 && (loops%8)<4) ||
  920. X        (pl->fuel>pl->fuel2)))))
  921. X    return;
  922. X    
  923. X    XDrawRectangle(dr->disp, dr->p_draw, dr->gc,
  924. X           CENTER+HUD_SIZE-HUD_OFFSET+FUEL_GAUGE_OFFSET-1,
  925. X           CENTER-HUD_SIZE+HUD_OFFSET+FUEL_GAUGE_OFFSET-1,
  926. X           HUD_OFFSET-(2*FUEL_GAUGE_OFFSET)+2,
  927. X           HUD_FUEL_GAUGE_SIZE+2);
  928. X    
  929. X    size = pl->fuel/pl->max_fuel*HUD_FUEL_GAUGE_SIZE;
  930. X    XFillRectangle(dr->disp, dr->p_draw, dr->gc,
  931. X           CENTER+HUD_SIZE-HUD_OFFSET+FUEL_GAUGE_OFFSET,
  932. X           CENTER-HUD_SIZE+HUD_OFFSET+FUEL_GAUGE_OFFSET
  933. X           + (HUD_FUEL_GAUGE_SIZE-size),
  934. X           HUD_OFFSET-(2*FUEL_GAUGE_OFFSET), size);
  935. X    
  936. X    XSetFillStyle(dr->disp, dr->gc, FillSolid);        /* Reset fill style */
  937. X}
  938. X
  939. X
  940. Xvoid Display_fuel_gauge(int draw, int data)
  941. X{
  942. X    int percent;
  943. X    player *pl = Players[data];
  944. X    player *dr = Players[draw];
  945. X    
  946. X    
  947. X    XSetForeground(dr->disp, dr->gc, dr->colors[WHITE].pixel);
  948. X    
  949. X    XDrawArc(dr->disp, dr->p_draw, dr->gc,
  950. X         730 - 120, 36 - 30,
  951. X         60, 60, 0, 64 * 360);
  952. X    
  953. X    XSetForeground(dr->disp, dr->gc, dr->colors[RED].pixel);
  954. X    
  955. X    percent = 64*(pl->fuel/pl->max_fuel)*360;
  956. X    XFillArc(dr->disp, dr->p_draw, dr->gc,
  957. X         730 - 119, 36 - 29,
  958. X         58, 58, 90*64 - percent,
  959. X         (int)percent);
  960. X    
  961. X    XSetForeground(dr->disp, dr->gc, dr->colors[WHITE].pixel);
  962. X    
  963. X    XDrawLine(dr->disp, dr->p_draw, dr->gc,
  964. X          730-120+30, 36, 730-120+30, 6);
  965. X}
  966. X
  967. X
  968. X#if 0
  969. Xvoid Display_velocity_gauge(int draw, int data)
  970. X{
  971. X    double theta;
  972. X    player *dr = Players[draw];
  973. X    player *pl = Players[data];
  974. X    
  975. X    
  976. X    XSetForeground(dr->disp, dr->gc, 
  977. X           dr->colors[WHITE].pixel);
  978. X    
  979. X    XDrawArc(dr->disp, dr->p_draw, 
  980. X         dr->gc,
  981. X         730 - 210, 36 - 30,
  982. X         60, 60, 0, 64 * 360);    
  983. X    
  984. X    XDrawLine(dr->disp, dr->p_draw,
  985. X          dr->gc, 730-210+30, 36, 730-210+30, 6);
  986. X    
  987. X    
  988. X    XSetForeground(dr->disp, dr->gc, 
  989. X           dr->colors[RED].pixel);
  990. X    
  991. X    theta = 5*PI/2 - ((pl->velocity/pl->max_speed)*2*PI);
  992. X    XDrawLine(dr->disp, dr->p_draw, dr->gc, 730-210+30, 36,
  993. X          (int)(730-210+30+25*cos(theta)), (int)(36 - 25*sin(theta)));
  994. X    
  995. X}
  996. X
  997. X
  998. Xvoid Display_power_gauge(int draw, int data)
  999. X{
  1000. X    int percent;
  1001. X    player *dr = Players[draw];
  1002. X    
  1003. X    
  1004. X    XSetForeground(dr->disp, dr->gc, dr->colors[WHITE].pixel);
  1005. X    
  1006. X    XDrawArc(dr->disp, dr->p_draw, dr->gc,
  1007. X         730 - 300, 36 - 30,
  1008. X         60, 60, 0, 64 * 360);  
  1009. X    
  1010. X    XSetForeground(dr->disp, dr->gc, dr->colors[RED].pixel);
  1011. X    
  1012. X    percent=64*(Players[data]->power/MAX_PLAYER_POWER)*360;
  1013. X    XFillArc(dr->disp, dr->p_draw, dr->gc,
  1014. X         730 - 299, 36 - 29,
  1015. X         58, 58, 90*64 - percent,
  1016. X         (int)percent);
  1017. X    
  1018. X    XSetForeground(dr->disp, dr->gc, dr->colors[WHITE].pixel);
  1019. X    
  1020. X    XDrawLine(dr->disp, dr->p_draw, dr->gc, 730-120+30, 36, 730-120+30, 6);
  1021. X}
  1022. X
  1023. Xvoid Display_compass(int draw, int data)
  1024. X{
  1025. X    char string[30];
  1026. X    double dx=0.0, dy=0.0, theta;
  1027. X    player *pl = Players[data];
  1028. X    player *dr = Players[draw];
  1029. X    int len, pl_ind = GetInd[pl->lock.pl_id];
  1030. X    
  1031. X    
  1032. X    switch (pl->lock.tagged) {
  1033. X
  1034. X    case LOCK_NONE:
  1035. X    strcpy(string, NO_PLAYER);
  1036. X    pl->lock.distance = DBL_MAX;
  1037. X    break;
  1038. X    
  1039. X    case LOCK_PLAYER:
  1040. X    dx = (Players[pl_ind]->pos.x - pl->pos.x);
  1041. X    dy = (Players[pl_ind]->pos.y - pl->pos.y);
  1042. X    if ((BIT(World.rules->mode, LIMITED_VISIBILITY) &&
  1043. X         (pl->lock.distance > pl->sensor_range)) ||
  1044. X        (!pl->visibility[pl_ind].canSee &&
  1045. X         !TEAM(draw, GetInd[dr->lock.pl_id]))) {
  1046. X        strcpy(string, UNKOWN_PLAYER);
  1047. X    } else {
  1048. X        sprintf(string, "%s: %5.2f",
  1049. X            Players[pl_ind]->name, pl->lock.distance/BLOCK_SZ);
  1050. X    }
  1051. X    break;
  1052. X    
  1053. X    default:
  1054. X    error("Unkown pl->lock.tagged.");
  1055. X    break;
  1056. X    }
  1057. X    len=strlen(string);
  1058. X    
  1059. X    if (TEAM(draw, GetInd[dr->lock.pl_id]) && 
  1060. X    pl->lock.tagged != LOCK_NONE)
  1061. X    XSetForeground(dr->disp, dr->gc, dr->colors[BLUE].pixel);
  1062. X    
  1063. X    XDrawArc(dr->disp, dr->p_draw, dr->gc, 730-30, 36-30, 60, 60, 0, 64*360);
  1064. X    
  1065. X    if ((dy != 0.0) || (dx != 0.0)) {
  1066. X    if (((BIT(World.rules->mode, LIMITED_VISIBILITY)) &&
  1067. X         (pl->lock.distance>pl->sensor_range)))
  1068. X        XDrawPoint(dr->disp, dr->p_draw, dr->gc, 730, 36);
  1069. X    else {
  1070. X        if (BIT(Players[pl_ind]->status, INVISIBLE) &&
  1071. X        !TEAM(draw, GetInd[dr->lock.pl_id]))
  1072. X        theta = 2*PI*(double)rand()/RAND_MAX;
  1073. X        else
  1074. X        theta = atan2(dy, dx);
  1075. X        XDrawLine(dr->disp, dr->p_draw, dr->gc, 730, 36,
  1076. X              (int)(730 + 25*cos(theta)),
  1077. X              (int)(36 - 25*sin(theta)));
  1078. X    }
  1079. X    } else
  1080. X    theta = 0.0;
  1081. X    
  1082. X    if (pl->lock.distance < WARNING_DISTANCE)
  1083. X    XSetForeground(dr->disp, dr->gc, dr->colors[RED].pixel);
  1084. X    
  1085. X    XDrawString(dr->disp, dr->p_draw, dr->gc, 720-(4*len), 100, string, len);
  1086. X}
  1087. X#endif
  1088. X
  1089. X
  1090. Xvoid Draw_cannon(int draw, int data)
  1091. X{
  1092. X    player *pl = Players[data];
  1093. X    player *dr = Players[draw];
  1094. X    int i;
  1095. X    
  1096. X    
  1097. X    for (i=0; i<World.NumCannons; i++) {
  1098. X    if ((pl->world.x < (World.cannon[i].pos.x*BLOCK_SZ)) &&
  1099. X        (pl->world.x+FULL > (World.cannon[i].pos.x*BLOCK_SZ)) &&
  1100. X        (pl->world.y  < (World.cannon[i].pos.y*BLOCK_SZ)) &&
  1101. X        (pl->world.y+FULL > (World.cannon[i].pos.y*BLOCK_SZ)) &&
  1102. X        (World.cannon[i].dead_time == 0)) {
  1103. X        
  1104. X        switch (World.cannon[i].dir)
  1105. X          {
  1106. X          case DIR_UP:
  1107. X        points[0].x = World.cannon[i].pos.x*BLOCK_SZ;
  1108. X        points[0].y = World.cannon[i].pos.y*BLOCK_SZ;
  1109. X        points[1].x = World.cannon[i].pos.x*BLOCK_SZ+BLOCK_SZ;
  1110. X        points[1].y = World.cannon[i].pos.y*BLOCK_SZ;
  1111. X        points[2].x = World.cannon[i].pos.x*BLOCK_SZ+BLOCK_SZ/2;
  1112. X        points[2].y = World.cannon[i].pos.y*BLOCK_SZ+BLOCK_SZ/3;
  1113. X        break;
  1114. X
  1115. X          case DIR_DOWN:
  1116. X        points[0].x = World.cannon[i].pos.x*BLOCK_SZ;
  1117. X        points[0].y = World.cannon[i].pos.y*BLOCK_SZ+BLOCK_SZ;
  1118. X        points[1].x = World.cannon[i].pos.x*BLOCK_SZ+BLOCK_SZ;
  1119. X        points[1].y = World.cannon[i].pos.y*BLOCK_SZ+BLOCK_SZ;
  1120. X        points[2].x = World.cannon[i].pos.x*BLOCK_SZ+BLOCK_SZ/2;
  1121. X        points[2].y = World.cannon[i].pos.y*BLOCK_SZ+2*BLOCK_SZ/3;
  1122. X        break;
  1123. X
  1124. X          case DIR_RIGHT:
  1125. X        points[0].x = World.cannon[i].pos.x*BLOCK_SZ;
  1126. X        points[0].y = World.cannon[i].pos.y*BLOCK_SZ;
  1127. X        points[1].x = World.cannon[i].pos.x*BLOCK_SZ;
  1128. X        points[1].y = World.cannon[i].pos.y*BLOCK_SZ+BLOCK_SZ;
  1129. X        points[2].x = World.cannon[i].pos.x*BLOCK_SZ+BLOCK_SZ/3;
  1130. X        points[2].y = World.cannon[i].pos.y*BLOCK_SZ+BLOCK_SZ/2;
  1131. X        break;
  1132. X
  1133. X          case DIR_LEFT:
  1134. X        points[0].x = World.cannon[i].pos.x*BLOCK_SZ+BLOCK_SZ;
  1135. X        points[0].y = World.cannon[i].pos.y*BLOCK_SZ;
  1136. X        points[1].x = World.cannon[i].pos.x*BLOCK_SZ+BLOCK_SZ;
  1137. X        points[1].y = World.cannon[i].pos.y*BLOCK_SZ+BLOCK_SZ;
  1138. X        points[2].x = World.cannon[i].pos.x*BLOCK_SZ+2*BLOCK_SZ/3;
  1139. X        points[2].y = World.cannon[i].pos.y*BLOCK_SZ+BLOCK_SZ/2;
  1140. X            break;
  1141. X        }
  1142. X        
  1143. X        points[0].x = X(data, points[0].x);
  1144. X        points[1].x = X(data, points[1].x);
  1145. X        points[2].x = X(data, points[2].x);
  1146. X        points[3].x = points[0].x;
  1147. X        
  1148. X        points[0].y = Y(data, points[0].y);
  1149. X        points[1].y = Y(data, points[1].y);
  1150. X        points[2].y = Y(data, points[2].y);
  1151. X        points[3].y = points[0].y;
  1152. X        
  1153. X        XDrawLines(dr->disp, dr->p_draw, dr->gc, points, 4, 0);
  1154. X        
  1155. X        World.cannon[i].active = true;
  1156. X    }
  1157. X    }
  1158. X}
  1159. X
  1160. X
  1161. X
  1162. Xvoid Display_message(int draw, int ind)
  1163. X{
  1164. X    player *dr = Players[draw];
  1165. X    int i;
  1166. X    
  1167. X    
  1168. X    for (i=0; i<MAX_MSGS; i++) {
  1169. X    if (Msg[i]->life-- > MSG_FLASH)
  1170. X        XSetForeground(dr->disp, dr->gc, dr->colors[RED].pixel);
  1171. X    else if (Msg[i]->life > 0)
  1172. X        XSetForeground(dr->disp, dr->gc, dr->colors[WHITE].pixel);
  1173. X    else
  1174. X        Msg[i]->txt[0]='\0';
  1175. X    
  1176. X    XDrawString(dr->disp, dr->p_draw, dr->gc, 10, 755-(13*i),
  1177. X            Msg[i]->txt, strlen(Msg[i]->txt));
  1178. X    }
  1179. X}
  1180. X
  1181. X
  1182. X
  1183. Xvoid Set_message(char *message)
  1184. X{
  1185. X    int i;
  1186. X    message_t *tmp;
  1187. X    
  1188. X    
  1189. X    tmp = Msg[MAX_MSGS-1];
  1190. X    for (i=MAX_MSGS-1; i>0; i--)
  1191. X    Msg[i] = Msg[i-1];
  1192. X    
  1193. X    Msg[0] = tmp;
  1194. X    
  1195. X    Msg[0]->life = MSG_DURATION;
  1196. X    strcpy(Msg[0]->txt, message);
  1197. X}
  1198. X
  1199. X
  1200. X
  1201. Xvoid Draw_radar(int draw, int data)
  1202. X{
  1203. X    int i;
  1204. X    player *pl = Players[data];
  1205. X    player *dr = Players[draw];
  1206. X    
  1207. X    if (dr->s_radar != dr->p_radar)
  1208. X    /* Draw static radar onto radar */
  1209. X    XCopyArea(dr->disp, dr->s_radar, dr->p_radar, dr->gc,
  1210. X          0, 0, 256, RadarHeight, 0, 0);
  1211. X    else {
  1212. X    /* Clear radar */
  1213. X    XSetForeground(dr->disp, dr->gcr, dr->colors[BLACK].pixel);
  1214. X    XFillRectangle(dr->disp, dr->p_radar,
  1215. X               dr->gcr, 0, 0, 256, RadarHeight);
  1216. X    }
  1217. X    
  1218. X    if (BIT(pl->mode, TIMING)) {
  1219. X    XSetForeground(dr->disp,
  1220. X               dr->gcr, /* Checkpoint */
  1221. X               dr->colors[WHITE].pixel);
  1222. X    
  1223. X    diamond[0].x = 256*World.check[pl->check].x/World.x;
  1224. X    diamond[0].y = RadarHeight -
  1225. X        RadarHeight*World.check[pl->check].y/World.y+DSIZE;
  1226. X    XDrawLines(dr->disp, dr->p_radar,
  1227. X           dr->gcr, diamond,
  1228. X           5, CoordModePrevious);
  1229. X    }
  1230. X    
  1231. X    for(i=0; i<NumPlayers; i++) {
  1232. X    if (BIT(Players[i]->status, PLAYING) &&
  1233. X        !BIT(Players[i]->status, GAME_OVER)) {
  1234. X        
  1235. X        if ((BIT(World.rules->mode, LIMITED_VISIBILITY) &&
  1236. X         (LENGTH(pl->pos.x-Players[i]->pos.x,
  1237. X             pl->pos.y-Players[i]->pos.y) > pl->sensor_range)) ||
  1238. X        (!pl->visibility[i].canSee && i!=data))
  1239. X        continue;
  1240. X        
  1241. X        if (data == i) {                    /* You */
  1242. X        
  1243. X        if (loops%10 >= 8)
  1244. X            XSetForeground(dr->disp, dr->gcr, dr->colors[BLACK].pixel);
  1245. X        else
  1246. X            XSetForeground(dr->disp, dr->gcr, dr->colors[WHITE].pixel);
  1247. X        
  1248. X        } else if ((GetInd[pl->lock.pl_id]==i) &&
  1249. X               BIT(pl->used, OBJ_COMPASS) &&
  1250. X               (pl->lock.tagged==LOCK_PLAYER)) {    /* Tagged */
  1251. X        
  1252. X        if (loops%4 >= 3)
  1253. X            XSetForeground(dr->disp, dr->gcr, dr->colors[BLACK].pixel);
  1254. X        else
  1255. X            XSetForeground(dr->disp, dr->gcr, dr->colors[WHITE].pixel);
  1256. X        } else
  1257. X        XSetForeground(dr->disp, dr->gcr, dr->colors[WHITE].pixel);
  1258. X        
  1259. X        XDrawRectangle(dr->disp, dr->p_radar, dr->gcr,
  1260. X               (int)(256*Players[i]->pos.x / (World.x*BLOCK_SZ)),
  1261. X               (int)(RadarHeight
  1262. X                 - (RadarHeight*(Players[i]->pos.y/
  1263. X                          (World.y*BLOCK_SZ)))),
  1264. X               2, 2);
  1265. X    }
  1266. X    }
  1267. X}
  1268. X
  1269. X
  1270. X
  1271. Xvoid Display_time(int draw, int data)
  1272. X{
  1273. X    static char string[MAX_STATUS_CHARS];
  1274. X    static char lap_name[MAX_CHARS] = "NOBODY";
  1275. X    static char run_name[MAX_CHARS] = "NOBODY";
  1276. X    static int best_lap = 0;
  1277. X    static int best_run = 0;
  1278. X    int i;
  1279. X    player *pl_i;
  1280. X    player *pl = Players[data];
  1281. X    player *dr = Players[draw];
  1282. X    
  1283. X    
  1284. X    XSetForeground(dr->disp, dr->gcr, dr->colors[WHITE].pixel);
  1285. X    
  1286. X    sprintf(string, "Time: %-5.2f      Round: %d      Last time: %-5.2f",
  1287. X        pl->time/100.0, pl->round, pl->last_time/100.0);
  1288. X    XDrawString(dr->disp, dr->p_draw, dr->gc, 10, 30, string, strlen(string));    
  1289. X    
  1290. X    sprintf(string, "Best time: %-5.2f         "
  1291. X        "Best round: %-5.2f      Last lap: %-5.2f",
  1292. X        pl->best_run/100.0, pl->best_lap/100.0, pl->last_lap_time/100.0);
  1293. X    XDrawString(dr->disp, dr->p_draw, dr->gc, 10, 50, string, strlen(string));    
  1294. X    
  1295. X    if (!(BIT(World.rules->mode, ONE_PLAYER_ONLY))) {
  1296. X    for (i=0;i < NumPlayers; i++) {
  1297. X        pl_i = Players[i];
  1298. X        if (((pl_i->best_lap < best_lap) || (best_lap == 0)) &&
  1299. X        (pl_i->best_lap != 0)) {
  1300. X        best_lap = pl_i->best_lap;
  1301. X        strcpy(lap_name, pl_i->name);
  1302. X        }
  1303. X        if (((pl_i->best_run < best_run) || (best_run == 0)) &&
  1304. X        (pl_i->best_run != 0)) {
  1305. X        best_run = pl_i->best_run;
  1306. X        strcpy(run_name, pl_i->name);
  1307. X        }
  1308. X    }
  1309. X    sprintf(string,
  1310. X        "Best time by %s : %-5.2f    Best round by %s: %-5.2f",
  1311. X        run_name, best_run/100.0, lap_name, best_lap/100.0);
  1312. X    XDrawString(dr->disp, dr->p_draw, dr->gc, 10, 70, string, strlen(string));
  1313. X    }
  1314. X}
  1315. X
  1316. X
  1317. X
  1318. Xvoid Draw_world(int draw, int data)
  1319. X{
  1320. X    int xi, yi, xb, yb, i, offset;
  1321. X    double x, y;
  1322. X    static const int WS_PR_SC=1+(double)FULL/BLOCK_SZ;
  1323. X    static const int INSIDE_WS=BLOCK_SZ-2;
  1324. X    static int wormCount;
  1325. X    player *pl = Players[data];
  1326. X    player *dr = Players[draw];
  1327. X    
  1328. X    pl->wormDrawCount = (pl->wormDrawCount + 1) & 7;
  1329. X    
  1330. X    xb = (pl->world.x/BLOCK_SZ); LIMIT(xb, 0, World.x-1);
  1331. X    yb = (pl->world.y/BLOCK_SZ); LIMIT(yb, 0, World.y-1);
  1332. X
  1333. X    for (xi=xb; xi<=(WS_PR_SC+xb) && xi<World.x; xi++)
  1334. X    for (yi=yb; yi<=(WS_PR_SC+yb) && yi<World.y; yi++) {
  1335. X        x = (xi*BLOCK_SZ); y=(yi*BLOCK_SZ);
  1336. X        
  1337. X        switch (World.block[xi][yi]) {
  1338. X        
  1339. X        case FILLED:
  1340. X        XDrawRectangle(dr->disp, dr->p_draw, dr->gc,
  1341. X                   X(data, x), Y(data, y+BLOCK_SZ),
  1342. X                   BLOCK_SZ, BLOCK_SZ);
  1343. X        break;
  1344. X        
  1345. X        case CHECK:
  1346. X        points[0].x = X(data, x+(BLOCK_SZ/2));
  1347. X        points[0].y = Y(data, y);
  1348. X        points[1].x = X(data, x);
  1349. X        points[1].y = Y(data, (y+BLOCK_SZ/2));
  1350. X        points[2].x = X(data, (x+BLOCK_SZ/2));
  1351. X        points[2].y = Y(data, (y+BLOCK_SZ));
  1352. X        points[3].x = X(data, x+BLOCK_SZ);
  1353. X        points[3].y = Y(data, y+(BLOCK_SZ/2));
  1354. X        points[4].x = X(data, x+(BLOCK_SZ/2));
  1355. X        points[4].y = Y(data, y);
  1356. X        
  1357. X        for(i=0; i<World.NumChecks; i++)
  1358. X            if ((World.check[i].x == xi) && (World.check[i].y == yi)) {
  1359. X            if (i != pl->check) {
  1360. X                XDrawLines(dr->disp, dr->p_draw, dr->gc,
  1361. X                       points, 5, 0); 
  1362. X            } else {
  1363. X                XFillPolygon(dr->disp, dr->p_draw, dr->gc,
  1364. X                     points, 5, Convex, CoordModeOrigin);
  1365. X            }
  1366. X            }
  1367. X        break;
  1368. X        
  1369. X        case REC_LU:
  1370. X        points[0].x = X(data, x);
  1371. X        points[0].y = Y(data, y);
  1372. X        points[1].x = X(data, x);
  1373. X        points[1].y = Y(data, (y+BLOCK_SZ));
  1374. X        points[2].x = X(data, (x+BLOCK_SZ));
  1375. X        points[2].y = Y(data, (y+BLOCK_SZ));
  1376. X        points[3].x = X(data, x);
  1377. X        points[3].y = Y(data, y);
  1378. X        XDrawLines(dr->disp, dr->p_draw, dr->gc, points, 4, 0); 
  1379. X        break;
  1380. X        
  1381. X        case REC_RU:
  1382. X        points[0].x = X(data, x);
  1383. X        points[0].y = Y(data, (y+BLOCK_SZ));
  1384. X        points[1].x = X(data, (x+BLOCK_SZ));
  1385. X        points[1].y = Y(data, (y+BLOCK_SZ));
  1386. X        points[2].x = X(data, (x+BLOCK_SZ));
  1387. X        points[2].y = Y(data, y);
  1388. X        points[3].x = X(data, x);
  1389. X        points[3].y = Y(data, (y+BLOCK_SZ));
  1390. X        XDrawLines(dr->disp, dr->p_draw, dr->gc, points, 4, 0); 
  1391. X        break;
  1392. X        
  1393. X        case REC_LD:
  1394. X        points[0].x = X(data, x);
  1395. X        points[0].y = Y(data, y);
  1396. X        points[1].x = X(data, x);
  1397. X        points[1].y = Y(data, (y+BLOCK_SZ));
  1398. X        points[2].x = X(data, (x+BLOCK_SZ));
  1399. X        points[2].y = Y(data, y);
  1400. X        points[3].x = X(data, x);
  1401. X        points[3].y = Y(data, y);
  1402. X        XDrawLines(dr->disp, dr->p_draw, dr->gc, points, 4, 0); 
  1403. X        break;
  1404. X        
  1405. X        case REC_RD:
  1406. X        points[0].x = X(data, x);
  1407. X        points[0].y = Y(data, y);
  1408. X        points[1].x = X(data, (x+BLOCK_SZ));
  1409. X        points[1].y = Y(data, (y+BLOCK_SZ));
  1410. X        points[2].x = X(data, (x+BLOCK_SZ));
  1411. X        points[2].y = Y(data, y);
  1412. X        points[3].x = X(data, x);
  1413. X        points[3].y = Y(data, y);
  1414. X        XDrawLines(dr->disp, dr->p_draw, dr->gc, points, 4, 0); 
  1415. X        break;
  1416. X        
  1417. X        case FUEL:
  1418. X        for(i=0; i<World.NumFuels; i++) {
  1419. X            if (((int) (World.fuel[i].pos.x/BLOCK_SZ) == xi) &&
  1420. X            ((int) (World.fuel[i].pos.y/BLOCK_SZ) == yi)) {
  1421. X            XDrawRectangle(dr->disp, dr->p_draw, dr->gc,
  1422. X                       X(data, x), Y(data, y+BLOCK_SZ),
  1423. X                       BLOCK_SZ, BLOCK_SZ);
  1424. X            XSetForeground(dr->disp, dr->gc, dr->colors[RED].pixel);
  1425. X            offset = INSIDE_WS*World.fuel[i].left/MAX_STATION_FUEL;
  1426. X            XFillRectangle(dr->disp, dr->p_draw, dr->gc,
  1427. X                       X(data, x)+1,
  1428. X                       Y(data, y+BLOCK_SZ)
  1429. X                       + (INSIDE_WS-offset)+1,
  1430. X                       INSIDE_WS,
  1431. X                       offset);
  1432. X            XSetForeground(dr->disp, dr->gc,
  1433. X                       dr->colors[BLUE].pixel);
  1434. X            }
  1435. X        }
  1436. X        break;
  1437. X        
  1438. X        case ACWISE_GRAV:
  1439. X        XSetForeground(dr->disp, dr->gc, dr->colors[RED].pixel);
  1440. X        XDrawArc(dr->disp, dr->p_draw, dr->gc,
  1441. X             X(data, x+5), Y(data, y+BLOCK_SZ-5),
  1442. X             BLOCK_SZ-10, BLOCK_SZ-10, 64*150, 64*300);
  1443. X        XDrawLine(dr->disp, dr->p_draw, dr->gc,
  1444. X              X(data, x+BLOCK_SZ/2),
  1445. X              Y(data, y+BLOCK_SZ-5),
  1446. X              X(data, x+BLOCK_SZ/2+4),
  1447. X              Y(data, y+BLOCK_SZ-1));
  1448. X        XDrawLine(dr->disp, dr->p_draw, dr->gc,
  1449. X              X(data, x+BLOCK_SZ/2),
  1450. X              Y(data, y+BLOCK_SZ-5),
  1451. X              X(data, x+BLOCK_SZ/2+4),
  1452. X              Y(data, y+BLOCK_SZ-9));
  1453. X        XSetForeground(dr->disp, dr->gc, dr->colors[BLUE].pixel);
  1454. X        break;
  1455. X        
  1456. X        case CWISE_GRAV:
  1457. X        XSetForeground(dr->disp, dr->gc, dr->colors[RED].pixel);
  1458. X        XDrawArc(dr->disp, dr->p_draw, dr->gc,
  1459. X             X(data, x+5), Y(data, y+BLOCK_SZ-5),
  1460. X             BLOCK_SZ-10, BLOCK_SZ-10, 64*90, 64*300);
  1461. X        XDrawLine(dr->disp, dr->p_draw, dr->gc,
  1462. X              X(data, x+BLOCK_SZ/2),
  1463. X              Y(data, y+BLOCK_SZ-5),
  1464. X              X(data, x+BLOCK_SZ/2-4),
  1465. X              Y(data, y+BLOCK_SZ-1));
  1466. X        XDrawLine(dr->disp, dr->p_draw, dr->gc,
  1467. X              X(data, x+BLOCK_SZ/2),
  1468. X              Y(data, y+BLOCK_SZ-5),
  1469. X              X(data, x+BLOCK_SZ/2-4),
  1470. X              Y(data, y+BLOCK_SZ-9));
  1471. X        XSetForeground(dr->disp, dr->gc, dr->colors[BLUE].pixel);
  1472. X        break;
  1473. X        
  1474. X        case POS_GRAV:
  1475. X        XSetForeground(dr->disp, dr->gc, dr->colors[RED].pixel);
  1476. X        XDrawArc(dr->disp, dr->p_draw, dr->gc,
  1477. X             X(data, x+1), Y(data, y+BLOCK_SZ-1),
  1478. X             INSIDE_WS, INSIDE_WS, 0, 64*360);
  1479. X        XDrawLine(dr->disp, dr->p_draw, dr->gc,
  1480. X              X(data, x+BLOCK_SZ/2),
  1481. X              Y(data, y+5),
  1482. X              X(data, x+BLOCK_SZ/2),
  1483. X              Y(data, y+BLOCK_SZ-5));
  1484. X        XDrawLine(dr->disp, dr->p_draw, dr->gc,
  1485. X              X(data, x+5),
  1486. X              Y(data, y+BLOCK_SZ/2),
  1487. X              X(data, x+BLOCK_SZ-5),
  1488. X              Y(data, y+BLOCK_SZ/2));
  1489. X        XSetForeground(dr->disp, dr->gc, dr->colors[BLUE].pixel);
  1490. X        break;
  1491. X        
  1492. X        case NEG_GRAV:
  1493. X        XSetForeground(dr->disp, dr->gc, dr->colors[RED].pixel);
  1494. X        XDrawArc(dr->disp, dr->p_draw, dr->gc,
  1495. X             X(data, x+1), Y(data, y+BLOCK_SZ-1),
  1496. X             INSIDE_WS, INSIDE_WS, 0, 64*360);
  1497. X        XDrawLine(dr->disp, dr->p_draw, dr->gc,
  1498. X              X(data, x+5),
  1499. X              Y(data, y+BLOCK_SZ/2),
  1500. X              X(data, x+BLOCK_SZ-5),
  1501. X              Y(data, y+BLOCK_SZ/2));
  1502. X        XSetForeground(dr->disp, dr->gc, dr->colors[BLUE].pixel);
  1503. X        break;
  1504. X        
  1505. X        case WORMHOLE:
  1506. X        {
  1507. X        static int wormOffset[8][3] =
  1508. X        {
  1509. X            10, 10, 10,
  1510. X            5, 10, 10,
  1511. X            0, 10, 10,
  1512. X            0, 5, 10,
  1513. X            0, 0, 10,
  1514. X            5, 0, 10,
  1515. X            10, 0, 10,
  1516. X            10, 5, 10,
  1517. X        };
  1518. X#define _O     wormOffset[pl->wormDrawCount]
  1519. X#define ARC(_x, _y, _w)                                   \
  1520. X        XDrawArc(dr->disp, dr->draw, dr->gc,                   \
  1521. X             X(data, x+1) + (_x), Y(data, y+BLOCK_SZ-1) + (_y), \
  1522. X             INSIDE_WS - (_w), INSIDE_WS - (_w), 0, 64*360)
  1523. X        XSetForeground(dr->disp, dr->gc, dr->colors[RED].pixel);
  1524. X        ARC(0, 0, 0);
  1525. X        ARC(_O[0], _O[1], _O[2]);
  1526. X        ARC(_O[0] * 2, _O[1] * 2, _O[2] * 2);
  1527. X        XSetForeground(dr->disp, dr->gc, dr->colors[BLUE].pixel);
  1528. X        break;
  1529. X        }
  1530. X
  1531. X        case SPACE:
  1532. X        if (((xi%8)==0) && ((yi%8)==0))
  1533. X            if (BIT(dr->disp_type, DT_HAVE_COLOR)) {
  1534. X            XDrawRectangle(dr->disp, dr->p_draw, dr->gc,
  1535. X                       X(data, xi*BLOCK_SZ+BLOCK_SZ/2),
  1536. X                       Y(data, yi*BLOCK_SZ+BLOCK_SZ/2),
  1537. X                       2, 2);
  1538. X            } else {
  1539. X            XDrawPoint(dr->disp, dr->p_draw, dr->gc,
  1540. X                   X(data, xi*BLOCK_SZ+BLOCK_SZ/2),
  1541. X                   Y(data, yi*BLOCK_SZ+BLOCK_SZ/2));
  1542. X            }
  1543. X
  1544. X        
  1545. X#ifdef DRAW_GRAV_VECTORS
  1546. X        XSetForeground(dr->disp, dr->gc, dr->colors[RED].pixel);
  1547. X        XDrawLine(dr->disp, dr->p_draw, dr->gc,
  1548. X              X(data, x+BLOCK_SZ/2),
  1549. X              Y(data, y+BLOCK_SZ/2),
  1550. X              X(data, x+BLOCK_SZ/2+ 50*World.gravity[xi][yi].x),
  1551. X              Y(data, y+BLOCK_SZ/2+ 50*World.gravity[xi][yi].y));
  1552. X        XSetForeground(dr->disp, dr->gc, dr->colors[WHITE].pixel);
  1553. X        XDrawPoint(dr->disp, dr->p_draw, dr->gc,
  1554. X               X(data, x+BLOCK_SZ/2),
  1555. X               Y(data, y+BLOCK_SZ/2));
  1556. X        XSetForeground(dr->disp, dr->gc, dr->colors[BLUE].pixel);
  1557. X#endif
  1558. X        break;
  1559. X        
  1560. X        case BASE:
  1561. X        XSetForeground(dr->disp, dr->gc, dr->colors[WHITE].pixel);
  1562. X        XDrawLine(dr->disp, dr->p_draw, dr->gc,
  1563. X              X(data, x), Y(data, y-1),
  1564. X              X(data, x+BLOCK_SZ), Y(data, y-1));
  1565. X        XSetForeground(dr->disp, dr->gc, dr->colors[BLUE].pixel);
  1566. X        break;
  1567. X        
  1568. X        default:
  1569. X        break;
  1570. X        }
  1571. X    }
  1572. X}
  1573. X
  1574. X
  1575. X
  1576. Xvoid Draw_world_radar(int draw)
  1577. X{
  1578. X    int xi, yi;
  1579. X    double xs, ys;
  1580. X    player *dr = Players[draw];
  1581. X    
  1582. X    
  1583. X    xs = 256.0 / World.x;
  1584. X    ys = (double)RadarHeight / World.y;
  1585. X   
  1586. X    if (dr->s_radar == dr->radar) 
  1587. X    XSetPlaneMask(dr->disp, dr->gcr, 
  1588. X              AllPlanes&(~(dr->dpl_1[0]|dr->dpl_1[1])));
  1589. X    else {
  1590. X    /* Clear radar */
  1591. X    XSetForeground(dr->disp, dr->gcr, dr->colors[BLACK].pixel);
  1592. X    XFillRectangle(dr->disp, dr->s_radar, dr->gcr, 0, 0, 256, RadarHeight);
  1593. X    }
  1594. X    XSetForeground(dr->disp, dr->gcr, dr->colors[BLUE].pixel);
  1595. X
  1596. X    for (xi=0; xi<World.x; xi++)
  1597. X    for (yi=0; yi<World.y; yi++)
  1598. X        switch (World.block[xi][yi]) {
  1599. X        case FILLED:
  1600. X        case FILLED_NO_DRAW:
  1601. X        case REC_LU:
  1602. X        case REC_RU:
  1603. X        case REC_LD:
  1604. X        case REC_RD:
  1605. X        case FUEL:
  1606. X        XDrawPoint(dr->disp, dr->s_radar, dr->gcr,
  1607. X               (int)((xi*xs)+(0.5*xs)),
  1608. X               (int)(RadarHeight-((yi*ys)+(0.5*ys))));
  1609. X        break;
  1610. X        default:
  1611. X        break;
  1612. X        }
  1613. X    
  1614. X    if (dr->s_radar == dr->radar)
  1615. X    XSetPlaneMask(dr->disp, dr->gcr, 
  1616. X              AllPlanes&(~(dr->dpl_2[0]|dr->dpl_2[1])));
  1617. X}
  1618. END_OF_FILE
  1619. echo shar: 1 control character may be missing from \"'src/draw.c'\"
  1620. if test 35828 -ne `wc -c <'src/draw.c'`; then
  1621.     echo shar: \"'src/draw.c'\" unpacked with wrong size!
  1622. fi
  1623. # end of 'src/draw.c'
  1624. fi
  1625. if test -f 'src/lib/Makefile' -a "${1}" != "-c" ; then 
  1626.   echo shar: Will not clobber existing file \"'src/lib/Makefile'\"
  1627. else
  1628. echo shar: Extracting \"'src/lib/Makefile'\" \(10909 characters\)
  1629. sed "s/^X//" >'src/lib/Makefile' <<'END_OF_FILE'
  1630. X# Makefile generated by imake - do not edit!
  1631. X# $XConsortium: imake.c,v 1.65 91/07/25 17:50:17 rws Exp $
  1632. X#
  1633. X# The cpp used on this machine replaces all newlines and multiple tabs and
  1634. X# spaces in a macro expansion with a single space.  Imake tries to compensate
  1635. X# for this, but is not always successful.
  1636. X#
  1637. X
  1638. X# -------------------------------------------------------------------------
  1639. X# Makefile generated from "Imake.tmpl" and </tmp/IIf.a05164>
  1640. X# $XConsortium: Imake.tmpl,v 1.139 91/09/16 08:52:48 rws Exp $
  1641. X#
  1642. X# Platform-specific parameters may be set in the appropriate <vendor>.cf
  1643. X# configuration files.  Site-specific parameters should be set in the file
  1644. X# site.def.  Full rebuilds are recommended if any parameters are changed.
  1645. X#
  1646. X# If your C preprocessor does not define any unique symbols, you will need
  1647. X# to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
  1648. X# "make World" the first time).
  1649. X#
  1650. X
  1651. X# 57
  1652. X
  1653. X# 64
  1654. X
  1655. X# 71
  1656. X
  1657. X# 85
  1658. X
  1659. X# 92
  1660. X
  1661. X# 114
  1662. X
  1663. X# 121
  1664. X
  1665. X# 128
  1666. X
  1667. X# 136
  1668. X
  1669. X# 143
  1670. X
  1671. X# 152
  1672. X
  1673. X# 159
  1674. X
  1675. X# 184
  1676. X
  1677. X# 197
  1678. X
  1679. X# 208
  1680. X
  1681. X# 220
  1682. X
  1683. X# 230
  1684. X
  1685. X# 237
  1686. X
  1687. X# 246
  1688. X
  1689. X# 253
  1690. X
  1691. X# -------------------------------------------------------------------------
  1692. X# site-specific configuration parameters that need to come before
  1693. X# the platform-specific parameters - edit site.def to change
  1694. X
  1695. X# site:  $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $
  1696. X
  1697. X# 41
  1698. X
  1699. X# -------------------------------------------------------------------------
  1700. X# platform-specific configuration parameters - edit hp.cf to change
  1701. X
  1702. X# platform:  $XConsortium: hp.cf,v 1.48 91/12/18 09:43:08 rws Exp $
  1703. X
  1704. X# 25
  1705. X
  1706. X# $$
  1707. X
  1708. X# 27
  1709. X
  1710. X# 38
  1711. X
  1712. X# 283
  1713. X
  1714. X# 294
  1715. X
  1716. X# -------------------------------------------------------------------------
  1717. X# site-specific configuration parameters that go after
  1718. X# the platform-specific parameters - edit site.def to change
  1719. X
  1720. X# site:  $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $
  1721. X
  1722. X# 30
  1723. X
  1724. X# 37
  1725. X
  1726. X# 312
  1727. X
  1728. X# 315
  1729. X
  1730. X# 321
  1731. X
  1732. X# 324
  1733. X
  1734. X# 334
  1735. X
  1736. X# 344
  1737. X
  1738. X# 356
  1739. X
  1740. X# 362
  1741. X
  1742. X# 366
  1743. X
  1744. X# 378
  1745. X
  1746. X# 381
  1747. X
  1748. X# 390
  1749. X
  1750. X# 423
  1751. X
  1752. X# 428
  1753. X
  1754. X# 440
  1755. X
  1756. X# 445
  1757. X
  1758. X# 451
  1759. X
  1760. X# 463
  1761. X
  1762. X# 491
  1763. X
  1764. X# 504
  1765. X
  1766. X# 537
  1767. X
  1768. X# 540
  1769. X
  1770. X# 553
  1771. X
  1772. X# 560
  1773. X
  1774. X# 571
  1775. X
  1776. X# 577
  1777. X
  1778. X# 583
  1779. X
  1780. X# 606
  1781. X
  1782. X# 613
  1783. X
  1784. X# 619
  1785. X
  1786. X# 628
  1787. X
  1788. X# 638
  1789. X
  1790. X# 669
  1791. X
  1792. X# 672
  1793. X
  1794. X# 675
  1795. X
  1796. X            SHELL = /bin/sh
  1797. X
  1798. X              TOP = ../.
  1799. X      CURRENT_DIR = ./lib
  1800. X
  1801. X               AR = ar clq
  1802. X  BOOTSTRAPCFLAGS =
  1803. X               CC = cc
  1804. X               AS = as
  1805. X
  1806. X               FC = f77
  1807. X      FDEBUGFLAGS =
  1808. X          FCFLAGS =  $(FDEBUGFLAGS)
  1809. X
  1810. X         COMPRESS = compress
  1811. X              CPP = /lib/cpp $(STD_CPP_DEFINES)
  1812. X    PREPROCESSCMD = cc -E $(STD_CPP_DEFINES)
  1813. X          INSTALL = $(BINDIR)/bsdinst
  1814. X               LD = ld
  1815. X             LINT = lint
  1816. X      LINTLIBFLAG = -o
  1817. X         LINTOPTS = -ax
  1818. X               LN = ln -s
  1819. X             MAKE = make
  1820. X               MV = mv -f
  1821. X               CP = cp
  1822. X# 712
  1823. X
  1824. X               RM = rm -f
  1825. X            TROFF = psroff
  1826. X         MSMACROS = -ms
  1827. X              TBL = tbl
  1828. X              EQN = eqn
  1829. X     STD_INCLUDES =
  1830. X  STD_CPP_DEFINES = -DSYSV
  1831. X      STD_DEFINES = -DSYSV
  1832. X EXTRA_LOAD_FLAGS =
  1833. X  EXTRA_LIBRARIES =
  1834. X             TAGS = ctags
  1835. X
  1836. X           MFLAGS = -$(MAKEFLAGS)
  1837. X
  1838. X    SHAREDCODEDEF = -DSHAREDCODE
  1839. X         SHLIBDEF =
  1840. X
  1841. X# 733
  1842. X
  1843. X# 739
  1844. X
  1845. X# 742
  1846. X
  1847. X# 745
  1848. X
  1849. X# 748
  1850. X
  1851. X# 751
  1852. X
  1853. X# 754
  1854. X
  1855. X# 757
  1856. X
  1857. X# 770
  1858. X
  1859. X    PROTO_DEFINES =
  1860. X
  1861. X# 777
  1862. X
  1863. X     INSTPGMFLAGS =
  1864. X
  1865. X     INSTBINFLAGS = -m 0755
  1866. X     INSTUIDFLAGS = -m 4755
  1867. X     INSTLIBFLAGS = -m 0755
  1868. X     INSTINCFLAGS = -m 0444
  1869. X     INSTMANFLAGS = -m 0444
  1870. X     INSTDATFLAGS = -m 0444
  1871. X    INSTKMEMFLAGS = -m 4755
  1872. X
  1873. X      PROJECTROOT = /usr/local
  1874. X
  1875. X     TOP_INCLUDES = -I$(INCROOT)
  1876. X
  1877. X# 797
  1878. X
  1879. X      CDEBUGFLAGS = +O2
  1880. X        CCOPTIONS = -Wp,-H200000
  1881. X
  1882. X      ALLINCLUDES = $(INCLUDES) $(EXTRA_INCLUDES) $(TOP_INCLUDES) $(STD_INCLUDES)
  1883. X       ALLDEFINES = $(ALLINCLUDES) $(STD_DEFINES) $(EXTRA_DEFINES) $(PROTO_DEFINES) $(DEFINES)
  1884. X           CFLAGS = $(CDEBUGFLAGS) $(CCOPTIONS) $(ALLDEFINES)
  1885. X        LINTFLAGS = $(LINTOPTS) -DLINT $(ALLDEFINES)
  1886. X# 813
  1887. X
  1888. X           LDLIBS = $(SYS_LIBRARIES) $(EXTRA_LIBRARIES)
  1889. X
  1890. X        LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS) $(LOCAL_LDFLAGS) -L$(USRLIBDIR)
  1891. X# 820
  1892. X
  1893. X   LDCOMBINEFLAGS = -X -r
  1894. X      DEPENDFLAGS =
  1895. X
  1896. X        MACROFILE = hp.cf
  1897. X           RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut
  1898. X
  1899. X    IMAKE_DEFINES =
  1900. X
  1901. X         IRULESRC = $(CONFIGDIR)
  1902. X        IMAKE_CMD = $(IMAKE) -DUseInstalled -I$(IRULESRC) $(IMAKE_DEFINES)
  1903. X# 834
  1904. X
  1905. X     ICONFIGFILES = $(IRULESRC)/Imake.tmpl $(IRULESRC)/Imake.rules \
  1906. X            $(IRULESRC)/Project.tmpl $(IRULESRC)/site.def \
  1907. X            $(IRULESRC)/$(MACROFILE) $(EXTRA_ICONFIGFILES)
  1908. X
  1909. X# -------------------------------------------------------------------------
  1910. X# X Window System Build Parameters
  1911. X# $XConsortium: Project.tmpl,v 1.138 91/09/10 09:02:12 rws Exp $
  1912. X
  1913. X# 21
  1914. X
  1915. X# 37
  1916. X
  1917. X# 62
  1918. X
  1919. X# 138
  1920. X
  1921. X# 169
  1922. X
  1923. X# 180
  1924. X
  1925. X# 197
  1926. X
  1927. X# 206
  1928. X
  1929. X# 211
  1930. X
  1931. X# 238
  1932. X
  1933. X# 241
  1934. X
  1935. X# 253
  1936. X
  1937. X# 261
  1938. X
  1939. X# 273
  1940. X
  1941. X# 332
  1942. X
  1943. X# 363
  1944. X
  1945. X# 375
  1946. X
  1947. X# 385
  1948. X
  1949. X# 388
  1950. X
  1951. X# 391
  1952. X
  1953. X# 394
  1954. X
  1955. X# 397
  1956. X
  1957. X# 400
  1958. X
  1959. X# 403
  1960. X
  1961. X# 406
  1962. X
  1963. X# 409
  1964. X
  1965. X# 412
  1966. X
  1967. X# 418
  1968. X
  1969. X# 424
  1970. X
  1971. X# 427
  1972. X
  1973. X# 430
  1974. X
  1975. X# 433
  1976. X
  1977. X# 436
  1978. X
  1979. X# 442
  1980. X
  1981. X# -------------------------------------------------------------------------
  1982. X# X Window System make variables; this need to be coordinated with rules
  1983. X
  1984. X          PATHSEP = /
  1985. X        USRLIBDIR = /usr/local/lib
  1986. X           BINDIR = /usr/local/bin
  1987. X          INCROOT = /usr/local/include
  1988. X     BUILDINCROOT = $(TOP)
  1989. X      BUILDINCDIR = $(BUILDINCROOT)/X11
  1990. X      BUILDINCTOP = ..
  1991. X           INCDIR = $(INCROOT)/X11
  1992. X           ADMDIR = /usr/adm
  1993. X           LIBDIR = $(USRLIBDIR)/X11
  1994. X        CONFIGDIR = $(LIBDIR)/config
  1995. X       LINTLIBDIR = $(USRLIBDIR)/lint
  1996. X
  1997. X          FONTDIR = $(LIBDIR)/fonts
  1998. X         XINITDIR = $(LIBDIR)/xinit
  1999. X           XDMDIR = $(LIBDIR)/xdm
  2000. X           TWMDIR = $(LIBDIR)/twm
  2001. X          MANPATH = /usr/local/man
  2002. X    MANSOURCEPATH = $(MANPATH)/man
  2003. X        MANSUFFIX = 1
  2004. X     LIBMANSUFFIX = 3
  2005. X           MANDIR = $(MANSOURCEPATH)$(MANSUFFIX)
  2006. X        LIBMANDIR = $(MANSOURCEPATH)$(LIBMANSUFFIX)
  2007. X           NLSDIR = $(LIBDIR)/nls
  2008. X        PEXAPIDIR = $(LIBDIR)/PEX
  2009. X      XAPPLOADDIR = $(LIBDIR)/app-defaults
  2010. X       FONTCFLAGS = -t
  2011. X
  2012. X     INSTAPPFLAGS = $(INSTDATFLAGS)
  2013. X
  2014. X            IMAKE = imake
  2015. X           DEPEND = makedepend
  2016. X              RGB = rgb
  2017. X# 492
  2018. X
  2019. X            FONTC = bdftopcf
  2020. X
  2021. X        MKFONTDIR = mkfontdir
  2022. X        MKDIRHIER = /bin/sh $(BINDIR)/mkdirhier
  2023. X# 508
  2024. X
  2025. X        CONFIGSRC = $(TOP)/config
  2026. X       DOCUTILSRC = $(TOP)/doc/util
  2027. X        CLIENTSRC = $(TOP)/clients
  2028. X          DEMOSRC = $(TOP)/demos
  2029. X           LIBSRC = $(TOP)/lib
  2030. X          FONTSRC = $(TOP)/fonts
  2031. X       INCLUDESRC = $(TOP)/X11
  2032. X        SERVERSRC = $(TOP)/server
  2033. X          UTILSRC = $(TOP)/util
  2034. X        SCRIPTSRC = $(UTILSRC)/scripts
  2035. X       EXAMPLESRC = $(TOP)/examples
  2036. X       CONTRIBSRC = $(TOP)/../contrib
  2037. X           DOCSRC = $(TOP)/doc
  2038. X           RGBSRC = $(TOP)/rgb
  2039. X        DEPENDSRC = $(UTILSRC)/makedepend
  2040. X         IMAKESRC = $(CONFIGSRC)
  2041. X         XAUTHSRC = $(LIBSRC)/Xau
  2042. X          XLIBSRC = $(LIBSRC)/X
  2043. X           XMUSRC = $(LIBSRC)/Xmu
  2044. X       TOOLKITSRC = $(LIBSRC)/Xt
  2045. X       AWIDGETSRC = $(LIBSRC)/Xaw
  2046. X       OLDXLIBSRC = $(LIBSRC)/oldX
  2047. X      XDMCPLIBSRC = $(LIBSRC)/Xdmcp
  2048. X      BDFTOSNFSRC = $(FONTSRC)/bdftosnf
  2049. X      BDFTOSNFSRC = $(FONTSRC)/clients/bdftosnf
  2050. X      BDFTOPCFSRC = $(FONTSRC)/clients/bdftopcf
  2051. X     MKFONTDIRSRC = $(FONTSRC)/clients/mkfontdir
  2052. X         FSLIBSRC = $(FONTSRC)/lib/fs
  2053. X    FONTSERVERSRC = $(FONTSRC)/server
  2054. X     EXTENSIONSRC = $(TOP)/extensions
  2055. X         XILIBSRC = $(EXTENSIONSRC)/lib/xinput
  2056. X      PHIGSLIBSRC = $(EXTENSIONSRC)/lib/PEX
  2057. X
  2058. X# 551
  2059. X
  2060. X# 565
  2061. X
  2062. X# 570
  2063. X
  2064. X# 577
  2065. X
  2066. X# $$
  2067. X
  2068. XSHLIBLDFLAGS = -b
  2069. XPICFLAGS = +Z
  2070. X
  2071. X  DEPEXTENSIONLIB =
  2072. X     EXTENSIONLIB = -lXext
  2073. X
  2074. X          DEPXLIB = $(DEPEXTENSIONLIB)
  2075. X             XLIB = $(EXTENSIONLIB) -lX11
  2076. X
  2077. X        DEPXMULIB = $(USRLIBDIR)/libXmu.sl
  2078. X           XMULIB = -lXmu
  2079. X
  2080. X       DEPOLDXLIB =
  2081. X          OLDXLIB = -loldX
  2082. X
  2083. X      DEPXTOOLLIB = $(USRLIBDIR)/libXt.sl
  2084. X         XTOOLLIB = -lXt
  2085. X
  2086. X        DEPXAWLIB = $(USRLIBDIR)/libXaw.sl
  2087. X           XAWLIB = -lXaw
  2088. X
  2089. X        DEPXILIB =
  2090. X           XILIB = -lXi
  2091. X
  2092. X        LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS) $(LOCAL_LDFLAGS) -L$(USRLIBDIR)
  2093. X# 47
  2094. X
  2095. X        SOXLIBREV = SharedXlibRev
  2096. X          SOXTREV = SharedXtRev
  2097. X         SOXAWREV = SharedXawRev
  2098. X        SOOLDXREV = SharedOldXRev
  2099. X         SOXMUREV = SharedXmuRev
  2100. X        SOXEXTREV = SharedXextRev
  2101. X      SOXINPUTREV = SharedXinputRev
  2102. X
  2103. X# 594
  2104. X
  2105. X# 598
  2106. X
  2107. X      DEPXAUTHLIB = $(USRLIBDIR)/libXau.a
  2108. X         XAUTHLIB =  -lXau
  2109. X      DEPXDMCPLIB = $(USRLIBDIR)/libXdmcp.a
  2110. X         XDMCPLIB =  -lXdmcp
  2111. X# 606
  2112. X
  2113. X# 610
  2114. X
  2115. X# 614
  2116. X
  2117. X# 618
  2118. X
  2119. X# 622
  2120. X
  2121. X        DEPPHIGSLIB = $(USRLIBDIR)/libphigs.a
  2122. X           PHIGSLIB =  -lphigs
  2123. X
  2124. X       DEPXBSDLIB = $(USRLIBDIR)/libXbsd.a
  2125. X          XBSDLIB =  -lXbsd
  2126. X
  2127. X LINTEXTENSIONLIB = $(LINTLIBDIR)/llib-lXext.ln
  2128. X         LINTXLIB = $(LINTLIBDIR)/llib-lX11.ln
  2129. X          LINTXMU = $(LINTLIBDIR)/llib-lXmu.ln
  2130. X        LINTXTOOL = $(LINTLIBDIR)/llib-lXt.ln
  2131. X          LINTXAW = $(LINTLIBDIR)/llib-lXaw.ln
  2132. X           LINTXI = $(LINTLIBDIR)/llib-lXi.ln
  2133. X        LINTPHIGS = $(LINTLIBDIR)/llib-lphigs.ln
  2134. X
  2135. X          DEPLIBS = $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB)
  2136. X# 657
  2137. X
  2138. X         DEPLIBS1 = $(DEPLIBS)
  2139. X         DEPLIBS2 = $(DEPLIBS)
  2140. X         DEPLIBS3 = $(DEPLIBS)
  2141. X
  2142. X# -------------------------------------------------------------------------
  2143. X# Imake rules for building libraries, programs, scripts, and data files
  2144. X# rules:  $XConsortium: Imake.rules,v 1.123 91/09/16 20:12:16 rws Exp $
  2145. X
  2146. X# 162
  2147. X
  2148. X# 173
  2149. X
  2150. X# 353
  2151. X
  2152. X# 600
  2153. X
  2154. X# 615
  2155. X
  2156. X# 637
  2157. X
  2158. X# 708
  2159. X
  2160. X# 1341
  2161. X
  2162. X# 1442
  2163. X
  2164. X# 1465
  2165. X
  2166. X# 1484
  2167. X
  2168. X# 1499
  2169. X
  2170. X# -------------------------------------------------------------------------
  2171. X# start of Imakefile
  2172. X
  2173. X# @(#)Imakefile 23/01/92
  2174. X# Imakefile - socklib
  2175. X
  2176. XOBJS = socklib.o
  2177. XSRCS = socklib.c
  2178. X
  2179. X#
  2180. X# Make socklib
  2181. X#
  2182. X
  2183. Xall:: libsocklib.a
  2184. X
  2185. Xlibsocklib.a:  $(OBJS)
  2186. X    $(RM) $@
  2187. X    $(AR) $@  $(OBJS)
  2188. X
  2189. Xdepend::
  2190. X    $(DEPEND) $(DEPENDFLAGS) -s "# DO NOT DELETE" -- $(ALLDEFINES) -- $(SRCS)
  2191. X
  2192. X# -------------------------------------------------------------------------
  2193. X# common rules for all Makefiles - do not edit
  2194. X
  2195. Xemptyrule::
  2196. X
  2197. Xclean::
  2198. X    $(RM_CMD) "#"*
  2199. X
  2200. XMakefile::
  2201. X    -@if [ -f Makefile ]; then set -x; \
  2202. X    $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
  2203. X    else exit 0; fi
  2204. X    $(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)
  2205. X
  2206. Xtags::
  2207. X    $(TAGS) -w *.[ch]
  2208. X    $(TAGS) -xw *.[ch] > TAGS
  2209. X# 868
  2210. X
  2211. X# 876
  2212. X
  2213. X# 890
  2214. X
  2215. X# -------------------------------------------------------------------------
  2216. X# empty rules for directories that do not have SUBDIRS - do not edit
  2217. X
  2218. Xinstall::
  2219. X    @echo "install in $(CURRENT_DIR) done"
  2220. X
  2221. Xinstall.man::
  2222. X    @echo "install.man in $(CURRENT_DIR) done"
  2223. X
  2224. XMakefiles::
  2225. X
  2226. Xincludes::
  2227. X
  2228. X# -------------------------------------------------------------------------
  2229. X# dependencies generated by makedepend
  2230. X
  2231. X# DO NOT DELETE
  2232. X
  2233. Xsocklib.o: socklib.h /usr/include/sys/types.h /usr/include/sys/stdsyms.h
  2234. Xsocklib.o: /usr/include/sys/time.h /usr/include/sys/socket.h
  2235. Xsocklib.o: /usr/include/sys/ioctl.h /usr/include/netinet/in.h
  2236. Xsocklib.o: /usr/include/arpa/inet.h /usr/include/stdio.h /usr/include/netdb.h
  2237. Xsocklib.o: /usr/include/signal.h /usr/include/sys/signal.h
  2238. Xsocklib.o: /usr/include/sys/syscall.h /usr/include/setjmp.h
  2239. Xsocklib.o: /usr/include/errno.h /usr/include/sys/errno.h
  2240. END_OF_FILE
  2241. if test 10909 -ne `wc -c <'src/lib/Makefile'`; then
  2242.     echo shar: \"'src/lib/Makefile'\" unpacked with wrong size!
  2243. fi
  2244. # end of 'src/lib/Makefile'
  2245. fi
  2246. echo shar: End of archive 16 \(of 24\).
  2247. cp /dev/null ark16isdone
  2248. MISSING=""
  2249. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ; do
  2250.     if test ! -f ark${I}isdone ; then
  2251.     MISSING="${MISSING} ${I}"
  2252.     fi
  2253. done
  2254. if test "${MISSING}" = "" ; then
  2255.     echo You have unpacked all 24 archives.
  2256.     echo "\nNow run 'bldmaps.sh' to build the map files"
  2257.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2258. else
  2259.     echo You still need to unpack the following archives:
  2260.     echo "        " ${MISSING}
  2261. fi
  2262. ##  End of shell archive.
  2263. exit 0
  2264.