FreeCalypso > hg > fc-pcm-if
annotate sw/mcsi-rxtx/usercmd.c @ 13:315428573a25
fc-mcsi-rxtx: implement record function
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 28 Oct 2024 07:24:53 +0000 |
parents | 23555b9a1c20 |
children |
rev | line source |
---|---|
7
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This module implements fc-mcsi-rxtx user command dispatch. |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 */ |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 #include <sys/types.h> |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <ctype.h> |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <stdio.h> |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <string.h> |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <strings.h> |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdlib.h> |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 extern char usercmd[]; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 |
12
23555b9a1c20
fc-mcsi-rxtx: implement pcm-fill command
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
14 extern void cmd_pcm_fill(); |
10
c1d9b5d128f5
fc-mcsi-rxtx: implement print-rx command
Mychaela Falconia <falcon@freecalypso.org>
parents:
7
diff
changeset
|
15 extern void cmd_print_rx(); |
13
315428573a25
fc-mcsi-rxtx: implement record function
Mychaela Falconia <falcon@freecalypso.org>
parents:
12
diff
changeset
|
16 extern void cmd_record(); |
315428573a25
fc-mcsi-rxtx: implement record function
Mychaela Falconia <falcon@freecalypso.org>
parents:
12
diff
changeset
|
17 extern void cmd_record_stop(); |
10
c1d9b5d128f5
fc-mcsi-rxtx: implement print-rx command
Mychaela Falconia <falcon@freecalypso.org>
parents:
7
diff
changeset
|
18 |
7
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 static void |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 cmd_exit() |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 { |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 tty_cleanup(); |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 exit(0); |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 } |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 static struct cmdtab { |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 char *cmd; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 int minargs; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 int maxargs; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 void (*func)(); |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 } cmdtab[] = { |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 {"exit", 0, 0, cmd_exit}, |
12
23555b9a1c20
fc-mcsi-rxtx: implement pcm-fill command
Mychaela Falconia <falcon@freecalypso.org>
parents:
10
diff
changeset
|
33 {"pcm-fill", 0, 1, cmd_pcm_fill}, |
10
c1d9b5d128f5
fc-mcsi-rxtx: implement print-rx command
Mychaela Falconia <falcon@freecalypso.org>
parents:
7
diff
changeset
|
34 {"print-rx", 0, 0, cmd_print_rx}, |
7
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 {"quit", 0, 0, cmd_exit}, |
13
315428573a25
fc-mcsi-rxtx: implement record function
Mychaela Falconia <falcon@freecalypso.org>
parents:
12
diff
changeset
|
36 {"record", 1, 1, cmd_record}, |
315428573a25
fc-mcsi-rxtx: implement record function
Mychaela Falconia <falcon@freecalypso.org>
parents:
12
diff
changeset
|
37 {"record-stop", 0, 0, cmd_record_stop}, |
315428573a25
fc-mcsi-rxtx: implement record function
Mychaela Falconia <falcon@freecalypso.org>
parents:
12
diff
changeset
|
38 /* table search terminator */ |
7
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 {0, 0, 0, 0} |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 }; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 void |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 dispatch_user_cmd() |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 { |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 char *argv[10]; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 char *cp, **ap; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 struct cmdtab *tp; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 for (cp = usercmd; isspace(*cp); cp++) |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 ; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 if (!*cp || *cp == '#') |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 return; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 argv[0] = cp; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 while (*cp && !isspace(*cp)) |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 cp++; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 if (*cp) |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 *cp++ = '\0'; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 for (tp = cmdtab; tp->cmd; tp++) |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 if (!strcmp(tp->cmd, argv[0])) |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 break; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 if (!tp->func) { |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 printf("error: no such command\n"); |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 return; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 } |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 for (ap = argv + 1; ; ) { |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 while (isspace(*cp)) |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 cp++; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 if (!*cp || *cp == '#') |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 break; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 if (ap - argv - 1 >= tp->maxargs) { |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 printf("error: too many arguments\n"); |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 return; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 } |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 if (*cp == '"') { |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 *ap++ = ++cp; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 while (*cp && *cp != '"') |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 cp++; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 if (*cp != '"') { |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 printf("error: unterminated quoted string\n"); |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 return; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 } |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 *cp++ = '\0'; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 } else { |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 *ap++ = cp; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 while (*cp && !isspace(*cp)) |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 cp++; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 if (*cp) |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 *cp++ = '\0'; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 } |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 } |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 if (ap - argv - 1 < tp->minargs) { |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 printf("error: too few arguments\n"); |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 return; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 } |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 *ap = 0; |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 tp->func(ap - argv, argv); |
8a386263dd51
fc-mcsi-rxtx skeleton put together
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 } |