'**************************************************************************
'*                       Elastic Reality Demo Setup
'**************************************************************************

'$INCLUDE 'setupapi.inc'
'$INCLUDE 'msdetect.inc'
'$INCLUDE 'msregdb.inc'

CONST WELCOME       = 100
CONST ASKQUIT       = 200
CONST DESTPATH      = 300
CONST EXITFAILURE   = 400
CONST EXITQUIT      = 600
CONST EXITSUCCESS   = 700
CONST EXITSUCCESSR  = 701
CONST OPTIONS       = 800
CONST APPHELP       = 900

CONST CUSTINST      = 6200
CONST TOOBIG        = 6300
CONST BADPATH       = 6400
CONST GETNAMEORG    = 7500

CONST LOGO = 1

CONST ERFILES    = 1
CONST TJFILES    = 2
CONST TUTFILES   = 3
CONST VFWFILES   = 4
CONST WIN32FILES = 5
CONST REQFILES   = 6

CONST WS_VISIBLE      =&H10000000
CONST WS_BORDER       =&H00800000
CONST WS_CLIPCHILDREN =&H02000000
CONST GWL_STYLE =-16
CONST SW_SHOWMAXIMIZED =3
CONST SW_SHOWMINIMIZED =2

DECLARE SUB ShowWindow LIB "user.exe" (hWnd%, iShow%)
DECLARE SUB SetWindowLong LIB "user.exe" (hWnd%, offset%, style&)

GLOBAL DESTSYS$
GLOBAL DESTWIN$
GLOBAL DEST$
GLOBAL DEST32S$
GLOBAL DESTFREE$

GLOBAL WINDRIVE$

GLOBAL ERNEEDS$
GLOBAL TJNEEDS$
GLOBAL TUTNEEDS$
GLOBAL WIN32NEEDS$
GLOBAL VFWNEEDS$
GLOBAL REQNEEDS$
GLOBAL ALLNEEDS$
GLOBAL EXTRACOSTS$

GLOBAL WINDRIVECOST$

GLOBAL CHECKSTATES$
GLOBAL STATUSTEXT$
GLOBAL DRIVETEXT$

GLOBAL hWnd%
GLOBAL AlwaysCopy%

DECLARE SUB AddOptFilesToCopyList (ftype%)
DECLARE SUB RecalcOptFiles (ftype%)
DECLARE SUB RecalcPath
DECLARE SUB SetDriveStatus

DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING

DECLARE FUNCTION VflatdPresent LIB "INIUPD.DLL" AS INTEGER

DECLARE SUB UpdateSystemIni
DECLARE SUB RebootSystem
DECLARE SUB MakeSystemIni LIB "WIN32INI.DLL" (arg1$, arg2$)
DECLARE FUNCTION PagingEnabled LIB "WIN32INI.DLL" AS INTEGER
DECLARE FUNCTION ShareEnabled LIB "WIN32INI.DLL" AS INTEGER
DECLARE FUNCTION IsWin32sLoaded LIB "WIN32INI.DLL" (arg1$) AS INTEGER
DECLARE FUNCTION OnWindowsNT LIB "WIN32INI.dll" AS INTEGER
DECLARE FUNCTION ExitWindowsExec LIB "USER.EXE" (arg1$, arg2$) AS INTEGER

