FreeCalypso > hg > freecalypso-tools
annotate rvinterf/tmsh/main.c @ 194:31d43f0e469a
fc-cmu200d skeleton started, compiles
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 24 Apr 2017 00:45:54 +0000 |
parents | 27c41e4b21ae |
children | c1aadfcd185f |
rev | line source |
---|---|
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This module contains the main() function for fc-tmsh. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 */ |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 #include <sys/types.h> |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <sys/errno.h> |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <stdio.h> |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <stdlib.h> |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <unistd.h> |
65
21a79f465d6a
fc-tmsh: use the newly adopted exit code convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
10 #include "exitcodes.h" |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 char *socket_pathname = "/tmp/rvinterf_socket"; |
70
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
13 char *rvinterf_ttyport; |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 int ttyhacks, dflag; |
71
27c41e4b21ae
fc-tmsh one-shot operation mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
70
diff
changeset
|
15 int oneshot_nowait; |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 int sock; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 extern char *rvinterf_Bopt, *rvinterf_lopt, *rvinterf_wopt; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 main(argc, argv) |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 char **argv; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 extern int optind; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 extern char *optarg; |
70
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
26 int c, sopt = 0; |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 fd_set fds; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 |
71
27c41e4b21ae
fc-tmsh one-shot operation mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
70
diff
changeset
|
29 while ((c = getopt(argc, argv, "B:dl:np:s:w:")) != EOF) |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 switch (c) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 case 'B': |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 rvinterf_Bopt = optarg; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 continue; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 case 'd': |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 dflag++; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 continue; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 case 'l': |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 rvinterf_lopt = optarg; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 continue; |
71
27c41e4b21ae
fc-tmsh one-shot operation mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
70
diff
changeset
|
40 case 'n': |
27c41e4b21ae
fc-tmsh one-shot operation mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
70
diff
changeset
|
41 oneshot_nowait++; |
27c41e4b21ae
fc-tmsh one-shot operation mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
70
diff
changeset
|
42 continue; |
70
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
43 case 'p': |
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
44 rvinterf_ttyport = optarg; |
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
45 continue; |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 case 's': |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 socket_pathname = optarg; |
70
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
48 sopt++; |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 continue; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 case 'w': |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 rvinterf_wopt = optarg; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 continue; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 case '?': |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 default: |
71
27c41e4b21ae
fc-tmsh one-shot operation mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
70
diff
changeset
|
55 /* error msg already printed */ |
65
21a79f465d6a
fc-tmsh: use the newly adopted exit code convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
56 exit(ERROR_USAGE); |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 } |
70
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
58 if (rvinterf_ttyport) { |
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
59 if (sopt) { |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 fprintf(stderr, |
70
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
61 "%s error: -p and -s options are mutually exclusive\n", |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 argv[0]); |
65
21a79f465d6a
fc-tmsh: use the newly adopted exit code convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
63 exit(ERROR_USAGE); |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 } |
70
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
65 launch_rvinterf(rvinterf_ttyport); |
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
66 } else { |
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
67 if (rvinterf_Bopt || rvinterf_lopt || rvinterf_wopt) { |
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
68 fprintf(stderr, |
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
69 "%s error: -B, -l and -w options are meaningful only when launching rvinterf\n", |
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
70 argv[0]); |
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
71 exit(ERROR_USAGE); |
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
72 } |
2c6dca514a20
fc-tmsh works like fc-shell and fc-fsio now, following the -p convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
65
diff
changeset
|
73 connect_local_socket(); |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 |
71
27c41e4b21ae
fc-tmsh one-shot operation mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
70
diff
changeset
|
76 if (argv[optind]) |
27c41e4b21ae
fc-tmsh one-shot operation mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
70
diff
changeset
|
77 return oneshot_command(argc - optind, argv + optind); |
27c41e4b21ae
fc-tmsh one-shot operation mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
70
diff
changeset
|
78 |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 ttyhacks = isatty(0) && !dflag; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 init(); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 tty_init(); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 for (;;) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 FD_ZERO(&fds); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 FD_SET(0, &fds); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 FD_SET(sock, &fds); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 c = select(sock+1, &fds, 0, 0, 0); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 if (c < 0) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 if (errno == EINTR) |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 continue; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 tty_cleanup(); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 perror("select"); |
65
21a79f465d6a
fc-tmsh: use the newly adopted exit code convention
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
92 exit(ERROR_UNIX); |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 if (FD_ISSET(0, &fds)) |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 handle_tty_input(); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 if (FD_ISSET(sock, &fds)) |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 handle_rvinterf_input(); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 fflush(stdout); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 } |