Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
	}
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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;
	}
}
Esempio n. 6
0
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 );
}
Esempio n. 7
0
// -----------------------------------------------------------------------------
// 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);
}
Esempio n. 8
0
// -----------------------------------------------------------------------------
// 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;
}
Esempio n. 10
0
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;
}
Esempio n. 12
0
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;
}
Esempio n. 13
0
// 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;
}
Esempio n. 14
0
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);
}
Esempio n. 16
0
// 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;
}
Esempio n. 17
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');
        }

}