INIT:
    CUIDLL$ = "mscuistf.dll"
    HELPPROC$ = "FHelpDlgProc"

    SetTitle "Elastic Reality Demo Setup"

    hWnd% = HwndFrame()
    SetWindowLong hWnd%, GWL_STYLE, WS_VISIBLE+WS_BORDER+WS_CLIPCHILDREN
    ShowWindow hWnd%, SW_SHOWMAXIMIZED

    SetBitmap CUIDLL$, LOGO

    szOldVer$ ="1.00.000     "
    AlwaysCopy% = 0

    szInf$ = GetSymbolValue("STF_SRCINFPATH")
    IF szInf$ = "" THEN
        szInf$ = GetSymbolValue("STF_CWDDIR") + "EREALITY.INF"
    END IF
    ReadInfFile szInf$

    DEST$ = "C:\EREALITY"
    DESTSYS$ = GetWindowsSysDir()
    DESTWIN$ = GetWindowsDir()
    DEST32S$ = DESTSYS + "WIN32S\"
    DESTFREE$ = MID$(DESTSYS$,1,3) + "WIN32APP\FREECELL\"
    WINDRIVE$ = MID$(GetWindowsDir, 1, 1)

    DISABLEW32S$ = "DisableWin32s"
    DISABLEVFW$ = "DisableVFW"

    CHECKSTATES$ = "CheckItemsState"
    STATUSTEXT$  = "StatusItemsText"
    DRIVETEXT$   = "DriveStatusText"
    WIN32INSTALLED% = 0
    WIN32DISABLED% = 0
    VFWDISABLED% = 0
    FOR i% = 1 TO 3 STEP 1
	AddListItem CHECKSTATES$, "ON"
    NEXT i%
    IF OnWindowsNT() THEN
	IF GetWindowsMode < 2 THEN
	    i% = DoMsgBox("This software is for Intel processors only", "Installation Problem", MB_ICONEXCLAMATION+MB_OK+MB_TASKMODAL)
	    END
	END IF
	i% = DoMsgBox("This version of Video for Windows does not run on Windows NT.", "No Video for Windows", MB_TASKMODAL+MB_ICONINFORMATION+MB_OK)
	WIN32INSTALLED% = 1
	WIN32DISABLED% = 1
	VFWDISABLED% = 1
    ELSE
	IF (GetWindowsMajorVersion < 3) OR ((GetWindowsMajorVersion = 3) AND (GetWindowsMinorVersion < 1)) THEN
	    i% = DoMsgBox("Microsoft Windows version 3.1 or greater is required for this software.  Please upgrade your version of Windows.", "Installation Problem", MB_ICONEXCLAMATION+MB_OK+MB_TASKMODAL)
	    END
	END IF
        IF (GetWindowsMajorVersion >= 4) OR (GetWindowsMode < 2) OR (PagingEnabled() = 0) THEN
	    WIN32DISABLED% = 1
	    IF GetWindowsMajorVersion >= 4 THEN
		WIN32INSTALLED% = 1
	    END IF
	    IF GetWindowsMode < 2 THEN
		i% = DoMsgBox("Windows must be run in 386 Enhanced mode.", "Win32s requires Enhanced Mode Windows", MB_TASKMODAL+MB_ICONINFORMATION+MB_OK)
	    END IF
	    IF PagingEnabled() = 0 THEN
		i% = DoMsgBox("Use the Control Panel 386 Enhanced icon and configure Windows using the Virtual Memory option.", "Win32s requires Virtual Memory", MB_TASKMODAL+MB_ICONINFORMATION+MB_OK)
	    END IF
	ELSE
	    szNewVer$ = GetVersionOfFile( GetSymbolValue("STF_SRCDIR") + "WIN32S16.DLL" )
	    sz$ = GetIniKeyString (DESTSYS$ + "WIN32S.INI", "Win32s", "Setup")
	    IF sz$ = "0" THEN
		AlwaysCopy% = 1
	    ELSEIF sz$ = "1" THEN
		i% = DoesFileExist( DESTSYS$ + "W32SYS.DLL", femExists )
		IF i% = 1 THEN
		    i% = IsWin32sLoaded( szOldVer$ )
		ENDIF
		IF (i% <> 0) AND ((szNewVer$ = szOldVer$) OR (szNewVer$ < szOldVer$)) THEN
		    WIN32DISABLED% = 1
		    WIN32INSTALLED% = 1
		END IF
	    END IF
	END IF
	IF (GetWindowsMajorVersion < 3) OR ((GetWindowsMajorVersion = 3) AND (GetWindowsMinorVersion < 10)) THEN
	    i% = DoMsgBox("Video for Windows requires Microsoft Windows version 3.10 or greater.", "No Video for Windows", MB_ICONINFORMATION+MB_OK+MB_TASKMODAL)
	    VFWDISABLED% = 1
	ENDIF
    END IF
    IF VFWDISABLED% THEN
	AddListItem CHECKSTATES$, "OFF"
	SetSymbolValue DISABLEVFW$, "1"
    ELSE
	AddListItem CHECKSTATES$, "ON"
    END IF
    IF WIN32DISABLED% THEN
	AddListItem CHECKSTATES$, "OFF"
	SetSymbolValue DISABLEW32S$, "1"
    ELSE
	AddListItem CHECKSTATES$, "ON"
    END IF
    AddListItem CHECKSTATES$, "ON"
    FOR i% = 1 TO 6 STEP 1
        AddListItem STATUSTEXT$, ""
    NEXT i%
    FOR i% = 1 TO 7 STEP 1
        AddListItem DRIVETEXT$, ""
    NEXT i%
    ReplaceListItem DRIVETEXT$, 7, DEST$

    ERNEEDS$    = "ERNeeds"
    TJNEEDS$    = "TJNeeds"
    TUTNEEDS$   = "TUTNeeds"
    VFWNEEDS$   = "VFWNeeds"
    WIN32NEEDS$ = "Win32Needs"
    REQNEEDS$   = "ReqNeeds"
    ALLNEEDS$   = "AllNeeds"
    EXTRACOSTS$ = "ExtraCosts"
    IF OnWindowsNT() = 0 THEN
	cost& = 7168
	cost& = cost& + GetSizeOfFile (DESTWIN$ + "WIN.INI") + 512
    ELSE
    	cost& = 0
    END IF
    WINDRIVECOST$ = STR$(cost&)
    FOR i% = 1 TO 26 STEP 1
        AddListItem EXTRACOSTS$, "0"
    NEXT i%

    RecalcPath
    SetDriveStatus

