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