2 * Wine Drivers functions
4 * Copyright 1994 Martin Ayotte
5 static char Copyright[] = "Copyright Martin Ayotte, 1994";
16 LPDRIVERITEM lpDrvItemList
= NULL
;
18 void LoadStartupDrivers(void)
23 LPSTR file
= "SYSTEM.INI";
24 if (GetPrivateProfileString("drivers", NULL
,
25 "", str
, sizeof(str
), file
) < 2) {
27 "LoadStartupDrivers // can't find drivers section in '%s'\n",
31 while(strlen(ptr
) != 0) {
32 dprintf_driver(stddeb
,"LoadStartupDrivers // str='%s'\n", ptr
);
33 hDrv
= OpenDriver(ptr
, "drivers", 0L);
34 dprintf_driver(stddeb
,
35 "LoadStartupDrivers // hDrv=%04x\n", hDrv
);
36 ptr
+= strlen(ptr
) + 1;
38 dprintf_driver(stddeb
,"LoadStartupDrivers // end of list !\n");
41 /**************************************************************************
42 * SendDriverMessage [USER.251]
44 LRESULT
SendDriverMessage(HDRVR hDriver
, WORD msg
, LPARAM lParam1
, LPARAM lParam2
)
46 dprintf_driver(stdnimp
,"SendDriverMessage(%04x, %04X, %08lX, %08lX);\n",
47 hDriver
, msg
, lParam1
, lParam2
);
51 /**************************************************************************
52 * OpenDriver [USER.252]
54 HDRVR
OpenDriver(LPSTR lpDriverName
, LPSTR lpSectionName
, LPARAM lParam
)
57 LPDRIVERITEM lpnewdrv
;
58 LPDRIVERITEM lpdrv
= lpDrvItemList
;
60 dprintf_driver(stddeb
,"OpenDriver('%s', '%s', %08lX);\n",
61 lpDriverName
, lpSectionName
, lParam
);
62 if (lpSectionName
== NULL
) lpSectionName
= "drivers";
63 GetPrivateProfileString(lpSectionName
, lpDriverName
,
64 "", DrvName
, sizeof(DrvName
), "SYSTEM.INI");
65 dprintf_driver(stddeb
,"OpenDriver // DrvName='%s'\n", DrvName
);
66 if (strlen(DrvName
) < 1) return 0;
67 while (lpdrv
!= NULL
) {
68 if (lpdrv
->lpNextItem
== NULL
) break;
69 lpdrv
= lpdrv
->lpNextItem
;
71 hDrvr
= GlobalAlloc16(GMEM_MOVEABLE
, sizeof(DRIVERITEM
));
72 lpnewdrv
= (LPDRIVERITEM
) GlobalLock16(hDrvr
);
73 if (lpnewdrv
== NULL
) return 0;
74 lpnewdrv
->dis
.length
= sizeof(DRIVERINFOSTRUCT
);
75 lpnewdrv
->dis
.hModule
= 0;
76 /* lpnewdrv->dis.hModule = LoadImage(DrvName, DLL, 0);
77 if (lpnewdrv->dis.hModule == 0) {
82 lpnewdrv
->dis
.hDriver
= hDrvr
;
83 strcpy(lpnewdrv
->dis
.szAliasName
, lpDriverName
);
85 lpnewdrv
->lpNextItem
= NULL
;
86 if (lpDrvItemList
== NULL
|| lpdrv
== NULL
) {
87 lpDrvItemList
= lpnewdrv
;
88 lpnewdrv
->lpPrevItem
= NULL
;
91 lpdrv
->lpNextItem
= lpnewdrv
;
92 lpnewdrv
->lpPrevItem
= lpdrv
;
94 lpnewdrv
->lpDrvProc
= (DRIVERPROC
)NULL
;
95 dprintf_driver(stddeb
,"OpenDriver // hDrvr=%04x loaded !\n", hDrvr
);
99 /**************************************************************************
100 * CloseDriver [USER.253]
102 LRESULT
CloseDriver(HDRVR hDrvr
, LPARAM lParam1
, LPARAM lParam2
)
105 dprintf_driver(stddeb
,
106 "CloseDriver(%04x, %08lX, %08lX);\n", hDrvr
, lParam1
, lParam2
);
107 lpdrv
= (LPDRIVERITEM
) GlobalLock16(hDrvr
);
108 if (lpdrv
!= NULL
&& lpdrv
->dis
.hDriver
== hDrvr
) {
109 if (lpdrv
->lpPrevItem
)
110 ((LPDRIVERITEM
)lpdrv
->lpPrevItem
)->lpNextItem
= lpdrv
->lpNextItem
;
111 if (lpdrv
->lpNextItem
)
112 ((LPDRIVERITEM
)lpdrv
->lpNextItem
)->lpPrevItem
= lpdrv
->lpPrevItem
;
113 GlobalUnlock16(hDrvr
);
115 dprintf_driver(stddeb
,"CloseDriver // hDrvr=%04x closed !\n", hDrvr
);
121 /**************************************************************************
122 * GetDriverModuleHandle [USER.254]
124 HANDLE
GetDriverModuleHandle(HDRVR hDrvr
)
128 dprintf_driver(stddeb
,"GetDriverModuleHandle(%04x);\n", hDrvr
);
129 lpdrv
= (LPDRIVERITEM
) GlobalLock16(hDrvr
);
131 hModule
= lpdrv
->dis
.hModule
;
132 GlobalUnlock16(hDrvr
);
137 /**************************************************************************
138 * DefDriverProc [USER.255]
140 LRESULT
DefDriverProc(DWORD dwDevID
, HDRVR hDriv
, WORD wMsg
,
141 DWORD dwParam1
, DWORD dwParam2
)
156 case DRV_QUERYCONFIGURE
:
159 MessageBox((HWND
)NULL
, "Driver isn't configurable !",
160 "Wine Driver", MB_OK
);
163 return (LRESULT
)DRVCNF_RESTART
;
165 return (LRESULT
)DRVCNF_RESTART
;
171 /**************************************************************************
172 * GetDriverInfo [USER.256]
174 BOOL
GetDriverInfo(HDRVR hDrvr
, LPDRIVERINFOSTRUCT lpDrvInfo
)
177 dprintf_driver(stddeb
,"GetDriverInfo(%04x, %p);\n", hDrvr
, lpDrvInfo
);
178 if (lpDrvInfo
== NULL
) return FALSE
;
179 lpdrv
= (LPDRIVERITEM
) GlobalLock16(hDrvr
);
180 if (lpdrv
== NULL
) return FALSE
;
181 memcpy(lpDrvInfo
, &lpdrv
->dis
, sizeof(DRIVERINFOSTRUCT
));
182 GlobalUnlock16(hDrvr
);
186 /**************************************************************************
187 * GetNextDriver [USER.257]
189 HDRVR
GetNextDriver(HDRVR hDrvr
, DWORD dwFlags
)
193 dprintf_driver(stddeb
,"GetNextDriver(%04x, %08lX);\n", hDrvr
, dwFlags
);
195 if (lpDrvItemList
== NULL
) {
196 dprintf_driver(stddeb
,
197 "GetNextDriver // drivers list empty !\n");
198 LoadStartupDrivers();
199 if (lpDrvItemList
== NULL
) return 0;
201 dprintf_driver(stddeb
,"GetNextDriver // return first %04x !\n",
202 lpDrvItemList
->dis
.hDriver
);
203 return lpDrvItemList
->dis
.hDriver
;
205 lpdrv
= (LPDRIVERITEM
) GlobalLock16(hDrvr
);
207 if (dwFlags
& GND_REVERSE
) {
208 if (lpdrv
->lpPrevItem
)
209 hRetDrv
= ((LPDRIVERITEM
)lpdrv
->lpPrevItem
)->dis
.hDriver
;
212 if (lpdrv
->lpNextItem
)
213 hRetDrv
= ((LPDRIVERITEM
)lpdrv
->lpNextItem
)->dis
.hDriver
;
215 GlobalUnlock16(hDrvr
);
217 dprintf_driver(stddeb
,"GetNextDriver // return %04x !\n", hRetDrv
);