WELCOME:
    sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
    IF sz$ = "REACTIVATE" THEN
	GOTO WELCOME
    ELSEIF sz$ = "CONTINUE" THEN
        UIPop 1
    ELSE
        GOSUB ASKQUIT
        GOTO WELCOME
    END IF


CUSTINST:
    sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)

    IF sz$ = "CONTINUE" THEN
	CursorSave% = ShowWaitCursor()
	ClearCopyList
	AddOptFilesToCopyList ERFILES
	AddOptFilesToCopyList TJFILES
	AddOptFilesToCopyList TUTFILES
	AddOptFilesToCopyList VFWFILES
	AddOptFilesToCopyList WIN32FILES
	AddOptFilesToCopyList REQFILES
	StillNeed& = GetCopyListCost(EXTRACOSTS$, ALLNEEDS$, "")
	RestoreCursor CursorSave%
	IF StillNeed& > 0 THEN
            GOTO TOOBIG
        END IF
	IF (GetListItem(CHECKSTATES$, ERFILES) <> "ON") AND (GetListItem(CHECKSTATES$, TJFILES) <> "ON") THEN
	    IF (GetListItem(CHECKSTATES$, VFWFILES) <> "ON") AND (GetListItem(CHECKSTATES$, WIN32FILES) <> "ON") AND (GetListItem(CHECKSTATES$, TUTFILES) <> "ON") THEN
		GOTO CUSTINST
	    END IF
	END IF
        UIPop 1
        GOTO INSTALL
    ELSEIF sz$ = "PATH" THEN
        GOTO GETPATH
    ELSEIF sz$ = "CHK1" THEN
        RecalcOptFiles ERFILES
	IF GetListItem(CHECKSTATES$, TJFILES) <> "ON" THEN
            RecalcOptFiles REQFILES
	END IF
        SetDriveStatus
        GOTO CUSTINST
    ELSEIF sz$ = "CHK2" THEN
        RecalcOptFiles TJFILES
	IF GetListItem(CHECKSTATES$, ERFILES) <> "ON" THEN
            RecalcOptFiles REQFILES
        END IF
        SetDriveStatus
        GOTO CUSTINST
    ELSEIF sz$ = "CHK3" THEN
        RecalcOptFiles TUTFILES
        SetDriveStatus
        GOTO CUSTINST
    ELSEIF sz$ = "CHK4" THEN
        RecalcOptFiles VFWFILES
        SetDriveStatus
        GOTO CUSTINST
    ELSEIF sz$ = "CHK5" THEN
	IF GetListItem(CHECKSTATES$, WIN32FILES) <> "ON" THEN
	    i% = DoMsgBox("Win32s MUST be installed for the Elastic Reality Demo to function.  Make sure you really want to disable its installation.", "Win32s is Required", MB_ICONEXCLAMATION+MB_OK+MB_TASKMODAL)
        END IF
	RecalcOptFiles WIN32FILES
	SetDriveStatus
	GOTO CUSTINST
    ELSEIF sz$ = "REACTIVATE" THEN
        RecalcPath
        SetDriveStatus
        GOTO CUSTINST
    ELSE
        GOSUB ASKQUIT
        GOTO CUSTINST
    END IF

