home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / audiopdd.zip / ssm_idc.c < prev    next >
C/C++ Source or Header  |  1999-02-27  |  7KB  |  216 lines

  1. //
  2. // ssm_idc.c
  3. // 3-Feb-99
  4. //
  5. // ULONG __far __loadds __cdecl idcDDCMD(DDCMDCOMMON __far *commonPtr);
  6.  
  7. #include "cs40.h"
  8.  
  9. ULONG __far __loadds __cdecl idcDDCMD(DDCMDCOMMON __far *commonPtr) {
  10.  
  11.  ULONG rc = NO_ERROR;
  12.  USHORT function;
  13.  STREAM *streamPtr;
  14.  
  15. //static USHORT cnt=0;
  16.  
  17.  if (commonPtr == 0) {
  18. #ifdef TRACE_IDC_DDCMD
  19.     tracePerf(TRACE_IDC_DDCMD_IN, 0xA5A5); // can't get function since commonPtr = 0
  20. #endif
  21.     return(ERROR_INVALID_BLOCK);
  22.  }
  23.  
  24.  function = commonPtr->ulFunction;
  25.  streamPtr = streamFindStreamHandle(commonPtr->hStream);
  26.  
  27. //cnt++;
  28. //ddprintf("idcDDCMD, cnt=%u, func=%u, streamPtr=%x \n",cnt,function, streamPtr);
  29.  
  30.  
  31. #ifdef TRACE_IDC_DDCMD
  32.  tracePerf(TRACE_IDC_DDCMD_IN, ((ULONG)function << 16) | _IF());  // high-word is function is USHORT, 0-6
  33. #endif
  34.  
  35.  switch(function) {
  36.  case DDCMD_SETUP:      // 0
  37.  
  38.     if (streamPtr) {
  39.  
  40.        DDCMDSETUP __far *setupPtr = (DDCMDSETUP __far *)commonPtr;
  41.        SETUP_PARM __far *setupParmPtr = setupPtr->pSetupParm;
  42.  
  43.        // here, yes, setupParmPtr is passed in, and am to set timeBase to its ulStreamTime value
  44.  
  45.        wavestreamSetCurrentTime(setupParmPtr->ulStreamTime, streamPtr->wsParentPtr);
  46.  
  47.        // if flags' field (based on size) then indicate to mmpm that recurring events
  48.        // are supported...only they're not just yet
  49.  
  50.        if (setupPtr->ulSetupParmSize > sizeof(ULONG)) {
  51.           //setupParmPtr->ulFlags = SETUP_RECURRING_EVENTS;
  52.           setupParmPtr->ulFlags = 0;
  53.        }
  54.     }
  55.     else {
  56.        rc = ERROR_INVALID_STREAM;
  57.     }
  58.     break;
  59.  
  60.  case DDCMD_READ:       // 1
  61.  
  62.     if (streamPtr) {
  63.  
  64.        DDCMDREADWRITE __far *rwPtr = (DDCMDREADWRITE __far *)commonPtr;
  65.  
  66.        // rc = 8 if can't allocate memory for STREAM_BUFFER
  67.  
  68.        rc = streamRead(rwPtr->pBuffer, rwPtr->ulBufferSize, streamPtr);
  69.        if (rc == 8) rc = ERROR_TOO_MANY_BUFFERS;  // 5901;
  70.     }
  71.     else {
  72.        rc = ERROR_INVALID_STREAM;
  73.     }
  74.     break;
  75.  
  76.  case DDCMD_WRITE:      // 2
  77.  
  78.     if (streamPtr) {
  79.  
  80.        DDCMDREADWRITE __far *rwPtr = (DDCMDREADWRITE __far *)commonPtr;
  81.  
  82.        // rc = 8 if can't allocate memory for STREAM_BUFFER
  83.  
  84.        rc = streamWrite(rwPtr->pBuffer, rwPtr->ulBufferSize, streamPtr);
  85.        if (rc == 8) rc = ERROR_TOO_MANY_BUFFERS;  // 5901;
  86.     }
  87.     else {
  88.        rc = ERROR_INVALID_STREAM;
  89.     }
  90.     break;
  91.  
  92.  case DDCMD_STATUS:     // 3
  93.  
  94.     if (streamPtr) {
  95.  
  96.        DDCMDSTATUS __far *statusPtr = (DDCMDSTATUS __far *)commonPtr;
  97.  
  98.        streamPtr->currentTime = wavestreamGetCurrentTime(streamPtr->wsParentPtr);
  99.  
  100.        // yes, give it a -pointer- to this stream's current time var (NOT the time itself)
  101.  
  102.        statusPtr->pStatus = &streamPtr->currentTime;    // should be a far pointer
  103.        statusPtr->ulStatusSize = 4;     // or use sizeof(STATUS_PARM)
  104.     }
  105.     else {
  106.        rc = ERROR_INVALID_STREAM;
  107.     }
  108.     break;
  109.  
  110.  case DDCMD_CONTROL:    // 4
  111.  
  112.     if (streamPtr) {
  113.  
  114.        DDCMDCONTROL __far *controlPtr = (DDCMDCONTROL __far *)commonPtr;
  115.        WAVESTREAM *wsPtr = streamPtr->wsParentPtr;
  116.        USHORT cmd = (USHORT)controlPtr->ulCmd;
  117.  
  118.        switch(cmd) {
  119.        case DDCMD_START: // 1
  120.           rc = wavestreamStart(wsPtr);
  121.           break;
  122.        case DDCMD_STOP:  // 2
  123.           rc = wavestreamStop(wsPtr);
  124.           controlPtr->pParm = &wsPtr->timeBase;   // since wavestreamStop updated .timeBase
  125.           controlPtr->ulParmSize = sizeof(ULONG); // give it a pointer to that var
  126.           break;
  127.        case DDCMD_PAUSE: // 3
  128.           rc = wavestreamPause(wsPtr);
  129.           controlPtr->pParm = &wsPtr->timeBase;   // since wavestreamPause updated .timeBase
  130.           controlPtr->ulParmSize = sizeof(ULONG); // give it a pointer to that var
  131.           break;
  132.        case DDCMD_RESUME: // 4
  133.           rc = wavestreamResume(wsPtr);
  134.           break;
  135.        case DDCMD_ENABLE_EVENT:  // 5
  136.        case DDCMD_DISABLE_EVENT: // 6
  137.           rc = ERROR_INVALID_REQUEST;
  138.           break;
  139.  
  140.        case DDCMD_PAUSE_TIME: // 7 (newish)
  141.           rc = streamPauseTime(streamPtr);
  142.           break;
  143.        case DDCMD_RESUME_TIME: // 8 (newish)
  144.           rc = streamResumeTime(streamPtr);
  145.           break;
  146.        default:
  147.           rc = ERROR_INVALID_REQUEST;
  148.        }
  149.     }
  150.     else {
  151.        rc = ERROR_INVALID_STREAM;
  152.     }
  153.     break;
  154.  case DDCMD_REG_STREAM: // 5
  155.  
  156.  
  157.     if (streamPtr) {
  158.        rc = ERROR_HNDLR_REGISTERED;
  159.     }
  160.     else {
  161.        streamPtr = streamFindStreamSFN(((DDCMDREGISTER __far *)commonPtr)->ulSysFileNum);
  162.        if (streamPtr == 0) {
  163.           rc = ERROR_STREAM_CREATION;
  164.        }
  165.        else {
  166.           rc = streamRegister((DDCMDREGISTER __far *)commonPtr, streamPtr);
  167.        }
  168.     }
  169.     break;
  170.  
  171.  case DDCMD_DEREG_STREAM: // 6
  172.  
  173.     if (streamPtr) {
  174.        streamDeregister(streamPtr);
  175.        rc = 0;
  176.     }
  177.     else {
  178.        rc = ERROR_INVALID_STREAM;
  179.     }
  180.     break;
  181.  
  182.  default:
  183.     rc = ERROR_INVALID_FUNCTION;
  184.  }
  185.  
  186. #ifdef TRACE_IDC_DDCMD
  187.  tracePerf(TRACE_IDC_DDCMD_OUT, ((ULONG)function << 16) | _IF());  // high-word is function is USHORT, 0-6
  188. #endif
  189.  
  190.  return rc;
  191. }
  192.  
  193. // con printfs (moved down here to get them out of the way)
  194. //ddprintf("~@ idcDDCMD, function=%u, streamPtr=%x\n", function,streamPtr);
  195. //ddprintf("@idcDDCMD, function=DDCMD_SETUP, setupParmPtr=%p, setupSize=%lu, streamPtr=%x\n",
  196. //           setupPtr->pSetupParm, setupPtr->ulSetupParmSize,streamPtr);
  197. //ddprintf("@ idcDDCMD, function=DDCMD_READ,  streamPtr=%x\n", streamPtr);
  198. //ddprintf("~@ idcDDCMD, function=DDCMD_WRITE, streamPtr=%x\n", streamPtr);
  199. //int3();
  200. //ddprintf("@idcDDCMD, function=DDCMD_STATUS,streamPtr=%x\n", streamPtr);
  201. //ddprintf("@idcDDCMD, function=DDCMD_CONTROL, pParm=%p, ulParmSize=%lu, streamPtr=%x wsPtr=%x\n",
  202. //           controlPtr->pParm, controlPtr->ulParmSize, streamPtr, wsPtr);
  203. //ddprintf("@idcDDCMD, function=DDCMD_CONTROL, cmd=START, streamPtr=%x wsPtr=%x\n", streamPtr, wsPtr);
  204. //ddprintf("@idcDDCMD, function=DDCMD_CONTROL, cmd=STOP,  streamPtr=%x wsPtr=%x\n", streamPtr, wsPtr);
  205. //ddprintf("@idcDDCMD, function=DDCMD_CONTROL, cmd=PAUSE, streamPtr=%x wsPtr=%x\n", streamPtr, wsPtr);
  206. //ddprintf("@idcDDCMD, function=DDCMD_CONTROL, cmd=RESUME, streamPtr=%x wsPtr=%x\n", streamPtr, wsPtr);
  207. //ddprintf("@idcDDCMD, function=DDCMD_CONTROL, cmd=EVENTxxx, streamPtr=%x wsPtr=%x\n", streamPtr, wsPtr);
  208. //ddprintf("@idcDDCMD, function=DDCMD_CONTROL, cmd=PAUSETIME, streamPtr=%x wsPtr=%x\n", streamPtr, wsPtr);
  209. //ddprintf("@idcDDCMD, function=DDCMD_CONTROL, cmd=RESUMETIME, streamPtr=%x wsPtr=%x\n", streamPtr, wsPtr);
  210. //ddprintf("@idcDDCMD, function=DDCMD_CONTROL, streamPtr=%x\n", streamPtr);
  211. //ddprintf("@idcDDCMD, function=DDCMD_REG_STREAM, streamPtr=%x\n", streamPtr);
  212. //ddprintf("@idcDDCMD, function=DDCMD_DEREG_STREAM, streamPtr=%x\n", streamPtr);
  213. //ddprintf("* leaving idcDDCMD, (rc=%lx)\n", rc);
  214.  
  215.  
  216.