void menu() { insymbol(); if (try_change_event_trapping_status(lastsym)) return; if (eat(clearsym)) gen_jsr("_ClearMenu"); else if (eat(waitsym)) gen_jsr("_WaitMenu"); else { parse_call_func_args("l,l,l",0); /* menu-id,item-id,state */ if (!peek(comma)) { gen_call_void("_ChangeMenuState",12); return; } opt_arg(stringtype,0); /* title-string */ opt_arg(stringtype,0); /* command_key */ gen_call_void("_ModifyMenu",20); } }
void gen_close_library(const char * librarybase) { gen_load32a(librarybase,1); /* library base in a1 */ gen_jsr("_close_library"); gen_save32_val(0,librarybase); enter_XREF("_close_library"); }
void closelibrary() { char libname[MAXIDSIZE],ut_libname[MAXIDSIZE]; int cc; /* close one or more shared libraries */ insymbol(); if (sym != ident && sym != stringconst) { /* ** Close all open shared libraries not ** normally closed by ACE at the end of ** the program run. */ cc=0; while (otherlib[cc].name[0] != '\0' && strcmp(otherlib[cc].name,"SENTINEL") != 0) { gen_load32a(otherlib[cc].base,1); /* library base in a1 */ gen_jsr("_close_library"); gen_save32_val(0,otherlib[cc].base); enter_XREF("_close_library"); cc++; } } else { /* close a single shared library */ get_libname(libname,ut_libname); /* without extension! */ if (check_for_ace_lib(libname) == NEGATIVE) { make_library_base(libname); gen_close_library(librarybase); } insymbol(); } }
void gen_open_library(const char * libname, const char * librarybase) { char lab[80],lablabel[80]; gen_pop_addr(1); /* address of library name in a1 */ gen_jsr("_open_library"); make_library_base(libname); gen_save32d(0,librarybase); gen_test(); make_label(lab,lablabel); gen_bne(lab); gen_jmp("_EXIT_PROG"); /* quit program if can't open library */ gen_label(lablabel); enter_XREF("_open_library"); }
void Compiler::handle_ik_cf(const JInst& jinst) { switch(jinst.opcode) { case OPCODE_IFNULL: case OPCODE_IFNONNULL: case OPCODE_IFEQ: case OPCODE_IFNE: case OPCODE_IFLT: case OPCODE_IFGE: case OPCODE_IFGT: case OPCODE_IFLE: gen_if(jinst.opcode, jinst.get_target(0)); break; case OPCODE_IF_ACMPEQ: case OPCODE_IF_ACMPNE: case OPCODE_IF_ICMPEQ: case OPCODE_IF_ICMPNE: case OPCODE_IF_ICMPLT: case OPCODE_IF_ICMPGE: case OPCODE_IF_ICMPGT: case OPCODE_IF_ICMPLE: gen_if_icmp(jinst.opcode, jinst.get_target(0)); break; case OPCODE_GOTO: case OPCODE_GOTO_W: gen_goto(jinst.get_target(0)); break; case OPCODE_JSR: case OPCODE_JSR_W: gen_jsr(jinst.get_target(0)); break; case OPCODE_RET: gen_ret(jinst.op0); break; case OPCODE_TABLESWITCH: case OPCODE_LOOKUPSWITCH: gen_switch(jinst); break; default: assert(false); break; } }