annotate rvinterf/lowlevel/format.c @ 933:bd6dd6120180

rvinterf: -v enables TM hex dump, -vv enables TCH hex dump
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 23 May 2023 06:24:37 +0000
parents 3d1abb9f05ef
children fab04df64690
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 implements the decoding of Rx packets
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * into human-readable form.
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
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 #include <sys/types.h>
925
85d144f9fe56 rvinterf/lowlevel/format.c: forgot to add #include <ctype.h>
Mychaela Falconia <falcon@freecalypso.org>
parents: 924
diff changeset
7 #include <ctype.h>
0
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <stdio.h>
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <string.h>
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <strings.h>
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include "../include/pktmux.h"
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include "../include/limits.h"
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 extern u_char rxpkt[];
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 extern size_t rxpkt_len;
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16
928
65953c172f24 rvinterf/lowlevel: new hex dump format
Mychaela Falconia <falcon@freecalypso.org>
parents: 927
diff changeset
17 extern void output_cont();
65953c172f24 rvinterf/lowlevel: new hex dump format
Mychaela Falconia <falcon@freecalypso.org>
parents: 927
diff changeset
18
0
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 void
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 print_rv_trace()
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 {
927
4e243402f453 rvinterf/lowlevel: use libprint for backslash-escape output
Mychaela Falconia <falcon@freecalypso.org>
parents: 925
diff changeset
22 int i;
929
ab771ce34fac rvinterf/lowlevel/format.c: get rid of static fmtbuf
Mychaela Falconia <falcon@freecalypso.org>
parents: 928
diff changeset
23 char fmtbuf[MAX_PKT_FROM_TARGET*4];
ab771ce34fac rvinterf/lowlevel/format.c: get rid of static fmtbuf
Mychaela Falconia <falcon@freecalypso.org>
parents: 928
diff changeset
24 char *dp = fmtbuf;
0
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 strcpy(dp, "RV ");
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 dp += 3;
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 /* the SWE static ID is sent MSB first */
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 for (i = 1; i <= 4; i++) {
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 sprintf(dp, "%02X", rxpkt[i]);
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 dp += 2;
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 }
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 /* severity level */
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 sprintf(dp, " %d ", rxpkt[5]);
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 dp = index(dp, '\0');
928
65953c172f24 rvinterf/lowlevel: new hex dump format
Mychaela Falconia <falcon@freecalypso.org>
parents: 927
diff changeset
36 safe_print_trace(rxpkt + 6, (int)rxpkt_len - 6, dp);
0
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 output_line(fmtbuf);
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 }
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 void
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 print_l1_trace()
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 {
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 int i, c;
929
ab771ce34fac rvinterf/lowlevel/format.c: get rid of static fmtbuf
Mychaela Falconia <falcon@freecalypso.org>
parents: 928
diff changeset
44 char fmtbuf[MAX_PKT_FROM_TARGET*4+1];
ab771ce34fac rvinterf/lowlevel/format.c: get rid of static fmtbuf
Mychaela Falconia <falcon@freecalypso.org>
parents: 928
diff changeset
45 char *dp = fmtbuf;
0
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 strcpy(dp, "L1: ");
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 dp += 4;
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 for (i = 1; i < rxpkt_len; i++) {
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 if ((i+1 < rxpkt_len) &&
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 (rxpkt[i] == '\r' && rxpkt[i+1] == '\n' ||
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 rxpkt[i] == '\n' && rxpkt[i+1] == '\r')) {
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 *dp = '\0';
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 output_line(fmtbuf);
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 if (i+2 == rxpkt_len)
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 return;
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 dp = fmtbuf;
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 *dp++ = '+';
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 *dp++ = ' ';
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 i++;
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 continue;
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 }
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 c = rxpkt[i];
924
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
64 switch (c) {
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
65 case '\\':
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
66 *dp++ = '\\';
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
67 *dp++ = '\\';
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
68 continue;
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
69 case '\r':
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
70 *dp++ = '\\';
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
71 *dp++ = 'r';
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
72 continue;
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
73 case '\n':
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
74 *dp++ = '\\';
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
75 *dp++ = 'n';
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
76 continue;
0
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 }
924
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
78 if (c >= ' ' && c <= '~')
0
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 *dp++ = c;
924
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
80 else if (c <= 7 && (i+1 == rxpkt_len || !isdigit(rxpkt[i+1]))) {
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
81 sprintf(dp, "\\%d", c);
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
82 dp += 2;
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
83 } else {
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
84 sprintf(dp, "\\x%02X", c);
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
85 dp += 4;
d452188587b4 rvinterf: begin change to backslash escape output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 0
diff changeset
86 }
0
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 }
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 /* will get here only if no newline sequence at the end */
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 *dp = '\0';
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 output_line(fmtbuf);
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 }
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 void
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 print_g23_trace()
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 {
929
ab771ce34fac rvinterf/lowlevel/format.c: get rid of static fmtbuf
Mychaela Falconia <falcon@freecalypso.org>
parents: 928
diff changeset
96 char fmtbuf[MAX_PKT_FROM_TARGET*8]; /* size it generously */
ab771ce34fac rvinterf/lowlevel/format.c: get rid of static fmtbuf
Mychaela Falconia <falcon@freecalypso.org>
parents: 928
diff changeset
97
0
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 /* messy logic factored out into libg23 */
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 format_g23_packet(rxpkt, (int)rxpkt_len, fmtbuf);
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 output_line(fmtbuf);
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 }
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 void
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 print_tm_output_raw()
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 {
931
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
106 int i;
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
107 char fmtbuf[MAX_PKT_FROM_TARGET*3+1];
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
108 char *dp = fmtbuf;
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
109
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
110 strcpy(dp, "TM:");
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
111 dp += 3;
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
112 for (i = 1; i < rxpkt_len; i++) {
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
113 sprintf(dp, " %02X", rxpkt[i]);
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
114 dp += 3;
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
115 }
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
116 *dp = '\0';
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
117 output_line(fmtbuf);
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
118 }
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
119
bb7a03cc1e43 rvtdump, tfc139: restore old 'TM:' output format
Mychaela Falconia <falcon@freecalypso.org>
parents: 929
diff changeset
120 void
0
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 print_unknown_packet()
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 {
928
65953c172f24 rvinterf/lowlevel: new hex dump format
Mychaela Falconia <falcon@freecalypso.org>
parents: 927
diff changeset
123 output_line("Rx unknown packet format");
65953c172f24 rvinterf/lowlevel: new hex dump format
Mychaela Falconia <falcon@freecalypso.org>
parents: 927
diff changeset
124 packet_hex_dump(rxpkt, (unsigned) rxpkt_len, output_cont);
0
e7502631a0f9 initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 }