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:
Changed language prompt 71.
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:
SAVE:
@ -4253,6 +4254,7 @@ v0.33.19 26-Oct-2001
- Fixed display file with more that stopped after every line.
- Added display file "mainlogo" before the "welcome" file.
- Added display files "welcome2..9" after "welcome1" file.
Posting message with users alias is now possible.
mbtask:
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.
----------------------------
@ -21,7 +23,7 @@ mbsebbs:
It works with direct serial connections. Note, this also happens
on busy LAN's between Linux boxes with normal xterm's.
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
mail, must be user selectable. see remarks of William McBrine.
@ -35,8 +37,6 @@ mbsebbs:
N: Check for tagged files before logoff
N: Can't post messages to users handle.
L: Implement telnet door.
L: Spell checker in full screen editor.

View File

@ -1,149 +1,158 @@
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=ISO 8859-1">
<META http-equiv="Content-Style-Type" content="text/css">
<META name="author" lang="en" "content="Michiel Broek">
<META name="copyright" lang="en" content="Copyright Michiel Broek">
<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">
<TITLE>MBSE BBS Programs - mbsebbs - The main BBS program.</TITLE>
<LINK rel=stylesheet HREF="../manual.css">
</HEAD>
<BODY>
<BLOCKQUOTE>
<h5>Last update 31-Jan-2001</h5>
<P>&nbsp;<P>
<H1>mbsebbs - The main BBS program</H1>
<P>
<H3>Synopsis.</H3>
<P>
<code><strong>mbsebbs</strong></code>
<P>&nbsp;<P>
<H3>Description.</H3>
<P>
<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>
or users may not login. This is normally done at system boot.
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
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
for ZMH if your "Fidonet" network requires that.
<P>
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
default language directory.
<P>
The next check is to see if the user is allowed to login on the tty he
currently is on.
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,
unless you have turned this feature off in the setup.
<P>
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
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.
If the user is not known, the newuser procedure begins.
<P>
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.
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
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.
If the users Date of Birth is invalid, he is forced to enter the right
Date of Birth.
The next check is to see if the user has passed the expiry date, this is a
usefull feature for systems with donating users.
Finally the access limits are set for the user and time remaining for today and
download limits are set.
<P>
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 are searched for in the following order;<br>
<ol>
<li>filename.ans in the users favourite language directory.
<li>filename.ans in the default language directory.
<li>filename.asc in the users favourite language directory.
<li>filename.asc in the default language directory.
<li>If nothing is found, nothing is displayed.
</ol>
<strong>welcome</strong>. This screen can contain information about the session
the user has, his download limits, time left etc.
<P>
<strong>welcome1</strong> is shown if the user has show bulletins set to true.
<P>
<strong>birthday</strong> is shown if the user logs in at his birthday and if he
has show bullentins set to true.
<P>
<strong>dd-mm</strong> is shown if <strong>dd</strong> is the date of today and
<strong>mm</strong> is the current month and if the user has show bulletins
set to true.
<P>
<strong>sec20</strong> is shown if the user has the security level in the
filename, level 20 in this example. Als the display bulletins must be set to
true.
<P>
<strong>news</strong> is shown if the user has the display bulletins set to
true.
<P>
<strong>onceonly</strong> is shown only if the user has never seen this screen,
the test is to compare the users last login date against the date of this file.
<P>
After all these screens the users Offline Reader areas are checked to see if
you as sysop didn't change the message areas. If you made changes, the users
setup is adjusted and he will be notified. This means he sees a list
with deleted areas and new areas.
<P>
Next if the user has newmail scan set to true all message bases are checked to
see if the user has new mail. This includes a check to see if he has Unix mail.
If there is Unix mail, those mails are retrieved from the POP3 server and stored
in his private mailbox.
If there is new mail for the user, the user sees a list of areas with the messages
in it and he is offered to read and reply these messages.
<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
he can tag files for later download.
<P>
The final setup is to set the users "do not disturb" flag and then the menu
system is started. The menu system will run forever, until the user chooses
to logoff, the connection is lost or his daily timelimit is reached. For the
possibilities and setup of the menus see
<A HREF="../menus/index.htm">MBSE BBS Menu System</A>
<P>&nbsp;<P>
<H3>Environment.</H3>
<P>
In order to run <strong>mbsebbs</strong> you must set the global variable
<strong>$MBSE_ROOT</strong>. This variable must point to the root directory
of the bbs structure. The main configuration file <strong>config.data</strong>
must be present in the ~/etc directory.
<P>
If the environment variable <strong>CONNECT</strong> is present, a log entry
will be made with the connect speed.
<P>
If the environment variable <strong>CALLER_ID</strong> is present, a log entry
will be made with the caller id.
<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
user who's Unixname is in the <strong>LOGNAME</strong> environment variable.
This variable is set by the /bin/login program, so users that telnet to your
bbs or login via <strong>mgetty</strong> and login with their Unixname will
set this. If the <strong>LOGNAME</strong> is <strong>bbs</strong> then the
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>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=ISO 8859-1">
<META http-equiv="Content-Style-Type" content="text/css">
<META name="author" lang="en" "content=Michiel Broek">
<META name="copyright" lang="en" content="Copyright Michiel Broek">
<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">
<TITLE>MBSE BBS Programs - mbsebbs - The main BBS program.</TITLE>
<LINK rel=stylesheet HREF="../manual.css">
</HEAD>
<BODY>
<BLOCKQUOTE>
<h5>Last update 09-Nov-2001</h5>
<P>&nbsp;<P>
<H1>mbsebbs - The main BBS program</H1>
<P>
<H3>Synopsis.</H3>
<P>
<code><strong>mbsebbs</strong></code>
<P>&nbsp;<P>
<H3>Description.</H3>
<P>
<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>
or users may not login. This is normally done at system boot.
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
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
for ZMH if your "Fidonet" network requires that.
<P>
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
default language directory.
<P>
The next check is to see if the user is allowed to login on the tty he
currently is on.
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,
unless you have turned this feature off in the setup.
<P>
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
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.
If the user is not known, the newuser procedure begins.
<P>
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.
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
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.
If the users Date of Birth is invalid, he is forced to enter the right
Date of Birth.
The next check is to see if the user has passed the expiry date, this is a
usefull feature for systems with donating users.
Finally the access limits are set for the user and time remaining for today and
download limits are set.
<P>
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 are searched for in the following order;<br>
<ol>
<li>filename.ans in the users favourite language directory.
<li>filename.ans in the default language directory.
<li>filename.asc in the users favourite language directory.
<li>filename.asc in the default language directory.
<li>If nothing is found, nothing is displayed.
</ol>
<strong>mainlogo</strong>. Here you can put a logo or something.
<strong>welcome</strong>. This screen can contain information about the session
the user has, his download limits, time left etc.
<P>
<strong>welcome1</strong> is shown if the user has show bulletins set to true.
<strong>welcome2</strong> is shown if the user has show bulletins set to true.
<strong>welcome3</strong> is shown if the user has show bulletins set to true.
<strong>welcome4</strong> is shown if the user has show bulletins set to true.
<strong>welcome5</strong> is shown if the user has show bulletins set to true.
<strong>welcome6</strong> is shown if the user has show bulletins set to true.
<strong>welcome7</strong> is shown if the user has show bulletins set to true.
<strong>welcome8</strong> is shown if the user has show bulletins set to true.
<strong>welcome9</strong> is shown if the user has show bulletins set to true.
<P>
<strong>birthday</strong> is shown if the user logs in at his birthday and if he
has show bullentins set to true.
<P>
<strong>dd-mm</strong> is shown if <strong>dd</strong> is the date of today and
<strong>mm</strong> is the current month and if the user has show bulletins
set to true.
<P>
<strong>sec20</strong> is shown if the user has the security level in the
filename, level 20 in this example. Als the display bulletins must be set to
true.
<P>
<strong>news</strong> is shown if the user has the display bulletins set to
true.
<P>
<strong>onceonly</strong> is shown only if the user has never seen this screen,
the test is to compare the users last login date against the date of this file.
<P>
After all these screens the users Offline Reader areas are checked to see if
you as sysop didn't change the message areas. If you made changes, the users
setup is adjusted and he will be notified. This means he sees a list
with deleted areas and new areas.
<P>
Next if the user has newmail scan set to true all message bases are checked to
see if the user has new mail. This includes a check to see if he has Unix mail.
If there is Unix mail, those mails are retrieved from the POP3 server and stored
in his private mailbox.
If there is new mail for the user, the user sees a list of areas with the messages
in it and he is offered to read and reply these messages.
<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
he can tag files for later download.
<P>
The final setup is to set the users "do not disturb" flag and then the menu
system is started. The menu system will run forever, until the user chooses
to logoff, the connection is lost or his daily timelimit is reached. For the
possibilities and setup of the menus see
<A HREF="../menus/index.htm">MBSE BBS Menu System</A>
<P>&nbsp;<P>
<H3>Environment.</H3>
<P>
In order to run <strong>mbsebbs</strong> you must set the global variable
<strong>$MBSE_ROOT</strong>. This variable must point to the root directory
of the bbs structure. The main configuration file <strong>config.data</strong>
must be present in the ~/etc directory.
<P>
If the environment variable <strong>CONNECT</strong> is present, a log entry
will be made with the connect speed.
<P>
If the environment variable <strong>CALLER_ID</strong> is present, a log entry
will be made with the caller id.
<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
user who's Unixname is in the <strong>LOGNAME</strong> environment variable.
This variable is set by the /bin/login program, so users that telnet to your
bbs or login via <strong>mgetty</strong> and login with their Unixname will
set this. If the <strong>LOGNAME</strong> is <strong>bbs</strong> then the
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):
475 newuser.c change.c |You need to enter your address here
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):
|U moet hier Uw adres opgeven
|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):
|You need to enter your address here
|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):
|You need to enter your address here
|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):
|You need to enter your address here
|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):
|You need to enter your address here
|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.
* Last modification date : 26-Oct-2001
* Todo ..................: Implement message groups.
*
*****************************************************************************
@ -132,7 +131,7 @@ int Post_Allowed(void)
{
if (msgs.MsgKinds == RONLY) {
/* Message area is Readonly */
pout(12, 0, (char *) Language(437));
pout(LIGHTRED, BLACK, (char *) Language(437));
fflush(stdout);
sleep(3);
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.
*/
@ -161,7 +195,7 @@ int Crash_Option(faddr *Dest)
if (((Nlent = getnlent(Dest)) != NULL) && (Nlent->addr.zone)) {
if (Nlent->oflags & OL_CM) {
/* Crash [y/N]: */
pout(3, 0, (char *)Language(461));
pout(CYAN, BLACK, (char *)Language(461));
colour(CFG.MsgInputColourF, CFG.MsgInputColourB);
fflush(stdout);
alarm_on();
@ -172,7 +206,7 @@ int Crash_Option(faddr *Dest)
printf("%c", Keystroke(461, 1));
} else {
/* 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);
fflush(stdout);
alarm_on();
@ -203,7 +237,7 @@ int IsPrivate(void)
if (msgs.MsgKinds == BOTH) {
Enter(1);
/* Private [y/N]: */
pout(3, 0, (char *) Language(163));
pout(CYAN, BLACK, (char *) Language(163));
fflush(stdout);
alarm_on();
if (toupper(Getone()) == Keystroke(163, 0)) {
@ -243,7 +277,7 @@ void Check_Attach(void)
while (TRUE) {
Enter(1);
/* Attach file [y/N]: */
pout(3, 0, (char *)Language(463));
pout(CYAN, BLACK, (char *)Language(463));
fflush(stdout);
alarm_on();
if (toupper(Getone()) == Keystroke(463, 0)) {
@ -251,7 +285,7 @@ void Check_Attach(void)
printf("%c", Keystroke(463, 0));
Enter(1);
/* Please enter filename: */
pout(14, 0, (char *)Language(245));
pout(YELLOW, BLACK, (char *)Language(245));
colour(CFG.MsgInputColourF, CFG.MsgInputColourB);
fflush(stdout);
alarm_on();
@ -372,15 +406,28 @@ void Post_Msg()
Msg_New();
colour(9, 0);
colour(LIGHTBLUE, BLACK);
/* Posting message in area: */
printf("\n%s\"%s\"\n", (char *) Language(156), sMsgAreaDesc);
pout(14, 0, (char *) Language(157));
if (msgs.Type == NEWS) {
if (CFG.EmailMode == E_NOISP) {
if (Alias_Option()) {
/*
* 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);
strcpy(Msg.From, exitinfo.sUserName);
@ -388,19 +435,25 @@ void Post_Msg()
} else {
sprintf(Msg.From, "%s@%s (%s)", exitinfo.Name, CFG.sysdomain, exitinfo.sUserName);
}
} else {
} else {
strcpy(Msg.From, exitinfo.sUserName);
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);
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) {
Enter(1);
/* To : */
pout(14, 0, (char *) Language(158));
pout(YELLOW, BLACK, (char *) Language(158));
colour(CFG.MsgInputColourF, CFG.MsgInputColourB);
Getname(Msg.To, 35);
@ -426,14 +479,14 @@ void Post_Msg()
*/
if (msgs.Type == LOCALMAIL) {
/* Verifying user ... */
pout(3, 0, (char *) Language(159));
pout(CYAN, BLACK, (char *) Language(159));
x = CheckUser(Msg.To);
} else
x = TRUE;
}
} else if (msgs.Type == NETMAIL) {
x = FALSE;
pout(14, 0, (char *)"Address : ");
pout(YELLOW, BLACK, (char *)"Address : ");
FidoNode = calloc(61, sizeof(char));
colour(CFG.MsgInputColourF, CFG.MsgInputColourB);
GetstrC(FidoNode, 60);
@ -442,7 +495,7 @@ void Post_Msg()
point = Dest->point;
Dest->point = 0;
if (((Nlent = getnlent(Dest)) != NULL) && (Nlent->addr.zone)) {
colour(14, 0);
colour(YELLOW, BLACK);
if (point)
printf("Boss : ");
else
@ -470,7 +523,7 @@ void Post_Msg()
} else {
Dest->point = point;
printf("\r");
pout(3, 0, (char *) Language(241));
pout(CYAN, BLACK, (char *) Language(241));
fflush(stdout);
alarm_on();
if (toupper(Getone()) == Keystroke(241, 0)) {
@ -489,20 +542,15 @@ void Post_Msg()
if(!x) {
printf("\r");
/* User not found. Try again, or (Enter) to quit */
pout(3, 0, (char *) Language(160));
pout(CYAN, BLACK, (char *) Language(160));
} else
break;
}
} else {
/*
* Newsmode, automatic addressing to All.
*/
strcpy(Msg.To, "All");
}
Enter(1);
/* Subject : */
pout(14, 0, (char *) Language(161));
pout(YELLOW, BLACK, (char *) Language(161));
colour(CFG.MsgInputColourF, CFG.MsgInputColourB);
fflush(stdout);
alarm_on();
@ -512,7 +560,7 @@ void Post_Msg()
if((strcmp(Msg.Subject, "")) == 0) {
Enter(1);
/* Abort Message [y/N] ?: */
pout(3, 0, (char *) Language(162));
pout(CYAN, BLACK, (char *) Language(162));
fflush(stdout);
alarm_on();
@ -646,27 +694,28 @@ void ShowMsgHdr()
static char Buf1[35], Buf2[35], Buf3[81];
struct tm *tm;
time_t now;
int color;
Buf1[0] = '\0';
Buf2[0] = '\0';
Buf3[0] = '\0';
clear();
colour(1,7);
colour(BLUE, LIGHTGRAY);
printf(" %-70s", sMsgAreaDesc);
colour(4,7);
colour(RED, LIGHTGRAY);
printf("#%-5lu\n", Msg.Id);
/* Date : */
pout(14, 0, (char *) Language(206));
colour(10, 0);
pout(YELLOW, BLACK, (char *) Language(206));
colour(GREEN, BLACK);
/* Use intermediate variable to prevent SIGBUS on Sparc's */
now = Msg.Written;
tm = gmtime(&now);
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);
colour(12, 0);
colour(LIGHTRED, BLACK);
if (Msg.Local) printf(" Local");
if (Msg.Intransit) printf(" Transit");
if (Msg.Private) printf(" Priv.");
@ -701,38 +750,46 @@ void ShowMsgHdr()
printf("\n");
/* From : */
pout(14,0, (char *) Language(209));
colour(10, 0);
pout(YELLOW, BLACK, (char *) Language(209));
if (IsMe(Msg.From))
color = LIGHTGREEN;
else
color = GREEN;
colour(color++, BLACK);
printf("%s ", Msg.From);
if (iMsgAreaType != LOCALMAIL) {
colour(11, 0);
colour(color, BLACK);
printf("(%s)", Msg.FromAddress);
}
printf("\n");
/* To : */
pout(14,0, (char *) Language(208));
colour(10, 0);
pout(YELLOW, BLACK, (char *) Language(208));
if (IsMe(Msg.To))
color = LIGHTGREEN;
else
color = GREEN;
colour(color++, BLACK);
printf("%s ", Msg.To);
if (iMsgAreaType == NETMAIL) {
colour(11, 0);
colour(color, BLACK);
printf("(%s)", Msg.ToAddress);
}
printf("\n");
/* Subject : */
pout(14,0, (char *) Language(210));
colour(10, 0);
pout(YELLOW, BLACK, (char *) Language(210));
colour(GREEN, BLACK);
printf("%s\n", Msg.Subject);
colour(CFG.HiliteF, CFG.HiliteB);
colour(14, 1);
colour(YELLOW, BLUE);
if (Msg.Reply)
sprintf(Buf1, "\"+\" %s %lu", (char *)Language(211), Msg.Reply);
if (Msg.Original)
sprintf(Buf2, " \"-\" %s %lu", (char *)Language(212), Msg.Original);
sprintf(Buf3, "%s%s ", Buf1, Buf2);
colour(14, 1);
colour(YELLOW, BLUE);
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
*/
if (MsgBase.Total == 0) {
colour(15, 0);
colour(WHITE, BLACK);
/* There are no messages in this area */
printf("\n%s\n\n", (char *) Language(205));
sleep(3);
@ -769,7 +826,7 @@ int Export_a_Msg(unsigned long Num)
if (!Msg_ReadHeader(Num)) {
perror("");
colour(15, 0);
colour(WHITE, BLACK);
printf("\n%s\n\n", (char *)Language(77));
Msg_Close();
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
*/
if (MsgBase.Total == 0) {
colour(15, 0);
colour(WHITE, BLACK);
/* There are no messages in this area */
printf("\n%s\n\n", (char *) Language(205));
sleep(3);
@ -867,7 +924,7 @@ int Read_a_Msg(unsigned long Num, int UpdateLR)
if (!Msg_ReadHeader(Num)) {
perror("");
colour(15, 0);
colour(WHITE, BLACK);
printf("\n%s\n\n", (char *)Language(77));
Msg_Close();
sleep(3);
@ -1005,7 +1062,8 @@ void Read_Msgs()
colour(CFG.TextColourF, CFG.TextColourB);
/* 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.
@ -1027,7 +1085,7 @@ void Read_Msgs()
Start = MsgBase.Highest;
}
colour(15, 0);
colour(WHITE, BLACK);
/* Please enter a message between */
printf("\n%s(%lu - %lu)", (char *) Language(224), MsgBase.Lowest, MsgBase.Highest);
/* Message number [ */
@ -1060,7 +1118,7 @@ int ReadPanel()
WhosDoingWhat(READ_POST);
colour(15, 4);
colour(WHITE, RED);
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 */
printf("%s", (char *) Language(214));
@ -1130,7 +1188,7 @@ int ReadPanel()
}
} else {
/* Next */
pout(15, 0, (char *) Language(216));
pout(WHITE, BLACK, (char *) Language(216));
if (LastNum < MsgBase.Highest)
LastNum++;
else
@ -1183,9 +1241,9 @@ void Reply_Msg(int IsReply)
x = 0;
WhosDoingWhat(READ_POST);
clear();
colour(1,7);
colour(BLUE, LIGHTGRAY);
printf(" %-71s", sMsgAreaDesc);
colour(4,7);
colour(RED, LIGHTGRAY);
printf("#%-5lu", MsgBase.Highest + 1);
colour(CFG.HiliteF, CFG.HiliteB);
@ -1201,21 +1259,21 @@ void Reply_Msg(int IsReply)
/* From : */
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);
Enter(1);
/* 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);
Enter(1);
/* Enter to keep Subject. */
pout(12, 0, (char *) Language(219));
pout(LIGHTRED, BLACK, (char *) Language(219));
Enter(1);
/* Subject : */
pout(14, 0, (char *) Language(210));
pout(YELLOW, BLACK, (char *) Language(210));
sprintf(Msg.Subject, "%s", subj);
pout(CFG.MsgInputColourF, CFG.MsgInputColourB, Msg.Subject);
@ -1342,7 +1400,7 @@ void QuickScan_Msgs()
if (MsgBase.Total == 0) {
Enter(1);
/* There are no messages in this area. */
pout(15, 0, (char *) Language(205));
pout(WHITE, BLACK, (char *) Language(205));
Enter(3);
sleep(3);
return;
@ -1350,26 +1408,26 @@ void QuickScan_Msgs()
clear();
/* # From To Subject */
poutCR(14, 1, (char *) Language(220));
poutCR(YELLOW, BLUE, (char *) Language(220));
if (Msg_Open(sMsgAreaBase)) {
for (i = MsgBase.Lowest; i <= MsgBase.Highest; i++) {
if (Msg_ReadHeader(i)) {
colour(15, 0);
colour(WHITE, BLACK);
printf("%-6lu", Msg.Id);
if (IsMe(Msg.From))
colour(11, 0);
colour(LIGHTCYAN, BLACK);
else
colour(3, 0);
colour(CYAN, BLACK);
printf("%s ", padleft(Msg.From, 20, ' '));
if (IsMe(Msg.To))
colour(10, 0);
colour(LIGHTGREEN, BLACK);
else
colour(2, 0);
colour(GREEN, BLACK);
printf("%s ", padleft(Msg.To, 20, ' '));
colour(5, 0);
colour(MAGENTA, BLACK);
printf("%s", padleft(Msg.Subject, 31, ' '));
printf("\n");
FoundMsg = TRUE;
@ -1383,7 +1441,7 @@ void QuickScan_Msgs()
if(!FoundMsg) {
Enter(1);
/* There are no messages in this area. */
pout(10, 0, (char *) Language(205));
pout(LIGHTGREEN, BLACK, (char *) Language(205));
Enter(2);
sleep(3);
}
@ -1545,13 +1603,13 @@ void MsgArea_List(char *Option)
if ((Access(exitinfo.Security, msgs.RDSec)) && (msgs.Active)) {
msgs.Name[31] = '\0';
colour(15,0);
colour(WHITE, BLACK);
printf("%5d", Recno + 1);
colour(9,0);
colour(LIGHTBLUE, BLACK);
printf(" %c ", 46);
colour(3,0);
colour(CYAN, BLACK);
printf("%-31s", msgs.Name);
iAreaCount++;
@ -1629,7 +1687,7 @@ void MsgArea_List(char *Option)
/*
* Invalid area specified - Please try again ...
*/
pout(12, 0, (char *) Language(233));
pout(LIGHTRED, BLACK, (char *) Language(233));
Enter(2);
Pause();
fclose(pAreas);
@ -1648,19 +1706,19 @@ void MsgArea_List(char *Option)
if((strlen(msgs.Password)) > 2) {
Enter(2);
/* Please enter Area Password: */
pout(15, 0, (char *) Language(233));
pout(WHITE, BLACK, (char *) Language(233));
fflush(stdout);
colour(CFG.InputColourF, CFG.InputColourB);
GetstrC(temp, 20);
if((strcmp(temp, msgs.Password)) != 0) {
Enter(1);
pout(15, 0, (char *) Language(234));
pout(WHITE, BLACK, (char *) Language(234));
Syslog('!', "Incorrect Message Area # %d password given: %s", iMsgAreaNumber, temp);
SetMsgArea(iOldArea);
} else {
Enter(1);
pout(15, 0, (char *) Language(235));
pout(WHITE, BLACK, (char *) Language(235));
Enter(2);
}
Pause();
@ -1679,7 +1737,7 @@ void Delete_MsgNum(unsigned long MsgNum)
{
int Result = FALSE;
pout(12, 0, (char *) Language(230));
pout(LIGHTRED, BLACK, (char *) Language(230));
if (Msg_Open(sMsgAreaBase)) {
if (Msg_Lock(15L)) {
@ -1772,9 +1830,9 @@ void CheckMail()
clear();
/* Checking your mail box ... */
language(10, 0, 150);
language(LIGHTGREEN, BLACK, 150);
Enter(2);
Color = 9;
Color = LIGHTBLUE;
fflush(stdout);
/*
@ -1791,10 +1849,9 @@ void CheckMail()
temp = calloc(PATH_MAX, sizeof(char));
if (exitinfo.Email && strlen(exitinfo.Password)) {
check_popmail(exitinfo.Name, exitinfo.Password);
colour(Color, 0);
colour(Color++, BLACK);
printf("\re-mail Private e-mail mailbox");
fflush(stdout);
Color++;
Count = 0;
sprintf(temp, "%s/%s/mailbox", CFG.bbs_usersdir, exitinfo.Name);
SetEmailArea((char *)"mailbox");
@ -1860,10 +1917,10 @@ void CheckMail()
SetMsgArea(iMsgAreaNumber);
sprintf(temp, "%d", iMsgAreaNumber + 1);
colour(Color, 0);
if (Color < 15)
if (Color < WHITE)
Color++;
else
Color = 9;
Color = LIGHTBLUE;
printf("\r%6s %-40s", temp, sMsgAreaDesc);
fflush(stdout);
Count = 0;
@ -1914,7 +1971,7 @@ void CheckMail()
putchar('\r');
if (Found) {
colour(14, 0);
colour(YELLOW, BLACK);
/* You have messages, read your mail now? [Y/n]: */
printf("\n%s%d %s", (char *) Language(142), Found, (char *) Language(143));
colour(CFG.InputColourF, CFG.InputColourB);
@ -1963,7 +2020,7 @@ void CheckMail()
}
}
} else {
language(12, 0, 144);
language(LIGHTRED, BLACK, 144);
Enter(1);
sleep(3);
} /* if (Found) */
@ -1994,7 +2051,7 @@ void MailStatus()
OldMsgArea = iMsgAreaNumber;
iMsgAreaNumber = 0;
clear();
colour(14, 1);
colour(YELLOW, BLUE);
/* Area Type Description Messages Personal */
printf("%-79s", (char *)Language(226));
Enter(1);
@ -2012,16 +2069,16 @@ void MailStatus()
case 2: SetEmailArea((char *)"trash");
break;
}
colour(12, 0);
colour(LIGHTRED, BLACK);
printf(" Email");
colour(11, 0);
colour(LIGHTCYAN, BLACK);
printf(" %-40s", Language(467 + i));
colour(14, 0);
colour(YELLOW, BLACK);
if (EmailBase.Highest)
printf(" %8lu", EmailBase.Highest - EmailBase.Lowest + 1);
else
printf(" 0");
colour(9, 0);
colour(LIGHTBLUE, BLACK);
if (EmailBase.Highest)
printf(" %8lu\n", EmailBase.Highest - EmailBase.Lowest + 1);
else
@ -2050,9 +2107,9 @@ void MailStatus()
if ((msgs.Active) && (exitinfo.Security.level >= msgs.RDSec.level)) {
SetMsgArea(iMsgAreaNumber);
sprintf(temp, "%d", iMsgAreaNumber + 1);
colour(15, 0);
colour(WHITE, BLACK);
printf("%5s", temp);
colour(12, 0);
colour(LIGHTRED, BLACK);
switch(msgs.Type) {
case LOCALMAIL:
printf(" Local");
@ -2070,7 +2127,7 @@ void MailStatus()
printf(" News ");
break;
}
colour(11, 0);
colour(LIGHTCYAN, BLACK);
printf(" %-40s", sMsgAreaDesc);
Count = 0;
@ -2084,12 +2141,12 @@ void MailStatus()
Msg_Close();
} else
WriteError("Error open JAM %s", sMsgAreaBase);
colour(14, 0);
colour(YELLOW, BLACK);
if (MsgBase.Highest)
printf(" %8lu", MsgBase.Highest - MsgBase.Lowest + 1);
else
printf(" 0");
colour(9, 0);
colour(LIGHTBLUE, BLACK);
printf(" %8d\n", Count);
if (LC(1))
break;
@ -2156,4 +2213,3 @@ void SetMsgArea(unsigned long AreaNum)
}