File:  [WindowsNT SDKs] / mstools / mssetup / sample2.mst
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Thu Aug 9 18:22:54 2018 UTC (7 years, 9 months ago) by root
Branches: msft, MAIN
CVS tags: ntsdk-oct-1992, HEAD
Microsoft Windows NT Build 328 10-12-1992

'**************************************************************************
'*                       MSSetup Toolkit Sample 2
'**************************************************************************

'$DEFINE DEBUG  ''Define for script development/debugging

'$INCLUDE 'setupapi.inc'
'$INCLUDE 'msdetect.inc'

''Dialog ID's
CONST ASKQUIT      = 200
CONST DESTPATH     = 300
CONST EXITFAILURE  = 400
CONST EXITQUIT     = 600
CONST EXITSUCCESS  = 700
CONST OPTIONS      = 800
CONST APPHELP      = 900
CONST CUSTINST     = 6200
CONST TOOBIG       = 6300
CONST BADPATH      = 6400

''Bitmap ID
CONST LOGO         = 1

''File Types
CONST APPFILES     = 1
CONST OPTFILES1    = 2
CONST OPTFILES2    = 3


GLOBAL DEST$        ''Default destination directory.
GLOBAL WINDRIVE$    ''Windows drive letter.
GLOBAL OPT1OPT$     ''Option selection from OptFiles1 option dialog.
GLOBAL OPT2OPT$     ''Option selection from OptFiles2 option dialog.

''CustInst list symbol names
GLOBAL APPNEEDS$    ''Option list costs per drive
GLOBAL OPT1NEEDS$
GLOBAL OPT2NEEDS$
GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)

''Dialog list symbol names
GLOBAL CHECKSTATES$
GLOBAL STATUSTEXT$
GLOBAL DRIVETEXT$


DECLARE SUB AddOptFilesToCopyList (ftype%)
DECLARE SUB RecalcOptFiles (ftype%)
DECLARE SUB RecalcPath
DECLARE SUB SetDriveStatus
DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING



INIT:
    CUIDLL$ = "mscuistf.dll"            ''custom user interface dll
    HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure

    SetBitmap CUIDLL$, LOGO
    SetTitle "MSSetup Toolkit Sample 2"

    szInf$ = GetSymbolValue("STF_SRCINFPATH")
    IF szInf$ = "" THEN
        szInf$ = GetSymbolValue("STF_CWDDIR") + "SAMPLE2.INF"
    END IF
    ReadInfFile szInf$

    WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
    DEST$ = WINDRIVE$ + ":\DEMO"

    ''CustInst list symbols
    CHECKSTATES$ = "CheckItemsState"
    STATUSTEXT$  = "StatusItemsText"
    DRIVETEXT$   = "DriveStatusText"
    FOR i% = 1 TO 3 STEP 1
        AddListItem CHECKSTATES$, "ON"
    NEXT i%
    FOR i% = 1 TO 3 STEP 1
        AddListItem STATUSTEXT$, ""
    NEXT i%
    FOR i% = 1 TO 7 STEP 1
        AddListItem DRIVETEXT$, ""
    NEXT i%
    ReplaceListItem DRIVETEXT$, 7, DEST$

    ''Disk cost list symbols
    APPNEEDS$   = "AppNeeds"
    OPT1NEEDS$  = "Opt1Needs"
    OPT2NEEDS$  = "Opt2Needs"
    EXTRACOSTS$ = "ExtraCosts"
    BIGLIST$    = "BigList"
    FOR i% = 1 TO 3 STEP 1
        AddListItem BIGLIST$, ""
    NEXT i%
    FOR i% = 1 TO 26 STEP 1
        AddListItem EXTRACOSTS$, "0"
    NEXT i%

    ''File Option Variables
    OPT1OPT$ = "1"
    OPT2OPT$ = "1"

    RecalcPath
    SetDriveStatus

'$IFDEF DEBUG
    i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
'$ENDIF ''DEBUG



