proboard/USERSET.CPP

806 lines
16 KiB
C++

#include <string.h>
#include <stdlib.h>
#include <dos.h>
#include "proboard.hpp"
const OFF = 0;
const ON = 1;
const TOGGLE = 2;
const ASK = 3;
const NONE = 4;
const SAVE = 0x10;
const RESTORE = 0x20;
const QUIET = 0x40;
static int _near
toggle_type(char *data)
{
String param[5];
int num_para;
int ret=TOGGLE;
char *strings[] = { "OFF", "ON" , "TOGGLE" , "ASK" , "SAVE" , "RESTORE" , "/Q", NULL };
num_para = parse_data(data,param);
for(int i=0;i<num_para;i++)
{
for(int j=0;strings[j];j++) if(param[i] == strings[j]) break;
if(!strings[j]) continue;
switch(j)
{
case 0:
case 1:
case 2:
case 3: ret = j;
break;
case 4: ret |= SAVE;
break;
case 5: ret |= RESTORE;
break;
case 6: ret |= QUIET;
break;
}
}
if(ret == NONE) ret = TOGGLE;
return ret;
}
void
city_change(char *)
{
io << "\f\n" << S_CHANGE_CITY_TITLE_AND_PROMPT(user.city);
char tmp[26];
io.read(tmp,25);
if(strlen(tmp)<2) return;
strcpy(user.city,tmp);
LOG(1,"City changed to '%s'",user.city);
}
void
phone_change(char *)
{
io << "\f\n" << S_CHANGE_VOICE_PHONE_TITLE_AND_PROMPT(user.voicePhone);
char tmp[16];
io.read(tmp,15);
if(strlen(tmp)<5) return;
strcpy(user.voicePhone,tmp);
LOG(1,"Voice Phone # changed to '%s'",user.voicePhone);
}
void
dataphone_change(char *)
{
io << "\f\n" << S_CHANGE_DATA_PHONE_TITLE_AND_PROMPT(user.dataPhone);
char tmp[16];
io.read(tmp,15);
if(strlen(tmp)<5) return;
strcpy(user.dataPhone,tmp);
LOG(1,"Data Phone # changed to '%s'",user.dataPhone);
}
void
change_faxphone(char *)
{
io << "\f\n" << S_CHANGE_FAX_PHONE_TITLE_AND_PROMPT(user.faxPhone);
char tmp[16];
io.read(tmp,15);
if(strlen(tmp)<5) return;
strcpy(user.faxPhone,tmp);
LOG(1,"Fax Phone # changed to '%s'",user.faxPhone);
}
void
change_state(char *)
{
io << "\f\n" << S_CHANGE_STATE_TITLE_AND_PROMPT(user.state);
char tmp[26];
io.read(tmp,25);
if(strlen(tmp)<2) return;
strcpy(user.state,tmp);
LOG(1,"State changed to '%s'",user.state);
}
void
change_country(char *)
{
io << "\f\n" << S_CHANGE_COUNTRY_TITLE_AND_PROMPT(user.country);
char tmp[26];
io.read(tmp,25);
if(strlen(tmp)<3) return;
strcpy(user.country,tmp);
LOG(1,"Country changed to '%s'",user.country);
}
void
change_address(char *)
{
io << "\f\n" << S_CHANGE_MAILING_ADDRESS_TITLE_AND_PROMPT((char *)(String(user.address1)+"\n"+String(user.address2)+"\n"+String(user.address3)));
char tmp[51];
io << "\n\n";
io.read(tmp,50);
if(!tmp[0])
return;
strcpy(user.address1,tmp);
io << '\n';
io.read(user.address2,50);
io << '\n';
io.read(user.address3,50);
LOG(1,"Mailing address changed");
}
void
handle_change(char *)
{
io << "\f\n" << S_CHANGE_ALIAS_TITLE_AND_PROMPT(user.alias);
char tmp[36];
io.read(tmp,35,READMODE_UPFIRST);
if(strlen(tmp)<3) return;
User x;
long a_rec=-1,u_rec=-1;
bool a_found = x.search(tmp,TRUE,FALSE,TRUE);
if(a_found) a_rec = x.record;
bool u_found = x.search(tmp);
if(u_found) u_rec = x.record;
if(!strcmpl(tmp,"Sysop") || (a_rec>=0 && a_rec!=user_recnr) || (u_rec>=0 && u_rec!=user_recnr))
{
LOG(1,"Duplicate alias: '%s'",tmp);
io << "\n\n" << S_ALIAS_BEING_USED << "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
return;
}
strcpy(user.alias,tmp);
LOG(1,"Alias changed to '%s'",user.alias);
}
void password_change( char * )
{
char pass[ 16 ];
io << "\f\n"
<< S_CHANGE_PASSWORD_TITLE;
do
{
io << "\n\n"
<< S_ENTER_NEW_PASSWORD( form( "%d", cfg.min_passlength ) );
io.read( pass,
15,
READMODE_PWD );
if ( strlen( pass ) < cfg.min_passlength )
{
io << "\n\n"
<< S_ILLEGAL_PASSWORD
<< '\n';
sleep( 2 );
return;
}
io << "\n\n"
<< S_ASK_PASSWORD_AGAIN;
io.read( user.passWord,
15,
READMODE_PWD );
}
while( strcmpl( pass, user.passWord ) );
user.passWordCRC = RaCrc( user.passWord );
io << "\n\n"
<< S_PASSWORD_CHANGED_SUCCESSFULLY
<< "\n\n"
<< S_PRESS_ENTER_TO_CONTINUE;
LOG( 1,
"Password changed to '%s'",
user.passWord );
}
void lines_change(char *)
{
char newlen[4];
io << "\f\n" << S_CHANGE_SCREENLENGTH_TITLE_AND_PROMPT(form("%d",user.screenLength));
io.read(newlen,2,READMODE_DIGITS);
if(atoi(newlen) >= 5)
user.screenLength = atoi(newlen);
LOG(1,"Screenlength changed to %d",user.screenLength);
}
#define TOGGLE_DISPLAY(var) { io << ((var) ? string_enabled : string_disabled); io << S_PRESS_ENTER_TO_CONTINUE; }
void
ansi_toggle(char *data)
{
static bool prev = FALSE;
int action = toggle_type(data);
if(action & SAVE) prev = (user.uFlags & UFLAG_ANSI) ? TRUE:FALSE;
switch(action & 0xF)
{
case ON : user.uFlags |= UFLAG_ANSI;
break;
case OFF : user.uFlags &= ~UFLAG_ANSI;
break;
case TOGGLE: user.uFlags ^= UFLAG_ANSI;
break;
case ASK : io << '\n' << S_ASK_ANSI;
if(io.ask()) user.uFlags |= UFLAG_ANSI;
else
{
if(ansi_mode) io << "\x1b[0m";
user.uFlags &= ~UFLAG_ANSI;
}
io << '\n';
break;
}
if(action & RESTORE)
{
if(prev) user.uFlags |= UFLAG_ANSI;
else user.uFlags &= ~UFLAG_ANSI;
}
if(!(action & QUIET))
{
if(ansi_mode) LOG(1,"ANSI enabled");
else LOG(1,"ANSI disabled");
if(ansi_mode)
io << '\n' << S_ANSI_ENABLED;
else
io << '\n' << S_ANSI_DISABLED;
io << "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
}
updatemenu = TRUE;
}
void
toggle_avatar(char *data)
{
static bool prev = FALSE;
int action = toggle_type(data);
if(action & SAVE) prev = (user.uFlags & UFLAG_AVATAR) ? TRUE:FALSE;
switch(action & 0xF)
{
case ON : user.uFlags |= UFLAG_AVATAR;
break;
case OFF : user.uFlags &= ~UFLAG_AVATAR;
break;
case TOGGLE: user.uFlags ^= UFLAG_AVATAR;
break;
case ASK : io << '\n' << S_ASK_AVATAR;
if(io.ask()) user.uFlags |= UFLAG_AVATAR;
else user.uFlags &= ~UFLAG_AVATAR;
io << '\n';
break;
}
if(action & RESTORE)
{
if(prev) user.uFlags |= UFLAG_AVATAR;
else user.uFlags &= ~UFLAG_AVATAR;
}
if(!(user.uFlags & UFLAG_AVATAR)) user.uFlags &= ~UFLAG_AVTPLUS;
if(!(action & QUIET))
{
if(avatar) LOG(1,"AVATAR enabled");
else LOG(1,"AVATAR disabled");
if(avatar)
io << '\n' << S_AVATAR_ENABLED;
else
io << '\n' << S_AVATAR_DISABLED;
io << "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
}
updatemenu = TRUE;
}
void
toggle_avtplus(char *data)
{
static bool prev = FALSE;
int action = toggle_type(data);
if(action & SAVE) prev = (user.uFlags & UFLAG_AVTPLUS) ? TRUE:FALSE;
switch(action & 0xF)
{
case ON : user.uFlags |= UFLAG_AVTPLUS;
break;
case OFF : user.uFlags &= ~UFLAG_AVTPLUS;
break;
case TOGGLE: user.uFlags ^= UFLAG_AVTPLUS;
break;
case ASK : io << '\n' << S_ASK_AVATAR_PLUS;
if(io.ask()) user.uFlags |= UFLAG_AVTPLUS;
else user.uFlags &= ~UFLAG_AVTPLUS;
io << '\n';
break;
}
if(action & RESTORE)
{
if(prev) user.uFlags |= UFLAG_AVTPLUS;
else user.uFlags &= ~UFLAG_AVTPLUS;
}
if(!(action & QUIET))
{
if(avtplus) LOG(1,"AVT/0+ enabled");
else LOG(1,"AVT/0+ disabled");
if(avtplus)
io << '\n' << S_AVTPLUS_ENABLED;
else
io << '\n' << S_AVTPLUS_DISABLED;
io << "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
}
updatemenu = TRUE;
}
void
cls_toggle(char *data)
{
static bool prev = FALSE;
int action = toggle_type(data);
if(action & SAVE) prev = (user.uFlags & UFLAG_CLEAR) ? TRUE:FALSE;
switch(action & 0xF)
{
case ON : user.uFlags |= UFLAG_CLEAR;
break;
case OFF : user.uFlags &= ~UFLAG_CLEAR;
break;
case TOGGLE: user.uFlags ^= UFLAG_CLEAR;
break;
case ASK : io << '\n' << S_ASK_CLS;
if(io.ask()) user.uFlags |= UFLAG_CLEAR;
else user.uFlags &= ~UFLAG_CLEAR;
io << '\n';
break;
}
if(action & RESTORE)
{
if(prev) user.uFlags |= UFLAG_CLEAR;
else user.uFlags &= ~UFLAG_CLEAR;
}
if(!(action & QUIET))
{
if(cls_mode) LOG(1,"Screen clearing enabled");
else LOG(1,"Screen clearing disabled");
if(cls_mode)
io << '\n' << S_CLS_ENABLED;
else
io << '\n' << S_CLS_DISABLED;
io << "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
}
updatemenu = TRUE;
}
void
pause_toggle(char *data)
{
static bool prev = FALSE;
int action = toggle_type(data);
if(action & SAVE) prev = (user.uFlags & UFLAG_PAUSE) ? TRUE:FALSE;
switch(action & 0xF)
{
case ON : user.uFlags |= UFLAG_PAUSE;
break;
case OFF : user.uFlags &= ~UFLAG_PAUSE;
break;
case TOGGLE: user.uFlags ^= UFLAG_PAUSE;
break;
case ASK : io << '\n' << S_ASK_PAUSE;
if(io.ask()) user.uFlags |= UFLAG_PAUSE;
else user.uFlags &= ~UFLAG_PAUSE;
io << '\n';
break;
}
if(action & RESTORE)
{
if(prev) user.uFlags |= UFLAG_PAUSE;
else user.uFlags &= ~UFLAG_PAUSE;
}
if(!(action & QUIET))
{
if(pause_mode) LOG(1,"Page pausing enabled");
else LOG(1,"Page pausing disabled");
if(pause_mode)
io << '\n' << S_PAUSE_ENABLED;
else
io << '\n' << S_PAUSE_DISABLED;
io << "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
}
updatemenu = TRUE;
}
void
fsed_toggle(char *data)
{
static bool prev = FALSE;
int action = toggle_type(data);
if(action & SAVE) prev = (user.uFlags & UFLAG_FSED) ? TRUE:FALSE;
switch(action & 0xF)
{
case ON : user.uFlags |= UFLAG_FSED;
break;
case OFF : user.uFlags &= ~UFLAG_FSED;
break;
case TOGGLE: user.uFlags ^= UFLAG_FSED;
break;
case ASK : io << '\n' << S_ASK_FSED;
if(io.ask()) user.uFlags |= UFLAG_FSED;
else user.uFlags &= ~UFLAG_FSED;
io << '\n';
break;
}
if(action & RESTORE)
{
if(prev) user.uFlags |= UFLAG_FSED;
else user.uFlags &= ~UFLAG_FSED;
}
if(!(action & QUIET))
{
if(fsed_mode) LOG(1,"FsEd enabled");
else LOG(1,"FsEd disabled");
if(fsed_mode)
io << '\n' << S_FSED_ENABLED;
else
io << '\n' << S_FSED_DISABLED;
io << "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
}
updatemenu = TRUE;
}
void
hotkey_toggle(char *data)
{
static bool prev = FALSE;
int action = toggle_type(data);
if(action & SAVE) prev = (user.uFlags & UFLAG_HOTKEYS) ? TRUE:FALSE;
switch(action & 0xF)
{
case ON : user.uFlags |= UFLAG_HOTKEYS;
break;
case OFF : user.uFlags &= ~UFLAG_HOTKEYS;
break;
case TOGGLE: user.uFlags ^= UFLAG_HOTKEYS;
break;
case ASK : io << '\n' << S_ASK_HOTKEYS;
if(io.ask()) user.uFlags |= UFLAG_HOTKEYS;
else user.uFlags &= ~UFLAG_HOTKEYS;
io << '\n';
break;
}
if(action & RESTORE)
{
if(prev) user.uFlags |= UFLAG_HOTKEYS;
else user.uFlags &= ~UFLAG_HOTKEYS;
}
if(!(action & QUIET))
{
if(!stack_mode) LOG(1,"Hotkeys enabled");
else LOG(1, "Hotkeys disabled");
if(!stack_mode)
io << '\n' << S_HOTKEYS_ENABLED;
else
io << '\n' << S_HOTKEYS_DISABLED;
io << "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
}
updatemenu = TRUE;
}
void
ibm_toggle(char *data)
{
static bool prev = FALSE;
int action = toggle_type(data);
if(action & SAVE) prev = (user.uFlags & UFLAG_NOIBM) ? TRUE:FALSE;
switch(action & 0xF)
{
case OFF : user.uFlags |= UFLAG_NOIBM;
break;
case ON : user.uFlags &= ~UFLAG_NOIBM;
break;
case TOGGLE: user.uFlags ^= UFLAG_NOIBM;
break;
case ASK : io << '\n' << S_ASK_IBMCHARS;
if(!io.ask()) user.uFlags |= UFLAG_NOIBM;
else user.uFlags &= ~UFLAG_NOIBM;
io << '\n';
break;
}
if(action & RESTORE)
{
if(prev) user.uFlags |= UFLAG_NOIBM;
else user.uFlags &= ~UFLAG_NOIBM;
}
if(!(action & QUIET))
{
if(!no_ibm) LOG(1,"IBM graphics enabled");
else LOG(1,"IBM graphics disabled");
if(!no_ibm)
io << '\n' << S_IBMCHARS_ENABLED;
else
io << '\n' << S_IBMCHARS_DISABLED;
io << "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
}
updatemenu = TRUE;
}
void
user_list(char *data)
{
bool aliases = FALSE;
char s[40];
if(String(data) == "/H")
aliases = TRUE;
io << "\f\n" << S_LIST_USERS_TITLE_AND_PROMPT;
io.read(s,39,READMODE_UPALL);
LOG(2,"User list requested. Search for \"%s\"",s);
io << "\n\f";
user.list(s,aliases);
io << '\n' << S_END_OF_USER_LIST << ' ' << S_PRESS_ENTER_TO_CONTINUE;
}
void
ripfont_change(char *data)
{
static byte prev = 0;
int action = toggle_type(data);
if(action & SAVE) prev = user.ripFont;
switch(action & 0xF)
{
case OFF : user.ripFont = 1;
break;
case ON : user.ripFont = 0;
break;
case TOGGLE: user.ripFont = !user.ripFont;
break;
case ASK : io << '\n' << S_ASK_RIP_FONT;
user.ripFont = io.ask(0);
io << '\n';
break;
}
if(action & RESTORE)
{
user.ripFont = prev;
}
if(!(action & QUIET))
{
if(user.ripFont) LOG(1,"Large RIP font selected");
else LOG(1,"Small RIP font selected");
if(user.ripFont)
io << '\n' << S_LARGE_RIP_FONT_SELECTED;
else
io << '\n' << S_SMALL_RIP_FONT_SELECTED;
io << "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
}
updatemenu = TRUE;
}
void
rip_toggle(char *data)
{
static bool prev = FALSE;
int action = toggle_type(data);
if(action & SAVE) prev = (user.uFlags & UFLAG_NORIP) ? TRUE:FALSE;
switch(action & 0xF)
{
case OFF : user.uFlags |= UFLAG_NORIP;
break;
case ON : user.uFlags &= ~UFLAG_NORIP;
break;
case TOGGLE: user.uFlags ^= UFLAG_NORIP;
break;
case ASK : io << '\n' << S_ASK_RIP;
if(!io.ask()) user.uFlags |= UFLAG_NORIP;
else
{
if(ansi_mode) io << "\x1b[0m";
user.uFlags &= ~UFLAG_NORIP;
}
io << '\n';
break;
}
if(action & RESTORE)
{
if(prev) user.uFlags |= UFLAG_NORIP;
else user.uFlags &= ~UFLAG_NORIP;
}
if(!(action & QUIET))
{
if(user.uFlags & UFLAG_NORIP)
{
io << '\n' << S_RIP_DISABLED;
LOG(1,"RIP disabled");
}
else
{
io << '\n' << S_RIP_ENABLED;
LOG(1,"RIP enabled");
}
io << "\n\n" << S_PRESS_ENTER_TO_CONTINUE;
}
updatemenu = TRUE;
}
void
change_dateformat(char *data)
{
if(data)
{
io << "\f\n";
io << S_CHANGE_DATE_FORMAT_TITLE(date_formats_long[user.dateFormat]);
io << "\n\n";
}
io << S_SELECT_DATE_FORMAT_TITLE << "\n\n";
io << "\3 1. \6" << date_formats_long[0] << '\n';
io << "\3 2. \6" << date_formats_long[1] << '\n';
io << "\3 3. \6" << date_formats_long[2] << '\n';
io << '\n' << S_SELECT_DATE_FORMAT_PROMPT;
char tmp[2];
io.read(tmp,1);
if(strlen(tmp)<1 || atoi(tmp) < 1 || atoi(tmp) > 3) return;
user.dateFormat = atoi(tmp) - 1;
if(data)
LOG(1,"Date format changed to '%s'",date_formats_long[user.dateFormat]);
}