static void print_help_and_exit(struct isl_arg *arg, const char *prog, void *opt) { int i; struct isl_prefixes prefixes = { 0 }; printf("Usage: %s [OPTION...]", prog_name(prog)); for (i = 0; arg[i].type != isl_arg_end; ++i) if (arg[i].type == isl_arg_arg) printf(" %s", arg[i].argument_name); printf("\n\n"); print_help(arg, &prefixes, opt); printf("\n"); if (any_version(arg)) printf(" -V, --version\n"); print_bool_help(help_arg, NULL, NULL); for (i = 0; arg[i].type != isl_arg_end; ++i) { if (arg[i].type != isl_arg_footer) continue; wrap_msg(arg[i].help_msg, 0, 0); printf("\n"); } exit(0); }
static int print_help_msg(struct isl_arg *decl, int pos) { if (!decl->help_msg) return pos; return wrap_msg(decl->help_msg, 30, pos); }
void IDAOCaml_invoke_hotkey_callback(int i) { CAMLlocal1(ret); ret = caml_callback_exn(*caml_named_value("HotkeyCallback"), Val_int(i)); if(Is_exception_result(ret)) { char buf[1024]; char *exn = caml_format_exception(Extract_exception(ret)); sprintf(buf, "[E] Function bound to hotkey (internal %d) threw exception (value %08lx): %s\n", i, Extract_exception(ret), exn); wrap_msg(buf); free(exn); } }
value IDAOCaml_add_ocaml_hotkey(value hotkey, value n) { char line[100], err[256], funcname[50]; CAMLparam2(hotkey,n); sprintf(funcname, "__IDCOCaml%d", Int_val(n)); sprintf(line, "static %s() { OCamlCallback(%d); }", funcname, Int_val(n)); if(wrap_CompileLine(line,err,sizeof(err))) { // Returns 0 on success if(!wrap_add_idc_hotkey(String_val(hotkey),funcname)) CAMLreturn(Val_int(1)); } else wrap_msg(err); CAMLreturn(Val_int(0)); }
value IDAOCaml_msg(value str) { CAMLparam1(str); wrap_msg(String_val(str)); CAMLreturn(Val_unit); }