|
|
1.1 root 1: //*************************************************************************
2: //************************* Setup 'C' Wrappers **************************
3: //*************************************************************************
4:
5:
6: // NOTE: setup code WinMain() must call InitSetupToolkit(szCmdLineArgs) at
7: // start and EndSetupToolkit() [CleaupTrap] at exit. It must also define the
8: // routine SetupError() for error handling.
9:
10:
11: #include <windows.h>
12: #include <stdlib.h> //atol
13: #include <direct.h>
14: #include "setupapi.h"
15: #include "msdetect.h"
16: #include "msregdb.h"
17: #include "msshared.h"
18:
19: #define cchMax 255
20: #define cchNum 10
21:
22:
23: /* GLOBALS */
24: INT hSetup = 0;
25: CHAR szCurDir[255];
26:
27:
28: // **************************************************************************
29: LPSTR lstrchr(LPSTR sz, CHAR ch)
30: {
31: while (*sz)
32: {
33: if (ch == *sz)
34: return(sz);
35: sz = AnsiNext(sz);
36: }
37: return(NULL);
38: }
39:
40:
41:
42: #ifndef STF_LITE
43: // **************************************************************************
44: INT InStr(INT cch, LPSTR sz1, LPSTR sz2)
45: {
46: LPSTR szTmp1, szTmp2;
47: INT i = 1;
48:
49: if (cch == 0)
50: return(0);
51:
52: while (cch > 1)
53: {
54: sz1 = AnsiNext(sz1);
55: cch--;
56: i++;
57: }
58:
59: while (*sz1 != '\0')
60: {
61: szTmp1 = sz1;
62: szTmp2 = sz2;
63: while ((*szTmp1 != '\0') && (*szTmp2 != '\0'))
64: {
65: if (*szTmp1 != *szTmp2)
66: break;
67: szTmp1 = AnsiNext(szTmp1);
68: szTmp2 = AnsiNext(szTmp2);
69: }
70: if (*szTmp2 == '\0')
71: return(i);
72: if (*sz1 != '\0')
73: sz1 = AnsiNext(sz1);
74: i++;
75: }
76:
77: return(0);
78: }
79: #endif /* !STF_LITE */
80:
81:
82: //**************************************************************************
83: INT InitSetupToolkit(LPSTR szCmdLine)
84: {
85: INT i;
86: WORD wErrorModeSav;
87:
88: if (hSetup > 0)
89: {
90: #ifdef DEBUG
91: StfApiErr(saeInit, "InitSetupToolkit", szCmdLine);
92: #endif //DEBUG
93: return(0);
94: }
95:
96: if ((i = InitFrame(szCmdLine)) == -1)
97: return(-1);
98:
99: /* do NOT call FInitRegDb() inside here since some Win3.0 apps don't
100: ** use or ship it! Your WinMain() should call it after this routine.
101: */
102: if (i == 0 || !InitInstall())
103: {
104: EndSetupToolkit();
105: return(0);
106: }
107:
108: hSetup = i;
109:
110: wErrorModeSav = SetErrorMode(1);
111: getcwd(szCurDir, 255); /* for C7 use _getcwd() */
112: SetErrorMode(wErrorModeSav);
113: OemToAnsi(szCurDir, szCurDir);
114:
115: i = lstrlen(szCurDir);
116: if (szCurDir[i - 1] != '\\')
117: {
118: szCurDir[i] = '\\';
119: szCurDir[i + 1] = '\0';
120: }
121:
122: return(hSetup);
123: }
124:
125:
126: //**************************************************************************
127: INT InitFrame(LPSTR szCmdLine)
128: {
129: if (hSetup > 0)
130: {
131: #ifdef DEBUG
132: StfApiErr(saeInit, "InitFrame", szCmdLine);
133: #endif //DEBUG
134: return(0);
135: }
136: else
137: {
138: INT i = InitializeFrame(szCmdLine);
139:
140: if (i == 0)
141: {
142: #ifdef DEBUG
143: StfApiErr(saeFail, "InitFrame", szCmdLine);
144: #endif //DEBUG
145: return(0);
146: }
147: else
148: return(i);
149: }
150: }
151:
152:
153: //**************************************************************************
154: VOID SetBitmap(LPSTR szDll, INT Bitmap)
155: {
156: if (FSetBitmap(szDll, Bitmap) == 0)
157: {
158: #ifdef DEBUG
159: CHAR rgch[10];
160:
161: itoa(Bitmap, rgch, 10); /* for C7 use _itoa() */
162: StfApiErr(saeFail, "SetBitmap", SzCat2Str(szDll, ", ", rgch));
163: #endif //DEBUG
164: SetupError(STFERR);
165: }
166: }
167:
168:
169: //**************************************************************************
170: VOID SetAbout(LPSTR szAbout1, LPSTR szAbout2)
171: {
172: if (FSetAbout(szAbout1, szAbout2) == 0)
173: {
174: #ifdef DEBUG
175: StfApiErr(saeFail, "SetAbout", SzCat2Str(szAbout1, ",", szAbout2));
176: #endif //DEBUG
177: SetupError(STFERR);
178: }
179: }
180:
181:
182: //*************************************************************************
183: VOID SetTitle(LPSTR sz)
184: {
185: SetWindowText((HWND)HwndFrame(), sz);
186: }
187:
188:
189: //*************************************************************************
190: VOID ReadInfFile(LPSTR szFile)
191: {
192: #ifdef DEBUG
193: if (FValidPath(szFile) == 0)
194: BadArgErr(1, "ReadInfFile", szFile);
195:
196: if (FOpenInf(szFile, 1, 1) == 0)
197: {
198: StfApiErr(saeFail, "ReadInfFile", szFile);
199: SetupError(STFERR);
200: }
201: #else //!DEBUG
202: if (FOpenInf(szFile, 1, 0) == 0)
203: SetupError(STFERR);
204: #endif //!DEBUG
205: }
206:
207:
208: //*************************************************************************
209: VOID OurYield()
210: {
211: MSG msg;
212:
213: while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
214: {
215: if (msg.message == WM_QUIT)
216: SetupError(STFQUIT);
217:
218: TranslateMessage(&msg);
219: DispatchMessage(&msg);
220: }
221: }
222:
223:
224: #ifndef STF_LITE
225: //*************************************************************************
226: LPSTR UIStartDlgExt(LPSTR szDll, INT Dlg, LPSTR szDlgProc,
227: LPSTR szHelpDll, INT HelpDlg, LPSTR szHelpProc, LPSTR szBfr,
228: INT cbBfrMax)
229: {
230: #ifdef DEBUG
231: INT n;
232: LPSTR szTmp;
233: CHAR szDlg[cchNum], szHelpDlg[cchNum];
234:
235: if (FEmptySz(szDll))
236: n = 1;
237: else if (FEmptySz(szDlgProc))
238: n = 3;
239: else
240: n = 0;
241:
242: if (n > 0)
243: {
244: wsprintf(szDlg, "%d", Dlg);
245: wsprintf(szHelpDlg, "%d", HelpDlg);
246: szTmp = SzCat3Str(szDll, szDlg, ", ", szDlgProc);
247: szTmp = SzCat3Str(szTmp, ", ", szHelpDll, ", ");
248: BadArgErr(n, "UIStartDlgExt", SzCat3Str(szTmp, szHelpDlg,", ",
249: szHelpProc));
250: }
251: #endif //DEBUG
252:
253: if (FDoDialogExt((HWND)HwndFrame(), szDll, Dlg, szDlgProc, szHelpDll, HelpDlg,
254: szHelpProc) == 0)
255: {
256: #ifdef DEBUG
257: wsprintf(szDlg, "%d", Dlg);
258: wsprintf(szHelpDlg, "%d", HelpDlg);
259: szTmp = SzCat3Str(szDll, szDlg, ", ", szDlgProc);
260: szTmp = SzCat3Str(szTmp, ", ", szHelpDll, ", ");
261: StfApiErr(saeFail, "UIStartDlgExt", SzCat3Str(szTmp, szHelpDlg, ", ",
262: szHelpProc));
263: #endif //DEBUG
264: SetupError(STFERR);
265: }
266: else
267: {
268: OurYield();
269: return(GetSymbolValue("DLGEVENT", szBfr, cbBfrMax));
270: }
271: }
272: #endif /* !STF_LITE */
273:
274:
275: //*************************************************************************
276: LPSTR UIStartDlg(LPSTR szDll, INT Dlg, LPSTR szDlgProc, INT HelpDlg,
277: LPSTR szHelpProc, LPSTR szBfr, INT cbBfrMax)
278: {
279: #ifdef DEBUG
280: INT n;
281: LPSTR szTmp;
282: CHAR szDlg[cchNum], szHelpDlg[cchNum];
283:
284: if (FEmptySz(szDll))
285: n = 1;
286: else if (FEmptySz(szDlgProc))
287: n = 3;
288: else
289: n = 0;
290:
291: if (n > 0)
292: {
293: wsprintf(szDlg, "%d", Dlg);
294: wsprintf(szHelpDlg, "%d", HelpDlg);
295: szTmp = SzCat3Str(szDll, szDlg, ", ", szDlgProc);
296: BadArgErr(n, "UIStartDlg", SzCat3Str(szTmp, szHelpDlg,", ",szHelpProc));
297: }
298: #endif //DEBUG
299:
300: if (FDoDialogExt((HWND)HwndFrame(), szDll, Dlg, szDlgProc, szDll, HelpDlg,
301: szHelpProc) == 0)
302: {
303: #ifdef DEBUG
304: wsprintf(szDlg, "%d", Dlg);
305: wsprintf(szHelpDlg, "%d", HelpDlg);
306: szTmp = SzCat3Str(szDll, szDlg, ", ", szDlgProc);
307: StfApiErr(saeFail, "UIStartDlg", SzCat3Str(szTmp, szHelpDlg, ", ",
308: szHelpProc));
309: #endif //DEBUG
310: SetupError(STFERR);
311: }
312: else
313: {
314: OurYield();
315: return(GetSymbolValue("DLGEVENT", szBfr, cbBfrMax));
316: }
317: }
318:
319:
320: //*************************************************************************
321: void UIPop(INT n)
322: {
323: if (FKillNDialogs(n) == 0)
324: {
325: #ifdef DEBUG
326: CHAR szNum[cchNum];
327:
328: wsprintf(szNum, "%d", n);
329: StfApiErr(saeFail, "UIPop", szNum);
330: #endif //DEBUG
331: SetupError(STFERR);
332: }
333: OurYield();
334: }
335:
336:
337: //*************************************************************************
338: VOID UIPopAll(VOID)
339: {
340: if (FKillNDialogs(-1) == 0)
341: {
342: #ifdef DEBUG
343: StfApiErr(saeFail, "UIPopAll", "");
344: #endif //DEBUG
345: SetupError(STFERR);
346: }
347: OurYield();
348: }
349:
350:
351: //*************************************************************************
352: LPSTR GetSymbolValue(LPSTR szSymbol, LPSTR szBfr, INT cbBfrMax)
353: {
354: INT length;
355:
356: #ifdef DEBUG
357: if (FEmptySz(szSymbol))
358: BadArgErr(1, "GetSymbolValue", szSymbol);
359: #endif //DEBUG
360:
361: if (szSymbol == NULL || *szSymbol == '\0')
362: SetupError(STFERR);
363:
364: length = CbGetSymbolValue(szSymbol, szBfr, cbBfrMax);
365: if (length >= cbBfrMax)
366: {
367: DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK);
368: SetupError(STFERR);
369: }
370:
371: return(szBfr);
372: }
373:
374:
375: //*************************************************************************
376: INT GetListLength(LPSTR szSymbol)
377: {
378: INT cb;
379:
380: #ifdef DEBUG
381: if (FEmptySz(szSymbol))
382: BadArgErr(1, "GetListLength", szSymbol);
383: #endif //DEBUG
384:
385: if (szSymbol == NULL || *szSymbol == '\0')
386: SetupError(STFERR);
387: cb = UsGetListLength(szSymbol);
388:
389: return(cb);
390: }
391:
392:
393: //*************************************************************************
394: LPSTR GetListItem(LPSTR szListSymbol, INT nItem, LPSTR szBfr,
395: INT cbBfrMax)
396: {
397: INT length;
398:
399: #ifdef DEBUG
400: CHAR szItem[cchNum];
401:
402: if (FEmptySz(szListSymbol))
403: {
404: wsprintf(szItem, "%d", nItem);
405: BadArgErr(1, "GetListItem", SzCat2Str(szListSymbol,", ", szItem));
406: }
407:
408: if ((nItem <= 0) || (nItem > GetListLength(szListSymbol)))
409: {
410: wsprintf(szItem, "%d", nItem);
411: BadArgErr(2, "GetListItem",SzCat2Str(szListSymbol,", ",szItem));
412: }
413: #endif //DEBUG
414:
415: if (szListSymbol == NULL || *szListSymbol == '\0')
416: SetupError(STFERR);
417: if ((nItem <= 0) || (nItem > GetListLength(szListSymbol)))
418: SetupError(STFERR);
419: length = CbGetListItem(szListSymbol, nItem, szBfr, cbBfrMax);
420: if (length >= cbBfrMax)
421: {
422: DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK);
423: SetupError(STFERR);
424: }
425:
426: return(szBfr);
427: }
428:
429:
430: //*************************************************************************
431: VOID AddListItem(LPSTR szSymbol, LPSTR szItem)
432: {
433: #ifdef DEBUG
434: if (FEmptySz(szSymbol))
435: BadArgErr(1, "AddListItem", SzCat2Str(szSymbol,", ",szItem));
436: #endif //DEBUG
437:
438: if (FAddListItem(szSymbol, szItem) == 0)
439: {
440: #ifdef DEBUG
441: StfApiErr(saeFail, "AddListItem",SzCat2Str(szSymbol,", ",szItem));
442: #endif //DEBUG
443: SetupError(STFERR);
444: }
445: }
446:
447:
448: //*************************************************************************
449: VOID ReplaceListItem(LPSTR szSymbol, INT n, LPSTR szItem)
450: {
451: #ifdef DEBUG
452: INT nArg;
453: CHAR szNum[cchNum];
454: LPSTR szTmp;
455:
456: if (FEmptySz(szSymbol))
457: nArg = 1;
458: else if ((n <= 0) || (n > GetListLength(szSymbol)))
459: nArg = 2;
460: else
461: nArg = 0;
462:
463: if (nArg > 0)
464: {
465: wsprintf(szNum,"%d", n);
466: szTmp = SzCat3Str(szSymbol, ", ", szNum, ", ");
467: BadArgErr(nArg, "ReplaceListItem", SzCatStr(szTmp,szItem));
468: }
469: #endif //DEBUG
470:
471: if (FReplaceListItem(szSymbol, n, szItem) == 0)
472: {
473: #ifdef DEBUG
474: wsprintf(szNum,"%d", n);
475: szTmp = SzCat3Str(szSymbol, ", ", szNum, ", ");
476: StfApiErr(saeFail, "ReplaceListItem", SzCatStr(szTmp,szItem));
477: #endif //DEBUG
478: SetupError(STFERR);
479: }
480: }
481:
482:
483: //**************************************************************************
484: VOID MakeListFromSectionKeys(LPSTR szSymbol, LPSTR szSect)
485: {
486: #ifdef DEBUG
487: INT n;
488:
489: if (FEmptySz(szSymbol))
490: n = 1;
491: else if (FValidInfSect(szSect) == 0)
492: n = 2;
493: else
494: n = 0;
495: if (n > 0)
496: BadArgErr(n, "MakeListFromSectionKeys",SzCat2Str(szSymbol,", ",szSect));
497: #endif //DEBUG
498:
499: if (FSetSymbolToListOfInfKeys(szSymbol, szSect, 1) == 0)
500: {
501: #ifdef DEBUG
502: StfApiErr(saeFail, "MakeListFromSectionKeys", SzCat2Str(szSymbol, ", ",
503: szSect));
504: #endif //DEBUG
505: SetupError(STFERR);
506: }
507: }
508:
509:
510: //*************************************************************************
511: VOID SetSymbolValue(LPSTR szSymbol, LPSTR szValue)
512: {
513: #ifdef DEBUG
514: if (FEmptySz(szSymbol))
515: BadArgErr(1, "SetSymbolValue",SzCat2Str(szSymbol,", ",szValue));
516: #endif //DEBUG
517:
518: if (FSetSymbolValue(szSymbol, szValue) == 0)
519: {
520: #ifdef DEBUG
521: StfApiErr(saeFail, "SetSymbolValue", SzCat2Str(szSymbol,", ",szValue));
522: #endif //DEBUG
523: SetupError(STFERR);
524: }
525: }
526:
527:
528: //*************************************************************************
529: VOID RemoveSymbol(LPSTR szSym)
530: {
531: #ifdef DEBUG
532: if (FEmptySz(szSym))
533: BadArgErr(1, "RemoveSymbol", szSym);
534: #endif //DEBUG
535:
536: if (FRemoveSymbol(szSym) == 0)
537: {
538: #ifdef DEBUG
539: StfApiErr(saeFail, "RemoveSymbol", szSym);
540: #endif //DEBUG
541: SetupError(STFERR);
542: }
543: }
544:
545:
546: //*************************************************************************
547: INT ShowWaitCursor(VOID)
548: {
549: return(HShowWaitCursor());
550: }
551:
552:
553: //*************************************************************************
554: VOID RestoreCursor(INT hPrev)
555: {
556: if (FRestoreCursor(hPrev) == 0)
557: {
558: #ifdef DEBUG
559: StfApiErr(saeFail, "RestoreCursor", "");
560: #endif //DEBUG
561: SetupError(STFERR);
562: }
563: }
564:
565:
566: #ifndef STF_LITE
567: //*************************************************************************
568: INT SetBeepingMode(INT mode)
569: {
570: return(FSetBeepingMode(mode));
571: }
572:
573:
574: //*************************************************************************
575: INT SetSilentMode(INT mode)
576: {
577: return(FSetSilent(mode));
578: }
579:
580: #endif /* !STF_LITE */
581:
582: //*************************************************************************
583: LPSTR GetSectionKeyDate(LPSTR szSect, LPSTR szKey, LPSTR szBfr,
584: INT cbBfrMax)
585: {
586: INT length;
587: #ifdef DEBUG
588: INT n;
589:
590: if (FValidInfSect(szSect) == 0)
591: n = 1;
592: else if (FEmptySz(szKey))
593: n = 2;
594: else
595: n = 0;
596: if (n > 0)
597: BadArgErr(n, "GetSectionKeyDate",SzCat2Str(szSect,", ",szKey));
598: #endif //DEBUG
599:
600: length = CbGetInfSectionKeyField(szSect, szKey, 5, szBfr, cbBfrMax);
601: if (length >= cbBfrMax)
602: {
603: DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK);
604: SetupError(STFERR);
605: }
606:
607: if (length == -1)
608: {
609: #ifdef DEBUG
610: StfApiErr(saeFail, "GetSectionKeyDate",SzCat2Str(szSect,", ",szKey));
611: #endif //DEBUG
612: SetupError(STFERR);
613: }
614:
615: return(szBfr);
616: }
617:
618:
619: //*************************************************************************
620: LPSTR GetSectionKeyFilename(LPSTR szSect, LPSTR szKey, LPSTR szBfr,
621: INT cbBfrMax)
622: {
623: INT length;
624: #ifdef DEBUG
625: INT n;
626:
627: if (FValidInfSect(szSect) == 0)
628: n = 1;
629: else if (FEmptySz(szKey))
630: n = 2;
631: else
632: n = 0;
633: if (n > 0)
634: BadArgErr(n, "GetSectionKeyFilename",SzCat2Str(szSect,", ",szKey));
635: #endif //DEBUG
636:
637: length = CbGetInfSectionKeyField(szSect, szKey, 1, szBfr, cbBfrMax);
638: if (length >= cbBfrMax)
639: {
640: DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK);
641: SetupError(STFERR);
642: }
643:
644: if (length == -1)
645: {
646: #ifdef DEBUG
647: StfApiErr(saeFail,"GetSectionKeyFilename",SzCat2Str(szSect,", ",szKey));
648: #endif //DEBUG
649: SetupError(STFERR);
650: }
651:
652: return(szBfr);
653: }
654:
655:
656: //*************************************************************************
657: LONG GetSectionKeySize(LPSTR szSect, LPSTR szKey)
658: {
659: CHAR szBfr[128];
660: INT length;
661: #ifdef DEBUG
662: INT n;
663:
664: if (FValidInfSect(szSect) == 0)
665: n = 1;
666: else if (FEmptySz(szKey))
667: n = 2;
668: else
669: n = 0;
670: if (n > 0)
671: BadArgErr(n, "GetSectionKeySize",SzCat2Str(szSect,", ",szKey));
672: #endif //DEBUG
673:
674: length = CbGetInfSectionKeyField(szSect, szKey, 15, szBfr, 128);
675: if (length >= 128)
676: {
677: DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK);
678: SetupError(STFERR);
679: }
680:
681: if (length == -1)
682: {
683: #ifdef DEBUG
684: StfApiErr(saeFail, "GetSectionKeySize",SzCat2Str(szSect,", ",szKey));
685: #endif //DEBUG
686: SetupError(STFERR);
687: }
688:
689: return(atol(szBfr));
690: }
691:
692:
693: #ifndef STF_LITE
694: //*************************************************************************
695: LPSTR GetSectionKeyVersion(LPSTR szSect, LPSTR szKey, LPSTR szBfr,
696: INT cbBfrMax)
697: {
698: INT length;
699: #ifdef DEBUG
700: INT n;
701:
702: if (FValidInfSect(szSect) == 0)
703: n = 1;
704: else if (FEmptySz(szKey))
705: n = 2;
706: else
707: n = 0;
708: if (n > 0)
709: BadArgErr(n, "GetSectionKeyVersion",SzCat2Str( szSect,", ",szKey));
710: #endif //DEBUG
711:
712: length = CbGetInfSectionKeyField(szSect, szKey, 19, szBfr, cbBfrMax);
713: if (length >= cbBfrMax)
714: {
715: DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK);
716: SetupError(STFERR);
717: }
718:
719: if (length == -1)
720: {
721: #ifdef DEBUG
722: StfApiErr(saeFail, "GetSectionKeyVersion",SzCat2Str(szSect,", ",szKey));
723: #endif //DEBUG
724: SetupError(STFERR);
725: }
726:
727: return(szBfr);
728: }
729: #endif /* !STF_LITE */
730:
731:
732: #ifndef STF_LITE
733: //*************************************************************************
734: VOID MakeListFromSectionDate(LPSTR szSym, LPSTR szSect)
735: {
736: #ifdef DEBUG
737: INT n;
738:
739: if (FEmptySz(szSym))
740: n = 1;
741: else if (FValidInfSect(szSect) == 0)
742: n = 2;
743: else
744: n = 0;
745: if (n > 0)
746: BadArgErr(n, "MakeListFromSectionDate",SzCat2Str( szSym,", ",szSect));
747: #endif //DEBUG
748:
749: if (FMakeListInfSectionField(szSym, szSect, 5) == 0)
750: {
751: #ifdef DEBUG
752: StfApiErr(saeFail, "MakeListFromSectionDate", SzCat2Str(szSym, ", ",
753: szSect));
754: #endif //DEBUG
755: SetupError(STFERR);
756: }
757: }
758:
759: #endif /* !STF_LITE */
760:
761: //*************************************************************************
762: VOID MakeListFromSectionFilename(LPSTR szSym, LPSTR szSect)
763: {
764: #ifdef DEBUG
765: INT n;
766:
767: if (FEmptySz(szSym))
768: n = 1;
769: else if (FValidInfSect(szSect) == 0)
770: n = 2;
771: else
772: n = 0;
773: if (n > 0)
774: BadArgErr(n, "MakeListFromSectionFilename", SzCat2Str(szSym, ", ",
775: szSect));
776: #endif //DEBUG
777:
778: if (FMakeListInfSectionField(szSym, szSect, 1) == 0)
779: {
780: #ifdef DEBUG
781: StfApiErr(saeFail, "MakeListFromSectionFilename", SzCat2Str(szSym, ", ",
782: szSect));
783: #endif //DEBUG
784: SetupError(STFERR);
785: }
786: }
787:
788:
789: //*************************************************************************
790: VOID MakeListFromSectionSize(LPSTR szSym, LPSTR szSect)
791: {
792: #ifdef DEBUG
793: INT n;
794:
795: if (FEmptySz(szSym))
796: n = 1;
797: else if (FValidInfSect(szSect) == 0)
798: n = 2;
799: else
800: n = 0;
801: if (n > 0)
802: BadArgErr(n, "MakeListFromSectionSize",SzCat2Str( szSym,", ",szSect));
803: #endif //DEBUG
804:
805: if (FMakeListInfSectionField(szSym, szSect, 15) == 0)
806: {
807: #ifdef DEBUG
808: StfApiErr(saeFail, "MakeListFromSectionSize", SzCat2Str(szSym, ", ",
809: szSect));
810: #endif //DEBUG
811: SetupError(STFERR);
812: }
813: }
814:
815:
816: #ifndef STF_LITE
817: //*************************************************************************
818: VOID MakeListFromSectionVersion(LPSTR szSym, LPSTR szSect)
819: {
820: #ifdef DEBUG
821: INT n;
822:
823: if (FEmptySz(szSym))
824: n = 1;
825: else if (FValidInfSect(szSect) == 0)
826: n = 2;
827: else
828: n = 0;
829: if (n > 0)
830: BadArgErr(n, "MakeListFromSectionVersion",SzCat2Str(szSym,", ",szSect));
831: #endif //DEBUG
832:
833: if (FMakeListInfSectionField(szSym, szSect, 19) == 0)
834: {
835: #ifdef DEBUG
836: StfApiErr(saeFail, "MakeListFromSectionVersion", SzCat2Str(szSym, ", ",
837: szSect));
838: #endif //DEBUG
839: SetupError(STFERR);
840: }
841: }
842: #endif /* !STF_LITE */
843:
844:
845: //*************************************************************************
846: INT InitInstall()
847: {
848: HWND hFrame;
849: HINSTANCE hInsta;
850:
851: if (hSetup > 0)
852: {
853: #ifdef DEBUG
854: StfApiErr(saeInit, "InitInstall", "");
855: #endif //DEBUG
856: return(0);
857: }
858:
859: hFrame = HwndFrame();
860: hInsta = HinstFrame();
861:
862:
863: if (FInitializeInstall((HANDLE)hInsta, hFrame) == 0)
864: {
865: #ifdef DEBUG
866: StfApiErr(saeFail, "InitInstall", "");
867: #endif //DEBUG
868: return(0);
869: }
870:
871: return(1);
872: }
873:
874:
875: //*************************************************************************
876: VOID CreateDir(LPSTR szDir, INT cmo)
877: {
878: #ifdef DEBUG
879: CHAR szCmo[cchNum];
880:
881: if (FValidDir(szDir) == 0)
882: {
883: wsprintf(szCmo, "%d", cmo);
884: BadArgErr(1, "CreateDir",SzCat2Str(szDir,", ",szCmo));
885: }
886: #endif //DEBUG
887:
888: if (FCreateDir(szDir, cmo) == 0)
889: {
890: #ifdef DEBUG
891: CHAR szCmo[cchNum];
892:
893: wsprintf(szCmo, "%d", cmo);
894: StfApiErr(saeFail, "CreateDir",SzCat2Str(szDir,", ",szCmo));
895: #endif //DEBUG
896: SetupError(STFERR);
897: }
898: }
899:
900:
901: #ifndef STF_LITE
902: //*************************************************************************
903: VOID RemoveDir(LPSTR szDir, INT cmo)
904: {
905: #ifdef DEBUG
906: CHAR szCmo[cchNum];
907:
908: if (FValidDir(szDir) == 0)
909: {
910: wsprintf(szCmo, "%d", cmo);
911: BadArgErr(1, "RemoveDir",SzCat2Str(szDir,", ",szCmo));
912: }
913: #endif //DEBUG
914:
915: if (FRemoveDir(szDir, cmo) == 0)
916: {
917: #ifdef DEBUG
918: wsprintf(szCmo, "%d", cmo);
919: StfApiErr(saeFail, "RemoveDir",SzCat2Str(szDir,", ",szCmo));
920: #endif //DEBUG
921: SetupError(STFERR);
922: }
923: }
924:
925:
926: //*************************************************************************
927: VOID RemoveIniSection(LPSTR szFile, LPSTR szSect, INT cmo)
928: {
929: #ifdef DEBUG
930: INT n;
931: CHAR szCmo[cchNum];
932: LPSTR szTmp;
933:
934: if (FValidIniFile(szFile) == 0)
935: n = 1;
936: else if (FValidInfSect(szSect) == 0)
937: n = 2;
938: else
939: n = 0;
940: if (n > 0)
941: {
942: wsprintf(szCmo, "%d", cmo);
943: szTmp = SzCat3Str(szFile, ", ", szSect, ", ");
944: BadArgErr(n, "RemoveIniSection",SzCatStr(szTmp,szCmo));
945: }
946: #endif //DEBUG
947:
948: if (FRemoveIniSection(szFile, szSect, cmo) == 0)
949: {
950: #ifdef DEBUG
951: wsprintf(szCmo, "%d", cmo);
952: szTmp = SzCat3Str(szFile, ", ", szSect, ", ");
953: StfApiErr(saeFail, "RemoveIniSection", SzCatStr(szTmp,szCmo));
954: #endif //DEBUG
955: SetupError(STFERR);
956: }
957: }
958: #endif /* !STF_LITE */
959:
960:
961: //*************************************************************************
962: VOID CreateIniKeyValue(LPSTR szFile, LPSTR szSect, LPSTR szKey,
963: LPSTR szValue, INT cmo)
964: {
965: #ifdef DEBUG
966: CHAR szCmo[cchNum];
967: LPSTR szTmp1;
968: INT n;
969:
970: if (FValidIniFile(szFile) == 0)
971: n = 1;
972: else if (FValidInfSect(szSect) == 0)
973: n = 2;
974: else
975: n = 0;
976: if (n > 0)
977: {
978: wsprintf(szCmo, "%d", cmo);
979: szTmp1 = SzCat3Str(szFile, ", ", szSect, ", ");
980: szTmp1 = SzCat3Str(szTmp1, szKey, ", ", szValue);
981: BadArgErr(n, "CreateIniKeyValue", SzCat2Str(szTmp1, ", ", szCmo));
982: }
983: #endif //DEBUG
984:
985: if (FCreateIniKeyValue(szFile, szSect, szKey, szValue, cmo) == 0)
986: {
987: #ifdef DEBUG
988: wsprintf(szCmo, "%d", cmo);
989: szTmp1 = SzCat3Str(szFile, ", ", szSect, ", ");
990: szTmp1 = SzCat3Str(szTmp1, szKey, ", ", szValue);
991: StfApiErr(saeFail, "CreateIniKeyValue", SzCat2Str(szTmp1, ", ", szCmo));
992: #endif //DEBUG
993: SetupError(STFERR);
994: }
995: }
996:
997:
998: #ifndef STF_LITE
999: //*************************************************************************
1000: VOID RemoveIniKey(LPSTR szFile, LPSTR szSect, LPSTR szKey, INT cmo)
1001: {
1002: #ifdef DEBUG
1003: CHAR szCmo[cchNum];
1004: LPSTR szTmp1;
1005: INT n;
1006:
1007: if (FValidIniFile(szFile) == 0)
1008: n = 1;
1009: else if (FValidInfSect(szSect) == 0)
1010: n = 2;
1011: else if (FEmptySz(szKey))
1012: n = 3;
1013: else
1014: n = 0;
1015: if (n > 0)
1016: {
1017: wsprintf(szCmo, "%d", cmo);
1018: szTmp1 = SzCat3Str(szFile, ", ", szSect, ", ");
1019: szTmp1 = SzCat3Str(szTmp1, szKey, ", ", szCmo);
1020: BadArgErr(n, "RemoveIniKey", szTmp1);
1021: }
1022: #endif //DEBUG
1023:
1024: if (FRemoveIniKey(szFile, szSect, szKey, cmo) == 0)
1025: {
1026: #ifdef DEBUG
1027: wsprintf(szCmo, "%d", cmo);
1028: szTmp1 = SzCat3Str(szFile, ", ", szSect, ", ");
1029: szTmp1 = SzCat3Str(szTmp1, szKey, ", ", szCmo);
1030: StfApiErr(saeFail, "RemoveIniKey", szTmp1);
1031: #endif //DEBUG
1032: SetupError(STFERR);
1033: }
1034: }
1035: #endif /* !STF_LITE */
1036:
1037:
1038: #ifndef STF_LITE
1039: //*************************************************************************
1040: VOID CreateSysIniKeyValue(LPSTR szFile, LPSTR szSect, LPSTR szKey,
1041: LPSTR szValue, INT cmo)
1042: {
1043: #ifdef DEBUG
1044: CHAR szCmo[cchNum];
1045: LPSTR szTmp1;
1046: INT n;
1047:
1048: if (FValidPath(szFile) == 0)
1049: n = 1;
1050: else if (FValidInfSect(szSect) == 0)
1051: n = 2;
1052: else if (FEmptySz(szKey))
1053: n = 3;
1054: else
1055: n = 0;
1056: if (n > 0)
1057: {
1058: wsprintf(szCmo, "%d", cmo);
1059: szTmp1 = SzCat3Str(szFile, ", ", szSect, ", ");
1060: szTmp1 = SzCat3Str(szTmp1, szKey, ", ", szValue);
1061: BadArgErr(n, "CreateSysIniKeyValue", SzCat2Str(szTmp1, ", ", szCmo));
1062: }
1063: #endif //DEBUG
1064:
1065: if (FCreateSysIniKeyValue(szFile, szSect, szKey, szValue, cmo) == 0)
1066: {
1067: #ifdef DEBUG
1068: wsprintf(szCmo, "%d", cmo);
1069: szTmp1 = SzCat3Str(szFile, ", ", szSect, ", ");
1070: szTmp1 = SzCat3Str(szTmp1, szKey, ", ", szValue);
1071: StfApiErr(saeFail, "CreateSysIniKeyValue",SzCat2Str(szTmp1, ", ",
1072: szCmo));
1073: #endif //DEBUG
1074: SetupError(STFERR);
1075: }
1076: }
1077: #endif /* !STF_LITE */
1078:
1079:
1080: //*************************************************************************
1081: VOID CreateProgmanGroup(LPSTR szGroup, LPSTR szPath, INT cmo)
1082: {
1083: #ifdef DEBUG
1084: CHAR szCmo[cchNum];
1085: LPSTR szTmp;
1086:
1087: if (FEmptySz(szGroup) || (lstrlen(szGroup) > 24))
1088: {
1089: szTmp = SzCat3Str(szGroup, ", ", szPath, ", ");
1090: BadArgErr(1, "CreateProgmanGroup",SzCatStr(szTmp, szCmo));
1091: }
1092: #endif //DEBUG
1093:
1094: if (FCreateProgManGroup(szGroup, szPath, cmo) == 0)
1095: {
1096: #ifdef DEBUG
1097: szTmp = SzCat3Str(szGroup, ", ", szPath, ", ");
1098: StfApiErr(saeFail, "CreateProgmanGroup",SzCatStr(szTmp,szCmo));
1099: #endif //DEBUG
1100: SetupError(STFERR);
1101: }
1102: }
1103:
1104: #ifdef WIN32
1105: //*************************************************************************
1106: VOID CreateProgmanGroupEx(LPSTR szGroup, BOOL fCommon, INT cmo)
1107: {
1108: #ifdef DEBUG
1109: CHAR szCmo[cchNum];
1110: LPSTR szTmp;
1111:
1112: if (FEmptySz(szGroup) || (lstrlen(szGroup) > 24))
1113: {
1114: szTmp = SzCat3Str(szGroup, ", ", fCommon?"Common":"Private", ", ");
1115: BadArgErr(1, "CreateProgmanGroupEx",SzCatStr(szTmp, szCmo));
1116: }
1117: #endif //DEBUG
1118:
1119: if (FCreateProgManGroupEx(szGroup, fCommon, cmo) == 0)
1120: {
1121: #ifdef DEBUG
1122: szTmp = SzCat3Str(szGroup, ", ", fCommon?"Common":"Private", ", ");
1123: StfApiErr(saeFail, "CreateProgmanGroupEx",SzCatStr(szTmp,szCmo));
1124: #endif //DEBUG
1125: SetupError(STFERR);
1126: }
1127: }
1128: #endif //WIN32
1129:
1130:
1131: //*************************************************************************
1132: VOID ShowProgmanGroup(LPSTR szGroup, INT Cmd, INT cmo)
1133: {
1134: CHAR szT[255];
1135: #ifdef DEBUG
1136: CHAR szCmo[cchNum];
1137: CHAR szCmd[cchNum];
1138: LPSTR szTmp;
1139:
1140: if (FEmptySz(szGroup) || (lstrlen(szGroup) > 24))
1141: {
1142: wsprintf(szCmo, "%d", cmo);
1143: wsprintf(szCmd, "%d", Cmd);
1144: szTmp = SzCat3Str(szGroup, ", ", szCmd, ", ");
1145: BadArgErr(1, "ShowProgmanGroup",SzCatStr(szTmp, szCmo));
1146: }
1147: #endif //DEBUG
1148:
1149: /* for C7 use _itoa() */
1150: if (FShowProgManGroup(szGroup, itoa(Cmd, szT, 10), cmo) == 0)
1151: {
1152: #ifdef DEBUG
1153: wsprintf(szCmo, "%d", cmo);
1154: wsprintf(szCmd, "%d", Cmd);
1155: szTmp = SzCat3Str(szGroup, ", ", szCmd, ", ");
1156: StfApiErr(saeFail, "ShowProgmanGroup",SzCatStr(szTmp, szCmo));
1157: #endif //DEBUG
1158: SetupError(STFERR);
1159: }
1160: }
1161:
1162:
1163: #ifdef WIN32
1164: //*************************************************************************
1165: VOID ShowProgmanGroupEx(LPSTR szGroup, BOOL fCommon, INT Cmd, INT cmo)
1166: {
1167: CHAR szT[255];
1168: #ifdef DEBUG
1169: CHAR szCmo[cchNum];
1170: CHAR szCmd[cchNum];
1171: LPSTR szTmp;
1172:
1173: if (FEmptySz(szGroup) || (lstrlen(szGroup) > 24))
1174: {
1175: wsprintf(szCmo, "%d", cmo);
1176: wsprintf(szCmd, "%d", Cmd);
1177: szTmp = SzCat3Str(szGroup, ", ", szCmd, ", ");
1178: BadArgErr(1, "ShowProgmanGroup",SzCatStr(szTmp, szCmo));
1179: }
1180: #endif //DEBUG
1181:
1182: /* for C7 use _itoa() */
1183: if (FShowProgManGroupEx(szGroup, fCommon, itoa(Cmd, szT, 10), cmo) == 0)
1184: {
1185: #ifdef DEBUG
1186: wsprintf(szCmo, "%d", cmo);
1187: wsprintf(szCmd, "%d", Cmd);
1188: szTmp = SzCat3Str(szGroup, ", ", szCmd, ", ");
1189: StfApiErr(saeFail, "ShowProgmanGroupEx",SzCatStr(szTmp, szCmo));
1190: #endif //DEBUG
1191: SetupError(STFERR);
1192: }
1193: }
1194: #endif
1195:
1196:
1197: //*************************************************************************
1198: VOID StampResource(LPSTR szSect, LPSTR szKey, LPSTR szDst,
1199: INT wResType, INT wResId, LPSTR szData, INT cbData)
1200: {
1201: #ifdef DEBUG
1202: INT n;
1203: CHAR szResType[cchNum], szResId[cchNum], szcbData[cchNum];
1204: LPSTR szTmp1;
1205:
1206: if (FValidInfSect(szSect) == 0)
1207: n = 1;
1208: else if (FEmptySz(szKey))
1209: n = 2;
1210: else if (FValidDir(szDst) == 0)
1211: n = 3;
1212: else
1213: n = 0;
1214: if (n > 0)
1215: {
1216: wsprintf(szResType, "%d", wResType);
1217: wsprintf(szResId, "%d", wResId);
1218: wsprintf(szcbData, "%d", cbData);
1219: szTmp1 = SzCat3Str(szSect, ", ", szKey, ", ");
1220: szTmp1 = SzCat3Str(szTmp1, szDst, ", ", szResType);
1221: szTmp1 = SzCat3Str(szTmp1, ", ", szResId, ", ");
1222: BadArgErr(n,"StampResource",SzCat3Str(szTmp1, szData, ", ",szcbData));
1223: }
1224: #endif //DEBUG
1225:
1226: if (FStampResource(szSect,szKey,szDst,wResType,wResId,szData,cbData) == 0)
1227: {
1228: #ifdef DEBUG
1229: wsprintf(szResType, "%d", wResType);
1230: wsprintf(szResId, "%d", wResId);
1231: wsprintf(szcbData, "%d", cbData);
1232: szTmp1 = SzCat3Str(szSect, ", ", szKey, ", ");
1233: szTmp1 = SzCat3Str(szTmp1, szDst, ", ", szResType);
1234: szTmp1 = SzCat3Str(szTmp1, ", ", szResId, ", ");
1235: StfApiErr(saeFail,"StampResource",SzCat3Str(szTmp1, szData, ", ",
1236: szcbData));
1237: #endif //DEBUG
1238: SetupError(STFERR);
1239: }
1240: }
1241:
1242: #ifndef STF_LITE
1243:
1244: //*************************************************************************
1245: VOID DumpCopyList(LPSTR szFile)
1246: {
1247: #ifdef DEBUG
1248: if (FEmptySz(szFile))
1249: BadArgErr(1, "DumpCopyList", szFile);
1250: #endif //DEBUG
1251:
1252: if (FDumpCopyListToFile(szFile) == 0)
1253: {
1254: #ifdef DEBUG
1255: StfApiErr(saeFail, "DumpCopyList", szFile);
1256: #endif //DEBUG
1257: SetupError(STFERR);
1258: }
1259: }
1260: #endif /* !STF_LITE */
1261:
1262: //*************************************************************************
1263: VOID ClearCopyList(VOID)
1264: {
1265: ResetCopyList();
1266: }
1267:
1268:
1269: //*************************************************************************
1270: LONG GetCopyListCost(LPSTR szExtraList, LPSTR szCostList,
1271: LPSTR szNeedList)
1272: {
1273: LONG lNeed = LcbGetCopyListCost(szExtraList, szCostList, szNeedList);
1274:
1275: if (lNeed < 0)
1276: {
1277: #ifdef DEBUG
1278: LPSTR szTmp;
1279: szTmp = SzCat3Str(szExtraList, ", ", szCostList, ", ");
1280: StfApiErr(saeFail, "GetCopyListCost", SzCatStr(szTmp,szNeedList));
1281: #endif //DEBUG
1282: SetupError(STFERR);
1283: }
1284:
1285: return(lNeed);
1286: }
1287:
1288:
1289: //*************************************************************************
1290: VOID CreateProgmanItem(LPSTR szGroup, LPSTR szItem, LPSTR szCmd,
1291: LPSTR szOther, INT cmo)
1292: {
1293: LPSTR szItemNew = szItem;
1294: #ifdef DEBUG
1295: CHAR szCmo[cchNum];
1296: LPSTR szTmp1;
1297: #endif //DEBUG
1298:
1299: if (szOther != NULL && *szOther != '\0')
1300: szItemNew = SzCat2Str(szItem, ",", szOther);
1301:
1302: #ifdef DEBUG
1303: if (FEmptySz(szGroup) || (lstrlen(szGroup) > 24))
1304: {
1305: wsprintf(szCmo, "%d", cmo);
1306: szTmp1 = SzCat3Str(szGroup, ", ", szCmd, ", ");
1307: BadArgErr(1, "CreateProgmanItem",SzCatStr(szTmp1,szCmo));
1308: }
1309: #endif //DEBUG
1310:
1311: if (FCreateProgManItem(szGroup, szItemNew, szCmd, cmo) == 0)
1312: {
1313: #ifdef DEBUG
1314: wsprintf(szCmo, "%d", cmo);
1315: szTmp1 = SzCat3Str(szGroup, ", ", szItem, ", ");
1316: szTmp1 = SzCat3Str(szTmp1, szCmd, ", ", szOther);
1317: StfApiErr(saeFail,"CreateProgmanItem", SzCat2Str(szTmp1, ", ", szCmo));
1318: #endif //DEBUG
1319: SetupError(STFERR);
1320: }
1321: }
1322:
1323: #ifdef WIN32
1324: //*************************************************************************
1325: VOID CreateProgmanItemEx(LPSTR szGroup, BOOL fCommon, LPSTR szItem, LPSTR szCmd,
1326: LPSTR szOther, INT cmo)
1327: {
1328: LPSTR szItemNew = szItem;
1329: #ifdef DEBUG
1330: CHAR szCmo[cchNum];
1331: LPSTR szTmp1;
1332: #endif //DEBUG
1333:
1334: if (szOther != NULL && *szOther != '\0')
1335: szItemNew = SzCat2Str(szItem, ",", szOther);
1336:
1337: #ifdef DEBUG
1338: if (FEmptySz(szGroup) || (lstrlen(szGroup) > 24))
1339: {
1340: wsprintf(szCmo, "%d", cmo);
1341: szTmp1 = SzCat3Str(szGroup, ", ", szCmd, ", ");
1342: BadArgErr(1, "CreateProgmanItemEx",SzCatStr(szTmp1,szCmo));
1343: }
1344: #endif //DEBUG
1345:
1346: if (FCreateProgManItemEx(szGroup, fCommon, szItemNew, szCmd, cmo) == 0)
1347: {
1348: #ifdef DEBUG
1349: wsprintf(szCmo, "%d", cmo);
1350: szTmp1 = SzCat3Str(szGroup, ", ", szItem, ", ");
1351: szTmp1 = SzCat3Str(szTmp1, szCmd, ", ", szOther);
1352: StfApiErr(saeFail,"CreateProgmanItemEx", SzCat2Str(szTmp1, ", ", szCmo));
1353: #endif //DEBUG
1354: SetupError(STFERR);
1355: }
1356: }
1357: #endif //WIN32
1358:
1359:
1360: #ifndef STF_LITE
1361: //*************************************************************************
1362: VOID AddDos5Help(LPSTR szProgName, LPSTR szProgHelp, INT cmo)
1363: {
1364: #ifndef WIN32
1365: #ifdef DEBUG
1366: INT n;
1367: CHAR szCmo[cchNum];
1368: LPSTR szTmp;
1369:
1370: if (FEmptySz(szProgName)
1371: || (szProgName[0] == '@')
1372: || (lstrlen(szProgName) > 8))
1373: n = 1;
1374: else if ((lstrchr(szProgName, ' ') != NULL)
1375: || (lstrchr(szProgName,'\t') != NULL))
1376: n = 1;
1377: else if (FEmptySz(szProgHelp))
1378: n = 2;
1379: else
1380: n = 0;
1381: if (n > 0)
1382: {
1383: wsprintf(szCmo, "%d", cmo);
1384: szTmp = SzCat3Str(szProgName, ", ",szProgHelp, ", ");
1385: BadArgErr(n, "AddDos5Help", SzCatStr(szTmp,szCmo));
1386: }
1387: #endif //DEBUG
1388:
1389: if (FAddDos5Help(szProgName, szProgHelp, cmo) == 0)
1390: {
1391: #ifdef DEBUG
1392: wsprintf(szCmo, "%d", cmo);
1393: szTmp = SzCat3Str(szProgName, ", ",szProgHelp, ", ");
1394: StfApiErr(saeFail, "AddDos5Help",SzCatStr(szTmp, szCmo));
1395: #endif //DEBUG
1396: SetupError(STFERR);
1397: }
1398: #endif
1399: }
1400: #endif /* !STF_LITE */
1401:
1402:
1403: //*************************************************************************
1404: VOID CopyFilesInCopyList(VOID)
1405: {
1406: INT grc = GrcCopyFilesInCopyList((HANDLE)HinstFrame());
1407:
1408: if (grc == grcUserQuit)
1409: SetupError(STFQUIT);
1410: else if (grc > 0)
1411: {
1412: #ifdef DEBUG
1413: StfApiErr(saeFail, "CopyFilesInCopyList", "");
1414: #endif //DEBUG
1415: SetupError(STFERR);
1416: }
1417: }
1418:
1419:
1420: //*************************************************************************
1421: VOID CopyAFile(LPSTR szFullPathSrc, LPSTR szFullPathDst, INT cmo,
1422: INT fAppend)
1423: {
1424: #ifdef DEBUG
1425: INT n;
1426: CHAR szCmo[cchNum], szAppend[cchNum];
1427: LPSTR szTmp;
1428:
1429: if (FValidPath(szFullPathSrc) == 0)
1430: n = 1;
1431: else if (FValidPath(szFullPathDst) == 0)
1432: n = 2;
1433: else
1434: n = 0;
1435: if (n > 0)
1436: {
1437: wsprintf(szCmo, "%d", cmo);
1438: wsprintf(szAppend, "%d", fAppend);
1439: szTmp = SzCat3Str(szFullPathSrc, ", ", szFullPathDst, ", ");
1440: BadArgErr(n, "CopyAFile",SzCat3Str(szTmp,szCmo,", ",szAppend));
1441: }
1442: #endif //DEBUG
1443:
1444: if (FCopyOneFile(szFullPathSrc, szFullPathDst, (cmo|cmoCopy), fAppend) == 0)
1445: {
1446: #ifdef DEBUG
1447: wsprintf(szCmo, "%d", cmo);
1448: wsprintf(szAppend, "%d", fAppend);
1449: szTmp = SzCat3Str(szFullPathSrc, ", ", szFullPathDst, ", ");
1450: StfApiErr(saeFail, "CopyAFile",SzCat3Str(szTmp, szCmo,", ",szAppend));
1451: #endif //DEBUG
1452: SetupError(STFERR);
1453: }
1454: }
1455:
1456:
1457: //*************************************************************************
1458: VOID RemoveFile(LPSTR szFullPathSrc, INT cmo)
1459: {
1460: #ifdef DEBUG
1461: CHAR szCmo[cchNum];
1462:
1463: if (FValidPath(szFullPathSrc) == 0)
1464: {
1465: wsprintf(szCmo, "%d", cmo);
1466: BadArgErr(1, "RemoveFile",SzCat2Str(szFullPathSrc,", ",szCmo));
1467: }
1468: #endif //DEBUG
1469:
1470: if (YnrcRemoveFile(szFullPathSrc, cmo) == ynrcNo)
1471: {
1472: #ifdef DEBUG
1473: StfApiErr(saeFail, "RemoveFile",SzCat2Str(szFullPathSrc,", ",szCmo));
1474: #endif //DEBUG
1475: SetupError(STFERR);
1476: }
1477: }
1478:
1479:
1480: #ifndef STF_LITE
1481: //*************************************************************************
1482: VOID BackupFile(LPSTR szFullPath, LPSTR szBackup)
1483: {
1484: #ifdef DEBUG
1485: INT n;
1486:
1487: if (FValidPath(szFullPath) == 0)
1488: n = 1;
1489: else if (FEmptySz(szBackup))
1490: n = 2;
1491: else
1492: n = 0;
1493: if (n > 0)
1494: BadArgErr(n, "BackupFile",SzCat2Str(szFullPath,", ",szBackup));
1495: #endif //DEBUG
1496:
1497: if (YnrcBackupFile(szFullPath, szBackup, cmoNone) == ynrcNo)
1498: {
1499: #ifdef DEBUG
1500: StfApiErr(saeFail, "BackupFile",SzCat2Str(szFullPath,", ",szBackup));
1501: #endif //DEBUG
1502: SetupError(STFERR);
1503: }
1504: }
1505:
1506:
1507: //*************************************************************************
1508: VOID RenameFile(LPSTR szFullPath, LPSTR szBackup)
1509: {
1510: #ifdef DEBUG
1511: INT n;
1512:
1513: if (FValidPath(szFullPath) == 0)
1514: n = 1;
1515: else if (FEmptySz(szBackup))
1516: n = 2;
1517: else
1518: n = 0;
1519: if (n > 0)
1520: BadArgErr(n, "RenameFile",SzCat2Str(szFullPath,", ",szBackup));
1521: #endif //DEBUG
1522:
1523: if (YnrcBackupFile(szFullPath, szBackup, cmoNone) == ynrcNo)
1524: {
1525: #ifdef DEBUG
1526: StfApiErr(saeFail, "RenameFile",SzCat2Str(szFullPath,", ",szBackup));
1527: #endif //DEBUG
1528: SetupError(STFERR);
1529: }
1530: }
1531: #endif /* !STF_LITE */
1532:
1533:
1534: //*************************************************************************
1535: VOID AddSectionFilesToCopyList(LPSTR szSect, LPSTR szSrc,
1536: LPSTR szDest)
1537: {
1538: #ifdef DEBUG
1539: INT n;
1540: LPSTR szTmp;
1541:
1542: if (FValidInfSect(szSect) == 0)
1543: n = 1;
1544: else if (FValidDir(szSrc) == 0)
1545: n = 2;
1546: else if (FValidDir(szDest) == 0)
1547: n = 3;
1548: else
1549: n = 0;
1550: if (n > 0)
1551: {
1552: szTmp = SzCat3Str(szSect, ", ", szSrc, ", ");
1553: BadArgErr(n, "AddSectionFilesToCopyList",SzCatStr(szTmp,szDest));
1554: }
1555: #endif //DEBUG
1556:
1557: if (FAddSectionFilesToCopyList(szSect, szSrc, szDest) == 0)
1558: {
1559: #ifdef DEBUG
1560: szTmp = SzCat3Str(szSect, ", ", szSrc, ", ");
1561: StfApiErr(saeFail, "AddSectionFilesToCopyList",SzCatStr(szTmp, szDest));
1562: #endif //DEBUG
1563: SetupError(STFERR);
1564: }
1565: }
1566:
1567:
1568: //*************************************************************************
1569: VOID AddSectionKeyFileToCopyList(LPSTR szSect, LPSTR szKey,
1570: LPSTR szSrc, LPSTR szDest)
1571: {
1572: #ifdef DEBUG
1573: INT n;
1574: LPSTR szTmp;
1575:
1576: if (FValidInfSect(szSect) == 0)
1577: n = 1;
1578: else if (FEmptySz(szKey))
1579: n = 2;
1580: else if (FValidDir(szSrc) == 0)
1581: n = 3;
1582: else if (FValidDir(szDest) == 0)
1583: n = 4;
1584: else
1585: n = 0;
1586: if (n > 0)
1587: {
1588: szTmp = SzCat3Str(szSect, ", ", szKey, ", ");
1589: BadArgErr(n, "AddSectionKeyFileToCopyList", SzCat3Str(szTmp, szSrc,
1590: ", ", szDest));
1591: }
1592: #endif //DEBUG
1593:
1594: if (FAddSectionKeyFileToCopyList(szSect, szKey, szSrc, szDest) == 0)
1595: {
1596: #ifdef DEBUG
1597: szTmp = SzCat3Str(szSect, ", ", szKey, ", ");
1598: StfApiErr(saeFail, "AddSectionKeyFileToCopyList", SzCat3Str(szTmp,
1599: szSrc, ", ", szDest));
1600: #endif //DEBUG
1601: SetupError(STFERR);
1602: }
1603: }
1604:
1605:
1606: #ifndef STF_LITE
1607: //*************************************************************************
1608: VOID AddSpecialFileToCopyList(LPSTR szSect, LPSTR szKey, LPSTR szSrc,
1609: LPSTR szDest)
1610: {
1611: #ifdef DEBUG
1612: INT n;
1613: LPSTR szTmp;
1614:
1615: if (FValidInfSect(szSect) == 0)
1616: n = 1;
1617: else if (FEmptySz(szKey))
1618: n = 2;
1619: else if (FValidDir(szSrc) == 0)
1620: n = 3;
1621: else if (FValidPath(szDest) == 0)
1622: n = 4;
1623: else
1624: n = 0;
1625: if (n > 0)
1626: {
1627: szTmp = SzCat3Str(szSect, ", ", szKey, ", ");
1628: BadArgErr(n, "AddSpecialFileToCopyList", SzCat3Str(szTmp, szSrc, ", ",
1629: szDest));
1630: }
1631: #endif //DEBUG
1632:
1633: if (FAddSpecialFileToCopyList(szSect, szKey, szSrc, szDest) == 0)
1634: {
1635: #ifdef DEBUG
1636: szTmp = SzCat3Str(szSect, ", ", szKey, ", ");
1637: StfApiErr(saeFail, "AddSpecialFileToCopyList", SzCat3Str(szTmp, szSrc,
1638: ", ", szDest));
1639: #endif //DEBUG
1640: SetupError(STFERR);
1641: }
1642: }
1643: #endif /* !STF_LITE */
1644:
1645:
1646: //*************************************************************************
1647: VOID AddToBillboardList(LPSTR szDll, INT idDlg, LPSTR szProc,
1648: LONG lTicks)
1649: {
1650: #ifdef DEBUG
1651: INT n;
1652: CHAR szidDlg[cchNum], szlTicks[cchNum];
1653: LPSTR szTmp;
1654:
1655: if (FEmptySz(szDll))
1656: n = 1;
1657: else if (idDlg == 0)
1658: n = 2;
1659: else if (FEmptySz(szProc))
1660: n = 3;
1661: else if (lTicks <= 0)
1662: n = 4;
1663: else
1664: n = 0;
1665: if (n > 0)
1666: {
1667: wsprintf(szidDlg, "%d", idDlg);
1668: wsprintf(szlTicks, "%d", lTicks);
1669: szTmp = SzCat3Str(szDll,", ", szidDlg,", ");
1670: BadArgErr(n,"AddToBillboardList",SzCat3Str(szTmp,szProc,", ",szlTicks));
1671: }
1672: #endif //DEBUG
1673:
1674: if (FAddToBillboardList(szDll, idDlg, szProc, lTicks) == 0)
1675: {
1676: #ifdef DEBUG
1677: wsprintf(szidDlg, "%d", idDlg);
1678: wsprintf(szlTicks, "%d", lTicks);
1679: szTmp = SzCat3Str(szDll,", ", szidDlg,", ");
1680: StfApiErr(saeFail, "AddToBillboardList", SzCat3Str(szTmp, szProc, ", ",
1681: szlTicks));
1682: #endif //DEBUG
1683: SetupError(STFERR);
1684: }
1685: }
1686:
1687:
1688: #ifndef STF_LITE
1689: //*************************************************************************
1690: VOID AddBlankToBillboardList(LONG lTicks)
1691: {
1692: #ifdef DEBUG
1693: CHAR szlTicks[cchNum];
1694:
1695: if (lTicks <= 0)
1696: {
1697: wsprintf(szlTicks, "%d", lTicks);
1698: BadArgErr(1, "AddBlankToBillboardList", szlTicks);
1699: }
1700: #endif //DEBUG
1701:
1702: if (FAddToBillboardList(NULL, 0, NULL, lTicks) == 0)
1703: {
1704: #ifdef DEBUG
1705: wsprintf(szlTicks, "%d", lTicks);
1706: StfApiErr(saeFail, "AddBlankToBillboardList",szlTicks);
1707: #endif //DEBUG
1708: SetupError(STFERR);
1709: }
1710: }
1711:
1712:
1713: //*************************************************************************
1714: VOID ClearBillboardList(VOID)
1715: {
1716: if (FClearBillboardList() == 0)
1717: {
1718: #ifdef DEBUG
1719: StfApiErr(saeFail, "ClearBillboardList", "");
1720: #endif //DEBUG
1721: SetupError(STFERR);
1722: }
1723: }
1724: #endif /* !STF_LITE */
1725:
1726:
1727: #ifndef STF_LITE
1728: //*************************************************************************
1729: VOID OpenLogFile(LPSTR szFile, INT fAppend)
1730: {
1731: #ifdef DEBUG
1732: CHAR szAppend[cchNum];
1733:
1734: if (FValidPath(szFile) == 0)
1735: {
1736: wsprintf(szAppend, "%d", fAppend);
1737: BadArgErr(1, "OpenLogFile",SzCat2Str(szFile,", ",szAppend));
1738: }
1739: #endif //DEBUG
1740:
1741: if (FOpenLogFile(szFile, fAppend) == 0)
1742: {
1743: #ifdef DEBUG
1744: wsprintf(szAppend, "%d", fAppend);
1745: StfApiErr(saeFail, "OpenLogFile",SzCat2Str(szFile,", ",szAppend));
1746: #endif //DEBUG
1747: SetupError(STFERR);
1748: }
1749: }
1750:
1751:
1752: //*************************************************************************
1753: VOID CloseLogFile(VOID)
1754: {
1755: if (FCloseLogFile() == 0)
1756: {
1757: #ifdef DEBUG
1758: StfApiErr(saeFail, "CloseLogFile", "");
1759: #endif //DEBUG
1760: SetupError(STFERR);
1761: }
1762: }
1763:
1764:
1765: //*************************************************************************
1766: VOID WriteToLogFile(LPSTR szStr)
1767: {
1768: if (FWriteToLogFile(szStr, 1) == 0)
1769: {
1770: #ifdef DEBUG
1771: StfApiErr(saeFail, "WriteToLogFile", szStr);
1772: #endif //DEBUG
1773: SetupError(STFERR);
1774: }
1775: }
1776: #endif /* !STF_LITE */
1777:
1778:
1779: //'' -1 in either parameter will mean 'center in frame client area'
1780: //*************************************************************************
1781: VOID SetCopyGaugePosition(INT x, INT y)
1782: {
1783: ProSetPos(x, y);
1784: }
1785:
1786:
1787: #ifndef STF_LITE
1788: //*************************************************************************
1789: LPSTR FindFileUsingFileOpen(LPSTR szFile, LPSTR szBfr, INT cbBfrMax)
1790: {
1791: INT wRet;
1792:
1793: if (szBfr)
1794: *szBfr = ' '; //REVIEW: KLUDGE: See POOF Bug #635
1795: wRet = WFindFileUsingFileOpen(szFile, szBfr, cbBfrMax);
1796:
1797: if (wRet == 1)
1798: {
1799: szBfr[0] = '\0';
1800: return(szBfr);
1801: }
1802: if (wRet == 0)
1803: return(szBfr);
1804: else
1805: {
1806: szBfr[0] = '\0';
1807: #ifdef DEBUG
1808: StfApiErr(saeFail, "FindFileUsingFileOpen", szFile);
1809: #endif //DEBUG
1810: SetupError(STFERR);
1811: }
1812: }
1813: #endif /* !STF_LITE */
1814:
1815:
1816: //*************************************************************************
1817: INT IsDirWritable(LPSTR szDir)
1818: {
1819: return(FIsDirWritable(szDir));
1820: }
1821:
1822:
1823: //*************************************************************************
1824: INT IsFileWritable(LPSTR szFile)
1825: {
1826: #ifdef DEBUG
1827: if (FValidDir(szFile) == 0)
1828: BadArgErr(1, "IsFileWritable", szFile);
1829: #endif //DEBUG
1830:
1831: return(FIsFileWritable(szFile));
1832: }
1833:
1834:
1835: //*************************************************************************
1836: INT GetWindowsMajorVersion(VOID)
1837: {
1838: DWORD dw = GetVersion();
1839:
1840: return((INT)(LOBYTE(LOWORD(dw))));
1841: }
1842:
1843:
1844: //*************************************************************************
1845: INT GetWindowsMinorVersion(VOID)
1846: {
1847: DWORD dw = GetVersion();
1848:
1849: return((INT)(HIBYTE(LOWORD(dw))));
1850: }
1851:
1852:
1853: #ifndef STF_LITE
1854: //*************************************************************************
1855: LPSTR GetNthFieldFromIniString(LPSTR szLine, INT iField, LPSTR szBfr,
1856: INT cbBfrMax)
1857: {
1858: LPSTR szEnd;
1859:
1860: if (iField < 1)
1861: {
1862: #ifdef DEBUG
1863: CHAR szField[cchNum];
1864:
1865: wsprintf(szField, "%d", iField);
1866: StfApiErr(saeFail, "GetNthFieldFromIniString", SzCat2Str(szLine, ", ",
1867: szField));
1868: #endif //DEBUG
1869: SetupError(STFERR);
1870: }
1871:
1872: while (--iField > 0)
1873: {
1874: while (*szLine != '\0' && *szLine != ',')
1875: szLine = AnsiNext(szLine);
1876: szLine = AnsiNext(szLine);
1877: }
1878:
1879: while (*szLine == ' ' || *szLine == '\t')
1880: szLine = AnsiNext(szLine);
1881:
1882: szEnd = szLine;
1883: while (*szEnd != '\0' && *szEnd != ',')
1884: szEnd = AnsiNext(szEnd);
1885:
1886: if (cbBfrMax < szEnd - szLine)
1887: {
1888: DoMsgBox("Buffer Overflow","MS-Setup Error",MB_ICONHAND+MB_OK);
1889: SetupError(STFERR);
1890: }
1891:
1892: if (*szEnd != '\0')
1893: {
1894: Assert(*szEnd == ',');
1895: *szEnd = '\0';
1896: lstrcpy(szBfr, szLine);
1897: *szEnd = ',';
1898: }
1899: else
1900: lstrcpy(szBfr, szLine);
1901:
1902: return(szBfr);
1903: }
1904:
1905:
1906: //*************************************************************************
1907: INT GetWindowsMode(VOID)
1908: {
1909: #if defined(WIN16)
1910: LONG longTmp = GetWinFlags();
1911:
1912: if (longTmp & WF_WINNT)
1913: return(3);
1914: else if (longTmp & WF_STANDARD)
1915: return(1);
1916: else if (longTmp & WF_ENHANCED)
1917: return(2);
1918: else
1919: return(0);
1920: #elif defined(WIN32)
1921: return(2);
1922: #endif
1923: }
1924: #endif /* !STF_LITE */
1925:
1926:
1927: //*************************************************************************
1928: LPSTR GetWindowsDir(LPSTR szBuf, INT cbBufMax)
1929: {
1930: CHAR szBufT[255];
1931: INT cbBuf = GetWindowsDirectory(szBufT, 255);
1932: INT dch;
1933:
1934: if (cbBuf == 0)
1935: {
1936: *szBuf = '\0';
1937: #ifdef DEBUG
1938: StfApiErr(saeFail, "GetWindowsDir", "");
1939: #endif //DEBUG
1940: SetupError(STFERR);
1941: }
1942: else
1943: {
1944: if (cbBuf > 255)
1945: {
1946: DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK);
1947: SetupError(STFERR);
1948: }
1949: if (szBufT[0] == '\\')
1950: {
1951: if (cbBufMax < 2)
1952: {
1953: DoMsgBox("Buffer Overflow","MS-Setup Error",MB_ICONHAND+MB_OK);
1954: SetupError(STFERR);
1955: }
1956: lstrcpy(szBuf, szCurDir);
1957: dch = 2;
1958: }
1959: else if (szBufT[1] != ':')
1960: {
1961: if (cbBufMax < 3)
1962: {
1963: DoMsgBox("Buffer Overflow","MS-Setup Error",MB_ICONHAND+MB_OK);
1964: SetupError(STFERR);
1965: }
1966: lstrcpy(szBuf, szCurDir);
1967: dch = 3;
1968: }
1969: else
1970: dch = 0;
1971:
1972: if (cbBufMax - dch < (INT)lstrlen(szBufT))
1973: {
1974: DoMsgBox("Buffer Overflow","MS-Setup Error",MB_ICONHAND+MB_OK);
1975: SetupError(STFERR);
1976: }
1977: lstrcpy(szBuf + dch, szBufT);
1978:
1979: if (szBufT[lstrlen(szBufT) - 1] != '\\')
1980: {
1981: if (cbBufMax < (INT)lstrlen(szBuf) + 1)
1982: {
1983: DoMsgBox("Buffer Overflow","MS-Setup Error",MB_ICONHAND+MB_OK);
1984: SetupError(STFERR);
1985: }
1986: lstrcat(szBuf, "\\");
1987: }
1988:
1989: return(szBuf);
1990: }
1991: }
1992:
1993:
1994: //*************************************************************************
1995: LPSTR GetWindowsSysDir(LPSTR szBuf, INT cbBufMax)
1996: {
1997: CHAR szBufT[255];
1998: INT cbBuf = GetSystemDirectory(szBufT, 255);
1999: INT dch;
2000:
2001: if (cbBuf == 0)
2002: {
2003: #ifdef DEBUG
2004: StfApiErr(saeFail, "GetWindowsSysDir", "");
2005: #endif //DEBUG
2006: SetupError(STFERR);
2007: }
2008: else
2009: {
2010: if (cbBuf > 255)
2011: {
2012: DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK);
2013: SetupError(STFERR);
2014: }
2015: if (szBufT[0] == '\\')
2016: {
2017: if (cbBufMax < 2)
2018: {
2019: DoMsgBox("Buffer Overflow","MS-Setup Error",MB_ICONHAND+MB_OK);
2020: SetupError(STFERR);
2021: }
2022: lstrcpy(szBuf, szCurDir);
2023: dch = 2;
2024: }
2025: else if (szBufT[1] != ':')
2026: {
2027: if (cbBufMax < 3)
2028: {
2029: DoMsgBox("Buffer Overflow","MS-Setup Error",MB_ICONHAND+MB_OK);
2030: SetupError(STFERR);
2031: }
2032: lstrcpy(szBuf, szCurDir);
2033: dch = 3;
2034: }
2035: else
2036: dch = 0;
2037:
2038: if (cbBufMax - dch < (INT)lstrlen(szBufT))
2039: {
2040: DoMsgBox("Buffer Overflow","MS-Setup Error",MB_ICONHAND+MB_OK);
2041: SetupError(STFERR);
2042: }
2043: lstrcpy(szBuf + dch, szBufT);
2044:
2045: if (szBufT[lstrlen(szBufT) - 1] != '\\')
2046: {
2047: if (cbBufMax < (INT)lstrlen(szBuf) + 1)
2048: {
2049: DoMsgBox("Buffer Overflow","MS-Setup Error",MB_ICONHAND+MB_OK);
2050: SetupError(STFERR);
2051: }
2052: lstrcat(szBuf, "\\");
2053: }
2054:
2055: return(szBuf);
2056: }
2057: }
2058:
2059:
2060: #ifndef STF_LITE
2061: //*************************************************************************
2062: INT IsWindowsShared(VOID)
2063: {
2064: CHAR szWin[255];
2065: CHAR szSys[255];
2066: LPSTR szWinT;
2067: LPSTR szSysT;
2068:
2069: GetWindowsDir(szWin, 255);
2070: GetWindowsSysDir(szSys, 255);
2071:
2072: AnsiUpper(szWin);
2073: AnsiUpper(szSys);
2074:
2075: if (lstrlen((LPSTR)szWin) == 0)
2076: {
2077: #ifdef DEBUG
2078: StfApiErr(saeFail, "IsWindowsShared", "");
2079: #endif //DEBUG
2080: SetupError(STFERR);
2081: }
2082:
2083: for (szWinT = szWin, szSysT = szSys; *szWinT; szWinT++, szSysT++)
2084: if (*szWinT != *szSysT)
2085: return(TRUE);
2086:
2087: return(FALSE);
2088: }
2089:
2090:
2091: //*************************************************************************
2092: INT GetScreenWidth(VOID)
2093: {
2094: return(GetSystemMetrics(SM_CXSCREEN));
2095: }
2096:
2097:
2098: //*************************************************************************
2099: INT GetScreenHeight(VOID)
2100: {
2101: return(GetSystemMetrics(SM_CYSCREEN));
2102: }
2103:
2104:
2105: //*************************************************************************
2106: VOID SetRestartDir(LPSTR szDir)
2107: {
2108: #ifdef DEBUG
2109: if (FValidDir(szDir) == 0)
2110: BadArgErr(1, "SetRestartDir", szDir);
2111: #endif //DEBUG
2112:
2113: if (FSetRestartDir(szDir) == 0)
2114: {
2115: #ifdef DEBUG
2116: StfApiErr(saeFail, "SetRestartDir", szDir);
2117: #endif //DEBUG
2118: SetupError(STFERR);
2119: }
2120: }
2121:
2122:
2123: //*************************************************************************
2124: INT RestartListEmpty(VOID)
2125: {
2126: return(FRestartListEmpty());
2127: }
2128:
2129:
2130: //*************************************************************************
2131: INT ExitExecRestart(VOID)
2132: {
2133: return(FExitExecRestart());
2134: }
2135: #endif /* !STF_LITE */
2136:
2137:
2138: #ifndef STF_LITE
2139: //*************************************************************************
2140: VOID PrependToPath(LPSTR szSrc, LPSTR szDst, LPSTR szDir, INT cmo)
2141: {
2142: #ifdef DEBUG
2143: INT n;
2144: CHAR szCmo[cchNum];
2145: LPSTR szTmp;
2146:
2147: if ((FValidPath(szSrc) == 0) && (FValidSz(szSrc)))
2148: n = 1;
2149: else if (FValidPath(szDst) == 0)
2150: n = 2;
2151: else if (FValidDir(szDir) == 0)
2152: n = 3;
2153: else
2154: n = 0;
2155:
2156: if (n > 0)
2157: {
2158: wsprintf(szCmo, "%d", cmo);
2159: szTmp = SzCat3Str(szSrc, ", ", szDst, ", ");
2160: BadArgErr(n, "PrependToPath",SzCat3Str(szTmp,szDir,", ",szCmo));
2161: }
2162: #endif //DEBUG
2163:
2164: if (FPrependToPath(szSrc, szDst, szDir, cmo) == 0)
2165: {
2166: #ifdef DEBUG
2167: wsprintf(szCmo, "%d", cmo);
2168: szTmp = SzCat3Str(szSrc, ", ", szDst, ", ");
2169: StfApiErr(saeFail, "PrependToPath",SzCat3Str(szTmp,szDir,", ",szCmo));
2170: #endif //DEBUG
2171: SetupError(STFERR);
2172: }
2173: }
2174: #endif /* !STF_LITE */
2175:
2176:
2177:
2178: //**************************************************************************
2179: //*************************** Error Handlers *****************************
2180: //**************************************************************************
2181:
2182: #ifdef DEBUG
2183:
2184: //**************************************************************************
2185: VOID StfApiErr(INT nMsg, LPSTR szApi, LPSTR szArgs)
2186: {
2187: CHAR rgchCapion[] = "MS-Setup Toolkit API Error";
2188: CHAR rgchText[cchMax * 2];
2189:
2190: if (szApi == NULL)
2191: *szApi = '\0';
2192: if (szArgs == NULL)
2193: *szArgs = '\0';
2194:
2195: switch(nMsg)
2196: {
2197: case saeFail:
2198: lstrcpy(rgchText, "Failed");
2199: break;
2200: case saeInit:
2201: lstrcpy(rgchText, "Already Initialized");
2202: break;
2203: case saeNYI:
2204: lstrcpy(rgchText, "NYI");
2205: break;
2206: default:
2207: lstrcpy(rgchText, "Bad Arg ");
2208: /* for C7 use _itoa() */
2209: itoa(nMsg - saeArg, (CHAR *)(rgchText+lstrlen(rgchText)), 10);
2210: break;
2211: }
2212:
2213: lstrcat(rgchText, ": ");
2214: lstrcat(rgchText, szApi);
2215: if (*szArgs != '\0')
2216: {
2217: lstrcat(rgchText, " (");
2218: lstrcat(rgchText, szArgs);
2219: lstrcat(rgchText, ")");
2220: }
2221: #ifndef STF_LITE
2222: Assert(lstrlen(rgchText) < cchMax * 2);
2223: #endif /* !STF_LITE */
2224: DoMsgBox(rgchText, rgchCapion, MB_TASKMODAL+MB_ICONHAND+MB_OK);
2225: }
2226:
2227:
2228: //**************************************************************************
2229: VOID BadArgErr(INT nArg, LPSTR szApi, LPSTR szArgs)
2230: {
2231: StfApiErr(nArg+saeArg, szApi, szArgs);
2232: SetupError(STFERR);
2233: }
2234:
2235:
2236: //**************************************************************************
2237: INT FValidInfSect(LPSTR szSect)
2238: {
2239: if (szSect == NULL || *szSect == '\0')
2240: return(0);
2241:
2242: while (*szSect)
2243: {
2244: if (*szSect == ']')
2245: return(0);
2246: szSect = AnsiNext(szSect);
2247: }
2248:
2249: return(1);
2250: }
2251:
2252:
2253: //**************************************************************************
2254: INT FValidIniFile(LPSTR szFile)
2255: {
2256: if (!FValidPath(szFile) && lstrcmpi(szFile, "WIN.INI") != 0)
2257: return(0);
2258:
2259: return(1);
2260: }
2261:
2262:
2263: //**************************************************************************
2264: INT FValidDrive(LPSTR szDrive)
2265: {
2266: if (szDrive == NULL || *szDrive == '\0')
2267: return(0);
2268: if (szDrive[0] == '\\' && szDrive[1] == '\\') /* UNC path */
2269: return(1);
2270: if ((*szDrive < 'a' || *szDrive > 'z')
2271: && (*szDrive < 'A' || *szDrive > 'Z'))
2272: return(0);
2273: if (lstrlen(szDrive) == 1)
2274: return(1);
2275: if (szDrive[1] == ':')
2276: return(1);
2277:
2278: return(0);
2279: }
2280:
2281: #endif //DEBUG
2282:
2283:
2284: LPSTR SzCatStr(LPSTR sz1, LPSTR sz2)
2285: {
2286: static CHAR szT[cchMax * 2];
2287:
2288: #ifndef STF_LITE
2289: Assert(lstrlen(sz1)+lstrlen(sz2) < cchMax * 2);
2290: #endif /* !STF_LITE */
2291: lstrcpy(szT, sz1);
2292: lstrcat(szT, sz2);
2293:
2294: return(szT);
2295: }
2296:
2297:
2298: LPSTR SzCat2Str(LPSTR sz1, LPSTR sz2, LPSTR sz3)
2299: {
2300: static CHAR szT[cchMax * 3];
2301:
2302: #ifndef STF_LITE
2303: Assert(lstrlen(sz1)+lstrlen(sz2)+lstrlen(sz3) < cchMax * 3);
2304: #endif /* !STF_LITE */
2305: lstrcpy(szT, sz1);
2306: lstrcat(szT, sz2);
2307: lstrcat(szT, sz3);
2308:
2309: return(szT);
2310: }
2311:
2312:
2313: LPSTR SzCat3Str(LPSTR sz1, LPSTR sz2, LPSTR sz3, LPSTR sz4)
2314: {
2315: static CHAR szT[cchMax * 4];
2316:
2317: #ifndef STF_LITE
2318: Assert(lstrlen(sz1)+lstrlen(sz2)+lstrlen(sz3)+lstrlen(sz4) < cchMax * 4);
2319: #endif /* !STF_LITE */
2320: lstrcpy(szT, sz1);
2321: lstrcat(szT, sz2);
2322: lstrcat(szT, sz3);
2323: lstrcat(szT, sz4);
2324:
2325: return(szT);
2326: }
2327:
2328:
2329: VOID EndSetupToolkit()
2330: {
2331: TerminateFrame();
2332: TerminateInstall();
2333: #ifndef STF_LITE
2334: TerminateRegDb();
2335: #endif
2336: }
2337:
2338:
2339: // **************************************************************************
2340: void RightTrim(LPSTR sz)
2341: {
2342: LPSTR szBlank = NULL;
2343:
2344: while (*sz != '\0')
2345: {
2346: if (*sz != ' ')
2347: szBlank = NULL;
2348: else if (szBlank == NULL)
2349: szBlank = sz;
2350: sz = AnsiNext(sz);
2351: }
2352:
2353: if (szBlank != NULL)
2354: *szBlank = '\0';
2355: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.