'**************************************************************************
'*                       WinG Setup Program
'**************************************************************************

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

'$INCLUDE 'setupapi.inc'

''Dialog ID's
CONST WELCOME       = 100
CONST ASKQUIT       = 200
CONST DESTPATH      = 300
CONST DESTPATH2     = 301
CONST EXITFAILURE   = 400
CONST EXITQUIT      = 600
CONST EXITSUCCESS   = 700
CONST APPHELP       = 900
CONST CHECK         = 2500
CONST BADPATH       = 6400
CONST RESTART       = 1000

''File Types
CONST WING_RUNFILES     = 1
CONST WING_BUILDFILES   = 2

''Bitmap ID
CONST LOGO = 1

GLOBAL FILEDIALOG   ''File path dialog ID

GLOBAL DEST$        ''Default destination directory.

GLOBAL CHECKSTATES$ ''Dialog list symbol names
GLOBAL WINDRIVE$    ''Windows drive letter.

GLOBAL TMPDEST$	    '' tmpfile destination

GLOBAL bInstallDVA%

DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
DECLARE FUNCTION GetRealWindowsSysDir AS STRING
DECLARE SUB UpdateWinG32 (szOrig$) 

DECLARE FUNCTION OnWin3x LIB "setuphlp.DLL" AS INTEGER
DECLARE FUNCTION VflatdPresent LIB "setuphlp.DLL" AS INTEGER
DECLARE FUNCTION GetRealSystemDir LIB "setuphlp.DLL" (szDir$,cbBuf%) AS INTEGER
DECLARE FUNCTION RestartWindows LIB "setuphlp.DLL" AS INTEGER
DECLARE FUNCTION IsWin32FileNewer LIB "setuphlp.DLL" (szOrig$,szNew$) AS INTEGER
DECLARE SUB RenameFilePlease LIB "setuphlp.DLL" (szOrig$,szNew$) 

INIT:
    bInstallDVA% = 0
    
    CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
    HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure

    SetBitmap CUIDLL$, LOGO
    SetTitle "Microsoft WinG Setup"
    szInf$ = GetSymbolValue("STF_SRCINFPATH")
    IF szInf$ = "" THEN
	szInf$ = GetSymbolValue("STF_CWDDIR") + "wing.inf"
    END IF
    ReadInfFile szInf$

WELCOME:
    sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
    IF sz$ = "CONTINUE" THEN
	UIPop 1
    ELSE
	GOSUB ASKQUIT
	GOTO WELCOME
    END IF


    CHECKSTATES$ = "CheckItemsIn"
    AddListItem CHECKSTATES$, "ON"
'    AddListItem CHECKSTATES$, "OFF"
    AddListItem CHECKSTATES$, "ON"

CHECK:
''    sz$ = UIStartDlg(CUIDLL$, CHECK, "FCheckDlgProc", APPHELP, HELPPROC$)
''    IF sz$ = "CONTINUE" THEN
''	UIPop 1
''    ELSE
''	GOSUB ASKQUIT
''	GOTO CHECK
''    END IF

''    CHECKSTATES$ = "CheckItemsOut"
''    IF GetListItem(CHECKSTATES$, WING_RUNFILES) = "ON" THEN

	SrcDir$ = GetSymbolValue("STF_SRCDIR")
	DEST$ = GetWindowsSysDir
	
	AddSectionFilesToCopyList "runtime", SrcDir$, DEST$
	
       	'
	' only use DVA on Windows 3.x
	'
	IF OnWin3x() = 1 THEN
	    AddSectionFilesToCopyList "dva", SrcDir$, DEST$
	    IF VflatdPresent() = 0 THEN
		CreateSysIniKeyValue GetWindowsDir + "system.ini", "386Enh", "device", GetWindowsSysDir+"dva.386", cmoOverwrite
		bInstallDVA% = 1
	    END IF
	END IF
	
	DEST$ = GetRealWindowsSysDir
	
	AddSectionFilesToCopyList "wing32", SrcDir$, DEST$
       	Dest1$ = MakePath(DEST$,"wing32.dll")
       	Dest2$ = MakePath(DEST$,"wing32.xxx")
	RenameFilePlease Dest1$,Dest2$
	
	CopyFilesInCopyList
	
	UpdateWinG32 GetRealWindowsSysDir()

