Annotation of mstools/mssetup/source/setupapi.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.