diff options
author | hoek <hoek@FreeBSD.org> | 2000-05-21 17:44:33 +0000 |
---|---|---|
committer | hoek <hoek@FreeBSD.org> | 2000-05-21 17:44:33 +0000 |
commit | e79786bafbdb38169cfa0776cc43f591705d2e33 (patch) | |
tree | 02c9b023a139cee8b2a591065267d74a3eb3e9b9 /games | |
parent | 5c6432f1d58cb70a122b0dd3cffd1452ead79920 (diff) | |
download | FreeBSD-src-e79786bafbdb38169cfa0776cc43f591705d2e33.zip FreeBSD-src-e79786bafbdb38169cfa0776cc43f591705d2e33.tar.gz |
Don't segv if bs or bc aren't defined in termcap's entry. Misc cleanup.
Fix `|' -> `||'. Use usleep() instead of delay loop. Etc.
Submitted by: Andrew <[3]andrew@ugh.net.au> (bin/8501)
Diffstat (limited to 'games')
-rw-r--r-- | games/snake/snake/move.c | 53 | ||||
-rw-r--r-- | games/snake/snake/snake.c | 13 | ||||
-rw-r--r-- | games/snake/snake/snake.h | 5 |
3 files changed, 44 insertions, 27 deletions
diff --git a/games/snake/snake/move.c b/games/snake/snake/move.c index 1ac60f2..e451996 100644 --- a/games/snake/snake/move.c +++ b/games/snake/snake/move.c @@ -95,12 +95,15 @@ static const char rcsid[] = * ******************************************************************************/ +#include <errno.h> #if __STDC__ #include <stdarg.h> #else #include <varargs.h> #endif #include <string.h> +#include <unistd.h> + #include "snake.h" int CMlength; @@ -191,7 +194,7 @@ gto(sp) struct point *sp; { - int distance,f,tfield,j; + int distance,f,tfield; if (cursor.line > LINES || cursor.line <0 || cursor.col <0 || cursor.col > COLUMNS) @@ -344,7 +347,7 @@ home(){ } ll(){ - int j,l; + int l; struct point z; l = lcnt + 2; @@ -531,14 +534,9 @@ baudrate() #endif delay(t) -int t; +unsigned int t; { - int k,j; - - k = baudrate() * t / 300; - for(j=0;j<k;j++){ - putchar(PC); - } + while (usleep(t*50000U) == -1 && errno == EINTR) ; } done() @@ -552,6 +550,7 @@ cook() delay(1); putpad(TE); putpad(KE); + putpad(VE); fflush(stdout); stty(0, &orig); #ifdef TIOCSLTC @@ -583,7 +582,6 @@ getcap() char *getenv(); char *term; char *xPC; - struct point z; void stop(); #ifdef TIOCGWINSZ struct winsize win; @@ -649,26 +647,43 @@ getcap() KR = tgetstr("kr", &ap); KU = tgetstr("ku", &ap); KD = tgetstr("kd", &ap); - Klength = strlen(KL); - /* NOTE: If KL, KR, KU, and KD are not - * all the same length, some problems - * may arise, since tests are made on - * all of them together. - */ + if (KL) + Klength = strlen(KL); + else + Klength = strlen(KL); + /* + * NOTE: If KL, KR, KU, and KD are not + * all the same length, some problems + * may arise, since tests are made on + * all of them together. + */ TI = tgetstr("ti", &ap); TE = tgetstr("te", &ap); KS = tgetstr("ks", &ap); KE = tgetstr("ke", &ap); + VI = tgetstr("vi", &ap); + VE = tgetstr("ve", &ap); + xPC = tgetstr("pc", &ap); if (xPC) PC = *xPC; - NDlength = strlen(ND); - BSlength = strlen(BS); + if (ND) + NDlength = strlen(ND); + else + NDlength = 0; + + if (BS) + BSlength = strlen(BS); + else + BSlength = 0; + if ((CM == 0) && - (HO == 0 | UP==0 || BS==0 || ND==0)) { + (HO == 0 || DO == 0 || UP==0 || BS==0 || ND==0)) + { + /* XXX as written in rev.1.6, we can assert(DO) */ fprintf(stderr, "Terminal must have addressible "); fprintf(stderr, "cursor or home + 4 local motions\n"); exit(5); diff --git a/games/snake/snake/snake.c b/games/snake/snake/snake.c index 93c06cb9..f92f99c 100644 --- a/games/snake/snake/snake.c +++ b/games/snake/snake/snake.c @@ -108,7 +108,7 @@ char **argv; { extern char *optarg; extern int optind; - int ch, i, j, k; + int ch, i; void stop(); rawscores = open(_PATH_RAWSCORES, O_RDWR|O_CREAT, 0664); @@ -174,6 +174,7 @@ char **argv; signal (SIGINT, stop); putpad(TI); /* String to begin programs that use cm */ putpad(KS); /* Put terminal in keypad transmit mode */ + putpad(VI); /* Hide cursor */ snrand(&finish); snrand(&you); @@ -368,8 +369,6 @@ mainloop() if (same(&you,&money)) { - char xp[20]; - struct point z; loot += 25; if(k < repeat) pchar(&you,' '); @@ -633,10 +632,10 @@ int w;{ setup(); winnings(cashvalue); } + snap() { struct point p; - int i; if(you.line < 3){ pchar(point(&p,you.col,0),'-'); @@ -669,6 +668,7 @@ snap() } fflush(stdout); } + stretch(ps) struct point *ps;{ struct point p; @@ -712,7 +712,7 @@ struct point *ps;{ surround(ps) struct point *ps;{ struct point x; - int i,j; + int j; if(ps->col == 0)ps->col++; if(ps->line == 0)ps->line++; @@ -733,6 +733,7 @@ struct point *ps;{ } apr(point(&x,ps->col-1,ps->line-1)," \ro.o\r\\_/"); } + win(ps) struct point *ps; { @@ -873,8 +874,6 @@ stop(){ suspend() { - char *sh; - ll(); cook(); kill(getpid(), SIGTSTP); diff --git a/games/snake/snake/snake.h b/games/snake/snake/snake.h index 792fc36..79c08e1 100644 --- a/games/snake/snake/snake.h +++ b/games/snake/snake/snake.h @@ -31,6 +31,8 @@ * SUCH DAMAGE. * * @(#)snake.h 8.1 (Berkeley) 5/31/93 + * + * $FreeBSD$ */ # include <stdio.h> @@ -50,7 +52,8 @@ char *CL, *UP, *DO, *ND, *BS, *HO, *CM, *TA, *LL, *KL, *KR, *KU, *KD, - *TI, *TE, *KS, *KE; + *TI, *TE, *KS, *KE, + *VI, *VE; int LINES, COLUMNS; /* physical screen size. */ int lcnt, ccnt; /* user's idea of screen size */ char xBC, PC; |