int main(int ac, char **av) { t_env env; if (!(isatty(0))) error_quit("Invalid stdin, please run from terminal"); g_env = &env; env.old_width = 0; env.old_height = 0; env.list_size = ac - 1; env.items = NULL; get_tty_fd(&env); build_list(&env, ac, av); env.curr = env.items; init_signals(); tgetent(0, getenv("TERM")); if (!(env.caps = malloc(sizeof(*env.caps)))) error_quit("Failed to malloc env caps"); init_caps(env.caps); key_codes_init(&env); terminal_catch(); env.fd = 2; while (1) { draw_list(&env); read_stdin(&env); } }
int main(int argc, char **argv) { t_list *list; char *term; char *bp; int tty; struct termios t; struct termios save; init_main(&bp, &list); tty = get_tty_fd(); if (argc < 2) { my_printf("[*] Usage : %s [arg:]\n", argv[0]); return (0); } if (my_params_to_list(&list, argc, argv)) return (1); if (catch_error(&term, bp, &t, &save)) return (1); raw_mode(&t); clean_screen(tty); my_select(&list, tty); default_mode(&save); return (0); }
int main (int argc, char *argv[]) { int kfd, tfd; int nfd; fd_set fixed_mask, select_mask; int cr; char c; int i; int echo; int mapda; int ctsrts; if (argc < 2) { fprintf (stderr, "Usage %s <tty_spec> [ echo ] [ crlf ] [ noctsrts ]\n", argv[0]); init_tty("", 0, 0, 0); exit (1); } echo = 0; mapda = 0; ctsrts = 1; for (i = 2; i < argc; i++) { if (strcmp(argv[i], "echo") == 0) { echo = 1; } else if (strcmp(argv[i], "crlf") == 0) { mapda = 1; } else if (strcmp(argv[i], "noctsrts") == 0) { ctsrts = 0; } else { fprintf (stderr, "Usage %s <tty_spec> [ echo ] [ crlf ] [ noctsrts ]\n", argv[0]); init_tty("", 0, 0, 0); exit (1); } } init_tty(argv[1], ctsrts, echo, mapda); tfd = get_tty_fd(); printf ("Ready. Exit with Ctrl X.\n"); kfd = fileno(stdin); init_kbd(kfd); nfd = tfd; if (nfd < kfd) nfd = kfd; FD_ZERO (&fixed_mask); FD_SET (tfd, &fixed_mask); FD_SET (kfd, &fixed_mask); for (;;) { memcpy (&select_mask, &fixed_mask, sizeof(fd_set)); cr = select (nfd+1, &select_mask, (fd_set*)NULL, (fd_set*)NULL, (struct timeval*)NULL); if (cr == -1) { if (errno != EINTR) { perror ("select"); } } else if (cr == 0) { fprintf (stderr, "select returned 0\n"); } else { if (FD_ISSET(kfd, &select_mask) ) { #ifdef DEBUG fprintf (stderr, "kbd event selected\n"); #endif errno = 0; cr = read (kfd, &c, 1); if (cr != 1) { perror ("read kbd"); } #ifdef DEBUG fprintf (stderr, "kbd char read: %c 0x%x\n", c, (int)c); #endif if (c == 0x18) { /* Exit */ restore_kbd (kfd); restore_tty (); (void) putchar ((int)'\n'); exit (0); } send_tty (c); #ifdef DEBUG fprintf (stderr, "sent to tty.\n"); #endif } else if (FD_ISSET(tfd, &select_mask) ) { #ifdef DEBUG fprintf (stderr, "tty event selected\n"); #endif read_tty (&c); #ifdef DEBUG fprintf (stderr, "tty char read: %c %x\n", c, (int)c); #endif (void) putchar ((int)c); #ifdef DEBUG fprintf (stderr, "sent to display.\n"); #endif (void) fflush (stdout); } else { fprintf (stderr, "select returned but fd not set\n"); } } } }