home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / c / snippets / trapdemo.c < prev    next >
C/C++ Source or Header  |  1995-03-17  |  2KB  |  81 lines

  1. /*
  2. **  Demonstrate TRAPFLAG.ASM
  3. **
  4. **  public domain by Bob Stout
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <dos.h>
  10. #include <conio.h>
  11.  
  12. #ifdef __WATCOMC__
  13.  #pragma aux ins09  "_*" parm caller [] modify [ax bx cx dx es]
  14.  #pragma aux undo09 "_*" parm caller [] modify [ax bx cx dx es]
  15. #endif
  16.  
  17. extern void ins09(void);
  18. extern void undo09(void);
  19.  
  20. extern volatile int _far ccrcvd;
  21.  
  22. static void biosprt(char *p)
  23. {
  24.       union REGS regs;
  25.  
  26.       while (*p)
  27.       {
  28.             regs.h.ah = 0x0e;             /* Low-level services only!     */
  29.             regs.h.al = *p++;
  30.             regs.x.bx = 0;
  31.             int86(0x10, ®s, ®s);
  32.       }
  33. }
  34.  
  35. static void _far my_cc(void)
  36. {
  37.       char *p1 = "Ctrl-";
  38.       char *p2 = "C";
  39.       char *p3 = "Break";
  40.       char *p4 = " received\r\n";
  41.  
  42.       biosprt(p1);
  43.       if (1 == ccrcvd)
  44.             biosprt(p2);
  45.       else  biosprt(p3);
  46.       biosprt(p4);
  47. }
  48.  
  49. main()
  50. {
  51.       int ch = 0;
  52.  
  53.       setbuf(stdout, NULL);
  54.       my_cc();
  55.       ins09();
  56.       atexit(undo09);
  57.       puts("New Ints 09h & 1Bh installed...");
  58.       puts("Hit Esc to quit...");
  59.       do
  60.       {
  61.             if (kbhit())
  62.             {
  63.                   if (0x1b != (ch = getch()))
  64.                   {
  65.                         if (0x20 > ch)
  66.                         {
  67.                               fputc('^', stdout);
  68.                               ch += '@';
  69.                         }
  70.                         fputc(ch, stdout);
  71.                   }
  72.             }
  73.             if (ccrcvd)
  74.             {
  75.                   my_cc();
  76.                   ccrcvd = 0;
  77.             }
  78.       } while (0x1b != ch);
  79.       return 0;
  80. }
  81.