From 7517e945296fe3f3c467c93b282f1bcd937faa3e Mon Sep 17 00:00:00 2001 From: jwalz Date: Sat, 5 Jan 2002 21:05:58 +0000 Subject: [PATCH] *** empty log message *** --- sys/share/nhlan.c | 191 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 sys/share/nhlan.c diff --git a/sys/share/nhlan.c b/sys/share/nhlan.c new file mode 100644 index 000000000..9d3d1612c --- /dev/null +++ b/sys/share/nhlan.c @@ -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 + +#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*/