2 * Wine Drivers functions
4 * Copyright 1994 Martin Ayotte
5 static char Copyright[] = "Copyright Martin Ayotte, 1994";
17 LPDRIVERITEM lpDrvItemList
= NULL
;
19 void LoadStartupDrivers(void)
24 LPSTR file
= "SYSTEM.INI";
25 if (GetPrivateProfileString("drivers", NULL
,
26 "", str
, sizeof(str
), file
) < 2) {
28 "LoadStartupDrivers // can't find drivers section in '%s'\n",
32 while(strlen(ptr
) != 0) {
33 dprintf_driver(stddeb
,"LoadStartupDrivers // str='%s'\n", ptr
);
34 hDrv
= OpenDriver(ptr
, "drivers", 0L);
35 dprintf_driver(stddeb
,
36 "LoadStartupDrivers // hDrv=%04X\n", hDrv
);
37 ptr
+= strlen(ptr
) + 1;
39 dprintf_driver(stddeb
,"LoadStartupDrivers // end of list !\n");
42 /**************************************************************************
43 * SendDriverMessage [USER.251]
45 LRESULT WINAPI
SendDriverMessage(HDRVR hDriver
, WORD msg
, LPARAM lParam1
, LPARAM lParam2
)
47 dprintf_driver(stdnimp
,"SendDriverMessage(%04X, %04X, %08lX, %08lX);\n",
48 hDriver
, msg
, lParam1
, lParam2
);
52 /**************************************************************************
53 * OpenDriver [USER.252]
55 HDRVR
OpenDriver(LPSTR lpDriverName
, LPSTR lpSectionName
, LPARAM lParam
)
58 LPDRIVERITEM lpnewdrv
;
59 LPDRIVERITEM lpdrv
= lpDrvItemList
;
61 dprintf_driver(stddeb
,"OpenDriver('%s', '%s', %08lX);\n",
62 lpDriverName
, lpSectionName
, lParam
);
63 if (lpSectionName
== NULL
) lpSectionName
= "drivers";
64 GetPrivateProfileString(lpSectionName
, lpDriverName
,
65 "", DrvName
, sizeof(DrvName
), "SYSTEM.INI");
66 dprintf_driver(stddeb
,"OpenDriver // DrvName='%s'\n", DrvName
);
67 if (strlen(DrvName
) < 1) return 0;
68 while (lpdrv
!= NULL
) {
69 if (lpdrv
->lpNextItem
== NULL
) break;
70 lpdrv
= lpdrv
->lpNextItem
;
72 hDrvr
= GlobalAlloc(GMEM_MOVEABLE
, sizeof(DRIVERITEM
));
73 lpnewdrv
= (LPDRIVERITEM
) GlobalLock(hDrvr
);
74 if (lpnewdrv
== NULL
) return 0;
75 lpnewdrv
->dis
.length
= sizeof(DRIVERINFOSTRUCT
);
76 lpnewdrv
->dis
.hModule
= 0;
77 /* lpnewdrv->dis.hModule = LoadImage(DrvName, DLL, 0);
78 if (lpnewdrv->dis.hModule == 0) {
83 lpnewdrv
->dis
.hDriver
= hDrvr
;
84 strcpy(lpnewdrv
->dis
.szAliasName
, lpDriverName
);
86 lpnewdrv
->lpNextItem
= NULL
;
87 if (lpDrvItemList
== NULL
|| lpdrv
== NULL
) {
88 lpDrvItemList
= lpnewdrv
;
89 lpnewdrv
->lpPrevItem
= NULL
;
92 lpdrv
->lpNextItem
= lpnewdrv
;
93 lpnewdrv
->lpPrevItem
= lpdrv
;
95 lpnewdrv
->lpDrvProc
= NULL
;
96 dprintf_driver(stddeb
,"OpenDriver // hDrvr=%04X loaded !\n", hDrvr
);
100 /**************************************************************************
101 * CloseDriver [USER.253]
103 LRESULT
CloseDriver(HDRVR hDrvr
, LPARAM lParam1
, LPARAM lParam2
)
106 dprintf_driver(stddeb
,
107 "CloseDriver(%04X, %08lX, %08lX);\n", hDrvr
, lParam1
, lParam2
);
108 lpdrv
= (LPDRIVERITEM
) GlobalLock(hDrvr
);
109 if (lpdrv
!= NULL
&& lpdrv
->dis
.hDriver
== hDrvr
) {
110 if (lpdrv
->lpPrevItem
)
111 ((LPDRIVERITEM
)lpdrv
->lpPrevItem
)->lpNextItem
= lpdrv
->lpNextItem
;
112 if (lpdrv
->lpNextItem
)
113 ((LPDRIVERITEM
)lpdrv
->lpNextItem
)->lpPrevItem
= lpdrv
->lpPrevItem
;
116 dprintf_driver(stddeb
,"CloseDriver // hDrvr=%04X closed !\n", hDrvr
);
122 /**************************************************************************
123 * GetDriverModuleHandle [USER.254]
125 HANDLE
GetDriverModuleHandle(HDRVR hDrvr
)
129 dprintf_driver(stddeb
,"GetDriverModuleHandle(%04X);\n", hDrvr
);
130 lpdrv
= (LPDRIVERITEM
) GlobalLock(hDrvr
);
132 hModule
= lpdrv
->dis
.hModule
;
138 /**************************************************************************
139 * DefDriverProc [USER.255]
141 LRESULT
DefDriverProc(DWORD dwDevID
, HDRVR hDriv
, WORD wMsg
,
142 DWORD dwParam1
, DWORD dwParam2
)
157 case DRV_QUERYCONFIGURE
:
160 MessageBox((HWND
)NULL
, "Driver isn't configurable !",
161 "Wine Driver", MB_OK
);
164 return (LRESULT
)DRVCNF_RESTART
;
166 return (LRESULT
)DRVCNF_RESTART
;
172 /**************************************************************************
173 * GetDriverInfo [USER.256]
175 BOOL
GetDriverInfo(HDRVR hDrvr
, LPDRIVERINFOSTRUCT lpDrvInfo
)
178 dprintf_driver(stddeb
,"GetDriverInfo(%04X, %p);\n", hDrvr
, lpDrvInfo
);
179 if (lpDrvInfo
== NULL
) return FALSE
;
180 lpdrv
= (LPDRIVERITEM
) GlobalLock(hDrvr
);
181 if (lpdrv
== NULL
) return FALSE
;
182 memcpy(lpDrvInfo
, &lpdrv
->dis
, sizeof(DRIVERINFOSTRUCT
));
187 /**************************************************************************
188 * GetNextDriver [USER.257]
190 HDRVR
GetNextDriver(HDRVR hDrvr
, DWORD dwFlags
)
194 dprintf_driver(stddeb
,"GetNextDriver(%04X, %08lX);\n", hDrvr
, dwFlags
);
196 if (lpDrvItemList
== NULL
) {
197 dprintf_driver(stddeb
,
198 "GetNextDriver // drivers list empty !\n");
199 LoadStartupDrivers();
200 if (lpDrvItemList
== NULL
) return 0;
202 dprintf_driver(stddeb
,"GetNextDriver // return first %04X !\n",
203 lpDrvItemList
->dis
.hDriver
);
204 return lpDrvItemList
->dis
.hDriver
;
206 lpdrv
= (LPDRIVERITEM
) GlobalLock(hDrvr
);
208 if (dwFlags
& GND_REVERSE
) {
209 if (lpdrv
->lpPrevItem
)
210 hRetDrv
= ((LPDRIVERITEM
)lpdrv
->lpPrevItem
)->dis
.hDriver
;
213 if (lpdrv
->lpNextItem
)
214 hRetDrv
= ((LPDRIVERITEM
)lpdrv
->lpNextItem
)->dis
.hDriver
;
218 dprintf_driver(stddeb
,"GetNextDriver // return %04X !\n", hRetDrv
);