+#ifndef lint
+static char *sccsid = "@(#)dr_main.c 2.1 85/03/04";
+#endif
+
+#include "driver.h"
+
+dr_main()
+{
+ register int n;
+ register struct ship *sp;
+ int nat[NNATION];
+
+ (void) signal(SIGINT, SIG_IGN);
+ (void) signal(SIGQUIT, SIG_IGN);
+ (void) signal(SIGTSTP, SIG_IGN);
+ if (issetuid)
+ (void) setruid(geteuid());
+ if (game < 0 || game >= NSCENE) {
+ fprintf(stderr, "DRIVER: Bad game number %d\n", game);
+ exit(1);
+ }
+ cc = &scene[game];
+ ls = SHIP(cc->vessels);
+ if (sync_open() < 0) {
+ perror("driver: syncfile");
+ exit(1);
+ }
+ for (n = 0; n < NNATION; n++)
+ nat[n] = 0;
+ foreachship(sp) {
+ if (sp->file == NULL &&
+ (sp->file = (struct File *)calloc(1, sizeof (struct File))) == NULL) {
+ (void) fprintf(stderr, "DRIVER: Out of memory.\n");
+ exit(1);
+ }
+ sp->file->index = sp - SHIP(0);
+ sp->file->loadL = L_ROUND;
+ sp->file->loadR = L_ROUND;
+ sp->file->readyR = R_LOADED|R_INITIAL;
+ sp->file->readyL = R_LOADED|R_INITIAL;
+ sp->file->stern = nat[sp->nationality]++;
+ sp->file->dir = sp->shipdir;
+ sp->file->row = sp->shiprow;
+ sp->file->col = sp->shipcol;
+ }
+ windspeed = cc->windspeed;
+ winddir = cc->winddir;
+ for (;;) {
+ sleep(7);
+ if (Sync() < 0) {
+ sync_close(1);
+ exit(1);
+ }
+ next();
+ unfoul();
+ checkup();
+ prizecheck();
+ moveall();
+ thinkofgrapples();
+ boardcomp();
+ compcombat();
+ resolve();
+ reload();
+ checksails();
+ if (Sync() < 0) {
+ sync_close(1);
+ exit(1);
+ }
+ }
+}