#include #include #include "../cterm/pc.h" #define word unsigned int #define uchar unsigned char static union REGS r; static uchar kb_mode=0; /* check for queued keys */ kbdhit() { r.h.ah = 1; int86(KBD_INT, &r, &r); return (!(r.x.flags & Zflag)); /* ie. ! Z-flag */ } /* flush keyboard type-ahead queue */ kbflush() { r.h.ah = 3; int86(KBD_INT, &r, &r); } /* toggle keyboard autorepeat */ kbautorep(sw) int sw; /* switch : 1 = on, 0 = off */ { r.h.ah = 4; r.h.al = (sw) ? 1 : 2; int86(KBD_INT, &r, &r); } /* get keyboard word */ word kbdget() { r.h.ah = 2; int86(KBD_INT, &r, &r); kb_mode = r.h.al; r.h.ah = 0; int86(KBD_INT, &r, &r); return((word) r.x.ax); } main() { word x = 1; while (x) { if (!kbdhit()) continue; cprintf(" %04x", x = kbdget()); } }