sys/vms/*.c - mostly reformatting
I'm not sure whether basic formatting cleanup belongs in 3.6.1, but there are also a couple of strings that got split and require the implicit concatenation of adjacent string literals introduced with C89/C90. The code itself compiles with pre-ANSI compilers, or at least used to--most of it was developed with one.... Much of it is tabs in comments. But there was one substantive item: an obsolete reference to "use 'Q' to Quit" after however many years....
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/* NetHack 3.6 vmsmail.c $NHDT-Date: 1432512789 2015/05/25 00:13:09 $ $NHDT-Branch: master $:$NHDT-Revision: 1.9 $ */
|
||||
/* Copyright (c) Robert Patrick Rankin, 1991. */
|
||||
/* NetHack 3.6 vmsmail.c $NHDT-Date: 1449801741 2015/12/11 02:42:21 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.10 $ */
|
||||
/* Copyright (c) Robert Patrick Rankin, 1991. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
#include "config.h"
|
||||
@@ -25,7 +25,7 @@ struct mail_info *NDECL(parse_next_broadcast);
|
||||
#endif /*__GNUC__*/
|
||||
#include <signal.h>
|
||||
/* #include <string.h> */
|
||||
#define vms_ok(sts) ((sts) &1)
|
||||
#define vms_ok(sts) ((sts) & 1)
|
||||
|
||||
static struct mail_info *FDECL(parse_brdcst, (char *));
|
||||
static void FDECL(filter_brdcst, (char *));
|
||||
@@ -49,7 +49,7 @@ static long pasteboard_id = 0; /* SMG's magic cookie */
|
||||
/*
|
||||
* Mail (et al) overview:
|
||||
*
|
||||
* When a broadcast is asynchronously captured, a volatile counter
|
||||
* When a broadcast is asynchronously captured, a volatile counter
|
||||
* ('broadcasts') is incremented. Each player turn, ckmailstatus() polls
|
||||
* the counter and calls parse_next_broadcast() if it's positive; this
|
||||
* returns some display text, object name, and response command, which is
|
||||
@@ -62,7 +62,7 @@ static long pasteboard_id = 0; /* SMG's magic cookie */
|
||||
* If SHELL is undefined, then all broadcasts are treated as 'other'; since
|
||||
* no subproceses are allowed, there'd be no way to respond to the scroll.
|
||||
*
|
||||
* When a scroll of mail is read by the character, readmail() extracts
|
||||
* When a scroll of mail is read by the character, readmail() extracts
|
||||
* the command string and uses it for the default when prompting the
|
||||
* player for a system command to spawn. The player may enter any command
|
||||
* he or she chooses, or just <return> to accept the default or <escape> to
|
||||
@@ -73,36 +73,36 @@ static long pasteboard_id = 0; /* SMG's magic cookie */
|
||||
*
|
||||
* Broadcast parsing:
|
||||
*
|
||||
* The following broadcast messages are [attempted to be] recognized:
|
||||
* text fragment name for scroll default command
|
||||
* New mail VMSmail MAIL
|
||||
* New ALL-IN-1 MAIL A1mail A1M
|
||||
* Software Tools mail STmail MSG [+folder]
|
||||
* MM mail MMmail MM
|
||||
* WPmail: New mail WPmail OFFICE/MAIL
|
||||
* **M400 mail M400mail M400
|
||||
* " mail", ^"mail " unknown mail SPAWN
|
||||
* " phoning" Phone call PHONE ANSWER
|
||||
* talk-daemon...by...foo Talk request TALK[/OLD] foo@bar
|
||||
* (node)user - Bitnet noise XYZZY user@node
|
||||
* The following broadcast messages are [attempted to be] recognized:
|
||||
* text fragment name for scroll default command
|
||||
* New mail VMSmail MAIL
|
||||
* New ALL-IN-1 MAIL A1mail A1M
|
||||
* Software Tools mail STmail MSG [+folder]
|
||||
* MM mail MMmail MM
|
||||
* WPmail: New mail WPmail OFFICE/MAIL
|
||||
* **M400 mail M400mail M400
|
||||
* " mail", ^"mail " unknown mail SPAWN
|
||||
* " phoning" Phone call PHONE ANSWER
|
||||
* talk-daemon...by...foo Talk request TALK[/OLD] foo@bar
|
||||
* (node)user - Bitnet noise XYZZY user@node
|
||||
* Anything else results in just the message text being passed along, no
|
||||
* scroll of mail so consequently no command to execute when scroll read.
|
||||
* The user can set up ``$ XYZZY :== SEND'' prior to invoking NetHack if
|
||||
* vanilla JNET responses to Bitnet messages are prefered.
|
||||
*
|
||||
* Static return buffers are used because only one broadcast gets
|
||||
* Static return buffers are used because only one broadcast gets
|
||||
* processed at a time, and the essential information in each one is
|
||||
* either displayed and discarded or copied into a scroll-of-mail object.
|
||||
*
|
||||
* The test driver code below can be used to check out potential new
|
||||
* The test driver code below can be used to check out potential new
|
||||
* entries without rebuilding NetHack itself. CC/DEFINE="TEST_DRIVER"
|
||||
* Link it with hacklib.obj or nethack.olb/incl=hacklib (not nethack/lib).
|
||||
*/
|
||||
|
||||
static struct mail_info msg; /* parse_*()'s return buffer */
|
||||
static char nam_buf[63], /* maximum onamelth, size of ONAME(object) */
|
||||
cmd_buf[99], /* arbitrary */
|
||||
txt_buf[255 + 1]; /* same size as used for message buf[] */
|
||||
static struct mail_info msg; /* parse_*()'s return buffer */
|
||||
static char nam_buf[63], /* maximum onamelth, size of ONAME(object) */
|
||||
cmd_buf[99], /* arbitrary */
|
||||
txt_buf[255 + 1]; /* same size as used for message buf[] */
|
||||
|
||||
/* try to decipher and categorize broadcast message text
|
||||
*/
|
||||
@@ -136,9 +136,9 @@ char *buf; /* input: filtered broadcast text */
|
||||
|
||||
if (!strncmpi(buf, "new mail", 8)) {
|
||||
/*
|
||||
New mail [on node FOO] from [SPAM::]BAR [\"personal_name\"]
|
||||
[\(HH:MM:SS\)]
|
||||
*/
|
||||
* New mail [on node FOO] from [SPAM::]BAR
|
||||
* [\"personal_name\"] [\(HH:MM:SS\)]
|
||||
*/
|
||||
nam = "VMSmail"; /* assume VMSmail */
|
||||
cmd = "MAIL";
|
||||
if (txt && (p = strrchr(txt, '(')) > txt && /* discard time */
|
||||
@@ -147,9 +147,9 @@ char *buf; /* input: filtered broadcast text */
|
||||
} else if (!strncmpi(buf, "new all-in-1", 12)) {
|
||||
int i;
|
||||
/*
|
||||
New ALL-IN-1 MAIL message [on node FOO] from Personal Name
|
||||
\(BAR@SPAM\) [\(DD-MMM-YYYY HH:MM:SS\)]
|
||||
*/
|
||||
* New ALL-IN-1 MAIL message [on node FOO] from Personal Name
|
||||
* \(BAR@SPAM\) [\(DD-MMM-YYYY HH:MM:SS\)]
|
||||
*/
|
||||
nam = "A1mail";
|
||||
cmd = "A1M";
|
||||
if (txt && (p = strrchr(txt, '(')) > txt
|
||||
@@ -159,29 +159,29 @@ char *buf; /* input: filtered broadcast text */
|
||||
*--p = '\0';
|
||||
} else if (!strncmpi(buf, "software tools", 14)) {
|
||||
/*
|
||||
Software Tools mail has arrived on FOO from \'BAR\' [in SPAM]
|
||||
*/
|
||||
* Software Tools mail has arrived on FOO from \'BAR\' [in SPAM]
|
||||
*/
|
||||
nam = "STmail";
|
||||
cmd = "MSG";
|
||||
if (txt && (p = strstri(p, " in ")) != 0) /* specific folder */
|
||||
cmd = strcat(strcpy(cmd_buf, "MSG +"), p + 4);
|
||||
} else if (q - 2 >= buf && !strncmpi(q - 2, "mm", 2)) {
|
||||
/*
|
||||
{MultiNet\ |PMDF\/}MM mail has arrived on FOO from BAR\n
|
||||
[Subject: subject_text] (PMDF only)
|
||||
*/
|
||||
* {MultiNet\ |PMDF\/}MM mail has arrived on FOO from BAR\n
|
||||
* [Subject: subject_text] (PMDF only)
|
||||
*/
|
||||
nam = "MMmail"; /* MultiNet's version of MM */
|
||||
cmd = "MM"; /*{ perhaps "MM READ"? }*/
|
||||
} else if (!strncmpi(buf, "wpmail:", 7)) {
|
||||
/*
|
||||
WPmail: New mail from BAR. subject_text
|
||||
*/
|
||||
* WPmail: New mail from BAR. subject_text
|
||||
*/
|
||||
nam = "WPmail"; /* WordPerfect [sic] Office */
|
||||
cmd = "OFFICE/MAIL";
|
||||
} else if (!strncmpi(buf, "**m400 mail", 7)) {
|
||||
/*
|
||||
**M400 mail waiting**
|
||||
*/
|
||||
* **M400 mail waiting**
|
||||
*/
|
||||
nam = "M400mail"; /* Messenger 400 [not seen] */
|
||||
cmd = "M400";
|
||||
} else {
|
||||
@@ -193,14 +193,14 @@ char *buf; /* input: filtered broadcast text */
|
||||
|
||||
if (!txt)
|
||||
txt = strcat(strcpy(txt_buf, "Mail for you: "), buf);
|
||||
/*
|
||||
: end of mail recognition; now check for call-type
|
||||
interruptions...
|
||||
*/
|
||||
|
||||
/*
|
||||
* end of mail recognition; now check for call-type interruptions...
|
||||
*/
|
||||
} else if ((q = strstri(buf, " phoning")) != 0) {
|
||||
/*
|
||||
BAR is phoning you [on FOO] \(HH:MM:SS\)
|
||||
*/
|
||||
* BAR is phoning you [on FOO] \(HH:MM:SS\)
|
||||
*/
|
||||
typ = MSG_CALL;
|
||||
nam = "Phone call";
|
||||
cmd = "PHONE ANSWER";
|
||||
@@ -210,10 +210,10 @@ char *buf; /* input: filtered broadcast text */
|
||||
} else if ((q = strstri(buf, " talk-daemon")) != 0
|
||||
|| (q = strstri(buf, " talk_daemon")) != 0) {
|
||||
/*
|
||||
Message from TALK-DAEMON@FOO at HH:MM:SS\n
|
||||
Connection request by BAR@SPAM\n
|
||||
\[Respond with: TALK[/OLD] BAR@SPAM\]
|
||||
*/
|
||||
* Message from TALK-DAEMON@FOO at HH:MM:SS\n
|
||||
* Connection request by BAR@SPAM\n
|
||||
* \[Respond with: TALK[/OLD] BAR@SPAM\]
|
||||
*/
|
||||
typ = MSG_CALL;
|
||||
nam = "Talk request"; /* MultiNet's TALK and/or TALK/OLD */
|
||||
cmd = "TALK";
|
||||
@@ -239,25 +239,27 @@ char *buf; /* input: filtered broadcast text */
|
||||
} else if (is_jnet_send) { /* sscanf(,"(%[^)])%s -%c",,,)==3 */
|
||||
jnet_send:
|
||||
/*
|
||||
\(SPAM\)BAR - arbitrary_message_text (from BAR@SPAM)
|
||||
*/
|
||||
* \(SPAM\)BAR - arbitrary_message_text (from BAR@SPAM)
|
||||
*/
|
||||
typ = MSG_CALL;
|
||||
nam = "Bitnet noise"; /* RSCS/NJE message received via JNET */
|
||||
Sprintf(cmd_buf, "XYZZY %s@%s", user, node);
|
||||
cmd = cmd_buf;
|
||||
/*{ perhaps just vanilla SEND instead of XYZZY? }*/
|
||||
Sprintf(txt_buf, "Message from %s@%s:%s", user, node,
|
||||
&buf[1 + strlen(node) + 1 + strlen(user) + 2
|
||||
- 1]); /* "(node)user -" */
|
||||
/* "(node)user -" */
|
||||
&buf[1 + strlen(node) + 1 + strlen(user) + 2 - 1]);
|
||||
txt = txt_buf;
|
||||
/*
|
||||
: end of call recognition; anything else is none-of-the-above...
|
||||
*/
|
||||
|
||||
/*
|
||||
* end of call recognition; anything else is none-of-the-above...
|
||||
*/
|
||||
} else {
|
||||
other:
|
||||
#endif /* SHELL */
|
||||
/* arbitrary broadcast: batch job completed, system shutdown imminent,
|
||||
* &c */
|
||||
/* arbitrary broadcast: batch job completed, system shutdown
|
||||
* imminent, &c
|
||||
*/
|
||||
typ = MSG_OTHER;
|
||||
nam = (char *) 0; /*"captured broadcast message"*/
|
||||
cmd = (char *) 0;
|
||||
@@ -300,21 +302,22 @@ register char *buf; /* in: original text; out: filtered text */
|
||||
/* filter the text; restrict consecutive spaces or dots to just two */
|
||||
for (p = buf_p = buf; *buf_p; buf_p++) {
|
||||
c = *buf_p & '\177';
|
||||
if (c == ' ' || c == '\t' || c == '\n')
|
||||
if (c == ' ' || c == '\t' || c == '\n') {
|
||||
if (p == buf || /* ignore leading whitespace */
|
||||
(p >= buf + 2 && *(p - 1) == ' ' && *(p - 2) == ' '))
|
||||
continue;
|
||||
else
|
||||
c = ' ';
|
||||
else if (c == '.' || c < ' ' || c == '\177')
|
||||
} else if (c == '.' || c < ' ' || c == '\177') {
|
||||
if (p == buf || /* skip leading beeps & such */
|
||||
(p >= buf + 2 && *(p - 1) == '.' && *(p - 2) == '.'))
|
||||
continue;
|
||||
else
|
||||
c = '.';
|
||||
else if (c == '%' && /* trim %%% OPCOM verbosity %%% */
|
||||
p >= buf + 2 && *(p - 1) == '%' && *(p - 2) == '%')
|
||||
} else if (c == '%' && /* trim %%% OPCOM verbosity %%% */
|
||||
p >= buf + 2 && *(p - 1) == '%' && *(p - 2) == '%') {
|
||||
continue;
|
||||
}
|
||||
*p++ = c;
|
||||
}
|
||||
*p = '\0'; /* terminate, then strip trailing junk */
|
||||
@@ -326,7 +329,7 @@ register char *buf; /* in: original text; out: filtered text */
|
||||
static char empty_string[] = "";
|
||||
|
||||
/* fetch the text of a captured broadcast, then mangle and decipher it
|
||||
*/
|
||||
*/
|
||||
struct mail_info *parse_next_broadcast() /* called by ckmailstatus(mail.c) */
|
||||
{
|
||||
short length, msg_type;
|
||||
@@ -349,7 +352,7 @@ struct mail_info *parse_next_broadcast() /* called by ckmailstatus(mail.c) */
|
||||
}
|
||||
|
||||
/* spit out any pending broadcast messages whenever we leave
|
||||
*/
|
||||
*/
|
||||
static void flush_broadcasts() /* called from disable_broadcast_trapping() */
|
||||
{
|
||||
if (broadcasts > 0) {
|
||||
@@ -369,27 +372,26 @@ static void flush_broadcasts() /* called from disable_broadcast_trapping() */
|
||||
}
|
||||
}
|
||||
|
||||
/* AST routine called when the terminal's associated mailbox receives a
|
||||
* message
|
||||
*/
|
||||
/* AST routine called when terminal's associated mailbox receives a message
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
broadcast_ast(dummy) /* called asynchronously by terminal driver */
|
||||
int dummy; /* not used */
|
||||
int dummy UNUSED;
|
||||
{
|
||||
broadcasts++;
|
||||
}
|
||||
|
||||
/* initialize the broadcast manipulation code; SMG makes this easy
|
||||
*/
|
||||
unsigned long init_broadcast_trapping() /* called by setftty() [once only] */
|
||||
unsigned long
|
||||
init_broadcast_trapping() /* called by setftty() [once only] */
|
||||
{
|
||||
unsigned long sts, preserve_screen_flag = 1;
|
||||
|
||||
/* we need a pasteboard to pass to the broadcast setup/teardown routines
|
||||
*/
|
||||
sts =
|
||||
smg$create_pasteboard(&pasteboard_id, 0, 0, 0, &preserve_screen_flag);
|
||||
/* we need a pasteboard to pass to the broadcast setup/teardown routines */
|
||||
sts = smg$create_pasteboard(&pasteboard_id, 0, 0, 0,
|
||||
&preserve_screen_flag);
|
||||
if (!vms_ok(sts)) {
|
||||
errno = EVMSERR, vaxc$errno = sts;
|
||||
raw_print("");
|
||||
@@ -401,8 +403,9 @@ unsigned long init_broadcast_trapping() /* called by setftty() [once only] */
|
||||
}
|
||||
|
||||
/* set up the terminal driver to deliver $brkthru data to a mailbox device
|
||||
*/
|
||||
unsigned long enable_broadcast_trapping() /* called by setftty() */
|
||||
*/
|
||||
unsigned long
|
||||
enable_broadcast_trapping() /* called by setftty() */
|
||||
{
|
||||
unsigned long sts = 1;
|
||||
|
||||
@@ -422,8 +425,9 @@ unsigned long enable_broadcast_trapping() /* called by setftty() */
|
||||
}
|
||||
|
||||
/* return to 'normal'; $brkthru data goes straight to the terminal
|
||||
*/
|
||||
unsigned long disable_broadcast_trapping() /* called by settty() */
|
||||
*/
|
||||
unsigned long
|
||||
disable_broadcast_trapping() /* called by settty() */
|
||||
{
|
||||
unsigned long sts = 1;
|
||||
|
||||
@@ -436,7 +440,9 @@ unsigned long disable_broadcast_trapping() /* called by settty() */
|
||||
}
|
||||
return sts;
|
||||
}
|
||||
|
||||
#else /* MAIL */
|
||||
|
||||
/* simple stubs for non-mail configuration */
|
||||
unsigned long
|
||||
init_broadcast_trapping()
|
||||
@@ -458,6 +464,7 @@ parse_next_broadcast()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* MAIL */
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
@@ -538,6 +545,7 @@ void
|
||||
wait_synch()
|
||||
{
|
||||
char dummy[BUFSIZ];
|
||||
|
||||
printf("\nPress <return> to continue: ");
|
||||
fflush(stdout);
|
||||
(void) gets(dummy);
|
||||
|
||||
Reference in New Issue
Block a user