The following code illustrates how to create a stream handler between a source and target stream handler.
#include "os2.h"
#include "os2me.h"
#include "string.h"
ULONG ulRC; /* Error return code */
HID hidSource, /* Source handler ID */
hidTarget, /* Target handler ID */
hidunused; /* Dummy handler ID */
SPCBKEY spcbkey; /* Data type to stream */
DCB_AUDIOSH dcb; /* Audio device driver information */
PDCB pdcbTgt; /* Pointer to DCB */
IMPL_EVCB evcb; /* Event control block for
/* implicit events */
HSTREAM hStream; /* Stream handle */
HEVENT hEvent; /* Event handle for implicit */
/* events */
.
.
.
/*--------------------------------------------------------*/
/* Initialize the audio card and get the */
/* dcb.hSysFileNum for "AUDIO01$". */
/*--------------------------------------------------------*/
.
.
.
/*--------------------------------------------------------*/
/* Get the stream handler ID for the file stream handler.*/
/*--------------------------------------------------------*/
if (ulRC = SpiGetHandler("FSSH",&hidSource, &hidunused))
return(ulRC); /* error! */
/*--------------------------------------------------*/
/* Get the stream handler ID for the digital audio */
/* stream handler. */
/*--------------------------------------------------*/
if (ulRC = SpiGetHandler("AUDIOSH$",&hidunused, &hidTarget))
return(ulRC); /* error! */
/*----------------------------------------------------*/
/* Create a data stream from the file system to */
/* the digital audio card connected to the speakers. */
/*----------------------------------------------------*/
spcbkey.ulDataType = DATATYPE_WAVEFORM;
spcbkey.ulDataSubType = WAVE_FORMAT_4S16;
spcbkey.ulIntKey = 0;
strcpy(dcb.szDevName,"AUDIO01$");
pdcbTgt = (PDCB)&dcb;
if (ulRC = SpiCreateStream (hidSource,
hidTarget,
&spcbkey,
NULL,
pdcbTgt,
&evcb,
(PEVFN) EventsRtn,
0,
&hStream,
&hEvent))
return(ulRC); /* error! */
/*-----------------------------------------------------*/
/* Event routine */
/*-----------------------------------------------------*/
ULONG APIENTRY EventsRtn(PEVCB pevcb)
{
.
.
Process events.
.
.
return(0);
}