Home | History | Annotate | Line # | Download | only in teachgammon
teach.c revision 1.21.6.2
      1  1.21.6.2      yamt /*	$NetBSD: teach.c,v 1.21.6.2 2014/05/22 11:36:21 yamt Exp $	*/
      2       1.3       cgd 
      3       1.1       cgd /*
      4       1.3       cgd  * Copyright (c) 1980, 1993
      5       1.3       cgd  *	The Regents of the University of California.  All rights reserved.
      6       1.1       cgd  *
      7       1.1       cgd  * Redistribution and use in source and binary forms, with or without
      8       1.1       cgd  * modification, are permitted provided that the following conditions
      9       1.1       cgd  * are met:
     10       1.1       cgd  * 1. Redistributions of source code must retain the above copyright
     11       1.1       cgd  *    notice, this list of conditions and the following disclaimer.
     12       1.1       cgd  * 2. Redistributions in binary form must reproduce the above copyright
     13       1.1       cgd  *    notice, this list of conditions and the following disclaimer in the
     14       1.1       cgd  *    documentation and/or other materials provided with the distribution.
     15      1.14       agc  * 3. Neither the name of the University nor the names of its contributors
     16       1.1       cgd  *    may be used to endorse or promote products derived from this software
     17       1.1       cgd  *    without specific prior written permission.
     18       1.1       cgd  *
     19       1.1       cgd  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     20       1.1       cgd  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     21       1.1       cgd  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     22       1.1       cgd  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     23       1.1       cgd  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     24       1.1       cgd  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     25       1.1       cgd  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     26       1.1       cgd  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     27       1.1       cgd  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     28       1.1       cgd  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     29       1.1       cgd  * SUCH DAMAGE.
     30       1.1       cgd  */
     31       1.1       cgd 
     32       1.5     lukem #include <sys/cdefs.h>
     33       1.1       cgd #ifndef lint
     34      1.19     lukem __COPYRIGHT("@(#) Copyright (c) 1980, 1993\
     35      1.19     lukem  The Regents of the University of California.  All rights reserved.");
     36       1.5     lukem #endif				/* not lint */
     37       1.1       cgd 
     38       1.1       cgd #ifndef lint
     39       1.3       cgd #if 0
     40       1.3       cgd static char sccsid[] = "@(#)teach.c	8.1 (Berkeley) 5/31/93";
     41       1.3       cgd #else
     42  1.21.6.2      yamt __RCSID("$NetBSD: teach.c,v 1.21.6.2 2014/05/22 11:36:21 yamt Exp $");
     43       1.3       cgd #endif
     44       1.5     lukem #endif				/* not lint */
     45       1.1       cgd 
     46       1.1       cgd #include "back.h"
     47       1.5     lukem #include "tutor.h"
     48       1.1       cgd 
     49      1.20  dholland static const char *const contin[] = {
     50       1.1       cgd 	"",
     51       1.1       cgd 	0
     52       1.1       cgd };
     53       1.1       cgd 
     54       1.5     lukem int
     55      1.18     perry main(int argc __unused, char *argv[])
     56       1.1       cgd {
     57       1.5     lukem 	int     i;
     58  1.21.6.1      yamt 	struct move mmstore, *mm;
     59       1.9   hubertf 
     60       1.9   hubertf 	/* revoke setgid privileges */
     61      1.11   mycroft 	setgid(getgid());
     62       1.1       cgd 
     63       1.6   hubertf 	signal(SIGINT, getout);
     64       1.5     lukem 	if (tcgetattr(0, &old) == -1)	/* get old tty mode */
     65       1.5     lukem 		errexit("teachgammon(gtty)");
     66       1.4   mycroft 	noech = old;
     67       1.4   mycroft 	noech.c_lflag &= ~ECHO;
     68       1.4   mycroft 	raw = noech;
     69       1.5     lukem 	raw.c_lflag &= ~ICANON;	/* set up modes */
     70       1.5     lukem 	ospeed = cfgetospeed(&old);	/* for termlib */
     71       1.5     lukem 	tflag = getcaps(getenv("TERM"));
     72  1.21.6.1      yamt 
     73  1.21.6.1      yamt 	/* need this now beceause getarg() may try to load a game */
     74  1.21.6.1      yamt 	mm = &mmstore;
     75  1.21.6.1      yamt 	move_init(mm);
     76       1.1       cgd 	while (*++argv != 0)
     77  1.21.6.1      yamt 		getarg(mm, &argv);
     78       1.5     lukem 	if (tflag) {
     79       1.5     lukem 		noech.c_oflag &= ~(ONLCR | OXTABS);
     80       1.5     lukem 		raw.c_oflag &= ~(ONLCR | OXTABS);
     81       1.1       cgd 		clear();
     82       1.1       cgd 	}
     83      1.21       mrg 	wrtext(hello);
     84      1.21       mrg 	wrtext(list);
     85      1.21       mrg 	i = wrtext(contin);
     86       1.1       cgd 	if (i == 0)
     87       1.1       cgd 		i = 2;
     88       1.1       cgd 	init();
     89       1.1       cgd 	while (i)
     90       1.5     lukem 		switch (i) {
     91       1.1       cgd 		case 1:
     92       1.1       cgd 			leave();
     93       1.5     lukem 
     94       1.1       cgd 		case 2:
     95      1.21       mrg 			if ((i = wrtext(intro1)) != 0)
     96       1.1       cgd 				break;
     97       1.1       cgd 			wrboard();
     98      1.21       mrg 			if ((i = wrtext(intro2)) != 0)
     99       1.1       cgd 				break;
    100       1.5     lukem 
    101       1.1       cgd 		case 3:
    102      1.21       mrg 			if ((i = wrtext(moves)) != 0)
    103       1.1       cgd 				break;
    104       1.5     lukem 
    105       1.1       cgd 		case 4:
    106      1.21       mrg 			if ((i = wrtext(removepiece)) != 0)
    107       1.1       cgd 				break;
    108       1.5     lukem 
    109       1.1       cgd 		case 5:
    110      1.21       mrg 			if ((i = wrtext(hits)) != 0)
    111       1.1       cgd 				break;
    112       1.5     lukem 
    113       1.1       cgd 		case 6:
    114      1.21       mrg 			if ((i = wrtext(endgame)) != 0)
    115       1.1       cgd 				break;
    116       1.5     lukem 
    117       1.1       cgd 		case 7:
    118      1.21       mrg 			if ((i = wrtext(doubl)) != 0)
    119       1.1       cgd 				break;
    120       1.5     lukem 
    121       1.1       cgd 		case 8:
    122      1.21       mrg 			if ((i = wrtext(stragy)) != 0)
    123       1.1       cgd 				break;
    124       1.5     lukem 
    125       1.1       cgd 		case 9:
    126      1.21       mrg 			if ((i = wrtext(prog)) != 0)
    127       1.1       cgd 				break;
    128       1.5     lukem 
    129       1.1       cgd 		case 10:
    130      1.21       mrg 			if ((i = wrtext(lastch)) != 0)
    131       1.1       cgd 				break;
    132       1.1       cgd 		}
    133  1.21.6.1      yamt 	tutor(mm);
    134       1.5     lukem 	/* NOTREACHED */
    135       1.5     lukem 	return (0);
    136       1.1       cgd }
    137       1.1       cgd 
    138       1.5     lukem void
    139      1.17       jmc leave(void)
    140       1.5     lukem {
    141       1.1       cgd 	if (tflag)
    142       1.1       cgd 		clear();
    143       1.1       cgd 	else
    144       1.5     lukem 		writec('\n');
    145       1.4   mycroft 	fixtty(&old);
    146      1.16       jsm 	execl(EXEC, "backgammon", "-n", args[0]?args:0, (char *) 0);
    147       1.5     lukem 	writel("Help! Backgammon program is missing\007!!\n");
    148      1.13       wiz 	exit(1);
    149       1.1       cgd }
    150