home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / os2sdk / os2sdk12 / ddeml / monitor / monitor.c next >
Encoding:
C/C++ Source or Header  |  1990-06-22  |  4.8 KB  |  191 lines

  1. /****************************** Module Header ******************************\
  2. * Module Name: monitor.c
  3. *
  4. * This is a small monitoring test program.  It dumps monitor characters to
  5. * a file called monitor.txt.
  6. *
  7. * Created:      sanfords
  8. *
  9. * Copyright (c) 1988, 1989  Microsoft Corporation
  10. \***************************************************************************/
  11.  
  12. #define INCL_WIN
  13. #define INCL_DOSFILEMGR
  14. #define INCL_DOSNLS
  15. #include <os2.h>
  16. #include "ddeml.h"
  17. #include "monitor.h"
  18. #include "res.h"
  19.  
  20.  
  21. /*********** declares *********/
  22.  
  23.  
  24. int    APIENTRY DebugOutput( PCH );        /* private import */
  25.  
  26. int lstrlen(PSZ psz);
  27. HDMGDATA EXPENTRY dataxfer(HCONV hConv, HSZ hszTopic, HSZ hszItem,
  28.         USHORT usFmt, USHORT usType, HDMGDATA hDmgData);
  29.  
  30.  
  31. /************* GLOBAL VARIABLES  ************/
  32.  
  33. HAB hab;
  34. HMQ hmq;
  35. HFILE hfile;
  36. HWND hwndFrame;
  37. HWND hwndClient;
  38. USHORT fsOutput = 0;
  39.  
  40. void cdecl main(argc, argv)
  41. int argc;
  42. char **argv;
  43. {
  44.     USHORT err;
  45.     QMSG qmsg;
  46.     ULONG ctlData;
  47.     argc; argv;
  48.  
  49.     if (argc > 1) {
  50.         DdeDebugBreak();
  51.     }
  52.     
  53.     hab = WinInitialize(0);
  54.  
  55.     hmq = WinCreateMsgQueue(hab, 0);
  56.  
  57.     if (!InitTestSubs())
  58.         DosExit(1, 0);
  59.         
  60.     if (!WinRegisterClass(hab, "Monitor Class", MonWndProc, 0L, 4L))
  61.         DosExit(1, 0);
  62.     
  63.     ctlData = FCF_STANDARD;
  64.     hwndFrame = WinCreateStdWindow(HWND_DESKTOP, 0L, &ctlData, "Monitor Class",
  65.             (PSZ)"DDE Monitoring window", (ULONG)WS_VISIBLE, (HMODULE)NULL, IDR_MAIN, 0L);
  66.     WinSetWindowPos(hwndFrame, HWND_TOP, 0, 0, 0, 0, SWP_MINIMIZE | SWP_SHOW);
  67.  
  68.     if (err = DdeInitialize((PFNCALLBACK)dataxfer, DMGCMD_MONITOR, 0L)) {
  69.         DdePostError(err);
  70.         goto abort;
  71.     }
  72.     
  73.     while (WinGetMsg(hab, &qmsg, 0, 0, 0)) {
  74.         WinDispatchMsg(hab, &qmsg);
  75.     }
  76.  
  77.     DdeUninitialize();
  78.  
  79. abort:
  80.     DosClose(hfile);
  81.     WinDestroyWindow(hwndFrame);
  82.     WinTerminate(hab);
  83.     DosExit(TRUE, 0);
  84. }
  85.  
  86.  
  87.  
  88. MRESULT EXPENTRY MonWndProc(
  89. HWND hwnd,
  90. USHORT msg,
  91. MPARAM mp1,
  92. MPARAM mp2)
  93. {
  94.     USHORT usAction;
  95.     
  96.     switch (msg) {
  97.     case WM_INITMENU:
  98.         switch (SHORT1FROMMP(mp1)) {
  99.         case IDSM_OUTPUT:
  100.             WinSendMsg((HWND)mp2, MM_SETITEMATTR, MPFROM2SHORT(IDM_OUTPUT_FILE, FALSE),
  101.                     MPFROM2SHORT(MIA_CHECKED,
  102.                     fsOutput & (IDM_OUTPUT_FILE - IDSM_OUTPUT) ?
  103.                     MIA_CHECKED : NULL));
  104.             WinSendMsg((HWND)mp2, MM_SETITEMATTR, MPFROM2SHORT(IDM_OUTPUT_DEBUG, FALSE),
  105.                     MPFROM2SHORT(MIA_CHECKED,
  106.                     fsOutput & (IDM_OUTPUT_DEBUG - IDSM_OUTPUT) ?
  107.                     MIA_CHECKED : NULL));
  108.             WinSendMsg((HWND)mp2, MM_SETITEMATTR, MPFROM2SHORT(IDM_OUTPUT_SCREEN, FALSE),
  109.                     MPFROM2SHORT(MIA_CHECKED,
  110.                     fsOutput & (IDM_OUTPUT_SCREEN - IDSM_OUTPUT) ?
  111.                     MIA_CHECKED : NULL));
  112.             break;
  113.         }
  114.         break;
  115.         
  116.     case WM_COMMAND:
  117.         switch (LOUSHORT(mp1)) {
  118.         case IDM_OUTPUT_FILE:
  119.             if (fsOutput & (IDM_OUTPUT_FILE - IDSM_OUTPUT)) {
  120.                 DosClose(hfile);
  121.             } else {
  122.                 if (DosOpen("monitor.txt", &hfile, &usAction, 0L, FILE_NORMAL, 
  123.                         FILE_TRUNCATE | FILE_CREATE,
  124.                         OPEN_ACCESS_WRITEONLY | OPEN_SHARE_DENYNONE |
  125.                         OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_SEQUENTIAL, 0L)) {
  126.                     WinAlarm(HWND_DESKTOP, WA_ERROR);
  127.                     return 0L;
  128.                 }
  129.             }
  130.         /* fall through */
  131.         case IDM_OUTPUT_DEBUG:
  132.         case IDM_OUTPUT_SCREEN:
  133.             fsOutput ^= LOUSHORT(mp1) - IDSM_OUTPUT;
  134.             break;
  135.         }
  136.         break;
  137.  
  138.     case WM_CREATE:
  139.         hwndClient = hwnd;
  140.         /* fall through */
  141.     default:
  142.         return(StrWndProc(hwnd, msg, mp1, mp2));
  143.         break;
  144.     }
  145.     
  146.     return 0L;
  147. }
  148.  
  149.  
  150.  
  151.  
  152. HDMGDATA EXPENTRY dataxfer(hConv, hszTopic, hszItem, usFmt, usType,
  153.         hDmgData)
  154. HCONV hConv;
  155. HSZ hszTopic;
  156. HSZ hszItem;
  157. USHORT usFmt;
  158. USHORT usType;
  159. HDMGDATA hDmgData;
  160. {
  161.     char sz[MAX_MONITORSTR + 1];
  162.     USHORT usWritten;
  163.  
  164.     hConv; hszTopic; hszItem; usFmt; usType;
  165.     
  166.     if (usType == XTYP_MONITOR) {
  167.         DdeGetData(hDmgData, (PBYTE)sz, (ULONG)(MAX_MONITORSTR + 1), 0L);
  168.         if (fsOutput & (IDM_OUTPUT_FILE - IDSM_OUTPUT))
  169.             DosWrite(hfile, sz, lstrlen(sz), &usWritten);
  170.         if (fsOutput & (IDM_OUTPUT_DEBUG - IDSM_OUTPUT))
  171.             DebugOutput(sz);
  172.         if (fsOutput & (IDM_OUTPUT_SCREEN - IDSM_OUTPUT))
  173.             DrawString(hwndClient, sz);
  174.         return(TRUE);
  175.     }
  176.     return(0);
  177. }
  178.  
  179.  
  180. int lstrlen(psz)
  181. PSZ psz;
  182. {
  183.     int c = 0;
  184.  
  185.     while (*psz != 0) {
  186.         psz++;
  187.         c++;
  188.     }
  189.     return(++c);
  190. }
  191.