]> 4ch.mooo.com Git - 16.git/blob - 16/sauce/keydrv.c
modified: 16/DOS_GFX.EXE
[16.git] / 16 / sauce / keydrv.c
1 #include<conio.h>
2 #include<dos.h>
3
4 #include "keydrv.h"
5
6 extern int pressed;
7 extern char keymap[];
8
9 static void (__interrupt __far  * old9h ) () ;  //holds dos key int
10
11
12
13 void __interrupt __far Key_handler()  {
14     int scan,cv;
15
16     irenable();
17     scan = inp(0x60);                //read scan code
18     cv = inp(0x61);
19     outp( 0x61, cv | 0x80 );
20     outp( 0x61, cv );
21     outp(0x20, 0x20);  //reset key int
22     
23     if(scan > 127)  {               //on break set keymap 0, dec pressed
24         keymap[(scan & 127)] = 0;
25         pressed -= 1;
26     }
27     else if(keymap[scan] == 0)  {  //on make set keymap 1, inc pressed
28             pressed += 1;           //if not already set
29         keymap[scan] = 1;
30     }
31     
32 }
33
34 void hook_keys()  {
35     int i;
36     
37     for(i=0; i<128; i++)  //set all keys to off
38         keymap[i] = 0;
39     pressed = 0;  //set number keys pressed to 0
40         
41     old9h = _dos_getvect ( 0x9 ); //save old key int
42     _dos_setvect ( 0x9 , Key_handler );  //set key int to new handler
43 }
44
45 void release_keys()  {
46     _dos_setvect ( 0x9 , old9h ) ;  // Return to DOS keyboard driver
47 }
48
49 void waitkey(int key)  {
50     int temp = 0;
51     while(!temp)
52         if(keymap[key])
53             temp = 1;
54 }
55
56 void waitkeyup(int key)  {
57     int temp = 0;
58     while(!temp)
59         if(!keymap[key])
60             temp = 1;
61 }//end waitkeyup
62
63
64