bool IRCCmd::AcctIsLoggedIn(std::string USER) { for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++) { if(MakeUpper((*i)->UName) == MakeUpper(USER)) return true; } return false; }
void CShortcut::FormatKeyLabel(VirtualKeyName* pVirtualKeyNames,BYTE bKey,BYTE bModifiers,BOOL bScancode,CStringW& str) { if (bKey==0) { str.LoadString(IDS_SHORTCUTNONE); return; } // Formatting modifiers if (bModifiers&MOD_WIN) str.LoadString(IDS_SHORTCUTMODEXT); else str.Empty(); if (bModifiers&MOD_CONTROL) str.AddString(IDS_SHORTCUTMODCTRL); if (bModifiers&MOD_ALT) str.AddString(IDS_SHORTCUTMODALT); if (bModifiers&MOD_SHIFT) str.AddString(IDS_SHORTCUTMODSHIFT); if (bScancode) { CStringW str2; str2.Format(IDS_SHORTCUTSCANCODE,(int)bKey); str << str2; return; } int i; for (i=0;pVirtualKeyNames[i].bKey!=0 && pVirtualKeyNames[i].bKey!=bKey;i++); if (pVirtualKeyNames[i].iFriendlyNameId!=0) { str.AddString(pVirtualKeyNames[i].iFriendlyNameId); return; } BYTE pKeyState[256]; ZeroMemory(pKeyState,256); WORD wChar; int nRet=ToAscii(bKey,0,pKeyState,&wChar,0); if (nRet==1) { MakeUpper((LPSTR)&wChar,1); str << char(wChar); } else if (nRet==2) { MakeUpper((LPSTR)&wChar,2); str << (LPSTR(&wChar))[0] << (LPSTR(&wChar))[0]; } else if (pVirtualKeyNames[i].pName!=NULL) str << pVirtualKeyNames[i].pName; else str << (int) bKey; }
void ToggleCase (CString& str) { if (str.GetLength () == 0) return; MakeUpper (str); bool bNewWord = true; int last = str.GetLength (); /*int ext_pos = str.ReverseFind ('.'); if (ext_pos != -1) last = ext_pos;*/ for (int i = 0; i < last; i++) { if (_istalpha (str[i])) { if (bNewWord) { bNewWord = false; str.SetAt (i, _tolower (str[i])); } } else bNewWord = true; } }
static void PrintOutputInterface(std::wostream& os, Grammar& g) { std::wstring ws(STR_HEADER); std::wstring upperfile = MakeUpper(g.GetModuleName() + L".h"); FindReplace(upperfile, L".", L"_"); PrintGeneratedFileHeader(os); os << L"#ifndef " << upperfile << "" << std::endl; os << L"#define " << upperfile << "" << std::endl; os << std::endl; os << std::endl; find_replace(ws, L"{DATE}", __WDATE__); find_replace(ws, L"{GRAMMAR}", g.GetLanguageName()); os << L"#include \"Result.h\"\n"; os << L"#include " << "\"" << g.GetLanguageName() << ".h\"\n"; std::wostringstream ss; PrintActions(ss, g, false); find_replace(ws, L"{ACTIONS}", ss.str()); os << ws; os << std::endl; os << L"#endif" << std::endl; }
void ChangeCase (int iCmd , CString &str) { switch (iCmd) { case ID_SENTENCECASE: SentenceCase (str); break; case ID_LOWERCASE: str.MakeLower (); break; case ID_UPPERCASE: MakeUpper (str); break; case ID_TITLECASE: TitleCase (str); break; case ID_TOGGLECASE: ToggleCase (str); break; } }
void dynLibImplLinux::GetImportAndExportData( const char* dllName ) { if( std::string(dllName).empty()) { return; } Elf* mainElf; struct link_map* mainLm; std::string csPath_o; OpenDynamicLibrary( dllName, mainElf, mainLm, csPath_o ); if ( mainLm == NULL ) { return; } Elf_Scn* section = 0; ElfW(Shdr) *shdr; FindSection( mainElf, SHT_DYNAMIC, section, shdr ); std::list<std::string> dependencies; ExtractDynSymbols( mainElf, section, shdr, STT_NOTYPE, dependencies ); std::list<std::string>::iterator it; for(it = dependencies.begin( ); it != dependencies.end( ) ; it++) { AddString( it->c_str() ); if ( GetDllEntry( it->c_str() ) == NULL ) { DLL_ENTRY stImpExport; std::string csPath_o; if ( GetExportData( it->c_str(), stImpExport.ArrayExport, csPath_o ) ) { stImpExport.m_bIsStable = true; stImpExport.m_csFullPath = csPath_o; // Add data to static internal map MakeUpper( *it ); m_DataEntry[ *it ] = stImpExport; } } DeleteString( it->c_str() ); } dlclose( mainLm ); }
// ----------------------------------------------------------------------------- // Override of Archive::renameEntry to update namespaces if needed and rename // the entry if necessary to be grp-friendly (twelve characters max) // ----------------------------------------------------------------------------- bool GrpArchive::renameEntry(ArchiveEntry* entry, const string& name) { // Check entry if (!checkEntry(entry)) return false; // Process name (must be 12 characters max) auto new_name = name; new_name.Truncate(12); if (wad_force_uppercase) new_name.MakeUpper(); // Do default rename return Archive::renameEntry(entry, new_name); }
// ----------------------------------------------------------------------------- // Override of Archive::renameEntry enforce wad2-friendly entry names // (16 characters max and uppercase if forced) // ----------------------------------------------------------------------------- bool Wad2Archive::renameEntry(ArchiveEntry* entry, const string& name) { // Check entry if (!checkEntry(entry)) return false; // Process name (must be 16 characters max, also cut any extension as wad entries don't usually want them) wxFileName fn(name); auto new_name = fn.GetName().Truncate(16); if (wad_force_uppercase) new_name.MakeUpper(); // Do default rename return Archive::renameEntry(entry, new_name); }
bool ScreenNetSelectMusic::Input( const InputEventPlus &input ) { if( !m_bAllowInput || IsTransitioning() ) return false; if( input.type == IET_RELEASE ) { m_MusicWheel.Move(0); return true; } if( input.type != IET_FIRST_PRESS && input.type != IET_REPEAT ) return false; bool bHoldingCtrl = INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL)) || INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL)) || (!NSMAN->useSMserver); // If we are disconnected, assume no chatting wchar_t c = INPUTMAN->DeviceInputToChar(input.DeviceI,false); MakeUpper( &c, 1 ); // Ctrl+[A-Z] to go to that letter of the alphabet bool handled = false; if( bHoldingCtrl && ( c >= 'A' ) && ( c <= 'Z' ) ) { SortOrder so = GAMESTATE->m_SortOrder; if( ( so != SORT_TITLE ) && ( so != SORT_ARTIST ) ) { so = SORT_TITLE; GAMESTATE->m_PreferredSortOrder = so; GAMESTATE->m_SortOrder.Set( so ); // Odd, changing the sort order requires us to call SetOpenSection more than once m_MusicWheel.ChangeSort( so ); m_MusicWheel.SetOpenSection( ssprintf("%c", c ) ); } m_MusicWheel.SelectSection( ssprintf("%c", c ) ); m_MusicWheel.ChangeSort( so ); m_MusicWheel.SetOpenSection( ssprintf("%c", c ) ); m_MusicWheel.Move(+1); handled = true; } return ScreenNetSelectBase::Input( input ) || handled; }
char CShortcut::GetMnemonicForAction(HWND* hDialogs) const { for (int i=0;i<m_apActions.GetSize();i++) { CAction* pAction=m_apActions[i]; if (pAction->m_nAction==CAction::ActivateControl) { for (int j=0;hDialogs[j]!=NULL;j++) { if (HIWORD(pAction->m_nControl)& (1<<15)) continue; HWND hControl=::GetDlgItem(hDialogs[j],HIWORD(pAction->m_nControl)); if (hControl!=NULL) { DWORD dwTextLen=(DWORD)::SendMessage(hControl,WM_GETTEXTLENGTH,0,0); char* pText=new char[dwTextLen+2]; ::SendMessage(hControl,WM_GETTEXT,dwTextLen+2,LPARAM(pText)); for (DWORD k=0;k<dwTextLen-1;k++) { if (pText[k]=='&') { char cRet=pText[k+1]; delete[] pText; MakeUpper(&cRet,1); return cRet; } } delete[] pText; break; } } } } return 0; }
bool ChangeCase_Execute (COMMAND_ARGS, bool bUpper) { std::string converted = ""; ExpressionEvaluator eval (PASS_COMMAND_ARGS); if (eval.ExtractArgs() && eval.NumArgs() == 1) { const char* src = eval.Arg (0)->GetString(); if (src) { converted = src; if (bUpper) MakeUpper (converted); else MakeLower (converted); } } AssignToStringVar(PASS_COMMAND_ARGS, converted.c_str ()); return true; }
wchar_t InputHandler::DeviceButtonToChar( DeviceButton button, bool bUseCurrentKeyModifiers ) { wchar_t c = L'\0'; switch( button ) { default: if( button < 127 ) c = (wchar_t) button; else if( button >= KEY_KP_C0 && button <= KEY_KP_C9 ) c =(wchar_t) (button - KEY_KP_C0) + '0'; break; case KEY_KP_SLASH: c = L'/'; break; case KEY_KP_ASTERISK: c = L'*'; break; case KEY_KP_HYPHEN: c = L'-'; break; case KEY_KP_PLUS: c = L'+'; break; case KEY_KP_PERIOD: c = L'.'; break; case KEY_KP_EQUAL: c = L'='; break; } // Handle some default US keyboard modifiers for derived InputHandlers that // don't implement DeviceButtonToChar. if( bUseCurrentKeyModifiers ) { bool bHoldingShift = INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT)) || INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT)); bool bHoldingCtrl = INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL)) || INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL)); if( bHoldingShift && !bHoldingCtrl ) { MakeUpper( &c, 1 ); switch( c ) { case L'`': c = L'~'; break; case L'1': c = L'!'; break; case L'2': c = L'@'; break; case L'3': c = L'#'; break; case L'4': c = L'$'; break; case L'5': c = L'%'; break; case L'6': c = L'^'; break; case L'7': c = L'&'; break; case L'8': c = L'*'; break; case L'9': c = L'('; break; case L'0': c = L')'; break; case L'-': c = L'_'; break; case L'=': c = L'+'; break; case L'[': c = L'{'; break; case L']': c = L'}'; break; case L'\'': c = L'"'; break; case L'\\': c = L'|'; break; case L';': c = L':'; break; case L',': c = L'<'; break; case L'.': c = L'>'; break; case L'/': c = L'?'; break; } } } return c; }
// This function checks if chat from irc is a command or not // return true on yes and false on no bool IRCCmd::IsValid(std::string USER, std::string FROM, std::string CHAT, std::string TYPE) { // If the first line of our chat is the command prefix we have a command if(CHAT.substr(0, 1) == sIRC._cmd_prefx && CHAT.size() > 1 ) { _CDATA CDATA; bool cValid = false; bool AuthValid = true; bool dontlog = true; std::string* _PARAMS = getArray(CHAT, 2); CDATA.USER = USER; CDATA.FROM = FROM; CDATA.TYPE = TYPE; CDATA.PCOUNT = 0; CDATA.CMD = MakeUpper(_PARAMS[0].substr(1, _PARAMS[0].size() - 1)); CDATA.PARAMS = _PARAMS[1]; if(CDATA.CMD == "LOGIN") { if (FROM == *(sIRC.GetNick())) { if(ParamsValid(&CDATA, 2)) Handle_Login(&CDATA); else sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"login <Player> <Password> )", true, "ERROR"); } else sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Please Send A PM To Login!", true, "ERROR"); if(GetLevel(USER) >= sIRC.gmlog) dontlog = false; cValid = true; } else if(CDATA.CMD == "LOGOUT") { if (FROM == *(sIRC.GetNick())) Handle_Logout(&CDATA); else sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Please Send A PM To Logout!", true, "ERROR"); cValid = true; } else if(CDATA.CMD == "ACCT") { switch(ParamsValid(&CDATA, 2, sIRC.CACCT)) { case E_OK: Account_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"acct <Player> <(un)lock/mail/pass/rename> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "BAN") { switch(ParamsValid(&CDATA, 2, sIRC.CBAN)) { case E_OK: Ban_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"ban <Player> <acct/ip> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "CHAN") { switch(ParamsValid(&CDATA, 1, sIRC.CCHAN)) { case E_OK: Chan_Control(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"chan <op> <IRC User> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "CHAR") { switch(ParamsValid(&CDATA, 2, sIRC.CCHAR)) { case E_OK: Char_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"char <Player> <mailcheat/taxicheat/maxskill/setskill> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "FUN") { switch(ParamsValid(&CDATA, 2, sIRC.CFUN)) { case E_OK: Fun_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"fun <Player> <Sound/Say> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "HELP") { switch(ParamsValid(&CDATA, 0, sIRC.CHELP)) { case E_OK: Help_IRC(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"help <Command> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "INCHAN") { switch(ParamsValid(&CDATA, 1, sIRC.CINCHAN)) { case E_OK: Inchan_Server(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"inchan <Channel> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "INFO") { switch(ParamsValid(&CDATA, 0, sIRC.CINFO)) { case E_OK: Info_Server(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"info )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "ITEM") { CDATA.PCOUNT = 3; switch(ParamsValid(&CDATA, 2, sIRC.CITEM)) { case E_OK: Item_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"item <Player> <add> <ItemID/[ItemName]> <Amount> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "JAIL") { CDATA.PCOUNT = 3; switch(ParamsValid(&CDATA, 1, sIRC.CJAIL)) { case E_OK: Jail_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"jail <Player> <release/Reason>)", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "KICK") { CDATA.PCOUNT = 2; switch(ParamsValid(&CDATA, 1, sIRC.CKICK)) { case E_OK: Kick_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"kick <Player> <Reason> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "KILL") { CDATA.PCOUNT = 2; switch(ParamsValid(&CDATA, 1, sIRC._KILL)) { case E_OK: Kill_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"kill <Player> <Reason> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "LEVEL") { CDATA.PCOUNT = 2; switch(ParamsValid(&CDATA, 2, sIRC.CLEVEL)) { case E_OK: Level_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"level <Player> <NewLevel> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "LOOKUP") { CDATA.PCOUNT = 2; switch(ParamsValid(&CDATA, 2, sIRC.CLOOKUP)) { case E_OK: Lookup_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"lookup <acct/char/creature/faction/go/item/quest/skill/spell/tele> <ID/Name> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "MONEY") { CDATA.PCOUNT = 2; switch(ParamsValid(&CDATA, 2, sIRC.CMONEY)) { case E_OK: Money_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"money <Player> <(-)Money> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "MUTE") { switch(ParamsValid(&CDATA, 2, sIRC.CMUTE)) { case E_OK: Mute_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"mute <Player> <release/TimeInMins> <Reason> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "ONLINE") { switch(ParamsValid(&CDATA, 0, sIRC.CONLINE)) { case E_OK: Online_Players(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"online )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "PM") { switch(ParamsValid(&CDATA, 2, sIRC.CPM)) { case E_OK: PM_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"pm <Player> <Message> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "RELOAD") { switch(ParamsValid(&CDATA, 0, sIRC.CRESTART)) { case E_OK: sIRC.Send_IRC_Channels("Reloading MangChat Config Options. (Restart recommended)"); sIRC.LoadConfig(); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "RESTART") { switch(ParamsValid(&CDATA, 0, sIRC.CRESTART)) { case E_OK: sIRC.Send_IRC_Channels(sIRC.RstMsg); sIRC.ResetIRC(); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "REVIVE") { CDATA.PCOUNT = 2; switch(ParamsValid(&CDATA, 1, sIRC.CREVIVE)) { case E_OK: Revive_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"revive <Player> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "SAVEALL") { switch(ParamsValid(&CDATA, 0, sIRC.CSAVEALL)) { case E_OK: Saveall_Player(&CDATA); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "SHUTDOWN") { switch(ParamsValid(&CDATA, 1, sIRC.CSHUTDOWN)) { case E_OK: Shutdown_Mangos(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"shutdown <TimeInSeconds/cancel> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "SPELL") { switch(ParamsValid(&CDATA, 2, sIRC.CSPELL)) { case E_OK: Spell_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"spell <Player> <Cast/Learn/UnLearn> <SpellID> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "SYSMSG") { CDATA.PCOUNT = 2; switch(ParamsValid(&CDATA, 2, sIRC.CSYSMSG)) { case E_OK: Sysmsg_Server(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"sysmsg <a/e/n/add/del/list> <Message> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "TELE") { switch(ParamsValid(&CDATA, 2, sIRC.CTELE)) { case E_OK: Tele_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"tele <Player> <l/c/r/to> <Loc.Name/MAPID X Y Z/Recall/Player> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "TOP") { CDATA.PCOUNT = 1; switch(ParamsValid(&CDATA, 1, sIRC.CTOP)) { case E_OK: Top_Player(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"top <accttime/chartime/money> <limit> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } else if(CDATA.CMD == "WHO") { switch(ParamsValid(&CDATA, 0, sIRC.CWHO)) { case E_OK: Who_Logged(&CDATA); break; case E_AUTH: AuthValid = false; break; } cValid = true; } // GM Ticket by bizkut http://github.com/bizkut else if(CDATA.CMD == "TICKET") { CDATA.PCOUNT = 1; switch(ParamsValid(&CDATA, 1, sIRC.CTOP)) { case E_OK: GM_Ticket(&CDATA); break; case E_SIZE: sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"ticket <list/read/respond/delete> <limit/name/all> <message> )", true, "ERROR"); break; case E_AUTH: AuthValid = false; break; } cValid = true; } if(!AuthValid && IsLoggedIn(USER)) sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Access Denied! Your Security Level Is Too Low To Use This Command!", true, "ERROR"); if (cValid == false && (sIRC.BOTMASK & 4)) sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Unknown Command!", true, "ERROR"); if (cValid && dontlog) sIRC.iLog.WriteLog(" %s : [ %s(%d) ] Used Command: [ %s ] With Parameters: [ %s ]", sIRC.iLog.GetLogDateTimeStr().c_str(), CDATA.USER.c_str(), GetLevel(USER), CDATA.CMD.c_str(), CDATA.PARAMS.c_str()); return cValid; } return false; }
void CCheckFileNotificationsThread::UpdateItemsInRoot(LPCWSTR szRoot,CLocateDlg* pLocateDlg) { //BkgDebugFormatMessage("CCheckFileNotificationsThread::UpdateItemsInRoot BEGIN szRoot=%s",szRoot); if (pLocateDlg->m_pListCtrl==NULL) return; if (pLocateDlg->m_pListCtrl->GetItemCount()==0) return; // Updating changed items by checking all items if (szRoot[1]=='\0') { //BkgDebugMessage("CCheckFileNotificationsThread::UpdateItemsInRoot 1a"); WCHAR szDriveLower=szRoot[0]; WCHAR szDriveUpper=szRoot[0]; MakeUpper(&szDriveUpper,1); //BkgDebugMessage("CCheckFileNotificationsThread::UpdateItemsInRoot 2a"); int nItem=pLocateDlg->m_pListCtrl->GetNextItem(-1,LVNI_ALL); while (nItem!=-1) { if (m_lFlags&fwStopWhenPossible) break; CLocatedItem* pItem=(CLocatedItem*)pLocateDlg->m_pListCtrl->GetItemData(nItem); if (pItem!=NULL) { // Checking whether path is in changed volume LPCWSTR szPath=pItem->GetPath(); if ((szPath[0]==szDriveLower || szPath[0]==szDriveUpper) && szPath[1]==L':') { // Just disabling flags, let background thread do the rest if (pItem->RemoveFlagsForChanged()) pLocateDlg->m_pListCtrl->RedrawItems(nItem,nItem); } } nItem=pLocateDlg->m_pListCtrl->GetNextItem(nItem,LVNI_ALL); } } else { DWORD dwLength=(DWORD)istrlenw(szRoot); //BkgDebugMessage("CCheckFileNotificationsThread::UpdateItemsInRoot 1b"); int nItem=pLocateDlg->m_pListCtrl->GetNextItem(-1,LVNI_ALL); while (nItem!=-1) { if (m_lFlags&fwStopWhenPossible) break; CLocatedItem* pItem=(CLocatedItem*)pLocateDlg->m_pListCtrl->GetItemData(nItem); if (pItem!=NULL) { if (pItem->GetPathLen()>=dwLength) { LPWSTR szPath=alloccopy(pItem->GetPath(),pItem->GetPathLen()); MakeLower(szPath); if (wcsncmp(szPath,szRoot,dwLength)==0) { // Just disabling flags, let background thread do the rest if (pItem->RemoveFlagsForChanged()) pLocateDlg->m_pListCtrl->RedrawItems(nItem,nItem); } delete[] szPath; } } nItem=pLocateDlg->m_pListCtrl->GetNextItem(nItem,LVNI_ALL); } } //DebugMessage("CCheckFileNotificationsThread::UpdateItemsInRoot END"); }
void AgentConfigurationEx::initialize (int aArgc, const char *aArgv[]) { GLogger.Fatal("initialize\n"); std::string cfgfile = Globals.inifile; if ( GetFileAttributesA(cfgfile.c_str( ) ) != INVALID_FILE_ATTRIBUTES ) { config.load(cfgfile); Globals.sNewConfig = config.GetSymbolValue("GLOBALS.Config", "OLD").c_str( ); Globals.sNewConfig = MakeUpper(Globals.sNewConfig); Globals.ServerName = config.GetSymbolValue("GLOBALS.ServiceName", Globals.ServerName).c_str( ); MTConnectService::setName(Globals.ServerName); Globals.QueryServer = config.GetSymbolValue("GLOBALS.QueryServer", 10000).toNumber<int>( ); Globals.ServerRate = config.GetSymbolValue("GLOBALS.ServerRate", 2000).toNumber<int>( ); // std::string sLevel = config.GetSymbolValue("GLOBALS.logging_level", "FATAL").c_str(); // sLevel=MakeUpper(sLevel); // Globals.Debug = (sLevel=="FATAL")? 0 : (sLevel=="ERROR") ? 1 : (sLevel=="WARN") ? 2 : (sLevel=="INFO")? 3 : 5; Globals.Debug = config.GetSymbolValue("GLOBALS.Debug", "0").toNumber<int>( ); Globals.HttpPort = config.GetSymbolValue("GLOBALS.HttpPort", "5000").c_str( ); Globals.ResetAtMidnight = config.GetSymbolValue("GLOBALS.ResetAtMidnight", "0").toNumber<int>( ); GLogger.OutputConsole( ) = config.GetSymbolValue("GLOBALS.OutputConsole", "0").toNumber<int>( ); Globals.shiftchanges = config.GetSymbolValue("GLOBALS.SHIFTCHANGES", "06:00,15:00,23:00").c_str(); _devices = config.GetTokens("GLOBALS.MTConnectDevice", ","); if ( Globals.sNewConfig == "NEW" ) { for ( size_t i = 0; i < _devices.size( ); i++ ) { _devices[i] = Trim(_devices[i]); } std::vector<std::string> keys = _devices; // TrimmedTokenize(_devices, ","); // std::for_each(v.begin(), v.end(), boost::bind(&boost::trim<std::string>,_1, std::locale() )); // for_each(keys.begin(); keys.end(); Trim); std::vector<std::string> logs; for ( size_t i = 0; i < _devices.size( ); i++ ) { std::string log = config.GetSymbolValue(_devices[i] + ".ProductionLog", "").c_str( ); if ( !log.empty( ) ) { logs.push_back(Trim(log) ); } } for ( size_t i = 0; i < keys.size( ); i++ ) { keys[i] = SanitizeDeviceName(keys[i]); } if ( keys.size( ) == logs.size( ) ) { CDevicesXML::WriteDevicesFile(keys, CDevicesXML::ProbeDeviceXml( ), "Devices.xml", File.ExeDirectory( ) ); WritePrivateProfileString("GLOBALS", "Config", "UPDATED", ( File.ExeDirectory( ) + "Config.ini" ).c_str( ) ); } else { WritePrivateProfileString("GLOBALS", "Config", "ERROR", ( File.ExeDirectory( ) + "Config.ini" ).c_str( ) ); } } } else { AbortMsg("Could not find ini file \n"); } Globals.Dump( ); AgentConfigurationT::initialize(aArgc, aArgv); }
// program entry point int main(int argc, char *argv[]) { char szErrorMessage[266] = {0}; char szExeFilename[266] = {0}; char szXbeFilename[266] = {0}; char szDumpFilename[266] = {0}; char szXbeTitle[256] = "Untitled"; bool bRetail = true; // parse command line for(int v=1;v<argc;v++) { char *szOption = 0; char *szParam = 0; uint dwParamSize = 0; // if this isn't an option, it must be the Exe file if(argv[v][0] != '-') { strncpy(szExeFilename, argv[v], 265); continue; } // locate the colon and seperate option / parameters { uint dwColon = (uint)-1; for(uint c=1;argv[v][c] != 0;c++) { if(argv[v][c] == ':') { dwColon = c; break; } } if(dwColon == (uint)-1) { strcpy(szErrorMessage, "Command line format error"); goto cleanup; } argv[v][dwColon] = '\0'; szOption = &argv[v][1]; szParam = &argv[v][dwColon + 1]; while(szParam[dwParamSize] != 0) dwParamSize++; } // interpret the current switch { char szOptionU[266] = {0}; char szParamU[266] = {0}; strncpy(szOptionU, szOption, 265); strncpy(szParamU, szParam, 265); MakeUpper(szOptionU); MakeUpper(szParamU); if(strcmp(szOptionU, "OUT") == 0) { strcpy(szXbeFilename, szParam); } else if(strcmp(szOptionU, "DUMPINFO") == 0) { strcpy(szDumpFilename, szParam); } else if(strcmp(szOptionU, "TITLE") == 0) { if(dwParamSize > 256) printf("WARNING: Title too long, using default title\n"); else strcpy(szXbeTitle, szParam); } else if(strcmp(szOptionU, "MODE") == 0) { if(strcmp(szParamU, "RETAIL") == 0) bRetail = true; else if(strcmp(szParamU, "DEBUG") == 0) bRetail = false; else { strcpy(szErrorMessage, "invalid MODE"); goto cleanup; } } else { char szBuffer[255]; sprintf(szBuffer, "Unrecognized command : %s", szOption); strcpy(szErrorMessage, szBuffer); goto cleanup; } } } // verify we recieved the required parameters if(szExeFilename[0] == '\0') { ShowUsage(); return 1; } // if we don't have an Xbe filename, generate one from szExeFilename if(szXbeFilename[0] == '\0') { strcpy(szXbeFilename, szExeFilename); char *szFilename = &szXbeFilename[0]; // locate last \ or / (if there are any) { for(int c=0;szXbeFilename[c] != 0;c++) if(szXbeFilename[c] == '\\' || szXbeFilename[c] == '/') szFilename = &szXbeFilename[c+1]; } // locate and remove last . (if there are any) { char szWorkingU[266]; char *szWorking = szFilename; strncpy(szWorkingU, szWorking, 265); for(int c=0;szFilename[c] != 0;c++) if(szFilename[c] == '.') szWorking = &szFilename[c]; MakeUpper(szWorking); if(strcmp(szWorkingU, ".exe") == 0) strcpy(szWorking, ".xbe"); else strcat(szXbeFilename, ".xbe"); } } // open and convert Exe file { Exe *ExeFile = new Exe(szExeFilename); if(ExeFile->GetError() != 0) { strcpy(szErrorMessage, ExeFile->GetError()); goto cleanup; } Xbe *XbeFile = new Xbe(ExeFile, szXbeTitle, bRetail); if(XbeFile->GetError() != 0) { strcpy(szErrorMessage, XbeFile->GetError()); goto cleanup; } if(szDumpFilename[0] != 0) { FILE *outfile = fopen(szDumpFilename, "wt"); XbeFile->DumpInformation(outfile); fclose(outfile); if(XbeFile->GetError() != 0) { if(XbeFile->IsFatal()) { strcpy(szErrorMessage, XbeFile->GetError()); goto cleanup; } else { printf("DUMPINFO -> Warning: %s\n", XbeFile->GetError()); XbeFile->ClearError(); } } } XbeFile->Export(szXbeFilename); if(XbeFile->GetError() != 0) { strcpy(szErrorMessage, XbeFile->GetError()); goto cleanup; } } cleanup: if(szErrorMessage[0] != 0) { ShowUsage(); printf("\n"); printf(" * Error : %s\n", szErrorMessage); return 1; } return 0; }
//////////////////////////////////////////////////////////////////////////////// // main deal //////////////////////////////////////////////////////////////////////////////// void MString::DoubleMetaphone(CString &metaph, CString &metaph2) { int current = 0; length = GetLength(); if(length < 1) return; last = length - 1;//zero based index alternate = FALSE; MakeUpper(); //pad the original string so that we can index beyond the edge of the world Insert(GetLength(), " "); //skip these when at start of word if(StringAt(0, 2, "GN", "KN", "PN", "WR", "PS", "")) current += 1; //Initial 'X' is pronounced 'Z' e.g. 'Xavier' if(GetAt(0) == 'X') { MetaphAdd("S"); //'Z' maps to 'S' current += 1; } ///////////main loop////////////////////////// while(TRUE OR (primary.GetLength() < 4) OR (secondary.GetLength() < 4)) { if(current >= length) break; switch(GetAt(current)) { case 'A': case 'E': case 'I': case 'O': case 'U': case 'Y': if(current == 0) //all init vowels now map to 'A' MetaphAdd("A"); current +=1; break; case 'B': //"-mb", e.g", "dumb", already skipped over... MetaphAdd("P"); if(GetAt(current + 1) == 'B') current +=2; else current +=1; break; case 'Ç': MetaphAdd("S"); current += 1; break; case 'C': //various germanic if((current > 1) AND !IsVowel(current - 2) AND StringAt((current - 1), 3, "ACH", "") AND ((GetAt(current + 2) != 'I') AND ((GetAt(current + 2) != 'E') OR StringAt((current - 2), 6, "BACHER", "MACHER", "")) )) { MetaphAdd("K"); current +=2; break; } //special case 'caesar' if((current == 0) AND StringAt(current, 6, "CAESAR", "")) { MetaphAdd("S"); current +=2; break; } //italian 'chianti' if(StringAt(current, 4, "CHIA", "")) { MetaphAdd("K"); current +=2; break; } if(StringAt(current, 2, "CH", "")) { //find 'michael' if((current > 0) AND StringAt(current, 4, "CHAE", "")) { MetaphAdd("K", "X"); current +=2; break; } //greek roots e.g. 'chemistry', 'chorus' if((current == 0) AND (StringAt((current + 1), 5, "HARAC", "HARIS", "") OR StringAt((current + 1), 3, "HOR", "HYM", "HIA", "HEM", "")) AND !StringAt(0, 5, "CHORE", "")) { MetaphAdd("K"); current +=2; break; } //germanic, greek, or otherwise 'ch' for 'kh' sound if((StringAt(0, 4, "VAN ", "VON ", "") OR StringAt(0, 3, "SCH", "")) // 'architect but not 'arch', 'orchestra', 'orchid' OR StringAt((current - 2), 6, "ORCHES", "ARCHIT", "ORCHID", "") OR StringAt((current + 2), 1, "T", "S", "") OR ((StringAt((current - 1), 1, "A", "O", "U", "E", "") OR (current == 0)) //e.g., 'wachtler', 'wechsler', but not 'tichner' AND StringAt((current + 2), 1, "L", "R", "N", "M", "B", "H", "F", "V", "W", " ", ""))) { MetaphAdd("K"); }else{ if(current > 0) { if(StringAt(0, 2, "MC", "")) //e.g., "McHugh" MetaphAdd("K"); else MetaphAdd("X", "K"); }else MetaphAdd("X"); } current +=2; break; } //e.g, 'czerny' if(StringAt(current, 2, "CZ", "") AND !StringAt((current - 2), 4, "WICZ", "")) { MetaphAdd("S", "X"); current += 2; break; } //e.g., 'focaccia' if(StringAt((current + 1), 3, "CIA", "")) { MetaphAdd("X"); current += 3; break; } //double 'C', but not if e.g. 'McClellan' if(StringAt(current, 2, "CC", "") AND !((current == 1) AND (GetAt(0) == 'M'))) //'bellocchio' but not 'bacchus' if(StringAt((current + 2), 1, "I", "E", "H", "") AND !StringAt((current + 2), 2, "HU", "")) { //'accident', 'accede' 'succeed' if(((current == 1) AND (GetAt(current - 1) == 'A')) OR StringAt((current - 1), 5, "UCCEE", "UCCES", "")) MetaphAdd("KS"); //'bacci', 'bertucci', other italian else MetaphAdd("X"); current += 3; break; }else{//Pierce's rule MetaphAdd("K"); current += 2; break; } if(StringAt(current, 2, "CK", "CG", "CQ", "")) { MetaphAdd("K"); current += 2; break; } if(StringAt(current, 2, "CI", "CE", "CY", "")) { //italian vs. english if(StringAt(current, 3, "CIO", "CIE", "CIA", "")) MetaphAdd("S", "X"); else MetaphAdd("S"); current += 2; break; } //else MetaphAdd("K"); //name sent in 'mac caffrey', 'mac gregor if(StringAt((current + 1), 2, " C", " Q", " G", "")) current += 3; else if(StringAt((current + 1), 1, "C", "K", "Q", "") AND !StringAt((current + 1), 2, "CE", "CI", "")) current += 2; else current += 1; break; case 'D': if(StringAt(current, 2, "DG", "")) if(StringAt((current + 2), 1, "I", "E", "Y", "")) { //e.g. 'edge' MetaphAdd("J"); current += 3; break; }else{ //e.g. 'edgar' MetaphAdd("TK"); current += 2; break; } if(StringAt(current, 2, "DT", "DD", "")) { MetaphAdd("T"); current += 2; break; } //else MetaphAdd("T"); current += 1; break; case 'F': if(GetAt(current + 1) == 'F') current += 2; else current += 1; MetaphAdd("F"); break; case 'G': if(GetAt(current + 1) == 'H') { if((current > 0) AND !IsVowel(current - 1)) { MetaphAdd("K"); current += 2; break; } if(current < 3) { //'ghislane', ghiradelli if(current == 0) { if(GetAt(current + 2) == 'I') MetaphAdd("J"); else MetaphAdd("K"); current += 2; break; } } //Parker's rule (with some further refinements) - e.g., 'hugh' if(((current > 1) AND StringAt((current - 2), 1, "B", "H", "D", "") ) //e.g., 'bough' OR ((current > 2) AND StringAt((current - 3), 1, "B", "H", "D", "") ) //e.g., 'broughton' OR ((current > 3) AND StringAt((current - 4), 1, "B", "H", "") ) ) { current += 2; break; }else{ //e.g., 'laugh', 'McLaughlin', 'cough', 'gough', 'rough', 'tough' if((current > 2) AND (GetAt(current - 1) == 'U') AND StringAt((current - 3), 1, "C", "G", "L", "R", "T", "") ) { MetaphAdd("F"); }else if((current > 0) AND GetAt(current - 1) != 'I') MetaphAdd("K"); current += 2; break; } } if(GetAt(current + 1) == 'N') { if((current == 1) AND IsVowel(0) AND !SlavoGermanic()) { MetaphAdd("KN", "N"); }else //not e.g. 'cagney' if(!StringAt((current + 2), 2, "EY", "") AND (GetAt(current + 1) != 'Y') AND !SlavoGermanic()) { MetaphAdd("N", "KN"); }else MetaphAdd("KN"); current += 2; break; } //'tagliaro' if(StringAt((current + 1), 2, "LI", "") AND !SlavoGermanic()) { MetaphAdd("KL", "L"); current += 2; break; } //-ges-,-gep-,-gel-, -gie- at beginning if((current == 0) AND ((GetAt(current + 1) == 'Y') OR StringAt((current + 1), 2, "ES", "EP", "EB", "EL", "EY", "IB", "IL", "IN", "IE", "EI", "ER", "")) ) { MetaphAdd("K", "J"); current += 2; break; } // -ger-, -gy- if((StringAt((current + 1), 2, "ER", "") OR (GetAt(current + 1) == 'Y')) AND !StringAt(0, 6, "DANGER", "RANGER", "MANGER", "") AND !StringAt((current - 1), 1, "E", "I", "") AND !StringAt((current - 1), 3, "RGY", "OGY", "") ) { MetaphAdd("K", "J"); current += 2; break; } // italian e.g, 'biaggi' if(StringAt((current + 1), 1, "E", "I", "Y", "") OR StringAt((current - 1), 4, "AGGI", "OGGI", "")) { //obvious germanic if((StringAt(0, 4, "VAN ", "VON ", "") OR StringAt(0, 3, "SCH", "")) OR StringAt((current + 1), 2, "ET", "")) MetaphAdd("K"); else //always soft if french ending if(StringAt((current + 1), 4, "IER ", "")) MetaphAdd("J"); else MetaphAdd("J", "K"); current += 2; break; } if(GetAt(current + 1) == 'G') current += 2; else current += 1; MetaphAdd("K"); break; case 'H': //only keep if first & before vowel or btw. 2 vowels if(((current == 0) OR IsVowel(current - 1)) AND IsVowel(current + 1)) { MetaphAdd("H"); current += 2; }else//also takes care of 'HH' current += 1; break; case 'J': //obvious spanish, 'jose', 'san jacinto' if(StringAt(current, 4, "JOSE", "") OR StringAt(0, 4, "SAN ", "") ) { if(((current == 0) AND (GetAt(current + 4) == ' ')) OR StringAt(0, 4, "SAN ", "") ) MetaphAdd("H"); else { MetaphAdd("J", "H"); } current +=1; break; } if((current == 0) AND !StringAt(current, 4, "JOSE", "")) MetaphAdd("J", "A");//Yankelovich/Jankelowicz else //spanish pron. of e.g. 'bajador' if(IsVowel(current - 1) AND !SlavoGermanic() AND ((GetAt(current + 1) == 'A') OR (GetAt(current + 1) == 'O'))) MetaphAdd("J", "H"); else if(current == last) MetaphAdd("J", " "); else if(!StringAt((current + 1), 1, "L", "T", "K", "S", "N", "M", "B", "Z", "") AND !StringAt((current - 1), 1, "S", "K", "L", "")) MetaphAdd("J"); if(GetAt(current + 1) == 'J')//it could happen! current += 2; else current += 1; break; case 'K': if(GetAt(current + 1) == 'K') current += 2; else current += 1; MetaphAdd("K"); break; case 'L': if(GetAt(current + 1) == 'L') { //spanish e.g. 'cabrillo', 'gallegos' if(((current == (length - 3)) AND StringAt((current - 1), 4, "ILLO", "ILLA", "ALLE", "")) OR ((StringAt((last - 1), 2, "AS", "OS", "") OR StringAt(last, 1, "A", "O", "")) AND StringAt((current - 1), 4, "ALLE", "")) ) { MetaphAdd("L", " "); current += 2; break; } current += 2; }else current += 1; MetaphAdd("L"); break; case 'M': if((StringAt((current - 1), 3, "UMB", "") AND (((current + 1) == last) OR StringAt((current + 2), 2, "ER", ""))) //'dumb','thumb' OR (GetAt(current + 1) == 'M') ) current += 2; else current += 1; MetaphAdd("M"); break; case 'N': if(GetAt(current + 1) == 'N') current += 2; else current += 1; MetaphAdd("N"); break; case 'Ñ': current += 1; MetaphAdd("N"); break; case 'P': if(GetAt(current + 1) == 'H') { MetaphAdd("F"); current += 2; break; } //also account for "campbell", "raspberry" if(StringAt((current + 1), 1, "P", "B", "")) current += 2; else current += 1; MetaphAdd("P"); break; case 'Q': if(GetAt(current + 1) == 'Q') current += 2; else current += 1; MetaphAdd("K"); break; case 'R': //french e.g. 'rogier', but exclude 'hochmeier' if((current == last) AND !SlavoGermanic() AND StringAt((current - 2), 2, "IE", "") AND !StringAt((current - 4), 2, "ME", "MA", "")) MetaphAdd("", "R"); else MetaphAdd("R"); if(GetAt(current + 1) == 'R') current += 2; else current += 1; break; case 'S': //special cases 'island', 'isle', 'carlisle', 'carlysle' if(StringAt((current - 1), 3, "ISL", "YSL", "")) { current += 1; break; } //special case 'sugar-' if((current == 0) AND StringAt(current, 5, "SUGAR", "")) { MetaphAdd("X", "S"); current += 1; break; } if(StringAt(current, 2, "SH", "")) { //germanic if(StringAt((current + 1), 4, "HEIM", "HOEK", "HOLM", "HOLZ", "")) MetaphAdd("S"); else MetaphAdd("X"); current += 2; break; } //italian & armenian if(StringAt(current, 3, "SIO", "SIA", "") OR StringAt(current, 4, "SIAN", "")) { if(!SlavoGermanic()) MetaphAdd("S", "X"); else MetaphAdd("S"); current += 3; break; } //german & anglicisations, e.g. 'smith' match 'schmidt', 'snider' match 'schneider' //also, -sz- in slavic language altho in hungarian it is pronounced 's' if(((current == 0) AND StringAt((current + 1), 1, "M", "N", "L", "W", "")) OR StringAt((current + 1), 1, "Z", "")) { MetaphAdd("S", "X"); if(StringAt((current + 1), 1, "Z", "")) current += 2; else current += 1; break; } if(StringAt(current, 2, "SC", "")) { //Schlesinger's rule if(GetAt(current + 2) == 'H') //dutch origin, e.g. 'school', 'schooner' if(StringAt((current + 3), 2, "OO", "ER", "EN", "UY", "ED", "EM", "")) { //'schermerhorn', 'schenker' if(StringAt((current + 3), 2, "ER", "EN", "")) { MetaphAdd("X", "SK"); }else MetaphAdd("SK"); current += 3; break; }else{ if((current == 0) AND !IsVowel(3) AND (GetAt(3) != 'W')) MetaphAdd("X", "S"); else MetaphAdd("X"); current += 3; break; } if(StringAt((current + 2), 1, "I", "E", "Y", "")) { MetaphAdd("S"); current += 3; break; } //else MetaphAdd("SK"); current += 3; break; } //french e.g. 'resnais', 'artois' if((current == last) AND StringAt((current - 2), 2, "AI", "OI", "")) MetaphAdd("", "S"); else MetaphAdd("S"); if(StringAt((current + 1), 1, "S", "Z", "")) current += 2; else current += 1; break; case 'T': if(StringAt(current, 4, "TION", "")) { MetaphAdd("X"); current += 3; break; } if(StringAt(current, 3, "TIA", "TCH", "")) { MetaphAdd("X"); current += 3; break; } if(StringAt(current, 2, "TH", "") OR StringAt(current, 3, "TTH", "")) { //special case 'thomas', 'thames' or germanic if(StringAt((current + 2), 2, "OM", "AM", "") OR StringAt(0, 4, "VAN ", "VON ", "") OR StringAt(0, 3, "SCH", "")) { MetaphAdd("T"); }else{ MetaphAdd("0", "T"); } current += 2; break; } if(StringAt((current + 1), 1, "T", "D", "")) current += 2; else current += 1; MetaphAdd("T"); break; case 'V': if(GetAt(current + 1) == 'V') current += 2; else current += 1; MetaphAdd("F"); break; case 'W': //can also be in middle of word if(StringAt(current, 2, "WR", "")) { MetaphAdd("R"); current += 2; break; } if((current == 0) AND (IsVowel(current + 1) OR StringAt(current, 2, "WH", ""))) { //Wasserman should match Vasserman if(IsVowel(current + 1)) MetaphAdd("A", "F"); else //need Uomo to match Womo MetaphAdd("A"); } //Arnow should match Arnoff if(((current == last) AND IsVowel(current - 1)) OR StringAt((current - 1), 5, "EWSKI", "EWSKY", "OWSKI", "OWSKY", "") OR StringAt(0, 3, "SCH", "")) { MetaphAdd("", "F"); current +=1; break; } //polish e.g. 'filipowicz' if(StringAt(current, 4, "WICZ", "WITZ", "")) { MetaphAdd("TS", "FX"); current +=4; break; } //else skip it current +=1; break; case 'X': //french e.g. breaux if(!((current == last) AND (StringAt((current - 3), 3, "IAU", "EAU", "") OR StringAt((current - 2), 2, "AU", "OU", ""))) ) MetaphAdd("KS"); if(StringAt((current + 1), 1, "C", "X", "")) current += 2; else current += 1; break; case 'Z': //chinese pinyin e.g. 'zhao' if(GetAt(current + 1) == 'H') { MetaphAdd("J"); current += 2; break; }else if(StringAt((current + 1), 2, "ZO", "ZI", "ZA", "") OR (SlavoGermanic() AND ((current > 0) AND GetAt(current - 1) != 'T'))) { MetaphAdd("S", "TS"); } else MetaphAdd("S"); if(GetAt(current + 1) == 'Z') current += 2; else current += 1; break; default: current += 1; } } metaph = primary; //only give back 4 char metaph //if(metaph.GetLength() > 4) // metaph.SetAt(4,'\0'); if(alternate) { metaph2 = secondary; //if(metaph2.GetLength() > 4) // metaph2.SetAt(4,'\0'); } }