BSD 4_4 release
[unix-history] / usr / src / games / worm / worm.c
index 6272d9f..0489683 100644 (file)
@@ -1,18 +1,45 @@
 /*
 /*
- * Copyright (c) 1980 Regents of the University of California.
- * All rights reserved.  The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
+ * Copyright (c) 1980, 1993
+ *     The 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:
+ * 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";
-#endif not lint
+static char copyright[] =
+"@(#) Copyright (c) 1980, 1993\n\
      The Regents of the University of California.  All rights reserved.\n";
+#endif /* not lint */
 
 #ifndef lint
 
 #ifndef lint
-static char sccsid[] = "@(#)worm.c     5.2 (Berkeley) %G%";
-#endif not lint
+static char sccsid[] = "@(#)worm.c     8.1 (Berkeley) 5/31/93";
+#endif /* not lint */
 
 /*
  * Worm.  Written by Michael Toy
 
 /*
  * Worm.  Written by Michael Toy
@@ -22,15 +49,14 @@ static char sccsid[] = "@(#)worm.c  5.2 (Berkeley) %G%";
 #include <ctype.h>
 #include <curses.h>
 #include <signal.h>
 #include <ctype.h>
 #include <curses.h>
 #include <signal.h>
+#include <termios.h>
 
 #define newlink() (struct body *) malloc(sizeof (struct body));
 #define HEAD '@'
 #define BODY 'o'
 #define LENGTH 7
 #define RUNLEN 8
 
 #define newlink() (struct body *) malloc(sizeof (struct body));
 #define HEAD '@'
 #define BODY 'o'
 #define LENGTH 7
 #define RUNLEN 8
-#define when break;case
-#define otherwise break;default
-#define CNTRL(p) ('p'-'A'+1)
+#define CNTRL(p) (p-'A'+1)
 #ifndef baudrate
 # define       baudrate()      _tty.sg_ospeed
 #endif
 #ifndef baudrate
 # define       baudrate()      _tty.sg_ospeed
 #endif
@@ -51,10 +77,12 @@ int start_len = LENGTH;
 char lastch;
 char outbuf[BUFSIZ];
 
 char lastch;
 char outbuf[BUFSIZ];
 
+void leave(), wake(), suspend();
+
 main(argc, argv)
 main(argc, argv)
-char **argv;
+       int argc;
+       char **argv;
 {
 {
-       int leave(), wake(), suspend();
        char ch;
 
        if (argc == 2)
        char ch;
 
        if (argc == 2)
@@ -66,9 +94,7 @@ char **argv;
        signal(SIGALRM, wake);
        signal(SIGINT, leave);
        signal(SIGQUIT, leave);
        signal(SIGALRM, wake);
        signal(SIGINT, leave);
        signal(SIGQUIT, leave);
-#ifdef SIGTSTP
        signal(SIGTSTP, suspend);       /* process control signal */
        signal(SIGTSTP, suspend);       /* process control signal */
-#endif
        initscr();
        crmode();
        noecho();
        initscr();
        crmode();
        noecho();
@@ -132,12 +158,14 @@ char chr;
        waddch(tv, chr);
 }
 
        waddch(tv, chr);
 }
 
+void
 leave()
 {
        endwin();
        exit(0);
 }
 
 leave()
 {
        endwin();
        exit(0);
 }
 
+void
 wake()
 {
        signal(SIGALRM, wake);
 wake()
 {
        signal(SIGALRM, wake);
@@ -181,19 +209,19 @@ char ch;
        y = head->y;
        switch(ch)
        {
        y = head->y;
        switch(ch)
        {
-               when 'h': x--;
-               when 'j': y++;
-               when 'k': y--;
-               when 'l': x++;
-               when 'H': x--; running = RUNLEN; ch = tolower(ch);
-               when 'J': y++; running = RUNLEN/2; ch = tolower(ch);
-               when 'K': y--; running = RUNLEN/2; ch = tolower(ch);
-               when 'L': x++; running = RUNLEN; ch = tolower(ch);
-               when '\f': setup(); return;
-               when CNTRL(Z): suspend(); return;
-               when CNTRL(C): crash(); return;
-               when CNTRL(D): crash(); return;
-               otherwise: if (! running) alarm(1);
+               case 'h': x--; break;
+               case 'j': y++; break;
+               case 'k': y--; break;
+               case 'l': x++; break;
+               case 'H': x--; running = RUNLEN; ch = tolower(ch); break;
+               case 'J': y++; running = RUNLEN/2; ch = tolower(ch); break;
+               case 'K': y--; running = RUNLEN/2; ch = tolower(ch); break;
+               case 'L': x++; running = RUNLEN; ch = tolower(ch); break;
+               case '\f': setup(); return;
+               case CNTRL('Z'): suspend(); return;
+               case CNTRL('C'): crash(); return;
+               case CNTRL('D'): crash(); return;
+               default: if (! running) alarm(1);
                           return;
        }
        lastch = ch;
                           return;
        }
        lastch = ch;
@@ -239,11 +267,12 @@ crash()
        clear();
        move(23, 0);
        refresh();
        clear();
        move(23, 0);
        refresh();
-       printf("Well you ran into something and the game is over.\n");
+       printf("Well, you ran into something and the game is over.\n");
        printf("Your final score was %d\n", score);
        leave();
 }
 
        printf("Your final score was %d\n", score);
        leave();
 }
 
+void
 suspend()
 {
        char *sh;
 suspend()
 {
        char *sh;
@@ -252,15 +281,8 @@ suspend()
        refresh();
        endwin();
        fflush(stdout);
        refresh();
        endwin();
        fflush(stdout);
-#ifdef SIGTSTP
        kill(getpid(), SIGTSTP);
        signal(SIGTSTP, suspend);
        kill(getpid(), SIGTSTP);
        signal(SIGTSTP, suspend);
-#else
-       sh = getenv("SHELL");
-       if (sh == NULL)
-               sh = "/bin/sh";
-       system(sh);
-#endif
        crmode();
        noecho();
        setup();
        crmode();
        noecho();
        setup();