source: contrib/installer/install/uniinst.cpp@ 406

Last change on this file since 406 was 406, checked in by Brendan Oakley, 17 years ago

New install/uninstall src, from Lars

  • Property svn:eol-style set to native
File size: 8.7 KB
Line 
1/********************************************************/
2/* For how to write an minstall installation DLL see */
3/* "Multimedia Subsystem Programming Guide" */
4/* -> Installation Requirements */
5/* -> Writing an Installation DLL */
6/********************************************************/
7
8#define INCL_BASE
9#define INCL_PM
10#include <os2.h>
11#include <minstall.h>
12
13#define INCL_OS2MM
14#include <os2me.h>
15
16#include <stdlib.h>
17#include <stdio.h>
18#include <string.h>
19
20char lineBuffer[1024]={0};
21char errBuf[1024]={0};
22char retBuf[MAX_DEVICE_NAME]={0};
23
24void DeleteDevices(HWND hwndMinstallHandle,ULONG ulDevType,PSZ devInstallName)
25{
26 INSTMCISENDCOMMAND cmd;
27 MCI_SYSINFO_PARMS sysParms;
28 ULONG res = NO_ERROR;
29
30 memset(&cmd,0,sizeof(cmd));
31 memset(&sysParms,0,sizeof(sysParms));
32 cmd.wMessage = MCI_SYSINFO;
33 cmd.dwParam1 = MCI_SYSINFO_QUANTITY|MCI_WAIT;
34 cmd.dwParam2 = (ULONG)&sysParms;
35
36 sysParms.usDeviceType = ulDevType;
37 sysParms.pszReturn = retBuf;
38 sysParms.ulRetSize = sizeof(retBuf);
39
40 res = LONGFROMMR(WinSendMsg(hwndMinstallHandle,IM_MCI_SEND_COMMAND,MPVOID,MPFROMP(&cmd)));
41 if (res == NO_ERROR)
42 {
43 ULONG i;
44 ULONG res2 = NO_ERROR;
45 ULONG ulNumDevices = atoi(sysParms.pszReturn);
46 for (i=0;i<ulNumDevices;i++)
47 {
48 memset(&cmd,0,sizeof(cmd));
49 memset(&sysParms,0,sizeof(sysParms));
50 cmd.wMessage = MCI_SYSINFO;
51 cmd.dwParam1 = MCI_SYSINFO_INSTALLNAME|MCI_WAIT;
52 cmd.dwParam2 = (ULONG)&sysParms;
53
54 sysParms.usDeviceType = ulDevType;
55 sysParms.ulNumber = i;
56 sysParms.pszReturn = retBuf;
57 sysParms.ulRetSize = sizeof(retBuf);
58
59 res = LONGFROMMR(WinSendMsg(hwndMinstallHandle,IM_MCI_SEND_COMMAND,MPVOID,MPFROMP(&cmd)));
60 if ((res == NO_ERROR) && strstr(sysParms.pszReturn,devInstallName))
61 {
62 res = LONGFROMMR(WinSendMsg(hwndMinstallHandle,IM_MCI_EXTENDED_SYSINFO,MPFROMLONG(MCI_SYSINFO_DELETE_DRIVER),MPFROMP(sysParms.pszReturn)));
63 mciGetErrorString(res,errBuf,sizeof(errBuf));
64 sprintf(errBuf,"%s(device %s)",errBuf,sysParms.pszReturn);
65 res2 = LONGFROMMR(WinSendMsg(hwndMinstallHandle,IM_LOG_ERROR,MPFROMP(errBuf),MPVOID));
66 }
67 }
68 }
69 return;
70}
71
72void DeleteConfigSysEntries(HWND hwndMinstallHandle,ULONG ulNum,PSZ StringArray[])
73{
74 CONFIGDATA conf;
75 ULONG ulNumFound;
76 APIRET res=NO_ERROR;
77
78 /* find and REM out the DEVICE= device driver entries */
79 memset(&conf,0,sizeof(conf));
80 conf.lLine = CONFIG_TOP;
81 conf.lBufferLen = sizeof(lineBuffer);
82 conf.pszBuffer = lineBuffer;
83 res = LONGFROMMR(WinSendMsg(hwndMinstallHandle,IM_CONFIGENUMERATE,MPFROMP(&conf),MPVOID));
84 ulNumFound = 0;
85 while(res == NO_ERROR)
86 {
87 ULONG i;
88
89 strupr(conf.pszBuffer);
90 for (i=0;i<ulNum;i++)
91 {
92 if (strstr(conf.pszBuffer,StringArray[i]))
93 {
94 ulNumFound++;
95 res = LONGFROMMR(WinSendMsg(hwndMinstallHandle,IM_CONFIGDELETE,MPFROMP(&conf),MPVOID));
96 }
97 }
98 if (ulNumFound >= ulNum)
99 {
100 break;
101 }
102
103 conf.lLine = CONFIG_NEXT;
104 conf.lBufferLen = sizeof(lineBuffer);
105 res = LONGFROMMR(WinSendMsg(hwndMinstallHandle,IM_CONFIGENUMERATE,MPFROMP(&conf),MPVOID));
106 }
107 return;
108}
109
110
111ULONG APIENTRY Install(
112 HWND hwndOwnerHandle,
113 PSZ pszSourcePath,
114 PSZ pszTargetDrive,
115 PSZ pszMyParms,
116 HWND hwndMinstallHandle,
117 PSZ pszResponseFile)
118{
119 ULONG res=NO_ERROR;
120 INSTOBJECTDATA wpsObj;
121
122 MM_DISPATCHVARS;
123 MM_DISPATCHMESSAGES();
124
125 /*create WPS objects */
126 memset(&wpsObj,0,sizeof(wpsObj));
127 strcpy(wpsObj.achClassName,"WPFolder");
128 strcpy(wpsObj.achTitle,"UniMixer");
129 strcpy(wpsObj.achSetupString,"OBJECTID=<UNIMIXER_FOLDER>;");
130 strcpy(wpsObj.achLocation,"<WP_DESKTOP>");
131 wpsObj.ulFlags = 1UL; /* Replace */
132 res = LONGFROMMR(
133 WinSendMsg(
134 hwndMinstallHandle,
135 IM_CREATE_WPS_OBJECT,
136 MPVOID,
137 MPFROMP(&wpsObj)
138 )
139 );
140
141 memset(&wpsObj,0,sizeof(wpsObj));
142 strcpy(wpsObj.achClassName,"WPProgram");
143 strcpy(wpsObj.achTitle,"UniMixer");
144 strcpy(wpsObj.achSetupString,"EXENAME=$(DEST)unimix.exe;");
145 strcpy(wpsObj.achLocation,"<UNIMIXER_FOLDER>");
146 wpsObj.ulFlags = 1UL; /* Replace */
147 res = LONGFROMMR(
148 WinSendMsg(
149 hwndMinstallHandle,
150 IM_CREATE_WPS_OBJECT,
151 MPVOID,
152 MPFROMP(&wpsObj)
153 )
154 );
155
156 memset(&wpsObj,0,sizeof(wpsObj));
157 strcpy(wpsObj.achClassName,"WPProgram");
158 strcpy(wpsObj.achTitle,"UniMixerPM");
159 strcpy(wpsObj.achSetupString,"EXENAME=$(DEST)unimixpm.exe;");
160 strcpy(wpsObj.achLocation,"<UNIMIXER_FOLDER>");
161 wpsObj.ulFlags = 1UL; /* Replace */
162 res = LONGFROMMR(
163 WinSendMsg(
164 hwndMinstallHandle,
165 IM_CREATE_WPS_OBJECT,
166 MPVOID,
167 MPFROMP(&wpsObj)
168 )
169 );
170
171 memset(&wpsObj,0,sizeof(wpsObj));
172 strcpy(wpsObj.achClassName,"WPShadow");
173 strcpy(wpsObj.achTitle,"");
174 strcpy(wpsObj.achSetupString,"SHADOWID=$(DEST)unimix.txt;");
175 strcpy(wpsObj.achLocation,"<UNIMIXER_FOLDER>");
176 wpsObj.ulFlags = 1UL; /* Replace */
177 res = LONGFROMMR(
178 WinSendMsg(
179 hwndMinstallHandle,
180 IM_CREATE_WPS_OBJECT,
181 MPVOID,
182 MPFROMP(&wpsObj)
183 )
184 );
185
186 memset(&wpsObj,0,sizeof(wpsObj));
187 strcpy(wpsObj.achClassName,"WPShadow");
188 strcpy(wpsObj.achTitle,"");
189 strcpy(wpsObj.achSetupString,"SHADOWID=$(DEST)example.cmd;");
190 strcpy(wpsObj.achLocation,"<UNIMIXER_FOLDER>");
191 wpsObj.ulFlags = 1UL; /* Replace */
192 res = LONGFROMMR(
193 WinSendMsg(
194 hwndMinstallHandle,
195 IM_CREATE_WPS_OBJECT,
196 MPVOID,
197 MPFROMP(&wpsObj)
198 )
199 );
200
201 memset(&wpsObj,0,sizeof(wpsObj));
202 strcpy(wpsObj.achClassName,"WPShadow");
203 strcpy(wpsObj.achTitle,"");
204 strcpy(wpsObj.achSetupString,"SHADOWID=$(DEST)unimixpm.txt;");
205 strcpy(wpsObj.achLocation,"<UNIMIXER_FOLDER>");
206 wpsObj.ulFlags = 1UL; /* Replace */
207 res = LONGFROMMR(
208 WinSendMsg(
209 hwndMinstallHandle,
210 IM_CREATE_WPS_OBJECT,
211 MPVOID,
212 MPFROMP(&wpsObj)
213 )
214 );
215
216 MM_DISPATCHMESSAGES();
217
218 return NO_ERROR;
219}
220
221
222ULONG APIENTRY Deinstall(
223 HWND hwndOwnerHandle,
224 PSZ pszSourcePath,
225 PSZ pszTargetDrive,
226 PSZ pszMyParms,
227 HWND hwndMinstallHandle,
228 PSZ pszResponseFile)
229{
230 ULONG res=NO_ERROR;
231 PSZ StringArray[2] = {"UNIAUD32.SYS","UNIAUD16.SYS"};
232
233 MM_DISPATCHVARS;
234 MM_DISPATCHMESSAGES();
235
236 /* find and REM out the DEVICE= device driver entries */
237 DeleteConfigSysEntries(hwndMinstallHandle,sizeof(StringArray)/sizeof(StringArray[0]),StringArray);
238
239 MM_DISPATCHMESSAGES();
240
241 /* remove the WPS folder with contents */
242 res = LONGFROMMR(
243 WinSendMsg(
244 hwndMinstallHandle,
245 IM_DESTROY_WPS_OBJECT,
246 MPVOID,
247 MPFROMP("<UNIMIXER_FOLDER>")
248 )
249 );
250
251 MM_DISPATCHMESSAGES();
252
253 /* remove the UniAud supported device entries in MMPM2.INI */
254 DeleteDevices(hwndMinstallHandle,MCI_DEVTYPE_WAVEFORM_AUDIO,"UNIAUDWAVE");
255 DeleteDevices(hwndMinstallHandle,MCI_DEVTYPE_AUDIO_AMPMIX,"UNIAUDAMPMIX");
256 DeleteDevices(hwndMinstallHandle,MCI_DEVTYPE_AUDIO_AMPMIX,"UNIFMAMPMIX"); /* delete junk entry, UniAud does not support MIDI ! */
257 DeleteDevices(hwndMinstallHandle,MCI_DEVTYPE_SEQUENCER,"UNIAUDFM"); /* delete junk entry, UniAud does not support MIDI ! */
258
259 MM_DISPATCHMESSAGES();
260
261 return NO_ERROR;
262}
263
264
Note: See TracBrowser for help on using the repository browser.