home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_03_05 / 3n05032a < prev    next >
Text File  |  1992-01-31  |  4KB  |  115 lines

  1. #include <dos.h>
  2. #include "windows.h"
  3. /*
  4. ******************************************************************
  5. Title:      PIPEWIN.C - Windows Component of Pipe Interface
  6. Author:     Thomas W. Olsen
  7. Version:    3.0
  8. Compiler:   Microsoft C 6.0
  9.             cl /AL /Gsw /W3 /Oas /Zpe /Zi /c pipewin.c
  10.             cl /AL /Gsw /W3 /Oas /Zpe /Zi /c pipefunc.c
  11.             link /CO /NOD pipewin pipefunc ,,, libw llibcew kernel, pipewin.def
  12.             rc pipewin.exe
  13. ******************************************************************
  14. */
  15. void FAR    PASCAL CallbackProc(HWND hWnd, unsigned message, WORD wParam, LONG lParam);
  16. long FAR    PASCAL WindowProc(HWND hWnd, unsigned message, WORD wParam, LONG lParam);
  17. BOOL        PASCAL PipeSetup(void);
  18. BOOL        PASCAL PipeRegisterCallback(HWND hWnd, FARPROC lpProcPtr);
  19. BOOL        PASCAL PipeUnregisterCallback(void);
  20.  
  21.  
  22. int PASCAL WinMain(HANDLE hInst, HANDLE hPrevInst, LPSTR lpCmdLine, int numCmdShow )
  23. {
  24.     MSG       msg;
  25.     HWND      hWnd;
  26.     HDC       hContext;
  27.     HANDLE    selector = 0;
  28.     LPSTR     lpBuffer = NULL;
  29.     WNDCLASS  wc;
  30.  
  31.     /************************* Setup Window ************************/
  32.  
  33.     wc.style         = NULL;
  34.     wc.lpfnWndProc   = WindowProc;
  35.     wc.cbClsExtra    = 0;
  36.     wc.cbWndExtra    = 0;
  37.     wc.hInstance     = hInst;
  38.     wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
  39.     wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
  40.     wc.hbrBackground = GetStockObject(WHITE_BRUSH); 
  41.     wc.lpszMenuName  = NULL;
  42.     wc.lpszClassName = "PipeClass";
  43.  
  44.     if (!RegisterClass(&wc))
  45.         return(FALSE);
  46.  
  47.     hWnd = CreateWindow( "PipeClass", "Windows / DOS Pipe Example",
  48.                           WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
  49.                           CW_USEDEFAULT, CW_USEDEFAULT,
  50.                           CW_USEDEFAULT, NULL, NULL, hInst, NULL );
  51.     if (!hWnd)
  52.         return (FALSE);
  53.  
  54.     ShowWindow( hWnd, numCmdShow );
  55.     hContext = GetDC( hWnd );                   /* Need Display Context */
  56.  
  57.     /****************** Call Device & Wait for Messages ***************/
  58.  
  59.     if (PipeSetup() == FALSE)
  60.     {
  61.         lpBuffer = "Cannot Find Pipe.";
  62.         TextOut( hContext, 0, 0, lpBuffer, lstrlen(lpBuffer) );
  63.     }
  64.     else
  65.         PipeRegisterCallback(hWnd, CallbackProc);   /* Tell Pipe Who to Call */
  66.  
  67.     ReleaseDC( hWnd, hContext );                /* Free Display Context */
  68.     UpdateWindow( hWnd );
  69.  
  70.     while (GetMessage(&msg, NULL, NULL, NULL))  /* Typical Message Loop */
  71.     {
  72.         TranslateMessage(&msg);
  73.         DispatchMessage(&msg);
  74.     }
  75.     return (msg.wParam);
  76. }
  77.  
  78. /***************** Receives Call From Virtual Device Pipe *************/
  79.  
  80. void FAR PASCAL CallbackProc(HWND hWnd, unsigned message, WORD wParam, LONG lParam)
  81. {
  82.     PostMessage(hWnd, message, wParam, lParam); /* Can Only PostMessage() */
  83.     return;                                     /* System State Is Unknown */
  84. }
  85.  
  86. /**************** Receives Posted Message From CallbackProc() *********/
  87.  
  88. long FAR PASCAL WindowProc(HWND hWnd, unsigned message, WORD wParam, LONG lParam)
  89. {
  90.     struct rmp
  91.     {
  92.         int  BusyBit;
  93.         char Buffer[128];
  94.     } far *realModePtr = (struct rmp far *) lParam;  /* PMode ptr to RMode String */
  95.     HDC       hContext;
  96.  
  97.     switch (message)
  98.     {
  99.         case WM_DESTROY:
  100.             PostQuitMessage( NULL );
  101.             PipeUnregisterCallback();
  102.             break;
  103.         case WM_USER:
  104.             hContext = GetDC( hWnd );           /* Need Display Context */
  105.             TextOut( hContext, 0, 0, realModePtr->Buffer, lstrlen(realModePtr->Buffer) );
  106.             realModePtr->BusyBit = FALSE;
  107.             ReleaseDC( hWnd, hContext );        /* Free Display Context */
  108.             UpdateWindow( hWnd );
  109.             break;
  110.         default:
  111.             return (DefWindowProc(hWnd, message, wParam, lParam));
  112.     }
  113. }
  114.  
  115.