Added posting messages with user alias

This commit is contained in:
Michiel Broek 2001-11-09 13:53:19 +00:00
parent c74db44255
commit 0e6883b9e5
10 changed files with 327 additions and 248 deletions

View File

@ -4220,7 +4220,8 @@ v0.33.19 26-Oct-2001
lang: lang:
Changed language prompt 71. Changed language prompt 71.
Added language prompts 472 and 473 for FS editor. Added language prompts 472 and 473 for FS editor.
Added language prompts 474 and 475 for address entry. Added language prompts 474, 475 and 476 for address entry.
Added language prompts 477 and 478 for post with user alias.
examples: examples:
SAVE: SAVE:
@ -4253,6 +4254,7 @@ v0.33.19 26-Oct-2001
- Fixed display file with more that stopped after every line. - Fixed display file with more that stopped after every line.
- Added display file "mainlogo" before the "welcome" file. - Added display file "mainlogo" before the "welcome" file.
- Added display files "welcome2..9" after "welcome1" file. - Added display files "welcome2..9" after "welcome1" file.
Posting message with users alias is now possible.
mbtask: mbtask:
Changed to handle the External Doors flag in the lastcaller Changed to handle the External Doors flag in the lastcaller

6
TODO
View File

@ -1,3 +1,5 @@
$Id$
MBSE BBS V0.33.19 TODO list. MBSE BBS V0.33.19 TODO list.
---------------------------- ----------------------------
@ -21,7 +23,7 @@ mbsebbs:
It works with direct serial connections. Note, this also happens It works with direct serial connections. Note, this also happens
on busy LAN's between Linux boxes with normal xterm's. on busy LAN's between Linux boxes with normal xterm's.
Note: this problem almost dissapeared after kernel upgrade to Note: this problem almost dissapeared after kernel upgrade to
2.2.16. 2.2.16. Another note, this does not happen over ssh.
L: Must include SEEN-BY and other hidden lines into BlueWave and QWK L: Must include SEEN-BY and other hidden lines into BlueWave and QWK
mail, must be user selectable. see remarks of William McBrine. mail, must be user selectable. see remarks of William McBrine.
@ -35,8 +37,6 @@ mbsebbs:
N: Check for tagged files before logoff N: Check for tagged files before logoff
N: Can't post messages to users handle.
L: Implement telnet door. L: Implement telnet door.
L: Spell checker in full screen editor. L: Spell checker in full screen editor.

View File

