summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authoryuki-san2015-06-11 16:57:20 +0900
committeryuki-san2015-06-11 16:57:20 +0900
commitfd395fd295bd26b04dc5324585b6acd11c84e6c7 (patch)
treede787f34ccbb96644c30701d320412763d9f4703
downloadaur-fd395fd295bd26b04dc5324585b6acd11c84e6c7.tar.gz
Initial commit for AUR4
-rw-r--r--.SRCINFO26
-rw-r--r--.gitignore5
-rw-r--r--PKGBUILD92
-rw-r--r--jnethack-3.4.3-0.11-mc.diff655
-rw-r--r--jnethack.install12
5 files changed, 790 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..e8e6af9c0dda
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,26 @@
+pkgbase = jnethack
+ pkgdesc = Japanized Nethack, A single player dungeon exploration game
+ pkgver = 3.4.3_0.11
+ pkgrel = 5
+ url = http://jnethack.sourceforge.jp/
+ install = jnethack.install
+ arch = i686
+ arch = x86_64
+ license = custom
+ makedepends = bzip2
+ depends = ncurses
+ depends = gzip
+ options = !makeflags
+ source = http://downloads.sourceforge.net/nethack/nethack-343-src.tgz
+ source = jnethack-3.4.3-0.11.diff.gz::http://sourceforge.jp/frs/redir.php?f=%2Fjnethack%2F58545%2Fjnethack-3.4.3-0.11.diff.gz
+ source = http://jnethack.sourceforge.jp/patch/utf8-ibm.patch
+ source = http://www.phys98.homeip.net/~ide/src/jnethack-3.4.3-0.10-yahpmon.patch.bz2
+ source = jnethack-3.4.3-0.11-mc.diff
+ md5sums = 21479c95990eefe7650df582426457f9
+ md5sums = 2d7ddbc4772a1fcff9a607abff851a75
+ md5sums = 33904a278b8c36cb5f17cf7a4db21a97
+ md5sums = 2d3b58e7b71ef44589d7887434bde3f8
+ md5sums = b3b4de971fe61738f7de69802174d876
+
+pkgname = jnethack
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000000..635c88f5f1a1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+nethack-*-src.tgz
+*.patch*
+*.diff*
+jnethack-*.tar.[gx]z
+!jnethack-3.4.3-0.11-mc.diff
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..d6b56dc1ae77
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,92 @@
+# Maintainer: yuki-san <yuki.from.akita _at_ gmail.com>
+#
+# nethack Maintainer : schuay <jakob.gruber _at_ gmail.com>
+# nethack Contributor : kevin <kevin _at_ archlinux.org>
+# nethack Contributor : Christian Schmidt <mucknert _at_ gmx.net>
+# nethack Contributor : Markus Meissner <markus _at_ meissna.de>
+# nethack Contributor : Nick Erdmann <erdmann _at_ date.upb.de>
+
+pkgname=jnethack
+pkgver=3.4.3_0.11
+_nethackver=${pkgver/_*/}
+pkgrel=5
+pkgdesc='Japanized Nethack, A single player dungeon exploration game'
+arch=('i686' 'x86_64')
+url="http://jnethack.sourceforge.jp/"
+license=('custom')
+depends=('ncurses' 'gzip')
+makedepends=('bzip2')
+install=jnethack.install
+options=(!makeflags)
+source=("http://downloads.sourceforge.net/${pkgname#j}/${pkgname#j}-${_nethackver//./}-src.tgz"
+ ${pkgname}-${pkgver//_/-}.diff.gz::"http://sourceforge.jp/frs/redir.php?f=%2Fjnethack%2F58545%2F${pkgname}-${pkgver//_/-}.diff.gz"
+ "http://jnethack.sourceforge.jp/patch/utf8-ibm.patch"
+ http://www.phys98.homeip.net/~ide/src/jnethack-3.4.3-0.10-yahpmon.patch.bz2
+ jnethack-3.4.3-0.11-mc.diff)
+md5sums=('21479c95990eefe7650df582426457f9'
+ '2d7ddbc4772a1fcff9a607abff851a75'
+ '33904a278b8c36cb5f17cf7a4db21a97'
+ '2d3b58e7b71ef44589d7887434bde3f8'
+ 'b3b4de971fe61738f7de69802174d876')
+
+prepare() {
+ cd "$srcdir/${pkgname#j}-${_nethackver}"
+ zcat "$srcdir"/${pkgname}-${pkgver//_/-}.diff.gz | patch -p1
+ patch -p1 < "$srcdir/utf8-ibm.patch"
+ bzcat "$srcdir/jnethack-3.4.3-0.10-yahpmon.patch.bz2" | patch -p1
+ patch -p1 < "$srcdir/jnethack-3.4.3-0.11-mc.diff"
+}
+
+build(){
+ cd "$srcdir/${pkgname#j}-${_nethackver}"
+ sh sys/unix/setup.sh
+
+ sed -e '/define HACKDIR/ s|/usr/games/lib/nethackdir|/var/games/nethack/|' \
+ -e "/^#define COMPRESS\s/ s|/usr/bin/compress|$(which gzip)|" \
+ -e '/^#define COMPRESS_EXTENSION/ s|".Z"|".gz"|' \
+ -e 's|^/\* \(#define DLB\) \*/|\1|' -i include/config.h
+
+ sed -e 's|^/\* \(#define SYSV\) \*/|\1|' \
+ -e 's|^/\* \(#define LINUX\) \*/|\1|' \
+ -e 's|^/\* \(#define TERMINFO\) \*/|\1|' \
+ -e 's|^/\* \(#define TIMED_DELAY\) \*/|\1|' -i include/unixconf.h
+
+ sed -e 's|^# \(WINTTYLIB = -lncurses\)|\1|' \
+ -e 's|^WINTTYLIB = -ltermlib|#&|' \
+ -e 's|^\(CFLAGS =\).*$|\1 -O2 -fomit-frame-pointer -I../include|' -i src/Makefile
+
+ sed -e 's|^\(CFLAGS =\).*$|\1 -O2 -fomit-frame-pointer -I../include|' -i util/Makefile
+ # we are setting up for setgid games, so modify all necessary permissions
+ # to allow full access for groups
+
+ sed -e '/^GAMEDIR\s*=/ s|/games/.*$|/var/games/$(GAME)|' \
+ -e '/^GAMEUID\s*=/ s|games|root|' \
+ -e '/^GAMEGRP\s*=/ s|bin|games|' \
+ -e '/^GAMEPERM\s*=/ s|04755|02755|' \
+ -e '/^FILEPERM\s*=/ s|0644|0664|' \
+ -e '/^DIRPERM\s*=/ s|0755|0775|' \
+ -e '/^SHELLDIR\s*=/ s|/games|/usr/bin|' -i Makefile
+
+ sed -e "/^MANDIR\s*=/s|/usr/local/man/man6|$pkgdir/usr/share/man/man6|" -i doc/Makefile
+
+ make
+}
+
+package() {
+ cd "$srcdir/${pkgname#j}-${_nethackver}"
+
+ install -dm755 $pkgdir/usr/share/{man/man6,doc/$pkgname}
+ install -dm775 $pkgdir/var/games/
+ make PREFIX=$pkgdir install manpages
+ sed -e "s|HACKDIR=$pkgdir/|HACKDIR=/|" \
+ -e 's|HACK=$HACKDIR|HACK=/usr/lib/jnethack|' \
+ -i $pkgdir/usr/bin/jnethack
+
+ install -dm755 $pkgdir/usr/lib/$pkgname
+ mv $pkgdir/var/games/jnethack/{jnethack,recover} $pkgdir/usr/lib/$pkgname/
+
+ install -Dm644 doc/Guidebook.txt $pkgdir/usr/share/doc/$pkgname/
+ install -Dm644 doc/jGuidebook.txt $pkgdir/usr/share/doc/$pkgname/
+
+ install -Dm644 dat/license $pkgdir/usr/share/licenses/$pkgname/LICENSE
+}
diff --git a/jnethack-3.4.3-0.11-mc.diff b/jnethack-3.4.3-0.11-mc.diff
new file mode 100644
index 000000000000..e483e7e8e7fe
--- /dev/null
+++ b/jnethack-3.4.3-0.11-mc.diff
@@ -0,0 +1,655 @@
+diff -aurN nethack-3.4.3/README.menucolor nethack-3.4.3-mc/README.menucolor
+--- nethack-3.4.3/README.menucolor 1970-01-01 09:00:00.000000000 +0900
++++ nethack-3.4.3-mc/README.menucolor 2015-04-13 01:16:39.795934851 +0900
+@@ -0,0 +1,106 @@
++
++ This is version 1.5 of the menucolors patch.
++
++ This patch allows the user to define in what color menus are shown.
++ For example, putting
++
++ OPTIONS=menucolors
++ MENUCOLOR=" blessed "=green
++ MENUCOLOR=" holy "=green
++ MENUCOLOR=" cursed "=red
++ MENUCOLOR=" unholy "=red
++ MENUCOLOR=" cursed .* (being worn)"=orange&underline
++
++ in the configuration file makes all known blessed items
++ show up in green, all cursed items show up in red and
++ all cursed worn items show up in orange and underlined
++ when viewing inventory.
++
++ If you have regex.h but it is not GNU (e.g. DJGPP, *BSD), uncomment
++ #define MENU_COLOR_REGEX_POSIX in include/config.h
++
++ If you do not have regex.h, comment
++ #define MENU_COLOR_REGEX out from include/config.h
++ and replace the MENUCOLOR lines in your config file with these:
++
++ MENUCOLOR="* blessed *"=green
++ MENUCOLOR="* holy *"=green
++ MENUCOLOR="* cursed *"=red
++ MENUCOLOR="* unholy *"=red
++ MENUCOLOR="* cursed * (being worn)"=orange&underline
++
++
++ Colors: black, red, green, brown, blue, magenta, cyan, gray, orange,
++ lightgreen, yellow, lightblue, lightmagenta, lightcyan, white.
++ Attributes: none, bold, dim, underline, blink, inverse.
++
++ Note that the terminal is free to interpret the attributes however
++ it wants.
++
++
++ TODO/BUGS:
++
++ o Only works with TTY and Windows GUI.
++ o You can't use '=' or '&' in the match-string.
++ o Maybe add color-field to tty_menu_item in include/wintty.h
++ (so there's no need to find the color for the line again)
++ o Guidebook is not up to date
++ o Better place to put the functions, colornames[] and attrnames[]?
++ o Some menus do not need coloring; maybe add new parameter
++ to process_menu_window()?
++
++
++ FIXES:
++
++ v1.5:
++ o Partial support for Windows GUI windowport; supports colors,
++ but not attributes.
++
++ v1.4:
++ o Option to use standard instead of GNU regex functions.
++
++ v1.3:
++ o Updated to use 3.4.3 codebase.
++ o Added a text to #version to show menucolors is compiled in.
++
++ v1.2:
++ o Updated to use 3.4.2 codebase.
++
++ v1.1:
++ o Updated to use 3.4.1 codebase.
++ o replaced USE_REGEX_MATCH with MENU_COLOR_REGEX
++
++ v1.04:
++ o Oops! 1.03 worked only on *nixes... (GNU regex.h)
++ o Compile-time option USE_REGEX_MATCH: if it's defined, use regex,
++ otherwise use globbing. ('?' and '*' wildcards)
++
++ v1.03:
++
++ o Now using Nethack 3.4.0 codebase
++ o Compile-time option MENU_COLOR
++ o Strings match using regular expressions instead of globbing
++ o You can use attribute with color (attr must come after '&')
++ o Use ``MENUCOLOR="foo"=color'' instead of ``OPTIONS=menucolor=...''
++ (Both work, but OPTIONS complains if you define menucolor
++ more than once)
++
++ v1.02:
++
++ o Should now work with OS/2, thanks to Jukka Lahtinen
++ o Strings match now using simple globbing. ('?' and '*' wildcards)
++
++ v1.01:
++
++ o Moved 'menucolors' boolean option, so now the options-menu
++ is in alphabetical order.
++ o Fixed 'menucolor' description in dat/opthelp.
++ o menu_colorings is now initialized to null in src/decl.c.
++
++ v1.0:
++
++ o Initial release
++
++--
++ Pasi Kallinen
++ paxed@alt.org
+diff -aurN nethack-3.4.3/include/color.h nethack-3.4.3-mc/include/color.h
+--- nethack-3.4.3/include/color.h 2003-12-08 08:39:13.000000000 +0900
++++ nethack-3.4.3-mc/include/color.h 2015-04-13 01:16:39.795934851 +0900
+@@ -5,6 +5,12 @@
+ #ifndef COLOR_H
+ #define COLOR_H
+
++#ifdef MENU_COLOR
++# ifdef MENU_COLOR_REGEX
++# include <regex.h>
++# endif
++#endif
++
+ /*
+ * The color scheme used is tailored for an IBM PC. It consists of the
+ * standard 8 colors, folowed by their bright counterparts. There are
+@@ -49,4 +55,20 @@
+ #define DRAGON_SILVER CLR_BRIGHT_CYAN
+ #define HI_ZAP CLR_BRIGHT_BLUE
+
++#ifdef MENU_COLOR
++struct menucoloring {
++# ifdef MENU_COLOR_REGEX
++# ifdef MENU_COLOR_REGEX_POSIX
++ regex_t match;
++# else
++ struct re_pattern_buffer match;
++# endif
++# else
++ char *match;
++# endif
++ int color, attr;
++ struct menucoloring *next;
++};
++#endif /* MENU_COLOR */
++
+ #endif /* COLOR_H */
+diff -aurN nethack-3.4.3/include/config.h nethack-3.4.3-mc/include/config.h
+--- nethack-3.4.3/include/config.h 2015-04-13 01:16:18.616049778 +0900
++++ nethack-3.4.3-mc/include/config.h 2015-04-13 01:16:39.795934851 +0900
+@@ -367,6 +367,18 @@
+ * bugs left here.
+ */
+
++#if defined(TTY_GRAPHICS) || defined(MSWIN_GRAPHICS)
++# define MENU_COLOR
++# define MENU_COLOR_REGEX
++/*# define MENU_COLOR_REGEX_POSIX */
++/* if MENU_COLOR_REGEX is defined, use regular expressions (regex.h,
++ * GNU specific functions by default, POSIX functions with
++ * MENU_COLOR_REGEX_POSIX).
++ * otherwise use pmatch() to match menu color lines.
++ * pmatch() provides basic globbing: '*' and '?' wildcards.
++ */
++#endif
++
+ /*#define GOLDOBJ */ /* Gold is kept on obj chains - Helge Hafting */
+ /*#define AUTOPICKUP_EXCEPTIONS */ /* exceptions to autopickup */
+
+diff -aurN nethack-3.4.3/include/extern.h nethack-3.4.3-mc/include/extern.h
+--- nethack-3.4.3/include/extern.h 2015-04-13 01:16:21.469367629 +0900
++++ nethack-3.4.3-mc/include/extern.h 2015-04-13 01:16:39.795934851 +0900
+@@ -1413,6 +1413,9 @@
+ E int FDECL(add_autopickup_exception, (const char *));
+ E void NDECL(free_autopickup_exceptions);
+ #endif /* AUTOPICKUP_EXCEPTIONS */
++#ifdef MENU_COLOR
++E boolean FDECL(add_menu_coloring, (char *));
++#endif /* MENU_COLOR */
+
+ /* ### pager.c ### */
+
+diff -aurN nethack-3.4.3/include/flag.h nethack-3.4.3-mc/include/flag.h
+--- nethack-3.4.3/include/flag.h 2003-12-08 08:39:13.000000000 +0900
++++ nethack-3.4.3-mc/include/flag.h 2015-04-13 01:16:39.795934851 +0900
+@@ -183,6 +183,9 @@
+ char prevmsg_window; /* type of old message window to use */
+ boolean extmenu; /* extended commands use menu interface */
+ #endif
++#ifdef MENU_COLOR
++ boolean use_menu_color; /* use color in menus; only if wc_color */
++#endif
+ #ifdef MFLOPPY
+ boolean checkspace; /* check disk space before writing files */
+ /* (in iflags to allow restore after moving
+diff -aurN nethack-3.4.3/src/decl.c nethack-3.4.3-mc/src/decl.c
+--- nethack-3.4.3/src/decl.c 2015-04-13 01:16:18.626049724 +0900
++++ nethack-3.4.3-mc/src/decl.c 2015-04-13 01:16:39.795934851 +0900
+@@ -269,6 +269,10 @@
+ #endif
+ };
+
++#ifdef MENU_COLOR
++struct menucoloring *menu_colorings = 0;
++#endif
++
+ struct c_common_strings c_common_strings = {
+ #if 0 /*JP*/
+ "Nothing happens.", "That's enough tries!",
+diff -aurN nethack-3.4.3/src/files.c nethack-3.4.3-mc/src/files.c
+--- nethack-3.4.3/src/files.c 2015-04-13 01:16:18.636049670 +0900
++++ nethack-3.4.3-mc/src/files.c 2015-04-13 01:16:39.799268166 +0900
+@@ -1829,6 +1829,10 @@
+ } else if (match_varname(buf, "BOULDER", 3)) {
+ (void) get_uchars(fp, buf, bufp, &iflags.bouldersym, TRUE,
+ 1, "BOULDER");
++ } else if (match_varname(buf, "MENUCOLOR", 9)) {
++#ifdef MENU_COLOR
++ (void) add_menu_coloring(bufp);
++#endif
+ } else if (match_varname(buf, "GRAPHICS", 4)) {
+ len = get_uchars(fp, buf, bufp, translate, FALSE,
+ MAXPCHARS, "GRAPHICS");
+diff -aurN nethack-3.4.3/src/options.c nethack-3.4.3-mc/src/options.c
+--- nethack-3.4.3/src/options.c 2015-04-13 01:16:18.652716246 +0900
++++ nethack-3.4.3-mc/src/options.c 2015-04-13 01:16:39.799268166 +0900
+@@ -125,6 +125,15 @@
+ #else
+ {"mail", (boolean *)0, TRUE, SET_IN_FILE},
+ #endif
++#ifdef MENU_COLOR
++# ifdef MICRO
++ {"menucolors", &iflags.use_menu_color, TRUE, SET_IN_GAME},
++# else
++ {"menucolors", &iflags.use_menu_color, FALSE, SET_IN_GAME},
++# endif
++#else
++ {"menucolors", (boolean *)0, FALSE, SET_IN_GAME},
++#endif
+ #ifdef WIZARD
+ /* for menu debugging only*/
+ {"menu_tab_sep", &iflags.menu_tab_sep, FALSE, SET_IN_GAME},
+@@ -305,6 +314,7 @@
+ #endif /*JP*/
+ #if 0 /*JP*/
+ { "map_mode", "map display mode under Windows", 20, DISP_IN_GAME }, /*WC*/
++ { "menucolor", "set menu colors", PL_PSIZ, SET_IN_FILE },
+ { "menustyle", "user interface for object selection",
+ MENUTYPELEN, SET_IN_GAME },
+ { "menu_deselect_all", "deselect all items in a menu", 4, SET_IN_FILE },
+@@ -1152,6 +1162,133 @@
+ }
+ }
+
++#ifdef MENU_COLOR
++extern struct menucoloring *menu_colorings;
++
++static const struct {
++ const char *name;
++ const int color;
++} colornames[] = {
++ {"black", CLR_BLACK},
++ {"red", CLR_RED},
++ {"green", CLR_GREEN},
++ {"brown", CLR_BROWN},
++ {"blue", CLR_BLUE},
++ {"magenta", CLR_MAGENTA},
++ {"cyan", CLR_CYAN},
++ {"gray", CLR_GRAY},
++ {"orange", CLR_ORANGE},
++ {"lightgreen", CLR_BRIGHT_GREEN},
++ {"yellow", CLR_YELLOW},
++ {"lightblue", CLR_BRIGHT_BLUE},
++ {"lightmagenta", CLR_BRIGHT_MAGENTA},
++ {"lightcyan", CLR_BRIGHT_CYAN},
++ {"white", CLR_WHITE}
++};
++
++static const struct {
++ const char *name;
++ const int attr;
++} attrnames[] = {
++ {"none", ATR_NONE},
++ {"bold", ATR_BOLD},
++ {"dim", ATR_DIM},
++ {"underline", ATR_ULINE},
++ {"blink", ATR_BLINK},
++ {"inverse", ATR_INVERSE}
++
++};
++
++/* parse '"regex_string"=color&attr' and add it to menucoloring */
++boolean
++add_menu_coloring(str)
++char *str;
++{
++ int i, c = NO_COLOR, a = ATR_NONE;
++ struct menucoloring *tmp;
++ char *tmps, *cs = strchr(str, '=');
++#ifdef MENU_COLOR_REGEX_POSIX
++ int errnum;
++ char errbuf[80];
++#endif
++ const char *err = (char *)0;
++
++ if (!cs || !str) return FALSE;
++
++ tmps = cs;
++ tmps++;
++ while (*tmps && isspace(*tmps)) tmps++;
++
++ for (i = 0; i < SIZE(colornames); i++)
++ if (strstri(tmps, colornames[i].name) == tmps) {
++ c = colornames[i].color;
++ break;
++ }
++ if ((i == SIZE(colornames)) && (*tmps >= '0' && *tmps <='9'))
++ c = atoi(tmps);
++
++ if (c > 15) return FALSE;
++
++ tmps = strchr(str, '&');
++ if (tmps) {
++ tmps++;
++ while (*tmps && isspace(*tmps)) tmps++;
++ for (i = 0; i < SIZE(attrnames); i++)
++ if (strstri(tmps, attrnames[i].name) == tmps) {
++ a = attrnames[i].attr;
++ break;
++ }
++ if ((i == SIZE(attrnames)) && (*tmps >= '0' && *tmps <='9'))
++ a = atoi(tmps);
++ }
++
++ *cs = '\0';
++ tmps = str;
++ if ((*tmps == '"') || (*tmps == '\'')) {
++ cs--;
++ while (isspace(*cs)) cs--;
++ if (*cs == *tmps) {
++ *cs = '\0';
++ tmps++;
++ }
++ }
++
++ tmp = (struct menucoloring *)alloc(sizeof(struct menucoloring));
++#ifdef MENU_COLOR_REGEX
++#ifdef MENU_COLOR_REGEX_POSIX
++ errnum = regcomp(&tmp->match, tmps, REG_EXTENDED | REG_NOSUB);
++ if (errnum != 0)
++ {
++ regerror(errnum, &tmp->match, errbuf, sizeof(errbuf));
++ err = errbuf;
++ }
++#else
++ tmp->match.translate = 0;
++ tmp->match.fastmap = 0;
++ tmp->match.buffer = 0;
++ tmp->match.allocated = 0;
++ tmp->match.regs_allocated = REGS_FIXED;
++ err = re_compile_pattern(tmps, strlen(tmps), &tmp->match);
++#endif
++#else
++ tmp->match = (char *)alloc(strlen(tmps)+1);
++ (void) memcpy((genericptr_t)tmp->match, (genericptr_t)tmps, strlen(tmps)+1);
++#endif
++ if (err) {
++ raw_printf("\nMenucolor regex error: %s\n", err);
++ wait_synch();
++ free(tmp);
++ return FALSE;
++ } else {
++ tmp->next = menu_colorings;
++ tmp->color = c;
++ tmp->attr = a;
++ menu_colorings = tmp;
++ return TRUE;
++ }
++}
++#endif /* MENU_COLOR */
++
+ void
+ parseoptions(opts, tinitial, tfrom_file)
+ register char *opts;
+@@ -1333,6 +1470,18 @@
+ return;
+ }
+
++ /* menucolor:"regex_string"=color */
++ fullname = "menucolor";
++ if (match_optname(opts, fullname, 9, TRUE)) {
++#ifdef MENU_COLOR
++ if (negated) bad_negation(fullname, FALSE);
++ else if ((op = string_for_env_opt(fullname, opts, FALSE)) != 0)
++ if (!add_menu_coloring(op))
++ badoption(opts);
++#endif
++ return;
++ }
++
+ fullname = "msghistory";
+ if (match_optname(opts, fullname, 3, TRUE)) {
+ op = string_for_env_opt(fullname, opts, negated);
+diff -aurN nethack-3.4.3/src/save.c nethack-3.4.3-mc/src/save.c
+--- nethack-3.4.3/src/save.c 2015-04-13 01:16:18.662716192 +0900
++++ nethack-3.4.3-mc/src/save.c 2015-04-13 01:16:39.799268166 +0900
+@@ -55,6 +55,10 @@
+ #define HUP
+ #endif
+
++#ifdef MENU_COLOR
++extern struct menucoloring *menu_colorings;
++#endif
++
+ /* need to preserve these during save to avoid accessing freed memory */
+ static unsigned ustuck_id = 0, usteed_id = 0;
+
+@@ -975,12 +979,34 @@
+ return;
+ }
+
++#ifdef MENU_COLOR
++void
++free_menu_coloring()
++{
++ struct menucoloring *tmp = menu_colorings;
++
++ while (tmp) {
++ struct menucoloring *tmp2 = tmp->next;
++# ifdef MENU_COLOR_REGEX
++ (void) regfree(&tmp->match);
++# else
++ free(tmp->match);
++# endif
++ free(tmp);
++ tmp = tmp2;
++ }
++}
++#endif /* MENU_COLOR */
++
+ void
+ freedynamicdata()
+ {
+ unload_qtlist();
+ free_invbuf(); /* let_to_name (invent.c) */
+ free_youbuf(); /* You_buf,&c (pline.c) */
++#ifdef MENU_COLOR
++ free_menu_coloring();
++#endif
+ tmp_at(DISP_FREEMEM, 0); /* temporary display effects */
+ #ifdef FREE_ALL_MEMORY
+ # define freeobjchn(X) (saveobjchn(0, X, FREE_SAVE), X = 0)
+diff -aurN nethack-3.4.3/util/makedefs.c nethack-3.4.3-mc/util/makedefs.c
+--- nethack-3.4.3/util/makedefs.c 2015-04-13 01:16:18.689382714 +0900
++++ nethack-3.4.3-mc/util/makedefs.c 2015-04-13 01:16:39.799268166 +0900
+@@ -772,6 +772,13 @@
+ #ifdef MAIL
+ "mail daemon",
+ #endif
++#ifdef MENU_COLOR
++# ifdef MENU_COLOR_REGEX
++ "menu colors via regular expressions",
++# else
++ "menu colors via pmatch",
++# endif
++#endif
+ #ifdef GNUDOS
+ "MSDOS protected mode",
+ #endif
+diff -aurN nethack-3.4.3/win/tty/wintty.c nethack-3.4.3-mc/win/tty/wintty.c
+--- nethack-3.4.3/win/tty/wintty.c 2015-04-13 01:16:21.472700945 +0900
++++ nethack-3.4.3-mc/win/tty/wintty.c 2015-04-13 01:18:31.038664325 +0900
+@@ -131,6 +131,10 @@
+ static char winpanicstr[] = "Bad window id %d";
+ char defmorestr[] = "--More--";
+
++#ifdef MENU_COLOR
++extern struct menucoloring *menu_colorings;
++#endif
++
+ #ifdef CLIPPING
+ # if defined(USE_TILES) && defined(MSDOS)
+ boolean clipping = FALSE; /* clipping on? */
+@@ -1267,6 +1271,32 @@
+ }
+ }
+
++#ifdef MENU_COLOR
++STATIC_OVL boolean
++get_menu_coloring(str, color, attr)
++char *str;
++int *color, *attr;
++{
++ struct menucoloring *tmpmc;
++ if (iflags.use_menu_color)
++ for (tmpmc = menu_colorings; tmpmc; tmpmc = tmpmc->next)
++# ifdef MENU_COLOR_REGEX
++# ifdef MENU_COLOR_REGEX_POSIX
++ if (regexec(&tmpmc->match, str, 0, NULL, 0) == 0) {
++# else
++ if (re_search(&tmpmc->match, str, strlen(str), 0, 9999, 0) >= 0) {
++# endif
++# else
++ if (pmatch(tmpmc->match, str)) {
++# endif
++ *color = tmpmc->color;
++ *attr = tmpmc->attr;
++ return TRUE;
++ }
++ return FALSE;
++}
++#endif /* MENU_COLOR */
++
+ STATIC_OVL void
+ process_menu_window(window, cw)
+ winid window;
+@@ -1343,6 +1373,10 @@
+ for (page_lines = 0, curr = page_start;
+ curr != page_end;
+ page_lines++, curr = curr->next) {
++#ifdef MENU_COLOR
++ int color = NO_COLOR, attr = ATR_NONE;
++ boolean menucolr = FALSE;
++#endif
+ if (curr->selector)
+ *rp++ = curr->selector;
+
+@@ -1362,6 +1396,13 @@
+ * actually output the character. We're faster doing
+ * this.
+ */
++#ifdef MENU_COLOR
++ if (iflags.use_menu_color &&
++ (menucolr = get_menu_coloring(curr->str, &color,&attr))) {
++ term_start_attr(attr);
++ if (color != NO_COLOR) term_start_color(color);
++ } else
++#endif
+ term_start_attr(curr->attr);
+ for (n = 0, cp = curr->str;
+ #ifndef WIN32CON
+@@ -1391,6 +1432,12 @@
+ #else
+ (void) jputchar(*cp);
+ #endif
++#ifdef MENU_COLOR
++ if (iflags.use_menu_color && menucolr) {
++ if (color != NO_COLOR) term_end_color();
++ term_end_attr(attr);
++ } else
++#endif
+ term_end_attr(curr->attr);
+ }
+ } else {
+diff -aurN nethack-3.4.3/win/win32/mhmenu.c nethack-3.4.3-mc/win/win32/mhmenu.c
+--- nethack-3.4.3/win/win32/mhmenu.c 2003-12-08 08:39:14.000000000 +0900
++++ nethack-3.4.3-mc/win/win32/mhmenu.c 2015-04-13 01:16:39.799268166 +0900
+@@ -63,6 +63,10 @@
+
+ extern short glyph2tile[];
+
++#ifdef MENU_COLOR
++extern struct menucoloring *menu_colorings;
++#endif
++
+ static WNDPROC wndProcListViewOrig = NULL;
+ static WNDPROC editControlWndProc = NULL;
+
+@@ -83,6 +87,58 @@
+ static void reset_menu_count(HWND hwndList, PNHMenuWindow data);
+ static BOOL onListChar(HWND hWnd, HWND hwndList, WORD ch);
+
++#ifdef MENU_COLOR
++/* FIXME: nhcolor_to_RGB copied from mhmap.c */
++/* map nethack color to RGB */
++COLORREF nhcolor_to_RGB(int c)
++{
++ switch(c) {
++ case CLR_BLACK: return RGB(0x55, 0x55, 0x55);
++ case CLR_RED: return RGB(0xFF, 0x00, 0x00);
++ case CLR_GREEN: return RGB(0x00, 0x80, 0x00);
++ case CLR_BROWN: return RGB(0xA5, 0x2A, 0x2A);
++ case CLR_BLUE: return RGB(0x00, 0x00, 0xFF);
++ case CLR_MAGENTA: return RGB(0xFF, 0x00, 0xFF);
++ case CLR_CYAN: return RGB(0x00, 0xFF, 0xFF);
++ case CLR_GRAY: return RGB(0xC0, 0xC0, 0xC0);
++ case NO_COLOR: return RGB(0xFF, 0xFF, 0xFF);
++ case CLR_ORANGE: return RGB(0xFF, 0xA5, 0x00);
++ case CLR_BRIGHT_GREEN: return RGB(0x00, 0xFF, 0x00);
++ case CLR_YELLOW: return RGB(0xFF, 0xFF, 0x00);
++ case CLR_BRIGHT_BLUE: return RGB(0x00, 0xC0, 0xFF);
++ case CLR_BRIGHT_MAGENTA: return RGB(0xFF, 0x80, 0xFF);
++ case CLR_BRIGHT_CYAN: return RGB(0x80, 0xFF, 0xFF); /* something close to aquamarine */
++ case CLR_WHITE: return RGB(0xFF, 0xFF, 0xFF);
++ default: return RGB(0x00, 0x00, 0x00); /* black */
++ }
++}
++
++
++STATIC_OVL boolean
++get_menu_coloring(str, color, attr)
++char *str;
++int *color, *attr;
++{
++ struct menucoloring *tmpmc;
++ if (iflags.use_menu_color)
++ for (tmpmc = menu_colorings; tmpmc; tmpmc = tmpmc->next)
++# ifdef MENU_COLOR_REGEX
++# ifdef MENU_COLOR_REGEX_POSIX
++ if (regexec(&tmpmc->match, str, 0, NULL, 0) == 0) {
++# else
++ if (re_search(&tmpmc->match, str, strlen(str), 0, 9999, 0) >= 0) {
++# endif
++# else
++ if (pmatch(tmpmc->match, str)) {
++# endif
++ *color = tmpmc->color;
++ *attr = tmpmc->attr;
++ return TRUE;
++ }
++ return FALSE;
++}
++#endif /* MENU_COLOR */
++
+ /*-----------------------------------------------------------------------------*/
+ HWND mswin_init_menu_window (int type) {
+ HWND ret;
+@@ -767,6 +823,11 @@
+ char *p, *p1;
+ int column;
+
++#ifdef MENU_COLOR
++ int color = NO_COLOR, attr;
++ boolean menucolr = FALSE;
++#endif
++
+ lpdis = (LPDRAWITEMSTRUCT) lParam;
+
+ /* If there are no list box items, skip this message. */
+@@ -813,6 +874,15 @@
+ buf[0] = item->accelerator;
+ buf[1] = '\x0';
+
++#ifdef MENU_COLOR
++ if (iflags.use_menu_color &&
++ (menucolr = get_menu_coloring(item->str, &color,&attr))) {
++ /* TODO: use attr too */
++ if (color != NO_COLOR)
++ SetTextColor(lpdis->hDC, nhcolor_to_RGB(color));
++ }
++#endif
++
+ SetRect( &drawRect, x, lpdis->rcItem.top, lpdis->rcItem.right, lpdis->rcItem.bottom );
+ DrawText(lpdis->hDC, NH_A2W(buf, wbuf, 2), 1, &drawRect, DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX);
+ }
diff --git a/jnethack.install b/jnethack.install
new file mode 100644
index 000000000000..c7e94e795da7
--- /dev/null
+++ b/jnethack.install
@@ -0,0 +1,12 @@
+pre_upgrade() {
+ if(test `vercmp '3.4.3-5' "$2"` -ge 0); then
+ mv /usr/share/jnethack /tmp/jnethack-backup
+ fi
+}
+
+post_upgrade() {
+ if(test `vercmp '3.4.3-5' "$2"` -ge 0); then
+ rm -rf /var/games/jnethack
+ mv /tmp/jnethack-backup /var/games/jnethack
+ fi
+}