xref: /haiku/src/tests/servers/input/msgspy/MsgSpy.cpp (revision 52a380120846174213ccce9c4aab0dda17c72083)
1*52a38012Sejakowatz //-------------------------------------------------------------------------
2*52a38012Sejakowatz // Handy InputFilter that dumps all Messages to a file.
3*52a38012Sejakowatz //-------------------------------------------------------------------------
4*52a38012Sejakowatz #include <stdlib.h>
5*52a38012Sejakowatz #include <string.h>
6*52a38012Sejakowatz #include <ctype.h>
7*52a38012Sejakowatz 
8*52a38012Sejakowatz #include <Debug.h>
9*52a38012Sejakowatz #include <List.h>
10*52a38012Sejakowatz #include <File.h>
11*52a38012Sejakowatz #include <Message.h>
12*52a38012Sejakowatz #include <String.h>
13*52a38012Sejakowatz #include <OS.h>
14*52a38012Sejakowatz 
15*52a38012Sejakowatz #include <add-ons/input_server/InputServerFilter.h>
16*52a38012Sejakowatz 
17*52a38012Sejakowatz extern "C" _EXPORT BInputServerFilter* instantiate_input_filter();
18*52a38012Sejakowatz 
19*52a38012Sejakowatz class MsgSpy : public BInputServerFilter
20*52a38012Sejakowatz {
21*52a38012Sejakowatz public:
22*52a38012Sejakowatz 	         MsgSpy();
23*52a38012Sejakowatz 	virtual ~MsgSpy();
24*52a38012Sejakowatz 
25*52a38012Sejakowatz     virtual status_t      InitCheck(void);
26*52a38012Sejakowatz 	virtual	filter_result Filter(BMessage *message, BList *outList);
27*52a38012Sejakowatz private:
28*52a38012Sejakowatz 	const char* MapWhatToString(uint32 w);
29*52a38012Sejakowatz 	void        OutputMsgField(const char*  fieldName,
30*52a38012Sejakowatz 	                           const uint32 rawType,
31*52a38012Sejakowatz                                int          rawCount,
32*52a38012Sejakowatz                                const void*  rawData);
33*52a38012Sejakowatz 
34*52a38012Sejakowatz     status_t m_status;
35*52a38012Sejakowatz     BFile*   m_outfile;
36*52a38012Sejakowatz };
37*52a38012Sejakowatz 
38*52a38012Sejakowatz //-------------------------------------------------------------------------
39*52a38012Sejakowatz // Create a new MsgSpy instance and return it to the caller.
40*52a38012Sejakowatz //-------------------------------------------------------------------------
41*52a38012Sejakowatz BInputServerFilter* instantiate_input_filter()
42*52a38012Sejakowatz {
43*52a38012Sejakowatz 	return (new MsgSpy() );
44*52a38012Sejakowatz }
45*52a38012Sejakowatz 
46*52a38012Sejakowatz 
47*52a38012Sejakowatz //-------------------------------------------------------------------------
48*52a38012Sejakowatz //-------------------------------------------------------------------------
49*52a38012Sejakowatz MsgSpy::MsgSpy()
50*52a38012Sejakowatz {
51*52a38012Sejakowatz     // Create the output file and return its status.
52*52a38012Sejakowatz     m_outfile = new BFile("/boot/home/MsgSpy.output", B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE);
53*52a38012Sejakowatz     //m_status = m_outfile->InitCheck();
54*52a38012Sejakowatz     m_status = B_OK;
55*52a38012Sejakowatz }
56*52a38012Sejakowatz 
57*52a38012Sejakowatz //-------------------------------------------------------------------------
58*52a38012Sejakowatz //-------------------------------------------------------------------------
59*52a38012Sejakowatz MsgSpy::~MsgSpy()
60*52a38012Sejakowatz {
61*52a38012Sejakowatz     if (NULL != m_outfile)
62*52a38012Sejakowatz     {
63*52a38012Sejakowatz         // Close and destroy the output file.
64*52a38012Sejakowatz         delete m_outfile;
65*52a38012Sejakowatz     }
66*52a38012Sejakowatz }
67*52a38012Sejakowatz 
68*52a38012Sejakowatz //-------------------------------------------------------------------------
69*52a38012Sejakowatz //-------------------------------------------------------------------------
70*52a38012Sejakowatz status_t MsgSpy::InitCheck(void)
71*52a38012Sejakowatz {
72*52a38012Sejakowatz 	return m_status;
73*52a38012Sejakowatz }
74*52a38012Sejakowatz 
75*52a38012Sejakowatz //-------------------------------------------------------------------------
76*52a38012Sejakowatz //-------------------------------------------------------------------------
77*52a38012Sejakowatz filter_result MsgSpy::Filter(BMessage *message, BList *outList)
78*52a38012Sejakowatz {
79*52a38012Sejakowatz     char*       field_name;
80*52a38012Sejakowatz     uint32      field_type;
81*52a38012Sejakowatz     int32       field_count;
82*52a38012Sejakowatz     const void* field_data;
83*52a38012Sejakowatz     ssize_t     field_data_bytes;
84*52a38012Sejakowatz 	char        msg_buffer  [1024];
85*52a38012Sejakowatz 
86*52a38012Sejakowatz 	// Print out the message constant (what).
87*52a38012Sejakowatz 	sprintf(msg_buffer, "%s\n", MapWhatToString(message->what) );
88*52a38012Sejakowatz     m_outfile->Write(msg_buffer, strlen(msg_buffer) );
89*52a38012Sejakowatz 
90*52a38012Sejakowatz     // Display each field in the message.
91*52a38012Sejakowatz 	sprintf(msg_buffer, "{\n");
92*52a38012Sejakowatz     m_outfile->Write(msg_buffer, strlen(msg_buffer) );
93*52a38012Sejakowatz 	for (int32 i = 0;  B_OK == message->GetInfo(B_ANY_TYPE,
94*52a38012Sejakowatz 	                                            i,
95*52a38012Sejakowatz 	                                            &field_name,
96*52a38012Sejakowatz 	                                            &field_type,
97*52a38012Sejakowatz 	                                            &field_count);  i++)
98*52a38012Sejakowatz 	{
99*52a38012Sejakowatz 		message->FindData(field_name, field_type, &field_data, &field_data_bytes);
100*52a38012Sejakowatz 		OutputMsgField(field_name, field_type, field_count, field_data);
101*52a38012Sejakowatz 	}
102*52a38012Sejakowatz 	sprintf(msg_buffer, "}\n");
103*52a38012Sejakowatz     m_outfile->Write(msg_buffer, strlen(msg_buffer) );
104*52a38012Sejakowatz 
105*52a38012Sejakowatz 	return (B_DISPATCH_MESSAGE);
106*52a38012Sejakowatz }
107*52a38012Sejakowatz 
108*52a38012Sejakowatz //-------------------------------------------------------------------------
109*52a38012Sejakowatz //-------------------------------------------------------------------------
110*52a38012Sejakowatz const char* MsgSpy::MapWhatToString(uint32 w)
111*52a38012Sejakowatz {
112*52a38012Sejakowatz     const char* s;
113*52a38012Sejakowatz 	switch (w)
114*52a38012Sejakowatz 	{
115*52a38012Sejakowatz 		// Pointing device event messages.
116*52a38012Sejakowatz 		case B_MOUSE_DOWN:					s = "B_MOUSE_DOWN";					break;
117*52a38012Sejakowatz 		case B_MOUSE_UP:					s = "B_MOUSE_UP";					break;
118*52a38012Sejakowatz 		case B_MOUSE_MOVED:					s = "B_MOUSE_MOVED";				break;
119*52a38012Sejakowatz 
120*52a38012Sejakowatz 		// Keyboard device event messages.
121*52a38012Sejakowatz 		case B_KEY_DOWN:					s = "B_KEY_DOWN";					break;
122*52a38012Sejakowatz 		case B_UNMAPPED_KEY_DOWN:			s = "B_UNMAPPED_KEY_DOWN";			break;
123*52a38012Sejakowatz 		case B_KEY_UP:						s = "B_KEY_UP";						break;
124*52a38012Sejakowatz 		case B_UNMAPPED_KEY_UP:				s = "B_UNMAPPED_KEY_UP";			break;
125*52a38012Sejakowatz 		case B_MODIFIERS_CHANGED:			s = "B_MODIFIERS_CHANGED";			break;
126*52a38012Sejakowatz 
127*52a38012Sejakowatz 		default:							s = "UNKNOWN_MESSAGE";				break;
128*52a38012Sejakowatz 	}
129*52a38012Sejakowatz 	return s;
130*52a38012Sejakowatz }
131*52a38012Sejakowatz 
132*52a38012Sejakowatz //-------------------------------------------------------------------------
133*52a38012Sejakowatz //-------------------------------------------------------------------------
134*52a38012Sejakowatz void MsgSpy::OutputMsgField(const char*  fieldName,
135*52a38012Sejakowatz                             const uint32 rawType,
136*52a38012Sejakowatz                             int          rawCount,
137*52a38012Sejakowatz                             const void*  rawData)
138*52a38012Sejakowatz {
139*52a38012Sejakowatz 	char        msg_buffer   [1024];
140*52a38012Sejakowatz 	char        value_buffer [256];
141*52a38012Sejakowatz 	BString     field_data;
142*52a38012Sejakowatz     const char* field_type;
143*52a38012Sejakowatz     const int   field_count  = rawCount;
144*52a38012Sejakowatz     const char* separator;
145*52a38012Sejakowatz 
146*52a38012Sejakowatz 	switch (rawType)
147*52a38012Sejakowatz 	{
148*52a38012Sejakowatz 		case B_CHAR_TYPE:
149*52a38012Sejakowatz 		{
150*52a38012Sejakowatz 			field_type = "B_CHAR_TYPE";
151*52a38012Sejakowatz 			field_data << "{ ";
152*52a38012Sejakowatz 			for (const char* data_ptr = (const char*)rawData;
153*52a38012Sejakowatz 				rawCount > 0;
154*52a38012Sejakowatz 				rawCount--, data_ptr++)
155*52a38012Sejakowatz 			{
156*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
157*52a38012Sejakowatz 				field_data << *data_ptr << separator;
158*52a38012Sejakowatz 			}
159*52a38012Sejakowatz 			break;
160*52a38012Sejakowatz 		}
161*52a38012Sejakowatz 
162*52a38012Sejakowatz 		case B_INT8_TYPE:
163*52a38012Sejakowatz 		{
164*52a38012Sejakowatz 			field_type = "B_INT8_TYPE";
165*52a38012Sejakowatz 			field_data << "{ ";
166*52a38012Sejakowatz 			for (const int8* data_ptr = (const int8*)rawData;
167*52a38012Sejakowatz 				rawCount > 0;
168*52a38012Sejakowatz 				rawCount--, data_ptr++)
169*52a38012Sejakowatz 			{
170*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
171*52a38012Sejakowatz 				field_data << *data_ptr << separator;
172*52a38012Sejakowatz 			}
173*52a38012Sejakowatz 			break;
174*52a38012Sejakowatz 		}
175*52a38012Sejakowatz 
176*52a38012Sejakowatz 		case B_INT16_TYPE:
177*52a38012Sejakowatz 		{
178*52a38012Sejakowatz 			field_type = "B_INT16_TYPE";
179*52a38012Sejakowatz 			field_data << "{ ";
180*52a38012Sejakowatz 			for (const int16* data_ptr = (const int16*)rawData;
181*52a38012Sejakowatz 				rawCount > 0;
182*52a38012Sejakowatz 				rawCount--, data_ptr++)
183*52a38012Sejakowatz 			{
184*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
185*52a38012Sejakowatz 				field_data << *data_ptr << separator;
186*52a38012Sejakowatz 			}
187*52a38012Sejakowatz 			break;
188*52a38012Sejakowatz 		}
189*52a38012Sejakowatz 
190*52a38012Sejakowatz 		case B_INT32_TYPE:
191*52a38012Sejakowatz 		{
192*52a38012Sejakowatz 			field_type = "B_INT32_TYPE";
193*52a38012Sejakowatz 			field_data << "{ ";
194*52a38012Sejakowatz 			for (const int32* data_ptr = (const int32*)rawData;
195*52a38012Sejakowatz 				rawCount > 0;
196*52a38012Sejakowatz 				rawCount--, data_ptr++)
197*52a38012Sejakowatz 			{
198*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
199*52a38012Sejakowatz 				field_data << *data_ptr << separator;
200*52a38012Sejakowatz 			}
201*52a38012Sejakowatz 			break;
202*52a38012Sejakowatz 		}
203*52a38012Sejakowatz 
204*52a38012Sejakowatz 		case B_INT64_TYPE:
205*52a38012Sejakowatz 		{
206*52a38012Sejakowatz 			field_type = "B_INT64_TYPE";
207*52a38012Sejakowatz 			field_data << "{ ";
208*52a38012Sejakowatz 			for (const int64* data_ptr = (const int64*)rawData;
209*52a38012Sejakowatz 				rawCount > 0;
210*52a38012Sejakowatz 				rawCount--, data_ptr++)
211*52a38012Sejakowatz 			{
212*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
213*52a38012Sejakowatz 				field_data << *data_ptr << separator;
214*52a38012Sejakowatz 			}
215*52a38012Sejakowatz 			break;
216*52a38012Sejakowatz 		}
217*52a38012Sejakowatz 
218*52a38012Sejakowatz 		case B_UINT8_TYPE:
219*52a38012Sejakowatz 		{
220*52a38012Sejakowatz 			field_type = "B_UINT8_TYPE";
221*52a38012Sejakowatz 			field_data << "{ ";
222*52a38012Sejakowatz 			for (const uint8* data_ptr = (const uint8*)rawData;
223*52a38012Sejakowatz 				rawCount > 0;
224*52a38012Sejakowatz 				rawCount--, data_ptr++)
225*52a38012Sejakowatz 			{
226*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
227*52a38012Sejakowatz 				field_data << (uint32)(*data_ptr) << separator;
228*52a38012Sejakowatz 			}
229*52a38012Sejakowatz 			break;
230*52a38012Sejakowatz 		}
231*52a38012Sejakowatz 
232*52a38012Sejakowatz 		case B_UINT16_TYPE:
233*52a38012Sejakowatz 		{
234*52a38012Sejakowatz 			field_type = "B_UINT16_TYPE";
235*52a38012Sejakowatz 			field_data << "{ ";
236*52a38012Sejakowatz 			for (const uint16* data_ptr = (const uint16*)rawData;
237*52a38012Sejakowatz 				rawCount > 0;
238*52a38012Sejakowatz 				rawCount--, data_ptr++)
239*52a38012Sejakowatz 			{
240*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
241*52a38012Sejakowatz 				field_data << (uint32)(*data_ptr) << separator;
242*52a38012Sejakowatz 			}
243*52a38012Sejakowatz 			break;
244*52a38012Sejakowatz 		}
245*52a38012Sejakowatz 
246*52a38012Sejakowatz 		case B_UINT32_TYPE:
247*52a38012Sejakowatz 		{
248*52a38012Sejakowatz 			field_type = "B_UINT32_TYPE";
249*52a38012Sejakowatz 			field_data << "{ ";
250*52a38012Sejakowatz 			for (const uint32* data_ptr = (const uint32*)rawData;
251*52a38012Sejakowatz 				rawCount > 0;
252*52a38012Sejakowatz 				rawCount--, data_ptr++)
253*52a38012Sejakowatz 			{
254*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
255*52a38012Sejakowatz 				field_data << *data_ptr << separator;
256*52a38012Sejakowatz 			}
257*52a38012Sejakowatz 			break;
258*52a38012Sejakowatz 		}
259*52a38012Sejakowatz 
260*52a38012Sejakowatz 		case B_UINT64_TYPE:
261*52a38012Sejakowatz 		{
262*52a38012Sejakowatz 			field_type = "B_UINT64_TYPE";
263*52a38012Sejakowatz 			field_data << "{ ";
264*52a38012Sejakowatz 			for (const uint64* data_ptr = (const uint64*)rawData;
265*52a38012Sejakowatz 				rawCount > 0;
266*52a38012Sejakowatz 				rawCount--, data_ptr++)
267*52a38012Sejakowatz 			{
268*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
269*52a38012Sejakowatz 				field_data << *data_ptr << separator;
270*52a38012Sejakowatz 			}
271*52a38012Sejakowatz 			break;
272*52a38012Sejakowatz 		}
273*52a38012Sejakowatz 
274*52a38012Sejakowatz 		case B_FLOAT_TYPE:
275*52a38012Sejakowatz 		{
276*52a38012Sejakowatz 			field_type = "B_FLOAT_TYPE";
277*52a38012Sejakowatz 			field_data << "{ ";
278*52a38012Sejakowatz 			for (const float* data_ptr = (const float*)rawData;
279*52a38012Sejakowatz 				rawCount > 0;
280*52a38012Sejakowatz 				rawCount--, data_ptr++)
281*52a38012Sejakowatz 			{
282*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
283*52a38012Sejakowatz 				field_data << *data_ptr << separator;
284*52a38012Sejakowatz 			}
285*52a38012Sejakowatz 			break;
286*52a38012Sejakowatz 		}
287*52a38012Sejakowatz 
288*52a38012Sejakowatz 		case B_DOUBLE_TYPE:
289*52a38012Sejakowatz 		{
290*52a38012Sejakowatz 			field_type = "B_DOUBLE_TYPE";
291*52a38012Sejakowatz 			field_data << "{ ";
292*52a38012Sejakowatz 			for (const double* data_ptr = (const double*)rawData;
293*52a38012Sejakowatz 				rawCount > 0;
294*52a38012Sejakowatz 				rawCount--, data_ptr++)
295*52a38012Sejakowatz 			{
296*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
297*52a38012Sejakowatz 				sprintf(value_buffer, "%f", *data_ptr);
298*52a38012Sejakowatz 				field_data << value_buffer << separator;
299*52a38012Sejakowatz 			}
300*52a38012Sejakowatz 			break;
301*52a38012Sejakowatz 		}
302*52a38012Sejakowatz 
303*52a38012Sejakowatz 		case B_BOOL_TYPE:
304*52a38012Sejakowatz 		{
305*52a38012Sejakowatz 			field_type = "B_BOOL_TYPE";
306*52a38012Sejakowatz 			field_data << "{ ";
307*52a38012Sejakowatz 			for (const bool* data_ptr = (const bool*)rawData;
308*52a38012Sejakowatz 				rawCount > 0;
309*52a38012Sejakowatz 				rawCount--, data_ptr++)
310*52a38012Sejakowatz 			{
311*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
312*52a38012Sejakowatz 				sprintf(value_buffer, "%s", (true == *data_ptr) ? "true" : "false");
313*52a38012Sejakowatz 				field_data << value_buffer << separator;
314*52a38012Sejakowatz 			}
315*52a38012Sejakowatz 			break;
316*52a38012Sejakowatz 		}
317*52a38012Sejakowatz 
318*52a38012Sejakowatz 		case B_OFF_T_TYPE:
319*52a38012Sejakowatz 		{
320*52a38012Sejakowatz 			field_type = "B_OFF_T_TYPE";
321*52a38012Sejakowatz 			field_data << "{ ";
322*52a38012Sejakowatz 			for (const off_t* data_ptr = (const off_t*)rawData;
323*52a38012Sejakowatz 				rawCount > 0;
324*52a38012Sejakowatz 				rawCount--, data_ptr++)
325*52a38012Sejakowatz 			{
326*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
327*52a38012Sejakowatz 				field_data << *data_ptr << separator;
328*52a38012Sejakowatz 			}
329*52a38012Sejakowatz 			break;
330*52a38012Sejakowatz 		}
331*52a38012Sejakowatz 
332*52a38012Sejakowatz 		case B_SIZE_T_TYPE:
333*52a38012Sejakowatz 		{
334*52a38012Sejakowatz 			field_type = "B_SIZE_T_TYPE";
335*52a38012Sejakowatz 			field_data << "{ ";
336*52a38012Sejakowatz 			for (const size_t* data_ptr = (const size_t*)rawData;
337*52a38012Sejakowatz 				rawCount > 0;
338*52a38012Sejakowatz 				rawCount--, data_ptr++)
339*52a38012Sejakowatz 			{
340*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
341*52a38012Sejakowatz 				field_data << *data_ptr << separator;
342*52a38012Sejakowatz 			}
343*52a38012Sejakowatz 			break;
344*52a38012Sejakowatz 		}
345*52a38012Sejakowatz 
346*52a38012Sejakowatz 		case B_SSIZE_T_TYPE:
347*52a38012Sejakowatz 		{
348*52a38012Sejakowatz 			field_type = "B_SSIZE_T_TYPE";
349*52a38012Sejakowatz 			field_data << "{ ";
350*52a38012Sejakowatz 			for (const ssize_t* data_ptr = (const ssize_t*)rawData;
351*52a38012Sejakowatz 				rawCount > 0;
352*52a38012Sejakowatz 				rawCount--, data_ptr++)
353*52a38012Sejakowatz 			{
354*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
355*52a38012Sejakowatz 				field_data << *data_ptr << separator;
356*52a38012Sejakowatz 			}
357*52a38012Sejakowatz 			break;
358*52a38012Sejakowatz 		}
359*52a38012Sejakowatz 
360*52a38012Sejakowatz 		case B_POINTER_TYPE:
361*52a38012Sejakowatz 		{
362*52a38012Sejakowatz 			field_type = "B_POINTER_TYPE";
363*52a38012Sejakowatz 			break;
364*52a38012Sejakowatz 		}
365*52a38012Sejakowatz 
366*52a38012Sejakowatz 		case B_OBJECT_TYPE:
367*52a38012Sejakowatz 		{
368*52a38012Sejakowatz 			field_type = "B_OBJECT_TYPE";
369*52a38012Sejakowatz 			break;
370*52a38012Sejakowatz 		}
371*52a38012Sejakowatz 
372*52a38012Sejakowatz 		case B_MESSAGE_TYPE:
373*52a38012Sejakowatz 		{
374*52a38012Sejakowatz 			field_type = "B_MESSAGE_TYPE";
375*52a38012Sejakowatz 			break;
376*52a38012Sejakowatz 		}
377*52a38012Sejakowatz 
378*52a38012Sejakowatz 		case B_MESSENGER_TYPE:
379*52a38012Sejakowatz 		{
380*52a38012Sejakowatz 			field_type = "B_MESSENGER_TYPE";
381*52a38012Sejakowatz 			break;
382*52a38012Sejakowatz 		}
383*52a38012Sejakowatz 
384*52a38012Sejakowatz 		case B_POINT_TYPE:
385*52a38012Sejakowatz 		{
386*52a38012Sejakowatz 			field_type = "B_POINT_TYPE";
387*52a38012Sejakowatz 			field_data << "{ ";
388*52a38012Sejakowatz 			for (const BPoint* data_ptr = (const BPoint*)rawData;
389*52a38012Sejakowatz 				rawCount > 0;
390*52a38012Sejakowatz 				rawCount--, data_ptr++)
391*52a38012Sejakowatz 			{
392*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
393*52a38012Sejakowatz 				field_data << "(" << data_ptr->x << ", " << data_ptr->y << ")" << separator;
394*52a38012Sejakowatz 			}
395*52a38012Sejakowatz 			break;
396*52a38012Sejakowatz 		}
397*52a38012Sejakowatz 
398*52a38012Sejakowatz 		case B_RECT_TYPE:
399*52a38012Sejakowatz 		{
400*52a38012Sejakowatz 			field_type = "B_RECT_TYPE";
401*52a38012Sejakowatz 			break;
402*52a38012Sejakowatz 		}
403*52a38012Sejakowatz 
404*52a38012Sejakowatz //		case B_PATH_TYPE:					s = "B_PATH_TYPE";					break;
405*52a38012Sejakowatz 
406*52a38012Sejakowatz 		case B_REF_TYPE:
407*52a38012Sejakowatz 		{
408*52a38012Sejakowatz 			field_type = "B_REF_TYPE";
409*52a38012Sejakowatz 			break;
410*52a38012Sejakowatz 		}
411*52a38012Sejakowatz 
412*52a38012Sejakowatz 		case B_RGB_COLOR_TYPE:
413*52a38012Sejakowatz 		{
414*52a38012Sejakowatz 			field_type = "B_RGB_COLOR_TYPE";
415*52a38012Sejakowatz 			break;
416*52a38012Sejakowatz 		}
417*52a38012Sejakowatz 
418*52a38012Sejakowatz 		case B_PATTERN_TYPE:
419*52a38012Sejakowatz 		{
420*52a38012Sejakowatz 			field_type = "B_PATTERN_TYPE";
421*52a38012Sejakowatz 			break;
422*52a38012Sejakowatz 		}
423*52a38012Sejakowatz 
424*52a38012Sejakowatz 		case B_STRING_TYPE:
425*52a38012Sejakowatz 		{
426*52a38012Sejakowatz 			field_type = "B_STRING_TYPE";
427*52a38012Sejakowatz 			field_data << "{ ";
428*52a38012Sejakowatz 			for (const char* data_ptr = (const char*)rawData;
429*52a38012Sejakowatz 				rawCount > 0;
430*52a38012Sejakowatz 				rawCount--, data_ptr+= strlen(data_ptr) )
431*52a38012Sejakowatz 			{
432*52a38012Sejakowatz 				separator = (1 < rawCount) ? ", " : " }";
433*52a38012Sejakowatz 				field_data << "\"" << data_ptr << "\"" << separator;
434*52a38012Sejakowatz 			}
435*52a38012Sejakowatz 			break;
436*52a38012Sejakowatz 		}
437*52a38012Sejakowatz 
438*52a38012Sejakowatz 		case B_MONOCHROME_1_BIT_TYPE:
439*52a38012Sejakowatz 		{
440*52a38012Sejakowatz 			field_type = "B_MONOCHROME_1_BIT_TYPE";
441*52a38012Sejakowatz 			break;
442*52a38012Sejakowatz 		}
443*52a38012Sejakowatz 
444*52a38012Sejakowatz 		case B_GRAYSCALE_8_BIT_TYPE:
445*52a38012Sejakowatz 		{
446*52a38012Sejakowatz 			field_type = "B_GRAYSCALE_8_BIT_TYPE";
447*52a38012Sejakowatz 			break;
448*52a38012Sejakowatz 		}
449*52a38012Sejakowatz 
450*52a38012Sejakowatz 		case B_COLOR_8_BIT_TYPE:
451*52a38012Sejakowatz 		{
452*52a38012Sejakowatz 			field_type = "B_COLOR_8_BIT_TYPE";
453*52a38012Sejakowatz 			break;
454*52a38012Sejakowatz 		}
455*52a38012Sejakowatz 
456*52a38012Sejakowatz 		case B_RGB_32_BIT_TYPE:
457*52a38012Sejakowatz 		{
458*52a38012Sejakowatz 			field_type = "B_RGB_32_BIT_TYPE";
459*52a38012Sejakowatz 			break;
460*52a38012Sejakowatz 		}
461*52a38012Sejakowatz 
462*52a38012Sejakowatz 		case B_TIME_TYPE:
463*52a38012Sejakowatz 		{
464*52a38012Sejakowatz 			field_type = "B_TIME_TYPE";
465*52a38012Sejakowatz 			break;
466*52a38012Sejakowatz 		}
467*52a38012Sejakowatz 
468*52a38012Sejakowatz 		case B_MEDIA_PARAMETER_TYPE:
469*52a38012Sejakowatz 		{
470*52a38012Sejakowatz 			field_type = "B_MEDIA_PARAMETER_TYPE";
471*52a38012Sejakowatz 			break;
472*52a38012Sejakowatz 		}
473*52a38012Sejakowatz 
474*52a38012Sejakowatz 		case B_MEDIA_PARAMETER_WEB_TYPE:
475*52a38012Sejakowatz 		{
476*52a38012Sejakowatz 			field_type = "B_MEDIA_PARAMETER_WEB_TYPE";
477*52a38012Sejakowatz 			break;
478*52a38012Sejakowatz 		}
479*52a38012Sejakowatz 
480*52a38012Sejakowatz 		case B_MEDIA_PARAMETER_GROUP_TYPE:
481*52a38012Sejakowatz 		{
482*52a38012Sejakowatz 			field_type = "B_MEDIA_PARAMETER_GROUP_TYPE";
483*52a38012Sejakowatz 			break;
484*52a38012Sejakowatz 		}
485*52a38012Sejakowatz 
486*52a38012Sejakowatz 		case B_RAW_TYPE:
487*52a38012Sejakowatz 		{
488*52a38012Sejakowatz 			field_type = "B_RAW_TYPE";
489*52a38012Sejakowatz 			break;
490*52a38012Sejakowatz 		}
491*52a38012Sejakowatz 
492*52a38012Sejakowatz 		case B_MIME_TYPE:
493*52a38012Sejakowatz 		{
494*52a38012Sejakowatz 			field_type = "B_MIME_TYPE";
495*52a38012Sejakowatz 			break;
496*52a38012Sejakowatz 		}
497*52a38012Sejakowatz 
498*52a38012Sejakowatz 		case B_ANY_TYPE:
499*52a38012Sejakowatz 		{
500*52a38012Sejakowatz 			field_type = "B_ANY_TYPE";
501*52a38012Sejakowatz 			break;
502*52a38012Sejakowatz 		}
503*52a38012Sejakowatz 
504*52a38012Sejakowatz 		default:
505*52a38012Sejakowatz 		{
506*52a38012Sejakowatz 			field_type = "UNKNOWN_TYPE";
507*52a38012Sejakowatz 			break;
508*52a38012Sejakowatz 		}
509*52a38012Sejakowatz 	}
510*52a38012Sejakowatz 
511*52a38012Sejakowatz     sprintf(msg_buffer,
512*52a38012Sejakowatz             "    %-18s %-18s [%2d] = %s\n",
513*52a38012Sejakowatz             field_type,
514*52a38012Sejakowatz             fieldName,
515*52a38012Sejakowatz             field_count,
516*52a38012Sejakowatz             field_data.String() );
517*52a38012Sejakowatz 
518*52a38012Sejakowatz     m_outfile->Write(msg_buffer, strlen(msg_buffer) );
519*52a38012Sejakowatz }
520