1: /* 2: * Dungeon - open UP dungeon 3: */ 4: #include <stdio.h> 5: #include <time.h> 6: 7: #define GUEST 16 8: 9: int users[] = { 10: 3, /* bin */ 11: /* 17,*/ 12: 22, 13: 0 }; 14: 15: main(argc,argv) 16: int argc; 17: char *argv[]; 18: { 19: 20: register char *pname = "zork"; 21: register int *up; 22: register uid; 23: int fd3, fd4, fd5; 24: 25: int wizard = 0; 26: 27: uid = getuid(); 28: for (up=users; *up; up++) 29: if (*up == uid) 30: wizard++; 31: 32: if(argc == 2) 33: if(wizard != 0) 34: pname = argv[0]; 35: /* 36: * open up files needed by program 37: * look in current directory first, then try default names 38: * The following files must be as follows: 39: * "dtext.dat" open read-only on fd 3 40: * "dindex.dat" open read-only on fd 4 41: * "doverlay" open read-only on fd 5 (put this file on fast disk) 42: */ 43: close(3); 44: close(4); 45: close(5); 46: 47: if ((fd3 = open("dtext.dat",0)) < 0) 48: if ((fd3 = open("/usr/games/lib/dtext.dat", 0)) < 0) 49: error("Can't open dtext.dat\n"); 50: 51: if ((fd4 = open("dindex.dat", 0)) < 0) 52: if ((fd4 = open("/usr/games/lib/dindex.dat", 0)) < 0) 53: error("Can't open dindex.dat\n"); 54: 55: if ((fd5 = open("doverlay",0)) < 0) 56: if ((fd5 = open("/usr/games/lib/doverlay", 0)) < 0) 57: error("Can't open doverlay\n"); 58: 59: if (fd3 != 3 || fd4 != 4 || fd5 != 5) 60: error("Files opened on wrong descriptors\n"); 61: 62: signal (2,1); 63: 64: /* if(wizard == 0) 65: datecheck();*/ 66: 67: printf(">\t\t\tSaves game on file dsave.dat\n"); 68: printf("<\t\t\tRestores game from file dsave.dat\n"); 69: printf("!command\t\tExecute shell command from Dungeon\n"); 70: printf("\n\n"); 71: 72: printf("Welcome to Dungeon.\t\tThis version created 10-SEP-78.\n"); 73: printf("You are in an open field west of a big white house with a boarded\n"); 74: printf("front door.\n"); 75: printf("There is a small mailbox here.\n>"); 76: fflush(stdout); 77: nice(2); 78: execl("/usr/games/lib/zork",pname, 0); 79: execl("zork",pname, 0); 80: printf("Can't start zork.\n"); 81: fflush(stdout); 82: exit(1); 83: } 84: error(s) 85: char *s; 86: { 87: printf("%s", s); 88: fflush(stdout); 89: exit(1); 90: } 91: 92: struct hol_dom 93: { 94: int m_month; 95: int m_day; 96: char *m_msg; 97: }; 98: 99: struct hol_dom hol_dom[] = 100: { 101: 0, 1, "Happy New Year", 102: 6, 4, "Happy Fourth of July", 103: 11, 25, "Merry Christmas", 104: -1, 0, 0, 105: }; 106: 107: struct hol_dow 108: { 109: int w_month; 110: int w_day; 111: int w_weekskip; 112: char *w_msg; 113: }; 114: 115: struct hol_dow hol_dow[] = 116: { 117: 8, 1, 0, "Happy Labor Day", 118: 10, 4, 3, "Happy Thanksgiving", 119: 10, 5, 3, "Happy Day-After-Thanksgiving", 120: -1, 0, 0, 0, 121: }; 122: 123: datecheck() { 124: long tm; 125: register struct tm *l; 126: register struct hol_dom *m; 127: register struct hol_dow *w; 128: 129: time(&tm); 130: l = localtime(&tm); 131: if(l->tm_wday == 0 || l->tm_wday == 6) 132: return; 133: if(l->tm_hour <= 8 || l->tm_hour >= 17) 134: return; 135: for(m = hol_dom ; m->m_month < 0 ; m++) 136: { 137: if(l->tm_mon == m->m_month && l->tm_mday == m->m_day) 138: return; 139: } 140: for(w = hol_dow ; w->w_month < 0 ; w++) 141: { 142: if(l->tm_mon == w->w_month 143: && l->tm_mday == w->w_day 144: && (7 * w->w_weekskip) < l->tm_mday 145: && l->tm_mday >= (7 * (w->w_weekskip + 1))) 146: return; 147: } 148: goaway(); 149: } 150: 151: goaway () { 152: printf("\nThere appears before you a threatening figure clad all over\n"); 153: printf("in heavy black armor. His legs seem like the massive trunk\n"); 154: printf("of the oak tree. His broad shoulders and helmeted head loom\n"); 155: printf("high over your own puny frame, and you realize that his powerful\n"); 156: printf("arms could easily crush the very life from your body. There\n"); 157: printf("hangs from his belt a veritable arsenal of deadly weapons:\n"); 158: printf("sword, mace, ball and chain, dagger, lance, and trident.\n"); 159: printf("He speaks with a commanding voice:\n\n"); 160: printf(" You shall not pass.\n\n"); 161: printf("As he grabs you by the neck all grows dim about you.\n"); 162: sleep (2); 163: fflush(stdout); 164: exit(1); 165: }