diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index 6b40f0ec5..48a30298b 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -24,7 +24,7 @@ .ds vr "NetHack 3.6 .ds f0 "\*(vr .ds f1 -.ds f2 "October 16, 2018 +.ds f2 "November 27, 2018 . .\" A note on some special characters: .\" \(lq = left double quote @@ -3136,6 +3136,21 @@ Default \(oq,\(cq. .lp monpolycontrol Prompt for new form whenever any monster changes shape (default off). Debug mode only. +.lp mouse_support +Allow use of the mouse for input and travel. +Valid settings are: +.PS -1 +.PL "\ 0" +disabled +.PL "\ 1" +enabled and make OS adjustments to support mouse use in the game. +.PL "\ 2" +like 1 but does not make any OS adjustments +.PE +For backward compatibility, omitting a value is the same as specifying 1 +and negating +.op mouse_support +is the same as specifying 0. .lp msghistory The number of top line messages to keep (and be able to recall with \(oq\(haP\(cq) (default 20). @@ -3557,8 +3572,6 @@ in a window. If NetHack can, it should use a large font. .lp map_mode If NetHack can, it should display the map in the manner specified. -.lp mouse_support -Allow use of the mouse for input and travel. .lp player_selection If NetHack can, it should pop up dialog boxes, or use prompts for character selection. diff --git a/doc/Guidebook.tex b/doc/Guidebook.tex index 1a194ea54..18c366a27 100644 --- a/doc/Guidebook.tex +++ b/doc/Guidebook.tex @@ -45,7 +45,7 @@ %.au \author{Original version - Eric S. Raymond\\ (Edited and expanded for 3.6 by Mike Stephenson and others)} -\date{October 16, 2018} +\date{November 27, 2018} \maketitle @@ -3445,6 +3445,26 @@ Default `,'. Prompt for new form whenever any monster changes shape (default off). Debug mode only. %.lp +\item[\ib{mouse\verb+_+support}] +Allow use of the mouse for input and travel. +Valid settings are: + +%.sd +%.si +\newlength{\mwidth} +\settowidth{\mwidth}{\tt -0} +\newcommand{\numbox}[1]{\makebox[\mwidth][r]{{\tt #1}}} +\numbox{0} --- disabled\\ +\numbox{1} --- enabled and make OS adjustment to support mouse use in the game\\ +\numbox{2} --- enabled like {\tt 1}, but does not make any OS adjustments\\ +%.ei +%.ed + +For backward compatibility, omitting a value is the same as specifying {\tt 1} +and negating +{\it mouse\verb+_+support\/} +is the same as specifying {\tt 0}. +%.lp \item[\ib{msghistory}] The number of top line messages to save (and be able to recall with `{\tt \^{}P}') (default 20). @@ -3487,37 +3507,6 @@ Start the character with no armor (default false). Persistent. \item[\ib{null}] Send padding nulls to the terminal (default on). Persistent. %.lp -\item[\ib{number\verb+_+pad}] -Use digit keys instead of letters to move (default 0 or off).\\ -Valid settings are: - -%.sd -%.si -\newlength{\mwidth} -\settowidth{\mwidth}{\tt -0} -\newcommand{\numbox}[1]{\makebox[\mwidth][r]{{\tt #1}}} -\numbox{0} --- move by letters; `{\tt yuhjklbn}'\\ -\numbox{1} --- move by numbers; digit `{\tt 5}' acts as `{\tt G}' movement prefix\\ -\numbox{2} --- like {\tt 1} but `{\tt 5}' works as `{\tt g}' prefix instead of as `{\tt G}'\\ -\numbox{3} --- by numbers using phone key layout; {\tt 123} above, {\tt 789} below\\ -\numbox{4} --- combines {\tt 3} with {\tt 2}; phone layout plus MS-DOS compatibility\\ -\numbox{-1} --- by letters but use `{\tt z}' to go northwest, `{\tt y}' to zap wands -%.ei -%.ed - -For backward compatibility, omitting a value is the same as specifying {\tt 1} -and negating -{\it number\verb+_+pad\/} -is the same as specifying {\tt 0}. -(Settings {\tt 2} and {\tt 4} are for compatibility with MS-DOS or old PC Hack; -in addition to the different behavior for `{\tt 5}', `{\tt Alt-5}' acts as `{\tt G}' -and `{\tt Alt-0}' acts as `{\tt I}'. -Setting {\tt -1} is to accommodate some QWERTZ keyboards which have the -location of the `{\tt y}' and `{\tt z}' keys swapped.) -When moving by numbers, to enter a count prefix for those commands -which accept one (such as ``{\tt 12s}'' to search twelve times), precede it -with the letter `{\tt n}' (``{\tt n12s}''). -%.lp \item[\ib{packorder}] Specify the order to list object types in (default ``\verb&")[%?+!=/(*`0_&''). The value of this option should be a string @@ -3940,9 +3929,6 @@ If {\it NetHack\/} can, it should use a large font. \item[\ib{map\verb+_+mode}] If {\it NetHack\/} can, it should display the map in the manner specified. %.lp -\item[\ib{mouse\verb+_+support}] -Allow use of the mouse for input and travel. -%.lp \item[\ib{player\verb+_+selection}] If {\it NetHack\/} can, it should pop up dialog boxes or use prompts for character selection. %.lp diff --git a/doc/fixes36.2 b/doc/fixes36.2 index 9c54cd357..b840669b2 100644 --- a/doc/fixes36.2 +++ b/doc/fixes36.2 @@ -222,6 +222,9 @@ attempting to untrap an adjacent trap while on the edge of--not in--a pit failed due to not being able to reach the floor magic trap's deafening roar effect wasn't waking nearby monsters scattering of objects might leave source location with wrong thing displayed +for configurations with 'long int' larger than 'int', lev_comp wrote some + garbage into the *.lev files, but nethack seemed unaffected by that + (at least on little-endian hardare) and loaded the levels successfully Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository diff --git a/include/botl.h b/include/botl.h index f7cbce08f..6c3ddb8c6 100644 --- a/include/botl.h +++ b/include/botl.h @@ -36,15 +36,13 @@ enum statusfields { BL_ALIGN, BL_SCORE, BL_CAP, BL_GOLD, BL_ENE, BL_ENEMAX, /* 7..12 */ BL_XP, BL_AC, BL_HD, BL_TIME, BL_HUNGER, BL_HP, /* 13..18 */ BL_HPMAX, BL_LEVELDESC, BL_EXP, BL_CONDITION, /* 19..22 */ - BL_COUNT + MAXBLSTATS }; enum relationships { NO_LTEQGT = -1, EQ_VALUE, LT_VALUE, LE_VALUE, GE_VALUE, GT_VALUE, TXT_VALUE }; -#define MAXBLSTATS (BL_COUNT) - #define BEFORE 0 #define NOW 1 diff --git a/include/flag.h b/include/flag.h index b0be1a0f9..956de39f0 100644 --- a/include/flag.h +++ b/include/flag.h @@ -416,13 +416,13 @@ struct instance_flags { boolean wc_popup_dialog; /* put queries in pop up dialogs instead of * in the message window */ boolean wc_eight_bit_input; /* allow eight bit input */ - boolean wc_mouse_support; /* allow mouse support */ boolean wc2_fullscreen; /* run fullscreen */ boolean wc2_softkeyboard; /* use software keyboard */ boolean wc2_wraptext; /* wrap text */ boolean wc2_selectsaved; /* display a menu of user's saved games */ boolean wc2_darkgray; /* try to use dark-gray color for black glyphs */ boolean wc2_hitpointbar; /* show graphical bar representing hit points */ + int wc_mouse_support; /* allow mouse support */ int wc2_term_cols; /* terminal width, in characters */ int wc2_term_rows; /* terminal height, in characters */ int wc2_windowborders; /* display borders on NetHack windows */ diff --git a/include/sp_lev.h b/include/sp_lev.h index 79422818c..614d28df1 100644 --- a/include/sp_lev.h +++ b/include/sp_lev.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 sp_lev.h $NHDT-Date: 1524287214 2018/04/21 05:06:54 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.23 $ */ +/* NetHack 3.6 sp_lev.h $NHDT-Date: 1543371689 2018/11/28 02:21:29 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.24 $ */ /* Copyright (c) 1989 by Jean-Christophe Collet */ /* NetHack may be freely redistributed. See license for details. */ @@ -222,7 +222,7 @@ enum sp_obj_var_flags { #define SPOVAR_SEL 0x09 /* selection. char[COLNO][ROWNO] in str */ #define SPOVAR_ARRAY 0x40 /* used in splev_var & lc_vardefs, not in opvar */ -#define SP_COORD_IS_RANDOM 0x01000000 +#define SP_COORD_IS_RANDOM 0x01000000L /* Humidity flags for get_location() and friends, used with * SP_COORD_PACK_RANDOM() */ #define DRY 0x01 diff --git a/include/tradstdc.h b/include/tradstdc.h index 5e5cbd7c2..d1b1f250c 100644 --- a/include/tradstdc.h +++ b/include/tradstdc.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 tradstdc.h $NHDT-Date: 1501803107 2017/08/03 23:31:47 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.29 $ */ +/* NetHack 3.6 tradstdc.h $NHDT-Date: 1543371689 2018/11/28 02:21:29 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.32 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2006. */ /* NetHack may be freely redistributed. See license for details. */ @@ -95,7 +95,7 @@ { \ va_list the_args; #define VA_INIT(var1, typ1) -#define VA_NEXT(var1, typ1) var1 = va_arg(the_args, typ1) +#define VA_NEXT(var1, typ1) (var1 = va_arg(the_args, typ1)) #define VA_ARGS the_args #define VA_START(x) va_start(the_args, x) #define VA_END() \ @@ -123,7 +123,7 @@ #define VA_ARGS the_args #define VA_START(x) va_start(the_args) #define VA_INIT(var1, typ1) var1 = va_arg(the_args, typ1) -#define VA_NEXT(var1, typ1) var1 = va_arg(the_args, typ1) +#define VA_NEXT(var1, typ1) (var1 = va_arg(the_args, typ1)) #define VA_END() \ va_end(the_args); \ } diff --git a/include/wincurs.h b/include/wincurs.h index 0db58fcbc..eb07879f4 100644 --- a/include/wincurs.h +++ b/include/wincurs.h @@ -1,3 +1,7 @@ +/* NetHack 3.6 wincurs.h */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ + #ifndef WINCURS_H #define WINCURS_H diff --git a/src/do_name.c b/src/do_name.c index 88735f6e1..c1210bbd9 100644 --- a/src/do_name.c +++ b/src/do_name.c @@ -2096,8 +2096,12 @@ const char *gang, *other; char buf[BUFSZ], buf2[BUFSZ], *orcname; orcname = rndorcname(buf2); - sz = (int) ((gang ? strlen(gang) : other ? strlen(other) : 0) - + strlen(orcname) + sizeof " of " - sizeof ""); + sz = (int) strlen(orcname); + if (gang) + sz += (int) (strlen(gang) + sizeof " of " - sizeof ""); + else if (other) + sz += (int) strlen(other); + if (sz < BUFSZ) { char gbuf[BUFSZ]; boolean nameit = FALSE; diff --git a/src/files.c b/src/files.c index 6385f8beb..bec88904f 100644 --- a/src/files.c +++ b/src/files.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 files.c $NHDT-Date: 1542765358 2018/11/21 01:55:58 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.243 $ */ +/* NetHack 3.6 files.c $NHDT-Date: 1543395733 2018/11/28 09:02:13 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.244 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Derek S. Ray, 2015. */ /* NetHack may be freely redistributed. See license for details. */ @@ -2797,8 +2797,9 @@ const char *buf; buf = "Unknown error"; if (!config_error_data) { - /* assumes pline() is using raw_printf() as this stage */ - pline("config_error_add: %s.", buf); + /* either very early, where pline() will use raw_print(), or + player gave bad value when prompted by interactive 'O' command */ + pline("%s%s.", !iflags.window_inited ? "config_error_add: " : "", buf); wait_synch(); return; } diff --git a/src/options.c b/src/options.c index f2ad9a058..8be8cfcd3 100644 --- a/src/options.c +++ b/src/options.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 options.c $NHDT-Date: 1526112322 2018/05/12 08:05:22 $ $NHDT-Branch: master $:$NHDT-Revision: 1.323 $ */ +/* NetHack 3.6 options.c $NHDT-Date: 1543395749 2018/11/28 09:02:29 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.334 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Michael Allison, 2008. */ /* NetHack may be freely redistributed. See license for details. */ @@ -166,11 +166,6 @@ static struct Bool_Opt { { "menu_overlay", (boolean *) 0, FALSE, SET_IN_FILE }, #endif { "monpolycontrol", &iflags.mon_polycontrol, FALSE, SET_IN_WIZGAME }, -#ifdef CURSES_GRAPHICS - { "mouse_support", &iflags.wc_mouse_support, FALSE, DISP_IN_GAME }, /*WC*/ -#else - { "mouse_support", &iflags.wc_mouse_support, TRUE, DISP_IN_GAME }, /*WC*/ -#endif #ifdef NEWS { "news", &iflags.news, TRUE, DISP_IN_GAME }, #else @@ -342,6 +337,7 @@ static struct Comp_Opt { #endif { "name", "your character's name (e.g., name:Merlin-W)", PL_NSIZ, DISP_IN_GAME }, + { "mouse_support", "game receives click info from mouse", 0, SET_IN_GAME }, { "number_pad", "use the number pad for movement", 1, SET_IN_GAME }, { "objects", "the symbols to use for objects", MAXOCLASSES, SET_IN_FILE }, { "packorder", "the inventory order of the items in your pack", @@ -2209,6 +2205,35 @@ boolean tinitial, tfrom_file; return retval; } + fullname = "mouse_support"; + if (match_optname(opts, fullname, 13, TRUE)) { + boolean compat = (strlen(opts) <= 13); + + if (duplicate) + complain_about_duplicate(opts, 1); + op = string_for_opt(opts, (compat || !initial)); + if (!op) { + if (compat || negated || initial) { + /* for backwards compatibility, "mouse_support" without a + value is a synonym for mouse_support:1 */ + iflags.wc_mouse_support = !negated; + } + } else if (negated) { + bad_negation(fullname, TRUE); + return FALSE; + } else { + int mode = atoi(op); + + if (mode < 0 || mode > 2 || (mode == 0 && *op != '0')) { + config_error_add("Illegal %s parameter '%s'", fullname, op); + return FALSE; + } else { /* mode >= 0 */ + iflags.wc_mouse_support = mode; + } + } + return retval; + } + fullname = "number_pad"; if (match_optname(opts, fullname, 10, TRUE)) { boolean compat = (strlen(opts) <= 10); @@ -2263,8 +2288,9 @@ boolean tinitial, tfrom_file; symset[ROGUESET].name = dupstr(op); if (!read_sym_file(ROGUESET)) { clear_symsetentry(ROGUESET, TRUE); - config_error_add("Unable to load symbol set \"%s\" from \"%s\"", - op, SYMBOLS); + config_error_add( + "Unable to load symbol set \"%s\" from \"%s\"", + op, SYMBOLS); return FALSE; } else { if (!initial && Is_rogue_level(&u.uz)) @@ -5338,10 +5364,10 @@ get_compopt_value(optname, buf) const char *optname; char *buf; { - char ocl[MAXOCLASSES + 1]; static const char none[] = "(none)", randomrole[] = "random", - to_be_done[] = "(to be done)", defopt[] = "default", - defbrief[] = "def"; + to_be_done[] = "(to be done)", + defopt[] = "default", defbrief[] = "def"; + char ocl[MAXOCLASSES + 1]; int i; buf[0] = '\0'; @@ -5496,6 +5522,25 @@ char *buf; #endif } else if (!strcmp(optname, "name")) { Sprintf(buf, "%s", plname); + } else if (!strcmp(optname, "mouse_support")) { +#ifdef WIN32 +#define MOUSEFIX1 ", QuickEdit off" +#define MOUSEFIX2 ", QuickEdit unchanged" +#else +#define MOUSEFIX1 ", O/S adjusted" +#define MOUSEFIX2 ", O/S unchanged" +#endif + static const char *mousemodes[][2] = { + { "0=off", "" }, + { "1=on", MOUSEFIX1 }, + { "2=on", MOUSEFIX2 }, + }; +#undef MOUSEFIX1 +#undef MOUSEFIX2 + int ms = iflags.wc_mouse_support; + + if (ms >= 0 && ms <= 2) + Sprintf(buf, "%s%s", mousemodes[ms][0], mousemodes[ms][1]); } else if (!strcmp(optname, "number_pad")) { static const char *numpadmodes[] = { "0=off", "1=on", "2=on, MSDOS compatible", diff --git a/src/pager.c b/src/pager.c index 27d274adc..e9fe016ed 100644 --- a/src/pager.c +++ b/src/pager.c @@ -1353,10 +1353,12 @@ static const char *suptext1[] = { }; static const char *suptext2[] = { - "%s is a nefarious orc who is known to acquire", - "property from thieves and sell it off for profit", - "or gain. The perpetrator was last seen hanging", - "around the stairs leading to the Gnomish Mines.", + "\"%s\" is the common dungeon name of", + "a nefarious orc who is known to acquire property", + "from thieves and sell it off for profit.", + "", + "The perpetrator was last seen hanging around the", + "stairs leading to the Gnomish Mines.", (char *) 0, }; diff --git a/sys/share/lev_comp.h b/sys/share/lev_comp.h index 44818699a..1e3f16fa4 100644 --- a/sys/share/lev_comp.h +++ b/sys/share/lev_comp.h @@ -174,39 +174,39 @@ #define DICE 430 typedef union { - long i; - char* map; - struct { - long room; - long wall; - long door; - } corpos; + long i; + char *map; struct { - long area; - long x1; - long y1; - long x2; - long y2; + long room; + long wall; + long door; + } corpos; + struct { + long area; + long x1; + long y1; + long x2; + long y2; } lregn; struct { - long x; - long y; + long x; + long y; } crd; struct { - long ter; - long lit; + long ter; + long lit; } terr; struct { - long height; - long width; + long height; + long width; } sze; struct { - long die; - long num; + long die; + long num; } dice; struct { - long cfunc; - char *varstr; + long cfunc; + char *varstr; } meth; } YYSTYPE; extern YYSTYPE yylval; diff --git a/sys/share/lev_lex.c b/sys/share/lev_lex.c index 02a754e3d..acf03dbaf 100644 --- a/sys/share/lev_lex.c +++ b/sys/share/lev_lex.c @@ -1024,7 +1024,7 @@ int yy_flex_debug = 0; #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; -/* NetHack 3.6 lev_comp.l $NHDT-Date: 1522193683 2018/03/27 23:34:43 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.28 $ */ +/* NetHack 3.6 lev_comp.l $NHDT-Date: 1543372935 2018/11/28 02:42:15 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.29 $ */ /* Copyright (c) 1989 by Jean-Christophe Collet */ /* NetHack may be freely redistributed. See license for details. */ @@ -1102,7 +1102,7 @@ long FDECL(corefunc_str_check, (char *, long)); extern void VDECL(lc_error, (const char *, ...)); extern struct lc_vardefs *FDECL(vardef_defined,(struct lc_vardefs *,char *, int)); -extern struct lc_vardefs *variable_definitions; +extern struct lc_vardefs *vardefs; extern long FDECL(method_defined, (char *, long, long *)); @@ -3256,7 +3256,7 @@ handle_varstring_check() struct lc_vardefs *vd; yylval.map = dupstr(yytext); - if ((vd = vardef_defined(variable_definitions, yytext, 1)) != 0) { + if ((vd = vardef_defined(vardefs, yytext, 1)) != 0) { long l = vd->var_type; int a = ((l & SPOVAR_ARRAY) == SPOVAR_ARRAY); diff --git a/sys/share/lev_yacc.c b/sys/share/lev_yacc.c index 19b423233..fdc9a9af3 100644 --- a/sys/share/lev_yacc.c +++ b/sys/share/lev_yacc.c @@ -11,7 +11,7 @@ #define yyerrok (yyerrflag=0) #define YYRECOVERING (yyerrflag!=0) #define YYPREFIX "yy" -/* NetHack 3.6 lev_comp.y $NHDT-Date: 1455747019 2016/02/17 22:10:19 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.22 $ */ +/* NetHack 3.6 lev_comp.y $NHDT-Date: 1543372951 2018/11/28 02:42:31 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.23 $ */ /* Copyright (c) 1989 by Jean-Christophe Collet */ /* NetHack may be freely redistributed. See license for details. */ @@ -126,7 +126,8 @@ int obj_containment = 0; int in_container_obj = 0; -/* integer value is possibly an inconstant value (eg. dice notation or a variable) */ +/* integer value is possibly an inconstant value (eg. dice notation + or a variable) */ int is_inconstant_number = 0; int in_switch_statement = 0; @@ -139,7 +140,7 @@ int n_switch_case_list = 0; int allow_break_statements = 0; struct lc_breakdef *break_list = NULL; -extern struct lc_vardefs *variable_definitions; +extern struct lc_vardefs *vardefs; /* variable definitions */ struct lc_vardefs *function_tmp_var_defs = NULL; @@ -158,39 +159,39 @@ extern char curr_token[512]; typedef union { - long i; - char* map; - struct { - long room; - long wall; - long door; - } corpos; + long i; + char *map; struct { - long area; - long x1; - long y1; - long x2; - long y2; + long room; + long wall; + long door; + } corpos; + struct { + long area; + long x1; + long y1; + long x2; + long y2; } lregn; struct { - long x; - long y; + long x; + long y; } crd; struct { - long ter; - long lit; + long ter; + long lit; } terr; struct { - long height; - long width; + long height; + long width; } sze; struct { - long die; - long num; + long die; + long num; } dice; struct { - long cfunc; - char *varstr; + long cfunc; + char *varstr; } meth; } YYSTYPE; #define CHAR 257 @@ -2605,21 +2606,22 @@ case 5: { if (fatal_error > 0) { (void) fprintf(stderr, - "%s: %d errors detected for level \"%s\". No output created!\n", + "%s: %d errors detected for level \"%s\". No output created!\n", fname, fatal_error, yyvsp[-2].map); fatal_error = 0; got_errors++; } else if (!got_errors) { if (!write_level_file(yyvsp[-2].map, splev)) { - lc_error("Can't write output file for '%s'!", yyvsp[-2].map); + lc_error("Can't write output file for '%s'!", + yyvsp[-2].map); exit(EXIT_FAILURE); } } Free(yyvsp[-2].map); Free(splev); splev = NULL; - vardef_free_all(variable_definitions); - variable_definitions = NULL; + vardef_free_all(vardefs); + vardefs = NULL; } break; case 6: @@ -2633,10 +2635,11 @@ case 7: start_level_def(&splev, yyvsp[-2].map); if (yyvsp[0].i == -1) { add_opvars(splev, "iiiiiiiio", - VA_PASS9(LVLINIT_MAZEGRID,HWALL,0,0, + VA_PASS9(LVLINIT_MAZEGRID, HWALL, 0,0, 0,0,0,0, SPO_INITLEVEL)); } else { - long bg = what_map_char((char) yyvsp[0].i); + int bg = (int) what_map_char((char) yyvsp[0].i); + add_opvars(splev, "iiiiiiiio", VA_PASS9(LVLINIT_SOLIDFILL, bg, 0,0, 0,0,0,0, SPO_INITLEVEL)); @@ -2660,22 +2663,26 @@ case 9: break; case 10: { - long filling = yyvsp[0].terr.ter; + int filling = (int) yyvsp[0].terr.ter; + if (filling == INVALID_TYPE || filling >= MAX_TYPE) lc_error("INIT_MAP: Invalid fill char type."); add_opvars(splev, "iiiiiiiio", - LVLINIT_SOLIDFILL,filling,0,(long)yyvsp[0].terr.lit, 0,0,0,0, SPO_INITLEVEL); + VA_PASS9(LVLINIT_SOLIDFILL, filling, + 0, (int) yyvsp[0].terr.lit, + 0,0,0,0, SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; } break; case 11: { - long filling = what_map_char((char) yyvsp[0].i); + int filling = (int) what_map_char((char) yyvsp[0].i); + if (filling == INVALID_TYPE || filling >= MAX_TYPE) lc_error("INIT_MAP: Invalid fill char type."); - add_opvars(splev, "iiiiiiiio", - VA_PASS9(LVLINIT_MAZEGRID,filling,0,0, + add_opvars(splev, "iiiiiiiio", + VA_PASS9(LVLINIT_MAZEGRID, filling, 0,0, 0,0,0,0, SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; @@ -2690,13 +2697,14 @@ case 12: break; case 13: { - long fg = what_map_char((char) yyvsp[-11].i); - long bg = what_map_char((char) yyvsp[-9].i); - long smoothed = yyvsp[-7].i; - long joined = yyvsp[-5].i; - long lit = yyvsp[-3].i; - long walled = yyvsp[-1].i; - long filling = yyvsp[0].i; + int fg = (int) what_map_char((char) yyvsp[-11].i), + bg = (int) what_map_char((char) yyvsp[-9].i); + int smoothed = (int) yyvsp[-7].i, + joined = (int) yyvsp[-5].i, + lit = (int) yyvsp[-3].i, + walled = (int) yyvsp[-1].i, + filling = (int) yyvsp[0].i; + if (fg == INVALID_TYPE || fg >= MAX_TYPE) lc_error("INIT_MAP: Invalid foreground type."); if (bg == INVALID_TYPE || bg >= MAX_TYPE) @@ -2708,8 +2716,8 @@ case 13: lc_error("INIT_MAP: Invalid fill char type."); add_opvars(splev, "iiiiiiiio", - VA_PASS9(LVLINIT_MINES,filling,walled,lit, - joined,smoothed,bg,fg, + VA_PASS9(LVLINIT_MINES, filling, walled, lit, + joined, smoothed, bg, fg, SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; @@ -2753,7 +2761,8 @@ case 22: break; case 23: { - add_opvars(splev, "io", VA_PASS2(yyvsp[0].i, SPO_LEVEL_FLAGS)); + add_opvars(splev, "io", + VA_PASS2((int) yyvsp[0].i, SPO_LEVEL_FLAGS)); } break; case 24: @@ -2784,74 +2793,80 @@ break; case 96: { struct lc_vardefs *vd; - if ((vd = vardef_defined(variable_definitions, yyvsp[0].map, 1))) { + + if ((vd = vardef_defined(vardefs, yyvsp[0].map, 1))) { if (!(vd->var_type & SPOVAR_ARRAY)) - lc_error("Trying to shuffle non-array variable '%s'", yyvsp[0].map); - } else lc_error("Trying to shuffle undefined variable '%s'", yyvsp[0].map); + lc_error("Trying to shuffle non-array variable '%s'", + yyvsp[0].map); + } else + lc_error("Trying to shuffle undefined variable '%s'", + yyvsp[0].map); add_opvars(splev, "so", VA_PASS2(yyvsp[0].map, SPO_SHUFFLE_ARRAY)); Free(yyvsp[0].map); } break; case 97: { - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-2].map, SPOVAR_INT); + vardefs = add_vardef_type(vardefs, yyvsp[-2].map, SPOVAR_INT); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT)); Free(yyvsp[-2].map); } break; case 98: { - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_SEL); + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_SEL); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); } break; case 99: { - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-2].map, SPOVAR_STRING); + vardefs = add_vardef_type(vardefs, yyvsp[-2].map, SPOVAR_STRING); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT)); Free(yyvsp[-2].map); } break; case 100: { - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_MAPCHAR); + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_MAPCHAR); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); } break; case 101: { - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_MONST); + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_MONST); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); } break; case 102: { - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_OBJ); + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_OBJ); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); } break; case 103: { - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-2].map, SPOVAR_COORD); + vardefs = add_vardef_type(vardefs, yyvsp[-2].map, SPOVAR_COORD); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT)); Free(yyvsp[-2].map); } break; case 104: { - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-2].map, SPOVAR_REGION); + vardefs = add_vardef_type(vardefs, yyvsp[-2].map, SPOVAR_REGION); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT)); Free(yyvsp[-2].map); } break; case 105: { - long n_items = yyvsp[-1].i; - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_INT|SPOVAR_ARRAY); + int n_items = (int) yyvsp[-1].i; + + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, + SPOVAR_INT | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); @@ -2859,8 +2874,10 @@ case 105: break; case 106: { - long n_items = yyvsp[-1].i; - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_COORD|SPOVAR_ARRAY); + int n_items = (int) yyvsp[-1].i; + + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, + SPOVAR_COORD | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); @@ -2868,8 +2885,10 @@ case 106: break; case 107: { - long n_items = yyvsp[-1].i; - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_REGION|SPOVAR_ARRAY); + int n_items = (int) yyvsp[-1].i; + + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, + SPOVAR_REGION | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); @@ -2877,8 +2896,10 @@ case 107: break; case 108: { - long n_items = yyvsp[-1].i; - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-6].map, SPOVAR_MAPCHAR|SPOVAR_ARRAY); + int n_items = (int) yyvsp[-1].i; + + vardefs = add_vardef_type(vardefs, yyvsp[-6].map, + SPOVAR_MAPCHAR | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); Free(yyvsp[-6].map); @@ -2886,8 +2907,10 @@ case 108: break; case 109: { - long n_items = yyvsp[-1].i; - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-6].map, SPOVAR_MONST|SPOVAR_ARRAY); + int n_items = (int) yyvsp[-1].i; + + vardefs = add_vardef_type(vardefs, yyvsp[-6].map, + SPOVAR_MONST | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); Free(yyvsp[-6].map); @@ -2895,8 +2918,10 @@ case 109: break; case 110: { - long n_items = yyvsp[-1].i; - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-6].map, SPOVAR_OBJ|SPOVAR_ARRAY); + int n_items = (int) yyvsp[-1].i; + + vardefs = add_vardef_type(vardefs, yyvsp[-6].map, + SPOVAR_OBJ | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); Free(yyvsp[-6].map); @@ -2904,8 +2929,10 @@ case 110: break; case 111: { - long n_items = yyvsp[-1].i; - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_STRING|SPOVAR_ARRAY); + int n_items = (int) yyvsp[-1].i; + + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, + SPOVAR_STRING | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); @@ -3008,8 +3035,8 @@ case 126: splev = &(funcdef->code); Free(yyvsp[-1].map); curr_function = funcdef; - function_tmp_var_defs = variable_definitions; - variable_definitions = NULL; + function_tmp_var_defs = vardefs; + vardefs = NULL; } break; case 127: @@ -3023,21 +3050,25 @@ case 128: splev = function_splev_backup; in_function_definition--; curr_function = NULL; - vardef_free_all(variable_definitions); - variable_definitions = function_tmp_var_defs; + vardef_free_all(vardefs); + vardefs = function_tmp_var_defs; } break; case 129: { struct lc_funcdefs *tmpfunc; + tmpfunc = funcdef_defined(function_definitions, yyvsp[-3].map, 1); if (tmpfunc) { - long l; - long nparams = strlen( yyvsp[-1].map ); + int l; + int nparams = (int) strlen(yyvsp[-1].map); char *fparamstr = funcdef_paramtypes(tmpfunc); + if (strcmp(yyvsp[-1].map, fparamstr)) { char *tmps = strdup(decode_parm_str(fparamstr)); - lc_error("Function '%s' requires params '%s', got '%s' instead.", yyvsp[-3].map, tmps, decode_parm_str(yyvsp[-1].map)); + + lc_error("Function '%s' requires params '%s', got '%s' instead.", + yyvsp[-3].map, tmps, decode_parm_str(yyvsp[-1].map)); Free(tmps); } Free(fparamstr); @@ -3045,9 +3076,11 @@ case 129: if (!(tmpfunc->n_called)) { /* we haven't called the function yet, so insert it in the code */ struct opvar *jmp = New(struct opvar); + set_opvar_int(jmp, splev->n_opcodes+1); add_opcode(splev, SPO_PUSH, jmp); - add_opcode(splev, SPO_JMP, NULL); /* we must jump past it first, then CALL it, due to RETURN. */ + /* we must jump past it first, then CALL it, due to RETURN. */ + add_opcode(splev, SPO_JMP, NULL); tmpfunc->addr = splev->n_opcodes; @@ -3062,9 +3095,10 @@ case 129: } splev_add_from(splev, &(tmpfunc->code)); - set_opvar_int(jmp, splev->n_opcodes - jmp->vardata.l); + set_opvar_int(jmp, + splev->n_opcodes - jmp->vardata.l); } - l = tmpfunc->addr - splev->n_opcodes - 2; + l = (int) (tmpfunc->addr - splev->n_opcodes - 2); add_opvars(splev, "iio", VA_PASS3(nparams, l, SPO_CALL)); tmpfunc->n_called++; @@ -3093,7 +3127,7 @@ case 133: { /* val > rn2(100) */ add_opvars(splev, "iio", - VA_PASS3((long)yyvsp[0].i, 100, SPO_RN2)); + VA_PASS3((int) yyvsp[0].i, 100, SPO_RN2)); yyval.i = SPO_JG; } break; @@ -3117,6 +3151,7 @@ break; case 137: { struct opvar *chkjmp; + if (in_switch_statement > 0) lc_error("Cannot nest switch-statements."); @@ -3181,6 +3216,7 @@ case 141: { if (n_switch_case_list < MAX_SWITCH_CASES) { struct opvar *tmppush = New(struct opvar); + set_opvar_int(tmppush, splev->n_opcodes); switch_case_value[n_switch_case_list] = yyvsp[-1].i; switch_case_list[n_switch_case_list++] = tmppush; @@ -3229,8 +3265,7 @@ case 148: /* the value of which is already in stack (the 2nd math_expr) */ add_opvars(splev, "iso", VA_PASS3(0, buf, SPO_VAR_INIT)); - variable_definitions = add_vardef_type(variable_definitions, - yyvsp[-4].map, SPOVAR_INT); + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_INT); /* define the for-loop variable. value is in stack (1st math_expr) */ add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); @@ -3260,6 +3295,7 @@ case 149: break; case 150: { + int l; char buf[256], buf2[256]; n_forloops--; @@ -3278,10 +3314,9 @@ case 150: VA_PASS3(0, forloop_list[n_forloops].varname, SPO_VAR_INIT)); /* jump back if compared values were not equal */ - add_opvars(splev, "io", - VA_PASS2( - forloop_list[n_forloops].jmp_point - splev->n_opcodes - 1, - SPO_JNE)); + l = (int) (forloop_list[n_forloops].jmp_point + - splev->n_opcodes - 1); + add_opvars(splev, "io", VA_PASS2(l, SPO_JNE)); Free(forloop_list[n_forloops].varname); break_stmt_end(splev); } @@ -3308,10 +3343,11 @@ case 152: add_opvars(splev, "oio", VA_PASS3(SPO_COPY, 0, SPO_CMP)); tmppush = (struct opvar *) if_list[--n_if_list]; - set_opvar_int(tmppush, tmppush->vardata.l - splev->n_opcodes-1); + set_opvar_int(tmppush, + tmppush->vardata.l - splev->n_opcodes-1); add_opcode(splev, SPO_PUSH, tmppush); add_opcode(splev, SPO_JG, NULL); - add_opcode(splev, SPO_POP, NULL); /* get rid of the count value in stack */ + add_opcode(splev, SPO_POP, NULL); /* discard count */ break_stmt_end(splev); } break; @@ -3340,8 +3376,10 @@ case 154: { if (n_if_list > 0) { struct opvar *tmppush; + tmppush = (struct opvar *) if_list[--n_if_list]; - set_opvar_int(tmppush, splev->n_opcodes - tmppush->vardata.l); + set_opvar_int(tmppush, + splev->n_opcodes - tmppush->vardata.l); } else lc_error("IF: Huh?! No start address?"); } break; @@ -3375,8 +3413,10 @@ case 157: { if (n_if_list > 0) { struct opvar *tmppush; + tmppush = (struct opvar *) if_list[--n_if_list]; - set_opvar_int(tmppush, splev->n_opcodes - tmppush->vardata.l); + set_opvar_int(tmppush, + splev->n_opcodes - tmppush->vardata.l); } else lc_error("IF: Huh?! No start address?"); } break; @@ -3393,7 +3433,8 @@ case 158: tmppush2 = (struct opvar *) if_list[--n_if_list]; - set_opvar_int(tmppush2, splev->n_opcodes - tmppush2->vardata.l); + set_opvar_int(tmppush2, + splev->n_opcodes - tmppush2->vardata.l); if_list[n_if_list++] = tmppush; } else lc_error("IF: Huh?! No else-part address?"); } @@ -3592,7 +3633,7 @@ break; case 192: { add_opvars(splev, "ciisiio", - VA_PASS7(0, 0, 1, (char *)0, 0, 0, SPO_MAP)); + VA_PASS7(0, 0, 1, (char *) 0, 0, 0, SPO_MAP)); max_x_map = COLNO-1; max_y_map = ROWNO; } @@ -3600,15 +3641,15 @@ break; case 193: { add_opvars(splev, "cii", - VA_PASS3(SP_COORD_PACK((yyvsp[-4].i),(yyvsp[-2].i)), - 1, (long)yyvsp[-1].i)); + VA_PASS3(SP_COORD_PACK((yyvsp[-4].i), (yyvsp[-2].i)), + 1, (int) yyvsp[-1].i)); scan_map(yyvsp[0].map, splev); Free(yyvsp[0].map); } break; case 194: { - add_opvars(splev, "ii", VA_PASS2(2, (long)yyvsp[-1].i)); + add_opvars(splev, "ii", VA_PASS2(2, (int) yyvsp[-1].i)); scan_map(yyvsp[0].map, splev); Free(yyvsp[0].map); } @@ -3640,6 +3681,7 @@ break; case 203: { struct opvar *stopit = New(struct opvar); + set_opvar_int(stopit, SP_M_V_END); add_opcode(splev, SPO_PUSH, stopit); yyval.i = 0x0000; @@ -3661,28 +3703,28 @@ break; case 206: { add_opvars(splev, "ii", - VA_PASS2((long)yyvsp[0].i, SP_M_V_PEACEFUL)); + VA_PASS2((int) yyvsp[0].i, SP_M_V_PEACEFUL)); yyval.i = 0x0002; } break; case 207: { add_opvars(splev, "ii", - VA_PASS2((long)yyvsp[0].i, SP_M_V_ASLEEP)); + VA_PASS2((int) yyvsp[0].i, SP_M_V_ASLEEP)); yyval.i = 0x0004; } break; case 208: { add_opvars(splev, "ii", - VA_PASS2((long)yyvsp[0].i, SP_M_V_ALIGN)); + VA_PASS2((int) yyvsp[0].i, SP_M_V_ALIGN)); yyval.i = 0x0008; } break; case 209: { add_opvars(splev, "ii", - VA_PASS2((long)yyvsp[-1].i, SP_M_V_APPEAR)); + VA_PASS2((int) yyvsp[-1].i, SP_M_V_APPEAR)); yyval.i = 0x0010; } break; @@ -3749,13 +3791,14 @@ break; case 220: { add_opvars(splev, "ii", - VA_PASS2((long)yyvsp[0].i, SP_M_V_SEENTRAPS)); + VA_PASS2((int) yyvsp[0].i, SP_M_V_SEENTRAPS)); yyval.i = 0x8000; } break; case 221: { int token = get_trap_type(yyvsp[0].map); + if (token == ERR || token == 0) lc_error("Unknown trap type '%s'!", yyvsp[0].map); Free(yyvsp[0].map); @@ -3781,15 +3824,19 @@ case 223: break; case 224: { - long cnt = 0; - if (in_container_obj) cnt |= SP_OBJ_CONTENT; + int cnt = 0; + + if (in_container_obj) + cnt |= SP_OBJ_CONTENT; add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT)); } break; case 225: { - long cnt = SP_OBJ_CONTAINER; - if (in_container_obj) cnt |= SP_OBJ_CONTENT; + int cnt = SP_OBJ_CONTAINER; + + if (in_container_obj) + cnt |= SP_OBJ_CONTENT; add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT)); in_container_obj++; break_stmt_start(); @@ -3828,7 +3875,7 @@ break; case 230: { add_opvars(splev, "ii", - VA_PASS2((long)yyvsp[0].i, SP_O_V_CURSE)); + VA_PASS2((int) yyvsp[0].i, SP_O_V_CURSE)); yyval.i = 0x0001; } break; @@ -3864,7 +3911,7 @@ case 235: break; case 236: { - add_opvars(splev, "ii", VA_PASS2((long)yyvsp[0].i, SP_O_V_LIT)); + add_opvars(splev, "ii", VA_PASS2((int) yyvsp[0].i, SP_O_V_LIT)); yyval.i = 0x0040; } break; @@ -3894,7 +3941,8 @@ case 239: break; case 240: { - add_opvars(splev, "ii", VA_PASS2(yyvsp[0].i, SP_O_V_TRAPPED)); + add_opvars(splev, "ii", + VA_PASS2((int) 1, SP_O_V_TRAPPED)); yyval.i = 0x0400; } break; @@ -3924,7 +3972,7 @@ case 244: break; case 245: { - add_opvars(splev, "io", VA_PASS2((long)yyvsp[-2].i, SPO_TRAP)); + add_opvars(splev, "io", VA_PASS2((int) yyvsp[-2].i, SPO_TRAP)); } break; case 246: @@ -3958,14 +4006,14 @@ break; case 247: { add_opvars(splev, "iiio", - VA_PASS4((long)yyvsp[0].i, 1, 0, SPO_MAZEWALK)); + VA_PASS4((int) yyvsp[0].i, 1, 0, SPO_MAZEWALK)); } break; case 248: { add_opvars(splev, "iiio", - VA_PASS4((long)yyvsp[-3].i, (long)yyvsp[-1].i, - (long)yyvsp[0].i, SPO_MAZEWALK)); + VA_PASS4((int) yyvsp[-3].i, (int) yyvsp[-1].i, + (int) yyvsp[0].i, SPO_MAZEWALK)); } break; case 249: @@ -3983,13 +4031,13 @@ break; case 251: { add_opvars(splev, "io", - VA_PASS2((long)yyvsp[0].i, SPO_LADDER)); + VA_PASS2((int) yyvsp[0].i, SPO_LADDER)); } break; case 252: { add_opvars(splev, "io", - VA_PASS2((long)yyvsp[0].i, SPO_STAIR)); + VA_PASS2((int) yyvsp[0].i, SPO_STAIR)); } break; case 253: @@ -4251,16 +4299,17 @@ case 304: break; case 305: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_STRING); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_STRING); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 306: { - check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_STRING|SPOVAR_ARRAY); - vardef_used(variable_definitions, yyvsp[-3].map); + check_vardef_type(vardefs, yyvsp[-3].map, + SPOVAR_STRING | SPOVAR_ARRAY); + vardef_used(vardefs, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } @@ -4282,16 +4331,17 @@ case 309: break; case 310: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_COORD); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_COORD); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 311: { - check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_COORD|SPOVAR_ARRAY); - vardef_used(variable_definitions, yyvsp[-3].map); + check_vardef_type(vardefs, yyvsp[-3].map, + SPOVAR_COORD | SPOVAR_ARRAY); + vardef_used(vardefs, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } @@ -4299,7 +4349,8 @@ break; case 312: { if (yyvsp[-3].i < 0 || yyvsp[-1].i < 0 || yyvsp[-3].i >= COLNO || yyvsp[-1].i >= ROWNO) - lc_error("Coordinates (%li,%li) out of map range!", yyvsp[-3].i, yyvsp[-1].i); + lc_error("Coordinates (%li,%li) out of map range!", + yyvsp[-3].i, yyvsp[-1].i); yyval.i = SP_COORD_PACK(yyvsp[-3].i, yyvsp[-1].i); } break; @@ -4310,7 +4361,7 @@ case 313: break; case 314: { - yyval.i = SP_COORD_PACK_RANDOM( yyvsp[-1].i ); + yyval.i = SP_COORD_PACK_RANDOM(yyvsp[-1].i); } break; case 315: @@ -4332,16 +4383,17 @@ case 317: break; case 318: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_REGION); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_REGION); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 319: { - check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_REGION|SPOVAR_ARRAY); - vardef_used(variable_definitions, yyvsp[-3].map); + check_vardef_type(vardefs, yyvsp[-3].map, + SPOVAR_REGION | SPOVAR_ARRAY); + vardef_used(vardefs, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } @@ -4349,8 +4401,10 @@ break; case 320: { long r = SP_REGION_PACK(yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); - if ( yyvsp[-7].i > yyvsp[-3].i || yyvsp[-5].i > yyvsp[-1].i ) - lc_error("Region start > end: (%li,%li,%li,%li)!", yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); + + if (yyvsp[-7].i > yyvsp[-3].i || yyvsp[-5].i > yyvsp[-1].i) + lc_error("Region start > end: (%ld,%ld,%ld,%ld)!", + yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); add_opvars(splev, "r", VA_PASS1(r)); yyval.i = r; @@ -4363,16 +4417,17 @@ case 321: break; case 322: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_MAPCHAR); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_MAPCHAR); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 323: { - check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_MAPCHAR|SPOVAR_ARRAY); - vardef_used(variable_definitions, yyvsp[-3].map); + check_vardef_type(vardefs, yyvsp[-3].map, + SPOVAR_MAPCHAR | SPOVAR_ARRAY); + vardef_used(vardefs, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } @@ -4404,16 +4459,17 @@ case 326: break; case 327: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_MONST); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_MONST); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 328: { - check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_MONST|SPOVAR_ARRAY); - vardef_used(variable_definitions, yyvsp[-3].map); + check_vardef_type(vardefs, yyvsp[-3].map, + SPOVAR_MONST | SPOVAR_ARRAY); + vardef_used(vardefs, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } @@ -4463,16 +4519,17 @@ case 333: break; case 334: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_OBJ); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_OBJ); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 335: { - check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_OBJ|SPOVAR_ARRAY); - vardef_used(variable_definitions, yyvsp[-3].map); + check_vardef_type(vardefs, yyvsp[-3].map, + SPOVAR_OBJ | SPOVAR_ARRAY); + vardef_used(vardefs, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } @@ -4484,7 +4541,8 @@ case 336: lc_error("Unknown object \"%s\"!", yyvsp[0].map); yyval.i = -1; } else - yyval.i = SP_OBJ_PACK(m, 1); /* obj class != 0 to force generation of a specific item */ + /* obj class != 0 to force generation of a specific item */ + yyval.i = SP_OBJ_PACK(m, 1); Free(yyvsp[0].map); } break; @@ -4539,8 +4597,8 @@ case 344: break; case 345: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_INT); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_INT); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); is_inconstant_number = 1; @@ -4548,9 +4606,9 @@ case 345: break; case 346: { - check_vardef_type(variable_definitions, - yyvsp[-3].map, SPOVAR_INT|SPOVAR_ARRAY); - vardef_used(variable_definitions, yyvsp[-3].map); + check_vardef_type(vardefs, yyvsp[-3].map, + SPOVAR_INT | SPOVAR_ARRAY); + vardef_used(vardefs, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); is_inconstant_number = 1; @@ -4627,9 +4685,7 @@ case 355: lc_error("Unknown func param conversion."); break; } - variable_definitions = add_vardef_type( - variable_definitions, - yyvsp[-2].map, vt); + vardefs = add_vardef_type( vardefs, yyvsp[-2].map, vt); } Free(yyvsp[-2].map); } @@ -4767,8 +4823,8 @@ case 382: break; case 383: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_SEL); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_SEL); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } diff --git a/sys/unix/Makefile.src b/sys/unix/Makefile.src index bfe32f285..07d5d5920 100644 --- a/sys/unix/Makefile.src +++ b/sys/unix/Makefile.src @@ -1,5 +1,5 @@ # NetHack Makefile. -# NetHack 3.6 Makefile.src $NHDT-Date: 1539968067 2018/10/19 16:54:27 $ $NHDT-Branch: keni-makedefsm $:$NHDT-Revision: 1.58 $ +# NetHack 3.6 Makefile.src $NHDT-Date: 1543447374 2018/11/28 23:22:54 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.60 $ # Copyright (c) 2018 by Pasi Kallinen # NetHack may be freely redistributed. See license for details. @@ -462,7 +462,7 @@ SYSCXXSRC = ../sys/share/cppregex.cpp GENCSRC = vis_tab.c #tile.c # all windowing-system-dependent .c (for dependencies and such) -WINCSRC = $(WINTTYSRC) $(WINX11SRC) $(WINGNOMESRC) $(WINGEMSRC) +WINCSRC = $(WINTTYSRC) $(WINCURSESSRC) $(WINX11SRC) $(WINGNOMESRC) $(WINGEMSRC) # all windowing-system-dependent .cpp (for dependencies and such) WINCXXSRC = $(WINQTSRC) $(WINQT4SRC) $(WINBESRC) @@ -775,36 +775,38 @@ topl.o: ../win/tty/topl.c $(HACK_H) ../include/tcap.h $(CC) $(CFLAGS) -c ../win/tty/topl.c wintty.o: ../win/tty/wintty.c $(HACK_H) ../include/dlb.h ../include/tcap.h $(CC) $(CFLAGS) -c ../win/tty/wintty.c -cursmain.o: ../win/curses/cursmain.c $(HACK_H) ../include/wincurs.h +cursmain.o: ../win/curses/cursmain.c $(HACK_H) ../include/patchlevel.h \ + ../include/wincurs.h $(CC) $(CFLAGS) -c ../win/curses/cursmain.c -curswins.o: ../win/curses/curswins.c $(HACK_H) ../include/func_tab.h \ - ../include/wincurs.h ../win/curses/curswins.h +curswins.o: ../win/curses/curswins.c $(HACK_H) ../include/wincurs.h \ + ../win/curses/curswins.h $(CC) $(CFLAGS) -c ../win/curses/curswins.c cursmisc.o: ../win/curses/cursmisc.c $(HACK_H) ../include/wincurs.h \ - ../win/curses/cursmisc.h + ../win/curses/cursmisc.h ../include/func_tab.h ../include/dlb.h $(CC) $(CFLAGS) -c ../win/curses/cursmisc.c -cursdial.o: ../win/curses/cursdial.c $(HACK_H) ../include/func_tab.h \ - ../include/wincurs.h ../win/curses/cursdial.h +cursdial.o: ../win/curses/cursdial.c $(HACK_H) ../include/wincurs.h \ + ../win/curses/cursdial.h ../include/func_tab.h $(CC) $(CFLAGS) -c ../win/curses/cursdial.c cursstat.o: ../win/curses/cursstat.c $(HACK_H) ../include/wincurs.h \ ../win/curses/cursstat.h $(CC) $(CFLAGS) -c ../win/curses/cursstat.c cursinit.o: ../win/curses/cursinit.c $(HACK_H) ../include/wincurs.h \ - ../win/curses/cursinit.h + ../win/curses/cursinit.h ../include/patchlevel.h $(CC) $(CFLAGS) -c ../win/curses/cursinit.c -cursinvt.o: ../win/curses/cursinvt.c $(HACK_H) ../include/wincurs.h \ - ../win/curses/cursinvt.h - $(CC) $(CFLAGS) -c ../win/curses/cursinvt.c cursmesg.o: ../win/curses/cursmesg.c $(HACK_H) ../include/wincurs.h \ ../win/curses/cursmesg.h $(CC) $(CFLAGS) -c ../win/curses/cursmesg.c +cursinvt.o: ../win/curses/cursinvt.c $(HACK_H) ../include/wincurs.h \ + ../win/curses/cursinvt.h + $(CC) $(CFLAGS) -c ../win/curses/cursinvt.c Window.o: ../win/X11/Window.c ../include/xwindowp.h ../include/xwindow.h \ $(CONFIG_H) ../include/lint.h $(CC) $(CFLAGS) -c ../win/X11/Window.c dialogs.o: ../win/X11/dialogs.c $(CONFIG_H) ../include/lint.h $(CC) $(CFLAGS) -c ../win/X11/dialogs.c winX.o: ../win/X11/winX.c $(HACK_H) ../include/winX.h ../include/dlb.h \ - ../win/X11/nh72icon ../win/X11/nh56icon ../win/X11/nh32icon + ../include/xwindow.h ../win/X11/nh72icon ../win/X11/nh56icon \ + ../win/X11/nh32icon $(CC) $(CFLAGS) -c ../win/X11/winX.c winmap.o: ../win/X11/winmap.c ../include/xwindow.h $(HACK_H) ../include/dlb.h \ ../include/winX.h ../include/tile2x11.h @@ -816,7 +818,7 @@ winmesg.o: ../win/X11/winmesg.c ../include/xwindow.h $(HACK_H) ../include/winX.h winmisc.o: ../win/X11/winmisc.c $(HACK_H) ../include/func_tab.h \ ../include/winX.h $(CC) $(CFLAGS) -c ../win/X11/winmisc.c -winstat.o: ../win/X11/winstat.c $(HACK_H) ../include/winX.h +winstat.o: ../win/X11/winstat.c $(HACK_H) ../include/winX.h ../include/xwindow.h $(CC) $(CFLAGS) -c ../win/X11/winstat.c wintext.o: ../win/X11/wintext.c $(HACK_H) ../include/winX.h ../include/xwindow.h $(CC) $(CFLAGS) -c ../win/X11/wintext.c @@ -887,51 +889,82 @@ qt_clust.o: ../win/Qt/qt_clust.cpp ../include/qt_clust.h $(CXX) $(CXXFLAGS) -c ../win/Qt/qt_clust.cpp qttableview.o: ../win/Qt/qttableview.cpp ../include/qttableview.h $(CXX) $(CXXFLAGS) -c ../win/Qt/qttableview.cpp -qt4bind.o : ../win/Qt4/qt4bind.cpp $(HACK_H) ../win/Qt4/qt4bind.h +qt4bind.o: ../win/Qt4/qt4bind.cpp $(HACK_H) ../win/Qt4/qt4bind.h \ + ../win/Qt4/qt4click.h ../win/Qt4/qt4delay.h \ + ../win/Qt4/qt4xcmd.h ../win/Qt4/qt4key.h ../win/Qt4/qt4map.h \ + ../win/Qt4/qt4menu.h ../win/Qt4/qt4msg.h ../win/Qt4/qt4plsel.h \ + ../win/Qt4/qt4svsel.h ../win/Qt4/qt4set.h ../win/Qt4/qt4stat.h \ + ../win/Qt4/qt4streq.h ../win/Qt4/qt4yndlg.h \ + ../win/Qt4/qt4str.h ../include/dlb.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4bind.cpp -qt4click.o : ../win/Qt4/qt4click.cpp $(HACK_H) ../win/Qt4/qt4click.h +qt4click.o: ../win/Qt4/qt4click.cpp $(HACK_H) ../win/Qt4/qt4click.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4click.cpp -qt4clust.o : ../win/Qt4/qt4clust.cpp $(HACK_H) ../win/Qt4/qt4clust.h +qt4clust.o: ../win/Qt4/qt4clust.cpp ../win/Qt4/qt4clust.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4clust.cpp -qt4delay.o : ../win/Qt4/qt4delay.cpp $(HACK_H) ../win/Qt4/qt4delay.h +qt4delay.o: ../win/Qt4/qt4delay.cpp $(HACK_H) ../win/Qt4/qt4delay.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4delay.cpp -qt4glyph.o : ../win/Qt4/qt4glyph.cpp $(HACK_H) ../win/Qt4/qt4glyph.h +qt4glyph.o: ../win/Qt4/qt4glyph.cpp $(HACK_H) ../include/tile2x11.h \ + ../win/Qt4/qt4glyph.h ../win/Qt4/qt4set.h ../win/Qt4/qt4str.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4glyph.cpp -qt4icon.o : ../win/Qt4/qt4icon.cpp $(HACK_H) ../win/Qt4/qt4icon.h +qt4icon.o: ../win/Qt4/qt4icon.cpp $(HACK_H) ../win/Qt4/qt4icon.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4icon.cpp -qt4inv.o : ../win/Qt4/qt4inv.cpp $(HACK_H) ../win/Qt4/qt4inv.h +qt4inv.o: ../win/Qt4/qt4inv.cpp $(HACK_H) ../win/Qt4/qt4inv.h \ + ../win/Qt4/qt4glyph.h ../win/Qt4/qt4set.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4inv.cpp -qt4key.o : ../win/Qt4/qt4key.cpp $(HACK_H) ../win/Qt4/qt4key.h +qt4key.o: ../win/Qt4/qt4key.cpp $(HACK_H) ../win/Qt4/qt4key.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4key.cpp -qt4line.o : ../win/Qt4/qt4line.cpp $(HACK_H) ../win/Qt4/qt4line.h +qt4line.o: ../win/Qt4/qt4line.cpp $(HACK_H) ../win/Qt4/qt4line.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4line.cpp -qt4main.o : ../win/Qt4/qt4main.cpp $(HACK_H) qt4main.moc ../win/Qt4/qt4main.h qt4kde0.moc +qt4main.o: ../win/Qt4/qt4main.cpp $(HACK_H) ../include/patchlevel.h \ + ../win/Qt4/qt4main.h qt4main.moc ../win/Qt4/qt4bind.h \ + ../win/Qt4/qt4glyph.h ../win/Qt4/qt4inv.h ../win/Qt4/qt4key.h \ + ../win/Qt4/qt4map.h ../win/Qt4/qt4msg.h ../win/Qt4/qt4set.h \ + ../win/Qt4/qt4stat.h ../win/Qt4/qt4str.h qt4kde0.moc $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4main.cpp -qt4map.o : ../win/Qt4/qt4map.cpp $(HACK_H) qt4map.moc ../win/Qt4/qt4map.h +qt4map.o: ../win/Qt4/qt4map.cpp $(HACK_H) ../win/Qt4/qt4map.h qt4map.moc \ + ../win/Qt4/qt4click.h ../win/Qt4/qt4glyph.h \ + ../include/qt_xpms.h ../win/Qt4/qt4set.h ../win/Qt4/qt4str.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4map.cpp -qt4menu.o : ../win/Qt4/qt4menu.cpp $(HACK_H) qt4menu.moc ../win/Qt4/qt4menu.h +qt4menu.o: ../win/Qt4/qt4menu.cpp $(HACK_H) ../win/Qt4/qt4menu.h qt4menu.moc \ + ../win/Qt4/qt4glyph.h ../win/Qt4/qt4set.h \ + ../win/Qt4/qt4streq.h ../win/Qt4/qt4str.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4menu.cpp -qt4msg.o : ../win/Qt4/qt4msg.cpp $(HACK_H) qt4msg.moc ../win/Qt4/qt4msg.h +qt4msg.o: ../win/Qt4/qt4msg.cpp $(HACK_H) ../win/Qt4/qt4msg.h qt4msg.moc \ + ../win/Qt4/qt4map.h ../win/Qt4/qt4set.h ../win/Qt4/qt4str.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4msg.cpp -qt4plsel.o : ../win/Qt4/qt4plsel.cpp $(HACK_H) qt4plsel.moc ../win/Qt4/qt4plsel.h +qt4plsel.o: ../win/Qt4/qt4plsel.cpp $(HACK_H) ../win/Qt4/qt4plsel.h \ + qt4plsel.moc ../win/Qt4/qt4bind.h ../win/Qt4/qt4glyph.h \ + ../win/Qt4/qt4set.h ../win/Qt4/qt4str.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4plsel.cpp -qt4rip.o : ../win/Qt4/qt4rip.cpp $(HACK_H) ../win/Qt4/qt4rip.h +qt4rip.o: ../win/Qt4/qt4rip.cpp $(HACK_H) ../win/Qt4/qt4rip.h \ + ../win/Qt4/qt4bind.h ../win/Qt4/qt4str.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4rip.cpp -qt4set.o : ../win/Qt4/qt4set.cpp $(HACK_H) qt4set.moc ../win/Qt4/qt4set.h +qt4set.o: ../win/Qt4/qt4set.cpp $(HACK_H) ../win/Qt4/qt4set.h qt4set.moc \ + ../win/Qt4/qt4glyph.h ../win/Qt4/qt4str.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4set.cpp -qt4stat.o : ../win/Qt4/qt4stat.cpp $(HACK_H) qt4stat.moc ../win/Qt4/qt4stat.h +qt4stat.o: ../win/Qt4/qt4stat.cpp $(HACK_H) ../win/Qt4/qt4stat.h qt4stat.moc \ + ../win/Qt4/qt4set.h ../win/Qt4/qt4str.h ../include/qt_xpms.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4stat.cpp -qt4str.o : ../win/Qt4/qt4str.cpp ../win/Qt4/qt4str.h +qt4str.o: ../win/Qt4/qt4str.cpp ../win/Qt4/qt4str.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4str.cpp -qt4streq.o : ../win/Qt4/qt4streq.cpp $(HACK_H) ../win/Qt4/qt4streq.h +qt4streq.o: ../win/Qt4/qt4streq.cpp $(HACK_H) ../win/Qt4/qt4streq.h \ + ../win/Qt4/qt4str.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4streq.cpp -qt4svsel.o : ../win/Qt4/qt4svsel.cpp $(HACK_H) ../win/Qt4/qt4svsel.h +qt4svsel.o: ../win/Qt4/qt4svsel.cpp $(HACK_H) ../win/Qt4/qt4svsel.h \ + ../win/Qt4/qt4bind.h ../win/Qt4/qt4str.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4svsel.cpp -qt4win.o : ../win/Qt4/qt4win.cpp $(HACK_H) ../win/Qt4/qt4win.h +qt4win.o: ../win/Qt4/qt4win.cpp $(HACK_H) ../win/Qt4/qt4win.h \ + ../win/Qt4/qt4bind.h ../win/Qt4/qt4click.h \ + ../win/Qt4/qt4glyph.h ../win/Qt4/qt4inv.h ../win/Qt4/qt4key.h \ + ../win/Qt4/qt4icon.h ../win/Qt4/qt4map.h ../win/Qt4/qt4menu.h \ + ../win/Qt4/qt4msg.h ../win/Qt4/qt4set.h ../win/Qt4/qt4clust.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4win.cpp -qt4xcmd.o : ../win/Qt4/qt4xcmd.cpp $(HACK_H) qt4xcmd.moc ../win/Qt4/qt4xcmd.h +qt4xcmd.o: ../win/Qt4/qt4xcmd.cpp $(HACK_H) ../include/func_tab.h \ + ../win/Qt4/qt4xcmd.h qt4xcmd.moc ../win/Qt4/qt4bind.h \ + ../win/Qt4/qt4set.h ../win/Qt4/qt4str.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4xcmd.cpp -qt4yndlg.o : ../win/Qt4/qt4yndlg.cpp $(HACK_H) qt4yndlg.moc ../win/Qt4/qt4yndlg.h +qt4yndlg.o: ../win/Qt4/qt4yndlg.cpp $(HACK_H) ../win/Qt4/qt4yndlg.h \ + qt4yndlg.moc ../win/Qt4/qt4str.h $(CXX) $(CXXFLAGS) -c ../win/Qt4/qt4yndlg.cpp wc_chainin.o: ../win/chain/wc_chainin.c $(HACK_H) $(CC) $(CFLAGS) -c ../win/chain/wc_chainin.c @@ -948,7 +981,7 @@ attrib.o: attrib.c $(HACK_H) ball.o: ball.c $(HACK_H) bones.o: bones.c $(HACK_H) ../include/lev.h botl.o: botl.c $(HACK_H) -cmd.o: cmd.c $(HACK_H) ../include/func_tab.h +cmd.o: cmd.c $(HACK_H) ../include/lev.h ../include/func_tab.h dbridge.o: dbridge.c $(HACK_H) decl.o: decl.c $(HACK_H) detect.o: detect.c $(HACK_H) ../include/artifact.h diff --git a/sys/unix/Makefile.top b/sys/unix/Makefile.top index 90b1df955..5aea4e8d6 100644 --- a/sys/unix/Makefile.top +++ b/sys/unix/Makefile.top @@ -291,7 +291,7 @@ clean: # 'make spotless' returns the source tree to near-distribution condition. # it removes .o files, executables, and compiled data files -spotless: +spotless:: ( cd src ; $(MAKE) spotless ) ( cd util ; $(MAKE) spotless ) ( cd dat ; $(MAKE) spotless ) diff --git a/sys/unix/XCode.xcconfig b/sys/unix/XCode.xcconfig index 0f582e07f..06ce911fa 100644 --- a/sys/unix/XCode.xcconfig +++ b/sys/unix/XCode.xcconfig @@ -15,8 +15,10 @@ // the identifier XCode needs in order to sign your builds. // // Your DEVELOPMENT_TEAM can be found by opening Keychain Access -// (found by Finder->Applications->Utilities). Click on "My Certificates". -// Look for your "Mac Developer" certificate. Right click on +// (found by Finder->Applications->Utilities). Click on "Login" key chain. +// Click on catagory "My Certificates". +// +// Look for your "Mac Developer" certificate. Double click on // the certificate to open a dialog that shows certificate details. // Look for "Organizational Unit" among the details. This ten digit value // is your development team identifier. diff --git a/sys/unix/depend.awk b/sys/unix/depend.awk index 8361bec30..7f51e5e74 100644 --- a/sys/unix/depend.awk +++ b/sys/unix/depend.awk @@ -1,6 +1,6 @@ # depend.awk -- awk script used to construct makefile dependencies # for nethack's source files (`make depend' support for Makefile.src). -# $NHDT-Date: 1524684206 2018/04/25 19:23:26 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.6 $ +# $NHDT-Date: 1543447376 2018/11/28 23:22:56 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.7 $ # # usage: # cd src ; nawk -f depend.awk ../include/*.h list-of-.c/.cpp-files @@ -39,8 +39,16 @@ FNR == 1 { output_dep() #finish previous file /^\#[ \t]*include[ \t]+\"/ { #find `#include "X"' incl = $2 #[3.4.0: gnomehack headers currently aren't in include] + #[3.6.2: Qt4 headers aren't in include either] + #[3.6.2: curses headers likewise] if (incl ~ /\.h$/) { - if (incl ~ /^gn/) # gnomehack special case + if (incl ~ "curses\.h") + incl = "" # skip "curses.h"; it should be + else if (incl ~ /^curs/) # curses special case + incl = "../win/curses/" incl + else if (incl ~ /^qt4/) # Qt v4 special case + incl = "../win/Qt4/" incl + else if (incl ~ /^gn/) # gnomehack special case incl = "../win/gnome/" incl else incl = "../include/" incl @@ -80,7 +88,7 @@ function output_specials( i, sp, alt_sp) print "#", alt_sp, "timestamp" #output a `make' comment #- sub("\\.", "_", alt_sp); alt_sp = "$(" toupper(alt_sp) ")" #+ Some nawks don't have toupper(), so hardwire these instead. - sub("config.h", "$(CONFIG_H)", alt_sp); sub("hack.h", "$(HACK_H)", alt_sp); + sub("config.h", "$(CONFIG_H)", alt_sp); sub("hack.h", "$(HACK_H)", alt_sp) format_dep(alt_sp, sp) #output the target print "\ttouch " alt_sp #output a build command alt_deps[sp] = alt_sp #alternate dependency for depend() diff --git a/sys/unix/hints/macosx10.14 b/sys/unix/hints/macosx10.14 new file mode 100644 index 000000000..6c5019d9f --- /dev/null +++ b/sys/unix/hints/macosx10.14 @@ -0,0 +1,397 @@ +# +# NetHack 3.6 macosx10.11 $NHDT-Date: 1515549543 2018/01/10 01:59:03 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.48 $ +# Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. +# NetHack may be freely redistributed. See license for details. +# +#-PRE +# Mac OS X (Darwin) hints file +# This is for Mac OS X 10.10 or later, and has been tested on 10.11 +# (El Capitan). If this doesn't work for some other +# version of Mac OS X, make a new file for that OS, don't change this one. +# And let us know about it. +# Useful info: http://www.opensource.apple.com/darwinsource/index.html + +# You'll need to obtain and install XQuartz if you want X11 support. +# (Attempting to run X11.app will describe where to get it.) + +# This hints file can build several different types of installations. +# Edit the next section to match the type of build you need. + +# 1. Which window system(s) should be included in this binary? +WANT_WIN_TTY=1 +#WANT_WIN_X11=1 +#WANT_WIN_QT=1 +#WANT_WIN_CURSES=1 + +# 1a. What is the default window system? +WANT_DEFAULT=tty +#WANT_DEFAULT=x11 +#WANT_DEFAULT=qt +#WANT_DEFAULT=curses + +# 1b. If you set WANT_WIN_QT, you need to +# A) set QTDIR either here or in the environment to point to the Qt2 or Qt3 +# library installation root. (Qt4 will not work; Qt3 does not presently +# compile under Leopard (MacOSX 10.5) out-of-the-box.) +# B) set XPMLIB to point to the Xpm library +ifdef WANT_WIN_QT +QTDIR=/Developer/Qt +LIBXPM= -L/opt/X11/lib -lXpm +endif # WANT_WIN_QT + +# 2. Is this a build for a binary that will be shared among different users +# or will it be private to you? +# If it is shared: +# - it will be owned by the user and group listed +# - if the user does not exist, you MUST create it before installing +# NetHack +# - if the group does not exist, it will be created. +# NB: if the group already exists and is being used for something +# besides games, you probably want to specify a new group instead +# NB: the group will be created locally; if your computer is centrally +# administered this may not be what you (or your admin) want. +# Consider a non-shared install (WANT_SHARE_INSTALL=0) instead. +# - 'make install' must be run as "sudo make install" +#WANT_SHARE_INSTALL=1 +GAMEUID = $(USER) +GAMEGRP = games +# build to run in the source tree - primarily for development. Build with "make all" +#WANT_SOURCE_INSTALL=1 + +CC=gcc + +# At the moment this is just for debugging, but in the future it could be +# useful for other things. Requires SYSCF and an ANSI compiler. +#WANT_WIN_CHAIN=1 + +# +# You shouldn't need to change anything below here. +# + +#CFLAGS+=-W -Wimplicit -Wreturn-type -Wunused -Wformat -Wswitch -Wshadow -Wcast-qual -Wwrite-strings -DGCC_WARN +CFLAGS+=-Wall -Wextra -Wno-missing-field-initializers -Wimplicit -Wreturn-type -Wunused -Wformat -Wswitch -Wshadow -Wwrite-strings -DGCC_WARN -ansi -pedantic +# As of LLVM build 2336.1.00, this gives dozens of spurious messages, so +# leave it out by default. +#CFLAGS+=-Wunreachable-code + +# XXX -g vs -O should go here, -I../include goes in the makefile +CFLAGS+=-g -I../include +# older binaries use NOCLIPPING, but that disables SIGWINCH +#CFLAGS+=-DNOCLIPPING +CFLAGS+= -DNOMAIL -DNOTPARMDECL -DHACKDIR=\"$(HACKDIR)\" +CFLAGS+= -DDEFAULT_WINDOW_SYS=\"$(WANT_DEFAULT)\" -DDLB + +CFLAGS+= -DGREPPATH=\"/usr/bin/grep\" + +ifdef WANT_WIN_CHAIN +CFLAGS+= -DWINCHAIN +HINTSRC=$(CHAINSRC) +HINTOBJ=$(CHAINOBJ) +endif + +ifdef WANT_WIN_TTY +WINSRC = $(WINTTYSRC) +WINOBJ = $(WINTTYOBJ) +WINLIB = $(WINTTYLIB) +WINTTYLIB=-lncurses +else # !WANT_WIN_TTY +CFLAGS += -DNOTTYGRAPHICS +endif # !WANT_WIN_TTY + +ifdef WANT_WIN_CURSES +CFLAGS += -DCURSES_GRAPHICS +WINSRC += $(WINCURSESSRC) +WINOBJ += $(WINCURSESOBJ) +WINLIB += -lncurses +endif + +ifdef WANT_WIN_X11 +WINSRC += $(WINX11SRC) +WINOBJ += $(WINX11OBJ) +WINLIB += $(WINX11LIB) +LFLAGS=-L/opt/X11/lib +VARDATND = x11tiles NetHack.ad pet_mark.xbm pilemark.xbm +POSTINSTALL+= bdftopcf win/X11/nh10.bdf > $(HACKDIR)/nh10.pcf; (cd $(HACKDIR); mkfontdir); +CFLAGS += -DX11_GRAPHICS -I/opt/X11/include +# avoid repeated complaints about _X_NONNULL(args...) in +CFLAGS += -Wno-variadic-macros +endif # WANT_WIN_X11 + +ifdef WANT_WIN_QT +CFLAGS += -DQT_GRAPHICS -DNOUSER_SOUNDS +CFLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 +LINK=g++ +WINSRC += $(WINQTSRC) +WINLIB += $(WINQTLIB) $(LIBXPM) +WINLIB += -framework Carbon -framework QuickTime -lz -framework OpenGL +WINLIB += -framework AGL +ifdef WANT_WIN_X11 + # prevent duplicate tile.o in WINOBJ +WINOBJ = $(sort $(WINQTOBJ) $(WINX11OBJ)) +ifdef WANT_WIN_TTY +WINOBJ += $(WINTTYOBJ) +endif # WANT_WIN_TTY +else # !WANT_WIN_X11 +WINOBJ += $(WINQTOBJ) +endif # !WANT_WIN_X11 + +# XXX if /Developer/qt exists and QTDIR not set, use that +ifndef QTDIR +$(error QTDIR not defined in the environment or Makefile) +endif # QTDIR +# XXX make sure QTDIR points to something reasonable +else # !WANT_WIN_QT +LINK=$(CC) +endif # !WANT_WIN_QT + +ifdef WANT_SHARE_INSTALL +# if $GAMEUID is root, we install into roughly proper Mac locations, otherwise +# we install into ~/nethackdir +ifeq ($(GAMEUID),root) +PREFIX:=/Library/NetHack +SHELLDIR=/usr/local/bin +HACKDIR=$(PREFIX)/nethackdir +CHOWN=chown +CHGRP=chgrp +# We run sgid so the game has access to both HACKDIR and user preferences. +GAMEPERM = 02755 +else # ! root +PREFIX:=/Users/$(GAMEUID) +SHELLDIR=$(PREFIX)/bin +HACKDIR=$(PREFIX)/Library/NetHack/nethackdir +CHOWN=/usr/bin/true +CHGRP=/usr/bin/true +GAMEPERM = 0500 +endif # ! root +VARFILEPERM = 0664 +VARDIRPERM = 0775 +ROOTCHECK= [[ `id -u` == 0 ]] || ( echo "Must run install with sudo."; exit 1) +# XXX it's nice we don't write over sysconf, but we've already erased it +# make sure we have group GAMEUID and group GAMEGRP +PREINSTALL= . sys/unix/hints/macosx.sh user2 $(GAMEUID); . sys/unix/hints/macosx.sh group2 $(GAMEGRP); mkdir $(SHELLDIR); chown $(GAMEUID) $(SHELLDIR) +POSTINSTALL+= sys/unix/hints/macosx.sh editsysconf sys/unix/sysconf $(HACKDIR)/sysconf; $(CHOWN) $(GAMEUID) $(HACKDIR)/sysconf; $(CHGRP) $(GAMEGRP) $(HACKDIR)/sysconf; chmod $(VARFILEPERM) $(HACKDIR)/sysconf; +CFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE +else ifdef WANT_SOURCE_INSTALL +PREFIX=$(abspath $(NHSROOT)) +# suppress nethack.sh +#SHELLDIR= +HACKDIR=$(PREFIX)/playground +CHOWN=/usr/bin/true +CHGRP=/usr/bin/true +GAMEPERM = 0700 +VARFILEPERM = 0600 +VARDIRPERM = 0700 +POSTINSTALL+= sys/unix/hints/macosx.sh editsysconf sys/unix/sysconf $(HACKDIR)/sysconf; +# We can use "make all" to build the whole thing - but it misses some things: +MOREALL=$(MAKE) install +CFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE +else # !WANT_SOURCE_INSTALL +PREFIX:=$(wildcard ~) +SHELLDIR=$(PREFIX)/bin +HACKDIR=$(PREFIX)/nethackdir +CHOWN=/usr/bin/true +CHGRP=/usr/bin/true +GAMEPERM = 0700 +VARFILEPERM = 0600 +VARDIRPERM = 0700 +ifdef WANT_WIN_X11 +# install nethack.rc as ~/.nethackrc if no ~/.nethackrc exists +PREINSTALL= cp -n win/X11/nethack.rc ~/.nethackrc +endif # WANT_WIN_X11 +POSTINSTALL+= sys/unix/hints/macosx.sh editsysconf sys/unix/sysconf $(HACKDIR)/sysconf; $(CHOWN) $(GAMEUID) $(HACKDIR)/sysconf; $(CHGRP) $(GAMEGRP) $(HACKDIR)/sysconf; chmod $(VARFILEPERM) $(HACKDIR)/sysconf; +CFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE +endif # !WANT_SOURCE_INSTALL + +INSTDIR=$(HACKDIR) +VARDIR=$(HACKDIR) + + +# ~/Library/Preferences/NetHack Defaults +# OPTIONS=name:player,number_pad,menustyle:partial,!time,showexp +# OPTIONS=hilite_pet,toptenwin,msghistory:200,windowtype:Qt +# +# Install.Qt mentions a patch for macos - it's not there (it seems to be in the Qt binary +# package under the docs directory). + +#-POST +ifdef MAKEFILE_TOP +### +### Packaging +### +# Notes: +# 1) The Apple developer utilities must be installed in the default location. +# 2) Do a normal build before trying to package the game. +# 3) This matches the 3.4.3 Term package, but there are some things that should +# be changed. +# +# Packages that are being distributed must be signed by a Developer ID Installer +# certificate. Set DEVELOPER_CERT to the name of the certificate if you wish +# for your package to be signed for distribution. +# +# If building a package for signing, you must use sudo approriately. +# the binaries and package using sudo but you DO NOT use sudo to sign the +# package. If you use sudo to sign the package, it will fail. +# +# sudo make all +# sudo make build_tty_pkg +# sudo sign_tty_pkg +# + + +ifdef WANT_WIN_TTY +DEVUTIL=/Developer/Applications/Utilities +SVS=$(shell $(NHSROOT)/util/makedefs --svs) +SVSDOT=$(shell $(NHSROOT)/util/makedefs --svs .) + +PKGROOT_UG = PKGROOT/$(PREFIX) +PKGROOT_UGLN = PKGROOT/$(HACKDIR) +PKGROOT_BIN = PKGROOT/$(SHELLDIR) + +#DEVELOPER_CERT = Developer ID Installer: Bart House +DEVELOPER_CERT = NONE + +spotless:: + rm -rf RESOURCES + rm -rf PKG + rm -rf PKGSCRIPTS + rm -rf PKGROOT + rm -f Info.plist + rm -f Distribution.xml + rm -f NetHack-*-mac-Term* + +build_tty_pkg: +ifneq (,$(WANT_WIN_X11)$(WANT_WIN_QT)) + -echo build_tty_pkg only works for a tty-only build + exit 1 +else + rm -rf NetHack-$(SVS)-mac-Term.pkg NetHack-$(SVS)-mac-Term.dmg + $(MAKE) build_package_root + rm -rf RESOURCES + mkdir RESOURCES + #enscript --language=rtf -o - < dat/license >RESOURCES/License.rtf + sys/unix/hints/macosx.sh descplist > RESOURCES/Description.plist + sys/unix/hints/macosx.sh infoplist > Info.plist + + mkdir PKGROOT/Applications + #osacompile -o NetHackQt/NetHackQt.app/nethackdir/NetHackRecover.app \ + # win/macosx/NetHackRecover.applescript + #cp win/macosx/recover.pl NetHackQt/NetHackQt.app/nethackdir + osacompile -o PKGROOT/Applications/NetHackRecover.app \ + win/macosx/NetHackRecover.applescript + cp win/macosx/recover.pl $(PKGROOT_UGLN) + + osacompile -o PKGROOT/Applications/NetHackTerm.app \ + win/macosx/NetHackTerm.applescript + + # XXX integrate into Makefile.doc + (cd doc; cat Guidebook.mn | ../util/makedefs --grep --input - --output - \ + | tbl tmac.n - | groff | pstopdf -i -o Guidebook.pdf) + cp doc/Guidebook.pdf $(PKGROOT_UG)/doc/NetHackGuidebook.pdf + + osacompile -o PKGROOT/Applications/NetHackGuidebook.app \ + win/macosx/NetHackGuidebook.applescript + + mkdir -p PKG + pkgbuild --root PKGROOT --identifier org.nethack.term --scripts PKGSCRIPTS PKG/NH-Term.pkg + productbuild --synthesize --product Info.plist --package PKG/NH-Term.pkg Distribution.xml + productbuild --distribution Distribution.xml --resources RESOURCES --package-path PKG NetHack-$(SVS)-mac-Term-unsigned.pkg +ifeq ($(DEVELOPER_CERT),NONE) + cp NetHack-$(SVS)-mac-Term-unsigned.pkg NetHack-$(SVS)-mac-Term.pkg + hdiutil create -verbose -srcfolder NetHack-$(SVS)-mac-Term-unsigned.pkg NetHack-$(SVS)-mac-Term-unsigned.dmg + @echo ------------------------------------------- + @echo PACKAGE IS NOT SIGNED FOR DISTRIBUTION!!!!! + @echo =========================================== +else + @echo "run 'make sign_tty_pkg' to complete package" +endif + +sign_tty_pkg: + productsign --timestamp=none --sign "$(DEVELOPER_CERT)" NetHack-$(SVS)-mac-Term-unsigned.pkg NetHack-$(SVS)-mac-Term.pkg || (echo "Package signing failed"; exit 1) + spctl -a -v --type install NetHack-$(SVS)-mac-Term.pkg || (echo "Package not signed properly"; exit 1) + hdiutil create -verbose -srcfolder NetHack-$(SVS)-mac-Term.pkg NetHack-$(SVS)-mac-Term.dmg + +build_package_root: + cd src/.. # make sure we are at TOP + rm -rf PKGROOT + mkdir -p $(PKGROOT_UG)/lib $(PKGROOT_BIN) $(PKGROOT_UG)/man/man6 $(PKGROOT_UG)/doc $(PKGROOT_UGLN) + install -p src/nethack $(PKGROOT_BIN) + # XXX should this be called nethackrecover? + install -p util/recover $(PKGROOT_BIN) + install -p doc/nethack.6 $(PKGROOT_UG)/man/man6 + install -p doc/recover.6 $(PKGROOT_UG)/man/man6 + install -p doc/Guidebook $(PKGROOT_UG)/doc + install -p dat/nhdat $(PKGROOT_UGLN) + sys/unix/hints/macosx.sh editsysconf sys/unix/sysconf $(PKGROOT_UGLN)/sysconf + cd dat; install -p $(DATNODLB) ../$(PKGROOT_UGLN) +# XXX these files should be somewhere else for good Mac form + touch $(PKGROOT_UGLN)/perm $(PKGROOT_UGLN)/record $(PKGROOT_UGLN)/logfile $(PKGROOT_UGLN)/xlogfile + mkdir $(PKGROOT_UGLN)/save +# XXX what about a news file? + + mkdir -p PKGSCRIPTS + echo '#!/bin/sh' > PKGSCRIPTS/postinstall + echo dseditgroup -o create -r '"Games Group"' -s 3600 $(GAMEGRP) >> PKGSCRIPTS/postinstall + echo $(CHOWN) $(GAMEUID) $(HACKDIR) >> PKGSCRIPTS/postinstall + echo $(CHOWN) $(GAMEUID) $(HACKDIR)/* >> PKGSCRIPTS/postinstall + echo $(CHGRP) $(GAMEGRP) $(HACKDIR) >> PKGSCRIPTS/postinstall + echo $(CHGRP) $(GAMEGRP) $(HACKDIR)/* >> PKGSCRIPTS/postinstall + echo $(CHOWN) $(GAMEUID) $(SHELLDIR)/nethack >> PKGSCRIPTS/postinstall + echo $(CHGRP) $(GAMEGRP) $(SHELLDIR)/nethack >> PKGSCRIPTS/postinstall + echo $(CHOWN) $(GAMEUID) $(SHELLDIR)/recover >> PKGSCRIPTS/postinstall + echo $(CHGRP) $(GAMEGRP) $(SHELLDIR)/recover >> PKGSCRIPTS/postinstall + echo chmod $(VARDIRPERM) $(HACKDIR) >> PKGSCRIPTS/postinstall + echo chmod $(VARDIRPERM) $(HACKDIR)/save >> PKGSCRIPTS/postinstall + echo chmod $(FILEPERM) $(HACKDIR)/license >> PKGSCRIPTS/postinstall + echo chmod $(FILEPERM) $(HACKDIR)/nhdat >> PKGSCRIPTS/postinstall + echo chmod $(FILEPERM) $(HACKDIR)/symbols >> PKGSCRIPTS/postinstall + echo chmod $(VARFILEPERM) $(HACKDIR)/perm >> PKGSCRIPTS/postinstall + echo chmod $(VARFILEPERM) $(HACKDIR)/record >> PKGSCRIPTS/postinstall + echo chmod $(VARFILEPERM) $(HACKDIR)/logfile >> PKGSCRIPTS/postinstall + echo chmod $(VARFILEPERM) $(HACKDIR)/xlogfile >> PKGSCRIPTS/postinstall + echo chmod $(VARFILEPERM) $(HACKDIR)/sysconf >> PKGSCRIPTS/postinstall + echo chmod $(GAMEPERM) $(SHELLDIR)/nethack >> PKGSCRIPTS/postinstall + echo chmod $(EXEPERM) $(SHELLDIR)/recover >> PKGSCRIPTS/postinstall + chmod 0775 PKGSCRIPTS/postinstall + +endif # end of build_tty_pkg +endif # WANT_WIN_TTY for packaging + +ifdef WANT_WIN_QT +# XXX untested and incomplete (see below) +build_qt_pkg: +ifneq (,$(WANT_WIN_X11)$(WANT_WIN_TTY)) + -echo build_qt_pkg only works for a qt-only build + exit 1 +else + $(MAKE) build_package_root + rm -rf NetHackQt + mkdir -p NetHackQt/NetHackQt.app/nethackdir/save + mkdir NetHackQt/Documentation + cp doc/Guidebook.txt doc/nethack.txt doc/recover.txt NetHackQt/Documentation + + osacompile -o NetHackQt/NetHackQt.app/nethackdir/NetHackRecover.app \ + win/macosx/NetHackRecover.applescript + cp win/macosx/recover.pl NetHackQt/NetHackQt.app/nethackdir + + mkdir -p NetHackQt/NetHackQt.app/Contents/Frameworks + cp $(QTDIR)/libqt-mt.3.dylib NetHackQt/NetHackQt.app/Contents/Frameworks + + mkdir NetHackQt/NetHackQt.app/Contents/MacOS + mv PKGROOT/nethack NetHackQt/NetHackQt.app/Contents/MacOS + + mv PKGROOT/lib/nethackdir NetHackQt/NetHackQt.app/nethackdir + +# XXX still missing: +#NetHackQt/NetHackQt.app +# /Contents +# Info.plist +# Resources/nethack.icns +#NetHackQt/Documentation +#NetHackQtRecover.txt +#NetHack Defaults.txt +#changes.patch XXX is this still needed? why isn't it part of the tree? +# doesn't go here + hdiutil create -verbose -srcfolder NetHackQt NetHack-$(SVS)-macosx-qt.dmg +endif # end of build_qt_pkg +endif # WANT_WIN_QT for packaging +endif # MAKEFILE_TOP diff --git a/sys/winnt/Makefile.gcc b/sys/winnt/Makefile.gcc index f272bfcf7..1cc6dea87 100644 --- a/sys/winnt/Makefile.gcc +++ b/sys/winnt/Makefile.gcc @@ -34,40 +34,44 @@ # BUILD DECISIONS SECTION # # There are currently only 4 decisions that you have to make. -# 1. 32-bit or 64-bit? -# 2. Where do you want your build to end up? -# 3. Do you want debug information in the executable? -# 4. Do you want additional GUI interfaces in the executable? -# -# Note that additional GUI interfaces may require external libraries. -# Qt is placed where the official installer places it. -# Other libraries are placed in a subdirectory of your home directory, either -# x86libs or x64libs depending on whether you're building for 64 bits. -# +# 1. Where do you want your build to end up? +# 2. Do you want debug information in the executable? +# 3. Do you want to explicitly override auto-detection of a 32-bit or 64-bit target? +# 4. Do you want to include any optional interfaces in the port? +# 4a) curses +# 4b) Qt +#----------------------------------------------------------------------------------------- +#========================================================================================= + #============================================================================== +#--------------------------------------------------------------- +# 1. Where do you want the game to be built (which folder)? +# If not present prior to compilation it gets created. +# + +GAMEDIR = ../binary + # 1. 32-bit or 64-bit? # +# +#--------------------------------------------------------------- +# 2. Do you want debug information in the executable? +# + +DEBUGINFO = Y + +# +#--------------------------------------------------------------- +# 3. Do you want to explicitly override auto-detection of a 32-bit +# or 64-bit executable (save files do not interchange currently)? +# # 64 bit #TARGET_CPU=x64 # # 32 bit TARGET_CPU=x86 # -#--------------------------------------------------------------- -# 2. Where do you want the game to be built (which folder)? -# If not present prior to compilation it gets created. -# - -GAMEDIR = ../binary - -# -#--------------------------------------------------------------- -# 3. Do you want debug information in the executable? -# - -DEBUGINFO = Y - # #--------------------------------------------------------------- # 4. Do you want additional GUI interfaces in the executable? @@ -75,19 +79,47 @@ DEBUGINFO = Y # and is the default. # -WANT_WIN_QT4 = N +#4a Curses window port support +# +# +# 4. Uncomment these and set them appropriately if you want to +# include curses port support alongside TTY support in your +# NetHack.exe binary. +# +# You'll have to set PDCURSES_H to the correct location of the +# PDCurses header (.h) files and PDCURSES_C to the location +# of your PDCurses C files which must already be resident on +# your machine. +# +#ADD_CURSES=Y +#PDCURSES_TOP=..\..\pdcurses + +#4b Qt +# +#WANT_WIN_QT4 = N # WANT_WIN_QT4 requires Qt 4 or Qt 5, see # https://www.qt.io/download-open-source/ # Earlier versions of Qt are not compatible with Windows # For Qt 5, use: -QT4_DIRECTORY = c:/Qt/Qt5.9.2/5.9.2/mingw53_32 -HAVE_QT5 = Y +# +#QT4_DIRECTORY = c:/Qt/Qt5.9.2/5.9.2/mingw53_32 +#HAVE_QT5 = Y # For Qt 4, comment out the above two lines and use: +# #QT4_DIRECTORY = c:/Qt/4.8.6 #HAVE_QT5 = N +# +# Note that additional GUI interfaces may require external libraries. +# Qt is placed where the official installer places it. +# Other libraries are placed in a subdirectory of your home directory, either +# x86libs or x64libs depending on whether you're building for 64 bits. +# + +# +#============================================================================== # This marks the end of the BUILD DECISIONS section. #============================================================================== # @@ -100,33 +132,24 @@ HAVE_QT5 = Y # Nothing below here should have to be changed.# # # ################################################ +# +#============================================================================== # # Source directories. Makedefs hardcodes these, don't change them. # -# NetHack include files -INCL = ../include -# NetHack data files -DAT = ../dat -# NetHack documentation files -DOC = ../doc -# Utility source -UTIL = ../util -# Main source -SRC = ../src -# Shared system files -SSYS = ../sys/share -# NT Win32 specific files -MSWSYS = ../sys/winnt -# window port files (tty) -TTY = ../win/tty -# window port files (WIN32) -MSWIN = ../win/win32 -# window port files (Qt4) -QT4 = ../win/Qt4 -# Tile support files -WSHR = ../win/share +INCL = ../include # NetHack include files +DAT = ../dat # NetHack data files +DOC = ../doc # NetHack documentation files +UTIL = ../util # Utility source +SRC = ../src # Main source +SSYS = ../sys/share # Shared system files +MSWSYS = ../sys/winnt # mswin specific files +TTY = ../win/tty # window port files (tty) +MSWIN = ../win/win32 # window port files (win32) +WCURSES = ../win/curses # window port files (curses) +WSHR = ../win/share # Tile support files # # Object directory. @@ -142,46 +165,6 @@ ifeq "$(WANT_WIN_QT4)" "Y" link = g++ endif -# -#========================================== -# Level Compiler Info -#========================================== - -# Yacc/Lex ... if you got 'em. -# -# If you have yacc and lex programs (or work-alike such as bison -# and flex), comment out the upper two macros and uncomment -# the lower two. -# - -DO_YACC = YACC_MSG -DO_LEX = LEX_MSG -#DO_YACC = YACC_ACT -#DO_LEX = LEX_ACT - -# - Specify your yacc and lex programs (or work-alikes) here. - -#YACC = bison -y -YACC = byacc -#YACC = yacc - -#LEX = lex -LEX = flex - -# -# - Specify your flex skeleton file (if needed). -# - -FLEXSKEL = -#FLEXSKEL = -S../tools/flex.ske - -YTABC = y_tab.c -YTABH = y_tab.h -LEXYYC = lexyy.c - -#========================================== -# Exe File Info. -#========================================== # # Optional high-quality BSD random number generation routines # (see pcconf.h). Set to nothing if not used. @@ -206,10 +189,22 @@ else DLBFLG = endif +# +# If you defined ZLIB_COMP in include/config.h and you need +# to link with the zlib.lib library, uncomment the line below. +# If necessary, prefix explicit path information to the file name +# otherwise it assumes the NetHack src directory. +# + +#ZLIB = zlib.lib + +#========================================== #========================================== # Setting up the compiler and linker # macros. All builds include the base ones. #========================================== +#========================================== + cflags = -mms-bitfields lflags = ifeq "$(DEBUGINFO)" "Y" @@ -220,8 +215,6 @@ cdebug = linkdebug = endif - - CFLAGSBASE = -c $(cflags) -I$(INCL) $(WINPINC) $(cdebug) #LFLAGSBASEC = $(linkdebug) #LFLAGSBASEG = $(linkdebug) -mwindows @@ -322,7 +315,7 @@ RECOVOBJS = $(O)recover.o TILEFILES = $(WSHR)/monsters.txt $(WSHR)/objects.txt $(WSHR)/other.txt # -# These are not invoked during a normal game build in 3.4 +# These are not invoked during a normal game build in 3.4+ # TEXT_IO = $(O)tiletext.o $(O)tiletxt.o $(O)drawing.o \ $(O)decl.o $(O)monst.o $(O)objects.o @@ -340,19 +333,19 @@ PPMWRITERS = $(O)ppmwrite.o $(O)alloc.o $(O)panic.o # VOBJ01 = $(O)allmain.o $(O)alloc.o $(O)apply.o $(O)artifact.o -VOBJ02 = $(O)attrib.o $(O)ball.o $(O)bones.o $(O)botl.o -VOBJ03 = $(O)cmd.o $(O)dbridge.o $(O)decl.o $(O)detect.o -VOBJ04 = $(O)dig.o $(O)display.o $(O)do.o $(O)do_name.o -VOBJ05 = $(O)do_wear.o $(O)dog.o $(O)dogmove.o $(O)dokick.o -VOBJ06 = $(O)dothrow.o $(O)drawing.o $(O)dungeon.o $(O)eat.o -VOBJ07 = $(O)end.o $(O)engrave.o $(O)exper.o $(O)explode.o -VOBJ08 = $(O)extralev.o $(O)files.o $(O)fountain.o $(O)hack.o -VOBJ09 = $(O)hacklib.o $(O)invent.o $(O)light.o $(O)lock.o -VOBJ10 = $(O)mail.o $(O)makemon.o $(O)mapglyph.o $(O)mcastu.o -VOBJ11 = $(O)mhitm.o $(O)mhitu.o $(O)minion.o $(O)mklev.o -VOBJ12 = $(O)mkmap.o $(O)mkmaze.o $(O)mkobj.o $(O)mkroom.o -VOBJ13 = $(O)mon.o $(O)mondata.o $(O)monmove.o $(O)monst.o -VOBJ14 = $(O)mplayer.o $(O)mthrowu.o $(O)muse.o +VOBJ02 = $(O)attrib.o $(O)ball.o $(O)bones.o $(O)botl.o +VOBJ03 = $(O)cmd.o $(O)dbridge.o $(O)decl.o $(O)detect.o +VOBJ04 = $(O)dig.o $(O)display.o $(O)do.o $(O)do_name.o +VOBJ05 = $(O)do_wear.o $(O)dog.o $(O)dogmove.o $(O)dokick.o +VOBJ06 = $(O)dothrow.o $(O)drawing.o $(O)dungeon.o $(O)eat.o +VOBJ07 = $(O)end.o $(O)engrave.o $(O)exper.o $(O)explode.o +VOBJ08 = $(O)extralev.o $(O)files.o $(O)fountain.o $(O)hack.o +VOBJ09 = $(O)hacklib.o $(O)invent.o $(O)light.o $(O)lock.o +VOBJ10 = $(O)mail.o $(O)pcmain.o $(O)makemon.o $(O)mapglyph.o +VOBJ11 = $(O)mcastu.o $(O)mhitm.o $(O)mhitu.o $(O)minion.o +VOBJ12 = $(O)mklev.o $(O)mkmap.o $(O)mkmaze.o $(O)mkobj.o +VOBJ13 = $(O)mkroom.o $(O)mon.o $(O)mondata.o $(O)monmove.o +VOBJ14 = $(O)monst.o $(O)mplayer.o $(O)mthrowu.o $(O)muse.o VOBJ15 = $(O)music.o $(O)o_init.o $(O)objects.o $(O)objnam.o VOBJ16 = $(O)options.o $(O)pager.o $(O)pickup.o $(O)pline.o VOBJ17 = $(O)polyself.o $(O)potion.o $(O)pray.o $(O)priest.o @@ -366,6 +359,7 @@ VOBJ24 = $(O)track.o $(O)trap.o $(O)u_init.o $(O)uhitm.o VOBJ25 = $(O)vault.o $(O)vis_tab.o $(O)vision.o $(O)weapon.o VOBJ26 = $(O)were.o $(O)wield.o $(O)windows.o $(O)wizard.o VOBJ27 = $(O)worm.o $(O)worn.o $(O)write.o $(O)zap.o +VOBJ28 = $(O)win10.o DLBOBJ = $(O)dlb.o @@ -373,20 +367,29 @@ REGEX = $(O)cppregex.o TTYOBJ = $(O)topl.o $(O)getline.o $(O)wintty.o +!IFNDEF ADD_CURSES +CURSESOBJ= +!ELSE +CURSESOBJ= $(O)cursdial.o $(O)cursinit.o $(O)cursinvt.o $(O)cursmain.o \ + $(O)cursmesg.o $(O)cursmisc.o $(O)cursstat.o $(O)curswins.o +!ENDIF + SOBJ = $(O)winnt.o $(O)pcsys.o $(O)pcunix.o \ $(SOUND) $(O)pcmain.o $(O)nhlan.o OBJS = $(VOBJ01) $(VOBJ02) $(VOBJ03) $(VOBJ04) $(VOBJ05) \ - $(VOBJ06) $(VOBJ07) $(VOBJ08) $(VOBJ09) $(VOBJ10) \ - $(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) $(VOBJ15) \ - $(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \ - $(VOBJ21) $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) \ - $(VOBJ26) $(VOBJ27) $(REGEX) + $(VOBJ06) $(VOBJ07) $(VOBJ08) $(VOBJ09) $(VOBJ10) \ + $(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) $(VOBJ15) \ + $(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \ + $(VOBJ21) $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) \ + $(VOBJ26) $(VOBJ27) $(VOBJ28) $(VOBJ29) $(REGEX) \ + $(CURSESOBJ) GUIOBJ = $(O)mhaskyn.o $(O)mhdlg.o \ $(O)mhfont.o $(O)mhinput.o $(O)mhmain.o $(O)mhmap.o \ $(O)mhmenu.o $(O)mhmsgwnd.o $(O)mhrip.o $(O)mhsplash.o \ $(O)mhstatus.o $(O)mhtext.o $(O)mswproc.o $(O)winhack.o + ifeq "$(WANT_WIN_QT4)" "Y" GUIOBJ += $(O)qt4bind.o $(O)qt4click.o $(O)qt4clust.o $(O)qt4delay.o \ $(O)qt4glyph.o $(O)qt4icon.o $(O)qt4inv.o $(O)qt4key.o $(O)qt4line.o \ @@ -400,6 +403,7 @@ GUIHDR = $(MSWIN)/mhaskyn.h $(MSWIN)/mhdlg.h $(MSWIN)/mhfont.h \ $(MSWIN)/mhmenu.h $(MSWIN)/mhmsg.h $(MSWIN)/mhmsgwnd.h \ $(MSWIN)/mhrip.h $(MSWIN)/mhstatus.h \ $(MSWIN)/mhtext.h $(MSWIN)/resource.h $(MSWIN)/winMS.h + ifeq "$(WANT_WIN_QT4)" "Y" GUIHDR += $(QT4)/qt4bind.h $(QT4)/qt4click.h $(QT4)/qt4clust.h \ $(QT4)/qt4delay.h $(QT4)/qt4glyph.h $(QT4)/qt4icon.h $(QT4)/qt4inv.h \ @@ -410,7 +414,10 @@ ifeq "$(WANT_WIN_QT4)" "Y" $(QT4)/qt4yndlg.h endif -KEYDLLS = $(GAMEDIR)/nhdefkey.dll $(GAMEDIR)/nh340key.dll $(GAMEDIR)/nhraykey.dll +COMCTRL = comctl32.lib + +KEYDLLS = $(GAMEDIR)/nhdefkey.dll $(GAMEDIR)/nh340key.dll \ + $(GAMEDIR)/nhraykey.dll TILEUTIL16 = $(UTIL)/tile2bmp.exe TILEBMP16 = $(SRC)/tiles.bmp @@ -427,6 +434,35 @@ ALLOBJ = $(SOBJ) $(DLBOBJ) $(WOBJ) $(OBJS) $(VVOBJ) OPTIONS_FILE = $(DAT)\options +ifeq "$(ADD_CURSES)" "Y" +#========================================== +# PDCurses build macros +#========================================== +PDCURSES_CURSES_H = $(PDCURSES_TOP)/curses.h +PDCURSES_CURSPRIV_H = $(PDCURSES_TOP)/curspriv.h +PDCURSES_HEADERS = $(PDCURSES_CURSES_H) $(PDCURSES_CURSPRIV_H) +PDCSRC = $(PDCURSES_TOP)/pdcurses +PDCWINCON = $(PDCURSES_TOP)/wincon +PDCLIBOBJS = $(O)addch.o $(O)addchstr.o $(O)addstr.o $(O)attr.o $(O)beep.o \ + $(O)bkgd.o $(O)border.o $(O)clear.o $(O)color.o $(O)delch.o $(O)deleteln.o \ + $(O)deprec.o $(O)getch.o $(O)getstr.o $(O)getyx.o $(O)inch.o $(O)inchstr.o \ + $(O)initscr.o $(O)inopts.o $(O)insch.o $(O)insstr.o $(O)instr.o $(O)kernel.o \ + $(O)keyname.o $(O)mouse.o $(O)move.o $(O)outopts.o $(O)overlay.o $(O)pad.o \ + $(O)panel.o $(O)printw.o $(O)refresh.o $(O)scanw.o $(O)scr_dump.o $(O)scroll.o \ + $(O)slk.o $(O)termattr.o $(O)terminfo.o $(O)touch.o $(O)util.o $(O)window.o \ + $(O)debug.o + +PDCOBJS = $(O)pdcclip.o $(O)pdcdisp.o $(O)pdcgetsc.o $(O)pdckbd.o $(O)pdcscrn.o \ + $(O)pdcsetsc.o $(O)pdcutil.o + +PDCLIB = $(O)pdcurses.a + +PDCINCL = /I$(PDCURSES_TOP) /I$(PDCSRC) /I$(PDCWINCON) + +else +PDCLIB = +endif + #========================================== # Header file macros #========================================== @@ -464,6 +500,25 @@ TILE_H = ../win/share/tile.h DATABASE = $(DAT)/data.base +#========================================== +# More compiler setup post-macros +#========================================== +# +ifeq "$(ADD_CURSES)" "Y" +#CURSESDEF=-D"PDC_DLL_BUILD" -D"CURSES_GRAPHICS" -D"CURSES_BRIEF_INCLUDE" +CURSESDEF=-D"CURSES_GRAPHICS" -D"CURSES_BRIEF_INCLUDE" +else +CURSDEF= +CURSESLIB= +CURSESINCL= +endif + +ifneq "$(ADD_CURSES)" "Y" +INCLDIR= /I../include /I../sys/winnt +else +INCLDIR= /I../include /I../sys/winnt /I$(CURSESINCL) +endif + #========================================== #================ RULES ================== #========================================== @@ -534,6 +589,63 @@ $(OBJ)/%.o : $(TTY)/%.c $(OBJ)/%.o : $(MSWIN)/%.c $(cc) $(CFLAGS) -o$@ $< +#========================================== +# Rules for files in win\curses +#========================================== + +$(OBJ)/%.o : $(WCURSES)/%.c + $(cc) $(CFLAGS) -o$@ $< + +#========================================== +# Rules for files in PDCurses +#========================================== + +$(OBJ)/%.o : $(PDCURSES_TOP)/%.c + $(cc) $(PDCINCL) $(CFLAGS) -o$@ $< + +$(OBJ)/%.o : $(PDCSRC)/%.c + $(cc) $(PDCINCL) $(CFLAGS) -o$@ $< + +$(OBJ)/%.o : $(PDCWINCON)/%.c + $(cc) $(PDCINCL) $(CFLAGS) -o$@ $< + +#========================================== +# Level Compiler Info +#========================================== + +# Yacc/Lex ... if you got 'em. +# +# If you have yacc and lex programs (or work-alike such as bison +# and flex), comment out the upper two macros and uncomment +# the lower two. +# + +DO_YACC = YACC_MSG +DO_LEX = LEX_MSG +#DO_YACC = YACC_ACT +#DO_LEX = LEX_ACT + +# - Specify your yacc and lex programs (or work-alikes) here. + +#YACC = bison -y +YACC = byacc +#YACC = yacc + +#LEX = lex +LEX = flex + +# +# - Specify your flex skeleton file (if needed). +# + +FLEXSKEL = +#FLEXSKEL = -S../tools/flex.ske + +YTABC = y_tab.c +YTABH = y_tab.h +LEXYYC = lexyy.c + + #========================================== # Rules for files in win/Qt4 #========================================== @@ -591,7 +703,12 @@ endif $(subst /,\,if exist $(DAT)/symbols copy $(DAT)/symbols $(GAMEDIR)) $(subst /,\,if exist $(DOC)/guidebook.txt copy $(DOC)/guidebook.txt $(GAMEDIR)/Guidebook.txt) $(subst /,\,if exist $(DOC)/nethack.txt copy $(DOC)/nethack.txt $(GAMEDIR)/NetHack.txt) - $(subst /,\,copy $(MSWSYS)/defaults.nh $(GAMEDIR)/defaults.nh) + $(U)makedefs -c + $(subst /,\,if not exist $(GAMEDIR)/defaults.nh copy fixed_defaults.nh $(GAMEDIR)/defaults.nh) + $(subst /,\,if not exist $(GAMEDIR)/defaults.nh copy $(MSWSYS)/defaults.nh $(GAMEDIR)/defaults.nh) + $(subst /,\,if not exist $(GAMEDIR)/record. goto>$(GAMEDIR)/record.) +# +# $(subst /,\,echo install done > $@) # copy $(MSWSYS)/winnt.hlp $(GAMEDIR) @@ -662,18 +779,26 @@ $(O)gamedir.tag: $(subst /,\,@if not exist $(GAMEDIR)/*.* mkdir $(GAMEDIR)) $(subst /,\,@echo directory created > $@) -$(GAMEDIR)/NetHack.exe : $(O)gamedir.tag $(O)tile.o $(O)nttty.o $(O)guistub.o \ +$(GAMEDIR)/NetHack.exe : $(O)gamedir.tag $(PDCLIB) $(O)tile.o $(O)nttty.o $(O)guistub.o \ $(ALLOBJ) $(TTYOBJ) $(GUIOBJ) $(O)conres.o $(KEYDLLS) @echo Linking $@... $(link) $(lflags) -o$@ $(ALLOBJ) $(TTYOBJ) $(O)nttty.o $(O)tile.o \ - $(O)guistub.o $(O)conres.o $(conlibs) -static -lstdc++ + $(O)guistub.o $(O)conres.o $(PDCLIB) $(conlibs) -static -lstdc++ $(subst /,\,@if exist $(O)install.tag del $(O)install.tag) +# NetHackW +# full tty linkage libs: +# libs: $(LIBS) $(guilibs) $(COMCTRL) +# objs: $(GAMEOBJ) $(GUIOBJ) $(TTYOBJ) $(O)tile.o $(O)nttty.o +# otherwise: +# libs: $(LIBS) $(guilibs) $(COMCTRL) +# objs: $(GAMEOBJ) $(GUIOBJ) $(O)tile.o $(O)ttystub.o + $(GAMEDIR)/NetHackW.exe : $(O)gamedir.tag $(O)tile.o $(O)ttystub.o \ $(ALLOBJ) $(TTYOBJ) $(GUIOBJ) $(O)winres.o $(KEYDLLS) @echo Linking $@... $(link) $(lflags) -mwindows -o$@ $(ALLOBJ) $(GUIOBJ) $(O)tile.o $(O)ttystub.o \ - $(O)winres.o $(guilibs) -static -lstdc++ + $(O)winres.o $(PDCLIB) $(guilibs) -static -lstdc++ $(subst /,\,@if exist $(O)install.tag del $(O)install.tag) $(O)nhdefkey.o: @@ -713,9 +838,10 @@ graphicschk: @echo ---- $(subst /,\,@echo graphicschk > graphicschk) -# -# Secondary Targets. -# + +#========================================== +#=========== SECONDARY TARGETS ============ +#========================================== #========================================== # Makedefs Stuff @@ -920,6 +1046,24 @@ else $(subst /,\,echo.>>$@) endif +#================================================= +# For a couple of devteam utilities +#================================================= + +$(U)nhsizes.exe: $(O)nhsizes.o + @echo Linking $@... + @$(link) $(LFLAGSU) -o$@ $(O)nhsizes.o $(O)panic.o $(O)alloc.o$(U)nhsizes.exe: $(O)nhsizes.o + +$(U)nhsize2.exe: $(O)nhsizes2.o + @echo Linking $@... + @$(link) $(LFLAGSU) -o$@ $(O)nhsizes2.o $(O)panic.o $(O)alloc.o + +$(O)nhsizes.o: $(CONFIG_H) nhsizes.c + $(cc) $(CFLAGSU) -o$@ nhsizes.c + +$(O)nhsizes2.o: $(CONFIG_H) nhsizes2.c + $(cc) $(CFLAGSU) -o$@ nhsizes2.c + #========================================== # Create directory for holding object files #========================================== @@ -929,19 +1073,6 @@ $(O)obj.tag: $(subst /,\,@if not exist $(OBJ)/*.* mkdir $(OBJ)) $(subst /,\,@echo directory created > $@) - -#========================================== -#=========== SECONDARY TARGETS ============ -#========================================== - -#=========================================== -# Header files NOT distributed in ../include -#=========================================== - -$(INCL)/win32api.h: $(MSWSYS)/win32api.h - $(subst /,\,copy $(MSWSYS)/win32api.h $@) - - #========================================== # DLB utility and nhdat file creation #========================================== @@ -1072,6 +1203,13 @@ $(O)tile2bmp.o: $(WSHR)/tile2bmp.c $(HACK_H) $(TILE_H) $(INCL)/win32api.h $(O)til2bm32.o: $(WSHR)/til2bm32.c $(HACK_H) $(TILE_H) $(INCL)/win32api.h $(cc) $(CFLAGS) -I$(WSHR) -DTILE_X=32 -DTILE_Y=32 -o$@ $(WSHR)/til2bm32.c +#========================================== +# PDCurses Library +#========================================== + +$(O)pdcurses.a : $(PDCLIBOBJS) $(PDCOBJS) + ar rcs $@ $(PDCLIBOBJS) $(PDCOBJS) + #========================================== # Housekeeping #========================================== @@ -1155,7 +1293,9 @@ spotless: clean ifneq "$(OBJ)" "" $(subst /,\,if exist $(OBJ) rmdir $(OBJ)) /s /Q endif - +ifeq "$(ADD_CURSES)" == "Y" + if exist $(O)pdcurses.lib del $(O)pdcurses.lib +endif clean: $(subst /,\,if exist $(O)*.o del $(O)*.o) $(subst /,\,if exist $(O)utility.tag del $(O)utility.tag) @@ -1173,41 +1313,6 @@ clean: #=================================================================== # OTHER DEPENDENCIES #=================================================================== - -# Other files needed by some ports -$(GAMEDIR)/Qt5Core.dll : $(QT4_DIRECTORY)/bin/Qt5Core.dll - $(subst /,\,@copy $< $@ >nul) - -$(GAMEDIR)/Qt5Gui.dll : $(QT4_DIRECTORY)/bin/Qt5Gui.dll - $(subst /,\,@copy $< $@ >nul) - -$(GAMEDIR)/Qt5Widgets.dll : $(QT4_DIRECTORY)/bin/Qt5Widgets.dll - $(subst /,\,@copy $< $@ >nul) - -$(GAMEDIR)/QtCore4.dll : $(QT4_DIRECTORY)/bin/QtCore4.dll - $(subst /,\,@copy $< $@ >nul) - -$(GAMEDIR)/QtGui4.dll : $(QT4_DIRECTORY)/bin/QtGui4.dll - $(subst /,\,@copy $< $@ >nul) - -$(GAMEDIR)/nhtiles.bmp : $(SRC)/tiles.bmp - $(subst /,\,@copy $< $@ >nul) - -$(GAMEDIR)/rip.xpm : ../win/X11/rip.xpm - $(subst /,\,@copy $< $@ >nul) - - -# Dependencies on .moc files (for Qt 4 or 5) -$(OBJ)/qt4main.o : $(QT4)/qt4main.cpp $(QT4)/qt4main.moc $(QT4)/qt4kde0.moc -$(OBJ)/qt4map.o : $(QT4)/qt4map.cpp $(QT4)/qt4map.moc -$(OBJ)/qt4menu.o : $(QT4)/qt4menu.cpp $(QT4)/qt4menu.moc -$(OBJ)/qt4msg.o : $(QT4)/qt4msg.cpp $(QT4)/qt4msg.moc -$(OBJ)/qt4plsel.o : $(QT4)/qt4plsel.cpp $(QT4)/qt4plsel.moc -$(OBJ)/qt4set.o : $(QT4)/qt4set.cpp $(QT4)/qt4set.moc -$(OBJ)/qt4stat.o : $(QT4)/qt4stat.cpp $(QT4)/qt4stat.moc -$(OBJ)/qt4xcmd.o : $(QT4)/qt4xcmd.cpp $(QT4)/qt4xcmd.moc -$(OBJ)/qt4yndlg.o : $(QT4)/qt4yndlg.cpp $(QT4)/qt4yndlg.moc - # # dat dependencies # @@ -1224,6 +1329,15 @@ $(DAT)/quest.dat: $(O)utility.tag $(DAT)/quest.txt $(DAT)/oracles: $(O)utility.tag $(DAT)/oracles.txt $(subst /,\,$(U)makedefs -h) +$(DAT)/engrave: $(DAT)/engrave.txt $(U)makedefs.exe + $(U)makedefs -s + +$(DAT)/epitaph: $(DAT)/epitaph.txt $(U)makedefs.exe + $(U)makedefs -s + +$(DAT)/bogusmon: $(DAT)/bogusmon.txt $(U)makedefs.exe + $(U)makedefs -s + $(DAT)/dungeon: $(O)utility.tag $(DAT)/dungeon.def $(subst /,\,$(U)makedefs -e) $(subst /,\,$(U)dgncomp $(DAT)/dungeon.pdf) @@ -1261,6 +1375,63 @@ $(O)tile.o: $(SRC)/tile.c $(HACK_H) $(O)panic.o: $(U)panic.c $(CONFIG_H) $(cc) $(CFLAGS) -o$@ $(U)panic.c +# +# sys/share dependencies +# + +(O)cppregex.o: $(O)cppregex.cpp $(HACK_H) + $(cc) $(CFLAGS) -o$@ ../sys/share/cppregex.cpp + +# +# Other dependencies needed by some ports +# + +# curses window port dependencies + +$(O)cursdial.o: $(WCURSES)\cursdial.c $(WCURSES)\cursdial.h $(INCL)\wincurs.h +$(O)cursinit.c: $(WCURSES)\cursinit.c $(WCURSES)\cursinit.h $(INCL)\wincurs.h +$(O)cursinvt.c: $(WCURSES)\cursinvt.c $(WCURSES)\cursinvt.h $(INCL)\wincurs.h +$(O)cursmain.c: $(WCURSES)\cursmain.c $(WCURSES)\cursmain.h $(INCL)\wincurs.h +$(O)cursmesg.c: $(WCURSES)\cursmesg.c $(WCURSES)\cursmesg.h $(INCL)\wincurs.h +$(O)cursmisc.c: $(WCURSES)\cursmisc.c $(WCURSES)\cursmisc.h $(INCL)\wincurs.h +$(O)cursstat.c: $(WCURSES)\cursstat.c $(WCURSES)\cursstat.h $(INCL)\wincurs.h +$(O)curswins.c: $(WCURSES)\curswins.c $(WCURSES)\curswins.h $(INCL)\wincurs.h + +# Qt dependencies + +$(GAMEDIR)/Qt5Core.dll : $(QT4_DIRECTORY)/bin/Qt5Core.dll + $(subst /,\,@copy $< $@ >nul) + +$(GAMEDIR)/Qt5Gui.dll : $(QT4_DIRECTORY)/bin/Qt5Gui.dll + $(subst /,\,@copy $< $@ >nul) + +$(GAMEDIR)/Qt5Widgets.dll : $(QT4_DIRECTORY)/bin/Qt5Widgets.dll + $(subst /,\,@copy $< $@ >nul) + +$(GAMEDIR)/QtCore4.dll : $(QT4_DIRECTORY)/bin/QtCore4.dll + $(subst /,\,@copy $< $@ >nul) + +$(GAMEDIR)/QtGui4.dll : $(QT4_DIRECTORY)/bin/QtGui4.dll + $(subst /,\,@copy $< $@ >nul) + +$(GAMEDIR)/nhtiles.bmp : $(SRC)/tiles.bmp + $(subst /,\,@copy $< $@ >nul) + +$(GAMEDIR)/rip.xpm : ../win/X11/rip.xpm + $(subst /,\,@copy $< $@ >nul) + + +# Dependencies on .moc files (for Qt 4 or 5) +$(OBJ)/qt4main.o : $(QT4)/qt4main.cpp $(QT4)/qt4main.moc $(QT4)/qt4kde0.moc +$(OBJ)/qt4map.o : $(QT4)/qt4map.cpp $(QT4)/qt4map.moc +$(OBJ)/qt4menu.o : $(QT4)/qt4menu.cpp $(QT4)/qt4menu.moc +$(OBJ)/qt4msg.o : $(QT4)/qt4msg.cpp $(QT4)/qt4msg.moc +$(OBJ)/qt4plsel.o : $(QT4)/qt4plsel.cpp $(QT4)/qt4plsel.moc +$(OBJ)/qt4set.o : $(QT4)/qt4set.cpp $(QT4)/qt4set.moc +$(OBJ)/qt4stat.o : $(QT4)/qt4stat.cpp $(QT4)/qt4stat.moc +$(OBJ)/qt4xcmd.o : $(QT4)/qt4xcmd.cpp $(QT4)/qt4xcmd.moc +$(OBJ)/qt4yndlg.o : $(QT4)/qt4yndlg.cpp $(QT4)/qt4yndlg.moc + # # The rest are stolen from sys/unix/Makefile.src, # with the following changes: diff --git a/sys/winnt/Makefile.msc b/sys/winnt/Makefile.msc index d3fbf04bc..ce6768ce3 100644 --- a/sys/winnt/Makefile.msc +++ b/sys/winnt/Makefile.msc @@ -71,10 +71,11 @@ DEBUGINFO = Y # # You'll have to set PDCURSES_H to the correct location of the # PDCurses header (.h) files and PDCURSES_C to the location -# of your PDCurses C files. +# of your PDCurses C files which must already be resident on +# your machine. # -#ADD_CURSES=Y -#PDCURSES_TOP=..\..\pdcurses +ADD_CURSES=Y +PDCURSES_TOP=..\..\pdcurses # #============================================================================== # This marks the end of the BUILD DECISIONS section. @@ -89,13 +90,9 @@ DEBUGINFO = Y # Nothing below here should have to be changed.# # # ################################################ - # #============================================================================== -# Set the gamedir according to your preference. -# If not present prior to compilation it gets created. - # # Source directories. Makedefs hardcodes these, don't change them. # @@ -122,11 +119,6 @@ cc=cl link=link rc=Rc -# -#========================================== -# Exe File Info. -#========================================== - # # # Optional high-quality BSD random number generation routines @@ -280,7 +272,7 @@ RECOVOBJS = $(O)recover.o TILEFILES = $(WSHR)\monsters.txt $(WSHR)\objects.txt $(WSHR)\other.txt # -# These are not invoked during a normal game build in 3.4 +# These are not invoked during a normal game build in 3.4+ # TEXT_IO = $(O)tiletext.o $(O)tiletxt.o $(O)drawing.o \ $(O)decl.o $(O)monst.o $(O)objects.o @@ -306,19 +298,19 @@ VOBJ06 = $(O)dothrow.o $(O)drawing.o $(O)dungeon.o $(O)eat.o VOBJ07 = $(O)end.o $(O)engrave.o $(O)exper.o $(O)explode.o VOBJ08 = $(O)extralev.o $(O)files.o $(O)fountain.o $(O)hack.o VOBJ09 = $(O)hacklib.o $(O)invent.o $(O)light.o $(O)lock.o -VOBJ10 = $(O)mail.o $(O)pcmain.o $(O)makemon.o $(O)mapglyph.o $(O)mcastu.o -VOBJ11 = $(O)mhitm.o $(O)mhitu.o $(O)minion.o $(O)mklev.o -VOBJ12 = $(O)mkmap.o $(O)mkmaze.o $(O)mkobj.o $(O)mkroom.o -VOBJ13 = $(O)mon.o $(O)mondata.o $(O)monmove.o $(O)monst.o -VOBJ14 = $(O)mplayer.o $(O)mthrowu.o $(O)muse.o -VOBJ15 = $(O)music.o $(O)o_init.o $(O)objects.o $(O)objnam.o -VOBJ16 = $(O)options.o $(O)pager.o $(O)pickup.o $(O)pline.o -VOBJ17 = $(O)polyself.o $(O)potion.o $(O)pray.o $(O)priest.o -VOBJ18 = $(O)quest.o $(O)questpgr.o $(RANDOM) $(O)read.o -VOBJ19 = $(O)rect.o $(O)region.o $(O)restore.o $(O)rip.o -VOBJ20 = $(O)rnd.o $(O)role.o $(O)rumors.o $(O)save.o -VOBJ21 = $(O)shk.o $(O)shknam.o $(O)sit.o $(O)sounds.o -VOBJ22 = $(O)sp_lev.o $(O)spell.o $(O)steal.o $(O)steed.o +VOBJ10 = $(O)mail.o $(O)pcmain.o $(O)makemon.o $(O)mapglyph.o +VOBJ11 = $(O)mcastu.o $(O)mhitm.o $(O)mhitu.o $(O)minion.o +VOBJ12 = $(O)mklev.o $(O)mkmap.o $(O)mkmaze.o $(O)mkobj.o +VOBJ13 = $(O)mkroom.o $(O)mon.o $(O)mondata.o $(O)monmove.o +VOBJ14 = $(O)monst.o $(O)mplayer.o $(O)mthrowu.o $(O)muse.o +VOBJ15 = $(O)music.o $(O)o_init.o $(O)objects.o $(O)objnam.o +VOBJ16 = $(O)options.o $(O)pager.o $(O)pickup.o $(O)pline.o +VOBJ17 = $(O)polyself.o $(O)potion.o $(O)pray.o $(O)priest.o +VOBJ18 = $(O)quest.o $(O)questpgr.o $(RANDOM) $(O)read.o +VOBJ19 = $(O)rect.o $(O)region.o $(O)restore.o $(O)rip.o +VOBJ20 = $(O)rnd.o $(O)role.o $(O)rumors.o $(O)save.o +VOBJ21 = $(O)shk.o $(O)shknam.o $(O)sit.o $(O)sounds.o +VOBJ22 = $(O)sp_lev.o $(O)spell.o $(O)steal.o $(O)steed.o VOBJ23 = $(O)sys.o $(O)teleport.o $(O)timeout.o $(O)topten.o VOBJ24 = $(O)track.o $(O)trap.o $(O)u_init.o $(O)uhitm.o VOBJ25 = $(O)vault.o $(O)vis_tab.o $(O)vision.o $(O)weapon.o @@ -362,7 +354,8 @@ GUIHDR = $(MSWIN)\mhaskyn.h $(MSWIN)\mhdlg.h $(MSWIN)\mhfont.h \ COMCTRL = comctl32.lib -KEYDLLS = $(GAMEDIR)\nhdefkey.dll $(GAMEDIR)\nh340key.dll $(GAMEDIR)\nhraykey.dll +KEYDLLS = $(GAMEDIR)\nhdefkey.dll $(GAMEDIR)\nh340key.dll \ + $(GAMEDIR)\nhraykey.dll TILEUTIL16 = $(UTIL)\tile2bmp.exe TILEBMP16 = $(SRC)\tiles.bmp @@ -399,7 +392,7 @@ PDCLIBOBJS = $(O)addch.o $(O)addchstr.o $(O)addstr.o $(O)attr.o $(O)beep.o PDCOBJS = $(O)pdcclip.o $(O)pdcdisp.o $(O)pdcgetsc.o $(O)pdckbd.o $(O)pdcscrn.o \ $(O)pdcsetsc.o $(O)pdcutil.o -PDCLIB = $(O)\pdcurses.lib +PDCLIB = $(O)pdcurses.lib PDCINCL = /I$(PDCURSES_TOP) /I$(PDCSRC) /I$(PDCWINCON) @@ -452,12 +445,23 @@ DATABASE = $(DAT)\data.base !IF "$(ADD_CURSES)" == "Y" #CURSESDEF=-D"PDC_DLL_BUILD" -D"CURSES_GRAPHICS" -D"CURSES_BRIEF_INCLUDE" CURSESDEF=-D"CURSES_GRAPHICS" -D"CURSES_BRIEF_INCLUDE" +CURSESINCL=..\win\curses !ELSE CURSDEF= CURSESLIB= CURSESINCL= !ENDIF +!IFNDEF ADD_CURSES +INCLDIR= /I..\include /I..\sys\winnt +!ELSE +INCLDIR= /I..\include /I..\sys\winnt /I$(CURSESINCL) +!ENDIF + +#=========================================== +#---- start of Visual Studio Specific macros +#=========================================== + ccommon= -c -nologo -D"_CONSOLE" -D"_CRT_NONSTDC_NO_DEPRECATE" -D"_CRT_SECURE_NO_DEPRECATE" \ -D"_LIB" -D"_SCL_SECURE_NO_DEPRECATE" -D"_VC80_UPGRADE=0x0600" -D"DLB" -D"_MBCS" \ -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -D"NDEBUG" -D"YY_NO_UNISTD_H" $(CURSESDEF) \ @@ -527,12 +531,6 @@ conlibs = $(baselibs) guilibs = $(winlibs) # -!IFNDEF ADD_CURSES -INCLDIR= /I..\include /I..\sys\winnt -!ELSE -INCLDIR= /I..\include /I..\sys\winnt /I$(CURSESINCL) -!ENDIF - #========================================== # Util builds #========================================== @@ -552,6 +550,10 @@ DLB = nhdat DLB = ! ENDIF +#========================================== +#---- end of Visual Studio Specific macros +#========================================== + #========================================== #================ RULES ================== #========================================== @@ -630,9 +632,6 @@ DLB = {$(WCURSES)}.c{$(OBJ)}.o: @$(cc) $(PDCINCL) $(cflagsBuild) -Fo$@ $< -#{$(WCURSES)}.txt{$(DAT)}.txt: -# @copy $< $@ - #========================================== # Rules for files in PDCurses #========================================== @@ -684,11 +683,12 @@ $(O)install.tag: $(DAT)\data $(DAT)\rumors $(DAT)\dungeon \ if exist $(DAT)\symbols copy $(DAT)\symbols $(GAMEDIR) if exist $(DOC)\guidebook.txt copy $(DOC)\guidebook.txt $(GAMEDIR)\Guidebook.txt if exist $(DOC)\nethack.txt copy $(DOC)\nethack.txt $(GAMEDIR)\NetHack.txt - @if exist $(GAMEDIR)\NetHack.PDB echo NOTE: You may want to remove $(GAMEDIR:\=/)/NetHack.PDB to conserve space - @if exist $(GAMEDIR)\NetHackW.PDB echo NOTE: You may want to remove $(GAMEDIR:\=/)/NetHackW.PDB to conserve space $(U)makedefs -c -if not exist $(GAMEDIR)\defaults.nh copy fixed_defaults.nh $(GAMEDIR)\defaults.nh + -if not exist $(GAMEDIR)\defaults.nh copy $(MSWSYS)\defaults.nh $(GAMEDIR)\defaults.nh -if not exist $(GAMEDIR)\record. goto>$(GAMEDIR)\record. + @if exist $(GAMEDIR)\NetHack.PDB echo NOTE: You may want to remove $(GAMEDIR:\=/)/NetHack.PDB to conserve space + @if exist $(GAMEDIR)\NetHackW.PDB echo NOTE: You may want to remove $(GAMEDIR:\=/)/NetHackW.PDB to conserve space echo install done > $@ # copy $(MSWSYS)\winnt.hlp $(GAMEDIR) @@ -753,10 +753,10 @@ $(O)console.res: $(MSWSYS)\console.rc $(MSWSYS)\NetHack.ico @$(rc) -r -fo$@ -i$(MSWSYS) -dNDEBUG $(MSWSYS)\console.rc -#========================================== +#========================================================================== # The game targets. -#========================================== - +#========================================================================== +#[VS-start] Visual C # The section for linking the NetHack image looks a little strange at # first, especially if you are used to UNIX makes, or NDMAKE. It is # Microsoft nmake specific, and it gets around the problem of the @@ -778,6 +778,8 @@ $(O)console.res: $(MSWSYS)\console.rc $(MSWSYS)\NetHack.ico # with ^ as we have done below. Every occurence # of a in $(ALLOBJ) is replaced by # <+>. +#[VS-end] +#========================================================================== GAMEOBJ=$(ALLOBJ:^ =^ ) @@ -896,20 +898,14 @@ $(GAMEDIR)\nhraykey.dll : $(O)$(@B).o $(O)gamedir.tag $(O)$(@B).def /PDB:"$(O)$(@B).PDB" /MAP:"$(O)$(@B).map" /DEF:$(O)$(@B).def \ /IMPLIB:$(O)$(@B).lib -out:$@ $(O)$(@B).o -# -# Secondary Targets. -# + +#========================================== +#=========== SECONDARY TARGETS ============ +#========================================== #========================================== # Makedefs Stuff #========================================== -$(U)nhsizes.exe: $(O)nhsizes.o - @echo Linking $(@:\=/) - $(link) $(lflagsBuild) -out:$@ $(O)nhsizes.o $(O)panic.o $(O)alloc.o - -$(O)nhsizes.o: $(CONFIG_H) nhsizes.c - @$(cc) $(cflagsBuild) -Fo$@ nhsizes.c - $(U)makedefs.exe: $(MAKEOBJS) @echo Linking $(@:\=/) @$(link) $(lflagsBuild) /PDB:"$(O)$(@B).PDB" /MAP:"$(O)$(@B).MAP" -out:$@ $(MAKEOBJS) @@ -1061,6 +1057,24 @@ $(U)dgncomp.exe: $(DGNCOMPOBJS) ) << +#================================================= +# For a couple of devteam utilities +#================================================= + +$(U)nhsizes.exe: $(O)nhsizes.o + @echo Linking $(@:\=/) + $(link) $(lflagsBuild) -out:$@ $(O)nhsizes.o $(O)panic.o $(O)alloc.o + +$(U)nhsizes2.exe: $(O)nhsizes2.o + @echo Linking $(@:\=/) + $(link) $(lflagsBuild) -out:$@ $(O)nhsizes2.o $(O)panic.o $(O)alloc.o + +$(O)nhsizes.o: $(CONFIG_H) nhsizes.c + @$(cc) $(cflagsBuild) -Fo$@ nhsizes.c + +$(O)nhsizes2.o: $(CONFIG_H) nhsizes2.c + @$(cc) $(cflagsBuild) -Fo$@ nhsizes2.c + #================================================= # Create directory for holding object files #================================================= @@ -1070,34 +1084,6 @@ $(O)obj.tag: @if not exist $(OBJ)\*.* mkdir $(OBJ) @echo directory created >$@ -#========================================== -# Notify of any CL environment variables -# in effect since they change the compiler -# options. -#========================================== - -$(O)envchk.tag: $(O)obj.tag -! IF "$(TARGET_CPU)"=="x64" - @echo Windows x64 64-bit target build -! ELSE - @echo Windows x86 32-bit target build -! ENDIF -!IFDEF TTYOBJ - @echo tty window support included -! IF "$(ADD_CURSES)"=="Y" - @echo curses window support also included -! ENDIF -!ENDIF -! IF "$(CL)"!="" -# @echo Warning, the CL Environment variable is defined: -# @echo CL=$(CL) -! ENDIF - echo envchk >$@ - -#========================================== -#=========== SECONDARY TARGETS ============ -#========================================== - #========================================== # DLB utility and nhdat file creation #========================================== @@ -1259,12 +1245,36 @@ $(O)til2bm32.o: $(WSHR)\tile2bmp.c $(HACK_H) $(TILE_H) $(MSWSYS)\win32api.h @$(cc) $(cflagsBuild) -I$(WSHR) /DPACKED_FILE /DTILE_X=32 /DTILE_Y=32 /Fo$@ $(WSHR)\tile2bmp.c #========================================== -# PDCurses +# PDCurses Library #========================================== -$(O)\pdcurses.lib : $(PDCLIBOBJS) $(PDCOBJS) +$(O)pdcurses.lib : $(PDCLIBOBJS) $(PDCOBJS) lib -nologo /out:$@ $(PDCLIBOBJS) $(PDCOBJS) +#========================================== +# Notify of any CL environment variables +# in effect since they change the compiler +# options. +#========================================== + +$(O)envchk.tag: $(O)obj.tag +! IF "$(TARGET_CPU)"=="x64" + @echo Windows x64 64-bit target build +! ELSE + @echo Windows x86 32-bit target build +! ENDIF +!IFDEF TTYOBJ + @echo tty window support included +! IF "$(ADD_CURSES)"=="Y" + @echo curses window support also included +! ENDIF +!ENDIF +! IF "$(CL)"!="" +# @echo Warning, the CL Environment variable is defined: +# @echo CL=$(CL) +! ENDIF + echo envchk >$@ + #========================================== # Housekeeping #========================================== @@ -1470,6 +1480,8 @@ $(O)winhack.o: $(HACK_H) $(MSWIN)\winhack.c $(O)ttystub.o: $(HACK_H) $(MSWSYS)\stubs.c @$(cc) $(cflagsBuild) -DTTYSTUB -Fo$@ $(MSWSYS)\stubs.c +$(O)tile.o: $(SRC)\tile.c $(HACK_H) + # # util dependencies # @@ -1483,18 +1495,21 @@ $(O)panic.o: $(U)panic.c $(CONFIG_H) (O)cppregex.o: $(O)cppregex.cpp $(HACK_H) @$(CC) $(cflagsBuild) -Fo$@ ..\sys\share\cppregex.cpp - -# -# curses window port dependencies # -$(O)\cursdial.o: $(WCURSES)\cursdial.c $(WCURSES)\cursdial.h $(INCL)\wincurs.h -$(O)\cursinit.c: $(WCURSES)\cursinit.c $(WCURSES)\cursinit.h $(INCL)\wincurs.h -$(O)\cursinvt.c: $(WCURSES)\cursinvt.c $(WCURSES)\cursinvt.h $(INCL)\wincurs.h -$(O)\cursmain.c: $(WCURSES)\cursmain.c $(WCURSES)\cursmain.h $(INCL)\wincurs.h -$(O)\cursmesg.c: $(WCURSES)\cursmesg.c $(WCURSES)\cursmesg.h $(INCL)\wincurs.h -$(O)\cursmisc.c: $(WCURSES)\cursmisc.c $(WCURSES)\cursmisc.h $(INCL)\wincurs.h -$(O)\cursstat.c: $(WCURSES)\cursstat.c $(WCURSES)\cursstat.h $(INCL)\wincurs.h -$(O)\curswins.c: $(WCURSES)\curswins.c $(WCURSES)\curswins.h $(INCL)\wincurs.h +# Other dependencies needed by some ports +# + +# curses window port dependencies + +$(O)cursdial.o: $(WCURSES)\cursdial.c $(WCURSES)\cursdial.h $(INCL)\wincurs.h +$(O)cursinit.c: $(WCURSES)\cursinit.c $(WCURSES)\cursinit.h $(INCL)\wincurs.h +$(O)cursinvt.c: $(WCURSES)\cursinvt.c $(WCURSES)\cursinvt.h $(INCL)\wincurs.h +$(O)cursmain.c: $(WCURSES)\cursmain.c $(WCURSES)\cursmain.h $(INCL)\wincurs.h +$(O)cursmesg.c: $(WCURSES)\cursmesg.c $(WCURSES)\cursmesg.h $(INCL)\wincurs.h +$(O)cursmisc.c: $(WCURSES)\cursmisc.c $(WCURSES)\cursmisc.h $(INCL)\wincurs.h +$(O)cursstat.c: $(WCURSES)\cursstat.c $(WCURSES)\cursstat.h $(INCL)\wincurs.h +$(O)curswins.c: $(WCURSES)\curswins.c $(WCURSES)\curswins.h $(INCL)\wincurs.h + # # The rest are stolen from sys/unix/Makefile.src, # with the following changes: @@ -1567,7 +1582,6 @@ $(O)wintext.o: ..\win\X11\wintext.c $(HACK_H) $(INCL)\winX.h $(INCL)\xwindow.h @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\wintext.c $(O)winval.o: ..\win\X11\winval.c $(HACK_H) $(INCL)\winX.h @$(CC) $(cflagsBuild) -Fo$@ ..\win\X11\winval.c -$(O)tile.o: $(SRC)\tile.c $(HACK_H) $(O)gnaskstr.o: ..\win\gnome\gnaskstr.c ..\win\gnome\gnaskstr.h \ ..\win\gnome\gnmain.h @$(CC) $(cflagsBuild) $(GNOMEINC) -Fo$@ ..\win\gnome\gnaskstr.c diff --git a/sys/winnt/defaults.nh b/sys/winnt/defaults.nh index 727086551..8c9994284 100644 --- a/sys/winnt/defaults.nh +++ b/sys/winnt/defaults.nh @@ -23,6 +23,9 @@ OPTIONS=symset:IBMGraphics_2,roguesymset:RogueEpyx # for use by blind NetHack players #OPTIONS=symset:NHAccess,roguesymset:NHAccess +# Optional curses port interface +#OPTIONS=windowtype:curses +# # Keyboard handling # Different keyboard handlers can be loaded. # Default is nhdefkey.dll but you can override that. @@ -80,7 +83,7 @@ MENUCOLOR=" cursed .* (being worn)" = orange&underline # # number_pad option can have an optional value of 0 (off), 1 (on), # or 2(on,legacy-mode) which causes 5='g', alt-5='G', alt-0='I' -OPTIONS=time,noshowexp,number_pad:2,lit_corridor +OPTIONS=time,noshowexp,number_pad:2,lit_corridor,mouse_support:1 # Make commands that ask for an inventory item pop up a menu OPTIONS=force_invmenu diff --git a/sys/winnt/nttty.c b/sys/winnt/nttty.c index 5f5befc0c..579125867 100644 --- a/sys/winnt/nttty.c +++ b/sys/winnt/nttty.c @@ -87,6 +87,7 @@ static void NDECL(restore_original_console_font); /* Win32 Screen buffer,coordinate,console I/O information */ COORD ntcoord; INPUT_RECORD ir; +static boolean orig_QuickEdit; /* Support for changing console font if existing glyph widths are too wide */ @@ -311,8 +312,14 @@ const char *s; end_screen(); if (s) raw_print(s); - restore_original_console_font(); + if (orig_QuickEdit) { + DWORD cmode; + + GetConsoleMode(console.hConIn, &cmode); + cmode |= (ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS); + SetConsoleMode(console.hConIn, cmode); + } } /* called by init_nhwindows() and resume_nhwindows() */ @@ -864,12 +871,30 @@ standoutend() void toggle_mouse_support() { + static int qeinit = 0; DWORD cmode; + GetConsoleMode(console.hConIn, &cmode); - if (iflags.wc_mouse_support) - cmode |= ENABLE_MOUSE_INPUT; - else - cmode &= ~ENABLE_MOUSE_INPUT; + if (!qeinit) { + qeinit = 1; + orig_QuickEdit = ((cmode & ENABLE_QUICK_EDIT_MODE) != 0); + } + switch(iflags.wc_mouse_support) { + case 2: + cmode |= ENABLE_MOUSE_INPUT; + break; + case 1: + cmode |= ENABLE_MOUSE_INPUT; + cmode &= ~ENABLE_QUICK_EDIT_MODE; + cmode |= ENABLE_EXTENDED_FLAGS; + break; + case 0: + /*FALLTHRU*/ + default: + cmode &= ~ENABLE_MOUSE_INPUT; + if (orig_QuickEdit) + cmode |= (ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS); + } SetConsoleMode(console.hConIn, cmode); } #endif diff --git a/util/lev_comp.l b/util/lev_comp.l index fcaaf34af..a27df296c 100644 --- a/util/lev_comp.l +++ b/util/lev_comp.l @@ -1,5 +1,5 @@ %{ -/* NetHack 3.6 lev_comp.l $NHDT-Date: 1455415007 2016/02/14 01:56:47 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.24 $ */ +/* NetHack 3.6 lev_comp.l $NHDT-Date: 1543371690 2018/11/28 02:21:30 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.25 $ */ /* Copyright (c) 1989 by Jean-Christophe Collet */ /* NetHack may be freely redistributed. See license for details. */ @@ -77,7 +77,7 @@ long FDECL(corefunc_str_check, (char *, long)); extern void VDECL(lc_error, (const char *, ...)); extern struct lc_vardefs *FDECL(vardef_defined,(struct lc_vardefs *,char *, int)); -extern struct lc_vardefs *variable_definitions; +extern struct lc_vardefs *vardefs; extern long FDECL(method_defined, (char *, long, long *)); @@ -385,7 +385,7 @@ handle_varstring_check() struct lc_vardefs *vd; yylval.map = dupstr(yytext); - if ((vd = vardef_defined(variable_definitions, yytext, 1)) != 0) { + if ((vd = vardef_defined(vardefs, yytext, 1)) != 0) { long l = vd->var_type; int a = ((l & SPOVAR_ARRAY) == SPOVAR_ARRAY); diff --git a/util/lev_comp.y b/util/lev_comp.y index 9122ca5d5..494f694d8 100644 --- a/util/lev_comp.y +++ b/util/lev_comp.y @@ -1,5 +1,5 @@ %{ -/* NetHack 3.6 lev_comp.y $NHDT-Date: 1455746893 2016/02/17 22:08:13 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.21 $ */ +/* NetHack 3.6 lev_comp.y $NHDT-Date: 1543371691 2018/11/28 02:21:31 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.22 $ */ /* Copyright (c) 1989 by Jean-Christophe Collet */ /* NetHack may be freely redistributed. See license for details. */ @@ -114,7 +114,8 @@ int obj_containment = 0; int in_container_obj = 0; -/* integer value is possibly an inconstant value (eg. dice notation or a variable) */ +/* integer value is possibly an inconstant value (eg. dice notation + or a variable) */ int is_inconstant_number = 0; int in_switch_statement = 0; @@ -127,7 +128,7 @@ int n_switch_case_list = 0; int allow_break_statements = 0; struct lc_breakdef *break_list = NULL; -extern struct lc_vardefs *variable_definitions; +extern struct lc_vardefs *vardefs; /* variable definitions */ struct lc_vardefs *function_tmp_var_defs = NULL; @@ -148,39 +149,39 @@ extern char curr_token[512]; %union { - long i; - char* map; - struct { - long room; - long wall; - long door; - } corpos; + long i; + char *map; struct { - long area; - long x1; - long y1; - long x2; - long y2; + long room; + long wall; + long door; + } corpos; + struct { + long area; + long x1; + long y1; + long x2; + long y2; } lregn; struct { - long x; - long y; + long x; + long y; } crd; struct { - long ter; - long lit; + long ter; + long lit; } terr; struct { - long height; - long width; + long height; + long width; } sze; struct { - long die; - long num; + long die; + long num; } dice; struct { - long cfunc; - char *varstr; + long cfunc; + char *varstr; } meth; } @@ -214,7 +215,8 @@ extern char curr_token[512]; %token MSG_OUTPUT_TYPE %token COMPARE_TYPE %token UNKNOWN_TYPE -%token rect_ID fillrect_ID line_ID randline_ID grow_ID selection_ID flood_ID +%token rect_ID fillrect_ID line_ID randline_ID grow_ID +%token selection_ID flood_ID %token rndcoord_ID circle_ID ellipse_ID filter_ID complement_ID %token gradient_ID GRADIENT_TYPE LIMITED HUMIDITY_TYPE %token ',' ':' '(' ')' '[' ']' '{' '}' @@ -247,12 +249,14 @@ extern char curr_token[512]; %type dir_list teleprt_detail %type object_infos object_info monster_infos monster_info %type levstatements stmt_block region_detail_end -%type engraving_type flag_list roomregionflag roomregionflags optroomregionflags +%type engraving_type flag_list roomregionflag roomregionflags +%type optroomregionflags %type humidity_flags %type comparestmt encodecoord encoderegion mapchar %type seen_trap_mask %type encodemonster encodeobj encodeobj_list -%type integer_list string_list encodecoord_list encoderegion_list mapchar_list encodemonster_list +%type integer_list string_list encodecoord_list encoderegion_list +%type mapchar_list encodemonster_list %type opt_percent opt_fillchar %type all_integers %type ter_selection ter_selection_x @@ -286,21 +290,22 @@ level : level_def flags levstatements { if (fatal_error > 0) { (void) fprintf(stderr, - "%s: %d errors detected for level \"%s\". No output created!\n", + "%s: %d errors detected for level \"%s\". No output created!\n", fname, fatal_error, $1); fatal_error = 0; got_errors++; } else if (!got_errors) { if (!write_level_file($1, splev)) { - lc_error("Can't write output file for '%s'!", $1); + lc_error("Can't write output file for '%s'!", + $1); exit(EXIT_FAILURE); } } Free($1); Free(splev); splev = NULL; - vardef_free_all(variable_definitions); - variable_definitions = NULL; + vardef_free_all(vardefs); + vardefs = NULL; } ; @@ -314,10 +319,11 @@ level_def : LEVEL_ID ':' STRING start_level_def(&splev, $3); if ($5 == -1) { add_opvars(splev, "iiiiiiiio", - VA_PASS9(LVLINIT_MAZEGRID,HWALL,0,0, + VA_PASS9(LVLINIT_MAZEGRID, HWALL, 0,0, 0,0,0,0, SPO_INITLEVEL)); } else { - long bg = what_map_char((char) $5); + int bg = (int) what_map_char((char) $5); + add_opvars(splev, "iiiiiiiio", VA_PASS9(LVLINIT_SOLIDFILL, bg, 0,0, 0,0,0,0, SPO_INITLEVEL)); @@ -342,21 +348,25 @@ mazefiller : RANDOM_TYPE lev_init : LEV_INIT_ID ':' SOLID_FILL_ID ',' terrain_type { - long filling = $5.ter; + int filling = (int) $5.ter; + if (filling == INVALID_TYPE || filling >= MAX_TYPE) lc_error("INIT_MAP: Invalid fill char type."); add_opvars(splev, "iiiiiiiio", - LVLINIT_SOLIDFILL,filling,0,(long)$5.lit, 0,0,0,0, SPO_INITLEVEL); + VA_PASS9(LVLINIT_SOLIDFILL, filling, + 0, (int) $5.lit, + 0,0,0,0, SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; } | LEV_INIT_ID ':' MAZE_GRID_ID ',' CHAR { - long filling = what_map_char((char) $5); + int filling = (int) what_map_char((char) $5); + if (filling == INVALID_TYPE || filling >= MAX_TYPE) lc_error("INIT_MAP: Invalid fill char type."); - add_opvars(splev, "iiiiiiiio", - VA_PASS9(LVLINIT_MAZEGRID,filling,0,0, + add_opvars(splev, "iiiiiiiio", + VA_PASS9(LVLINIT_MAZEGRID, filling, 0,0, 0,0,0,0, SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; @@ -369,13 +379,14 @@ lev_init : LEV_INIT_ID ':' SOLID_FILL_ID ',' terrain_type } | LEV_INIT_ID ':' MINES_ID ',' CHAR ',' CHAR ',' BOOLEAN ',' BOOLEAN ',' light_state ',' walled opt_fillchar { - long fg = what_map_char((char) $5); - long bg = what_map_char((char) $7); - long smoothed = $9; - long joined = $11; - long lit = $13; - long walled = $15; - long filling = $16; + int fg = (int) what_map_char((char) $5), + bg = (int) what_map_char((char) $7); + int smoothed = (int) $9, + joined = (int) $11, + lit = (int) $13, + walled = (int) $15, + filling = (int) $16; + if (fg == INVALID_TYPE || fg >= MAX_TYPE) lc_error("INIT_MAP: Invalid foreground type."); if (bg == INVALID_TYPE || bg >= MAX_TYPE) @@ -387,8 +398,8 @@ lev_init : LEV_INIT_ID ':' SOLID_FILL_ID ',' terrain_type lc_error("INIT_MAP: Invalid fill char type."); add_opvars(splev, "iiiiiiiio", - VA_PASS9(LVLINIT_MINES,filling,walled,lit, - joined,smoothed,bg,fg, + VA_PASS9(LVLINIT_MINES, filling, walled, lit, + joined, smoothed, bg, fg, SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; @@ -437,7 +448,8 @@ flags : /* nothing */ } | FLAGS_ID ':' flag_list { - add_opvars(splev, "io", VA_PASS2($3, SPO_LEVEL_FLAGS)); + add_opvars(splev, "io", + VA_PASS2((int) $3, SPO_LEVEL_FLAGS)); } ; @@ -547,10 +559,14 @@ any_var_or_unk : VARSTRING shuffle_detail : SHUFFLE_ID ':' any_var_array { struct lc_vardefs *vd; - if ((vd = vardef_defined(variable_definitions, $3, 1))) { + + if ((vd = vardef_defined(vardefs, $3, 1))) { if (!(vd->var_type & SPOVAR_ARRAY)) - lc_error("Trying to shuffle non-array variable '%s'", $3); - } else lc_error("Trying to shuffle undefined variable '%s'", $3); + lc_error("Trying to shuffle non-array variable '%s'", + $3); + } else + lc_error("Trying to shuffle undefined variable '%s'", + $3); add_opvars(splev, "so", VA_PASS2($3, SPO_SHUFFLE_ARRAY)); Free($3); } @@ -558,104 +574,118 @@ shuffle_detail : SHUFFLE_ID ':' any_var_array variable_define : any_var_or_arr '=' math_expr_var { - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_INT); + vardefs = add_vardef_type(vardefs, $1, SPOVAR_INT); add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' selection_ID ':' ter_selection { - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_SEL); + vardefs = add_vardef_type(vardefs, $1, SPOVAR_SEL); add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' string_expr { - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_STRING); + vardefs = add_vardef_type(vardefs, $1, SPOVAR_STRING); add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' terrainid ':' mapchar_or_var { - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_MAPCHAR); + vardefs = add_vardef_type(vardefs, $1, SPOVAR_MAPCHAR); add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' monsterid ':' monster_or_var { - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_MONST); + vardefs = add_vardef_type(vardefs, $1, SPOVAR_MONST); add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' objectid ':' object_or_var { - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_OBJ); + vardefs = add_vardef_type(vardefs, $1, SPOVAR_OBJ); add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' coord_or_var { - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_COORD); + vardefs = add_vardef_type(vardefs, $1, SPOVAR_COORD); add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' region_or_var { - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_REGION); + vardefs = add_vardef_type(vardefs, $1, SPOVAR_REGION); add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' '{' integer_list '}' { - long n_items = $4; - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_INT|SPOVAR_ARRAY); + int n_items = (int) $4; + + vardefs = add_vardef_type(vardefs, $1, + SPOVAR_INT | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' '{' encodecoord_list '}' { - long n_items = $4; - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_COORD|SPOVAR_ARRAY); + int n_items = (int) $4; + + vardefs = add_vardef_type(vardefs, $1, + SPOVAR_COORD | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' '{' encoderegion_list '}' { - long n_items = $4; - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_REGION|SPOVAR_ARRAY); + int n_items = (int) $4; + + vardefs = add_vardef_type(vardefs, $1, + SPOVAR_REGION | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' terrainid ':' '{' mapchar_list '}' { - long n_items = $6; - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_MAPCHAR|SPOVAR_ARRAY); + int n_items = (int) $6; + + vardefs = add_vardef_type(vardefs, $1, + SPOVAR_MAPCHAR | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' monsterid ':' '{' encodemonster_list '}' { - long n_items = $6; - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_MONST|SPOVAR_ARRAY); + int n_items = (int) $6; + + vardefs = add_vardef_type(vardefs, $1, + SPOVAR_MONST | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' objectid ':' '{' encodeobj_list '}' { - long n_items = $6; - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_OBJ|SPOVAR_ARRAY); + int n_items = (int) $6; + + vardefs = add_vardef_type(vardefs, $1, + SPOVAR_OBJ | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, $1, SPO_VAR_INIT)); Free($1); } | any_var_or_arr '=' '{' string_list '}' { - long n_items = $4; - variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_STRING|SPOVAR_ARRAY); + int n_items = (int) $4; + + vardefs = add_vardef_type(vardefs, $1, + SPOVAR_STRING | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, $1, SPO_VAR_INIT)); Free($1); @@ -759,8 +789,8 @@ function_define : FUNCTION_ID NQSTRING '(' splev = &(funcdef->code); Free($2); curr_function = funcdef; - function_tmp_var_defs = variable_definitions; - variable_definitions = NULL; + function_tmp_var_defs = vardefs; + vardefs = NULL; } func_params_list ')' { @@ -772,22 +802,26 @@ function_define : FUNCTION_ID NQSTRING '(' splev = function_splev_backup; in_function_definition--; curr_function = NULL; - vardef_free_all(variable_definitions); - variable_definitions = function_tmp_var_defs; + vardef_free_all(vardefs); + vardefs = function_tmp_var_defs; } ; function_call : NQSTRING '(' func_call_params_list ')' { struct lc_funcdefs *tmpfunc; + tmpfunc = funcdef_defined(function_definitions, $1, 1); if (tmpfunc) { - long l; - long nparams = strlen( $3 ); + int l; + int nparams = (int) strlen($3); char *fparamstr = funcdef_paramtypes(tmpfunc); + if (strcmp($3, fparamstr)) { char *tmps = strdup(decode_parm_str(fparamstr)); - lc_error("Function '%s' requires params '%s', got '%s' instead.", $1, tmps, decode_parm_str($3)); + + lc_error("Function '%s' requires params '%s', got '%s' instead.", + $1, tmps, decode_parm_str($3)); Free(tmps); } Free(fparamstr); @@ -795,9 +829,11 @@ function_call : NQSTRING '(' func_call_params_list ')' if (!(tmpfunc->n_called)) { /* we haven't called the function yet, so insert it in the code */ struct opvar *jmp = New(struct opvar); + set_opvar_int(jmp, splev->n_opcodes+1); add_opcode(splev, SPO_PUSH, jmp); - add_opcode(splev, SPO_JMP, NULL); /* we must jump past it first, then CALL it, due to RETURN. */ + /* we must jump past it first, then CALL it, due to RETURN. */ + add_opcode(splev, SPO_JMP, NULL); tmpfunc->addr = splev->n_opcodes; @@ -812,9 +848,10 @@ function_call : NQSTRING '(' func_call_params_list ')' } splev_add_from(splev, &(tmpfunc->code)); - set_opvar_int(jmp, splev->n_opcodes - jmp->vardata.l); + set_opvar_int(jmp, + splev->n_opcodes - jmp->vardata.l); } - l = tmpfunc->addr - splev->n_opcodes - 2; + l = (int) (tmpfunc->addr - splev->n_opcodes - 2); add_opvars(splev, "iio", VA_PASS3(nparams, l, SPO_CALL)); tmpfunc->n_called++; @@ -845,7 +882,7 @@ comparestmt : PERCENT { /* val > rn2(100) */ add_opvars(splev, "iio", - VA_PASS3((long)$1, 100, SPO_RN2)); + VA_PASS3((int) $1, 100, SPO_RN2)); $$ = SPO_JG; } | '[' math_expr_var COMPARE_TYPE math_expr_var ']' @@ -867,6 +904,7 @@ switchstatement : SWITCH_ID '[' integer_or_var ']' { struct opvar *chkjmp; + if (in_switch_statement > 0) lc_error("Cannot nest switch-statements."); @@ -935,6 +973,7 @@ switchcase : CASE_ID all_integers ':' { if (n_switch_case_list < MAX_SWITCH_CASES) { struct opvar *tmppush = New(struct opvar); + set_opvar_int(tmppush, splev->n_opcodes); switch_case_value[n_switch_case_list] = $2; switch_case_list[n_switch_case_list++] = tmppush; @@ -986,8 +1025,7 @@ forstmt_start : FOR_ID any_var_or_unk '=' math_expr_var for_to_span math_expr_va /* the value of which is already in stack (the 2nd math_expr) */ add_opvars(splev, "iso", VA_PASS3(0, buf, SPO_VAR_INIT)); - variable_definitions = add_vardef_type(variable_definitions, - $2, SPOVAR_INT); + vardefs = add_vardef_type(vardefs, $2, SPOVAR_INT); /* define the for-loop variable. value is in stack (1st math_expr) */ add_opvars(splev, "iso", VA_PASS3(0, $2, SPO_VAR_INIT)); @@ -1017,6 +1055,7 @@ forstatement : forstmt_start } stmt_block { + int l; char buf[256], buf2[256]; n_forloops--; @@ -1035,10 +1074,9 @@ forstatement : forstmt_start VA_PASS3(0, forloop_list[n_forloops].varname, SPO_VAR_INIT)); /* jump back if compared values were not equal */ - add_opvars(splev, "io", - VA_PASS2( - forloop_list[n_forloops].jmp_point - splev->n_opcodes - 1, - SPO_JNE)); + l = (int) (forloop_list[n_forloops].jmp_point + - splev->n_opcodes - 1); + add_opvars(splev, "io", VA_PASS2(l, SPO_JNE)); Free(forloop_list[n_forloops].varname); break_stmt_end(splev); } @@ -1065,10 +1103,11 @@ loopstatement : LOOP_ID '[' integer_or_var ']' add_opvars(splev, "oio", VA_PASS3(SPO_COPY, 0, SPO_CMP)); tmppush = (struct opvar *) if_list[--n_if_list]; - set_opvar_int(tmppush, tmppush->vardata.l - splev->n_opcodes-1); + set_opvar_int(tmppush, + tmppush->vardata.l - splev->n_opcodes-1); add_opcode(splev, SPO_PUSH, tmppush); add_opcode(splev, SPO_JG, NULL); - add_opcode(splev, SPO_POP, NULL); /* get rid of the count value in stack */ + add_opcode(splev, SPO_POP, NULL); /* discard count */ break_stmt_end(splev); } ; @@ -1097,8 +1136,10 @@ chancestatement : comparestmt ':' { if (n_if_list > 0) { struct opvar *tmppush; + tmppush = (struct opvar *) if_list[--n_if_list]; - set_opvar_int(tmppush, splev->n_opcodes - tmppush->vardata.l); + set_opvar_int(tmppush, + splev->n_opcodes - tmppush->vardata.l); } else lc_error("IF: Huh?! No start address?"); } ; @@ -1133,8 +1174,10 @@ if_ending : stmt_block { if (n_if_list > 0) { struct opvar *tmppush; + tmppush = (struct opvar *) if_list[--n_if_list]; - set_opvar_int(tmppush, splev->n_opcodes - tmppush->vardata.l); + set_opvar_int(tmppush, + splev->n_opcodes - tmppush->vardata.l); } else lc_error("IF: Huh?! No start address?"); } | stmt_block @@ -1150,7 +1193,8 @@ if_ending : stmt_block tmppush2 = (struct opvar *) if_list[--n_if_list]; - set_opvar_int(tmppush2, splev->n_opcodes - tmppush2->vardata.l); + set_opvar_int(tmppush2, + splev->n_opcodes - tmppush2->vardata.l); if_list[n_if_list++] = tmppush; } else lc_error("IF: Huh?! No else-part address?"); } @@ -1363,21 +1407,21 @@ door_pos : INTEGER map_definition : NOMAP_ID { add_opvars(splev, "ciisiio", - VA_PASS7(0, 0, 1, (char *)0, 0, 0, SPO_MAP)); + VA_PASS7(0, 0, 1, (char *) 0, 0, 0, SPO_MAP)); max_x_map = COLNO-1; max_y_map = ROWNO; } | GEOMETRY_ID ':' h_justif ',' v_justif roomfill MAP_ID { add_opvars(splev, "cii", - VA_PASS3(SP_COORD_PACK(($3),($5)), - 1, (long)$6)); + VA_PASS3(SP_COORD_PACK(($3), ($5)), + 1, (int) $6)); scan_map($7, splev); Free($7); } | GEOMETRY_ID ':' coord_or_var roomfill MAP_ID { - add_opvars(splev, "ii", VA_PASS2(2, (long)$4)); + add_opvars(splev, "ii", VA_PASS2(2, (int) $4)); scan_map($5, splev); Free($5); } @@ -1418,6 +1462,7 @@ monster_desc : monster_or_var ',' coord_or_var monster_infos monster_infos : /* nothing */ { struct opvar *stopit = New(struct opvar); + set_opvar_int(stopit, SP_M_V_END); add_opcode(splev, SPO_PUSH, stopit); $$ = 0x0000; @@ -1438,25 +1483,25 @@ monster_info : string_expr | MON_ATTITUDE { add_opvars(splev, "ii", - VA_PASS2((long)$1, SP_M_V_PEACEFUL)); + VA_PASS2((int) $1, SP_M_V_PEACEFUL)); $$ = 0x0002; } | MON_ALERTNESS { add_opvars(splev, "ii", - VA_PASS2((long)$1, SP_M_V_ASLEEP)); + VA_PASS2((int) $1, SP_M_V_ASLEEP)); $$ = 0x0004; } | alignment_prfx { add_opvars(splev, "ii", - VA_PASS2((long)$1, SP_M_V_ALIGN)); + VA_PASS2((int) $1, SP_M_V_ALIGN)); $$ = 0x0008; } | MON_APPEARANCE string_expr { add_opvars(splev, "ii", - VA_PASS2((long)$1, SP_M_V_APPEAR)); + VA_PASS2((int) $1, SP_M_V_APPEAR)); $$ = 0x0010; } | FEMALE_ID @@ -1512,7 +1557,7 @@ monster_info : string_expr | SEENTRAPS_ID ':' seen_trap_mask { add_opvars(splev, "ii", - VA_PASS2((long)$3, SP_M_V_SEENTRAPS)); + VA_PASS2((int) $3, SP_M_V_SEENTRAPS)); $$ = 0x8000; } ; @@ -1520,6 +1565,7 @@ monster_info : string_expr seen_trap_mask : STRING { int token = get_trap_type($1); + if (token == ERR || token == 0) lc_error("Unknown trap type '%s'!", $1); Free($1); @@ -1544,14 +1590,18 @@ seen_trap_mask : STRING object_detail : OBJECT_ID ':' object_desc { - long cnt = 0; - if (in_container_obj) cnt |= SP_OBJ_CONTENT; + int cnt = 0; + + if (in_container_obj) + cnt |= SP_OBJ_CONTENT; add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT)); } | COBJECT_ID ':' object_desc { - long cnt = SP_OBJ_CONTAINER; - if (in_container_obj) cnt |= SP_OBJ_CONTENT; + int cnt = SP_OBJ_CONTAINER; + + if (in_container_obj) + cnt |= SP_OBJ_CONTENT; add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT)); in_container_obj++; break_stmt_start(); @@ -1591,7 +1641,7 @@ object_infos : /* nothing */ object_info : CURSE_TYPE { add_opvars(splev, "ii", - VA_PASS2((long)$1, SP_O_V_CURSE)); + VA_PASS2((int) $1, SP_O_V_CURSE)); $$ = 0x0001; } | MONTYPE_ID ':' monster_or_var @@ -1621,7 +1671,7 @@ object_info : CURSE_TYPE } | LIGHT_STATE { - add_opvars(splev, "ii", VA_PASS2((long)$1, SP_O_V_LIT)); + add_opvars(splev, "ii", VA_PASS2((int) $1, SP_O_V_LIT)); $$ = 0x0040; } | ERODED_ID ':' integer_or_var @@ -1647,7 +1697,8 @@ object_info : CURSE_TYPE } | TRAPPED_STATE { - add_opvars(splev, "ii", VA_PASS2($1, SP_O_V_TRAPPED)); + add_opvars(splev, "ii", + VA_PASS2((int) 1, SP_O_V_TRAPPED)); $$ = 0x0400; } | RECHARGED_ID ':' integer_or_var @@ -1674,7 +1725,7 @@ object_info : CURSE_TYPE trap_detail : TRAP_ID ':' trap_name ',' coord_or_var { - add_opvars(splev, "io", VA_PASS2((long)$3, SPO_TRAP)); + add_opvars(splev, "io", VA_PASS2((int) $3, SPO_TRAP)); } ; @@ -1710,13 +1761,13 @@ drawbridge_detail: DRAWBRIDGE_ID ':' coord_or_var ',' DIRECTION ',' door_state mazewalk_detail : MAZEWALK_ID ':' coord_or_var ',' DIRECTION { add_opvars(splev, "iiio", - VA_PASS4((long)$5, 1, 0, SPO_MAZEWALK)); + VA_PASS4((int) $5, 1, 0, SPO_MAZEWALK)); } | MAZEWALK_ID ':' coord_or_var ',' DIRECTION ',' BOOLEAN opt_fillchar { add_opvars(splev, "iiio", - VA_PASS4((long)$5, (long)$7, - (long)$8, SPO_MAZEWALK)); + VA_PASS4((int) $5, (int) $7, + (int) $8, SPO_MAZEWALK)); } ; @@ -1735,14 +1786,14 @@ wallify_detail : WALLIFY_ID ladder_detail : LADDER_ID ':' coord_or_var ',' UP_OR_DOWN { add_opvars(splev, "io", - VA_PASS2((long)$5, SPO_LADDER)); + VA_PASS2((int) $5, SPO_LADDER)); } ; stair_detail : STAIR_ID ':' coord_or_var ',' UP_OR_DOWN { add_opvars(splev, "io", - VA_PASS2((long)$5, SPO_STAIR)); + VA_PASS2((int) $5, SPO_STAIR)); } ; @@ -2040,15 +2091,16 @@ string_or_var : STRING } | VARSTRING_STRING { - check_vardef_type(variable_definitions, $1, SPOVAR_STRING); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, SPOVAR_STRING); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); } | VARSTRING_STRING_ARRAY '[' math_expr_var ']' { - check_vardef_type(variable_definitions, $1, SPOVAR_STRING|SPOVAR_ARRAY); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, + SPOVAR_STRING | SPOVAR_ARRAY); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); } @@ -2071,15 +2123,16 @@ coord_or_var : encodecoord } | VARSTRING_COORD { - check_vardef_type(variable_definitions, $1, SPOVAR_COORD); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, SPOVAR_COORD); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); } | VARSTRING_COORD_ARRAY '[' math_expr_var ']' { - check_vardef_type(variable_definitions, $1, SPOVAR_COORD|SPOVAR_ARRAY); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, + SPOVAR_COORD | SPOVAR_ARRAY); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); } @@ -2088,7 +2141,8 @@ coord_or_var : encodecoord encodecoord : '(' INTEGER ',' INTEGER ')' { if ($2 < 0 || $4 < 0 || $2 >= COLNO || $4 >= ROWNO) - lc_error("Coordinates (%li,%li) out of map range!", $2, $4); + lc_error("Coordinates (%li,%li) out of map range!", + $2, $4); $$ = SP_COORD_PACK($2, $4); } | RANDOM_TYPE @@ -2097,7 +2151,7 @@ encodecoord : '(' INTEGER ',' INTEGER ')' } | RANDOM_TYPE_BRACKET humidity_flags ']' { - $$ = SP_COORD_PACK_RANDOM( $2 ); + $$ = SP_COORD_PACK_RANDOM($2); } ; @@ -2119,15 +2173,16 @@ region_or_var : encoderegion } | VARSTRING_REGION { - check_vardef_type(variable_definitions, $1, SPOVAR_REGION); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, SPOVAR_REGION); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); } | VARSTRING_REGION_ARRAY '[' math_expr_var ']' { - check_vardef_type(variable_definitions, $1, SPOVAR_REGION|SPOVAR_ARRAY); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, + SPOVAR_REGION | SPOVAR_ARRAY); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); } @@ -2136,8 +2191,10 @@ region_or_var : encoderegion encoderegion : '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')' { long r = SP_REGION_PACK($2, $4, $6, $8); - if ( $2 > $6 || $4 > $8 ) - lc_error("Region start > end: (%li,%li,%li,%li)!", $2, $4, $6, $8); + + if ($2 > $6 || $4 > $8) + lc_error("Region start > end: (%ld,%ld,%ld,%ld)!", + $2, $4, $6, $8); add_opvars(splev, "r", VA_PASS1(r)); $$ = r; @@ -2150,15 +2207,16 @@ mapchar_or_var : mapchar } | VARSTRING_MAPCHAR { - check_vardef_type(variable_definitions, $1, SPOVAR_MAPCHAR); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, SPOVAR_MAPCHAR); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); } | VARSTRING_MAPCHAR_ARRAY '[' math_expr_var ']' { - check_vardef_type(variable_definitions, $1, SPOVAR_MAPCHAR|SPOVAR_ARRAY); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, + SPOVAR_MAPCHAR | SPOVAR_ARRAY); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); } @@ -2190,15 +2248,16 @@ monster_or_var : encodemonster } | VARSTRING_MONST { - check_vardef_type(variable_definitions, $1, SPOVAR_MONST); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, SPOVAR_MONST); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); } | VARSTRING_MONST_ARRAY '[' math_expr_var ']' { - check_vardef_type(variable_definitions, $1, SPOVAR_MONST|SPOVAR_ARRAY); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, + SPOVAR_MONST | SPOVAR_ARRAY); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); } @@ -2246,15 +2305,16 @@ object_or_var : encodeobj } | VARSTRING_OBJ { - check_vardef_type(variable_definitions, $1, SPOVAR_OBJ); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, SPOVAR_OBJ); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); } | VARSTRING_OBJ_ARRAY '[' math_expr_var ']' { - check_vardef_type(variable_definitions, $1, SPOVAR_OBJ|SPOVAR_ARRAY); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, + SPOVAR_OBJ | SPOVAR_ARRAY); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); } @@ -2267,7 +2327,8 @@ encodeobj : STRING lc_error("Unknown object \"%s\"!", $1); $$ = -1; } else - $$ = SP_OBJ_PACK(m, 1); /* obj class != 0 to force generation of a specific item */ + /* obj class != 0 to force generation of a specific item */ + $$ = SP_OBJ_PACK(m, 1); Free($1); } | CHAR @@ -2317,17 +2378,17 @@ math_expr_var : INTEGER } | VARSTRING_INT { - check_vardef_type(variable_definitions, $1, SPOVAR_INT); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, SPOVAR_INT); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); is_inconstant_number = 1; } | VARSTRING_INT_ARRAY '[' math_expr_var ']' { - check_vardef_type(variable_definitions, - $1, SPOVAR_INT|SPOVAR_ARRAY); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, + SPOVAR_INT | SPOVAR_ARRAY); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); is_inconstant_number = 1; @@ -2398,9 +2459,7 @@ func_param_part : any_var_or_arr ':' func_param_type lc_error("Unknown func param conversion."); break; } - variable_definitions = add_vardef_type( - variable_definitions, - $1, vt); + vardefs = add_vardef_type( vardefs, $1, vt); } Free($1); } @@ -2531,8 +2590,8 @@ ter_selection_x : coord_or_var } | VARSTRING_SEL { - check_vardef_type(variable_definitions, $1, SPOVAR_SEL); - vardef_used(variable_definitions, $1); + check_vardef_type(vardefs, $1, SPOVAR_SEL); + vardef_used(vardefs, $1); add_opvars(splev, "v", VA_PASS1($1)); Free($1); } diff --git a/util/lev_main.c b/util/lev_main.c index ecf7a444c..8bcfc8365 100644 --- a/util/lev_main.c +++ b/util/lev_main.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 lev_main.c $NHDT-Date: 1501723418 2017/08/03 01:23:38 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.47 $ */ +/* NetHack 3.6 lev_main.c $NHDT-Date: 1543371692 2018/11/28 02:21:32 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.56 $ */ /* Copyright (c) 1989 by Jean-Christophe Collet */ /* NetHack may be freely redistributed. See license for details. */ @@ -226,7 +226,7 @@ extern int nh_line_number; extern int token_start_pos; extern char curr_token[512]; -struct lc_vardefs *variable_definitions = NULL; +struct lc_vardefs *vardefs = NULL; struct lc_funcdefs *function_definitions = NULL; extern int allow_break_statements; @@ -641,9 +641,18 @@ VA_DECL2(sp_lev *, sp, const char *, fmt) switch (*p) { case ' ': break; - case 'i': /* integer */ + case 'i': /* integer (via plain 'int') */ { struct opvar *ov = New(struct opvar); + + set_opvar_int(ov, (long) VA_NEXT(la, int)); + add_opcode(sp, SPO_PUSH, ov); + break; + } + case 'l': /* integer (via 'long int') */ + { + struct opvar *ov = New(struct opvar); + set_opvar_int(ov, VA_NEXT(la, long)); add_opcode(sp, SPO_PUSH, ov); break; @@ -1105,8 +1114,8 @@ char *ldfname; (*splev)->n_opcodes = 0; (*splev)->opcodes = NULL; - vardef_free_all(variable_definitions); - variable_definitions = NULL; + vardef_free_all(vardefs); + vardefs = NULL; } /* @@ -1436,7 +1445,7 @@ sp_lev *sp; mbuf[((max_hig - 1) * max_len) + (max_len - 1) + 1] = '\0'; - add_opvars(sp, "siio", VA_PASS4(mbuf, (long) max_hig, (long) max_len, + add_opvars(sp, "sllo", VA_PASS4(mbuf, (long) max_hig, (long) max_len, SPO_MAP)); for (dy = 0; dy < max_hig; dy++) diff --git a/win/X11/winstat.c b/win/X11/winstat.c index 18a40901b..0aecdf1b6 100644 --- a/win/X11/winstat.c +++ b/win/X11/winstat.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 winstat.c $NHDT-Date: 1540247293 2018/10/22 22:28:13 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.18 $ */ +/* NetHack 3.6 winstat.c $NHDT-Date: 1543447325 2018/11/28 23:22:05 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.20 $ */ /* Copyright (c) Dean Luick, 1992 */ /* NetHack may be freely redistributed. See license for details. */ @@ -33,10 +33,9 @@ #undef PRESERVE_NO_SYSV #endif -#include "xwindow.h" - #include "hack.h" #include "winX.h" +#include "xwindow.h" /* * Fancy status form entry storage indices. diff --git a/win/curses/cursdial.c b/win/curses/cursdial.c index 48ac91535..7393610bd 100644 --- a/win/curses/cursdial.c +++ b/win/curses/cursdial.c @@ -1,3 +1,6 @@ +/* NetHack 3.6 cursdial.c */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #include "curses.h" diff --git a/win/curses/cursdial.h b/win/curses/cursdial.h index bf3f68d9e..dea396178 100644 --- a/win/curses/cursdial.h +++ b/win/curses/cursdial.h @@ -1,3 +1,6 @@ +/* NetHack 3.6 cursdial.h */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #ifndef CURSDIAL_H diff --git a/win/curses/cursinit.c b/win/curses/cursinit.c index 5f7e07681..f787bf1a0 100644 --- a/win/curses/cursinit.c +++ b/win/curses/cursinit.c @@ -1,3 +1,6 @@ +/* NetHack 3.6 cursinit.c */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #include "curses.h" diff --git a/win/curses/cursinit.h b/win/curses/cursinit.h index c7f390047..ef4e232fb 100644 --- a/win/curses/cursinit.h +++ b/win/curses/cursinit.h @@ -1,3 +1,6 @@ +/* NetHack 3.6 cursinit.h */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #ifndef CURSINIT_H diff --git a/win/curses/cursinvt.c b/win/curses/cursinvt.c index c9441b7bc..aa9970caf 100644 --- a/win/curses/cursinvt.c +++ b/win/curses/cursinvt.c @@ -1,3 +1,6 @@ +/* NetHack 3.6 cursinvt.c */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #include "curses.h" diff --git a/win/curses/cursinvt.h b/win/curses/cursinvt.h index 99c90d277..9d9d65cb2 100644 --- a/win/curses/cursinvt.h +++ b/win/curses/cursinvt.h @@ -1,3 +1,6 @@ +/* NetHack 3.6 cursinvt.h */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #ifndef CURSINVT_H diff --git a/win/curses/cursmain.c b/win/curses/cursmain.c index a7addedea..8e20a31f8 100644 --- a/win/curses/cursmain.c +++ b/win/curses/cursmain.c @@ -1,3 +1,6 @@ +/* NetHack 3.6 cursmain.c */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #include "curses.h" diff --git a/win/curses/cursmesg.c b/win/curses/cursmesg.c index 43597f911..69215871a 100644 --- a/win/curses/cursmesg.c +++ b/win/curses/cursmesg.c @@ -1,3 +1,6 @@ +/* NetHack 3.6 cursmesg.c */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #include "curses.h" diff --git a/win/curses/cursmesg.h b/win/curses/cursmesg.h index 54af5f9b3..588bf883b 100644 --- a/win/curses/cursmesg.h +++ b/win/curses/cursmesg.h @@ -1,3 +1,6 @@ +/* NetHack 3.6 cursmesg.h */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #ifndef CURSMESG_H diff --git a/win/curses/cursmisc.c b/win/curses/cursmisc.c index 40ce0c2e9..00e055c10 100644 --- a/win/curses/cursmisc.c +++ b/win/curses/cursmisc.c @@ -1,3 +1,6 @@ +/* NetHack 3.6 cursmisc.c */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #include "curses.h" diff --git a/win/curses/cursmisc.h b/win/curses/cursmisc.h index 50821c81a..4d0f78003 100644 --- a/win/curses/cursmisc.h +++ b/win/curses/cursmisc.h @@ -1,3 +1,6 @@ +/* NetHack 3.6 cursmisc.h */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #ifndef CURSMISC_H diff --git a/win/curses/cursstat.c b/win/curses/cursstat.c index 2f95e5660..b2e45f28b 100644 --- a/win/curses/cursstat.c +++ b/win/curses/cursstat.c @@ -1,3 +1,6 @@ +/* NetHack 3.6 cursstat.c */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #include /* toupper() */ diff --git a/win/curses/cursstat.h b/win/curses/cursstat.h index 7773d422b..8b8120545 100644 --- a/win/curses/cursstat.h +++ b/win/curses/cursstat.h @@ -1,3 +1,6 @@ +/* NetHack 3.6 cursstat.c */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #ifndef CURSSTAT_H diff --git a/win/curses/curswins.c b/win/curses/curswins.c index 012821280..4eaafa207 100644 --- a/win/curses/curswins.c +++ b/win/curses/curswins.c @@ -1,3 +1,6 @@ +/* NetHack 3.6 curswins.c */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #include "curses.h" diff --git a/win/curses/curswins.h b/win/curses/curswins.h index ce1935e07..8a5c00fd6 100644 --- a/win/curses/curswins.h +++ b/win/curses/curswins.h @@ -1,3 +1,6 @@ +/* NetHack 3.6 curswins.h */ +/* Copyright (c) Karl Garrison, 2010. */ +/* NetHack may be freely redistributed. See license for details. */ /* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/ #ifndef CURSWIN_H