INSTALL:
    SrcDir$ = GetSymbolValue("STF_SRCDIR")
    SetRestartDir DESTWIN$

    IF GetListItem(CHECKSTATES$, WIN32FILES) = "ON" THEN
	CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite
	ERR = 0
    END IF

    IF GetListItem(CHECKSTATES$, ERFILES) = "ON" THEN
	CreateDir MakePath(DEST$, "ER_PROJS"), cmoNone
    END IF
    IF GetListItem(CHECKSTATES$, TJFILES) = "ON" THEN
	CreateDir MakePath(DEST$, "TJ_PROJS"), cmoNone
    END IF

    CopyFilesInCopyList

    IF GetListItem(CHECKSTATES$, VFWFILES) = "ON" THEN
	IF VflatdPresent() = 0 THEN
	    CreateSysIniKeyValue DESTWIN$ + "system.ini", "386Enh", "device", "dva.386", cmoOverwrite
	END IF
	CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.CVID", "iccvid.drv", cmoOverwrite
	CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.MSVC", "msvidc.drv", cmoOverwrite
	CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.IV31", "indeov.drv", cmoOverwrite
	CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.MRLE", "MSRLE.drv", cmoOverwrite
	I% = DoesIniKeyExist ("system.ini", "Drivers", "VIDC.RT21")
	IF I% = 0  THEN
	    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.RT21", "indeov.drv", cmoOverwrite
	END IF
	CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.YVU9", "indeov.drv", cmoOverwrite
	CreateIniKeyValue DESTWIN$ + "WIN.INI", "mci extensions", "avi", "AVIVideo", cmoOverwrite
	CreateIniKeyValue DESTWIN$ + "system.ini", "mci", "AVIVideo", "mciavi.drv", cmoOverwrite
	CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "WaveMapper", "msacm.drv", cmoOverwrite
	CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "MSACM.msadpcm", "msadpcm.acm", cmoOverwrite
	CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "MSACM.imaadpcm", "imaadpcm.acm", cmoOverwrite
	CreateIniKeyValue DESTWIN$ + "control.ini", "drivers.desc", "msacm.drv", "Microsoft Sound Mapper V2.00", cmoOverwrite
	CreateIniKeyValue DESTWIN$ + "control.ini", "drivers.desc", "msadpcm.acm", "Microsoft ADPCM Codec V2.00", cmoOverwrite
	CreateIniKeyValue DESTWIN$ + "control.ini", "drivers.desc", "imaadpcm.acm", "Microsoft IMA ADPCM Codec V2.00", cmoOverwrite
	Run ("regedit.exe /s " + MakePath(DESTWIN$, "mplayer.reg"))
	Run ("regedit.exe /s " + MakePath(DESTSYS$, "OLE2.reg"))
	Run ("regedit.exe /s " + MakePath(DESTSYS$, "cleanup.reg"))
	CreateProgmanItem "Accessories", "Media Player", MakePath(DESTWIN$, "mplayer.exe"), "", cmoOverwrite
	Run ("profdisp.exe")
    END IF
    IF GetListItem(CHECKSTATES$, WIN32FILES) = "ON" THEN
	UpdateSystemIni
	'' Terminate if unhandled fatal error
	IF ERR <> 0 THEN
	    GOTO QUIT
	END IF
	CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "1", cmoOverwrite
	CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Version", szNewVer$, cmoOverwrite
	CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Nls", "AnsiCP", "1252", cmoOverwrite
	IF DoesFileExist( DESTSYS$ + "WIN32S.INI", femExists ) THEN
	    CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Freecell", "Setup", "1", cmoOverwrite
	    CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Freecell", "Version", szNewVer$, cmoOverwrite
	END IF
	CreateProgmanGroup "Win32 Applications", "", cmoNone
	ShowProgmanGroup   "Win32 Applications", 1, cmoNone
	CreateProgmanItem  "Win32 Applications", "Freecell", DESTFREE$ + "FREECELL.EXE", "", cmoOverwrite
	IF ShareEnabled() = 0 THEN
	    i% = DoMsgBox( "File-sharing must be enabled for Win32s. Run SHARE.EXE before starting Windows or add SHARE.EXE to your AUTOEXEC.BAT file.", "SHARE.EXE is not loaded", MB_TASKMODAL+MB_ICONINFORMATION+MB_OK)
	END IF
    END IF
    IF (GetListItem(CHECKSTATES$, ERFILES) = "ON") OR (GetListItem(CHECKSTATES$, TJFILES) = "ON") THEN
	IF GetListItem(CHECKSTATES$, ERFILES) = "ON" THEN
	    CreateRegKeyValue "erealitydemo", "Elastic Reality Demo"
	    CreateRegKeyValue "erealitydemo\shell\open\command", "er.exe %1"
	    CreateRegKeyValue ".er", "erealitydemo"
	END IF
	IF GetListItem(CHECKSTATES$, TJFILES) = "ON" THEN
	    CreateRegKeyValue "transjammerdemo", "TransJammer Demo"
	    CreateRegKeyValue "transjammerdemo\shell\open\command", "trnsjmmr.exe %1"
	END IF

	ShowWindow hWnd%, SW_SHOWMINIMIZED

	CreateProgmanGroup "Elastic Reality", "", cmoNone
	ShowProgmanGroup  "Elastic Reality", 1, cmoNone
	IF GetListItem(CHECKSTATES$, ERFILES) = "ON" THEN
	    CreateProgmanItem "Elastic Reality", "Elastic Reality Demo", MakePath(DEST$, "PROGRAMS\ER.EXE"), ",,,," + MakePath(DEST$, "ER_PROJS"), cmoOverwrite
	END IF
	IF GetListItem(CHECKSTATES$, TJFILES) = "ON" THEN
	    CreateProgmanItem "Elastic Reality", "TransJammer Demo", MakePath(DEST$, "PROGRAMS\TRNSJMMR.EXE"), ",,,," + MakePath(DEST$, "TJ_PROJS"), cmoOverwrite
	END IF
	CreateProgmanItem "Elastic Reality", "Elastic Reality Demo ReadMe", "NOTEPAD.EXE " + MakePath(DEST$, "PROGRAMS\README.TXT"), "", cmoOverwrite
	CreateProgmanItem "Elastic Reality", "Elastic Reality Demo Tutorials", "NOTEPAD.EXE " + MakePath(DEST$, "PROGRAMS\GETSTART.TXT"), "", cmoOverwrite

	ShowWindow hWnd%, SW_SHOWMAXIMIZED

	IF (OnWindowsNT() = 0) AND (IsDirWritable(DESTWIN$) <> 0) THEN
	    CopyFile DESTWIN$ + "WIN.INI", DESTWIN$ + "WININI.ERI", cmoOverwrite, 0
	    IF GetListItem(CHECKSTATES$, ERFILES) = "ON" THEN
		CreateIniKeyValue "win.ini", "programs", "er.exe", MakePath(DEST$, "PROGRAMS\ER.EXE"), cmoOverwrite
	    END IF
	    IF GetListItem(CHECKSTATES$, TJFILES) = "ON" THEN
		CreateIniKeyValue "win.ini", "programs", "trnsjmmr.exe", MakePath(DEST$, "PROGRAMS\TRNSJMMR.EXE"), cmoOverwrite
	    END IF
	END IF
    END IF

