1 /*
2  *
3  * Some macros to dump out formatted struct's via the trace file.  -KED
4  *
5  */
6 #ifndef STRUCTDUMP_H
7 #define STRUCTDUMP_H
8 
9 /* usage: DUMPSTRUCT_LINK(link_ptr, "message"); */
10 #define   DUMPSTRUCT_LINK(L,X) \
11 if ((L)) { \
12 CTRACE((tfp, "\n" \
13             "KED:     link_ptr=%p  sizeof=%d  ["X"]\n" \
14             "link       struct {\n"      \
15             "           *lname=%p\n"     \
16             "            lname=|%s|\n"   \
17             "          *target=%p\n"     \
18             "           target=|%s|\n"   \
19             "        *hightext=%p\n"     \
20             "         hightext=|%s|\n"   \
21             "       *hightext2=%p\n"     \
22             "        hightext2=|%s|\n"   \
23             " hightext2_offset=%d\n"     \
24             "      inUnderline=%1x\n"    \
25             "               lx=%d\n"     \
26             "               ly=%d\n"     \
27             "             type=%d\n"     \
28             "    anchor_number=%d\n"     \
29             "  anchor_line_num=%d\n"     \
30             "            *form=%p\n"     \
31             "}\n", \
32             (L), sizeof(*((L))), \
33             (L)->lname, (L)->lname, (L)->target, (L)->target, \
34             (L)->l_hightext, (L)->l_hightext, \
35             (L)->l_hightext2, (L)->l_hightext2, \
36             (L)->l_hightext2_offset, \
37             (L)->inUnderline, (L)->lx, (L)->ly, \
38             (L)->type, (L)->anchor_number, (L)->anchor_line_num, (L)->form)); \
39 }else{ \
40 CTRACE((tfp, "\n" \
41             "KED:     link_ptr=0x00000000  (NULL)     ["X"]\n")); \
42 } \
43 CTRACE_FLUSH(tfp);
44 
45 /* usage: DUMPSTRUCT_ANCHOR(anchor_ptr, "message"); */
46 #define   DUMPSTRUCT_ANCHOR(A,X) \
47 if ((A)) { \
48 CTRACE((tfp, "\n" \
49             "KED:   anchor_ptr=%p  sizeof=%lu  ["X"]\n" \
50             "TextAnchor struct {\n"      \
51             "            *next=%p\n"     \
52             "            *prev=%p\n"     \
53             "           number=%d\n"     \
54             "         line_pos=%d\n"     \
55             "           extent=%d\n"     \
56             "         line_num=%d\n"     \
57             "        link_type=%d\n"     \
58             "     *input_field=%p\n"     \
59             "      input_field=|%s|\n"   \
60             "      show_anchor=%1x\n"    \
61             "      inUnderline=%1x\n"    \
62             "   expansion_anch=%1x\n"    \
63             "          *anchor=%p\n"     \
64             "}\n", \
65             (A), (unsigned long) sizeof(*((A))), \
66             (A)->next, (A)->prev, \
67             (A)->number, (A)->line_pos, \
68             (A)->extent, (A)->line_num, \
69             (A)->link_type, \
70             (A)->input_field, \
71             (A)->input_field ? NonNull((A)->input_field->name) : "", \
72             (A)->show_anchor, \
73             (A)->inUnderline, (A)->expansion_anch, (A)->anchor)); \
74 }else{ \
75 CTRACE((tfp, "\n" \
76             "KED:   anchor_ptr=0x00000000  (NULL)     ["X"]\n")); \
77 } \
78 CTRACE_FLUSH(tfp);
79 
80 /* usage: DUMPSTRUCT_FORM(forminfo_ptr, "message"); */
81 #define   DUMPSTRUCT_FORMINFO(F,X) \
82 if ((F)) { \
83 CTRACE((tfp, "\n" \
84             "KED: forminfo_ptr=%p  sizeof=%lu  ["X"]\n" \
85             "FormInfo   struct {\n"      \
86             "            *name=%p\n"     \
87             "             name=|%s|\n"   \
88             "           number=%d\n"     \
89             "             type=%d\n"     \
90             "           *value=%p\n"     \
91             "            value=|%s|\n"   \
92             "      *orig_value=%p\n"     \
93             "       orig_value=|%s|\n"   \
94             "             size=%d\n"     \
95             "        maxlength=%lu\n"    \
96             "            group=%d\n"     \
97             "        num_value=%d\n"     \
98             "           hrange=%d\n"     \
99             "           lrange=%d\n"     \
100             "     *select_list=%p\n"     \
101             "    submit_action=|%s|\n"   \
102             "    submit_method=%d\n"     \
103             "   submit_enctype=|%s|\n"   \
104             "     submit_title=|%s|\n"   \
105             "         no_cache=%1x\n"    \
106             "  cp_submit_value=|%s|\n"   \
107             "orig_submit_value=|%s|\n"   \
108             "           size_l=%d\n"     \
109             "         disabled=%d\n"     \
110             "         readonly=%d\n"     \
111             "          name_cs=%d\n"     \
112             "         value_cs=%d\n"     \
113             "        accept_cs=|%s|\n"   \
114             "}\n", \
115             (F), (unsigned long) sizeof(*((F))), \
116             (F)->name, NonNull((F)->name), \
117             (F)->number, (F)->type, \
118             (F)->value, NonNull((F)->value), \
119             (F)->orig_value, NonNull((F)->orig_value), \
120             (F)->size, (unsigned long) (F)->maxlength, \
121             (F)->group, (F)->num_value, \
122             (F)->hrange, (F)->lrange, (F)->select_list, \
123             NonNull((F)->submit_action), \
124             (F)->submit_method, \
125             NonNull((F)->submit_enctype), \
126             NonNull((F)->submit_title), \
127             (F)->no_cache, \
128             NonNull((F)->cp_submit_value), \
129             NonNull((F)->orig_submit_value), \
130             (F)->size_l, (F)->disabled, (F)->readonly, (F)->name_cs, (F)->value_cs, \
131             NonNull((F)->accept_cs))); \
132 } else { \
133 CTRACE((tfp, "\n" \
134             "KED: forminfo_ptr=0x00000000  (NULL)     ["X"]\n")); \
135 } \
136 CTRACE_FLUSH(tfp);
137 
138 /* usage: DUMPSTRUCT_LINE(htline_ptr, "message"); */
139 #define   DUMPSTRUCT_LINE(L,X) \
140 if ((L)) { \
141 CTRACE((tfp, "\n" \
142             "KED: htline_ptr=%p  sizeof=%d  ["X"]\n" \
143             "HTLine  struct {\n"      \
144             "         *next=%p\n"     \
145             "         *prev=%p\n"     \
146             "        offset=%d\n"     \
147             "          size=%d\n"     \
148             "   split_after=%1x\n"    \
149             "        bullet=%1x\n"    \
150             "expansion_line=%1x\n"    \
151             "w/o U_C_S def\n"         \
152             "        data[]=%p\n"     \
153             "          data=|%s|\n"   \
154             "}\n", \
155             (L), sizeof(*((L))), \
156             (L)->next, (L)->prev, (L)->offset, (L)->size, (L)->split_after, \
157             (L)->bullet, (L)->expansion_line, (L)->data, (L)->data)); \
158 }else{ \
159 CTRACE((tfp, "\n" \
160             "KED: htline_ptr=0x00000000  (NULL)     ["X"]\n")); \
161 } \
162 CTRACE_FLUSH(tfp);
163 
164 #endif /* STRUCTDUMP_H */
165