home *** CD-ROM | disk | FTP | other *** search
/ Boldly Go Collection / version40.iso / TS / 17A / DRWIN101.ZIP / KB.CPP < prev    next >
C/C++ Source or Header  |  1991-11-23  |  2KB  |  83 lines

  1. #include <dos.h>
  2.  
  3. #include "kb.hpp"
  4.  
  5.  
  6. KB kbin;               //keyboard input
  7.  
  8.  
  9. int KB::hit (void)
  10. {
  11.   asm mov ah,0x01      //check-for-keystroke function
  12.   asm int KB_INT       //keyboard interrupt
  13.   asm mov ax,0         //clear for nope!
  14.   asm jz  end          //yep, nope was correct, so skip to end
  15.   asm inc ax           //set for yep!
  16. end:
  17.   return _AX;
  18. }   //int KB::hit(void)
  19.  
  20.  
  21. char KB::Get(void)
  22. {
  23.   union REGS r;
  24.  
  25.   r.h.ah = 0x00;       //read-keyboard-character function
  26.   int86(KB_INT,&r,&r); //call keyboard interrupt
  27.   if (r.h.al) return (char) r.h.al;
  28.   if (r.h.ah < 0x80) return -((char)r.h.ah);
  29.   switch (r.h.ah)
  30.   {
  31.   case 0x80: return A_9;
  32.   case 0x81: return A_0;
  33.   case 0x82: return A_MINUS;
  34.   case 0x83: return A_EQUAL;
  35.   case 0x84: return C_PGUP;
  36.   case 0x87: return S_F11;
  37.   case 0x88: return S_F12;
  38.   case 0x89: return C_F11;
  39.   case 0x8A: return C_F12;
  40.   case 0x8B: return A_F11;
  41.   case 0x8C: return A_F12;
  42.   case 0xA5: return A_TAB;
  43.   case 0xD9: return _F11;
  44.   case 0xDA: return _F12;
  45.   }   //switch
  46.   return 0;
  47. }   //char KB::Get(void)
  48.  
  49. KB& KB::operator << (char& c)
  50. {
  51.   union REGS r;
  52.  
  53.   r.h.ah = 0x05;
  54.   r.h.cl = c;
  55.   r.h.ch = 0;
  56.   if (c < 0)
  57.   {
  58.     r.h.cl = 0;
  59.     switch (c)
  60.     {
  61.     case A_9 :    r.h.cl = 0x80;  break;
  62.     case A_0:     r.h.ch = 0x81;  break;
  63.     case A_MINUS: r.h.ch = 0x82;  break;
  64.     case A_EQUAL: r.h.ch = 0x83;  break;
  65.     case C_PGUP:  r.h.ch = 0x84;  break;
  66.     case S_F11:   r.h.ch = 0x87;  break;
  67.     case S_F12:   r.h.ch = 0x88;  break;
  68.     case C_F11:   r.h.ch = 0x89;  break;
  69.     case C_F12:   r.h.ch = 0x8A;  break;
  70.     case A_F11:   r.h.ch = 0x8B;  break;
  71.     case A_F12:   r.h.ch = 0x8C;  break;
  72.     case A_TAB:   r.h.ch = 0xA5;  break;
  73.     case _F11:    r.h.ch = 0xD9;  break;
  74.     case _F12:    r.h.ch = 0xDA;  break;
  75.     default:
  76.       r.h.ch = (unsigned char) -c;
  77.     }
  78.   }   //if special character
  79.   int86(KB_INT,&r,&r);
  80.   return *this;
  81. }   //KB& KB::operator << (char& c)
  82.  
  83.