home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / warptlk3.zip / TOOLKIT / SAMPLES / MM / FSSHT / SHIPROT.C < prev    next >
C/C++ Source or Header  |  1995-08-24  |  7KB  |  157 lines

  1. /****************************************************************************/
  2. /*                                                                          */
  3. /*                    Copyright (c) IBM Corporation 1992, 1993              */
  4. /*                           All Rights Reserved                            */
  5. /*                                                                          */
  6. /* SOURCE FILE NAME: SHIPROT.C                                              */
  7. /*                                                                          */
  8. /* DESCRIPTIVE NAME:  Stream Handler Install Protocol Routine               */
  9. /*                                                                          */
  10. /* NOTES: This is a DLL file. This function is mainly for tuning streams    */
  11. /*        performance by changing the buffer attributes.                    */
  12. /*                                                                          */
  13. /* ENTRY POINTS: ShcInstallProtocol                                         */
  14. /*                                                                          */
  15. /*************************** END OF SPECIFICATIONS **************************/
  16. #define  INCL_NOPMAPI                  /* no PM include files required */
  17. #define  INCL_DOSSEMAPHORES
  18. #define  INCL_DOSPROCESS
  19. #define  INCL_OS2MM
  20. #include <os2.h>
  21. #include <os2me.h>
  22. #include <hhpheap.h>
  23. #include <shi.h>
  24.  
  25. /************************** START OF SPECIFICATIONS *************************/
  26. /*                                                                          */
  27. /* SUBROUTINE NAME: ShcInstallProtocol                                      */
  28. /*                                                                          */
  29. /* DESCRIPTIVE NAME: Stream Handler Command Install Protocol                */
  30. /*                                                                          */
  31. /* FUNCTION: This updates the specified spcb with new values                */
  32. /*                                                                          */
  33. /* NOTES:                                                                   */
  34. /*                                                                          */
  35. /* ENTRY POINT: ShcInstallProtocol                                          */
  36. /*   LINKAGE:   CALL NEAR (0:32)                                            */
  37. /*                                                                          */
  38. /* INPUT: Pointer to shc install protocol parameter block (PARM_INSTPROT)   */
  39. /*        containing:                                                       */
  40. /*   ULONG   ulFunction  Handler command function SHC_ENUMERATE_PROTOCOLS   */
  41. /*   HID     hid         handler ID                                         */
  42. /*   SPCBKEY spcbkey     key of SPCB                                        */
  43. /*   PSBCB   pspcb       pointer to SPCB to install                         */
  44. /*   ULONG   ulFlags     Install / Deinstall flags                          */
  45. /*                                                                          */
  46. /* EXIT-NORMAL: NO_ERROR (0)                                                */
  47. /*                                                                          */
  48. /* EXIT-ERROR:                                                              */
  49. /*   ERROR_INVALID_SPCBKEY                                                  */
  50. /*   ERROR_ALLOC_RESOURCES                                                  */
  51. /*                                                                          */
  52. /* SIDE EFFECTS:                                                            */
  53. /*                                                                          */
  54. /* INTERNAL REFERENCES:                                                     */
  55. /*        ROUTINES: None                                                    */
  56. /*                                                                          */
  57. /* EXTERNAL REFERENCES:                                                     */
  58. /*   ROUTINES:                                                              */
  59. /*     ShSearchESPCBList                                                    */
  60. /*     ShFindESPCB                                                          */
  61. /*     pfnShInstallCheck                                                    */
  62. /*     HhpAllocMem                                                          */
  63. /*                                                                          */
  64. /*   DATA STRUCTURES:                                                       */
  65. /*     ESPCB                                                                */
  66. /*                                                                          */
  67. /*************************** END OF SPECIFICATIONS **************************/
  68.  
  69. RC ShcInstallProtocol(pipparm)
  70. PPARM_INSTPROT pipparm;
  71.  
  72. { /* Start of ShcInstallProtocol */
  73.  
  74. RC rc = NO_ERROR;                       /* local return code */
  75. PESPCB pTempEspcb;
  76. PESPCB pPrevEspcb;
  77.  
  78.   /* the ESPCB list is under semphore control */
  79.  
  80.   ENTERCRITX(rc);
  81.  
  82.   if (pipparm->ulFlags & SPI_DEINSTALL_PROTOCOL)
  83.     { /* DeInstall */
  84.  
  85.       /* To Deinstall, Find the spcb, */
  86.       /*               Take it off the espcb chain, */
  87.       /*               Free the espcb memory allocated */
  88.  
  89. #ifdef FIXSH
  90.       pTempEspcb = ShSearchESPCBList(&pipparm->spcbkey,0L,&pPrevEspcb);
  91. #else
  92.       pTempEspcb = ShSearchESPCBList(&pipparm->spcbkey,0L,pPrevEspcb);
  93. #endif
  94.       if (pTempEspcb)
  95.         {
  96.           /* Take the espcb off the chain */
  97.  
  98.           if (pPrevEspcb)
  99.             {
  100.               pPrevEspcb->pnxtESPCB = pTempEspcb->pnxtESPCB;
  101.             }
  102.           else
  103.             {
  104.               pESPCB_ListHead = pTempEspcb->pnxtESPCB;
  105.             }
  106.           HhpFreeMem(hHeap, pTempEspcb);
  107.         }
  108.       else
  109.         {
  110.           rc = ERROR_INVALID_SPCBKEY;
  111.         }
  112.     } /* DeInstall */
  113.  
  114.   else
  115.     { /* Install */
  116.  
  117.       /* If the spcb already exists then error */
  118.  
  119.       if (ShFindESPCB(pipparm->spcbkey,0L))
  120.         {
  121.           rc = ERROR_INVALID_SPCBKEY;
  122.         }
  123.       else
  124.         { /* Ok to add spcb */
  125.  
  126.           /* Do any special stream handler specific checks before installing */
  127.  
  128.           if (ulHandlerFlags & HANDLER_INSTALL_CHECKS)
  129.             {
  130.               rc = pfnShInstallCheck(pipparm);
  131.             }
  132.  
  133.           if (!rc)
  134.             {
  135.               /* Allocate the espcb and put it on the front of the chain */
  136.  
  137.               pTempEspcb = (PESPCB)HhpAllocMem(hHeap, sizeof(ESPCB));
  138.  
  139.               if (pTempEspcb)
  140.                 {
  141.                   pTempEspcb->spcb = *(pipparm->pspcb);
  142.                   pTempEspcb->pnxtESPCB = pESPCB_ListHead;
  143.                   pESPCB_ListHead = pTempEspcb;
  144.                 }
  145.               else
  146.                 {
  147.                   rc = ERROR_ALLOC_RESOURCES;
  148.                 }
  149.             }
  150.         } /* Ok to add spcb */
  151.     } /* Install */
  152.  
  153.   EXITCRIT;
  154.   return(rc);
  155.  
  156. } /* End of ShcInstallProtocol */
  157.