|
|
1.1 root 1: #include <windows.h>
2: #include <stdlib.h>
3: #include <direct.h>
4: #include "setupapi.h"
5: #include "msdetect.h"
6: #include "msregdb.h"
7: #include "msshared.h"
8:
9: #include "sample.h"
10:
11:
12: INT installType;
13: CHAR szInstallPath[cchMax];
14: CHAR szSrcDir[cchMax];
15:
16:
17: HANDLE hInst;
18:
19:
20: /* ********************************************************************* */
21: VOID BuildLists()
22: {
23: int iCursorSav = ShowWaitCursor();
24:
25: BuildCopyList();
26: BuildBillboardList();
27:
28: RestoreCursor(iCursorSav);
29: }
30:
31:
32: /* ********************************************************************* */
33: VOID BuildCopyList()
34: {
35: ClearCopyList();
36: AddSectionFilesToCopyList("Minimum Files", szSrcDir, szInstallPath);
37:
38: if (installType == itComplete)
39: AddSectionFilesToCopyList("Extra Files", szSrcDir, szInstallPath);
40: }
41:
42:
43: /* ********************************************************************* */
44: VOID BuildBillboardList()
45: {
46: AddToBillboardList("mscuistf.dll", DLG_BOARD1, "FModelessDlgProc", 5);
47: AddToBillboardList("mscuistf.dll", DLG_BOARD2, "FModelessDlgProc", 5);
48: AddToBillboardList("mscuistf.dll", DLG_BOARD3, "FModelessDlgProc", 5);
49: AddToBillboardList("mscuistf.dll", DLG_BOARD4, "FModelessDlgProc", 5);
50:
51: SetCopyGaugePosition(155, 130);
52: }
53:
54:
55: /* ********************************************************************* */
56: VOID Install()
57: {
58: CHAR rgchT[16];
59: INT iCursorSav;
60:
61: CopyFilesInCopyList();
62:
63: UIStartDlg("mscuistf.dll", DLG_REGINI, "FModelessDlgProc", 0, NULL,
64: (LPSTR)rgchT, 16);
65: iCursorSav = ShowWaitCursor();
66:
67: CreateIniKeyValue("WIN.INI", "Extensions", "smp", SzCat2Str(szInstallPath,
68: "SAMPLE.EXE ^.", "smp"), cmoOverwrite);
69:
70: CreateIniKeyValue("WIN.INI", "Sample", "Path", szInstallPath, cmoOverwrite);
71:
72: CreateProgmanGroup("Sample 4.0", "", cmoVital);
73: ShowProgmanGroup("Sample 4.0", 1, cmoVital);
74:
75: CreateProgmanItem("Sample 4.0", "Sample Exe", SzCatStr(szInstallPath,
76: "sample.exe"), "", cmoOverwrite);
77:
78: RestoreCursor(iCursorSav);
79: UIPop(1);
80: }
81:
82:
83:
84:
85:
86: /* **************************************************************** */
87: VOID AskQuit()
88: {
89: CHAR rgchT[16];
90:
91: while (TRUE)
92: {
93: UIStartDlg("mscuistf.dll", DLG_QUIT, "FQuitDlgProc", HELP_ASKQUIT,
94: "FHelpDlgProc", (LPSTR)rgchT, 15);
95:
96: switch ((WORD)(rgchT[0]+rgchT[1]))
97: {
98: default:
99: continue;
100:
101: case IDC_QUITEXIT:
102: UIPopAll();
103: EndSetupToolkit();
104: exit(0);
105:
106: case IDC_CANCEL:
107: case IDC_QUITCONTINUE:
108: break;
109: }
110:
111: UIPop(1);
112: return;
113: }
114: }
115:
116: /* **************************************************************** */
117: VOID WelcomeDialog()
118: {
119: CHAR rgchT[16];
120:
121: while (TRUE)
122: {
123: UIStartDlg("mscuistf.dll", DLG_WELCOME, "FInfoDlgProc",
124: HELP_APPLICATION, "FHelpDlgProc", (LPSTR)rgchT, 15);
125:
126: switch ((WORD)(rgchT[0]+rgchT[1]))
127: {
128: case IDC_CANCEL:
129: case IDC_TYPEEXIT:
130: AskQuit();
131: continue;
132:
133: default:
134: continue;
135:
136: case IDC_CONTINUE:
137: break;
138: }
139:
140: UIPop(1);
141: return;
142: }
143: }
144:
145: /* **************************************************************** */
146: VOID InstallTypeDialog()
147: {
148: CHAR rgchT[16];
149:
150: while (TRUE)
151: {
152: SetSymbolValue("RadioDefault", "1");
153: UIStartDlg("mscuistf.dll", DLG_INSTALLTYPE, "FRadioDlgProc",
154: HELP_INSTALLTYPE, "FHelpDlgProc", (LPSTR)rgchT, 15);
155:
156: switch ((WORD)(rgchT[0]+rgchT[1]))
157: {
158: case IDC_CANCEL:
159: case IDC_TYPEEXIT:
160: AskQuit();
161: continue;
162:
163: default:
164: continue;
165:
166: case IDC_CONTINUE:
167: GetSymbolValue("ButtonChecked", rgchT, 15);
168: installType = (*rgchT == '1') ? itComplete : itMinimum;
169: break;
170: }
171:
172: UIPop(1);
173: return;
174: }
175: }
176:
177:
178: /* **************************************************************** */
179: VOID BlankPathDialog()
180: {
181: CHAR rgchT[16];
182:
183: while (TRUE)
184: {
185: UIStartDlg("mscuistf.dll", DLG_BLANK, "FInfo0DlgProc", 0, NULL,
186: (LPSTR)rgchT, 15);
187:
188: switch ((WORD)(rgchT[0]+rgchT[1]))
189: {
190: default:
191: continue;
192:
193: case IDC_BLANKEXIT:
194: AskQuit();
195: continue;
196:
197: case IDC_CANCEL:
198: case IDC_BLANKCONTINUE:
199: break;
200: }
201:
202: UIPop(1);
203: return;
204: }
205: }
206:
207:
208: /* **************************************************************** */
209: VOID DestIsSrcDialog()
210: {
211: CHAR rgchT[16];
212:
213: while (TRUE)
214: {
215: UIStartDlg("mscuistf.dll", DLG_DESTISSRC, "FInfo0DlgProc", 0, NULL,
216: (LPSTR)rgchT, 15);
217:
218: switch ((WORD)(rgchT[0]+rgchT[1]))
219: {
220: default:
221: continue;
222:
223: case IDC_DESTISSRCEXIT:
224: AskQuit();
225: continue;
226:
227: case IDC_CANCEL:
228: case IDC_DESTISSRCCONTINUE:
229: break;
230: }
231:
232: UIPop(1);
233: return;
234: }
235: }
236:
237:
238: /* **************************************************************** */
239: VOID InvalidPathDialog()
240: {
241: CHAR rgchT[16];
242:
243: while (TRUE)
244: {
245: UIStartDlg("mscuistf.dll", DLG_INVALIDPATH, "FInfo0DlgProc", 0, NULL,
246: (LPSTR)rgchT, 15);
247:
248: switch ((WORD)(rgchT[0]+rgchT[1]))
249: {
250: default:
251: continue;
252:
253: case IDC_INVALIDEXIT:
254: AskQuit();
255: continue;
256:
257: case IDC_CANCEL:
258: case IDC_INVALIDCONTINUE:
259: break;
260: }
261:
262: UIPop(1);
263: return;
264: }
265: }
266:
267:
268: /* **************************************************************** */
269: VOID AppendSlash(LPSTR sz1)
270: {
271: LPSTR sz2 = sz1;
272:
273: while (*sz2)
274: {
275: sz1 = sz2;
276: sz2 = AnsiNext(sz1);
277: }
278:
279: if (sz2 != sz1 + 1 || *sz1 != '\\')
280: {
281: *sz2++ = '\\';
282: *sz2 = '\0';
283: }
284: }
285:
286:
287: /* **************************************************************** */
288: VOID StripSlash(LPSTR sz1)
289: {
290: LPSTR sz2 = sz1;
291:
292: while (*sz2)
293: {
294: sz1 = sz2;
295: sz2 = AnsiNext(sz1);
296: }
297:
298: if (sz2 == sz1 + 1 && *sz1 == '\\')
299: *sz1 = '\0';
300: }
301:
302:
303: /* **************************************************************** */
304: BOOL FInstallPathDialog()
305: {
306: CHAR rgchT[16];
307: BOOL fRet;
308: CHAR sz[cchMax];
309:
310: lstrcpy(sz, szInstallPath);
311:
312: StripSlash(sz);
313: SetSymbolValue("EditTextIn", sz);
314: SetSymbolValue("EditFocus", "END");
315:
316: while (TRUE)
317: {
318: UIStartDlg("mscuistf.dll", DLG_INSTALLPATH, "FEditDlgProc",
319: HELP_INSTALLPATH, "FHelpDlgProc", (LPSTR)rgchT, 15);
320:
321: if ((WORD)(rgchT[0]+rgchT[1]) == IDC_PATHEXIT)
322: {
323: AskQuit();
324: continue;
325: }
326: else if ((WORD)(rgchT[0]+rgchT[1]) == IDC_PATHCANCEL
327: || (WORD)(rgchT[0]+rgchT[1]) == IDC_CANCEL
328: || (WORD)(rgchT[0]+rgchT[1]) == IDC_BACK)
329: {
330: fRet = FALSE;
331: break;
332: }
333:
334: GetSymbolValue("EditTextOut", sz, cchMax);
335:
336: if (lstrlen(sz) == 0)
337: {
338: BlankPathDialog();
339: continue;
340: }
341:
342: if (!FValidDir(sz))
343: {
344: InvalidPathDialog();
345: continue;
346: }
347:
348: lstrcpy(szInstallPath, sz);
349: AppendSlash(szInstallPath);
350:
351: if (lstrcmp(szInstallPath, szSrcDir) == 0)
352: {
353: DestIsSrcDialog();
354: continue;
355: }
356:
357: fRet = TRUE;
358: break;
359: }
360:
361: UIPop(1);
362: return fRet;
363: }
364:
365:
366:
367:
368:
369:
370: /* ********************************************************************* */
371: VOID SetupError(int error)
372: {
373: CHAR rgchT[16];
374: BOOL fLoopForDialog = TRUE;
375: static BOOL fInsideSetupError = FALSE;
376:
377: if (!fInsideSetupError)
378: {
379: fInsideSetupError = TRUE;
380:
381: UIPopAll();
382:
383: while (fLoopForDialog)
384: {
385: UIStartDlg("mscuistf.dll", DLG_ERROR, "FInfo0DlgProc", 0, NULL,
386: (LPSTR)rgchT, 15);
387:
388: switch ((WORD)(rgchT[0]+rgchT[1]))
389: {
390: default:
391: continue;
392:
393: case IDC_CANCEL:
394: case IDC_ERROREXIT:
395: fLoopForDialog = FALSE;
396: break;
397: }
398: }
399:
400: UIPop(1);
401: }
402:
403: EndSetupToolkit();
404: exit(0);
405: }
406:
407:
408: /* **************************************************************** */
409: INT PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR szCmdLineArgs,
410: INT nCmdShow)
411: {
412: hInst = hInstance;
413:
414: if (InitSetupToolkit(szCmdLineArgs) > 0) // always should come first
415: {
416: if (FInitRegDb())
417: {
418: SetBitmap("mscuistf.dll", 1);
419: SetTitle("Sample 4.0 Setup");
420: ReadInfFile(SzCatStr(szCurDir, "sample.inf"));
421:
422: lstrcpy(szInstallPath, "C:\\SAMPLE\\");
423: GetSymbolValue("STF_SRCDIR", szSrcDir, cchMax);
424:
425: WelcomeDialog();
426:
427: do {
428: InstallTypeDialog();
429: } while (!FInstallPathDialog());
430:
431: BuildLists();
432: Install();
433: TerminateRegDb();
434: }
435:
436: EndSetupToolkit();
437: }
438: exit(0);
439: return(0);
440: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.