summaryrefslogtreecommitdiffstats
path: root/games
diff options
context:
space:
mode:
authorhoek <hoek@FreeBSD.org>2000-05-21 17:44:33 +0000
committerhoek <hoek@FreeBSD.org>2000-05-21 17:44:33 +0000
commite79786bafbdb38169cfa0776cc43f591705d2e33 (patch)
tree02c9b023a139cee8b2a591065267d74a3eb3e9b9 /games
parent5c6432f1d58cb70a122b0dd3cffd1452ead79920 (diff)
downloadFreeBSD-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.c53
-rw-r--r--games/snake/snake/snake.c13
-rw-r--r--games/snake/snake/snake.h5
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;
OpenPOWER on IntegriCloud