#include <stdio.h>
#include <string.h>
#include <math.h>
#include "lint.h"
#include "lnode.h"
#include "interpret.h"
#include "object.h"
#include "config.h"
struct value const0, const1, *catch_value;
extern struct lnode *prog;
extern int current_line;
int d_flag = 0; /* Run with debug */
int t_flag = 0; /* Disable heart beat and reset */
int e_flag = 0; /* Load empty, without castles. */
#ifdef YYDEBUG
extern int yydebug;
#endif
int port_number = PORTNUM;
char *reserved_area; /* reserved for malloc() */
double consts[5];
int main(argc, argv)
int argc;
char **argv;
{
char *p;
extern int current_time;
int i;
if (argc == 2) {
if (strcmp(argv[1], "-e") == 0)
e_flag++;
else if (strcmp(argv[1], "-d") == 0)
d_flag++;
else if (strcmp(argv[1], "-t") == 0)
t_flag++;
#ifdef YYDEBUG
else if (strcmp(argv[1], "-y") == 0)
yydebug = 1;
#endif
else port_number = atoi(argv[1]);
}
/*** bub ***/
#define RANDOM
#ifdef DRAND48
srand48(time(0));
#else
#ifdef RANDOM
/*** VMS Hack. ***/
/* srandom(time(0));*/
srand (time (0));
#else
fprintf(stderr, "No random generator specified!\n");
#endif /* RANDOM */
#endif /* DRAND48 */
current_time = time(0);
if (RESERVED_SIZE > 0)
reserved_area = malloc(RESERVED_SIZE);
for (i=0; i < sizeof consts / sizeof consts[0]; i++)
consts[i] = exp(- i / 900.0);
init_string_space();
chdir(MUD_LIB);
init_constant_lnodes();
compute_lnode_size();
load_wiz_file();
const0.type = T_NUMBER;
const0.u.number = 0;
const1.type = T_NUMBER;
const1.u.number = 1;
backend();
return 0;
}
char *string_copy(str)
char *str;
{
char *p;
p = xalloc(strlen(str)+1);
(void)strcpy(p, str);
return p;
}
/*VARARGS1*/
void debug_message(a, b, c, d, e, f, g, h, i, j)
char *a;
int b, c, d, e, f, g, h, i, j;
{
static FILE *fp = NULL;
char deb[100];
char name[100];
if (fp == NULL) {
gethostname(name,sizeof name);
/*** Only one dot allowed per file name. ***/ /*** (bub) ***/
sprintf(deb,"debug.log",name);
fp = fopen(deb, "w");
if (fp == NULL) {
perror(deb);
abort();
}
}
(void)fprintf(fp, a, b, c, d, e, f, g, h, i, j);
(void)fflush(fp);
}
void debug_message_value(v)
struct value *v;
{
if (v == 0) {
debug_message("<NULL>");
return;
}
switch(v->type) {
case T_NUMBER:
debug_message("%d", v->u.number);
return;
case T_STRING:
debug_message("\"%s\"", v->u.string);
return;
case T_OBJECT:
debug_message("OBJ(%s)", v->u.ob->name);
return;
default:
fatal("<INVALID>\n");
return;
}
}
#ifdef malloc
#undef malloc
#endif
int slow_shut_down_to_do = 0;
char *xalloc(size)
int size;
{
char *p;
if (size == 0)
fatal("Tried to allocate 0 bytes.\n");
p = malloc(size);
if (p == 0) {
if (reserved_area) {
free(reserved_area);
p = "Temporary out of MEMORY. Freeing reserve.\n";
write(1, p, strlen(p));
reserved_area = 0;
slow_shut_down_to_do = 6;
return xalloc(size); /* Try again */
}
p = "Totally out of MEMORY.\n";
write(1, p, strlen(p));
exit(2);
}
return p;
}