1*86d7f5d3SJohn Marino /*
2*86d7f5d3SJohn Marino * Copyright (c)2004 Cat's Eye Technologies. All rights reserved.
3*86d7f5d3SJohn Marino *
4*86d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without
5*86d7f5d3SJohn Marino * modification, are permitted provided that the following conditions
6*86d7f5d3SJohn Marino * are met:
7*86d7f5d3SJohn Marino *
8*86d7f5d3SJohn Marino * Redistributions of source code must retain the above copyright
9*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer.
10*86d7f5d3SJohn Marino *
11*86d7f5d3SJohn Marino * Redistributions in binary form must reproduce the above copyright
12*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in
13*86d7f5d3SJohn Marino * the documentation and/or other materials provided with the
14*86d7f5d3SJohn Marino * distribution.
15*86d7f5d3SJohn Marino *
16*86d7f5d3SJohn Marino * Neither the name of Cat's Eye Technologies nor the names of its
17*86d7f5d3SJohn Marino * contributors may be used to endorse or promote products derived
18*86d7f5d3SJohn Marino * from this software without specific prior written permission.
19*86d7f5d3SJohn Marino *
20*86d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21*86d7f5d3SJohn Marino * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22*86d7f5d3SJohn Marino * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23*86d7f5d3SJohn Marino * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24*86d7f5d3SJohn Marino * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
25*86d7f5d3SJohn Marino * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26*86d7f5d3SJohn Marino * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27*86d7f5d3SJohn Marino * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28*86d7f5d3SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29*86d7f5d3SJohn Marino * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30*86d7f5d3SJohn Marino * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
31*86d7f5d3SJohn Marino * OF THE POSSIBILITY OF SUCH DAMAGE.
32*86d7f5d3SJohn Marino */
33*86d7f5d3SJohn Marino
34*86d7f5d3SJohn Marino /*
35*86d7f5d3SJohn Marino * dump.c
36*86d7f5d3SJohn Marino * $Id: dump.c,v 1.5 2005/02/06 19:53:19 cpressey Exp $
37*86d7f5d3SJohn Marino * Debugging functions for libdfui.
38*86d7f5d3SJohn Marino * These functions are just stubs when libdfui is built without DEBUG.
39*86d7f5d3SJohn Marino */
40*86d7f5d3SJohn Marino
41*86d7f5d3SJohn Marino #include <stdarg.h>
42*86d7f5d3SJohn Marino #include <stdio.h>
43*86d7f5d3SJohn Marino #include <stdlib.h>
44*86d7f5d3SJohn Marino
45*86d7f5d3SJohn Marino #define NEEDS_DFUI_STRUCTURE_DEFINITIONS
46*86d7f5d3SJohn Marino #include "dfui.h"
47*86d7f5d3SJohn Marino #undef NEEDS_DFUI_STRUCTURE_DEFINITIONS
48*86d7f5d3SJohn Marino #include "dump.h"
49*86d7f5d3SJohn Marino
50*86d7f5d3SJohn Marino FILE *dfui_debug_file;
51*86d7f5d3SJohn Marino
52*86d7f5d3SJohn Marino #ifdef DEBUG
53*86d7f5d3SJohn Marino #define __debug_only
54*86d7f5d3SJohn Marino #else
55*86d7f5d3SJohn Marino #define __debug_only __unused
56*86d7f5d3SJohn Marino #endif
57*86d7f5d3SJohn Marino
58*86d7f5d3SJohn Marino void
dfui_info_dump(const struct dfui_info * info __debug_only)59*86d7f5d3SJohn Marino dfui_info_dump(const struct dfui_info *info __debug_only)
60*86d7f5d3SJohn Marino {
61*86d7f5d3SJohn Marino #ifdef DEBUG
62*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "+ INFO:\n");
63*86d7f5d3SJohn Marino if (info == NULL) {
64*86d7f5d3SJohn Marino fprintf(dfui_debug_file, " *NULL*");
65*86d7f5d3SJohn Marino return;
66*86d7f5d3SJohn Marino }
67*86d7f5d3SJohn Marino fprintf(dfui_debug_file, " name: %s\n", info->name);
68*86d7f5d3SJohn Marino fprintf(dfui_debug_file, " short_desc: %s\n", info->short_desc);
69*86d7f5d3SJohn Marino fprintf(dfui_debug_file, " long_desc: %s\n", info->long_desc);
70*86d7f5d3SJohn Marino #endif
71*86d7f5d3SJohn Marino }
72*86d7f5d3SJohn Marino
73*86d7f5d3SJohn Marino void
dfui_option_dump(const struct dfui_option * o __debug_only)74*86d7f5d3SJohn Marino dfui_option_dump(const struct dfui_option *o __debug_only)
75*86d7f5d3SJohn Marino {
76*86d7f5d3SJohn Marino #ifdef DEBUG
77*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "+ OPTION:\n");
78*86d7f5d3SJohn Marino if (o == NULL) {
79*86d7f5d3SJohn Marino fprintf(dfui_debug_file, " *NULL*");
80*86d7f5d3SJohn Marino return;
81*86d7f5d3SJohn Marino }
82*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "value: %s\n", o->value);
83*86d7f5d3SJohn Marino #endif
84*86d7f5d3SJohn Marino }
85*86d7f5d3SJohn Marino
86*86d7f5d3SJohn Marino void
dfui_field_dump(const struct dfui_field * fi __debug_only)87*86d7f5d3SJohn Marino dfui_field_dump(const struct dfui_field *fi __debug_only)
88*86d7f5d3SJohn Marino {
89*86d7f5d3SJohn Marino #ifdef DEBUG
90*86d7f5d3SJohn Marino struct dfui_option *o;
91*86d7f5d3SJohn Marino
92*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "+ FIELD:\n");
93*86d7f5d3SJohn Marino if (fi == NULL) {
94*86d7f5d3SJohn Marino fprintf(dfui_debug_file, " *NULL*");
95*86d7f5d3SJohn Marino return;
96*86d7f5d3SJohn Marino }
97*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "id: %s\n", fi->id);
98*86d7f5d3SJohn Marino dfui_info_dump(fi->info);
99*86d7f5d3SJohn Marino for (o = fi->option_head; o != NULL; o = o->next) {
100*86d7f5d3SJohn Marino dfui_option_dump(o);
101*86d7f5d3SJohn Marino }
102*86d7f5d3SJohn Marino #endif
103*86d7f5d3SJohn Marino }
104*86d7f5d3SJohn Marino
105*86d7f5d3SJohn Marino void
dfui_action_dump(const struct dfui_action * a __debug_only)106*86d7f5d3SJohn Marino dfui_action_dump(const struct dfui_action *a __debug_only)
107*86d7f5d3SJohn Marino {
108*86d7f5d3SJohn Marino #ifdef DEBUG
109*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "+ ACTION:\n");
110*86d7f5d3SJohn Marino if (a == NULL) {
111*86d7f5d3SJohn Marino fprintf(dfui_debug_file, " *NULL*");
112*86d7f5d3SJohn Marino return;
113*86d7f5d3SJohn Marino }
114*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "id: %s\n", a->id);
115*86d7f5d3SJohn Marino dfui_info_dump(a->info);
116*86d7f5d3SJohn Marino /* parameters */
117*86d7f5d3SJohn Marino #endif
118*86d7f5d3SJohn Marino }
119*86d7f5d3SJohn Marino
120*86d7f5d3SJohn Marino void
dfui_celldata_dump(const struct dfui_celldata * c __debug_only)121*86d7f5d3SJohn Marino dfui_celldata_dump(const struct dfui_celldata *c __debug_only)
122*86d7f5d3SJohn Marino {
123*86d7f5d3SJohn Marino #ifdef DEBUG
124*86d7f5d3SJohn Marino if (c == NULL) {
125*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "*NULL* ");
126*86d7f5d3SJohn Marino return;
127*86d7f5d3SJohn Marino }
128*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "{%s = %s}", c->field_id, c->value);
129*86d7f5d3SJohn Marino #endif
130*86d7f5d3SJohn Marino }
131*86d7f5d3SJohn Marino
132*86d7f5d3SJohn Marino void
dfui_dataset_dump(const struct dfui_dataset * ds __debug_only)133*86d7f5d3SJohn Marino dfui_dataset_dump(const struct dfui_dataset *ds __debug_only)
134*86d7f5d3SJohn Marino {
135*86d7f5d3SJohn Marino #ifdef DEBUG
136*86d7f5d3SJohn Marino struct dfui_celldata *c;
137*86d7f5d3SJohn Marino
138*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "+ DATASET:\n");
139*86d7f5d3SJohn Marino if (ds == NULL) {
140*86d7f5d3SJohn Marino fprintf(dfui_debug_file, " *NULL*");
141*86d7f5d3SJohn Marino return;
142*86d7f5d3SJohn Marino }
143*86d7f5d3SJohn Marino
144*86d7f5d3SJohn Marino for (c = ds->celldata_head; c != NULL; c = c->next) {
145*86d7f5d3SJohn Marino dfui_celldata_dump(c);
146*86d7f5d3SJohn Marino }
147*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "\n");
148*86d7f5d3SJohn Marino #endif
149*86d7f5d3SJohn Marino }
150*86d7f5d3SJohn Marino
151*86d7f5d3SJohn Marino
152*86d7f5d3SJohn Marino void
dfui_form_dump(const struct dfui_form * f __debug_only)153*86d7f5d3SJohn Marino dfui_form_dump(const struct dfui_form *f __debug_only)
154*86d7f5d3SJohn Marino {
155*86d7f5d3SJohn Marino #ifdef DEBUG
156*86d7f5d3SJohn Marino struct dfui_field *fi;
157*86d7f5d3SJohn Marino struct dfui_action *a;
158*86d7f5d3SJohn Marino struct dfui_dataset *ds;
159*86d7f5d3SJohn Marino
160*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "FORM ------\n");
161*86d7f5d3SJohn Marino if (f == NULL) {
162*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "*NULL*");
163*86d7f5d3SJohn Marino return;
164*86d7f5d3SJohn Marino }
165*86d7f5d3SJohn Marino
166*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "id: %s\n", f->id);
167*86d7f5d3SJohn Marino dfui_info_dump(f->info);
168*86d7f5d3SJohn Marino
169*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "multiple: %d\n", f->multiple);
170*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "extensible: %d\n", f->extensible);
171*86d7f5d3SJohn Marino
172*86d7f5d3SJohn Marino for (fi = f->field_head; fi != NULL; fi = fi->next) {
173*86d7f5d3SJohn Marino dfui_field_dump(fi);
174*86d7f5d3SJohn Marino }
175*86d7f5d3SJohn Marino for (a = f->action_head; a != NULL; a = a->next) {
176*86d7f5d3SJohn Marino dfui_action_dump(a);
177*86d7f5d3SJohn Marino }
178*86d7f5d3SJohn Marino for (ds = f->dataset_head; ds != NULL; ds = ds->next) {
179*86d7f5d3SJohn Marino dfui_dataset_dump(ds);
180*86d7f5d3SJohn Marino }
181*86d7f5d3SJohn Marino #endif
182*86d7f5d3SJohn Marino }
183*86d7f5d3SJohn Marino
184*86d7f5d3SJohn Marino void
dfui_response_dump(const struct dfui_response * r __debug_only)185*86d7f5d3SJohn Marino dfui_response_dump(const struct dfui_response *r __debug_only)
186*86d7f5d3SJohn Marino {
187*86d7f5d3SJohn Marino #ifdef DEBUG
188*86d7f5d3SJohn Marino struct dfui_dataset *ds;
189*86d7f5d3SJohn Marino
190*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "RESPONSE ------\n");
191*86d7f5d3SJohn Marino if (r == NULL) {
192*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "*NULL*");
193*86d7f5d3SJohn Marino return;
194*86d7f5d3SJohn Marino }
195*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "form id: %s\n", r->form_id);
196*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "action id: %s\n", r->action_id);
197*86d7f5d3SJohn Marino
198*86d7f5d3SJohn Marino for (ds = r->dataset_head; ds != NULL; ds = ds->next) {
199*86d7f5d3SJohn Marino dfui_dataset_dump(ds);
200*86d7f5d3SJohn Marino }
201*86d7f5d3SJohn Marino #endif
202*86d7f5d3SJohn Marino }
203*86d7f5d3SJohn Marino
204*86d7f5d3SJohn Marino void
dfui_progress_dump(const struct dfui_progress * pr __debug_only)205*86d7f5d3SJohn Marino dfui_progress_dump(const struct dfui_progress *pr __debug_only)
206*86d7f5d3SJohn Marino {
207*86d7f5d3SJohn Marino #ifdef DEBUG
208*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "PROGRESS ------\n");
209*86d7f5d3SJohn Marino if (pr == NULL) {
210*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "*NULL*");
211*86d7f5d3SJohn Marino return;
212*86d7f5d3SJohn Marino }
213*86d7f5d3SJohn Marino
214*86d7f5d3SJohn Marino /* fprintf(dfui_debug_file, "id: %s\n", pr->id); */
215*86d7f5d3SJohn Marino dfui_info_dump(pr->info);
216*86d7f5d3SJohn Marino
217*86d7f5d3SJohn Marino fprintf(dfui_debug_file, "amount: %d\n", pr->amount);
218*86d7f5d3SJohn Marino #endif
219*86d7f5d3SJohn Marino }
220*86d7f5d3SJohn Marino
221*86d7f5d3SJohn Marino void
dfui_debug(const char * fmt __debug_only,...)222*86d7f5d3SJohn Marino dfui_debug(const char *fmt __debug_only, ...)
223*86d7f5d3SJohn Marino {
224*86d7f5d3SJohn Marino #ifdef DEBUG
225*86d7f5d3SJohn Marino va_list args;
226*86d7f5d3SJohn Marino
227*86d7f5d3SJohn Marino va_start(args, fmt);
228*86d7f5d3SJohn Marino vfprintf(dfui_debug_file, fmt, args);
229*86d7f5d3SJohn Marino va_end(args);
230*86d7f5d3SJohn Marino #endif
231*86d7f5d3SJohn Marino }
232