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/
#ifndef PRIMS_H
#define PRIMS_H

#define __P_PROTO dbref player, dbref program, inst *pc, inst *arg, int *top, \
                   frame *fr

#include "copyright.h"
#include "config.h"

#include <sys/types.h>
#include <time.h>
#include "db.h"
#include "inst.h"
#include "externs.h"
#include "match.h"
#include "interface.h"
#include "params.h"

#ifdef MIPS
typedef char *voidptr;
#define MIPSCAST (char *)
#else
typedef void *voidptr;
#define MIPSCAST
#endif
extern char *uppercase, *lowercase;
#define UPCASE(x) (uppercase[x])
#define DOWNCASE(x) (lowercase[x])
#ifdef COMPRESS
#define alloc_compressed(x) dup_string(compress(x))
#define get_compress(x) compress(x)
#define get_uncompress(x) uncompress(x)
#else /* COMPRESS */
#define alloc_compressed(x) dup_string(x)
#define get_compress(x) (x)
#define get_uncompress(x) (x)
#endif /* COMPRESS */
#define DoNullInd(x) ((x) ? (x) : "")

#define CLEAR(C) \
{ \
  if ((C)->type == PROG_STRING) free((void *) (C)->data.string); \
}

void push (inst *, int *, int, voidptr);
int valid_object(inst *);
int false (inst *);
void copyinst(inst *, inst *);
void push (inst *, int *, int, voidptr);
int valid_player(inst *);
void copyobj(dbref, dbref, dbref);
int valid_object(inst *);
int is_home(inst *);
int permissions(dbref, dbref);
int arith_type(inst *, inst *);
void interp_err(dbref, char *, char *, dbref);

#define CHECKOP(N) \
{ \
  if ((*top) < (N)) \
  { \
    interp_err(player, insttoerr(pc), "Stack underflow.", program); \
    return; \
  } \
  p_nargs = (N); \
}

#define POP() (arg + --(*top))

#define abort_interp(C) \
{ \
  interp_err(player, insttoerr(pc), (C), program); \
  switch(p_nargs) \
  { \
    case 4: CLEAR(p_oper4); \
    case 3: CLEAR(p_oper3); \
    case 2: CLEAR(p_oper2); \
    case 1: CLEAR(p_oper1); \
  } \
  return; \
}
#endif /* PRIMS_H */