std::string Imm2asm::TranslateToAsm( const std::string& imm, const Environment& tables ) { m_pTables = (Environment*)&tables; std::string buffer = ExpandCode(imm); // 为entry添加活动保存指令 //std::cout << std::endl << buffer << std::endl; LocateLabel( buffer ); std::string line; std::size_t iter = 0; while ( iter < buffer.size() ) { line += buffer[ iter ]; if ( buffer[ iter ] == '\n' ) { TranslateLine(line); line = ""; } iter++; } return m_asmcode; }
main() { string line; printf("Enter a line: "); line = GetLine(); TranslateLine(line); }
//============================================================================= // replaces all meta tags of within a buffer //============================================================================= long Translate(char* src,char* dest,long ilength) { char b[4096]; char b2[4096]; long len,clen,ilen = 0; char* end = src + ilength; while (src < end) { len = ReadLine(src,b,end); TranslateLine(b,b2); clen = strlen(b2); memcpy(dest,b2,clen); dest += clen; *dest++ = 0x0A; ilen += clen + 1; src += len + 1; //printf("%s\n",b2); } return ilen; }
void CChat::AddLine(int ClientID, int Team, const char *pLine) { if(ClientID != -1 && m_pClient->m_aClients[ClientID].m_aName[0] == '\0') // unknown client return; char *p = const_cast<char*>(pLine); while(*p) { pLine = p; // find line seperator and strip multiline while(*p) { if(*p++ == '\n') { *(p-1) = 0; break; } } m_CurrentLine = (m_CurrentLine+1)%MAX_LINES; m_aLines[m_CurrentLine].m_Time = time_get(); m_aLines[m_CurrentLine].m_YOffset[0] = -1.0f; m_aLines[m_CurrentLine].m_YOffset[1] = -1.0f; m_aLines[m_CurrentLine].m_ClientID = ClientID; m_aLines[m_CurrentLine].m_Team = Team; m_aLines[m_CurrentLine].m_NameColor = -2; m_aLines[m_CurrentLine].m_Highlighted = str_find_nocase(pLine, m_pClient->m_aClients[m_pClient->m_Snap.m_LocalClientID].m_aName) != 0; if (m_aLines[m_CurrentLine].m_pThread) { thread_destroy(m_aLines[m_CurrentLine].m_pThread); m_aLines[m_CurrentLine].m_pThread = 0; } if(ClientID == -1) // server message { str_copy(m_aLines[m_CurrentLine].m_aName, "*** ", sizeof(m_aLines[m_CurrentLine].m_aName)); str_format(m_aLines[m_CurrentLine].m_aText, sizeof(m_aLines[m_CurrentLine].m_aText), "%s", pLine); } else { if(m_pClient->m_aClients[ClientID].m_Team == TEAM_SPECTATORS) m_aLines[m_CurrentLine].m_NameColor = TEAM_SPECTATORS; if(m_pClient->m_Snap.m_pGameobj && m_pClient->m_Snap.m_pGameobj->m_Flags&GAMEFLAG_TEAMS) { if(m_pClient->m_aClients[ClientID].m_Team == TEAM_RED) m_aLines[m_CurrentLine].m_NameColor = TEAM_RED; else if(m_pClient->m_aClients[ClientID].m_Team == TEAM_BLUE) m_aLines[m_CurrentLine].m_NameColor = TEAM_BLUE; } str_copy(m_aLines[m_CurrentLine].m_aName, m_pClient->m_aClients[ClientID].m_aName, sizeof(m_aLines[m_CurrentLine].m_aName)); str_format(m_aLines[m_CurrentLine].m_aText, sizeof(m_aLines[m_CurrentLine].m_aText), ": %s", pLine); } char aBuf[1024]; str_format(aBuf, sizeof(aBuf), "%s%s", m_aLines[m_CurrentLine].m_aName, m_aLines[m_CurrentLine].m_aText); Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "chat", aBuf); TranslateLine(&m_aLines[m_CurrentLine]); } // play sound if(ClientID >= 0) m_pClient->m_pSounds->Play(CSounds::CHN_GUI, SOUND_CHAT_CLIENT, 0, vec2(0,0)); else m_pClient->m_pSounds->Play(CSounds::CHN_GUI, SOUND_CHAT_SERVER, 0, vec2(0,0)); }