diff options
author | Paul Janzen <pjanzen@cvs.openbsd.org> | 2001-06-23 23:50:07 +0000 |
---|---|---|
committer | Paul Janzen <pjanzen@cvs.openbsd.org> | 2001-06-23 23:50:07 +0000 |
commit | 4b888f757520208f6eb16c642891507450aea872 (patch) | |
tree | 88ad863f2489148ec58400d846f1b340b0fc7de3 /games/backgammon | |
parent | 0ffd7e0316588c2558ff550c5d0e25f5a8b2ea65 (diff) |
termios -> curses
Diffstat (limited to 'games/backgammon')
-rw-r--r-- | games/backgammon/backgammon/backgammon.6 | 31 | ||||
-rw-r--r-- | games/backgammon/backgammon/backlocal.h | 4 | ||||
-rw-r--r-- | games/backgammon/backgammon/extra.c | 26 | ||||
-rw-r--r-- | games/backgammon/backgammon/main.c | 176 | ||||
-rw-r--r-- | games/backgammon/backgammon/move.c | 45 | ||||
-rw-r--r-- | games/backgammon/backgammon/text.c | 19 | ||||
-rw-r--r-- | games/backgammon/common_source/back.h | 25 | ||||
-rw-r--r-- | games/backgammon/common_source/board.c | 35 | ||||
-rw-r--r-- | games/backgammon/common_source/check.c | 58 | ||||
-rw-r--r-- | games/backgammon/common_source/fancy.c | 511 | ||||
-rw-r--r-- | games/backgammon/common_source/init.c | 11 | ||||
-rw-r--r-- | games/backgammon/common_source/one.c | 18 | ||||
-rw-r--r-- | games/backgammon/common_source/save.c | 73 | ||||
-rw-r--r-- | games/backgammon/common_source/subs.c | 262 | ||||
-rw-r--r-- | games/backgammon/common_source/table.c | 122 | ||||
-rw-r--r-- | games/backgammon/teachgammon/teach.c | 30 | ||||
-rw-r--r-- | games/backgammon/teachgammon/ttext1.c | 6 | ||||
-rw-r--r-- | games/backgammon/teachgammon/ttext2.c | 36 | ||||
-rw-r--r-- | games/backgammon/teachgammon/tutor.c | 58 |
19 files changed, 369 insertions, 1177 deletions
diff --git a/games/backgammon/backgammon/backgammon.6 b/games/backgammon/backgammon/backgammon.6 index ba6313ef845..91daf7983f4 100644 --- a/games/backgammon/backgammon/backgammon.6 +++ b/games/backgammon/backgammon/backgammon.6 @@ -1,4 +1,4 @@ -.\" $OpenBSD: backgammon.6,v 1.6 2000/04/21 03:10:24 pjanzen Exp $ +.\" $OpenBSD: backgammon.6,v 1.7 2001/06/23 23:49:53 pjanzen Exp $ .\" .\" Copyright (c) 1980, 1993 .\" The Regents of the University of California. All rights reserved. @@ -43,8 +43,6 @@ .Nm backgammon .Op Fl .Op Fl nrwb -.Op Fl p Ar [r | w | b] -.Op Fl t Ar term .Op Fl s Ar file .Sh DESCRIPTION This program lets you play backgammon against the computer @@ -79,15 +77,6 @@ player is red (implies n) player is white (implies n) .It Fl b two players, red and white (implies n) -.It Fl p Ar r -print the board before red's turn -.It Fl p Ar w -print the board before white's turn -.It Fl p Ar b -print the board before any turn -.It Fl t Ar term -terminal is type -.Ar term .It Fl s Ar file recover previously saved game from .Ar file . @@ -98,24 +87,6 @@ An argument of .Fl h gets a description of possible arguments. .Pp -If -.Ar term -has capabilities for direct cursor movement (see -.Xr terminfo 5 ) -.Nm -.Dq fixes -the board after each move, -so the board does not need to be reprinted -unless the screen suffers some horrendous malady. -Also, any -.Fl p -option will be ignored. -(The -.Fl t -option is not necessary unless the terminal type does not match -the entry in the -.Xr terminfo 5 -data base.) .Sh QUICK REFERENCE When the program prompts by typing only your color, type a space or carriage return to roll, or diff --git a/games/backgammon/backgammon/backlocal.h b/games/backgammon/backgammon/backlocal.h index f69fc47b156..4d800a01337 100644 --- a/games/backgammon/backgammon/backlocal.h +++ b/games/backgammon/backgammon/backlocal.h @@ -1,4 +1,4 @@ -/* $OpenBSD: backlocal.h,v 1.1 1998/03/19 11:13:05 pjanzen Exp $ */ +/* $OpenBSD: backlocal.h,v 1.2 2001/06/23 23:49:53 pjanzen Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -41,7 +41,7 @@ int dblgood __P((void)); int eval __P((void)); int freemen __P((int)); void movcmp __P((void)); -void move __P((int)); +void domove __P((int)); int movegood __P((void)); void pickmove __P((void)); int trapped __P((int, int)); diff --git a/games/backgammon/backgammon/extra.c b/games/backgammon/backgammon/extra.c index 97314f88a21..53388d8e854 100644 --- a/games/backgammon/backgammon/extra.c +++ b/games/backgammon/backgammon/extra.c @@ -1,4 +1,4 @@ -/* $OpenBSD: extra.c,v 1.2 1998/03/19 11:13:06 pjanzen Exp $ */ +/* $OpenBSD: extra.c,v 1.3 2001/06/23 23:49:53 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)extra.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: extra.c,v 1.2 1998/03/19 11:13:06 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: extra.c,v 1.3 2001/06/23 23:49:53 pjanzen Exp $"; #endif #endif /* not lint */ @@ -55,34 +55,31 @@ dble() int resp; /* response to y/n */ for (;;) { - writel(" doubles."); /* indicate double */ + addstr(" doubles."); /* indicate double */ if (cturn == -pnum) { /* see if computer accepts */ if (dblgood()) { /* guess not */ - writel(" Declined.\n"); + addstr(" Declined.\n"); nexturn(); cturn *= -2; /* indicate loss */ return; } else {/* computer accepts */ - writel(" Accepted.\n"); + addstr(" Accepted.\n"); gvalue *= 2; /* double game value */ dlast = cturn; - if (tflag) - gwrite(); + gwrite(); return; } } /* ask if player accepts */ - writel(" Does "); - writel(cturn == 1 ? color[2] : color[3]); - writel(" accept?"); + printw(" Does %s accept?", cturn == 1 ? color[2] : color[3]); /* get response from yorn; a "2" means he said "p" to print board. */ if ((resp = yorn ('r')) == 2) { - writel(" Reprint.\n"); - buflush(); + addstr(" Reprint.\n"); + moveplayers(); wrboard(); - writel(*Colorptr); + addstr(*Colorptr); continue; } /* check response */ @@ -90,8 +87,7 @@ dble() /* accepted */ gvalue *= 2; dlast = cturn; - if (tflag) - gwrite(); + gwrite(); return; } nexturn(); /* declined */ diff --git a/games/backgammon/backgammon/main.c b/games/backgammon/backgammon/main.c index 8b9826dc1ba..a0ecfd86e9c 100644 --- a/games/backgammon/backgammon/main.c +++ b/games/backgammon/backgammon/main.c @@ -1,4 +1,4 @@ -/* $OpenBSD: main.c,v 1.8 2001/02/18 03:32:49 pjanzen Exp $ */ +/* $OpenBSD: main.c,v 1.9 2001/06/23 23:49:54 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -43,10 +43,11 @@ static char copyright[] = #if 0 static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: main.c,v 1.8 2001/02/18 03:32:49 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: main.c,v 1.9 2001/06/23 23:49:54 pjanzen Exp $"; #endif #endif /* not lint */ +#include <err.h> #include <time.h> #include "back.h" #include "backlocal.h" @@ -54,7 +55,7 @@ static char rcsid[] = "$OpenBSD: main.c,v 1.8 2001/02/18 03:32:49 pjanzen Exp $" #define MVPAUSE 5 /* time to sleep when stuck */ /* #define MAXUSERS 35 */ /* maximum number of users */ -extern const char *const instr[]; /* text of instructions */ +extern const char *const instruct[]; /* text of instructions */ const char *const helpm[] = { /* help message */ "Enter a space or newline to roll, or", @@ -110,42 +111,24 @@ main (argc,argv) setegid(getgid()); setgid(getgid()); - /* initialization */ - bflag = 2; /* default no board */ signal(SIGINT, getout); /* trap interrupts */ - if (tcgetattr(0, &old) == -1) /* get old tty mode */ - errexit("backgammon(gtty)"); - noech = old; - noech.c_lflag &= ~ECHO; - traw = noech; - traw.c_lflag &= ~ICANON; /* set up modes */ + initcurses(); /* check user count */ #if 0 if (ucount() > MAXUSERS) { - writel(user1a); - wrint(MAXUSERS); - writel(user1b); + printw("%s%d%s", user1a, MAXUSERS, user1b); getout(0); } #endif - /* get terminal capabilities, and decide if it can cursor address */ - tflag = getcaps(getenv("TERM")); /* use whole screen for text */ - if (tflag) - begscr = 0; - t = time(0); + begscr = 0; + t = time(NULL); srandom(t); /* 'random' seed */ getarg(argc, argv); args[acnt] = '\0'; - if (tflag) { /* clear screen */ - noech.c_oflag &= ~(ONLCR | OXTABS); - traw.c_oflag &= ~(ONLCR | OXTABS); - clear(); - } - fixtty(&traw); /* go into raw mode */ /* check if restored game and save flag for later */ if ((rfl = rflag)) { @@ -157,27 +140,24 @@ main (argc,argv) rscore = wscore = 0; /* zero score */ if (aflag) { /* print rules */ - writel(rules); + addstr(rules); if (yorn(0)) { - fixtty(&old); /* restore tty */ + endwin(); execl(TEACH, "teachgammon", args, 0); - tflag = 0; /* error! */ - writel(noteach); - exit(1); + err(1, "%s", noteach); } else {/* if not rules, then instructions */ - writel(need); + addstr(need); if (yorn(0)) { /* print instructions */ clear(); - text(instr); + text(instruct); } } } init(); /* initialize board */ if (pnum == 2) {/* ask for color(s) */ - writec('\n'); - writel(askcol); + printw("\n%s", askcol); while (pnum == 2) { c = readc(); switch (c) { @@ -196,28 +176,22 @@ main (argc,argv) case 'P': /* Control the dice */ iroll = 1; - writec('\n'); - writel("Dice controlled!"); - writec('\n'); - writel(askcol); + addstr("\nDice controlled!\n"); + addstr(askcol); break; default: /* error */ - writec('\007'); + beep(); } } } wrboard(); /* print board */ - if (tflag) - curmove(18, 0); - else - writec('\n'); + move(18, 0); } /* limit text to bottom of screen */ - if (tflag) - begscr = 17; + begscr = 17; for (;;) { /* begin game! */ /* initial roll if needed */ @@ -226,23 +200,19 @@ main (argc,argv) /* perform ritual of first roll */ if (!rflag) { - if (tflag) - curmove(17, 0); + move(17, 0); while (D0 == D1) /* no doubles */ roll(); /* print rolls */ - writel(rollr); - writec(D0 + '0'); - writel(rollw); - writec(D1 + '0'); + printw("%s%d%s%d", rollr, D0, rollw, D1); /* winner goes first */ if (D0 > D1) { - writel(rstart); + addstr(rstart); cturn = 1; } else { - writel(wstart); + addstr(wstart); cturn = -1; } } @@ -273,21 +243,18 @@ main (argc,argv) /* do first move (special case) */ if (!(rflag && raflag)) { if (cturn == pnum) /* computer's move */ - move(0); + domove(0); else { /* player's move */ mvlim = movallow(); /* reprint roll */ - if (tflag) - curmove(cturn == -1 ? 18 : 19, 0); + move(cturn == -1 ? 18 : 19, 0); proll(); getmove(); /* get player's move */ } } - if (tflag) { - curmove(17, 0); - cline(); - begscr = 18; - } + move(17, 0); + clrtoeol(); + begscr = 18; /* no longer any difference between normal and recovered game. */ rflag = 0; @@ -295,16 +262,11 @@ main (argc,argv) while (cturn == 1 || cturn == -1) { /* board maintainence */ - if (tflag) - refresh(); /* fix board */ - else - /* redo board if -p */ - if (cturn == bflag || bflag == 0) - wrboard(); + moveplayers(); /* fix board */ /* do computer's move */ if (cturn == pnum) { - move(1); + domove(1); /* see if double refused */ if (cturn == -2 || cturn == 2) @@ -321,16 +283,15 @@ main (argc,argv) /* (player's move) */ /* clean screen if safe */ - if (tflag && hflag) { - curmove(20, 0); - clend(); + if (hflag) { + move(20, 0); + clrtobot(); hflag = 1; } /* if allowed, give him a chance to double */ if (dlast != cturn && gvalue < 64) { - if (tflag) - curmove(cturn == -1 ? 18: 19, 0); - writel(*Colorptr); + move(cturn == -1 ? 18: 19, 0); + addstr(*Colorptr); c = readc(); /* character cases */ @@ -356,24 +317,16 @@ main (argc,argv) case ' ': /* roll */ case '\n': roll(); - writel(" rolls "); - writec(D0 + '0'); - writec(' '); - writec(D1 + '0'); - writel(". "); + printw(" rolls %d %d. ", D0, D1); /* see if he can move */ if ((mvlim = movallow()) == 0) { /* can't move */ - writel(toobad1); - writel(*colorptr); - writel(unable); - if (tflag) { - if (pnum) { - buflush(); - sleep(MVPAUSE); - } + printw("%s%s%s", toobad1, *colorptr, unable); + if (pnum) { + moveplayers(); + sleep(MVPAUSE); } nexturn(); break; @@ -388,15 +341,9 @@ main (argc,argv) default: /* invalid character */ /* print help message */ - if (tflag) - curmove(20, 0); - else - writec('\n'); + move(20, 0); text(helpm); - if (tflag) - curmove(cturn == -1 ? 18 : 19, 0); - else - writec('\n'); + move(cturn == -1 ? 18 : 19, 0); /* don't erase */ hflag = 0; @@ -405,18 +352,15 @@ main (argc,argv) /* print roll */ roll(); - if (tflag) - curmove(cturn == -1 ? 18: 19, 0); + move(cturn == -1 ? 18: 19, 0); proll(); /* can he move? */ if ((mvlim = movallow()) == 0) { /* he can't */ - writel(toobad2); - writel(*colorptr); - writel(cantmv); - buflush(); + printw("%s%s%s", toobad2, *colorptr, cantmv); + moveplayers(); sleep(MVPAUSE); nexturn(); continue; @@ -434,8 +378,7 @@ main (argc,argv) cturn /= -2; /* final board pos. */ - if (tflag) - refresh(); + moveplayers(); /* backgammon? */ mflag = 0; @@ -445,31 +388,26 @@ main (argc,argv) mflag++; /* compute game value */ - if (tflag) - curmove(20, 0); + move(20, 0); if (*offopp == 15) { if (mflag) { - writel(bgammon); + addstr(bgammon); gvalue *= 3; } else if (*offptr <= 0) { - writel(gammon); + addstr(gammon); gvalue *= 2; } } /* report situation */ if (cturn == -1) { - writel("Red wins "); + addstr("Red wins "); rscore += gvalue; } else { - writel("White wins "); + addstr("White wins "); wscore += gvalue; } - wrint(gvalue); - writel(" point"); - if (gvalue > 1) - writec('s'); - writel(".\n"); + printw("%d point%s.\n", gvalue, (gvalue > 1) ? "s":""); /* write score */ wrscore(); @@ -477,22 +415,20 @@ main (argc,argv) /* check user count */ #if 0 if (ucount() > MAXUSERS) { - writel (user2a); - wrint (MAXUSERS); - writel (user2b); + printw("%s%d%s", user2a, MAXUSERS, user2b); rfl = 1; break; } #endif /* see if he wants another game */ - writel(again); + addstr(again); if ((i = yorn('S')) == 0) break; init(); if (i == 2) { - writel(" Save.\n"); + addstr(" Save.\n"); cturn = 0; save(0); } @@ -502,7 +438,7 @@ main (argc,argv) /* give him a chance to save if game was recovered */ if (rfl && cturn) { - writel(svpromt); + addstr(svpromt); if (yorn(0)) { /* re-initialize for recovery */ init(); diff --git a/games/backgammon/backgammon/move.c b/games/backgammon/backgammon/move.c index 4d8d4a28c47..3f458a4cfa7 100644 --- a/games/backgammon/backgammon/move.c +++ b/games/backgammon/backgammon/move.c @@ -1,4 +1,4 @@ -/* $OpenBSD: move.c,v 1.3 2001/02/18 04:16:36 ericj Exp $ */ +/* $OpenBSD: move.c,v 1.4 2001/06/23 23:49:54 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)move.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: move.c,v 1.3 2001/02/18 04:16:36 ericj Exp $"; +static char rcsid[] = "$OpenBSD: move.c,v 1.4 2001/06/23 23:49:54 pjanzen Exp $"; #endif #endif /* not lint */ @@ -95,7 +95,7 @@ static struct BOARD *nextfree __P((void)); void -move(okay) +domove(okay) int okay; /* zero if first move */ { int i; /* index */ @@ -103,7 +103,7 @@ move(okay) if (okay) { /* see if comp should double */ if (gvalue < 64 && dlast != cturn && dblgood()) { - writel(*Colorptr); + addstr(*Colorptr); dble(); /* double */ /* return if declined */ if (cturn != 1 && cturn != -1) @@ -124,24 +124,15 @@ move(okay) race = 1; /* print roll */ - if (tflag) - curmove(cturn == -1 ? 18 : 19, 0); - writel(*Colorptr); - writel(" rolls "); - writec(D0 + '0'); - writec(' '); - writec(D1 + '0'); - /* make tty interruptable while thinking */ - if (tflag) - cline(); - fixtty(&noech); + move(cturn == -1 ? 18 : 19, 0); + printw("%s rolls %d %d", *Colorptr, D0, D1); + clrtoeol(); /* find out how many moves */ mvlim = movallow(); if (mvlim == 0) { - writel(" but cannot use it.\n"); + addstr(" but cannot use it.\n"); nexturn(); - fixtty(&traw); return; } /* initialize */ @@ -153,32 +144,26 @@ move(okay) pickmove(); /* print move */ - writel(" and moves "); + addstr(" and moves "); for (i = 0; i < mvlim; i++) { if (i > 0) - writec(','); - wrint(p[i] = cp[i]); - writec('-'); - wrint(g[i] = cg[i]); + addch(','); + printw("%d-%d", p[i] = cp[i], g[i] = cg[i]); makmove(i); } - writec('.'); + addch('.'); /* print blots hit */ - if (tflag) - curmove(20, 0); - else - writec('\n'); + move(20, 0); for (i = 0; i < mvlim; i++) if (h[i]) wrhit(g[i]); /* get ready for next move */ nexturn(); if (!okay) { - buflush(); + refresh(); sleep(3); } - fixtty(&traw); /* no more tty interrupt */ } void @@ -353,7 +338,7 @@ nextfree() if (freeq == 0) { new = (struct BOARD *)calloc (1, sizeof(struct BOARD)); if (new == 0) { - writel("\nOut of memory\n"); + addstr("\nOut of memory\n"); getout(0); } } else { diff --git a/games/backgammon/backgammon/text.c b/games/backgammon/backgammon/text.c index aff710442f7..49f35823980 100644 --- a/games/backgammon/backgammon/text.c +++ b/games/backgammon/backgammon/text.c @@ -1,4 +1,4 @@ -/* $OpenBSD: text.c,v 1.4 2001/02/18 04:16:36 ericj Exp $ */ +/* $OpenBSD: text.c,v 1.5 2001/06/23 23:49:54 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -37,13 +37,13 @@ #if 0 static char sccsid[] = "@(#)text.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: text.c,v 1.4 2001/02/18 04:16:36 ericj Exp $"; +static char rcsid[] = "$OpenBSD: text.c,v 1.5 2001/06/23 23:49:54 pjanzen Exp $"; #endif #endif /* not lint */ #include "back.h" -const char *const instr[] = { +const char *const instruct[] = { " This program reacts to keystrokes immediately, without waiting", "for a newline. Consequently, special characters such as RUBOUT", "and ESC will not perform their special functions during most of", @@ -111,23 +111,18 @@ text(t) int i; const char *s, *a; - fixtty(&noech); while (*t != 0) { s = a = *t; for (i = 0; *a != '\0'; i--) a++; - if (i) { - writel(s); - writec('\n'); - } else { - writel("-->"); - fixtty(&traw); + if (i) + printw("%s\n", s); + else { + addstr("-->"); while ((i = readc()) != ' ' && i != '\n'); - fixtty(&noech); clear(); } t++; } - fixtty(&traw); return(0); } diff --git a/games/backgammon/common_source/back.h b/games/backgammon/common_source/back.h index 2c78d5b7fe9..ce2151b17c6 100644 --- a/games/backgammon/common_source/back.h +++ b/games/backgammon/common_source/back.h @@ -1,4 +1,4 @@ -/* $OpenBSD: back.h,v 1.5 2001/02/18 03:32:52 pjanzen Exp $ */ +/* $OpenBSD: back.h,v 1.6 2001/06/23 23:50:02 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -38,12 +38,12 @@ #include <sys/types.h> #include <sys/uio.h> +#include <curses.h> #include <fcntl.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <termios.h> #include <term.h> #include <unistd.h> @@ -80,13 +80,11 @@ extern int pnum; /* color of player: extern char args[100]; /* args passed to teachgammon and back */ extern int acnt; /* length of args */ extern int aflag; /* flag to ask for rules or instructions */ -extern int bflag; /* flag for automatic board printing */ extern int cflag; /* case conversion flag */ extern int hflag; /* flag for cleaning screen */ extern int mflag; /* backgammon flag */ extern int raflag; /* 'roll again' flag for recovered game */ extern int rflag; /* recovered game flag */ -extern int tflag; /* cursor addressing flag */ extern int rfl; /* saved value of rflag */ extern int iroll; /* special flag for inputting rolls */ extern int board[26]; /* board: negative values are white, @@ -130,45 +128,34 @@ extern const char *const *Colorptr; /* color of current player, * capitalized */ extern int colen; /* length of color of current player */ -extern struct termios old, noech, traw;/* original tty status */ - -extern int curr; /* row position of cursor */ -extern int curc; /* column position of cursor */ extern int begscr; /* 'beginning' of screen (not including board) */ int addbuf __P((int)); void backone __P((int)); void bsect __P((int, int, int, int)); -void buflush __P((void)); int canhit __P((int, int)); int checkd __P((int)); int checkmove __P((int)); -void clear __P((void)); -void clend __P((void)); -void cline __P((void)); int count __P((void)); -void curmove __P((int, int)); int dotable __P((char, int)); void errexit __P((const char *)); -void fancyc __P((int)); void fboard __P((void)); void fixcol __P((int, int, int, int, int)); void fixpos __P((int, int, int, int, int)); -void fixtty __P((struct termios *)); void getarg __P((int, char **)); -int getcaps __P((const char *)); void getmove __P((void)); void getout __P((int)); /* function to exit backgammon cleanly */ void gwrite __P((void)); void init __P((void)); +void initcurses __P((void)); int last __P((void)); int makmove __P((int)); int movallow __P((void)); void movback __P((int)); +void moveplayers __P((void)); void moverr __P((int)); int movokay __P((int)); -void newpos __P((void)); void nexturn __P((void)); void norec __P((const char *)); void odds __P((int, int, int)); @@ -176,7 +163,6 @@ void proll __P((void)); int quit __P((void)); int readc __P((void)); void recover __P((const char *)); -void refresh __P((void)); void roll __P((void)); int rsetbrd __P((void)); void save __P((int)); @@ -184,8 +170,5 @@ int text __P((const char *const *)); void wrboard __P((void)); void wrbsub __P((void)); void wrhit __P((int)); -void wrint __P((int)); -void writec __P((char)); -void writel __P((const char *)); void wrscore __P((void)); int yorn __P((char)); diff --git a/games/backgammon/common_source/board.c b/games/backgammon/common_source/board.c index 1c6dff60eec..fa5dfe7c3ca 100644 --- a/games/backgammon/common_source/board.c +++ b/games/backgammon/common_source/board.c @@ -1,4 +1,4 @@ -/* $OpenBSD: board.c,v 1.4 2001/02/18 03:32:52 pjanzen Exp $ */ +/* $OpenBSD: board.c,v 1.5 2001/06/23 23:50:03 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)board.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: board.c,v 1.4 2001/02/18 03:32:52 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: board.c,v 1.5 2001/06/23 23:50:03 pjanzen Exp $"; #endif #endif /* not lint */ @@ -55,15 +55,12 @@ wrboard() static const char sv[] = "| | | | \n"; - fixtty(&noech); clear(); - if (tflag) { - fboard(); - goto lastline; - } - writel("_____________________________________________________\n"); - writel(bl); + fboard(); + goto lastline; + addstr("_____________________________________________________\n"); + addstr(bl); strcpy(ln, bl); for (j = 1; j < 50; j += 4) { k = j / 4 + (j > 24 ? 12 : 13); @@ -72,7 +69,7 @@ wrboard() if (j == 21) j += 4; } - writel(ln); + addstr(ln); for (i = 0; i < 5; i++) { strcpy(ln, sv); for (j = 1; j < 50; j += 4) { @@ -102,13 +99,13 @@ wrboard() } ln[l++] = '\n'; ln[l] = '\0'; - writel(ln); + addstr(ln); } strcpy(ln, bl); ln[25] = 'B'; ln[26] = 'A'; ln[27] = 'R'; - writel(ln); + addstr(ln); strcpy(ln, sv); for (i = 4; i > -1; i--) { for (j = 1; j < 50; j += 4) { @@ -138,7 +135,7 @@ wrboard() } ln[l++] = '\n'; ln[l] = '\0'; - writel(ln); + addstr(ln); } strcpy(ln, bl); for (j = 1; j < 50; j += 4) { @@ -149,18 +146,12 @@ wrboard() if (j == 21) j += 4; } - writel(ln); - writel("|_______________________|___|_______________________|\n"); + addstr(ln); + addstr("|_______________________|___|_______________________|\n"); lastline: gwrite(); - if (tflag) - curmove(18, 0); - else { - writec('\n'); - writec('\n'); - } - fixtty(&traw); + move(18, 0); } void diff --git a/games/backgammon/common_source/check.c b/games/backgammon/common_source/check.c index a5bec6c6396..164c348d7c0 100644 --- a/games/backgammon/common_source/check.c +++ b/games/backgammon/common_source/check.c @@ -1,4 +1,4 @@ -/* $OpenBSD: check.c,v 1.3 1999/07/31 21:57:40 pjanzen Exp $ */ +/* $OpenBSD: check.c,v 1.4 2001/06/23 23:50:03 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)check.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: check.c,v 1.3 1999/07/31 21:57:40 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: check.c,v 1.4 2001/06/23 23:50:03 pjanzen Exp $"; #endif #endif /* not lint */ @@ -55,41 +55,26 @@ getmove() switch (i) { case -1: if (movokay(mvlim)) { - if (tflag) - curmove(20, 0); - else - writec('\n'); + move(20, 0); for (i = 0; i < mvlim; i++) if (h[i]) wrhit(g[i]); nexturn(); if (*offopp == 15) cturn *= -2; - if (tflag && pnum) - bflag = pnum; return; } case -4: case 0: - if (tflag) - refresh(); + refresh(); if (i != 0 && i != -4) break; - if (tflag) - curmove(20, 0); - else - writec('\n'); - writel(*Colorptr); + mvaddstr(20, 0, *Colorptr); if (i == -4) - writel(" must make "); + addstr(" must make "); else - writel(" can only make "); - writec(mvlim + '0'); - writel(" move"); - if (mvlim > 1) - writec('s'); - writec('.'); - writec('\n'); + addstr(" can only make "); + printw("%d move%s.\n", mvlim, mvlim > 1 ? "s":""); break; case -3: @@ -97,13 +82,9 @@ getmove() return; } - if (!tflag) - proll(); - else { - curmove(cturn == -1 ? 18 : 19, 39); - cline(); - c = -1; - } + move(cturn == -1 ? 18 : 19, 39); + clrtoeol(); + c = -1; } } @@ -119,39 +100,36 @@ movokay(mv) for (i = 0; i < mv; i++) { if (p[i] == g[i]) { moverr(i); - curmove(20, 0); - writel("Attempt to move to same location.\n"); + mvaddstr(20, 0, "Attempt to move to same location.\n"); return(0); } if (cturn * (g[i] - p[i]) < 0) { moverr(i); - curmove(20, 0); - writel("Backwards move.\n"); + mvaddstr(20, 0, "Backwards move.\n"); return(0); } if (abs(board[bar]) && p[i] != bar) { moverr(i); - curmove(20, 0); - writel("Men still on bar.\n"); + mvaddstr(20, 0, "Men still on bar.\n"); return(0); } if ((m = makmove(i))) { moverr(i); switch (m) { case 1: - writel("Move not rolled.\n"); + addstr("Move not rolled.\n"); break; case 2: - writel("Bad starting position.\n"); + addstr("Bad starting position.\n"); break; case 3: - writel("Destination occupied.\n"); + addstr("Destination occupied.\n"); break; case 4: - writel("Can't remove men yet.\n"); + addstr("Can't remove men yet.\n"); } return(0); } diff --git a/games/backgammon/common_source/fancy.c b/games/backgammon/common_source/fancy.c index 315d39dd643..f4a391e35da 100644 --- a/games/backgammon/common_source/fancy.c +++ b/games/backgammon/common_source/fancy.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fancy.c,v 1.9 2000/07/23 21:35:00 pjanzen Exp $ */ +/* $OpenBSD: fancy.c,v 1.10 2001/06/23 23:50:03 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -37,141 +37,81 @@ #if 0 static char sccsid[] = "@(#)fancy.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: fancy.c,v 1.9 2000/07/23 21:35:00 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: fancy.c,v 1.10 2001/06/23 23:50:03 pjanzen Exp $"; #endif #endif /* not lint */ +#include <err.h> #include "back.h" -char PC; /* padding character */ -char *BC; /* backspace sequence */ -char *CD; /* clear to end of screen sequence */ -char *CE; /* clear to end of line sequence */ -char *CL; /* clear screen sequence */ -char *CM; /* cursor movement instructions */ -char *HO; /* home cursor sequence */ -char *ND; /* forward cursor sequence */ -char *UP; /* up cursor sequence */ - -int lHO; /* length of HO */ -int lBC; /* length of BC */ -int lND; /* length of ND */ -int lUP; /* length of UP */ -int CO; /* number of columns */ -int LI; /* number of lines */ -int *linect; /* array of lengths of lines on screen - (the actual screen is not stored) */ - -/* two letter codes */ -char *tcap[] = {"le", "cd", "ce", "cl", "cm", "ho", "nd", "up", NULL}; -/* corresponding strings */ -char **tstr[] = {&BC, &CD, &CE, &CL, &CM, &HO, &ND, &UP}; - -int buffnum; /* pointer to output buffer */ - -char tbuf[1024]; /* buffer for decoded terminfo entries */ - int oldb[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - -int oldr; -int oldw; - -/* "real" cursor positions, so it knows when to reposition. - * These are -1 if curr and curc are accurate */ -int realr; -int realc; +int oldr, oldw; void fboard() { - int i, j, l; + int i, j, k, l; - curmove(0, 0); /* do top line */ + /* could use box() or wborder() instead of the following */ + move(0, 0); /* do top line */ for (i = 0; i < 53; i++) - fancyc('_'); + addch('_'); - curmove(15, 0); /* do botttom line */ + move(15, 0); /* do bottom line */ for (i = 0; i < 53; i++) - fancyc('_'); + addch('_'); l = 1; /* do vertical lines */ for (i = 52; i > -1; i -= 28) { - curmove((l == 1 ? 1 : 15), i); - fancyc('|'); - for (j = 0; j < 14; j++) { - curmove(curr + l, curc - 1); - fancyc('|'); - } + k = (l == 1 ? 1 : 15); + mvaddch(k, i, '|'); + for (j = 0; j < 14; j++) + mvaddch(k += l, i, '|'); if (i == 24) i += 32; l = -l; /* alternate directions */ } - curmove(2, 1); /* label positions 13-18 */ - for (i = 13; i < 18; i++) { - fancyc('1'); - fancyc((i % 10) + '0'); - curmove(curr, curc + 2); - } - fancyc('1'); - fancyc('8'); - - curmove(2, 29); /* label positions 19-24 */ - fancyc('1'); - fancyc('9'); - for (i = 20; i < 25; i++) { - curmove(curr, curc + 2); - fancyc('2'); - fancyc((i % 10) + '0'); - } - - curmove(14, 1); /* label positions 12-7 */ - fancyc('1'); - fancyc('2'); - for (i = 11; i > 6; i--) { - curmove(curr, curc + 2); - fancyc(i > 9 ? '1' : ' '); - fancyc((i % 10) + '0'); - } - - curmove(14, 30); /* label positions 6-1 */ - fancyc('6'); - for (i = 5; i > 0; i--) { - curmove(curr, curc + 3); - fancyc(i + '0'); - } - - for (i = 12; i > 6; i--)/* print positions 12-7 */ + /* label positions */ + for (i = 13; i < 19; i++) + mvprintw(2, 1 + (i - 13) * 4, "%d", i); + for (i = 19; i < 25; i++) + mvprintw(2, 29 + (i - 19) * 4, "%d", i); + for (i = 12; i > 6; i--) + mvprintw(14, 1 + (12 - i) * 4, "%2d", i); + for (i = 6; i > 0; i--) + mvprintw(14, 30 + (6 - i) * 4, "%d", i); + + /* print positions 12-7 */ + for (i = 12; i > 6; i--) if (board[i]) bsect(board[i], 13, 1 + 4 * (12 - i), -1); - - if (board[0]) /* print red men on bar */ + /* print red men on bar */ + if (board[0]) bsect(board[0], 13, 25, -1); - - for (i = 6; i > 0; i--) /* print positions 6-1 */ + /* print positions 6-1 */ + for (i = 6; i > 0; i--) if (board[i]) bsect(board[i], 13, 29 + 4 * (6 - i), -1); - - l = (off[1] < 0 ? off[1] + 15 : off[1]); /* print white's home */ + /* print white's home */ + l = (off[1] < 0 ? off[1] + 15 : off[1]); bsect(l, 3, 54, 1); - curmove(8, 25); /* print the word BAR */ - fancyc('B'); - fancyc('A'); - fancyc('R'); + mvaddstr(8, 25, "BAR"); - for (i = 13; i < 19; i++) /* print positions 13-18 */ + /* print positions 13-18 */ + for (i = 13; i < 19; i++) if (board[i]) bsect(board[i], 3, 1 + 4 * (i - 13), 1); - - if (board[25]) /* print white's men on bar */ + /* print white's men on bar */ + if (board[25]) bsect(board[25], 3, 25, 1); - - for (i = 19; i < 25; i++) /* print positions 19-24 */ + /* print positions 19-24 */ + for (i = 19; i < 25; i++) if (board[i]) bsect(board[i], 3, 29 + 4 * (i - 19), 1); - - l = (off[0] < 0 ? off[0] + 15 : off[0]); /* print red's home */ + /* print red's home */ + l = (off[0] < 0 ? off[0] + 15 : off[0]); bsect(-l, 13, 54, -1); for (i = 0; i < 26; i++)/* save board position for refresh later */ @@ -206,15 +146,15 @@ bsect(b, rpos, cpos, cnext) pc = (b > 0 ? 'r' : 'w'); if (n < 6 && cpos < 54) /* position cursor at start */ - curmove(rpos, cpos + 1); + move(rpos, cpos + 1); else - curmove(rpos, cpos); + move(rpos, cpos); for (j = 0; j < 5; j++) { /* print position row by row */ for (k = 0; k < 15; k += 5) /* print men */ if (n > j + k) - fancyc(pc); + addch(pc); if (j < 4) { /* figure how far to back up for next row */ if (n < 6) { /* stop if none left */ @@ -223,13 +163,12 @@ bsect(b, rpos, cpos, cnext) bct = 1; /* single column */ } else { if (n < 11) { /* two columns */ - if (cpos == 54) { /* home pos */ + if (cpos >= 54) { /* home pos */ if (j + 5 >= n) bct = 1; else bct = 2; - } - if (cpos < 54) { /* not home */ + } else { /* not home */ if (j + 6 >= n) bct = 1; else @@ -242,19 +181,18 @@ bsect(b, rpos, cpos, cnext) bct = 3; } } - curmove(curr + cnext, curc - bct); /* reposition cursor */ + getyx(stdscr, rpos, cpos); + move(rpos + cnext, cpos - bct); } } } void -refresh() +moveplayers() { - int i, r, c; - - r = curr; /* save current position */ - c = curc; + int i, r, c; + getyx(stdscr, r, c); for (i = 12; i > 6; i--)/* fix positions 12-7 */ if (board[i] != oldb[i]) { fixpos(oldb[i], board[i], 13, 1 + (12 - i) * 4, -1); @@ -293,10 +231,10 @@ refresh() fixpos(oldr, i, 3, 54, 1); oldr = i; } - curmove(r, c); /* return to saved position */ - newpos(); - buflush(); + move(r, c); /* return to saved position */ + refresh(); } + void fixpos(old, new, r, c, inc) @@ -375,339 +313,26 @@ fixcol(r, c, l, ch, inc) { int i; - curmove(r, c); - fancyc(ch); + mvaddch(r, c, ch); for (i = 1; i < l; i++) { - curmove(curr + inc, curc - 1); - fancyc(ch); + r += inc; + mvaddch(r, c, ch); } } -void -curmove(r, c) - int r, c; -{ - if (curr == r && curc == c) - return; - if (realr == -1) { - realr = curr; - realc = curc; - } - curr = r; - curc = c; -} void -newpos() +initcurses() { - int r; /* destination row */ - int c; /* destination column */ - int mode = -1; /* mode of movement */ - - int count = 1000; /* character count */ - int i; /* index */ - int n; /* temporary variable */ - char *m; /* string containing CM movement */ - - if (realr == -1) /* see if already there */ - return; - - r = curr; /* set current and dest. positions */ - c = curc; - curr = realr; - curc = realc; - - /* double check position */ - if (curr == r && curc == c) { - realr = realc = -1; - return; - } - if (CM) { /* try CM to get there */ - mode = 0; - m = (char *)tgoto(CM, c, r); - count = strlen(m); - } - /* try HO and local movement */ - if (HO && (n = r + c * lND + lHO) < count) { - mode = 1; - count = n; - } - /* try various LF combinations */ - if (r >= curr) { - /* CR, LF, and ND */ - if ((n = (r - curr) + c * lND + 1) < count) { - mode = 2; - count = n; - } - /* LF, ND */ - if (c >= curc && (n = (r - curr) + (c - curc) * lND) < count) { - mode = 3; - count = n; - } - /* LF, BS */ - if (c < curc && (n = (r - curr) + (curc - c) * lBC) < count) { - mode = 4; - count = n; - } + initscr(); + cbreak(); + noecho(); + keypad(stdscr, TRUE); + nl(); + clear(); + + if ((LINES < 24) || (COLS < 80)) { + endwin(); + errx(1, "screen must be at least 24x80."); } - /* try corresponding UP combinations */ - if (r < curr) { - /* CR, UP, and ND */ - if ((n = (curr - r) * lUP + c * lND + 1) < count) { - mode = 5; - count = n; - } - /* UP and ND */ - if (c >= curc && (n = (curr - r) * lUP + (c - curc) * lND) < count) { - mode = 6; - count = n; - } - /* UP and BS */ - if (c < curc && (n = (curr - r) * lUP + (curc - c) * lBC) < count) { - mode = 7; - count = n; - } - } - /* space over */ - if (curr == r && c > curc && linect[r] < curc && c - curc < count) - mode = 8; - - switch (mode) { - case -1: /* error! */ - write(STDERR_FILENO, "\r\nInternal cursor error.\r\n", 26); - tflag = 0; /* So we don't loop */ - getout(0); - - case 0: /* direct cursor motion */ - tputs(m, abs(curr - r), addbuf); - break; - - case 1: /* relative to "home" */ - tputs(HO, r, addbuf); - for (i = 0; i < r; i++) - addbuf('\012'); - for (i = 0; i < c; i++) - tputs(ND, 1, addbuf); - break; - - case 2: /* CR and down and over */ - addbuf('\015'); - for (i = 0; i < r - curr; i++) - addbuf('\012'); - for (i = 0; i < c; i++) - tputs(ND, 1, addbuf); - break; - - case 3: /* down and over */ - for (i = 0; i < r - curr; i++) - addbuf('\012'); - for (i = 0; i < c - curc; i++) - tputs(ND, 1, addbuf); - break; - - case 4: /* down and back */ - for (i = 0; i < r - curr; i++) - addbuf('\012'); - for (i = 0; i < curc - c; i++) - addbuf('\010'); - break; - - case 5: /* CR and up and over */ - addbuf('\015'); - for (i = 0; i < curr - r; i++) - tputs(UP, 1, addbuf); - for (i = 0; i < c; i++) - tputs(ND, 1, addbuf); - break; - - case 6: /* up and over */ - for (i = 0; i < curr - r; i++) - tputs(UP, 1, addbuf); - for (i = 0; i < c - curc; i++) - tputs(ND, 1, addbuf); - break; - - case 7: /* up and back */ - for (i = 0; i < curr - r; i++) - tputs(UP, 1, addbuf); - for (i = 0; i < curc - c; i++) { - if (BC) - tputs(BC, 1, addbuf); - else - addbuf('\010'); - } - break; - - case 8: /* safe space */ - for (i = 0; i < c - curc; i++) - addbuf(' '); - } - /* fix positions */ - curr = r; - curc = c; - realr = -1; - realc = -1; -} - -void -clear() -{ - int i; - - /* double space if can't clear */ - if (CL == 0) { - writel("\n\n"); - return; - } - curr = curc = 0; /* fix position markers */ - realr = realc = -1; - for (i = 0; i < 24; i++)/* clear line counts */ - linect[i] = -1; - buffnum = -1; /* ignore leftover buffer contents */ - tputs(CL, LI, addbuf); /* put CL in buffer */ -} - -void -fancyc(c) - int c; /* character to output */ -{ - int sp; /* counts spaces in a tab */ - - if (c == '\007') { /* bells go in blindly */ - addbuf(c); - return; - } - /* process tabs, use spaces if the the tab should be erasing things, - * otherwise use cursor movement routines. Note this does not use - * hardware tabs at all. */ - if (c == '\t') { - sp = (curc + 8) & (~7); /* compute spaces */ - /* check line length */ - if (linect[curr] >= curc || sp < 4) { - for (; sp > curc; sp--) - addbuf(' '); - curc = sp; /* fix curc */ - } else - curmove(curr, sp); - return; - } - if (c == '\n') { - cline(); - if (curr == LI - 1) - curmove(begscr, 0); - else - curmove(curr + 1, 0); - return; - } - /* ignore any other control chars */ - if (c < ' ') - return; - - /* if an erasing space or non-space, just add it to buffer. Otherwise - * use cursor movement routine, so that multiple spaces will be grouped - * together */ - if (c > ' ' || linect[curr] >= curc) { - newpos(); /* make sure position correct */ - addbuf(c); /* add character to buffer */ - /* fix line length */ - if (c == ' ' && linect[curr] == curc) - linect[curr]--; - else if (linect[curr] < curc) - linect[curr] = curc; - curc++; /* fix curc */ - } else - /* use cursor movement routine */ - curmove(curr, curc + 1); -} - -void -clend() -{ - int i; - -/* *** Why does this code fail? *** - * if (CD) { - * tputs(CD, (LI - curr), addbuf); - * for (i = curr; i < LI; i++) - * linect[i] = -1; - * return; - * } - */ - curmove(i = curr, 0); - cline(); - while (curr < LI - 1) { - curmove(curr + 1, 0); - if (linect[curr] > -1) - cline(); - } - curmove(i, 0); -} - -void -cline() -{ - int c; - - if (curc > linect[curr]) - return; - newpos(); - if (CE) { - tputs(CE, 1, addbuf); - linect[curr] = curc - 1; - } else { - c = curc - 1; - while (linect[curr] > c) { - addbuf(' '); - curc++; - linect[curr]--; - } - curmove(curr, c + 1); - } -} - -int -getcaps(s) - const char *s; -{ - char **code; /* two letter code */ - char ***cap; /* pointer to cap string */ - char *bufp; /* pointer to cap buffer */ - char tentry[1024]; /* temporary uncoded caps buffer */ - - tgetent(tentry, s); /* get uncoded terminfo entry */ - - LI = tgetnum("li"); /* get number of lines */ - if (LI == -1) - LI = 12; - CO = tgetnum("co"); /* get number of columns */ - if (CO == -1) - CO = 65; - - bufp = tbuf; /* get padding character */ - tgetstr("pc", &bufp); - if (bufp != tbuf) - PC = *tbuf; - else - PC = 0; - - bufp = tbuf; /* get string entries */ - cap = tstr; - for (code = tcap; *code; code++) - **cap++ = (char *)tgetstr(*code, &bufp); - - /* get pertinent lengths */ - if (HO) - lHO = strlen(HO); - if (BC) - lBC = strlen(BC); - else - lBC = 1; - if (UP) - lUP = strlen(UP); - if (ND) - lND = strlen(ND); - linect = (int *)calloc(LI + 1, sizeof(int)); - if (LI < 24 || CO < 72 || !(CL && UP && ND)) - return(0); - return(1); } diff --git a/games/backgammon/common_source/init.c b/games/backgammon/common_source/init.c index 7de84135f24..88f2dea2fd5 100644 --- a/games/backgammon/common_source/init.c +++ b/games/backgammon/common_source/init.c @@ -1,4 +1,4 @@ -/* $OpenBSD: init.c,v 1.4 2001/02/18 03:32:52 pjanzen Exp $ */ +/* $OpenBSD: init.c,v 1.5 2001/06/23 23:50:03 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -37,12 +37,10 @@ #if 0 static char sccsid[] = "@(#)init.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: init.c,v 1.4 2001/02/18 03:32:52 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: init.c,v 1.5 2001/06/23 23:50:03 pjanzen Exp $"; #endif #endif /* not lint */ -#include <termios.h> - /* * variable initialization. */ @@ -63,13 +61,11 @@ int pnum = 2; /* color of player: 2 = not yet init'ed */ int acnt = 0; /* length of args */ int aflag = 1; /* flag to ask for rules or instructions */ -int bflag = 0; /* flag for automatic board printing */ int cflag = 0; /* case conversion flag */ int hflag = 1; /* flag for cleaning screen */ int mflag = 0; /* backgammon flag */ int raflag = 0; /* 'roll again' flag for recovered game */ int rflag = 0; /* recovered game flag */ -int tflag = 0; /* cursor addressing flag */ int iroll = 0; /* special flag for inputting rolls */ int rfl = 0; @@ -89,8 +85,6 @@ int board[26]; char cin[100]; int colen; int cturn; -int curc; -int curr; int d0; int dice[2]; int dlast; @@ -107,4 +101,3 @@ int p[5]; int rscore; int table[6][6]; int wscore; -struct termios old, noech, traw; diff --git a/games/backgammon/common_source/one.c b/games/backgammon/common_source/one.c index a30b3e0f29d..a61ff36e7b7 100644 --- a/games/backgammon/common_source/one.c +++ b/games/backgammon/common_source/one.c @@ -1,4 +1,4 @@ -/* $OpenBSD: one.c,v 1.2 1998/03/19 11:13:23 pjanzen Exp $ */ +/* $OpenBSD: one.c,v 1.3 2001/06/23 23:50:03 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)one.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: one.c,v 1.2 1998/03/19 11:13:23 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: one.c,v 1.3 2001/06/23 23:50:03 pjanzen Exp $"; #endif #endif /* not lint */ @@ -103,19 +103,13 @@ moverr(i) { int j; - if (tflag) - curmove(20, 0); - else - writec('\n'); - writel("Error: "); + mvprintw(20, 0, "Error: "); for (j = 0; j <= i; j++) { - wrint(p[j]); - writec('-'); - wrint(g[j]); + printw("%d-%d", p[j], g[j]); if (j < i) - writec(','); + addch(','); } - writel("... "); + addstr("... "); movback(i); } diff --git a/games/backgammon/common_source/save.c b/games/backgammon/common_source/save.c index 7cf1dbdbe03..e1ddcf1c06b 100644 --- a/games/backgammon/common_source/save.c +++ b/games/backgammon/common_source/save.c @@ -1,4 +1,4 @@ -/* $OpenBSD: save.c,v 1.6 2001/03/30 04:41:34 pjanzen Exp $ */ +/* $OpenBSD: save.c,v 1.7 2001/06/23 23:50:04 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -37,11 +37,12 @@ #if 0 static char sccsid[] = "@(#)save.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: save.c,v 1.6 2001/03/30 04:41:34 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: save.c,v 1.7 2001/06/23 23:50:04 pjanzen Exp $"; #endif #endif /* not lint */ #include <sys/param.h> +#include <ctype.h> #include <errno.h> #include "back.h" @@ -63,37 +64,37 @@ save(n) int fdesc; char *fs; char fname[MAXPATHLEN]; + int r, c, i; if (n) { - if (tflag) { - curmove(20, 0); - clend(); - } else - writec('\n'); - writel(confirm); + move(20, 0); + clrtobot(); + addstr(confirm); if (!yorn(0)) return; } cflag = 1; for (;;) { - writel(prompt); + addstr(prompt); fs = fname; - while ((*fs = readc()) != '\n') { - if (*fs == old.c_cc[VERASE]) { + while ((i = readc()) != '\n') { + if (i == KEY_BACKSPACE || i == 0177) { if (fs > fname) { fs--; - if (tflag) - curmove(curr, curc - 1); - else - writec(*fs); + getyx(stdscr, r, c); + move(r, c - 1); } else - writec('\007'); + beep(); continue; } - if (fs - fname < MAXPATHLEN - 1) - writec(*fs++); - else - writec('\007'); + if (fs - fname < MAXPATHLEN - 1) { + if (isascii(i)) { + *fs = i; + addch(*fs++); + } else + beep(); + } else + beep(); } *fs = '\0'; if ((fdesc = open(fname, O_RDWR)) == -1 && errno == ENOENT) { @@ -101,14 +102,9 @@ save(n) break; } if (fdesc != -1) { - if (tflag) { - curmove(18, 0); - clend(); - } else - writec('\n'); - writel(exist1); - writel(fname); - writel(exist2); + move(18, 0); + clrtobot(); + printw("%s%s%s", exist1, fname, exist2); cflag = 0; close(fdesc); if (yorn(0)) { @@ -120,9 +116,7 @@ save(n) continue; } } - writel(cantuse); - writel(fname); - writel(".\n"); + printw("%s%s.\n", cantuse, fname); close(fdesc); cflag = 1; } @@ -138,15 +132,9 @@ save(n) write(fdesc, &gvalue, sizeof(gvalue)); write(fdesc, &raflag, sizeof(raflag)); close(fdesc); - if (tflag) - curmove(18, 0); - writel(saved); - writel(fname); - writel(type); - writel(fname); - writel(rec); - if (tflag) - clend(); + move(18, 0); + printw("%s%s%s%s%s", saved, fname, type, fname, rec); + clrtobot(); getout(0); } @@ -179,10 +167,9 @@ norec(s) { const char *c; - tflag = 0; - writel(cantrec); + addstr(cantrec); c = s; while (*c != '\0') - writec(*c++); + addch(*c++); getout(0); } diff --git a/games/backgammon/common_source/subs.c b/games/backgammon/common_source/subs.c index c891a58c3e2..c6557e00662 100644 --- a/games/backgammon/common_source/subs.c +++ b/games/backgammon/common_source/subs.c @@ -1,4 +1,4 @@ -/* $OpenBSD: subs.c,v 1.10 2000/07/23 21:35:00 pjanzen Exp $ */ +/* $OpenBSD: subs.c,v 1.11 2001/06/23 23:50:04 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)subs.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: subs.c,v 1.10 2000/07/23 21:35:00 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: subs.c,v 1.11 2001/06/23 23:50:04 pjanzen Exp $"; #endif #endif /* not lint */ @@ -51,14 +51,10 @@ static const char plwhite[] = "Player is white, computer is red."; static const char nocomp[] = "(No computer play.)"; const char *const descr[] = { - "Usage: backgammon [-] [-nrwb] [-p [r|w|b]] [-t <term>] [-s <file>]\n", + "Usage: backgammon [-] [-nrwb] [-s <file>]\n", "\t-h\tget this list\n\t-n\tdon't ask for rules or instructions", "\t-r\tplayer is red (implies n)\n\t-w\tplayer is white (implies n)", "\t-b\ttwo players, red and white (implies n)", - "\t-p r\tprint the board before red's turn", - "\t-p w\tprint the board before white's turn", - "\t-p b\tprint the board before all turns", - "\t-t term\tterminal is type term", "\t-s file\trecover previously saved game from file", 0 }; @@ -73,43 +69,14 @@ errexit(s) } int -addbuf(c) - int c; -{ - buffnum++; - if (buffnum == BUFSIZ) { - if (write(STDOUT_FILENO, outbuff, BUFSIZ) != BUFSIZ) - errexit("addbuf (write):"); - buffnum = 0; - } - outbuff[buffnum] = c; - return(0); -} - -void -buflush() -{ - if (buffnum < 0) - return; - buffnum++; - if (write(STDOUT_FILENO, outbuff, buffnum) != buffnum) - errexit("buflush (write):"); - buffnum = -1; -} - -int readc() { - char c; + int c; - if (tflag) { - cline(); - newpos(); - } - buflush(); - if (read(0, &c, 1) != 1) - errexit("readc"); - if (c == '\004') /* ^D */ + clrtoeol(); + refresh(); + c = getch(); + if (c == '\004' || c == ERR) /* ^D or failure */ getout(0); if (c == '\033' || c == '\015') return('\n'); @@ -118,75 +85,21 @@ readc() if (c == '\014') return('R'); if (c >= 'a' && c <= 'z') - return(c & 0137); + return(c & 0137); /* upper case */ return(c); } void -writec(c) - char c; -{ - if (tflag) - fancyc(c); - else - addbuf(c); -} - -void -writel(l) - const char *l; -{ -#ifdef DEBUG - const char *s; - - if (trace == NULL) - trace = fopen("bgtrace", "w"); - - fprintf(trace, "writel: \""); - for (s = l; *s; s++) { - if (*s < ' ' || *s == '\177') - fprintf(trace, "^%c", (*s)^0100); - else - putc(*s, trace); - } - fprintf(trace, "\"\n"); - fflush(trace); -#endif - - while (*l) - writec(*l++); -} - -void proll() { if (d0) swap; if (cturn == 1) - writel("Red's roll: "); + printw("Red's roll: "); else - writel("White's roll: "); - writec(D0 + '0'); - writec('\040'); - writec(D1 + '0'); - if (tflag) - cline(); -} - -void -wrint(n) - int n; -{ - int i, j, t; - - for (i = 4; i > 0; i--) { - t = 1; - for (j = 0; j < i; j++) - t *= 10; - if (n > t - 1) - writec((n / t) % 10 + '0'); - } - writec(n % 10 + '0'); + printw("White's roll: "); + printw("%d,%d", D0, D1); + clrtoeol(); } void @@ -194,54 +107,44 @@ gwrite() { int r, c; - if (tflag) { - r = curr; - c = curc; - curmove(16, 0); - } + getyx(stdscr, r, c); + move(16, 0); if (gvalue > 1) { - writel("Game value: "); - wrint(gvalue); - writel(". "); + printw("Game value: %d. ", gvalue); if (dlast == -1) - writel(color[0]); + addstr(color[0]); else - writel(color[1]); - writel(" doubled last."); + addstr(color[1]); + addstr(" doubled last."); } else { switch (pnum) { case -1: /* player is red */ - writel(plred); + addstr(plred); break; case 0: /* player is both colors */ - writel(nocomp); + addstr(nocomp); break; case 1: /* player is white */ - writel(plwhite); + addstr(plwhite); } } if (rscore || wscore) { - writel(" "); + addstr(" "); wrscore(); } - if (tflag) { - cline(); - curmove(r, c); - } + clrtoeol(); + move(r, c); } int quit() { - if (tflag) { - curmove(20, 0); - clend(); - } else - writec('\n'); - writel("Are you sure you want to quit?"); + move(20, 0); + clrtobot(); + addstr("Are you sure you want to quit?"); if (yorn(0)) { if (rfl) { - writel("Would you like to save this game?"); + addstr("Would you like to save this game?"); if (yorn(0)) save(0); } @@ -263,22 +166,19 @@ yorn(special) if (special && c == special) return(2); if (i) { - if (special) { - writel(" (Y, N, or "); - writec(special); - writec(')'); - } else - writel(" (Y or N)"); + if (special) + printw(" (Y, N, or %c)", special); + else + printw(" (Y or N)"); i = 0; } else - writec('\007'); + beep(); } if (c == 'Y') - writel(" Yes.\n"); + addstr(" Yes.\n"); else - writel(" No.\n"); - if (tflag) - buflush(); + addstr(" No.\n"); + refresh(); return(c == 'Y'); } @@ -286,10 +186,7 @@ void wrhit(i) int i; { - writel("Blot hit on "); - wrint(i); - writec('.'); - writec('\n'); + printw("Blot hit on %d.\n", i); } void @@ -350,26 +247,10 @@ getarg(argc,argv) args[acnt++] = 'w'; break; - case 't': /* use spec'd term from terminfo database */ - tflag = getcaps(optarg); - break; - case 's': /* restore saved game */ recover(optarg); break; - case 'p': /* print board after move */ - switch(optarg[0]) { - case 'r': bflag = 1; - break; - case 'w': bflag = -1; - break; - case 'b': - default: bflag = 0; - break; - } - break; - default: /* print cmdline options */ case 'h': for (j = 0; descr[j] != NULL; j++) @@ -401,43 +282,19 @@ init() void wrscore() { - writel("Score: "); - writel(color[1]); - writec(' '); - wrint(rscore); - writel(", "); - writel(color[0]); - writec(' '); - wrint(wscore); + printw("Score: %s %d, %s %d", color[1], rscore, color[0], wscore); } -void -fixtty(t) - struct termios *t; -{ - if (tflag) - newpos(); - buflush(); - if (tcsetattr(STDIN_FILENO, TCSADRAIN, t) < 0) - errexit("fixtty"); -} void getout(dummy) int dummy; { /* go to bottom of screen */ - if (tflag) { - curmove(23, 0); - cline(); - newpos(); - } else - writec('\n'); - - /* fix terminal status; avoid calling fixtty() to avoid loop */ - if (buffnum >= 0) - write(STDOUT_FILENO, outbuff, buffnum + 1); - tcsetattr(STDIN_FILENO, TCSADRAIN, &old); + move(23, 0); + clrtoeol(); + + endwin(); exit(0); } @@ -449,40 +306,27 @@ roll() int col; if (iroll) { - if (tflag) { - row = curr; - col = curc; - curmove(17, 0); - } else - writec('\n'); - writel("ROLL: "); + getyx(stdscr, row, col); + mvprintw(17, 0, "ROLL: "); c = readc(); if (c != '\n') { while (c < '1' || c > '6') c = readc(); D0 = c - '0'; - writec(' '); - writec(c); + printw(" %c", c); c = readc(); while (c < '1' || c > '6') c = readc(); D1 = c - '0'; - writec(' '); - writec(c); - if (tflag) { - curmove(17, 0); - cline(); - curmove(row, col); - } else - writec('\n'); + printw(" %c", c); + move(17, 0); + clrtoeol(); + move(row, col); return; } - if (tflag) { - curmove(17, 0); - cline(); - curmove(row, col); - } else - writec('\n'); + move(17, 0); + clrtoeol(); + move(row, col); } D0 = rnum(6) + 1; D1 = rnum(6) + 1; diff --git a/games/backgammon/common_source/table.c b/games/backgammon/common_source/table.c index 98601bd3231..3d9addc8d31 100644 --- a/games/backgammon/common_source/table.c +++ b/games/backgammon/common_source/table.c @@ -1,4 +1,4 @@ -/* $OpenBSD: table.c,v 1.3 1999/07/31 21:57:41 pjanzen Exp $ */ +/* $OpenBSD: table.c,v 1.4 2001/06/23 23:50:04 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -37,10 +37,11 @@ #if 0 static char sccsid[] = "@(#)table.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: table.c,v 1.3 1999/07/31 21:57:41 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: table.c,v 1.4 2001/06/23 23:50:04 pjanzen Exp $"; #endif #endif /* not lint */ +#include <ctype.h> #include "back.h" const char *const help2[] = { @@ -84,17 +85,14 @@ int checkmove(ist) int ist; { + int curr, curc; int j, n; - char c; + int c; domove: - if (ist == 0) { - if (tflag) - curmove(curr, 32); - else - writel("\t\t"); - writel("Move: "); - } + getyx(stdscr, curr, curc); + if (ist == 0) + mvprintw(curr, 32, "Move: "); ist = mvl = ncin = 0; for (j = 0; j < 5; j++) p[j] = g[j] = -1; @@ -105,61 +103,40 @@ dochar: if (c == 'S') { raflag = 0; save(1); - if (tflag) { - curmove(cturn == -1 ? 18 : 19, 39); - ist = -1; - goto domove; - } else { - proll(); - ist = 0; - goto domove; - } + move(cturn == -1 ? 18 : 19, 39); + ist = -1; + goto domove; } - if (c == old.c_cc[VERASE] && ncin > 0) { - if (tflag) - curmove(curr, curc - 1); - else { - if (old.c_cc[VERASE] == '\010') - writel("\010 \010"); - else - writec(cin[ncin - 1]); - } + if ((c == KEY_BACKSPACE || c == 0177) && ncin > 0) { + getyx(stdscr, curr, curc); + move(curr, curc - 1); ncin--; n = rsetbrd(); if (n == 0) { n = -1; - if (tflag) - refresh(); + refresh(); } if ((ist = n) > 0) goto dochar; goto domove; } - if (c == old.c_cc[VKILL] && ncin > 0) { - if (tflag) { - refresh(); - curmove(curr, 39); - ist = -1; - goto domove; - } else if (old.c_cc[VERASE] == '\010') { - for (j = 0; j < ncin; j++) - writel("\010 \010"); - ist = -1; - goto domove; - } else { - writec('\\'); - writec('\n'); - proll(); - ist = 0; - goto domove; - } + if (c == KEY_DL && ncin > 0) { + refresh(); + getyx(stdscr, curr, curc); + move(curr, 39); + ist = -1; + goto domove; + } + if (!isascii(c)) { + beep(); + goto domove; } n = dotable(c, ist); if (n >= 0) { cin[ncin++] = c; if (n > 2) - if ((!tflag) || c != '\n') - writec(c); + if (c != '\n') + addch(c); ist = n; if (n) goto dochar; @@ -171,28 +148,17 @@ dochar: if (n == -1 && mvl < mvlim-1) return(-4); if (n == -6) { - if (!tflag) { - if (movokay(mvl + 1)) { - wrboard(); - movback(mvl + 1); - } - proll(); - writel("\t\tMove: "); - for (j = 0; j < ncin;) - writec(cin[j++]); - } else { - if (movokay(mvl + 1)) { - refresh(); - movback(mvl + 1); - } else - curmove(cturn == -1 ? 18 : 19, ncin + 39); - } + if (movokay(mvl + 1)) { + moveplayers(); + movback(mvl + 1); + } else + move(cturn == -1 ? 18 : 19, ncin + 39); ist = n = rsetbrd(); goto dochar; } if (n != -5) return(n); - writec('\007'); + beep(); goto dochar; } @@ -211,12 +177,9 @@ dotable(c, i) switch (atmata[i].fcode) { case 1: wrboard(); - if (tflag) { - curmove(cturn == -1 ? 18 : 19, 0); - proll(); - writel("\t\t"); - } else - proll(); + move(cturn == -1 ? 18 : 19, 0); + proll(); + addstr("\t\t"); break; case 2: @@ -258,18 +221,9 @@ dotable(c, i) break; case 7: - if (tflag) - curmove(20, 0); - else - writec('\n'); + move(20, 0); text(help2); - if (tflag) { - curmove(cturn == -1 ? 18 : 19, 39); - } else { - writec('\n'); - proll(); - writel("\t\tMove: "); - } + move(cturn == -1 ? 18 : 19, 39); break; case 8: diff --git a/games/backgammon/teachgammon/teach.c b/games/backgammon/teachgammon/teach.c index be026a0a1ed..c0158d4c3ed 100644 --- a/games/backgammon/teachgammon/teach.c +++ b/games/backgammon/teachgammon/teach.c @@ -1,4 +1,4 @@ -/* $OpenBSD: teach.c,v 1.8 2001/03/08 21:18:32 deraadt Exp $ */ +/* $OpenBSD: teach.c,v 1.9 2001/06/23 23:50:05 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -43,10 +43,11 @@ static char copyright[] = #if 0 static char sccsid[] = "@(#)teach.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: teach.c,v 1.8 2001/03/08 21:18:32 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: teach.c,v 1.9 2001/06/23 23:50:05 pjanzen Exp $"; #endif #endif /* not lint */ +#include <err.h> #include "back.h" #include "tutor.h" @@ -77,20 +78,7 @@ main(argc, argv) setgid(getgid()); signal(SIGINT, getout); - if (tcgetattr(0, &old) == -1) /* get old tty mode */ - errexit("teachgammon(gtty)"); - noech = old; - noech.c_lflag &= ~ECHO; - traw = noech; - traw.c_lflag &= ~ICANON; /* set up modes */ - ospeed = cfgetospeed(&old); /* for termlib */ - tflag = getcaps(getenv("TERM")); - getarg(argc, argv); - if (tflag) { - noech.c_oflag &= ~(ONLCR | OXTABS); - traw.c_oflag &= ~(ONLCR | OXTABS); - clear(); - } + initcurses(); text(hello); text(list); i = text(contin); @@ -149,12 +137,8 @@ main(argc, argv) void leave() { - if (tflag) - clear(); - else - writec('\n'); - fixtty(&old); + clear(); + endwin(); execl(EXEC, "backgammon", "-n", args, 0); - writel("Help! Backgammon program is missing\007!!\n"); - exit(1); + errx(1, "help! Backgammon program is missing!!"); } diff --git a/games/backgammon/teachgammon/ttext1.c b/games/backgammon/teachgammon/ttext1.c index 4df56854144..d84af8c19ef 100644 --- a/games/backgammon/teachgammon/ttext1.c +++ b/games/backgammon/teachgammon/ttext1.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ttext1.c,v 1.3 1999/07/31 21:57:41 pjanzen Exp $ */ +/* $OpenBSD: ttext1.c,v 1.4 2001/06/23 23:50:05 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)ttext1.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: ttext1.c,v 1.3 1999/07/31 21:57:41 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: ttext1.c,v 1.4 2001/06/23 23:50:05 pjanzen Exp $"; #endif #endif /* not lint */ @@ -95,7 +95,7 @@ const char *const intro2[] = { "\n Although they are not shown on the board, the players' homes are", "located just to the right of the board. A player's men are placed", "there when they are removed from the board. The board you just", - "saw was in it's initial position: all games start with the board", + "saw was in its initial position: all games start with the board", "looking like this. Notice that red's pieces are represented by", "the letter `r' and white's pieces are represented by the letter", "`w'. A position may have zero or more pieces on it: for example,", diff --git a/games/backgammon/teachgammon/ttext2.c b/games/backgammon/teachgammon/ttext2.c index 40769d0fc30..db1c29897fa 100644 --- a/games/backgammon/teachgammon/ttext2.c +++ b/games/backgammon/teachgammon/ttext2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ttext2.c,v 1.4 2001/02/18 03:32:52 pjanzen Exp $ */ +/* $OpenBSD: ttext2.c,v 1.5 2001/06/23 23:50:05 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)ttext2.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: ttext2.c,v 1.4 2001/02/18 03:32:52 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: ttext2.c,v 1.5 2001/06/23 23:50:05 pjanzen Exp $"; #endif #endif /* not lint */ @@ -135,28 +135,22 @@ text(txt) const char *c; int i; - fixtty(&noech); begin = txt; while (*txt) { a = *(txt++); if (*a != '\0') { c = a; for (i = 0; *(c++) != '\0'; i--); - writel(a); - writec('\n'); + printw("%s\n", a); } else { - fixtty(&traw); - writel(prompt); + addstr(prompt); /* if begscr is set we're past the rules screens */ if (!begscr) { for (;;) { if ((b = readc()) == '?') { - if (tflag) - clear(); - else - writec('\n'); + clear(); text(list); - writel(prompt); + addstr(prompt); continue; } i = 0; @@ -168,7 +162,7 @@ text(txt) i++; } if (i == 11) - writec('\007'); + beep(); else break; } @@ -176,22 +170,16 @@ text(txt) b = readc(); i = 0; } - if (tflag) { - if (begscr) { - curmove(18, 0); - clend(); - } else - clear(); + if (begscr) { + move(18, 0); + clrtobot(); } else - writec('\n'); + clear(); if (i) return(i); - fixtty(&noech); - if (tflag) - curmove(curr, 0); + /* move to start of current line? */ begin = txt; } } - fixtty(&traw); return(0); } diff --git a/games/backgammon/teachgammon/tutor.c b/games/backgammon/teachgammon/tutor.c index 885f7e6402b..0808ef006e5 100644 --- a/games/backgammon/teachgammon/tutor.c +++ b/games/backgammon/teachgammon/tutor.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tutor.c,v 1.3 1999/07/31 21:57:41 pjanzen Exp $ */ +/* $OpenBSD: tutor.c,v 1.4 2001/06/23 23:50:06 pjanzen Exp $ */ /* * Copyright (c) 1980, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)tutor.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$OpenBSD: tutor.c,v 1.3 1999/07/31 21:57:41 pjanzen Exp $"; +static char rcsid[] = "$OpenBSD: tutor.c,v 1.4 2001/06/23 23:50:06 pjanzen Exp $"; #endif #endif /* not lint */ @@ -70,8 +70,7 @@ tutor() while (1) { if (!brdeq(test[i].brd, board)) { wrongans++; - if (tflag && curr == 23) - curmove(18, 0); + move(18, 0); if (wrongans >= 3) { wrongans = 0; text(*test[i].ans); @@ -84,23 +83,20 @@ tutor() for (j = 0; j < 19; j++) k += (board[j] > 0 ? board[j] : 0); *offopp = k - 30; /* -15 at start */ - if (tflag) { - refresh(); - clrest(); - } + moveplayers(); + clrest(); } else { - writel(better); + addstr(better); nexturn(); movback(mvlim); - if (tflag) { - refresh(); - clrest(); - } - if ((!tflag) || curr == 19) { + moveplayers(); + clrest(); + getyx(stdscr, j, k); + if (j == 19) { proll(); - writec('\t'); + addch('\t'); } else - curmove(curr > 19 ? curr - 2 : curr + 4, 25); + move(j > 19 ? j - 2 : j + 4, 25); getmove(); if (cturn == 0) leave(); @@ -108,13 +104,9 @@ tutor() } } else wrongans = 0; - if (tflag) - curmove(18, 0); + move(18, 0); text(*test[i].com); - if (!tflag) - writec('\n'); - else - curmove(19, 0); + move(19, 0); if (i == maxmoves) break; D0 = test[i].roll1; @@ -131,9 +123,8 @@ tutor() if (mvlim) for (j = 0; j < mvlim; j++) if (makmove(j)) - writel("AARGH!!!\n"); - if (tflag) - refresh(); + addstr("AARGH!!!\n"); + moveplayers(); nexturn(); D0 = test[i].new1; D1 = test[i].new2; @@ -141,13 +132,11 @@ tutor() i++; mvlim = movallow(); if (mvlim) { - if (tflag) - clrest(); + clrest(); proll(); - writec('\t'); + addch('\t'); getmove(); - if (tflag) - refresh(); + moveplayers(); if (cturn == 0) leave(); } @@ -160,13 +149,12 @@ clrest() { int r, c, j; - r = curr; - c = curc; + getyx(stdscr, r, c); for (j = r + 1; j < 24; j++) { - curmove(j, 0); - cline(); + move(j, 0); + clrtoeol(); } - curmove(r, c); + move(r, c); } int |