361 lines
8.0 KiB
C
361 lines
8.0 KiB
C
/*****************************************************************************
|
||
*
|
||
* File ..................: bbs/nextuser.c
|
||
* Purpose ...............: Message to next User door
|
||
* Last modification date : 28-Jun-2001
|
||
*
|
||
*****************************************************************************
|
||
* Copyright (C) 1997-2001
|
||
*
|
||
* Michiel Broek FIDO: 2:280/2802
|
||
* Beekmansbos 10
|
||
* 1971 BV IJmuiden
|
||
* the Netherlands
|
||
*
|
||
* This file is part of MBSE BBS.
|
||
*
|
||
* This BBS is free software; you can redistribute it and/or modify it
|
||
* under the terms of the GNU General Public License as published by the
|
||
* Free Software Foundation; either version 2, or (at your option) any
|
||
* later version.
|
||
*
|
||
* MBSE BBS is distributed in the hope that it will be useful, but
|
||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
* General Public License for more details.
|
||
*
|
||
* You should have received a copy of the GNU General Public License
|
||
* along with MBSE BBS; see the file COPYING. If not, write to the Free
|
||
* Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||
*****************************************************************************/
|
||
|
||
#include "../lib/libs.h"
|
||
#include "../lib/mbse.h"
|
||
#include "../lib/structs.h"
|
||
#include "../lib/records.h"
|
||
#include "../lib/ansi.h"
|
||
#include "../lib/clcomm.h"
|
||
#include "../lib/common.h"
|
||
#include "nextuser.h"
|
||
#include "funcs.h"
|
||
#include "funcs4.h"
|
||
#include "language.h"
|
||
#include "timeout.h"
|
||
|
||
|
||
int iLoop, iLine = 1;
|
||
|
||
char sFrom[81];
|
||
char To[81];
|
||
char Subject[81];
|
||
|
||
int finish(void);
|
||
void addlines(void);
|
||
|
||
char *sLiNE[11];
|
||
|
||
|
||
|
||
void nextuser(void)
|
||
{
|
||
int i;
|
||
|
||
for (i = 0; i < 11; i++)
|
||
*(sLiNE + i) = (char *) calloc(81, sizeof(char));
|
||
|
||
addlines();
|
||
while (TRUE) {
|
||
if (finish() == TRUE)
|
||
break;
|
||
}
|
||
|
||
for (i = 0; i < 11; i++)
|
||
free(*(sLiNE + i));
|
||
}
|
||
|
||
|
||
|
||
void addlines(void)
|
||
{
|
||
iLine = 1;
|
||
clear();
|
||
|
||
/* Message to Nextuser Door */
|
||
pout(15, 0, (char *) Language(107));
|
||
Enter(2);
|
||
|
||
Syslog('+', "%s ran Nextuser Door", exitinfo.sUserName);
|
||
|
||
/* The FROM, TO and SUBJECT fields are optional. */
|
||
pout(14, 0, (char *) Language(108));
|
||
Enter(1);
|
||
|
||
Enter(1);
|
||
/* From: */
|
||
pout(12, 0, (char *) Language(109));
|
||
colour(9, 0);
|
||
fflush(stdout);
|
||
Getname(sFrom, 50);
|
||
|
||
/* To: */
|
||
pout(12, 0, (char *) Language(110));
|
||
colour(9, 0);
|
||
fflush(stdout);
|
||
Getname(To, 50);
|
||
|
||
/* Subject: */
|
||
pout(12, 0, (char *) Language(111));
|
||
colour(9, 0);
|
||
fflush(stdout);
|
||
GetstrC(Subject, 80);
|
||
|
||
Enter(2);
|
||
/* Type up to 10 lines 74 Characters per line */
|
||
pout(10 , 0, (char *) Language(112));
|
||
Enter(1);
|
||
|
||
colour(14, 0);
|
||
printf(" <20>");
|
||
for(iLoop = 0; iLoop <= 75; iLoop++)
|
||
printf("<EFBFBD>");
|
||
printf("<EFBFBD>");
|
||
|
||
while (1) {
|
||
colour(12, 0);
|
||
printf("%d: ", iLine);
|
||
colour(9, 0);
|
||
fflush(stdout);
|
||
GetstrC(*(sLiNE + iLine), 75);
|
||
|
||
if ((strcmp(*(sLiNE + iLine), "")) == 0)
|
||
return;
|
||
|
||
iLine++;
|
||
if(iLine >= 11)
|
||
break;
|
||
}
|
||
|
||
pout(14, 0, (char *)" <20>");
|
||
for(iLoop = 0; iLoop <= 75; iLoop++)
|
||
printf("<EFBFBD>");
|
||
printf("<EFBFBD>");
|
||
}
|
||
|
||
|
||
|
||
/* Save Abort File */
|
||
int finish(void)
|
||
{
|
||
FILE *pTextFileANS, *pTextFileASC;
|
||
int iStrLen, i, x, NLChk = FALSE;
|
||
char *temp, *temp1;
|
||
|
||
temp = calloc(PATH_MAX, sizeof(char));
|
||
temp1 = calloc(PATH_MAX, sizeof(char));
|
||
|
||
while (TRUE) {
|
||
Enter(1);
|
||
poutCR(15, 0, (char *) Language(113));
|
||
Enter(1);
|
||
/* (L)ist, (R)eplace text, (E)dit line, (A)bort, (S)ave */
|
||
pout(15, 1, (char *) Language(114));
|
||
Enter(2);
|
||
|
||
/* Select: */
|
||
pout(15, 0, (char *) Language(115));
|
||
|
||
fflush(stdout);
|
||
|
||
alarm_on();
|
||
i = toupper(Getone());
|
||
|
||
if (i == Keystroke(114, 3)) {
|
||
/* Aborting... */
|
||
pout(15, 0, (char *) Language(116));
|
||
Enter(1);
|
||
Enter(1);
|
||
pout(15, 0, (char *) Language(117));
|
||
poutCR(15, 0, CFG.bbs_name);
|
||
sleep(2);
|
||
Syslog('+', "User aborted message and exited door");
|
||
free(temp);
|
||
free(temp1);
|
||
return TRUE;
|
||
} else
|
||
|
||
if (i == Keystroke(114, 2)) {
|
||
/* Edit which line: */
|
||
printf("\n %s", (char *) Language(118));
|
||
GetstrC(temp, 80);
|
||
|
||
if((strcmp(temp, "")) == 0)
|
||
break;
|
||
|
||
i = atoi(temp);
|
||
if( i > iLine - 1) {
|
||
/* Line does not exist. */
|
||
printf("%s\n", (char *) Language(119));
|
||
break;
|
||
}
|
||
x = strlen(sLiNE[i]);
|
||
printf("%d : %s", i, *(sLiNE + i));
|
||
fflush(stdout);
|
||
GetstrP(sLiNE[i],74, x);
|
||
} else
|
||
|
||
if (i == Keystroke(114, 0)) {
|
||
colour(14, 0);
|
||
printf("\n\n <20>");
|
||
for (iLoop = 0; iLoop <= 75; iLoop++)
|
||
printf("<EFBFBD>");
|
||
printf("<EFBFBD>");
|
||
|
||
for(i = 1; i < iLine; i++) {
|
||
colour(12, 0);
|
||
printf("%d: ", i);
|
||
colour(9, 0);
|
||
printf("%s\n", *(sLiNE + i));
|
||
}
|
||
|
||
colour(14, 0);
|
||
printf(" <20>");
|
||
for (iLoop = 0; iLoop <= 75; iLoop++)
|
||
printf("<EFBFBD>");
|
||
printf("<EFBFBD>\n");
|
||
} else
|
||
|
||
if (i == Keystroke(114, 4)) {
|
||
/* Open TextFile for Writing NextUser Info */
|
||
sprintf(temp, "%s/%s.ans", CFG.bbs_txtfiles, CFG.sNuScreen);
|
||
sprintf(temp1, "%s/%s.ans.bak", CFG.bbs_txtfiles, CFG.sNuScreen);
|
||
rename(temp, temp1);
|
||
|
||
if((pTextFileANS = fopen(temp, "w")) == NULL) {
|
||
perror("");
|
||
WriteError("NextUser: Can't open file: %s", temp);
|
||
return TRUE;
|
||
}
|
||
|
||
sprintf(temp, "%s/%s.asc", CFG.bbs_txtfiles, CFG.sNuScreen);
|
||
if(( pTextFileASC = fopen(temp, "w")) == NULL) {
|
||
perror("");
|
||
WriteError("NextUser: Can't open file: %s", temp);
|
||
return TRUE;
|
||
}
|
||
|
||
fprintf(pTextFileANS,"%s%s%s%s",ANSI_CLEAR,ANSI_NORMAL,ANSI_WHITE,ANSI_BOLD);
|
||
|
||
if((iStrLen = strlen(sFrom)) > 1) {
|
||
fprintf(pTextFileANS,"%s\x1B[1;4HFrom:%s %s\n",ANSI_RED,ANSI_BLUE,sFrom);
|
||
fprintf(pTextFileASC,"\n From: %s\n", sFrom);
|
||
Syslog('+', " From: %s", sFrom);
|
||
NLChk = TRUE;
|
||
}
|
||
|
||
if((iStrLen = strlen(To)) > 1) {
|
||
fprintf(pTextFileANS,"%s\x1B[2;6HTo:%s %s\n",ANSI_RED,ANSI_BLUE,To);
|
||
fprintf(pTextFileASC," To: %s\n", To);
|
||
Syslog('+', " To: %s", To);
|
||
NLChk = TRUE;
|
||
}
|
||
|
||
if((iStrLen = strlen(Subject)) > 1) {
|
||
fprintf(pTextFileANS,"%sSubject:%s %s\n\n",ANSI_RED,ANSI_BLUE,Subject);
|
||
fprintf(pTextFileASC,"Subject: %s\n\n", Subject);
|
||
Syslog('+', "Subject: %s", Subject);
|
||
NLChk = TRUE;
|
||
}
|
||
|
||
if(!NLChk) {
|
||
fprintf(pTextFileANS, "\n");
|
||
fprintf(pTextFileASC, "\n");
|
||
}
|
||
|
||
fprintf(pTextFileANS,"%s<>",ANSI_YELLOW);
|
||
for(iLoop = 0; iLoop <= 75; iLoop++) {
|
||
fprintf(pTextFileANS,"<EFBFBD>");
|
||
fprintf(pTextFileASC,"=");
|
||
}
|
||
fprintf(pTextFileANS,"<EFBFBD>\n");
|
||
fprintf(pTextFileASC,"\n");
|
||
|
||
for(i = 0; i < iLine; i++) {
|
||
if((iStrLen = strlen( *(sLiNE + i) )) > 0) {
|
||
fprintf(pTextFileANS," %s%s\n",ANSI_BLUE, *(sLiNE + i));
|
||
fprintf(pTextFileASC," %s\n", *(sLiNE + i));
|
||
}
|
||
}
|
||
|
||
Enter(2);
|
||
pout(12, 0, (char *) Language(340));
|
||
fprintf(pTextFileANS,"%s<>",ANSI_YELLOW);
|
||
for(iLoop = 0; iLoop <= 75; iLoop++) {
|
||
fprintf(pTextFileANS,"<EFBFBD>");
|
||
fprintf(pTextFileASC,"=");
|
||
}
|
||
fprintf(pTextFileANS,"<EFBFBD>\n");
|
||
fprintf(pTextFileASC,"\n");
|
||
|
||
fprintf(pTextFileANS,"%s%s",ANSI_RED,CFG.sNuQuote);
|
||
fprintf(pTextFileASC,"%s", CFG.sNuQuote);
|
||
|
||
fclose(pTextFileANS);
|
||
fclose(pTextFileASC);
|
||
colour(9, 0);
|
||
/* Returning to */
|
||
printf("\n%s%s\n", (char *) Language(117), CFG.bbs_name);
|
||
|
||
Syslog('+', "User Saved Nextuser message and exited door");
|
||
free(temp);
|
||
free(temp1);
|
||
return TRUE;
|
||
} else
|
||
|
||
if (i == Keystroke(114, 1)) {
|
||
/* Edit which line: */
|
||
colour(15, 0);
|
||
printf("\n%s", (char *) Language(118));
|
||
GetstrC(temp, 80);
|
||
|
||
if((strcmp(temp, "")) == 0)
|
||
break;
|
||
|
||
i = atoi(temp);
|
||
|
||
if( i > iLine - 1) {
|
||
/* Line does not exist. */
|
||
printf("\n%s", (char *) Language(119));
|
||
break;
|
||
}
|
||
|
||
Enter(1);
|
||
/* Line reads: */
|
||
colour(15, 0);
|
||
poutCR(15, 0, (char *) Language(186));
|
||
printf("%2d: %s\n", i, *(sLiNE + i));
|
||
|
||
Enter(1);
|
||
/* Text to replace: */
|
||
pout(15, 0, (char *) Language(195));
|
||
GetstrC(temp, 80);
|
||
|
||
if((strcmp(temp, "")) == 0)
|
||
break;
|
||
|
||
/* Replacement text: */
|
||
pout(15, 0, (char *) Language(196));
|
||
GetstrC(temp1, 80);
|
||
|
||
if((strcmp(temp1, "")) == 0)
|
||
break;
|
||
|
||
strreplace(*(sLiNE + i), temp, temp1);
|
||
} else
|
||
printf("\n");
|
||
}
|
||
free(temp);
|
||
free(temp1);
|
||
return FALSE;
|
||
}
|
||
|