''    END IF

''    IF GetListItem(CHECKSTATES$, WING_BUILDFILES) = "ON" THEN
''	WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
''	DEST$ = WINDRIVE$ + ":\WING"
''	FILEDIALOG = DESTPATH2
''	GOSUB GETPATH
''	SrcDir$ = GetSymbolValue("STF_SRCDIR")
''	CreateDir DEST$, cmoVital

	'' add devkit files to destination
    
''	' WinBug.exe taken out for first beta, maybe add it in later, and fix up .lyt file too!
''	'CreateDir MakePath(DEST$,"winbug"), cmoNone
''	'AddSectionFilesToCopyList "winbug", SrcDir$, MakePath(DEST$,"winbug")

''	CreateDir MakePath(DEST$,"bin"), cmoNone
''	AddSectionFilesToCopyList "runtime", SrcDir$, MakePath(DEST$,"bin")
	
''	AddSectionFilesToCopyList "wing32", SrcDir$, MakePath(DEST$,"bin")
''       	Dest1$ = MakePath(DEST$,"bin\wing32.dll")
''       	Dest2$ = MakePath(DEST$,"bin\wing32.xxx")
''	RenameFilePlease Dest1$,Dest2$
	
''	AddSectionFilesToCopyList "bin", SrcDir$, MakePath(DEST$,"bin")
''	AddSectionFilestoCopyList "readme", SrcDir$, DEST$
''	CreateDir MakePath(DEST$,"include"), cmoNone
''	AddSectionFilesToCopyList "include", SrcDir$, MakePath(DEST$,"include")
''	CreateDir MakePath(DEST$,"help"), cmoNone
''	AddSectionFilesToCopyList "help", SrcDir$, MakePath(DEST$,"help")
''	CreateDir MakePath(DEST$,"lib"), cmoNone
''	AddSectionFilesToCopyList "lib", SrcDir$, MakePath(DEST$,"lib")
	
''	GOSUB ADDSAMPLEFILESTOLIST
''	CopyFilesInCopyList
''	UpdateWinG32 MakePath( DEST$, "bin" )
''	GOSUB ADDGROUP
''    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:
    if dlg% = EXITSUCCESS AND bInstallDVA% = 1 then
	sz$ = UIStartDlg(CUIDLL$, RESTART, "FInfoDlgProc", APPHELP, HELPPROC$)
	UIPop 1
	IF sz$ = "CONTINUE" THEN
	    rc% = RestartWindows
	ENDIF
    endif

    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


BADPATH:
    sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
    IF sz$ = "REACTIVATE" THEN
	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


GETPATH:
    SetSymbolValue "EditTextIn", DEST$
    SetSymbolValue "EditFocus", "END"

GETPATHL1:
    sz$ = UIStartDlg(CUIDLL$, FILEDIALOG, "FEditDlgProc", APPHELP, HELPPROC$)
    DEST$ = GetSymbolValue("EditTextOut")

    IF sz$ = "CONTINUE" THEN
	IF IsDirWritable(DEST$) = 0 THEN
	    GOSUB BADPATH
	    GOTO GETPATHL1
	END IF
	UIPop 1
    ELSEIF sz$ = "REACTIVATE" THEN
	GOTO GETPATHL1
    ELSEIF sz$ = "BACK" THEN
	UIPop 1
	GOTO CHECK
    ELSE
	GOSUB ASKQUIT
	GOTO GETPATH
    END IF

    RETURN

ADDSAMPLEFILESTOLIST:
	SamplePath$ = MakePath(DEST$,"samples")
	CreateDir SamplePath$, cmoNone

'       Add doggie example program

	sample$ = "doggie"

	CreateDir MakePath(SamplePath$,sample$), cmoNone
	AddSectionFilesToCopyList sample$, SrcDir$, MakePath(SamplePath$,sample$)

