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

  1. #include <dos.h>
  2. #include "windows.h"
  3. /*
  4. ******************************************************************
  5. Title:      PIPEFUNC.C - General Purpose Pipe Functions
  6. Author:     Thomas W. Olsen
  7. Version:    3.0
  8. Compiler:   Microsoft C 6.0
  9.             cl /AL /Gs /Zi /c PIPEFUNC.C                    for DOS
  10.             cl /AL /Gsw /W3 /Oas /Zpe /Zi /c PIPEFUNC.C     for WINDOWS
  11. ******************************************************************
  12. */
  13. #define GET_API_ENTRY_POINT             0x1684
  14. #define DEVICE_ID                       0x2020
  15. #define DEVICE_VERSION                  0x0300
  16. #define GET_VERSION                     0
  17. #define REGISTER_CALLBACK               1
  18. #define UNREGISTER_CALLBACK             2
  19. #define ALLOCATE_GDT_SELECTOR           3
  20. #define FREE_GDT_SELECTOR               4
  21. #define CALL_WINDOWS_PROCEDURE          5
  22.  
  23. FARPROC lpPipeProc = NULL;
  24.  
  25. BOOL PASCAL PipeSetup(void)
  26. {
  27.     BOOL retVal = FALSE;
  28.     union REGS regs;
  29.     struct SREGS sregs;
  30.  
  31.     segread(&sregs);                        /* Is The Device Loaded? */
  32.     regs.x.ax = GET_API_ENTRY_POINT;
  33.     regs.x.bx = DEVICE_ID;
  34.     sregs.es  = regs.x.di = 0;
  35.     int86x( 0x2F, ®s, ®s, &sregs);
  36.  
  37.     FP_SEG(lpPipeProc) = sregs.es;
  38.     FP_OFF(lpPipeProc) = regs.x.di;
  39.  
  40.     if (lpPipeProc)                         /* Device Is Loaded */
  41.     {
  42.         _asm mov ax, GET_VERSION;           /* Get Version */
  43.         retVal = (*lpPipeProc)() < DEVICE_VERSION ? FALSE:TRUE;
  44.     }
  45.     return(retVal);
  46. }
  47.  
  48. BOOL PASCAL PipeRegisterCallback(HWND hWnd, FARPROC lpFuncPtr)
  49. {
  50.     BOOL retVal = FALSE;
  51.  
  52.     if (lpPipeProc)
  53.     {
  54.         _asm mov ax, REGISTER_CALLBACK;
  55.         _asm mov bx, hWnd;
  56.         _asm mov cx, word ptr lpFuncPtr+2;
  57.         _asm mov dx, word ptr lpFuncPtr;
  58.         (*lpPipeProc)();
  59.         retVal = TRUE;
  60.     }
  61.     return(retVal);
  62. }
  63.  
  64. BOOL PASCAL PipeUnregisterCallback(void)
  65. {
  66.     BOOL retVal = FALSE;
  67.  
  68.     if (lpPipeProc)
  69.     {
  70.         _asm mov ax, UNREGISTER_CALLBACK;
  71.         (*lpPipeProc)();
  72.         retVal = TRUE;
  73.     }
  74.     return(retVal);
  75. }
  76.  
  77. WORD PASCAL PipeAllocateSelector(WORD segment)
  78. {
  79.     _asm mov ax, ALLOCATE_GDT_SELECTOR
  80.     _asm mov bx, segment
  81.     return((*lpPipeProc)());
  82. }
  83.  
  84. void PASCAL PipeFreeSelector(WORD selector)
  85. {
  86.     _asm mov ax, FREE_GDT_SELECTOR
  87.     _asm mov bx, selector
  88.     (*lpPipeProc)();
  89. }
  90.  
  91. BOOL PASCAL PipeCallWindowsProc(WORD message, WORD wParam, LONG lParam)
  92. {
  93.     BOOL retVal = FALSE;
  94.  
  95.     if (lpPipeProc)
  96.     {
  97.         _asm mov ax, CALL_WINDOWS_PROCEDURE
  98.         _asm mov bx, message
  99.         _asm mov si, wParam
  100.         _asm mov cx, word ptr lParam+2
  101.         _asm mov dx, word ptr lParam
  102.         (*lpPipeProc)();
  103.         retVal = TRUE;
  104.     }
  105.     return(retVal);
  106. }
  107.  
  108.