CUSTINST:
    sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)

    IF sz$ = "CONTINUE" THEN
        ''Install only if it will fit.
        FOR i% = 1 TO 3 STEP 1
            IF GetListItem(BIGLIST$, i%) <> "" THEN
                GOSUB TOOBIG
                GOTO CUSTINST
            END IF
        NEXT i%
        UIPop 1
        GOTO INSTALL
    ELSEIF sz$ = "PATH" THEN
        GOTO GETPATH
    ELSEIF sz$ = "CHK1" THEN
        RecalcOptFiles APPFILES
        SetDriveStatus
        GOTO CUSTINST
    ELSEIF sz$ = "CHK2" THEN
        RecalcOptFiles OPTFILES1
        SetDriveStatus
        GOTO CUSTINST
    ELSEIF sz$ = "CHK3" THEN
        RecalcOptFiles OPTFILES2
        SetDriveStatus
        GOTO CUSTINST
    ELSEIF sz$ = "BTN2" THEN
        GOTO OPTFILES1
    ELSEIF sz$ = "BTN3" THEN
        GOTO OPTFILES2
    ELSEIF sz$ = "REACTIVATE" THEN
        RecalcPath
        SetDriveStatus
        GOTO CUSTINST
    ELSE
        GOSUB ASKQUIT
        GOTO CUSTINST
    END IF



INSTALL:
    ClearCopyList
    AddOptFilesToCopyList APPFILES
    AddOptFilesToCopyList OPTFILES1
    AddOptFilesToCopyList OPTFILES2
    CreateDir DEST$, cmoNone
    CopyFilesInCopyList

    IF GetListItem(CHECKSTATES$, OPTFILES1) = "ON" THEN
        ini$ = MakePath(DEST$, "DEMO.INI")
        CreateIniKeyValue "WIN.INI", "MSSetup Sample 2", "Option1", OPT1OPT$, cmoNone
        CreateIniKeyValue ini$, "Section 1", "Key 1", "Value 1" , cmoNone
        CreateIniKeyValue ini$, "Section 2", "Key 2", "Value 2" , cmoNone
        CreateIniKeyValue ini$, "Section 3", "Key 3", "Value 3" , cmoNone
        ini$ = ""
    END IF

    IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
        CreateProgmanGroup "MSSetup Sample 2", "", cmoNone
        ShowProgmanGroup  "MSSetup Sample 2", 1, cmoNone
        CreateProgmanItem "MSSetup Sample 2", "dialogs", "dlgedit.exe "+MakePath(DEST$,"dialogs.res"), "", cmoOverwrite
        CreateProgmanItem "MSSetup Sample 2", "dlgprocs.c", "notepad.exe "+MakePath(DEST$,"dlgprocs.c"), "", cmoOverwrite
    END IF


QUIT:
    ON ERROR GOTO ERRQUIT

    IF ERR = 0 THEN
        dlg% = EXITSUCCESS
    ELSEIF ERR = STFQUIT THEN
        dlg% = EXITQUIT
    ELSE
        dlg% = EXITFAILURE
    END IF
QUITL1:
    sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
    IF sz$ = "REACTIVATE" THEN
        GOTO QUITL1
    END IF
    UIPop 1

    END

ERRQUIT:
    i% = DoMsgBox("Setup sources were corrupted, call 555-1212!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
    END



GETPATH:
    SetSymbolValue "EditTextIn", DEST$
    SetSymbolValue "EditFocus", "END"
GETPATHL1:
    sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)

    IF sz$ = "CONTINUE" THEN
        olddest$ = DEST$
        DEST$ = GetSymbolValue("EditTextOut")

        ''Validate new path.
        IF IsDirWritable(DEST$) = 0 THEN
            GOSUB BADPATH
            GOTO GETPATHL1
        END IF
        UIPop 1

        ''Truncate display if too long.
        IF LEN(DEST$) > 23 THEN
            ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
        ELSE
            ReplaceListItem DRIVETEXT$, 7, DEST$
        END IF

        ''Recalc if path changed.
        IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
            RecalcPath
            SetDriveStatus
        END IF

        olddest$ = ""
        GOTO CUSTINST
    ELSEIF sz$ = "REACTIVATE" THEN
        RecalcPath
        SetDriveStatus
        GOTO GETPATHL1
    ELSEIF sz$ = "EXIT" THEN
        GOSUB ASKQUIT
        GOTO GETPATHL1
    ELSE
        UIPop 1
        GOTO CUSTINST
    END IF