@ -1,149 +1,158 @@
<HTML> <HTML>
<HEAD> <HEAD>
<META http-equiv="Content-Type" content="text/html; charset=ISO 8859-1"> <META http-equiv="Content-Type" content="text/html; charset=ISO 8859-1">
<META http-equiv="Content-Style-Type" content="text/css"> <META http-equiv="Content-Style-Type" content="text/css">
<META name="author" lang="en" "content="Michiel Broek"> <META name="author" lang="en" "content=Michiel Broek">
<META name="copyright" lang="en" content="Copyright Michiel Broek"> <META name="copyright" lang="en" content="Copyright Michiel Broek">
<META name="description" lang="en" content="MBSE BBS Manual"> <META name="description" lang="en" content="MBSE BBS Manual">
<META name="keywords" lang="en" content="MBSE BBS, MBSE, BBS, manual, fido, fidonet, gateway, tosser, mail, tic, mailer"> <META name="keywords" lang="en" content="MBSE BBS, MBSE, BBS, manual, fido, fidonet, gateway, tosser, mail, tic, mailer">
<TITLE>MBSE BBS Programs - mbsebbs - The main BBS program.</TITLE> <TITLE>MBSE BBS Programs - mbsebbs - The main BBS program.</TITLE>
<LINK rel=stylesheet HREF="../manual.css"> <LINK rel=stylesheet HREF="../manual.css">
</HEAD> </HEAD>
<BODY> <BODY>
<BLOCKQUOTE> <BLOCKQUOTE>
<h5>Last update 31-Jan-2001</h5> <h5>Last update 09-Nov-2001</h5>
<P>&nbsp;<P> <P>&nbsp;<P>
<H1>mbsebbs - The main BBS program</H1> <H1>mbsebbs - The main BBS program</H1>
<P> <P>
<H3>Synopsis.</H3> <H3>Synopsis.</H3>
<P> <P>
<code><strong>mbsebbs</strong></code> <code><strong>mbsebbs</strong></code>
<P>&nbsp;<P> <P>&nbsp;<P>
<H3>Description.</H3> <H3>Description.</H3>
<P> <P>
<strong>mbsebbs</strong> is the main bbs program for the users. <strong>mbsebbs</strong> is the main bbs program for the users.
To be able to use the bbs, the bbs mustbe set open with <strong>mbstat open</strong> To be able to use the bbs, the bbs mustbe set open with <strong>mbstat open</strong>
or users may not login. This is normally done at system boot. or users may not login. This is normally done at system boot.
Also Zone Mail Hour is honored if the user logs in Also Zone Mail Hour is honored if the user logs in
on a tty that has the <strong>honor ZMH</strong> flag set to true. If it on a tty that has the <strong>honor ZMH</strong> flag set to true. If it
is ZMH and the ZMH flag is true, the user will be kicked out of the bbs. You is ZMH and the ZMH flag is true, the user will be kicked out of the bbs. You
should only set this flag on the modem lines where you need to be available should only set this flag on the modem lines where you need to be available
for ZMH if your "Fidonet" network requires that. for ZMH if your "Fidonet" network requires that.
<P> <P>
The first visible action is to show the logo.ans file. Because it is not The first visible action is to show the logo.ans file. Because it is not
known who is trying to login, you only need to place this file in the known who is trying to login, you only need to place this file in the
default language directory. default language directory.
<P> <P>
The next check is to see if the user is allowed to login on the tty he The next check is to see if the user is allowed to login on the tty he
currently is on. currently is on.
If this tty is not available or is not in your setup, the user is kicked If this tty is not available or is not in your setup, the user is kicked
out. If he is allowed to login, a message is shown at which port he is on, out. If he is allowed to login, a message is shown at which port he is on,
unless you have turned this feature off in the setup. unless you have turned this feature off in the setup.
<P> <P>
If a user logs in the first check is if he/she has a Unix account or not. If a user logs in the first check is if he/she has a Unix account or not.
Unix users bypass the login prompt. Other users will get the normal prompt Unix users bypass the login prompt. Other users will get the normal prompt
the same way DOS based bbs programs do. At that time it is checked if the the same way DOS based bbs programs do. At that time it is checked if the
user has IEMSI capabilities, if that is true, IEMSI login will be tried. user has IEMSI capabilities, if that is true, IEMSI login will be tried.
If the user is not known, the newuser procedure begins. If the user is not known, the newuser procedure begins.
<P> <P>
If the user login is successfull, his favourite language will be loaded. If the user login is successfull, his favourite language will be loaded.
Then it is checked if the user is the Sysop, if so, the Sysop flag is set. Then it is checked if the user is the Sysop, if so, the Sysop flag is set.
If the user has a blank password, he is asked to create a new password. If the user has a blank password, he is asked to create a new password.
Next it is checked if the user has an Unix account, if not he is forced to Next it is checked if the user has an Unix account, if not he is forced to
create a Unix account. This situation can exist after switching to MBSE BBS create a Unix account. This situation can exist after switching to MBSE BBS
and you have converted your old userbase to the userbase for MBSE BBS. and you have converted your old userbase to the userbase for MBSE BBS.
If the users Date of Birth is invalid, he is forced to enter the right If the users Date of Birth is invalid, he is forced to enter the right
Date of Birth. Date of Birth.
The next check is to see if the user has passed the expiry date, this is a The next check is to see if the user has passed the expiry date, this is a
usefull feature for systems with donating users. usefull feature for systems with donating users.
Finally the access limits are set for the user and time remaining for today and Finally the access limits are set for the user and time remaining for today and
download limits are set. download limits are set.
<P> <P>
After successfull login the user can be presented with a bunch of advertising After successfull login the user can be presented with a bunch of advertising
screens. I will only name the screens without filename extension, as these screens. I will only name the screens without filename extension, as these
screens are searched for in the following order;<br> screens are searched for in the following order;<br>
<ol> <ol>
<li>filename.ans in the users favourite language directory. <li>filename.ans in the users favourite language directory.
<li>filename.ans in the default language directory. <li>filename.ans in the default language directory.
<li>filename.asc in the users favourite language directory. <li>filename.asc in the users favourite language directory.
<li>filename.asc in the default language directory. <li>filename.asc in the default language directory.
<li>If nothing is found, nothing is displayed. <li>If nothing is found, nothing is displayed.
</ol> </ol>
<strong>welcome</strong>. This screen can contain information about the session <strong>mainlogo</strong>. Here you can put a logo or something.
the user has, his download limits, time left etc. <strong>welcome</strong>. This screen can contain information about the session
<P> the user has, his download limits, time left etc.
<strong>welcome1</strong> is shown if the user has show bulletins set to true. <P>
<P> <strong>welcome1</strong> is shown if the user has show bulletins set to true.
<strong>birthday</strong> is shown if the user logs in at his birthday and if he <strong>welcome2</strong> is shown if the user has show bulletins set to true.
has show bullentins set to true. <strong>welcome3</strong> is shown if the user has show bulletins set to true.
<P> <strong>welcome4</strong> is shown if the user has show bulletins set to true.
<strong>dd-mm</strong> is shown if <strong>dd</strong> is the date of today and <strong>welcome5</strong> is shown if the user has show bulletins set to true.
<strong>mm</strong> is the current month and if the user has show bulletins <strong>welcome6</strong> is shown if the user has show bulletins set to true.
set to true. <strong>welcome7</strong> is shown if the user has show bulletins set to true.
<P> <strong>welcome8</strong> is shown if the user has show bulletins set to true.
<strong>sec20</strong> is shown if the user has the security level in the <strong>welcome9</strong> is shown if the user has show bulletins set to true.
filename, level 20 in this example. Als the display bulletins must be set to <P>
true. <strong>birthday</strong> is shown if the user logs in at his birthday and if he
<P> has show bullentins set to true.
<strong>news</strong> is shown if the user has the display bulletins set to <P>
true. <strong>dd-mm</strong> is shown if <strong>dd</strong> is the date of today and
<P> <strong>mm</strong> is the current month and if the user has show bulletins
<strong>onceonly</strong> is shown only if the user has never seen this screen, set to true.
the test is to compare the users last login date against the date of this file. <P>
<P> <strong>sec20</strong> is shown if the user has the security level in the
After all these screens the users Offline Reader areas are checked to see if filename, level 20 in this example. Als the display bulletins must be set to
you as sysop didn't change the message areas. If you made changes, the users true.
setup is adjusted and he will be notified. This means he sees a list <P>
with deleted areas and new areas. <strong>news</strong> is shown if the user has the display bulletins set to
<P> true.
Next if the user has newmail scan set to true all message bases are checked to <P>
see if the user has new mail. This includes a check to see if he has Unix mail. <strong>onceonly</strong> is shown only if the user has never seen this screen,
If there is Unix mail, those mails are retrieved from the POP3 server and stored the test is to compare the users last login date against the date of this file.
in his private mailbox. <P>
If there is new mail for the user, the user sees a list of areas with the messages After all these screens the users Offline Reader areas are checked to see if
in it and he is offered to read and reply these messages. you as sysop didn't change the message areas. If you made changes, the users
<P> setup is adjusted and he will be notified. This means he sees a list
Then if the user has show newfiles set to true and he is not a new bbs user with deleted areas and new areas.
he will see a list of new files you have on your bbs. During this display <P>
he can tag files for later download. Next if the user has newmail scan set to true all message bases are checked to
<P> see if the user has new mail. This includes a check to see if he has Unix mail.
The final setup is to set the users "do not disturb" flag and then the menu If there is Unix mail, those mails are retrieved from the POP3 server and stored
system is started. The menu system will run forever, until the user chooses in his private mailbox.
to logoff, the connection is lost or his daily timelimit is reached. For the If there is new mail for the user, the user sees a list of areas with the messages
possibilities and setup of the menus see in it and he is offered to read and reply these messages.
<A HREF="../menus/index.htm">MBSE BBS Menu System</A> <P>
<P>&nbsp;<P> Then if the user has show newfiles set to true and he is not a new bbs user
he will see a list of new files you have on your bbs. During this display
<H3>Environment.</H3> he can tag files for later download.
<P> <P>
In order to run <strong>mbsebbs</strong> you must set the global variable The final setup is to set the users "do not disturb" flag and then the menu
<strong>$MBSE_ROOT</strong>. This variable must point to the root directory system is started. The menu system will run forever, until the user chooses
of the bbs structure. The main configuration file <strong>config.data</strong> to logoff, the connection is lost or his daily timelimit is reached. For the
must be present in the ~/etc directory. possibilities and setup of the menus see
<P> <A HREF="../menus/index.htm">MBSE BBS Menu System</A>
If the environment variable <strong>CONNECT</strong> is present, a log entry <P>&nbsp;<P>
will be made with the connect speed.
<P> <H3>Environment.</H3>
If the environment variable <strong>CALLER_ID</strong> is present, a log entry <P>
will be made with the caller id. In order to run <strong>mbsebbs</strong> you must set the global variable
<P> <strong>$MBSE_ROOT</strong>. This variable must point to the root directory
If the environment variable <strong>LOGNAME</strong> is present and it is not of the bbs structure. The main configuration file <strong>config.data</strong>
<strong>bbs</strong> then it is assumed that it is a Unixmode login of the must be present in the ~/etc directory.
user who's Unixname is in the <strong>LOGNAME</strong> environment variable. <P>
This variable is set by the /bin/login program, so users that telnet to your If the environment variable <strong>CONNECT</strong> is present, a log entry
bbs or login via <strong>mgetty</strong> and login with their Unixname will will be made with the connect speed.
set this. If the <strong>LOGNAME</strong> is <strong>bbs</strong> then the <P>
user is prompted to enter his Fidonet style name. By the way, you can change If the environment variable <strong>CALLER_ID</strong> is present, a log entry
that default <b>bbs</b> username with <b>mbsetup</b>. will be made with the caller id.
<P>&nbsp;<P> <P>
If the environment variable <strong>LOGNAME</strong> is present and it is not
<strong>bbs</strong> then it is assumed that it is a Unixmode login of the
<A HREF="index.htm"><IMG SRC="../images/larrow.gif" ALT="Index" Border="0" width="40" height="30"> Back to index</A>&nbsp; user who's Unixname is in the <strong>LOGNAME</strong> environment variable.
<A HREF="../index.htm"><IMG SRC="../images/b_arrow.gif" ALT="Main" Border="0" width="33" height="35"> Back to Main index</A> This variable is set by the /bin/login program, so users that telnet to your
</BLOCKQUOTE> bbs or login via <strong>mgetty</strong> and login with their Unixname will
</BODY> set this. If the <strong>LOGNAME</strong> is <strong>bbs</strong> then the
</HTML> user is prompted to enter his Fidonet style name. By the way, you can change
that default <b>bbs</b> username with <b>mbsetup</b>.
<P>&nbsp;<P>
<A HREF="index.htm"><IMG SRC="../images/larrow.gif" ALT="Index" Border="0" width="40" height="30"> Back to index</A>&nbsp;
<A HREF="../index.htm"><IMG SRC="../images/b_arrow.gif" ALT="Main" Border="0" width="33" height="35"> Back to Main index</A>
</BLOCKQUOTE>
</BODY>
</HTML>