'       Add cube example program

	sample$ = "cube"

	CreateDir MakePath(SamplePath$,sample$), cmoNone
	AddSectionFilesToCopyList sample$, SrcDir$, MakePath(SamplePath$,sample$)

'       Add utils example code

	sample$ = "utils"

	CreateDir MakePath(SamplePath$,sample$), cmoNone
	AddSectionFilesToCopyList sample$, SrcDir$, MakePath(SamplePath$,sample$)

'       Add timewing example program

	sample$ = "timewing"

	CreateDir MakePath(SamplePath$,sample$), cmoNone
	AddSectionFilesToCopyList sample$, SrcDir$, MakePath(SamplePath$,sample$)

'       Add halftone example program

	sample$ = "halftone"

	CreateDir MakePath(SamplePath$,sample$), cmoNone
	AddSectionFilesToCopyList sample$, SrcDir$, MakePath(SamplePath$,sample$)

'       Add palanim example program

	sample$ = "palanim"

	CreateDir MakePath(SamplePath$,sample$), cmoNone
	AddSectionFilesToCopyList sample$, SrcDir$, MakePath(SamplePath$,sample$)

'       Other sample programs go here

	RETURN
	
ADDGROUP:
	SamplePath$ = MakePath(DEST$,"samples")
	proggroup$ = "WinG SDK"
	CreateProgmanGroup proggroup$, "", cmoNone
	
        path$ = MakePath( DEST$, "help\wing.hlp" )
	CreateProgmanItem proggroup$, "WinG Help", "winhelp "+path$, "", cmoOverwrite
	
        path$ = MakePath( DEST$, "bin\wingbug.exe" )
	CreateProgmanItem proggroup$, "WinG Bug Reporting Tool", path$, "", cmoOverwrite
	
	path$ = MakePath( SamplePath$,"doggie\doggie.exe")
	CreateProgmanItem proggroup$, "Doggie", path$, "", cmoOverwrite
	
	path$ = MakePath( SamplePath$,"cube\cube.exe")
	CreateProgmanItem proggroup$, "Cube",path$,"", cmoOverwrite
	
	path$ = MakePath( SamplePath$,"timewing\timewing.exe")
	CreateProgmanItem proggroup$, "Time WinG",path$,"", cmoOverwrite
	
	path$ = MakePath( SamplePath$,"halftone\halftone.exe")
	CreateProgmanItem proggroup$, "Halftone",path$,"", cmoOverwrite
	
	path$ = MakePath( SamplePath$,"palanim\palanim.exe")
	CreateProgmanItem proggroup$, "Palette Animation",path$,"", cmoOverwrite
	
'       Other sample programs get added here
	
	RETURN

'**
'** 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


FUNCTION GetRealWindowsSysDir STATIC AS STRING
    szBuf$ = string$(260, 32)
    cbBuf% = GetRealSystemDir(szBuf$, 260)
    IF cbBuf% = 0 THEN
        ERROR STFERR
    ELSE
        IF cbBuf% > 259 THEN
            res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
            ERROR STFERR
        END IF
        szBuf$ = RTRIM$(szBuf$)
        IF MID$(szBuf$, 1, 1) = "\" THEN
            szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
        ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
            szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
        END IF
        IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
            szBuf$ = szBuf$ + "\"
        END IF
        GetRealWindowsSysDir = szBuf$
    END IF

    szBuf$ = ""
END FUNCTION

SUB UpdateWinG32 (szOrig$) STATIC 
    '
    ' Here we check the version ourselves of wing32.dll, since 
    ' we can't get version checking for Win32 apps from Win16
    '
    FileNew$ = MakePath(szOrig$, "wing32.dll")
    FileOrig$ = MakePath(szOrig$, "wing32.xxx")
    IF IsWin32FileNewer( FileOrig$, FileNew$ ) THEN
	RemoveFile FileOrig$, cmoForce
    ELSE
    	RemoveFile FileNew$, cmoForce		' get rid of new file
	RenameFilePlease FileOrig$,FileNew$	' put back old file
    END IF
END SUB
