From 1746496a6a1e238ad6c4220f90794388d0666894 Mon Sep 17 00:00:00 2001 From: Michiel Broek Date: Tue, 8 Nov 2005 21:03:09 +0000 Subject: [PATCH] Removed bbs line editor --- ChangeLog | 11 + html/images/users.png | Bin 16657 -> 13574 bytes html/images/users2.png | Bin 11846 -> 13583 bytes html/setup/users.html | 4 +- lang/Language.xref | 4 +- lang/chinese.txt | 4 +- lang/dutch.txt | 4 +- lang/english.txt | 4 +- lang/french.txt | 4 +- lang/galego.txt | 4 +- lang/german.txt | 4 +- lang/germandu.txt | 4 +- lang/spanish.txt | 4 +- lib/users.h | 2 +- mbsebbs/Makefile | 11 +- mbsebbs/change.c | 9 +- mbsebbs/dispfile.c | 14 +- mbsebbs/lineedit.c | 576 ----------------------------------------- mbsebbs/lineedit.h | 7 - mbsebbs/mail.c | 7 +- mbsetup/ledit.c | 20 +- mbsetup/m_users.c | 347 ++++++++++++------------- 22 files changed, 227 insertions(+), 817 deletions(-) delete mode 100644 mbsebbs/lineedit.c delete mode 100644 mbsebbs/lineedit.h diff --git a/ChangeLog b/ChangeLog index a0ab1eb5..24f7e4ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,10 +3,21 @@ $Id$ v0.83.0 06-Nov-2005 + mbsebbs: + Removed antique line editor. + mbtask: Fixed accepting connections with the chatserver when no password is given. + mbsetup: + In users edit screen, removed append record option. + Blocked changing the users unixname. + Removed antique line editor is edit users. + + lang: + Changed language prompts 373 and 438. + v0.82.0 06-Oct-2005 - 06-Nov-2005 diff --git a/html/images/users.png b/html/images/users.png index 3e32f097ca70194fa9bdca8dc061b6a3dbe837a4..50bfd0fb44833b82b44711896b42d55111ca3635 100644 GIT binary patch literal 13574 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 Tx?LKu2_hvS4=WQh4E+B9sIrW< diff --git a/html/images/users2.png b/html/images/users2.png index bddcafb4f4f6f066879db15f36f1217d7f566548..130c85d23bced1afb011f0e1ac09068398e0e021 100644 GIT binary patch literal 13583 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 Gq5lJFz3p89 literal 11846 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
-
Last update 24-Feb-2004
+
Last update 08-Nov-2005

MBSE BBS Setup - BBS Users.

Introduction.

