# --- ROCK-COPYRIGHT-NOTE-BEGIN --- # # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # Please add additional copyright information _after_ the line containing # the ROCK-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by # the ./scripts/Create-CopyPatch script. Do not edit this copyright text! # # ROCK Linux: rock-src/package/blindcoder/dgamelaunch/nh343-simple_mail.diff # ROCK Linux is Copyright (C) 1998 - 2006 Clifford Wolf # # This patch file is dual-licensed. It is available under the license the # patched project is licensed under, as long as it is an OpenSource license # as defined at https://www.opensource.org/ (e.g. BSD, X11) or under the terms # of the GNU General Public License as published by the Free Software # Foundation; either version 2 of the License, or (at your option) any later # version. # # --- ROCK-COPYRIGHT-NOTE-END --- diff -urN orig/nethack-3.4.3/include/decl.h nethack-3.4.3/include/decl.h --- orig/nethack-3.4.3/include/decl.h 2003-12-07 15:39:13.000000000 -0800 +++ nethack-3.4.3/include/decl.h 2004-01-03 15:57:34.000000000 -0800 @@ -385,6 +385,10 @@ }; #endif /* AUTOPICKUP_EXCEPTIONS */ +#ifdef SIMPLE_MAIL +E int mailckfreq; +#endif + #undef E #endif /* DECL_H */ diff -urN orig/nethack-3.4.3/include/flag.h nethack-3.4.3/include/flag.h --- orig/nethack-3.4.3/include/flag.h 2003-12-07 15:39:13.000000000 -0800 +++ nethack-3.4.3/include/flag.h 2004-01-03 15:57:34.000000000 -0800 @@ -175,6 +175,9 @@ uchar bouldersym; /* symbol for boulder display */ boolean travel1; /* first travel step */ coord travelcc; /* coordinates for travel_cache */ +#ifdef SIMPLE_MAIL + boolean simplemail; /* simple mail format $NAME:$MESSAGE */ +#endif #ifdef WIZARD boolean sanity_check; /* run sanity checks */ boolean mon_polycontrol; /* debug: control monster polymorphs */ diff -urN orig/nethack-3.4.3/include/unixconf.h nethack-3.4.3/include/unixconf.h --- orig/nethack-3.4.3/include/unixconf.h 2003-12-07 15:39:13.000000000 -0800 +++ nethack-3.4.3/include/unixconf.h 2004-01-03 15:57:34.000000000 -0800 @@ -193,7 +193,6 @@ # endif #endif -#define MAILCKFREQ 50 #endif /* MAIL */ diff -urN orig/nethack-3.4.3/src/mail.c nethack-3.4.3/src/mail.c --- orig/nethack-3.4.3/src/mail.c 2003-12-07 15:39:13.000000000 -0800 +++ nethack-3.4.3/src/mail.c 2004-01-03 16:07:21.000000000 -0800 @@ -5,6 +5,8 @@ #include "hack.h" #ifdef MAIL +#include +#include #include "mail.h" /* @@ -36,6 +38,8 @@ STATIC_DCL boolean FDECL(md_rush,(struct monst *,int,int)); STATIC_DCL void FDECL(newmail, (struct mail_info *)); +int mailckfreq = 0; + extern char *viz_rmin, *viz_rmax; /* line-of-sight limits (vision.c) */ #ifdef OVL0 @@ -464,11 +468,15 @@ void ckmailstatus() { +#ifdef SIMPLE_MAIL + if (mailckfreq == 0) + mailckfreq = (iflags.simplemail ? 5 : 10); +#else + mailckfreq = 10; +#endif + if(!mailbox || u.uswallow || !flags.biff -# ifdef MAILCKFREQ - || moves < laststattime + MAILCKFREQ -# endif - ) + || moves < laststattime + mailckfreq) return; laststattime = moves; @@ -501,9 +509,68 @@ readmail(otmp) struct obj *otmp; { -# ifdef DEF_MAILREADER /* This implies that UNIX is defined */ +#ifdef DEF_MAILREADER register const char *mr = 0; +#endif /* DEF_MAILREADER */ +#ifdef SIMPLE_MAIL + if (iflags.simplemail) + { + FILE* mb = fopen(mailbox, "r"); + char curline[102], *msg; + boolean seen_one_already = FALSE; + struct flock fl = { 0 }; + + fl.l_type = F_RDLCK; + fl.l_whence = SEEK_SET; + fl.l_start = 0; + fl.l_len = 0; + + if (!mb) + goto bail; + + /* Allow this call to block. */ + if (fcntl (fileno (mb), F_SETLKW, &fl) == -1) + goto bail; + + errno = 0; + + while (fgets(curline, 102, mb) != NULL) + { + fl.l_type = F_UNLCK; + fcntl (fileno(mb), F_UNLCK, &fl); + + pline("There is a%s message on this scroll.", + seen_one_already ? "nother" : ""); + + msg = strchr(curline, ':'); + + if (!msg) + goto bail; + + *msg = '\0'; + msg++; + + pline ("This message is from '%s'.", curline); + + msg[strlen(msg) - 1] = '\0'; /* kill newline */ + pline ("It reads: \"%s\".", msg); + + seen_one_already = TRUE; + errno = 0; + + fl.l_type = F_RDLCK; + fcntl(fileno(mb), F_SETLKW, &fl); + } + fl.l_type = F_UNLCK; + fcntl(fileno(mb), F_UNLCK, &fl); + + fclose(mb); + unlink(mailbox); + return; + } +# endif /* SIMPLE_MAIL */ +# ifdef DEF_MAILREADER /* This implies that UNIX is defined */ display_nhwindow(WIN_MESSAGE, FALSE); if(!(mr = nh_getenv("MAILREADER"))) mr = DEF_MAILREADER; @@ -512,15 +578,21 @@ (void) execl(mr, mr, (char *)0); terminate(EXIT_FAILURE); } -# else -# ifndef AMS /* AMS mailboxes are directories */ +# else +# ifndef AMS /* AMS mailboxes are directories */ display_file(mailbox, TRUE); -# endif /* AMS */ -# endif /* DEF_MAILREADER */ +# endif /* AMS */ +# endif /* DEF_MAILREADER */ /* get new stat; not entirely correct: there is a small time window where we do not see new mail */ getmailstatus(); + return; + +#ifdef SIMPLE_MAIL +bail: + pline("It appears to be all gibberish."); /* bail out _professionally_ */ +#endif } # endif /* UNIX */ @@ -587,10 +659,7 @@ static int laststattime = 0; if(u.uswallow || !flags.biff -# ifdef MAILCKFREQ - || moves < laststattime + MAILCKFREQ -# endif - ) + || moves < laststattime + mailckfreq) return; laststattime = moves; diff -urN orig/nethack-3.4.3/sys/unix/unixmain.c nethack-3.4.3/sys/unix/unixmain.c --- orig/nethack-3.4.3/sys/unix/unixmain.c 2003-12-07 15:39:13.000000000 -0800 +++ nethack-3.4.3/sys/unix/unixmain.c 2004-01-03 15:57:34.000000000 -0800 @@ -54,7 +54,9 @@ register char *dir; #endif boolean exact_username; - +#ifdef SIMPLE_MAIL + char* e_simple = NULL; +#endif #if defined(__APPLE__) /* special hack to change working directory to a resource fork when running from finder --sam */ @@ -84,6 +86,12 @@ } #endif +#ifdef SIMPLE_MAIL + /* figure this out early */ + e_simple = nh_getenv("SIMPLEMAIL"); + iflags.simplemail = (e_simple ? 1 : 0); +#endif + hname = argv[0]; hackpid = getpid(); (void) umask(0777 & ~FCMASK);