/* 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" #include "externs.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'; } #ifdef WIN32 if (c == '\r') continue; // Skip Windows cruft #endif *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 = 0; 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 ("%ld: %s\n", player, t); fflush (stdout); } int main (int argc, char **argv) { FILE *f; datum obj; if (argc < 3) { fprintf (stderr, "Usage: %s infile outfile [object]\n", *argv); return (1); } /* ok, read it in */ if ((f = fopen (argv[1], "rb")) == NULL || db_read (f) < 0) { fprintf (stderr, "Couldn't load %s!\n", argv[1]); return (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], "wb")) == NULL || db_write (f) < 0 || fclose (f) < 0) { fprintf (stderr, "Couldn't write %s\n", argv[2]); } return (0); }