Re: MS-DOS Porting trouble

Search this archive.

From: Bart Oldeman (Bart.Oldeman@bristol.ac.uk)
Date: Sun 13 Aug 2000 - 00:58:12 IDT


On Fri, 11 Aug 2000, Lionel Pinkhard wrote:

> I'm having a little trouble with the keyboard, I tried your piece of code
> (thanks a lot, BTW!), and I include <ncurses.h> as well, and got this
> output:
> 
> /tmp/cca020801.o: In function `gameloop':
> /tmp/cca020801.o(.text+0x2f2): undefined reference to `noecho'
> /tmp/cca020801.o(.text+0x2f7): undefined reference to `cbreak'

That's a linking problem. Solved by putting -lncurses on the gcc command
line. My loop was a bit wrong anyway, if you want to test for non-blocking
input.

Better is (with #include <curses.h>):
noecho();
cbreak(); /* set cbreak mode (don't wait for return key) */
nodelay(stdscr,TRUE);
while ((keypressed=getch())!=ERR) {

You see in non-blocking mode, kbhit() is equivalent to getch()!=ERR. But
getch also gives you the resulting key so you don't want to loose it.

With svgalib instead of ncurses it's easier:

while ((keypressed=vga_getkey()) {
/*vga_getkey returns zero if no key has been hit*/

Check out raw keyboard mode in svgalib if you need special keys not in the
ascii table or ncurses.

> Also, I checked out the man page for gettimeofday, I'm just having a
> little trouble understanding it, what type of variable should I set up to
> store it in? Can you give me an example of how I can get the time from it?
> Sorry, the man page is talking about struct's, and I don't have that much
> experience with it (well, I've never returned a struct, but I have used
> them before).

struct timeval           tv;
struct timezone		 tz;
gettimeofday(&tv, &tz);

Simple ;-)

BUT if you just want to use your timing for a delay you're better of
and it's easier using sleep or usleep. (see man 3 sleep or usleep)
usleep suspends the execution for the given interval of microseconds.

Bart


This archive was generated by hypermail 2.1.4 : Wed 21 Jan 2004 - 22:10:23 IST