home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume7 / nethack3 / patch8u < prev    next >
Internet Message Format  |  1990-06-08  |  61KB

  1. Path: uunet!samsung!zaphod.mps.ohio-state.edu!rpi!dali.cs.montana.edu!milton!uw-beaver!zephyr.ens.tek.com!tekred!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v10i039:  NetHack3 -  display oriented dungeons & dragons (Ver. 3.0), Patch8u
  5. Message-ID: <5747@tekred.CNA.TEK.COM>
  6. Date: 5 Jun 90 18:03:08 GMT
  7. Sender: news@tekred.CNA.TEK.COM
  8. Lines: 2640
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
  12. Posting-number: Volume 10, Issue 39
  13. Archive-name: NetHack3/Patch8u
  14. Patch-To: NetHack3: Volume 7, Issue 56-93
  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 21 (of 24)."
  25. # Contents:  auxil/Makefile.auxil src/lev_comp.c src/lev_lex.c
  26. # Wrapped by billr@saab on Mon Jun  4 15:40:32 1990
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. echo shar: Extracting \"'auxil/Makefile.auxil'\" \(1889 characters\)
  29. sed "s/^X//" >'auxil/Makefile.auxil' <<'END_OF_FILE'
  30. X#    NetHack Makefile.
  31. X#    SCCS Id: @(#)Makefile.auxil    3.0    90/05/28
  32. X
  33. XVARAUX = data rumors
  34. XGUIDEBOOK = Guidebook        # regular ASCII file
  35. X#GUIDEBOOK = Guidebook.ps    # PostScript file
  36. X#GUIDEBOOK = Guidebook.dvi    # TeX device-independent file
  37. X
  38. Xall:    $(GUIDEBOOK) $(VARAUX) spec_levs
  39. X
  40. X# The tmac.n macros come with the B news software, which should be available
  41. X# at your friendly local archive site if you don't already have it.
  42. X# An updated version also comes with the Elm mail distribution.
  43. X# They are used here because they are more widely available (if not more
  44. X# widely installed) than various proprietary macro packages that came with
  45. X# your machine but not your neighbor's.
  46. X#
  47. X# If you can't install tmac.n in the appropriate system directory, you
  48. X# can create the processed Guidebook in stages:
  49. X#    tbl Guidebook.mn > Guidebook.tmp
  50. X#    nroff tmac.n Guidebook.tmp | col > Guidebook
  51. X#    rm Guidebook.tmp
  52. X# or simply by saying:
  53. X#    tbl tmac.n Guidebook.mn | nroff | col > Guidebook
  54. XGuidebook:    Guidebook.mn
  55. X    tbl Guidebook.mn | nroff -mn | col > Guidebook
  56. X
  57. X# Fancier output for those with ditroff, psdit and a PostScript printer.
  58. XGuidebook.ps:    Guidebook.mn
  59. X    tbl Guidebook.mn | ditroff -mn | psdit > Guidebook.ps
  60. X
  61. X# Guidebook.tex is the same as Guidebook.mn but formatted with LaTeX.
  62. X# - The invocation command for LaTeX may vary in different installations.
  63. X# - To print Guidebook.dvi you need to use a suitable dvi-driver.
  64. XGuidebook.dvi:    Guidebook.tex
  65. X    latex Guidebook.tex
  66. X
  67. Xdata:    data.base ../src/makedefs
  68. X    ( cd ../src ; ./makedefs -d )
  69. X
  70. Xrumors:    rumors.tru rumors.fal ../src/makedefs
  71. X    ( cd ../src ; ./makedefs -r )
  72. X
  73. Xspec_levs: castle.des endgame.des tower.des ../src/lev_comp
  74. X    ../src/lev_comp castle.des
  75. X    ../src/lev_comp endgame.des
  76. X    ../src/lev_comp tower.des
  77. X    touch spec_levs
  78. X
  79. Xspotless:
  80. X    -rm -f Guidebook Guidebook.ps Guidebook.dvi Guidebook.aux Guidebook.log data rumors castle endgame tower1 tower2 tower3
  81. END_OF_FILE
  82. if test 1889 -ne `wc -c <'auxil/Makefile.auxil'`; then
  83.     echo shar: \"'auxil/Makefile.auxil'\" unpacked with wrong size!
  84. fi
  85. # end of 'auxil/Makefile.auxil'
  86. echo shar: Extracting \"'src/lev_comp.c'\" \(33297 characters\)
  87. sed "s/^X//" >'src/lev_comp.c' <<'END_OF_FILE'
  88. X
  89. X# line 1 "lev_comp.y"
  90. X/*    SCCS Id: @(#)lev_comp.c    3.0    90/01/03
  91. X/*    Copyright (c) 1989 by Jean-Christophe Collet */
  92. X/* NetHack may be freely redistributed.  See license for details. */
  93. X
  94. X/*
  95. X * This file contains the Level Compiler code
  96. X * It may handle special mazes & special room-levels
  97. X */
  98. X
  99. X/* block some unused #defines to avoid overloading some cpp's */
  100. X#define MONDATA_H    /* comment line for pre-compiled headers */
  101. X#define MONFLAG_H    /* comment line for pre-compiled headers */
  102. X
  103. X#include "hack.h"
  104. X#include "sp_lev.h"
  105. X#ifndef O_WRONLY
  106. X# include <fcntl.h>
  107. X#endif
  108. X#ifndef O_CREAT    /* some older BSD systems do not define O_CREAT in <fcntl.h> */
  109. X# include <sys/file.h>
  110. X#endif
  111. X
  112. Xvoid FDECL(yyerror, (char *));
  113. Xvoid FDECL(yywarning, (char *));
  114. Xint NDECL(yylex);
  115. Xint NDECL(yyparse);
  116. X
  117. Xint FDECL(get_room_type, (char *));
  118. Xint FDECL(get_trap_type, (char *));
  119. Xint FDECL(get_monster_id, (char *, CHAR_P));
  120. Xint FDECL(get_object_id, (char *, CHAR_P));
  121. Xboolean FDECL(check_monster_char, (CHAR_P));
  122. Xboolean FDECL(check_object_char, (CHAR_P));
  123. Xvoid FDECL(scan_map, (char *));
  124. Xvoid NDECL(store_part);
  125. Xvoid FDECL(write_maze, (int, specialmaze *));
  126. X
  127. X#ifdef AMIGA
  128. Xchar *fgets();
  129. X# undef     fopen
  130. X# undef     printf
  131. X# undef     Printf
  132. X# define    Printf  printf
  133. X#ifndef    LATTICE
  134. X# define    memset(addr,val,len)    setmem(addr,len,val)
  135. X#endif
  136. X#endif
  137. X
  138. X#ifdef MSDOS
  139. X# undef exit
  140. Xextern void FDECL(exit, (int));
  141. X#endif
  142. X
  143. X#ifdef MACOS
  144. X# undef printf
  145. X# undef Printf
  146. X# define Printf printf
  147. X#endif
  148. X
  149. X#undef NULL
  150. X
  151. X#define MAX_REGISTERS    10
  152. X#define ERR        (-1)
  153. X
  154. Xstruct reg {
  155. X    int x1, y1;
  156. X    int x2, y2;
  157. X}        current_region;
  158. X
  159. Xstruct coord {
  160. X    int x;
  161. X    int y;
  162. X}        current_coord;
  163. X
  164. Xstruct {
  165. X    char *name;
  166. X    short type;
  167. X} trap_types[TRAPNUM-1] = {
  168. X    "monster",    MONST_TRAP,
  169. X    "statue",    STATUE_TRAP,
  170. X    "bear",        BEAR_TRAP,
  171. X    "arrow",    ARROW_TRAP,
  172. X    "dart",        DART_TRAP,
  173. X    "trapdoor",    TRAPDOOR,
  174. X    "teleport",    TELEP_TRAP,
  175. X    "pit",        PIT,
  176. X    "sleep gas",    SLP_GAS_TRAP,
  177. X    "magic",    MGTRP,
  178. X    "board",    SQBRD,
  179. X    "web",        WEB,
  180. X    "spiked pit",    SPIKED_PIT,
  181. X    "level teleport",LEVEL_TELEP,
  182. X#ifdef SPELLS
  183. X    "anti magic",    ANTI_MAGIC,
  184. X#endif
  185. X    "rust",        RUST_TRAP
  186. X#ifdef POLYSELF
  187. X    , "polymorph",    POLY_TRAP
  188. X#endif
  189. X#ifdef ARMY
  190. X    , "land mine",    LANDMINE
  191. X#endif
  192. X  };
  193. X
  194. Xstruct {
  195. X    char *name;
  196. X    int type;
  197. X} room_types[SHOPBASE-1] = {
  198. X    /* for historical reasons, room types are not contiguous numbers */
  199. X    /* (type 1 is skipped) */
  200. X    "ordinary",    OROOM,
  201. X#ifdef THRONES
  202. X    "throne",    COURT,
  203. X#endif
  204. X    "swamp",    SWAMP,
  205. X    "vault",    VAULT,
  206. X    "beehive",    BEEHIVE,
  207. X    "morgue",    MORGUE,
  208. X#ifdef ARMY
  209. X    "barracks",    BARRACKS,
  210. X#endif
  211. X    "zoo",        ZOO,
  212. X    "temple",    TEMPLE,
  213. X    "shop",        SHOPBASE,
  214. X};
  215. X
  216. Xshort db_dirs[4] = {
  217. X    DB_NORTH,
  218. X    DB_EAST,
  219. X    DB_SOUTH,
  220. X    DB_WEST
  221. X};
  222. X
  223. X#ifdef ALTARS
  224. Xstatic altar *tmpaltar[256];
  225. X#endif /* ALTARS /**/
  226. Xstatic lad *tmplad[256];
  227. Xstatic digpos *tmpdig[256];
  228. Xstatic char *tmpmap[ROWNO];
  229. Xstatic region *tmpreg[16];
  230. Xstatic door *tmpdoor[256];
  231. Xstatic trap *tmptrap[256];
  232. Xstatic monster *tmpmonst[256];
  233. Xstatic object *tmpobj[256];
  234. Xstatic drawbridge *tmpdb[256];
  235. Xstatic walk *tmpwalk[256];
  236. Xstatic mazepart *tmppart[10];
  237. Xstatic room *tmproom[MAXNROFROOMS];
  238. Xstatic specialmaze maze;
  239. X
  240. Xstatic char olist[MAX_REGISTERS], mlist[MAX_REGISTERS];
  241. Xstatic struct coord plist[MAX_REGISTERS];
  242. Xstatic int n_olist = 0, n_mlist = 0, n_plist = 0;
  243. X
  244. Xunsigned int nreg = 0, ndoor = 0, ntrap = 0, nmons = 0, nobj = 0;
  245. Xunsigned int ndb = 0, nwalk = 0, npart = 0, ndig = 0, nlad = 0;
  246. X#ifdef ALTARS
  247. Xunsigned int naltar = 0;
  248. X#endif /* ALTARS /*/
  249. X
  250. Xunsigned int max_x_map, max_y_map;
  251. X
  252. Xextern int fatal_error;
  253. Xextern char* fname;
  254. X
  255. X
  256. X# line 169 "lev_comp.y"
  257. Xtypedef union 
  258. X{
  259. X    int    i;
  260. X    char*    map;
  261. X} YYSTYPE;
  262. X# define CHAR 257
  263. X# define INTEGER 258
  264. X# define MAZE_ID 259
  265. X# define LEVEL_ID 260
  266. X# define GEOMETRY_ID 261
  267. X# define OBJECT_ID 262
  268. X# define MONSTER_ID 263
  269. X# define TRAP_ID 264
  270. X# define DOOR_ID 265
  271. X# define DRAWBRIDGE_ID 266
  272. X# define MAZEWALK_ID 267
  273. X# define REGION_ID 268
  274. X# define RANDOM_OBJECTS_ID 269
  275. X# define RANDOM_MONSTERS_ID 270
  276. X# define RANDOM_PLACES_ID 271
  277. X# define ALTAR_ID 272
  278. X# define LADDER_ID 273
  279. X# define NON_DIGGABLE_ID 274
  280. X# define ROOM_ID 275
  281. X# define DOOR_STATE 276
  282. X# define LIGHT_STATE 277
  283. X# define DIRECTION 278
  284. X# define RANDOM_TYPE 279
  285. X# define O_REGISTER 280
  286. X# define M_REGISTER 281
  287. X# define P_REGISTER 282
  288. X# define A_REGISTER 283
  289. X# define ALIGNMENT 284
  290. X# define LEFT_OR_RIGHT 285
  291. X# define CENTER 286
  292. X# define TOP_OR_BOT 287
  293. X# define ALTAR_TYPE 288
  294. X# define UP_OR_DOWN 289
  295. X# define STRING 290
  296. X# define MAP_ID 291
  297. X#define yyclearin yychar = -1
  298. X#define yyerrok yyerrflag = 0
  299. Xextern int yychar;
  300. Xextern short yyerrflag;
  301. X#ifndef YYMAXDEPTH
  302. X#define YYMAXDEPTH 150
  303. X#endif
  304. XYYSTYPE yylval, yyval;
  305. X# define YYERRCODE 256
  306. X
  307. X# line 654 "lev_comp.y"
  308. X
  309. X
  310. X/* 
  311. X * Find the type of a room in the table, knowing its name.
  312. X */
  313. X
  314. Xint
  315. Xget_room_type(s)
  316. Xchar *s;
  317. X{
  318. X    register int i;
  319. X    
  320. X    for(i=0; i < SHOPBASE -1; i++)
  321. X        if (!strcmp(s, room_types[i].name))
  322. X        return ((int) room_types[i].type);
  323. X    return ERR;
  324. X}
  325. X
  326. X/* 
  327. X * Find the type of a trap in the table, knowing its name.
  328. X */
  329. X
  330. Xint
  331. Xget_trap_type(s)
  332. Xchar *s;
  333. X{
  334. X    register int i;
  335. X    
  336. X    for(i=0; i < TRAPNUM - 1; i++)
  337. X        if(!strcmp(s,trap_types[i].name))
  338. X        return((int)trap_types[i].type);
  339. X    return ERR;
  340. X}
  341. X
  342. X/* 
  343. X * Find the index of a monster in the table, knowing its name.
  344. X */
  345. X
  346. Xint
  347. Xget_monster_id(s, c)
  348. Xchar *s;
  349. Xchar c;
  350. X{
  351. X    register int i;
  352. X    
  353. X    for(i=0; mons[i].mname[0]; i++)
  354. X        if(!strncmp(s, mons[i].mname, strlen(mons[i].mname))
  355. X           && c == mons[i].mlet)
  356. X        return i;
  357. X    return ERR;
  358. X}
  359. X
  360. X/* 
  361. X * Find the index of an object in the table, knowing its name.
  362. X */
  363. X
  364. Xint
  365. Xget_object_id(s, c)
  366. Xchar *s;
  367. Xchar c;
  368. X{
  369. X    register int i;
  370. X    
  371. X    for(i=0; i<=NROFOBJECTS;i++)
  372. X        if(objects[i].oc_name &&
  373. X           !strncmp(s, objects[i].oc_name, strlen(objects[i].oc_name))
  374. X           && c == objects[i].oc_olet)
  375. X        return i;
  376. X    return ERR;
  377. X}
  378. X
  379. X/* 
  380. X * Is the character 'c' a valid monster class ?
  381. X */
  382. X
  383. Xboolean
  384. Xcheck_monster_char(c)
  385. Xchar c;
  386. X{
  387. X    register int i;
  388. X    
  389. X    for(i=0; mons[i].mname[0]; i++)
  390. X        if( c ==  mons[i].mlet)
  391. X        return 1;
  392. X    return(0);
  393. X}
  394. X
  395. X/* 
  396. X * Is the character 'c' a valid object class ?
  397. X */
  398. X
  399. Xboolean
  400. Xcheck_object_char(c)
  401. Xchar c;
  402. X{
  403. X    register int i;
  404. X    
  405. X    for(i=0; i<=NROFOBJECTS;i++)
  406. X        if( c == objects[i].oc_olet)
  407. X        return 1;
  408. X    return 0;
  409. X}
  410. X
  411. X/* 
  412. X * Yep! LEX gives us the map in a raw mode.
  413. X * Just analyze it here.
  414. X */
  415. X
  416. Xvoid scan_map(map)
  417. Xchar *map;
  418. X{
  419. X    register int i, len;
  420. X    register char *s1, *s2;
  421. X    int max_len = 0;
  422. X    int max_hig = 0;
  423. X    
  424. X    /* First : find the max width of the map */
  425. X
  426. X    s1 = map;
  427. X    while (s1 && *s1) {
  428. X        s2 = index(s1, '\n');
  429. X        if (s2) {
  430. X            if (s2-s1 > max_len)
  431. X                max_len = s2-s1;
  432. X            s1 = s2 + 1;
  433. X        } else {
  434. X            if (strlen(s1) > max_len)
  435. X                max_len = strlen(s1);
  436. X            s1 = (char *) 0;
  437. X        }
  438. X    }
  439. X
  440. X    /* Then parse it now */
  441. X
  442. X    while (map && *map) {
  443. X        tmpmap[max_hig] = (char *) alloc(max_len);
  444. X        s1 = index(map, '\n');
  445. X        if (s1) {
  446. X            len = s1 - map;
  447. X            s1++;
  448. X        } else {
  449. X            len = strlen(map);
  450. X            s1 = map + len;
  451. X        }
  452. X        for(i=0; i<len; i++)
  453. X            switch(map[i]) {
  454. X              case '-' : tmpmap[max_hig][i] = HWALL; break;
  455. X              case '|' : tmpmap[max_hig][i] = VWALL; break;
  456. X              case '+' : tmpmap[max_hig][i] = DOOR; break;
  457. X              case 'S' : tmpmap[max_hig][i] = SDOOR; break;
  458. X              case '{' : 
  459. X#ifdef FOUNTAINS
  460. X                  tmpmap[max_hig][i] = FOUNTAIN;
  461. X#else
  462. X                  tmpmap[max_hig][i] = ROOM;
  463. X                  yywarning("Fountains are not allowed in this version!  Ignoring...");
  464. X#endif
  465. X                  break;
  466. X              case '\\' : 
  467. X#ifdef THRONES
  468. X                  tmpmap[max_hig][i] = THRONE;
  469. X#else
  470. X                  tmpmap[max_hig][i] = ROOM;
  471. X                  yywarning("Thrones are not allowed in this version!  Ignoring...");
  472. X#endif
  473. X                  break;
  474. X              case 'K' : 
  475. X#ifdef SINKS
  476. X                  tmpmap[max_hig][i] = SINK;
  477. X#else
  478. X                  tmpmap[max_hig][i] = ROOM;
  479. X                  yywarning("Sinks are not allowed in this version!  Ignoring...");
  480. X#endif
  481. X                  break;
  482. X              case '}' : tmpmap[max_hig][i] = MOAT; break;
  483. X              case '#' : tmpmap[max_hig][i] = CORR; break;
  484. X              default  : tmpmap[max_hig][i] = ROOM; break;
  485. X            }
  486. X        while(i < max_len)
  487. X            tmpmap[max_hig][i++] = ROOM;
  488. X        map = s1;
  489. X        max_hig++;
  490. X    }
  491. X
  492. X    /* Memorize boundaries */
  493. X
  494. X    max_x_map = max_len - 1;
  495. X    max_y_map = max_hig - 1;
  496. X
  497. X    /* Store the map into the mazepart structure */
  498. X
  499. X    tmppart[npart]->xsize = max_len;
  500. X    tmppart[npart]->ysize = max_hig;
  501. X    tmppart[npart]->map = (char **) alloc(max_hig*sizeof(char *));
  502. X    for(i = 0; i< max_hig; i++)
  503. X        tmppart[npart]->map[i] = tmpmap[i];
  504. X}
  505. X
  506. X/* 
  507. X * Here we want to store the maze part we just got.
  508. X */
  509. X
  510. Xvoid
  511. Xstore_part()
  512. X{
  513. X    register int i;
  514. X
  515. X    /* Ok, We got the whole part, now we store it. */
  516. X    
  517. X    /* The Regions */
  518. X
  519. X    if(tmppart[npart]->nreg = nreg) {
  520. X        tmppart[npart]->regions = (region**)alloc(sizeof(region*) * nreg);
  521. X        for(i=0;i<nreg;i++)
  522. X            tmppart[npart]->regions[i] = tmpreg[i];
  523. X    }
  524. X    nreg = 0;
  525. X
  526. X    /* the doors */
  527. X
  528. X    if(tmppart[npart]->ndoor = ndoor) {
  529. X        tmppart[npart]->doors = (door **)alloc(sizeof(door *) * ndoor);
  530. X        for(i=0;i<ndoor;i++)
  531. X            tmppart[npart]->doors[i] = tmpdoor[i];
  532. X    }
  533. X    ndoor = 0;
  534. X
  535. X    /* the traps */
  536. X
  537. X    if(tmppart[npart]->ntraps = ntrap) {
  538. X        tmppart[npart]->traps = (trap **)alloc(sizeof(trap*) * ntrap);
  539. X        for(i=0;i<ntrap;i++)
  540. X            tmppart[npart]->traps[i] = tmptrap[i];
  541. X    }
  542. X    ntrap = 0;
  543. X
  544. X    /* the monsters */
  545. X
  546. X    if(tmppart[npart]->nmonster = nmons) {
  547. X        tmppart[npart]->monsters = (monster**)alloc(sizeof(monster*)*nmons);
  548. X        for(i=0;i<nmons;i++)
  549. X            tmppart[npart]->monsters[i] = tmpmonst[i];
  550. X    }
  551. X    nmons = 0;
  552. X
  553. X    /* the objects */
  554. X
  555. X    if(tmppart[npart]->nobjects = nobj) {
  556. X        tmppart[npart]->objects = (object**)alloc(sizeof(object*)*nobj);
  557. X        for(i=0;i<nobj;i++)
  558. X            tmppart[npart]->objects[i] = tmpobj[i];
  559. X    }
  560. X    nobj = 0;
  561. X
  562. X    /* the drawbridges */
  563. X
  564. X    if(tmppart[npart]->ndrawbridge = ndb) {
  565. X        tmppart[npart]->drawbridges = (drawbridge**)alloc(sizeof(drawbridge*)*ndb);
  566. X        for(i=0;i<ndb;i++)
  567. X            tmppart[npart]->drawbridges[i] = tmpdb[i];
  568. X    }
  569. X    ndb = 0;
  570. X
  571. X    /* The walkmaze directives */
  572. X
  573. X    if(tmppart[npart]->nwalk = nwalk) {
  574. X        tmppart[npart]->walks = (walk**)alloc(sizeof(walk*)*nwalk);
  575. X        for(i=0;i<nwalk;i++)
  576. X            tmppart[npart]->walks[i] = tmpwalk[i];
  577. X    }
  578. X    nwalk = 0;
  579. X
  580. X    /* The non_diggable directives */
  581. X
  582. X    if(tmppart[npart]->ndig = ndig) {
  583. X        tmppart[npart]->digs = (digpos **) alloc(sizeof(digpos*) * ndig);
  584. X        for(i=0;i<ndig;i++)
  585. X            tmppart[npart]->digs[i] = tmpdig[i];
  586. X    }
  587. X    ndig = 0;
  588. X
  589. X    /* The ladders */
  590. X
  591. X    if(tmppart[npart]->nlad = nlad) {
  592. X        tmppart[npart]->lads = (lad **) alloc(sizeof(lad*) * nlad);
  593. X        for(i=0;i<nlad;i++)
  594. X            tmppart[npart]->lads[i] = tmplad[i];
  595. X    }
  596. X    nlad = 0;
  597. X#ifdef ALTARS
  598. X    /* The altars */
  599. X
  600. X    if(tmppart[npart]->naltar = naltar) {
  601. X        tmppart[npart]->altars = (altar**)alloc(sizeof(altar*) * naltar);
  602. X        for(i=0;i<naltar;i++)
  603. X            tmppart[npart]->altars[i] = tmpaltar[i];
  604. X    }
  605. X    naltar = 0;
  606. X#endif /* ALTARS /**/
  607. X    npart++;
  608. X    n_plist = n_mlist = n_olist = 0;
  609. X}
  610. X
  611. X/* 
  612. X * Here we write the structure of the maze in the specified file (fd).
  613. X * Also, we have to free the memory allocated via alloc()
  614. X */
  615. X
  616. Xvoid
  617. Xwrite_maze(fd, maze)
  618. Xint fd;
  619. Xspecialmaze *maze;
  620. X{
  621. X    char c;
  622. X    short i,j;
  623. X    mazepart *pt;
  624. X
  625. X    c = 2;
  626. X    (void) write(fd, &c, 1);    /* Header for special mazes */
  627. X    (void) write(fd, &(maze->numpart), 1);    /* Number of parts */
  628. X    for(i=0;i<maze->numpart;i++) {
  629. X        pt = maze->parts[i];
  630. X
  631. X        /* First, write the map */
  632. X
  633. X        (void) write(fd, &(pt->halign), 1);
  634. X        (void) write(fd, &(pt->valign), 1);
  635. X        (void) write(fd, &(pt->xsize), 1);
  636. X        (void) write(fd, &(pt->ysize), 1);
  637. X        for(j=0;j<pt->ysize;j++) {
  638. X            (void) write(fd, pt->map[j], pt->xsize);
  639. X            free(pt->map[j]);
  640. X        }
  641. X        free(pt->map);
  642. X
  643. X        /* The random registers */
  644. X        (void) write(fd, &(pt->nrobjects), 1);
  645. X        if(pt->nrobjects) {
  646. X            (void) write(fd, pt->robjects, pt->nrobjects);
  647. X            free(pt->robjects);
  648. X        }
  649. X        (void) write(fd, &(pt->nloc), 1);
  650. X        if(pt->nloc) {
  651. X        (void) write(fd,pt->rloc_x, pt->nloc);
  652. X        (void) write(fd,pt->rloc_y, pt->nloc);
  653. X        free(pt->rloc_x);
  654. X        free(pt->rloc_y);
  655. X        }
  656. X        (void) write(fd,&(pt->nrmonst), 1);
  657. X        if(pt->nrmonst) {
  658. X            (void) write(fd, pt->rmonst, pt->nrmonst);
  659. X            free(pt->rmonst);
  660. X        }
  661. X
  662. X        /* subrooms */
  663. X        (void) write(fd, &(pt->nreg), 1);
  664. X        for(j=0;j<pt->nreg;j++) {
  665. X            (void) write(fd,(genericptr_t) pt->regions[j], sizeof(region));
  666. X            free(pt->regions[j]);
  667. X        }
  668. X        if(pt->nreg > 0)
  669. X        free(pt->regions);
  670. X
  671. X        /* the doors */
  672. X        (void) write(fd,&(pt->ndoor),1);
  673. X        for(j=0;j<pt->ndoor;j++) {
  674. X            (void) write(fd,(genericptr_t) pt->doors[j], sizeof(door));
  675. X            free(pt->doors[j]);
  676. X        }
  677. X        if (pt->ndoor > 0)
  678. X        free(pt->doors);
  679. X
  680. X        /* The traps */
  681. X        (void) write(fd,&(pt->ntraps), 1);
  682. X        for(j=0;j<pt->ntraps;j++) {
  683. X            (void) write(fd,(genericptr_t) pt->traps[j], sizeof(trap));
  684. X            free(pt->traps[j]);
  685. X        }
  686. X        if (pt->ntraps)
  687. X        free(pt->traps);
  688. X
  689. X        /* The monsters */
  690. X        (void) write(fd, &(pt->nmonster), 1);
  691. X        for(j=0;j<pt->nmonster;j++) {
  692. X            (void) write(fd,(genericptr_t) pt->monsters[j], sizeof(monster));
  693. X            free(pt->monsters[j]);
  694. X        }
  695. X        if (pt->nmonster > 0)
  696. X        free(pt->monsters);
  697. X
  698. X        /* The objects */
  699. X        (void) write(fd, &(pt->nobjects), 1);
  700. X        for(j=0;j<pt->nobjects;j++) {
  701. X            (void) write(fd,(genericptr_t) pt->objects[j], sizeof(object));
  702. X            free(pt->objects[j]);
  703. X        }
  704. X        if(pt->nobjects > 0)
  705. X        free(pt->objects);
  706. X
  707. X        /* The drawbridges */
  708. X        (void) write(fd, &(pt->ndrawbridge),1);
  709. X        for(j=0;j<pt->ndrawbridge;j++) {
  710. X            (void) write(fd,(genericptr_t) pt->drawbridges[j], sizeof(drawbridge));
  711. X            free(pt->drawbridges[j]);
  712. X        }
  713. X        if(pt->ndrawbridge > 0)
  714. X        free(pt->drawbridges);
  715. X
  716. X        /* The mazewalk directives */
  717. X        (void) write(fd, &(pt->nwalk), 1);
  718. X        for(j=0; j<pt->nwalk; j++) {
  719. X            (void) write(fd,(genericptr_t) pt->walks[j], sizeof(walk));
  720. X            free(pt->walks[j]);
  721. X        }
  722. X        if (pt->nwalk > 0)
  723. X        free(pt->walks);
  724. X
  725. X        /* The non_diggable directives */
  726. X        (void) write(fd, &(pt->ndig), 1);
  727. X        for(j=0;j<pt->ndig;j++) {
  728. X            (void) write(fd,(genericptr_t) pt->digs[j], sizeof(digpos));
  729. X            free(pt->digs[j]);
  730. X        }
  731. X        if (pt->ndig > 0)
  732. X        free(pt->digs);
  733. X
  734. X        /* The ladders */
  735. X        (void) write(fd, &(pt->nlad), 1);
  736. X        for(j=0;j<pt->nlad;j++) {
  737. X            (void) write(fd,(genericptr_t) pt->lads[j], sizeof(lad));
  738. X            free(pt->lads[j]);
  739. X        }
  740. X        if (pt->nlad > 0)
  741. X        free(pt->lads);
  742. X#ifdef ALTARS
  743. X        /* The altars */
  744. X        (void) write(fd, &(pt->naltar), 1);
  745. X        for(j=0;j<pt->naltar;j++) {
  746. X            (void) write(fd,(genericptr_t) pt->altars[j], sizeof(altar));
  747. X            free(pt->altars[j]);
  748. X        }
  749. X        if (pt->naltar > 0)
  750. X        free(pt->altars);
  751. X#endif /* ALTARS /**/
  752. X        free(pt);
  753. X    }
  754. X}
  755. Xshort yyexca[] ={
  756. X-1, 1,
  757. X    0, -1,
  758. X    -2, 0,
  759. X-1, 67,
  760. X    44, 27,
  761. X    -2, 26,
  762. X    };
  763. X# define YYNPROD 87
  764. X# define YYLAST 251
  765. Xshort yyact[]={
  766. X
  767. X 165, 130, 126,  91,  16,  19, 169, 146,  69,  72,
  768. X 145,  19,  19,  19,  19, 168,  75,  74,  26,  27,
  769. X 143, 137,  12, 138, 144, 141,  65,  87, 134,   6,
  770. X  88,  78, 174,  80,  40,  39,  42,  41,  43,  46,
  771. X  44, 171, 170, 156,  45,  47,  48, 148,  83,  85,
  772. X  22,  24,  23, 135, 131, 127, 116, 105,  72,  65,
  773. X  18,  92,  93,  86,  66,  70, 172,  63, 154, 152,
  774. X 150, 158, 114, 110, 108,  97,  62,  61,  60,  59,
  775. X  58,  57,  56,  55,  54,  53,  51,  50,  49,  17,
  776. X  13,  64, 173,  71, 166, 157, 155, 153, 151, 149,
  777. X 139, 122, 121, 119, 118, 117, 115, 113, 112, 111,
  778. X 109, 107, 106,  68, 103,  52, 175,  90, 159,  69,
  779. X  98,  99, 100, 101,   8,   2,  94,  84,  79,   7,
  780. X  81,  76,  38,  37,  14,  36,  35,  34, 102,  33,
  781. X  32,  31,  30,  29,  28, 104,  82,  77,  67,  21,
  782. X  11,  20,  15,  10,   9,   4,   3,   1, 128, 124,
  783. X   5, 142, 167, 140, 136, 163,  89,  73, 125,  25,
  784. X 129, 120, 123, 132, 133,   0,   0,   0,   0,   0,
  785. X   0,   0,   0,   0,  68,   0, 147,   0,   0,   0,
  786. X   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  787. X   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  788. X   0, 160,   0, 161,   0,   0, 164, 162,   0,   0,
  789. X   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  790. X   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  791. X   0,   0,   0,   0,   0,   0,   0,  95,   0,   0,
  792. X  96 };
  793. Xshort yypact[]={
  794. X
  795. X-230,-1000,-1000,-230,-1000,-239,  32,-1000,-1000,-239,
  796. X-1000,-287,  31,-285,-1000,-219,-1000,-267,-1000,-1000,
  797. X-228,-1000,  30,  29,  28,  71,-1000,-1000,-1000,-1000,
  798. X-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,  27,
  799. X  26,  25,  24,  23,  22,  21,  20,  19,  18,-198,
  800. X  79,-199,-270,-248,-231,-249,-276, -32,  80, -32,
  801. X -32, -32,  80,-1000,  70,-1000,-1000,-1000,-1000,-201,
  802. X-1000,  68,-1000,-1000,-1000,-1000,  67,-1000,-1000,-1000,
  803. X -17,  66,-1000,-1000,-1000, -18,  65,-1000,-1000,  64,
  804. X-1000,-1000,  63,-1000,-1000,-1000, -19,  62,-202,  61,
  805. X  60,  59,-1000,-198,  58,  57,-199,-277,-203,-278,
  806. X-204, -32, -32,-250,-205,-256,  56,-259,-268,-282,
  807. X-1000,  79,-211,-1000,  55,-1000,-1000, -23,  54,-1000,
  808. X-1000, -24,-1000,-1000,  53, -25,  52,-1000,-1000,-215,
  809. X  51,-1000,-1000,-1000, -20,-1000,-1000,-1000,  77, -32,
  810. X-1000, -32,-1000,-249,-1000,-279,  50,-273,-216,-1000,
  811. X-1000,-1000,-1000,-1000,-1000,-1000,-217,-1000,-1000,-1000,
  812. X -27,  48,-1000,-226,  75,-1000 };
  813. Xshort yypgo[]={
  814. X
  815. X   0, 169, 167, 166, 165,  63, 164, 163, 162, 161,
  816. X  60, 160, 159, 158, 157, 125, 156, 155, 124, 154,
  817. X 153, 152, 151, 150, 149,  67,  64,  65,  91,  93,
  818. X 148, 145, 144, 143, 142, 141, 140, 139, 137, 136,
  819. X 135, 133, 132, 131,  61, 130,  75, 128, 127,  62,
  820. X 126 };
  821. Xshort yyr1[]={
  822. X
  823. X   0,  14,  14,  15,  15,  16,  17,  11,  18,  18,
  824. X  19,  20,  23,   1,   1,   2,   2,  21,  21,  24,
  825. X  24,  24,  25,  25,  27,  27,  26,  31,  26,  22,
  826. X  22,  32,  32,  32,  32,  32,  32,  32,  32,  32,
  827. X  32,  33,  34,  35,  36,  37,  40,  41,  42,  38,
  828. X  39,  43,  43,  43,  45,  45,  45,  12,  12,  13,
  829. X  13,   3,   3,   4,   4,  44,  44,  44,   5,   5,
  830. X   6,   6,   7,   7,   7,   8,   8,  50,  48,  47,
  831. X   9,  30,  29,  28,  10,  49,  46 };
  832. Xshort yyr2[]={
  833. X
  834. X   0,   0,   1,   1,   2,   1,   2,   3,   1,   2,
  835. X   3,   2,   5,   1,   1,   1,   1,   0,   2,   3,
  836. X   3,   3,   1,   3,   1,   3,   1,   0,   4,   0,
  837. X   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  838. X   1,   7,   7,   5,   5,   7,   5,   5,   3,   7,
  839. X   7,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  840. X   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  841. X   1,   1,   1,   1,   1,   1,   1,   4,   4,   4,
  842. X   4,   1,   1,   1,   1,   5,   9 };
  843. Xshort yychk[]={
  844. X
  845. X-1000, -14, -15, -16, -17, -11, 259, -15, -18, -19,
  846. X -20, -23, 261,  58, -18, -21, 291,  58, -10, 290,
  847. X -22, -24, 269, 271, 270,  -1, 285, 286, -32, -33,
  848. X -34, -35, -36, -37, -38, -39, -40, -41, -42, 263,
  849. X 262, 265, 264, 266, 268, 272, 267, 273, 274,  58,
  850. X  58,  58,  44,  58,  58,  58,  58,  58,  58,  58,
  851. X  58,  58,  58, -25, -28, 257, -26, -30, -49,  40,
  852. X -27, -29, 257,  -2, 287, 286, -43, -29, 279, -47,
  853. X 281, -45, -28, 279, -48, 280,  -5, 276, 279,  -3,
  854. X -10, 279, -44, -49, -50, 279, 282, -46,  40, -44,
  855. X -44, -44, -46,  44, -31, 258,  44,  44,  91,  44,
  856. X  91,  44,  44,  44,  91,  44, 258,  44,  44,  44,
  857. X -25,  44,  44, -27, -12, -10, 279, 258, -13, -10,
  858. X 279, 258, -44, -44, 278, 258,  -6, 277, 279,  44,
  859. X  -7, 284,  -9, 279, 283, 278, 289, -26, 258,  44,
  860. X  93,  44,  93,  44,  93,  44, 258,  44,  91,  41,
  861. X -44, -44,  -5,  -4, -10, 279,  44,  -8, 288, 279,
  862. X 258, 258,  93,  44, 258,  41 };
  863. Xshort yydef[]={
  864. X
  865. X   1,  -2,   2,   3,   5,   0,   0,   4,   6,   8,
  866. X  17,   0,   0,   0,   9,  29,  11,   0,   7,  84,
  867. X  10,  18,   0,   0,   0,   0,  13,  14,  30,  31,
  868. X  32,  33,  34,  35,  36,  37,  38,  39,  40,   0,
  869. X   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  870. X   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  871. X   0,   0,   0,  19,  22,  83,  20,  -2,  81,   0,
  872. X  21,  24,  82,  12,  15,  16,   0,  51,  52,  53,
  873. X   0,   0,  54,  55,  56,   0,   0,  68,  69,   0,
  874. X  61,  62,   0,  65,  66,  67,   0,   0,   0,   0,
  875. X   0,   0,  48,   0,   0,   0,   0,   0,   0,   0,
  876. X   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  877. X  23,   0,   0,  25,   0,  57,  58,   0,   0,  59,
  878. X  60,   0,  43,  44,   0,   0,   0,  70,  71,   0,
  879. X   0,  72,  73,  74,   0,  46,  47,  28,   0,   0,
  880. X  79,   0,  78,   0,  77,   0,   0,   0,   0,  85,
  881. X  41,  42,  45,  49,  63,  64,   0,  50,  75,  76,
  882. X   0,   0,  80,   0,   0,  86 };
  883. X#ifndef lint
  884. Xstatic char yaccpar_sccsid[] = "@(#)yaccpar    4.1    (Berkeley)    2/11/83";
  885. X#endif not lint
  886. X
  887. X#
  888. X# define YYFLAG -1000
  889. X# define YYERROR goto yyerrlab
  890. X# define YYACCEPT return(0)
  891. X# define YYABORT return(1)
  892. X
  893. X/*    parser for yacc output    */
  894. X
  895. X#ifdef YYDEBUG
  896. Xint yydebug = 0; /* 1 for debugging */
  897. X#endif
  898. XYYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
  899. Xint yychar = -1; /* current input token number */
  900. Xint yynerrs = 0;  /* number of errors */
  901. Xshort yyerrflag = 0;  /* error recovery flag */
  902. X
  903. Xyyparse() {
  904. X
  905. X    short yys[YYMAXDEPTH];
  906. X    short yyj, yym;
  907. X    register YYSTYPE *yypvt;
  908. X    register short yystate, *yyps, yyn;
  909. X    register YYSTYPE *yypv;
  910. X    register short *yyxi;
  911. X
  912. X    yystate = 0;
  913. X    yychar = -1;
  914. X    yynerrs = 0;
  915. X    yyerrflag = 0;
  916. X    yyps= &yys[-1];
  917. X    yypv= &yyv[-1];
  918. X
  919. X yystack:    /* put a state and value onto the stack */
  920. X
  921. X#ifdef YYDEBUG
  922. X    if( yydebug  ) printf( "state %d, char 0%o\n", yystate, yychar );
  923. X#endif
  924. X        if( ++yyps> &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); }
  925. X        *yyps = yystate;
  926. X        ++yypv;
  927. X        *yypv = yyval;
  928. X
  929. X yynewstate:
  930. X
  931. X    yyn = yypact[yystate];
  932. X
  933. X    if( yyn<= YYFLAG ) goto yydefault; /* simple state */
  934. X
  935. X    if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
  936. X    if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
  937. X
  938. X    if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
  939. X        yychar = -1;
  940. X        yyval = yylval;
  941. X        yystate = yyn;
  942. X        if( yyerrflag > 0 ) --yyerrflag;
  943. X        goto yystack;
  944. X        }
  945. X
  946. X yydefault:
  947. X    /* default state action */
  948. X
  949. X    if( (yyn=yydef[yystate]) == -2 ) {
  950. X        if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
  951. X        /* look through exception table */
  952. X
  953. X        for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
  954. X
  955. X        while( *(yyxi+=2) >= 0 ){
  956. X            if( *yyxi == yychar ) break;
  957. X            }
  958. X        if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
  959. X        }
  960. X
  961. X    if( yyn == 0 ){ /* error */
  962. X        /* error ... attempt to resume parsing */
  963. X
  964. X        switch( yyerrflag ){
  965. X
  966. X        case 0:   /* brand new error */
  967. X
  968. X            yyerror( "syntax error" );
  969. X        yyerrlab:
  970. X            ++yynerrs;
  971. X
  972. X        case 1:
  973. X        case 2: /* incompletely recovered error ... try again */
  974. X
  975. X            yyerrflag = 3;
  976. X
  977. X            /* find a state where "error" is a legal shift action */
  978. X
  979. X            while ( yyps >= yys ) {
  980. X               yyn = yypact[*yyps] + YYERRCODE;
  981. X               if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
  982. X                  yystate = yyact[yyn];  /* simulate a shift of "error" */
  983. X                  goto yystack;
  984. X                  }
  985. X               yyn = yypact[*yyps];
  986. X
  987. X               /* the current yyps has no shift onn "error", pop stack */
  988. X
  989. X#ifdef YYDEBUG
  990. X               if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
  991. X#endif
  992. X               --yyps;
  993. X               --yypv;
  994. X               }
  995. X
  996. X            /* there is no state on the stack with an error shift ... abort */
  997. X
  998. X    yyabort:
  999. X            return(1);
  1000. X
  1001. X
  1002. X        case 3:  /* no shift yet; clobber input char */
  1003. X
  1004. X#ifdef YYDEBUG
  1005. X            if( yydebug ) printf( "error recovery discards char %d\n", yychar );
  1006. X#endif
  1007. X
  1008. X            if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
  1009. X            yychar = -1;
  1010. X            goto yynewstate;   /* try again in the same state */
  1011. X
  1012. X            }
  1013. X
  1014. X        }
  1015. X
  1016. X    /* reduction by production yyn */
  1017. X
  1018. X#ifdef YYDEBUG
  1019. X        if( yydebug ) printf("reduce %d\n",yyn);
  1020. X#endif
  1021. X        yyps -= yyr2[yyn];
  1022. X        yypvt = yypv;
  1023. X        yypv -= yyr2[yyn];
  1024. X        yyval = yypv[1];
  1025. X        yym=yyn;
  1026. X            /* consult goto table to find next state */
  1027. X        yyn = yyr1[yyn];
  1028. X        yyj = yypgo[yyn] + *yyps + 1;
  1029. X        if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
  1030. X        switch(yym){
  1031. X            
  1032. Xcase 6:
  1033. X# line 201 "lev_comp.y"
  1034. X{
  1035. X              int fout, i;
  1036. X
  1037. X              if (fatal_error > 0)
  1038. X                  fprintf(stderr,"%s : %d errors detected. No output created!\n", fname, fatal_error);
  1039. X              else {
  1040. X#ifdef MACOS
  1041. X                  OSErr    result;
  1042. X                  
  1043. X                  result = Create(CtoPstr(yypvt[-1].map), 0, CREATOR, AUXIL_TYPE);
  1044. X                  (void)PtoCstr(yypvt[-1].map);
  1045. X#endif        
  1046. X                  fout = open(yypvt[-1].map, O_WRONLY | O_CREAT
  1047. X#if defined(MSDOS) || defined(MACOS)
  1048. X                          | O_BINARY
  1049. X#endif /* MSDOS || MACOS */
  1050. X                          , 0644);
  1051. X                  if (fout < 0) {
  1052. X                      yyerror("Can't open output file!!");
  1053. X                      exit(1);
  1054. X                  }
  1055. X                  maze.numpart = npart;
  1056. X                  maze.parts = (mazepart**) alloc(sizeof(mazepart*)*npart);
  1057. X                  for(i=0;i<npart;i++)
  1058. X                      maze.parts[i] = tmppart[i];
  1059. X                  write_maze(fout, &maze);
  1060. X                  (void) close(fout);
  1061. X                  npart = 0;
  1062. X              }
  1063. X          } break;
  1064. Xcase 7:
  1065. X# line 233 "lev_comp.y"
  1066. X{
  1067. X              yyval.map = yypvt[-0].map;
  1068. X          } break;
  1069. Xcase 10:
  1070. X# line 241 "lev_comp.y"
  1071. X{
  1072. X            store_part();
  1073. X          } break;
  1074. Xcase 11:
  1075. X# line 246 "lev_comp.y"
  1076. X{
  1077. X            tmppart[npart] = (mazepart *) alloc(sizeof(mazepart));
  1078. X            tmppart[npart]->halign = yypvt[-1].i % 10;
  1079. X            tmppart[npart]->valign = yypvt[-1].i / 10;
  1080. X            tmppart[npart]->nrobjects = 0;
  1081. X            tmppart[npart]->nloc = 0;
  1082. X            tmppart[npart]->nrmonst = 0;
  1083. X            scan_map(yypvt[-0].map);
  1084. X          } break;
  1085. Xcase 12:
  1086. X# line 257 "lev_comp.y"
  1087. X{
  1088. X              yyval.i = yypvt[-2].i + ( yypvt[-0].i * 10 );
  1089. X          } break;
  1090. Xcase 19:
  1091. X# line 271 "lev_comp.y"
  1092. X{
  1093. X              if (tmppart[npart]->nrobjects)
  1094. X                  yyerror("Object registers already initialized!");
  1095. X              else {
  1096. X                  tmppart[npart]->robjects = (char *) alloc(n_olist);
  1097. X                  memcpy(tmppart[npart]->robjects, olist, n_olist);
  1098. X                  tmppart[npart]->nrobjects = n_olist;
  1099. X              }
  1100. X          } break;
  1101. Xcase 20:
  1102. X# line 281 "lev_comp.y"
  1103. X{
  1104. X              if (tmppart[npart]->nloc)
  1105. X                  yyerror("Location registers already initialized!");
  1106. X              else {
  1107. X                  register int i;
  1108. X                  tmppart[npart]->rloc_x = (char *) alloc(n_plist);
  1109. X                  tmppart[npart]->rloc_y = (char *) alloc(n_plist);
  1110. X                  for(i=0;i<n_plist;i++) {
  1111. X                      tmppart[npart]->rloc_x[i] = plist[i].x;
  1112. X                      tmppart[npart]->rloc_y[i] = plist[i].y;
  1113. X                  }
  1114. X                  tmppart[npart]->nloc = n_plist;
  1115. X              }
  1116. X          } break;
  1117. Xcase 21:
  1118. X# line 296 "lev_comp.y"
  1119. X{
  1120. X              if (tmppart[npart]->nrmonst)
  1121. X                  yyerror("Monster registers already initialized!");
  1122. X              else {
  1123. X                  tmppart[npart]->rmonst = (char *) alloc(n_mlist);
  1124. X                  memcpy(tmppart[npart]->rmonst, mlist, n_mlist);
  1125. X                  tmppart[npart]->nrmonst = n_mlist;
  1126. X              }
  1127. X          } break;
  1128. Xcase 22:
  1129. X# line 307 "lev_comp.y"
  1130. X{
  1131. X              if (n_olist < MAX_REGISTERS)
  1132. X                  olist[n_olist++] = yypvt[-0].i;
  1133. X              else
  1134. X                  yyerror("Object list too long!");
  1135. X          } break;
  1136. Xcase 23:
  1137. X# line 314 "lev_comp.y"
  1138. X{
  1139. X              if (n_olist < MAX_REGISTERS)
  1140. X                  olist[n_olist++] = yypvt[-2].i;
  1141. X              else
  1142. X                  yyerror("Object list too long!");
  1143. X          } break;
  1144. Xcase 24:
  1145. X# line 322 "lev_comp.y"
  1146. X{
  1147. X              if (n_mlist < MAX_REGISTERS)
  1148. X                  mlist[n_mlist++] = yypvt[-0].i;
  1149. X              else
  1150. X                  yyerror("Monster list too long!");
  1151. X          } break;
  1152. Xcase 25:
  1153. X# line 329 "lev_comp.y"
  1154. X{
  1155. X              if (n_mlist < MAX_REGISTERS)
  1156. X                  mlist[n_mlist++] = yypvt[-2].i;
  1157. X              else
  1158. X                  yyerror("Monster list too long!");
  1159. X          } break;
  1160. Xcase 26:
  1161. X# line 337 "lev_comp.y"
  1162. X{
  1163. X              if (n_plist < MAX_REGISTERS)
  1164. X                  plist[n_plist++] = current_coord;
  1165. X              else
  1166. X                  yyerror("Location list too long!");
  1167. X          } break;
  1168. Xcase 27:
  1169. X# line 344 "lev_comp.y"
  1170. X{
  1171. X              if (n_plist < MAX_REGISTERS)
  1172. X                  plist[n_plist++] = current_coord;
  1173. X              else
  1174. X                  yyerror("Location list too long!");
  1175. X          } break;
  1176. Xcase 41:
  1177. X# line 366 "lev_comp.y"
  1178. X{
  1179. X              int token;
  1180. X
  1181. X              tmpmonst[nmons] = (monster *) alloc(sizeof(monster));
  1182. X              tmpmonst[nmons]->x = current_coord.x;
  1183. X              tmpmonst[nmons]->y = current_coord.y;
  1184. X              tmpmonst[nmons]->class = yypvt[-4].i;
  1185. X              if (!yypvt[-2].map)
  1186. X                  tmpmonst[nmons]->id = -1;
  1187. X              else {
  1188. X                  token = get_monster_id(yypvt[-2].map, (char) yypvt[-4].i);
  1189. X                  if (token == ERR) {
  1190. X                      yywarning("Illegal monster name!  Making random monster.");
  1191. X                      tmpmonst[nmons]->id = -1;
  1192. X                  } else
  1193. X                      tmpmonst[nmons]->id = token;
  1194. X              }
  1195. X              nmons++;
  1196. X          } break;
  1197. Xcase 42:
  1198. X# line 387 "lev_comp.y"
  1199. X{
  1200. X              int token;
  1201. X
  1202. X              tmpobj[nobj] = (object *) alloc(sizeof(object));
  1203. X              tmpobj[nobj]->x = current_coord.x;
  1204. X              tmpobj[nobj]->y = current_coord.y;
  1205. X              tmpobj[nobj]->class = yypvt[-4].i;
  1206. X              if (!yypvt[-2].map)
  1207. X                  tmpobj[nobj]->id = -1;
  1208. X              else {
  1209. X                  token = get_object_id(yypvt[-2].map, (char) yypvt[-4].i);
  1210. X                  if (token == ERR) {
  1211. X                      yywarning("Illegal object name!  Making random object.");
  1212. X                      tmpobj[nobj]->id = -1;
  1213. X                  } else
  1214. X                      tmpobj[nobj]->id = token;
  1215. X              }
  1216. X              nobj++;
  1217. X          } break;
  1218. Xcase 43:
  1219. X# line 408 "lev_comp.y"
  1220. X{
  1221. X            tmpdoor[ndoor] = (door *) alloc(sizeof(door));
  1222. X            tmpdoor[ndoor]->x = current_coord.x;
  1223. X            tmpdoor[ndoor]->y = current_coord.y;
  1224. X            tmpdoor[ndoor]->mask = yypvt[-2].i;
  1225. X            ndoor++;
  1226. X          } break;
  1227. Xcase 44:
  1228. X# line 417 "lev_comp.y"
  1229. X{
  1230. X            tmptrap[ntrap] = (trap *) alloc(sizeof(trap));
  1231. X            tmptrap[ntrap]->x = current_coord.x;
  1232. X            tmptrap[ntrap]->y = current_coord.y;
  1233. X            tmptrap[ntrap]->type = yypvt[-2].i;
  1234. X            ntrap++;
  1235. X          } break;
  1236. Xcase 45:
  1237. X# line 426 "lev_comp.y"
  1238. X{
  1239. X            tmpdb[ndb] = (drawbridge *) alloc(sizeof(drawbridge));
  1240. X            tmpdb[ndb]->x = current_coord.x;
  1241. X            tmpdb[ndb]->y = current_coord.y;
  1242. X            tmpdb[ndb]->dir = db_dirs[yypvt[-2].i];
  1243. X            if ( yypvt[-0].i == D_ISOPEN )
  1244. X              tmpdb[ndb]->open = 1;
  1245. X            else if ( yypvt[-0].i == D_CLOSED )
  1246. X              tmpdb[ndb]->open = 0;
  1247. X            else
  1248. X              yyerror("A drawbridge can only be open or closed!");
  1249. X            ndb++;
  1250. X           } break;
  1251. Xcase 46:
  1252. X# line 441 "lev_comp.y"
  1253. X{
  1254. X            tmpwalk[nwalk] = (walk *) alloc(sizeof(walk));
  1255. X            tmpwalk[nwalk]->x = current_coord.x;
  1256. X            tmpwalk[nwalk]->y = current_coord.y;
  1257. X            tmpwalk[nwalk]->dir = yypvt[-0].i;
  1258. X            nwalk++;
  1259. X          } break;
  1260. Xcase 47:
  1261. X# line 450 "lev_comp.y"
  1262. X{
  1263. X            tmplad[nlad] = (lad *) alloc(sizeof(lad));
  1264. X            tmplad[nlad]->x = current_coord.x;
  1265. X            tmplad[nlad]->y = current_coord.y;
  1266. X            tmplad[nlad]->up = yypvt[-0].i;
  1267. X            nlad++;
  1268. X          } break;
  1269. Xcase 48:
  1270. X# line 459 "lev_comp.y"
  1271. X{
  1272. X            tmpdig[ndig] = (digpos *) alloc(sizeof(digpos));
  1273. X            tmpdig[ndig]->x1 = current_region.x1;
  1274. X            tmpdig[ndig]->y1 = current_region.y1;
  1275. X            tmpdig[ndig]->x2 = current_region.x2;
  1276. X            tmpdig[ndig]->y2 = current_region.y2;
  1277. X            ndig++;
  1278. X          } break;
  1279. Xcase 49:
  1280. X# line 469 "lev_comp.y"
  1281. X{
  1282. X            tmpreg[nreg] = (region *) alloc(sizeof(region));
  1283. X            tmpreg[nreg]->x1 = current_region.x1;
  1284. X            tmpreg[nreg]->y1 = current_region.y1;
  1285. X            tmpreg[nreg]->x2 = current_region.x2;
  1286. X            tmpreg[nreg]->y2 = current_region.y2;
  1287. X            tmpreg[nreg]->rlit = yypvt[-2].i;
  1288. X            tmpreg[nreg]->rtype = yypvt[-0].i;
  1289. X            nreg++;
  1290. X          } break;
  1291. Xcase 50:
  1292. X# line 481 "lev_comp.y"
  1293. X{
  1294. X#ifndef ALTARS
  1295. X            yywarning("Altars are not allowed in this version!  Ignoring...");
  1296. X#else
  1297. X            tmpaltar[naltar] = (altar *) alloc(sizeof(altar));
  1298. X            tmpaltar[naltar]->x = current_coord.x;
  1299. X            tmpaltar[naltar]->y = current_coord.y;
  1300. X            tmpaltar[naltar]->align = yypvt[-2].i;
  1301. X            tmpaltar[naltar]->shrine = yypvt[-0].i;
  1302. X            naltar++;
  1303. X#endif /* ALTARS */
  1304. X          } break;
  1305. Xcase 52:
  1306. X# line 496 "lev_comp.y"
  1307. X{
  1308. X              yyval.i = - MAX_REGISTERS - 1;
  1309. X          } break;
  1310. Xcase 55:
  1311. X# line 503 "lev_comp.y"
  1312. X{
  1313. X              yyval.i = - MAX_REGISTERS - 1;
  1314. X          } break;
  1315. Xcase 58:
  1316. X# line 510 "lev_comp.y"
  1317. X{
  1318. X              yyval.map = (char *) 0;
  1319. X          } break;
  1320. Xcase 60:
  1321. X# line 516 "lev_comp.y"
  1322. X{
  1323. X              yyval.map = (char *) 0;
  1324. X          } break;
  1325. Xcase 61:
  1326. X# line 521 "lev_comp.y"
  1327. X{
  1328. X            int token = get_trap_type(yypvt[-0].map);
  1329. X            if (token == ERR)
  1330. X                yyerror("unknown trap type!");
  1331. X            yyval.i = token;
  1332. X          } break;
  1333. Xcase 63:
  1334. X# line 530 "lev_comp.y"
  1335. X{
  1336. X            int token = get_room_type(yypvt[-0].map);
  1337. X            if (token == ERR) {
  1338. X                yywarning("Unknown room type!  Making ordinary room...");
  1339. X                yyval.i = OROOM;
  1340. X            } else
  1341. X                yyval.i = token;
  1342. X          } break;
  1343. Xcase 67:
  1344. X# line 543 "lev_comp.y"
  1345. X{
  1346. X              current_coord.x = current_coord.y = -MAX_REGISTERS-1;
  1347. X          } break;
  1348. Xcase 74:
  1349. X# line 556 "lev_comp.y"
  1350. X{
  1351. X              yyval.i = - MAX_REGISTERS - 1;
  1352. X          } break;
  1353. Xcase 77:
  1354. X# line 564 "lev_comp.y"
  1355. X{
  1356. X            if ( yypvt[-1].i >= MAX_REGISTERS ) {
  1357. X                yyerror("Register Index overflow!");
  1358. X            } else {
  1359. X                current_coord.x = current_coord.y = - yypvt[-1].i - 1;
  1360. X            }
  1361. X          } break;
  1362. Xcase 78:
  1363. X# line 573 "lev_comp.y"
  1364. X{
  1365. X            if ( yypvt[-1].i >= MAX_REGISTERS ) {
  1366. X                yyerror("Register Index overflow!");
  1367. X            } else {
  1368. X                yyval.i = - yypvt[-1].i - 1;
  1369. X            }
  1370. X          } break;
  1371. Xcase 79:
  1372. X# line 582 "lev_comp.y"
  1373. X{
  1374. X            if ( yypvt[-1].i >= MAX_REGISTERS ) {
  1375. X                yyerror("Register Index overflow!");
  1376. X            } else {
  1377. X                yyval.i = - yypvt[-1].i - 1;
  1378. X            }
  1379. X          } break;
  1380. Xcase 80:
  1381. X# line 591 "lev_comp.y"
  1382. X{
  1383. X            if ( yypvt[-1].i >= 3 ) {
  1384. X                yyerror("Register Index overflow!");
  1385. X            } else {
  1386. X                yyval.i = - yypvt[-1].i - 1;
  1387. X            }
  1388. X          } break;
  1389. Xcase 82:
  1390. X# line 602 "lev_comp.y"
  1391. X{
  1392. X            if (check_monster_char((char) yypvt[-0].i))
  1393. X                yyval.i = yypvt[-0].i ;
  1394. X            else {
  1395. X                yyerror("unknown monster class!");
  1396. X                yyval.i = ERR;
  1397. X            }
  1398. X          } break;
  1399. Xcase 83:
  1400. X# line 612 "lev_comp.y"
  1401. X{
  1402. X            char c;
  1403. X
  1404. X            c = yypvt[-0].i;
  1405. X#ifndef SPELLS
  1406. X            if ( c == '+') {
  1407. X                c = '?';
  1408. X                yywarning("Spellbooks are not allowed in this version! (converted into scroll)");
  1409. X            }
  1410. X#endif
  1411. X            if (check_object_char(c))
  1412. X                yyval.i = c;
  1413. X            else {
  1414. X                yyerror("Unknown char class!");
  1415. X                yyval.i = ERR;
  1416. X            }
  1417. X          } break;
  1418. Xcase 85:
  1419. X# line 632 "lev_comp.y"
  1420. X{
  1421. X            if (yypvt[-3].i < 0 || yypvt[-3].i > max_x_map ||
  1422. X                yypvt[-1].i < 0 || yypvt[-1].i > max_y_map)
  1423. X                yyerror("Coordinates out of map range!");
  1424. X            current_coord.x = yypvt[-3].i;
  1425. X            current_coord.y = yypvt[-1].i;
  1426. X          } break;
  1427. Xcase 86:
  1428. X# line 641 "lev_comp.y"
  1429. X{
  1430. X            if (yypvt[-7].i < 0 || yypvt[-7].i > max_x_map ||
  1431. X                yypvt[-5].i < 0 || yypvt[-5].i > max_y_map ||
  1432. X                yypvt[-3].i < 0 || yypvt[-3].i > max_x_map ||
  1433. X                yypvt[-1].i < 0 || yypvt[-1].i > max_y_map)
  1434. X                yyerror("Region out of map range!");
  1435. X            current_region.x1 = yypvt[-7].i;
  1436. X            current_region.y1 = yypvt[-5].i;
  1437. X            current_region.x2 = yypvt[-3].i;
  1438. X            current_region.y2 = yypvt[-1].i;
  1439. X          } break; 
  1440. X        }
  1441. X        goto yystack;  /* stack new state and value */
  1442. X
  1443. X    }
  1444. END_OF_FILE
  1445. if test 33297 -ne `wc -c <'src/lev_comp.c'`; then
  1446.     echo shar: \"'src/lev_comp.c'\" unpacked with wrong size!
  1447. fi
  1448. # end of 'src/lev_comp.c'
  1449. echo shar: Extracting \"'src/lev_lex.c'\" \(21050 characters\)
  1450. sed "s/^X//" >'src/lev_lex.c' <<'END_OF_FILE'
  1451. X# include "stdio.h"
  1452. X# define U(x) x
  1453. X# define NLSTATE yyprevious=YYNEWLINE
  1454. X# define BEGIN yybgin = yysvec + 1 +
  1455. X# define INITIAL 0
  1456. X# define YYLERR yysvec
  1457. X# define YYSTATE (yyestate-yysvec-1)
  1458. X# define YYOPTIM 1
  1459. X# define YYLMAX 200
  1460. X# define output(c) putc(c,yyout)
  1461. X# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
  1462. X# define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
  1463. X# define yymore() (yymorfg=1)
  1464. X# define ECHO fprintf(yyout, "%s",yytext)
  1465. X# define REJECT { nstr = yyreject(); goto yyfussy;}
  1466. Xint yyleng; extern char yytext[];
  1467. Xint yymorfg;
  1468. Xextern char *yysptr, yysbuf[];
  1469. Xint yytchar;
  1470. XFILE *yyin ={stdin}, *yyout ={stdout};
  1471. Xextern int yylineno;
  1472. Xstruct yysvf { 
  1473. X    struct yywork *yystoff;
  1474. X    struct yysvf *yyother;
  1475. X    int *yystops;};
  1476. Xstruct yysvf *yyestate;
  1477. Xextern struct yysvf yysvec[], *yybgin;
  1478. X/*    SCCS Id: @(#)lev_lex.c    3.0    90/01/04
  1479. X/*    Copyright (c) 1989 by Jean-Christophe Collet */
  1480. X/* NetHack may be freely redistributed.  See license for details. */
  1481. X
  1482. X#define LEV_LEX_C
  1483. X
  1484. X/* block some unused #defines to avoid overloading some cpp's */
  1485. X#define MONDATA_H    /* comment this line for pre-compiled headers */
  1486. X#define MONFLAG_H    /* comment this line for pre-compiled headers */
  1487. X
  1488. X#include "hack.h"
  1489. X#include "lev_comp.h"
  1490. X#include "sp_lev.h"
  1491. X
  1492. X/* Most of these don't exist in flex, yywrap is macro and
  1493. X * yyunput is properly declared in flex.skel.
  1494. X */
  1495. X#ifndef FLEX_SCANNER
  1496. Xint FDECL (yyback, (int *, int));
  1497. Xint NDECL (yylook);
  1498. Xint NDECL (yyinput);
  1499. Xint NDECL (yywrap);
  1500. Xint NDECL (yylex);
  1501. Xint FDECL (yyunput, (int));
  1502. Xint FDECL (yyoutput, (int));
  1503. X#endif
  1504. X
  1505. X#ifdef MSDOS
  1506. X#undef exit
  1507. Xextern void FDECL(exit, (int));
  1508. X#endif
  1509. X
  1510. X/* this doesn't always get put in lev_comp.h
  1511. X * (esp. when using older versions of bison)
  1512. X */
  1513. X
  1514. Xextern YYSTYPE yylval;
  1515. X
  1516. X#ifdef MACOS
  1517. X#undef putchar
  1518. X#undef putc
  1519. X#undef printf
  1520. X#undef Printf
  1521. X#define Printf printf
  1522. X# ifdef LSC
  1523. X#define    putc(c,stream)    (fputc(c,stream))
  1524. X#define    putchar(c)    (fputc(c,stdout))
  1525. X# endif
  1526. X#endif
  1527. Xint line_number = 1;
  1528. X
  1529. X/* This is *** UGLY *** but I can't think a better way to do it
  1530. X * I really need a huge buffer to scan maps...
  1531. X */
  1532. X
  1533. X#undef YYLMAX
  1534. X#define YYLMAX    2048
  1535. X
  1536. X# define MAPC 2
  1537. X# define YYNEWLINE 10
  1538. Xyylex(){
  1539. Xint nstr; extern int yyprevious;
  1540. Xwhile((nstr = yylook()) >= 0)
  1541. Xyyfussy: switch(nstr){
  1542. Xcase 0:
  1543. Xif(yywrap()) return(0); break;
  1544. Xcase 1:
  1545. X{ line_number++; yymore(); }
  1546. Xbreak;
  1547. Xcase 2:
  1548. X{ BEGIN 0;
  1549. X          line_number++;
  1550. X          yytext[yyleng-7] = 0; /* Discard \nENDMAP */
  1551. X          yylval.map = (char *) alloc(strlen(yytext)+1);
  1552. X          strcpy(yylval.map, yytext);
  1553. X          return MAP_ID;
  1554. X        }
  1555. Xbreak;
  1556. Xcase 3:
  1557. X    { line_number++; }
  1558. Xbreak;
  1559. Xcase 4:
  1560. X    return MAZE_ID;
  1561. Xbreak;
  1562. Xcase 5:
  1563. X    return LEVEL_ID;
  1564. Xbreak;
  1565. Xcase 6:
  1566. Xreturn GEOMETRY_ID;
  1567. Xbreak;
  1568. Xcase 7:
  1569. X    { BEGIN MAPC; line_number++; }
  1570. Xbreak;
  1571. Xcase 8:
  1572. X    return OBJECT_ID;
  1573. Xbreak;
  1574. Xcase 9:
  1575. X    return MONSTER_ID;
  1576. Xbreak;
  1577. Xcase 10:
  1578. X    return TRAP_ID;
  1579. Xbreak;
  1580. Xcase 11:
  1581. X    return DOOR_ID;
  1582. Xbreak;
  1583. Xcase 12:
  1584. Xreturn DRAWBRIDGE_ID;
  1585. Xbreak;
  1586. Xcase 13:
  1587. Xreturn MAZEWALK_ID;
  1588. Xbreak;
  1589. Xcase 14:
  1590. X    return REGION_ID;
  1591. Xbreak;
  1592. Xcase 15:
  1593. Xreturn RANDOM_OBJECTS_ID;
  1594. Xbreak;
  1595. Xcase 16:
  1596. Xreturn RANDOM_MONSTERS_ID;
  1597. Xbreak;
  1598. Xcase 17:
  1599. Xreturn RANDOM_PLACES_ID;
  1600. Xbreak;
  1601. Xcase 18:
  1602. X    return ALTAR_ID;
  1603. Xbreak;
  1604. Xcase 19:
  1605. X    return LADDER_ID;
  1606. Xbreak;
  1607. Xcase 20:
  1608. Xreturn NON_DIGGABLE_ID;
  1609. Xbreak;
  1610. Xcase 21:
  1611. X    return ROOM_ID;
  1612. Xbreak;
  1613. Xcase 22:
  1614. X    { yylval.i=D_ISOPEN; return DOOR_STATE; }
  1615. Xbreak;
  1616. Xcase 23:
  1617. X    { yylval.i=D_CLOSED; return DOOR_STATE; }
  1618. Xbreak;
  1619. Xcase 24:
  1620. X    { yylval.i=D_LOCKED; return DOOR_STATE; }
  1621. Xbreak;
  1622. Xcase 25:
  1623. X    { yylval.i=D_NODOOR; return DOOR_STATE; }
  1624. Xbreak;
  1625. Xcase 26:
  1626. X    { yylval.i=D_BROKEN; return DOOR_STATE; }
  1627. Xbreak;
  1628. Xcase 27:
  1629. X    { yylval.i=W_NORTH; return DIRECTION; }
  1630. Xbreak;
  1631. Xcase 28:
  1632. X    { yylval.i=W_EAST; return DIRECTION; }
  1633. Xbreak;
  1634. Xcase 29:
  1635. X    { yylval.i=W_SOUTH; return DIRECTION; }
  1636. Xbreak;
  1637. Xcase 30:
  1638. X    { yylval.i=W_WEST; return DIRECTION; }
  1639. Xbreak;
  1640. Xcase 31:
  1641. X    { yylval.i = -1; return RANDOM_TYPE; }
  1642. Xbreak;
  1643. Xcase 32:
  1644. X    return O_REGISTER;
  1645. Xbreak;
  1646. Xcase 33:
  1647. X    return M_REGISTER;
  1648. Xbreak;
  1649. Xcase 34:
  1650. X    return P_REGISTER;
  1651. Xbreak;
  1652. Xcase 35:
  1653. X    return A_REGISTER;
  1654. Xbreak;
  1655. Xcase 36:
  1656. X    { yylval.i=1; return LEFT_OR_RIGHT; }
  1657. Xbreak;
  1658. Xcase 37:
  1659. X    { yylval.i=3; return LEFT_OR_RIGHT; }
  1660. Xbreak;
  1661. Xcase 38:
  1662. X    { yylval.i=2; return CENTER; }
  1663. Xbreak;
  1664. Xcase 39:
  1665. X    { yylval.i=1; return TOP_OR_BOT; }
  1666. Xbreak;
  1667. Xcase 40:
  1668. X    { yylval.i=3; return TOP_OR_BOT; }
  1669. Xbreak;
  1670. Xcase 41:
  1671. X    { yylval.i=1; return LIGHT_STATE; }
  1672. Xbreak;
  1673. Xcase 42:
  1674. X    { yylval.i=0; return LIGHT_STATE; }
  1675. Xbreak;
  1676. Xcase 43:
  1677. X    { yylval.i=A_LAW; return ALIGNMENT; }
  1678. Xbreak;
  1679. Xcase 44:
  1680. X    { yylval.i=A_NEUTRAL; return ALIGNMENT; }
  1681. Xbreak;
  1682. Xcase 45:
  1683. X    { yylval.i=A_CHAOS; return ALIGNMENT; }
  1684. Xbreak;
  1685. Xcase 46:
  1686. X    { yylval.i=1; return ALTAR_TYPE; }
  1687. Xbreak;
  1688. Xcase 47:
  1689. X    { yylval.i=0; return ALTAR_TYPE; }
  1690. Xbreak;
  1691. Xcase 48:
  1692. X    { yylval.i=1; return UP_OR_DOWN; }
  1693. Xbreak;
  1694. Xcase 49:
  1695. X    { yylval.i=0; return UP_OR_DOWN; }
  1696. Xbreak;
  1697. Xcase 50:
  1698. X    { yylval.i=atoi(yytext); return INTEGER; }
  1699. Xbreak;
  1700. Xcase 51:
  1701. X{ yytext[yyleng-1] = 0; /* Discard the trailing \" */
  1702. X          yylval.map = (char *) alloc(strlen(yytext+1)+1);
  1703. X          strcpy(yylval.map, yytext+1); /* Discard the first \" */
  1704. X          return STRING; }
  1705. Xbreak;
  1706. Xcase 52:
  1707. X    { line_number++; }
  1708. Xbreak;
  1709. Xcase 53:
  1710. X    ;
  1711. Xbreak;
  1712. Xcase 54:
  1713. X    { yylval.i = yytext[1]; return CHAR; }
  1714. Xbreak;
  1715. Xcase 55:
  1716. X    { return yytext[0]; }
  1717. Xbreak;
  1718. Xcase -1:
  1719. Xbreak;
  1720. Xdefault:
  1721. Xfprintf(yyout,"bad switch yylook %d",nstr);
  1722. X} return(0); }
  1723. X/* end of yylex */
  1724. X#ifdef    AMIGA
  1725. Xlong *alloc(n)
  1726. X    unsigned n;
  1727. X{
  1728. X    return ((long *)malloc (n));
  1729. X}
  1730. X#endif
  1731. Xint yyvstop[] ={
  1732. X0,
  1733. X
  1734. X55,
  1735. X0,
  1736. X
  1737. X53,
  1738. X55,
  1739. X0,
  1740. X
  1741. X52,
  1742. X0,
  1743. X
  1744. X55,
  1745. X0,
  1746. X
  1747. X55,
  1748. X0,
  1749. X
  1750. X50,
  1751. X55,
  1752. X0,
  1753. X
  1754. X55,
  1755. X0,
  1756. X
  1757. X55,
  1758. X0,
  1759. X
  1760. X55,
  1761. X0,
  1762. X
  1763. X55,
  1764. X0,
  1765. X
  1766. X55,
  1767. X0,
  1768. X
  1769. X55,
  1770. X0,
  1771. X
  1772. X55,
  1773. X0,
  1774. X
  1775. X55,
  1776. X0,
  1777. X
  1778. X55,
  1779. X0,
  1780. X
  1781. X55,
  1782. X0,
  1783. X
  1784. X55,
  1785. X0,
  1786. X
  1787. X55,
  1788. X0,
  1789. X
  1790. X55,
  1791. X0,
  1792. X
  1793. X55,
  1794. X0,
  1795. X
  1796. X55,
  1797. X0,
  1798. X
  1799. X55,
  1800. X0,
  1801. X
  1802. X55,
  1803. X0,
  1804. X
  1805. X55,
  1806. X0,
  1807. X
  1808. X55,
  1809. X0,
  1810. X
  1811. X55,
  1812. X0,
  1813. X
  1814. X55,
  1815. X0,
  1816. X
  1817. X55,
  1818. X0,
  1819. X
  1820. X55,
  1821. X0,
  1822. X
  1823. X55,
  1824. X0,
  1825. X
  1826. X55,
  1827. X0,
  1828. X
  1829. X55,
  1830. X0,
  1831. X
  1832. X1,
  1833. X52,
  1834. X0,
  1835. X
  1836. X53,
  1837. X55,
  1838. X0,
  1839. X
  1840. X55,
  1841. X0,
  1842. X
  1843. X55,
  1844. X0,
  1845. X
  1846. X55,
  1847. X0,
  1848. X
  1849. X53,
  1850. X0,
  1851. X
  1852. X51,
  1853. X0,
  1854. X
  1855. X50,
  1856. X0,
  1857. X
  1858. X48,
  1859. X0,
  1860. X
  1861. X3,
  1862. X0,
  1863. X
  1864. X1,
  1865. X0,
  1866. X
  1867. X53,
  1868. X0,
  1869. X
  1870. X1,
  1871. X3,
  1872. X0,
  1873. X
  1874. X54,
  1875. X0,
  1876. X
  1877. X43,
  1878. X0,
  1879. X
  1880. X41,
  1881. X0,
  1882. X
  1883. X39,
  1884. X0,
  1885. X
  1886. X11,
  1887. X0,
  1888. X
  1889. X4,
  1890. X0,
  1891. X
  1892. X21,
  1893. X0,
  1894. X
  1895. X10,
  1896. X0,
  1897. X
  1898. X49,
  1899. X0,
  1900. X
  1901. X28,
  1902. X0,
  1903. X
  1904. X36,
  1905. X0,
  1906. X
  1907. X22,
  1908. X0,
  1909. X
  1910. X30,
  1911. X0,
  1912. X
  1913. X7,
  1914. X0,
  1915. X
  1916. X18,
  1917. X0,
  1918. X
  1919. X5,
  1920. X0,
  1921. X
  1922. X35,
  1923. X0,
  1924. X
  1925. X47,
  1926. X0,
  1927. X
  1928. X45,
  1929. X0,
  1930. X
  1931. X27,
  1932. X0,
  1933. X
  1934. X34,
  1935. X0,
  1936. X
  1937. X37,
  1938. X0,
  1939. X
  1940. X29,
  1941. X0,
  1942. X
  1943. X42,
  1944. X0,
  1945. X
  1946. X19,
  1947. X0,
  1948. X
  1949. X8,
  1950. X0,
  1951. X
  1952. X14,
  1953. X0,
  1954. X
  1955. X40,
  1956. X0,
  1957. X
  1958. X26,
  1959. X0,
  1960. X
  1961. X38,
  1962. X0,
  1963. X
  1964. X23,
  1965. X0,
  1966. X
  1967. X24,
  1968. X0,
  1969. X
  1970. X25,
  1971. X0,
  1972. X
  1973. X32,
  1974. X0,
  1975. X
  1976. X31,
  1977. X0,
  1978. X
  1979. X46,
  1980. X0,
  1981. X
  1982. X9,
  1983. X0,
  1984. X
  1985. X33,
  1986. X0,
  1987. X
  1988. X44,
  1989. X0,
  1990. X
  1991. X2,
  1992. X0,
  1993. X
  1994. X6,
  1995. X0,
  1996. X
  1997. X13,
  1998. X0,
  1999. X
  2000. X12,
  2001. X0,
  2002. X
  2003. X20,
  2004. X0,
  2005. X
  2006. X17,
  2007. X0,
  2008. X
  2009. X15,
  2010. X0,
  2011. X
  2012. X16,
  2013. X0,
  2014. X0};
  2015. X# define YYTYPE int
  2016. Xstruct yywork { YYTYPE verify, advance; } yycrank[] ={
  2017. X0,0,    0,0,    1,5,    0,0,    
  2018. X0,0,    0,0,    0,0,    0,0,    
  2019. X8,43,    0,0,    1,6,    1,7,    
  2020. X9,45,    0,0,    6,42,    0,0,    
  2021. X8,43,    8,43,    0,0,    0,0,    
  2022. X9,45,    9,0,    41,94,    0,0,    
  2023. X0,0,    0,0,    0,0,    0,0,    
  2024. X0,0,    0,0,    0,0,    0,0,    
  2025. X0,0,    1,6,    0,0,    1,8,    
  2026. X1,5,    6,42,    0,0,    8,43,    
  2027. X1,9,    8,44,    8,43,    9,45,    
  2028. X41,95,    9,45,    9,45,    41,95,    
  2029. X45,96,    1,10,    0,0,    0,0,    
  2030. X0,0,    0,0,    0,0,    8,43,    
  2031. X0,0,    0,0,    0,0,    9,45,    
  2032. X0,0,    0,0,    0,0,    0,0,    
  2033. X0,0,    0,0,    1,11,    14,51,    
  2034. X15,53,    1,12,    13,50,    14,52,    
  2035. X1,13,    17,56,    36,89,    49,99,    
  2036. X51,101,    1,14,    1,15,    1,16,    
  2037. X1,17,    11,47,    15,54,    1,18,    
  2038. X12,48,    1,19,    16,55,    12,49,    
  2039. X2,5,    18,57,    19,60,    40,93,    
  2040. X47,97,    18,58,    48,98,    50,100,    
  2041. X2,6,    2,7,    1,20,    1,21,    
  2042. X1,22,    1,23,    1,24,    18,59,    
  2043. X24,68,    34,86,    52,102,    53,103,    
  2044. X54,104,    1,25,    1,26,    1,27,    
  2045. X1,28,    1,29,    20,61,    1,30,    
  2046. X1,31,    1,32,    1,33,    2,6,    
  2047. X1,34,    2,8,    2,35,    23,67,    
  2048. X21,62,    26,73,    2,9,    21,63,    
  2049. X29,78,    32,83,    2,5,    55,105,    
  2050. X2,5,    2,5,    28,76,    2,10,    
  2051. X10,46,    10,46,    10,46,    10,46,    
  2052. X10,46,    10,46,    10,46,    10,46,    
  2053. X10,46,    10,46,    22,64,    27,74,    
  2054. X28,77,    22,65,    56,106,    30,79,    
  2055. X2,11,    22,66,    31,81,    2,12,    
  2056. X57,107,    27,75,    2,13,    30,80,    
  2057. X58,108,    31,82,    2,5,    2,14,    
  2058. X2,36,    2,16,    2,17,    59,109,    
  2059. X25,69,    2,18,    2,5,    2,19,    
  2060. X25,70,    33,84,    60,110,    33,85,    
  2061. X25,71,    62,113,    61,111,    2,5,    
  2062. X63,114,    64,115,    25,72,    65,116,    
  2063. X2,20,    2,21,    2,22,    2,23,    
  2064. X2,24,    61,112,    66,117,    3,37,    
  2065. X67,118,    68,119,    69,120,    2,25,    
  2066. X2,26,    2,27,    2,28,    2,29,    
  2067. X35,87,    2,30,    2,31,    2,32,    
  2068. X2,33,    70,121,    2,34,    71,122,    
  2069. X35,87,    35,88,    2,5,    2,5,    
  2070. X2,5,    3,38,    72,123,    73,124,    
  2071. X3,39,    74,125,    75,126,    76,128,    
  2072. X3,9,    77,129,    78,130,    79,131,    
  2073. X80,132,    81,133,    82,134,    83,135,    
  2074. X84,136,    86,137,    89,138,    35,87,    
  2075. X75,127,    35,87,    35,87,    93,139,    
  2076. X97,140,    98,141,    99,142,    95,94,    
  2077. X89,103,    100,143,    101,144,    102,145,    
  2078. X103,146,    104,147,    3,11,    35,87,    
  2079. X105,148,    3,12,    3,40,    106,149,    
  2080. X3,13,    107,150,    108,151,    109,152,    
  2081. X110,153,    3,14,    3,15,    3,16,    
  2082. X3,17,    95,95,    111,154,    3,18,    
  2083. X95,95,    3,19,    112,155,    113,156,    
  2084. X114,157,    115,158,    116,159,    117,160,    
  2085. X118,161,    119,162,    121,163,    123,164,    
  2086. X124,165,    4,37,    3,20,    3,21,    
  2087. X3,22,    3,23,    3,24,    125,166,    
  2088. X126,167,    127,168,    128,169,    129,170,    
  2089. X130,171,    3,25,    3,26,    3,27,    
  2090. X3,28,    3,29,    131,172,    3,30,    
  2091. X3,31,    3,32,    3,33,    4,38,    
  2092. X3,34,    132,173,    4,41,    133,174,    
  2093. X134,175,    136,176,    4,9,    137,177,    
  2094. X138,178,    139,179,    4,39,    140,180,    
  2095. X4,39,    4,39,    142,181,    143,182,    
  2096. X144,183,    145,184,    146,185,    147,186,    
  2097. X148,187,    149,188,    150,189,    151,190,    
  2098. X154,191,    155,192,    156,193,    157,194,    
  2099. X158,195,    159,196,    160,197,    164,198,    
  2100. X4,11,    165,199,    166,200,    4,12,    
  2101. X4,40,    167,201,    4,13,    168,202,    
  2102. X169,203,    171,204,    4,39,    4,14,    
  2103. X4,36,    4,16,    4,17,    172,205,    
  2104. X173,206,    4,18,    4,39,    4,19,    
  2105. X174,207,    175,208,    176,209,    179,210,    
  2106. X181,211,    182,212,    183,213,    4,39,    
  2107. X185,214,    186,215,    38,42,    38,90,    
  2108. X4,20,    4,21,    4,22,    4,23,    
  2109. X4,24,    187,216,    188,217,    189,218,    
  2110. X190,219,    193,220,    194,221,    4,25,    
  2111. X4,26,    4,27,    4,28,    4,29,    
  2112. X195,222,    4,30,    4,31,    4,32,    
  2113. X4,33,    38,91,    4,34,    39,90,    
  2114. X38,92,    197,223,    4,39,    4,39,    
  2115. X4,39,    198,224,    199,225,    200,226,    
  2116. X38,92,    201,227,    38,92,    38,92,    
  2117. X203,228,    205,229,    207,230,    210,231,    
  2118. X211,232,    212,233,    214,234,    215,235,    
  2119. X216,236,    39,92,    218,237,    225,238,    
  2120. X39,92,    226,239,    231,240,    232,241,    
  2121. X233,242,    234,243,    236,244,    241,248,    
  2122. X39,92,    244,249,    39,92,    39,92,    
  2123. X237,245,    245,250,    237,246,    237,247,    
  2124. X38,92,    246,251,    247,252,    248,253,    
  2125. X249,254,    250,255,    251,256,    252,257,    
  2126. X38,92,    254,258,    255,259,    256,260,    
  2127. X257,261,    258,262,    259,263,    260,264,    
  2128. X261,265,    38,92,    263,266,    264,267,    
  2129. X265,268,    266,269,    267,270,    269,271,    
  2130. X39,92,    0,0,    0,0,    0,0,    
  2131. X0,0,    0,0,    0,0,    0,0,    
  2132. X39,92,    0,0,    0,0,    0,0,    
  2133. X0,0,    0,0,    0,0,    0,0,    
  2134. X0,0,    39,92,    0,0,    0,0,    
  2135. X0,0,    0,0,    0,0,    0,0,    
  2136. X38,92,    38,92,    38,92,    0,0,    
  2137. X0,0,    0,0,    0,0,    0,0,    
  2138. X0,0,    0,0,    0,0,    0,0,    
  2139. X0,0,    0,0,    0,0,    0,0,    
  2140. X0,0,    0,0,    0,0,    0,0,    
  2141. X0,0,    0,0,    0,0,    0,0,    
  2142. X39,92,    39,92,    39,92,    0,0,    
  2143. X0,0};
  2144. Xstruct yysvf yysvec[] ={
  2145. X0,    0,    0,
  2146. Xyycrank+-1,    0,        0,    
  2147. Xyycrank+-87,    0,        0,    
  2148. Xyycrank+-181,    yysvec+1,    0,    
  2149. Xyycrank+-267,    yysvec+2,    0,    
  2150. Xyycrank+0,    0,        yyvstop+1,
  2151. Xyycrank+5,    0,        yyvstop+3,
  2152. Xyycrank+0,    0,        yyvstop+6,
  2153. Xyycrank+-7,    0,        yyvstop+8,
  2154. Xyycrank+-11,    0,        yyvstop+10,
  2155. Xyycrank+88,    0,        yyvstop+12,
  2156. Xyycrank+5,    0,        yyvstop+15,
  2157. Xyycrank+5,    0,        yyvstop+17,
  2158. Xyycrank+1,    0,        yyvstop+19,
  2159. Xyycrank+2,    0,        yyvstop+21,
  2160. Xyycrank+3,    0,        yyvstop+23,
  2161. Xyycrank+7,    0,        yyvstop+25,
  2162. Xyycrank+7,    0,        yyvstop+27,
  2163. Xyycrank+24,    0,        yyvstop+29,
  2164. Xyycrank+8,    0,        yyvstop+31,
  2165. Xyycrank+6,    0,        yyvstop+33,
  2166. Xyycrank+13,    0,        yyvstop+35,
  2167. Xyycrank+45,    0,        yyvstop+37,
  2168. Xyycrank+12,    0,        yyvstop+39,
  2169. Xyycrank+7,    0,        yyvstop+41,
  2170. Xyycrank+71,    0,        yyvstop+43,
  2171. Xyycrank+14,    0,        yyvstop+45,
  2172. Xyycrank+46,    0,        yyvstop+47,
  2173. Xyycrank+36,    0,        yyvstop+49,
  2174. Xyycrank+20,    0,        yyvstop+51,
  2175. Xyycrank+54,    0,        yyvstop+53,
  2176. Xyycrank+50,    0,        yyvstop+55,
  2177. Xyycrank+18,    0,        yyvstop+57,
  2178. Xyycrank+63,    0,        yyvstop+59,
  2179. Xyycrank+4,    0,        yyvstop+61,
  2180. Xyycrank+-199,    0,        yyvstop+63,
  2181. Xyycrank+9,    yysvec+15,    yyvstop+65,
  2182. Xyycrank+0,    0,        yyvstop+67,
  2183. Xyycrank+353,    0,        yyvstop+70,
  2184. Xyycrank+377,    0,        yyvstop+73,
  2185. Xyycrank+13,    0,        yyvstop+75,
  2186. Xyycrank+-12,    yysvec+35,    yyvstop+77,
  2187. Xyycrank+0,    yysvec+6,    yyvstop+79,
  2188. Xyycrank+0,    yysvec+8,    0,    
  2189. Xyycrank+0,    0,        yyvstop+81,
  2190. Xyycrank+9,    0,        0,    
  2191. Xyycrank+0,    yysvec+10,    yyvstop+83,
  2192. Xyycrank+8,    0,        0,    
  2193. Xyycrank+15,    0,        0,    
  2194. Xyycrank+10,    0,        0,    
  2195. Xyycrank+16,    0,        0,    
  2196. Xyycrank+8,    0,        0,    
  2197. Xyycrank+20,    0,        0,    
  2198. Xyycrank+17,    0,        0,    
  2199. Xyycrank+30,    0,        0,    
  2200. Xyycrank+53,    0,        0,    
  2201. Xyycrank+76,    0,        0,    
  2202. Xyycrank+78,    0,        0,    
  2203. Xyycrank+89,    0,        0,    
  2204. Xyycrank+88,    0,        0,    
  2205. Xyycrank+109,    0,        0,    
  2206. Xyycrank+73,    0,        0,    
  2207. Xyycrank+61,    0,        0,    
  2208. Xyycrank+69,    0,        0,    
  2209. Xyycrank+71,    0,        0,    
  2210. Xyycrank+86,    0,        0,    
  2211. Xyycrank+79,    0,        0,    
  2212. Xyycrank+73,    0,        0,    
  2213. Xyycrank+78,    0,        0,    
  2214. Xyycrank+75,    0,        0,    
  2215. Xyycrank+103,    0,        0,    
  2216. Xyycrank+91,    0,        0,    
  2217. Xyycrank+115,    0,        0,    
  2218. Xyycrank+105,    0,        0,    
  2219. Xyycrank+100,    0,        0,    
  2220. Xyycrank+118,    0,        0,    
  2221. Xyycrank+113,    0,        0,    
  2222. Xyycrank+120,    0,        0,    
  2223. Xyycrank+125,    0,        0,    
  2224. Xyycrank+113,    0,        0,    
  2225. Xyycrank+121,    0,        0,    
  2226. Xyycrank+111,    0,        0,    
  2227. Xyycrank+109,    0,        0,    
  2228. Xyycrank+115,    0,        0,    
  2229. Xyycrank+120,    0,        0,    
  2230. Xyycrank+0,    0,        yyvstop+85,
  2231. Xyycrank+114,    0,        0,    
  2232. Xyycrank+0,    yysvec+35,    0,    
  2233. Xyycrank+0,    0,        yyvstop+87,
  2234. Xyycrank+150,    0,        0,    
  2235. Xyycrank+0,    0,        yyvstop+89,
  2236. Xyycrank+0,    yysvec+38,    yyvstop+91,
  2237. Xyycrank+0,    yysvec+39,    0,    
  2238. Xyycrank+167,    0,        0,    
  2239. Xyycrank+0,    0,        yyvstop+93,
  2240. Xyycrank+-229,    yysvec+35,    0,    
  2241. Xyycrank+0,    0,        yyvstop+96,
  2242. Xyycrank+171,    0,        0,    
  2243. Xyycrank+155,    0,        0,    
  2244. Xyycrank+151,    0,        0,    
  2245. Xyycrank+164,    0,        0,    
  2246. Xyycrank+174,    0,        0,    
  2247. Xyycrank+174,    0,        0,    
  2248. Xyycrank+175,    0,        0,    
  2249. Xyycrank+162,    0,        0,    
  2250. Xyycrank+153,    0,        0,    
  2251. Xyycrank+182,    0,        0,    
  2252. Xyycrank+185,    0,        0,    
  2253. Xyycrank+181,    0,        0,    
  2254. Xyycrank+178,    0,        0,    
  2255. Xyycrank+176,    0,        0,    
  2256. Xyycrank+159,    0,        0,    
  2257. Xyycrank+169,    0,        0,    
  2258. Xyycrank+151,    0,        0,    
  2259. Xyycrank+161,    0,        0,    
  2260. Xyycrank+153,    0,        0,    
  2261. Xyycrank+159,    0,        0,    
  2262. Xyycrank+156,    0,        0,    
  2263. Xyycrank+162,    0,        0,    
  2264. Xyycrank+157,    0,        0,    
  2265. Xyycrank+0,    0,        yyvstop+98,
  2266. Xyycrank+158,    0,        0,    
  2267. Xyycrank+0,    0,        yyvstop+100,
  2268. Xyycrank+168,    0,        0,    
  2269. Xyycrank+161,    0,        0,    
  2270. Xyycrank+167,    0,        0,    
  2271. Xyycrank+173,    0,        0,    
  2272. Xyycrank+169,    0,        0,    
  2273. Xyycrank+185,    0,        0,    
  2274. Xyycrank+177,    0,        0,    
  2275. Xyycrank+189,    0,        0,    
  2276. Xyycrank+194,    0,        0,    
  2277. Xyycrank+197,    0,        0,    
  2278. Xyycrank+198,    0,        0,    
  2279. Xyycrank+188,    0,        0,    
  2280. Xyycrank+0,    0,        yyvstop+102,
  2281. Xyycrank+200,    0,        0,    
  2282. Xyycrank+191,    0,        0,    
  2283. Xyycrank+298,    0,        0,    
  2284. Xyycrank+232,    0,        0,    
  2285. Xyycrank+229,    0,        0,    
  2286. Xyycrank+0,    0,        yyvstop+104,
  2287. Xyycrank+248,    0,        0,    
  2288. Xyycrank+246,    0,        0,    
  2289. Xyycrank+247,    0,        0,    
  2290. Xyycrank+241,    0,        0,    
  2291. Xyycrank+231,    0,        yyvstop+106,
  2292. Xyycrank+235,    0,        0,    
  2293. Xyycrank+252,    0,        0,    
  2294. Xyycrank+254,    0,        0,    
  2295. Xyycrank+243,    0,        0,    
  2296. Xyycrank+244,    0,        0,    
  2297. Xyycrank+0,    0,        yyvstop+108,
  2298. Xyycrank+0,    0,        yyvstop+110,
  2299. Xyycrank+214,    0,        0,    
  2300. Xyycrank+211,    0,        0,    
  2301. Xyycrank+215,    0,        0,    
  2302. Xyycrank+226,    0,        0,    
  2303. Xyycrank+227,    0,        0,    
  2304. Xyycrank+214,    0,        0,    
  2305. Xyycrank+229,    0,        0,    
  2306. Xyycrank+0,    0,        yyvstop+112,
  2307. Xyycrank+0,    0,        yyvstop+114,
  2308. Xyycrank+0,    0,        yyvstop+116,
  2309. Xyycrank+230,    0,        0,    
  2310. Xyycrank+217,    0,        0,    
  2311. Xyycrank+220,    0,        0,    
  2312. Xyycrank+226,    0,        0,    
  2313. Xyycrank+235,    0,        0,    
  2314. Xyycrank+241,    0,        0,    
  2315. Xyycrank+0,    0,        yyvstop+118,
  2316. Xyycrank+240,    0,        0,    
  2317. Xyycrank+236,    0,        0,    
  2318. Xyycrank+232,    0,        0,    
  2319. Xyycrank+242,    0,        0,    
  2320. Xyycrank+249,    0,        0,    
  2321. Xyycrank+238,    0,        0,    
  2322. Xyycrank+0,    0,        yyvstop+120,
  2323. Xyycrank+0,    0,        yyvstop+122,
  2324. Xyycrank+290,    0,        0,    
  2325. Xyycrank+0,    0,        yyvstop+124,
  2326. Xyycrank+274,    0,        0,    
  2327. Xyycrank+273,    0,        0,    
  2328. Xyycrank+276,    0,        0,    
  2329. Xyycrank+0,    0,        yyvstop+126,
  2330. Xyycrank+295,    0,        0,    
  2331. Xyycrank+292,    0,        0,    
  2332. Xyycrank+296,    0,        0,    
  2333. Xyycrank+286,    0,        0,    
  2334. Xyycrank+294,    0,        0,    
  2335. Xyycrank+294,    0,        0,    
  2336. Xyycrank+0,    0,        yyvstop+128,
  2337. Xyycrank+0,    0,        yyvstop+130,
  2338. Xyycrank+264,    0,        0,    
  2339. Xyycrank+264,    0,        0,    
  2340. Xyycrank+266,    0,        0,    
  2341. Xyycrank+0,    0,        yyvstop+132,
  2342. Xyycrank+289,    0,        0,    
  2343. Xyycrank+293,    0,        0,    
  2344. Xyycrank+293,    0,        0,    
  2345. Xyycrank+298,    0,        0,    
  2346. Xyycrank+283,    0,        0,    
  2347. Xyycrank+0,    0,        yyvstop+134,
  2348. Xyycrank+284,    0,        0,    
  2349. Xyycrank+0,    0,        yyvstop+136,
  2350. Xyycrank+292,    0,        0,    
  2351. Xyycrank+0,    0,        yyvstop+138,
  2352. Xyycrank+301,    0,        0,    
  2353. Xyycrank+0,    0,        yyvstop+140,
  2354. Xyycrank+0,    0,        yyvstop+142,
  2355. Xyycrank+323,    0,        0,    
  2356. Xyycrank+331,    0,        0,    
  2357. Xyycrank+323,    0,        0,    
  2358. Xyycrank+0,    0,        yyvstop+144,
  2359. Xyycrank+330,    0,        0,    
  2360. Xyycrank+325,    0,        0,    
  2361. Xyycrank+337,    0,        0,    
  2362. Xyycrank+0,    0,        yyvstop+146,
  2363. Xyycrank+315,    0,        0,    
  2364. Xyycrank+0,    0,        yyvstop+148,
  2365. Xyycrank+0,    0,        yyvstop+150,
  2366. Xyycrank+0,    0,        yyvstop+152,
  2367. Xyycrank+0,    0,        yyvstop+154,
  2368. Xyycrank+0,    0,        yyvstop+156,
  2369. Xyycrank+0,    0,        yyvstop+158,
  2370. Xyycrank+297,    0,        0,    
  2371. Xyycrank+305,    0,        0,    
  2372. Xyycrank+0,    0,        yyvstop+160,
  2373. Xyycrank+0,    0,        yyvstop+162,
  2374. Xyycrank+0,    0,        yyvstop+164,
  2375. Xyycrank+0,    0,        yyvstop+166,
  2376. Xyycrank+404,    0,        0,    
  2377. Xyycrank+347,    0,        0,    
  2378. Xyycrank+327,    0,        0,    
  2379. Xyycrank+342,    0,        0,    
  2380. Xyycrank+0,    0,        yyvstop+168,
  2381. Xyycrank+347,    0,        0,    
  2382. Xyycrank+347,    0,        0,    
  2383. Xyycrank+0,    0,        yyvstop+170,
  2384. Xyycrank+0,    0,        yyvstop+172,
  2385. Xyycrank+0,    0,        yyvstop+174,
  2386. Xyycrank+348,    0,        0,    
  2387. Xyycrank+0,    0,        yyvstop+176,
  2388. Xyycrank+0,    0,        yyvstop+178,
  2389. Xyycrank+356,    0,        0,    
  2390. Xyycrank+346,    0,        0,    
  2391. Xyycrank+363,    0,        0,    
  2392. Xyycrank+354,    0,        0,    
  2393. Xyycrank+362,    0,        0,    
  2394. Xyycrank+366,    0,        0,    
  2395. Xyycrank+355,    0,        0,    
  2396. Xyycrank+360,    0,        0,    
  2397. Xyycrank+370,    0,        0,    
  2398. Xyycrank+0,    0,        yyvstop+180,
  2399. Xyycrank+361,    0,        0,    
  2400. Xyycrank+355,    0,        0,    
  2401. Xyycrank+370,    0,        0,    
  2402. Xyycrank+373,    0,        0,    
  2403. Xyycrank+372,    0,        0,    
  2404. Xyycrank+358,    0,        0,    
  2405. Xyycrank+376,    0,        0,    
  2406. Xyycrank+375,    0,        0,    
  2407. Xyycrank+0,    0,        yyvstop+182,
  2408. Xyycrank+377,    0,        0,    
  2409. Xyycrank+363,    0,        0,    
  2410. Xyycrank+365,    0,        0,    
  2411. Xyycrank+367,    0,        0,    
  2412. Xyycrank+367,    0,        0,    
  2413. Xyycrank+0,    0,        yyvstop+184,
  2414. Xyycrank+368,    0,        0,    
  2415. Xyycrank+0,    0,        yyvstop+186,
  2416. Xyycrank+0,    0,        yyvstop+188,
  2417. X0,    0,    0};
  2418. Xstruct yywork *yytop = yycrank+502;
  2419. Xstruct yysvf *yybgin = yysvec+1;
  2420. Xchar yymatch[] ={
  2421. X00  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  2422. X01  ,011 ,012 ,01  ,01  ,01  ,01  ,01  ,
  2423. X01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  2424. X01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  2425. X040 ,01  ,'"' ,'#' ,01  ,01  ,01  ,01  ,
  2426. X01  ,01  ,01  ,'#' ,01  ,'#' ,'#' ,01  ,
  2427. X'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,
  2428. X'0' ,'0' ,01  ,01  ,01  ,01  ,01  ,01  ,
  2429. X01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  2430. X01  ,01  ,01  ,'#' ,01  ,01  ,01  ,01  ,
  2431. X01  ,01  ,01  ,'#' ,01  ,01  ,01  ,01  ,
  2432. X01  ,01  ,01  ,01  ,'#' ,01  ,01  ,01  ,
  2433. X01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  2434. X01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  2435. X01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  2436. X01  ,01  ,01  ,'#' ,'#' ,'#' ,01  ,01  ,
  2437. X0};
  2438. Xchar yyextra[] ={
  2439. X0,0,0,0,0,0,0,0,
  2440. X0,0,0,0,0,0,0,0,
  2441. X0,0,0,0,0,0,0,0,
  2442. X0,0,0,0,0,0,0,0,
  2443. X0,0,0,0,0,0,0,0,
  2444. X0,0,0,0,0,0,0,0,
  2445. X0,0,0,0,0,0,0,0,
  2446. X0};
  2447. X/*    ncform    4.1    83/08/11    */
  2448. X
  2449. Xint yylineno =1;
  2450. X# define YYU(x) x
  2451. X# define NLSTATE yyprevious=YYNEWLINE
  2452. Xchar yytext[YYLMAX];
  2453. Xstruct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
  2454. Xchar yysbuf[YYLMAX];
  2455. Xchar *yysptr = yysbuf;
  2456. Xint *yyfnd;
  2457. Xextern struct yysvf *yyestate;
  2458. Xint yyprevious = YYNEWLINE;
  2459. Xyylook(){
  2460. X    register struct yysvf *yystate, **lsp;
  2461. X    register struct yywork *yyt;
  2462. X    struct yysvf *yyz;
  2463. X    int yych;
  2464. X    struct yywork *yyr;
  2465. X# ifdef LEXDEBUG
  2466. X    int debug;
  2467. X# endif
  2468. X    char *yylastch;
  2469. X    /* start off machines */
  2470. X# ifdef LEXDEBUG
  2471. X    debug = 0;
  2472. X# endif
  2473. X    if (!yymorfg)
  2474. X        yylastch = yytext;
  2475. X    else {
  2476. X        yymorfg=0;
  2477. X        yylastch = yytext+yyleng;
  2478. X        }
  2479. X    for(;;){
  2480. X        lsp = yylstate;
  2481. X        yyestate = yystate = yybgin;
  2482. X        if (yyprevious==YYNEWLINE) yystate++;
  2483. X        for (;;){
  2484. X# ifdef LEXDEBUG
  2485. X            if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
  2486. X# endif
  2487. X            yyt = yystate->yystoff;
  2488. X            if(yyt == yycrank){        /* may not be any transitions */
  2489. X                yyz = yystate->yyother;
  2490. X                if(yyz == 0)break;
  2491. X                if(yyz->yystoff == yycrank)break;
  2492. X                }
  2493. X            *yylastch++ = yych = input();
  2494. X        tryagain:
  2495. X# ifdef LEXDEBUG
  2496. X            if(debug){
  2497. X                fprintf(yyout,"char ");
  2498. X                allprint(yych);
  2499. X                putchar('\n');
  2500. X                }
  2501. X# endif
  2502. X            yyr = yyt;
  2503. X            if ( (int)yyt > (int)yycrank){
  2504. X                yyt = yyr + yych;
  2505. X                if (yyt <= yytop && yyt->verify+yysvec == yystate){
  2506. X                    if(yyt->advance+yysvec == YYLERR)    /* error transitions */
  2507. X                        {unput(*--yylastch);break;}
  2508. X                    *lsp++ = yystate = yyt->advance+yysvec;
  2509. X                    goto contin;
  2510. X                    }
  2511. X                }
  2512. X# ifdef YYOPTIM
  2513. X            else if((int)yyt < (int)yycrank) {        /* r < yycrank */
  2514. X                yyt = yyr = yycrank+(yycrank-yyt);
  2515. X# ifdef LEXDEBUG
  2516. X                if(debug)fprintf(yyout,"compressed state\n");
  2517. X# endif
  2518. X                yyt = yyt + yych;
  2519. X                if(yyt <= yytop && yyt->verify+yysvec == yystate){
  2520. X                    if(yyt->advance+yysvec == YYLERR)    /* error transitions */
  2521. X                        {unput(*--yylastch);break;}
  2522. X                    *lsp++ = yystate = yyt->advance+yysvec;
  2523. X                    goto contin;
  2524. X                    }
  2525. X                yyt = yyr + YYU(yymatch[yych]);
  2526. X# ifdef LEXDEBUG
  2527. X                if(debug){
  2528. X                    fprintf(yyout,"try fall back character ");
  2529. X                    allprint(YYU(yymatch[yych]));
  2530. X                    putchar('\n');
  2531. X                    }
  2532. X# endif
  2533. X                if(yyt <= yytop && yyt->verify+yysvec == yystate){
  2534. X                    if(yyt->advance+yysvec == YYLERR)    /* error transition */
  2535. X                        {unput(*--yylastch);break;}
  2536. X                    *lsp++ = yystate = yyt->advance+yysvec;
  2537. X                    goto contin;
  2538. X                    }
  2539. X                }
  2540. X            if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
  2541. X# ifdef LEXDEBUG
  2542. X                if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
  2543. X# endif
  2544. X                goto tryagain;
  2545. X                }
  2546. X# endif
  2547. X            else
  2548. X                {unput(*--yylastch);break;}
  2549. X        contin:
  2550. X# ifdef LEXDEBUG
  2551. X            if(debug){
  2552. X                fprintf(yyout,"state %d char ",yystate-yysvec-1);
  2553. X                allprint(yych);
  2554. X                putchar('\n');
  2555. X                }
  2556. X# endif
  2557. X            ;
  2558. X            }
  2559. X# ifdef LEXDEBUG
  2560. X        if(debug){
  2561. X            fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
  2562. X            allprint(yych);
  2563. X            putchar('\n');
  2564. X            }
  2565. X# endif
  2566. X        while (lsp-- > yylstate){
  2567. X            *yylastch-- = 0;
  2568. X            if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
  2569. X                yyolsp = lsp;
  2570. X                if(yyextra[*yyfnd]){        /* must backup */
  2571. X                    while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
  2572. X                        lsp--;
  2573. X                        unput(*yylastch--);
  2574. X                        }
  2575. X                    }
  2576. X                yyprevious = YYU(*yylastch);
  2577. X                yylsp = lsp;
  2578. X                yyleng = yylastch-yytext+1;
  2579. X                yytext[yyleng] = 0;
  2580. X# ifdef LEXDEBUG
  2581. X                if(debug){
  2582. X                    fprintf(yyout,"\nmatch ");
  2583. X                    sprint(yytext);
  2584. X                    fprintf(yyout," action %d\n",*yyfnd);
  2585. X                    }
  2586. X# endif
  2587. X                return(*yyfnd++);
  2588. X                }
  2589. X            unput(*yylastch);
  2590. X            }
  2591. X        if (yytext[0] == 0  /* && feof(yyin) */)
  2592. X            {
  2593. X            yysptr=yysbuf;
  2594. X            return(0);
  2595. X            }
  2596. X        yyprevious = yytext[0] = input();
  2597. X        if (yyprevious>0)
  2598. X            output(yyprevious);
  2599. X        yylastch=yytext;
  2600. X# ifdef LEXDEBUG
  2601. X        if(debug)putchar('\n');
  2602. X# endif
  2603. X        }
  2604. X    }
  2605. Xyyback(p, m)
  2606. X    int *p;
  2607. X{
  2608. Xif (p==0) return(0);
  2609. Xwhile (*p)
  2610. X    {
  2611. X    if (*p++ == m)
  2612. X        return(1);
  2613. X    }
  2614. Xreturn(0);
  2615. X}
  2616. X    /* the following are only used in the lex library */
  2617. Xyyinput(){
  2618. X    return(input());
  2619. X    }
  2620. Xyyoutput(c)
  2621. X  int c; {
  2622. X    output(c);
  2623. X    }
  2624. Xyyunput(c)
  2625. X   int c; {
  2626. X    unput(c);
  2627. X    }
  2628. END_OF_FILE
  2629. if test 21050 -ne `wc -c <'src/lev_lex.c'`; then
  2630.     echo shar: \"'src/lev_lex.c'\" unpacked with wrong size!
  2631. fi
  2632. # end of 'src/lev_lex.c'
  2633. echo shar: End of archive 21 \(of 24\).
  2634. cp /dev/null ark21isdone
  2635. MISSING=""
  2636. 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
  2637.     if test ! -f ark${I}isdone ; then
  2638.     MISSING="${MISSING} ${I}"
  2639.     fi
  2640. done
  2641. if test "${MISSING}" = "" ; then
  2642.     echo You have unpacked all 24 archives.
  2643.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2644. else
  2645.     echo You still need to unpack the following archives:
  2646.     echo "        " ${MISSING}
  2647. fi
  2648. ##  End of shell archive.
  2649. exit 0
  2650.