dmuck0.15-beta/docs/muf/
dmuck0.15-beta/game/
dmuck0.15-beta/game/logs/
dmuck0.15-beta/game/muf/
dmuck0.15-beta/game/muf/text/
#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);
  }
}