xref: /original-bsd/old/games.vax/zork/zork.c (revision 0999a820)
1 
2 static char sccsid[] = "	zork.c	4.1	82/10/24	";
3 
4 #include <stdio.h>
5 /*
6  * Dungeon - open UP dungeon
7  */
8 
9 #ifdef CHECKUID
10 int users[] = {
11 	522,    /* sa */
12 	164,    /* Leiby */
13 	229,    /* richards */
14 	264,    /* marshall */
15 	1099,   /* wizard */
16 	425,    /* clm */
17 	15,     /* mowle */
18 	32,     /* ghg */
19 	27,	/* qtip (zager) */
20 	530,	/* mike */
21 	16,	/* bc */
22 	333,	/* pdh */
23 	230,	/* wa1yyn */
24 	19,	/* joe
25 	43,	/* bruner */
26 	308,	/* gedeon (watch him closely!) */
27 	429,	/* mayhew */
28 	743,	/* alicia */
29 	367,	/* feather */
30 	85,	/* clark bar */
31 	382,	/* malcolm */
32 	99,	/* jones */
33 	636,    /* gfg */
34 	0 };
35 #endif
36 
37 main()
38 {
39 
40 	register int *up;
41 	register uid;
42 	int fd3, fd4, fd5;
43 
44 #ifdef CHECKUID
45 
46 	uid = getuid();
47 	for (up=users; *up; up++)
48 		if (*up == uid)
49 			goto ok;
50 	printf("You are not a Wizard!\n");
51 	exit();
52 #endif
53 	/*
54 	 * open up files needed by program
55 	 * look in current directory first, then try default names
56 	 * The following files must be as follows:
57 	 * "dtext.dat" open read-only on fd 3
58 	 * "dindex.dat open read-only on fd 4 (maybe this file isn't used)
59 	 * "doverlay" open read-only on fd 5 (put this file on fast disk)
60 	 */
61 	close(3);
62 	close(4);
63 	close(5);
64 	if ((fd3 = open("dtext.dat", 0)) < 0)
65 		if ((fd3 = open("/usr/games/lib/dtext.dat", 0)) < 0)
66 			error("Can't open dtext.dat\n");
67 
68 	if ((fd4 = open("dindex.dat", 0)) < 0)
69 		if ((fd4 = open("/usr/games/lib/dindex.dat", 0)) < 0)
70 			error("Can' open dindex.dat\n");
71 
72 	if ((fd5 = open("doverlay", 0)) < 0)
73 		if ((fd5 = open("/tmp/nedtmp/doverlay", 0)) < 0)
74 			if ((fd5 = open("/usr/games/lib/doverlay", 0)) < 0)
75 				error("Can't open doverlay\n");
76 
77 	if (fd3 != 3 || fd4 != 4 || fd5 != 5)
78 		error("Files opened on wrong descriptors\n");
79 
80 	signal(2,1);
81 
82 	printf("You are in an open field west of a big white house with a boarded\n");
83 	printf("front door.\n");
84 	printf("There is a small mailbox here.\n>");
85 	fflush(stdout);
86 #ifdef pdp11
87 	execl("dungeon","zork", 0);
88 	execl("/usr/games/lib/dungeon","zork", 0);
89 #else
90 	if( (uid=open("dungeon", 0)) > 0 ) {
91 		close(uid);
92 		execlp("compat", "zork", "dungeon", 0);
93 		execlp("/usr/games/lib/compat", "zork", "dungeon", 0);
94 	}
95 	execlp("compat", "zork", "/usr/games/lib/dungeon", 0);
96 	execlp("/usr/games/lib/compat", "zork", "/usr/games/lib/dungeon", 0);
97 #endif
98 	printf("Can't start dungeons.\n");
99 	exit(0);
100 }
101 error(s)
102 char *s;
103 {
104 	printf("%s", s);
105 	exit(1);
106 }
107