4 * Copyright 1998 Patrik Stridvall
18 /**********************************************************************/
20 HANDLE32 MSACM_hHeap32 = (HANDLE32) NULL;
21 PWINE_ACMDRIVERID32 MSACM_pFirstACMDriverID32 = NULL;
22 PWINE_ACMDRIVERID32 MSACM_pLastACMDriverID32 = NULL;
24 /***********************************************************************
25 * MSACM_RegisterDriver32()
27 PWINE_ACMDRIVERID32 MSACM_RegisterDriver32(
28 LPSTR pszDriverAlias, LPSTR pszFileName,
29 PWINE_ACMLOCALDRIVER32 pLocalDriver)
31 PWINE_ACMDRIVERID32 padid;
32 padid = (PWINE_ACMDRIVERID32) HeapAlloc(
33 MSACM_hHeap32, 0, sizeof(WINE_ACMDRIVERID32)
35 padid->pszDriverAlias =
36 HEAP_strdupA(MSACM_hHeap32, 0, pszDriverAlias);
38 HEAP_strdupA(MSACM_hHeap32, 0, pszFileName);
39 padid->pACMLocalDriver = pLocalDriver;
40 padid->bEnabled = TRUE;
41 padid->pACMDriver = NULL;
42 padid->pNextACMDriverID = NULL;
43 padid->pPreviousACMDriverID =
44 MSACM_pLastACMDriverID32;
45 MSACM_pLastACMDriverID32 = padid;
46 if(!MSACM_pFirstACMDriverID32)
47 MSACM_pFirstACMDriverID32 = padid;
52 /***********************************************************************
53 * MSACM_RegisterAllDrivers32()
55 void MSACM_RegisterAllDrivers32()
57 PWINE_ACMBUILTINDRIVER32 pbd;
62 * What if the user edits system.ini while the program is running?
63 * Does Windows handle that?
65 if(!MSACM_pFirstACMDriverID32)
68 /* FIXME: Do not work! How do I determine the section length? */
70 GetPrivateProfileSection32A("drivers32", NULL, 0, "system.ini");
72 pszBuffer = (LPSTR) HeapAlloc(
73 MSACM_hHeap32, 0, dwBufferLength
75 if(GetPrivateProfileSection32A(
76 "drivers32", pszBuffer, dwBufferLength, "system.ini"))
81 if(!lstrncmpi32A("MSACM.", s, 6))
84 while(*s2 != '\0' && *s2 != '=') s2++;
88 MSACM_RegisterDriver32(s, s2, NULL);
91 s += lstrlen32A(s) + 1; /* Either next char or \0 */
96 * Check if any of the builtin driver was added
97 * when the external drivers was.
100 pbd = MSACM_BuiltinDrivers32;
101 while(pbd->pszDriverAlias)
103 PWINE_ACMLOCALDRIVER32 pld;
104 pld = HeapAlloc(MSACM_hHeap32, 0, sizeof(WINE_ACMLOCALDRIVER32));
105 pld->pfnDriverProc = pbd->pfnDriverProc;
106 MSACM_RegisterDriver32(pbd->pszDriverAlias, NULL, pld);
109 HeapFree(MSACM_hHeap32, 0, pszBuffer);
112 /***********************************************************************
113 * MSACM_UnregisterDriver32()
115 PWINE_ACMDRIVERID32 MSACM_UnregisterDriver32(PWINE_ACMDRIVERID32 p)
117 PWINE_ACMDRIVERID32 pNextACMDriverID;
120 acmDriverClose32((HACMDRIVER32) p->pACMDriver, 0);
122 if(p->pszDriverAlias)
123 HeapFree(MSACM_hHeap32, 0, p->pszDriverAlias);
125 HeapFree(MSACM_hHeap32, 0, p->pszFileName);
126 if(p->pACMLocalDriver)
127 HeapFree(MSACM_hHeap32, 0, p->pACMLocalDriver);
129 if(p->pPreviousACMDriverID)
130 p->pPreviousACMDriverID->pNextACMDriverID = p->pNextACMDriverID;
131 if(p->pNextACMDriverID)
132 p->pNextACMDriverID->pPreviousACMDriverID = p->pPreviousACMDriverID;
134 pNextACMDriverID = p->pNextACMDriverID;
136 HeapFree(MSACM_hHeap32, 0, p);
138 return pNextACMDriverID;
141 /***********************************************************************
142 * MSACM_UnregisterAllDrivers32()
144 * Where should this function be called?
146 void MSACM_UnregisterAllDrivers32()
148 PWINE_ACMDRIVERID32 p = MSACM_pFirstACMDriverID32;
149 while(p) p = MSACM_UnregisterDriver32(p);
152 /***********************************************************************
153 * MSACM_GetDriverID32()
155 PWINE_ACMDRIVERID32 MSACM_GetDriverID32(HACMDRIVERID32 hDriverID)
157 return (PWINE_ACMDRIVERID32) hDriverID;
160 /***********************************************************************
161 * MSACM_GetDriver32()
163 PWINE_ACMDRIVER32 MSACM_GetDriver32(HACMDRIVER32 hDriver)
165 return (PWINE_ACMDRIVER32) hDriver;
168 /***********************************************************************
171 PWINE_ACMOBJ32 MSACM_GetObj32(HACMOBJ32 hObj)
173 return (PWINE_ACMOBJ32) hObj;
176 /***********************************************************************
177 * MSACM_OpenDriverProc32
179 * This function should be integrated with OpenDriver,
180 * renamed and moved there.
182 HDRVR32 MSACM_OpenDriverProc32(DRIVERPROC32 pfnDriverProc)
185 LPDRIVERITEM32A pDrvr;
187 /* FIXME: This is a very bad solution */
188 pDrvr = (LPDRIVERITEM32A) HeapAlloc(MSACM_hHeap32, HEAP_ZERO_MEMORY, sizeof(DRIVERITEM32A));
190 pDrvr->driverproc = pfnDriverProc;
192 /* FIXME: Send DRV_OPEN among others to DriverProc */
194 return (HDRVR32) pDrvr;