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"); }
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); }*/ }