4 * Copyright 1998 Patrik Stridvall
15 #include "debugtools.h"
17 /**********************************************************************/
19 HANDLE MSACM_hHeap
= (HANDLE
) NULL
;
20 PWINE_ACMDRIVERID MSACM_pFirstACMDriverID
= NULL
;
21 PWINE_ACMDRIVERID MSACM_pLastACMDriverID
= NULL
;
23 /***********************************************************************
24 * MSACM_RegisterDriver32()
26 PWINE_ACMDRIVERID
MSACM_RegisterDriver(
27 LPSTR pszDriverAlias
, LPSTR pszFileName
,
28 PWINE_ACMLOCALDRIVER pLocalDriver
)
30 PWINE_ACMDRIVERID padid
;
31 padid
= (PWINE_ACMDRIVERID
) HeapAlloc(
32 MSACM_hHeap
, 0, sizeof(WINE_ACMDRIVERID
)
34 padid
->pszDriverAlias
=
35 HEAP_strdupA(MSACM_hHeap
, 0, pszDriverAlias
);
37 HEAP_strdupA(MSACM_hHeap
, 0, pszFileName
);
38 padid
->pACMLocalDriver
= pLocalDriver
;
39 padid
->bEnabled
= TRUE
;
40 padid
->pACMDriver
= NULL
;
41 padid
->pNextACMDriverID
= NULL
;
42 padid
->pPreviousACMDriverID
=
43 MSACM_pLastACMDriverID
;
44 MSACM_pLastACMDriverID
= padid
;
45 if(!MSACM_pFirstACMDriverID
)
46 MSACM_pFirstACMDriverID
= padid
;
51 /***********************************************************************
52 * MSACM_RegisterAllDrivers32()
54 void MSACM_RegisterAllDrivers()
56 PWINE_ACMBUILTINDRIVER pbd
;
61 * What if the user edits system.ini while the program is running?
62 * Does Windows handle that?
64 if(!MSACM_pFirstACMDriverID
)
67 /* FIXME: Do not work! How do I determine the section length? */
69 GetPrivateProfileSectionA("drivers32", NULL
, 0, "system.ini");
71 pszBuffer
= (LPSTR
) HeapAlloc(
72 MSACM_hHeap
, 0, dwBufferLength
74 if(GetPrivateProfileSectionA(
75 "drivers32", pszBuffer
, dwBufferLength
, "system.ini"))
80 if(!lstrncmpiA("MSACM.", s
, 6))
83 while(*s2
!= '\0' && *s2
!= '=') s2
++;
87 MSACM_RegisterDriver(s
, s2
, NULL
);
90 s
+= lstrlenA(s
) + 1; /* Either next char or \0 */
95 * Check if any of the builtin driver was added
96 * when the external drivers was.
99 pbd
= MSACM_BuiltinDrivers
;
100 while(pbd
->pszDriverAlias
)
102 PWINE_ACMLOCALDRIVER pld
;
103 pld
= HeapAlloc(MSACM_hHeap
, 0, sizeof(WINE_ACMLOCALDRIVER
));
104 pld
->pfnDriverProc
= pbd
->pfnDriverProc
;
105 MSACM_RegisterDriver(pbd
->pszDriverAlias
, NULL
, pld
);
108 HeapFree(MSACM_hHeap
, 0, pszBuffer
);
111 /***********************************************************************
112 * MSACM_UnregisterDriver32()
114 PWINE_ACMDRIVERID
MSACM_UnregisterDriver(PWINE_ACMDRIVERID p
)
116 PWINE_ACMDRIVERID pNextACMDriverID
;
119 acmDriverClose((HACMDRIVER
) p
->pACMDriver
, 0);
121 if(p
->pszDriverAlias
)
122 HeapFree(MSACM_hHeap
, 0, p
->pszDriverAlias
);
124 HeapFree(MSACM_hHeap
, 0, p
->pszFileName
);
125 if(p
->pACMLocalDriver
)
126 HeapFree(MSACM_hHeap
, 0, p
->pACMLocalDriver
);
128 if(p
->pPreviousACMDriverID
)
129 p
->pPreviousACMDriverID
->pNextACMDriverID
= p
->pNextACMDriverID
;
130 if(p
->pNextACMDriverID
)
131 p
->pNextACMDriverID
->pPreviousACMDriverID
= p
->pPreviousACMDriverID
;
133 pNextACMDriverID
= p
->pNextACMDriverID
;
135 HeapFree(MSACM_hHeap
, 0, p
);
137 return pNextACMDriverID
;
140 /***********************************************************************
141 * MSACM_UnregisterAllDrivers32()
143 * Where should this function be called?
145 void MSACM_UnregisterAllDrivers()
147 PWINE_ACMDRIVERID p
= MSACM_pFirstACMDriverID
;
148 while(p
) p
= MSACM_UnregisterDriver(p
);
151 /***********************************************************************
152 * MSACM_GetDriverID32()
154 PWINE_ACMDRIVERID
MSACM_GetDriverID(HACMDRIVERID hDriverID
)
156 return (PWINE_ACMDRIVERID
) hDriverID
;
159 /***********************************************************************
160 * MSACM_GetDriver32()
162 PWINE_ACMDRIVER
MSACM_GetDriver(HACMDRIVER hDriver
)
164 return (PWINE_ACMDRIVER
) hDriver
;
167 /***********************************************************************
170 PWINE_ACMOBJ
MSACM_GetObj(HACMOBJ hObj
)
172 return (PWINE_ACMOBJ
) hObj
;
175 /***********************************************************************
176 * MSACM_OpenDriverProc32
178 * This function should be integrated with OpenDriver,
179 * renamed and moved there.
181 HDRVR
MSACM_OpenDriverProc(DRIVERPROC pfnDriverProc
)
186 /* FIXME: This is a very bad solution */
187 pDrvr
= (LPDRIVERITEMA
) HeapAlloc(MSACM_hHeap
, HEAP_ZERO_MEMORY
, sizeof(DRIVERITEMA
));
189 pDrvr
->driverproc
= pfnDriverProc
;
191 /* FIXME: Send DRV_OPEN among others to DriverProc */
193 return (HDRVR
) pDrvr
;