BSD 4_4_Lite1 release
[unix-history] / usr / src / games / snake / snake / snake.c
index e99ba60..b99da10 100644 (file)
@@ -1,18 +1,44 @@
 /*
 /*
- * Copyright (c) 1980 Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1980, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  *
- * %sccs.include.redist.c%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 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
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-char copyright[] =
-"@(#) Copyright (c) 1980 Regents of the University of California.\n\
- All rights reserved.\n";
+static char copyright[] =
+"@(#) Copyright (c) 1980, 1993\n\
      The Regents of the University of California.  All rights reserved.\n";
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)snake.c    5.9 (Berkeley) %G%";
+static char sccsid[] = "@(#)snake.c    8.2 (Berkeley) 1/7/94";
 #endif /* not lint */
 
 /*
 #endif /* not lint */
 
 /*
@@ -27,7 +53,12 @@ static char sccsid[] = "@(#)snake.c  5.9 (Berkeley) %G%";
  */
 
 #include <sys/param.h>
  */
 
 #include <sys/param.h>
+
+#include <errno.h>
+#include <fcntl.h>
 #include <pwd.h>
 #include <pwd.h>
+#include <time.h>
+
 #include "snake.h"
 #include "pathnames.h"
 
 #include "snake.h"
 #include "pathnames.h"
 
@@ -69,7 +100,6 @@ char **argv;
        extern char *optarg;
        extern int optind;
        int ch, i, j, k;
        extern char *optarg;
        extern int optind;
        int ch, i, j, k;
-       time_t time();
        long atol();
        void stop();
 
        long atol();
        void stop();
 
@@ -347,7 +377,7 @@ mainloop()
                                pr("You have won with $%d.\n",cashvalue);
                                fflush(stdout);
                                logit("won");
                                pr("You have won with $%d.\n",cashvalue);
                                fflush(stdout);
                                logit("won");
-                               post(cashvalue,0);
+                               post(cashvalue,1);
                                length(moves);
                                done();
                        }
                                length(moves);
                                done();
                        }
@@ -443,40 +473,45 @@ int       iscore, flag;
        /*
         * Neg uid, 0, and 1 cannot have scores recorded.
         */
        /*
         * Neg uid, 0, and 1 cannot have scores recorded.
         */
-       if ((uid=getuid()) > 1 && (rawscores=open(_PATH_RAWSCORES,2))>=0) {
-               /* Figure out what happened in the past */
-               read(rawscores, &allbscore, sizeof(short));
-               read(rawscores, &allbwho, sizeof(short));
+       if ((uid = getuid()) <= 1) {
+               pr("No saved scores for uid %d.\n", uid);
+               return(1);
+       }
+       if ((rawscores = open(_PATH_RAWSCORES, O_RDWR|O_CREAT, 0644)) < 0) {
+               pr("No score file %s: %s.\n", _PATH_RAWSCORES,
+                   strerror(errno));
+               return(1);
+       }
+       /* Figure out what happened in the past */
+       read(rawscores, &allbscore, sizeof(short));
+       read(rawscores, &allbwho, sizeof(short));
+       lseek(rawscores, ((long)uid)*sizeof(short), 0);
+       read(rawscores, &oldbest, sizeof(short));
+       if (!flag)
+               return (score > oldbest ? 1 : 0);
+
+       /* Update this jokers best */
+       if (score > oldbest) {
                lseek(rawscores, ((long)uid)*sizeof(short), 0);
                lseek(rawscores, ((long)uid)*sizeof(short), 0);
-               read(rawscores, &oldbest, sizeof(short));
-               if (flag) return (score > oldbest ? 1 : 0);
-
-               /* Update this jokers best */
-               if (score > oldbest) {
-                       lseek(rawscores, ((long)uid)*sizeof(short), 0);
-                       write(rawscores, &score, sizeof(short));
-                       pr("You bettered your previous best of $%d\n", oldbest);
-               } else
-                       pr("Your best to date is $%d\n", oldbest);
-
-               /* See if we have a new champ */
-               p = getpwuid(allbwho);
-               if (p == NULL || score > allbscore) {
-                       lseek(rawscores, (long)0, 0);
-                       write(rawscores, &score, sizeof(short));
-                       write(rawscores, &uid, sizeof(short));
-                       if (p != NULL)
-                               pr("You beat %s's old record of $%d!\n",
-                                   p->pw_name, allbscore);
-                       else
-                               pr("You set a new record!\n");
-               } else
-                       pr("The highest is %s with $%d\n",
+               write(rawscores, &score, sizeof(short));
+               pr("You bettered your previous best of $%d\n", oldbest);
+       } else
+               pr("Your best to date is $%d\n", oldbest);
+
+       /* See if we have a new champ */
+       p = getpwuid(allbwho);
+       if (p == NULL || score > allbscore) {
+               lseek(rawscores, (long)0, 0);
+               write(rawscores, &score, sizeof(short));
+               write(rawscores, &uid, sizeof(short));
+               if (allbwho)
+                       pr("You beat %s's old record of $%d!\n",
                            p->pw_name, allbscore);
                            p->pw_name, allbscore);
-               close(rawscores);
+               else
+                       pr("You set a new record!\n");
        } else
        } else
-               if (!flag)
-                       pr("Unable to post score.\n");
+               pr("The highest is %s with $%d\n", p->pw_name, allbscore);
+       close(rawscores);
        return (1);
 }
 
        return (1);
 }
 
@@ -504,7 +539,7 @@ struct point *sp, *np;
           snake would get too good */
        struct point d;
        int w, i, wt[8];
           snake would get too good */
        struct point d;
        int w, i, wt[8];
-       double sqrt(), v1, v2, vp, max;
+       double v1, v2, vp, max;
        point(&d,you.col-sp->col,you.line-sp->line);
        v1 = sqrt( (double) (d.col*d.col + d.line*d.line) );
        w=0; 
        point(&d,you.col-sp->col,you.line-sp->line);
        v1 = sqrt( (double) (d.col*d.col + d.line*d.line) );
        w=0; 
@@ -678,7 +713,7 @@ struct point *ps;{
                pchar(ps,' ');
                delay(1);
        }
                pchar(ps,' ');
                delay(1);
        }
-       if (post(cashvalue,1)) {
+       if (post(cashvalue,0)) {
                apr(point(&x,ps->col-1,ps->line-1),"   \ro.o\r\\_/");
                delay(6);
                apr(point(&x,ps->col-1,ps->line-1),"   \ro.-\r\\_/");
                apr(point(&x,ps->col-1,ps->line-1),"   \ro.o\r\\_/");
                delay(6);
                apr(point(&x,ps->col-1,ps->line-1),"   \ro.-\r\\_/");