/* answerback.c version 0.1 * Written by John Newbigin * GPL Version 2 * Compile with 'gcc -Wall -o answerback answerback.c' * */ #include #include #include #include #include int main(int argc, char **argv) { char *name = "ANSWERBACK"; char code = 5; char buffer[16]; int r; sigset_t sig, sigsave; struct termios term, termsave; FILE *fp; if(argc == 2) { name = argv[1]; } if((fp = fopen(ctermid(NULL), "r+")) == NULL) { perror("open"); return 0; } setbuf(fp, NULL); sigemptyset(&sig); sigaddset(&sig, SIGINT); sigaddset(&sig, SIGTSTP); sigprocmask(SIG_BLOCK, &sig, &sigsave); tcgetattr(fileno(fp), &termsave); term = termsave; term.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL | ICANON); term.c_cc[VMIN] = 0; term.c_cc[VTIME] = 10; tcsetattr(fileno(fp), TCSAFLUSH, &term); write(fileno(fp), &code, 1); memset(buffer, 0, sizeof(buffer)); r = read(fileno(fp), buffer, sizeof(buffer) - 1); tcsetattr(fileno(fp), TCSAFLUSH, &termsave); sigprocmask(SIG_SETMASK, &sigsave, NULL); fclose(fp); if(r > 0) { printf("%s='%s'\n", name, buffer); } return 0; }