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); }