]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - atc/input.c
don't install in /usr/share if NOSHARE is defined
[bsdgames-darwin.git] / atc / input.c
index 693a7a3ae382b08dc366a14887f29a4e5658400b..eb0fa9e6955aa4a802e74ff203984f8de55d71c9 100644 (file)
@@ -1,6 +1,8 @@
+/*     $NetBSD: input.c,v 1.10 1998/09/13 15:20:31 hubertf Exp $       */
+
 /*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  * This code is derived from software contributed to Berkeley by
  * Ed James.
  * For more info on this and all of my stuff, mail edjames@berkeley.edu.
  */
 
+#include <sys/cdefs.h>
 #ifndef lint
-static char sccsid[] = "@(#)input.c    5.4 (Berkeley) 4/30/90";
+#if 0
+static char sccsid[] = "@(#)input.c    8.1 (Berkeley) 5/31/93";
+#else
+__RCSID("$NetBSD: input.c,v 1.10 1998/09/13 15:20:31 hubertf Exp $");
+#endif
 #endif not lint
 
 #include "include.h"
@@ -54,9 +61,6 @@ static char sccsid[] = "@(#)input.c   5.4 (Berkeley) 4/30/90";
 #define MAXDEPTH       15
 
 #define RETTOKEN       '\n'
-#ifdef SYSV
-#define CRTOKEN                '\r'
-#endif
 #define REDRAWTOKEN    '\014'  /* CTRL(L) */
 #define        SHELLTOKEN      '!'
 #define HELPTOKEN      '?'
