bool CResourceDef::SetResourceName( LPCTSTR pszName ) { ADDTOCALLSTACK("CResourceDef::SetResourceName"); ASSERT(pszName); // This is the global def for this item. for ( size_t i = 0; pszName[i]; i++ ) { if ( i >= EXPRESSION_MAX_KEY_LEN ) { DEBUG_ERR(( "Too long DEFNAME=%s\n", pszName )); return( false ); } if ( ! _ISCSYM(pszName[i])) { DEBUG_ERR(( "Bad chars in DEFNAME=%s\n", pszName )); return( false ); } } int iVarNum; CVarDefCont * pVarKey = g_Exp.m_VarDefs.GetKey( pszName ); if ( pVarKey ) { if ( (DWORD)pVarKey->GetValNum() == GetResourceID().GetPrivateUID() ) { return( true ); } if ( RES_GET_INDEX(pVarKey->GetValNum()) == GetResourceID().GetResIndex()) { DEBUG_WARN(( "The DEFNAME=%s has a strange type mismatch? 0%llx!=0%lx\n", pszName, pVarKey->GetValNum(), GetResourceID().GetPrivateUID() )); } else { DEBUG_WARN(( "The DEFNAME=%s already exists! 0%llx!=0%x\n", pszName, RES_GET_INDEX(pVarKey->GetValNum()), GetResourceID().GetResIndex() )); } iVarNum = g_Exp.m_VarDefs.SetNum( pszName, GetResourceID().GetPrivateUID() ); } else { iVarNum = g_Exp.m_VarDefs.SetNumNew( pszName, GetResourceID().GetPrivateUID() ); } if ( iVarNum < 0 ) return( false ); SetResourceVar( dynamic_cast <const CVarDefContNum*>( g_Exp.m_VarDefs.GetAt( iVarNum ))); return( true ); }
static size_t GetIdentifierString( tchar * szTag, lpctstr pszArgs ) { // Copy the identifier (valid char set) out to this buffer. size_t i = 0; for ( ; pszArgs[i]; ++i ) { if ( ! _ISCSYM(pszArgs[i])) break; if ( i >= EXPRESSION_MAX_KEY_LEN ) return 0; szTag[i] = pszArgs[i]; } szTag[i] = '\0'; return i; }
bool CMenuItem::ParseLine( TCHAR * pszArgs, CScriptObj * pObjBase, CTextConsole * pSrc ) { ADDTOCALLSTACK("CMenuItem::ParseLine"); if ( *pszArgs == '@' ) { // This allows for triggers in menus return false; } TCHAR * pszArgStart = pszArgs; while ( _ISCSYM( *pszArgs )) pszArgs++; if ( *pszArgs ) { *pszArgs = '\0'; pszArgs++; GETNONWHITESPACE( pszArgs ); } // The item id (if we want to have an item type menu) or 0 if ( strcmp( pszArgStart, "0" ) != 0 ) { CItemBase * pItemBase = CItemBase::FindItemBase(static_cast<ITEMID_TYPE>(g_Cfg.ResourceGetIndexType( RES_ITEMDEF, pszArgStart ))); if ( pItemBase != NULL ) { m_id = static_cast<WORD>(pItemBase->GetDispID()); pObjBase = pItemBase; } else { DEBUG_ERR(( "Bad MENU item id '%s'\n", pszArgStart )); return( false ); // skip this. } } else { m_id = 0; } if ( pObjBase != NULL ) { pObjBase->ParseText( pszArgs, pSrc ); } else { g_Serv.ParseText( pszArgs, pSrc ); } // Parsing @color if ( *pszArgs == '@' ) { pszArgs++; HUE_TYPE wHue = static_cast<HUE_TYPE>(Exp_GetVal( pszArgs )); if ( wHue != 0 ) wHue = (wHue == 1? 0x7FF: wHue-1); m_color = wHue; SKIP_ARGSEP( pszArgs ); } else m_color = 0; m_sText = pszArgs; if ( m_sText.IsEmpty()) { if ( pObjBase ) // use the objects name by default. { m_sText = pObjBase->GetName(); if ( ! m_sText.IsEmpty()) return( true ); } DEBUG_ERR(( "Bad MENU item text '%s'\n", pszArgStart )); } return( !m_sText.IsEmpty() ); }