]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - hunt/huntd/answer.c
NetBSD rcsid.
[bsdgames-darwin.git] / hunt / huntd / answer.c
index 0de920273504d585df490b7a65da8896a7b04666..40b099ef11efd2733f3afc43da84a0254085dede 100644 (file)
@@ -1,33 +1,68 @@
+/*     $NetBSD: answer.c,v 1.6 2003/06/11 12:00:22 wiz Exp $   */
 /*
- *  Hunt
- *  Copyright (c) 1985 Conrad C. Huang, Gregory S. Couch, Kenneth C.R.C. Arnold
- *  San Francisco, California
+ * Copyright (c) 1983-2003, Regents of the University of California.
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions are 
+ * met:
+ * 
+ * + Redistributions of source code must retain the above copyright 
+ *   notice, this list of conditions and the following disclaimer.
+ * + 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.
+ * + Neither the name of the University of California, San Francisco nor 
+ *   the names of its contributors may be used to endorse or promote 
+ *   products derived from this software without specific prior written 
+ *   permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-# include      "hunt.h"
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: answer.c,v 1.6 2003/06/11 12:00:22 wiz Exp $");
+#endif /* not lint */
+
 # include      <ctype.h>
 # include      <errno.h>
 # include      <fcntl.h>
+# include      <stdlib.h>
+# include      <unistd.h>
+# include      "hunt.h"
 
 # define       SCOREDECAY      15
 
 static char    Ttyname[NAMELEN];
 
+int
 answer()
 {
-       register PLAYER         *pp;
-       register int            newsock;
+       PLAYER                  *pp;
+       int                     newsock;
        static u_long           mode;
        static char             name[NAMELEN];
        static char             team;
        static int              enter_status;
        static int              socklen;
        static u_long           machine;
-       static u_long           uid;
+       static u_int32_t        uid;
        static SOCKET           sockstruct;
-       register char   *cp1, *cp2;
+       char                    *cp1, *cp2;
        int                     flags;
-       long                    version;
+       u_int32_t               version;
+       int                     i;
 
 # ifdef INTERNET
        socklen = sizeof sockstruct;
@@ -54,7 +89,7 @@ answer()
        if (machine == 0)
                machine = gethostid();
 # endif
-       version = htonl((unsigned long) HUNT_VERSION);
+       version = htonl((u_int32_t) HUNT_VERSION);
        (void) write(newsock, (char *) &version, LONGLEN);
        (void) read(newsock, (char *) &uid, LONGLEN);
        uid = ntohl((unsigned long) uid);
@@ -114,9 +149,10 @@ answer()
 # endif
 # ifdef MONITOR
        if (mode == C_MONITOR)
-               if (End_monitor < &Monitor[MAXMON])
+               if (End_monitor < &Monitor[MAXMON]) {
                        pp = End_monitor++;
-               else {
+                       i = pp - Monitor + MAXPL + 3;
+               } else {
                        socklen = 0;
                        (void) write(newsock, (char *) &socklen,
                                sizeof socklen);
@@ -125,9 +161,10 @@ answer()
                }
        else
 # endif
-               if (End_player < &Player[MAXPL])
+               if (End_player < &Player[MAXPL]) {
                        pp = End_player++;
-               else {
+                       i = pp - Player + 3;
+               } else {
                        socklen = 0;
                        (void) write(newsock, (char *) &socklen,
                                sizeof socklen);
@@ -143,10 +180,8 @@ answer()
        pp->p_output = fdopen(newsock, "w");
        pp->p_death[0] = '\0';
        pp->p_fd = newsock;
-       pp->p_mask = (1 << pp->p_fd);
-       Fds_mask |= pp->p_mask;
-       if (pp->p_fd >= Num_fds)
-               Num_fds = pp->p_fd + 1;
+       fdset[i].fd = newsock;
+       fdset[i].events = POLLIN;
 
        pp->p_y = 0;
        pp->p_x = 0;
@@ -161,11 +196,12 @@ answer()
 }
 
 # ifdef MONITOR
+void
 stmonitor(pp)
-register PLAYER        *pp;
+       PLAYER  *pp;
 {
-       register int    line;
-       register PLAYER *npp;
+       int     line;
+       PLAYER  *npp;
 
        memcpy(pp->p_maze, Maze, sizeof Maze);
 
@@ -189,12 +225,13 @@ register PLAYER   *pp;
 }
 # endif
 
+void
 stplayer(newpp, enter_status)
-register PLAYER        *newpp;
-int            enter_status;
+       PLAYER  *newpp;
+       int     enter_status;
 {
-       register int    x, y;
-       register PLAYER *pp;
+       int     x, y;
+       PLAYER  *pp;
 
        Nplayer++;
 
@@ -315,6 +352,7 @@ int         enter_status;
  * rand_dir:
  *     Return a random direction
  */
+int
 rand_dir()
 {
        switch (rand_num(4)) {
@@ -328,6 +366,7 @@ rand_dir()
                return ABOVE;
        }
        /* NOTREACHED */
+       return(-1);
 }
 
 /*
@@ -336,12 +375,12 @@ rand_dir()
  */
 IDENT *
 get_ident(machine, uid, name, team)
-u_long machine;
-u_long uid;
-char   *name;
-char   team;
+       u_long  machine;
+       u_long  uid;
+       char    *name;
+       char    team;
 {
-       register IDENT  *ip;
+       IDENT           *ip;
        static IDENT    punt;
 
        for (ip = Scores; ip != NULL; ip = ip->i_next)