Пример #1
0
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;
				}