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: __COPYRIGHT("@(#) Copyright (c) 1983, 1993\n\
35: The Regents of the University of California. All rights reserved.\n");
36: #endif
37:
38: #ifndef lint
39: #if 0
40: static char sccsid[] = "@(#)main.c 8.2 (Berkeley) 4/28/95";
41: #else
42: __RCSID("$NetBSD: main.c,v 1.21 2003/08/07 09:37:43 agc Exp $");
43: #endif
44: #endif
45:
46: #include <fcntl.h>
47: #include <setjmp.h>
48: #include <stdio.h>
49: #include <stdlib.h>
50: #include <string.h>
51: #include <time.h>
52: #include <unistd.h>
53: #include "extern.h"
54: #include "restart.h"
55:
56: int
57: main(int argc, char **argv)
58: {
59: char *p;
60: int a,i;
61: int fd;
62:
63: gid = getgid();
64: egid = getegid();
65: setegid(gid);
66:
67: fd = open("/dev/null", O_RDONLY);
68: if (fd < 3)
69: exit(1);
70: close(fd);
71:
72: srandom((u_long)time(NULL));
73:
74: if ((p = strrchr(*argv, '/')) != NULL)
75: p++;
76: else
77: p = *argv;
78:
79: if (strcmp(p, "driver") == 0 || strcmp(p, "saildriver") == 0)
80: mode = MODE_DRIVER;
81: else if (strcmp(p, "sail.log") == 0)
82: mode = MODE_LOGGER;
83: else
84: mode = MODE_PLAYER;
85:
86: while ((a = getopt(argc, argv, "dsxlb")) != -1)
87: switch (a) {
88: case 'd':
89: mode = MODE_DRIVER;
90: break;
91: case 's':
92: mode = MODE_LOGGER;
93: break;
94: case 'x':
95: randomize++;
96: break;
97: case 'l':
98: longfmt++;
99: break;
100: case 'b':
101: nobells++;
102: break;
103: default:
104: fprintf(stderr, "SAIL: Unknown flag %s.\n", p);
105: exit(1);
106: }
107:
108: argc -= optind;
109: argv += optind;
110:
111: if (*argv)
112: game = atoi(*argv);
113: else
114: game = -1;
115:
116: if ((i = setjmp(restart)) != 0)
117: mode = i;
118:
119: switch (mode) {
120: case MODE_PLAYER:
121: return pl_main();
122: case MODE_DRIVER:
123: return dr_main();
124: case MODE_LOGGER:
125: return lo_main();
126: default:
127: fprintf(stderr, "SAIL: Unknown mode %d.\n", mode);
128: abort();
129: }
130:
131: }