]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - rogue/room.c
Avoid messing up the display when too many letters are guessed at once.
[bsdgames-darwin.git] / rogue / room.c
index 9aec0e74cb189e061fe6d6d93701fb9beec347e6..7a75499ce3cc0b2eccd42b7dcb63dbfa4058de8d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: room.c,v 1.4 1997/10/12 11:45:56 lukem Exp $   */
+/*     $NetBSD: room.c,v 1.14 2019/02/03 03:19:25 mrg Exp $    */
 
 /*
  * Copyright (c) 1988, 1993
  * 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.
  *
@@ -41,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)room.c     8.1 (Berkeley) 5/31/93";
 #else
-__RCSID("$NetBSD: room.c,v 1.4 1997/10/12 11:45:56 lukem Exp $");
+__RCSID("$NetBSD: room.c,v 1.14 2019/02/03 03:19:25 mrg Exp $");
 #endif
 #endif /* not lint */
 
@@ -60,49 +56,54 @@ __RCSID("$NetBSD: room.c,v 1.4 1997/10/12 11:45:56 lukem Exp $");
 #include "rogue.h"
 
 room rooms[MAXROOMS];
-boolean rooms_visited[MAXROOMS];
 
-#define NOPTS 7
+static boolean rooms_visited[MAXROOMS];
 
