Added support for external message editor

This commit is contained in:
Michiel Broek
2002-03-05 21:32:52 +00:00
parent 55734a6215
commit 6b441def07
24 changed files with 315 additions and 109 deletions

View File

@@ -30,7 +30,7 @@ MBSEBBS_OBJS = bank.o bbslist.o chat.o file.o funcs.o mail.o menu.o \
MBSEBBS_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libmsgbase.a \
../lib/libdbase.a ../lib/libmbinet.a
MBNEWUSR_OBJS = mbnewusr.o newuser.o language.o timeout.o dispfile.o oneline.o \
timecheck.o input.o exitinfo.o funcs.o misc.o change.o \
timecheck.o input.o exitinfo.o funcs.o misc.o change.o door.o \
filesub.o mail.o email.o msgutil.o pop3.o lineedit.o fsedit.o whoson.o
MBNEWUSR_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libmsgbase.a \
../lib/libdbase.a ../lib/libmbinet.a
@@ -150,7 +150,7 @@ mbuser.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/
page.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h dispfile.h input.h chat.h page.h timeout.h mail.h language.h
bye.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/clcomm.h ../lib/common.h dispfile.h misc.h language.h bye.h
funcs.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/msgtext.h ../lib/msg.h ../lib/clcomm.h funcs.h
mail.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/msgtext.h ../lib/clcomm.h ../lib/msg.h mail.h funcs.h input.h language.h misc.h timeout.h oneline.h exitinfo.h lineedit.h fsedit.h filesub.h msgutil.h pop3.h email.h whoson.h
mail.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/msgtext.h ../lib/clcomm.h ../lib/msg.h mail.h funcs.h input.h language.h misc.h timeout.h oneline.h exitinfo.h lineedit.h fsedit.h filesub.h msgutil.h pop3.h email.h door.h whoson.h
newuser.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/clcomm.h ../lib/common.h funcs.h input.h newuser.h language.h timeout.h change.h dispfile.h
pinfo.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h pinfo.h input.h
timecheck.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/clcomm.h ../lib/common.h timecheck.h funcs.h bye.h exitinfo.h language.h input.h

View File

@@ -392,27 +392,53 @@ void Chg_FileCheck()
/*
* Toggle Fullscreen Editor
* Choose Message Editor
*/
void Chg_FsMsged()
{
ReadExitinfo();
Enter(2);
int z;
if (exitinfo.FsMsged) {
exitinfo.FsMsged = FALSE;
/* Fullscreen Editor is now OFF */
pout(10, 0, (char *) Language(373));
} else {
exitinfo.FsMsged = TRUE;
/* Fullscreen Editor is now ON */
pout(10, 0, (char *) Language(372));
}
ReadExitinfo();
Enter(2);
Enter(2);
sleep(2);
Syslog('+', "Fullscreen Editor changed to %s", exitinfo.FsMsged ?"True":"False");
WriteExitinfo();
/* Now using the */
pout(LIGHTMAGENTA, BLACK, (char *)Language(372));
/* Line/Fullscreen/External */
colour(LIGHTCYAN, BLACK);
printf(" %s ", Language(387 + (exitinfo.MsgEditor & 3)));
/* Editor */
pout(LIGHTMAGENTA, BLACK, (char *)Language(390));
Enter(1);
pout(WHITE, BLACK, (char *)Language(373));
fflush(stdout);
alarm_on();
z = toupper(Getone());
if (z == Keystroke(373, 0)) {
exitinfo.MsgEditor = LINEEDIT;
Syslog('+', "User selected line editor");
} else if (z == Keystroke(373, 1)) {
exitinfo.MsgEditor = FSEDIT;
Syslog('+', "User selected fullscreen editor");
} else if (z == Keystroke(373, 2)) {
exitinfo.MsgEditor = EXTEDIT;
Syslog('+', "User selected external editor");
}
Enter(2);
/* Now using the */
pout(LIGHTMAGENTA, BLACK, (char *)Language(372));
/* Line/Fullscreen/External */
colour(LIGHTCYAN, BLACK);
printf(" %s ", Language(387 + (exitinfo.MsgEditor & 3)));
/* Editor */
pout(LIGHTMAGENTA, BLACK, (char *)Language(390));
Enter(2);
sleep(2);
WriteExitinfo();
}

View File

@@ -391,7 +391,15 @@ void ControlCodeU(int ch)
break;
case '3':
printf("%s", exitinfo.FsMsged ? (char *) Language(147) : (char *) Language(148));
switch(exitinfo.MsgEditor) {
case LINEEDIT: printf(Language(387));
break;
case FSEDIT: printf(Language(388));
break;
case EXTEDIT: printf(Language(389));
break;
default: printf("?");
}
break;
case '4':

View File

