home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cset21v6.zip / MMPM2TK / TK / FSSHT / SHIPROT.C < prev    next >
C/C++ Source or Header  |  1993-02-25  |  7KB  |  153 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. #include <os2.h>
  20. #include <os2me.h>
  21. #include <hhpheap.h>
  22. #include <shi.h>
  23.  
  24. /************************** START OF SPECIFICATIONS *************************/
  25. /*                                                                          */
  26. /* SUBROUTINE NAME: ShcInstallProtocol                                      */
  27. /*                                                                          */
  28. /* DESCRIPTIVE NAME: Stream Handler Command Install Protocol                */
  29. /*                                                                          */
  30. /* FUNCTION: This updates the specified spcb with new values                */
  31. /*                                                                          */
  32. /* NOTES:                                                                   */
  33. /*                                                                          */
  34. /* ENTRY POINT: ShcInstallProtocol                                          */
  35. /*   LINKAGE:   CALL NEAR (0:32)                                            */
  36. /*                                                                          */
  37. /* INPUT: Pointer to shc install protocol parameter block (PARM_INSTPROT)   */
  38. /*        containing:                                                       */
  39. /*   ULONG   ulFunction  Handler command function SHC_ENUMERATE_PROTOCOLS   */
  40. /*   HID     hid         handler ID                                         */
  41. /*   SPCBKEY spcbkey     key of SPCB                                        */
  42. /*   PSBCB   pspcb       pointer to SPCB to install                         */
  43. /*   ULONG   ulFlags     Install / Deinstall flags                          */
  44. /*                                                                          */
  45. /* EXIT-NORMAL: NO_ERROR (0)                                                */
  46. /*                                                                          */
  47. /* EXIT-ERROR:                                                              */
  48. /*   ERROR_INVALID_SPCBKEY                                                  */
  49. /*   ERROR_ALLOC_RESOURCES                                                  */
  50. /*                                                                          */
  51. /* SIDE EFFECTS:                                                            */
  52. /*                                                                          */
  53. /* INTERNAL REFERENCES:                                                     */
  54. /*        ROUTINES: None                                                    */
  55. /*                                                                          */
  56. /* EXTERNAL REFERENCES:                                                     */
  57. /*   ROUTINES:                                                              */
  58. /*     ShSearchESPCBList                                                    */
  59. /*     ShFindESPCB                                                          */
  60. /*     pfnShInstallCheck                                                    */
  61. /*     HhpAllocMem                                                          */
  62. /*                                                                          */
  63. /*   DATA STRUCTURES:                                                       */
  64. /*     ESPCB                                                                */
  65. /*                                                                          */
  66. /*************************** END OF SPECIFICATIONS **************************/
  67.  
  68. RC ShcInstallProtocol(pipparm)
  69. PPARM_INSTPROT pipparm;
  70.  
  71. { /* Start of ShcInstallProtocol */
  72.  
  73. RC rc = NO_ERROR;                       /* local return code */
  74. int notfound = TRUE;
  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.       pTempEspcb = ShSearchESPCBList(&pipparm->spcbkey,0L,pPrevEspcb);
  90.       if (pTempEspcb)
  91.         {
  92.           /* Take the espcb off the chain */
  93.  
  94.           if (pPrevEspcb)
  95.             {
  96.               pPrevEspcb->pnxtESPCB = pTempEspcb->pnxtESPCB;
  97.             }
  98.           else
  99.             {
  100.               pESPCB_ListHead = pTempEspcb->pnxtESPCB;
  101.             }
  102.           HhpFreeMem(hHeap, pTempEspcb);
  103.         }
  104.       else
  105.         {
  106.           rc = ERROR_INVALID_SPCBKEY;
  107.         }
  108.     } /* DeInstall */
  109.  
  110.   else
  111.     { /* Install */
  112.  
  113.       /* If the spcb already exists then error */
  114.  
  115.       if (ShFindESPCB(pipparm->spcbkey,0L))
  116.         {
  117.           rc = ERROR_INVALID_SPCBKEY;
  118.         }
  119.       else
  120.         { /* Ok to add spcb */
  121.  
  122.           /* Do any special stream handler specific checks before installing */
  123.  
  124.           if (ulHandlerFlags & HANDLER_INSTALL_CHECKS)
  125.             {
  126.               rc = pfnShInstallCheck(pipparm);
  127.             }
  128.  
  129.           if (!rc)
  130.             {
  131.               /* Allocate the espcb and put it on the front of the chain */
  132.  
  133.               pTempEspcb = (PESPCB)HhpAllocMem(hHeap, sizeof(ESPCB));
  134.  
  135.               if (pTempEspcb)
  136.                 {
  137.                   pTempEspcb->spcb = *(pipparm->pspcb);
  138.                   pTempEspcb->pnxtESPCB = pESPCB_ListHead;
  139.                   pESPCB_ListHead = pTempEspcb;
  140.                 }
  141.               else
  142.                 {
  143.                   rc = ERROR_ALLOC_RESOURCES;
  144.                 }
  145.             }
  146.         } /* Ok to add spcb */
  147.     } /* Install */
  148.  
  149.   EXITCRIT;
  150.   return(rc);
  151.  
  152. } /* End of ShcInstallProtocol */
  153.