home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_C / SNIP9404.ZIP / ISXKBRD.C < prev    next >
C/C++ Source or Header  |  1994-04-03  |  1KB  |  48 lines

  1. /*
  2. **  ISXKBRD.C - public domain by Ed Kowalski.
  3. **
  4. **  isxkeybrd() - detects enhanced kbd
  5. */
  6.  
  7. #include <dos.h>
  8.  
  9. /*
  10. **  Check for enhanced keyboard support.
  11. */
  12.  
  13. int isxkeybrd(void)
  14. {
  15.       union REGS rg;
  16.       unsigned kbdflags;
  17.  
  18.       rg.h.ah = 0x02;               /* check BIOS supports enhanced kbd */
  19.       int86(0x16, &rg, &rg);        /* get kbd flags                    */
  20.       kbdflags = rg.h.al;
  21.  
  22.       /* mess 'em up, get enhanced flags */
  23.  
  24.       rg.x.ax = 0x1200 + kbdflags ^ 0xff;
  25.       int86(0x16, &rg, &rg);
  26.       if (rg.h.al == kbdflags)      /* BIOS supports enhanced keyboard  */
  27.       {
  28.             /* if bit 4 at 40:96h is set machine has an enhanced kbd */
  29.  
  30.             if ((*(( char far *) 0x400096L) & 0x10))
  31.                   return 1;         /* enhanced keyboard present        */
  32.       }
  33.       return 0;                     /* don't use enhanced keyboard calls */
  34. }
  35.  
  36. #ifdef TEST
  37.  
  38. #include <stdio.h>
  39. main()
  40. {
  41.       if (isxkeybrd())
  42.             puts( "Enhanced Keyboard supported" );
  43.       else  puts( "Enhanced Keyboard NOT supported ");
  44.       return 0;
  45. }
  46.  
  47. #endif /* TEST */
  48.