]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - backgammon/teachgammon/teach.c
Remove ifdefs for V7 (as opposed to older) unix.
[bsdgames-darwin.git] / backgammon / teachgammon / teach.c
index 18528d05ed4a77a8595df6b677a8184895e3675d..0fb58d50581be6c9787d087ca5ba2c78f8672631 100644 (file)
@@ -1,6 +1,8 @@
+/*     $NetBSD: teach.c,v 1.23 2012/10/13 19:25:22 dholland Exp $      */
+
 /*
- * 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.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * 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.
  *
  * SUCH DAMAGE.
  */
 
+#include <sys/cdefs.h>
 #ifndef lint
-char copyright[] =
-"@(#) Copyright (c) 1980 Regents of the University of California.\n\
- All rights reserved.\n";
-#endif /* not lint */
+__COPYRIGHT("@(#) Copyright (c) 1980, 1993\
+ The Regents of the University of California.  All rights reserved.");
+#endif                         /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)teach.c    5.6 (Berkeley) 6/1/90";
-#endif /* not lint */
+#if 0
+static char sccsid[] = "@(#)teach.c    8.1 (Berkeley) 5/31/93";
+#else
+__RCSID("$NetBSD: teach.c,v 1.23 2012/10/13 19:25:22 dholland Exp $");
+#endif
+#endif                         /* not lint */
 
 #include "back.h"
+#include "tutor.h"
 
-char   *hello[];
-char   *list[];
-char   *intro1[];
-char   *intro2[];
-char   *moves[];
-char   *remove[];
-char   *hits[];
-char   *endgame[];
-char   *doubl[];
-char   *stragy[];
-char   *prog[];
-char   *lastch[];
-
-extern char    ospeed;                 /* tty output speed for termlib */
-
-char *helpm[] = {
+static const char *const helpm[] = {
        "\nEnter a space or newline to roll, or",
        "     b   to display the board",
        "     d   to double",
@@ -66,101 +54,104 @@ char *helpm[] = {
        0
 };
 
-char *contin[] = {
+static const char *const contin[] = {
        "",
        0
 };
 
-main (argc,argv)
-int    argc;
-char   **argv;
-
+int
+main(int argc __unused, char *argv[])
 {
-       register int    i;
-
-       signal (2,getout);
-       if (gtty (0,&tty) == -1)                        /* get old tty mode */
-               errexit ("teachgammon(gtty)");
-       old = tty.sg_flags;
-#ifdef V7
-       raw = ((noech = old & ~ECHO) | CBREAK);         /* set up modes */
-#else
-       raw = ((noech = old & ~ECHO) | RAW);            /* set up modes */
-#endif
-       ospeed = tty.sg_ospeed;                         /* for termlib */
-       tflag = getcaps (getenv ("TERM"));
-#ifdef V7
+       int     i;
+       struct move mmstore, *mm;
+
+       /* revoke setgid privileges */
+       setgid(getgid());
+
+       signal(SIGINT, getout);
+       if (tcgetattr(0, &old) == -1)   /* get old tty mode */
+               errexit("teachgammon(gtty)");
+       noech = old;
+       noech.c_lflag &= ~ECHO;
+       raw = noech;
+       raw.c_lflag &= ~ICANON; /* set up modes */
+       ospeed = cfgetospeed(&old);     /* for termlib */
+       tflag = getcaps(getenv("TERM"));
+
+       /* need this now beceause getarg() may try to load a game */
+       mm = &mmstore;
+       move_init(mm);
        while (*++argv != 0)
-#else
-       while (*++argv != -1)
-#endif
-               getarg (&argv);
-       if (tflag)  {
-               noech &= ~(CRMOD|XTABS);
-               raw &= ~(CRMOD|XTABS);
+               getarg(mm, &argv);
+       if (tflag) {
+               noech.c_oflag &= ~(ONLCR | OXTABS);
+               raw.c_oflag &= ~(ONLCR | OXTABS);
                clear();
        }
-       text (hello);
-       text (list);
-       i = text (contin);
+       wrtext(hello);
+       wrtext(list);
+       i = wrtext(contin);
        if (i == 0)
                i = 2;
        init();
        while (i)
-               switch (i)  {
-               
+               switch (i) {
                case 1:
                        leave();
-               
+
                case 2:
-                       if (i = text(intro1))
+                       if ((i = wrtext(intro1)) != 0)
                                break;
                        wrboard();
-                       if (i = text(intro2))
+                       if ((i = wrtext(intro2)) != 0)
                                break;
-               
+
                case 3:
-                       if (i = text(moves))
+                       if ((i = wrtext(moves)) != 0)
                                break;
-               
+
                case 4:
-                       if (i = text(remove))
+                       if ((i = wrtext(removepiece)) != 0)
                                break;
-               
+
                case 5:
-                       if (i = text(hits))
+                       if ((i = wrtext(hits)) != 0)
                                break;
-               
+
                case 6:
-                       if (i = text(endgame))
+                       if ((i = wrtext(endgame)) != 0)
                                break;
-               
+
                case 7:
-                       if (i = text(doubl))
+                       if ((i = wrtext(doubl)) != 0)
                                break;
-               
+
                case 8:
-                       if (i = text(stragy))
+                       if ((i = wrtext(stragy)) != 0)
                                break;
-               
+
                case 9:
-                       if (i = text(prog))
+                       if ((i = wrtext(prog)) != 0)
                                break;
-               
+
                case 10:
-                       if (i = text(lastch))
+                       if ((i = wrtext(lastch)) != 0)
                                break;
                }
-       tutor();
+       tutor(mm);
+       /* NOTREACHED */
+       return (0);
 }
 
-leave()  {
+void
+leave(void)
+{
        if (tflag)
                clear();
        else
-               writec ('\n');
-       fixtty(old);
-       execl (EXEC,"backgammon",args,"n",0);
-       writel ("Help! Backgammon program is missing\007!!\n");
-       exit (-1);
+               writec('\n');
+       fixtty(&old);
+       execl(EXEC, "backgammon", "-n", args[0]?args:0, (char *) 0);
+       writel("Help! Backgammon program is missing\007!!\n");
+       exit(1);
 }