From 29936b86526850aa49ea5459a24842e02f77a016 Mon Sep 17 00:00:00 2001 From: cgd Date: Tue, 26 Oct 1999 06:35:49 +0000 Subject: support arrow keys. --- worm/worm.c | 54 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 14 deletions(-) (limited to 'worm/worm.c') diff --git a/worm/worm.c b/worm/worm.c index 588ce96b..25d84c3b 100644 --- a/worm/worm.c +++ b/worm/worm.c @@ -1,4 +1,4 @@ -/* $NetBSD: worm.c,v 1.16 1999/09/12 09:02:24 jsm Exp $ */ +/* $NetBSD: worm.c,v 1.17 1999/10/26 06:35:49 cgd Exp $ */ /* * Copyright (c) 1980, 1993 @@ -43,7 +43,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\ #if 0 static char sccsid[] = "@(#)worm.c 8.1 (Berkeley) 5/31/93"; #else -__RCSID("$NetBSD: worm.c,v 1.16 1999/09/12 09:02:24 jsm Exp $"); +__RCSID("$NetBSD: worm.c,v 1.17 1999/10/26 06:35:49 cgd Exp $"); #endif #endif /* not lint */ @@ -80,7 +80,7 @@ int running = 0; int slow = 0; int score = 0; int start_len = LENGTH; -char lastch; +int lastch; char outbuf[BUFSIZ]; void crash __P((void)) __attribute__((__noreturn__)); @@ -89,7 +89,7 @@ int main __P((int, char **)); void leave __P((int)) __attribute__((__noreturn__)); void life __P((void)); void newpos __P((struct body *)); -void process __P((char)); +void process __P((int)); void prize __P((void)); int rnd __P((int)); void setup __P((void)); @@ -100,7 +100,6 @@ main(argc, argv) int argc; char **argv; { - char ch; /* Revoke setgid privileges */ setregid(getgid(), getgid()); @@ -117,6 +116,9 @@ main(argc, argv) initscr(); crmode(); noecho(); +#ifdef KEY_LEFT + keypad(stdscr, TRUE); +#endif slow = (baudrate() <= 1200); clear(); stw = newwin(1, COLS-1, 0, 0); @@ -141,8 +143,7 @@ main(argc, argv) else { fflush(stdout); - if (read(0, &ch, 1) >= 0) - process(ch); + process(getch()); } } } @@ -237,7 +238,7 @@ prize() void process(ch) - char ch; + int ch; { int x,y; struct body *nh; @@ -247,17 +248,42 @@ process(ch) y = head->y; switch(ch) { - case 'h': x--; break; - case 'j': y++; break; - case 'k': y--; break; - case 'l': x++; break; +#ifdef KEY_LEFT + case KEY_LEFT: +#endif + case 'h': + x--; break; + +#ifdef KEY_DOWN + case KEY_DOWN: +#endif + case 'j': + y++; break; + +#ifdef KEY_UP + case KEY_UP: +#endif + case 'k': + y--; break; + +#ifdef KEY_RIGHT + case KEY_RIGHT: +#endif + case 'l': + x++; break; + case 'H': x--; running = RUNLEN; ch = tolower(ch); break; case 'J': y++; running = RUNLEN/2; ch = tolower(ch); break; case 'K': y--; running = RUNLEN/2; ch = tolower(ch); break; case 'L': x++; running = RUNLEN; ch = tolower(ch); break; case '\f': setup(); return; - case CNTRL('C'): crash(); return; - case CNTRL('D'): crash(); return; + + case ERR: + case CNTRL('C'): + case CNTRL('D'): + crash(); + return; + default: if (! running) alarm(1); return; } -- cgit v1.2.3-56-ge451