home *** CD-ROM | disk | FTP | other *** search
/ Internet MPEG Audio Archive / IMAA.mdf / util / dos / l3v100n / rsx / source / sample / sig1.c < prev   
C/C++ Source or Header  |  1994-01-19  |  1KB  |  63 lines

  1. /* sig1.c (emx+gcc) */
  2.  
  3. /* Expected output: +s-+s--+s+s+s-x */
  4.  
  5. #include <stdio.h>
  6.  
  7. #ifdef __EMX__
  8. #include <signal.h>
  9. #else
  10. #include <sys\_signal.h>
  11. #endif
  12.  
  13. volatile int ack;
  14.  
  15. void handler (int sig)
  16. {
  17.   putchar ('s');
  18.   fflush(stdout);
  19.   if (ack)
  20.     signal (sig, SIG_ACK);
  21. }
  22.  
  23. void make_stack (void)
  24. {
  25. }
  26.  
  27. int main (void)
  28. {
  29.   make_stack ();
  30.   setbuf(stdout,NULL);
  31.   if (signal (SIGINT, handler) == SIG_ERR)
  32.     {
  33.       puts ("signal failed");
  34.       return (1);
  35.     }
  36.   ack = 0;
  37.   putchar ('+');
  38.   raise (SIGINT);   /* +s */
  39.   putchar ('-');
  40.   raise (SIGINT);   /* - , maske aus */
  41.   putchar ('+');
  42.   signal (SIGINT, SIG_ACK);  /* maske an , ->raise */
  43.   putchar ('-');
  44.   raise (SIGINT);   /* - , maske aus */
  45.   putchar ('-');
  46.   raise (SIGINT);   /* - , maske aus */
  47.   ack = 1;
  48.   putchar ('+');
  49.   signal (SIGINT, SIG_ACK);
  50.   putchar ('+');
  51.   raise (SIGINT);
  52.   putchar ('+');
  53.   raise (SIGINT);
  54.   signal (SIGINT, SIG_IGN);
  55.   putchar ('-');
  56.   raise (SIGINT);
  57.   signal (SIGINT, SIG_DFL);
  58.   putchar ('x');
  59.   /* signal (SIGINT, SIG_ACK); */
  60.   raise (SIGINT);
  61.   return (0);
  62. }
  63.