@@ -95,7 +95,7 @@ char *Rdate(char *ind, int Y2K)
/*
* Function will run a external program or door
*/
void ExtDoor(char *Program, int NoDoorsys, int Y2Kdoorsys, int Comport, int NoSuid)
void ExtDoor(char *Program, int NoDoorsys, int Y2Kdoorsys, int Comport, int NoSuid, int NoPrompt)
{
char *String, *String1;
int i, rc;
@@ -232,7 +232,9 @@ void ExtDoor(char *Program, int NoDoorsys, int Y2Kdoorsys, int Comport, int NoSu
free(temp1);
printf("\n\n");
Pause();
if (!NoPrompt)
Pause();
}

View File

@@ -3,7 +3,7 @@
#ifndef _DOOR_H
#define _DOOR_H
void ExtDoor(char *, int, int, int, int); /* Run external door */
void ExtDoor(char *, int, int, int, int, int); /* Run external door */
int exec_nosuid(char *); /* Execute as real user */
#endif

View File

@@ -58,6 +58,7 @@
#include "msgutil.h"
#include "pop3.h"
#include "email.h"
#include "door.h"
#include "whoson.h"
@@ -375,10 +376,12 @@ void SysopComment(char *Cmt)
*/
int Edit_Msg()
{
if (exitinfo.FsMsged)
return Fs_Edit();
else
return Line_Edit();
switch (exitinfo.MsgEditor) {
case LINEEDIT: return Line_Edit();
case FSEDIT: return Fs_Edit();
case EXTEDIT: return Ext_Edit();
}
return 0;
}
@@ -2218,3 +2221,85 @@ void SetMsgArea(unsigned long AreaNum)
}
/*
* External Message Editor
*/
int Ext_Edit()
{
int changed;
int j, i;
char *l, *tmpname;
FILE *fd;
struct stat st1,st2;
changed=FALSE;
tmpname = calloc(PATH_MAX, sizeof(char));
sprintf(tmpname, "%s/%s/%s", CFG.bbs_usersdir, exitinfo.Name, "data.msg");
if ((fd = fopen(tmpname, "w")) == NULL) {
Syslog('+',"EXT_EDIT: Unable to open %s for writing", tmpname);
} else {
fprintf(fd,"AREA='%s'\n",sMsgAreaDesc);
fprintf(fd,"AREANUM='%d'\n",iMsgAreaNumber+1);
fprintf(fd,"AREATYPE='%d'\n",iMsgAreaType);
fprintf(fd,"MSGFROM='%s'\n",Msg.From);
fprintf(fd,"MSGTO='%s'\n",Msg.To);
fprintf(fd,"MSGTOADDR='%s'\n",Msg.ToAddress);
fprintf(fd,"MSGSUBJECT='%s'\n",Msg.Subject);
fprintf(fd,"BBSLANGUAGE='%c'\n",exitinfo.iLanguage);
fprintf(fd,"BBSFSEDKEYS='%d'\n",exitinfo.FSemacs);
fclose(fd);
}
sprintf(tmpname, "%s/%s/%s", CFG.bbs_usersdir, exitinfo.Name, "edit.msg");
if ((fd = fopen(tmpname, "w")) == NULL) {
Syslog('+',"EXT_EDIT: Unable to open %s for writing", tmpname);
} else {
for (i = 1; i <= Line; i++) {
fprintf(fd,"%s\n",Message[i]);
}
fclose(fd);
stat( tmpname, &st1 );
ExtDoor(CFG.externaleditor,FALSE,TRUE,TRUE,FALSE,TRUE);
stat( tmpname, &st2 );
}
if ( st1.st_mtime != st2.st_mtime ) {
l = calloc(81, sizeof(char));
if ((fd = fopen(tmpname, "r")) == NULL) {
Syslog('+',"EXT_EDIT: Unable to open %s for reading", tmpname);
} else {
i=1;
while ( (fgets(l,80,fd) != NULL) && (i < TEXTBUFSIZE ) ) {
for (j = 0; i < strlen(l); j++) {
if (*(l + j) == '\0')
break;
if (*(l + j) == '\n')
*(l + j) = '\0';
if (*(l + j) == '\r')
*(l + j) = '\0';
/*
* Make sure that any tear or origin lines are
* made invalid.
*/
if (strncmp(l, (char *)"--- ", 4) == 0)
l[1] = 'v';
if (strncmp(l, (char *)" * Origin:", 10) == 0)
l[1] = '+';
}
sprintf(Message[i],"%s",l);
i++;
}
changed=TRUE;
Line=i;
fclose(fd);
}
free(l);
}
free(tmpname);
return changed;
}

View File

@@ -1,20 +1,24 @@
/* $Id$ */
#ifndef _MAIL_H
#define _MAIL_H
#define TEXTBUFSIZE 500
int LC(int); /* More prompt for reading messages */
int Edit_Msg(void); /* Edit a message */
int Ext_Edit(void); /* External Message editor */
int CheckLine(int, int, int); /* Check linecounter for read */
void SysopComment(char *); /* Comment to Sysop */
void Post_Msg(void); /* Post a message */
void Read_Msgs(void); /* Read Messages */
void QuickScan_Msgs(void); /* List Message Headers */
void Delete_Msg(void); /* Delete a specified message */
void MsgArea_List(char *); /* Select message area */
void CheckMail(void); /* Check for new mail */
void MailStatus(void); /* Mail status in areas */
void SetMsgArea(unsigned long); /* Set message area and variables */
void SysopComment(char *); /* Comment to Sysop */
void Post_Msg(void); /* Post a message */
void Read_Msgs(void); /* Read Messages */
void QuickScan_Msgs(void); /* List Message Headers */
void Delete_Msg(void); /* Delete a specified message */
void MsgArea_List(char *); /* Select message area */
void CheckMail(void); /* Check for new mail */
void MailStatus(void); /* Mail status in areas */
void SetMsgArea(unsigned long); /* Set message area and variables */
#endif

View File

@@ -334,7 +334,7 @@ void DoMenu(int Type)
case 7:
/* Run external program */
ExtDoor(menus.OptionalData, menus.NoDoorsys, menus.Y2Kdoorsys, menus.Comport, menus.NoSuid);
ExtDoor(menus.OptionalData, menus.NoDoorsys, menus.Y2Kdoorsys, menus.Comport, menus.NoSuid, menus.NoPrompt);
break;
case 8:

View File

@@ -103,7 +103,7 @@ int newuser()
FullName = calloc(81, sizeof(char));
usrconfig.iLanguage = iLang;
usrconfig.FsMsged = TRUE;
usrconfig.MsgEditor = FSEDIT;
do {