@@ -36,7 +36,7 @@ Fields that can be changed by the users themselves are in the second screen. Security The security level of the user. Expirydate The expiry date of the user DD-MM-YYYY. Expiry Sec The security level the user gets after expiry. -Unix uid The unix username of the user. +Unix uid Displays the unix name of the user. 1st login Displays the date of the first login. Last login Displays the date of the last login. Pwdchange Displays the date of the last password change. diff --git a/lang/Language.xref b/lang/Language.xref index 1de10e39..ba3bdd95 100644 --- a/lang/Language.xref +++ b/lang/Language.xref @@ -371,7 +371,7 @@ 370 change.c |New Files check is now ON 371 change.c |New Files check is now OFF 372 change.c |Now using the -373 change.c 123|Select: 1) Line editor, 2) Fullscreen editor, 3) External editor +373 change.c 12|Select: 1) Fullscreen editor, 2) External editor 374 offline.c |No messages found to download! 375 funcs4.c |Press (Enter) to continue: 376 lineedit.c |Center @@ -436,7 +436,7 @@ 435 user.c |Your password is expired, new password : 436 funcs.c |Press ENTER to continue 437 mail.c |Posting not allowed, this area is Read Only! -438 change.c 12|Select: 1) Line editer, 2) Fullscreen editer +438 change.c 1|Select: 1) Fullscreen editer 439 offline.c |Offline Reader Upload 440 offline.c |Invalid packet received 441 offline.c |Unknown compression type diff --git a/lang/chinese.txt b/lang/chinese.txt index 9b0ed226..abb0eace 100644 --- a/lang/chinese.txt +++ b/lang/chinese.txt @@ -371,7 +371,7 @@ YN|Are you Sure? [Y/n]: |New Files check is now ON |New Files check is now OFF |Now using the -123|Select: 1) Line editor, 2) Fullscreen editor, 3) External editor +12|Select: 1) Fullscreen editor, 2) External editor |No messages found to download! |Press (Enter) to continue: |Center @@ -436,7 +436,7 @@ YN|Do you want to download these messages [Y/n]? |Your password is expired, new password : |Press ENTER to continue |Posting not allowed, this area is Read Only! -12|Select: 1) Line editor, 2) Fullscreen editor +1|Select: 1) Fullscreen editor |Offline Reader Upload |Invalid packet received |Unknown compression type diff --git a/lang/dutch.txt b/lang/dutch.txt index 61cfabe3..b7a220d4 100644 --- a/lang/dutch.txt +++ b/lang/dutch.txt @@ -371,7 +371,7 @@ JN|Zeker weten? [J/n]: |Tonen nieuwe Bestanden is nu AAN |Tonen nieuwe Bestanden is nu UIT |U gebruikt nu de -123|Kies: 1) Regel editer, 2) Volle scherm editer, 3) Externe editer +12|Kies: 1) Volle scherm editer, 2) Externe editer |Geen berichten gevonden voor download! |Geef (Enter) voor doorgaan: |Centreer @@ -436,7 +436,7 @@ JN|Wilt U deze berichten downloaden [J/n]? |Uw wachtwoord is verlopen, geef nieuw wachtwoord: |Toets ENTER voor doorgaan |Plaatsen berichten niet toegestaan, dit gebied is alleen lezen! -12|Kies: 1) Regel editer, 2) Volle scherm editer +1|Kies: 1) Volle scherm editer |Offline Reader Upload |Ongeldig pakket ontvangen |Onbekende compressie methode diff --git a/lang/english.txt b/lang/english.txt index 2a1ddbf0..c77850f2 100644 --- a/lang/english.txt +++ b/lang/english.txt @@ -371,7 +371,7 @@ YN|Are you Sure? [Y/n]: |New Files check is now ON |New Files check is now OFF |Now using the -123|Select: 1) Line editor, 2) Fullscreen editor, 3) External editor +12|Select: 1) Fullscreen editor, 2) External editor |No messages found to download! |Press (Enter) to continue: |Center @@ -436,7 +436,7 @@ YN|Do you want to download these messages [Y/n]? |Your password is expired, new password : |Press ENTER to continue |Posting not allowed, this area is Read Only! -12|Select: 1) Line editor, 2) Fullscreen editor +1|Select: 1) Fullscreen editor |Offline Reader Upload |Invalid packet received |Unknown compression type diff --git a/lang/french.txt b/lang/french.txt index e006e0ea..04b6c04b 100644 --- a/lang/french.txt +++ b/lang/french.txt @@ -371,7 +371,7 @@ YN|Are you Sure? [Y/n]: |New Files check is now ON |New Files check is now OFF |Now using the -123|Select: 1) Line editor, 2) Fullscreen editor, 3) External editor +12|Select: 1) Fullscreen editor, 2) External editor |No messages found to download! |Press (Enter) to continue: |Center @@ -436,7 +436,7 @@ YN|Do you want to download these messages [Y/n]? |Your password is expired, new password : |Press ENTER to continue |Posting not allowed, this area is Read Only! -12|Select: 1) Line editor, 2) Fullscreen editor +1|Select: 1) Fullscreen editor |Offline Reader Upload |Invalid packet received |Unknown compression type diff --git a/lang/galego.txt b/lang/galego.txt index e6764b44..24271250 100644 --- a/lang/galego.txt +++ b/lang/galego.txt @@ -371,7 +371,7 @@ SN| |Comprobar ficheiros novos ACTIVADO |Comprobar ficheios novos DESACTIVADO |Est s usando o editor -123|Escolle: 1) Editor de li¤as, 2) E. pantalla completa, 3) Editor externo +12|Escolle: 1) E. pantalla completa, 2) Editor externo |¡Non hai mensaxes! |Pulsa (Enter) para seguir: |Centrar @@ -436,7 +436,7 @@ SN| |A tua password caducou, nova password : |Pulsa ENTER para seguir |Non podes escribir, ­esta  rea es S¢ Lectura! -12|Escolle: 1) Editor de li¤as, 2) Editor de pantalla completa +1|Escolle: 1) Editor de pantalla completa |Upload de correo Off-Line |O paquete recibido non ‚ v lido |Comprimido con un compresor desco¤ecido diff --git a/lang/german.txt b/lang/german.txt index 441ea4ce..a3616118 100644 --- a/lang/german.txt +++ b/lang/german.txt @@ -371,7 +371,7 @@ JN|Sind Sie sicher? [J/n]: |Check auf neue Dateien ist jetzt AN |Check auf neue Dateien ist jetzt AUS |Sie verwenden jetzt den -123|Auswahl: 1) Zeilen-Editor, 2) Vollbild-Editor, 3) Externer Editor +12|Auswahl: 1) Vollbild-Editor, 2) Externer Editor |Es liegen keine Mitteilungen zum Herunterladen vor! |Weiter mit ... |Zentrieren @@ -436,7 +436,7 @@ JN|Moechten Sie diese Mitteilungen herunterladen [J/n]? |Ihr Passwort ist abgelaufen, neues Passwort: |Druecken Sie um fortzufahren |Kein Senden moeglich, diese Area ist "Nur lesen"! -12|Auswahl: 1) Zeilen-Editor, 2) Vollbild-Editor +1|Auswahl: 1) Vollbild-Editor |"Offline Reader" Paket heraufladen |Kein oder fehlerhaftes Paket erhalten |Unbekannter Datenkompressionstyp diff --git a/lang/germandu.txt b/lang/germandu.txt index b02ab2e2..d6dc2943 100644 --- a/lang/germandu.txt +++ b/lang/germandu.txt @@ -371,7 +371,7 @@ JN|Bist Du sicher? [a/ein]: |Check auf neue Dateien ist jetzt AN |Check auf neue Dateien ist jetzt AUS |Du verwendest jetzt den -123|Auswahl: <1> Zeilen-Editor, <2> Vollbild-Editor, <3> Externer Editor +12|Auswahl: <1> Vollbild-Editor, <3> Externer Editor |Es liegen keine Mitteilungen zum Herunterladen vor! |Weiter mit ... |Zentrieren @@ -436,7 +436,7 @@ JN|Moechtest Du diese Mitteilungen herunterladen [a/ein]? |Dein Passwort ist abgelaufen, neues Passwort: |Drueck um fortzufahren |Kein Senden moeglich, diese Area ist "Nur lesen"! -12|Auswahl: <1> Zeilen-Editor, <2> Vollbild-Editor +1|Auswahl: <1> Vollbild-Editor |"Offline Reader" Paket heraufladen |Kein oder fehlerhaftes Paket erhalten |Unbekannter Datenkompressionstyp diff --git a/lang/spanish.txt b/lang/spanish.txt index e9cdb22e..54804686 100644 --- a/lang/spanish.txt +++ b/lang/spanish.txt @@ -371,7 +371,7 @@ SN| |Comprobar ficheros nuevos ACTIVADO |Comprobar ficheros nuevos DESACTIVADO |Est s usando el editor -123|Elige: 1) Editor de l¡neas, 2) E. Pantalla completa, 3) Editor externo +12|Elige: 1) E. Pantalla completa, 2) Editor externo |¡No hay mensajes! |Pulsa (Enter) para seguir: |Centrar @@ -436,7 +436,7 @@ SN| |Tu password ha caducado, nuevo password : |Pulsa ENTER para seguir |No puedes escribir, ­esta  rea es de Solo Lectura! -12|Elige: 1) Editor de l¡neas, 2) Editor de pantalla completa +1|Elige: 1) Editor de pantalla completa |Upload de correo Off-Line |El paquete recibido no es v lido |Comprimido con un compresor desconocido diff --git a/lib/users.h b/lib/users.h index 8e3e7148..b9373014 100644 --- a/lib/users.h +++ b/lib/users.h @@ -36,7 +36,7 @@ #define Max_passlen 14 /* Define maximum passwd length */ -typedef enum {LINEEDIT, FSEDIT, EXTEDIT} MSGEDITOR; +typedef enum {X_LINEEDIT, FSEDIT, EXTEDIT} MSGEDITOR; /************************************************************************ diff --git a/mbsebbs/Makefile b/mbsebbs/Makefile index b17a4f04..57ea3444 100644 --- a/mbsebbs/Makefile +++ b/mbsebbs/Makefile @@ -6,7 +6,7 @@ include ../Makefile.global SRCS = signature.c filesub.c language.c \ msgutil.c oneline.c morefile.c \ - email.c fsedit.c lineedit.c page.c \ + email.c fsedit.c page.c \ bye.c funcs.c mail.c term.c ttyio.c openport.c \ newuser.c pinfo.c timecheck.c change.c transfer.c \ exitinfo.c mbsebbs.c menu.c pop3.c lastcallers.c \ @@ -15,7 +15,7 @@ SRCS = signature.c filesub.c language.c \ door.c dispfile.c userlist.c timestats.c logentry.c \ ymsend.c ymrecv.c zmmisc.c zmsend.c zmrecv.c HDRS = signature.h filesub.h language.h mbsebbs.h misc.h offline.h \ - timeout.h email.h fsedit.h lineedit.h \ + timeout.h email.h fsedit.h \ msgutil.h oneline.h user.h bye.h morefile.h \ funcs.h mail.h page.h term.h ttyio.h openport.h \ change.h exitinfo.h newuser.h \ @@ -26,14 +26,14 @@ HDRS = signature.h filesub.h language.h mbsebbs.h misc.h offline.h \ MBSEBBS_OBJS = signature.o chat.o file.o funcs.o mail.o menu.o \ misc.o pinfo.o oneline.o page.o fsedit.o transfer.o \ bye.o change.o mbsebbs.o timeout.o user.o timecheck.o \ - exitinfo.o filesub.o lineedit.o offline.o language.o msgutil.o \ + exitinfo.o filesub.o offline.o language.o msgutil.o \ pop3.o email.o input.o whoson.o door.o dispfile.o userlist.o timestats.o \ logentry.o morefile.o lastcallers.o term.o ttyio.o openport.o \ ymsend.o ymrecv.o zmmisc.o zmsend.o zmrecv.o MBSEBBS_LIBS = ../lib/libmbse.a ../lib/libmsgbase.a ../lib/libdbase.a ../lib/libmbinet.a ../lib/libnodelist.a MBNEWUSR_OBJS = mbnewusr.o newuser.o language.o timeout.o dispfile.o oneline.o ttyio.o \ timecheck.o input.o exitinfo.o funcs.o misc.o change.o door.o term.o openport.o \ - filesub.o mail.o email.o msgutil.o pop3.o lineedit.o fsedit.o whoson.o + filesub.o mail.o email.o msgutil.o pop3.o fsedit.o whoson.o MBNEWUSR_LIBS = ../lib/libmbse.a ../lib/libmsgbase.a ../lib/libdbase.a ../lib/libmbinet.a ../lib/libnodelist.a OTHER = Makefile TARGET = mbsebbs mbnewusr @@ -99,11 +99,10 @@ oneline.o: ../config.h ../lib/mbselib.h ../lib/mbse.h ../lib/users.h oneline.h f morefile.o: ../config.h ../lib/mbselib.h ../lib/mbse.h ../lib/users.h input.h language.h morefile.h timeout.h term.h ttyio.h email.o: ../config.h ../lib/mbselib.h ../lib/mbse.h ../lib/users.h ../lib/msgtext.h ../lib/msg.h ../lib/mbinet.h exitinfo.h language.h mail.h timeout.h msgutil.h input.h email.h whoson.h term.h ttyio.h fsedit.o: ../config.h ../lib/mbselib.h ../lib/mbse.h ../lib/users.h mail.h input.h language.h timeout.h pinfo.h fsedit.h term.h ttyio.h -lineedit.o: ../config.h ../lib/mbselib.h ../lib/mbse.h ../lib/users.h mail.h input.h language.h timeout.h lineedit.h term.h ttyio.h page.o: ../config.h ../lib/mbselib.h ../lib/mbse.h ../lib/users.h dispfile.h input.h chat.h page.h timeout.h mail.h language.h term.h ttyio.h bye.o: ../config.h ../lib/mbselib.h ../lib/mbse.h ../lib/users.h ../lib/nodelist.h dispfile.h misc.h language.h bye.h term.h openport.h ttyio.h funcs.o: ../config.h ../lib/mbselib.h ../lib/mbse.h ../lib/users.h ../lib/msgtext.h ../lib/msg.h funcs.h term.h ttyio.h -mail.o: ../config.h ../lib/mbselib.h ../lib/mbse.h ../lib/users.h ../lib/nodelist.h ../lib/msgtext.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 term.h ttyio.h openport.h +mail.o: ../config.h ../lib/mbselib.h ../lib/mbse.h ../lib/users.h ../lib/nodelist.h ../lib/msgtext.h ../lib/msg.h mail.h funcs.h input.h language.h misc.h timeout.h oneline.h exitinfo.h fsedit.h filesub.h msgutil.h pop3.h email.h door.h whoson.h term.h ttyio.h openport.h term.o: ../config.h ../lib/mbselib.h ../lib/users.h term.h ttyio.h ttyio.o: ../config.h ../lib/mbselib.h ttyio.h openport.o: ../config.h ../lib/mbselib.h ttyio.h openport.h zmmisc.h diff --git a/mbsebbs/change.c b/mbsebbs/change.c index 07ce86c6..4a1d4f24 100644 --- a/mbsebbs/change.c +++ b/mbsebbs/change.c @@ -410,21 +410,18 @@ void Chg_FsMsged() Enter(1); if (strlen(CFG.externaleditor)) - /* Select: 1) Line editor, 2) Fullscreen editor, 3) External editor */ + /* Select: 1) Fullscreen editor, 2) External editor */ pout(WHITE, BLACK, (char *)Language(373)); else - /* Select: 1) Line editor, 2) Fullscreen editor */ + /* Select: 1) Fullscreen editor */ pout(WHITE, BLACK, (char *)Language(438)); alarm_on(); z = toupper(Readkey()); 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) && strlen(CFG.externaleditor))) { + } else if ((z == Keystroke(373, 1) && strlen(CFG.externaleditor))) { exitinfo.MsgEditor = EXTEDIT; Syslog('+', "User selected external editor"); } diff --git a/mbsebbs/dispfile.c b/mbsebbs/dispfile.c index fe3efbaf..9c80e700 100644 --- a/mbsebbs/dispfile.c +++ b/mbsebbs/dispfile.c @@ -528,13 +528,13 @@ void ControlCodeU(int ch) case '3': switch(exitinfo.MsgEditor) { - case LINEEDIT: snprintf(temp, 81, "%s", Language(387)); - break; - case FSEDIT: snprintf(temp, 81, "%s", Language(388)); - break; - case EXTEDIT: snprintf(temp, 81, "%s", Language(389)); - break; - default: snprintf(temp, 81, "?"); + case X_LINEEDIT: snprintf(temp, 81, "%s", Language(388)); + break; + case FSEDIT: snprintf(temp, 81, "%s", Language(388)); + break; + case EXTEDIT: snprintf(temp, 81, "%s", Language(389)); + break; + default: snprintf(temp, 81, "?"); } break; diff --git a/mbsebbs/lineedit.c b/mbsebbs/lineedit.c deleted file mode 100644 index 6220354d..00000000 --- a/mbsebbs/lineedit.c +++ /dev/null @@ -1,576 +0,0 @@ -/***************************************************************************** - * - * $Id$ - * Purpose ...............: Message line editor. - * - ***************************************************************************** - * Copyright (C) 1997-2005 - * - * 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, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - *****************************************************************************/ - -#include "../config.h" -#include "../lib/mbselib.h" -#include "../lib/mbse.h" -#include "../lib/users.h" -#include "mail.h" -#include "input.h" -#include "language.h" -#include "timeout.h" -#include "lineedit.h" -#include "term.h" -#include "ttyio.h" - - -extern int Line; -extern char *Message[]; - - -/* - * Internal prototypes - */ -void Line_Edit_Append(void); /* Append lines */ -void Line_Edit_Delete(void); /* Delete lines */ -void Line_Edit_Edit(void); /* Edit lines */ -void Line_Edit_Insert(void); /* Insert lines */ -void Line_Edit_Replace(void); /* Replace lines */ -void Line_Edit_Text(void); /* Edit (replace) text in line */ -void Line_Edit_Center(void); /* Center a line */ - - - - -void Line_Edit_Append() -{ - char msg[41]; - - if ((Line - 1) == TEXTBUFSIZE) { - Enter(1); - /* Maximum message length exceeded */ - pout(CYAN, BLACK, (char *) Language(166)); - Enter(1); - return; - } - - while (TRUE) { - snprintf(msg, 41, "%-2d : ", Line); - pout(LIGHTGREEN, BLACK, msg); - colour(CFG.MsgInputColourF, CFG.MsgInputColourB); - alarm_on(); - GetstrP(Message[Line], 72, 0); - - if ((strcmp(Message[Line], "")) == 0) - return; - - Line++; - if ((Line - 1) == TEXTBUFSIZE) { - Enter(1); - /* Maximum message length exceeded */ - pout(LIGHTRED, BLACK, (char *) Language(166)); - Enter(1); - return; - } - } -} - - - -void Line_Edit_Delete() -{ - int i, start, end = 0, total, Loop; - char temp[81]; - - while (TRUE) { - Enter(2); - /* Delete starting at line */ - snprintf(temp, 81, "%s#(1 - %d): ", (char *) Language(176), (Line - 1) ); - pout(LIGHTGREEN, BLACK, temp); - colour(CFG.InputColourF, CFG.InputColourB); - GetstrC(temp, 80); - if ((strcmp(temp, "")) == 0) { - /* Aborted. */ - pout(WHITE, BLACK, (char *) Language(177)); - Enter(1); - return; - } - - start = atoi(temp); - if (start > (Line - 1)) { - Enter(1); - /* Please enter a number in the range of */ - snprintf(temp, 81, "%s(1 - %d)", (char *) Language(178), (Line - 1) ); - pout(LIGHTGREEN, BLACK, temp); - } else - break; - } - - while (TRUE) { - /* Delete ending at line */ - snprintf(temp, 81, "%s# (1 - %d): ", (char *) Language(179), (Line - 1) ); - pout(LIGHTGREEN, BLACK, temp); - colour(CFG.InputColourF, CFG.InputColourB); - GetstrC(temp, 80); - if ((strcmp(temp, "")) == 0) { - /* Aborted. */ - pout(WHITE, BLACK, (char *) Language(176)); - Enter(1); - return; - } - - end = atoi(temp); - - if(end > (Line - 1)) { - Enter(1); - /* Please enter a number in the range of */ - snprintf(temp, 81, "%s(1 - %d)", (char *) Language(179), (Line - 1) ); - pout(LIGHTGREEN, BLACK, temp); - Enter(2); - } else - break; - } - - /* Get total by minusing the end line from the start line */ - /* and + 1 will give you total lines between start and end */ - total = (end - start) + 1; - - /* Define loop by minusing total lines from end which will */ - /* do a loop for only the amount of lines left after the */ - /* end line */ - Loop = Line - end++; - - /* Minus the total amount of deleted lines from the current */ - /* amount of lines to keep track of how many lines you are */ - /* working with */ - Line -= total; - - /* Do loop to copy the current message over the deleted lines */ - - for (i = 0; i < Loop; i++) - strcpy(*(Message + start++), *(Message + end++)); -} - - - -void Line_Edit_Edit() -{ - int j, edit; - char temp[81]; - - while (TRUE) { - while (TRUE) { - Enter(1); - /* Enter line # to edit */ - snprintf(temp, 81, "%s(1 - %d): ", (char *) Language(181), (Line - 1) ); - pout(LIGHTGREEN, BLACK, temp); - colour(CFG.InputColourF, CFG.InputColourB); - GetstrC(temp, 80); - if ((strcmp(temp, "")) == 0) - return; - - edit = atoi(temp); - - if (edit > Line) { - Enter(1); - /* Please enter a number in the range of */ - snprintf(temp, 81, "%s(1 - %d) ", (char *) Language(178), (Line - 1) ); - pout(LIGHTGREEN, BLACK, temp); - } else - break; - } - - Enter(1); - snprintf(temp, 81, "%d : ", edit); - pout(LIGHTGREEN, BLACK, temp); - colour(CFG.MsgInputColourF, CFG.MsgInputColourB); - PUTSTR(Message[edit]); - j = strlen(Message[edit]); - colour(CFG.MsgInputColourF, CFG.MsgInputColourB); - alarm_on(); - GetstrP(Message[edit], 80, j); - } -} - - - -void Line_Edit_Insert() -{ - int i, j, start, end = 0, total; - char temp[81]; - - if ((Line - 1) == TEXTBUFSIZE) { - Enter(1); - /* Maximum message length exceeded */ - pout(CYAN, BLACK, (char *) Language(166)); - Enter(1); - return; - } - - while (TRUE) { - Enter(2); - /* Enter line # to insert text before */ - snprintf(temp, 81, "%s(1 - %d): ", (char *) Language(183), (Line - 1)); - pout(LIGHTGREEN, BLACK, temp); - colour(CFG.InputColourF, CFG.InputColourB); - GetstrC(temp, 80); - if ((strcmp(temp, "")) == 0) { - /* Aborted. */ - pout(WHITE, BLACK, (char *) Language(177)); - return; - } - - start = atoi(temp); - - if (start > (Line - 1)) { - Enter(1); - /* Please enter a number in the range of */ - snprintf(temp, 81, "%s(1 - %d)", (char *) Language(178), (Line - 1)); - pout(LIGHTGREEN, BLACK, temp); - } else - break; - } - - Enter(1); - j = start; - snprintf(temp, 81, "%-2d : ", start); - pout(LIGHTGREEN, BLACK, temp); - colour(CFG.MsgInputColourF, CFG.MsgInputColourB); - GetstrC(temp, 80); - - if ((strcmp(temp, "")) == 0) - return; - - total = Line - start; - end = Line; - Line++; - start = Line; - - for (i = 0; i < total + 1; i++) { - strcpy(Message[start], Message[end]); - start--; - end--; - } - - strcpy(Message[j], temp); -} - - - -void Line_Edit_Replace() -{ - int edit; - char temp[81]; - - while (TRUE) { - while (TRUE) { - Enter(2); - /* Enter line # to replace */ - snprintf(temp, 81, "%s(1 - %d): ", (char *) Language(185), (Line - 1) ); - pout(LIGHTGREEN, BLACK, temp); - colour(CFG.InputColourF, CFG.InputColourB); - GetstrC(temp, 80); - if ((strcmp(temp, "")) == 0) - return; - - edit = atoi(temp); - - if (edit > Line) { - Enter(1); - /* Please enter a number in the range of */ - snprintf(temp, 81, "%s(1 - %d) ", (char *) Language(178), (Line - 1)); - pout(LIGHTGREEN, BLACK, temp); - } else - break; - } - - Enter(1); - /* Line reads: */ - pout(WHITE, BLACK, (char *) Language(186)); - Enter(1); - - snprintf(temp, 81, "%d : ", edit); - pout(LIGHTGREEN, BLACK, temp); - colour(CFG.MsgInputColourF, CFG.MsgInputColourB); - PUTSTR(Message[edit]); - Enter(2); - - snprintf(temp, 81, "%d : ", edit); - pout(LIGHTGREEN, BLACK, temp); - colour(CFG.MsgInputColourF, CFG.MsgInputColourB); - GetstrC(temp, 80); - if ((strcmp(temp, "")) == 0) { - Enter(1); - /* Unchanged. */ - pout(WHITE, BLACK, (char *) Language(187)); - Enter(1); - } else - strcpy(Message[edit], temp); - - Enter(1); - /* Line now reads: */ - pout(WHITE, BLACK, (char *) Language(188)); - Enter(1); - - snprintf(temp, 81, "%d : ", edit); - pout(LIGHTGREEN, BLACK, temp); - - colour(CFG.MsgInputColourF, CFG.MsgInputColourB); - PUTSTR(Message[edit]); - } -} - - - -void Line_Edit_Text() -{ - int edit; - char temp[81], temp1[81]; - - while (TRUE) { - while (TRUE) { - Enter(2); - /* Enter line # to edit */ - snprintf(temp, 81, "%s(1 - %d): ", (char *) Language(194), (Line - 1)); - pout(LIGHTGREEN, BLACK, temp); - colour(CFG.InputColourF, CFG.InputColourB); - GetstrC(temp, 80); - if ((strcmp(temp, "")) == 0) - return; - - edit = atoi(temp); - - if (edit > Line) { - Enter(1); - /* Please enter a number in the range of */ - snprintf(temp, 81, "%s(1 - %d) ", (char *) Language(178), (Line - 1) ); - pout(LIGHTGREEN, BLACK, temp); - } else - break; - } - - Enter(1); - /* Line reads: */ - pout(WHITE, BLACK, (char *) Language(186)); - Enter(1); - snprintf(temp, 81, "%d : ", edit); - pout(LIGHTGREEN, BLACK, temp); - colour(CFG.MsgInputColourF, CFG.MsgInputColourB); - PUTSTR(Message[edit]); - Enter(2); - - /* Text to replace: */ - pout(LIGHTGREEN, BLACK, (char *) Language(195)); - colour(CFG.InputColourF, CFG.InputColourB); - GetstrC(temp, 80); - /* Replacement text: */ - pout(LIGHTGREEN, BLACK, (char *) Language(196)); - colour(CFG.InputColourF, CFG.InputColourB); - GetstrC(temp1, 80); - - strreplace(Message[edit], temp, temp1); - - Enter(1); - /* Line now reads: */ - pout(WHITE, BLACK, (char *) Language(197)); - Enter(1); - snprintf(temp, 81, "%d : ", edit); - pout(LIGHTGREEN, BLACK, temp); - colour(CFG.MsgInputColourF, CFG.MsgInputColourB); - PUTSTR(Message[edit]); - } -} - - - -void Line_Edit_Center() -{ - int i, j, z, center, maxlen = 78; - char *CEnter, temp[81]; - - Enter(2); - /* Enter line # to center */ - snprintf(temp, 81, "%s(1 - %d): ", (char *) Language(203), (Line - 1)); - pout(WHITE, BLACK, temp); - GetstrC(temp, 80); - if ((strcmp(temp, "")) == 0) - return; - - CEnter = calloc(81, sizeof(char)); - center = atoi(temp); - j = strlen(Message[center]); - if (j >= maxlen) { - Enter(1); - /* Line is maximum length and cannot be centered */ - pout(LIGHTGREEN, BLACK, (char *) Language(204)); - Enter(1); - } else { - z = 35 - (j / 2); - - for (i = 0; i < z; i++) - strcat(CEnter," "); - strcat(CEnter, Message[center]); - strcpy(Message[center], CEnter); - } - - Enter(1); - colour(CFG.MsgInputColourF, CFG.MsgInputColourB); - PUTSTR(Message[center]); - Enter(1); - free(CEnter); -} - - - -int Line_Edit() -{ - int i, j; - char msg[81]; - - clear(); - colour(LIGHTRED, BLACK); - /* Begin your message now, Blank line to end */ - Center((char *) Language(164)); - /* Maximum of TEXTBUFSIZE lines, 73 chars per line */ - Center((char *) Language(165)); - colour(YELLOW, BLACK); - PUTSTR((char *)" ("); - for (i = 0; i < 74; i++) - PUTSTR((char *)"-"); - PUTSTR((char *)")"); - Enter(1); - - Line_Edit_Append(); - - while (TRUE) { - Enter(1); - /* Functions available: (Current Message: */ /* Lines) */ - snprintf(msg, 81, "%s%d %s", (char *) Language(167), (Line - 1), (char *) Language(168)); - pout(YELLOW, BLACK, msg); - Enter(2); - - /* L - List message S - Save message C - Continue message */ - pout(LIGHTCYAN, BLACK, (char *) Language(169)); - Enter(1); - - /* Q - Quit message D - Delete line I - Insert line */ - pout(LIGHTCYAN, BLACK, (char *) Language(170)); - Enter(1); - - /* T - Text edit E - Edit line R - Replace line */ - pout(LIGHTCYAN, BLACK, (char *) Language(171)); - Enter(1); - - /* Z - Center line */ - pout(LIGHTCYAN, BLACK, (char *) Language(172)); - Enter(2); - - snprintf(msg, 81, "%s [", (char *) Language(173)); - pout(WHITE, BLACK, msg); - for (i = 0; i < 10; i++) - PUTCHAR(Keystroke(172, i)); - PUTSTR((char *)"]: "); - - alarm_on(); - j = toupper(Readkey()); - - if (j == Keystroke(172, 2)) { - /* Continue */ - pout(WHITE, BLACK, (char *) Language(174)); - Enter(1); - Line_Edit_Append(); - } else if (j == Keystroke(172, 4)) { - /* Delete */ - pout(WHITE, BLACK, (char *) Language(175)); - Enter(1); - Line_Edit_Delete(); - } else if (j == Keystroke(172, 7)) { - /* Edit */ - pout(WHITE, BLACK, (char *) Language(180)); - Enter(1); - Line_Edit_Edit(); - } else if (j == Keystroke(172, 5)) { - /* Insert */ - pout(WHITE, BLACK, (char *) Language(182)); - Enter(1); - Line_Edit_Insert(); - } else if (j == Keystroke(172, 0)) { - pout(WHITE, BLACK, (char *) Language(184)); - Enter(2); - - for (i = 1; i < Line; i++) { - snprintf(msg, 81, "%d: ", i); - pout(LIGHTGREEN, BLACK, msg); - colour(CFG.MsgInputColourF, CFG.MsgInputColourB); - PUTSTR(Message[i]); - Enter(1); - } - } else if (j == Keystroke(172, 8)) { - /* Replace */ - pout(WHITE, BLACK, (char *) Language(362)); - Enter(1); - Line_Edit_Replace(); - } else if (j == Keystroke(172, 3)) { - /* Quit */ - pout(WHITE, BLACK, (char *) Language(189)); - Enter(2); - - /* Are you sure [y/N] */ - PUTSTR((char *) Language(190)); - alarm_on(); - - if (toupper(Readkey()) == Keystroke(190, 0)) { - /* Yes */ - pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(356)); - Enter(1); - /* Message aborted. */ - pout(WHITE, BLACK, (char *) Language(191)); - Enter(2); - - sleep(1); - return FALSE; - } - - /* No */ - pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(192)); - Enter(1); - } else if (j == Keystroke(172, 6)) { - /* Text Edit */ - pout(WHITE, BLACK, (char *) Language(193)); - Line_Edit_Text(); - } else if (j == Keystroke(172, 1)) { - /* Save */ - pout(WHITE, BLACK, (char *) Language(198)); - Enter(1); - - if (Line > 1) - return TRUE; - - return FALSE; - } else if (j == Keystroke(172, 9)) { - /* Center */ - pout(WHITE, BLACK, (char *) Language(376)); - Enter(1); - Line_Edit_Center(); - } - } -} - - diff --git a/mbsebbs/lineedit.h b/mbsebbs/lineedit.h deleted file mode 100644 index 71894eca..00000000 --- a/mbsebbs/lineedit.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _LINEEDIT_H -#define _LINEEDIT_H - -int Line_Edit(void); /* The message line editor */ - -#endif - diff --git a/mbsebbs/mail.c b/mbsebbs/mail.c index 5fb19a1f..4dcdd1de 100644 --- a/mbsebbs/mail.c +++ b/mbsebbs/mail.c @@ -50,7 +50,6 @@ #include "timeout.h" #include "oneline.h" #include "exitinfo.h" -#include "lineedit.h" #include "fsedit.h" #include "filesub.h" #include "msgutil.h" @@ -376,9 +375,9 @@ void SysopComment(char *Cmt) int Edit_Msg() { switch (exitinfo.MsgEditor) { - case LINEEDIT: return Line_Edit(); - case FSEDIT: return Fs_Edit(); - case EXTEDIT: return Ext_Edit(); + case X_LINEEDIT: return Fs_Edit(); + case FSEDIT: return Fs_Edit(); + case EXTEDIT: return Ext_Edit(); } return 0; } diff --git a/mbsetup/ledit.c b/mbsetup/ledit.c index e3f3965c..4a2b6334 100644 --- a/mbsetup/ledit.c +++ b/mbsetup/ledit.c @@ -1813,10 +1813,10 @@ int edit_newsmode(int y, int x, int val) char *getmsgeditor(int val) { switch (val) { - case LINEEDIT: return (char *)"Line"; - case FSEDIT: return (char *)"FS. "; - case EXTEDIT: return (char *)"Ext."; - default: return NULL; + case X_LINEEDIT: return (char *)"FS. "; + case FSEDIT: return (char *)"FS. "; + case EXTEDIT: return (char *)"Ext."; + default: return NULL; } } @@ -1841,10 +1841,14 @@ int edit_msgeditor(int y, int x, int val) ch = readkey(y, x, YELLOW, BLUE); if (ch == ' ') { - if (val < EXTEDIT) - val++; - else - val = LINEEDIT; + if (strlen(CFG.externaleditor)) { + if (val < EXTEDIT) + val++; + else + val = FSEDIT; + } else { + val = FSEDIT; + } } } while ((ch != KEY_ENTER) && (ch != '\012')); diff --git a/mbsetup/m_users.c b/mbsetup/m_users.c index f853ea89..c0da0b3f 100644 --- a/mbsetup/m_users.c +++ b/mbsetup/m_users.c @@ -90,57 +90,60 @@ int CountUsers(void) int OpenUsers(void); int OpenUsers(void) { - FILE *fin, *fout; - char fnin[PATH_MAX], fnout[PATH_MAX]; - int oldsize; + FILE *fin, *fout; + char fnin[PATH_MAX], fnout[PATH_MAX]; + int oldsize; - snprintf(fnin, PATH_MAX, "%s/etc/users.data", getenv("MBSE_ROOT")); - snprintf(fnout, PATH_MAX, "%s/etc/users.temp", getenv("MBSE_ROOT")); - if ((fin = fopen(fnin, "r")) != NULL) { - if ((fout = fopen(fnout, "w")) != NULL) { - fread(&usrconfighdr, sizeof(usrconfighdr), 1, fin); - /* - * In case we are automatic upgrading the data format - * we save the old format. If it is changed, the - * database must always be updated. - */ - oldsize = usrconfighdr.recsize; - if (oldsize != sizeof(usrconfig)) { - UsrUpdated = 1; - Syslog('+', "Upgraded %s, format changed", fnin); - } else - UsrUpdated = 0; - usrconfighdr.hdrsize = sizeof(usrconfighdr); - usrconfighdr.recsize = sizeof(usrconfig); - fwrite(&usrconfighdr, sizeof(usrconfighdr), 1, fout); + snprintf(fnin, PATH_MAX, "%s/etc/users.data", getenv("MBSE_ROOT")); + snprintf(fnout, PATH_MAX, "%s/etc/users.temp", getenv("MBSE_ROOT")); + if ((fin = fopen(fnin, "r")) != NULL) { + if ((fout = fopen(fnout, "w")) != NULL) { + fread(&usrconfighdr, sizeof(usrconfighdr), 1, fin); + /* + * In case we are automatic upgrading the data format + * we save the old format. If it is changed, the + * database must always be updated. + */ + oldsize = usrconfighdr.recsize; + if (oldsize != sizeof(usrconfig)) { + UsrUpdated = 1; + Syslog('+', "Upgraded %s, format changed", fnin); + } else + UsrUpdated = 0; + usrconfighdr.hdrsize = sizeof(usrconfighdr); + usrconfighdr.recsize = sizeof(usrconfig); + fwrite(&usrconfighdr, sizeof(usrconfighdr), 1, fout); - /* - * The datarecord is filled with zero's before each - * read, so if the format changed, the new fields - * will be empty. - */ - memset(&usrconfig, 0, sizeof(usrconfig)); - while (fread(&usrconfig, oldsize, 1, fin) == 1) { - /* - * In version 0.33.20 the message editor has 3 choices, - * adjust settings. - */ - if (usrconfig.xFsMsged && (usrconfig.MsgEditor == LINEEDIT)) { - usrconfig.MsgEditor = FSEDIT; - UsrUpdated = 1; - Syslog('+', "Adjusted editor setting for user %s", usrconfig.sUserName); - } - fwrite(&usrconfig, sizeof(usrconfig), 1, fout); - memset(&usrconfig, 0, sizeof(usrconfig)); - } + /* + * The datarecord is filled with zero's before each + * read, so if the format changed, the new fields + * will be empty. + */ + memset(&usrconfig, 0, sizeof(usrconfig)); + while (fread(&usrconfig, oldsize, 1, fin) == 1) { + /* + * Since 0.83.0 there is no more line editor. + */ + if ((usrconfig.MsgEditor == X_LINEEDIT) || + ((usrconfig.MsgEditor == EXTEDIT) && (strlen(CFG.externaleditor) == 0))) { + if (strlen(CFG.externaleditor)) + usrconfig.MsgEditor = EXTEDIT; + else + usrconfig.MsgEditor = FSEDIT; + UsrUpdated = 1; + Syslog('+', "Adjusted editor setting for user %s", usrconfig.sUserName); + } + fwrite(&usrconfig, sizeof(usrconfig), 1, fout); + memset(&usrconfig, 0, sizeof(usrconfig)); + } - fclose(fin); - fclose(fout); - return 0; - } else - return -1; - } - return -1; + fclose(fin); + fclose(fout); + return 0; + } else + return -1; + } + return -1; } @@ -171,26 +174,6 @@ void CloseUsers(int force) -int AppendUsers(void) -{ - FILE *fil; - char ffile[PATH_MAX]; - - snprintf(ffile, PATH_MAX, "%s/etc/users.temp", getenv("MBSE_ROOT")); - if ((fil = fopen(ffile, "a")) != NULL) { - memset(&usrconfig, 0, sizeof(usrconfig)); - usrconfig.MailScan = TRUE; - usrconfig.ieFILE = TRUE; - fwrite(&usrconfig, sizeof(usrconfig), 1, fil); - fclose(fil); - UsrUpdated = 1; - return 0; - } else - return -1; -} - - - void Screen1(void) { clr_index(); @@ -201,28 +184,28 @@ void Screen1(void) mbse_mvprintw( 7, 2, "2. Security"); mbse_mvprintw( 8, 2, "3. Expirydate"); mbse_mvprintw( 9, 2, "4. Expiry Sec"); - mbse_mvprintw(10, 2, "5. Unix name"); + mbse_mvprintw(10, 2, " Unix name"); mbse_mvprintw(11, 2, " 1st login"); mbse_mvprintw(12, 2, " Last login"); mbse_mvprintw(13, 2, " Pwdchange"); - mbse_mvprintw(14, 2, "6. Credit"); - mbse_mvprintw(15, 2, "7. Hidden"); - mbse_mvprintw(16, 2, "8. Deleted"); - mbse_mvprintw(17, 2, "9. No Kill"); - mbse_mvprintw(18, 2, "10. Comment"); + mbse_mvprintw(14, 2, "5. Credit"); + mbse_mvprintw(15, 2, "6. Hidden"); + mbse_mvprintw(16, 2, "7. Deleted"); + mbse_mvprintw(17, 2, "8. No Kill"); + mbse_mvprintw(18, 2, "9. Comment"); - mbse_mvprintw( 6,54, "11. Locked"); - mbse_mvprintw( 7,54, "12. Guest"); - mbse_mvprintw( 8,54, "13. Ext Info"); - mbse_mvprintw( 9,54, "14. Email"); + mbse_mvprintw( 6,54, "10. Locked"); + mbse_mvprintw( 7,54, "11. Guest"); + mbse_mvprintw( 8,54, "12. Ext Info"); + mbse_mvprintw( 9,54, "13. Email"); mbse_mvprintw(10,54, " Calls"); mbse_mvprintw(11,54, " Downlds"); mbse_mvprintw(12,54, " Down Kb"); mbse_mvprintw(13,54, " Uploads"); mbse_mvprintw(14,54, " Upload Kb"); mbse_mvprintw(15,54, " Posted"); - mbse_mvprintw(16,54, "15. Time left"); - mbse_mvprintw(17,54, "16. Screen 2"); + mbse_mvprintw(16,54, "14. Time left"); + mbse_mvprintw(17,54, "15. Screen 2"); } @@ -238,8 +221,9 @@ void Fields1(void) show_int( 7,17, usrconfig.Security.level); show_str( 8,17,10, usrconfig.sExpiryDate); show_int( 9,17, usrconfig.ExpirySec.level); + set_color(LIGHTGRAY, BLACK); show_str(10,17, 8, usrconfig.Name); - + now = usrconfig.tFirstLoginDate; ld = localtime(&now); snprintf(Date, 30, "%02d-%02d-%04d %02d:%02d:%02d", ld->tm_mday, @@ -256,6 +240,7 @@ void Fields1(void) ld->tm_mon+1, ld->tm_year + 1900, ld->tm_hour, ld->tm_min, ld->tm_sec); show_str(13,17,19, Date); + set_color(WHITE, BLACK); show_int( 14,17, usrconfig.Credit); show_bool(15,17, usrconfig.Hidden); show_bool(16,17, usrconfig.Deleted); @@ -266,12 +251,14 @@ void Fields1(void) show_bool( 7,68, usrconfig.Guest); show_bool( 8,68, usrconfig.OL_ExtInfo); show_bool( 9,68, usrconfig.Email); + set_color(LIGHTGRAY, BLACK); show_int( 10,68, usrconfig.iTotalCalls); show_int( 11,68, usrconfig.Downloads); show_int( 12,68, usrconfig.DownloadK); show_int( 13,68, usrconfig.Uploads); show_int( 14,68, usrconfig.UploadK); show_int( 15,68, usrconfig.iPosted); + set_color(WHITE, BLACK); show_int( 16,68, usrconfig.iTimeLeft); } @@ -502,13 +489,19 @@ int EditUsrRec(int Area) fread(&usrconfig, sizeof(usrconfig), 1, fil); fclose(fil); + + if (strlen(usrconfig.sUserName) == 0) { + errmsg((char *)"You cannot edit an empty record"); + return -1; + } + crc = 0xffffffff; crc = upd_crc32((char *)&usrconfig, crc, sizeof(usrconfig)); Screen1(); for (;;) { Fields1(); - j = select_menu(16); + j = select_menu(15); switch(j) { case 0: crc1 = 0xffffffff; crc1 = upd_crc32((char *)&usrconfig, crc1, sizeof(usrconfig)); @@ -541,22 +534,21 @@ int EditUsrRec(int Area) break; case 3 :E_STR( 8,17,10,usrconfig.sExpiryDate, "The ^Expiry Date^ in DD-MM-YYYY format, 00-00-0000 is no expire") case 4 :E_INT( 9,17, usrconfig.ExpirySec.level,"The ^Expiry Level^ for this user") - case 5 :E_STR( 10,17,8, usrconfig.Name, "The ^Unix username^ for this user") - case 6 :E_INT( 14,17, usrconfig.Credit, "Users ^Credit^") - case 7 :E_BOOL(15,17, usrconfig.Hidden, "Is user ^hidden^ on the BBS") - case 8 :E_BOOL(16,17, usrconfig.Deleted, "Is user marked for ^deletion^") - case 9 :E_BOOL(17,17, usrconfig.NeverDelete, "^Never delete^ this user") - case 10:E_STR( 18,17,62,usrconfig.sComment, "A ^Comment^ for this user") + case 5 :E_INT( 14,17, usrconfig.Credit, "Users ^Credit^") + case 6 :E_BOOL(15,17, usrconfig.Hidden, "Is user ^hidden^ on the BBS") + case 7 :E_BOOL(16,17, usrconfig.Deleted, "Is user marked for ^deletion^") + case 8 :E_BOOL(17,17, usrconfig.NeverDelete, "^Never delete^ this user") + case 9 :E_STR( 18,17,62,usrconfig.sComment, "A ^Comment^ for this user") - case 11:E_BOOL( 6,68, usrconfig.LockedOut, "User is ^Locked Out^ of this BBS") - case 12:E_BOOL( 7,68, usrconfig.Guest, "This is a ^Guest^ account") - case 13:E_BOOL( 8,68, usrconfig.OL_ExtInfo, "Add ^Extended Message Info^ in OLR download") - case 14:E_BOOL( 9,68, usrconfig.Email, "User has a ^private email^ mailbox") - case 15:if (yes_no((char *)"Reset time left for today") == 1) { + case 10:E_BOOL( 6,68, usrconfig.LockedOut, "User is ^Locked Out^ of this BBS") + case 11:E_BOOL( 7,68, usrconfig.Guest, "This is a ^Guest^ account") + case 12:E_BOOL( 8,68, usrconfig.OL_ExtInfo, "Add ^Extended Message Info^ in OLR download") + case 13:E_BOOL( 9,68, usrconfig.Email, "User has a ^private email^ mailbox") + case 14:if (yes_no((char *)"Reset time left for today") == 1) { Reset_Time(); } break; - case 16:EditUsrRec2(); + case 15:EditUsrRec2(); clr_index(); Screen1(); Fields1(); @@ -570,99 +562,90 @@ int EditUsrRec(int Area) void EditUsers(void) { - int records, i, o, x, y; - char pick[12]; - FILE *fil; - char temp[PATH_MAX]; - int offset; + int records, i, o, x, y; + char pick[12]; + FILE *fil; + char temp[PATH_MAX]; + int offset; + clr_index(); + working(1, 0, 0); + IsDoing("Browsing Menu"); + if (config_read() == -1) { + working(2, 0, 0); + return; + } + + records = CountUsers(); + if (records == -1) { + working(2, 0, 0); + return; + } + + if (OpenUsers() == -1) { + working(2, 0, 0); + return; + } + o = 0; + if (! check_free()) + return; + + for (;;) { clr_index(); - working(1, 0, 0); - IsDoing("Browsing Menu"); - if (config_read() == -1) { - working(2, 0, 0); - return; - } - - records = CountUsers(); - if (records == -1) { - working(2, 0, 0); - return; - } - - if (OpenUsers() == -1) { - working(2, 0, 0); - return; - } - o = 0; - if (! check_free()) - return; - - for (;;) { - clr_index(); - set_color(WHITE, BLACK); - mbse_mvprintw( 5, 3, "15. USERS EDITOR"); + set_color(WHITE, BLACK); + mbse_mvprintw( 5, 3, "15. USERS EDITOR"); + set_color(CYAN, BLACK); + if (records != 0) { + snprintf(temp, PATH_MAX, "%s/etc/users.temp", getenv("MBSE_ROOT")); + working(1, 0, 0); + if ((fil = fopen(temp, "r")) != NULL) { + fread(&usrconfighdr, sizeof(usrconfighdr), 1, fil); + x = 2; + y = 7; set_color(CYAN, BLACK); - if (records != 0) { - snprintf(temp, PATH_MAX, "%s/etc/users.temp", getenv("MBSE_ROOT")); - working(1, 0, 0); - if ((fil = fopen(temp, "r")) != NULL) { - fread(&usrconfighdr, sizeof(usrconfighdr), 1, fil); - x = 2; - y = 7; - set_color(CYAN, BLACK); - for (i = 1; i <= 20; i++) { - if (i == 11) { - x = 42; - y = 7; - } - if ((o + i) <= records) { - offset = sizeof(usrconfighdr) + (((i + o) - 1) * usrconfighdr.recsize); - fseek(fil, offset, 0); - fread(&usrconfig, usrconfighdr.recsize, 1, fil); - if (!usrconfig.Deleted) - set_color(CYAN, BLACK); - else - set_color(LIGHTBLUE, BLACK); - snprintf(temp, 81, "%3d. %-32s", o + i, usrconfig.sUserName); - temp[37] = 0; - mbse_mvprintw(y, x, temp); - y++; - } - } - fclose(fil); - } - } - strcpy(pick, select_record(records, 20)); - - if (strncmp(pick, "-", 1) == 0) { - CloseUsers(FALSE); - open_bbs(); - return; - } - - if (strncmp(pick, "A", 1) == 0) { - working(1, 0, 0); - if (AppendUsers() == 0) { - records++; - working(1, 0, 0); - } else - working(2, 0, 0); - } - - if (strncmp(pick, "N", 1) == 0) - if ((o + 20) < records) - o = o + 20; - - if (strncmp(pick, "P", 1) == 0) - if ((o - 20) >= 0) - o = o - 20; - - if ((atoi(pick) >= 1) && (atoi(pick) <= records)) { - EditUsrRec(atoi(pick)); - o = ((atoi(pick) - 1) / 20) * 20; + for (i = 1; i <= 20; i++) { + if (i == 11) { + x = 42; + y = 7; + } + if ((o + i) <= records) { + offset = sizeof(usrconfighdr) + (((i + o) - 1) * usrconfighdr.recsize); + fseek(fil, offset, 0); + fread(&usrconfig, usrconfighdr.recsize, 1, fil); + if ((!usrconfig.Deleted) && strlen(usrconfig.sUserName)) + set_color(CYAN, BLACK); + else + set_color(LIGHTBLUE, BLACK); + snprintf(temp, 81, "%3d. %-32s", o + i, usrconfig.sUserName); + temp[37] = 0; + mbse_mvprintw(y, x, temp); + y++; + } } + fclose(fil); + } } + strcpy(pick, select_pick(records, 20)); + + if (strncmp(pick, "-", 1) == 0) { + CloseUsers(FALSE); + open_bbs(); + return; + } + + if (strncmp(pick, "N", 1) == 0) + if ((o + 20) < records) + o = o + 20; + + if (strncmp(pick, "P", 1) == 0) + if ((o - 20) >= 0) + o = o - 20; + + if ((atoi(pick) >= 1) && (atoi(pick) <= records)) { + EditUsrRec(atoi(pick)); + o = ((atoi(pick) - 1) / 20) * 20; + } + } }