gandaro

Minimal ed source code

May 6th, 2012
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.91 KB | None | 0 0
  1. #ifndef _POSIX_SOURCE
  2. # define _POSIX_SOURCE
  3. #endif
  4.  
  5. #include <stdio.h>
  6. #include <signal.h>
  7.  
  8. typedef enum { IGN, CTRL_C, CTRL_D } input_t;
  9.  
  10. input_t last_input = IGN;
  11.  
  12. void write_ctrl_c(int signum) {
  13.     puts("\n?");
  14.     last_input = CTRL_C;
  15. }
  16.  
  17. int main(void) {
  18.     struct sigaction handler = { .sa_handler = &write_ctrl_c };
  19.  
  20.     if (sigaction(SIGINT, &handler, NULL) == -1) {
  21.         fputs("Error registering signal handler\n", stderr);
  22.         return 1;
  23.     }
  24.  
  25.     for (;;) {
  26.         switch (getchar()) {
  27.         case EOF:
  28.             switch (last_input) {
  29.             case CTRL_D:
  30.                 return 0;
  31.             case IGN:
  32.                 last_input = CTRL_D;
  33.                 break;
  34.             default:
  35.                 last_input = IGN;
  36.             }
  37.             break;
  38.         case '\n':
  39.             puts("?");
  40.         default:
  41.             last_input = IGN;
  42.         }
  43.     }
  44. }
Advertisement
Add Comment
Please, Sign In to add comment