Annotation of mstools/samples/sdktools/spy/app/wm.c, revision 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.