1: /*
   2:  * init.c
   3:  *
   4:  * This source herein may be modified and/or distributed by anybody who
   5:  * so desires, with the following restrictions:
   6:  *    1.)  No portion of this notice shall be removed.
   7:  *    2.)  Credit shall not be taken for the creation of this source.
   8:  *    3.)  This code is not to be traded, sold, or used for personal
   9:  *         gain or profit.
  10:  *
  11:  */
  12: 
  13: #ifndef lint
  14: static char sccsid[] = "@(#)init.c	5.1 (Berkeley) 11/25/87";
  15: #endif /* not lint */
  16: 
  17: #include <stdio.h>
  18: #include "rogue.h"
  19: 
  20: char login_name[MAX_OPT_LEN];
  21: char *nick_name = (char *) 0;
  22: char *rest_file = 0;
  23: boolean cant_int = 0;
  24: boolean did_int = 0;
  25: boolean score_only;
  26: boolean init_curses = 0;
  27: boolean save_is_interactive = 1;
  28: boolean ask_quit = 1;
  29: boolean no_skull = 0;
  30: boolean passgo = 0;
  31: char *error_file = "rogue.esave";
  32: char *byebye_string = "Okay, bye bye!";
  33: 
  34: extern char *fruit;
  35: extern char *save_file;
  36: extern short party_room;
  37: extern boolean jump;
  38: 
  39: init(argc, argv)
  40: int argc;
  41: char *argv[];
  42: {
  43:     char *pn;
  44:     int seed;
  45: 
  46:     pn = md_gln();
  47:     if ((!pn) || (strlen(pn) >= MAX_OPT_LEN)) {
  48:         clean_up("Hey!  Who are you?");
  49:     }
  50:     (void) strcpy(login_name, pn);
  51: 
  52:     do_args(argc, argv);
  53:     do_opts();
  54: 
  55:     if (!score_only && !rest_file) {
  56:         printf("Hello %s, just a moment while I dig the dungeon...",
  57:             nick_name);
  58:         fflush(stdout);
  59:     }
  60: 
  61:     initscr();
  62:     if ((LINES < DROWS) || (COLS < DCOLS)) {
  63:         clean_up("must be played on 24 x 80 screen");
  64:     }
  65:     start_window();
  66:     init_curses = 1;
  67: 
  68:     md_heed_signals();
  69: 
  70:     if (score_only) {
  71:         put_scores((object *) 0, 0);
  72:     }
  73:     seed = md_gseed();
  74:     (void) srrandom(seed);
  75:     if (rest_file) {
  76:         restore(rest_file);
  77:         return(1);
  78:     }
  79:     mix_colors();
  80:     get_wand_and_ring_materials();
  81:     make_scroll_titles();
  82: 
  83:     level_objects.next_object = (object *) 0;
  84:     level_monsters.next_monster = (object *) 0;
  85:     player_init();
  86:     ring_stats(0);
  87:     return(0);
  88: }
  89: 
  90: player_init()
  91: {
  92:     object *obj;
  93: 
  94:     rogue.pack.next_object = (object *) 0;
  95: 
  96:     obj = alloc_object();
  97:     get_food(obj, 1);
  98:     (void) add_to_pack(obj, &rogue.pack, 1);
  99: 
 100:     obj = alloc_object();       /* initial armor */
 101:     obj->what_is = ARMOR;
 102:     obj->which_kind = RINGMAIL;
 103:     obj->class = RINGMAIL+2;
 104:     obj->is_protected = 0;
 105:     obj->d_enchant = 1;
 106:     (void) add_to_pack(obj, &rogue.pack, 1);
 107:     do_wear(obj);
 108: 
 109:     obj = alloc_object();       /* initial weapons */
 110:     obj->what_is = WEAPON;
 111:     obj->which_kind = MACE;
 112:     obj->damage = "2d3";
 113:     obj->hit_enchant = obj->d_enchant = 1;
 114:     obj->identified = 1;
 115:     (void) add_to_pack(obj, &rogue.pack, 1);
 116:     do_wield(obj);
 117: 
 118:     obj = alloc_object();
 119:     obj->what_is = WEAPON;
 120:     obj->which_kind = BOW;
 121:     obj->damage = "1d2";
 122:     obj->hit_enchant = 1;
 123:     obj->d_enchant = 0;
 124:     obj->identified = 1;
 125:     (void) add_to_pack(obj, &rogue.pack, 1);
 126: 
 127:     obj = alloc_object();
 128:     obj->what_is = WEAPON;
 129:     obj->which_kind = ARROW;
 130:     obj->quantity = get_rand(25, 35);
 131:     obj->damage = "1d2";
 132:     obj->hit_enchant = 0;
 133:     obj->d_enchant = 0;
 134:     obj->identified = 1;
 135:     (void) add_to_pack(obj, &rogue.pack, 1);
 136: }
 137: 
 138: clean_up(estr)
 139: char *estr;
 140: {
 141:     if (save_is_interactive) {
 142:         if (init_curses) {
 143:             move(DROWS-1, 0);
 144:             refresh();
 145:             stop_window();
 146:         }
 147:         printf("\n%s\n", estr);
 148:     }
 149:     md_exit(0);
 150: }
 151: 
 152: start_window()
 153: {
 154:     crmode();
 155:     noecho();
 156: #ifndef BAD_NONL
 157:     nonl();
 158: #endif
 159:     md_control_keybord(0);
 160: }
 161: 
 162: stop_window()
 163: {
 164:     endwin();
 165:     md_control_keybord(1);
 166: }
 167: 
 168: byebye()
 169: {
 170:     md_ignore_signals();
 171:     if (ask_quit) {
 172:         quit(1);
 173:     } else {
 174:         clean_up(byebye_string);
 175:     }
 176:     md_heed_signals();
 177: }
 178: 
 179: onintr()
 180: {
 181:     md_ignore_signals();
 182:     if (cant_int) {
 183:         did_int = 1;
 184:     } else {
 185:         check_message();
 186:         message("interrupt", 1);
 187:     }
 188:     md_heed_signals();
 189: }
 190: 
 191: error_save()
 192: {
 193:     save_is_interactive = 0;
 194:     save_into_file(error_file);
 195:     clean_up("");
 196: }
 197: 
 198: do_args(argc, argv)
 199: int argc;
 200: char *argv[];
 201: {
 202:     short i, j;
 203: 
 204:     for (i = 1; i < argc; i++) {
 205:         if (argv[i][0] == '-') {
 206:             for (j = 1; argv[i][j]; j++) {
 207:                 switch(argv[i][j]) {
 208:                 case 's':
 209:                     score_only = 1;
 210:                     break;
 211:                 }
 212:             }
 213:         } else {
 214:             rest_file = argv[i];
 215:         }
 216:     }
 217: }
 218: 
 219: do_opts()
 220: {
 221:     char *eptr;
 222: 
 223:     if (eptr = md_getenv("ROGUEOPTS")) {
 224:         for (;;) {
 225:             while ((*eptr) == ' ') {
 226:                 eptr++;
 227:             }
 228:             if (!(*eptr)) {
 229:                 break;
 230:             }
 231:             if (!strncmp(eptr, "fruit=", 6)) {
 232:                 eptr += 6;
 233:                 env_get_value(&fruit, eptr, 1);
 234:             } else if (!strncmp(eptr, "file=", 5)) {
 235:                 eptr += 5;
 236:                 env_get_value(&save_file, eptr, 0);
 237:             } else if (!strncmp(eptr, "jump", 4)) {
 238:                 jump = 1;
 239:             } else if (!strncmp(eptr, "name=", 5)) {
 240:                 eptr += 5;
 241:                 env_get_value(&nick_name, eptr, 0);
 242:             } else if (!strncmp(eptr, "noaskquit", 9)) {
 243:                 ask_quit = 0;
 244:             } else if (!strncmp(eptr, "noskull", 5) ||
 245:                     !strncmp(eptr,"notomb", 6)) {
 246:                 no_skull = 1;
 247:             } else if (!strncmp(eptr, "passgo", 5)) {
 248:                 passgo = 1;
 249:             }
 250:             while ((*eptr) && (*eptr != ',')) {
 251:                 eptr++;
 252:             }
 253:             if (!(*(eptr++))) {
 254:                 break;
 255:             }
 256:         }
 257:     }
 258:     /* If some strings have not been set through ROGUEOPTS, assign defaults
 259: 	 * to them so that the options editor has data to work with.
 260: 	 */
 261:     init_str(&nick_name, login_name);
 262:     init_str(&save_file, "rogue.save");
 263:     init_str(&fruit, "slime-mold");
 264: }
 265: 
 266: env_get_value(s, e, add_blank)
 267: char **s, *e;
 268: boolean add_blank;
 269: {
 270:     short i = 0;
 271:     char *t;
 272: 
 273:     t = e;
 274: 
 275:     while ((*e) && (*e != ',')) {
 276:         if (*e == ':') {
 277:             *e = ';';       /* ':' reserved for score file purposes */
 278:         }
 279:         e++;
 280:         if (++i >= MAX_OPT_LEN) {
 281:             break;
 282:         }
 283:     }
 284:     *s = md_malloc(MAX_OPT_LEN + 2);
 285:     (void) strncpy(*s, t, i);
 286:     if (add_blank) {
 287:         (*s)[i++] = ' ';
 288:     }
 289:     (*s)[i] = '\0';
 290: }
 291: 
 292: init_str(str, dflt)
 293: char **str, *dflt;
 294: {
 295:     if (!(*str)) {
 296:         *str = md_malloc(MAX_OPT_LEN + 2);
 297:         (void) strcpy(*str, dflt);
 298:     }
 299: }

Defined functions

byebye defined in line 168; used 1 times
clean_up defined in line 138; used 23 times
do_args defined in line 198; used 1 times
  • in line 52
do_opts defined in line 219; used 1 times
  • in line 53
env_get_value defined in line 266; used 3 times
error_save defined in line 191; used 1 times
init defined in line 39; used 1 times
init_str defined in line 292; used 3 times
onintr defined in line 179; used 2 times
player_init defined in line 90; used 1 times
  • in line 85
start_window defined in line 152; used 3 times
stop_window defined in line 162; used 2 times

Defined variables

byebye_string defined in line 32; used 2 times
error_file defined in line 31; used 2 times
login_name defined in line 20; used 8 times
nick_name defined in line 21; used 6 times
rest_file defined in line 22; used 4 times
sccsid defined in line 14; never used
Last modified: 1987-11-26
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 3560
Valid CSS Valid XHTML 1.0 Strict