home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / mm4emx11.zip / ssm.h < prev    next >
Text File  |  1994-02-24  |  22KB  |  902 lines

  1. /***********************************/
  2. /* ssm.h -- Multimedia for emx 1.0 */
  3. /*                                 */
  4. /*                                 */
  5. /* Marc E.E. van Woerkom, 2/94     */
  6. /*                                 */
  7. /***********************************/
  8.  
  9.  
  10. /* nested header management */
  11. #ifndef _SSM_H
  12. #define _SSM_H
  13.  
  14. /* use 32-bit alignment */
  15. #pragma pack(4)
  16.  
  17.  
  18. /***********/
  19. /* defines */
  20. /***********/
  21.  
  22. #define MAX_SPI_NAME            9
  23. #define SPCB_MAX_BUF_SIZE       (384L*1024L)
  24.  
  25. #define SPCBBUF_USERPROVIDED     0x0001L
  26. #define SPCBBUF_FIXEDBUF         0x0002L
  27. #define SPCBBUF_NONCONTIGUOUS    0x0004L
  28. #define SPCBBUF_INTERLEAVED      0x0008L
  29. #define SPCBBUF_MAXSIZE          0x0010L
  30. #define SPCBBUF_16MEG            0x0020L
  31.  
  32. #define SPCBDATA_CUETIME         0x0002L
  33. #define SPCBDATA_CUEDATA         0x0004L
  34. #define SPCBDATA_SEEK            0x0000L
  35. #define SPCBDATA_NOSEEK          0x0008L
  36.  
  37. #define SPCBHAND_GENSYNC         0x0001L
  38. #define SPCBHAND_RCVSYNC         0x0002L
  39. #define SPCBHAND_TIMER           0x0004L
  40. #define SPCBHAND_NONSTREAM       0x0008L
  41. #define SPCBHAND_GENTIME         0x0010L
  42. #define SPCBHAND_NOPREROLL       0x0020L
  43. #define SPCBHAND_NOSYNC          0x0040L
  44. #define SPCBHAND_PHYS_SEEK       0x0080L
  45.  
  46. #define EVENT_SYNC               1L
  47. #define EVENT_RESERVED           2L
  48. #define EVENT_IMPLICIT_TYPE      3L
  49. #define EVENT_SYNCOVERRUN        4L
  50. #define EVENT_CUE_TIME           5L
  51. #define EVENT_CUE_DATA           6L
  52. #define EVENT_DATAUNDERRUN       7L
  53. #define EVENT_DATAOVERRUN        8L
  54. #define EVENT_CUE_TIME_PAUSE     9L
  55.                                  
  56. #define EVENT_EOS                1L
  57. #define EVENT_ERROR              2L
  58. #define EVENT_STREAM_STOPPED     3L
  59. #define EVENT_SYNC_PREROLLED     4L
  60. #define EVENT_PLAYLISTMESSAGE    5L
  61. #define EVENT_PLAYLISTCUEPOINT   6L
  62. #define EVENT_QUEUE_OVERFLOW     7L
  63.                                  
  64. #define EVENT_SINGLE             0L
  65. #define EVENT_RECURRING          1L
  66. #define EVENT_DATAPTR            2L
  67.                                  
  68. #define SH_TYPE                  0x80000000L
  69.                                  
  70. #define SYNCOVERRUN              0x0001L
  71. #define SYNCPOLLING              0x0002L
  72.  
  73.  
  74. #define MAX_PORT_NAME            40
  75. #define MAX_PORTS                16
  76.                                  
  77. #define ACBTYPE_MMIO             0x0001L
  78. #define ACBTYPE_MEM_PLAYL        0x0003L
  79. #define ACBTYPE_CDDA             0x0004L
  80. #define ACBTYPE_MISH             0x0005L
  81. #define ACBTYPE_SET              0x0006L
  82. #define ACBTYPE_NULLSH           0x0007L
  83. #define ACBTYPE_MTSH             0x0008L
  84. #define ACBTYPE_CODECSH          0x0009L
  85.                                  
  86. #define MIDI_MAP_ON              0x0000L
  87. #define MIDI_MAP_OFF             0x0001L
  88.                                  
  89. #define TRACK_ACTIVATE           0x0000L
  90. #define TRACK_DEACTIVATE         0x0001L
  91.  
  92.  
  93. #define FLUSH_START              0x0001L
  94. #define IOCTL_FUNC_SMH_REGISTER  0x0040
  95. #define SH_DLL_TYPE              0
  96. #define SH_PDD_TYPE              1
  97. #define SSMDD_CATEGORY           0x0081
  98. #define SPCBSIZE                 72L
  99. #define SPI_RESOURCE             1
  100.  
  101. #define BUF_GETEMPTY             0x00000001L
  102. #define BUF_RETURNFULL           0x00000002L
  103. #define BUF_GETFULL              0x00000004L
  104. #define BUF_RETURNEMPTY          0x00000008L
  105. #define BUF_GIVEBUF              0x00000010L
  106. #define BUF_EOS                  0x00000100L
  107. #define BUF_RECORDS              0x00004000L
  108. #define BUF_LASTRECORD           0x00008000L
  109. #define BUF_LINEAR               0x00010000L
  110. #define BUF_PHYSICAL             0x00020000L
  111. #define BUF_RESERVED             0x00040000L
  112. #define BUF_EXTENDED             0x80000000L
  113.  
  114. #define REGISTER_TGT_HNDLR       0x0001L
  115. #define REGISTER_SRC_HNDLR       0x0002L
  116. #define REGISTER_NONSTREAMING    0x0004L
  117.  
  118. #define SHC_ASSOCIATE             0L
  119. #define SHC_CLOSE                 1L
  120. #define SHC_CREATE                2L
  121. #define SHC_DESTROY               3L
  122. #define SHC_START                 4L
  123. #define SHC_STOP                  5L
  124. #define SHC_SEEK                  6L
  125. #define SHC_ENABLE_EVENT          7L
  126. #define SHC_DISABLE_EVENT         8L
  127. #define SHC_ENABLE_SYNC           9L
  128. #define SHC_DISABLE_SYNC         10L
  129. #define SHC_GET_TIME             11L
  130. #define SHC_GET_PROTOCOL         12L
  131. #define SHC_INSTALL_PROTOCOL     13L
  132. #define SHC_ENUMERATE_PROTOCOLS  14L
  133. #define SHC_NEGOTIATE_RESULT     15L
  134. #define SHC_SENDMSG              16L
  135.  
  136. #define SMH_REGISTER             0L
  137. #define SMH_DEREGISTER           1L
  138. #define SMH_REPORTEVENT          2L
  139. #define SMH_NOTIFY               3L
  140. #define SMH_LOCKMEM              4L
  141.  
  142. #define SPI_INSTALL_PROTOCOL     0x0000L
  143. #define SPI_DEINSTALL_PROTOCOL   0x0001L
  144.  
  145. #define SPI_SEEK_ABSOLUTE        0x0000L
  146. #define SPI_SEEK_RELATIVE        0x0001L
  147. #define SPI_SEEK_FROMEND         0x0002L
  148. #define SPI_SEEK_SLAVES          0x0010L
  149. #define SPI_SEEK_MMTIME          0x0000L
  150. #define SPI_SEEK_BYTES           0x0100L
  151. #define SPI_SEEK_IFRAME          0x1000L
  152.                                  
  153. #define SPI_START_STREAM         0x0000L
  154. #define SPI_START_SLAVES         0x0001L
  155. #define SPI_START_PREROLL        0x0002L
  156.                                  
  157. #define SPI_STOP_STREAM          0x0000L
  158. #define SPI_STOP_SLAVES          0x0001L
  159. #define SPI_STOP_FLUSH           0x0002L
  160. #define SPI_STOP_DISCARD         0x0004L
  161.  
  162. #define SSM_LOCKMEM              0x0000L
  163. #define SSM_UNLOCKMEM            0x0001L
  164. #define SSM_CONTIGLOCK           0x0002L
  165.  
  166. #define SYNC_MASTER              0x0000L
  167. #define SYNC_SLAVE               0x0001L
  168.  
  169.  
  170. #define VALIDBUFFLAGS           (SPCBBUF_USERPROVIDED  | \
  171.                                  SPCBBUF_FIXEDBUF      | \
  172.                                  SPCBBUF_NONCONTIGUOUS | \
  173.                                  SPCBBUF_INTERLEAVED   | \
  174.                                  SPCBBUF_16MEG         | \
  175.                                  SPCBBUF_MAXSIZE)
  176.  
  177. #define VALIDDATAFLAGS          (SPCBDATA_CUETIME | \
  178.                                  SPCBDATA_CUEDATA | \
  179.                                  SPCBDATA_NOSEEK)
  180.  
  181. #define VALIDHANDFLAGS          (SPCBHAND_GENSYNC   | \
  182.                                  SPCBHAND_RCVSYNC   | \
  183.                                  SPCBHAND_TIMER     | \
  184.                                  SPCBHAND_NONSTREAM | \
  185.                                  SPCBHAND_GENTIME   | \
  186.                                  SPCBHAND_NOPREROLL | \
  187.                                  SPCBHAND_NOSYNC    | \
  188.                                  SPCBHAND_PHYS_SEEK)
  189.  
  190. #define VALIDSOURCEFLAGS        (BUF_RETURNFULL | \
  191.                                  BUF_GETEMPTY   | \
  192.                                  BUF_EOS        | \
  193.                                  BUF_LASTRECORD | \
  194.                                  BUF_PHYSICAL   | \
  195.                                  BUF_LINEAR     | \
  196.                                  BUF_RECORDS    | \
  197.                                  BUF_GIVEBUF    | \
  198.                                  BUF_EXTENDED)
  199.                                 
  200. #define VALIDTARGETFLAGS        (BUF_RETURNEMPTY | \
  201.                                  BUF_GETFULL     | \
  202.                                  BUF_PHYSICAL    | \
  203.                                  BUF_LINEAR      | \
  204.                                  BUF_EOS|BUF_EXTENDED)
  205.                                 
  206. #define VALIDREGISTERFLAGS      (REGISTER_TGT_HNDLR | \
  207.                                  REGISTER_SRC_HNDLR | \
  208.                                  REGISTER_NONSTREAMING)
  209.                                 
  210. #define VALIDINSTALLFLAGS       (SPI_INSTALL_PROTOCOL | \
  211.                                  SPI_DEINSTALL_PROTOCOL)
  212.                                 
  213. #define VALIDSEEKFLAGS          (SPI_SEEK_RELATIVE | \
  214.                                  SPI_SEEK_ABSOLUTE | \
  215.                                  SPI_SEEK_FROMEND  | \
  216.                                  SPI_SEEK_MMTIME   | \
  217.                                  SPI_SEEK_SLAVES   | \
  218.                                  SPI_SEEK_IFRAME   | \
  219.                                  SPI_SEEK_BYTES)
  220.                                 
  221. #define VALIDSTARTFLAGS         (SPI_START_STREAM | \
  222.                                  SPI_START_SLAVES | \
  223.                                  SPI_START_PREROLL)
  224.                                 
  225. #define VALIDSTOPFLAGS          (SPI_STOP_STREAM | \
  226.                                  SPI_STOP_SLAVES | \
  227.                                  SPI_STOP_FLUSH  | \
  228.                                  SPI_STOP_DISCARD )
  229.  
  230.  
  231. /************/
  232. /* typedefs */
  233. /************/
  234.  
  235. typedef ULONG RC;
  236.  
  237. typedef ULONG    HSTREAM;
  238. typedef HSTREAM* PHSTREAM;
  239. typedef ULONG    HEVENT;
  240. typedef HEVENT*  PHEVENT;
  241. typedef ULONG    HID;
  242.  
  243.  
  244. typedef struct  _EVCB {
  245.     ULONG   ulType;
  246.     ULONG   ulSubType;
  247.     ULONG   ulFlags;
  248.     HSTREAM hstream;
  249.     HID     hid;
  250.     ULONG   ulStatus;
  251.     ULONG   ulEventParm1;
  252.     ULONG   ulEventParm2;
  253.     ULONG   ulEventParm3;
  254. } EVCB;
  255.  
  256. typedef EVCB* PEVCB;
  257.  
  258.  
  259. typedef struct _ACB {
  260.     ULONG ulACBLen;
  261.     ULONG ulObjType;
  262.     ULONG ulParm1;
  263.     ULONG ulParm2;
  264. } ACB;
  265.  
  266. typedef ACB* PACB;
  267.  
  268.  
  269. typedef struct  _SPCB {
  270.     ULONG   ulSPCBLen;
  271.     SPCBKEY spcbkey;
  272.     ULONG   ulDataFlags;
  273.     ULONG   ulNumRec;
  274.     ULONG   ulBlockSize;
  275.     ULONG   ulBufSize;
  276.     ULONG   ulMinBuf;
  277.     ULONG   ulMaxBuf;
  278.     ULONG   ulSrcStart;
  279.     ULONG   ulTgtStart;
  280.     ULONG   ulBufFlags;
  281.     ULONG   ulHandFlags;
  282.     MMTIME  mmtimeTolerance;
  283.     MMTIME  mmtimeSync;
  284.     ULONG   ulBytesPerUnit;
  285.     MMTIME  mmtimePerUnit;
  286. } SPCB;
  287.  
  288. typedef SPCB* PSPCB;
  289.  
  290.  
  291. /* use 8-bit alignment */
  292. #pragma pack(1)
  293.  
  294. typedef struct _ACB_CDDA {
  295.     ULONG ulACBLen;
  296.     ULONG ulObjType;
  297.     CHAR  bCDDrive;
  298. } ACB_CDDA;
  299.  
  300. typedef ACB_CDDA* PACB_CDDA;
  301.  
  302.  
  303. typedef struct _DCB {
  304.     ULONG ulDCBLen;
  305.     SZ    szDevName[MAX_SPI_NAME];
  306. } DCB;
  307.  
  308. typedef DCB* PDCB;
  309.  
  310.  
  311. typedef struct E_DCB {
  312.     ULONG ulDCBLen;
  313.     SZ    szDevName[MAX_SPI_NAME];
  314.     ULONG ulSysFileNum;
  315. } E_DCB, DCB_AUDIOSH;
  316.  
  317. typedef E_DCB* PE_DCB;
  318. typedef E_DCB* PDCB_AUDIOSH;
  319.  
  320.  
  321. typedef struct _HAND {
  322.     SZ szHandlerClass[MAX_SPI_NAME];
  323.     SZ szHandlerName[MAX_SPI_NAME];
  324. } HAND;
  325.  
  326. typedef HAND* PHAND;
  327.  
  328. /* use 32-bit alignment again */
  329. #pragma pack(4)
  330.  
  331.  
  332. typedef struct _SYNC_EVCB {
  333.     ULONG   ulType;
  334.     ULONG   ulSubType;
  335.     ULONG   ulSyncFlags;
  336.     HSTREAM hstream;
  337.     HID     hid;
  338.     ULONG   ulStatus;
  339.     MMTIME  mmtimeStart;
  340.     MMTIME  mmtimeMaster;
  341.     MMTIME  mmtimeSlave;
  342. } SYNC_EVCB;
  343.  
  344. typedef SYNC_EVCB* PSYNC_EVCB;
  345.  
  346.  
  347. typedef ULONG (EVFN)(PEVCB pevcb);
  348. typedef EVFN  (*PEVFN);
  349. typedef ULONG (SHCFN)(PVOID pParmIn);
  350. typedef SHCFN (*PSHCFN);
  351. typedef ULONG (SMHFN)(PVOID pParmIn);
  352. typedef SMHFN (*PSMHFN);
  353.  
  354.  
  355. typedef struct _LOCKH {
  356.     BYTE lock[16];
  357. } LOCKH;
  358.  
  359. typedef LOCKH* PLOCKH;
  360.  
  361.  
  362. typedef struct _SLAVE {
  363.     HSTREAM hstreamSlave;
  364.     MMTIME  mmtimeStart;
  365. } SLAVE;
  366.  
  367. typedef SLAVE* PSLAVE;
  368.  
  369.  
  370. typedef struct _MASTER {
  371.     HSTREAM hstreamMaster;
  372. } MASTER;
  373.  
  374. typedef MASTER* PMASTER;
  375.  
  376.  
  377. typedef struct _MSG_COMMON {
  378.     ULONG ulMsgLen;
  379. } MSG_COMMON;
  380.  
  381.  
  382. typedef struct _SMH_COMMON {
  383.     ULONG ulFunction;
  384.     HID   hid;
  385. } SMH_COMMON;
  386.  
  387. typedef SMH_COMMON* PSMH_COMMON;
  388.  
  389.  
  390. typedef struct _PARM_REG {
  391.     ULONG  ulFunction;
  392.     PSZ    pszSHName;
  393.     HID*   phidSrc;
  394.     HID*   phidTgt;
  395.     PSHCFN pshcfnEntry;
  396.     ULONG  ulFlags;
  397.     ULONG  ulMaxNumStreams;
  398.     ULONG  ulMaxNumEvents;
  399. } PARM_REG;
  400.  
  401. typedef PARM_REG* PPARM_REG;
  402.  
  403.  
  404. typedef struct _PARM_DEREG {
  405.     ULONG ulFunction;
  406.     PSZ   pszSHName;
  407. } PARM_DEREG;
  408.  
  409. typedef PARM_DEREG* PPARM_DEREG;
  410.  
  411.  
  412. typedef struct _PARM_EVENT {
  413.     ULONG  ulFunction;
  414.     HID    hid;
  415.     HEVENT hevent;
  416.     PEVCB  pevcbEvent;
  417. } PARM_EVENT;
  418.  
  419. typedef PARM_EVENT* PPARM_EVENT;
  420.  
  421.  
  422. typedef struct _PARM_NOTIFY {
  423.     ULONG   ulFunction;
  424.     HID     hid;
  425.     HSTREAM hstream;
  426.     ULONG   ulFlags;
  427.     ULONG   ulGetNumEntries;
  428.     ULONG   ulRetNumEntries;
  429.     PVOID   pGetBufTab;
  430.     PVOID   pRetBufTab;
  431. } PARM_NOTIFY;
  432.  
  433. typedef PARM_NOTIFY* PPARM_NOTIFY;
  434.  
  435.  
  436. typedef struct _SRCBUFTAB {
  437.     PVOID  pBuffer;
  438.     PVOID  pRecord;
  439.     ULONG  ulLength;
  440.     ULONG  ulMessageParm;
  441.     MMTIME mmtimeOffset;
  442. } SRCBUFTAB;
  443.  
  444. typedef SRCBUFTAB* PSRCBUFTAB;
  445.  
  446.  
  447. typedef struct _TGTBUFTAB {
  448.     PVOID  pBuffer;
  449.     ULONG  ulBufId;
  450.     ULONG  ulLength;
  451.     ULONG  ulMessageParm;
  452.     MMTIME mmtimeOffset;
  453. } TGTBUFTAB;
  454.  
  455. typedef TGTBUFTAB* PTGTBUFTAB;
  456.  
  457.  
  458. typedef struct  _PARM_ENOTIFY {
  459.     ULONG   ulFunction;
  460.     HID     hid;
  461.     HSTREAM hstream;
  462.     ULONG   ulFlags;
  463.     ULONG   ulGetNumEntries;
  464.     ULONG   ulRetNumEntries;
  465.     PVOID   pGetBufTab;
  466.     PVOID   pRetBufTab;
  467.     ULONG   ulParm1;
  468.     ULONG   ulParm2;
  469. } PARM_ENOTIFY;
  470.  
  471. typedef PARM_ENOTIFY* PPARM_ENOTIFY;
  472.  
  473.  
  474. typedef struct _ESRCBUFTAB {
  475.     PVOID  pBuffer;
  476.     PVOID  pRecord;
  477.     ULONG  ulLength;
  478.     ULONG  ulMessageParm;
  479.     MMTIME mmtimeOffset;
  480.     ULONG  ulParm1;
  481.     ULONG  ulParm2;
  482. } ESRCBUFTAB;
  483.  
  484. typedef ESRCBUFTAB* PESRCBUFTAB;
  485.  
  486.  
  487. typedef struct _ETGTBUFTAB {
  488.     PVOID  pBuffer;
  489.     ULONG  ulBufId;
  490.     ULONG  ulLength;
  491.     ULONG  ulMessageParm;
  492.     MMTIME mmtimeOffset;
  493.     ULONG  ulParm1;
  494.     ULONG  ulParm2;
  495. } ETGTBUFTAB;
  496.  
  497. typedef ETGTBUFTAB* PETGTBUFTAB;
  498.  
  499.  
  500. typedef struct _PARM_LOCKM {
  501.     ULONG  ulFunction;
  502.     PVOID  pBuffer;
  503.     ULONG  ulBufSize;
  504.     PLOCKH plockh;
  505.     ULONG  ulFlags;
  506. } PARM_LOCKM;
  507.  
  508. typedef PARM_LOCKM* PPARM_LOCKM;
  509.  
  510.  
  511. typedef struct _SHC_COMMON {
  512.     ULONG ulFunction;
  513.     HID   hid;
  514. } SHC_COMMON;
  515.  
  516. typedef SHC_COMMON* PSHC_COMMON;
  517.  
  518.  
  519. typedef struct _PARM_ASSOC {
  520.     ULONG   ulFunction;
  521.     HID     hid;
  522.     HSTREAM hstream;
  523.     PACB    pacb;
  524. } PARM_ASSOC;
  525.  
  526. typedef PARM_ASSOC* PPARM_ASSOC;
  527.  
  528.  
  529. typedef struct _PARM_CLOSE {
  530.     ULONG ulFunction;
  531.     HID   hid;
  532. } PARM_CLOSE;
  533.  
  534. typedef PARM_CLOSE* PPARM_CLOSE;
  535.  
  536.  
  537. typedef struct _PARM_CREATE {
  538.     ULONG   ulFunction;
  539.     HID     hid;
  540.     HSTREAM hstream;
  541.     SPCBKEY spcbkey;
  542.     PSPCB   pspcb;
  543.     HSTREAM hstreamBuf;
  544.     PDCB    pdcb;
  545. } PARM_CREATE;
  546.  
  547. typedef PARM_CREATE* PPARM_CREATE;
  548.  
  549.  
  550. typedef struct _PARM_DESTROY {
  551.      ULONG   ulFunction;
  552.      HID     hid;       
  553.      HSTREAM hstream;   
  554. } PARM_DESTROY;
  555.  
  556. typedef PARM_DESTROY* PPARM_DESTROY;
  557.  
  558.  
  559. typedef struct _PARM_START {
  560.     ULONG   ulFunction;
  561.     HID     hid;
  562.     HSTREAM hstream;
  563.     ULONG   ulFlags;
  564. } PARM_START;
  565.  
  566. typedef PARM_START* PPARM_START;
  567.  
  568.  
  569. typedef struct _PARM_STOP {
  570.     ULONG   ulFunction;
  571.     HID     hid;
  572.     HSTREAM hstream;
  573.     ULONG   ulFlags;
  574. } PARM_STOP;
  575.  
  576. typedef PARM_STOP* PPARM_STOP;
  577.  
  578.  
  579. typedef struct _PARM_SEEK {
  580.     ULONG   ulFunction;
  581.     HID     hid;
  582.     HSTREAM hstream;
  583.     ULONG   ulFlags;
  584.     LONG    lSeekPoint;
  585. } PARM_SEEK;
  586.  
  587. typedef PARM_SEEK* PPARM_SEEK;
  588.  
  589.  
  590. typedef struct _PARM_ENEVENT {
  591.     ULONG  ulFunction;
  592.     HID    hid;
  593.     HEVENT hevent;
  594.     PEVCB  pevcbUser;
  595. } PARM_ENEVENT;
  596.  
  597. typedef PARM_ENEVENT* PPARM_ENEVENT;
  598.  
  599.  
  600. typedef struct _PARM_DISEVENT {
  601.     ULONG   ulFunction;
  602.     HID     hid;
  603.     HSTREAM hstream;
  604.     HEVENT  hevent;
  605. } PARM_DISEVENT;
  606.  
  607. typedef PARM_DISEVENT* PPARM_DISEVENT;
  608.  
  609.  
  610. typedef struct _PARM_ENSYNC { 
  611.     ULONG      ulFunction;
  612.     HID        hid;
  613.     HSTREAM    hstream;
  614.     ULONG      ulFlags;
  615.     MMTIME     mmtimeSync;
  616.     PSYNC_EVCB pevcbSyncPulse;
  617.     ULONG      ulSyncPulseSem;
  618. } PARM_ENSYNC;
  619.  
  620. typedef PARM_ENSYNC* PPARM_ENSYNC;
  621.  
  622.  
  623. typedef struct _PARM_DISSYNC {
  624.     ULONG   ulFunction;
  625.     HID     hid;
  626.     HSTREAM hstream;
  627. } PARM_DISSYNC;
  628.  
  629. typedef PARM_DISSYNC* PPARM_DISSYNC;
  630.  
  631.  
  632. typedef struct _PARM_GTIME {
  633.     ULONG   ulFunction;
  634.     HID     hid;
  635.     HSTREAM hstream;
  636.     MMTIME  mmtimeCurrent;
  637. } PARM_GTIME;
  638.  
  639. typedef PARM_GTIME* PPARM_GTIME;
  640.  
  641.  
  642. typedef struct _PARM_GPROT {
  643.     ULONG   ulFunction;
  644.     HID     hid;
  645.     SPCBKEY spcbkey;
  646.     PSPCB   pspcb;
  647. } PARM_GPROT;
  648.  
  649. typedef PARM_GPROT* PPARM_GPROT;
  650.  
  651.  
  652. typedef struct _PARM_INSTPROT {
  653.     ULONG   ulFunction;
  654.     HID     hid;
  655.     SPCBKEY spcbkey;
  656.     PSPCB   pspcb;
  657.     ULONG   ulFlags;
  658. } PARM_INSTPROT;
  659.  
  660. typedef PARM_INSTPROT* PPARM_INSTPROT;
  661.  
  662.  
  663. typedef struct _PARM_ENUMPROT {
  664.     ULONG  ulFunction;
  665.     HID    hid;
  666.     PVOID  paSPCBKeys;
  667.     PULONG pulNumSPCBKeys;
  668. } PARM_ENUMPROT;
  669.  
  670. typedef PARM_ENUMPROT* PPARM_ENUMPROT;
  671.  
  672.  
  673. typedef struct _PARM_NEGOTIATE {
  674.     ULONG   ulFunction;
  675.     HID     hid;
  676.     HSTREAM hstream;
  677.     PSPCB   pspcb;
  678.     ULONG   ulErrorStatus;
  679. } PARM_NEGOTIATE;
  680.  
  681. typedef PARM_NEGOTIATE* PPARM_NEGOTIATE;
  682.  
  683.  
  684. typedef struct _PARM_SNDMSG {
  685.     ULONG    ulFunction;
  686.     HID      hid;
  687.     HSTREAM  hstream;
  688.     ULONG    ulMsgType;
  689.     PVOID    pMsg;
  690. } PARM_SNDMSG;
  691.  
  692. typedef PARM_SNDMSG* PPARM_SNDMSG;
  693.  
  694.  
  695. typedef struct _IMPL_EVCB {
  696.     ULONG   ulType;
  697.     ULONG   ulSubType;
  698.     ULONG   ulFlags;
  699.     HSTREAM hstream;
  700.     HID     hid;
  701.     ULONG   ulStatus;
  702.     ULONG   unused1;
  703.     ULONG   unused2;
  704.     ULONG   unused3;
  705. } IMPL_EVCB;
  706.  
  707. typedef IMPL_EVCB* PIMPL_EVCB;
  708.  
  709.  
  710. typedef struct _PLAYL_EVCB {
  711.     ULONG   ulType;
  712.     ULONG   ulSubType;
  713.     ULONG   ulFlags;
  714.     HSTREAM hstream;
  715.     HID     hid;
  716.     ULONG   ulStatus;
  717.     ULONG   ulMessageParm;
  718.     ULONG   unused1;
  719.     ULONG   unused2;
  720. } PLAYL_EVCB;
  721.  
  722. typedef PLAYL_EVCB* PPLAYL_EVCB;
  723.  
  724.  
  725. typedef struct _OVRU_EVCB {
  726.     ULONG   ulType;
  727.     ULONG   ulSubType;
  728.     ULONG   ulFlags;
  729.     HSTREAM hstream;
  730.     HID     hid;
  731.     ULONG   ulStatus;
  732.     MMTIME  mmtimeSlave;
  733.     MMTIME  mmtimeStart;
  734.     MMTIME  mmtimeMaster;
  735. } OVRU_EVCB;
  736.  
  737. typedef OVRU_EVCB* POVRU_EVCB;
  738.  
  739.  
  740. typedef struct  _TIME_EVCB {
  741.     ULONG   ulType;
  742.     ULONG   ulSubType;
  743.     ULONG   ulFlags;
  744.     HSTREAM hstream;
  745.     HID     hid;
  746.     ULONG   ulStatus;
  747.     MMTIME  mmtimeStream;
  748.     ULONG   unused1;
  749.     ULONG   unused2;
  750. } TIME_EVCB;
  751.  
  752. typedef TIME_EVCB* PTIME_EVCB;
  753.  
  754.  
  755. typedef struct _DATA_EVCB {
  756.     ULONG   ulType;
  757.     ULONG   ulSubType;
  758.     ULONG   ulFlags;
  759.     HSTREAM hstream;
  760.     HID     hid;
  761.     ULONG   ulStatus;
  762.     MMTIME  mmtimeStream;
  763.     ULONG   ulEventParm1;
  764.     ULONG   ulEventParm2;
  765. } DATA_EVCB;
  766.  
  767. typedef DATA_EVCB* PDATA_EVCB;
  768.  
  769.  
  770. typedef struct _ACB_MMIO {
  771.     ULONG ulACBLen;
  772.     ULONG ulObjType;
  773.     HMMIO hmmio;
  774. } ACB_MMIO;
  775.  
  776. typedef ACB_MMIO* PACB_MMIO;
  777.  
  778.  
  779. typedef struct _ACB_MEM_PLAYL {
  780.     ULONG ulACBLen;
  781.     ULONG ulObjType;
  782.     PVOID pMemoryAddr;
  783. } ACB_MEM_PLAYL;
  784.  
  785. typedef ACB_MEM_PLAYL* PACB_MEM_PLAYL;
  786.  
  787.  
  788. typedef struct _ACB_MISH {
  789.     ULONG   ulACBLen;
  790.     ULONG   ulObjType;
  791.     HSTREAM hstreamDefault;
  792.     ULONG   ulDeviceTypeID;
  793.     ULONG   ulpMapperPorts;
  794.     ULONG   ulNumInStreams;
  795.     HSTREAM hstreamIn[MAX_PORTS];
  796.     ULONG   ulNumOutStreams;
  797.     HSTREAM hstreamOut[MAX_PORTS];
  798. } ACB_MISH;
  799.  
  800. typedef ACB_MISH* PACB_MISH;
  801.  
  802.  
  803. typedef struct _ACB_SET {
  804.     ULONG ulACBLen;
  805.     ULONG ulObjType;
  806.     ULONG ulFlags;
  807.     ULONG ulReserved;
  808. } ACB_SET;
  809.  
  810. typedef ACB_SET* PACB_SET;
  811.  
  812.  
  813. typedef struct _ACB_NULLSH {
  814.     ULONG ulACBLen;
  815.     ULONG ulObjType;
  816.     PFN   pfnEntry;
  817.     ULONG ulReserved;
  818. } ACB_NULLSH;
  819.  
  820. typedef ACB_NULLSH* PACB_NULLSH;
  821.  
  822.  
  823. typedef struct _ACB_MTSH   {
  824.     ULONG       ulACBLen;
  825.     ULONG       ulObjType;
  826.     HMMIO       hmmio;
  827.     MMTRACKINFO mmtrackInfo;
  828.     ULONG       ulFlags;
  829. } ACB_MTSH;
  830.  
  831. typedef ACB_MTSH* PACB_MTSH;
  832.  
  833.  
  834. typedef struct _ACB_CODECSH {
  835.     ULONG   ulACBLen;
  836.     ULONG   ulObjType;
  837.     HSTREAM hstreamToPair;
  838.     PVOID   pMmioInfo;
  839.     ULONG   ulInfoLength;
  840.     PVOID   pCodecControl;
  841.     ULONG   ulControlLength;
  842. } ACB_CODECSH;
  843.  
  844. typedef ACB_CODECSH* PACB_CODECSH;
  845.  
  846.  
  847. /*************/
  848. /* SSM API's */
  849. /*************/
  850.  
  851. ULONG SpiAssociate(HSTREAM hstream, HID hid, PACB pacb);
  852.  
  853. ULONG SpiEnumerateHandlers(PHAND pahand, PULONG pulNumHand);
  854.  
  855. ULONG SpiGetHandler(PSZ pszHName, HID* phidSrc, HID* phidTgt);
  856.  
  857. ULONG SpiCreateStream(HID hidSrc, HID hidTgt, PSPCBKEY pspcbkey,
  858.                       PDCB pdcbSrc, PDCB pdcbTgt, PIMPL_EVCB pevcb,
  859.                       PEVFN EventEntry, HSTREAM hstreamBuf,
  860.                       PHSTREAM phstream, PHEVENT phevent);
  861.  
  862. ULONG SpiSendMsg(HSTREAM hstream, HID hid, ULONG ulMsgType, PVOID pMsg);
  863.  
  864. ULONG SpiDestroyStream(HSTREAM hstream);
  865.  
  866. ULONG SpiGetTime(HSTREAM hstream, PMMTIME pmmtime);
  867.  
  868. ULONG SpiSeekStream(HSTREAM hstream, ULONG ulFlags, LONG lSeekPoint);
  869.  
  870. ULONG SpiStartStream(HSTREAM hstream, ULONG ulFlags);
  871.  
  872. ULONG SpiStopStream(HSTREAM hstream, ULONG ulFlags);
  873.  
  874. ULONG SpiDisableEvent(HEVENT hevent);
  875.  
  876. ULONG SpiEnableEvent(PEVCB pevcb, PHEVENT phevent);
  877.  
  878. ULONG SpiDisableSync(HSTREAM hstreamMaster);
  879.  
  880. ULONG SpiEnableSync(HSTREAM hstreamMaster, PSLAVE paslaveList,
  881.                     ULONG ulNumSlaves, MMTIME mmtimeSync);
  882.  
  883. ULONG SpiDetermineSyncMaster(PHSTREAM phstreamMaster, PMASTER paMasterList,
  884.                              ULONG ulNumMasters);
  885.  
  886. ULONG SpiGetProtocol(HID hid, PSPCBKEY pspcbkey, PSPCB pspcb);
  887.  
  888. ULONG SpiInstallProtocol(HID hid, PSPCBKEY pspcbkey,
  889.                          PSPCB pspcb, ULONG ulFlags);
  890.  
  891. ULONG SpiEnumerateProtocols(HID hid, PVOID paSPCBKeys, PULONG pulNumSPCBKeys);
  892.  
  893. ULONG SMHEntryPoint(PVOID pParmIn);
  894.  
  895.  
  896. /* set default alignment */
  897. #pragma pack()
  898.  
  899. /* nested header management */
  900. #endif
  901.  
  902.