OPTFILES1:
    SetSymbolValue "RadioDefault", OPT1OPT$
OPT1L1:
    sz$ = UIStartDlg(CUIDLL$, OPTIONS, "FRadioDlgProc", APPHELP, HELPPROC$)
    newopt$ = GetSymbolValue("ButtonChecked")

    IF sz$ = "CONTINUE" THEN
        UIPop 1
        IF newopt$ <> OPT1OPT$ THEN
            OPT1OPT$ = newopt$
            RecalcOptFiles OPTFILES1
            SetDriveStatus
        END IF
        newopt$ = ""
        GOTO CUSTINST
    ELSEIF sz$ = "REACTIVATE" THEN
        RecalcPath
        SetDriveStatus
        GOTO OPT1L1
    ELSEIF sz$ = "EXIT" THEN
        GOSUB ASKQUIT
        GOTO OPT1L1
    ELSE
        UIPop 1
        newopt$ = ""
        GOTO CUSTINST
    END IF



OPTFILES2:
    SetSymbolValue "RadioDefault", OPT2OPT$
OPT2L1:
    sz$ = UIStartDlg(CUIDLL$, OPTIONS, "FRadioDlgProc", APPHELP, HELPPROC$)
    newopt$ = GetSymbolValue("ButtonChecked")

    IF sz$ = "CONTINUE" THEN
        UIPop 1
        IF newopt$ <> OPT2OPT$ THEN
            OPT2OPT$ = newopt$
            RecalcOptFiles OPTFILES2
            SetDriveStatus
        END IF
        newopt$ = ""
        GOTO CUSTINST
    ELSEIF sz$ = "REACTIVATE" THEN
        RecalcPath
        SetDriveStatus
        GOTO OPT2L1
    ELSEIF sz$ = "EXIT" THEN
        GOSUB ASKQUIT
        GOTO OPT2L1
    ELSE
        UIPop 1
        newopt$ = ""
        GOTO CUSTINST
    END IF



TOOBIG:
    sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
    IF sz$ = "REACTIVATE" THEN
        RecalcPath
        SetDriveStatus
        GOTO TOOBIG
    END IF
    UIPop 1
    RETURN



BADPATH:
    sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
    IF sz$ = "REACTIVATE" THEN
        RecalcPath
        SetDriveStatus
        GOTO BADPATH
    END IF
    UIPop 1
    RETURN



ASKQUIT:
    sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")

    IF sz$ = "EXIT" THEN
        UIPopAll
        ERROR STFQUIT
    ELSEIF sz$ = "REACTIVATE" THEN
        GOTO ASKQUIT
    ELSE
        UIPop 1
    END IF
    RETURN



'**
'** Purpose:
'**     Adds the specified option files to the copy list.
'** Arguments:
'**     ftype%  - type of files to add, one of the following:
'**             APPFILES, OPTFILES1, OPTFILES2
'** Returns:
'**     none.
'*************************************************************************
SUB AddOptFilesToCopyList (ftype%) STATIC

    IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
        SrcDir$ = GetSymbolValue("STF_SRCDIR")
        IF ftype% = APPFILES THEN
            AddSectionFilesToCopyList "AppFiles", SrcDir$, DEST$
        ELSEIF ftype% = OPTFILES1 THEN
            AddSectionKeyFileToCopyList "OptFiles1", OPT1OPT$, SrcDir$, DEST$
        ELSEIF ftype% = OPTFILES2 THEN
            AddSectionKeyFileToCopyList "OptFiles2", OPT2OPT$, SrcDir$, DEST$
        END IF
        SrcDir$ = ""
    END IF
