]> granicus.if.org Git - nethack/commitdiff
*** empty log message ***
authorjwalz <jwalz>
Sat, 5 Jan 2002 21:05:58 +0000 (21:05 +0000)
committerjwalz <jwalz>
Sat, 5 Jan 2002 21:05:58 +0000 (21:05 +0000)
sys/share/nhlan.c [new file with mode: 0644]

diff --git a/sys/share/nhlan.c b/sys/share/nhlan.c
new file mode 100644 (file)
index 0000000..9d3d161
--- /dev/null
@@ -0,0 +1,191 @@
+/*     SCCS Id: @(#)nhlan.c    3.3     99/11/21        */
+/* Copyright (c) Michael Allison, 1997                  */
+/* NetHack may be freely redistributed.  See license for details. */
+
+/*
+ * Currently shared by the following ports:
+ *     WIN32
+ *
+ * The code in here is used to take advantage of added features
+ * that might be available in a Local Area Network environment.
+ *
+ *     Network Username of player
+ *     Mail
+ * Futures
+ *     Shared bones
+ *             To implement this: code, data files, and configuration
+ *             files need to be separated from writeable files such
+ *             as level files, bones files, and save files.
+ *
+ */
+
+#include "hack.h"
+#include <ctype.h>
+
+#ifdef LAN_FEATURES
+
+#ifdef LAN_MAIL
+/* Port specific code needs to implement these routines for LAN_MAIL */
+extern char *FDECL(get_username, (int *));
+extern boolean NDECL(mail_check);
+extern boolean FDECL(mail_fetch, (struct lan_mail_struct *)); 
+extern void FDECL(mail_init, (char *));
+extern void NDECL(mail_finish);
+
+struct lan_mail_struct mailmessage;
+#endif /* LAN_MAIL */
+
+
+void init_lan_features()
+{
+       lan_username();
+#ifdef LAN_MAIL
+       lan_mail_init();
+#endif
+#ifdef LAN_SHARED_BONES
+#endif
+}
+/*
+ * The get_lan_username() call is a required call, since some of
+ * the other LAN features depend on a unique username being available.
+ *
+ */
+char lusername[MAX_LAN_USERNAME];
+int lusername_size = MAX_LAN_USERNAME;
+
+char *lan_username()
+{
+       char *lu;
+       lu = get_username(&lusername_size);
+       if (lu) {
+        Strcpy(lusername, lu);
+        return lusername;
+       } else return (char *)0;
+}
+
+# ifdef LAN_MAIL
+#if 0
+static void
+mail_by_pline(msg)
+struct lan_mail_struct *msg;
+{
+       long    size;
+
+       for (size = 0; size < qt_msg->size; size += (long)strlen(in_line)) {
+           (void) dlb_fgets(in_line, 80, msg_file);
+           convert_line();
+           pline(out_line);
+       }
+
+}
+#endif /* 0 */
+
+static void
+mail_by_window(msg)
+struct lan_mail_struct *msg;
+{
+       char buf[BUFSZ];
+       winid datawin = create_nhwindow(NHW_TEXT);
+       char *get, *put;
+       int ccount = 0;
+       
+       get = msg->body;
+       put = buf;
+       while (*get) {
+            if (ccount > 79) {
+               *put = '\0';
+               putstr(datawin, 0, buf);
+               put = buf;
+               ccount = 0;
+            }
+            if (*get == '\r') {
+               get++;
+            } else if (*get == '\n') { 
+               *put = '\0';
+               putstr(datawin, 0, buf);
+               put = buf;
+               get++;
+               ccount = 0;
+            } else if (!isprint(*get)) {
+               get++;
+            } else {
+               *put++ = *get++;
+               ccount++;
+            }
+       }
+       *put = '\0';
+       putstr(datawin, 0, buf);
+       putstr(datawin, 0, "");        
+       display_nhwindow(datawin, TRUE);
+       destroy_nhwindow(datawin);
+}
+
+/* this returns TRUE if there is mail ready to be read */
+boolean lan_mail_check()
+{
+       if (flags.biff) {
+               if (mail_check()) return TRUE;
+       }
+       return FALSE;
+}
+
+void lan_mail_read(otmp)
+struct obj *otmp;
+{
+       if (flags.biff) {
+               (void) mail_fetch(&mailmessage);
+               /* after a successful fetch iflags.lan_mail_fetched
+                * should be TRUE.  If it isn't then we don't
+                * trust the contents of mailmessage.  This
+                * ensures that things work correctly across
+                * save/restores where mailmessage isn't
+                * saved (nor should it be since it may be
+                * way out of context by then).
+                */
+                if (iflags.lan_mail_fetched) {
+                   if (mailmessage.body_in_ram) {
+                       mail_by_window(&mailmessage);
+                       return;
+                   }
+                }
+       }
+       pline_The("text has faded and is no longer readable.");
+}
+
+void lan_mail_init()
+{
+       if (!flags.biff) return;
+       (void) mail_init(lusername);
+}
+
+void lan_mail_finish()
+{
+       if (iflags.lan_mail)
+               (void) mail_finish();
+}
+
+/* If ever called, the underlying mail system ran into trouble
+ * and wants us to cease bothering it immediately.
+ * Don't call mail_finish() because the underlying mail system
+ * may already be unavailable. Just clean up the NetHack side
+ * of things to prevent a crash.
+ */
+void lan_mail_terminate()
+{
+       /* Step 1. Clear iflags.lan_mail to indicate "not inited" */
+       iflags.lan_mail = FALSE;
+
+       /* Step 2. Clear iflags.lan_mail_fetched */
+       iflags.lan_mail_fetched = FALSE;
+
+       /* Once having gotten to this point, the only
+          way to resume NetHack mail features again is
+          to Save/Quit game, or for the user to clear
+          iflags.biff and then set it once again,
+          which triggers mail initialization */
+}
+
+# endif /*LAN_MAIL*/
+
+#endif /*LAN_FEATURES*/
+/*nhlan.c*/