#include #include #include #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=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]); }