1 /* $OpenBSD: init.c,v 1.7 2000/09/24 21:55:25 pjanzen Exp $ */ 2 /* $NetBSD: init.c,v 1.4 1995/03/21 15:07:35 cgd Exp $ */ 3 4 /* 5 * Copyright (c) 1983, 1993 6 * The Regents of the University of California. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. All advertising materials mentioning features or use of this software 17 * must display the following acknowledgement: 18 * This product includes software developed by the University of 19 * California, Berkeley and its contributors. 20 * 4. Neither the name of the University nor the names of its contributors 21 * may be used to endorse or promote products derived from this software 22 * without specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 */ 36 37 #ifndef lint 38 #if 0 39 static char sccsid[] = "@(#)init.c 8.4 (Berkeley) 4/30/95"; 40 #else 41 static char rcsid[] = "$OpenBSD: init.c,v 1.7 2000/09/24 21:55:25 pjanzen Exp $"; 42 #endif 43 #endif /* not lint */ 44 45 #include "extern.h" 46 47 static int checkout __P((const char *)); 48 static const char *getutmp __P((void)); 49 static int wizard __P((const char *)); 50 51 void 52 initialize(filename) 53 const char *filename; 54 { 55 const struct objs *p; 56 char *savefile; 57 58 puts("Version 4.2, fall 1984."); 59 puts("First Adventure game written by His Lordship, the honorable"); 60 puts("Admiral D.W. Riggle\n"); 61 location = dayfile; 62 srandom(getpid()); 63 username = getutmp(); 64 wordinit(); 65 if (filename == NULL) { 66 direction = NORTH; 67 ourtime = 0; 68 snooze = CYCLE * 1.5; 69 position = 22; 70 SetBit(wear, PAJAMAS); 71 fuel = TANKFULL; 72 torps = TORPEDOES; 73 for (p = dayobjs; p->room != 0; p++) 74 SetBit(location[p->room].objects, p->obj); 75 } else { 76 savefile = save_file_name(filename, strlen(filename)); 77 restore(savefile); 78 free(savefile); 79 } 80 wiz = wizard(username); 81 signal(SIGINT, die); 82 } 83 84 static const char * 85 getutmp() 86 { 87 struct passwd *ptr; 88 89 ptr = getpwuid(getuid()); 90 if (ptr == NULL) 91 return(""); 92 else 93 return(strdup(ptr->pw_name)); 94 } 95 96 /* Hereditary wizards. A configuration file might make more sense. */ 97 static const char *const list[] = { 98 "riggle", 99 "chris", 100 "edward", 101 "comay", 102 "yee", 103 "dmr", 104 "ken", 105 0 106 }; 107 108 static const char *const badguys[] = { 109 "wnj", 110 "root", 111 "ted", 112 0 113 }; 114 115 static int 116 wizard(username) 117 const char *username; 118 { 119 int flag; 120 121 if ((flag = checkout(username)) != 0) 122 printf("You are the Great wizard %s.\n", username); 123 return flag; 124 } 125 126 static int 127 checkout(username) 128 const char *username; 129 { 130 const char *const *ptr; 131 132 for (ptr = list; *ptr; ptr++) 133 if (strcmp(*ptr, username) == 0) 134 return 1; 135 for (ptr = badguys; *ptr; ptr++) 136 if (strcmp(*ptr, username) == 0) { 137 printf("You are the Poor anti-wizard %s. Good Luck!\n", 138 username); 139 if (location != NULL) { 140 CUMBER = 3; 141 WEIGHT = 9; /* that'll get him! */ 142 ourclock = 10; 143 SetBit(location[7].objects, WOODSMAN); /* viper room */ 144 SetBit(location[20].objects, WOODSMAN); /* laser " */ 145 SetBit(location[13].objects, DARK); /* amulet " */ 146 SetBit(location[8].objects, ELF); /* closet */ 147 } 148 return 0; /* anything else, Chris? */ 149 } 150 return 0; 151 } 152