# 2.11BSD#431 - /usr/src/games/rogue/init.c

##### Functions

    byebye            X
    clean_up          X
    do_args           X
    do_opts           X
    env_get_value     X
    error_save        X
    init              X
    init_str          X
    onintr            X
    player_init       X
    start_window      X
    stop_window       X

##### Variables

    byebye_string     X
    error_file        X
    login_name        X
    nick_name         X
    rest_file         X

       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

- in /usr/src/games/rogue/rogue.h line 430

clean_up defined in line 138; used 23 times

- in line 48, 63, 174, 195
- in /usr/src/games/rogue/curses.c line 368-382(4), 388, 490, 566
- in /usr/src/games/rogue/save.c line 124, 139-142(2), 153, 161, 191, 198-201(2), 339
- in /usr/src/games/rogue/score.c line 152, 280, 543

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

- in line 233-241(3)

error_save defined in line 191; used 1 times

- in /usr/src/games/rogue/rogue.h line 430

init defined in line 39; used 1 times

- in /usr/src/games/rogue/main.c line 25

init_str defined in line 292; used 3 times

- in line 261-263(3)

onintr defined in line 179; used 2 times

- in /usr/src/games/rogue/message.c line 64
- in /usr/src/games/rogue/rogue.h line 430

player_init defined in line 90; used 1 times

- in line 85

start_window defined in line 152; used 3 times

- in line 65
- in /usr/src/games/rogue/curses.c line 592
- in /usr/src/games/rogue/room.c line 609

stop_window defined in line 162; used 2 times

- in line 145
- in /usr/src/games/rogue/room.c line 606

#### Defined variables

byebye_string defined in line 32; used 2 times

- in line 174
- in /usr/src/games/rogue/score.c line 152

error_file defined in line 31; used 2 times

- in line 194
- in /usr/src/games/rogue/object.c line 587

login_name defined in line 20; used 8 times

- in line 50, 261
- in /usr/src/games/rogue/save.c line 87, 150-152(3)
- in /usr/src/games/rogue/score.c line 193, 301

nick_name defined in line 21; used 6 times

- in line 57, 241, 261
- in /usr/src/games/rogue/room.c line 52
- in /usr/src/games/rogue/score.c line 85, 233

rest_file defined in line 22; used 4 times

- in line 55, 75-76(2), 214

sccsid defined in line 14; never used

Last modified: 1987-11-26 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1703 |