#include "copyright.h" #include "config.h" #include "db.h" #include "externs.h" #include "interface.h" #include "inst.h" void disassemble(dbref player, dbref program) { inst *curr; inst *codestart; int i; char buf[BUFFER_LEN]; codestart = curr = DBFETCH(program)->sp.program.code; if (!DBFETCH(program)->sp.program.siz) { notify(player, 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 : ""); break; case PROG_INTEGER: sprintf(buf, "%d: INTEGER: %ld", i, curr->data.number); break; case PROG_FLOAT: sprintf(buf, "%d: FLOAT: %G", i, curr->data.fnum); break; case PROG_ADD: sprintf(buf, "%d: ADDRESS: %d", i, curr->data.call - codestart); break; case PROG_OBJECT: sprintf(buf, "%d: OBJECT REF: %ld", i, curr->data.number); break; case PROG_VAR: sprintf(buf, "%d: VARIABLE: %ld", i, curr->data.number); } notify(player, player, buf); } }