/* Copyright (c) 1993 Stephen F. White */
#include "cool.h"
#include "proto.h"
#include "netio.h"
#include "servers.h"
#include "execute.h"
/*
* broken-out compiler for COOL
*/
static FILE *progfile;
static void compile_error (const char *s);
static int compile_getc (void);
static void compile_ungetc (int c);
void cmdline_compile (const char *dbfile, const char *pfile, int do_init)
{
int n;
struct timeval cur_time;
if (!strcmp (pfile, "-")) {
progfile = stdin;
} else {
progfile = fopen (pfile, "rb");
if (!progfile) {
perror (pfile);
WIN32CLEANUP
exit (1);
}
}
if (init (dbfile, 0, 0)) {
WIN32CLEANUP
exit (2);
}
n = compile (0, compile_getc, compile_ungetc, compile_error, -1, 0, 0,
1, do_init);
if (n) {
fprintf (stderr, "%d errors, output file not written.\n", n);
WIN32CLEANUP
exit (4);
}
gettimeofday (&cur_time, 0);
(void) process_queues (cur_time, &cur_time); /* to handle init() messages */
shutdown_server ();
fclose (progfile);
}
static void compile_error (const char *s)
{
fprintf (stderr, "%s\n", s);
}
static int compile_getc (void)
{
return getc (progfile);
}
static void compile_ungetc (int c)
{
ungetc (c, progfile);
}