END SUB


'**
'** Purpose:
'**     Recalculates disk space for the given option files and sets
'**     the status info symbol "StatusItemsText".
'** Arguments:
'**     ftype% - type of files to add, one of the following:
'**             APPFILES, OPTFILES1, OPTFILES2
'** Returns:
'**     none.
'*************************************************************************
SUB RecalcOptFiles (ftype%) STATIC
    CursorSave% = ShowWaitCursor()
    ClearCopyList
    AddOptFilesToCopyList ftype%

    fExtra% = 0
    IF ftype% = APPFILES THEN
        ListSym$ = APPNEEDS$
        IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
            ''Add extra cost to Windows drive for ini/progman, etc.
            ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
            ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
            fExtra% = 1
        END IF
    ELSEIF ftype% = OPTFILES1 THEN
        ListSym$ = OPT1NEEDS$
    ELSEIF ftype% = OPTFILES2 THEN
        ListSym$ = OPT2NEEDS$
    END IF

    StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")

    cost& = 0
    FOR i% = 1 TO 26 STEP 1
        cost&  = cost& + VAL(GetListItem(ListSym$, i%))
    NEXT i%
    ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"

    IF StillNeed& > 0 THEN
        ReplaceListItem BIGLIST$, ftype%, "YES"
    ELSE
        ReplaceListItem BIGLIST$, ftype%, ""
    END IF

    IF fExtra% THEN
        ReplaceListItem EXTRACOSTS$, ndrive%, "0"
    END IF
    RestoreCursor CursorSave%
    ListSym$ = ""
END SUB


'**
'** Purpose:
'**     Recalculates disk space and sets option status info according
'**     to the current destination path.
'** Arguments:
'**     none.
'** Returns:
'**     none.
'*************************************************************************
SUB RecalcPath STATIC

    CursorSave% = ShowWaitCursor()

    RecalcOptFiles APPFILES
    RecalcOptFiles OPTFILES1
    RecalcOptFiles OPTFILES2

    RestoreCursor CursorSave%
END SUB


'**
'** Purpose:
'**     Sets drive status info according to latest disk space calcs.
'** Arguments:
'**     none.
'** Returns:
'**     none.
'*************************************************************************
SUB SetDriveStatus STATIC

    drive$ = MID$(DEST$, 1, 1)
    ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
    cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%)) + VAL(GetListItem(OPT2NEEDS$, ndrive%))
    free& = GetFreeSpaceForDrive(drive$)
    ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
    ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
    ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"

    IF drive$ = WINDRIVE$ THEN
        ReplaceListItem DRIVETEXT$, 4, ""
        ReplaceListItem DRIVETEXT$, 5, ""
        ReplaceListItem DRIVETEXT$, 6, ""
    ELSE
        ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
        cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%)) + VAL(GetListItem(OPT2NEEDS$, ndrive%))
        IF cost& = 0 THEN
            ReplaceListItem DRIVETEXT$, 4, ""
            ReplaceListItem DRIVETEXT$, 5, ""
            ReplaceListItem DRIVETEXT$, 6, ""
        ELSE
            free& = GetFreeSpaceForDrive(WINDRIVE$)
            ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
            ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
            ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
        END IF
    END IF
END SUB


'**
'** Purpose:
'**     Appends a file name to the end of a directory path,
'**     inserting a backslash character as needed.
'** Arguments:
'**     szDir$  - full directory path (with optional ending "\")
'**     szFile$ - filename to append to directory
'** Returns:
'**     Resulting fully qualified path name.
'*************************************************************************
FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
    IF szDir$ = "" THEN
        MakePath = szFile$
    ELSEIF szFile$ = "" THEN
        MakePath = szDir$
    ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
        MakePath = szDir$ + szFile$
    ELSE
        MakePath = szDir$ + "\" + szFile$
    END IF
END FUNCTION


unix.superglobalmegacorp.com

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