Пример #1
0
unsigned char compiler_core (void)
{
line_position = find_next_substring((unsigned char*)file_line, 0);		//and find first word
if (line_position>0)													//where is it?
{
	if (line_position<255)
	{																	//this is instruction - outside first row
		error = E_OK;
		if (file_line[line_position]>' ')
		{//non-empty line
			token_len = get_next_token((unsigned char *)file_line,(unsigned char *) token, 0);	//take opcode
			if ((token_len>0)&(token_len<255))																//if valid
			{
				if (token[0]!='#')
					{
					if (pass==2)
						{
						replaced = replace_objects((unsigned char *)file_line,(unsigned char *)file_line2,line_position+token_len);
						if (replaced==255) error = E_DEF_UNKNOWN;
						strcpy((char *)file_line,(char *) file_line2);
						}
					if ((error == E_OK)|(pass==1))
						{
						token_len = get_next_token((unsigned char *)file_line,(unsigned char *) token, 0);	//take opcode
						opcode_jump();						
						}
					}
				else
					{
					pseudoopcode_jump();
					
					}
			}
			else error = E_UNKNOWN_OPCODE;
			if (error==E_OK) 
				{
				if (write_opcodes()!=0) error = E_FILE_ERROR;
				}
			else
				{
				write_output(0xFFFF,error,(unsigned char *)file_line,line);
				}
		}
	}
}
else
{//this is label, first row
	if (pass==1)
		{
		token_len = get_next_token((unsigned char *)file_line,(unsigned char *) token, 0);	//take label name
		if (token_len>0)
			{
			dt_pointer = update_deftable_num((unsigned char *)token, addr);
			if (dt_pointer > ((DEFATABLE_LEN/TABLE_ENTRY_LEN)-2)) return E_DEFTAB_OVER;
			}
		}
}
return error;
}
int
main (int argc, char *argv[])
{
  if ((argc > 1) && (strcmp (argv[1],"-h") == 0))
    write_header();
  else if ((argc > 1) && (strcmp (argv[1],"-t") == 0))
    write_template ();
  else
    write_opcodes();
  return 0;
}