/* $Header: /belch_a/users/rearl/tinymuck/src/RCS/disassem.c,v 1.4 90/09/28 12:20:26 rearl Exp $ */ /* * $Log: disassem.c,v $ * Revision 1.4 90/09/28 12:20:26 rearl * Added shared program strings. * * Revision 1.3 90/09/16 04:42:01 rearl * Preparation code added for disk-based MUCK. * * Revision 1.2 90/07/29 17:31:43 rearl * Added debugging patches from lpb@csadfa.cs.adfa.oz.au. * * Revision 1.1 90/07/19 23:03:29 casie * Initial revision * * */ #include "copyright.h" #include "config.h" #include "db.h" #include "externs.h" #include "interface.h" #include "inst.h" void disassemble(dbref player, dbref program) { struct inst *curr; struct inst *codestart; int i; char buf[BUFFER_LEN]; codestart = curr = DBFETCH(program)->sp.program.code; if (!DBFETCH(program)->sp.program.siz) { notify(player, "Nothing to disassemble!"); return; } for (i = 0; i < DBFETCH(program)->sp.program.siz; i++, curr++) { switch(curr -> type) { case PROG_PRIMITIVE: if (curr->data.number >= BASE_MIN && curr->data.number <= BASE_MAX) sprintf(buf, "%d: PRIMITIVE: %s", i, base_inst[curr->data.number-BASE_MIN]); else sprintf(buf, "%d: PRIMITIVE: %d", i, curr->data.number); break; case PROG_STRING: sprintf(buf, "%d: STRING: \"%s\"", i, curr -> data.string ? curr -> data.string->data : ""); break; case PROG_INTEGER: sprintf(buf, "%d: INTEGER: %d", i, curr -> data.number); break; case PROG_ADD: sprintf(buf, "%d: ADDRESS: %d", i, curr-> data.call - codestart); break; case PROG_OBJECT: sprintf(buf, "%d: OBJECT REF: %d", i, curr -> data.number); break; case PROG_VAR: sprintf(buf, "%d: VARIABLE: %d", i, curr -> data.number); } notify(player, buf); } }