1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32: #include <sys/cdefs.h>
33: #ifndef lint
34: #if 0
35: static char sccsid[] = "@(#)dr_main.c 8.2 (Berkeley) 4/16/94";
36: #else
37: __RCSID("$NetBSD: dr_main.c,v 1.12 2003/08/07 09:37:42 agc Exp $");
38: #endif
39: #endif
40:
41: #include <signal.h>
42: #include <stdio.h>
43: #include <stdlib.h>
44: #include <unistd.h>
45: #include "extern.h"
46: #include "driver.h"
47:
48: int
49: dr_main(void)
50: {
51: int n;
52: struct ship *sp;
53: int nat[NNATION];
54: int value = 0;
55:
56: signal(SIGINT, SIG_IGN);
57: signal(SIGQUIT, SIG_IGN);
58: signal(SIGTSTP, SIG_IGN);
59: if (game < 0 || game >= NSCENE) {
60: fprintf(stderr, "DRIVER: Bad game number %d\n", game);
61: exit(1);
62: }
63: cc = &scene[game];
64: ls = SHIP(cc->vessels);
65: if (sync_open() < 0) {
66: perror("driver: syncfile");
67: exit(1);
68: }
69: for (n = 0; n < NNATION; n++)
70: nat[n] = 0;
71: foreachship(sp) {
72: if (sp->file == NULL &&
73: (sp->file = (struct File *)calloc(1, sizeof (struct File))) == NULL) {
74: fprintf(stderr, "DRIVER: Out of memory.\n");
75: exit(1);
76: }
77: sp->file->index = sp - SHIP(0);
78: sp->file->loadL = L_ROUND;
79: sp->file->loadR = L_ROUND;
80: sp->file->readyR = R_LOADED|R_INITIAL;
81: sp->file->readyL = R_LOADED|R_INITIAL;
82: sp->file->stern = nat[sp->nationality]++;
83: sp->file->dir = sp->shipdir;
84: sp->file->row = sp->shiprow;
85: sp->file->col = sp->shipcol;
86: }
87: windspeed = cc->windspeed;
88: winddir = cc->winddir;
89: people = 0;
90: for (;;) {
91: sleep(7);
92: if (Sync() < 0) {
93: value = 1;
94: break;
95: }
96: if (next() < 0)
97: break;
98: unfoul();
99: checkup();
100: prizecheck();
101: moveall();
102: thinkofgrapples();
103: boardcomp();
104: compcombat();
105: resolve();
106: reload();
107: checksails();
108: if (Sync() < 0) {
109: value = 1;
110: break;
111: }
112: }
113: sync_close(1);
114: return value;
115: }