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

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

My typo

  • 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__declspec(dllexport) ULONG Install(
111 HWND hwndOwnerHandle,
112 PSZ pszSourcePath,
113 PSZ pszTargetDrive,
114 PSZ pszMyParms,
115 HWND hwndMinstallHandle,
116 PSZ pszResponseFile)
117{
118 ULONG res=NO_ERROR;
119 INSTOBJECTDATA wpsObj;
120
121 MM_DISPATCHVARS;
122 MM_DISPATCHMESSAGES();
123
124 /*create WPS objects */
125 memset(&wpsObj,0,sizeof(wpsObj));
126 strcpy(wpsObj.achClassName,"WPFolder");
127 strcpy(wpsObj.achTitle,"UniMixer");
128 strcpy(wpsObj.achSetupString,"OBJECTID=<UNIMIXER_FOLDER>;");
129 strcpy(wpsObj.achLocation,"<WP_DESKTOP>");
130 wpsObj.ulFlags = 1UL; /* Replace */
131 res = LONGFROMMR(
132 WinSendMsg(
133 hwndMinstallHandle,
134 IM_CREATE_WPS_OBJECT,
135 MPVOID,
136 MPFROMP(&wpsObj)
137 )
138 );
139
140 memset(&wpsObj,0,sizeof(wpsObj));
141 strcpy(wpsObj.achClassName,"WPProgram");
142 strcpy(wpsObj.achTitle,"UniMixer");
143 strcpy(wpsObj.achSetupString,"EXENAME=$(DEST)unimix.exe;");
144 strcpy(wpsObj.achLocation,"<UNIMIXER_FOLDER>");
145 wpsObj.ulFlags = 1UL; /* Replace */
146 res = LONGFROMMR(
147 WinSendMsg(
148 hwndMinstallHandle,
149 IM_CREATE_WPS_OBJECT,
150 MPVOID,
151 MPFROMP(&wpsObj)
152 )
153 );
154
155 memset(&wpsObj,0,sizeof(wpsObj));
156 strcpy(wpsObj.achClassName,"WPProgram");
157 strcpy(wpsObj.achTitle,"UniMixerPM");
158 strcpy(wpsObj.achSetupString,"EXENAME=$(DEST)unimixpm.exe;");
159 strcpy(wpsObj.achLocation,"<UNIMIXER_FOLDER>");
160 wpsObj.ulFlags = 1UL; /* Replace */
161 res = LONGFROMMR(
162 WinSendMsg(
163 hwndMinstallHandle,
164 IM_CREATE_WPS_OBJECT,
165 MPVOID,
166 MPFROMP(&wpsObj)
167 )
168 );
169
170 memset(&wpsObj,0,sizeof(wpsObj));
171 strcpy(wpsObj.achClassName,"WPShadow");
172 strcpy(wpsObj.achTitle,"");
173 strcpy(wpsObj.achSetupString,"SHADOWID=$(DEST)unimix.txt;");
174 strcpy(wpsObj.achLocation,"<UNIMIXER_FOLDER>");
175 wpsObj.ulFlags = 1UL; /* Replace */
176 res = LONGFROMMR(
177 WinSendMsg(
178 hwndMinstallHandle,
179 IM_CREATE_WPS_OBJECT,
180 MPVOID,
181 MPFROMP(&wpsObj)
182 )
183 );
184
185 memset(&wpsObj,0,sizeof(wpsObj));
186 strcpy(wpsObj.achClassName,"WPShadow");
187 strcpy(wpsObj.achTitle,"");
188 strcpy(wpsObj.achSetupString,"SHADOWID=$(DEST)example.cmd;");
189 strcpy(wpsObj.achLocation,"<UNIMIXER_FOLDER>");
190 wpsObj.ulFlags = 1UL; /* Replace */
191 res = LONGFROMMR(
192 WinSendMsg(
193 hwndMinstallHandle,
194 IM_CREATE_WPS_OBJECT,
195 MPVOID,
196 MPFROMP(&wpsObj)
197 )
198 );
199
200 memset(&wpsObj,0,sizeof(wpsObj));
201 strcpy(wpsObj.achClassName,"WPShadow");
202 strcpy(wpsObj.achTitle,"");
203 strcpy(wpsObj.achSetupString,"SHADOWID=$(DEST)unimixpm.txt;");
204 strcpy(wpsObj.achLocation,"<UNIMIXER_FOLDER>");
205 wpsObj.ulFlags = 1UL; /* Replace */
206 res = LONGFROMMR(
207 WinSendMsg(
208 hwndMinstallHandle,
209 IM_CREATE_WPS_OBJECT,
210 MPVOID,
211 MPFROMP(&wpsObj)
212 )
213 );
214
215 MM_DISPATCHMESSAGES();
216
217 return NO_ERROR;
218}
219
220
221__declspec(dllexport) ULONG Deinstall(
222 HWND hwndOwnerHandle,
223 PSZ pszSourcePath,
224 PSZ pszTargetDrive,
225 PSZ pszMyParms,
226 HWND hwndMinstallHandle,
227 PSZ pszResponseFile)
228{
229 ULONG res=NO_ERROR;
230 PSZ StringArray[2] = {"UNIAUD32.SYS","UNIAUD16.SYS"};
231
232 MM_DISPATCHVARS;
233 MM_DISPATCHMESSAGES();
234
235 /* find and REM out the DEVICE= device driver entries */
236 DeleteConfigSysEntries(hwndMinstallHandle,sizeof(StringArray)/sizeof(StringArray[0]),StringArray);
237
238 MM_DISPATCHMESSAGES();
239
240 /* remove the WPS folder with contents */
241 res = LONGFROMMR(
242 WinSendMsg(
243 hwndMinstallHandle,
244 IM_DESTROY_WPS_OBJECT,
245 MPVOID,
246 MPFROMP("<UNIMIXER_FOLDER>")
247 )
248 );
249
250 MM_DISPATCHMESSAGES();
251
252 /* remove the UniAud supported device entries in MMPM2.INI */
253 DeleteDevices(hwndMinstallHandle,MCI_DEVTYPE_WAVEFORM_AUDIO,"UNIAUDWAVE");
254 DeleteDevices(hwndMinstallHandle,MCI_DEVTYPE_AUDIO_AMPMIX,"UNIAUDAMPMIX");
255 DeleteDevices(hwndMinstallHandle,MCI_DEVTYPE_AUDIO_AMPMIX,"UNIFMAMPMIX"); /* delete junk entry, UniAud does not support MIDI ! */
256 DeleteDevices(hwndMinstallHandle,MCI_DEVTYPE_SEQUENCER,"UNIAUDFM"); /* delete junk entry, UniAud does not support MIDI ! */
257
258 MM_DISPATCHMESSAGES();
259
260 return NO_ERROR;
261}
262
Note: See TracBrowser for help on using the repository browser.