annotate rvinterf/libprint/back_esc.c @ 1014:961efadd530a default tip

fc-shell TCH DL handler: add support for CSD modes TCH DL capture mechanism in FC Tourmaline firmware has been extended to support CSD modes in addition to speech - add the necessary support on the host tools side. It needs to be noted that this mechanism in its present state does NOT provide the debug utility value that was sought: as we learned only after the code was implemented, TI's DSP has a misfeature in that the buffer we are reading (a_dd_0[]) is zeroed out when the IDS block is enabled, i.e., we are reading all zeros and not the real DL bits we were after. But since the code has already been written, we are keeping it - perhaps we can do some tests with IDS disabled.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 26 Nov 2024 06:27:43 +0000
parents 6a0aa8d36d06
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
926
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * The function implemented in this module prints a potentially-dirty string
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * into a buffer with C-style backslash escapes, including doubling of any
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * already-present backslashes. The output buffer must be sized for up to
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * 4x expansion, plus the terminating NUL.
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 */
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <sys/types.h>
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <ctype.h>
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <stdio.h>
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 void
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 safe_print_trace(src, srclen, dest)
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 u_char *src;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 char *dest;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 {
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 int i, c;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 char *dp;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 dp = dest;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 for (i = 0; i < srclen; i++) {
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 c = src[i];
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 switch (c) {
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 case '\\':
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 *dp++ = '\\';
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 *dp++ = '\\';
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 continue;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 case '\r':
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 *dp++ = '\\';
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 *dp++ = 'r';
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 continue;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 case '\n':
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 *dp++ = '\\';
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 *dp++ = 'n';
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 continue;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 }
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 if (c >= ' ' && c <= '~')
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 *dp++ = c;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 else if (c <= 7 && (i+1 == srclen || !isdigit(src[i+1]))) {
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 sprintf(dp, "\\%d", c);
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 dp += 2;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 } else {
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 sprintf(dp, "\\x%02X", c);
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 dp += 4;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 }
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 }
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 *dp = '\0';
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 }