void edit_languages() { char s1[81]; int i, i1, i2; bool done = false; do { out->Cls(); nlx(); for (i = 0; i < initinfo.num_languages; i++) { if (i && ((i % 23) == 0)) { pausescr(); } Printf("%-2d. %-20s %-50s\n", i + 1, languages[i].name, languages[i].dir); } nlx(); out->SetColor(Scheme::PROMPT); Puts("Languages: M:odify, D:elete, I:nsert, Q:uit : "); out->SetColor(Scheme::NORMAL); char ch = onek("Q\033MID"); switch (ch) { case 'Q': case '\033': done = true; break; case 'M': nlx(); out->SetColor(Scheme::PROMPT); sprintf(s1, "Edit which (1-%d) ? ", initinfo.num_languages); Puts(s1); out->SetColor(Scheme::NORMAL); i = input_number(2); if ((i > 0) && (i <= initinfo.num_languages)) { edit_lang(i - 1); } break; case 'D': if (initinfo.num_languages > 1) { nlx(); sprintf(s1, "Delete which (1-%d) ? ", initinfo.num_languages); out->SetColor(Scheme::PROMPT); Puts(s1); out->SetColor(Scheme::NORMAL); i = input_number(2); if ((i > 0) && (i <= initinfo.num_languages)) { nlx(); out->SetColor(Scheme::ERROR_TEXT); Puts("Are you sure? "); out->SetColor(Scheme::NORMAL); ch = onek("YN\r"); if (ch == 'Y') { initinfo.num_languages--; for (i1 = i - 1; i1 < initinfo.num_languages; i1++) { languages[i1] = languages[i1 + 1]; } if (initinfo.num_languages == 1) { languages[0].num = 0; } } } } else { nlx(); out->SetColor(Scheme::ERROR_TEXT); Printf("You must leave at least one language.\n"); out->SetColor(Scheme::NORMAL); nlx(); out->GetChar(); } break; case 'I': if (initinfo.num_languages >= MAX_LANGUAGES) { out->SetColor(Scheme::ERROR_TEXT); Printf("Too many languages.\n"); out->SetColor(Scheme::NORMAL); nlx(); out->GetChar(); break; } nlx(); out->SetColor(Scheme::PROMPT); sprintf(s1, "Insert before which (1-%d) ? ", initinfo.num_languages + 1); Puts(s1); out->SetColor(Scheme::NORMAL); i = input_number(2); if ((i > 0) && (i <= initinfo.num_languages + 1)) { out->SetColor(Scheme::ERROR_TEXT); Puts("Are you sure? "); out->SetColor(Scheme::NORMAL); ch = onek("YN\r"); if (ch == 'Y') { --i; for (i1 = initinfo.num_languages; i1 > i; i1--) { languages[i1] = languages[i1 - 1]; } initinfo.num_languages++; strcpy(languages[i].name, "English"); strncpy(languages[i].dir, syscfg.gfilesdir, sizeof(languages[i1].dir) - 1); strncpy(languages[i].mdir, syscfg.gfilesdir, sizeof(languages[i1].mdir) - 1); i2 = 0; for (i1 = 0; i1 < initinfo.num_languages; i1++) { if ((i != i1) && (languages[i1].num >= i2)) { i2 = languages[i1].num + 1; } } if (i2 >= 250) { for (i2 = 0; i2 < 255; i2++) { for (i1 = 0; i1 < initinfo.num_languages; i1++) { if ((i != i1) && (languages[i1].num == i2)) { break; } } if (i1 >= initinfo.num_languages) { break; } } } languages[i].num = i2; edit_lang(i); } } break; } } while (!done); char szFileName[ MAX_PATH ]; sprintf(szFileName, "%slanguage.dat", syscfg.datadir); unlink(szFileName); int hFile = open(szFileName, O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE); write(hFile, (void *)languages, initinfo.num_languages * sizeof(languagerec)); close(hFile); }
void InterpretCommand(MenuInstanceData * pMenuData, const char *pszScript) { char szCmd[31], szParam1[51], szParam2[51]; char szTempScript[ 255 ]; memset(szTempScript, 0, sizeof(szTempScript)); strncpy(szTempScript, pszScript, 250); if (pszScript[0] == 0) { return; } char* pszScriptPointer = szTempScript; while (pszScriptPointer && !hangup) { pszScriptPointer = MenuParseLine(pszScriptPointer, szCmd, szParam1, szParam2); if (szCmd[0] == 0) { // || !pszScriptPointer || !*pszScriptPointer break; } // ------------------------- // Run a new menu instance int nCmdID = GetMenuIndex(szCmd); switch (nCmdID) { case 0: { // "MENU" // Spawn a new menu MenuInstanceData *pNewMenuData = static_cast<MenuInstanceData *>(malloc(sizeof(MenuInstanceData))); memset(pNewMenuData, 0, sizeof(MenuInstanceData)); pNewMenuData->nFinished = 0; pNewMenuData->nReload = 0; Menus(pNewMenuData, pMenuData->szPath, szParam1); free(pNewMenuData); } break; case 1: { // ------------------------- // Exit out of this instance // of the menu // ------------------------- // "ReturnFromMenu" InterpretCommand(pMenuData, pMenuData->header.szExitScript); pMenuData->nFinished = 1; } break; case 2: { // "EditMenuSet" EditMenus(); // flag if we are editing this menu pMenuData->nFinished = 1; pMenuData->nReload = 1; } break; case 3: { // "DLFreeFile" align(szParam2); MenuDownload(szParam1, szParam2, true, true); } break; case 4: { // "DLFile" align(szParam2); MenuDownload(szParam1, szParam2, false, true); } break; case 5: { // "RunDoor" MenuRunDoorName(szParam1, false); } break; case 6: { // "RunDoorFree" MenuRunDoorName(szParam1, true); } break; case 7: { // "RunDoorNumber" int nTemp = atoi(szParam1); MenuRunDoorNumber(nTemp, false); } break; case 8: { // "RunDoorNumberFree" int nTemp = atoi(szParam1); MenuRunDoorNumber(nTemp, true); } break; case 9: { // "PrintFile" printfile(szParam1, true); } break; case 10: { // "PrintFileNA" printfile(szParam1, false); } break; case 11: { // "SetSubNumber" SetSubNumber(szParam1); } break; case 12: { // "SetDirNumber" SetDirNumber(szParam1); } break; case 13: { // "SetMsgConf" SetMsgConf(szParam1[0]); } break; case 14: { // "SetDirConf" SetDirConf(szParam1[0]); } break; case 15: { // "EnableConf" EnableConf(); } break; case 16: { // "DisableConf" DisableConf(); } break; case 17: { // "Pause" pausescr(); } break; case 18: { // "ConfigUserMenuSet" ConfigUserMenuSet(); pMenuData->nFinished = 1; pMenuData->nReload = 1; } break; case 19: { // "DisplayHelp" if (GetSession()->GetCurrentUser()->IsExpert()) { AMDisplayHelp(pMenuData); } } break; case 20: { // "SelectSub" ChangeSubNumber(); } break; case 21: { // "SelectDir" ChangeDirNumber(); } break; case 22: { // "SubList" SubList(); } break; case 23: { // "UpSubConf" UpSubConf(); } break; case 24: { // "DownSubConf" DownSubConf(); } break; case 25: { // "UpSub" UpSub(); } break; case 26: { // "DownSub" DownSub(); } break; case 27: { // "ValidateUser" ValidateUser(); } break; case 28: { // "Doors" Chains(); } break; case 29: { // "TimeBank" TimeBank(); } break; case 30: { // "AutoMessage" AutoMessage(); } break; case 31: { // "BBSList" BBSList(); } break; case 32: { // "RequestChat" RequestChat(); } break; case 33: { // "Defaults" Defaults(pMenuData); } break; case 34: { // "SendEMail" SendEMail(); } break; case 35: { // "Feedback" FeedBack(); } break; case 36: { // "Bulletins" Bulletins(); } break; case 37: { // "HopSub" HopSub(); } break; case 38: { // "SystemInfo" SystemInfo(); } break; case 39: { // "JumpSubConf" JumpSubConf(); } break; case 40: { // "KillEMail" KillEMail(); } break; case 41: { // "LastCallers" LastCallers(); } break; case 42: { // "ReadEMail" ReadEMail(); } break; case 43: { // "NewMessageScan" NewMessageScan(); } break; case 44: { // "Goodbye" GoodBye(); } break; case 45: { // "PostMessage" WWIV_PostMessage(); } break; case 46: { // "NewMsgScanCurSub" ScanSub(); } break; case 47: { // "RemovePost" RemovePost(); } break; case 48: { // "TitleScan" TitleScan(); } break; case 49: { // "ListUsers" ListUsers(); } break; case 50: { // "Vote" Vote(); } break; case 51: { // "ToggleExpert" ToggleExpert(); } break; case 52: { // "YourInfo" YourInfo(); } break; case 53: { // "ExpressScan" ExpressScan(); } break; case 54: { // "WWIVVer" WWIVVersion(); } break; case 55: { // "InstanceEdit" InstanceEdit(); } break; case 56: { // "ConferenceEdit" JumpEdit(); } break; case 57: { // "SubEdit" BoardEdit(); } break; case 58: { // "ChainEdit" ChainEdit(); } break; case 59: { // "ToggleAvailable" ToggleChat(); } break; case 60: { // "ChangeUser" ChangeUser(); } break; case 61: { // "CLOUT" CallOut(); } break; case 62: { // "Debug" Debug(); } break; case 63: { // "DirEdit" DirEdit(); } break; case 65: { // "Edit" EditText(); } break; case 66: { // "BulletinEdit" EditBulletins(); } break; case 67: { // "LoadText" // LoadText and LoadTextFile are the same, so they are now merged. LoadTextFile(); } break; case 68: { // "ReadAllMail" ReadAllMail(); } break; case 69: { // "Reboot" RebootComputer(); } break; case 70: { // "ReloadMenus" ReloadMenus(); } break; case 71: { // "ResetUserIndex" ResetFiles(); } break; case 72: { // "ResetQScan" ResetQscan(); } break; case 73: { // "MemStat" MemoryStatus(); } break; case 74: { // "PackMsgs" PackMessages(); } break; case 75: { // "VoteEdit" InitVotes(); } break; case 76: { // "Log" ReadLog(); } break; case 77: { // "NetLog" ReadNetLog(); } break; case 78: { // "Pending" PrintPending(); } break; case 79: { // "Status" PrintStatus(); } break; case 80: { // "TextEdit" TextEdit(); } break; case 81: { // "UserEdit" UserEdit(); } break; case 82: { // "VotePrint" VotePrint(); } break; case 83: { // "YLog" YesturdaysLog(); } break; case 84: { // "ZLog" ZLog(); } break; case 85: { // "ViewNetDataLog" ViewNetDataLog(); } break; case 86: { // "UploadPost" UploadPost(); } break; case 87: { // "ClearScreen" GetSession()->bout.ClearScreen(); } break; case 88: { // "NetListing" NetListing(); } break; case 89: { // "WHO" WhoIsOnline(); } break; case 90: { // /A "NewMsgsAllConfs" NewMsgsAllConfs(); } break; case 91: { // /E "MultiEMail" MultiEmail(); } break; case 92: { // "NewMsgScanFromHere" NewMsgScanFromHere(); } break; case 93: { // "ValidatePosts" ValidateScan(); } break; case 94: { // "ChatRoom" ChatRoom(); } break; case 95: { // "DownloadPosts" DownloadPosts(); } break; case 96: { // "DownloadFileList" DownloadFileList(); } break; case 97: { // "ClearQScan" ClearQScan(); } break; case 98: { // "FastGoodBye" FastGoodBye(); } break; case 99: { // "NewFilesAllConfs" NewFilesAllConfs(); } break; case 100: { // "ReadIDZ" ReadIDZ(); } break; case 101: { // "UploadAllDirs" UploadAllDirs(); } break; case 102: { // "UploadCurDir" UploadCurDir(); } break; case 103: { // "RenameFiles" RenameFiles(); } break; case 104: { // "MoveFiles" MoveFiles(); } break; case 105: { // "SortDirs" SortDirs(); } break; case 106: { // "ReverseSortDirs" ReverseSort(); } break; case 107: { // "AllowEdit" AllowEdit(); } break; case 109: { // "UploadFilesBBS" UploadFilesBBS(); } break; case 110: { // "DirList" DirList(); } break; case 111: { // "UpDirConf" UpDirConf(); } break; case 112: { // "UpDir" UpDir(); } break; case 113: { // "DownDirConf" DownDirConf(); } break; case 114: { // "DownDir" DownDir(); } break; case 115: { // "ListUsersDL" ListUsersDL(); } break; case 116: { // "PrintDSZLog" PrintDSZLog(); } break; case 117: { // "PrintDevices" PrintDevices(); } break; case 118: { // "ViewArchive" ViewArchive(); } break; case 119: { // "BatchMenu" BatchMenu(); } break; case 120: { // "Download" Download(); } break; case 121: { // "TempExtract" TempExtract(); } break; case 122: { // "FindDescription" FindDescription(); } break; case 123: { // "ArchiveMenu" TemporaryStuff(); } break; case 124: { // "HopDir" HopDir(); } break; case 125: { // "JumpDirConf" JumpDirConf(); } break; case 126: { // "ListFiles" ListFiles(); } break; case 127: { // "NewFileScan" NewFileScan(); } break; case 128: { // "SetNewFileScanDate" SetNewFileScanDate(); } break; case 129: { // "RemoveFiles" RemoveFiles(); } break; case 130: { // "SearchAllFiles" SearchAllFiles(); } break; case 131: { // "XferDefaults" XferDefaults(); } break; case 132: { // "Upload" Upload(); } break; case 133: { // "YourInfoDL" YourInfoDL(); } break; case 134: { // "UploadToSysop" UploadToSysop(); } break; case 135: { // "ReadAutoMessage" ReadAutoMessage(); } break; case 136: { // "SetNewScanMsg" SetNewScanMsg(); } break; case 137: { // "ReadMessages" ReadMessages(); } break; /* case 138: { // "RUN" ExecuteBasic(szParam1); } break; */ case 139: { // "EventEdit" EventEdit(); } break; case 140: { // "LoadTextFile" LoadTextFile(); } break; case 141: { // "GuestApply" GuestApply(); } break; case 142: { // "ConfigFileList" ConfigFileList(); } break; case 143: { // "ListAllColors" ListAllColors(); } break; #ifdef QUESTIONS case 144: { // "EditQuestions" EditQuestions(); } break; case 145: { // "Questions" Questions(); } break; #endif case 146: { // "RemoveNotThere" RemoveNotThere(); } break; case 147: { // "AttachFile" AttachFile(); } break; case 148: { // "InternetEmail" InternetEmail(); } break; case 149: { // "UnQScan" UnQScan(); } break; // ppMenuStringsIndex[150] thru ppMenuStringsIndex[153] not used..... case 154: { // "Packers" Packers(); } break; case 155: { // Color_Config color_config(); } break; //------------------------------------------------------------------ // ppMenuStringsIndex[156] and [157] are reserved for SDS Systems and systems // that distribute modifications. DO NOT reuse these strings for // other menu options. //------------------------------------------------------------------ // case 156: // { // ModAccess // ModsAccess(); // } break; // case 157: // { // SDSAccess // SDSAccess(); // } break; //------------------------------------------------------------------ case 158: { // InitVotes InitVotes(); } break; case 161: { // TurnMCIOn TurnMCIOn(); } break; case 162: { // TurnMCIOff TurnMCIOff(); } break; default: { MenuSysopLog("The following command was not recognized"); MenuSysopLog(szCmd); } break; } } }
void modify_sec(int n) { char s[81]; gfiledirrec r = gfilesec[n]; bool done = false; do { bout.cls(); bout.litebar("Editing G-File Area # %d", n); bout << "|#9A) Name : |#2" << r.name << wwiv::endl; bout << "|#9B) Filename : |#2" << r.filename << wwiv::endl; bout << "|#9C) SL : |#2" << static_cast<int>(r.sl) << wwiv::endl; bout << "|#9D) Min. Age : |#2" << static_cast<int>(r.age) << wwiv::endl; bout << "|#9E) Max Files : |#2" << r.maxfiles << wwiv::endl; bout << "|#9F) AR : |#2" << GetArString(r, s) << wwiv::endl; bout.nl(); bout << "|#7(|#2Q|#7=|#1Quit|#7) Which (|#1A|#7-|#1F,|#1[|#7,|#1]|#7) : "; char ch = onek("QABCDEF[]", true); switch (ch) { case 'Q': done = true; break; case '[': gfilesec[n] = r; if (--n < 0) { n = session()->num_sec - 1; } r = gfilesec[n]; break; case ']': gfilesec[n] = r; if (++n >= session()->num_sec) { n = 0; } r = gfilesec[n]; break; case 'A': bout.nl(); bout << "|#2New name? "; inputl(s, 40); if (s[0]) { strcpy(r.name, s); } break; case 'B': { bout.nl(); File dir(syscfg.gfilesdir, r.filename); if (dir.Exists()) { bout << "\r\nThere is currently a directory for this g-file section.\r\n"; bout << "If you change the filename, the directory will still be there.\r\n\n"; } bout.nl(); bout << "|#2New filename? "; input(s, 8); if ((s[0] != 0) && (strchr(s, '.') == 0)) { strcpy(r.filename, s); File dir(syscfg.gfilesdir, r.filename); if (!dir.Exists()) { bout.nl(); bout << "|#5Create directory for this section? "; if (yesno()) { File dir(syscfg.gfilesdir, r.filename); File::mkdirs(dir); } else { bout << "\r\nYou will have to create the directory manually, then.\r\n\n"; } } else { bout << "\r\nA directory already exists under this filename.\r\n\n"; } pausescr(); } } break; case 'C': { bout.nl(); bout << "|#2New SL? "; input(s, 3); int i = atoi(s); if (i >= 0 && i < 256 && s[0]) { r.sl = static_cast<unsigned char>(i); } } break; case 'D': { bout.nl(); bout << "|#2New Min Age? "; input(s, 3); int i = atoi(s); if ((i >= 0) && (i < 128) && (s[0])) { r.age = static_cast<unsigned char>(i); } } break; case 'E': { bout.nl(); bout << "|#1Max 99 files/section.\r\n|#2New max files? "; input(s, 3); int i = atoi(s); if ((i >= 0) && (i < 99) && (s[0])) { r.maxfiles = static_cast<unsigned short>(i); } } break; case 'F': bout.nl(); bout << "|#2New AR (<SPC>=None) ? "; char ch2 = onek("ABCDEFGHIJKLMNOP "); if (ch2 == SPACE) { r.ar = 0; } else { r.ar = 1 << (ch2 - 'A'); } break; } } while (!done && !hangup); gfilesec[n] = r; }
void ConfigUserMenuSet() { if (session()->usernum != nSecondUserRecLoaded) { if (!LoadMenuSetup(session()->usernum)) { LoadMenuSetup(1); } } nSecondUserRecLoaded = session()->usernum; bout.cls(); bout.litebar("Configure Menus"); printfile(MENUWEL_NOEXT); bool bDone = false; while (!bDone && !hangup) { bout.nl(); bout << "|#11|#9) Menuset :|#2 " << pSecondUserRec->szMenuSet << wwiv::endl; bout << "|#12|#9) Use hot keys :|#2 " << (pSecondUserRec->cHotKeys == HOTKEYS_ON ? "Yes" : "No ") << wwiv::endl; bout.nl(); bout << "|#9(|#2Q|#9=|#1Quit|#9) : "; char chKey = onek("Q12?"); switch (chKey) { case 'Q': bDone = true; break; case '1': { ListMenuDirs(); bout.nl(2); bout << "|#9Enter the menu set to use : "; string menuSetName; inputl(&menuSetName, 8); if (ValidateMenuSet(menuSetName.c_str())) { wwiv::menus::MenuDescriptions descriptions(GetMenuDirectory()); bout.nl(); bout << "|#9Menu Set : |#2" << menuSetName.c_str() << " : |#1" << descriptions.description(menuSetName) << wwiv::endl; bout << "|#5Use this menu set? "; if (noyes()) { strcpy(pSecondUserRec->szMenuSet, menuSetName.c_str()); break; } } bout.nl(); bout << "|#6That menu set does not exists, resetting to the default menu set" << wwiv::endl; pausescr(); if (pSecondUserRec->szMenuSet[0] == '\0') { strcpy(pSecondUserRec->szMenuSet, "wwiv"); } } break; case '2': pSecondUserRec->cHotKeys = !pSecondUserRec->cHotKeys; break; case '3': pSecondUserRec->cMenuType = !pSecondUserRec->cMenuType; break; case '?': printfile(MENUWEL_NOEXT); continue; // bypass the below cls() } bout.cls(); } // If menu is invalid, it picks the first one it finds if (!ValidateMenuSet(pSecondUserRec->szMenuSet)) { if (session()->num_languages > 1 && session()->user()->GetLanguage() != 0) { bout << "|#6No menus for " << languages[session()->user()->GetLanguage()].name << " language."; input_language(); } } WriteMenuSetup(session()->usernum); MenuSysopLog(StringPrintf("Menu in use : %s - %s - %s", pSecondUserRec->szMenuSet, pSecondUserRec->cHotKeys == HOTKEYS_ON ? "Hot" : "Off", pSecondUserRec->cMenuType == MENUTYPE_REGULAR ? "REG" : "PD")); bout.nl(2); }