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