@@ -67,7 +71,7 @@ typedef struct {
        int     token;
        int     to_state;
        char    *str;
-       char    *(*func)();
+       char    *(*func) __P((char));
 } RULE;
 
 typedef struct {
@@ -93,16 +97,9 @@ typedef struct {
 
 #define NUMSTATES      NUMELS(st)
 
-char   *setplane(), *circle(), *left(), *right(), *Left(), *Right(), 
-       *beacon(), *ex_it(), *climb(), *descend(), *setalt(), *setrelalt(), 
-       *benum(), *to_dir(), *rel_dir(), *delayb(), *mark(), *unmark(),
-       *airport(), *turn(), *ignore();
 
 RULE   state0[] = {    { ALPHATOKEN,   1,      "%c:",          setplane},
                        { RETTOKEN,     -1,     "",             NULL    },
-#ifdef SYSV
-                       { CRTOKEN,      -1,     "",             NULL    },
-#endif
                        { HELPTOKEN,    12,     " [a-z]<ret>",  NULL    }},
        state1[] = {    { 't',          2,      " turn",        turn    },      
                        { 'a',          3,      " altitude:",   NULL    },      
@@ -134,9 +131,6 @@ RULE        state0[] = {    { ALPHATOKEN,   1,      "%c:",          setplane},
        state4[] = {    { '@',          9,      " at",          NULL    },      
                        { 'a',          9,      " at",          NULL    },      
                        { RETTOKEN,     -1,     "",             NULL    },
-#ifdef SYSV
-                       { CRTOKEN,      -1,     "",             NULL    },
-#endif
                        { HELPTOKEN,    12,     " @a<ret>",     NULL    }},
        state5[] = {    { NUMTOKEN,     7,      "%c",           delayb  },
                        { HELPTOKEN,    12,     " [0-9]",       NULL    }},
@@ -151,14 +145,8 @@ RULE       state0[] = {    { ALPHATOKEN,   1,      "%c:",          setplane},
                        { 'a',          4,      " 270",         rel_dir },
                        { 'q',          4,      " 315",         rel_dir },
                        { RETTOKEN,     -1,     "",             NULL    },      
-#ifdef SYSV
-                       { CRTOKEN,      -1,     "",             NULL    },      
-#endif
                        { HELPTOKEN,    12,     " @a<dir><ret>",NULL    }},
        state7[] = {    { RETTOKEN,     -1,     "",             NULL    },
-#ifdef SYSV
-                       { CRTOKEN,      -1,     "",             NULL    },
-#endif
                        { HELPTOKEN,    12,     " <ret>",       NULL    }},
        state8[] = {    { NUMTOKEN,     4,      "%c",           benum   },
                        { HELPTOKEN,    12,     " [0-9]",       NULL    }},
@@ -190,6 +178,7 @@ int level;
 int    tval;
 int    dest_type, dest_no, dir;
 
+int
 pop()
 {
        if (level == 0)
@@ -204,6 +193,7 @@ pop()
        return (0);
 }
 
+void
 rezero()
 {
        iomove(0);
@@ -216,7 +206,9 @@ rezero()
        strcpy(T_STR, "");
 }
 
+void
 push(ruleno, ch)
+       int ruleno, ch;
 {
        int     newstate, newpos;
 
@@ -237,20 +229,21 @@ push(ruleno, ch)
        strcpy(T_STR, "");
 }
 
+int
 getcommand()
 {
        int     c, i, done;
-       char    *s, *(*func)();
+       char    *s, *(*func) __P((char));
        PLANE   *pp;
 
        rezero();
 
        do {
                c = gettoken();
-               if (c == tty_new.sg_erase) {
+               if (c == tty_new.c_cc[VERASE]) {
                        if (pop() < 0)
                                noise();
-               } else if (c == tty_new.sg_kill) {
+               } else if (c == tty_new.c_cc[VKILL]) {
                        while (pop() >= 0)
                                ;
                } else {
@@ -295,12 +288,14 @@ getcommand()
        return (0);
 }
 
+void
 noise()
 {
        putchar('\07');
        fflush(stdout);
 }
 
+int
 gettoken()
 {
        while ((tval = getAChar()) == REDRAWTOKEN || tval == SHELLTOKEN)
@@ -319,7 +314,7 @@ gettoken()
 #endif
                        if (fork() == 0)        /* child */
                        {
-                               char *shell, *base, *getenv(), *strrchr();
+                               char *shell, *base;
 
                                setuid(getuid()); /* turn off setuid bit */
                                done_screen();
@@ -341,8 +336,8 @@ gettoken()
                        }
 
                        wait(0);
+                       tcsetattr(fileno(stdin), TCSADRAIN, &tty_new);
 #ifdef BSD
-                       ioctl(fileno(stdin), TIOCSETP, &tty_new);
                        itv.it_value.tv_sec = 0;
                        itv.it_value.tv_usec = 1;
                        itv.it_interval.tv_sec = sp->update_secs;
@@ -350,7 +345,6 @@ gettoken()
                        setitimer(ITIMER_REAL, &itv, NULL);
 #endif
 #ifdef SYSV
-                       ioctl(fileno(stdin), TCSETAW, &tty_new);
                        alarm(aval);
 #endif
                }
@@ -367,19 +361,21 @@ gettoken()
 
 char   *
 setplane(c)
+       char c;
 {
        PLANE   *pp;
 
        pp = findplane(number(c));
        if (pp == NULL)
                return ("Unknown Plane");
-       bcopy(pp, &p, sizeof (p));
+       memcpy(&p, pp, sizeof (p));
        p.delayd = 0;
        return (NULL);
 }
 
 char   *
 turn(c)
+       char c;
 {
        if (p.altitude == 0)
                return ("Planes at airports may not change direction");
@@ -388,6 +384,7 @@ turn(c)
 
 char   *
 circle(c)
+       char c;
 {
        if (p.altitude == 0)
                return ("Planes cannot circle on the ground");
@@ -397,6 +394,7 @@ circle(c)
 
 char   *
 left(c)
+       char c;
 {
        dir = D_LEFT;
        p.new_dir = p.dir - 1;
@@ -407,16 +405,18 @@ left(c)
 
 char   *
 right(c)
+       char c;
 {
        dir = D_RIGHT;
        p.new_dir = p.dir + 1;
-       if (p.new_dir > MAXDIR)
+       if (p.new_dir >= MAXDIR)
                p.new_dir -= MAXDIR;
        return (NULL);
 }
 
 char   *
 Left(c)
+       char c;
 {
        p.new_dir = p.dir - 2;
        if (p.new_dir < 0)
@@ -426,15 +426,17 @@ Left(c)
 
 char   *
 Right(c)
+       char c;
 {
        p.new_dir = p.dir + 2;
-       if (p.new_dir > MAXDIR)
+       if (p.new_dir >= MAXDIR)
                p.new_dir -= MAXDIR;
        return (NULL);
 }
 
 char   *
 delayb(c)
+       char c;
 {
        int     xdiff, ydiff;
 
@@ -442,9 +444,9 @@ delayb(c)
 
        if (c >= sp->num_beacons)
                return ("Unknown beacon");
-       xdiff = sp->beacon[c].x - p.xpos;
+       xdiff = sp->beacon[(int)c].x - p.xpos;
        xdiff = SGN(xdiff);
-       ydiff = sp->beacon[c].y - p.ypos;
+       ydiff = sp->beacon[(int)c].y - p.ypos;
        ydiff = SGN(ydiff);
        if (xdiff != displacement[p.dir].dx || ydiff != displacement[p.dir].dy)
                return ("Beacon is not in flight path");
@@ -454,16 +456,16 @@ delayb(c)
        if (dest_type != T_NODEST) {
                switch (dest_type) {
                case T_BEACON:
-                       xdiff = sp->beacon[dest_no].x - sp->beacon[c].x;
-                       ydiff = sp->beacon[dest_no].y - sp->beacon[c].y;
+                       xdiff = sp->beacon[dest_no].x - sp->beacon[(int)c].x;
+                       ydiff = sp->beacon[dest_no].y - sp->beacon[(int)c].y;
                        break;
                case T_EXIT:
-                       xdiff = sp->exit[dest_no].x - sp->beacon[c].x;
-                       ydiff = sp->exit[dest_no].y - sp->beacon[c].y;
+                       xdiff = sp->exit[dest_no].x - sp->beacon[(int)c].x;
+                       ydiff = sp->exit[dest_no].y - sp->beacon[(int)c].y;
                        break;
                case T_AIRPORT:
-                       xdiff = sp->airport[dest_no].x - sp->beacon[c].x;
-                       ydiff = sp->airport[dest_no].y - sp->beacon[c].y;
+                       xdiff = sp->airport[dest_no].x - sp->beacon[(int)c].x;
+                       ydiff = sp->airport[dest_no].y - sp->beacon[(int)c].y;
                        break;
                default:
                        return ("Bad case in delayb!  Get help!");
@@ -480,6 +482,7 @@ delayb(c)
 
 char   *
 beacon(c)
+       char c;
 {
        dest_type = T_BEACON;
        return (NULL);
@@ -487,6 +490,7 @@ beacon(c)
 
 char   *
 ex_it(c)
+       char c;
 {
        dest_type = T_EXIT;
        return (NULL);
@@ -494,6 +498,7 @@ ex_it(c)
 
 char   *
 airport(c)
+       char c;
 {
        dest_type = T_AIRPORT;
        return (NULL);
@@ -501,6 +506,7 @@ airport(c)
 
 char   *
 climb(c)
+       char c;
 {
        dir = D_UP;
        return (NULL);
@@ -508,6 +514,7 @@ climb(c)
 
 char   *
 descend(c)
+       char c;
 {
        dir = D_DOWN;
        return (NULL);
@@ -515,6 +522,7 @@ descend(c)
 
 char   *
 setalt(c)
+       char c;
 {
        if ((p.altitude == c - '0') && (p.new_altitude == p.altitude))
                return ("Already at that altitude");
@@ -524,6 +532,7 @@ setalt(c)
 
 char   *
 setrelalt(c)
+       char c;
 {
        if (c == 0)
                return ("altitude not changed");
@@ -548,6 +557,7 @@ setrelalt(c)
 
 char   *
 benum(c)
+       char c;
 {
        dest_no = c -= '0';
 
@@ -555,20 +565,20 @@ benum(c)
        case T_BEACON:
                if (c >= sp->num_beacons)
                        return ("Unknown beacon");
-               p.new_dir = DIR_FROM_DXDY(sp->beacon[c].x - p.xpos,
-                       sp->beacon[c].y - p.ypos);
+               p.new_dir = DIR_FROM_DXDY(sp->beacon[(int)c].x - p.xpos,
+                       sp->beacon[(int)c].y - p.ypos);
                break;
        case T_EXIT:
                if (c >= sp->num_exits)
                        return ("Unknown exit");
-               p.new_dir = DIR_FROM_DXDY(sp->exit[c].x - p.xpos,
-                       sp->exit[c].y - p.ypos);
+               p.new_dir = DIR_FROM_DXDY(sp->exit[(int)c].x - p.xpos,
+                       sp->exit[(int)c].y - p.ypos);
                break;
        case T_AIRPORT:
                if (c >= sp->num_airports)
                        return ("Unknown airport");
-               p.new_dir = DIR_FROM_DXDY(sp->airport[c].x - p.xpos,
-                       sp->airport[c].y - p.ypos);
+               p.new_dir = DIR_FROM_DXDY(sp->airport[(int)c].x - p.xpos,
+                       sp->airport[(int)c].y - p.ypos);
                break;
        default:
                return ("Unknown case in benum!  Get help!");
@@ -579,6 +589,7 @@ benum(c)
 
 char   *
 to_dir(c)
+       char c;
 {
        p.new_dir = dir_no(c);
        return (NULL);
@@ -586,6 +597,7 @@ to_dir(c)
 
 char   *
 rel_dir(c)
+       char c;
 {
        int     angle;
 
@@ -610,6 +622,7 @@ rel_dir(c)
 
 char   *
 mark(c)
+       char c;
 {
        if (p.altitude == 0)
                return ("Cannot mark planes on the ground");
@@ -621,6 +634,7 @@ mark(c)
 
 char   *
 unmark(c)
+       char c;
 {
        if (p.altitude == 0)
                return ("Cannot unmark planes on the ground");
@@ -632,6 +646,7 @@ unmark(c)
 
 char   *
 ignore(c)
+       char c;
 {
        if (p.altitude == 0)
                return ("Cannot ignore planes on the ground");
@@ -641,11 +656,13 @@ ignore(c)
        return (NULL);
 }
 
+int
 dir_no(ch)
        char    ch;
 {
        int     dir;
 
+       dir = -1;
        switch (ch) {
        case 'w':       dir = 0;        break;
        case 'e':       dir = 1;        break;