blob: a3e4975cc0c3a1eca0a6f2b4fa82a72103d63f7f [file] [log] [blame]
Alexandre Julliard58199531994-04-21 01:20:00 +00001/*
2 * Wine Drivers functions
3 *
4 * Copyright 1994 Martin Ayotte
5 */
6
7static char Copyright[] = "Copyright Martin Ayotte, 1994";
8
9#include "stdio.h"
10#include "windows.h"
11#include "win.h"
12#include "user.h"
13#include "driver.h"
14
15LPDRIVERITEM lpDrvItemList = NULL;
16
17/**************************************************************************
18 * SendDriverMessage [USER.251]
19 */
20LRESULT WINAPI SendDriverMessage(HDRVR hDriver, WORD msg, LPARAM lParam1, LPARAM lParam2)
21{
22 printf("SendDriverMessage(%04X, %04X, %08X, %08X);\n",
23 hDriver, msg, lParam1, lParam2);
24}
25
26/**************************************************************************
27 * OpenDriver [USER.252]
28 */
29HDRVR OpenDriver(LPSTR lpDriverName, LPSTR lpSectionName, LPARAM lParam)
30{
31 HDRVR hDrvr;
32 LPDRIVERITEM lpnewdrv;
33 LPDRIVERITEM lpdrv = lpDrvItemList;
34 char DrvName[128];
35 printf("OpenDriver('%s', '%s', %08X);\n",
36 lpDriverName, lpSectionName, lParam);
37 if (lpSectionName == NULL) lpSectionName = "drivers";
38 GetPrivateProfileString(lpSectionName, lpDriverName,
39 "", DrvName, sizeof(DrvName), "SYSTEM.INI");
40 printf("OpenDriver // DrvName='%s'\n", DrvName);
41 if (strlen(DrvName) < 1) return 0;
42 while (lpdrv != NULL) {
43 if (lpdrv->lpNextItem == NULL) break;
44 lpdrv = lpdrv->lpNextItem;
45 }
46 hDrvr = GlobalAlloc(GMEM_MOVEABLE, sizeof(DRIVERITEM));
47 lpnewdrv = (LPDRIVERITEM) GlobalLock(hDrvr);
48 if (lpnewdrv == NULL) return 0;
49 lpnewdrv->dis.length = sizeof(DRIVERINFOSTRUCT);
50 lpnewdrv->dis.hModule = LoadImage("DrvName", DLL);
51 if (lpnewdrv->dis.hModule == 0) {
52 GlobalUnlock(hDrvr);
53 GlobalFree(hDrvr);
54 return 0;
55 }
56 lpnewdrv->dis.hDriver = hDrvr;
57 strcpy(lpnewdrv->dis.szAliasName, lpDriverName);
58 lpnewdrv->count = 0;
59 lpnewdrv->lpNextItem = NULL;
60 if (lpDrvItemList == NULL || lpdrv == NULL) {
61 lpDrvItemList = lpnewdrv;
62 lpnewdrv->lpPrevItem = NULL;
63 }
64 else {
65 lpdrv->lpNextItem = lpnewdrv;
66 lpnewdrv->lpPrevItem = lpdrv;
67 }
68 lpnewdrv->lpDrvProc = NULL;
69 printf("OpenDriver // hDrvr=%04X loaded !\n", hDrvr);
70 return hDrvr;
71}
72
73/**************************************************************************
74 * CloseDriver [USER.253]
75 */
76LRESULT CloseDriver(HDRVR hDrvr, LPARAM lParam1, LPARAM lParam2)
77{
78 LPDRIVERITEM lpdrv;
79 printf("CloseDriver(%04X, %08X, %08X);\n", hDrvr, lParam1, lParam2);
80 lpdrv = (LPDRIVERITEM) GlobalLock(hDrvr);
81 if (lpdrv != NULL && lpdrv->dis.hDriver == hDrvr) {
82 if (lpdrv->lpPrevItem)
83 ((LPDRIVERITEM)lpdrv->lpPrevItem)->lpNextItem = lpdrv->lpNextItem;
84 if (lpdrv->lpNextItem)
85 ((LPDRIVERITEM)lpdrv->lpNextItem)->lpPrevItem = lpdrv->lpPrevItem;
86 GlobalUnlock(hDrvr);
87 GlobalFree(hDrvr);
88 printf("CloseDriver // hDrvr=%04X closed !\n", hDrvr);
89 return TRUE;
90 }
91 return FALSE;
92}
93
94/**************************************************************************
95 * GetDriverModuleHandle [USER.254]
96 */
97HANDLE GetDriverModuleHandle(HDRVR hDrvr)
98{
99 LPDRIVERITEM lpdrv;
100 HANDLE hModule = 0;
101 printf("GetDriverModuleHandle(%04X);\n", hDrvr);
102 lpdrv = (LPDRIVERITEM) GlobalLock(hDrvr);
103 if (lpdrv != NULL) {
104 hModule = lpdrv->dis.hModule;
105 GlobalUnlock(hDrvr);
106 }
107 return hModule;
108}
109
110/**************************************************************************
111 * DefDriverProc [USER.255]
112 */
113LRESULT DefDriverProc(DWORD dwDevID, HDRVR hDriv, WORD wMsg,
114 DWORD dwParam1, DWORD dwParam2)
115{
116 switch(wMsg) {
117 case DRV_LOAD:
118 return (LRESULT)0L;
119 case DRV_FREE:
120 return (LRESULT)0L;
121 case DRV_OPEN:
122 return (LRESULT)0L;
123 case DRV_CLOSE:
124 return (LRESULT)0L;
125 case DRV_ENABLE:
126 return (LRESULT)0L;
127 case DRV_DISABLE:
128 return (LRESULT)0L;
129 case DRV_QUERYCONFIGURE:
130 return (LRESULT)0L;
131 case DRV_CONFIGURE:
132 MessageBox((HWND)NULL, "Driver isn't configurable !",
133 "Wine Driver", MB_OK);
134 return (LRESULT)0L;
135 case DRV_INSTALL:
136 return (LRESULT)DRVCNF_RESTART;
137 case DRV_REMOVE:
138 return (LRESULT)DRVCNF_RESTART;
139 default:
140 return (LRESULT)0L;
141 }
142}
143
144/**************************************************************************
145 * GetDriverInfo [USER.256]
146 */
147BOOL GetDriverInfo(HDRVR hDrvr, LPDRIVERINFOSTRUCT lpDrvInfo)
148{
149 LPDRIVERITEM lpdrv;
150 printf("GetDriverInfo(%04X, %08X);\n", hDrvr, lpDrvInfo);
151 if (lpDrvInfo == NULL) return FALSE;
152 lpdrv = (LPDRIVERITEM) GlobalLock(hDrvr);
153 if (lpdrv == NULL) return FALSE;
154 memcpy(lpDrvInfo, &lpdrv->dis, sizeof(DRIVERINFOSTRUCT));
155 GlobalUnlock(hDrvr);
156 return TRUE;
157}
158
159/**************************************************************************
160 * GetNextDriver [USER.257]
161 */
162HDRVR GetNextDriver(HDRVR hDrvr, DWORD dwFlags)
163{
164 LPDRIVERITEM lpdrv;
165 HDRVR hRetDrv = 0;
166 printf("GetNextDriver(%04X, %08X);\n", hDrvr, dwFlags);
167 lpdrv = (LPDRIVERITEM) GlobalLock(hDrvr);
168 if (lpdrv != NULL) {
169 if (dwFlags & GND_REVERSE)
170 if (lpdrv->lpPrevItem)
171 hRetDrv = ((LPDRIVERITEM)lpdrv->lpPrevItem)->dis.hDriver;
172 if (dwFlags & GND_FORWARD)
173 if (lpdrv->lpNextItem)
174 hRetDrv = ((LPDRIVERITEM)lpdrv->lpNextItem)->dis.hDriver;
175 GlobalUnlock(hDrvr);
176 }
177 return hRetDrv;
178
179}
180
181