|
|
1.1 ! root 1: /**************************************************************************** ! 2: ! 3: PROGRAM: DdeSpy.c ! 4: ! 5: ****************************************************************************/ ! 6: ! 7: #include <windows.h> /* required for all Windows applications */ ! 8: #include <windowsx.h> ! 9: #include <shellapi.h> ! 10: #include <dde.h> ! 11: #include <stdio.h> ! 12: #include <io.h> ! 13: #include <errno.h> ! 14: #include <string.h> ! 15: #include <stdlib.h> ! 16: #include <ctype.h> ! 17: #include "ddespy.h" ! 18: #include "lists.h" ! 19: ! 20: /* GLOBAL Variables used for DDESPY */ ! 21: ! 22: UINT idInst = 0; ! 23: HANDLE hInst; ! 24: HICON hIcon; ! 25: HWND hWndString = NULL; ! 26: HWND hwndSpy = NULL; ! 27: INT fhOutput = 0; ! 28: OFSTRUCT ofsOpen; ! 29: CHAR OpenName[MAX_FNAME + 1]; ! 30: CHAR TBuf[BUFFER_SIZE]; ! 31: CHAR TBuf2[BUFFER_SIZE]; ! 32: CHAR szNULL[] = ""; ! 33: PSTR apszResources[IDS_LAST + 1]; ! 34: PFNCALLBACK pfnDdeCallback = NULL; ! 35: HWND hwndTrack[IT_COUNT] = { 0 }; ! 36: PSTR TrackTitle[IT_COUNT]; ! 37: BOOL fBlockMsg[WM_DDE_LAST - WM_DDE_FIRST + 1] = { 0 }; ! 38: BOOL fBlockCb[15] = { 0 }; ! 39: PSTR TrackHeading[IT_COUNT]; ! 40: struct { /* profile data */ ! 41: BOOL fOutput[IO_COUNT]; ! 42: BOOL fFilter[IF_COUNT]; ! 43: BOOL fTrack[IT_COUNT]; ! 44: BOOL fTerse; ! 45: } pro; ! 46: ! 47: ! 48: ! 49: BOOL LoadResourceStrings() ! 50: { ! 51: int i, cbLeft, cbRes; ! 52: PSTR psz; ! 53: ! 54: cbLeft = 0x1000; ! 55: psz = LocalAlloc(LPTR, cbLeft); ! 56: for (i = 0; i <= IDS_LAST; i++) { ! 57: apszResources[i] = psz; ! 58: cbRes = LoadString(hInst, i, psz, cbLeft) + 1; ! 59: cbLeft -= cbRes; ! 60: psz += cbRes; ! 61: } ! 62: for (i = 0; i < IT_COUNT; i++) { ! 63: TrackTitle[i] = RefString(IDS_TRACKTITLE_1 + i); ! 64: TrackHeading[i] = RefString(IDS_TRACKHEADING_1 + i); ! 65: } ! 66: strcpy(TBuf, RefString(IDS_DEFAULT_OUTPUT_FNAME)); ! 67: GetFullPathName(TBuf, sizeof(OpenName), OpenName, (LPTSTR *)TBuf2); ! 68: return(TRUE); ! 69: } ! 70: ! 71: ! 72: ! 73: int WINAPI WinMain( ! 74: HINSTANCE hInstance, ! 75: HINSTANCE hPrevInstance, ! 76: LPSTR lpCmdLine, ! 77: int nCmdShow) ! 78: { ! 79: MSG msg; ! 80: ! 81: UNREFERENCED_PARAMETER(lpCmdLine); ! 82: ! 83: hInst = hInstance; ! 84: ! 85: if (!LoadResourceStrings()) { ! 86: return (FALSE); ! 87: } ! 88: ! 89: if (!hPrevInstance) ! 90: if (!InitApplication(hInstance)) /* Initialize shared things */ ! 91: return (FALSE); /* Exits if unable to initialize */ ! 92: ! 93: /* Perform initializations that apply to a specific instance */ ! 94: ! 95: if (!InitInstance(hInstance, nCmdShow)) { ! 96: CloseApp(); ! 97: return (FALSE); ! 98: } ! 99: ! 100: /* Acquire and dispatch messages until a WM_QUIT message is received. */ ! 101: ! 102: while (GetMessage(&msg, /* message structure */ ! 103: NULL, /* handle of window receiving the message */ ! 104: 0, /* lowest message to examine */ ! 105: 0)) /* highest message to examine */ ! 106: { ! 107: TranslateMessage(&msg); /* Translates virtual key codes */ ! 108: DispatchMessage(&msg); /* Dispatches message to window */ ! 109: } ! 110: CloseApp(); ! 111: return (msg.wParam); /* Returns the value from PostQuitMessage */ ! 112: } ! 113: ! 114: ! 115: ! 116: BOOL InitApplication(HINSTANCE hInstance) ! 117: { ! 118: WNDCLASS wc; ! 119: ! 120: if (!InitTestSubs()) ! 121: return(FALSE); ! 122: ! 123: /* Fill in window class structure with parameters that describe the */ ! 124: /* main window. */ ! 125: ! 126: wc.style = 0; /* Class style(s). */ ! 127: wc.lpfnWndProc = (WNDPROC)MainWndProc; /* Function to retrieve messages for */ ! 128: /* windows of this class. */ ! 129: wc.cbClsExtra = 0; /* No per-class extra data. */ ! 130: wc.cbWndExtra = 0; /* No per-window extra data. */ ! 131: wc.hInstance = hInstance; /* Application that owns the class. */ ! 132: hIcon = wc.hIcon = LoadIcon(hInstance, RefString(IDS_TITLE)); ! 133: wc.hCursor = LoadCursor(NULL, IDC_ARROW); ! 134: wc.hbrBackground = GetStockObject(WHITE_BRUSH); ! 135: wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU); /* Name of menu resource in .RC file. */ ! 136: wc.lpszClassName = RefString(IDS_CLASS); ! 137: ! 138: /* Register the window class and return success/failure code. */ ! 139: ! 140: return (RegisterClass(&wc)); ! 141: } ! 142: ! 143: ! 144: BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) ! 145: { ! 146: RECT Rect; ! 147: INT i; ! 148: ! 149: /* Save the instance handle in static variable, which will be used in */ ! 150: /* many subsequence calls from this application to Windows. */ ! 151: ! 152: pfnDdeCallback = (PFNCALLBACK)MakeProcInstance((FARPROC)DdeCallback, ! 153: hInstance); ! 154: ! 155: GetProfile(); ! 156: ! 157: /* Create a main window for this application instance. */ ! 158: ! 159: hwndSpy = CreateWindow( ! 160: RefString(IDS_CLASS), ! 161: RefString(IDS_TITLE), ! 162: WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, ! 163: CW_USEDEFAULT, /* Default horizontal position. */ ! 164: CW_USEDEFAULT, /* Default vertical position. */ ! 165: CW_USEDEFAULT, /* Default width. */ ! 166: CW_USEDEFAULT, /* Default height. */ ! 167: NULL, /* Overlapped windows have no parent. */ ! 168: NULL, /* Use the window class menu. */ ! 169: hInstance, /* This instance owns this window. */ ! 170: NULL /* Pointer not needed. */ ! 171: ); ! 172: ! 173: ! 174: GetClientRect(hwndSpy, (LPRECT) &Rect); ! 175: ! 176: hWndString = CreateWindow( /* String Window (class Registered in Teststubs)*/ ! 177: RefString(IDS_STRINGCLASS), ! 178: szNULL, ! 179: WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL, ! 180: 0, ! 181: 0, ! 182: Rect.right - Rect.left, ! 183: Rect.bottom - Rect.top, ! 184: hwndSpy, ! 185: NULL, ! 186: hInst, ! 187: (LPSTR)MAKELONG(CCHARS, CLINES)); ! 188: ! 189: for (i = 0; i < IT_COUNT; i++) { ! 190: if (pro.fTrack[i]) { ! 191: pro.fTrack[i] = FALSE; ! 192: SendMessage(hwndSpy, WM_COMMAND, ! 193: GET_WM_COMMAND_MPS(IDM_TRACK_FIRST + i, 0, 0)); ! 194: } ! 195: } ! 196: ! 197: if (!hwndSpy || !hWndString) { ! 198: CloseApp(); ! 199: return (FALSE); ! 200: } ! 201: ! 202: /* Make the window visible; update its client area; and return "success" */ ! 203: ! 204: ShowWindow(hwndSpy, nCmdShow); /* Show the window */ ! 205: UpdateWindow(hwndSpy); /* Sends WM_PAINT message */ ! 206: ! 207: if (SetFilters()) { ! 208: return(FALSE); ! 209: } ! 210: ! 211: return(TRUE); ! 212: } ! 213: ! 214: ! 215: VOID CloseApp() ! 216: { ! 217: DdeUninitialize(idInst); /* perform cleanup and store profile */ ! 218: SaveProfile(); ! 219: if (fhOutput) ! 220: _lclose(fhOutput); ! 221: UnregisterClass(RefString(IDS_CLASS), hInst); ! 222: CloseTestSubs(hInst); ! 223: } ! 224: ! 225: ! 226: ! 227: LONG CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) ! 228: { ! 229: int i; ! 230: ! 231: switch (message) { ! 232: case WM_CREATE: ! 233: LoadAccelerators(hInst, MAKEINTRESOURCE(IDR_ACCEL)); ! 234: if (pro.fOutput[IO_FILE]) ! 235: pro.fOutput[IO_FILE] = fhOutput = ! 236: DoDialog(MAKEINTRESOURCE(IDD_OPEN), (DLGPROC)OpenDlg, 0, TRUE, hWnd, hInst); ! 237: break; ! 238: ! 239: case WM_INITMENU: ! 240: if (GetMenu(hWnd) != (HMENU)wParam) ! 241: break; ! 242: ! 243: for (i = 0; i < IO_COUNT; i++) { ! 244: CheckMenuItem((HMENU)wParam, IDM_OUTPUT_FIRST + i, ! 245: pro.fOutput[i] ? MF_CHECKED : MF_UNCHECKED); ! 246: } ! 247: ! 248: for (i = 0; i < IF_COUNT; i++) { ! 249: CheckMenuItem((HMENU)wParam, IDM_FILTER_FIRST + i, ! 250: pro.fFilter[i] ? MF_CHECKED : MF_UNCHECKED); ! 251: } ! 252: ! 253: for (i = 0; i < IT_COUNT; i++) { ! 254: CheckMenuItem((HMENU)wParam, IDM_TRACK_FIRST + i, ! 255: pro.fTrack[i] ? MF_CHECKED : MF_UNCHECKED); ! 256: } ! 257: break; ! 258: ! 259: case WM_COMMAND: /* message: command from application menu */ ! 260: switch (GET_WM_COMMAND_ID(wParam, lParam)) { ! 261: case IDM_OUTPUT_FILE: ! 262: case IDM_OUTPUT_DEBUG: ! 263: case IDM_OUTPUT_SCREEN: ! 264: switch (wParam) { ! 265: case IDM_OUTPUT_FILE: ! 266: if (fhOutput) { ! 267: wsprintf(TBuf, RefString(IDS_QCLOSEFILE_TEXT), OpenName); ! 268: if (IDYES != MessageBox(hWnd, ! 269: TBuf, RefString(IDS_QCLOSEFILE_CAPTION), ! 270: MB_YESNO | MB_ICONQUESTION)) { ! 271: break; ! 272: } ! 273: _lclose(fhOutput); ! 274: } ! 275: pro.fOutput[IO_FILE] = fhOutput = ! 276: DoDialog(MAKEINTRESOURCE(IDD_OPEN), (DLGPROC)OpenDlg, 0, TRUE, hWnd, hInst); ! 277: break; ! 278: ! 279: case IDM_OUTPUT_DEBUG: ! 280: pro.fOutput[IO_DEBUG] = !pro.fOutput[IO_DEBUG]; ! 281: break; ! 282: ! 283: case IDM_OUTPUT_SCREEN: ! 284: pro.fOutput[IO_SCREEN] = !pro.fOutput[IO_SCREEN]; ! 285: break; ! 286: ! 287: } ! 288: break; ! 289: ! 290: case IDM_CLEARSCREEN: ! 291: if (hWndString) { ! 292: HANDLE hpsw; ! 293: STRWND *psw; ! 294: ! 295: hpsw = (HANDLE)GetWindowLong(hWndString, 0); ! 296: psw = (STRWND *)LocalLock(hpsw); ! 297: ClearScreen(psw); ! 298: LocalUnlock(hpsw); ! 299: InvalidateRect(hWndString, NULL, TRUE); ! 300: } ! 301: break; ! 302: ! 303: case IDM_MARK: ! 304: DoDialog(MAKEINTRESOURCE(IDD_VALUEENTRY), (DLGPROC)MarkDlgProc, 0, TRUE, hWnd, hInst); ! 305: break; ! 306: ! 307: case IDM_FILTER_HSZINFO: ! 308: case IDM_FILTER_INIT_TERM: ! 309: case IDM_FILTER_DDEMSGS: ! 310: case IDM_FILTER_CALLBACKS: ! 311: case IDM_FILTER_ERRORS: ! 312: pro.fFilter[wParam - IDM_FILTER_FIRST] = ! 313: !pro.fFilter[wParam - IDM_FILTER_FIRST]; ! 314: SetFilters(); ! 315: break; ! 316: ! 317: case IDM_FILTER_DIALOG: ! 318: DoDialog(MAKEINTRESOURCE(IDD_MSGFILTERS), (DLGPROC)FilterDlgProc, 0, TRUE, hWnd, hInst); ! 319: break; ! 320: ! 321: case IDM_TRACK_HSZS: ! 322: case IDM_TRACK_CONVS: ! 323: case IDM_TRACK_LINKS: ! 324: case IDM_TRACK_SVRS: ! 325: pro.fTrack[wParam - IDM_TRACK_FIRST] = ! 326: !pro.fTrack[wParam - IDM_TRACK_FIRST]; ! 327: if (pro.fTrack[wParam - IDM_TRACK_FIRST]) { ! 328: hwndTrack[wParam - IDM_TRACK_FIRST] = CreateMCLBFrame( ! 329: NULL, ! 330: TrackTitle[wParam - IDM_TRACK_FIRST], ! 331: WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_MINIMIZE, ! 332: hIcon, (HBRUSH)(COLOR_APPWORKSPACE + 1), ! 333: TrackHeading[wParam - IDM_TRACK_FIRST]); ! 334: } else { ! 335: DestroyWindow(hwndTrack[wParam - IDM_TRACK_FIRST]); ! 336: hwndTrack[wParam - IDM_TRACK_FIRST] = 0; ! 337: } ! 338: SetFilters(); ! 339: break; ! 340: ! 341: case IDM_ABOUT: ! 342: DoDialog(MAKEINTRESOURCE(IDD_ABOUTBOX), (DLGPROC)About, 0, TRUE, hWnd, hInst); ! 343: break; ! 344: ! 345: default: ! 346: return (DefWindowProc(hWnd, message, wParam, lParam)); ! 347: } ! 348: break; ! 349: ! 350: case WM_DESTROY: /* message: window being destroyed */ ! 351: for (i = IDM_TRACK_FIRST; i <= IDM_TRACK_LAST; i++) { ! 352: if (pro.fTrack[i - IDM_TRACK_FIRST]) { ! 353: DestroyWindow(hwndTrack[i - IDM_TRACK_FIRST]); ! 354: hwndTrack[i - IDM_TRACK_FIRST] = 0; ! 355: } ! 356: } ! 357: PostQuitMessage(0); ! 358: break; ! 359: ! 360: case WM_SIZE: ! 361: if (hWndString) { ! 362: RECT rc; ! 363: ! 364: GetClientRect(hWnd, &rc); ! 365: MoveWindow(hWndString, 0, 0, rc.right, rc.bottom, TRUE); ! 366: } ! 367: // fall through ! 368: default: ! 369: return (DefWindowProc(hWnd, message, wParam, lParam)); ! 370: } ! 371: return (0); ! 372: } ! 373: ! 374: ! 375: ! 376: ! 377: ! 378: BOOL CALLBACK About( ! 379: HWND hDlg, ! 380: UINT message, ! 381: WPARAM wParam, ! 382: LPARAM lParam) ! 383: { ! 384: switch (message) { ! 385: case WM_INITDIALOG: /* message: initialize dialog box */ ! 386: return (TRUE); ! 387: ! 388: case WM_COMMAND: /* message: received a command */ ! 389: if (GET_WM_COMMAND_ID(wParam, lParam) == IDOK ! 390: || GET_WM_COMMAND_ID(wParam, lParam) == IDCANCEL) { ! 391: EndDialog(hDlg, TRUE); /* Exits the dialog box */ ! 392: return (TRUE); ! 393: } ! 394: break; ! 395: } ! 396: return (FALSE); /* Didn't process a message */ ! 397: } ! 398: ! 399: ! 400: HDDEDATA CALLBACK DdeCallback( ! 401: UINT wType, ! 402: UINT wFmt, ! 403: HCONV hConv, ! 404: HSZ hsz1, ! 405: HSZ hsz2, ! 406: HDDEDATA hData, ! 407: UINT dwData1, ! 408: UINT dwData2) ! 409: { ! 410: LPVOID pData; ! 411: UINT cb; ! 412: CHAR *psz1, *psz2, *psz3; ! 413: CHAR *szAction; ! 414: INT i; ! 415: BOOL fInt = FALSE; ! 416: wFmt; ! 417: hConv; ! 418: dwData1; ! 419: ! 420: switch (wType) { ! 421: case XTYP_MONITOR: ! 422: if (pData = DdeAccessData(hData, (LPDWORD)&cb)) { ! 423: switch (dwData2) { ! 424: case MF_HSZ_INFO: ! 425: if (pro.fTrack[IT_HSZS]) { ! 426: switch (((MONHSZSTRUCT FAR *)pData)->fsAction) { ! 427: case MH_DELETE: ! 428: wsprintf(TBuf, fInt ? "0x%lx\t*\t%s(int)" : "0x%lx\t*\t%s", ! 429: ((MONHSZSTRUCT FAR *)pData)->hsz, ! 430: (LPSTR)((MONHSZSTRUCT FAR *)pData)->str); ! 431: i = GetMCLBColValue(TBuf, hwndTrack[IT_HSZS], 2); ! 432: if (i > 1) { ! 433: wsprintf(TBuf2, fInt ? "0x%lx\t%d\t%s(int)" : "0x%lx\t%d\t%s", ! 434: ((MONHSZSTRUCT FAR *)pData)->hsz, ! 435: i - 1, ! 436: (LPSTR)((MONHSZSTRUCT FAR *)pData)->str); ! 437: AddMCLBText(TBuf, TBuf2, hwndTrack[IT_HSZS]); ! 438: } else if (i == 1) { ! 439: DeleteMCLBText(TBuf, hwndTrack[IT_HSZS]); ! 440: } ! 441: break; ! 442: ! 443: case MH_KEEP: ! 444: case MH_CREATE: ! 445: wsprintf(TBuf, fInt ? "0x%lx\t*\t%s(int)" : "0x%lx\t*\t%s", ! 446: ((MONHSZSTRUCT FAR *)pData)->hsz, ! 447: (LPSTR)((MONHSZSTRUCT FAR *)pData)->str); ! 448: i = GetMCLBColValue(TBuf, hwndTrack[IT_HSZS], 2) + 1; ! 449: wsprintf(TBuf2, fInt ? "0x%lx\t%d\t%s(int)" : "0x%lx\t%d\t%s", ! 450: ((MONHSZSTRUCT FAR *)pData)->hsz, ! 451: i, ! 452: (LPSTR)((MONHSZSTRUCT FAR *)pData)->str); ! 453: AddMCLBText(TBuf, TBuf2, hwndTrack[IT_HSZS]); ! 454: } ! 455: } ! 456: ! 457: if (!pro.fFilter[IF_HSZ]) { ! 458: return(0); ! 459: } ! 460: ! 461: switch (((MONHSZSTRUCT FAR *)pData)->fsAction) { ! 462: case MH_CLEANUP: ! 463: szAction = RefString(IDS_ACTION_CLEANEDUP); ! 464: break; ! 465: ! 466: case MH_DELETE: ! 467: szAction = RefString(IDS_ACTION_DESTROYED); ! 468: break; ! 469: ! 470: case MH_KEEP: ! 471: szAction = RefString(IDS_ACTION_INCREMENTED); ! 472: break; ! 473: ! 474: case MH_CREATE: ! 475: szAction = RefString(IDS_ACTION_CREATED); ! 476: break; ! 477: ! 478: default: ! 479: DdeUnaccessData(hData); ! 480: return(0); ! 481: } ! 482: if (pro.fTerse) { ! 483: wsprintf(TBuf, "[%x:%ld] HSZ %s: %lx(%s)", ! 484: ((MONHSZSTRUCT FAR *)pData)->hTask, ! 485: ((MONHSZSTRUCT FAR *)pData)->dwTime, ! 486: (LPSTR)szAction, ! 487: ((MONHSZSTRUCT FAR *)pData)->hsz, ! 488: (LPSTR)((MONHSZSTRUCT FAR *)pData)->str); ! 489: } else { ! 490: wsprintf(TBuf, "Task:0x%x, Time:%ld, String Handle %s: %lx(%s)", ! 491: ((MONHSZSTRUCT FAR *)pData)->hTask, ! 492: ((MONHSZSTRUCT FAR *)pData)->dwTime, ! 493: (LPSTR)szAction, ! 494: ((MONHSZSTRUCT FAR *)pData)->hsz, ! 495: (LPSTR)((MONHSZSTRUCT FAR *)pData)->str); ! 496: } ! 497: break; ! 498: ! 499: ! 500: case MF_SENDMSGS: ! 501: case MF_POSTMSGS: ! 502: if (fBlockMsg[((MONMSGSTRUCT FAR *)pData)->wMsg - WM_DDE_FIRST]) { ! 503: return(0); ! 504: } ! 505: if (pro.fTerse) { ! 506: wsprintf(TBuf, RefString(IDS_FMT_TRS_MSG1), ! 507: ((MONMSGSTRUCT FAR *)pData)->hTask, ! 508: ((MONMSGSTRUCT FAR *)pData)->dwTime, ! 509: ((MONMSGSTRUCT FAR *)pData)->wParam, ! 510: ((MONMSGSTRUCT FAR *)pData)->hwndTo, ! 511: (dwData2 == MF_SENDMSGS) ? RefString(IDS_SENT) : RefString(IDS_POSTED), ! 512: (LPSTR)DdeMsg2String(((MONMSGSTRUCT FAR *)pData)->wMsg)); ! 513: } else { ! 514: wsprintf(TBuf, RefString(IDS_FMT_MSG1), ! 515: ((MONMSGSTRUCT FAR *)pData)->hTask, ! 516: ((MONMSGSTRUCT FAR *)pData)->dwTime, ! 517: ((MONMSGSTRUCT FAR *)pData)->hwndTo, ! 518: (dwData2 == MF_SENDMSGS) ? RefString(IDS_SENT) : RefString(IDS_POSTED), ! 519: (LPSTR)DdeMsg2String(((MONMSGSTRUCT FAR *)pData)->wMsg)); ! 520: } ! 521: OutputString(TBuf); ! 522: wsprintf(TBuf, pro.fTerse ? RefString(IDS_FMT_TRS_MSG2) : RefString(IDS_FMT_MSG2), ! 523: ((MONMSGSTRUCT FAR *)pData)->wParam); ! 524: DisectMsgLP(((MONMSGSTRUCT FAR *)pData)->wMsg, ! 525: ((MONMSGSTRUCT FAR *)pData), ! 526: &TBuf[strlen(TBuf)]); ! 527: break; ! 528: ! 529: ! 530: case MF_CALLBACKS: ! 531: if (fBlockCb[(((MONCBSTRUCT FAR *)pData)->wType & XTYP_MASK) >> XTYP_SHIFT]) { ! 532: return(0); ! 533: } ! 534: wsprintf(TBuf, ! 535: pro.fTerse ? RefString(IDS_FMT_TRS_CB1) : RefString(IDS_FMT_CB1), ! 536: ((MONCBSTRUCT FAR *)pData)->hTask, ! 537: ((MONCBSTRUCT FAR *)pData)->dwTime, ! 538: (LPSTR)Type2String(((MONCBSTRUCT FAR *)pData)->wType)); ! 539: wsprintf(DumpFormat(((MONCBSTRUCT FAR *)pData)->wFmt, &TBuf[strlen(TBuf)]), ! 540: pro.fTerse ? RefString(IDS_FMT_TRS_CB2) : RefString(IDS_FMT_CB2), ! 541: (UINT)((MONCBSTRUCT FAR *)pData)->hConv, ! 542: ((MONCBSTRUCT FAR *)pData)->hsz1, ! 543: (LPSTR)(psz1 = GetHszName(((MONCBSTRUCT FAR *)pData)->hsz1)), ! 544: ((MONCBSTRUCT FAR *)pData)->hsz2, ! 545: (LPSTR)(psz2 = GetHszName(((MONCBSTRUCT FAR *)pData)->hsz2)), ! 546: ((MONCBSTRUCT FAR *)pData)->hData, ! 547: ((MONCBSTRUCT FAR *)pData)->dwData1, ! 548: ((MONCBSTRUCT FAR *)pData)->dwData2, ! 549: ((MONCBSTRUCT FAR *)pData)->dwRet); ! 550: MyFree(psz1); ! 551: MyFree(psz2); ! 552: OutputString(TBuf); ! 553: if (((MONCBSTRUCT FAR *)pData)->dwData1 && ! 554: (((MONCBSTRUCT FAR *)pData)->wType == XTYP_CONNECT || ! 555: ((MONCBSTRUCT FAR *)pData)->wType == XTYP_WILDCONNECT)) { ! 556: // display proposed context ! 557: wsprintf(TBuf, ! 558: pro.fTerse ? RefString(IDS_FMT_TRS_CTXT1) : RefString(IDS_FMT_CTXT1), ! 559: ((MONCBSTRUCT FAR *)pData)->cc.wFlags, ! 560: ((MONCBSTRUCT FAR *)pData)->cc.wCountryID, ! 561: ((MONCBSTRUCT FAR *)pData)->cc.iCodePage, ! 562: ((MONCBSTRUCT FAR *)pData)->cc.dwLangID, ! 563: ((MONCBSTRUCT FAR *)pData)->cc.dwSecurity, ! 564: ((MONCBSTRUCT FAR *)pData)->cc.qos.ImpersonationLevel, ! 565: ((MONCBSTRUCT FAR *)pData)->cc.qos.ContextTrackingMode, ! 566: ((MONCBSTRUCT FAR *)pData)->cc.qos.EffectiveOnly); ! 567: OutputString(TBuf); ! 568: } ! 569: if (((MONCBSTRUCT FAR *)pData)->hData && ((MONCBSTRUCT FAR *)pData)->cbData) { ! 570: wsprintf(TBuf, RefString(IDS_INPUT_DATA)); ! 571: OutputString(TBuf); ! 572: DumpData((LPBYTE)((MONCBSTRUCT FAR *)pData)->Data, ! 573: ((MONCBSTRUCT FAR *)pData)->cbData, ! 574: TBuf, ! 575: ((MONCBSTRUCT FAR *)pData)->wFmt); ! 576: OutputString(TBuf); ! 577: if (cb > MAX_DISPDATA) ! 578: OutputString(RefString(IDS_TABDDD)); ! 579: DdeUnaccessData(((MONCBSTRUCT FAR *)pData)->hData); ! 580: } ! 581: if ((((MONCBSTRUCT FAR *)pData)->wType & XCLASS_DATA) && ! 582: ((MONCBSTRUCT FAR *)pData)->dwRet && ! 583: ((MONCBSTRUCT FAR *)pData)->cbData) { ! 584: wsprintf(TBuf, RefString(IDS_OUTPUT_DATA)); ! 585: OutputString(TBuf); ! 586: DumpData((LPBYTE)((MONCBSTRUCT FAR *)pData)->Data, ! 587: ((MONCBSTRUCT FAR *)pData)->cbData, ! 588: TBuf, ! 589: ((MONCBSTRUCT FAR *)pData)->wFmt); ! 590: OutputString(TBuf); ! 591: if (cb > MAX_DISPDATA) ! 592: OutputString(RefString(IDS_TABDDD)); ! 593: DdeUnaccessData(((MONCBSTRUCT FAR *)pData)->dwRet); ! 594: } ! 595: DdeUnaccessData(hData); ! 596: return(0); ! 597: break; ! 598: ! 599: case MF_ERRORS: ! 600: wsprintf(TBuf, pro.fTerse ? RefString(IDS_FMT_TRS_ER1) : RefString(IDS_FMT_ER1), ! 601: ((MONERRSTRUCT FAR *)pData)->hTask, ! 602: ((MONERRSTRUCT FAR *)pData)->dwTime, ! 603: ((MONERRSTRUCT FAR *)pData)->wLastError, ! 604: (LPSTR)Error2String(((MONERRSTRUCT FAR *)pData)->wLastError)); ! 605: break; ! 606: ! 607: ! 608: case MF_LINKS: ! 609: psz1 = GetHszName(((MONLINKSTRUCT FAR *)pData)->hszSvc); ! 610: psz2 = GetHszName(((MONLINKSTRUCT FAR *)pData)->hszTopic); ! 611: psz3 = GetHszName(((MONLINKSTRUCT FAR *)pData)->hszItem); ! 612: if (!GetClipboardFormatName(((MONLINKSTRUCT FAR *)pData)->wFmt, TBuf2, BUFFER_SIZE)) ! 613: strcpy(TBuf2, pdf(((MONLINKSTRUCT FAR *)pData)->wFmt)); ! 614: if (!strcmp(RefString(IDS_HUH), TBuf2)) { ! 615: wsprintf(TBuf2, "%d", ((MONLINKSTRUCT FAR *)pData)->wFmt); ! 616: } ! 617: ! 618: wsprintf(TBuf, "%s\t%s\t%s\t%s\t%s\t%lx\t%lx", ! 619: (LPSTR)psz1, (LPSTR)psz2, (LPSTR)psz3, ! 620: (LPSTR)TBuf2, ! 621: ((MONLINKSTRUCT FAR *)pData)->fNoData ? ! 622: RefString(IDS_WARM) : RefString(IDS_HOT), ! 623: ((MONLINKSTRUCT FAR *)pData)->hConvClient, ! 624: ((MONLINKSTRUCT FAR *)pData)->hConvServer); ! 625: ! 626: if (((MONLINKSTRUCT FAR *)pData)->fEstablished) { ! 627: AddMCLBText(TBuf, TBuf, hwndTrack[IT_LINKS]); ! 628: } else { ! 629: DeleteMCLBText(TBuf, hwndTrack[IT_LINKS]); ! 630: } ! 631: ! 632: MyFree(psz1); ! 633: MyFree(psz2); ! 634: MyFree(psz3); ! 635: DdeUnaccessData(hData); ! 636: return(0); ! 637: ! 638: ! 639: case MF_CONV: ! 640: psz1 = GetHszName(((MONCONVSTRUCT FAR *)pData)->hszSvc); ! 641: psz2 = GetHszName(((MONCONVSTRUCT FAR *)pData)->hszTopic); ! 642: ! 643: wsprintf(TBuf, "%s\t%s\t%lx\t%lx", ! 644: (LPSTR)psz1, (LPSTR)psz2, ! 645: ((MONCONVSTRUCT FAR *)pData)->hConvClient, ! 646: ((MONCONVSTRUCT FAR *)pData)->hConvServer); ! 647: ! 648: if (((MONCONVSTRUCT FAR *)pData)->fConnect) { ! 649: AddMCLBText(TBuf, TBuf, hwndTrack[IT_CONVS]); ! 650: } else { ! 651: DeleteMCLBText(TBuf, hwndTrack[IT_CONVS]); ! 652: } ! 653: ! 654: MyFree(psz1); ! 655: MyFree(psz2); ! 656: DdeUnaccessData(hData); ! 657: return(0); ! 658: ! 659: ! 660: default: ! 661: strcpy(TBuf, RefString(IDS_UNKNOWN_CALLBACK)); ! 662: } ! 663: DdeUnaccessData(hData); ! 664: OutputString(TBuf); ! 665: } ! 666: break; ! 667: ! 668: case XTYP_REGISTER: ! 669: case XTYP_UNREGISTER: ! 670: if (!pro.fTrack[IT_SVRS]) { ! 671: return(0); ! 672: } ! 673: psz1 = GetHszName(hsz1); ! 674: psz2 = GetHszName(hsz2); ! 675: wsprintf(TBuf, "%s\t%s", (LPSTR)psz1, (LPSTR)psz2); ! 676: if (wType == XTYP_REGISTER) { ! 677: AddMCLBText(NULL, TBuf, hwndTrack[IT_SVRS]); ! 678: } else { ! 679: DeleteMCLBText(TBuf, hwndTrack[IT_SVRS]); ! 680: } ! 681: MyFree(psz1); ! 682: MyFree(psz2); ! 683: break; ! 684: } ! 685: return(0); ! 686: } ! 687: ! 688: ! 689: PSTR DisectMsgLP(UINT msg, MONMSGSTRUCT *pmms, PSTR pszBuf) ! 690: { ! 691: static LONG m2t[] = { ! 692: ! 693: /* LOW HIGH */ ! 694: ! 695: MAKELONG(T_APP | T_ATOM, T_TOPIC | T_ATOM), // WM_DDE_INITIATE ! 696: 0, // WM_DDE_TERMINATE ! 697: MAKELONG(T_OPTIONHANDLE, T_ITEM | T_ATOM), // WM_DDE_ADVISE ! 698: MAKELONG(T_FORMAT, T_ITEM | T_ATOM), // WM_DDE_UNADVISE ! 699: MAKELONG(T_APP | T_ATOM | T_OR | T_STATUS, ! 700: T_TOPIC | T_ITEM | T_ATOM | T_OR | T_STRINGHANDLE), ! 701: // WM_DDE_ACK ! 702: MAKELONG(T_DATAHANDLE, T_ITEM | T_ATOM), // WM_DDE_DATA ! 703: MAKELONG(T_FORMAT, T_ITEM | T_ATOM), // WM_DDE_REQUEST ! 704: MAKELONG(T_DATAHANDLE, T_ITEM | T_ATOM), // WM_DDE_POKE ! 705: MAKELONG(0, T_STRINGHANDLE), // WM_DDE_EXECUTE ! 706: }; ! 707: ! 708: // ASSUMED: msg is a valid DDE message!!! ! 709: ! 710: pszBuf = DisectWord(LOWORD(m2t[msg - WM_DDE_FIRST]), ! 711: pmms->dmhd.uiLo, &pmms->dmhd, pszBuf); ! 712: *pszBuf++ = '\r'; ! 713: *pszBuf++ = '\n'; ! 714: *pszBuf++ = '\t'; ! 715: return(DisectWord(HIWORD(m2t[msg - WM_DDE_FIRST]), ! 716: pmms->dmhd.uiHi, &pmms->dmhd, pszBuf)); ! 717: } ! 718: ! 719: ! 720: ! 721: ! 722: /* ! 723: * Allocates local memory for and retrieves the string form of an HSZ. ! 724: * Returns a pointer to the local memory or NULL if failure. ! 725: * The string must be freed via MyFree(). ! 726: */ ! 727: PSTR GetHszName(HSZ hsz) ! 728: { ! 729: PSTR psz; ! 730: UINT cb; ! 731: ! 732: cb = (UINT)DdeQueryString(idInst, hsz, NULL, 0, 0) + 1; ! 733: psz = MyAlloc(cb); ! 734: DdeQueryString(idInst, hsz, psz, cb, 0); ! 735: return(psz); ! 736: } ! 737: ! 738: ! 739: ! 740: ! 741: PSTR DisectWord( UINT type, ! 742: UINT data, ! 743: DDEML_MSG_HOOK_DATA *pdmhd, ! 744: PSTR pstr) ! 745: { ! 746: UINT wT; ! 747: CHAR szData[32]; // for truncating strings w/o disturbing the hDdeData ! 748: ! 749: *pstr = '\0'; // in case we do nothing. ! 750: ! 751: if (type & T_ATOM) { ! 752: wT = GlobalGetAtomName((ATOM)data, (LPSTR)pstr, 25); ! 753: if (wT || data == 0) { ! 754: if (type & T_APP) { ! 755: strcpy(pstr, RefString(IDS_APPIS)); ! 756: pstr += strlen(pstr); ! 757: } ! 758: ! 759: if (type & T_TOPIC) { ! 760: strcpy(pstr, RefString(IDS_TOPICIS)); ! 761: pstr += strlen(pstr); ! 762: } ! 763: ! 764: if (type & T_ITEM) { ! 765: strcpy(pstr, RefString(IDS_ITEMIS)); ! 766: pstr += strlen(pstr); ! 767: } ! 768: } ! 769: if (wT) { ! 770: wsprintf(pstr, "0x%x(\"", data); ! 771: pstr += strlen(pstr); ! 772: GlobalGetAtomName((ATOM)data, (LPSTR)pstr, 25); ! 773: pstr += wT; ! 774: if (wT == 25) { ! 775: *pstr++ = '.'; ! 776: *pstr++ = '.'; ! 777: *pstr++ = '.'; ! 778: } ! 779: *pstr++ = '\"'; ! 780: *pstr++ = ')'; ! 781: *pstr = '\0'; ! 782: type &= ~(T_OR | T_STRINGHANDLE); // its an atom, so its not an object! ! 783: } else if (data == 0) { // could be a wild atom ! 784: *pstr++ = '*'; ! 785: *pstr = '\0'; ! 786: } else if (type & T_OR) { ! 787: type &= ~T_OR; // not an atom, must be somthin else. ! 788: } else { ! 789: wsprintf(pstr, "Bad Atom (0x%x)", data); ! 790: pstr += strlen(pstr); ! 791: } ! 792: } ! 793: ! 794: if (type & T_OR) { ! 795: strcpy(pstr, RefString(IDS_OR)); ! 796: pstr += strlen(pstr); ! 797: } ! 798: ! 799: ! 800: if (type & T_OPTIONHANDLE) { ! 801: if (pdmhd->cbData >= 4) { ! 802: wsprintf(pstr, pro.fTerse ? RefString(IDS_FMT_TRS_STATUSIS) : RefString(IDS_FMT_STATUSIS), LOWORD(pdmhd->Data[0])); ! 803: pstr += strlen(pstr); ! 804: if (LOWORD(pdmhd->Data[0]) & DDE_FACKREQ) { ! 805: strcpy(pstr, RefString(IDS_FACKREQ)); ! 806: pstr += strlen(pstr); ! 807: } ! 808: if (LOWORD(pdmhd->Data[0]) & DDE_FDEFERUPD) { ! 809: strcpy(pstr, RefString(IDS_DEFERUPD)); ! 810: pstr += strlen(pstr); ! 811: } ! 812: *pstr++ = ')'; ! 813: *pstr++ = ' '; ! 814: pstr = DumpFormat((UINT)HIWORD(pdmhd->Data[0]), pstr); ! 815: } ! 816: } ! 817: ! 818: if (type & T_FORMAT) { ! 819: pstr = DumpFormat(data, pstr); ! 820: } ! 821: ! 822: if (type & T_STATUS) { ! 823: wsprintf(pstr, pro.fTerse ? RefString(IDS_FMT_TRS_STATUSIS) : RefString(IDS_FMT_STATUSIS), LOWORD(data)); ! 824: pstr += strlen(pstr); ! 825: if (data & DDE_FACK) { ! 826: strcpy(pstr, RefString(IDS_FACK)); ! 827: pstr += strlen(pstr); ! 828: } ! 829: if (data & DDE_FBUSY) { ! 830: strcpy(pstr, RefString(IDS_FBUSY)); ! 831: pstr += strlen(pstr); ! 832: } ! 833: *pstr++ = ')'; ! 834: *pstr = '\0'; ! 835: } ! 836: ! 837: if (type & T_STRINGHANDLE && pdmhd->cbData) { ! 838: memcpy(szData, pdmhd->Data, min(32, pdmhd->cbData)); ! 839: szData[31] = '\0'; ! 840: wsprintf(pstr, pro.fTerse ? ! 841: RefString(IDS_FMT_TRS_EXEC1) : RefString(IDS_FMT_EXEC1), szData); ! 842: pstr += strlen(pstr); ! 843: *pstr = '\0'; ! 844: } ! 845: ! 846: if (type & T_DATAHANDLE && pdmhd->cbData) { ! 847: wsprintf(pstr, pro.fTerse ? ! 848: RefString(IDS_FMT_TRS_STATUSIS) : RefString(IDS_FMT_STATUSIS), ! 849: LOWORD(pdmhd->Data[0])); ! 850: pstr += strlen(pstr); ! 851: if (LOWORD(pdmhd->Data[0]) & DDE_FRELEASE) { ! 852: strcpy(pstr, RefString(IDS_FRELEASE)); ! 853: pstr += strlen(pstr); ! 854: } ! 855: if (LOWORD(pdmhd->Data[0]) & DDE_FREQUESTED) { ! 856: lstrcpy(pstr, RefString(IDS_FREQUESTED)); ! 857: pstr += strlen(pstr); ! 858: } ! 859: *pstr++ = ')'; ! 860: *pstr++ = ' '; ! 861: pstr = DumpFormat(HIWORD(pdmhd->Data[0]), pstr); ! 862: strcpy(pstr, pro.fTerse ? RefString(IDS_FMT_TRS_DATAIS1) : RefString(IDS_FMT_DATAIS1)); ! 863: pstr += strlen(pstr); ! 864: pstr = DumpData((LPBYTE)&pdmhd->Data[1], min(28, pdmhd->cbData - 4), ! 865: pstr, HIWORD(pdmhd->Data[0])); ! 866: } ! 867: return(pstr); ! 868: } ! 869: ! 870: ! 871: PSTR pdf(UINT fmt) ! 872: { ! 873: INT i; ! 874: static struct { ! 875: UINT fmt; ! 876: PSTR psz; ! 877: } fmts[] = { ! 878: { CF_TEXT , "CF_TEXT" } , ! 879: { CF_BITMAP , "CF_BITMAP" } , ! 880: { CF_METAFILEPICT , "CF_METAFILEPICT" } , ! 881: { CF_ENHMETAFILE , "CF_ENHMETAFILE" } , ! 882: { CF_SYLK , "CF_SYLK" } , ! 883: { CF_DIF , "CF_DIF" } , ! 884: { CF_TIFF , "CF_TIFF" } , ! 885: { CF_OEMTEXT , "CF_OEMTEXT" } , ! 886: { CF_DIB , "CF_DIB" } , ! 887: { CF_PALETTE , "CF_PALETTE" } , ! 888: }; ! 889: for (i = 0; i < 10; i++) ! 890: if (fmts[i].fmt == fmt) ! 891: return(fmts[i].psz); ! 892: return(RefString(IDS_HUH)); ! 893: } ! 894: ! 895: ! 896: ! 897: PSTR DumpFormat(UINT fmt, PSTR pstr) ! 898: { ! 899: UINT cb; ! 900: ! 901: wsprintf(pstr, "fmt=0x%x(\"", (WORD)fmt); ! 902: pstr += strlen(pstr); ! 903: if (cb = GetClipboardFormatName(fmt, pstr, 25)) { ! 904: pstr += cb; ! 905: *pstr++ = '\"'; ! 906: *pstr++ = ')'; ! 907: } else { ! 908: wsprintf(pstr, "%s\")", (LPSTR)pdf(fmt)); ! 909: pstr += strlen(pstr); ! 910: } ! 911: return(pstr); ! 912: } ! 913: ! 914: ! 915: ! 916: PSTR DumpData(LPBYTE pData, UINT cb, CHAR *szBuf, UINT fmt) ! 917: { ! 918: register INT i; ! 919: PSTR psz = szBuf; ! 920: ! 921: ! 922: while (cb) { ! 923: if (fmt == CF_TEXT) { ! 924: *szBuf++ = '\t'; ! 925: *szBuf++ = '\"'; ! 926: _fmemcpy(szBuf, pData, cb); ! 927: szBuf[cb - 2] = '\0'; ! 928: _fstrcat(szBuf, "\""); ! 929: cb = 0; ! 930: } else { ! 931: memset(szBuf, ' ', 80); ! 932: szBuf[0] = '\t'; ! 933: i = 0; ! 934: while (cb && (i < 16)) { ! 935: wsprintf(&szBuf[i * 3 + 1], "%02x ", pData[0]); ! 936: wsprintf(&szBuf[17 * 3 + i + 1], "%c", MPRT(pData[0])); ! 937: pData++; ! 938: cb--; ! 939: i++; ! 940: } ! 941: szBuf[i * 3 + 1] = ' '; ! 942: szBuf[17 * 3 + i + 1] = ' '; ! 943: szBuf[68] = '\0'; ! 944: } ! 945: szBuf += _fstrlen(szBuf); ! 946: } ! 947: return(szBuf); ! 948: } ! 949: ! 950: ! 951: ! 952: PSTR Error2String(UINT error) ! 953: { ! 954: static CHAR szErr[23]; ! 955: ! 956: if (error == 0) { ! 957: strcpy(szErr, RefString(IDS_ZERO)); ! 958: } else if (error > DMLERR_LAST || error < DMLERR_FIRST) { ! 959: strcpy(szErr, RefString(IDS_HUH)); ! 960: } else { ! 961: strcpy(szErr, apszResources[IDS_ERRST0 + error - DMLERR_FIRST]); ! 962: } ! 963: return(szErr); ! 964: } ! 965: ! 966: ! 967: ! 968: PSTR DdeMsg2String(UINT msg) ! 969: { ! 970: static CHAR szBadMsg[10]; ! 971: ! 972: if (msg < WM_DDE_FIRST || msg > WM_DDE_LAST) { ! 973: return((PSTR)itoa(msg, szBadMsg, 10)); ! 974: } else { ! 975: return(apszResources[IDS_MSG0 + msg - WM_DDE_FIRST]); ! 976: } ! 977: } ! 978: ! 979: ! 980: ! 981: VOID OutputString(PSTR pstr) ! 982: { ! 983: if (pro.fOutput[IO_FILE] & fhOutput) { ! 984: _lwrite(fhOutput, pstr, strlen(pstr)); ! 985: _lwrite(fhOutput, RefString(IDS_CRLF), 2); ! 986: flushall(); ! 987: } ! 988: if (pro.fOutput[IO_DEBUG]) { ! 989: OutputDebugString((LPSTR)pstr); ! 990: OutputDebugString(RefString(IDS_CRLF)); ! 991: } ! 992: if (pro.fOutput[IO_SCREEN]) { ! 993: if (IsWindow(hWndString)) ! 994: DrawString(hWndString, pstr); ! 995: } ! 996: } ! 997: ! 998: ! 999: ! 1000: BOOL SetFilters() ! 1001: { ! 1002: UINT cbf; ! 1003: ! 1004: cbf = 0; ! 1005: if (pro.fTrack[IT_HSZS] || pro.fFilter[IF_HSZ]) ! 1006: cbf |= MF_HSZ_INFO; ! 1007: if (pro.fTrack[IT_LINKS]) ! 1008: cbf |= MF_LINKS; ! 1009: if (pro.fTrack[IT_CONVS]) ! 1010: cbf |= MF_CONV; ! 1011: if (pro.fFilter[IF_SEND]) ! 1012: cbf |= MF_SENDMSGS; ! 1013: if (pro.fFilter[IF_POST]) ! 1014: cbf |= MF_POSTMSGS; ! 1015: if (pro.fFilter[IF_CB]) ! 1016: cbf |= MF_CALLBACKS; ! 1017: if (pro.fFilter[IF_ERR]) ! 1018: cbf |= MF_ERRORS; ! 1019: return((BOOL)DdeInitialize(&idInst, pfnDdeCallback, APPCLASS_MONITOR | cbf, 0)); ! 1020: } ! 1021: ! 1022: ! 1023: ! 1024: ! 1025: ! 1026: /* ! 1027: * This dialog returns a file handle to the opened file name given or NULL ! 1028: * if cancel. ! 1029: */ ! 1030: ! 1031: BOOL CALLBACK OpenDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) ! 1032: { ! 1033: HFILE fh; ! 1034: lParam; ! 1035: ! 1036: switch (message) { ! 1037: case WM_INITDIALOG: ! 1038: SetDlgItemText(hDlg, IDC_EDIT, (LPSTR)OpenName); ! 1039: SendDlgItemMessage(hDlg, IDC_EDIT, EM_SETSEL, ! 1040: GET_EM_SETSEL_MPS(0, 0x7fff)); ! 1041: SetFocus(GetDlgItem(hDlg, IDC_EDIT)); ! 1042: return (FALSE); /* Indicates the focus is set to a control */ ! 1043: break; ! 1044: ! 1045: case WM_COMMAND: ! 1046: switch (GET_WM_COMMAND_ID(wParam, lParam)) { ! 1047: case IDOK: ! 1048: GetDlgItemText(hDlg, IDC_EDIT, TBuf, MAX_FNAME); ! 1049: GetFullPathName(TBuf, sizeof(OpenName), OpenName, (LPTSTR *)TBuf2); ! 1050: fh = _lcreat(OpenName, 0); ! 1051: if (fh == -1) { ! 1052: MessageBox(hDlg, RefString(IDS_INVALID_FNAME), ! 1053: NULL, MB_OK | MB_ICONHAND); ! 1054: return (TRUE); ! 1055: } ! 1056: ! 1057: EndDialog(hDlg, (INT)fh); ! 1058: return (TRUE); ! 1059: ! 1060: case IDCANCEL: ! 1061: EndDialog(hDlg, 0); ! 1062: return (FALSE); ! 1063: } ! 1064: break; ! 1065: } ! 1066: return FALSE; ! 1067: } ! 1068: ! 1069: BOOL CALLBACK FilterDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) ! 1070: { ! 1071: int i; ! 1072: lParam; ! 1073: ! 1074: switch (message) { ! 1075: case WM_INITDIALOG: ! 1076: for (i = IDRB_WM_DDE_INITIATE; i <= IDRB_WM_DDE_EXECUTE; i++) { ! 1077: CheckDlgButton(hDlg, i, !fBlockMsg[i - IDRB_WM_DDE_INITIATE]); ! 1078: } ! 1079: for (i = IDRB_XTYP_ERROR; i <= IDRB_XTYP_WILDCONNECT; i++) { ! 1080: CheckDlgButton(hDlg, i, !fBlockCb[i - IDRB_XTYP_ERROR]); ! 1081: } ! 1082: CheckDlgButton(hDlg, IDRB_TERSE, pro.fTerse); ! 1083: break; ! 1084: ! 1085: case WM_COMMAND: ! 1086: switch (GET_WM_COMMAND_ID(wParam, lParam)) { ! 1087: case IDOK: ! 1088: for (i = IDRB_WM_DDE_INITIATE; i <= IDRB_WM_DDE_EXECUTE; i++) { ! 1089: fBlockMsg[i - IDRB_WM_DDE_INITIATE] = !IsDlgButtonChecked(hDlg, i); ! 1090: } ! 1091: for (i = IDRB_XTYP_ERROR; i <= IDRB_XTYP_WILDCONNECT; i++) { ! 1092: fBlockCb[i - IDRB_XTYP_ERROR] = !IsDlgButtonChecked(hDlg, i); ! 1093: } ! 1094: pro.fTerse = IsDlgButtonChecked(hDlg, IDRB_TERSE); ! 1095: EndDialog(hDlg, TRUE); ! 1096: break; ! 1097: ! 1098: case IDCANCEL: ! 1099: EndDialog(hDlg, 0); ! 1100: break; ! 1101: } ! 1102: break; ! 1103: } ! 1104: return FALSE; ! 1105: } ! 1106: ! 1107: ! 1108: ! 1109: ! 1110: VOID GetProfile() ! 1111: { ! 1112: pro.fOutput[IO_FILE] = GetProfileBoolean(RefString(IDS_PROF_OUT_FILE),FALSE); ! 1113: pro.fOutput[IO_DEBUG] = GetProfileBoolean(RefString(IDS_PROF_OUT_DEBUG),FALSE); ! 1114: pro.fOutput[IO_SCREEN] = GetProfileBoolean(RefString(IDS_PROF_OUT_SCREEN),FALSE); ! 1115: ! 1116: pro.fFilter[IF_HSZ] = GetProfileBoolean(RefString(IDS_PROF_MONITOR_STRINGHANDLES),FALSE); ! 1117: pro.fFilter[IF_SEND] = GetProfileBoolean(RefString(IDS_PROF_MONITOR_INITIATES), FALSE); ! 1118: pro.fFilter[IF_POST] = GetProfileBoolean(RefString(IDS_PROF_MONITOR_DDE_MESSAGES), FALSE); ! 1119: pro.fFilter[IF_CB] = GetProfileBoolean(RefString(IDS_PROF_MONITOR_CALLBACKS), FALSE); ! 1120: pro.fFilter[IF_ERR] = GetProfileBoolean(RefString(IDS_PROF_MONITOR_ERRORS),FALSE); ! 1121: ! 1122: pro.fTrack[IT_HSZS] = GetProfileBoolean(RefString(IDS_PROF_TRACK_STRINGHANDLES), FALSE); ! 1123: pro.fTrack[IT_LINKS] = GetProfileBoolean(RefString(IDS_PROF_TRACK_LINKS), FALSE); ! 1124: pro.fTrack[IT_CONVS] = GetProfileBoolean(RefString(IDS_PROF_TRACK_CONVERSATIONS), FALSE); ! 1125: pro.fTrack[IT_SVRS] = GetProfileBoolean(RefString(IDS_PROF_TRACK_SERVICES), FALSE); ! 1126: ! 1127: pro.fTerse = GetProfileBoolean(RefString(IDS_PROF_TERSE), FALSE); ! 1128: } ! 1129: ! 1130: ! 1131: ! 1132: VOID SaveProfile() ! 1133: { ! 1134: SetProfileBoolean(RefString(IDS_PROF_OUT_FILE), pro.fOutput[IO_FILE] ); ! 1135: SetProfileBoolean(RefString(IDS_PROF_OUT_DEBUG), pro.fOutput[IO_DEBUG] ); ! 1136: SetProfileBoolean(RefString(IDS_PROF_OUT_SCREEN), pro.fOutput[IO_SCREEN]); ! 1137: ! 1138: SetProfileBoolean(RefString(IDS_PROF_MONITOR_STRINGHANDLES), pro.fFilter[IF_HSZ] ); ! 1139: SetProfileBoolean(RefString(IDS_PROF_MONITOR_INITIATES), pro.fFilter[IF_SEND] ); ! 1140: SetProfileBoolean(RefString(IDS_PROF_MONITOR_DDE_MESSAGES), pro.fFilter[IF_POST] ); ! 1141: SetProfileBoolean(RefString(IDS_PROF_MONITOR_CALLBACKS), pro.fFilter[IF_CB] ); ! 1142: SetProfileBoolean(RefString(IDS_PROF_MONITOR_ERRORS), pro.fFilter[IF_ERR] ); ! 1143: ! 1144: SetProfileBoolean(RefString(IDS_PROF_TRACK_STRINGHANDLES), pro.fTrack[IT_HSZS] ); ! 1145: SetProfileBoolean(RefString(IDS_PROF_TRACK_LINKS), pro.fTrack[IT_LINKS] ); ! 1146: SetProfileBoolean(RefString(IDS_PROF_TRACK_CONVERSATIONS), pro.fTrack[IT_CONVS] ); ! 1147: SetProfileBoolean(RefString(IDS_PROF_TRACK_SERVICES), pro.fTrack[IT_SVRS] ); ! 1148: ! 1149: SetProfileBoolean(RefString(IDS_PROF_TERSE), pro.fTerse ); ! 1150: } ! 1151: ! 1152: ! 1153: ! 1154: ! 1155: BOOL GetProfileBoolean(LPSTR pszKey, BOOL fDefault) ! 1156: { ! 1157: GetPrivateProfileString(RefString(IDS_TITLE), pszKey, ! 1158: fDefault ? RefString(IDS_YES) : RefString(IDS_NO), TBuf, ! 1159: sizeof(TBuf), RefString(IDS_INIFNAME)); ! 1160: return(stricmp(RefString(IDS_NO), TBuf)); ! 1161: } ! 1162: ! 1163: ! 1164: ! 1165: VOID SetProfileBoolean(LPSTR pszKey, BOOL fSet) ! 1166: { ! 1167: WritePrivateProfileString(RefString(IDS_TITLE), pszKey, ! 1168: fSet ? RefString(IDS_YES) : RefString(IDS_NO), ! 1169: RefString(IDS_INIFNAME)); ! 1170: } ! 1171: ! 1172: /* ! 1173: * Generic dialog invocation routine. Handles procInstance stuff and param ! 1174: * passing. ! 1175: */ ! 1176: INT FAR DoDialog( ! 1177: LPSTR lpTemplateName, ! 1178: DLGPROC lpDlgProc, ! 1179: UINT param, ! 1180: BOOL fRememberFocus, ! 1181: HWND hwndParent, ! 1182: HANDLE hInst) ! 1183: { ! 1184: UINT wRet; ! 1185: HWND hwndFocus; ! 1186: ! 1187: if (fRememberFocus) ! 1188: hwndFocus = GetFocus(); ! 1189: lpDlgProc = (DLGPROC)MakeProcInstance(lpDlgProc, hInst); ! 1190: wRet = DialogBoxParam(hInst, (LPCSTR)lpTemplateName, hwndParent, ! 1191: lpDlgProc, param); ! 1192: FreeProcInstance((FARPROC)lpDlgProc); ! 1193: if (fRememberFocus) ! 1194: SetFocus(hwndFocus); ! 1195: return wRet; ! 1196: } ! 1197: ! 1198: ! 1199: BOOL CALLBACK MarkDlgProc( ! 1200: HWND hwnd, ! 1201: UINT msg, ! 1202: WPARAM wParam, ! 1203: LPARAM lParam) ! 1204: { ! 1205: CHAR szT[MAX_MARK + 1]; ! 1206: lParam; ! 1207: ! 1208: switch (msg){ ! 1209: case WM_INITDIALOG: ! 1210: SetWindowText(hwnd, RefString(IDS_MARKDLGTITLE)); ! 1211: SendDlgItemMessage(hwnd, IDEF_VALUE, EM_LIMITTEXT, MAX_MARK, 0); ! 1212: SetDlgItemText(hwnd, IDEF_VALUE, RefString(IDS_SEPERATOR)); ! 1213: SetDlgItemText(hwnd, IDTX_VALUE, RefString(IDS_MARKTEXT)); ! 1214: return(1); ! 1215: break; ! 1216: ! 1217: case WM_COMMAND: ! 1218: switch (GET_WM_COMMAND_ID(wParam, lParam)) { ! 1219: case IDOK: ! 1220: GetDlgItemText(hwnd, IDEF_VALUE, szT, MAX_MARK); ! 1221: OutputString(szT); ! 1222: // fall through ! 1223: case IDCANCEL: ! 1224: EndDialog(hwnd, 0); ! 1225: break; ! 1226: ! 1227: default: ! 1228: return(FALSE); ! 1229: } ! 1230: break; ! 1231: } ! 1232: return(FALSE); ! 1233: } ! 1234: ! 1235:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.