]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - rogue/init.c
I was disappointed that someone wrote disappointed with two 's', so I fixed it.
[bsdgames-darwin.git] / rogue / init.c
index 8144a02e6c8a701ea9eaf8a84594cadaa08ff086..982a95cb8d211fc1bc10f09e118e52896586727c 100644 (file)
@@ -1,6 +1,8 @@
+/*     $NetBSD: init.c,v 1.18 2008/08/08 16:10:47 drochner Exp $       */
+
 /*
- * Copyright (c) 1988 The Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1988, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  * This code is derived from software contributed to Berkeley by
  * Timothy C. Stoehr.
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
  * SUCH DAMAGE.
  */
 
+#include <sys/cdefs.h>
 #ifndef lint
-/*static char sccsid[] = "from: @(#)init.c     5.4 (Berkeley) 2/28/91";*/
-static char rcsid[] = "$Id: init.c,v 1.2 1993/08/01 18:52:30 mycroft Exp $";
+#if 0
+static char sccsid[] = "@(#)init.c     8.1 (Berkeley) 5/31/93";
+#else
+__RCSID("$NetBSD: init.c,v 1.18 2008/08/08 16:10:47 drochner Exp $");
+#endif
 #endif /* not lint */
 
 /*
@@ -51,40 +53,56 @@ static char rcsid[] = "$Id: init.c,v 1.2 1993/08/01 18:52:30 mycroft Exp $";
  *
  */
 
-#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+
 #include "rogue.h"
 
+static void do_args(int, char **);
+static void do_opts(void);
+static void env_get_value(char **, char *, boolean);
+static void init_str(char **, const char *);
+static void player_init(void);
+
+static char *rest_file = NULL;
+static boolean init_curses = 0;
+
 char login_name[MAX_OPT_LEN];
-char *nick_name = (char *) 0;
-char *rest_file = 0;
+char *nick_name = NULL;
 boolean cant_int = 0;
 boolean did_int = 0;
 boolean score_only;
-boolean init_curses = 0;
 boolean save_is_interactive = 1;
 boolean ask_quit = 1;
 boolean no_skull = 0;
 boolean passgo = 0;
-char *error_file = "rogue.esave";
-char *byebye_string = "Okay, bye bye!";
-
-extern char *fruit;
-extern char *save_file;
-extern short party_room;
-extern boolean jump;
+const char *error_file = "rogue.esave";
+const char *byebye_string = "Okay, bye bye!";
+gid_t gid, egid;
 
-init(argc, argv)
-int argc;
-char *argv[];
+int
+init(int argc, char *argv[])
 {
-       char *pn;
+       const char *pn;
        int seed;
-
+       int fd;
+
+       gid = getgid();
+       egid = getegid();
+       setegid(gid);
+       /* Check for dirty tricks with closed fds 0, 1, 2 */
+       fd = open("/dev/null", O_RDONLY);
+       if (fd < 3)
+               exit(1);
+       close(fd);
+
+       seed = 0;
        pn = md_gln();
        if ((!pn) || (strlen(pn) >= MAX_OPT_LEN)) {
                clean_up("Hey!  Who are you?");
        }
-       (void) strcpy(login_name, pn);
+       /* LOGIN_NAME_SIZE == MAX_OPT_LEN now, but just in case... */
+       (void)strlcpy(login_name, pn, sizeof(login_name));
 
        do_args(argc, argv);
        do_opts();
@@ -95,9 +113,12 @@ char *argv[];
                fflush(stdout);
        }
 
-       initscr();
+       if (!initscr()) {
+               fprintf(stderr, "couldn't initialize screen\n");
+               exit (0);
+       }
        if ((LINES < DROWS) || (COLS < DCOLS)) {
-               clean_up("must be played on 24 x 80 screen");
+               clean_up("must be played on at least 80 x 24 screen");
        }
        start_window();
        init_curses = 1;
@@ -105,10 +126,10 @@ char *argv[];
        md_heed_signals();
 
        if (score_only) {
-               put_scores((object *) 0, 0);
+               put_scores(NULL, 0);
        }
        seed = md_gseed();
-       (void) srrandom(seed);
+       (void)srrandom(seed);
        if (rest_file) {
                restore(rest_file);
                return(1);
@@ -117,22 +138,23 @@ char *argv[];
        get_wand_and_ring_materials();
        make_scroll_titles();
 
-       level_objects.next_object = (object *) 0;
-       level_monsters.next_monster = (object *) 0;
+       level_objects.next_object = NULL;
+       level_monsters.next_monster = NULL;
        player_init();
        ring_stats(0);
        return(0);
 }
 
