FreeCalypso > hg > freecalypso-tools
view rvinterf/asyncshell/main.c @ 295:79434b9de159
c1xx-calextr will need mkdir and librftab
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 18 Nov 2017 17:15:54 +0000 |
parents | bbc41034f14c |
children | c1aadfcd185f |
line wrap: on
line source
/* * This module contains the main() function for fc-shell. */ #include <sys/types.h> #include <sys/errno.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "exitcodes.h" char *socket_pathname = "/tmp/rvinterf_socket"; char *rvinterf_ttyport; int ttyhacks, dflag; int oneshot_mode, oneshot_nowait; int sock; extern char *rvinterf_Bopt, *rvinterf_lopt, *rvinterf_wopt; main(argc, argv) char **argv; { extern int optind; extern char *optarg; int c, sopt = 0; fd_set fds; while ((c = getopt(argc, argv, "B:dl:np:s:w:")) != EOF) switch (c) { case 'B': rvinterf_Bopt = optarg; continue; case 'd': dflag++; continue; case 'l': rvinterf_lopt = optarg; continue; case 'n': oneshot_nowait++; continue; case 'p': rvinterf_ttyport = optarg; continue; case 's': socket_pathname = optarg; sopt++; continue; case 'w': rvinterf_wopt = optarg; continue; case '?': default: /* error msg already printed */ exit(ERROR_USAGE); } if (rvinterf_ttyport) { if (sopt) { fprintf(stderr, "%s error: -p and -s options are mutually exclusive\n", argv[0]); exit(ERROR_USAGE); } launch_rvinterf(rvinterf_ttyport); } else { if (rvinterf_Bopt || rvinterf_lopt || rvinterf_wopt) { fprintf(stderr, "%s error: -B, -l and -w options are meaningful only when launching rvinterf\n", argv[0]); exit(ERROR_USAGE); } connect_local_socket(); } if (argv[optind]) { oneshot_mode = 1; return oneshot_command(argc - optind, argv + optind); } ttyhacks = isatty(0) && !dflag; init(); tty_init(); for (;;) { FD_ZERO(&fds); FD_SET(0, &fds); FD_SET(sock, &fds); c = select(sock+1, &fds, 0, 0, 0); if (c < 0) { if (errno == EINTR) continue; tty_cleanup(); perror("select"); exit(ERROR_UNIX); } if (FD_ISSET(0, &fds)) handle_tty_input(); if (FD_ISSET(sock, &fds)) handle_rvinterf_input(); fflush(stdout); } }