home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / games / volume16 / nethack31 / part49 < prev    next >
Internet Message Format  |  1993-02-01  |  59KB

  1. Path: uunet!news.tek.com!master!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v16i057:  nethack31 - display oriented dungeons & dragons (Ver. 3.1), Part49/108
  5. Message-ID: <4351@master.CNA.TEK.COM>
  6. Date: 30 Jan 93 01:14:55 GMT
  7. Sender: news@master.CNA.TEK.COM
  8. Lines: 2072
  9. Approved: billr@saab.CNA.TEK.COM
  10. Xref: uunet comp.sources.games:1606
  11.  
  12. Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller)
  13. Posting-number: Volume 16, Issue 57
  14. Archive-name: nethack31/Part49
  15. Supersedes: nethack3p9: Volume 10, Issue 46-102
  16. Environment: Amiga, Atari, Mac, MS-DOS, OS2, Unix, VMS, X11
  17.  
  18.  
  19.  
  20. #! /bin/sh
  21. # This is a shell archive.  Remove anything before this line, then unpack
  22. # it by saving it into a file and typing "sh file".  To overwrite existing
  23. # files, type "sh file -c".  You can also feed this as standard input via
  24. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  25. # will see the following message at the end:
  26. #        "End of archive 49 (of 108)."
  27. # Contents:  src/sounds.c sys/os2/Makefile.os2
  28. # Wrapped by billr@saab on Wed Jan 27 16:09:05 1993
  29. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  30. if test -f 'src/sounds.c' -a "${1}" != "-c" ; then 
  31.   echo shar: Will not clobber existing file \"'src/sounds.c'\"
  32. else
  33. echo shar: Extracting \"'src/sounds.c'\" \(17245 characters\)
  34. sed "s/^X//" >'src/sounds.c' <<'END_OF_FILE'
  35. X/*    SCCS Id: @(#)sounds.c    3.1    92/07/07
  36. X/*     Copyright (c) 1989 Janet Walz, Mike Threepoint */
  37. X/* NetHack may be freely redistributed.  See license for details. */
  38. X
  39. X#include "hack.h"
  40. X#include "edog.h"
  41. X
  42. X#ifdef OVLB
  43. X
  44. Xstatic int FDECL(domonnoise,(struct monst *));
  45. Xstatic int NDECL(dochat);
  46. X
  47. X#endif /* OVLB */
  48. X
  49. X#ifdef SOUNDS
  50. X
  51. X#ifdef OVL0
  52. X
  53. Xvoid
  54. Xdosounds()
  55. X{
  56. X    register xchar hallu;
  57. X    register struct mkroom *sroom;
  58. X    register int vx, vy;
  59. X#if defined(AMIGA) && defined(AZTEC_C_WORKAROUND)
  60. X    int xx;
  61. X#endif
  62. X
  63. X    hallu = Hallucination ? 1 : 0;
  64. X
  65. X    if(!flags.soundok || u.uswallow || Underwater) return;
  66. X
  67. X    if (level.flags.nfountains && !rn2(400))
  68. X    switch (rn2(3)+hallu) {
  69. X        case 0:
  70. X        You("hear bubbling water.");
  71. X        break;
  72. X        case 1:
  73. X        You("hear water falling on coins.");
  74. X        break;
  75. X        case 2:
  76. X        You("hear the splashing of a naiad.");
  77. X        break;
  78. X        case 3:
  79. X        You("hear a soda fountain!");
  80. X        break;
  81. X    }
  82. X    if (level.flags.nsinks && !rn2(300))
  83. X    switch (rn2(2)+hallu) {
  84. X        case 0:
  85. X        You("hear a slow drip.");
  86. X        break;
  87. X        case 1:
  88. X        You("hear a gurgling noise.");
  89. X        break;
  90. X        case 2:
  91. X        You("hear dishes being washed!");
  92. X        break;
  93. X    }
  94. X
  95. X    if (level.flags.has_court && !rn2(200)) {
  96. X    switch (rn2(3)+hallu) {
  97. X        case 0:
  98. X        You("hear the tones of courtly conversation.");
  99. X        break;
  100. X        case 1:
  101. X        You("hear a sceptre being pounded in judgment.");
  102. X        break;
  103. X        case 2:
  104. X        pline("Someone just shouted \"Off with %s head!\"",
  105. X            flags.female ? "her" : "his");
  106. X        break;
  107. X        case 3:
  108. X        You("hear Queen Beruthiel's cats!");
  109. X        break;
  110. X    }
  111. X    return;
  112. X    }
  113. X    if (level.flags.has_swamp && !rn2(200)) {
  114. X    switch (rn2(2)+hallu) {
  115. X        case 0:
  116. X        You("hear mosquitoes!");
  117. X        break;
  118. X        case 1:
  119. X        You("smell marsh gas!");    /* so it's a smell...*/
  120. X        break;
  121. X        case 2:
  122. X        You("hear Donald Duck!");
  123. X        break;
  124. X    }
  125. X    return;
  126. X    }
  127. X    if (level.flags.has_vault && !rn2(200)) {
  128. X    if (!(sroom = search_special(VAULT))) {
  129. X        /* strange ... */
  130. X        level.flags.has_vault = 0;
  131. X        return;
  132. X    }
  133. X    if(gd_sound())
  134. X        switch (rn2(2)+hallu) {
  135. X        case 1: {
  136. X            boolean gold_in_vault = FALSE;
  137. X
  138. X            for (vx = sroom->lx;vx <= sroom->hx; vx++)
  139. X            for (vy = sroom->ly; vy <= sroom->hy; vy++)
  140. X                if (g_at(vx, vy))
  141. X                gold_in_vault = TRUE;
  142. X#if defined(AMIGA) && defined(AZTEC_C_WORKAROUND)
  143. X            /* Bug in aztec assembler here. Workaround below */
  144. X            xx = ROOM_INDEX(sroom) + ROOMOFFSET;
  145. X            xx = (xx != vault_occupied(u.urooms));
  146. X            if(xx)
  147. X#else
  148. X            if (vault_occupied(u.urooms) != 
  149. X             (ROOM_INDEX(sroom) + ROOMOFFSET))
  150. X#endif /* AZTEC_C_WORKAROUND */
  151. X            {
  152. X            if (gold_in_vault)
  153. X                You(!hallu ? "hear someone counting money." :
  154. X                "hear the quarterback calling the play.");
  155. X            else
  156. X                You("hear someone searching.");
  157. X            break;
  158. X            }
  159. X            /* fall into... (yes, even for hallucination) */
  160. X        }
  161. X        case 0:
  162. X            You("hear the footsteps of a guard on patrol.");
  163. X            break;
  164. X        case 2:
  165. X            You("hear Ebenezer Scrooge!");
  166. X            break;
  167. X        }
  168. X    return;
  169. X    }
  170. X    if (level.flags.has_beehive && !rn2(200)) {
  171. X    switch (rn2(2)+hallu) {
  172. X        case 0:
  173. X        You("hear a low buzzing.");
  174. X        break;
  175. X        case 1:
  176. X        You("hear an angry drone.");
  177. X        break;
  178. X        case 2:
  179. X        You("hear bees in your %sbonnet!",
  180. X            uarmh ? "" : "(nonexistent) ");
  181. X        break;
  182. X    }
  183. X    return;
  184. X    }
  185. X    if (level.flags.has_morgue && !rn2(200)) {
  186. X    switch (rn2(2)+hallu) {
  187. X        case 0:
  188. X        You("suddenly realize it is unnaturally quiet.");
  189. X        break;
  190. X        case 1:
  191. X        pline("The hair on the back of your %s stands up.",
  192. X            body_part(NECK));
  193. X        break;
  194. X        case 2:
  195. X        pline("The hair on your %s seems to stand up.",
  196. X            body_part(HEAD));
  197. X        break;
  198. X    }
  199. X    return;
  200. X    }
  201. X#ifdef ARMY
  202. X    if (level.flags.has_barracks && !rn2(200)) {
  203. X    switch (rn2(3)+hallu) {
  204. X        case 0:
  205. X        You("hear blades being honed.");
  206. X        break;
  207. X        case 1:
  208. X        You("hear loud snoring.");
  209. X        break;
  210. X        case 2:
  211. X        You("hear dice being thrown.");
  212. X        break;
  213. X        case 3:
  214. X        You("hear General MacArthur!");
  215. X        break;
  216. X    }
  217. X    return;
  218. X    }
  219. X#endif /* ARMY */
  220. X    if (level.flags.has_zoo && !rn2(200)) {
  221. X    switch (rn2(2)+hallu) {
  222. X        case 0:
  223. X    You("hear a sound reminding you of an elephant stepping on a peanut.");
  224. X        break;
  225. X        case 1:
  226. X        You("hear a sound reminding you of a trained seal.");
  227. X        break;
  228. X        case 2:
  229. X        You("hear Doctor Doolittle!");
  230. X        break;
  231. X    }
  232. X    return;
  233. X    }
  234. X    if (level.flags.has_shop && !rn2(200)) {
  235. X    if (!(sroom = search_special(ANY_SHOP))) {
  236. X        /* strange... */
  237. X        level.flags.has_shop = 0;
  238. X        return;
  239. X    }
  240. X        if(tended_shop(sroom) && 
  241. X       !index(u.ushops, ROOM_INDEX(sroom) + ROOMOFFSET))
  242. X        switch (rn2(2)+hallu) {
  243. X        case 0:
  244. X            You("hear someone cursing shoplifters.");
  245. X            break;
  246. X        case 1:
  247. X            You("hear the chime of a cash register.");
  248. X            break;
  249. X        case 2:
  250. X            You("hear Neiman and Marcus arguing!");
  251. X            break;
  252. X        }
  253. X        return;
  254. X    }
  255. X}
  256. X
  257. X#endif /* OVL0 */
  258. X#ifdef OVLB
  259. X
  260. X#include "eshk.h"
  261. X
  262. Xvoid
  263. Xgrowl(mtmp)
  264. Xregister struct monst *mtmp;
  265. X{
  266. X    if (mtmp->msleep || !mtmp->mcanmove) return;
  267. X    /* presumably nearness and soundok checks have already been made */
  268. X    switch (mtmp->data->msound) {
  269. X    case MS_SILENT:
  270. X        break;
  271. X    case MS_MEW:
  272. X    case MS_HISS:
  273. X        pline("%s hisses!", Monnam(mtmp));
  274. X        break;
  275. X    case MS_BARK:
  276. X    case MS_GROWL:
  277. X        pline("%s growls!", Monnam(mtmp));
  278. X        break;
  279. X    case MS_ROAR:
  280. X        pline("%s roars!", Monnam(mtmp));
  281. X        break;
  282. X    case MS_BUZZ:
  283. X        pline("%s buzzes!", Monnam(mtmp));
  284. X        break;
  285. X    case MS_SQEEK:
  286. X        pline("%s squeals!", Monnam(mtmp));
  287. X        break;
  288. X    case MS_SQAWK:
  289. X        pline("%s screeches!", Monnam(mtmp));
  290. X        break;
  291. X    case MS_NEIGH:
  292. X        pline("%s neighs!", Monnam(mtmp));
  293. X        break;
  294. X    case MS_WAIL:
  295. X        pline("%s wails!", Monnam(mtmp));
  296. X        break;
  297. X    }
  298. X}
  299. X
  300. Xvoid
  301. Xyelp(mtmp)
  302. Xregister struct monst *mtmp;
  303. X/* the sounds of mistreated pets */
  304. X{
  305. X    if (mtmp->msleep || !mtmp->mcanmove) return;
  306. X    /* presumably nearness and soundok checks have already been made */
  307. X    switch (mtmp->data->msound) {
  308. X    case MS_MEW:
  309. X        pline("%s yowls!", Monnam(mtmp));
  310. X        break;
  311. X    case MS_BARK:
  312. X    case MS_GROWL:
  313. X        pline("%s yelps!", Monnam(mtmp));
  314. X        break;
  315. X    case MS_ROAR:
  316. X        pline("%s snarls!", Monnam(mtmp));
  317. X        break;
  318. X    case MS_SQEEK:
  319. X        pline("%s squeals!", Monnam(mtmp));
  320. X        break;
  321. X    case MS_SQAWK:
  322. X        pline("%s screaks!", Monnam(mtmp));
  323. X        break;
  324. X    case MS_WAIL:
  325. X        pline("%s wails!", Monnam(mtmp));
  326. X        break;
  327. X    }
  328. X}
  329. X
  330. Xvoid
  331. Xwhimper(mtmp)
  332. Xregister struct monst *mtmp;
  333. X/* the sounds of distressed pets */
  334. X{
  335. X    if (mtmp->msleep || !mtmp->mcanmove) return;
  336. X    /* presumably nearness and soundok checks have already been made */
  337. X    switch (mtmp->data->msound) {
  338. X    case MS_MEW:
  339. X    case MS_GROWL:
  340. X        pline("%s whimpers.", Monnam(mtmp));
  341. X        break;
  342. X    case MS_BARK:
  343. X        pline("%s whines.", Monnam(mtmp));
  344. X        break;
  345. X    case MS_SQEEK:
  346. X        pline("%s squeals.", Monnam(mtmp));
  347. X        break;
  348. X    }
  349. X}
  350. X
  351. X#endif /* OVLB */
  352. X
  353. X#endif /* SOUNDS */
  354. X
  355. X#ifdef OVLB
  356. X
  357. Xstatic int
  358. Xdomonnoise(mtmp)
  359. Xregister struct monst *mtmp;
  360. X{
  361. X    /* presumably nearness and sleep checks have already been made */
  362. X    if (!flags.soundok) return(0);
  363. X    switch (mtmp->data->msound) {
  364. X    case MS_ORACLE:
  365. X        return doconsult(mtmp);
  366. X    case MS_PRIEST:
  367. X        priest_talk(mtmp);
  368. X        break;
  369. X#ifdef SOUNDS
  370. X    case MS_SILENT:
  371. X        break;
  372. X    case MS_SQEEK:
  373. X        pline("%s squeaks.", Monnam(mtmp));
  374. X        break;
  375. X    case MS_SQAWK:
  376. X        pline("%s squawks.", Monnam(mtmp));
  377. X        break;
  378. X    case MS_MEW:
  379. X        if (mtmp->mtame) {
  380. X        if (mtmp->mconf || mtmp->mflee || mtmp->mtrapped || 
  381. X            moves > EDOG(mtmp)->hungrytime || mtmp->mtame < 5)
  382. X            pline("%s yowls.", Monnam(mtmp));
  383. X        else if (EDOG(mtmp)->hungrytime > moves + 1000)
  384. X            pline("%s purrs.", Monnam(mtmp));
  385. X        else
  386. X            pline("%s mews.", Monnam(mtmp));
  387. X        }
  388. X    case MS_HISS:
  389. X        if (!mtmp->mpeaceful)
  390. X        pline("%s hisses!", Monnam(mtmp));
  391. X        break;
  392. X    case MS_BUZZ:
  393. X        if (!mtmp->mpeaceful)
  394. X        pline("%s buzzes angrily.", Monnam(mtmp));
  395. X        break;
  396. X    case MS_GRUNT:
  397. X        pline("%s grunts.", Monnam(mtmp));
  398. X        break;
  399. X    case MS_BARK:
  400. X        if (flags.moonphase == FULL_MOON && night()) {
  401. X        pline("%s howls.", Monnam(mtmp));
  402. X        break;
  403. X        } else if (mtmp->mpeaceful) {
  404. X        if (mtmp->mtame &&
  405. X            (mtmp->mconf || mtmp->mflee || mtmp->mtrapped ||
  406. X             moves > EDOG(mtmp)->hungrytime || mtmp->mtame < 5))
  407. X            pline("%s whines.", Monnam(mtmp));
  408. X        else if (EDOG(mtmp)->hungrytime > moves + 1000)
  409. X            pline("%s yips.", Monnam(mtmp));
  410. X        else
  411. X            pline("%s barks.", Monnam(mtmp));
  412. X        break;
  413. X        }
  414. X    case MS_GROWL:
  415. X        if (!mtmp->mpeaceful)
  416. X        pline("%s growls!", Monnam(mtmp));
  417. X        break;
  418. X    case MS_ROAR:
  419. X        if (!mtmp->mpeaceful)
  420. X        pline("%s roars!", Monnam(mtmp));
  421. X        break;
  422. X    case MS_NEIGH:
  423. X        pline("%s neighs.", Monnam(mtmp));
  424. X        break;
  425. X    case MS_WAIL:
  426. X        pline("%s wails mournfully.", Monnam(mtmp));
  427. X        break;
  428. X    case MS_GURGLE:
  429. X        pline("%s gurgles.", Monnam(mtmp));
  430. X        break;
  431. X    case MS_BURBLE:
  432. X        pline("%s burbles.", Monnam(mtmp));
  433. X        break;
  434. X    case MS_SHRIEK:
  435. X        pline("%s shrieks.", Monnam(mtmp));
  436. X        aggravate();
  437. X        break;
  438. X    case MS_IMITATE:
  439. X        pline("%s imitates you.", Monnam(mtmp));
  440. X        break;
  441. X    case MS_DJINNI:
  442. X        if (mtmp->mtame) verbalize("Thank you for freeing me!");
  443. X        else if (mtmp->mpeaceful) verbalize("I'm free!");
  444. X        else verbalize("This will teach you not to disturb me!");
  445. X        break;
  446. X    case MS_MUMBLE:
  447. X        pline("%s mumbles incomprehensibly.", Monnam(mtmp));
  448. X        break;
  449. X#ifdef MULDGN
  450. X    case MS_LEADER:
  451. X    case MS_NEMESIS:
  452. X    case MS_GUARDIAN:
  453. X        quest_chat(mtmp);
  454. X        break;
  455. X#endif
  456. X    case MS_BONES:
  457. X        pline("%s rattles noisily.", Monnam(mtmp));
  458. X        You("freeze momentarily.");
  459. X        nomul(-2);
  460. X        break;
  461. X    case MS_HUMANOID:
  462. X        if(In_endgame(&u.uz) && is_mplayer(mtmp->data))
  463. X            mplayer_talk(mtmp);
  464. X        /* Generic humanoid behaviour. */
  465. X        if (!mtmp->mpeaceful) break;
  466. X        if (mtmp->mflee)
  467. X        pline("%s wants nothing to do with you.", Monnam(mtmp));
  468. X        else if (mtmp->mhp < mtmp->mhpmax/4)
  469. X        pline("%s moans.", Monnam(mtmp));
  470. X        else if (mtmp->mconf || mtmp->mstun)
  471. X        verbalize(!rn2(3) ? "Huh?" : rn2(2) ? "What?" : "Eh?");
  472. X        else if (!mtmp->mcansee)
  473. X        verbalize("I can't see!");
  474. X        else if (mtmp->mtrapped)
  475. X        verbalize("I'm trapped!");
  476. X        else if (mtmp->mhp < mtmp->mhpmax/2)
  477. X        pline("%s asks for a potion of healing.", Monnam(mtmp));
  478. X        /* Specific monster's interests */
  479. X        else if (is_elf(mtmp->data))
  480. X        pline("%s curses orcs.", Monnam(mtmp));
  481. X        else if (is_dwarf(mtmp->data))
  482. X        pline("%s talks about mining.", Monnam(mtmp));
  483. X        else if (likes_magic(mtmp->data))
  484. X        pline("%s talks about spellcraft.", Monnam(mtmp));
  485. X        else if (carnivorous(mtmp->data))
  486. X        pline("%s discusses what kinds of meat are safe to eat.", Monnam(mtmp));
  487. X        else switch (monsndx(mtmp->data)){
  488. X        case PM_HOBBIT:
  489. X            if (mtmp->mhpmax - mtmp->mhp >= 10)
  490. Xpline("%s complains about unpleasant dungeon conditions.", Monnam(mtmp));
  491. X            else
  492. X                pline("%s asks you about the One Ring.", Monnam(mtmp));
  493. X            break;
  494. X        case PM_ARCHEOLOGIST:
  495. Xpline("%s describes a recent article in \"Spelunker Today\" magazine.", Monnam(mtmp));
  496. X            break;
  497. X        case PM_TOURIST:
  498. X            verbalize("Aloha.");
  499. X            break;
  500. X        default:
  501. X            pline("%s discusses dungeon exploration.", Monnam(mtmp));
  502. X        }
  503. X        break;
  504. X    case MS_SEDUCE:
  505. X# ifdef SEDUCE
  506. X        if (mtmp->data->mlet != S_NYMPH &&
  507. X        could_seduce(mtmp, &youmonst, (struct attack *)0) == 1) {
  508. X            (void) doseduce(mtmp);
  509. X            break;
  510. X        }
  511. X        switch ((poly_gender() != mtmp->female) ? rn2(3) : 0) {
  512. X# else
  513. X        switch ((poly_gender() == 0) ? rn2(3) : 0) {
  514. X# endif
  515. X        case 2:
  516. X            verbalize("Hello, sailor.");
  517. X            break;
  518. X        case 1:
  519. X            pline("%s comes on to you.", Monnam(mtmp));
  520. X            break;
  521. X        default:
  522. X            pline("%s cajoles you.", Monnam(mtmp));
  523. X        }
  524. X        break;
  525. X# ifdef KOPS
  526. X    case MS_ARREST:
  527. X        if (mtmp->mpeaceful)
  528. X        verbalize("Just the facts, %s.",
  529. X              flags.female ? "Ma'am" : "Sir");
  530. X        else switch (rn2(3)) {
  531. X        case 1:
  532. X            verbalize("Anything you say can be used against you.");
  533. X            break;
  534. X        case 2:
  535. X            verbalize("You're under arrest!");
  536. X            break;
  537. X        default:
  538. X            verbalize("Stop in the name of the Law!");
  539. X        }
  540. X        break;
  541. X# endif
  542. X    case MS_LAUGH:
  543. X        switch (rn2(4)) {
  544. X        case 1:
  545. X            pline("%s giggles.", Monnam(mtmp));
  546. X            break;
  547. X        case 2:
  548. X            pline("%s chuckles.", Monnam(mtmp));
  549. X            break;
  550. X        case 3:
  551. X            pline("%s snickers.", Monnam(mtmp));
  552. X            break;
  553. X        default:
  554. X            pline("%s laughs.", Monnam(mtmp));
  555. X        }
  556. X        break;
  557. X    case MS_BRIBE:
  558. X        if (mtmp->mpeaceful && !mtmp->mtame) {
  559. X        (void) demon_talk(mtmp);
  560. X        break;
  561. X        }
  562. X        /* fall through */
  563. X    case MS_CUSS:
  564. X        if (!mtmp->mpeaceful)
  565. X        cuss(mtmp);
  566. X        break;
  567. X    case MS_GUARD:
  568. X        if (u.ugold)
  569. X        verbalize("Please drop that gold and follow me.");
  570. X        else
  571. X        verbalize("Please follow me.");
  572. X        break;
  573. X    case MS_NURSE:
  574. X        if (uwep)
  575. X        verbalize("Put that weapon away before you hurt someone!");
  576. X        else if (uarmc || uarm || uarmh || uarms || uarmg || uarmf)
  577. X        if (pl_character[0] == 'H')
  578. X            verbalize("Doc, I can't help you unless you cooperate.");
  579. X        else
  580. X            verbalize("Please undress so I can examine you.");
  581. X# ifdef TOURIST
  582. X        else if (uarmu)
  583. X        verbalize("Take off your shirt, please.");
  584. X# endif
  585. X        else verbalize("Relax, this won't hurt a bit.");
  586. X        break;
  587. X    case MS_SELL: /* pitch, pay, total */
  588. X        if (ANGRY(mtmp))
  589. X        pline("%s mentions how much %s dislikes %s customers.",
  590. X            ESHK(mtmp)->shknam,
  591. X            mtmp->female ? "she" : "he",
  592. X            ESHK(mtmp)->robbed ? "non-paying" : "rude");
  593. X        else if (ESHK(mtmp)->following)
  594. X        if (strncmp(ESHK(mtmp)->customer, plname, PL_NSIZ)) {
  595. X            verbalize("Hello %s!  I was looking for %s.",
  596. X                plname, ESHK(mtmp)->customer);
  597. X            ESHK(mtmp)->following = 0;
  598. X        } else {
  599. X            verbalize("Hello %s!  Didn't you forget to pay?",
  600. X                plname);
  601. X        }
  602. X        else if (ESHK(mtmp)->robbed)
  603. X        pline("%s complains about a recent robbery.", ESHK(mtmp)->shknam);
  604. X        else if (ESHK(mtmp)->billct)
  605. X        pline("%s reminds you that you haven't paid yet.", ESHK(mtmp)->shknam);
  606. X        else if (mtmp->mgold < 50)
  607. X        pline("%s complains that business is bad.", ESHK(mtmp)->shknam);
  608. X        else if (mtmp->mgold > 4000)
  609. X        pline("%s says that business is good.", ESHK(mtmp)->shknam);
  610. X        else
  611. X        pline("%s talks about the problem of shoplifters.", ESHK(mtmp)->shknam);
  612. X        break;
  613. X    case MS_SOLDIER:
  614. X        if (!mtmp->mpeaceful)
  615. X        switch (rn2(3)) {
  616. X        case 2:
  617. X            verbalize("Resistance is useless!");
  618. X            break;
  619. X        case 1:
  620. X            verbalize("You're dog meat!");
  621. X            break;
  622. X        default:
  623. X            verbalize("Surrender!");
  624. X        } else
  625. X        switch (rn2(3)) {
  626. X        case 2:
  627. X            verbalize("What lousy pay we're getting here!");
  628. X            break;
  629. X        case 1:
  630. X            verbalize("The food's not fit for Orcs!");
  631. X            break;
  632. X        default:
  633. X            verbalize("My feet hurt, I've been on them all day!");
  634. X        }
  635. X        break;
  636. X    case MS_DEATH:
  637. X        pline("%s is busy reading a copy of Sandman #9.", Monnam(mtmp));
  638. X        break;
  639. X    case MS_PESTILENCE:
  640. X    case MS_FAMINE:
  641. X        verbalize("Who do you think you are, War?");
  642. X        break;
  643. X#endif /* SOUNDS */
  644. X    }
  645. X    return(1);
  646. X}
  647. X
  648. X
  649. Xint
  650. Xdotalk()
  651. X{
  652. X    int result;
  653. X    boolean save_soundok = flags.soundok;
  654. X    flags.soundok = 1;    /* always allow sounds while chatting */
  655. X    result = dochat();
  656. X    flags.soundok = save_soundok;
  657. X    return result;
  658. X}
  659. X
  660. Xstatic int
  661. Xdochat()
  662. X{
  663. X    register struct monst *mtmp;
  664. X    register int tx,ty;
  665. X    struct obj *otmp;
  666. X
  667. X#ifdef POLYSELF
  668. X    if (uasmon->msound == MS_SILENT) {
  669. X    Your("current form seems unable to speak.");
  670. X    return(0);
  671. X    }
  672. X#endif
  673. X    if (Strangled) {
  674. X    You("can't speak.  You're choking!");
  675. X    return(0);
  676. X    }
  677. X    if (u.uswallow) {
  678. X    pline("They won't hear you out there.");
  679. X    return(0);
  680. X    }
  681. X    if (Underwater) {
  682. X    pline("All you can utter is a mouthful of air bubbles.");
  683. X    return(0);
  684. X    }
  685. X
  686. X    if (!Blind && (otmp = shop_object(u.ux, u.uy)) != (struct obj *)0) {
  687. X    /* standing on something in a shop and chatting causes the shopkeeper
  688. X       to describe the price(s).  This can inhibit other chatting inside
  689. X       a shop, but that shouldn't matter much.  shop_object() returns an
  690. X       object iff inside a shop and the shopkeeper is present and willing
  691. X       (not angry) and able (not asleep) to speak and the position contains
  692. X       any objects other than just gold.
  693. X    */
  694. X    price_quote(otmp);
  695. X    return(1);
  696. X    }
  697. X
  698. X    (void) getdir("Talk to whom? [in what direction]");
  699. X
  700. X    if (u.dz) {
  701. X    pline("They won't hear you %s there.", u.dz < 0 ? "up" : "down");
  702. X    return(0);
  703. X    }
  704. X
  705. X    if (u.dx == 0 && u.dy == 0) {
  706. X/*
  707. X * Let's not include this.  It raises all sorts of questions: can you wear
  708. X * 2 helmets, 2 amulets, 3 pairs of gloves or 6 rings as a marilith,
  709. X * etc...  --KAA
  710. X#ifdef POLYSELF
  711. X    if (u.umonnum == PM_ETTIN) {
  712. X        You("discover that your other head makes boring conversation.");
  713. X        return(1);
  714. X    }
  715. X#endif
  716. X*/
  717. X    pline("Talking to yourself is a bad habit for a dungeoneer.");
  718. X    return(0);
  719. X    }
  720. X
  721. X    tx = u.ux+u.dx; ty = u.uy+u.dy;
  722. X    mtmp = m_at(tx, ty);
  723. X    if ((Blind && !Telepat) || !mtmp || mtmp->mundetected ||
  724. X        mtmp->m_ap_type == M_AP_FURNITURE ||
  725. X        mtmp->m_ap_type == M_AP_OBJECT) {
  726. X    pline("I see nobody there.");
  727. X    return(0);
  728. X    }
  729. X    if (!mtmp->mcanmove || mtmp->msleep) {
  730. X    pline("%s seems not to notice you.", Monnam(mtmp));
  731. X    return(0);
  732. X    }
  733. X
  734. X    if (mtmp->mtame && mtmp->meating) {
  735. X    pline("%s is eating noisily.", Monnam(mtmp));
  736. X    return (0);
  737. X    }
  738. X
  739. X    return domonnoise(mtmp);
  740. X}
  741. X
  742. X#endif /* OVLB */
  743. X
  744. X/*sounds.c*/
  745. END_OF_FILE
  746. if test 17245 -ne `wc -c <'src/sounds.c'`; then
  747.     echo shar: \"'src/sounds.c'\" unpacked with wrong size!
  748. fi
  749. # end of 'src/sounds.c'
  750. fi
  751. if test -f 'sys/os2/Makefile.os2' -a "${1}" != "-c" ; then 
  752.   echo shar: Will not clobber existing file \"'sys/os2/Makefile.os2'\"
  753. else
  754. echo shar: Extracting \"'sys/os2/Makefile.os2'\" \(37463 characters\)
  755. sed "s/^X//" >'sys/os2/Makefile.os2' <<'END_OF_FILE'
  756. X#    SCCS Id: @(#)Makefile.os2    3.1    93/01/24
  757. X#    OS/2 NetHack 3.1 Makefile for OS/2 versions 1.x and 2.x
  758. X#    Copyright (C) 1990, 1991, 1992, 1993 Timo Hakulinen
  759. X#
  760. X#    Supported compilers: Microsoft C 5.1 and 6.0A, GCC emx 0.8f,
  761. X#    IBM C Set/2 1.00 with Toolkit/2 2.00.
  762. X#
  763. X#    NDMAKE ver 4.5, Microsoft/IBM NMAKE, or Dennis Vadura's DMAKE is
  764. X#    required; old MS-MAKE will not work.  To enable the appropriate
  765. X#    make utility, uncomment the respective make-specific macros.  If
  766. X#    you plan to cross-compile in DOS, your best bet is NDMAKE, since
  767. X#    it requires less memory than NMAKE.  To compile in OS/2 use NMAKE,
  768. X#    DMAKE or something compatible.  Remember to set $(RLIBS) to real mode
  769. X#    libraries if cross-compiling in DOS, and to protected mode libraries
  770. X#    for compilation in OS/2.
  771. X#
  772. X#    Copy this file into $(SRC) directory, rename it to "makefile"
  773. X#    (important, many targets rely on it), compile and link inside
  774. X#    $(SRC).  If required, termcap library can be built from termcap
  775. X#    sources using makefile.lib in "sys\share" directory.
  776. X#
  777. X#    "MSC" in this makefile refers to Microsoft C 5.1 and 6.0A.
  778. X#    Whenever the distinction is significant, it is indicated.
  779. X#
  780. X#    "GCC" refers to GCC emx 0.8f only.  No other ports of
  781. X#    GCC are supported.
  782. X#
  783. X#    "CSet/2" is the IBM 32 bit C compiler for OS/2 2.0.  CSet/2
  784. X#    support courtesy Jeff Urlwin (jurlwin@gandalf.umcs.maine.edu).
  785. X#
  786. X#    "OMF" is short for "Object Module Format" and refers to the
  787. X#    standard OS/2 object format, which e.g. link386 uses.  MSC and
  788. X#    CSet/2 always produce OMF object files, and GCC can be instructed
  789. X#    to produce them with proper switches (see below).
  790. X#
  791. X#    "a.out" refers to Unix object file format, which is used by GCC
  792. X#    in its default compilation mode.  These object files must be
  793. X#    linked using GCC's own linker to produce a proper OS/2 executable.
  794. X#    GDB debugger shipped with GCC can only be used with a.out object
  795. X#    format.
  796. X#
  797. X#    Note that the default setup in this makefile is my personal setup,
  798. X#    which you will have to adapt to your configuration.
  799. X#
  800. X
  801. X#
  802. X#    Compiler and linker selection.
  803. X#
  804. X
  805. XCC    = cl        # MSC
  806. X#CC    = gcc        # GCC
  807. X#CC    = icc        # CSet/2
  808. X
  809. XLINK    = link        # MSC
  810. X#LINK    = link386    # GCC OMF, CSet/2
  811. X
  812. X#
  813. X#    Make syntax peculiarities.
  814. X#
  815. X#    Enable the uppermost eight lines for NDMAKE, the middle eight
  816. X#    for NMAKE (MSC, CSet/2), and the lowermost eight for DMAKE.
  817. X#
  818. X
  819. X#MAKEB    = ndmake    # Executable name
  820. X#CMD    =        # Command processor name if required
  821. X#AB    = $*.c        # Base name of the target in target action
  822. X#CB    = $*.c        #               - " -               dependent
  823. X#B    = (        # Command line begin in shell one-liners
  824. X#E    = )        #   - " -      end   - " -
  825. X#S    = ;        # Command separator  - " -
  826. X#P    = %        # Literal percent sign
  827. XMAKEB    = nmake
  828. XCMD    =
  829. XAB    = $(@B).c
  830. XCB    = $$(@B).c
  831. XB    = (
  832. XE    = )
  833. XS    = &
  834. XP    = %%
  835. X#MAKEB    = dmake
  836. X#CMD    = cmd /C
  837. X#AB    = $(@:B).c
  838. X#CB    = $$(@:B).c
  839. X#B    = $(CMD) "
  840. X#E    = "
  841. X#S    = &
  842. X#P    = %
  843. X
  844. X#
  845. X#    Most makes execute actions automatically inside a subshell,
  846. X#    which makes even the shell internals work ok.  This applies
  847. X#    for NDMAKE and NMAKE.  DMAKE wants it spelled out for it.
  848. X#
  849. X
  850. XECHO    = $(CMD) @echo
  851. XRM    = $(CMD) del
  852. XCP    = $(CMD) copy
  853. X
  854. X#
  855. X#    For those of us who have these on PC.
  856. X#
  857. X
  858. X#YACC    = yacc
  859. X#LEX    = lex
  860. XYACC    = bison -y
  861. XLEX    = flex
  862. X
  863. X#
  864. X#    For extracting NetHack icon.
  865. X#
  866. X
  867. XUUDECODE = uudecode
  868. X
  869. X#
  870. X#    For people with TeX and LaTeX.
  871. X#
  872. X
  873. XLATEX    = latex
  874. X
  875. X#
  876. X#    Standard file naming for LEX and YACC output may vary in PC
  877. X#    installations.  These three are probably the most generally used
  878. X#    names.
  879. X#
  880. X
  881. XYTABC    = y_tab.c
  882. XYTABH    = y_tab.h
  883. XLEXYYC    = lexyy.c
  884. X
  885. X#
  886. X#    Source tree base directory.
  887. X#
  888. X
  889. XNHSRC    = \nh31
  890. X
  891. X#
  892. X#    Source directories.  Makedefs hardcodes these, don't change them.
  893. X#
  894. X
  895. XINCL    = $(NHSRC)\include    # NetHack include files
  896. XDAT    = $(NHSRC)\dat        # NetHack data files
  897. XDOC    = $(NHSRC)\doc        # NetHack documentation files
  898. XUTIL    = $(NHSRC)\util        # Utility source
  899. XSRC    = $(NHSRC)\src        # Main source
  900. XWIN    = $(NHSRC)\win\tty    # Window system specific source
  901. XSYS    = $(NHSRC)\sys\os2    # System specific source
  902. XSSYS    = $(NHSRC)\sys\share    # Shared system files
  903. X
  904. X#
  905. X#    Modifiable directories.  Set these according to your setup and
  906. X#    preferences.  They must all be present prior to compilation.
  907. X#    OBJ, TEMP and GAMEDIR should all preferably be separate and,
  908. X#    in particular, not the same as any of the source directories.
  909. X#    Note that DMAKE may dislike drive designators in paths because
  910. X#    it misinterprets the colon as being part of a make rule.  In this
  911. X#    case, all directories have to reside in the same drive.
  912. X#
  913. X
  914. XOBJ    = \tmp\obj        # Object files
  915. XTEMP    = \tmp\bin        # Temporary files during make process
  916. XGAMEDIR = \games\nh31        # Game directory
  917. XPLIBP    = d:\c6\lib        # Protected mode C libraries
  918. XRLIBP    = d:\c6\lib        # Possible real mode C libraries
  919. X
  920. XTLIBP    = \toolkt20\os2lib    # CSet/2 Toolkit libpath (OS2386.LIB)
  921. X
  922. X#
  923. X#    The game name and description.
  924. X#
  925. X
  926. XGAME    = nethack
  927. XGAMEDES = "NetHack 3.1"
  928. X
  929. X#
  930. X#    The uppermost two lines for MSC, the middle two for GCC, and
  931. X#    the lowermost two for CSet/2.
  932. X#
  933. X#    MSC: compile only, compiler id, large memory model, optimization level,
  934. X#    remove stack probes, 80286 instruction set, dedicated datasegment for
  935. X#    items >= 10 bytes, pack structures on 1 byte boundaries, generate code
  936. X#    for 8087 coprocessor, compiler warning level, include file path, invoke
  937. X#    large model compiler, debug flags, ANSI conformance.
  938. X#
  939. X#    GCC: compile only, compiler id, object format selection, warnings,
  940. X#    include file path, ANSI conformance.
  941. X#
  942. X#    CSet/2: compile only, compiler id, migration lib, remove stack probes,
  943. X#    force intra 64K alignment for data, force optlink linkage on function
  944. X#    calls, warning level, include files, ANSI conformance.
  945. X#
  946. X
  947. XCFLAGS    = /c /DOS2_MSC /AL /O /Gs /G2 /Gt10 /Zp1 /FPi $(WARN) /I$(INCL) $(BIGC) $(CDFLAGS) $(STDC)
  948. XO    = /Fo
  949. X#CFLAGS    = -c -DOS2_GCC $(GCCO) $(WARN) -I$(INCL) $(CDFLAGS) $(STDC)
  950. X#O    = -o
  951. X#CFLAGS    = /c /DOS2_CSET2 /Sm /Gs /Gt+ /Mp $(WARN) /I$(INCL) $(CDFLAGS) $(STDC)
  952. X#O    = /Fo
  953. X
  954. X#
  955. X#    Compiler warning levels.  These are really for development, so
  956. X#    they are commented out in general distribution to save the user
  957. X#    from masses of benign warnings.  If any problems arise, however,
  958. X#    they may help in finding the trouble.
  959. X#
  960. X#    MSC: warning level 3 is highest in 5.1, second highest in 6.0.
  961. X#    Cries a lot, but for no real cause.  Warning level 0 for distribution.
  962. X#
  963. X#    GCC: max. reasonable GCC warning levels.  Can't use -Wall, because then
  964. X#    it would whine about all the zillions of unused declarations etc.
  965. X#    Even with these switch you'll get a lot of warnings, but they should
  966. X#    all be benign.
  967. X#
  968. X#    CSet/2: warning level 3.  The second optional parameter gives
  969. X#    lots of extra warnings.
  970. X#
  971. X
  972. XWARN    = /W0 #/W3        # MSC
  973. X#WARN    = #-W -Wimplicit -Wreturn-type -Wunused -Wformat -Wswitch -Wshadow -Wcast-qual -Wwrite-strings -DGCC_WARN # GCC
  974. X#WARN    = #/W3 #/Kbper    # CSet/2
  975. X
  976. X#
  977. X#    GCC object format selection.  Upper line for standard OS/2 OMF
  978. X#    object format, lower for Unix style a.out format.
  979. X#
  980. X
  981. X#GCCO    = -Zomf -Zsys    # GCC OMF
  982. XGCCO    =        # GCC a.out
  983. X
  984. X#
  985. X#    MSC 5.1 needs the large model first pass of the compiler.
  986. X#    Not needed for later versions.
  987. X#
  988. X
  989. XBIGC    =
  990. X#BIGC    = /B1 d:\binb\c1l.exe    # MSC 5.1
  991. X
  992. X#
  993. X#    Unset CL to avoid troubles with conflicting switches in MSC 6.0.
  994. X#
  995. X
  996. XCL    =
  997. X
  998. X#
  999. X#    MSC, CSet/2: don't ignore case in symbols, no default lib search, stack
  1000. X#    8KB, allow max 1024 segments in program.
  1001. X#
  1002. X#    GCC: likes a big stack.
  1003. X#
  1004. X
  1005. XLFLAGS    = /noig /nod /stack:8192 /seg:1024 $(LDFLAGS)    # MSC, CSet/2
  1006. X#LFLAGS    = /noig /stack:40000                # GCC
  1007. X
  1008. X#
  1009. X#    Prepare for a debugger.
  1010. X#
  1011. X
  1012. XCDFLAGS =
  1013. XLDFLAGS =
  1014. X#CDFLAGS = /Zi        # CodeView (MSC)
  1015. X#LDFLAGS = /CO        # - " -
  1016. X#CDFLAGS = -g        # GDB (GCC a.out)
  1017. X#LDFLAGS = -g        # - " -
  1018. X#CDFLAGS = /Ti+        # IPMD (CSet/2)
  1019. X#LDFLAGS = /CO        # - " -
  1020. X
  1021. X#
  1022. X#    How to produce the most ANSI-like environment.
  1023. X#
  1024. X
  1025. X#STDC    =        # MSC 5.1
  1026. XSTDC    = /D__STDC__    # MSC 6.0, CSet/2
  1027. X#STDC    = -ansi        # GCC
  1028. X
  1029. X#
  1030. X#    Possible system object files required during linking.
  1031. X#
  1032. X
  1033. XSYSOBJ    =            # MSC, GCC a.out, CSet/2
  1034. X#SYSOBJ    = $(PLIBP)\crt0.obj    # GCC OMF
  1035. X
  1036. X#
  1037. X#    Compiler library selection.  Change if necessary.
  1038. X#
  1039. X#    MSC: Protected mode C libraries for 8087 emulator,
  1040. X#    OS/2 API entry points.
  1041. X#
  1042. X#    GCC OMF: C standard lib, extra GCC lib, static system lib,
  1043. X#    OS/2 API entry points.
  1044. X#
  1045. X#    GCC a.out: extra GCC lib, C standard lib, extra GCC lib (again),
  1046. X#    OS/2 API entry points.
  1047. X#
  1048. X#    CSet/2: C standard libraries, OS/2 API entry points.
  1049. X#
  1050. X
  1051. X#PLIBS    = $(PLIBP)\llibcep $(PLIBP)\doscalls    # MSC 5.1
  1052. XPLIBS    = $(PLIBP)\llibcep $(PLIBP)\os2        # MSC 6.0
  1053. X#PLIBS    = $(PLIBP)\libc $(PLIBP)\libgcc $(PLIBP)\libsys $(PLIBP)\libos2    # GCC OMF
  1054. X#PLIBS    = -lgcc -lc -lgcc -los2            # GCC a.out (defining -lgcc twice is required)
  1055. X#PLIBS    = $(PLIBP)\dde4sbs.lib $(PLIBP)\dde4sbm.lib $(TLIBP)\os2386.lib # CSet/2
  1056. X
  1057. X#
  1058. X#    C libraries used by makedefs, lev_comp and dgn_comp (change if
  1059. X#    necessary).  If compilation is done in DOS, enable the upper line
  1060. X#    possibly setting the library name to something else, if in OS/2,
  1061. X#    enable the lower line (protected mode libraries).
  1062. X#
  1063. X
  1064. X#RLIBS    = $(RLIBP)\llibcer
  1065. XRLIBS    = $(PLIBS)
  1066. X
  1067. X#
  1068. X#    Default compilation skeletons.    The uppermost six are for
  1069. X#    MSC and CSet/2 and the lowermost six for GCC.
  1070. X#
  1071. X
  1072. XSRCCC    = $(CC) $(CFLAGS) $(O)$@ $(SRC)\$(AB)
  1073. XUTILCC    = $(CC) $(CFLAGS) $(O)$@ $(UTIL)\$(AB)
  1074. XSYSCC    = $(CC) $(CFLAGS) $(O)$@ $(SYS)\$(AB)
  1075. XSSYSCC    = $(CC) $(CFLAGS) $(O)$@ $(SSYS)\$(AB)
  1076. XPSYSCC    = $(CC) $(CFLAGS) $(O)$@ $(SSYS)\pc$(AB)
  1077. XWINCC    = $(CC) $(CFLAGS) $(O)$@ $(WIN)\$(AB)
  1078. X#SRCCC    = $(CC) $(CFLAGS) $(O) $@ $(AB)
  1079. X#UTILCC    = $(B) cd $(UTIL) $(S) $(CC) $(CFLAGS) $(O) $@ $(AB) $(E)
  1080. X#SYSCC    = $(B) cd $(SYS) $(S) $(CC) $(CFLAGS) $(O) $@ $(AB) $(E)
  1081. X#SSYSCC    = $(B) cd $(SSYS) $(S) $(CC) $(CFLAGS) $(O) $@ $(AB) $(E)
  1082. X#PSYSCC    = $(B) cd $(SSYS) $(S) $(CC) $(CFLAGS) $(O) $@ pc$(AB) $(E)
  1083. X#WINCC    = $(B) cd $(WIN) $(S) $(CC) $(CFLAGS) $(O) $@ $(AB) $(E)
  1084. X
  1085. X#
  1086. X#    Default linker skeletons.  Upper four lines for everything
  1087. X#    that uses standard OS/2 object format (MSC, CSet/2, GCC OMF),
  1088. X#    lower four for GCC a.out format.
  1089. X#
  1090. X
  1091. XGAMELN    = $(LINK) @$(TEMP)\$(GAME).rsp
  1092. XMKDFLN    = $(LINK) @$(TEMP)\makedefs.rsp
  1093. XLEVCLN    = $(LINK) @$(TEMP)\lev_comp.rsp
  1094. XDGNCLN    = $(LINK) @$(TEMP)\dgn_comp.rsp
  1095. XRCVRLN    = $(LINK) @$(TEMP)\recover.rsp
  1096. X#GAMELN    = $(CC) $(LDFLAGS) -o $(GAMEDIR)\$(GAME).exe $(TEMP)\$(GAMEDEF) $(SYSOBJ) $(HOBJ) $(PLIBS) $(TERMLIB)
  1097. X#MKDFLN    = $(CC) $(LDFLAGS) -o $(TEMP)\makedefs.exe $(TEMP)\$(MKDFDEF) $(SYSOBJ) $(MAKEOBJS) $(PLIBS)
  1098. X#LEVCLN    = $(CC) $(LDFLAGS) -o $(TEMP)\lev_comp.exe $(TEMP)\$(LEVCDEF) $(SYSOBJ) $(SPLEVOBJS) $(PLIBS)
  1099. X#DGNCLN    = $(CC) $(LDFLAGS) -o $(TEMP)\dgn_comp.exe $(TEMP)\$(DGNCDEF) $(SYSOBJ) $(DGNCOMPOBJS) $(PLIBS)
  1100. X#RCVRLN    = $(CC) $(LDFLAGS) -o $(GAMEDIR)\recover.exe $(TEMP)\$(RCVRDEF) $(SYSOBJ) $(RECOVOBJS) $(PLIBS)
  1101. X
  1102. X#
  1103. X#    OS/2 module definition files for NetHack,
  1104. X#    makedefs, dgn_comp, lev_comp, recover.
  1105. X#
  1106. X
  1107. XGAMEDEF    = $(GAME).def
  1108. XMKDFDEF    = makedefs.def
  1109. XLEVCDEF    = lev_comp.def
  1110. XDGNCDEF    = dgn_comp.def
  1111. XRCVRDEF    = recover.def
  1112. X
  1113. X#
  1114. X#    For compilation in DOS, enable the lower three lines and
  1115. X#    disable the upper three.
  1116. X#
  1117. X
  1118. XMKDFMD    = $(TEMP)\$(MKDFDEF)
  1119. XLEVCMD    = $(TEMP)\$(LEVCDEF)
  1120. XDGNCMD    = $(TEMP)\$(DGNCDEF)
  1121. X#MKDFMD    =
  1122. X#LEVCMD    =
  1123. X#DGNCMD    =
  1124. X
  1125. X#
  1126. X#    Optional high-quality BSD random number generation routines
  1127. X#    (see os2conf.h).  Set to nothing if not used.
  1128. X#
  1129. X
  1130. XRANDOM    = $(OBJ)\random.o
  1131. X#RANDOM    =
  1132. X
  1133. X#
  1134. X#    If TERMLIB is defined in os2conf.h, comment out the upper line and
  1135. X#    uncomment the lower.  If the termcap-library doesn't exist, use
  1136. X#    sys\share\makefile.lib to build it.
  1137. X#
  1138. X
  1139. XTERMLIB =
  1140. X#TERMLIB = termlib.lib
  1141. X
  1142. X#
  1143. X#    Short / long file name selection for FAT and HPFS.
  1144. X#    Only two files need consideration.
  1145. X#
  1146. X
  1147. XGUIDEBOO = Guideboo    # FAT
  1148. XPATCHLEV = patchlev    # - " -
  1149. X#GUIDEBOO = Guidebook    # HPFS
  1150. X#PATCHLEV = patchlevel    # - " -
  1151. X
  1152. X
  1153. X#
  1154. X#    If you have LaTeX and want to create the NetHack Guidebook in TeX
  1155. X#    device-independent file format, comment out the upper line and
  1156. X#    uncomment the lower.
  1157. X#
  1158. X
  1159. XGUIDE    =
  1160. X#GUIDE    = $(TEMP)\$(GUIDEBOO).dvi
  1161. X
  1162. X#
  1163. X#    Set WINOBJ lines corresponding to your desired combination
  1164. X#    of windowing systems.  Also set windowing systems in config.h.
  1165. X#
  1166. X#    A straight tty port using no native windowing system is the
  1167. X#    only choice for now.
  1168. X
  1169. XWINOBJ = $(OBJ)\getline.o $(OBJ)\termcap.o $(OBJ)\topl.o $(OBJ)\wintty.o
  1170. X
  1171. X#
  1172. X#    The default make target, so just typing 'make' is useful.
  1173. X#    Has to be the first target in the makefile.
  1174. X#
  1175. X
  1176. Xdefault : all
  1177. X
  1178. X#
  1179. X#    If you have yacc and lex programs and make any changes, uncomment
  1180. X#    the lowermost two lines and uncomment the others.  If you make
  1181. X#    changes to the .y and .l files but prefer to process the files
  1182. X#    separately elsewhere, activate the middle two lines, so your changes
  1183. X#    don't get overwritten.
  1184. X#
  1185. X
  1186. X#do_yacc : yacc_cpy    # use pre-generated files
  1187. X#do_lex :  lex_cpy    #    - " -
  1188. X#do_yacc : yacc_msg    # show message if changed
  1189. X#do_lex :  lex_msg    #    - " -
  1190. Xdo_yacc : yacc_act    # re-process files
  1191. Xdo_lex :  lex_act    #    - " -
  1192. X
  1193. X#
  1194. X#    If you don't have uudecode program, use the upper line.
  1195. X#    If you still want the icon, you'll have to extract the
  1196. X#    file manually somewhere else.
  1197. X#
  1198. X
  1199. X#do_icon : icon_msg    # show message if changed
  1200. Xdo_icon : icon_act    # extract icon file
  1201. X
  1202. X#
  1203. X#    If you don't want to generate nethack.cmd, use the upper line.
  1204. X#    This could be the case, e.g., if you use different shell than
  1205. X#    the standard cmd.exe.
  1206. X#
  1207. X
  1208. X#do_cmd : cmd_msg    # show message
  1209. Xdo_cmd : cmd_act    # generate nethack.cmd
  1210. X
  1211. X######################################################################
  1212. X#
  1213. X#    Nothing below this line should have to be changed.
  1214. X#
  1215. X#    Other things that have to be reconfigured are in
  1216. X#    config.h, os2conf.h and possibly system.h.
  1217. X#
  1218. X
  1219. X#
  1220. X#    The game filename.
  1221. X#
  1222. X
  1223. XGAMEFILE = $(GAMEDIR)\$(GAME).exe
  1224. X
  1225. X#
  1226. X#    Object files for makedefs.
  1227. X#
  1228. X
  1229. XMAKEOBJS = $(OBJ)\makedefs.o $(OBJ)\monst.o $(OBJ)\objects.o
  1230. X
  1231. X#
  1232. X#    Object files for special levels compiler.
  1233. X#
  1234. X
  1235. XSOBJ01    = $(OBJ)\lev_yacc.o $(OBJ)\lev_lex.o $(OBJ)\lev_main.o $(OBJ)\alloc.o
  1236. XSOBJ02    = $(OBJ)\monst.o $(OBJ)\objects.o $(OBJ)\panic.o $(OBJ)\decl.o
  1237. XSOBJ03    = $(OBJ)\drawing.o
  1238. X
  1239. XSPLEVOBJS = $(SOBJ01) $(SOBJ02) $(SOBJ03)
  1240. X
  1241. X#
  1242. X#    Object files for dungeon compiler.
  1243. X#
  1244. X
  1245. XDOBJ01    = $(OBJ)\dgn_yacc.o $(OBJ)\dgn_lex.o $(OBJ)\dgn_main.o
  1246. XDOBJ02    = $(OBJ)\panic.o $(OBJ)\alloc.o
  1247. X
  1248. XDGNCOMPOBJS = $(DOBJ01) $(DOBJ02)
  1249. X
  1250. X#
  1251. X#    Object files for recovery utility.
  1252. X#
  1253. X
  1254. XRECOVOBJS = $(OBJ)\recover.o
  1255. X
  1256. X#
  1257. X#    Object files for the game itself.
  1258. X#
  1259. X
  1260. XVOBJ01 = $(OBJ)\allmain.o  $(OBJ)\alloc.o    $(OBJ)\apply.o    $(OBJ)\artifact.o
  1261. XVOBJ02 = $(OBJ)\attrib.o   $(OBJ)\ball.o     $(OBJ)\bones.o    $(OBJ)\botl.o
  1262. XVOBJ03 = $(OBJ)\cmd.o      $(OBJ)\dbridge.o  $(OBJ)\decl.o     $(OBJ)\detect.o
  1263. XVOBJ04 = $(OBJ)\display.o  $(OBJ)\do.o       $(OBJ)\do_name.o  $(OBJ)\do_wear.o
  1264. XVOBJ05 = $(OBJ)\dog.o      $(OBJ)\dogmove.o  $(OBJ)\dokick.o   $(OBJ)\dothrow.o
  1265. XVOBJ06 = $(OBJ)\drawing.o  $(OBJ)\dungeon.o  $(OBJ)\eat.o      $(OBJ)\end.o
  1266. XVOBJ07 = $(OBJ)\engrave.o  $(OBJ)\exper.o    $(OBJ)\explode.o  $(OBJ)\extralev.o
  1267. XVOBJ08 = $(OBJ)\files.o    $(OBJ)\fountain.o $(OBJ)\hack.o     $(OBJ)\hacklib.o
  1268. XVOBJ09 = $(OBJ)\invent.o   $(OBJ)\lock.o     $(OBJ)\mail.o     $(OBJ)\main.o
  1269. XVOBJ10 = $(OBJ)\makemon.o  $(OBJ)\mcastu.o   $(OBJ)\mhitm.o    $(OBJ)\mhitu.o
  1270. XVOBJ11 = $(OBJ)\minion.o   $(OBJ)\mklev.o    $(OBJ)\mkmap.o    $(OBJ)\mkmaze.o
  1271. XVOBJ12 = $(OBJ)\mkobj.o    $(OBJ)\mkroom.o   $(OBJ)\mon.o      $(OBJ)\mondata.o
  1272. XVOBJ13 = $(OBJ)\monmove.o  $(OBJ)\monst.o    $(OBJ)\monstr.o   $(OBJ)\mplayer.o
  1273. XVOBJ14 = $(OBJ)\mthrowu.o  $(OBJ)\muse.o     $(OBJ)\music.o    $(OBJ)\o_init.o
  1274. XVOBJ15 = $(OBJ)\objects.o  $(OBJ)\objnam.o   $(OBJ)\options.o  $(OBJ)\os2.o
  1275. XVOBJ16 = $(OBJ)\pager.o    $(OBJ)\pcsys.o    $(OBJ)\pickup.o   $(OBJ)\pline.o
  1276. XVOBJ17 = $(OBJ)\polyself.o $(OBJ)\potion.o   $(OBJ)\pray.o     $(OBJ)\priest.o
  1277. XVOBJ18 = $(OBJ)\quest.o    $(OBJ)\questpgr.o $(OBJ)\read.o     $(OBJ)\rect.o
  1278. XVOBJ19 = $(OBJ)\restore.o  $(OBJ)\rip.o      $(OBJ)\rnd.o      $(OBJ)\rumors.o
  1279. XVOBJ20 = $(OBJ)\save.o     $(OBJ)\shk.o      $(OBJ)\shknam.o   $(OBJ)\sit.o
  1280. XVOBJ21 = $(OBJ)\sounds.o   $(OBJ)\sp_lev.o   $(OBJ)\spell.o    $(OBJ)\steal.o
  1281. XVOBJ22 = $(OBJ)\timeout.o  $(OBJ)\topten.o   $(OBJ)\track.o    $(OBJ)\trap.o
  1282. XVOBJ23 = $(OBJ)\tty.o      $(OBJ)\u_init.o   $(OBJ)\uhitm.o    $(OBJ)\unix.o
  1283. XVOBJ24 = $(OBJ)\vault.o    $(OBJ)\vision.o   $(OBJ)\vis_tab.o  $(OBJ)\weapon.o
  1284. XVOBJ25 = $(OBJ)\were.o     $(OBJ)\wield.o    $(OBJ)\windows.o  $(OBJ)\wizard.o
  1285. XVOBJ26 = $(OBJ)\worm.o     $(OBJ)\worn.o     $(OBJ)\write.o    $(OBJ)\zap.o
  1286. XVOBJ27 = $(WINOBJ)
  1287. XVOBJ28 = $(RANDOM)
  1288. XHHOBJ  = $(OBJ)\version.o
  1289. X
  1290. XVOBJ =    $(VOBJ01) $(VOBJ02) $(VOBJ03) $(VOBJ04) $(VOBJ05) $(VOBJ06) $(VOBJ07) \
  1291. X    $(VOBJ08) $(VOBJ09) $(VOBJ10) $(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) \
  1292. X    $(VOBJ15) $(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) $(VOBJ21) \
  1293. X    $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) $(VOBJ26) $(VOBJ27) $(VOBJ28)
  1294. XHOBJ =    $(VOBJ) $(HHOBJ)
  1295. X
  1296. XEXTERN_H   = #$(INCL)\extern.h
  1297. XOS2CONF_H  = $(INCL)\os2conf.h $(INCL)\micro.h $(INCL)\system.h $(EXTERN_H)
  1298. XGLOBAL_H   = $(INCL)\global.h $(INCL)\coord.h $(OS2CONF_H)
  1299. XCONFIG_H   = $(INCL)\config.h $(INCL)\tradstdc.h $(GLOBAL_H)
  1300. XTRAP_H       = $(INCL)\trap.h
  1301. XPERMONST_H = $(INCL)\permonst.h $(INCL)\monattk.h $(INCL)\monflag.h
  1302. XYOU_H       = $(INCL)\you.h $(INCL)\attrib.h $(PERMONST_H) $(INCL)\mondata.h \
  1303. X         $(INCL)\monst.h $(INCL)\youprop.h $(INCL)\prop.h $(INCL)\pm.h
  1304. XDECL_H       = $(INCL)\decl.h $(INCL)\spell.h $(INCL)\obj.h $(YOU_H) \
  1305. X         $(INCL)\onames.h $(INCL)\color.h
  1306. XHACK_H       = $(CONFIG_H) $(DECL_H) $(INCL)\monsym.h $(INCL)\mkroom.h \
  1307. X         $(INCL)\objclass.h $(TRAP_H) $(INCL)\engrave.h $(INCL)\flag.h \
  1308. X         $(INCL)\rm.h $(INCL)\dungeon.h $(INCL)\hack.h $(INCL)\display.h \
  1309. X         $(INCL)\vision.h $(INCL)\wintty.h $(INCL)\wintype.h $(INCL)\align.h \
  1310. X         $(INCL)\winprocs.h
  1311. X
  1312. X#
  1313. X#    The default target.
  1314. X#
  1315. X
  1316. Xall :    makedefs dgn_comp lev_comp recover $(GAME) dat $(GUIDE)
  1317. X    $(ECHO) Done.
  1318. X
  1319. X#
  1320. X#    Definition file creation.
  1321. X#
  1322. X
  1323. X$(TEMP)\$(GAMEDEF) :
  1324. X    $(MAKEB) DD_NAME=$(GAME) DD_DESC=$(GAMEDES) DD_TARG=$@ do_def
  1325. X$(TEMP)\$(MKDFDEF) :
  1326. X    $(MAKEB) DD_NAME=makedefs DD_DESC="Definitions compiler" DD_TARG=$@ do_def
  1327. X$(TEMP)\$(DGNCDEF) :
  1328. X    $(MAKEB) DD_NAME=dgn_comp DD_DESC="Dungeon compiler" DD_TARG=$@ do_def
  1329. X$(TEMP)\$(LEVCDEF) :
  1330. X    $(MAKEB) DD_NAME=lev_comp DD_DESC="Level compiler" DD_TARG=$@ do_def
  1331. X$(TEMP)\$(RCVRDEF) :
  1332. X    $(MAKEB) DD_NAME=recover DD_DESC="Recovery utility" DD_TARG=$@ do_def
  1333. X
  1334. Xdo_def :
  1335. X    $(ECHO) NAME $(DD_NAME) WINDOWCOMPAT> $(DD_TARG)
  1336. X    $(ECHO) DESCRIPTION '$(DD_DESC)'>> $(DD_TARG)
  1337. X    $(ECHO) PROTMODE>> $(DD_TARG)
  1338. X    $(ECHO) EXETYPE OS2>> $(DD_TARG)
  1339. X
  1340. X#
  1341. X#    The main target.
  1342. X#
  1343. X
  1344. X$(GAME) : $(GAMEDIR)\$(GAME).exe
  1345. X$(GAME).exe : $(GAMEDIR)\$(GAME).exe
  1346. X$(GAMEDIR)\$(GAME).exe : $(TEMP)\$(GAME).rsp
  1347. X    $(GAMELN)
  1348. X
  1349. X$(TEMP)\$(GAME).rsp : $(HOBJ) $(TEMP)\$(GAMEDEF)
  1350. X    $(ECHO) $(SYSOBJ) $(VOBJ01) +> $@
  1351. X    $(ECHO) $(VOBJ02) +>> $@
  1352. X    $(ECHO) $(VOBJ03) +>> $@
  1353. X    $(ECHO) $(VOBJ04) +>> $@
  1354. X    $(ECHO) $(VOBJ05) +>> $@
  1355. X    $(ECHO) $(VOBJ06) +>> $@
  1356. X    $(ECHO) $(VOBJ07) +>> $@
  1357. X    $(ECHO) $(VOBJ08) +>> $@
  1358. X    $(ECHO) $(VOBJ09) +>> $@
  1359. X    $(ECHO) $(VOBJ10) +>> $@
  1360. X    $(ECHO) $(VOBJ11) +>> $@
  1361. X    $(ECHO) $(VOBJ12) +>> $@
  1362. X    $(ECHO) $(VOBJ13) +>> $@
  1363. X    $(ECHO) $(VOBJ14) +>> $@
  1364. X    $(ECHO) $(VOBJ15) +>> $@
  1365. X    $(ECHO) $(VOBJ16) +>> $@
  1366. X    $(ECHO) $(VOBJ17) +>> $@
  1367. X    $(ECHO) $(VOBJ18) +>> $@
  1368. X    $(ECHO) $(VOBJ19) +>> $@
  1369. X    $(ECHO) $(VOBJ20) +>> $@
  1370. X    $(ECHO) $(VOBJ21) +>> $@
  1371. X    $(ECHO) $(VOBJ22) +>> $@
  1372. X    $(ECHO) $(VOBJ23) +>> $@
  1373. X    $(ECHO) $(VOBJ24) +>> $@
  1374. X    $(ECHO) $(VOBJ25) +>> $@
  1375. X    $(ECHO) $(VOBJ26) +>> $@
  1376. X    $(ECHO) $(VOBJ27) +>> $@
  1377. X    $(ECHO) $(VOBJ28) +>> $@
  1378. X    $(ECHO) $(HHOBJ)>> $@
  1379. X    $(ECHO) $(GAMEDIR)\$(GAME).exe>> $@
  1380. X    $(ECHO) $(TEMP)\$(GAME)>> $@
  1381. X    $(ECHO) $(PLIBS) $(TERMLIB)>> $@
  1382. X    $(ECHO) $(TEMP)\$(GAMEDEF) $(LFLAGS);>> $@
  1383. X
  1384. X#
  1385. X#    Targets for makedefs.
  1386. X#
  1387. X
  1388. Xmakedefs : $(TEMP)\makedefs.exe
  1389. X$(TEMP)\makedefs.exe : $(TEMP)\makedefs.rsp
  1390. X    $(MKDFLN)
  1391. X
  1392. X$(TEMP)\makedefs.rsp : $(MAKEOBJS) $(TEMP)\$(MKDFDEF)
  1393. X    $(ECHO) $(SYSOBJ) $(MAKEOBJS)> $@
  1394. X    $(ECHO) $(TEMP)\makedefs.exe>> $@
  1395. X    $(ECHO) nul>> $@
  1396. X    $(ECHO) $(RLIBS)>> $@
  1397. X    $(ECHO) $(MKDFMD) $(LFLAGS);>> $@
  1398. X
  1399. X$(OBJ)\makedefs.o : $(UTIL)\$(CB) $(CONFIG_H) $(INCL)\permonst.h $(INCL)\objclass.h \
  1400. X            $(INCL)\monsym.h $(INCL)\artilist.h $(INCL)\qtext.h
  1401. X    $(UTILCC)
  1402. X
  1403. X#
  1404. X#    Targets for the special levels compiler.
  1405. X#
  1406. X
  1407. Xlev_comp : $(TEMP)\lev_comp.exe
  1408. X$(TEMP)\lev_comp.exe : $(TEMP)\lev_comp.rsp
  1409. X    $(LEVCLN)
  1410. X
  1411. X$(TEMP)\lev_comp.rsp : $(SPLEVOBJS) $(TEMP)\$(LEVCDEF)
  1412. X    $(ECHO) $(SYSOBJ) $(SOBJ01) +> $@
  1413. X    $(ECHO) $(SOBJ02) +>> $@
  1414. X    $(ECHO) $(SOBJ03)>> $@
  1415. X    $(ECHO) $(TEMP)\lev_comp.exe>> $@
  1416. X    $(ECHO) nul>> $@
  1417. X    $(ECHO) $(RLIBS)>> $@
  1418. X    $(ECHO) $(LEVCMD) $(LFLAGS);>> $@
  1419. X
  1420. X$(OBJ)\lev_yacc.o : $(UTIL)\$(CB) $(HACK_H) $(INCL)\sp_lev.h
  1421. X    $(UTILCC)
  1422. X$(OBJ)\lev_lex.o  : $(UTIL)\$(CB) $(HACK_H) $(INCL)\sp_lev.h $(INCL)\lev_comp.h
  1423. X    $(UTILCC)
  1424. X$(OBJ)\lev_main.o : $(UTIL)\$(CB) $(HACK_H) $(INCL)\sp_lev.h $(INCL)\termcap.h
  1425. X    $(UTILCC)
  1426. X
  1427. X$(UTIL)\lev_yacc.c : $(UTIL)\lev_comp.y
  1428. X    $(MAKEB) YY=lev do_yacc
  1429. X
  1430. X$(UTIL)\lev_lex.c  : $(UTIL)\lev_comp.l
  1431. X    $(MAKEB) YY=lev do_lex
  1432. X
  1433. X#
  1434. X#    Targets for the dungeon compiler.
  1435. X#
  1436. X
  1437. Xdgn_comp : $(TEMP)\dgn_comp.exe
  1438. X$(TEMP)\dgn_comp.exe : $(TEMP)\dgn_comp.rsp
  1439. X    $(DGNCLN)
  1440. X
  1441. X$(TEMP)\dgn_comp.rsp : $(DGNCOMPOBJS) $(TEMP)\$(DGNCDEF)
  1442. X    $(ECHO) $(SYSOBJ) $(DOBJ01) +> $@
  1443. X    $(ECHO) $(DOBJ02)>> $@
  1444. X    $(ECHO) $(TEMP)\dgn_comp.exe>> $@
  1445. X    $(ECHO) nul>> $@
  1446. X    $(ECHO) $(RLIBS)>> $@
  1447. X    $(ECHO) $(DGNCMD) $(LFLAGS);>> $@
  1448. X
  1449. X$(OBJ)\dgn_yacc.o : $(UTIL)\$(CB) $(CONFIG_H) $(INCL)\dgn_file.h
  1450. X    $(UTILCC)
  1451. X$(OBJ)\dgn_lex.o  : $(UTIL)\$(CB) $(CONFIG_H) $(INCL)\dgn_comp.h $(INCL)\dgn_file.h
  1452. X    $(UTILCC)
  1453. X$(OBJ)\dgn_main.o : $(UTIL)\$(CB) $(CONFIG_H)
  1454. X    $(UTILCC)
  1455. X
  1456. X$(UTIL)\dgn_yacc.c : $(UTIL)\dgn_comp.y
  1457. X    $(MAKEB) YY=dgn do_yacc
  1458. X
  1459. X$(UTIL)\dgn_lex.c  : $(UTIL)\dgn_comp.l
  1460. X    $(MAKEB) YY=dgn do_lex
  1461. X
  1462. X#
  1463. X#    For both lev_comp and dgn_comp.
  1464. X#
  1465. X
  1466. X$(OBJ)\panic.o : $(UTIL)\$(CB) $(CONFIG_H)
  1467. X    $(UTILCC)
  1468. X
  1469. X#
  1470. X#    Yacc and Lex targets.
  1471. X#
  1472. X
  1473. Xyacc_cpy :
  1474. X    $(CP) $(SSYS)\$(YY)_yacc.c $(UTIL)
  1475. X    $(CP) $(SSYS)\$(YY)_comp.h $(INCL)
  1476. X
  1477. Xyacc_msg :
  1478. X    $(ECHO) $(YY)_comp.y has changed. To update $(YY)_yacc.c and $(YY)_comp.h run $(YACC).
  1479. X
  1480. Xyacc_act :
  1481. X    $(YACC) -d $(UTIL)\$(YY)_comp.y
  1482. X    $(CP) $(YTABC) $(UTIL)\$(YY)_yacc.c
  1483. X    $(CP) $(YTABH) $(INCL)\$(YY)_comp.h
  1484. X    $(RM) $(YTABC)
  1485. X    $(RM) $(YTABH)
  1486. X
  1487. Xlex_cpy :
  1488. X    $(CP) $(SSYS)\$(YY)_lex.c $(UTIL)
  1489. X
  1490. Xlex_msg :
  1491. X    $(ECHO) $(YY)_comp.l has changed. To update $(YY)_lex.c run $(LEX).
  1492. X
  1493. Xlex_act :
  1494. X    $(LEX) $(UTIL)\$(YY)_comp.l
  1495. X    $(CP) $(LEXYYC) $(UTIL)\$(YY)_lex.c
  1496. X    $(RM) $(LEXYYC)
  1497. X
  1498. X#
  1499. X#    Targets for the recovery utility.
  1500. X#
  1501. X
  1502. Xrecover : $(GAMEDIR)\recover.exe
  1503. X$(GAMEDIR)\recover.exe : $(TEMP)\recover.rsp
  1504. X    $(RCVRLN)
  1505. X
  1506. X$(TEMP)\recover.rsp : $(RECOVOBJS) $(TEMP)\$(RCVRDEF)
  1507. X    $(ECHO) $(SYSOBJ) $(RECOVOBJS)> $@
  1508. X    $(ECHO) $(GAMEDIR)\recover.exe>> $@
  1509. X    $(ECHO) nul>> $@
  1510. X    $(ECHO) $(PLIBS)>> $@
  1511. X    $(ECHO) $(TEMP)\$(RCVRDEF) $(LFLAGS);>> $@
  1512. X
  1513. X$(OBJ)\recover.o : $(UTIL)\$(CB) $(CONFIG_H)
  1514. X    $(UTILCC)
  1515. X
  1516. X#
  1517. X#    The following files depend on makedefs to be created.
  1518. X#
  1519. X#    date.h should be remade every time any of the source or include
  1520. X#    files is modified.
  1521. X#
  1522. X
  1523. X$(INCL)\date.h : $(VOBJ) $(TEMP)\makedefs.exe
  1524. X    $(TEMP)\makedefs -v
  1525. X    $(CP) $(DAT)\options $(GAMEDIR)
  1526. X    $(RM) $(DAT)\options
  1527. X
  1528. X$(INCL)\onames.h : $(TEMP)\makedefs.exe
  1529. X    $(TEMP)\makedefs -o
  1530. X
  1531. X$(INCL)\pm.h : $(TEMP)\makedefs.exe
  1532. X    $(TEMP)\makedefs -p
  1533. X
  1534. Xmonstr.c : $(TEMP)\makedefs.exe
  1535. X    $(TEMP)\makedefs -m
  1536. X
  1537. X$(OBJ)\monstr.o : $(CB)
  1538. X    $(SRCCC)
  1539. X
  1540. X$(GAMEDIR)\data : $(DAT)\data.bas $(TEMP)\makedefs.exe
  1541. X    $(TEMP)\makedefs -d
  1542. X    $(CP) $(DAT)\data $(GAMEDIR)
  1543. X    $(RM) $(DAT)\data
  1544. X
  1545. X$(GAMEDIR)\rumors : $(DAT)\rumors.tru $(DAT)\rumors.fal $(TEMP)\makedefs.exe
  1546. X    $(TEMP)\makedefs -r
  1547. X    $(CP) $(DAT)\rumors $(GAMEDIR)
  1548. X    $(RM) $(DAT)\rumors
  1549. X
  1550. X$(GAMEDIR)\oracles : $(DAT)\oracles.txt $(TEMP)\makedefs.exe
  1551. X    $(TEMP)\makedefs -h
  1552. X    $(CP) $(DAT)\oracles $(GAMEDIR)
  1553. X    $(RM) $(DAT)\oracles
  1554. X
  1555. X$(GAMEDIR)\quest.dat : $(DAT)\quest.txt $(TEMP)\makedefs.exe
  1556. X    $(TEMP)\makedefs -q
  1557. X    $(CP) $(DAT)\quest.dat $(GAMEDIR)
  1558. X    $(RM) $(DAT)\quest.dat
  1559. X
  1560. X#
  1561. X#    Vision tables for algorithm D.
  1562. X#
  1563. X
  1564. Xvis_tab.c : $(INCL)\vis_tab.h
  1565. X$(INCL)\vis_tab.h : $(TEMP)\makedefs.exe
  1566. X    $(TEMP)\makedefs -z
  1567. X
  1568. X$(OBJ)\vis_tab.o : $(CB)
  1569. X    $(SRCCC)
  1570. X
  1571. X#
  1572. X#    The following programs vary depending on what OS you are using.
  1573. X#
  1574. X
  1575. X$(OBJ)\main.o : $(SSYS)\pc$(CB) $(HACK_H)
  1576. X    $(PSYSCC)
  1577. X$(OBJ)\tty.o  : $(SSYS)\pc$(CB) $(HACK_H) $(INCL)\func_tab.h
  1578. X    $(PSYSCC)
  1579. X$(OBJ)\unix.o : $(SSYS)\pc$(CB) $(HACK_H)
  1580. X    $(PSYSCC)
  1581. X
  1582. X#
  1583. X#    Other system specific modules.
  1584. X#
  1585. X
  1586. X$(OBJ)\os2.o   : $(SYS)\$(CB) $(HACK_H) $(INCL)\termcap.h $(INCL)\def_os2.h
  1587. X    $(SYSCC)
  1588. X$(OBJ)\pcsys.o : $(SSYS)\$(CB) $(HACK_H)
  1589. X    $(SSYSCC)
  1590. X
  1591. X#
  1592. X#    Berkeley random(3) routines.
  1593. X#
  1594. X
  1595. X$(OBJ)\random.o : $(SSYS)\$(CB)
  1596. X    $(SSYSCC)
  1597. X
  1598. X#
  1599. X#    Window source.
  1600. X#
  1601. X
  1602. X$(OBJ)\getline.o : $(WIN)\$(CB) $(HACK_H) $(INCL)\func_tab.h
  1603. X    $(WINCC)
  1604. X$(OBJ)\termcap.o : $(WIN)\$(CB) $(HACK_H) $(INCL)\termcap.h
  1605. X    $(WINCC)
  1606. X$(OBJ)\topl.o    : $(WIN)\$(CB) $(HACK_H) $(INCL)\termcap.h
  1607. X    $(WINCC)
  1608. X$(OBJ)\wintty.o  : $(WIN)\$(CB) $(HACK_H) $(INCL)\termcap.h
  1609. X    $(WINCC)
  1610. X
  1611. X#
  1612. X#    Secondary targets.
  1613. X#
  1614. X
  1615. Xdat :    spec_lev help_fil $(GAMEDIR)\dungeon $(GAMEDIR)\data $(GAMEDIR)\rumors \
  1616. X    $(GAMEDIR)\oracles $(GAMEDIR)\quest.dat    $(GAMEDIR)\$(GAME).ico \
  1617. X    $(GAMEDIR)\$(GAME).cmd $(GAMEDIR)\nethack.cnf
  1618. X
  1619. Xhelp_fil : $(GAMEDIR)\cmdhelp $(GAMEDIR)\help $(GAMEDIR)\hh $(GAMEDIR)\history \
  1620. X    $(GAMEDIR)\license $(GAMEDIR)\opthelp $(GAMEDIR)\wizhelp
  1621. X
  1622. X$(GAMEDIR)\cmdhelp : $(DAT)\cmdhelp
  1623. X    $(CP) $(DAT)\cmdhelp $(GAMEDIR)
  1624. X$(GAMEDIR)\help : $(DAT)\help
  1625. X    $(CP) $(DAT)\help $(GAMEDIR)
  1626. X$(GAMEDIR)\hh : $(DAT)\hh
  1627. X    $(CP) $(DAT)\hh $(GAMEDIR)
  1628. X$(GAMEDIR)\history : $(DAT)\history
  1629. X    $(CP) $(DAT)\history $(GAMEDIR)
  1630. X$(GAMEDIR)\license : $(DAT)\license
  1631. X    $(CP) $(DAT)\license $(GAMEDIR)
  1632. X$(GAMEDIR)\opthelp : $(DAT)\opthelp
  1633. X    $(CP) $(DAT)\opthelp $(GAMEDIR)
  1634. X$(GAMEDIR)\wizhelp : $(DAT)\wizhelp
  1635. X    $(CP) $(DAT)\wizhelp $(GAMEDIR)
  1636. X
  1637. X$(GAMEDIR)\dungeon : $(DAT)\dungeon.def $(TEMP)\makedefs.exe $(TEMP)\dgn_comp.exe
  1638. X    $(TEMP)\makedefs -e
  1639. X    $(TEMP)\dgn_comp $(DAT)\dungeon.pdf
  1640. X    $(CP) $(DAT)\dungeon $(GAMEDIR)
  1641. X    $(RM) $(DAT)\dungeon.pdf
  1642. X    $(RM) $(DAT)\dungeon
  1643. X
  1644. XAFILES = $(GAMEDIR)\A-goal.lev
  1645. XBFILES = $(GAMEDIR)\B-goal.lev
  1646. XCFILES = $(GAMEDIR)\C-goal.lev
  1647. XEFILES = $(GAMEDIR)\E-goal.lev
  1648. XHFILES = $(GAMEDIR)\H-goal.lev
  1649. XKFILES = $(GAMEDIR)\K-goal.lev
  1650. XPFILES = $(GAMEDIR)\P-goal.lev
  1651. XRFILES = $(GAMEDIR)\R-goal.lev
  1652. XSFILES = $(GAMEDIR)\S-goal.lev
  1653. XTFILES = $(GAMEDIR)\T-goal.lev
  1654. XVFILES = $(GAMEDIR)\V-goal.lev
  1655. XWFILES = $(GAMEDIR)\W-goal.lev
  1656. X
  1657. XXFILES = $(AFILES) $(BFILES) $(CFILES) $(EFILES) $(HFILES) $(KFILES) \
  1658. X     $(PFILES) $(RFILES) $(SFILES) $(TFILES) $(VFILES) $(WFILES)
  1659. X
  1660. Xspec_lev : $(GAMEDIR)\astral.lev $(GAMEDIR)\bigroom.lev $(GAMEDIR)\castle.lev \
  1661. X       $(GAMEDIR)\knox.lev $(GAMEDIR)\medusa-1.lev $(GAMEDIR)\mine_end.lev \
  1662. X       $(GAMEDIR)\oracle.lev $(GAMEDIR)\tower1.lev $(GAMEDIR)\valley.lev \
  1663. X       $(GAMEDIR)\wizard1.lev $(XFILES)
  1664. X
  1665. X#    Single special level files
  1666. X
  1667. X$(GAMEDIR)\bigroom.lev : $(DAT)\bigroom.des $(TEMP)\lev_comp.exe
  1668. X    $(MAKEB) LF=bigroom do_slev
  1669. X$(GAMEDIR)\castle.lev : $(DAT)\castle.des $(TEMP)\lev_comp.exe
  1670. X    $(MAKEB) LF=castle do_slev
  1671. X$(GAMEDIR)\knox.lev : $(DAT)\knox.des $(TEMP)\lev_comp.exe
  1672. X    $(MAKEB) LF=knox do_slev
  1673. X$(GAMEDIR)\oracle.lev : $(DAT)\oracle.des $(TEMP)\lev_comp.exe
  1674. X    $(MAKEB) LF=oracle do_slev
  1675. X
  1676. Xdo_slev :
  1677. X    $(TEMP)\lev_comp $(DAT)\$(LF).des
  1678. X    $(CP) $(LF).lev $(GAMEDIR)
  1679. X    $(RM) $(LF).lev
  1680. X
  1681. X#    Multiple special level files
  1682. X
  1683. X$(GAMEDIR)\astral.lev : $(DAT)\endgame.des $(TEMP)\lev_comp.exe
  1684. X    $(TEMP)\lev_comp $(DAT)\endgame.des
  1685. X    $(CP) air.lev $(GAMEDIR)
  1686. X    $(CP) astral.lev $(GAMEDIR)
  1687. X    $(CP) earth.lev $(GAMEDIR)
  1688. X    $(CP) fire.lev $(GAMEDIR)
  1689. X    $(CP) water.lev $(GAMEDIR)
  1690. X    $(RM) air.lev
  1691. X    $(RM) astral.lev
  1692. X    $(RM) earth.lev
  1693. X    $(RM) fire.lev
  1694. X    $(RM) water.lev
  1695. X
  1696. X$(GAMEDIR)\medusa-1.lev : $(DAT)\medusa.des $(TEMP)\lev_comp.exe
  1697. X    $(TEMP)\lev_comp $(DAT)\medusa.des
  1698. X    $(CP) medusa-?.lev $(GAMEDIR)
  1699. X    $(RM) medusa-?.lev
  1700. X
  1701. X$(GAMEDIR)\mine_end.lev : $(DAT)\mines.des $(TEMP)\lev_comp.exe
  1702. X    $(TEMP)\lev_comp $(DAT)\mines.des
  1703. X    $(CP) mine_end.lev $(GAMEDIR)
  1704. X    $(CP) minefill.lev $(GAMEDIR)
  1705. X    $(CP) minetown.lev $(GAMEDIR)
  1706. X    $(RM) mine_end.lev
  1707. X    $(RM) minefill.lev
  1708. X    $(RM) minetown.lev
  1709. X
  1710. X$(GAMEDIR)\tower1.lev : $(DAT)\tower.des $(TEMP)\lev_comp.exe
  1711. X    $(TEMP)\lev_comp $(DAT)\tower.des
  1712. X    $(CP) tower?.lev $(GAMEDIR)
  1713. X    $(RM) tower?.lev
  1714. X
  1715. X$(GAMEDIR)\valley.lev : $(DAT)\gehennom.des $(TEMP)\lev_comp.exe
  1716. X    $(TEMP)\lev_comp $(DAT)\gehennom.des
  1717. X    $(CP) asmodeus.lev $(GAMEDIR)
  1718. X    $(CP) baalz.lev $(GAMEDIR)
  1719. X    $(CP) juiblex.lev $(GAMEDIR)
  1720. X    $(CP) orcus.lev $(GAMEDIR)
  1721. X    $(CP) sanctum.lev $(GAMEDIR)
  1722. X    $(CP) valley.lev $(GAMEDIR)
  1723. X    $(RM) asmodeus.lev
  1724. X    $(RM) baalz.lev
  1725. X    $(RM) juiblex.lev
  1726. X    $(RM) orcus.lev
  1727. X    $(RM) sanctum.lev
  1728. X    $(RM) valley.lev
  1729. X
  1730. X$(GAMEDIR)\wizard1.lev : $(DAT)\yendor.des $(TEMP)\lev_comp.exe
  1731. X    $(TEMP)\lev_comp $(DAT)\yendor.des
  1732. X    $(CP) wizard?.lev $(GAMEDIR)
  1733. X    $(CP) fakewiz?.lev $(GAMEDIR)
  1734. X    $(RM) wizard?.lev
  1735. X    $(RM) fakewiz?.lev
  1736. X
  1737. X#    Quest dungeons
  1738. X
  1739. X$(AFILES) : $(DAT)\Arch.des $(TEMP)\lev_comp.exe
  1740. X    $(MAKEB) QQ=A QF=Arch do_quest
  1741. X$(BFILES) : $(DAT)\Barb.des $(TEMP)\lev_comp.exe
  1742. X    $(MAKEB) QQ=B QF=Barb do_quest
  1743. X$(CFILES) : $(DAT)\Caveman.des $(TEMP)\lev_comp.exe
  1744. X    $(MAKEB) QQ=C QF=Caveman do_quest
  1745. X$(EFILES) : $(DAT)\Elf.des $(TEMP)\lev_comp.exe
  1746. X    $(MAKEB) QQ=E QF=Elf do_quest
  1747. X$(HFILES) : $(DAT)\Healer.des $(TEMP)\lev_comp.exe
  1748. X    $(MAKEB) QQ=H QF=Healer do_quest
  1749. X$(KFILES) : $(DAT)\Knight.des $(TEMP)\lev_comp.exe
  1750. X    $(MAKEB) QQ=K QF=Knight do_quest
  1751. X$(PFILES) : $(DAT)\Priest.des $(TEMP)\lev_comp.exe
  1752. X    $(MAKEB) QQ=P QF=Priest do_quest
  1753. X$(RFILES) : $(DAT)\Rogue.des $(TEMP)\lev_comp.exe
  1754. X    $(MAKEB) QQ=R QF=Rogue do_quest
  1755. X$(SFILES) : $(DAT)\Samurai.des $(TEMP)\lev_comp.exe
  1756. X    $(MAKEB) QQ=S QF=Samurai do_quest
  1757. X$(TFILES) : $(DAT)\Tourist.des $(TEMP)\lev_comp.exe
  1758. X    $(MAKEB) QQ=T QF=Tourist do_quest
  1759. X$(VFILES) : $(DAT)\Valkyrie.des $(TEMP)\lev_comp.exe
  1760. X    $(MAKEB) QQ=V QF=Valkyrie do_quest
  1761. X$(WFILES) : $(DAT)\Wizard.des $(TEMP)\lev_comp.exe
  1762. X    $(MAKEB) QQ=W QF=Wizard do_quest
  1763. X
  1764. Xdo_quest :
  1765. X    $(TEMP)\lev_comp $(DAT)\$(QF).des
  1766. X    $(CP) $(QQ)-goal.lev $(GAMEDIR)
  1767. X    $(CP) $(QQ)-fill?.lev $(GAMEDIR)
  1768. X    $(CP) $(QQ)-locate.lev $(GAMEDIR)
  1769. X    $(CP) $(QQ)-start.lev $(GAMEDIR)
  1770. X    $(RM) $(QQ)-goal.lev
  1771. X    $(RM) $(QQ)-fill?.lev
  1772. X    $(RM) $(QQ)-locate.lev
  1773. X    $(RM) $(QQ)-start.lev
  1774. X
  1775. X#
  1776. X#    NetHack icon for Presentation Manager.
  1777. X#
  1778. X
  1779. X$(GAMEDIR)\$(GAME).ico : $(SYS)\nhpmico.uu
  1780. X    $(MAKEB) do_icon
  1781. X
  1782. Xicon_msg :
  1783. X    $(ECHO) Icon file not extracted.  Extract manually if required.
  1784. X
  1785. Xicon_act :
  1786. X    $(UUDECODE) $(SYS)\nhpmico.uu
  1787. X    $(CP) nethack.ico $(GAMEDIR)\$(GAME).ico
  1788. X    $(RM) nethack.ico
  1789. X
  1790. X#
  1791. X#    NetHack command file to use with Presentation Manager.
  1792. X#
  1793. X
  1794. X$(GAMEDIR)\$(GAME).cmd :
  1795. X    $(MAKEB) CMDF=$@ do_cmd
  1796. X
  1797. Xcmd_msg :
  1798. X    $(ECHO) Command file not created.  Create manually if required.
  1799. X
  1800. Xcmd_act :
  1801. X    $(ECHO) @echo off> $(CMDF)
  1802. X    $(ECHO) REM Command file for starting nethack.exe from PM/WPS Desktop>> $(CMDF)
  1803. X    $(ECHO) $(GAME).exe $(P)1 $(P)2 $(P)3 $(P)4 $(P)5 $(P)6 $(P)7>> $(CMDF)
  1804. X    $(ECHO) pause>> $(CMDF)
  1805. X
  1806. X#
  1807. X#    NetHack configuration file.  Will not overwrite an existing file.
  1808. X#
  1809. X
  1810. X$(GAMEDIR)\nethack.cnf :
  1811. X    $(CP) $(SSYS)\nethack.cnf $(GAMEDIR)
  1812. X
  1813. X#
  1814. X#    Documentation.
  1815. X#
  1816. X
  1817. X$(TEMP)\$(GUIDEBOO).dvi : $(DOC)\$(GUIDEBOO).tex
  1818. X    $(LATEX) $(DOC)\$(GUIDEBOO).tex
  1819. X    $(CP) $(GUIDEBOO).dvi $(TEMP)
  1820. X    $(CP) $(GUIDEBOO).aux $(TEMP)
  1821. X    $(CP) $(GUIDEBOO).log $(TEMP)
  1822. X    $(RM) $(GUIDEBOO).dvi
  1823. X    $(RM) $(GUIDEBOO).aux
  1824. X    $(RM) $(GUIDEBOO).log
  1825. X
  1826. X#
  1827. X#    Housekeeping.
  1828. X#
  1829. X
  1830. Xclean :
  1831. X    -$(RM) $(OBJ)\*.o
  1832. X
  1833. Xspotless : clean
  1834. X    -$(RM) $(INCL)\date.h
  1835. X    -$(RM) $(INCL)\onames.h
  1836. X    -$(RM) $(INCL)\pm.h
  1837. X    -$(RM) $(INCL)\vis_tab.h
  1838. X    -$(RM) vis_tab.c
  1839. X    -$(RM) monstr.c
  1840. X    -$(RM) *.lev
  1841. X    -$(RM) nethack.ico
  1842. X    -$(RM) $(TEMP)\makedefs.exe
  1843. X    -$(RM) $(TEMP)\lev_comp.exe
  1844. X    -$(RM) $(TEMP)\dgn_comp.exe
  1845. X    -$(RM) $(TEMP)\*.rsp
  1846. X    -$(RM) $(TEMP)\*.def
  1847. X    -$(RM) $(TEMP)\*.map
  1848. X    -$(RM) $(TEMP)\$(GUIDEBOO).dvi
  1849. X    -$(RM) $(TEMP)\$(GUIDEBOO).aux
  1850. X    -$(RM) $(TEMP)\$(GUIDEBOO).log
  1851. X
  1852. X#
  1853. X#    Main source.
  1854. X#
  1855. X#    Default rules are sooo difficult for so many make
  1856. X#    programs that we do this the most straightforward way.
  1857. X#
  1858. X
  1859. X$(OBJ)\allmain.o  : $(SRC)\$(CB) $(HACK_H)
  1860. X    $(SRCCC)
  1861. X$(OBJ)\alloc.o    : $(SRC)\$(CB) $(CONFIG_H)
  1862. X    $(SRCCC)
  1863. X$(OBJ)\apply.o    : $(SRC)\$(CB) $(HACK_H) $(INCL)\edog.h
  1864. X    $(SRCCC)
  1865. X$(OBJ)\artifact.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h $(INCL)\artilist.h
  1866. X    $(SRCCC)
  1867. X$(OBJ)\attrib.o   : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h
  1868. X    $(SRCCC)
  1869. X$(OBJ)\ball.o     : $(SRC)\$(CB) $(HACK_H)
  1870. X    $(SRCCC)
  1871. X$(OBJ)\bones.o    : $(SRC)\$(CB) $(HACK_H) $(INCL)\lev.h
  1872. X    $(SRCCC)
  1873. X$(OBJ)\botl.o     : $(SRC)\$(CB) $(HACK_H)
  1874. X    $(SRCCC)
  1875. X$(OBJ)\cmd.o      : $(SRC)\$(CB) $(HACK_H) $(INCL)\func_tab.h
  1876. X    $(SRCCC)
  1877. X$(OBJ)\dbridge.o  : $(SRC)\$(CB) $(HACK_H)
  1878. X    $(SRCCC)
  1879. X$(OBJ)\decl.o     : $(SRC)\$(CB) $(HACK_H) $(INCL)\quest.h
  1880. X    $(SRCCC)
  1881. X$(OBJ)\detect.o   : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h
  1882. X    $(SRCCC)
  1883. X$(OBJ)\display.o  : $(SRC)\$(CB) $(HACK_H)
  1884. X    $(SRCCC)
  1885. X$(OBJ)\do.o       : $(SRC)\$(CB) $(HACK_H) $(INCL)\lev.h
  1886. X    $(SRCCC)
  1887. X$(OBJ)\do_name.o  : $(SRC)\$(CB) $(HACK_H)
  1888. X    $(SRCCC)
  1889. X$(OBJ)\do_wear.o  : $(SRC)\$(CB) $(HACK_H)
  1890. X    $(SRCCC)
  1891. X$(OBJ)\dog.o      : $(SRC)\$(CB) $(HACK_H) $(INCL)\edog.h
  1892. X    $(SRCCC)
  1893. X$(OBJ)\dogmove.o  : $(SRC)\$(CB) $(HACK_H) $(INCL)\mfndpos.h $(INCL)\edog.h
  1894. X    $(SRCCC)
  1895. X$(OBJ)\dokick.o   : $(SRC)\$(CB) $(HACK_H) $(INCL)\eshk.h
  1896. X    $(SRCCC)
  1897. X$(OBJ)\dothrow.o  : $(SRC)\$(CB) $(HACK_H)
  1898. X    $(SRCCC)
  1899. X$(OBJ)\drawing.o  : $(SRC)\$(CB) $(HACK_H) $(INCL)\termcap.h
  1900. X    $(SRCCC)
  1901. X$(OBJ)\dungeon.o  : $(SRC)\$(CB) $(HACK_H) $(INCL)\dgn_file.h
  1902. X    $(SRCCC)
  1903. X$(OBJ)\eat.o      : $(SRC)\$(CB) $(HACK_H)
  1904. X    $(SRCCC)
  1905. X$(OBJ)\end.o      : $(SRC)\$(CB) $(HACK_H) $(INCL)\eshk.h
  1906. X    $(SRCCC)
  1907. X$(OBJ)\engrave.o  : $(SRC)\$(CB) $(HACK_H) $(INCL)\lev.h
  1908. X    $(SRCCC)
  1909. X$(OBJ)\exper.o    : $(SRC)\$(CB) $(HACK_H)
  1910. X    $(SRCCC)
  1911. X$(OBJ)\explode.o  : $(SRC)\$(CB) $(HACK_H)
  1912. X    $(SRCCC)
  1913. X$(OBJ)\extralev.o : $(SRC)\$(CB) $(HACK_H)
  1914. X    $(SRCCC)
  1915. X$(OBJ)\files.o    : $(SRC)\$(CB) $(HACK_H)
  1916. X    $(SRCCC)
  1917. X$(OBJ)\fountain.o : $(SRC)\$(CB) $(HACK_H)
  1918. X    $(SRCCC)
  1919. X$(OBJ)\hack.o     : $(SRC)\$(CB) $(HACK_H)
  1920. X    $(SRCCC)
  1921. X$(OBJ)\hacklib.o  : $(SRC)\$(CB) $(HACK_H)
  1922. X    $(SRCCC)
  1923. X$(OBJ)\invent.o   : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h
  1924. X    $(SRCCC)
  1925. X$(OBJ)\lock.o     : $(SRC)\$(CB) $(HACK_H)
  1926. X    $(SRCCC)
  1927. X$(OBJ)\makemon.o  : $(SRC)\$(CB) $(HACK_H) $(INCL)\epri.h $(INCL)\emin.h
  1928. X    $(SRCCC)
  1929. X$(OBJ)\mail.o     : $(SRC)\$(CB) $(HACK_H) $(INCL)\mail.h
  1930. X    $(SRCCC)
  1931. X$(OBJ)\mcastu.o   : $(SRC)\$(CB) $(HACK_H)
  1932. X    $(SRCCC)
  1933. X$(OBJ)\mhitm.o    : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h $(INCL)\edog.h
  1934. X    $(SRCCC)
  1935. X$(OBJ)\mhitu.o    : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h $(INCL)\edog.h
  1936. X    $(SRCCC)
  1937. X$(OBJ)\minion.o   : $(SRC)\$(CB) $(HACK_H) $(INCL)\emin.h $(INCL)\epri.h
  1938. X    $(SRCCC)
  1939. X$(OBJ)\mklev.o    : $(SRC)\$(CB) $(HACK_H)
  1940. X    $(SRCCC)
  1941. X$(OBJ)\mkmap.o    : $(SRC)\$(CB) $(HACK_H) $(INCL)\sp_lev.h
  1942. X    $(SRCCC)
  1943. X$(OBJ)\mkmaze.o   : $(SRC)\$(CB) $(HACK_H) $(INCL)\sp_lev.h
  1944. X    $(SRCCC)
  1945. X$(OBJ)\mkobj.o    : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h
  1946. X    $(SRCCC)
  1947. X$(OBJ)\mkroom.o   : $(SRC)\$(CB) $(HACK_H)
  1948. X    $(SRCCC)
  1949. X$(OBJ)\mon.o      : $(SRC)\$(CB) $(HACK_H) $(INCL)\mfndpos.h $(INCL)\edog.h
  1950. X    $(SRCCC)
  1951. X$(OBJ)\mondata.o  : $(SRC)\$(CB) $(HACK_H) $(INCL)\eshk.h $(INCL)\epri.h
  1952. X    $(SRCCC)
  1953. X$(OBJ)\monmove.o  : $(SRC)\$(CB) $(HACK_H) $(INCL)\mfndpos.h $(INCL)\artifact.h
  1954. X    $(SRCCC)
  1955. X$(OBJ)\monst.o    : $(SRC)\$(CB) $(CONFIG_H) $(PERMONST_H) $(INCL)\monsym.h $(INCL)\eshk.h $(INCL)\vault.h $(INCL)\epri.h $(INCL)\color.h
  1956. X    $(SRCCC)
  1957. X$(OBJ)\mplayer.o  : $(SRC)\$(CB) $(HACK_H)
  1958. X    $(SRCCC)
  1959. X$(OBJ)\mthrowu.o  : $(SRC)\$(CB) $(HACK_H)
  1960. X    $(SRCCC)
  1961. X$(OBJ)\muse.o     : $(SRC)\$(CB) $(HACK_H)
  1962. X    $(SRCCC)
  1963. X$(OBJ)\music.o    : $(SRC)\$(CB) $(HACK_H)
  1964. X    $(SRCCC)
  1965. X$(OBJ)\o_init.o   : $(SRC)\$(CB) $(HACK_H)
  1966. X    $(SRCCC)
  1967. X$(OBJ)\objects.o  : $(SRC)\$(CB) $(CONFIG_H) $(INCL)\obj.h $(INCL)\objclass.h $(INCL)\prop.h $(INCL)\color.h
  1968. X    $(SRCCC)
  1969. X$(OBJ)\objnam.o   : $(SRC)\$(CB) $(HACK_H)
  1970. X    $(SRCCC)
  1971. X$(OBJ)\options.o  : $(SRC)\$(CB) $(HACK_H) $(INCL)\termcap.h
  1972. X    $(SRCCC)
  1973. X$(OBJ)\pager.o    : $(SRC)\$(CB) $(HACK_H)
  1974. X    $(SRCCC)
  1975. X$(OBJ)\pickup.o   : $(SRC)\$(CB) $(HACK_H)
  1976. X    $(SRCCC)
  1977. X$(OBJ)\pline.o    : $(SRC)\$(CB) $(HACK_H) $(INCL)\epri.h
  1978. X    $(SRCCC)
  1979. X$(OBJ)\polyself.o : $(SRC)\$(CB) $(HACK_H)
  1980. X    $(SRCCC)
  1981. X$(OBJ)\potion.o   : $(SRC)\$(CB) $(HACK_H)
  1982. X    $(SRCCC)
  1983. X$(OBJ)\pray.o     : $(SRC)\$(CB) $(HACK_H) $(INCL)\epri.h
  1984. X    $(SRCCC)
  1985. X$(OBJ)\priest.o   : $(SRC)\$(CB) $(HACK_H) $(INCL)\mfndpos.h $(INCL)\eshk.h $(INCL)\epri.h $(INCL)\emin.h
  1986. X    $(SRCCC)
  1987. X$(OBJ)\quest.o    : $(SRC)\$(CB) $(HACK_H) $(INCL)\quest.h $(INCL)\qtext.h
  1988. X    $(SRCCC)
  1989. X$(OBJ)\questpgr.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\qtext.h
  1990. X    $(SRCCC)
  1991. X$(OBJ)\read.o     : $(SRC)\$(CB) $(HACK_H)
  1992. X    $(SRCCC)
  1993. X$(OBJ)\rect.o     : $(SRC)\$(CB) $(HACK_H)
  1994. X    $(SRCCC)
  1995. X$(OBJ)\restore.o  : $(SRC)\$(CB) $(HACK_H) $(INCL)\lev.h $(INCL)\termcap.h $(INCL)\quest.h
  1996. X    $(SRCCC)
  1997. X$(OBJ)\rip.o      : $(SRC)\$(CB) $(HACK_H)
  1998. X    $(SRCCC)
  1999. X$(OBJ)\rnd.o      : $(SRC)\$(CB) $(HACK_H)
  2000. X    $(SRCCC)
  2001. X$(OBJ)\rumors.o   : $(SRC)\$(CB) $(HACK_H)
  2002. X    $(SRCCC)
  2003. X$(OBJ)\save.o     : $(SRC)\$(CB) $(HACK_H) $(INCL)\lev.h $(INCL)\quest.h
  2004. X    $(SRCCC)
  2005. X$(OBJ)\shk.o      : $(SRC)\$(CB) $(HACK_H) $(INCL)\eshk.h
  2006. X    $(SRCCC)
  2007. X$(OBJ)\shknam.o   : $(SRC)\$(CB) $(HACK_H) $(INCL)\eshk.h
  2008. X    $(SRCCC)
  2009. X$(OBJ)\sit.o      : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h
  2010. X    $(SRCCC)
  2011. X$(OBJ)\sounds.o   : $(SRC)\$(CB) $(HACK_H) $(INCL)\edog.h $(INCL)\eshk.h
  2012. X    $(SRCCC)
  2013. X$(OBJ)\sp_lev.o   : $(SRC)\$(CB) $(HACK_H) $(INCL)\sp_lev.h $(INCL)\rect.h
  2014. X    $(SRCCC)
  2015. X$(OBJ)\spell.o    : $(SRC)\$(CB) $(HACK_H)
  2016. X    $(SRCCC)
  2017. X$(OBJ)\steal.o    : $(SRC)\$(CB) $(HACK_H)
  2018. X    $(SRCCC)
  2019. X$(OBJ)\timeout.o  : $(SRC)\$(CB) $(HACK_H)
  2020. X    $(SRCCC)
  2021. X$(OBJ)\topten.o   : $(SRC)\$(CB) $(HACK_H)
  2022. X    $(SRCCC)
  2023. X$(OBJ)\track.o    : $(SRC)\$(CB) $(HACK_H)
  2024. X    $(SRCCC)
  2025. X$(OBJ)\trap.o     : $(SRC)\$(CB) $(HACK_H)
  2026. X    $(SRCCC)
  2027. X$(OBJ)\u_init.o   : $(SRC)\$(CB) $(HACK_H)
  2028. X    $(SRCCC)
  2029. X$(OBJ)\uhitm.o    : $(SRC)\$(CB) $(HACK_H)
  2030. X    $(SRCCC)
  2031. X$(OBJ)\vault.o    : $(SRC)\$(CB) $(HACK_H) $(INCL)\vault.h
  2032. X    $(SRCCC)
  2033. X$(OBJ)\version.o  : $(SRC)\$(CB) $(HACK_H) $(INCL)\date.h $(INCL)\$(PATCHLEV).h
  2034. X    $(SRCCC)
  2035. X$(OBJ)\vision.o   : $(SRC)\$(CB) $(HACK_H) $(INCL)\vis_tab.h
  2036. X    $(SRCCC)
  2037. X$(OBJ)\weapon.o   : $(SRC)\$(CB) $(HACK_H)
  2038. X    $(SRCCC)
  2039. X$(OBJ)\were.o     : $(SRC)\$(CB) $(HACK_H)
  2040. X    $(SRCCC)
  2041. X$(OBJ)\wield.o    : $(SRC)\$(CB) $(HACK_H)
  2042. X    $(SRCCC)
  2043. X$(OBJ)\windows.o  : $(SRC)\$(CB) $(HACK_H)
  2044. X    $(SRCCC)
  2045. X$(OBJ)\wizard.o   : $(SRC)\$(CB) $(HACK_H) $(INCL)\qtext.h
  2046. X    $(SRCCC)
  2047. X$(OBJ)\worm.o     : $(SRC)\$(CB) $(HACK_H) $(INCL)\lev.h
  2048. X    $(SRCCC)
  2049. X$(OBJ)\worn.o     : $(SRC)\$(CB) $(HACK_H)
  2050. X    $(SRCCC)
  2051. X$(OBJ)\write.o    : $(SRC)\$(CB) $(HACK_H)
  2052. X    $(SRCCC)
  2053. X$(OBJ)\zap.o      : $(SRC)\$(CB) $(HACK_H)
  2054. X    $(SRCCC)
  2055. END_OF_FILE
  2056. if test 37463 -ne `wc -c <'sys/os2/Makefile.os2'`; then
  2057.     echo shar: \"'sys/os2/Makefile.os2'\" unpacked with wrong size!
  2058. fi
  2059. # end of 'sys/os2/Makefile.os2'
  2060. fi
  2061. echo shar: End of archive 49 \(of 108\).
  2062. cp /dev/null ark49isdone
  2063. MISSING=""
  2064. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 \
  2065. 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 \
  2066. 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 \
  2067. 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 \
  2068. 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 \
  2069. 101 102 103 104 105 106 107 108 ; do
  2070.     if test ! -f ark${I}isdone ; then
  2071.     MISSING="${MISSING} ${I}"
  2072.     fi
  2073. done
  2074. if test "${MISSING}" = "" ; then
  2075.     echo You have unpacked all 108 archives.
  2076.     echo "Now execute 'rebuild.sh'"
  2077.     rm -f ark10[0-8]isdone ark[1-9]isdone ark[1-9][0-9]isdone
  2078. else
  2079.     echo You still need to unpack the following archives:
  2080.     echo "        " ${MISSING}
  2081. fi
  2082. ##  End of shell archive.
  2083. exit 0
  2084.