View File

@ -475,3 +475,5 @@
474 newuser.c change.c |Your address, maximum 3 lines (only visible for the sysop): 474 newuser.c change.c |Your address, maximum 3 lines (only visible for the sysop):
475 newuser.c change.c |You need to enter your address here 475 newuser.c change.c |You need to enter your address here
476 change.c |Old address: 476 change.c |Old address:
477 mail.c |Use your alias (
478 mail.c YN|) to post this message [Y/n]:

View File

@ -475,3 +475,5 @@ JN|Bestand meesturen [j/N]:
|Geef adres, maximaal 3 regels (alleen zichtbaar voor de sysop): |Geef adres, maximaal 3 regels (alleen zichtbaar voor de sysop):
|U moet hier Uw adres opgeven |U moet hier Uw adres opgeven
|Oude adres: |Oude adres:
|Use your alias (
YN|) to post this message [Y/n]:

View File

@ -475,3 +475,5 @@ YN|Attach file [y/N]:
|Your address, maximum 3 lines (only visible for the sysop): |Your address, maximum 3 lines (only visible for the sysop):
|You need to enter your address here |You need to enter your address here
|Old address: |Old address:
|Use your alias (
YN|) to post this message [Y/n]:

View File

@ -475,3 +475,5 @@ YN|Adxuntar ficheiro [s/N]:
|Your address, maximum 3 lines (only visible for the sysop): |Your address, maximum 3 lines (only visible for the sysop):
|You need to enter your address here |You need to enter your address here
|Old address: |Old address:
|Use your alias (
YN|) to post this message [Y/n]:

View File

@ -475,3 +475,5 @@ SN|Allega file [s/N]:
|Your address, maximum 3 lines (only visible for the sysop): |Your address, maximum 3 lines (only visible for the sysop):
|You need to enter your address here |You need to enter your address here
|Old address: |Old address:
|Use your alias (
YN|) to post this message [Y/n]:

View File

@ -475,3 +475,5 @@ YN|Adjuntar fichero [s/N]:
|Your address, maximum 3 lines (only visible for the sysop): |Your address, maximum 3 lines (only visible for the sysop):
|You need to enter your address here |You need to enter your address here
|Old address: |Old address:
|Use your alias (
YN|) to post this message [Y/n]:

View File

