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