/* $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);
}
}