xref: /haiku/src/add-ons/print/transports/shared/DbgMsg.cpp (revision 83b1a68c52ba3e0e8796282759f694b7fdddf06d)
1 // Sun, 18 Jun 2000
2 // Y.Takagi
3 
4 #include <cstdio>
5 #include <cstdarg>
6 
7 #include <Message.h>
8 #include <File.h>
9 #include <Directory.h>
10 #include <fs_attr.h>
11 
12 #include "DbgMsg.h"
13 
14 #ifdef _DEBUG
15 
16 #if (!__MWERKS__ || defined(MSIPL_USING_NAMESPACE))
17 using namespace std;
18 #else
19 #define std
20 #endif
21 
22 void write_debug_stream(const char *format, ...)
23 {
24 	va_list	ap;
25 	va_start(ap, format);
26 	FILE *f = fopen("/boot/home/transport.log", "aw+");
27 	vfprintf(f, format, ap);
28 	fclose(f);
29 	va_end(ap);
30 }
31 
32 
33 void DUMP_BFILE(BFile *in, const char *path)
34 {
35 	off_t size;
36 	if (B_NO_ERROR == in->GetSize(&size)) {
37 		uchar *buffer = new uchar[size];
38 		in->Read(buffer, size);
39 		BFile out(path, B_WRITE_ONLY | B_CREATE_FILE);
40 		out.Write(buffer, size);
41 		in->Seek(0, SEEK_SET);
42 		delete [] buffer;
43 	}
44 }
45 
46 
47 void DUMP_BMESSAGE(BMessage *msg)
48 {
49 	uint32 i;
50 	int32 j;
51 	char *name  = "";
52 	uint32 type = 0;
53 	int32 count = 0;
54 
55 	DBGMSG(("\t************ START - DUMP BMessage ***********\n"));
56 	DBGMSG(("\taddress: 0x%x\n", (int)msg));
57 	if (!msg)
58 		return;
59 
60 #if (!__MWERKS__)
61 	DBGMSG(("\tmsg->what: %c%c%c%c\n",
62 		*((char *)&msg->what + 3),
63 		*((char *)&msg->what + 2),
64 		*((char *)&msg->what + 1),
65 		*((char *)&msg->what + 0)));
66 #else
67 	DBGMSG(("\tmsg->what: %c%c%c%c\n",
68 		*((char *)&msg->what + 0),
69 		*((char *)&msg->what + 1),
70 		*((char *)&msg->what + 2),
71 		*((char *)&msg->what + 3)));
72 #endif
73 
74 	for (i= 0; msg->GetInfo(B_ANY_TYPE, i, &name, &type, &count) == B_OK; i++) {
75 		switch (type) {
76 		case B_BOOL_TYPE:
77 			for (j = 0; j < count; j++) {
78 				bool aBool;
79 				aBool = msg->FindBool(name, j);
80 				DBGMSG(("\t%s, B_BOOL_TYPE[%d]: %s\n",
81 					name, j, aBool ? "true" : "false"));
82 			}
83 			break;
84 
85 		case B_INT8_TYPE:
86 			for (j = 0; j < count; j++) {
87 				int8 anInt8;
88 				msg->FindInt8(name, j, &anInt8);
89 				DBGMSG(("\t%s, B_INT8_TYPE[%d]: %d\n", name, j, (int)anInt8));
90 			}
91 			break;
92 
93 		case B_INT16_TYPE:
94 			for (j = 0; j < count; j++) {
95 				int16 anInt16;
96 				msg->FindInt16(name, j, &anInt16);
97 				DBGMSG(("\t%s, B_INT16_TYPE[%d]: %d\n", name, j, (int)anInt16));
98 			}
99 			break;
100 
101 		case B_INT32_TYPE:
102 			for (j = 0; j < count; j++) {
103 				int32 anInt32;
104 				msg->FindInt32(name, j, &anInt32);
105 				DBGMSG(("\t%s, B_INT32_TYPE[%d]: %d\n", name, j, (int)anInt32));
106 			}
107 			break;
108 
109 		case B_INT64_TYPE:
110 			for (j = 0; j < count; j++) {
111 				int64 anInt64;
112 				msg->FindInt64(name, j, &anInt64);
113 				DBGMSG(("\t%s, B_INT64_TYPE[%d]: %d\n", name, j, (int)anInt64));
114 			}
115 			break;
116 
117 		case B_FLOAT_TYPE:
118 			for (j = 0; j < count; j++) {
119 				float aFloat;
120 				msg->FindFloat(name, j, &aFloat);
121 				DBGMSG(("\t%s, B_FLOAT_TYPE[%d]: %f\n", name, j, aFloat));
122 			}
123 			break;
124 
125 		case B_DOUBLE_TYPE:
126 			for (j = 0; j < count; j++) {
127 				double aDouble;
128 				msg->FindDouble(name, j, &aDouble);
129 				DBGMSG(("\t%s, B_DOUBLE_TYPE[%d]: %f\n", name, j, (float)aDouble));
130 			}
131 			break;
132 
133 		case B_STRING_TYPE:
134 			for (j = 0; j < count; j++) {
135 				const char *string;
136 				msg->FindString(name, j, &string);
137 				DBGMSG(("\t%s, B_STRING_TYPE[%d]: %s\n", name, j, string));
138 			}
139 			break;
140 
141 		case B_POINT_TYPE:
142 			for (j = 0; j < count; j++) {
143 				BPoint aPoint;
144 				msg->FindPoint(name, j, &aPoint);
145 				DBGMSG(("\t%s, B_POINT_TYPE[%d]: %f, %f\n",
146 					name, j, aPoint.x, aPoint.y));
147 			}
148 			break;
149 
150 		case B_RECT_TYPE:
151 			for (j = 0; j < count; j++) {
152 				BRect aRect;
153 				msg->FindRect(name, j, &aRect);
154 				DBGMSG(("\t%s, B_RECT_TYPE[%d]: %f, %f, %f, %f\n",
155 					name, j, aRect.left, aRect.top, aRect.right, aRect.bottom));
156 			}
157 			break;
158 
159 		case B_REF_TYPE:
160 		case B_MESSAGE_TYPE:
161 		case B_MESSENGER_TYPE:
162 		case B_POINTER_TYPE:
163 			DBGMSG(("\t%s, 0x%x, count: %d\n",
164 				name ? name : "(null)", type, count));
165 			break;
166 		default:
167 			DBGMSG(("\t%s, 0x%x, count: %d\n",
168 				name ? name : "(null)", type, count));
169 			break;
170 		}
171 
172 		name  = "";
173 		type  = 0;
174 		count = 0;
175 	}
176 	DBGMSG(("\t************ END - DUMP BMessage ***********\n"));
177 }
178 
179 #define PD_DRIVER_NAME		"Driver Name"
180 #define PD_PRINTER_NAME		"Printer Name"
181 #define PD_COMMENTS			"Comments"
182 
183 void DUMP_BDIRECTORY(BDirectory *dir)
184 {
185 	char buffer1[256];
186 	char buffer2[256];
187 	attr_info info;
188 	int32 i;
189 	float f;
190 	BRect rc;
191 	bool b;
192 
193 	DBGMSG(("\t************ STRAT - DUMP BDirectory ***********\n"));
194 
195 	dir->RewindAttrs();
196 	while (dir->GetNextAttrName(buffer1) == B_NO_ERROR) {
197 		dir->GetAttrInfo(buffer1, &info);
198 		switch (info.type) {
199 		case B_ASCII_TYPE:
200 			dir->ReadAttr(buffer1, info.type, 0, buffer2, sizeof(buffer2));
201 			DBGMSG(("\t%s, B_ASCII_TYPE: %s\n", buffer1, buffer2));
202 			break;
203 		case B_STRING_TYPE:
204 			dir->ReadAttr(buffer1, info.type, 0, buffer2, sizeof(buffer2));
205 			DBGMSG(("\t%s, B_STRING_TYPE: %s\n", buffer1, buffer2));
206 			break;
207 		case B_INT32_TYPE:
208 			dir->ReadAttr(buffer1, info.type, 0, &i, sizeof(i));
209 			DBGMSG(("\t%s, B_INT32_TYPE: %d\n", buffer1, i));
210 			break;
211 		case B_FLOAT_TYPE:
212 			dir->ReadAttr(buffer1, info.type, 0, &f, sizeof(f));
213 			DBGMSG(("\t%s, B_FLOAT_TYPE: %f\n", buffer1, f));
214 			break;
215 		case B_RECT_TYPE:
216 			dir->ReadAttr(buffer1, info.type, 0, &rc, sizeof(rc));
217 			DBGMSG(("\t%s, B_RECT_TYPE: %f, %f, %f, %f\n", buffer1, rc.left, rc.top, rc.right, rc.bottom));
218 			break;
219 		case B_BOOL_TYPE:
220 			dir->ReadAttr(buffer1, info.type, 0, &b, sizeof(b));
221 			DBGMSG(("\t%s, B_BOOL_TYPE: %d\n", buffer1, (int)b));
222 			break;
223 		default:
224 			DBGMSG(("\t%s, %c%c%c%c\n",
225 				buffer1,
226 				*((char *)&info.type + 3),
227 				*((char *)&info.type + 2),
228 				*((char *)&info.type + 1),
229 				*((char *)&info.type + 0)));
230 			break;
231 		}
232 	}
233 
234 	DBGMSG(("\t************ END - DUMP BDirectory ***********\n"));
235 }
236 
237 #endif	/* _DEBUG */
238