Set the default view button to List in the FileDialog.
[wine] / dlls / msacm32 / internal.c
1 /*
2  *      MSACM32 library
3  *
4  *      Copyright 1998  Patrik Stridvall
5  */
6
7 #include <string.h>
8
9 #include "winbase.h"
10 #include "winuser.h"
11 #include "winerror.h"
12 #include "driver.h"
13 #include "heap.h"
14 #include "mmsystem.h"
15 #include "msacm.h"
16 #include "msacmdrv.h"
17 #include "debugtools.h"
18
19 /**********************************************************************/
20
21 HANDLE MSACM_hHeap = (HANDLE) NULL;
22 PWINE_ACMDRIVERID MSACM_pFirstACMDriverID = NULL;
23 PWINE_ACMDRIVERID MSACM_pLastACMDriverID = NULL;
24
25 /***********************************************************************
26  *           MSACM_RegisterDriver32() 
27  */
28 PWINE_ACMDRIVERID MSACM_RegisterDriver(
29   LPSTR pszDriverAlias, LPSTR pszFileName,
30   PWINE_ACMLOCALDRIVER pLocalDriver)
31 {
32   PWINE_ACMDRIVERID padid;
33   padid = (PWINE_ACMDRIVERID) HeapAlloc(
34     MSACM_hHeap, 0, sizeof(WINE_ACMDRIVERID)
35   );
36   padid->pszDriverAlias = 
37     HEAP_strdupA(MSACM_hHeap, 0, pszDriverAlias);
38   padid->pszFileName = 
39     HEAP_strdupA(MSACM_hHeap, 0, pszFileName);
40   padid->pACMLocalDriver = pLocalDriver; 
41   padid->bEnabled = TRUE;
42   padid->pACMDriver = NULL;
43   padid->pNextACMDriverID = NULL;
44   padid->pPreviousACMDriverID = 
45     MSACM_pLastACMDriverID;
46   MSACM_pLastACMDriverID = padid;
47   if(!MSACM_pFirstACMDriverID)
48     MSACM_pFirstACMDriverID = padid;
49
50   return padid;
51 }
52
53 /***********************************************************************
54  *           MSACM_RegisterAllDrivers32() 
55  */
56 void MSACM_RegisterAllDrivers()
57 {
58   PWINE_ACMBUILTINDRIVER pbd;
59   LPSTR pszBuffer;
60   DWORD dwBufferLength;
61
62   /* FIXME 
63    *  What if the user edits system.ini while the program is running?
64    *  Does Windows handle that?
65    */
66   if(!MSACM_pFirstACMDriverID)
67     return;
68
69   /* FIXME: Do not work! How do I determine the section length? */
70   dwBufferLength = 
71     GetPrivateProfileSectionA("drivers32", NULL, 0, "system.ini");
72
73   pszBuffer = (LPSTR) HeapAlloc(
74     MSACM_hHeap, 0, dwBufferLength
75   );
76   if(GetPrivateProfileSectionA(
77     "drivers32", pszBuffer, dwBufferLength, "system.ini"))
78     {
79       char *s = pszBuffer;
80       while(*s)
81         {
82           if(!lstrncmpiA("MSACM.", s, 6))
83             {
84               char *s2 = s;
85               while(*s2 != '\0' && *s2 != '=') s2++;
86               if(*s2)
87                 {
88                   *s2++='\0';
89                   MSACM_RegisterDriver(s, s2, NULL);
90                 }
91             }  
92           s += lstrlenA(s) + 1; /* Either next char or \0 */
93         }
94     }
95
96   /* FIXME
97    *   Check if any of the builtin driver was added
98    *   when the external drivers was. 
99    */
100
101   pbd = MSACM_BuiltinDrivers;
102   while(pbd->pszDriverAlias)
103     {
104       PWINE_ACMLOCALDRIVER pld;
105       pld = HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMLOCALDRIVER));
106       pld->pfnDriverProc = pbd->pfnDriverProc;
107       MSACM_RegisterDriver(pbd->pszDriverAlias, NULL, pld);
108       pbd++;
109     }
110    HeapFree(MSACM_hHeap, 0, pszBuffer);
111 }
112
113 /***********************************************************************
114  *           MSACM_UnregisterDriver32()
115  */
116 PWINE_ACMDRIVERID MSACM_UnregisterDriver(PWINE_ACMDRIVERID p)
117 {
118   PWINE_ACMDRIVERID pNextACMDriverID;
119
120   if(p->pACMDriver)
121     acmDriverClose((HACMDRIVER) p->pACMDriver, 0);
122
123   if(p->pszDriverAlias)
124     HeapFree(MSACM_hHeap, 0, p->pszDriverAlias);
125   if(p->pszFileName)
126     HeapFree(MSACM_hHeap, 0, p->pszFileName);
127   if(p->pACMLocalDriver)
128     HeapFree(MSACM_hHeap, 0, p->pACMLocalDriver);
129
130   if(p->pPreviousACMDriverID)
131     p->pPreviousACMDriverID->pNextACMDriverID = p->pNextACMDriverID;
132   if(p->pNextACMDriverID)
133     p->pNextACMDriverID->pPreviousACMDriverID = p->pPreviousACMDriverID;
134
135   pNextACMDriverID = p->pNextACMDriverID;
136
137   HeapFree(MSACM_hHeap, 0, p);
138
139   return pNextACMDriverID;
140 }
141
142 /***********************************************************************
143  *           MSACM_UnregisterAllDrivers32()
144  * FIXME
145  *   Where should this function be called?
146  */
147 void MSACM_UnregisterAllDrivers()
148 {
149   PWINE_ACMDRIVERID p = MSACM_pFirstACMDriverID;
150   while(p) p = MSACM_UnregisterDriver(p);
151 }
152
153 /***********************************************************************
154  *           MSACM_GetDriverID32() 
155  */
156 PWINE_ACMDRIVERID MSACM_GetDriverID(HACMDRIVERID hDriverID)
157 {
158   return (PWINE_ACMDRIVERID) hDriverID;
159 }
160
161 /***********************************************************************
162  *           MSACM_GetDriver32()
163  */
164 PWINE_ACMDRIVER MSACM_GetDriver(HACMDRIVER hDriver)
165 {
166   return (PWINE_ACMDRIVER) hDriver;
167 }
168
169 /***********************************************************************
170  *           MSACM_GetObj32()
171  */
172 PWINE_ACMOBJ MSACM_GetObj(HACMOBJ hObj)
173 {
174   return (PWINE_ACMOBJ) hObj;
175 }
176
177 /***********************************************************************
178  *           MSACM_OpenDriverProc32
179  * FIXME
180  *  This function should be integrated with OpenDriver,
181  *  renamed and moved there.
182  */
183 HDRVR MSACM_OpenDriverProc(DRIVERPROC pfnDriverProc)
184 {
185 #if 0
186   LPDRIVERITEMA pDrvr;
187
188   /* FIXME: This is a very bad solution */
189   pDrvr = (LPDRIVERITEMA) HeapAlloc(MSACM_hHeap, HEAP_ZERO_MEMORY, sizeof(DRIVERITEMA));
190   pDrvr->count = 1;
191   pDrvr->driverproc = pfnDriverProc;
192   
193   /* FIXME: Send DRV_OPEN among others to DriverProc */
194
195   return (HDRVR) pDrvr;
196 #else
197   return (HDRVR) 0;
198 #endif
199 }
200
201
202