home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: rec.games.programmer
- Path: sparky!uunet!charon.amdahl.com!pacbell.com!ames!agate!spool.mu.edu!sdd.hp.com!cs.utexas.edu!torn!nott!cunews!revcan!micor!goss
- From: goss@micor.ocunix.on.ca (Timothy D. Goss)
- Subject: code to read joystick values
- Organization: LogiSoft Computing Services
- Date: Wed, 18 Nov 1992 04:53:23 GMT
- Message-ID: <1992Nov18.045323.8500@micor.ocunix.on.ca>
- Keywords: joystick
- Lines: 66
-
- Well here's my $.02 worth. The routine to read the joystick values is written
- in a mix of C and inline assembler. The assembler is only used to actually
- generate the INT (cause I hate int86 calls, why? I'll never know). Anyhow, the
- stuff is pretty easy to read and works. If anyone has any trouble with this
- please let me know and I'll try to find out what went wrong. When in doubt
- blame evil spirits, drool and sway from side to side. (This doesn't really
- solve anything but people will stop bugging you if you do it).
-
- Tim
-
- -----[ cut here ]-----
-
- #include <dos.h>
-
- #define ERROR 0
- #define SUCCESS 1
-
- typedef struct {
- int x1, y1, x2, y2;
- int sw0, sw1, sw2, sw3;
- } JOYSTICK;
-
- JOYSTICK stick;
-
- int ReadJoyStick(void)
- {
-
- int buttons;
-
- asm mov ah,084h
- asm mov dx,0
- asm int 15h
- asm cmp cx,-1
- asm je error
-
- buttons = _AL>>4;
- stick.sw0 = !(buttons & 0x01);
- stick.sw1 = !(buttons>>1 & 0x01);
- stick.sw2 = !(buttons>>2 & 0x01);
- stick.sw3 = !(buttons>>3 & 0x01);
-
- asm mov ah,084h
- asm mov dx,1
- asm int 15h
- asm cmp cx,0ffffh
- asm je error
-
- stick.x1 = _AX;
- stick.y1 = _BX;
- stick.x2 = _CX;
- stick.y2 = _DX;
-
- ok : return(SUCCESS);
- error: return(ERROR);
-
- }
-
- void main(void)
- {
-
- while (!kbhit())
- if (ReadJoyStick())
- printf("%d %d %d %d\n", stick.sw0, stick.sw1, stick.x1, stick.y1);
-
- }
-
-