QUIT:
    ON ERROR GOTO ERRQUIT

    IF ERR = 0 THEN
	IF (GetListItem(CHECKSTATES$, WIN32FILES) = "ON") OR (GetListItem(CHECKSTATES$, VFWFILES) = "ON") THEN
            dlg% = EXITSUCCESSR
        ELSE
            dlg% = EXITSUCCESS
        END IF
    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

    IF dlg% = EXITSUCCESSR THEN
	RebootSystem
	IF GetListItem(CHECKSTATES$, WIN32FILES) = "ON" THEN
	    CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite
	    i% = DoMsgBox("Win32s is not properly configured and Win32s Setup must be run again.", "Unable to Restart Windows", MB_ICONEXCLAMATION+MB_OK+MB_TASKMODAL)
	END IF
    END IF

    END

ERRQUIT:
    i% = DoMsgBox("Setup sources were corrupted, call Elastic Reality tech. support (608) 273-6585", "Setup Message", MB_ICONEXCLAMATION+MB_OK+MB_TASKMODAL)
    END

GETPATH:
    SetSymbolValue "EditTextIn", DEST$
    SetSymbolValue "EditFocus", "ALL"
GETPATHL1:
    sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)

    IF sz$ = "CONTINUE" THEN
        olddest$ = DEST$
        DEST$ = GetSymbolValue("EditTextOut")

        IF IsDirWritable(DEST$) = 0 THEN
	    DEST$ = olddest$
            GOSUB BADPATH
            GOTO GETPATHL1
        END IF
        UIPop 1

        IF LEN(DEST$) > 23 THEN
            ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
        ELSE
            ReplaceListItem DRIVETEXT$, 7, DEST$
        END IF

        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

