Changes for Win32; update precompiled files

Also fix Orctown probabilities; fixed support for snprintf;
update Win32 makefile to allow level compiler use

Conflicts:
	win/win32/levstuff.mak
This commit is contained in:
Derek S. Ray
2015-02-22 18:53:30 -05:00
committed by Pasi Kallinen
parent b1835cc65d
commit 7f03ee4216
9 changed files with 8416 additions and 2986 deletions

1
.gitignore vendored
View File

@@ -34,6 +34,7 @@ Makefile
# Win32-specific ignores # Win32-specific ignores
binary/ binary/
build/ build/
ipch/
Nethack.sln Nethack.sln
Nethack.sdf Nethack.sdf
Nethack.opensdf Nethack.opensdf

View File

@@ -131,7 +131,7 @@ OBJECT:('%',"corpse"),random,montype:"watch captain"
# Rubble! # Rubble!
LOOP [9 + 2d5] { LOOP [9 + 2d5] {
OBJECT[90%]:('`',"boulder"),random [90%]: OBJECT:('`',"boulder"),random
OBJECT:('*',"rock"),random OBJECT:('*',"rock"),random
} }
@@ -158,9 +158,15 @@ $inside = selection: floodfill(18,8)
$near_temple = selection: filter(fillrect(17,8, 23,14), $inside) $near_temple = selection: filter(fillrect(17,8, 23,14), $inside)
LOOP [5 + 1d10] { LOOP [5 + 1d10] {
MONSTER[50%]: ('o', "orc-captain"), rndcoord($inside), hostile IF [50%] {
MONSTER[80%]: ('o', "Uruk-hai"), rndcoord($inside), hostile MONSTER: ('o', "orc-captain"), rndcoord($inside), hostile
MONSTER: ('o', "Mordor orc"), rndcoord($inside), hostile } ELSE {
IF [80%] {
MONSTER: ('o', "Uruk-hai"), rndcoord($inside), hostile
} ELSE {
MONSTER: ('o', "Mordor orc"), rndcoord($inside), hostile
}
}
} }
# shamans can be hanging out in/near the temple # shamans can be hanging out in/near the temple
LOOP [2d3] { LOOP [2d3] {
@@ -169,11 +175,14 @@ LOOP [2d3] {
# these are not such a big deal # these are not such a big deal
# to run into outside the bars # to run into outside the bars
LOOP [9 + 2d5] { LOOP [9 + 2d5] {
MONSTER[90%]: ('o', "hill orc"), random, hostile IF [90%] {
MONSTER: ('o', "goblin"), random, hostile MONSTER: ('o', "hill orc"), random, hostile
} ELSE {
MONSTER: ('o', "goblin"), random, hostile
}
} }
WALLIFY:(1,0, 70,20) WALLIFY
# Minetown variant 2 # Minetown variant 2

View File

@@ -124,8 +124,15 @@ extern void FDECL(interject, (int));
#define strncmpi(a,b,c) strnicmp(a,b,c) #define strncmpi(a,b,c) strnicmp(a,b,c)
#endif #endif
/* Visual Studio defines this in their own headers, which we don't use */
#ifndef snprintf
#define snprintf _snprintf
#pragma warning(disable:4996) /* deprecation warning suggesting snprintf_s */
#endif
#include <sys/types.h> #include <sys/types.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h>
#ifdef __BORLANDC__ #ifdef __BORLANDC__
#undef randomize #undef randomize
#undef random #undef random

View File

@@ -3440,20 +3440,21 @@ line_dist_coord(x1,y1, x2,y2, x3,y3)
{ {
long px = x2-x1; long px = x2-x1;
long py = y2-y1; long py = y2-y1;
long s = px*px + py*py;
long x, y, dx, dy, dist = 0;
float u = 0;
if (x1 == x2 && y1 == y2) return isqrt(dist2(x1,y1, x3,y3)); if (x1 == x2 && y1 == y2) return isqrt(dist2(x1,y1, x3,y3));
long s = px*px + py*py; u = ((x3 - x1) * px + (y3 - y1) * py) / (float)s;
float u = ((x3 - x1) * px + (y3 - y1) * py) / (float)s;
if (u > 1) u = 1; if (u > 1) u = 1;
else if (u < 0) u = 0; else if (u < 0) u = 0;
long x = x1 + u * px; x = x1 + u * px;
long y = y1 + u * py; y = y1 + u * py;
long dx = x - x3; dx = x - x3;
long dy = y - y3; dy = y - y3;
long dist = isqrt(dx*dx + dy*dy); dist = isqrt(dx*dx + dy*dy);
return dist; return dist;
} }

View File

@@ -1,79 +1,451 @@
#define CHAR 257
#define INTEGER 258 /* A Bison parser, made by GNU Bison 2.4.1. */
#define BOOLEAN 259
#define PERCENT 260 /* Skeleton interface for Bison's Yacc-like parsers in C
#define MESSAGE_ID 261
#define MAZE_ID 262 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
#define LEVEL_ID 263 Free Software Foundation, Inc.
#define LEV_INIT_ID 264
#define GEOMETRY_ID 265 This program is free software: you can redistribute it and/or modify
#define NOMAP_ID 266 it under the terms of the GNU General Public License as published by
#define OBJECT_ID 267 the Free Software Foundation, either version 3 of the License, or
#define COBJECT_ID 268 (at your option) any later version.
#define MONSTER_ID 269
#define TRAP_ID 270 This program is distributed in the hope that it will be useful,
#define DOOR_ID 271 but WITHOUT ANY WARRANTY; without even the implied warranty of
#define DRAWBRIDGE_ID 272 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#define MAZEWALK_ID 273 GNU General Public License for more details.
#define WALLIFY_ID 274
#define REGION_ID 275 You should have received a copy of the GNU General Public License
#define FILLING 276 along with this program. If not, see <http://www.gnu.org/licenses/>. */
#define RANDOM_OBJECTS_ID 277
#define RANDOM_MONSTERS_ID 278 /* As a special exception, you may create a larger work that contains
#define RANDOM_PLACES_ID 279 part or all of the Bison parser skeleton and distribute that work
#define ALTAR_ID 280 under terms of your choice, so long as that work isn't itself a
#define LADDER_ID 281 parser generator using the skeleton or a modified version thereof
#define STAIR_ID 282 as a parser skeleton. Alternatively, if you modify or redistribute
#define NON_DIGGABLE_ID 283 the parser skeleton itself, you may (at your option) remove this
#define NON_PASSWALL_ID 284 special exception, which will cause the skeleton and the resulting
#define ROOM_ID 285 Bison output files to be licensed under the GNU General Public
#define PORTAL_ID 286 License without this special exception.
#define TELEPRT_ID 287
#define BRANCH_ID 288 This special exception was added by the Free Software Foundation in
#define LEV 289 version 2.2 of Bison. */
#define CHANCE_ID 290
#define CORRIDOR_ID 291
#define GOLD_ID 292 /* Tokens. */
#define ENGRAVING_ID 293 #ifndef YYTOKENTYPE
#define FOUNTAIN_ID 294 # define YYTOKENTYPE
#define POOL_ID 295 /* Put the tokens into the symbol table, so that GDB and other debuggers
#define SINK_ID 296 know about them. */
#define NONE 297 enum yytokentype {
#define RAND_CORRIDOR_ID 298 CHAR = 258,
#define DOOR_STATE 299 INTEGER = 259,
#define LIGHT_STATE 300 BOOLEAN = 260,
#define CURSE_TYPE 301 PERCENT = 261,
#define ENGRAVING_TYPE 302 SPERCENT = 262,
#define DIRECTION 303 MINUS_INTEGER = 263,
#define RANDOM_TYPE 304 PLUS_INTEGER = 264,
#define O_REGISTER 305 MAZE_GRID_ID = 265,
#define M_REGISTER 306 SOLID_FILL_ID = 266,
#define P_REGISTER 307 MINES_ID = 267,
#define A_REGISTER 308 ROGUELEV_ID = 268,
#define ALIGNMENT 309 MESSAGE_ID = 269,
#define LEFT_OR_RIGHT 310 MAZE_ID = 270,
#define CENTER 311 LEVEL_ID = 271,
#define TOP_OR_BOT 312 LEV_INIT_ID = 272,
#define ALTAR_TYPE 313 GEOMETRY_ID = 273,
#define UP_OR_DOWN 314 NOMAP_ID = 274,
#define SUBROOM_ID 315 OBJECT_ID = 275,
#define NAME_ID 316 COBJECT_ID = 276,
#define FLAGS_ID 317 MONSTER_ID = 277,
#define FLAG_TYPE 318 TRAP_ID = 278,
#define MON_ATTITUDE 319 DOOR_ID = 279,
#define MON_ALERTNESS 320 DRAWBRIDGE_ID = 280,
#define MON_APPEARANCE 321 object_ID = 281,
#define CONTAINED 322 monster_ID = 282,
#define STRING 323 terrain_ID = 283,
#define MAP_ID 324 MAZEWALK_ID = 284,
typedef union WALLIFY_ID = 285,
REGION_ID = 286,
FILLING = 287,
IRREGULAR = 288,
JOINED = 289,
ALTAR_ID = 290,
LADDER_ID = 291,
STAIR_ID = 292,
NON_DIGGABLE_ID = 293,
NON_PASSWALL_ID = 294,
ROOM_ID = 295,
PORTAL_ID = 296,
TELEPRT_ID = 297,
BRANCH_ID = 298,
LEV = 299,
MINERALIZE_ID = 300,
CORRIDOR_ID = 301,
GOLD_ID = 302,
ENGRAVING_ID = 303,
FOUNTAIN_ID = 304,
POOL_ID = 305,
SINK_ID = 306,
NONE = 307,
RAND_CORRIDOR_ID = 308,
DOOR_STATE = 309,
LIGHT_STATE = 310,
CURSE_TYPE = 311,
ENGRAVING_TYPE = 312,
DIRECTION = 313,
RANDOM_TYPE = 314,
RANDOM_TYPE_BRACKET = 315,
A_REGISTER = 316,
ALIGNMENT = 317,
LEFT_OR_RIGHT = 318,
CENTER = 319,
TOP_OR_BOT = 320,
ALTAR_TYPE = 321,
UP_OR_DOWN = 322,
SUBROOM_ID = 323,
NAME_ID = 324,
FLAGS_ID = 325,
FLAG_TYPE = 326,
MON_ATTITUDE = 327,
MON_ALERTNESS = 328,
MON_APPEARANCE = 329,
ROOMDOOR_ID = 330,
IF_ID = 331,
ELSE_ID = 332,
TERRAIN_ID = 333,
HORIZ_OR_VERT = 334,
REPLACE_TERRAIN_ID = 335,
EXIT_ID = 336,
SHUFFLE_ID = 337,
QUANTITY_ID = 338,
BURIED_ID = 339,
LOOP_ID = 340,
FOR_ID = 341,
TO_ID = 342,
SWITCH_ID = 343,
CASE_ID = 344,
BREAK_ID = 345,
DEFAULT_ID = 346,
ERODED_ID = 347,
TRAPPED_ID = 348,
RECHARGED_ID = 349,
INVIS_ID = 350,
GREASED_ID = 351,
FEMALE_ID = 352,
CANCELLED_ID = 353,
REVIVED_ID = 354,
AVENGE_ID = 355,
FLEEING_ID = 356,
BLINDED_ID = 357,
PARALYZED_ID = 358,
STUNNED_ID = 359,
CONFUSED_ID = 360,
SEENTRAPS_ID = 361,
ALL_ID = 362,
MONTYPE_ID = 363,
GRAVE_ID = 364,
ERODEPROOF_ID = 365,
FUNCTION_ID = 366,
MSG_OUTPUT_TYPE = 367,
COMPARE_TYPE = 368,
UNKNOWN_TYPE = 369,
rect_ID = 370,
fillrect_ID = 371,
line_ID = 372,
randline_ID = 373,
grow_ID = 374,
selection_ID = 375,
flood_ID = 376,
rndcoord_ID = 377,
circle_ID = 378,
ellipse_ID = 379,
filter_ID = 380,
complement_ID = 381,
gradient_ID = 382,
GRADIENT_TYPE = 383,
LIMITED = 384,
HUMIDITY_TYPE = 385,
STRING = 386,
MAP_ID = 387,
NQSTRING = 388,
VARSTRING = 389,
CFUNC = 390,
CFUNC_INT = 391,
CFUNC_STR = 392,
CFUNC_COORD = 393,
CFUNC_REGION = 394,
VARSTRING_INT = 395,
VARSTRING_INT_ARRAY = 396,
VARSTRING_STRING = 397,
VARSTRING_STRING_ARRAY = 398,
VARSTRING_VAR = 399,
VARSTRING_VAR_ARRAY = 400,
VARSTRING_COORD = 401,
VARSTRING_COORD_ARRAY = 402,
VARSTRING_REGION = 403,
VARSTRING_REGION_ARRAY = 404,
VARSTRING_MAPCHAR = 405,
VARSTRING_MAPCHAR_ARRAY = 406,
VARSTRING_MONST = 407,
VARSTRING_MONST_ARRAY = 408,
VARSTRING_OBJ = 409,
VARSTRING_OBJ_ARRAY = 410,
VARSTRING_SEL = 411,
VARSTRING_SEL_ARRAY = 412,
METHOD_INT = 413,
METHOD_INT_ARRAY = 414,
METHOD_STRING = 415,
METHOD_STRING_ARRAY = 416,
METHOD_VAR = 417,
METHOD_VAR_ARRAY = 418,
METHOD_COORD = 419,
METHOD_COORD_ARRAY = 420,
METHOD_REGION = 421,
METHOD_REGION_ARRAY = 422,
METHOD_MAPCHAR = 423,
METHOD_MAPCHAR_ARRAY = 424,
METHOD_MONST = 425,
METHOD_MONST_ARRAY = 426,
METHOD_OBJ = 427,
METHOD_OBJ_ARRAY = 428,
METHOD_SEL = 429,
METHOD_SEL_ARRAY = 430,
DICE = 431
};
#endif
/* Tokens. */
#define CHAR 258
#define INTEGER 259
#define BOOLEAN 260
#define PERCENT 261
#define SPERCENT 262
#define MINUS_INTEGER 263
#define PLUS_INTEGER 264
#define MAZE_GRID_ID 265
#define SOLID_FILL_ID 266
#define MINES_ID 267
#define ROGUELEV_ID 268
#define MESSAGE_ID 269
#define MAZE_ID 270
#define LEVEL_ID 271
#define LEV_INIT_ID 272
#define GEOMETRY_ID 273
#define NOMAP_ID 274
#define OBJECT_ID 275
#define COBJECT_ID 276
#define MONSTER_ID 277
#define TRAP_ID 278
#define DOOR_ID 279
#define DRAWBRIDGE_ID 280
#define object_ID 281
#define monster_ID 282
#define terrain_ID 283
#define MAZEWALK_ID 284
#define WALLIFY_ID 285
#define REGION_ID 286
#define FILLING 287
#define IRREGULAR 288
#define JOINED 289
#define ALTAR_ID 290
#define LADDER_ID 291
#define STAIR_ID 292
#define NON_DIGGABLE_ID 293
#define NON_PASSWALL_ID 294
#define ROOM_ID 295
#define PORTAL_ID 296
#define TELEPRT_ID 297
#define BRANCH_ID 298
#define LEV 299
#define MINERALIZE_ID 300
#define CORRIDOR_ID 301
#define GOLD_ID 302
#define ENGRAVING_ID 303
#define FOUNTAIN_ID 304
#define POOL_ID 305
#define SINK_ID 306
#define NONE 307
#define RAND_CORRIDOR_ID 308
#define DOOR_STATE 309
#define LIGHT_STATE 310
#define CURSE_TYPE 311
#define ENGRAVING_TYPE 312
#define DIRECTION 313
#define RANDOM_TYPE 314
#define RANDOM_TYPE_BRACKET 315
#define A_REGISTER 316
#define ALIGNMENT 317
#define LEFT_OR_RIGHT 318
#define CENTER 319
#define TOP_OR_BOT 320
#define ALTAR_TYPE 321
#define UP_OR_DOWN 322
#define SUBROOM_ID 323
#define NAME_ID 324
#define FLAGS_ID 325
#define FLAG_TYPE 326
#define MON_ATTITUDE 327
#define MON_ALERTNESS 328
#define MON_APPEARANCE 329
#define ROOMDOOR_ID 330
#define IF_ID 331
#define ELSE_ID 332
#define TERRAIN_ID 333
#define HORIZ_OR_VERT 334
#define REPLACE_TERRAIN_ID 335
#define EXIT_ID 336
#define SHUFFLE_ID 337
#define QUANTITY_ID 338
#define BURIED_ID 339
#define LOOP_ID 340
#define FOR_ID 341
#define TO_ID 342
#define SWITCH_ID 343
#define CASE_ID 344
#define BREAK_ID 345
#define DEFAULT_ID 346
#define ERODED_ID 347
#define TRAPPED_ID 348
#define RECHARGED_ID 349
#define INVIS_ID 350
#define GREASED_ID 351
#define FEMALE_ID 352
#define CANCELLED_ID 353
#define REVIVED_ID 354
#define AVENGE_ID 355
#define FLEEING_ID 356
#define BLINDED_ID 357
#define PARALYZED_ID 358
#define STUNNED_ID 359
#define CONFUSED_ID 360
#define SEENTRAPS_ID 361
#define ALL_ID 362
#define MONTYPE_ID 363
#define GRAVE_ID 364
#define ERODEPROOF_ID 365
#define FUNCTION_ID 366
#define MSG_OUTPUT_TYPE 367
#define COMPARE_TYPE 368
#define UNKNOWN_TYPE 369
#define rect_ID 370
#define fillrect_ID 371
#define line_ID 372
#define randline_ID 373
#define grow_ID 374
#define selection_ID 375
#define flood_ID 376
#define rndcoord_ID 377
#define circle_ID 378
#define ellipse_ID 379
#define filter_ID 380
#define complement_ID 381
#define gradient_ID 382
#define GRADIENT_TYPE 383
#define LIMITED 384
#define HUMIDITY_TYPE 385
#define STRING 386
#define MAP_ID 387
#define NQSTRING 388
#define VARSTRING 389
#define CFUNC 390
#define CFUNC_INT 391
#define CFUNC_STR 392
#define CFUNC_COORD 393
#define CFUNC_REGION 394
#define VARSTRING_INT 395
#define VARSTRING_INT_ARRAY 396
#define VARSTRING_STRING 397
#define VARSTRING_STRING_ARRAY 398
#define VARSTRING_VAR 399
#define VARSTRING_VAR_ARRAY 400
#define VARSTRING_COORD 401
#define VARSTRING_COORD_ARRAY 402
#define VARSTRING_REGION 403
#define VARSTRING_REGION_ARRAY 404
#define VARSTRING_MAPCHAR 405
#define VARSTRING_MAPCHAR_ARRAY 406
#define VARSTRING_MONST 407
#define VARSTRING_MONST_ARRAY 408
#define VARSTRING_OBJ 409
#define VARSTRING_OBJ_ARRAY 410
#define VARSTRING_SEL 411
#define VARSTRING_SEL_ARRAY 412
#define METHOD_INT 413
#define METHOD_INT_ARRAY 414
#define METHOD_STRING 415
#define METHOD_STRING_ARRAY 416
#define METHOD_VAR 417
#define METHOD_VAR_ARRAY 418
#define METHOD_COORD 419
#define METHOD_COORD_ARRAY 420
#define METHOD_REGION 421
#define METHOD_REGION_ARRAY 422
#define METHOD_MAPCHAR 423
#define METHOD_MAPCHAR_ARRAY 424
#define METHOD_MONST 425
#define METHOD_MONST_ARRAY 426
#define METHOD_OBJ 427
#define METHOD_OBJ_ARRAY 428
#define METHOD_SEL 429
#define METHOD_SEL_ARRAY 430
#define DICE 431
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
{ {
int i;
/* Line 1676 of yacc.c */
#line 146 "lev_comp.y"
long i;
char* map; char* map;
struct { struct {
xchar room; long room;
xchar wall; long wall;
xchar door; long door;
} corpos; } corpos;
struct {
long area;
long x1;
long y1;
long x2;
long y2;
} lregn;
struct {
long x;
long y;
} crd;
struct {
long ter;
long lit;
} terr;
struct {
long height;
long width;
} sze;
struct {
long die;
long num;
} dice;
struct {
long cfunc;
char *varstr;
} meth;
/* Line 1676 of yacc.c */
#line 443 "y.tab.h"
} YYSTYPE; } YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
extern YYSTYPE yylval; extern YYSTYPE yylval;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -697,7 +697,7 @@ funcdef_defined(f, name, casesense)
if (casesense) { if (casesense) {
if (!strcmp(name, f->name)) return f; if (!strcmp(name, f->name)) return f;
} else { } else {
if (!strcasecmp(name, f->name)) return f; if (!strcmpi(name, f->name)) return f;
} }
f = f->next; f = f->next;
} }
@@ -748,7 +748,7 @@ vardef_defined(f, name, casesense)
if (casesense) { if (casesense) {
if (!strcmp(name, f->name)) return f; if (!strcmp(name, f->name)) return f;
} else { } else {
if (!strcasecmp(name, f->name)) return f; if (!strcmpi(name, f->name)) return f;
} }
f = f->next; f = f->next;
} }
@@ -988,7 +988,7 @@ char c;
/* didn't find it; lets try case insensitive search */ /* didn't find it; lets try case insensitive search */
for (i = LOW_PM; i < NUMMONS; i++) for (i = LOW_PM; i < NUMMONS; i++)
if (!class || class == mons[i].mlet) if (!class || class == mons[i].mlet)
if (!strcasecmp(s, mons[i].mname)) { if (!strcmpi(s, mons[i].mname)) {
if (be_verbose) if (be_verbose)
lc_warning("Monster type \"%s\" matches \"%s\".", s, mons[i].mname); lc_warning("Monster type \"%s\" matches \"%s\".", s, mons[i].mname);
return i; return i;
@@ -1020,7 +1020,7 @@ char c; /* class */
for (i = class ? bases[class] : 0; i < NUM_OBJECTS; i++) { for (i = class ? bases[class] : 0; i < NUM_OBJECTS; i++) {
if (class && objects[i].oc_class != class) break; if (class && objects[i].oc_class != class) break;
objname = obj_descr[i].oc_name; objname = obj_descr[i].oc_name;
if (objname && !strcasecmp(s, objname)) { if (objname && !strcmpi(s, objname)) {
if (be_verbose) if (be_verbose)
lc_warning("Object type \"%s\" matches \"%s\".", s, objname); lc_warning("Object type \"%s\" matches \"%s\".", s, objname);
return i; return i;

View File

@@ -1,26 +1,20 @@
# $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ # Uncomment as appropriate for your form of YACC/LEX.
# $Date:2002/01/22 22:54:54 $ $Revision: 1.2 $ #
#YACC = byacc.exe #YACC = yacc.exe
#LEX = flex.exe #YACC = byacc.exe
#YTABC = y_tab.c YACC = bison.exe -y
#YTABH = y_tab.h #
#LEXYYC = lexyy.c #LEX = lex.exe
LEX = flex.exe
!IF "$(YACC)"!=""
@echo Yacc-alike set to $(YACC)
@echo YTABC set to $(YTABC)
@echo YTABH set to $(YTABH)
!ENDIF
!IF "$(LEX)"!=""
@echo Lex-alike set to $(LEX)
@echo LEXYYC set to $(LEXYYC)
!ENDIF
# these won't have an impact unless YACC/LEX are defined
YTABC = y.tab.c
YTABH = y.tab.h
LEXYYC = lex.yy.c
default: all default: all
all: ..\util\lev_yacc.c ..\util\lev_lex.c all: tools ..\util\lev_yacc.c ..\util\lev_lex.c
rebuild: clean all rebuild: clean all
@@ -29,15 +23,29 @@ clean:
-del ..\util\lev_yacc.c -del ..\util\lev_yacc.c
-del ..\include\lev_comp.h -del ..\include\lev_comp.h
tools:
!IFDEF YACC
@echo Yacc-alike set to $(YACC)
@echo YTABC set to $(YTABC)
@echo YTABH set to $(YTABH)
!ENDIF
!IFDEF LEX
@echo Lex-alike set to $(LEX)
@echo LEXYYC set to $(LEXYYC)
!ENDIF
#========================================== #==========================================
# Level Compiler Stuff # Level Compiler Stuff
#========================================== #==========================================
..\util\lev_yacc.c ..\include\lev_comp.h: ..\util\lev_comp.y ..\util\lev_yacc.c ..\include\lev_comp.h: ..\util\lev_comp.y
!IF "$(YACC)"=="" !IFNDEF YACC
@echo Using pre-built lev_yacc.c and lev_comp.h @echo Using pre-built lev_yacc.c and lev_comp.h
@copy ..\sys\share\lev_yacc.c ..\util\lev_yacc.c @copy ..\sys\share\lev_yacc.c ..\util\lev_yacc.c
@copy ..\sys\share\lev_comp.h ..\include\lev_comp.h @copy ..\sys\share\lev_comp.h ..\include\lev_comp.h
!ELSE !ELSE
@echo Generating lev_yacc.c and lev_comp.h
chdir ..\util chdir ..\util
$(YACC) -d lev_comp.y $(YACC) -d lev_comp.y
copy $(YTABC) $@ copy $(YTABC) $@
@@ -48,10 +56,11 @@ clean:
!ENDIF !ENDIF
..\util\lev_lex.c: ..\util\lev_comp.l ..\util\lev_lex.c: ..\util\lev_comp.l
!IF "$(LEX)"=="" !IFNDEF LEX
@echo Using pre-built lev_lex.c @echo Using pre-built lev_lex.c
@copy ..\sys\share\lev_lex.c $@ @copy ..\sys\share\lev_lex.c $@
!ELSE !ELSE
@echo Generating lev_lex.c
chdir ..\util chdir ..\util
$(LEX) lev_comp.l $(LEX) lev_comp.l
copy $(LEXYYC) $@ copy $(LEXYYC) $@