The following code illustrates how to notify the Sync/Stream Manager of a stream buffer request.
/*----------------------------------------------------------------
* Source Stream Handler Example
*---------------------------------------------------------------*/
#include "os2.h"
#include "os2me.h"
ULONG ulRC; /* Error return code */
HID hidSource; /* Source handler ID */
HSTREAM hstream; /* Stream handle */
PARM_NOTIFY parm_notify; /* Notify parameter block */
SRCBUFTAB srcbuftab; /* Source buffer table */
PSMHFN SMHEntryPoint; /* Pointer to SMH entry point */
/*-----------------------------------------------------------------
* Request an empty stream buffer from the Sync/Stream Manager.
*----------------------------------------------------------------*/
parm_notify.ulFunction = SMH_NOTIFY; /* Set function */
parm_notify.hid = hidSource; /* Source handler ID */
parm_notify.hstream = hstream; /* Stream handle */
parm_notify.ulFlags = BUF_GETEMPTY; /* Get an empty buffer */
parm_notify.ulGetNumEntries = 1; /* Number of buffers to get */
parm_notify.ulRetNumEntries = 0; /* Not returning any buffers */
parm_notify.pGetBufTab = &srcbuftab; /* Pointer to buffer table */
parm_notify.pRetBufTab = NULL; /* Not returning any buffers */
if (ulRC = SMHEntryPoint (&parm_notify))
return(ulRC); /* Error! */
.
.
.
/*--------------------------------------------------------*/
* Fill the buffer with data.
*
* srcbuftab.pBuffer = Pointer to buffer
* srcbuftab.ulLength = Length of buffer
*--------------------------------------------------------*/
.
.
.
/*---------------------------------------------------------*/
* Return a full buffer to the Sync/Stream Manager.
*---------------------------------------------------------*/
parm_notify.ulFlags = BUF_RETURNFULL; /* Return a full buffer */
parm_notify.ulGetNumEntries = 0; /* Not getting any buffers */
parm_notify.ulRetNumEntries = 1; /* Number of buffers
to return */
parm_notify.pGetBufTab = NULL; /* Not getting any buffers */
parm_notify.pRetBufTab = &srcbuftab; /* Pointer to buffer table */
if (ulRC = SMHEntryPoint (&parm_notify))
return(ulRC); /* Error! */
/*-----------------------------------------------------------------------*/
* Target Stream Handler Example
*----------------------------------------------------------------------*/
#include "os2.h"
#include "os2me.h"
ULONG ulRC; /* Error return code */
HID hidTarget; /* Target handler ID */
HSTREAM hstream; /* Stream handle */
PARM_NOTIFY parm_notify; /* Notify parameter block */
TGTBUFTAB tgtbuftab; /* Target buffer table */
PSMHFN SMHEntryPoint; /* Pointer to SMH entry point */
/*---------------------------------------------------------------------
* Request a full buffer from the Sync/Stream Manager.
*---------------------------------------------------------------------*/
parm_notify.ulFunction = SMH_NOTIFY; /* Set function */
parm_notify.hid = hidTarget; /* Target handler ID */
parm_notify.hstream = hstream; /* Stream handle */
parm_notify.ulFlags = BUF_GETFULL; /* Get a full buffer */
parm_notify.ulGetNumEntries = 1; /* Number of buffers to get */
parm_notify.ulRetNumEntries = 0; /* Not returning any buffers */
parm_notify.pGetBufTab = &tgtbuftab; /* Pointer to buffer table */
parmnotify.pRetBufTab = NULL; /* Not returning any buffers */
if (ulRC = SMHEntryPoint (&parm_notify))
return(ulRC); /* Error! */
.
.
.
/*----------------------------------------------------------------------
* Drain the buffer of data.
*
* tgtbuftab.pBuffer = Pointer to buffer
* tgtbuftab.ulLength = Length of buffer
*----------------------------------------------------------------------*/
.
.
.
*-----------------------------------------------------------------------
* Return an empty buffer to the Sync/Stream Manager.
*----------------------------------------------------------------------*/
parm_notify.ulFlags = BUF_RETURNEMPTY; /* Return an empty buffer */
parm_notify.ulGetNumEntries = 0; /* Not getting any buffers */
parm_notify.ulRetNumEntries = 1; /* Number of buffers to return*/
parm_notify.pGetBufTab = NULL; /* Not getting any buffers */
parm_notify.pRetBufTab = &tgtbuftab; /* Pointer to buffer table */
if (ulRC = SMHEntryPoint (&parm_notify))
return(ulRC); /* Error! */