Annotation of mstools/samples/sdktools/spy/app/wm.c, revision 1.1.1.1

1.1       root        1: 
                      2: /******************************************************************************\
                      3: *       This is a part of the Microsoft Source Code Samples. 
                      4: *       Copyright (C) 1993 Microsoft Corporation.
                      5: *       All rights reserved. 
                      6: *       This source code is only intended as a supplement to 
                      7: *       Microsoft Development Tools and/or WinHelp documentation.
                      8: *       See these sources for detailed information regarding the 
                      9: *       Microsoft samples programs.
                     10: \******************************************************************************/
                     11: 
                     12: /*****************************************************************************\
                     13: *
                     14: * Module: wm.c
                     15: *
                     16: * Contains functions that lookup and format messages received by the
                     17: * Windows debugging Spy SDK applet.
                     18: *
                     19: * Functions:
                     20: *
                     21: *    CalculatePrintfTabs()
                     22: *    PrintMsg()
                     23: *    DecodeGeneric()
                     24: *    MsgCmp()
                     25: *    mprintf()
                     26: *
                     27: * Comments:
                     28: *
                     29: \*****************************************************************************/
                     30: 
                     31: #include "spy.h"
                     32: #include <stdlib.h>
                     33: #include <dde.h>
                     34: 
                     35: 
                     36: PRIVATE CHAR szFormatName[] = "%08X\t%s\t%08X\t%08X";
                     37: PRIVATE CHAR szFormatUSER[] = "%08X\tWM_USER+%d\t%08X\t%08X";
                     38: PRIVATE CHAR szFormatUnknown[] = "%08X\tWM_%04X\t%08X\t%08X";
                     39: 
                     40: 
                     41: VOID DecodeGeneric(HWND hwnd, UINT msg, PSPYMSGDATA psmd) {}
                     42: 
                     43: 
                     44: //
                     45: // Message description table.  Describes each message that can be spied on.
                     46: // This table must be kept in sorted order.
                     47: //
                     48: MSGDESC gaMsgs[] =
                     49: {
                     50:     { "WM_NULL", WM_NULL,                                   // 0x0000
                     51:         0, DecodeGeneric },
                     52:     { "WM_CREATE", WM_CREATE,                               // 0x0001
                     53:         0, DecodeGeneric },
                     54:     { "WM_DESTROY", WM_DESTROY,                             // 0x0002
                     55:         0, DecodeGeneric },
                     56:     { "WM_MOVE", WM_MOVE,                                   // 0x0003
                     57:         0, DecodeGeneric },
                     58:     { "WM_SIZE", WM_SIZE,                                   // 0x0005
                     59:         0, DecodeGeneric },
                     60:     { "WM_ACTIVATE", WM_ACTIVATE,                           // 0x0006
                     61:         0, DecodeGeneric },
                     62:     { "WM_SETFOCUS", WM_SETFOCUS,                           // 0x0007
                     63:         0, DecodeGeneric },
                     64:     { "WM_KILLFOCUS", WM_KILLFOCUS,                         // 0x0008
                     65:         0, DecodeGeneric },
                     66:     { "WM_ENABLE", WM_ENABLE,                               // 0x000A
                     67:         0, DecodeGeneric },
                     68:     { "WM_SETREDRAW", WM_SETREDRAW,                         // 0x000B
                     69:         0, DecodeGeneric },
                     70:     { "WM_SETTEXT", WM_SETTEXT,                             // 0x000C
                     71:         0, DecodeGeneric },
                     72:     { "WM_GETTEXT", WM_GETTEXT,                             // 0x000D
                     73:         0, DecodeGeneric },
                     74:     { "WM_GETTEXTLENGTH", WM_GETTEXTLENGTH,                 // 0x000E
                     75:         0, DecodeGeneric },
                     76:     { "WM_PAINT", WM_PAINT,                                 // 0x000F
                     77:         0, DecodeGeneric },
                     78:     { "WM_CLOSE", WM_CLOSE,                                 // 0x0010
                     79:         0, DecodeGeneric },
                     80:     { "WM_QUERYENDSESSION", WM_QUERYENDSESSION,             // 0x0011
                     81:         0, DecodeGeneric },
                     82:     { "WM_QUIT", WM_QUIT,                                   // 0x0012
                     83:         0, DecodeGeneric },
                     84:     { "WM_QUERYOPEN", WM_QUERYOPEN,                         // 0x0013
                     85:         0, DecodeGeneric },
                     86:     { "WM_ERASEBKGND", WM_ERASEBKGND,                       // 0x0014
                     87:         0, DecodeGeneric },
                     88:     { "WM_SYSCOLORCHANGE", WM_SYSCOLORCHANGE,               // 0x0015
                     89:         0, DecodeGeneric },
                     90:     { "WM_ENDSESSION", WM_ENDSESSION,                       // 0x0016
                     91:         0, DecodeGeneric },
                     92:     { "WM_SHOWWINDOW", WM_SHOWWINDOW,                       // 0x0018
                     93:         0, DecodeGeneric },
                     94:     { "WM_WININICHANGE", WM_WININICHANGE,                   // 0x001A
                     95:         0, DecodeGeneric },
                     96:     { "WM_DEVMODECHANGE", WM_DEVMODECHANGE,                 // 0x001B
                     97:         0, DecodeGeneric },
                     98:     { "WM_ACTIVATEAPP", WM_ACTIVATEAPP,                     // 0x001C
                     99:         0, DecodeGeneric },
                    100:     { "WM_FONTCHANGE", WM_FONTCHANGE,                       // 0x001D
                    101:         0, DecodeGeneric },
                    102:     { "WM_TIMECHANGE", WM_TIMECHANGE,                       // 0x001E
                    103:         0, DecodeGeneric },
                    104:     { "WM_CANCELMODE", WM_CANCELMODE,                       // 0x001F
                    105:         0, DecodeGeneric },
                    106:     { "WM_SETCURSOR", WM_SETCURSOR,                         // 0x0020
                    107:         MTF_TYPE_MOUSE, DecodeGeneric },
                    108:     { "WM_MOUSEACTIVATE", WM_MOUSEACTIVATE,                 // 0x0021
                    109:         MTF_TYPE_MOUSE, DecodeGeneric },
                    110:     { "WM_CHILDACTIVATE", WM_CHILDACTIVATE,                 // 0x0022
                    111:         0, DecodeGeneric },
                    112:     { "WM_QUEUESYNC", WM_QUEUESYNC,                         // 0x0023
                    113:         0, DecodeGeneric },
                    114:     { "WM_GETMINMAXINFO", WM_GETMINMAXINFO,                 // 0x0024
                    115:         0, DecodeGeneric },
                    116:     { "WM_PAINTICON", WM_PAINTICON,                         // 0x0026
                    117:         0, DecodeGeneric },
                    118:     { "WM_ICONERASEBKGND", WM_ICONERASEBKGND,               // 0x0027
                    119:         0, DecodeGeneric },
                    120:     { "WM_NEXTDLGCTL", WM_NEXTDLGCTL,                       // 0x0028
                    121:         0, DecodeGeneric },
                    122:     { "WM_SPOOLERSTATUS", WM_SPOOLERSTATUS,                 // 0x002A
                    123:         0, DecodeGeneric },
                    124:     { "WM_DRAWITEM", WM_DRAWITEM,                           // 0x002B
                    125:         0, DecodeGeneric },
                    126:     { "WM_MEASUREITEM", WM_MEASUREITEM,                     // 0x002C
                    127:         0, DecodeGeneric },
                    128:     { "WM_DELETEITEM", WM_DELETEITEM,                       // 0x002D
                    129:         0, DecodeGeneric },
                    130:     { "WM_VKEYTOITEM", WM_VKEYTOITEM,                       // 0x002E
                    131:         MTF_TYPE_KEYBD, DecodeGeneric },
                    132:     { "WM_CHARTOITEM", WM_CHARTOITEM,                       // 0x002F
                    133:         MTF_TYPE_KEYBD, DecodeGeneric },
                    134:     { "WM_SETFONT", WM_SETFONT,                             // 0x0030
                    135:         0, DecodeGeneric },
                    136:     { "WM_GETFONT", WM_GETFONT,                             // 0x0031
                    137:         0, DecodeGeneric },
                    138:     { "WM_SETHOTKEY", WM_SETHOTKEY,                         // 0x0032
                    139:         MTF_TYPE_KEYBD, DecodeGeneric },
                    140:     { "WM_GETHOTKEY", WM_GETHOTKEY,                         // 0x0033
                    141:         MTF_TYPE_KEYBD, DecodeGeneric },
                    142:     { "WM_QUERYDRAGICON", WM_QUERYDRAGICON,                 // 0x0037
                    143:         0, DecodeGeneric },
                    144:     { "WM_COMPAREITEM", WM_COMPAREITEM,                     // 0x0039
                    145:         0, DecodeGeneric },
                    146:     { "WM_COMPACTING", WM_COMPACTING,                       // 0x0041
                    147:         0, DecodeGeneric },
                    148: //    { "WM_HOTKEYEVENT", WM_HOTKEYEVENT,                     // 0x0045
                    149: //        0, DecodeGeneric },
                    150:     { "WM_WINDOWPOSCHANGING", WM_WINDOWPOSCHANGING,         // 0x0046
                    151:         0, DecodeGeneric },
                    152:     { "WM_WINDOWPOSCHANGED", WM_WINDOWPOSCHANGED,           // 0x0047
                    153:         0, DecodeGeneric },
                    154:     { "WM_POWER", WM_POWER,                                 // 0x0048
                    155:         0, DecodeGeneric },
                    156:     { "WM_COPYDATA", WM_COPYDATA,                           // 0x004A
                    157:         0, DecodeGeneric },
                    158:     { "WM_NCCREATE", WM_NCCREATE,                           // 0x0081
                    159:         MTF_TYPE_NC, DecodeGeneric },
                    160:     { "WM_NCDESTROY", WM_NCDESTROY,                         // 0x0082
                    161:         MTF_TYPE_NC, DecodeGeneric },
                    162:     { "WM_NCCALCSIZE", WM_NCCALCSIZE,                       // 0x0083
                    163:         MTF_TYPE_NC, DecodeGeneric },
                    164:     { "WM_NCHITTEST", WM_NCHITTEST,                         // 0x0084
                    165:         MTF_TYPE_NC | MTF_TYPE_MOUSE, DecodeGeneric },
                    166:     { "WM_NCPAINT", WM_NCPAINT,                             // 0x0085
                    167:         MTF_TYPE_NC, DecodeGeneric },
                    168:     { "WM_NCACTIVATE", WM_NCACTIVATE,                       // 0x0086
                    169:         MTF_TYPE_NC, DecodeGeneric },
                    170:     { "WM_GETDLGCODE", WM_GETDLGCODE,                       // 0x0087
                    171:         0, DecodeGeneric },
                    172:     { "WM_NCMOUSEMOVE", WM_NCMOUSEMOVE,                     // 0x00A0
                    173:         MTF_TYPE_NC | MTF_TYPE_MOUSE, DecodeGeneric },
                    174:     { "WM_NCLBUTTONDOWN", WM_NCLBUTTONDOWN,                 // 0x00A1
                    175:         MTF_TYPE_NC | MTF_TYPE_MOUSE, DecodeGeneric },
                    176:     { "WM_NCLBUTTONUP", WM_NCLBUTTONUP,                     // 0x00A2
                    177:         MTF_TYPE_NC | MTF_TYPE_MOUSE, DecodeGeneric },
                    178:     { "WM_NCLBUTTONDBLCLK", WM_NCLBUTTONDBLCLK,             // 0x00A3
                    179:         MTF_TYPE_NC | MTF_TYPE_MOUSE, DecodeGeneric },
                    180:     { "WM_NCRBUTTONDOWN", WM_NCRBUTTONDOWN,                 // 0x00A4
                    181:         MTF_TYPE_NC | MTF_TYPE_MOUSE, DecodeGeneric },
                    182:     { "WM_NCRBUTTONUP", WM_NCRBUTTONUP,                     // 0x00A5
                    183:         MTF_TYPE_NC | MTF_TYPE_MOUSE, DecodeGeneric },
                    184:     { "WM_NCRBUTTONDBLCLK", WM_NCRBUTTONDBLCLK,             // 0x00A6
                    185:         MTF_TYPE_NC | MTF_TYPE_MOUSE, DecodeGeneric },
                    186:     { "WM_NCMBUTTONDOWN", WM_NCMBUTTONDOWN,                 // 0x00A7
                    187:         MTF_TYPE_NC | MTF_TYPE_MOUSE, DecodeGeneric },
                    188:     { "WM_NCMBUTTONUP", WM_NCMBUTTONUP,                     // 0x00A8
                    189:         MTF_TYPE_NC | MTF_TYPE_MOUSE, DecodeGeneric },
                    190:     { "WM_NCMBUTTONDBLCLK", WM_NCMBUTTONDBLCLK,             // 0x00A9
                    191:         MTF_TYPE_NC | MTF_TYPE_MOUSE, DecodeGeneric },
                    192:     { "EM_GETSEL", EM_GETSEL,                               // 0x00B0
                    193:         MTF_TYPE_EM, DecodeGeneric },
                    194:     { "EM_SETSEL", EM_SETSEL,                               // 0x00B1
                    195:         MTF_TYPE_EM, DecodeGeneric },
                    196:     { "EM_GETRECT", EM_GETRECT,                             // 0x00B2
                    197:         MTF_TYPE_EM, DecodeGeneric },
                    198:     { "EM_SETRECT", EM_SETRECT,                             // 0x00B3
                    199:         MTF_TYPE_EM, DecodeGeneric },
                    200:     { "EM_SETRECTNP", EM_SETRECTNP,                         // 0x00B4
                    201:         MTF_TYPE_EM, DecodeGeneric },
                    202:     { "EM_SCROLL", EM_SCROLL,                               // 0x00B5
                    203:         MTF_TYPE_EM, DecodeGeneric },
                    204:     { "EM_LINESCROLL", EM_LINESCROLL,                       // 0x00B6
                    205:         MTF_TYPE_EM, DecodeGeneric },
                    206:     { "EM_GETMODIFY", EM_GETMODIFY,                         // 0x00B8
                    207:         MTF_TYPE_EM, DecodeGeneric },
                    208:     { "EM_SETMODIFY", EM_SETMODIFY,                         // 0x00B9
                    209:         MTF_TYPE_EM, DecodeGeneric },
                    210:     { "EM_GETLINECOUNT", EM_GETLINECOUNT,                   // 0x00BA
                    211:         MTF_TYPE_EM, DecodeGeneric },
                    212:     { "EM_LINEINDEX", EM_LINEINDEX,                         // 0x00BB
                    213:         MTF_TYPE_EM, DecodeGeneric },
                    214:     { "EM_SETHANDLE", EM_SETHANDLE,                         // 0x00BC
                    215:         MTF_TYPE_EM, DecodeGeneric },
                    216:     { "EM_GETHANDLE", EM_GETHANDLE,                         // 0x00BD
                    217:         MTF_TYPE_EM, DecodeGeneric },
                    218:     { "EM_LINELENGTH", EM_LINELENGTH,                       // 0x00C1
                    219:         MTF_TYPE_EM, DecodeGeneric },
                    220:     { "EM_REPLACESEL", EM_REPLACESEL,                       // 0x00C2
                    221:         MTF_TYPE_EM, DecodeGeneric },
                    222:     { "EM_GETLINE", EM_GETLINE,                             // 0x00C4
                    223:         MTF_TYPE_EM, DecodeGeneric },
                    224:     { "EM_LIMITTEXT", EM_LIMITTEXT,                         // 0x00C5
                    225:         MTF_TYPE_EM, DecodeGeneric },
                    226:     { "EM_CANUNDO", EM_CANUNDO,                             // 0x00C6
                    227:         MTF_TYPE_EM, DecodeGeneric },
                    228:     { "EM_UNDO", EM_UNDO,                                   // 0x00C7
                    229:         MTF_TYPE_EM, DecodeGeneric },
                    230:     { "EM_FMTLINES", EM_FMTLINES,                           // 0x00C8
                    231:         MTF_TYPE_EM, DecodeGeneric },
                    232:     { "EM_LINEFROMCHAR", EM_LINEFROMCHAR,                   // 0x00C9
                    233:         MTF_TYPE_EM, DecodeGeneric },
                    234:     { "EM_SETTABSTOPS", EM_SETTABSTOPS,                     // 0x00CB
                    235:         MTF_TYPE_EM, DecodeGeneric },
                    236:     { "EM_SETPASSWORDCHAR", EM_SETPASSWORDCHAR,             // 0x00CC
                    237:         MTF_TYPE_EM, DecodeGeneric },
                    238:     { "EM_EMPTYUNDOBUFFER", EM_EMPTYUNDOBUFFER,             // 0x00CD
                    239:         MTF_TYPE_EM, DecodeGeneric },
                    240:     { "EM_GETFIRSTVISIBLELINE", EM_GETFIRSTVISIBLELINE,     // 0x00CE
                    241:         MTF_TYPE_EM, DecodeGeneric },
                    242:     { "EM_SETREADONLY", EM_SETREADONLY,                     // 0x00CF
                    243:         MTF_TYPE_EM, DecodeGeneric },
                    244:     { "EM_SETWORDBREAKPROC", EM_SETWORDBREAKPROC,           // 0x00D0
                    245:         MTF_TYPE_EM, DecodeGeneric },
                    246:     { "EM_GETWORDBREAKPROC", EM_GETWORDBREAKPROC,           // 0x00D1
                    247:         MTF_TYPE_EM, DecodeGeneric },
                    248:     { "EM_GETPASSWORDCHAR", EM_GETPASSWORDCHAR,             // 0x00D2
                    249:         MTF_TYPE_EM, DecodeGeneric },
                    250:     { "BM_GETCHECK", BM_GETCHECK,                           // 0x00F0
                    251:         MTF_TYPE_BM, DecodeGeneric },
                    252:     { "BM_SETCHECK", BM_SETCHECK,                           // 0x00F1
                    253:         MTF_TYPE_BM, DecodeGeneric },
                    254:     { "BM_GETSTATE", BM_GETSTATE,                           // 0x00F2
                    255:         MTF_TYPE_BM, DecodeGeneric },
                    256:     { "BM_SETSTATE", BM_SETSTATE,                           // 0x00F3
                    257:         MTF_TYPE_BM, DecodeGeneric },
                    258:     { "BM_SETSTYLE", BM_SETSTYLE,                           // 0x00F4
                    259:         MTF_TYPE_BM, DecodeGeneric },
                    260:     { "WM_KEYDOWN", WM_KEYDOWN,                             // 0x0100
                    261:         MTF_TYPE_KEYBD, DecodeGeneric },
                    262:     { "WM_KEYUP", WM_KEYUP,                                 // 0x0101
                    263:         MTF_TYPE_KEYBD, DecodeGeneric },
                    264:     { "WM_CHAR", WM_CHAR,                                   // 0x0102
                    265:         MTF_TYPE_KEYBD, DecodeGeneric },
                    266:     { "WM_DEADCHAR", WM_DEADCHAR,                           // 0x0103
                    267:         MTF_TYPE_KEYBD, DecodeGeneric },
                    268:     { "WM_SYSKEYDOWN", WM_SYSKEYDOWN,                       // 0x0104
                    269:         MTF_TYPE_KEYBD, DecodeGeneric },
                    270:     { "WM_SYSKEYUP", WM_SYSKEYUP,                           // 0x0105
                    271:         MTF_TYPE_KEYBD, DecodeGeneric },
                    272:     { "WM_SYSCHAR", WM_SYSCHAR,                             // 0x0106
                    273:         MTF_TYPE_KEYBD, DecodeGeneric },
                    274:     { "WM_SYSDEADCHAR", WM_SYSDEADCHAR,                     // 0x0107
                    275:         MTF_TYPE_KEYBD, DecodeGeneric },
                    276:     { "WM_INITDIALOG", WM_INITDIALOG,                       // 0x0110
                    277:         0, DecodeGeneric },
                    278:     { "WM_COMMAND", WM_COMMAND,                             // 0x0111
                    279:         0, DecodeGeneric },
                    280:     { "WM_SYSCOMMAND", WM_SYSCOMMAND,                       // 0x0112
                    281:         0, DecodeGeneric },
                    282:     { "WM_TIMER", WM_TIMER,                                 // 0x0113
                    283:         0, DecodeGeneric },
                    284:     { "WM_HSCROLL", WM_HSCROLL,                             // 0x0114
                    285:         0, DecodeGeneric },
                    286:     { "WM_VSCROLL", WM_VSCROLL,                             // 0x0115
                    287:         0, DecodeGeneric },
                    288:     { "WM_INITMENU", WM_INITMENU,                           // 0x0116
                    289:         0, DecodeGeneric },
                    290:     { "WM_INITMENUPOPUP", WM_INITMENUPOPUP,                 // 0x0117
                    291:         0, DecodeGeneric },
                    292:     { "WM_MENUSELECT", WM_MENUSELECT,                       // 0x011F
                    293:         0, DecodeGeneric },
                    294:     { "WM_MENUCHAR", WM_MENUCHAR,                           // 0x0120
                    295:         0, DecodeGeneric },
                    296:     { "WM_ENTERIDLE", WM_ENTERIDLE,                         // 0x0121
                    297:         0, DecodeGeneric },
                    298:     { "WM_CTLCOLORMSGBOX", WM_CTLCOLORMSGBOX,               // 0x0132
                    299:         0, DecodeGeneric },
                    300:     { "WM_CTLCOLOREDIT", WM_CTLCOLOREDIT,                   // 0x0133
                    301:         0, DecodeGeneric },
                    302:     { "WM_CTLCOLORLISTBOX", WM_CTLCOLORLISTBOX,             // 0x0134
                    303:         0, DecodeGeneric },
                    304:     { "WM_CTLCOLORBTN", WM_CTLCOLORBTN,                     // 0x0135
                    305:         0, DecodeGeneric },
                    306:     { "WM_CTLCOLORDLG", WM_CTLCOLORDLG,                     // 0x0136
                    307:         0, DecodeGeneric },
                    308:     { "WM_CTLCOLORSCROLLBAR", WM_CTLCOLORSCROLLBAR,         // 0x0137
                    309:         0, DecodeGeneric },
                    310:     { "WM_CTLCOLORSTATIC", WM_CTLCOLORSTATIC,               // 0x0138
                    311:         0, DecodeGeneric },
                    312:     { "CB_GETEDITSEL", CB_GETEDITSEL,                       // 0x0140
                    313:         MTF_TYPE_CB, DecodeGeneric },
                    314:     { "CB_LIMITTEXT", CB_LIMITTEXT,                         // 0x0141
                    315:         MTF_TYPE_CB, DecodeGeneric },
                    316:     { "CB_SETEDITSEL", CB_SETEDITSEL,                       // 0x0142
                    317:         MTF_TYPE_CB, DecodeGeneric },
                    318:     { "CB_ADDSTRING", CB_ADDSTRING,                         // 0x0143
                    319:         MTF_TYPE_CB, DecodeGeneric },
                    320:     { "CB_DELETESTRING", CB_DELETESTRING,                   // 0x0144
                    321:         MTF_TYPE_CB, DecodeGeneric },
                    322:     { "CB_DIR", CB_DIR,                                     // 0x0145
                    323:         MTF_TYPE_CB, DecodeGeneric },
                    324:     { "CB_GETCOUNT", CB_GETCOUNT,                           // 0x0146
                    325:         MTF_TYPE_CB, DecodeGeneric },
                    326:     { "CB_GETCURSEL", CB_GETCURSEL,                         // 0x0147
                    327:         MTF_TYPE_CB, DecodeGeneric },
                    328:     { "CB_GETLBTEXT", CB_GETLBTEXT,                         // 0x0148
                    329:         MTF_TYPE_CB, DecodeGeneric },
                    330:     { "CB_GETLBTEXTLEN", CB_GETLBTEXTLEN,                   // 0x0149
                    331:         MTF_TYPE_CB, DecodeGeneric },
                    332:     { "CB_INSERTSTRING", CB_INSERTSTRING,                   // 0x014A
                    333:         MTF_TYPE_CB, DecodeGeneric },
                    334:     { "CB_RESETCONTENT", CB_RESETCONTENT,                   // 0x014B
                    335:         MTF_TYPE_CB, DecodeGeneric },
                    336:     { "CB_FINDSTRING", CB_FINDSTRING,                       // 0x014C
                    337:         MTF_TYPE_CB, DecodeGeneric },
                    338:     { "CB_SELECTSTRING", CB_SELECTSTRING,                   // 0x014D
                    339:         MTF_TYPE_CB, DecodeGeneric },
                    340:     { "CB_SETCURSEL", CB_SETCURSEL,                         // 0x014E
                    341:         MTF_TYPE_CB, DecodeGeneric },
                    342:     { "CB_SHOWDROPDOWN", CB_SHOWDROPDOWN,                   // 0x014F
                    343:         MTF_TYPE_CB, DecodeGeneric },
                    344:     { "CB_GETITEMDATA", CB_GETITEMDATA,                     // 0x0150
                    345:         MTF_TYPE_CB, DecodeGeneric },
                    346:     { "CB_SETITEMDATA", CB_SETITEMDATA,                     // 0x0151
                    347:         MTF_TYPE_CB, DecodeGeneric },
                    348:     { "CB_GETDROPPEDCONTROLRECT", CB_GETDROPPEDCONTROLRECT, // 0x0152
                    349:         MTF_TYPE_CB, DecodeGeneric },
                    350:     { "CB_SETITEMHEIGHT", CB_SETITEMHEIGHT,                 // 0x0153
                    351:         MTF_TYPE_CB, DecodeGeneric },
                    352:     { "CB_GETITEMHEIGHT", CB_GETITEMHEIGHT,                 // 0x0154
                    353:         MTF_TYPE_CB, DecodeGeneric },
                    354:     { "CB_SETEXTENDEDUI", CB_SETEXTENDEDUI,                 // 0x0155
                    355:         MTF_TYPE_CB, DecodeGeneric },
                    356:     { "CB_GETEXTENDEDUI", CB_GETEXTENDEDUI,                 // 0x0156
                    357:         MTF_TYPE_CB, DecodeGeneric },
                    358:     { "CB_GETDROPPEDSTATE", CB_GETDROPPEDSTATE,             // 0x0157
                    359:         MTF_TYPE_CB, DecodeGeneric },
                    360:     { "CB_FINDSTRINGEXACT", CB_FINDSTRINGEXACT,             // 0x0158
                    361:         MTF_TYPE_CB, DecodeGeneric },
                    362:     { "CB_SETLOCALE", CB_SETLOCALE,                         // 0x0159
                    363:         MTF_TYPE_CB, DecodeGeneric },
                    364:     { "CB_GETLOCALE", CB_GETLOCALE,                         // 0x015A
                    365:         MTF_TYPE_CB, DecodeGeneric },
                    366:     { "STM_SETICON", STM_SETICON,                           // 0x0170
                    367:         MTF_TYPE_STM, DecodeGeneric },
                    368:     { "STM_GETICON", STM_GETICON,                           // 0x0171
                    369:         MTF_TYPE_STM, DecodeGeneric },
                    370:     { "LB_ADDSTRING", LB_ADDSTRING,                         // 0x0180
                    371:         MTF_TYPE_LB, DecodeGeneric },
                    372:     { "LB_INSERTSTRING", LB_INSERTSTRING,                   // 0x0181
                    373:         MTF_TYPE_LB, DecodeGeneric },
                    374:     { "LB_DELETESTRING", LB_DELETESTRING,                   // 0x0182
                    375:         MTF_TYPE_LB, DecodeGeneric },
                    376:     { "LB_SELITEMRANGEEX", LB_SELITEMRANGEEX,               // 0x0183
                    377:         MTF_TYPE_LB, DecodeGeneric },
                    378:     { "LB_RESETCONTENT", LB_RESETCONTENT,                   // 0x0184
                    379:         MTF_TYPE_LB, DecodeGeneric },
                    380:     { "LB_SETSEL", LB_SETSEL,                               // 0x0185
                    381:         MTF_TYPE_LB, DecodeGeneric },
                    382:     { "LB_SETCURSEL", LB_SETCURSEL,                         // 0x0186
                    383:         MTF_TYPE_LB, DecodeGeneric },
                    384:     { "LB_GETSEL", LB_GETSEL,                               // 0x0187
                    385:         MTF_TYPE_LB, DecodeGeneric },
                    386:     { "LB_GETCURSEL", LB_GETCURSEL,                         // 0x0188
                    387:         MTF_TYPE_LB, DecodeGeneric },
                    388:     { "LB_GETTEXT", LB_GETTEXT,                             // 0x0189
                    389:         MTF_TYPE_LB, DecodeGeneric },
                    390:     { "LB_GETTEXTLEN", LB_GETTEXTLEN,                       // 0x018A
                    391:         MTF_TYPE_LB, DecodeGeneric },
                    392:     { "LB_GETCOUNT", LB_GETCOUNT,                           // 0x018B
                    393:         MTF_TYPE_LB, DecodeGeneric },
                    394:     { "LB_SELECTSTRING", LB_SELECTSTRING,                   // 0x018C
                    395:         MTF_TYPE_LB, DecodeGeneric },
                    396:     { "LB_DIR", LB_DIR,                                     // 0x018D
                    397:         MTF_TYPE_LB, DecodeGeneric },
                    398:     { "LB_GETTOPINDEX", LB_GETTOPINDEX,                     // 0x018E
                    399:         MTF_TYPE_LB, DecodeGeneric },
                    400:     { "LB_FINDSTRING", LB_FINDSTRING,                       // 0x018F
                    401:         MTF_TYPE_LB, DecodeGeneric },
                    402:     { "LB_GETSELCOUNT", LB_GETSELCOUNT,                     // 0x0190
                    403:         MTF_TYPE_LB, DecodeGeneric },
                    404:     { "LB_GETSELITEMS", LB_GETSELITEMS,                     // 0x0191
                    405:         MTF_TYPE_LB, DecodeGeneric },
                    406:     { "LB_SETTABSTOPS", LB_SETTABSTOPS,                     // 0x0192
                    407:         MTF_TYPE_LB, DecodeGeneric },
                    408:     { "LB_GETHORIZONTALEXTENT", LB_GETHORIZONTALEXTENT,     // 0x0193
                    409:         MTF_TYPE_LB, DecodeGeneric },
                    410:     { "LB_SETHORIZONTALEXTENT", LB_SETHORIZONTALEXTENT,     // 0x0194
                    411:         MTF_TYPE_LB, DecodeGeneric },
                    412:     { "LB_SETCOLUMNWIDTH", LB_SETCOLUMNWIDTH,               // 0x0195
                    413:         MTF_TYPE_LB, DecodeGeneric },
                    414:     { "LB_ADDFILE", LB_ADDFILE,                             // 0x0196
                    415:         MTF_TYPE_LB, DecodeGeneric },
                    416:     { "LB_SETTOPINDEX", LB_SETTOPINDEX,                     // 0x0197
                    417:         MTF_TYPE_LB, DecodeGeneric },
                    418:     { "LB_GETITEMRECT", LB_GETITEMRECT,                     // 0x0198
                    419:         MTF_TYPE_LB, DecodeGeneric },
                    420:     { "LB_GETITEMDATA", LB_GETITEMDATA,                     // 0x0199
                    421:         MTF_TYPE_LB, DecodeGeneric },
                    422:     { "LB_SETITEMDATA", LB_SETITEMDATA,                     // 0x019A
                    423:         MTF_TYPE_LB, DecodeGeneric },
                    424:     { "LB_SELITEMRANGE", LB_SELITEMRANGE,                   // 0x019B
                    425:         MTF_TYPE_LB, DecodeGeneric },
                    426:     { "LB_SETANCHORINDEX", LB_SETANCHORINDEX,               // 0x019C
                    427:         MTF_TYPE_LB, DecodeGeneric },
                    428:     { "LB_GETANCHORINDEX", LB_GETANCHORINDEX,               // 0x019D
                    429:         MTF_TYPE_LB, DecodeGeneric },
                    430:     { "LB_SETCARETINDEX", LB_SETCARETINDEX,                 // 0x019E
                    431:         MTF_TYPE_LB, DecodeGeneric },
                    432:     { "LB_GETCARETINDEX", LB_GETCARETINDEX,                 // 0x019F
                    433:         MTF_TYPE_LB, DecodeGeneric },
                    434:     { "LB_SETITEMHEIGHT", LB_SETITEMHEIGHT,                 // 0x01A0
                    435:         MTF_TYPE_LB, DecodeGeneric },
                    436:     { "LB_GETITEMHEIGHT", LB_GETITEMHEIGHT,                 // 0x01A1
                    437:         MTF_TYPE_LB, DecodeGeneric },
                    438:     { "LB_FINDSTRINGEXACT", LB_FINDSTRINGEXACT,             // 0x01A2
                    439:         MTF_TYPE_LB, DecodeGeneric },
                    440:     { "LB_SETLOCALE", LB_SETLOCALE,                         // 0x01A5
                    441:         MTF_TYPE_LB, DecodeGeneric },
                    442:     { "LB_GETLOCALE", LB_GETLOCALE,                         // 0x01A6
                    443:         MTF_TYPE_LB, DecodeGeneric },
                    444:     { "LB_SETCOUNT", LB_SETCOUNT,                           // 0x01A7
                    445:         MTF_TYPE_LB, DecodeGeneric },
                    446:     { "WM_MOUSEMOVE", WM_MOUSEMOVE,                         // 0x0200
                    447:         MTF_TYPE_MOUSE, DecodeGeneric },
                    448:     { "WM_LBUTTONDOWN", WM_LBUTTONDOWN,                     // 0x0201
                    449:         MTF_TYPE_MOUSE, DecodeGeneric },
                    450:     { "WM_LBUTTONUP", WM_LBUTTONUP,                         // 0x0202
                    451:         MTF_TYPE_MOUSE, DecodeGeneric },
                    452:     { "WM_LBUTTONDBLCLK", WM_LBUTTONDBLCLK,                 // 0x0203
                    453:         MTF_TYPE_MOUSE, DecodeGeneric },
                    454:     { "WM_RBUTTONDOWN", WM_RBUTTONDOWN,                     // 0x0204
                    455:         MTF_TYPE_MOUSE, DecodeGeneric },
                    456:     { "WM_RBUTTONUP", WM_RBUTTONUP,                         // 0x0205
                    457:         MTF_TYPE_MOUSE, DecodeGeneric },
                    458:     { "WM_RBUTTONDBLCLK", WM_RBUTTONDBLCLK,                 // 0x0206
                    459:         MTF_TYPE_MOUSE, DecodeGeneric },
                    460:     { "WM_MBUTTONDOWN", WM_MBUTTONDOWN,                     // 0x0207
                    461:         MTF_TYPE_MOUSE, DecodeGeneric },
                    462:     { "WM_MBUTTONUP", WM_MBUTTONUP,                         // 0x0208
                    463:         MTF_TYPE_MOUSE, DecodeGeneric },
                    464:     { "WM_MBUTTONDBLCLK", WM_MBUTTONDBLCLK,                 // 0x0209
                    465:         MTF_TYPE_MOUSE, DecodeGeneric },
                    466:     { "WM_PARENTNOTIFY", WM_PARENTNOTIFY,                   // 0x0210
                    467:         MTF_TYPE_MOUSE, DecodeGeneric },
                    468:     { "WM_MDICREATE", WM_MDICREATE,                         // 0x0220
                    469:         0, DecodeGeneric },
                    470:     { "WM_MDIDESTROY", WM_MDIDESTROY,                       // 0x0221
                    471:         0, DecodeGeneric },
                    472:     { "WM_MDIACTIVATE", WM_MDIACTIVATE,                     // 0x0222
                    473:         0, DecodeGeneric },
                    474:     { "WM_MDIRESTORE", WM_MDIRESTORE,                       // 0x0223
                    475:         0, DecodeGeneric },
                    476:     { "WM_MDINEXT", WM_MDINEXT,                             // 0x0224
                    477:         0, DecodeGeneric },
                    478:     { "WM_MDIMAXIMIZE", WM_MDIMAXIMIZE,                     // 0x0225
                    479:         0, DecodeGeneric },
                    480:     { "WM_MDITILE", WM_MDITILE,                             // 0x0226
                    481:         0, DecodeGeneric },
                    482:     { "WM_MDICASCADE", WM_MDICASCADE,                       // 0x0227
                    483:         0, DecodeGeneric },
                    484:     { "WM_MDIICONARRANGE", WM_MDIICONARRANGE,               // 0x0228
                    485:         0, DecodeGeneric },
                    486:     { "WM_MDIGETACTIVE", WM_MDIGETACTIVE,                   // 0x0229
                    487:         0, DecodeGeneric },
                    488:     { "WM_MDISETMENU", WM_MDISETMENU,                       // 0x0230
                    489:         0, DecodeGeneric },
                    490:     { "WM_DROPFILES", WM_DROPFILES,                         // 0x0233
                    491:         0, DecodeGeneric },
                    492:     { "WM_MDIREFRESHMENU", WM_MDIREFRESHMENU,               // 0x0234
                    493:         0, DecodeGeneric },
                    494:     { "WM_CUT", WM_CUT,                                     // 0x0300
                    495:         MTF_TYPE_CLIP, DecodeGeneric },
                    496:     { "WM_COPY", WM_COPY,                                   // 0x0301
                    497:         MTF_TYPE_CLIP, DecodeGeneric },
                    498:     { "WM_PASTE", WM_PASTE,                                 // 0x0302
                    499:         MTF_TYPE_CLIP, DecodeGeneric },
                    500:     { "WM_CLEAR", WM_CLEAR,                                 // 0x0303
                    501:         MTF_TYPE_CLIP, DecodeGeneric },
                    502:     { "WM_UNDO", WM_UNDO,                                   // 0x0304
                    503:         MTF_TYPE_CLIP, DecodeGeneric },
                    504:     { "WM_RENDERFORMAT", WM_RENDERFORMAT,                   // 0x0305
                    505:         MTF_TYPE_CLIP, DecodeGeneric },
                    506:     { "WM_RENDERALLFORMATS", WM_RENDERALLFORMATS,           // 0x0306
                    507:         MTF_TYPE_CLIP, DecodeGeneric },
                    508:     { "WM_DESTROYCLIPBOARD", WM_DESTROYCLIPBOARD,           // 0x0307
                    509:         MTF_TYPE_CLIP, DecodeGeneric },
                    510:     { "WM_DRAWCLIPBOARD", WM_DRAWCLIPBOARD,                 // 0x0308
                    511:         MTF_TYPE_CLIP, DecodeGeneric },
                    512:     { "WM_PAINTCLIPBOARD", WM_PAINTCLIPBOARD,               // 0x0309
                    513:         MTF_TYPE_CLIP, DecodeGeneric },
                    514:     { "WM_VSCROLLCLIPBOARD", WM_VSCROLLCLIPBOARD,           // 0x030A
                    515:         MTF_TYPE_CLIP, DecodeGeneric },
                    516:     { "WM_SIZECLIPBOARD", WM_SIZECLIPBOARD,                 // 0x030B
                    517:         MTF_TYPE_CLIP, DecodeGeneric },
                    518:     { "WM_ASKCBFORMATNAME", WM_ASKCBFORMATNAME,             // 0x030C
                    519:         MTF_TYPE_CLIP, DecodeGeneric },
                    520:     { "WM_CHANGECBCHAIN", WM_CHANGECBCHAIN,                 // 0x030D
                    521:         MTF_TYPE_CLIP, DecodeGeneric },
                    522:     { "WM_HSCROLLCLIPBOARD", WM_HSCROLLCLIPBOARD,           // 0x030E
                    523:         MTF_TYPE_CLIP, DecodeGeneric },
                    524:     { "WM_QUERYNEWPALETTE", WM_QUERYNEWPALETTE,             // 0x030F
                    525:         0, DecodeGeneric },
                    526:     { "WM_PALETTEISCHANGING", WM_PALETTEISCHANGING,         // 0x0310
                    527:         0, DecodeGeneric },
                    528:     { "WM_PALETTECHANGED", WM_PALETTECHANGED,               // 0x0311
                    529:         0, DecodeGeneric },
                    530:     { "WM_HOTKEY", WM_HOTKEY,                               // 0x0312
                    531:         MTF_TYPE_KEYBD, DecodeGeneric },
                    532:     { "WM_DDE_INITIATE", WM_DDE_INITIATE,                   // 0x03E0
                    533:         MTF_TYPE_DDE, DecodeGeneric },
                    534:     { "WM_DDE_TERMINATE", WM_DDE_TERMINATE,                 // 0x03E1
                    535:         MTF_TYPE_DDE, DecodeGeneric },
                    536:     { "WM_DDE_ADVISE", WM_DDE_ADVISE,                       // 0x03E2
                    537:         MTF_TYPE_DDE, DecodeGeneric },
                    538:     { "WM_DDE_UNADVISE", WM_DDE_UNADVISE,                   // 0x03E3
                    539:         MTF_TYPE_DDE, DecodeGeneric },
                    540:     { "WM_DDE_ACK", WM_DDE_ACK,                             // 0x03E4
                    541:         MTF_TYPE_DDE, DecodeGeneric },
                    542:     { "WM_DDE_DATA", WM_DDE_DATA,                           // 0x03E5
                    543:         MTF_TYPE_DDE, DecodeGeneric },
                    544:     { "WM_DDE_REQUEST", WM_DDE_REQUEST,                     // 0x03E6
                    545:         MTF_TYPE_DDE, DecodeGeneric },
                    546:     { "WM_DDE_POKE", WM_DDE_POKE,                           // 0x03E7
                    547:         MTF_TYPE_DDE, DecodeGeneric },
                    548:     { "WM_DDE_EXECUTE", WM_DDE_EXECUTE,                     // 0x03E8
                    549:         MTF_TYPE_DDE, DecodeGeneric }
                    550: };
                    551: 
                    552: INT gcMessages = sizeof(gaMsgs) / sizeof(MSGDESC);
                    553: 
                    554: //
                    555: // Arrays of integers large enough to hold the indexes of all
                    556: // the messages in the message table.  This is used when
                    557: // selecting messages with the Messages dialog.
                    558: //
                    559: INT gaiSelected[sizeof(gaMsgs) / sizeof(MSGDESC)];
                    560: INT gaiSelected2[sizeof(gaMsgs) / sizeof(MSGDESC)];
                    561: 
                    562: MSGGROUP gaMsgGroup[] =
                    563: {
                    564:     { DID_MSGSDDE,      MTF_TYPE_DDE,   0,  0 },
                    565:     { DID_MSGSCLIP,     MTF_TYPE_CLIP,  0,  0 },
                    566:     { DID_MSGSMOUSE,    MTF_TYPE_MOUSE, 0,  0 },
                    567:     { DID_MSGSNC,       MTF_TYPE_NC,    0,  0 },
                    568:     { DID_MSGSKEYBD,    MTF_TYPE_KEYBD, 0,  0 },
                    569:     { DID_MSGSBM,       MTF_TYPE_BM,    0,  0 },
                    570:     { DID_MSGSCB,       MTF_TYPE_CB,    0,  0 },
                    571:     { DID_MSGSEM,       MTF_TYPE_EM,    0,  0 },
                    572:     { DID_MSGSLB,       MTF_TYPE_LB,    0,  0 },
                    573:     { DID_MSGSSTM,      MTF_TYPE_STM,   0,  0 }
                    574: };
                    575: 
                    576: INT gcMsgGroups = sizeof(gaMsgGroup) / sizeof(MSGGROUP);
                    577: 
                    578: 
                    579: INT __cdecl  MsgCmp(const void *p1, const void *p2);
                    580: PRIVATE VOID mprintf(LPSTR format, ...);
                    581: 
                    582: 
                    583: 
                    584: /*****************************************************************************\
                    585: * MsgCmp
                    586: *
                    587: * Callback function for qsort that sorts messages.
                    588: *
                    589: * Arguments:
                    590: *    void *p1 - pointer to first item
                    591: *    void *p2 - pointer to second item
                    592: *
                    593: * Returns:
                    594: *    -1 if first input less than second input
                    595: *    1  if second input is less than first input
                    596: *    0  if inputs are equal
                    597: *
                    598: \*****************************************************************************/
                    599: 
                    600: INT __cdecl
                    601: MsgCmp(
                    602:     const void *p1,
                    603:     const void *p2
                    604:     )
                    605: {
                    606:     MSGDESC *pmd1 = (PMSGDESC)p1;
                    607:     MSGDESC *pmd2 = (PMSGDESC)p2;
                    608: 
                    609:     return pmd1->msg < pmd2->msg ? -1 : (pmd1->msg > pmd2->msg ? 1 : 0);
                    610: }
                    611: 
                    612: 
                    613: 
                    614: /*****************************************************************************\
                    615: * CalculatePrintfTabs
                    616: *
                    617: * Calculates the tabs needed for each field in the printf window.  This
                    618: * is based on the largest string in the message table and the specified
                    619: * font.
                    620: *
                    621: * Arguments:
                    622: *   HFONT hfont - Font to use in the calculations.
                    623: *
                    624: * Returns:
                    625: *   VOID
                    626: \*****************************************************************************/
                    627: 
                    628: VOID
                    629: CalculatePrintfTabs(
                    630:     HFONT hfont
                    631:     )
                    632: {
                    633:     MSGDESC *pmd;
                    634:     HDC hdc;
                    635:     INT dxMsg;
                    636:     INT dxSpace;
                    637:     INT dxHwnd;
                    638:     INT tabs[3];
                    639:     SIZE siz;
                    640:     HFONT hfontOld;
                    641:     INT i;
                    642: 
                    643:     hdc = GetDC(NULL);
                    644:     hfontOld = SelectObject(hdc, hfont);
                    645:     dxMsg = 0;
                    646:     for (pmd = gaMsgs, i = 0; i < gcMessages; pmd++, i++)
                    647:     {
                    648:         GetTextExtentPoint(hdc, pmd->pszMsg, lstrlen(pmd->pszMsg), &siz);
                    649:         dxMsg = max(dxMsg, siz.cx);
                    650:     }
                    651: 
                    652:     //
                    653:     // Calculate the widest possible hwnd value.  It is assumed that the
                    654:     // font will have the same width for all digits (or that '0' would
                    655:     // be the widest).
                    656:     //
                    657:     GetTextExtentPoint(hdc, "00000000", 8, &siz);
                    658:     dxHwnd = siz.cx;
                    659:     GetTextExtentPoint(hdc, "AAAAAAAA", 8, &siz);
                    660:     dxHwnd = max(dxHwnd, siz.cx);
                    661:     GetTextExtentPoint(hdc, "BBBBBBBB", 8, &siz);
                    662:     dxHwnd = max(dxHwnd, siz.cx);
                    663:     GetTextExtentPoint(hdc, "CCCCCCCC", 8, &siz);
                    664:     dxHwnd = max(dxHwnd, siz.cx);
                    665:     GetTextExtentPoint(hdc, "DDDDDDDD", 8, &siz);
                    666:     dxHwnd = max(dxHwnd, siz.cx);
                    667:     GetTextExtentPoint(hdc, "EEEEEEEE", 8, &siz);
                    668:     dxHwnd = max(dxHwnd, siz.cx);
                    669:     GetTextExtentPoint(hdc, "FFFFFFFF", 8, &siz);
                    670:     dxHwnd = max(dxHwnd, siz.cx);
                    671: 
                    672:     GetTextExtentPoint(hdc, " ", 1, &siz);
                    673:     dxSpace = siz.cx;
                    674: 
                    675:     SelectObject(hdc, hfontOld);
                    676:     ReleaseDC(NULL, hdc);
                    677: 
                    678:     tabs[0] = dxHwnd + dxSpace;
                    679:     tabs[1] = tabs[0] + dxMsg + dxSpace;
                    680:     tabs[2] = tabs[1] + dxHwnd + dxSpace;
                    681: 
                    682:     SetPrintfTabs(3, tabs);
                    683: }
                    684: 
                    685: 
                    686: 
                    687: /*****************************************************************************\
                    688: * PrintMsg
                    689: *
                    690: * Writes out a specified message.
                    691: *
                    692: * Arguments:
                    693: *    LPMSG lpMsg - message to print out
                    694: *
                    695: * Returns:
                    696: *    VOID
                    697: \*****************************************************************************/
                    698: 
                    699: VOID
                    700: PrintMsg(
                    701:     LPMSG lpMsg
                    702:     )
                    703: {
                    704:     static MSGDESC md;
                    705:     PMSGDESC pmd;
                    706: 
                    707:     md.msg = lpMsg->message;
                    708:     pmd = (PMSGDESC)bsearch(&md, gaMsgs, gcMessages, sizeof(MSGDESC), MsgCmp);
                    709: 
                    710:     if (pmd)
                    711:     {
                    712:         if (pmd->Flags & MTF_SELECTED)
                    713:         {
                    714:             mprintf(szFormatName, lpMsg->hwnd, pmd->pszMsg, lpMsg->wParam,
                    715:                 lpMsg->lParam);
                    716:         }
                    717:     }
                    718:     else
                    719:     {
                    720:         if (lpMsg->message >= WM_USER)
                    721:         {
                    722:             if (gfMsgsUser)
                    723:             {
                    724:                 mprintf(szFormatUSER, lpMsg->hwnd, lpMsg->message - WM_USER,
                    725:                     lpMsg->wParam, lpMsg->lParam);
                    726:             }
                    727:         }
                    728:         else
                    729:         {
                    730:             if (gfMsgsUnknown)
                    731:             {
                    732:                 mprintf(szFormatUnknown, lpMsg->hwnd, lpMsg->message,
                    733:                     lpMsg->wParam, lpMsg->lParam);
                    734:             }
                    735:         }
                    736:     }
                    737: }
                    738: 
                    739: 
                    740: 
                    741: /*****************************************************************************\
                    742: * mprintf
                    743: *
                    744: * Writes out a message to the specified device.  Currently output to COM1
                    745: * if commented out due to a bug.
                    746: *
                    747: * Arguments:
                    748: *   LPSTR format - Format string.
                    749: *   ...          - Optional arguments.
                    750: *
                    751: * Returns:
                    752: *    VOID
                    753: *
                    754: \*****************************************************************************/
                    755: 
                    756: PRIVATE VOID
                    757: mprintf(
                    758:     LPSTR format,
                    759:     ...
                    760:     )
                    761: {
                    762:     va_list marker;
                    763:     CHAR szTemp[MAXSTRING];
                    764:     INT iLen;
                    765: 
                    766:     va_start(marker, format);
                    767: 
                    768:     if (gfOutputWin)
                    769:     {
                    770:         vwprintf(ghwndPrintf, format, marker);
                    771:         vwprintf(ghwndPrintf, "\n", marker);
                    772:     }
                    773: 
                    774: #if 0
                    775:     if (gfOutputCom1)
                    776:     {
                    777:         iLen = wvsprintf(szTemp, format, marker);
                    778:         M_lwrite(INT2HFILE(FH_COM1), szTemp, iLen);
                    779:         M_lwrite(INT2HFILE(FH_COM1), "\r\n", 2);
                    780:     }
                    781: #endif //BUG this doesn't work under NT.  The com device needs to be explicitly opened.
                    782: 
                    783:     if (gfOutputFile && gfhFile)
                    784:     {
                    785:         iLen = wvsprintf(szTemp, format, marker);
                    786:         _lwrite(gfhFile, szTemp, iLen);
                    787:         _lwrite(gfhFile, "\r\n", 2);
                    788: //BUG        _lclose(DUPHFILE(gfhFile));    /* flush the file buffer */
                    789:     }
                    790: 
                    791:     va_end(marker);
                    792: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.