'**************************************************************************
'*                       MSSetup Toolkit Sample 1
'**************************************************************************

'**$DEFINE DEBUG  ''Define for script development/debugging

'$INCLUDE 'setupapi.inc'
'$INCLUDE 'msdetect.inc'

''Dialog ID's
CONST WELCOME       = 100
CONST ASKQUIT       = 200
CONST DESTPATH      = 300
CONST EXITFAILURE   = 400
CONST EXITQUIT      = 600
CONST EXITSUCCESS   = 700
CONST OPTIONS       = 800
CONST APPHELP       = 900
CONST TOOBIG        = 6300
CONST BADPATH       = 6400
CONST GETUSER       = 7400
CONST BADNAME       = 7700

''Bitmap ID
CONST LOGO = 1

GLOBAL DEST$        ''Default destination directory.
GLOBAL USERNAME$        ''Default user name.


DECLARE SUB Install
DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING


INIT:
    CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
    HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure

    SetBitmap CUIDLL$, LOGO
    SetTitle "SimFarm for Windows Setup"

    szInf$ = GetSymbolValue("STF_SRCINFPATH")
    IF szInf$ = "" THEN
        szInf$ = GetSymbolValue("STF_CWDDIR") + "SETUP.INF"
    END IF
    ReadInfFile szInf$

    DEST$ = "C:\SIMFARMW"
    USERNAME$ = "Maxine the Cow"

'$IFDEF DEBUG
    i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
    WinDrive$ = MID$(GetWindowsDir, 1, 1)
    IF IsDriveValid(WinDrive$) = 0 THEN
        i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
        GOTO QUIT
    END IF
'$ENDIF ''DEBUG


WELCOME:
    sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
    IF sz$ = "CONTINUE" THEN
        UIPop 1
    ELSE
        GOSUB ASKQUIT
        GOTO WELCOME
    END IF


GETTHEUSER:
    SetSymbolValue "EditTextIn", USERNAME$
    SetSymbolValue "EditFocus", "END"
GETTHEUSER1:
    sz$ = UIStartDlg(CUIDLL$, GETUSER, "FEditDlgProc", APPHELP, HELPPROC$)
    USERNAME$ = GetSymbolValue("EditTextOut")

    IF sz$ = "CONTINUE" THEN
        IF (LEN(USERNAME$) < 1 OR LEN(USERNAME$) > 32 OR MID$(USERNAME$,1,1)=" ") THEN
            GOSUB BADNAME
            GOTO GETTHEUSER1
        END IF
        UIPop 1
    ELSEIF sz$ = "REACTIVATE" THEN
        GOTO GETTHEUSER1
    ELSEIF sz$ = "BACK" THEN
        UIPop 1
        GOTO WELCOME
    ELSE
        GOSUB ASKQUIT
        GOTO GETTHEUSER
    END IF


GETPATH:
    SetSymbolValue "EditTextIn", DEST$
    SetSymbolValue "EditFocus", "END"
GETPATHL1:
    sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
    DEST$ = GetSymbolValue("EditTextOut")

    IF sz$ = "CONTINUE" THEN
        IF MID$(DEST$, LEN(DEST$), 1) = "\" THEN
            DEST$ = MID$(DEST$,1,LEN(DEST$) - 1)
        END IF
        IF IsDirWritable(DEST$) = 0 THEN
            GOSUB BADPATH
            GOTO GETPATHL1
        END IF
        ''temp$ = "Free Space is " + str$(GetFreeSpaceForDrive(MID$(DEST$,1,1)))
        ''i% = DoMsgBox(temp$, "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
        IF GetFreeSpaceForDrive(MID$(DEST$,1,1)) < 7000000 THEN
            GOSUB TOOBIG
            GOTO GETPATHL1
        END IF
        UIPop 1
    ELSEIF sz$ = "REACTIVATE" THEN
        GOTO GETPATHL1
    ELSEIF sz$ = "BACK" THEN
        UIPop 1
        GOTO WELCOME
    ELSE
        GOSUB ASKQUIT
        GOTO GETPATH
    END IF


    Install


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!  Please call Maxis Technical Support.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
    END



BADPATH:
    sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
    IF sz$ = "REACTIVATE" THEN
        GOTO BADPATH
    END IF
    UIPop 1
    RETURN

BADNAME:
    sz$ = UIStartDlg(CUIDLL$, BADNAME, "FInfo0DlgProc", 0, "")
    IF sz$ = "REACTIVATE" THEN
        GOTO BADNAME
    END IF
    UIPop 1
    RETURN

TOOBIG:
    sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
    IF sz$ = "REACTIVATE" THEN
        GOTO TOOBIG
    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:
'**     Builds the copy list and performs all installation operations.
'** Arguments:
'**     none.
'** Returns:
'**     none.
'*************************************************************************
SUB Install STATIC

    SrcDir$ = GetSymbolValue("STF_SRCDIR")
    WinDrive$ = GetWindowsDir()

    CreateDir DEST$, cmoNone
    CreateDir DEST$ + "\CROPS", cmoNone
    CreateDir DEST$ + "\SOUND", cmoNone

    OpenLogFile MakePath(DEST$, "SETUP.LOG"), 0
    WriteToLogFile ""
    WriteToLogFile "  User chose as destination directory: '" + DEST$ + "'"
    WriteToLogFile ""
    WriteToLogFile "May have had to create the directory: " + DEST$
    WriteToLogFile "May have had to create the directory: " + DEST$ + "\CROPS"
    WriteToLogFile "May have had to create the directory: " + DEST$ + "\SOUND"
    WriteToLogFile ""

    AddSectionFilesToCopyList "CROPS", SrcDir$, DEST$ + "\CROPS"
    CopyFilesInCopyList
    
    ClearCopyList
    AddSectionFilesToCopyList "SOUND", SrcDir$, DEST$ + "\SOUND"
    CopyFilesInCopyList

    ClearCopyList
    AddSectionFilesToCopyList "Files", SrcDir$, DEST$
    CopyFilesInCopyList


    CreateIniKeyValue "WIN.INI", "Extensions", "SFM", DEST$ + "\WSIMFARM.EXE ^.SFM", cmoOverwrite
    CreateIniKeyValue "WIN.INI", "Extensions", "SSM", DEST$ + "\WSIMFARM.EXE ^.SSM", cmoOverwrite

    ini$ = MakePath(WinDrive$, "WSIMFARM.INI")
    CreateIniKeyValue ini$, "SimFarm for Windows", "User Name", USERNAME$ , cmoOverwrite
    CreateIniKeyValue ini$, "SimFarm for Windows", "Music", "On" , cmoOverwrite
    CreateIniKeyValue ini$, "SimFarm for Windows", "Sound Effects", "On" , cmoOverwrite
    CreateIniKeyValue ini$, "SimFarm for Windows", "Sound Playback", "ASYNC" , cmoOverwrite

    CreateProgmanGroup "Maxis", "", cmoNone
    ShowProgmanGroup  "Maxis", 1, cmoNone
    CreateProgmanItem "Maxis", "SimFarm for Windows", DEST$ + "\wsimfarm.exe", "", cmoOverwrite
    CreateProgmanItem "Maxis", "SimFarm Read Me", DEST$ + "\readme.wri", "", cmoOverwrite
    CreateProgmanItem "Maxis", "SimFarm Help", DEST$ + "\wsimfarm.hlp", "", cmoOverwrite

'**    AddDos5Help "YOURAPP", "A brief help text for your Windows application."+chr$(10)+"It can be continued on another line with chr$(10).", cmoNone

    CloseLogFile

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

