home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / advmsdos / chap05 / trybreak.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-10-01  |  1.8 KB  |  56 lines

  1. /*
  2.     TRYBREAK.C
  3.  
  4.     Demo of BREAK.ASM Ctrl-Break and Ctrl-C 
  5.     interrupt handler, by Ray Duncan
  6.     
  7.     Build:   MASM /Mx BREAK;
  8.              CL TRYBREAK.C BREAK.OBJ
  9.  
  10.     Usage:   TRYBREAK
  11.  
  12. */
  13.  
  14. #include <stdio.h>
  15.  
  16. main(int argc, char *argv[])
  17. {   
  18.     int hit = 0;                    /* flag for keypress */
  19.     int c = 0;                      /* character from keyboard */
  20.     static int flag = 0;            /* true if Ctrl-Break 
  21.                                        or Ctrl-C detected */    
  22.  
  23.     puts("\n*** TRYBREAK.C running ***\n");
  24.     puts("Press Ctrl-C or Ctrl-Break to test handler,");
  25.     puts("Press the Esc key to exit TRYBREAK.\n");
  26.  
  27.     capture(&flag);                 /* install new Ctrl-C and
  28.                                        Ctrl-Break handler and
  29.                                        pass address of flag */
  30.  
  31.     puts("TRYBREAK has captured interrupt vectors.\n");
  32.  
  33.     while(1)                    
  34.     {   
  35.         hit = kbhit();              /* check for keypress */
  36.                                     /* (MS-DOS sees Ctrl-C
  37.                                        when keyboard polled) */
  38.  
  39.         if(flag != 0)               /* if flag is true, an */
  40.         {                           /* interrupt has occurred */
  41.             puts("\nControl-Break detected.\n");
  42.             flag = 0;               /* reset interrupt flag */
  43.         }   
  44.         if(hit != 0)                /* if any key waiting */
  45.         {  
  46.             c = getch();            /* read key, exit if Esc */
  47.             if( (c & 0x7f) == 0x1b) break;
  48.             putch(c);               /* otherwise display it */  
  49.         }
  50.     } 
  51.     release();                      /* restore original Ctrl-C
  52.                                        and Ctrl-Break handlers */
  53.  
  54.     puts("\n\nTRYBREAK has released interrupt vectors.");
  55. }
  56.