Ejemplo n.º 1
0
static void
parse_args (int argc, char **argv)
{
  GSList *group_names;
  int i = 1;

  if (argc >= 2)
    {
      if (! strcmp(argv[1], "help")
	  || ! strcmp(argv[1], "--help")
	  || ! strcmp(argv[1], "-h")
	  || ! strcmp(argv[1], "-?"))
	{
	  if (argc != 2)
	    jb_error("too many arguments for \"help\" action; run \"./jb help\" for an usage summary");

	  jb_action_help();
	}
      else if (! strcmp(argv[1], "configure"))
	{
	  for (i++; i < argc; i++)
	    handle_variable(argv[i]);

	  jb_action_configure();
	}
      else if (! strcmp(argv[1], "build"))
	{
	  group_names = parse_group_args(argc - 2, argv + 2);
	  jb_action_build(group_names);
	}
      else if (! strcmp(argv[1], "install"))
	{
	  group_names = parse_group_args(argc - 2, argv + 2);
	  jb_action_install(group_names);
	}
      else if (! strcmp(argv[1], "makedist"))
	{
	  if (argc != 2)
	    jb_error("too many arguments for \"makedist\" action; run \"./jb help\" for an usage summary");

	  jb_action_makedist();
	}
      else if (! strcmp(argv[1], "clean"))
	{
	  group_names = parse_group_args(argc - 2, argv + 2);
	  jb_action_clean(group_names);
	}
      else if (! strcmp(argv[1], "distclean"))
	{
	  group_names = parse_group_args(argc - 2, argv + 2);
	  jb_action_distclean(group_names);
	}
      else if (! strcmp(argv[1], "maintainerclean"))
	{
	  group_names = parse_group_args(argc - 2, argv + 2);
	  jb_action_maintainerclean(group_names);
	}
      else
	jb_error("unknown action \"%s\"; run \"./jb help\" for an usage summary", argv[1]);
    }
  else
    jb_error("not enough arguments; run \"./jb help\" for an usage summary");
}
Ejemplo n.º 2
0
void read_programs()
{
	int i, j, cnt;
	char command[100], *ptr, *dest, *operand1, op, *operand2;
	var_num = 0;
	for(i = 0; i < 2; i++)
	{
		cnt = 0;
		while(fgets(command, 100, stdin))
		{
			if(*(ptr = l_trim(command)) == '\0')
				continue;
			dest = ptr;
			while(isalnum(*ptr)) ++ptr;
			*ptr++ = '\0';
			str_to_lower(dest);
			if(strcmp(dest, "end") == 0)
				break;
			while(!isalnum(*ptr)) ++ptr;
			operand1 = ptr++;
			while(isalnum(*ptr)) ++ptr;
			op = '\0';
			if(*ptr == '+') op = '+';
			else if(*ptr == '-') op = '-';
			*ptr++ = '\0';
			while(!isalnum(*ptr))
			{
				if(!op)
				{
					if(*ptr == '+') op = '+';
					else if(*ptr == '-') op = '-';
				}
				++ptr;
			}
			operand2 = ptr++;
			while(isalnum(*ptr)) ++ptr;
			*ptr = '\0';
			str_to_lower(operand1);
			str_to_lower(operand2);

			++cnt;
			inst_set[i][cnt].inst = MOV_R1;
			if(isdigit(operand1[0]))
			{
				inst_set[i][cnt].var = IMMEDIATE;
				inst_set[i][cnt].num = atoi(operand1);
			}
			else
			{
				str_to_lower(operand1);
				inst_set[i][cnt].var = handle_variable(operand1);
			}
			++cnt;
			inst_set[i][cnt].inst = MOV_R2;
			if(isdigit(operand2[0]))
			{
				inst_set[i][cnt].var = IMMEDIATE;
				inst_set[i][cnt].num = atoi(operand2);
			}
			else
			{
				str_to_lower(operand2);
				inst_set[i][cnt].var = handle_variable(operand2);
			}
			++cnt;
			inst_set[i][cnt].inst = (op == '+' ? ADD : SUB);
			++cnt;
			inst_set[i][cnt].inst = MOV_VAR;
			inst_set[i][cnt].var = handle_variable(dest);
		}
		inst_num[i] = cnt;
	}
	std::sort(var_set, var_set+var_num, cmp_var);
	/*for(i = 1; i <= inst_num[0]; i += 4)
	{
		printf("%d R1, %d\n", inst_set[0][i].inst, inst_set[0][i].var);
		printf("%d R2, %d\n", inst_set[0][i+1].inst, inst_set[0][i+1].var);
		printf("%d R1, R2\n", inst_set[0][i+2].inst);
		printf("%d %d, R1\n", inst_set[0][i+3].inst, inst_set[0][i+3].var);
	}
	for(i = 1; i <= inst_num[1]; i += 4)
	{
		printf("%d R1, %d\n", inst_set[1][i].inst, inst_set[1][i].var);
		printf("%d R2, %d\n", inst_set[1][i+1].inst, inst_set[1][i+1].var);
		printf("%d R1, R2\n", inst_set[1][i+2].inst);
		printf("%d %d, R1\n", inst_set[1][i+3].inst, inst_set[1][i+3].var);
	}*/
}