-struct option {
-       char *prompt;
+#define NOPTS 7
+static const struct option {
+       const char *prompt;
        boolean is_bool;
        char **strval;
        boolean *bval;
 } options[NOPTS] = {
        {
                "Show position only at end of run (\"jump\"): ",
-               1, (char **) 0, &jump
+               1, NULL, &jump
        },
        {
                "Follow turnings in passageways (\"passgo\"): ",
-               1, (char **) 0, &passgo
+               1, NULL, &passgo
        },
        {
                "Don't print skull when killed (\"noskull\" or \"notombstone\"): ",
-               1, (char **) 0, &no_skull
+               1, NULL, &no_skull
        },
        {
                "Ask player before saying 'Okay, bye-bye!' (\"askquit\"): ",
-               1, (char **) 0, &ask_quit
+               1, NULL, &ask_quit
        },
        {
                "Name (\"name\"): ",
-               0, &nick_name
+               0, &nick_name, NULL
        },
        {
                "Fruit (\"fruit\"): ",
-               0, &fruit
+               0, &fruit, NULL
        },
        {
                "Save file (\"file\"): ",
-               0, &save_file
+               0, &save_file, NULL
        }
 };
 
+static boolean get_oth_room(short, short *, short *);
+static void opt_erase(int);
+static void opt_go(int);
+static void opt_show(int);
+static void visit_rooms(int);
+
 void
-light_up_room(rn)
-       int rn;
+light_up_room(int rn)
 {
        short i, j;
 
@@ -130,7 +131,7 @@ light_up_room(rn)
 }
 
 void
-light_passage(row, col)
+light_passage(int row, int col)
 {
        short i, j, i_end, j_end;
 
@@ -150,8 +151,7 @@ light_passage(row, col)
 }
 
 void
-darken_room(rn)
-       short rn;
+darken_room(short rn)
 {
        short i, j;
 
@@ -175,8 +175,7 @@ darken_room(rn)
 }
 
 char
-get_dungeon_char(row, col)
-       short row, col;
+get_dungeon_char(short row, short col)
 {
        unsigned short mask = dungeon[row][col];
 
@@ -224,8 +223,7 @@ get_dungeon_char(row, col)
 }
 
 char
-get_mask_char(mask)
-       unsigned short mask;
+get_mask_char(unsigned short mask)
 {
                switch(mask) {
                case SCROL:
@@ -252,9 +250,7 @@ get_mask_char(mask)
 }
 
 void
-gr_row_col(row, col, mask)
-       short *row, *col;
-       unsigned short mask;
+gr_row_col(short *row, short *col, unsigned short mask)
 {
        short rn;
        short r, c;
@@ -274,7 +270,7 @@ gr_row_col(row, col, mask)
 }
 
 short
-gr_room()
+gr_room(void)
 {
        short i;
 
@@ -286,8 +282,7 @@ gr_room()
 }
 
 short
-party_objects(rn)
-       int rn;
+party_objects(int rn)
 {
        short i, j, nf = 0;
        object *obj;
@@ -321,8 +316,7 @@ party_objects(rn)
 }
 
 short
-get_room_number(row, col)
-       int row, col;
+get_room_number(int row, int col)
 {
        short i;
 
@@ -336,7 +330,7 @@ get_room_number(row, col)
 }
 
 boolean
-is_all_connected()
+is_all_connected(void)
 {
        short i, starting_room;
 
@@ -358,9 +352,8 @@ is_all_connected()
        return(1);
 }
 
-void
-visit_rooms(rn)
-       int rn;
+static void
+visit_rooms(int rn)
 {
        short i;
        short oth_rn;
@@ -376,7 +369,7 @@ visit_rooms(rn)
 }
 
 void
-draw_magic_map()
+draw_magic_map(void)
 {
        short i, j, ch, och;
        unsigned short mask = (HORWALL | VERTWALL | DOOR | TUNNEL | TRAP | STAIRS |
@@ -426,10 +419,7 @@ draw_magic_map()
 }
 
 void
-dr_course(monster, entering, row, col)
-       object *monster;
-       boolean entering;
-       short row, col;
+dr_course(object *monster, boolean entering, short row, short col)
 {
        short i, j, k, rn;
        short r, rr;
@@ -464,6 +454,8 @@ dr_course(monster, entering, row, col)
                        }
                }
                /* look for door to dead end */
+               if (rn == NO_ROOM)
+                       clean_up("dr_course:  monster not in room");
                for (i = rooms[rn].top_row; i <= rooms[rn].bottom_row; i++) {
                        for (j = rooms[rn].left_col; j <= rooms[rn].right_col; j++) {
                                if ((i != monster->row) && (j != monster->col) &&
@@ -491,7 +483,7 @@ dr_course(monster, entering, row, col)
                /* no place to send monster */
                monster->trow = NO_ROOM;
        } else {                /* exiting room */
-               if (!get_oth_room(rn, &row, &col)) {
+               if (rn == NO_ROOM || !get_oth_room(rn, &row, &col)) {
                        monster->trow = NO_ROOM;
                } else {
                        monster->trow = row;
@@ -500,9 +492,8 @@ dr_course(monster, entering, row, col)
        }
 }
 
-boolean
-get_oth_room(rn, row, col)
-       short rn, *row, *col;
+static boolean
+get_oth_room(short rn, short *row, short *col)
 {
        short d = -1;
 
@@ -524,7 +515,7 @@ get_oth_room(rn, row, col)
 }
 
 void
-edit_opts()
+edit_opts(void)
 {
        char save[NOPTS+1][DCOLS];
        short i, j;
@@ -580,6 +571,7 @@ CH:
                                opt_go(++i);
                                break;
                        }
+                       /* FALLTHROUGH */
                default:
                        if (options[i].is_bool) {
                                sound_bell();
@@ -603,7 +595,12 @@ CH:
                                        ch = rgetchar();
                                } while ((ch != '\012') && (ch != '\015') && (ch != '\033'));
                                if (j != 0) {
-                                       (void) strcpy(*(options[i].strval), buf);
+                                       /*
+                                        * We rely on the option string being
+                                        * allocated to hold MAX_OPT_LEN+2
+                                        * bytes. This is arranged in init.c.
+                                        */
+                                       (void)strcpy(*(options[i].strval), buf);
                                }
                                opt_show(i);
                                goto CH;
@@ -622,12 +619,11 @@ CH:
        }
 }
 
-void
-opt_show(i)
-       int i;
+static void
+opt_show(int i)
 {
-       char *s;
-       struct option *opt = &options[i];
+       const char *s;
+       const struct option *opt = &options[i];
 
        opt_erase(i);
 
@@ -639,28 +635,26 @@ opt_show(i)
        addstr(s);
 }
 
-void
-opt_erase(i)
-       int i;
+static void
+opt_erase(int i)
 {
-       struct option *opt = &options[i];
+       const struct option *opt = &options[i];
 
        mvaddstr(i, 0, opt->prompt);
        clrtoeol();
 }
 
-void
-opt_go(i)
-       int i;
+static void
+opt_go(int i)
 {
        move(i, strlen(options[i].prompt));
 }
 
 void
-do_shell()
+do_shell(void)
 {
 #ifdef UNIX
-       char *sh;
+       const char *sh;
 
        md_ignore_signals();
        if (!(sh = md_getenv("SHELL"))) {