void Game::parseCmdLine(const mkString& cmd_line) { std::vector<mkString> tokens; extractTokens(cmd_line, tokens); for (size_t i = 0; i < tokens.size(); ++i) { const mkString& token = tokens[i]; const mkString* next_token_ptr = (i < tokens.size() - 1) ? &tokens[i+1] : NULL; if (token == "-freelook") m_startWithFreelook = true; else if (token == "-disable_shadows") m_disableShadows = true; else if (token == "-level") { CHK_ARG("-level"); m_levelName = *next_token_ptr; ++i; } else { Ogre::StringStream ss; ss << "Unrecognized command line parameter '" << token << "'"; MessageBoxA(NULL, ss.str().c_str(), NULL, MB_OK); } } }
int linkingLoaderPass1(string file, int csaddr) { cout<<endl<<"-----------------"<<endl; cout<<"Running pass 1..."<<endl; ifstream hex((file+".o").c_str()); char line[100]; char* tokens[6]; int addr = 0, csaddr_as = 0, rel = 0, cslen = 0; int no_tokens = 0; string cs_name; string rec_type, loc, opcode, operand; if(hex) { rec_type.clear(), cs_name.clear(), loc.clear(), opcode.clear(), operand.clear(); hex.getline(line,100); no_tokens = extractTokens(line,tokens,'^'); rec_type.assign(tokens[0]); if(rec_type[0]=='H') { cs_name.assign(tokens[1]); loc.assign(tokens[2]); stringstream s(loc.substr(1,loc.length()-1)); s>>std::hex>>csaddr_as; s.str("");s.clear(); addr = csaddr_as; rel = addr-csaddr_as; operand.assign(tokens[3]); s<<operand; s>>std::hex>>cslen; s.str("");s.clear(); cout<<endl<<"Control Section Name::"<<cs_name<<endl<<"Start Address::"<<setw(4)<<setfill('0')<<uppercase<<std::hex<<(csaddr+rel)<<endl<<"Control Section length::"<<setw(4)<<setfill('0')<<uppercase<<std::hex<<cslen<<endl<<endl; } else
void pass1(string in_file) { cout<<"Running pass 1..."<<endl; ifstream in((in_file + ".txt").c_str()); ofstream inter((in_file + ".i").c_str()); char line[100]; char* tokens[6]; int line_no = 1; int locctr = 0, prev_locctr = 0; int no_tokens = 0, sc = 0, temp = 0; string label, operation, operand, comment; string prog_name, loc; try{ while(in && operation!="END") { label.clear(),operation.clear(),operand.clear(),comment.clear(); in.getline(line,100); if(line[0]==';') { comment = line; //Neglect complete comment... } else { no_tokens = extractTokens(line,tokens,'\t'); label.assign(tokens[0]); if(optab.search(label)!=-1) throw 1; operation.assign(tokens[1]); if(no_tokens==3) { if(tokens[2][0]==';') comment.assign(tokens[2]); else operand.assign(tokens[2]); } else if(no_tokens==4) { operand.assign(tokens[2]); comment.assign(tokens[3]); } if(line_no==1) { if(operation=="START") { prog_name = label; if(prog_name.length()>10) throw 8; operation = "START"; if(operand[0]=='x') { stringstream ss(operand.substr(1,operand.length()-1)); ss>>hex>>locctr; } else if(operand[0]=='#') { stringstream ss(operand.substr(1,operand.length()-1)); ss>>dec>>locctr; } start_add = prev_locctr = locctr; } else cout<<"No Prog Name and Start Address specified. Default assumed."<<endl; }