Adapted for new register functions support (ESP_reg in register
[wine] / include / multimedia.h
1 /* -*- tab-width: 8; c-basic-offset: 4 -*- */
2
3 /*****************************************************************************
4  * Copyright 1998, Luiz Otavio L. Zorzella
5  *           1999, Eric Pouech
6  *
7  * File:      multimedia.h
8  * Purpose:   multimedia declarations (internal to multimedia DLLs)
9  *
10  *****************************************************************************
11  */
12 #ifndef __WINE_MULTIMEDIA_H 
13 #define __WINE_MULTIMEDIA_H
14
15 #include "mmsystem.h"
16
17 #define MAX_MIDIINDRV   (16)
18 /* For now I'm making 16 the maximum number of midi devices one can
19  * have. This should be more than enough for everybody. But as a purist,
20  * I intend to make it unbounded in the future, as soon as I figure
21  * a good way to do so.
22  */
23 #define MAX_MIDIOUTDRV  (16)
24
25 #if defined(HAVE_SYS_SOUNDCARD_H)
26 # include <sys/soundcard.h>
27 #elif defined(HAVE_MACHINE_SOUNDCARD_H)
28 # include <machine/soundcard.h>
29 #elif defined(HAVE_SOUNDCARD_H)
30 # include <soundcard.h>
31 #endif
32
33 #include <sys/errno.h>
34
35 #ifdef HAVE_OSS
36 #define MIDI_SEQ "/dev/sequencer"
37 #else
38 #define MIDI_DEV "/dev/midi"
39 #endif
40
41 #ifdef SOUND_VERSION
42 #define IOCTL(a,b,c)            ioctl(a,b,&c)
43 #else
44 #define IOCTL(a,b,c)            (c = ioctl(a,b,c))
45 #endif
46
47 typedef struct {
48         HDRVR                   hDrv;
49         DRIVERPROC16            driverProc;
50         MCI_OPEN_DRIVER_PARMS16 modp;
51         MCI_OPEN_PARMS16        mop;
52         DWORD                   dwPrivate;
53         YIELDPROC               lpfnYieldProc;
54         DWORD                   dwYieldData;
55         BOOL                    bIs32;
56         HTASK16                 hCreatorTask;
57 } WINE_MCIDRIVER;
58
59 extern WINE_MCIDRIVER mciDrv[MAXMCIDRIVERS];
60
61 #define WINE_MMTHREAD_CREATED   0x4153494C      /* "BSIL" */
62 #define WINE_MMTHREAD_DELETED   0xDEADDEAD
63
64 typedef struct {
65        DWORD                    dwSignature;            /* 00 "BSIL" when ok, 0xDEADDEAD when being deleted */
66        DWORD                    dwCounter;              /* 04 > 1 when in mmThread functions */
67        HANDLE                   hThread;                /* 08 hThread */
68        DWORD                    dwThreadID;             /* 0C */
69        FARPROC16                fpThread;               /* 10 address of thread proc (segptr or lin depending on dwFlags) */
70        DWORD                    dwThreadPmt;            /* 14 parameter to be passed upon thread creation to fpThread */
71        DWORD                    dwSignalCount;          /* 18 counter used for signaling */
72        HANDLE                   hEvent;                 /* 1C event */
73        HANDLE                   hVxD;                   /* 20 return from OpenVxDHandle */
74        DWORD                    dwStatus;               /* 24 0x00, 0x10, 0x20, 0x30 */
75        DWORD                    dwFlags;                /* 28 dwFlags upon creation */
76        HANDLE16                 hTask;                  /* 2C handle to created task */
77 } WINE_MMTHREAD;
78
79 typedef enum {
80     MCI_MAP_NOMEM,      /* ko, memory problem */
81     MCI_MAP_MSGERROR,   /* ko, unknown message */
82     MCI_MAP_OK,         /* ok, no memory allocated. to be sent to 16 bit proc. */
83     MCI_MAP_OKMEM,      /* ok, some memory allocated, need to call MCI_UnMapMsg32ATo16. to be sent to 16 bit proc. */
84     MCI_MAP_PASS        /* ok, no memory allocated. to be sent to 32 bit proc */
85 } MCI_MapType;
86
87 /* function prototypes */
88
89 #define MCI_GetDrv(wDevID)      (&mciDrv[MCI_DevIDToIndex(wDevID)])
90 #define MCI_GetOpenDrv(wDevID)  (&(MCI_GetDrv(wDevID)->mop))
91
92 extern int                      MCI_DevIDToIndex(UINT16 wDevID);
93 extern UINT16                   MCI_FirstDevID(void);
94 extern UINT16                   MCI_NextDevID(UINT16 wDevID);
95 extern BOOL                     MCI_DevIDValid(UINT16 wDevID);
96
97 extern MCI_MapType              MCI_MapMsg16To32A(WORD uDevType, WORD wMsg, DWORD* lParam);
98 extern MCI_MapType              MCI_UnMapMsg16To32A(WORD uDevTyp, WORD wMsg, DWORD lParam);
99
100 extern DWORD                    MCI_Open(DWORD dwParam, LPMCI_OPEN_PARMSA lpParms);
101 extern DWORD                    MCI_Close(UINT16 wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms);
102 extern DWORD                    MCI_SysInfo(UINT uDevID, DWORD dwFlags, LPMCI_SYSINFO_PARMSA lpParms);
103
104 typedef LONG                    (*MCIPROC16)(DWORD, HDRVR16, WORD, DWORD, DWORD);
105 typedef LONG                    (*MCIPROC)(DWORD, HDRVR, DWORD, DWORD, DWORD);
106
107 extern WORD                     MCI_GetDevTypeFromString(LPCSTR str);
108 extern LPCSTR                   MCI_GetStringFromDevType(WORD type);
109
110 extern DWORD                    MCI_WriteString(LPSTR lpDstStr, DWORD dstSize, LPCSTR lpSrcStr);
111 extern const char*              MCI_CommandToString(UINT16 wMsg);
112
113 extern int                      mciInstalledCount;
114 extern int                      mciInstalledListLen;
115 extern LPSTR                    lpmciInstallNames;
116
117 extern UINT16           WINAPI  MCI_DefYieldProc(UINT16 wDevID, DWORD data);
118
119 extern LRESULT                  MCI_CleanUp(LRESULT dwRet, UINT wMsg, DWORD dwParam2, BOOL bIs32);
120
121 extern DWORD                    MCI_SendCommandFrom32(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwParam2);
122 extern DWORD                    MCI_SendCommandFrom16(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwParam2);
123 extern DWORD                    MCI_SendCommandAsync(UINT wDevID, UINT wMsg, DWORD dwParam1, DWORD dwParam2, UINT size);
124
125 LONG                            MCIWAVE_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg, 
126                                                    DWORD dwParam1, DWORD dwParam2);
127 LONG                            MCIMIDI_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg, 
128                                                    DWORD dwParam1, DWORD dwParam2);
129 LONG                            MCICDAUDIO_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg, 
130                                                       DWORD dwParam1, DWORD dwParam2);
131 LONG                            MCIANIM_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg, 
132                                                    DWORD dwParam1, DWORD dwParam2);
133 LONG                            MCIAVI_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg, 
134                                                   DWORD dwParam1, DWORD dwParam2);
135
136 HINSTANCE16     WINAPI          mmTaskCreate16(SEGPTR spProc, HINSTANCE16 *lphMmTask, DWORD dwPmt);
137 void            WINAPI          mmTaskBlock16(HINSTANCE16 hInst);
138 LRESULT         WINAPI          mmTaskSignal16(HTASK16 ht);
139 void            WINAPI          mmTaskYield16(void);
140
141 void            WINAPI          WINE_mmThreadEntryPoint(DWORD _pmt);
142 LRESULT         WINAPI          mmThreadCreate16(FARPROC16 fpThreadAddr, LPHANDLE lpHndl, DWORD dwPmt, DWORD dwFlags);
143 void            WINAPI          mmThreadSignal16(HANDLE16 hndl);
144 void            WINAPI          mmThreadBlock16(HANDLE16 hndl);
145 HANDLE16        WINAPI          mmThreadGetTask16(HANDLE16 hndl);
146 BOOL16          WINAPI          mmThreadIsValid16(HANDLE16 hndl);
147 BOOL16          WINAPI          mmThreadIsCurrent16(HANDLE16 hndl);
148
149 #endif /* __WINE_MULTIMEDIA_H */