static package bf_verb_code(Var arglist, Byte next, void *vdata, Objid progr) { /* (object, verb-desc [, fully-paren [, indent]]) */ int nargs = arglist.v.list[0].v.num; Objid oid = arglist.v.list[1].v.obj; Var desc = arglist.v.list[2]; int parens = nargs >= 3 && is_true(arglist.v.list[3]); int indent = nargs < 4 || is_true(arglist.v.list[4]); db_verb_handle h; Var code; enum error e; if ((e = validate_verb_descriptor(desc)) != E_NONE || (e = E_INVARG, !valid(oid))) { free_var(arglist); return make_error_pack(e); } h = find_described_verb(oid, desc); free_var(arglist); if (!h.ptr) return make_error_pack(E_VERBNF); else if (!db_verb_allows(h, progr, VF_READ)) return make_error_pack(E_PERM); code = new_list(0); unparse_program(db_verb_program(h), lister, &code, parens, indent, MAIN_VECTOR); return make_var_pack(code); }
void unparse_to_file(FILE * fp, Program * p, int fully_parenthesize, int indent_lines, int f_index) { unparse_program(p, print_line, fp, fully_parenthesize, indent_lines, f_index); }
void dbio_write_forked_program(Program * program, int f_index) { unparse_program(program, receiver, 0, 1, 0, f_index); dbio_printf(".\n"); }
void dbio_write_program(Program * program) { unparse_program(program, receiver, 0, 1, 0, MAIN_VECTOR); dbio_printf(".\n"); }