-player_init()
+static void
+player_init(void)
 {
        object *obj;
 
-       rogue.pack.next_object = (object *) 0;
+       rogue.pack.next_object = NULL;
 
        obj = alloc_object();
        get_food(obj, 1);
-       (void) add_to_pack(obj, &rogue.pack, 1);
+       (void)add_to_pack(obj, &rogue.pack, 1);
 
        obj = alloc_object();           /* initial armor */
        obj->what_is = ARMOR;
@@ -140,7 +162,7 @@ player_init()
        obj->class = RINGMAIL+2;
        obj->is_protected = 0;
        obj->d_enchant = 1;
-       (void) add_to_pack(obj, &rogue.pack, 1);
+       (void)add_to_pack(obj, &rogue.pack, 1);
        do_wear(obj);
 
        obj = alloc_object();           /* initial weapons */
@@ -149,7 +171,7 @@ player_init()
        obj->damage = "2d3";
        obj->hit_enchant = obj->d_enchant = 1;
        obj->identified = 1;
-       (void) add_to_pack(obj, &rogue.pack, 1);
+       (void)add_to_pack(obj, &rogue.pack, 1);
        do_wield(obj);
 
        obj = alloc_object();
@@ -159,7 +181,7 @@ player_init()
        obj->hit_enchant = 1;
        obj->d_enchant = 0;
        obj->identified = 1;
-       (void) add_to_pack(obj, &rogue.pack, 1);
+       (void)add_to_pack(obj, &rogue.pack, 1);
 
        obj = alloc_object();
        obj->what_is = WEAPON;
@@ -169,11 +191,11 @@ player_init()
        obj->hit_enchant = 0;
        obj->d_enchant = 0;
        obj->identified = 1;
-       (void) add_to_pack(obj, &rogue.pack, 1);
+       (void)add_to_pack(obj, &rogue.pack, 1);
 }
 
-clean_up(estr)
-char *estr;
+void
+clean_up(const char *estr)
 {
        if (save_is_interactive) {
                if (init_curses) {
@@ -186,24 +208,24 @@ char *estr;
        md_exit(0);
 }
 
-start_window()
+void
+start_window(void)
 {
-       crmode();
+       cbreak();
        noecho();
 #ifndef BAD_NONL
        nonl();
 #endif
-       md_control_keybord(0);
 }
 
-stop_window()
+void
+stop_window(void)
 {
        endwin();
-       md_control_keybord(1);
 }
 
 void
-byebye()
+byebye(int dummy __unused)
 {
        md_ignore_signals();
        if (ask_quit) {
@@ -215,31 +237,30 @@ byebye()
 }
 
 void
-onintr()
+onintr(int dummy __unused)
 {
        md_ignore_signals();
        if (cant_int) {
                did_int = 1;
        } else {
                check_message();
-               message("interrupt", 1);
+               messagef(1, "interrupt");
        }
        md_heed_signals();
 }
 
 void
-error_save()
+error_save(int dummy __unused)
 {
        save_is_interactive = 0;
        save_into_file(error_file);
        clean_up("");
 }
 
-do_args(argc, argv)
-int argc;
-char *argv[];
+static void
+do_args(int argc, char *argv[])
 {
-       short i, j;
+       int i, j;
 
        for (i = 1; i < argc; i++) {
                if (argv[i][0] == '-') {
@@ -256,11 +277,12 @@ char *argv[];
        }
 }
 
-do_opts()
+static void
+do_opts(void)
 {
        char *eptr;
 
-       if (eptr = md_getenv("ROGUEOPTS")) {
+       if ((eptr = md_getenv("ROGUEOPTS")) != NULL) {
                for (;;) {
                        while ((*eptr) == ' ') {
                                eptr++;
@@ -303,12 +325,11 @@ do_opts()
        init_str(&fruit, "slime-mold");
 }
 
-env_get_value(s, e, add_blank)
-char **s, *e;
-boolean add_blank;
+static void
+env_get_value(char **s, char *e, boolean add_blank)
 {
        short i = 0;
-       char *t;
+       const char *t;
 
        t = e;
 
@@ -321,19 +342,25 @@ boolean add_blank;
                        break;
                }
        }
+       /* note: edit_opts() in room.c depends on this being the right size */
        *s = md_malloc(MAX_OPT_LEN + 2);
-       (void) strncpy(*s, t, i);
+       if (*s == NULL)
+               clean_up("out of memory");
+       (void)strncpy(*s, t, i);
        if (add_blank) {
                (*s)[i++] = ' ';
        }
        (*s)[i] = '\0';
 }
 
-init_str(str, dflt)
-char **str, *dflt;
+static void
+init_str(char **str, const char *dflt)
 {
        if (!(*str)) {
+               /* note: edit_opts() in room.c depends on this size */
                *str = md_malloc(MAX_OPT_LEN + 2);
-               (void) strcpy(*str, dflt);
+               if (*str == NULL)
+                       clean_up("out of memory");
+               (void)strlcpy(*str, dflt, MAX_OPT_LEN + 2);
        }
 }