TOOBIG:
    sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfoDlgProc", APPHELP, HELPPROC$)
    IF sz$ = "REACTIVATE" THEN
        RecalcPath
        SetDriveStatus
        GOTO TOOBIG
    ELSEIF sz$ = "CONTINUE" THEN
	UIPop 2
	GOTO INSTALL
    ELSE
	UIPop 1
	GOTO CUSTINST
    END IF

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, "FInfoDlgProc", 0, "")

    IF sz$ = "EXIT" THEN
        UIPopAll
        ERROR STFQUIT
    ELSEIF sz$ = "REACTIVATE" THEN
        GOTO ASKQUIT
    ELSE
        UIPop 1
    END IF
    RETURN

SUB AddOptFilesToCopyList (ftype%) STATIC
    IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
        SrcDir$ = GetSymbolValue("STF_SRCDIR")
        IF ftype% = ERFILES THEN
	    AddSectionFilesToCopyList "ERPROGRAMS", SrcDir$, MakePath(DEST$, "PROGRAMS")
        ELSEIF ftype% = TJFILES THEN
	    AddSectionFilesToCopyList "TJPROGRAMS", SrcDir$, MakePath(DEST$, "PROGRAMS")
            AddSectionFilesToCopyList "TJPROJECTS", SrcDir$, MakePath(DEST$, "TJ_PROJS")
            AddSectionFilesToCopyList "TJIMAGES", SrcDir$, MakePath(DEST$, "IMAGES")
            AddSectionFilesToCopyList "TJSTAMPS", SrcDir$, MakePath(DEST$, "IMAGES\STAMPS")
        ELSEIF ftype% = TUTFILES THEN
            AddSectionFilesToCopyList "ERPROJECTS", SrcDir$, MakePath(DEST$, "ER_PROJS")
            AddSectionFilesToCopyList "ERIMAGES", SrcDir$, MakePath(DEST$, "IMAGES")
            AddSectionFilesToCopyList "ERSTAMPS", SrcDir$, MakePath(DEST$, "IMAGES\STAMPS")
            AddSectionFilesToCopyList "SHAPES", SrcDir$, MakePath(DEST$, "SHAPES")
        ELSEIF ftype% = VFWFILES THEN
	    AddSectionFilesToCopyList "VFWWinfiles", SrcDir$, DESTWIN$
	    AddSectionFilesToCopyList "VFWSysfiles", SrcDir$, DESTSYS$
        ELSEIF ftype% = WIN32FILES THEN
	    IF AlwaysCopy% = 1 THEN
		AddSectionFilesToCopyList "_WindowsSystem", SrcDir$, DESTSYS$
		AddSectionFilesToCopyList "_WindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\"
	    ELSE
		AddSectionFilesToCopyList "WindowsSystem", SrcDir$, DESTSYS$
		AddSectionFilesToCopyList "WindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\"
	    END IF
	    AddSectionFilesToCopyList "Win32appFreecell", SrcDir$, DESTFREE$
	    AddSectionFilesToCopyList "Win32sSystemObsoleteFiles", SrcDir$, DESTSYS$ + "WIN32S\"
        ELSEIF ftype% = REQFILES THEN
	    IF (GetListItem(CHECKSTATES$, ERFILES) = "ON") OR (GetListItem(CHECKSTATES$, TJFILES) = "ON") THEN
		AddSectionFilesToCopyList "PROGRAMS", SrcDir$, MakePath(DEST$, "PROGRAMS")
		AddSectionFilesToCopyList "HIIP", SrcDir$, MakePath(DEST$, "HIIP")
		AddSectionFilesToCopyList "LOADERS", SrcDir$, MakePath(DEST$, "HIIP\LOADERS")
		AddSectionFilesToCopyList "SAVERS", SrcDir$, MakePath(DEST$, "HIIP\SAVERS")
		IF OnWindowsNT() THEN
		    AddSectionFilesToCopyList "NTSYSFILES", SrcDir$, DESTWIN$ + "SYSTEM32"
		ELSE
		    AddSectionFilesToCopyList "SYSFILES", SrcDir$, DESTSYS$
		END IF
	    END IF
        END IF
        SrcDir$ = ""
    END IF