@ -1,8 +1,7 @@
/***************************************************************************** /*****************************************************************************
* *
* File ..................: bbs/mail.c * $Id$
* Purpose ...............: Message reading and writing. * Purpose ...............: Message reading and writing.
* Last modification date : 26-Oct-2001
* Todo ..................: Implement message groups. * Todo ..................: Implement message groups.
* *
***************************************************************************** *****************************************************************************
@ -132,7 +131,7 @@ int Post_Allowed(void)
{ {
if (msgs.MsgKinds == RONLY) { if (msgs.MsgKinds == RONLY) {
/* Message area is Readonly */ /* Message area is Readonly */
pout(12, 0, (char *) Language(437)); pout(LIGHTRED, BLACK, (char *) Language(437));
fflush(stdout); fflush(stdout);
sleep(3); sleep(3);
return FALSE; return FALSE;
@ -142,6 +141,41 @@ int Post_Allowed(void)
/*
* Check if Alias is allowed, and if so if the user
* wants to use this in the From: field.
*/
int Alias_Option(void);
int Alias_Option(void)
{
int rc = TRUE;
if (!msgs.Aliases)
return FALSE;
if (strlen(exitinfo.sHandle) == 0)
return FALSE;
/* Use your alias ( */
pout(CYAN, BLACK, (char *)Language(477));
pout(CYAN, BLACK, exitinfo.sHandle);
/* YN|) to post this message [Y/n]: */
pout(CYAN, BLACK, (char *)Language(478));
colour(CFG.MsgInputColourF, CFG.MsgInputColourB);
fflush(stdout);
alarm_on();
if (toupper(Getone()) == Keystroke(478, 1)) {
rc = FALSE;
printf("%c", Keystroke(478, 1));
} else {
printf("%c", Keystroke(478, 0));
}
Enter(2);
fflush(stdout);
return rc;
}
/* /*
* Check if netmail may be send crash or immediate. * Check if netmail may be send crash or immediate.
*/ */
@ -161,7 +195,7 @@ int Crash_Option(faddr *Dest)
if (((Nlent = getnlent(Dest)) != NULL) && (Nlent->addr.zone)) { if (((Nlent = getnlent(Dest)) != NULL) && (Nlent->addr.zone)) {
if (Nlent->oflags & OL_CM) { if (Nlent->oflags & OL_CM) {
/* Crash [y/N]: */ /* Crash [y/N]: */
pout(3, 0, (char *)Language(461)); pout(CYAN, BLACK, (char *)Language(461));
colour(CFG.MsgInputColourF, CFG.MsgInputColourB); colour(CFG.MsgInputColourF, CFG.MsgInputColourB);
fflush(stdout); fflush(stdout);
alarm_on(); alarm_on();
@ -172,7 +206,7 @@ int Crash_Option(faddr *Dest)
printf("%c", Keystroke(461, 1)); printf("%c", Keystroke(461, 1));
} else { } else {
/* Warning: node is not CM, send Immediate [y/N]: */ /* Warning: node is not CM, send Immediate [y/N]: */
pout(3, 0, (char *)Language(462)); pout(CYAN, BLACK, (char *)Language(462));
colour(CFG.MsgInputColourF, CFG.MsgInputColourB); colour(CFG.MsgInputColourF, CFG.MsgInputColourB);
fflush(stdout); fflush(stdout);
alarm_on(); alarm_on();
@ -203,7 +237,7 @@ int IsPrivate(void)
if (msgs.MsgKinds == BOTH) { if (msgs.MsgKinds == BOTH) {
Enter(1); Enter(1);
/* Private [y/N]: */ /* Private [y/N]: */
pout(3, 0, (char *) Language(163)); pout(CYAN, BLACK, (char *) Language(163));
fflush(stdout); fflush(stdout);
alarm_on(); alarm_on();
if (toupper(Getone()) == Keystroke(163, 0)) { if (toupper(Getone()) == Keystroke(163, 0)) {
@ -243,7 +277,7 @@ void Check_Attach(void)
while (TRUE) { while (TRUE) {
Enter(1); Enter(1);
/* Attach file [y/N]: */ /* Attach file [y/N]: */
pout(3, 0, (char *)Language(463)); pout(CYAN, BLACK, (char *)Language(463));
fflush(stdout); fflush(stdout);
alarm_on(); alarm_on();
if (toupper(Getone()) == Keystroke(463, 0)) { if (toupper(Getone()) == Keystroke(463, 0)) {
@ -251,7 +285,7 @@ void Check_Attach(void)
printf("%c", Keystroke(463, 0)); printf("%c", Keystroke(463, 0));
Enter(1); Enter(1);
/* Please enter filename: */ /* Please enter filename: */
pout(14, 0, (char *)Language(245)); pout(YELLOW, BLACK, (char *)Language(245));
colour(CFG.MsgInputColourF, CFG.MsgInputColourB); colour(CFG.MsgInputColourF, CFG.MsgInputColourB);
fflush(stdout); fflush(stdout);
alarm_on(); alarm_on();
@ -372,15 +406,28 @@ void Post_Msg()
Msg_New(); Msg_New();
colour(9, 0); colour(LIGHTBLUE, BLACK);
/* Posting message in area: */ /* Posting message in area: */
printf("\n%s\"%s\"\n", (char *) Language(156), sMsgAreaDesc); printf("\n%s\"%s\"\n", (char *) Language(156), sMsgAreaDesc);
pout(14, 0, (char *) Language(157));
if (msgs.Type == NEWS) { if (Alias_Option()) {
if (CFG.EmailMode == E_NOISP) { /*
* Set Handle
*/
strcpy(Msg.From, exitinfo.sHandle);
tlcap(Msg.From); // Do we want this???
/* From : */
pout(YELLOW, BLACK, (char *) Language(157));
} else {
/*
* Normal from address, no alias
*/
/* From : */
pout(YELLOW, BLACK, (char *) Language(157));
if (msgs.Type == NEWS) {
if (CFG.EmailMode != E_PRMISP) {
/* /*
* If not connected to the internet, use Fido style addressing. * If no internet mail domain, use fidonet addressing.
*/ */
Dest = fido2faddr(CFG.EmailFidoAka); Dest = fido2faddr(CFG.EmailFidoAka);
strcpy(Msg.From, exitinfo.sUserName); strcpy(Msg.From, exitinfo.sUserName);
@ -388,19 +435,25 @@ void Post_Msg()
} else { } else {
sprintf(Msg.From, "%s@%s (%s)", exitinfo.Name, CFG.sysdomain, exitinfo.sUserName); sprintf(Msg.From, "%s@%s (%s)", exitinfo.Name, CFG.sysdomain, exitinfo.sUserName);
} }
} else { } else {
strcpy(Msg.From, exitinfo.sUserName); strcpy(Msg.From, exitinfo.sUserName);
tlcap(Msg.From); tlcap(Msg.From);
}
} }
colour(CFG.MsgInputColourF, CFG.MsgInputColourB);
printf("%s", Msg.From); pout(CFG.MsgInputColourF, CFG.MsgInputColourB, Msg.From);
Syslog('b', "Setting From: %s", Msg.From); Syslog('b', "Setting From: %s", Msg.From);
if (msgs.Type != NEWS) { if ((msgs.Type == NEWS) || (msgs.Type == LIST)) {
/*
* Newsmode or maillist mode, automatic addressing to All.
* */
strcpy(Msg.To, "All");
} else {
while (TRUE) { while (TRUE) {
Enter(1); Enter(1);
/* To : */ /* To : */
pout(14, 0, (char *) Language(158)); pout(YELLOW, BLACK, (char *) Language(158));
colour(CFG.MsgInputColourF, CFG.MsgInputColourB); colour(CFG.MsgInputColourF, CFG.MsgInputColourB);
Getname(Msg.To, 35); Getname(Msg.To, 35);
@ -426,14 +479,14 @@ void Post_Msg()
*/ */
if (msgs.Type == LOCALMAIL) { if (msgs.Type == LOCALMAIL) {
/* Verifying user ... */ /* Verifying user ... */
pout(3, 0, (char *) Language(159)); pout(CYAN, BLACK, (char *) Language(159));
x = CheckUser(Msg.To); x = CheckUser(Msg.To);
} else } else
x = TRUE; x = TRUE;
} }
} else if (msgs.Type == NETMAIL) { } else if (msgs.Type == NETMAIL) {
x = FALSE; x = FALSE;
pout(14, 0, (char *)"Address : "); pout(YELLOW, BLACK, (char *)"Address : ");
FidoNode = calloc(61, sizeof(char)); FidoNode = calloc(61, sizeof(char));
colour(CFG.MsgInputColourF, CFG.MsgInputColourB); colour(CFG.MsgInputColourF, CFG.MsgInputColourB);
GetstrC(FidoNode, 60); GetstrC(FidoNode, 60);
@ -442,7 +495,7 @@ void Post_Msg()
point = Dest->point; point = Dest->point;
Dest->point = 0; Dest->point = 0;
if (((Nlent = getnlent(Dest)) != NULL) && (Nlent->addr.zone)) { if (((Nlent = getnlent(Dest)) != NULL) && (Nlent->addr.zone)) {
colour(14, 0); colour(YELLOW, BLACK);
if (point) if (point)
printf("Boss : "); printf("Boss : ");
else else
@ -470,7 +523,7 @@ void Post_Msg()
} else { } else {
Dest->point = point; Dest->point = point;
printf("\r"); printf("\r");
pout(3, 0, (char *) Language(241)); pout(CYAN, BLACK, (char *) Language(241));
fflush(stdout); fflush(stdout);
alarm_on(); alarm_on();
if (toupper(Getone()) == Keystroke(241, 0)) { if (toupper(Getone()) == Keystroke(241, 0)) {
@ -489,20 +542,15 @@ void Post_Msg()
if(!x) { if(!x) {
printf("\r"); printf("\r");
/* User not found. Try again, or (Enter) to quit */ /* User not found. Try again, or (Enter) to quit */
pout(3, 0, (char *) Language(160)); pout(CYAN, BLACK, (char *) Language(160));
} else } else
break; break;
} }
} else {
/*
* Newsmode, automatic addressing to All.
*/
strcpy(Msg.To, "All");
} }
Enter(1); Enter(1);
/* Subject : */ /* Subject : */
pout(14, 0, (char *) Language(161)); pout(YELLOW, BLACK, (char *) Language(161));
colour(CFG.MsgInputColourF, CFG.MsgInputColourB); colour(CFG.MsgInputColourF, CFG.MsgInputColourB);
fflush(stdout); fflush(stdout);
alarm_on(); alarm_on();
@ -512,7 +560,7 @@ void Post_Msg()
if((strcmp(Msg.Subject, "")) == 0) { if((strcmp(Msg.Subject, "")) == 0) {
Enter(1); Enter(1);
/* Abort Message [y/N] ?: */ /* Abort Message [y/N] ?: */
pout(3, 0, (char *) Language(162)); pout(CYAN, BLACK, (char *) Language(162));
fflush(stdout); fflush(stdout);
alarm_on(); alarm_on();
@ -646,27 +694,28 @@ void ShowMsgHdr()
static char Buf1[35], Buf2[35], Buf3[81]; static char Buf1[35], Buf2[35], Buf3[81];
struct tm *tm; struct tm *tm;
time_t now; time_t now;
int color;
Buf1[0] = '\0'; Buf1[0] = '\0';
Buf2[0] = '\0'; Buf2[0] = '\0';
Buf3[0] = '\0'; Buf3[0] = '\0';
clear(); clear();
colour(1,7); colour(BLUE, LIGHTGRAY);
printf(" %-70s", sMsgAreaDesc); printf(" %-70s", sMsgAreaDesc);
colour(4,7); colour(RED, LIGHTGRAY);
printf("#%-5lu\n", Msg.Id); printf("#%-5lu\n", Msg.Id);
/* Date : */ /* Date : */
pout(14, 0, (char *) Language(206)); pout(YELLOW, BLACK, (char *) Language(206));
colour(10, 0); colour(GREEN, BLACK);
/* Use intermediate variable to prevent SIGBUS on Sparc's */ /* Use intermediate variable to prevent SIGBUS on Sparc's */
now = Msg.Written; now = Msg.Written;
tm = gmtime(&now); tm = gmtime(&now);
printf("%02d-%02d-%d %02d:%02d:%02d", tm->tm_mday, tm->tm_mon+1, printf("%02d-%02d-%d %02d:%02d:%02d", tm->tm_mday, tm->tm_mon+1,
tm->tm_year+1900, tm->tm_hour, tm->tm_min, tm->tm_sec); tm->tm_year+1900, tm->tm_hour, tm->tm_min, tm->tm_sec);
colour(12, 0); colour(LIGHTRED, BLACK);
if (Msg.Local) printf(" Local"); if (Msg.Local) printf(" Local");
if (Msg.Intransit) printf(" Transit"); if (Msg.Intransit) printf(" Transit");
if (Msg.Private) printf(" Priv."); if (Msg.Private) printf(" Priv.");
@ -701,38 +750,46 @@ void ShowMsgHdr()
printf("\n"); printf("\n");
/* From : */ /* From : */
pout(14,0, (char *) Language(209)); pout(YELLOW, BLACK, (char *) Language(209));
colour(10, 0); if (IsMe(Msg.From))
color = LIGHTGREEN;
else
color = GREEN;
colour(color++, BLACK);
printf("%s ", Msg.From); printf("%s ", Msg.From);
if (iMsgAreaType != LOCALMAIL) { if (iMsgAreaType != LOCALMAIL) {
colour(11, 0); colour(color, BLACK);
printf("(%s)", Msg.FromAddress); printf("(%s)", Msg.FromAddress);
} }
printf("\n"); printf("\n");
/* To : */ /* To : */
pout(14,0, (char *) Language(208)); pout(YELLOW, BLACK, (char *) Language(208));
colour(10, 0); if (IsMe(Msg.To))
color = LIGHTGREEN;
else
color = GREEN;
colour(color++, BLACK);
printf("%s ", Msg.To); printf("%s ", Msg.To);
if (iMsgAreaType == NETMAIL) { if (iMsgAreaType == NETMAIL) {
colour(11, 0); colour(color, BLACK);
printf("(%s)", Msg.ToAddress); printf("(%s)", Msg.ToAddress);
} }
printf("\n"); printf("\n");
/* Subject : */ /* Subject : */
pout(14,0, (char *) Language(210)); pout(YELLOW, BLACK, (char *) Language(210));
colour(10, 0); colour(GREEN, BLACK);
printf("%s\n", Msg.Subject); printf("%s\n", Msg.Subject);
colour(CFG.HiliteF, CFG.HiliteB); colour(CFG.HiliteF, CFG.HiliteB);
colour(14, 1); colour(YELLOW, BLUE);
if (Msg.Reply) if (Msg.Reply)
sprintf(Buf1, "\"+\" %s %lu", (char *)Language(211), Msg.Reply); sprintf(Buf1, "\"+\" %s %lu", (char *)Language(211), Msg.Reply);
if (Msg.Original) if (Msg.Original)
sprintf(Buf2, " \"-\" %s %lu", (char *)Language(212), Msg.Original); sprintf(Buf2, " \"-\" %s %lu", (char *)Language(212), Msg.Original);
sprintf(Buf3, "%s%s ", Buf1, Buf2); sprintf(Buf3, "%s%s ", Buf1, Buf2);
colour(14, 1); colour(YELLOW, BLUE);
printf("%78s \n", Buf3); printf("%78s \n", Buf3);
} }
@ -755,7 +812,7 @@ int Export_a_Msg(unsigned long Num)
* The area data is already set, so we can do the next things * The area data is already set, so we can do the next things
*/ */
if (MsgBase.Total == 0) { if (MsgBase.Total == 0) {
colour(15, 0); colour(WHITE, BLACK);
/* There are no messages in this area */ /* There are no messages in this area */
printf("\n%s\n\n", (char *) Language(205)); printf("\n%s\n\n", (char *) Language(205));
sleep(3); sleep(3);
@ -769,7 +826,7 @@ int Export_a_Msg(unsigned long Num)
if (!Msg_ReadHeader(Num)) { if (!Msg_ReadHeader(Num)) {
perror(""); perror("");
colour(15, 0); colour(WHITE, BLACK);
printf("\n%s\n\n", (char *)Language(77)); printf("\n%s\n\n", (char *)Language(77));
Msg_Close(); Msg_Close();
sleep(3); sleep(3);
@ -853,7 +910,7 @@ int Read_a_Msg(unsigned long Num, int UpdateLR)
* The area data is already set, so we can do the next things * The area data is already set, so we can do the next things
*/ */
if (MsgBase.Total == 0) { if (MsgBase.Total == 0) {
colour(15, 0); colour(WHITE, BLACK);
/* There are no messages in this area */ /* There are no messages in this area */
printf("\n%s\n\n", (char *) Language(205)); printf("\n%s\n\n", (char *) Language(205));
sleep(3); sleep(3);
@ -867,7 +924,7 @@ int Read_a_Msg(unsigned long Num, int UpdateLR)
if (!Msg_ReadHeader(Num)) { if (!Msg_ReadHeader(Num)) {
perror(""); perror("");
colour(15, 0); colour(WHITE, BLACK);
printf("\n%s\n\n", (char *)Language(77)); printf("\n%s\n\n", (char *)Language(77));
Msg_Close(); Msg_Close();
sleep(3); sleep(3);
@ -1005,7 +1062,8 @@ void Read_Msgs()
colour(CFG.TextColourF, CFG.TextColourB); colour(CFG.TextColourF, CFG.TextColourB);
/* Message area \"%s\" contains %lu messages. */ /* Message area \"%s\" contains %lu messages. */
printf("\n%s\"%s\" %s%lu %s", (char *) Language(221), sMsgAreaDesc, (char *) Language(222), MsgBase.Total, (char *) Language(223)); printf("\n%s\"%s\" %s%lu %s", (char *) Language(221), sMsgAreaDesc,
(char *) Language(222), MsgBase.Total, (char *) Language(223));
/* /*
* Check for lastread pointer, suggest lastread number for start. * Check for lastread pointer, suggest lastread number for start.
@ -1027,7 +1085,7 @@ void Read_Msgs()
Start = MsgBase.Highest; Start = MsgBase.Highest;
} }
colour(15, 0); colour(WHITE, BLACK);
/* Please enter a message between */ /* Please enter a message between */
printf("\n%s(%lu - %lu)", (char *) Language(224), MsgBase.Lowest, MsgBase.Highest); printf("\n%s(%lu - %lu)", (char *) Language(224), MsgBase.Lowest, MsgBase.Highest);
/* Message number [ */ /* Message number [ */
@ -1060,7 +1118,7 @@ int ReadPanel()
WhosDoingWhat(READ_POST); WhosDoingWhat(READ_POST);
colour(15, 4); colour(WHITE, RED);
if (msgs.UsrDelete || exitinfo.Security.level >= CFG.sysop_access) { if (msgs.UsrDelete || exitinfo.Security.level >= CFG.sysop_access) {
/* (A)gain, (N)ext, (L)ast, (R)eply, (E)nter, (D)elete, (Q)uit, e(X)port */ /* (A)gain, (N)ext, (L)ast, (R)eply, (E)nter, (D)elete, (Q)uit, e(X)port */
printf("%s", (char *) Language(214)); printf("%s", (char *) Language(214));
@ -1130,7 +1188,7 @@ int ReadPanel()
} }
} else { } else {
/* Next */ /* Next */
pout(15, 0, (char *) Language(216)); pout(WHITE, BLACK, (char *) Language(216));
if (LastNum < MsgBase.Highest) if (LastNum < MsgBase.Highest)
LastNum++; LastNum++;
else else
@ -1183,9 +1241,9 @@ void Reply_Msg(int IsReply)
x = 0; x = 0;
WhosDoingWhat(READ_POST); WhosDoingWhat(READ_POST);
clear(); clear();
colour(1,7); colour(BLUE, LIGHTGRAY);
printf(" %-71s", sMsgAreaDesc); printf(" %-71s", sMsgAreaDesc);
colour(4,7); colour(RED, LIGHTGRAY);
printf("#%-5lu", MsgBase.Highest + 1); printf("#%-5lu", MsgBase.Highest + 1);
colour(CFG.HiliteF, CFG.HiliteB); colour(CFG.HiliteF, CFG.HiliteB);
@ -1201,21 +1259,21 @@ void Reply_Msg(int IsReply)
/* From : */ /* From : */
sprintf(Msg.From, "%s", exitinfo.sUserName); sprintf(Msg.From, "%s", exitinfo.sUserName);
pout(14, 0, (char *) Language(209)); pout(YELLOW, BLACK, (char *) Language(209));
pout(CFG.MsgInputColourF, CFG.MsgInputColourB, Msg.From); pout(CFG.MsgInputColourF, CFG.MsgInputColourB, Msg.From);
Enter(1); Enter(1);
/* To : */ /* To : */
sprintf(Msg.To, "%s", to); sprintf(Msg.To, "%s", to);
pout(14, 0, (char *) Language(208)); pout(YELLOW, BLACK, (char *) Language(208));
pout(CFG.MsgInputColourF, CFG.MsgInputColourB, Msg.To); pout(CFG.MsgInputColourF, CFG.MsgInputColourB, Msg.To);
Enter(1); Enter(1);
/* Enter to keep Subject. */ /* Enter to keep Subject. */
pout(12, 0, (char *) Language(219)); pout(LIGHTRED, BLACK, (char *) Language(219));
Enter(1); Enter(1);
/* Subject : */ /* Subject : */
pout(14, 0, (char *) Language(210)); pout(YELLOW, BLACK, (char *) Language(210));
sprintf(Msg.Subject, "%s", subj); sprintf(Msg.Subject, "%s", subj);
pout(CFG.MsgInputColourF, CFG.MsgInputColourB, Msg.Subject); pout(CFG.MsgInputColourF, CFG.MsgInputColourB, Msg.Subject);
@ -1342,7 +1400,7 @@ void QuickScan_Msgs()
if (MsgBase.Total == 0) { if (MsgBase.Total == 0) {
Enter(1); Enter(1);
/* There are no messages in this area. */ /* There are no messages in this area. */
pout(15, 0, (char *) Language(205)); pout(WHITE, BLACK, (char *) Language(205));
Enter(3); Enter(3);
sleep(3); sleep(3);
return; return;
@ -1350,26 +1408,26 @@ void QuickScan_Msgs()
clear(); clear();
/* # From To Subject */ /* # From To Subject */
poutCR(14, 1, (char *) Language(220)); poutCR(YELLOW, BLUE, (char *) Language(220));
if (Msg_Open(sMsgAreaBase)) { if (Msg_Open(sMsgAreaBase)) {
for (i = MsgBase.Lowest; i <= MsgBase.Highest; i++) { for (i = MsgBase.Lowest; i <= MsgBase.Highest; i++) {
if (Msg_ReadHeader(i)) { if (Msg_ReadHeader(i)) {
colour(15, 0); colour(WHITE, BLACK);
printf("%-6lu", Msg.Id); printf("%-6lu", Msg.Id);
if (IsMe(Msg.From)) if (IsMe(Msg.From))
colour(11, 0); colour(LIGHTCYAN, BLACK);
else else
colour(3, 0); colour(CYAN, BLACK);
printf("%s ", padleft(Msg.From, 20, ' ')); printf("%s ", padleft(Msg.From, 20, ' '));
if (IsMe(Msg.To)) if (IsMe(Msg.To))
colour(10, 0); colour(LIGHTGREEN, BLACK);
else else
colour(2, 0); colour(GREEN, BLACK);
printf("%s ", padleft(Msg.To, 20, ' ')); printf("%s ", padleft(Msg.To, 20, ' '));
colour(5, 0); colour(MAGENTA, BLACK);
printf("%s", padleft(Msg.Subject, 31, ' ')); printf("%s", padleft(Msg.Subject, 31, ' '));
printf("\n"); printf("\n");
FoundMsg = TRUE; FoundMsg = TRUE;
@ -1383,7 +1441,7 @@ void QuickScan_Msgs()
if(!FoundMsg) { if(!FoundMsg) {
Enter(1); Enter(1);
/* There are no messages in this area. */ /* There are no messages in this area. */
pout(10, 0, (char *) Language(205)); pout(LIGHTGREEN, BLACK, (char *) Language(205));
Enter(2); Enter(2);
sleep(3); sleep(3);
} }
@ -1545,13 +1603,13 @@ void MsgArea_List(char *Option)
if ((Access(exitinfo.Security, msgs.RDSec)) && (msgs.Active)) { if ((Access(exitinfo.Security, msgs.RDSec)) && (msgs.Active)) {
msgs.Name[31] = '\0'; msgs.Name[31] = '\0';
colour(15,0); colour(WHITE, BLACK);
printf("%5d", Recno + 1); printf("%5d", Recno + 1);
colour(9,0); colour(LIGHTBLUE, BLACK);
printf(" %c ", 46); printf(" %c ", 46);
colour(3,0); colour(CYAN, BLACK);
printf("%-31s", msgs.Name); printf("%-31s", msgs.Name);
iAreaCount++; iAreaCount++;
@ -1629,7 +1687,7 @@ void MsgArea_List(char *Option)
/* /*
* Invalid area specified - Please try again ... * Invalid area specified - Please try again ...
*/ */
pout(12, 0, (char *) Language(233)); pout(LIGHTRED, BLACK, (char *) Language(233));
Enter(2); Enter(2);
Pause(); Pause();
fclose(pAreas); fclose(pAreas);
@ -1648,19 +1706,19 @@ void MsgArea_List(char *Option)
if((strlen(msgs.Password)) > 2) { if((strlen(msgs.Password)) > 2) {
Enter(2); Enter(2);
/* Please enter Area Password: */ /* Please enter Area Password: */
pout(15, 0, (char *) Language(233)); pout(WHITE, BLACK, (char *) Language(233));
fflush(stdout); fflush(stdout);
colour(CFG.InputColourF, CFG.InputColourB); colour(CFG.InputColourF, CFG.InputColourB);
GetstrC(temp, 20); GetstrC(temp, 20);
if((strcmp(temp, msgs.Password)) != 0) { if((strcmp(temp, msgs.Password)) != 0) {
Enter(1); Enter(1);
pout(15, 0, (char *) Language(234)); pout(WHITE, BLACK, (char *) Language(234));
Syslog('!', "Incorrect Message Area # %d password given: %s", iMsgAreaNumber, temp); Syslog('!', "Incorrect Message Area # %d password given: %s", iMsgAreaNumber, temp);
SetMsgArea(iOldArea); SetMsgArea(iOldArea);
} else { } else {
Enter(1); Enter(1);
pout(15, 0, (char *) Language(235)); pout(WHITE, BLACK, (char *) Language(235));
Enter(2); Enter(2);
} }
Pause(); Pause();
@ -1679,7 +1737,7 @@ void Delete_MsgNum(unsigned long MsgNum)
{ {
int Result = FALSE; int Result = FALSE;
pout(12, 0, (char *) Language(230)); pout(LIGHTRED, BLACK, (char *) Language(230));
if (Msg_Open(sMsgAreaBase)) { if (Msg_Open(sMsgAreaBase)) {
if (Msg_Lock(15L)) { if (Msg_Lock(15L)) {
@ -1772,9 +1830,9 @@ void CheckMail()
clear(); clear();
/* Checking your mail box ... */ /* Checking your mail box ... */
language(10, 0, 150); language(LIGHTGREEN, BLACK, 150);
Enter(2); Enter(2);
Color = 9; Color = LIGHTBLUE;
fflush(stdout); fflush(stdout);
/* /*
@ -1791,10 +1849,9 @@ void CheckMail()
temp = calloc(PATH_MAX, sizeof(char)); temp = calloc(PATH_MAX, sizeof(char));
if (exitinfo.Email && strlen(exitinfo.Password)) { if (exitinfo.Email && strlen(exitinfo.Password)) {
check_popmail(exitinfo.Name, exitinfo.Password); check_popmail(exitinfo.Name, exitinfo.Password);
colour(Color, 0); colour(Color++, BLACK);
printf("\re-mail Private e-mail mailbox"); printf("\re-mail Private e-mail mailbox");
fflush(stdout); fflush(stdout);
Color++;
Count = 0; Count = 0;
sprintf(temp, "%s/%s/mailbox", CFG.bbs_usersdir, exitinfo.Name); sprintf(temp, "%s/%s/mailbox", CFG.bbs_usersdir, exitinfo.Name);
SetEmailArea((char *)"mailbox"); SetEmailArea((char *)"mailbox");
@ -1860,10 +1917,10 @@ void CheckMail()
SetMsgArea(iMsgAreaNumber); SetMsgArea(iMsgAreaNumber);
sprintf(temp, "%d", iMsgAreaNumber + 1); sprintf(temp, "%d", iMsgAreaNumber + 1);
colour(Color, 0); colour(Color, 0);
if (Color < 15) if (Color < WHITE)
Color++; Color++;
else else
Color = 9; Color = LIGHTBLUE;
printf("\r%6s %-40s", temp, sMsgAreaDesc); printf("\r%6s %-40s", temp, sMsgAreaDesc);
fflush(stdout); fflush(stdout);
Count = 0; Count = 0;
@ -1914,7 +1971,7 @@ void CheckMail()
putchar('\r'); putchar('\r');
if (Found) { if (Found) {
colour(14, 0); colour(YELLOW, BLACK);
/* You have messages, read your mail now? [Y/n]: */ /* You have messages, read your mail now? [Y/n]: */
printf("\n%s%d %s", (char *) Language(142), Found, (char *) Language(143)); printf("\n%s%d %s", (char *) Language(142), Found, (char *) Language(143));
colour(CFG.InputColourF, CFG.InputColourB); colour(CFG.InputColourF, CFG.InputColourB);
@ -1963,7 +2020,7 @@ void CheckMail()
} }
} }
} else { } else {
language(12, 0, 144); language(LIGHTRED, BLACK, 144);
Enter(1); Enter(1);
sleep(3); sleep(3);
} /* if (Found) */ } /* if (Found) */
@ -1994,7 +2051,7 @@ void MailStatus()
OldMsgArea = iMsgAreaNumber; OldMsgArea = iMsgAreaNumber;
iMsgAreaNumber = 0; iMsgAreaNumber = 0;
clear(); clear();
colour(14, 1); colour(YELLOW, BLUE);
/* Area Type Description Messages Personal */ /* Area Type Description Messages Personal */
printf("%-79s", (char *)Language(226)); printf("%-79s", (char *)Language(226));
Enter(1); Enter(1);
@ -2012,16 +2069,16 @@ void MailStatus()
case 2: SetEmailArea((char *)"trash"); case 2: SetEmailArea((char *)"trash");
break; break;
} }
colour(12, 0); colour(LIGHTRED, BLACK);
printf(" Email"); printf(" Email");
colour(11, 0); colour(LIGHTCYAN, BLACK);
printf(" %-40s", Language(467 + i)); printf(" %-40s", Language(467 + i));
colour(14, 0); colour(YELLOW, BLACK);
if (EmailBase.Highest) if (EmailBase.Highest)
printf(" %8lu", EmailBase.Highest - EmailBase.Lowest + 1); printf(" %8lu", EmailBase.Highest - EmailBase.Lowest + 1);
else else
printf(" 0"); printf(" 0");
colour(9, 0); colour(LIGHTBLUE, BLACK);
if (EmailBase.Highest) if (EmailBase.Highest)
printf(" %8lu\n", EmailBase.Highest - EmailBase.Lowest + 1); printf(" %8lu\n", EmailBase.Highest - EmailBase.Lowest + 1);
else else
@ -2050,9 +2107,9 @@ void MailStatus()
if ((msgs.Active) && (exitinfo.Security.level >= msgs.RDSec.level)) { if ((msgs.Active) && (exitinfo.Security.level >= msgs.RDSec.level)) {
SetMsgArea(iMsgAreaNumber); SetMsgArea(iMsgAreaNumber);
sprintf(temp, "%d", iMsgAreaNumber + 1); sprintf(temp, "%d", iMsgAreaNumber + 1);
colour(15, 0); colour(WHITE, BLACK);
printf("%5s", temp); printf("%5s", temp);
colour(12, 0); colour(LIGHTRED, BLACK);
switch(msgs.Type) { switch(msgs.Type) {
case LOCALMAIL: case LOCALMAIL:
printf(" Local"); printf(" Local");
@ -2070,7 +2127,7 @@ void MailStatus()
printf(" News "); printf(" News ");
break; break;
} }
colour(11, 0); colour(LIGHTCYAN, BLACK);
printf(" %-40s", sMsgAreaDesc); printf(" %-40s", sMsgAreaDesc);
Count = 0; Count = 0;
@ -2084,12 +2141,12 @@ void MailStatus()
Msg_Close(); Msg_Close();
} else } else
WriteError("Error open JAM %s", sMsgAreaBase); WriteError("Error open JAM %s", sMsgAreaBase);
colour(14, 0); colour(YELLOW, BLACK);
if (MsgBase.Highest) if (MsgBase.Highest)
printf(" %8lu", MsgBase.Highest - MsgBase.Lowest + 1); printf(" %8lu", MsgBase.Highest - MsgBase.Lowest + 1);
else else
printf(" 0"); printf(" 0");
colour(9, 0); colour(LIGHTBLUE, BLACK);
printf(" %8d\n", Count); printf(" %8d\n", Count);
if (LC(1)) if (LC(1))
break; break;
@ -2156,4 +2213,3 @@ void SetMsgArea(unsigned long AreaNum)
} }