void CreateConfigurationFile(int FileNameIndex, int FileDataIndex, Bool PrintStuff) { discardable *d; if (!filexists(citfiles[FileNameIndex])) { if ((d = readData(16, FileDataIndex, FileDataIndex)) != NULL) { FILE *File; if ((File = fopen(citfiles[FileNameIndex], FO_W)) != NULL) { if (PrintStuff) { #ifndef WINCIT cPrintf(getcfgmsg(133), citfiles[FileNameIndex]); doccr(); #endif } const char **Data = (const char **) d->aux; for (int i = 0; !SameString(Data[i], getcfgmsg(244)); i++) { fprintf(File, getmsg(472), Data[i], bn); } fclose(File); } else { if (PrintStuff) { #ifndef WINCIT cPrintf(getcfgmsg(134), citfiles[FileNameIndex]); doccr(); #endif } } discardData(d); } else { if (PrintStuff) { cOutOfMemory(51); } } } }
static void dump_node_ddata(void) { if (!(--read_node_counter)) { #ifndef WINCIT // Rather than implement a locking mechanism to ensure this is // never freed accidentally, we just leave it loaded all of the // time -- there's lots of memory on a Windows machine, right? :) discardData(nddd); nddd = NULL; #endif } if (read_node_counter < 0) { read_node_counter = 0; } }
void TERMWINDOWMEMBER ListAllEvents(void) { doCR(); discardable *crdd; if ((crdd = readData(9)) == NULL) { mPrintf(getmsg(59)); return; } OC.SetOutFlag(OUTOK); if (Cron.HasEvents()) { termCap(TERM_BOLD); mPrintf(getsysmsg(169)); termCap(TERM_NORMAL); doCR(); const char **crontypes = (const char **) crdd->aux; CronEventListS *theEvent; for (int i = 1; (theEvent = Cron.GetEventNum(i)) != NULL; i++) { CronEventC Evt = theEvent->Event; char dtstr[20], etstr[20]; mPrintf(getsysmsg(352), i, Cron.IsOnEvent(theEvent) ? getsysmsg(353) : spc, Evt.CanDo() ? getsysmsg(354) : (Evt.LastAttemptFailed() ? getsysmsg(355) : spc), crontypes[Evt.GetType()], Evt.GetString(), Evt.IsZapped() ? getsysmsg(170) : itoa(Evt.GetRedo(), dtstr, 10), Evt.IsZapped() ? getsysmsg(170) : itoa(Evt.GetRetry(), etstr, 10)); if (Evt.GetLastSuccess()) { strftime(dtstr, 19, getsysmsg(351), Evt.GetLastSuccess()); mPrintf(pcts, dtstr); } else { mPrintf(getsysmsg(171)); } if (Evt.GetLastTried()) { strftime(dtstr, 19, getsysmsg(351), Evt.GetLastTried()); mPrintfCR(pcts, dtstr); } else { mPrintfCR(getsysmsg(172)); } } if (Cron.IsPaused()) { CRmPrintfCR(getsysmsg(173)); } if (!CurrentUser->IsExpert()) { CRmPrintf(getsysmsg(174)); CRmPrintf(getsysmsg(175)); CRmPrintfCR(getsysmsg(176)); } } else { mPrintfCR(getsysmsg(79)); } discardData(crdd); }
RData::~RData () { RK_TRACE (RBACKEND); discardData (); }
static Bool initCitadel(void) { if (!read_cfg_messages()) { #ifdef WINCIT char Buffer[128]; sprintf(Buffer, getmsg(188), getmsg(671)); MessageBox(NULL, Buffer, NULL, MB_ICONSTOP | MB_OK); #else printf(getmsg(188), getmsg(671)); #endif return (FALSE); } checkfiles(); initExtDrivers(); get_os(); cfg.battr = 0xff; setscreen(); logo(TRUE); // no go for debug version; td32 go crash crash init_internal_sound(); // some mouse initialization technology!!!! initMouseHandler(); hideCounter = 1; if (time(NULL) < 700000000L) { #ifdef WINCIT MessageBox(NULL, getcfgmsg(119), NULL, MB_ICONSTOP | MB_OK); #else doccr(); doccr(); cPrintf(getcfgmsg(119)); doccr(); #endif dump_cfg_messages(); return (FALSE); } static char prompt[92]; static char citadel[92]; char *envprompt; char *citprompt; envprompt = getenv(getcfgmsg(120)); citprompt = getenv(getcfgmsg(121)); if (citprompt) { sprintf(prompt, getcfgmsg(122), citprompt); } else if (envprompt) { sprintf(prompt, getcfgmsg(123), envprompt); } else { strcpy(prompt, getcfgmsg(124)); } putenv(prompt); sprintf(citadel, getcfgmsg(125), programName, version); putenv(citadel); #ifndef WINCIT OC.whichIO = CONSOLE; OC.SetOutFlag(OUTOK); OC.Echo = BOTH; OC.setio(); #endif VerifyHeap(1); // If we aren't reconfiguring, load the tables... if (!reconfig) { // Start by reading ETC.TAB getcwd(etcpath, 64); FILE *fd; if ((fd = fopen(etcTab, FO_RB)) != NULL) { if (filelength(fileno(fd)) != (long) sizeof(config) || fread(&cfg, 1, sizeof(config), fd) != (long) sizeof(config)) { memset(&cfg, 0, sizeof(cfg)); reconfig = TRUE; } fclose(fd); unlink(etcTab); // If ETC.TAB could be loaded, load the rest if (!reconfig) { changedir(cfg.homepath); allocateTables(); if (!LogTab.Load() || !MessageDat.LoadTable() || !RoomTab.Load()) { reconfig = TRUE; } Cron.ReadTable(WC_TWpn); } } else { if (!batchmode) { #ifdef WINCIT MessageBox(NULL, "No ETC.TAB.", NULL, MB_ICONSTOP | MB_OK); #else doccr(); discardable *d; if ((d = readData(6)) != NULL) { int i; for (i = 0; ((char **) d->next->aux)[i][0] != '#'; i++) { cPrintf(pcts, ((char **) d->next->aux)[i]); doccr(); } doccr(); discardData(d); } else { cOutOfMemory(28); } DeinitializeTimer(); critical(FALSE); #endif exit(1); } reconfig = TRUE; } } if (reconfig) { cfg.attr = 7; #ifndef WINCIT pause(200); cls(SCROLL_SAVE); cCPrintf(getcfgmsg(126)); doccr(); #endif if (!configcit()) { #ifdef WINCIT MessageBox(NULL, getcfgmsg(127), NULL, MB_ICONSTOP | MB_OK); #else doccr(); doccr(); cPrintf(getcfgmsg(127)); doccr(); #endif dump_cfg_messages(); return (FALSE); } #ifndef WINCIT setdefaultTerm(TT_ANSI); CurrentUser->SetWidth(80); #endif Cron.ReadCronCit(WC_TWpn); } else { #ifndef WINCIT if (!CreateScrollBackBuffer()) { cPrintf(getcfgmsg(60)); doccr(); } #endif if (readconfigcit) // forced to read in config.cit { if (!readconfig(NULL, 1)) { #ifdef WINCIT MessageBox(NULL, getcfgmsg(129), NULL, MB_ICONSTOP | MB_OK); #else doccr(); doccr(); cPrintf(getcfgmsg(129)); doccr(); #endif dump_cfg_messages(); return (FALSE); } } } VerifyHeap(1); makeBorders(); readBordersDat(); if (cmd_nobells) { cfg.noBells = 2; } if (cmd_nochat) { cfg.noChat = TRUE; } if (cmd_mdata != CERROR) { cfg.mdata = cmd_mdata; } if (*cfg.f6pass) { if (SameString(cfg.f6pass, getmsg(670))) { ConsoleLock.LockF6(); } else { ConsoleLock.Lock(); } } #ifndef WINCIT if (cfg.ovrEms) { if (_OvrInitEms(0, 0, 0)) { cPrintf(getcfgmsg(130)); doccr(); pause(200); } } if (cfg.ovrExt) { if (_OvrInitExt(0, 0)) { cPrintf(getcfgmsg(131)); doccr(); pause(200); } } CommPort->Init(); setscreen(); #endif logo(TRUE); // no go for debug version; td32 go crash crash #ifndef WINCIT StatusLine.Update(WC_TWp); #endif if (cfg.msgpath[(strlen(cfg.msgpath) - 1)] == '\\') { cfg.msgpath[(strlen(cfg.msgpath) - 1)] = '\0'; } // move to home path changedir(cfg.homepath); char FileName[128]; ReIndexFileInfo(); // keep fileinfo.dat nice and pretty // open message file if (!MessageDat.OpenMessageFile(cfg.msgpath)) { illegal(getmsg(78), MessageDat.GetFilename()); } // Then room file sprintf(FileName, sbs, cfg.homepath, roomDat); openFile(FileName, &RoomFile); citOpen(cfg.trapfile, CO_A, &TrapFile); initMenus(); dump_cfg_messages(); if(!read_tr_messages()) { errorDisp(getmsg(172)); } else { #ifdef WINCIT trap(T_SYSOP, "", gettrmsg(37)); #else trap(T_SYSOP, gettrmsg(37)); #endif dump_tr_messages(); } read_cfg_messages(); // uh-oh! if (!GroupData.Load()) { return (FALSE); } if (!HallData.Load()) { return (FALSE); } getRoomPos(); if (cfg.accounting) { ReadGrpdataCit(WC_TWpn); } ReadExternalCit(WC_TWpn); ReadProtocolCit(WC_TWpn); ReadMdmresltCit(WC_TWpn); ReadCommandsCit(WC_TWpn); #ifndef WINCIT ReadMCICit(FALSE); CurrentRoom->Load(LOBBY); thisRoom = LOBBY; checkdir(); if (!slv_door) { CITWINDOW *w = CitWindowsMsg(NULL, getmsg(19)); Initport(); Initport(); if (w) { destroyCitWindow(w, FALSE); } } else { CommPort->Enable(); } OC.whichIO = MODEM; OC.setio(); #endif // record when we put system up time(&uptimestamp); #ifndef WINCIT setdefaultconfig(FALSE); Talley->Fill(); #endif logo(FALSE); VerifyHeap(1); dump_cfg_messages(); compactMemory(1); return (TRUE); }
void TERMWINDOWMEMBER setdefaultconfig(Bool KeepTerm) { int oldATT[ATTR_NUM]; oldATT[ATTR_NORMAL] = CurrentUser->GetAttribute(ATTR_NORMAL); oldATT[ATTR_BLINK] = CurrentUser->GetAttribute(ATTR_BLINK); oldATT[ATTR_REVERSE] = CurrentUser->GetAttribute(ATTR_REVERSE); oldATT[ATTR_BOLD] = CurrentUser->GetAttribute(ATTR_BOLD); oldATT[ATTR_UNDERLINE] = CurrentUser->GetAttribute(ATTR_UNDERLINE); prevChar = ' '; // why here? CurrentUser->Clear(); // set all default defaults... CurrentUser->SetWidth(80); CurrentUser->SetCredits(3600); CurrentUser->SetLinefeeds(TRUE); CurrentUser->SetOldToo(TRUE); CurrentUser->SetNetUser(TRUE); CurrentUser->SetViewRoomDesc(TRUE); CurrentUser->SetEnterBorders(TRUE); CurrentUser->SetViewTitleSurname(TRUE); CurrentUser->SetViewSubjects(TRUE); CurrentUser->SetViewSignatures(TRUE); CurrentUser->SetMinibin(TRUE); CurrentUser->SetViewRoomInfoLines(TRUE); CurrentUser->SetViewHallDescription(TRUE); CurrentUser->SetViewBorders(TRUE); CurrentUser->SetSeeOwnChats(TRUE); CurrentUser->SetHearLaughter(TRUE); if (!KeepTerm) { CurrentUser->SetDefaultColors(TermCap->IsColor()); } else { CurrentUser->SetAttribute(ATTR_NORMAL, oldATT[ATTR_NORMAL]); CurrentUser->SetAttribute(ATTR_BLINK, oldATT[ATTR_BLINK]); CurrentUser->SetAttribute(ATTR_REVERSE, oldATT[ATTR_REVERSE]); CurrentUser->SetAttribute(ATTR_BOLD, oldATT[ATTR_BOLD]); CurrentUser->SetAttribute(ATTR_UNDERLINE, oldATT[ATTR_UNDERLINE]); } CurrentUser->SetPromptFormat(cfg.prompt); // "%n^A2%r%e" CurrentUser->SetDateStamp(cfg.datestamp); // "%x %X %p" CurrentUser->SetVerboseDateStamp(cfg.vdatestamp); // "%A %x %X %p" CurrentUser->SetNetPrefix(cfg.netPrefix); // "3*0" CurrentUser->SetMorePrompt(cfg.moreprompt); // "<more>" if (!KeepTerm) { setdefaultTerm(TT_DUMB); } if (cfg.accounting) { CurrentUserAccount->Negotiate(CurrentUser); } changedir(cfg.homepath); discardable *du = readData(8, 0, 0); if (du) { FILE *defusr; if ((defusr = fopen(citfiles[C_DEFUSER_CIT], FO_R)) != NULL) { const char **duk = (const char **) du->aux; char line[90]; char *words[256]; while (fgets(line, 90, defusr) != NULL) { if (line[0] != '#') { continue; } const int count = parse_it(words, line); if (count > 1) { int i; for (i = 0; i < DUK_NUM; i++) { if (SameString(words[0] + 1, duk[i])) { break; } } switch (i) { case DUK_FORWARD: { CurrentUser->SetForwardAddr(words[1]); break; } case DUK_SURNAME: { CurrentUser->SetSurname(words[1]); break; } case DUK_TITLE: { CurrentUser->SetTitle(words[1]); break; } case DUK_BOLD: { CurrentUser->SetAttribute(ATTR_BOLD, atoi(words[1])); break; } case DUK_NULLS: { CurrentUser->SetNulls(atoi(words[1])); break; } case DUK_WIDTH: { CurrentUser->SetWidth(atoi(words[1])); break; } case DUK_CREDITS: { CurrentUser->SetCredits(60 * atol(words[1])); break; } case DUK_INVERSE: { CurrentUser->SetAttribute(ATTR_REVERSE, atoi(words[1])); break; } case DUK_BLINK: { CurrentUser->SetAttribute(ATTR_BLINK, atoi(words[1])); break; } case DUK_UNDERLINE: { CurrentUser->SetAttribute(ATTR_UNDERLINE, atoi(words[1])); break; } case DUK_NORMAL: { CurrentUser->SetAttribute(ATTR_NORMAL, atoi(words[1])); break; } case DUK_PROTOCOL: { CurrentUser->SetDefaultProtocol(words[1][0]); break; } case DUK_PROMPT: { CurrentUser->SetPromptFormat(words[1]); break; } case DUK_DSTAMP: { CurrentUser->SetDateStamp(words[1]); break; } case DUK_VDSTAMP: { CurrentUser->SetVerboseDateStamp(words[1]); break; } case DUK_SIGNATURE: { CurrentUser->SetSignature(words[1]); break; } case DUK_NETPREFIX: { CurrentUser->SetNetPrefix(words[1]); break; } case DUK_ADDR1: { CurrentUser->SetMailAddr1(words[1]); break; } case DUK_ADDR2: { CurrentUser->SetMailAddr2(words[1]); break; } case DUK_ADDR3: { CurrentUser->SetMailAddr3(words[1]); break; } case DUK_POOP: { CurrentUser->SetPoopcount(atol(words[1])); break; } case DUK_UCMASK: { CurrentUser->SetUpperOnly(atoi(words[1])); break; } case DUK_EXPERT: { CurrentUser->SetExpert(atoi(words[1])); break; } case DUK_AIDE: { CurrentUser->SetAide(atoi(words[1])); break; } case DUK_TABS: { CurrentUser->SetTabs(atoi(words[1])); break; } case DUK_OLDTOO: { CurrentUser->SetOldToo(atoi(words[1])); break; } case DUK_UNLISTED: { CurrentUser->SetUnlisted(atoi(words[1])); break; } case DUK_PERMANENT: { CurrentUser->SetPermanent(atoi(words[1])); break; } case DUK_SYSOP: { CurrentUser->SetSysop(atoi(words[1])); break; } case DUK_NODE: { CurrentUser->SetNode(atoi(words[1])); break; } case DUK_NOACCOUNT: { CurrentUser->SetAccounting(!atoi(words[1])); break; } case DUK_NOMAIL: { CurrentUser->SetMail(!atoi(words[1])); break; } case DUK_ROOMTELL: { CurrentUser->SetViewRoomDesc(atoi(words[1])); break; } case DUK_BORDERS: { CurrentUser->SetEnterBorders(atoi(words[1])); break; } case DUK_VERIFIED: { CurrentUser->SetVerified(!!atoi(words[1])); break; } case DUK_SURNAMLOK: { CurrentUser->SetSurnameLocked(atoi(words[1])); break; } case DUK_LOCKHALL: { CurrentUser->SetDefaultHallLocked(atoi(words[1])); break; } case DUK_DISPLAYTS: { CurrentUser->SetViewTitleSurname(atoi(words[1])); break; } case DUK_SUBJECTS: { CurrentUser->SetViewSubjects(atoi(words[1])); break; } case DUK_SIGNATURES: { CurrentUser->SetViewSignatures(atoi(words[1])); break; } case DUK_DEFAULTHALL: { CurrentUser->SetDefaultHall(words[1]); break; } case DUK_LINESSCREEN: { CurrentUser->SetLinesPerScreen(atoi(words[1])); break; } case DUK_FORWARDNODE: { CurrentUser->SetForwardAddrNode(words[1]); if (*words[1]) { CurrentUser->SetForwardToNode(TRUE); } break; } case DUK_LFMASK: { CurrentUser->SetLinefeeds(atoi(words[1])); break; } case DUK_PROBLEM: { CurrentUser->SetProblem(atoi(words[1])); break; } case DUK_NETUSER: { CurrentUser->SetNetUser(atoi(words[1])); break; } case DUK_NEXTHALL: { CurrentUser->SetAutoNextHall(atoi(words[1])); break; } case DUK_PSYCHO: { CurrentUser->SetPsycho(atoi(words[1])); break; } case DUK_TWIRLY: { CurrentUser->SetTwirly(atoi(words[1])); break; } case DUK_VERBOSE: { CurrentUser->SetAutoVerbose(atoi(words[1])); break; } case DUK_MSGPAUSE: { CurrentUser->SetPauseBetweenMessages(atoi(words[1])); break; } case DUK_MINIBIN: { CurrentUser->SetMinibin(atoi(words[1])); break; } case DUK_MSGCLS: { CurrentUser->SetClearScreenBetweenMessages(atoi(words[1])); break; } case DUK_ROOMINFO: { CurrentUser->SetViewRoomInfoLines(atoi(words[1])); break; } case DUK_HALLTELL: { CurrentUser->SetViewHallDescription(atoi(words[1])); break; } case DUK_VERBOSECONT: { CurrentUser->SetVerboseContinue(atoi(words[1])); break; } case DUK_VIEWCENSOR: { CurrentUser->SetViewCensoredMessages(atoi(words[1])); break; } case DUK_SEEBORDERS: { CurrentUser->SetViewBorders(atoi(words[1])); break; } case DUK_OUT300: { CurrentUser->SetOut300(atoi(words[1])); break; } case DUK_LOCKUSIG: { CurrentUser->SetUserSignatureLocked(atoi(words[1])); break; } case DUK_HIDEEXCL: { CurrentUser->SetHideMessageExclusions(atoi(words[1])); break; } case DUK_NODOWNLOAD: { CurrentUser->SetDownload(!atoi(words[1])); break; } case DUK_NOUPLOAD: { CurrentUser->SetUpload(!atoi(words[1])); break; } case DUK_NOCHAT: { CurrentUser->SetChat(!atoi(words[1])); break; } case DUK_PRINTFILE: { CurrentUser->SetPrintFile(atoi(words[1])); break; } case DUK_REALNAME: { CurrentUser->SetRealName(words[1]); break; } case DUK_PHONENUM: { CurrentUser->SetPhoneNumber(words[1]); break; } case DUK_SPELLCHECK: { CurrentUser->SetSpellCheckMode(atoi(words[1])); break; } case DUK_NOMAKEROOM: { CurrentUser->SetMakeRoom(!atoi(words[1])); break; } case DUK_VERBOSELO: { CurrentUser->SetVerboseLogOut(atoi(words[1])); break; } case DUK_CONFSAVE: { CurrentUser->SetConfirmSave(atoi(words[1])); break; } case DUK_CONFABORT: { CurrentUser->SetConfirmAbort(atoi(words[1])); break; } case DUK_CONFEOABORT: { CurrentUser->SetConfirmNoEO(atoi(words[1])); break; } case DUK_USEPERSONAL: { CurrentUser->SetUsePersonalHall(atoi(words[1])); break; } case DUK_YOUAREHERE: { CurrentUser->SetYouAreHere(atoi(words[1])); break; } case DUK_IBMROOM: { CurrentUser->SetIBMRoom(atoi(words[1])); break; } case DUK_WIDEROOM: { CurrentUser->SetWideRoom(atoi(words[1])); break; } case DUK_MUSIC: { CurrentUser->SetMusic(atoi(words[1])); break; } case DUK_MOREPROMPT: { CurrentUser->SetMorePrompt(words[1]); break; } case DUK_NUMUSERSHOW: { CurrentUser->SetNumUserShow(atoi(words[1])); break; } case DUK_CALLLIMIT: { CurrentUser->SetCallLimit(atoi(words[1])); break; } case DUK_CHECKAPS: { CurrentUser->SetCheckApostropheS(atoi(words[1])); break; } case DUK_CHECKALLCAPS: { CurrentUser->SetCheckAllCaps(atoi(words[1])); break; } case DUK_CHECKDIGITS: { CurrentUser->SetCheckDigits(atoi(words[1])); break; } case DUK_EXCLUDEENCRYPTED: { CurrentUser->SetExcludeEncryptedMessages(atoi(words[1])); break; } case DUK_SHOWCOMMAS: { CurrentUser->SetViewCommas(atoi(words[1])); break; } case DUK_PUNPAUSES: { CurrentUser->SetPUnPauses(atoi(words[1])); break; } case DUK_KUSER: { CurrentUser->AddKill(KF_USER, words[1]); break; } case DUK_KTEXT: { CurrentUser->AddKill(KF_TEXT, words[1]); break; } case DUK_KNODE: { CurrentUser->AddKill(KF_NODE, words[1]); break; } case DUK_KREG: { CurrentUser->AddKill(KF_REGION, words[1]); break; } case DUK_TUSER: { if (count > 2) { CurrentUser->AddTagUser(words[1], words[2]); } break; } case DUK_DICTWORD: { CurrentUser->AddWordToDictionary(words[1]); break; } case DUK_FINGER: { CurrentUser->SetFinger(words[1]); break; } case DUK_USERDEF: { if (count > 2) { CurrentUser->SetUserDefined(words[1], words[2]); } break; } case DUK_REPLACE: { if (count > 2) { CurrentUser->AddReplace(words[1], words[2]); } break; } case DUK_ROMAN: { CurrentUser->SetRoman(atoi(words[1])); break; } case DUK_SUPERSYSOP: { CurrentUser->SetSuperSysop(atoi(words[1])); break; } case DUK_BUNNY: { CurrentUser->SetBunny(atoi(words[1])); break; } case DUK_SSE_LOGONOFF: { CurrentUser->SetSELogOnOff(atoi(words[1])); break; } case DUK_SSE_NEWMSG: { CurrentUser->SetSENewMessage(atoi(words[1])); break; } case DUK_SSE_EXCLMSG: { CurrentUser->SetSEExclusiveMessage(atoi(words[1])); break; } case DUK_SSE_CHATALL: { CurrentUser->SetSEChatAll(atoi(words[1])); break; } case DUK_SSE_CHATROOM: { CurrentUser->SetSEChatRoom(atoi(words[1])); break; } case DUK_SSE_CHATGROUP: { CurrentUser->SetSEChatGroup(atoi(words[1])); break; } case DUK_SSE_CHATUSER: { CurrentUser->SetSEChatUser(atoi(words[1])); break; } case DUK_SSE_RMINOUT: { CurrentUser->SetSERoomInOut(atoi(words[1])); break; } case DUK_TERMTYPE: { CurrentUser->SetTermType(words[1]); TermCap->Load(words[1]); break; } case DUK_BANNED: { CurrentUser->SetBanned(atoi(words[1])); break; } case DUK_KILLOWN: { CurrentUser->SetKillOwn(atoi(words[1])); break; } case DUK_SEEOWNCHATS: { CurrentUser->SetSeeOwnChats(atoi(words[1])); break; } case DUK_ERASEPROMPT: { CurrentUser->SetErasePrompt(atoi(words[1])); break; } case DUK_AUTOIDLESECONDS: { CurrentUser->SetAutoIdleSeconds(atoi(words[1])); break; } case DUK_SSE_MSGSOMEWHERE: { CurrentUser->SetHearLaughter(atoi(words[1])); break; } default: { doccr(); cPrintf(getmsg(21), citfiles[C_DEFUSER_CIT], words[0]); doccr(); break; } } } } fclose(defusr); } discardData(du); } }