END SUB

SUB RecalcOptFiles (ftype%) STATIC
    CursorSave% = ShowWaitCursor()
    ClearCopyList
    AddOptFilesToCopyList ftype%

    fExtra% = 0
    IF ftype% = ERFILES THEN
        ListSym$ = ERNEEDS$
    ELSEIF ftype% = TJFILES THEN
        ListSym$ = TJNEEDS$
    ELSEIF ftype% = TUTFILES THEN
        ListSym$ = TUTNEEDS$
    ELSEIF ftype% = VFWFILES THEN
        ListSym$ = VFWNEEDS$
    ELSEIF ftype% = WIN32FILES THEN
        ListSym$ = WIN32NEEDS$
    ELSEIF ftype% = REQFILES THEN
        ListSym$ = REQNEEDS$
        IF (GetListItem(CHECKSTATES$, ERFILES) = "ON") OR (GetListItem(CHECKSTATES$, TJFILES) = "ON") THEN
            ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
            ReplaceListItem EXTRACOSTS$, ndrive%, WINDRIVECOST$
            fExtra% = 1
        END IF
    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 fExtra% THEN
        ReplaceListItem EXTRACOSTS$, ndrive%, "0"
    END IF
    RestoreCursor CursorSave%
    ListSym$ = ""
END SUB

SUB RecalcPath STATIC
    CursorSave% = ShowWaitCursor()

    RecalcOptFiles ERFILES
    RecalcOptFiles TJFILES
    RecalcOptFiles TUTFILES
    RecalcOptFiles VFWFILES
    RecalcOptFiles WIN32FILES
    RecalcOptFiles REQFILES

    RestoreCursor CursorSave%
END SUB

SUB SetDriveStatus STATIC
    drive$ = MID$(DEST$, 1, 1)
    ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
    cost& = VAL(GetListItem(ERNEEDS$, ndrive%)) + VAL(GetListItem(TJNEEDS$, ndrive%)) + VAL(GetListItem(TUTNEEDS$, ndrive%)) + VAL(GetListItem(WIN32NEEDS$, ndrive%)) + VAL(GetListItem(VFWNEEDS$, ndrive%)) + VAL(GetListItem(REQNEEDS$, 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(ERNEEDS$, ndrive%)) + VAL(GetListItem(TJNEEDS$, ndrive%)) + VAL(GetListItem(TUTNEEDS$, ndrive%)) + VAL(GetListItem(WIN32NEEDS$, ndrive%)) + VAL(GetListItem(VFWNEEDS$, ndrive%)) + VAL(GetListItem(REQNEEDS$, 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

SUB UpdateSystemIni STATIC
    VxDPath$ = DEST32S$ + "W32S.386"
    SystemIniPath$ = GetWindowsDir()
    MakeSystemIni SystemIniPath$, VxdPath$
END SUB

SUB RebootSystem STATIC
    i% = RestartListEmpty()
    IF i% = 0 THEN
       i% = ExitExecRestart()
       RemoveFile GetWindowsDir() + "_MSRSTRT.EXE", cmoForce
       RemoveFile GetWindowsDir() + "_MSSETUP.BAT", cmoForce
     ELSE
       i% = ExitWindowsExec( GetWindowsDir() + "_MSRSTRT.EXE", "_MSSETUP.BAT" )
     ENDIF
END SUB

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

