/* Copyright 1989, 1990 by James Aspnes, David Applegate, and Bennet Yee */
/* See the file COPYING for distribution information */
#include <stdio.h>
#include "db.h"
#include "config.h"
datum me;
datum you;
datum text = NOTHING;
datum mtext = NOTHING;
int please_gc = 0;
int please_checkpoint = 0;
int shutdown_flag = 0;
/* get a line of input, massaging it appropriately... */
/* I recognize, deep in my heart, that this code is cruft */
static const char *get_line(char *buf, int len)
{
int c;
char *p;
p = buf;
while(p < buf + len - 2) {
if((c = getchar()) == EOF) return 0;
if(c == '\n') {
if((c = getchar()) == '\n') {
break;
} else if(c == '-') {
ungetc(c, stdin);
break;
} else if(c == EOF) {
break;
}
*p++ = '\t';
}
*p++ = c;
}
*p = '\0';
return buf;
}
static void command_loop(datum obj)
{
char buf[MAX_STRLEN+1];
struct object *o;
object_flag_type old_flags;
buf[0] = RUN_CODE_COMMAND;
/* set obj to be connected */
if((o = object(obj)) != 0) {
old_flags = o->flags;
o->flags |= F_CONNECTED;
}
while(get_line(buf+1, MAX_STRLEN - 1) != 0) {
if(buf[1] == '-') {
/* regular command */
parse_command(obj, buf+2);
} else {
parse_command(obj, buf);
}
}
if((o = object(obj)) != 0) {
o->flags = old_flags;
}
}
void notify(datum player, const char *t)
{
printf("%d: %s\n", player, t);
fflush(stdout);
}
void main(int argc, char **argv)
{
FILE *f;
datum obj;
if(argc < 3) {
fprintf (stderr, "Usage: %s infile outfile [object]\n", *argv);
exit (1);
}
/* ok, read it in */
if((f = fopen(argv[1], "r")) == NULL || db_read(f) < 0) {
fprintf(stderr, "Couldn't load %s!\n", argv[1]);
exit (2);
}
fclose(f);
if(argc < 4) {
obj = TOP_OBJECT;
} else {
obj = atoi(argv[3]);
}
command_loop(obj);
/* clear up any garbage */
full_gc();
/* write it out */
if((f = fopen(argv[2], "w")) == NULL || db_write(f) < 0 || fclose(f) < 0) {
fprintf(stderr, "Couldn't write %s\n", argv[2]);
}
exit (0);
}