*** empty log message ***
This commit is contained in:
191
sys/share/nhlan.c
Normal file
191
sys/share/nhlan.c
Normal file
@@ -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*/
|
||||
Reference in New Issue
Block a user