'**************************************************************************
'*                       Nutmeg32 setup
'**************************************************************************

'' $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 BADPATH       = 6400

CONST HELPWELCOME   = 1000
CONST VERPATH       = 1100
CONST EXITFAILNOTWIN31 = 1200
CONST EXITFAILNOTENH = 1300
CONST NUTMEG32INST  = 1400
CONST NUTMEG32PATH  = 1500
CONST HELPNUTMEG32  = 1600
CONST EXITSUCCESS_NT = 1700
CONST ASKQUIT_NT    = 2000
CONST WELCOME_NT    = 2200
CONST EXITQUIT_NT   = 2300
CONST HELPWELCOME_NT = 2400

''Bitmap ID
CONST LOGO = 1

GLOBAL DESTSYS$      ''Windows\System directory.
GLOBAL DEST32S$      ''Windows\System\Win32s directory
GLOBAL DESTNUTMEG$     ''Nutmeg32 directory
GLOBAL OS$             ''Operating System

DECLARE SUB Install
DECLARE SUB UpdateSystemIni
DECLARE SUB RebootSystem
DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
DECLARE FUNCTION MakeSystemIni LIB "INIUPD.DLL" (arg1$, arg2$) AS INTEGER
DECLARE FUNCTION RestartWindows LIB "INIUPD.DLL" (arg1$) AS INTEGER

INIT:
    CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
    HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure

    SetBitmap CUIDLL$, LOGO
    SetTitle " Win32s / Nutmeg32 Setup Program"

    szInf$ = GetSymbolValue("STF_SRCINFPATH")
    IF szInf$ = "" THEN
	szInf$ = GetSymbolValue("STF_CWDDIR") + "nutmeg32.inf"
    END IF
    ReadInfFile szInf$

    DESTSYS$ = GetWindowsSysDir()
    DEST32S$ = DESTSYS + "WIN32S\"

'$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

CHECK:
    OS$ = "Operating system: " + ENVIRON$("OS")

    IF ENVIRON$("OS") = "Windows NT" THEN
        i% = DoMsgBox(OS$, "Environment", MB_TASKMODAL+MB_ICONINFORMATION+MB_OK)
        NT = 1
        ExitCode% = EXITSUCCESSNT
        GOTO NT
    END IF
    IF GetWindowsMajorVersion < 3 THEN
	ExitCode% = EXITFAILNOTWIN31
	GOTO QUIT
    END IF
    IF GetWindowsMajorVersion = 3 AND GetWindowsMinorVersion < 1 THEN
	ExitCode% = EXITFAILNOTWIN31
	GOTO QUIT
    END IF
    IF GetWindowsMode < 2  THEN     '' Not Enhanced or Windows NT
	ExitCode% = EXITFAILNOTENH
	GOTO QUIT
    END IF
    NT = 0
    ExitCode% = EXITSUCCESS

    NT:


WELCOME:
    IF NT = 1 THEN
      sz$ = UIStartDlg(CUIDLL$, WELCOME_NT, "FInfoDlgProc", HELPWELCOME_NT, HELPPROC$)
    END IF

    IF NT = 0 THEN
      sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", HELPWELCOME, HELPPROC$)
    END IF

    IF sz$ = "CONTINUE" THEN
	UIPop 1
    ELSE
	GOSUB ASKQUIT
	GOTO WELCOME
	END IF
   IF NT = 1 THEN
        GOTO NUTMEG32
   END IF

GETWIN32SPATH:
    SetSymbolValue "EditTextIn", DESTSYS$
    SetSymbolValue "EditFocus", "END"

GETPATHL1:
    sz$ = UIStartDlg(CUIDLL$, VERPATH, "FDispDlgProc", HELPWELCOME, HELPPROC$)

    IF sz$ = "CONTINUE" THEN
	IF IsDirWritable(DESTSYS$) = 0 THEN
	    GOSUB BADPATH
	    GOTO GETPATHL1
	END IF
	UIPop 1
    ELSEIF sz$ = "REACTIVATE" THEN
	GOTO GETPATHL1
    ELSEIF sz$ = "BACK" THEN
	UIPop 1
	GOTO WELCOME
    ELSE
	GOSUB ASKQUIT
	GOTO GETPATHL1
    END IF

COPYFILES:

    CreateDir DEST32S$, cmoNone
      OpenLogFile MakePath(DEST32S$, "W32SSET.LOG"), 0

    Install
    UpdateSystemIni

    CloseLogFile

NUTMEG32:
    IF NT = 0 THEN
        sz$ = UIStartDlg(CUIDLL$, NUTMEG32INST, "FInfoDlgProc",0, "")
        IF sz$ = "CONTINUE" THEN
	    UIPop 1
        ELSE
	    GOTO QUIT
        END IF
    END IF

GETFREEPATH:
    DESTNUTMEG$ = MID$(DESTSYS$,1,3) + "WIN32APP\NUTMEG32\"
    SetSymbolValue "EditTextIn", DESTNUTMEG$
    SetSymbolValue "EditFocus", "END"

GETFREEPATHL1:
    sz$ = UIStartDlg(CUIDLL$, NUTMEG32PATH, "FEditDlgProc", HELPNUTMEG32, HELPPROC$)

    IF sz$ = "CONTINUE" THEN
	DESTNUTMEG$ = GetSymbolValue("EditTextOut")

    ''Validate new path.
	IF IsDirWritable(DESTNUTMEG$) = 0 THEN
		GOSUB BADPATH
		GOTO GETFREEPATHL1
	END IF
	UIPop 1

	GOTO COPYNUTMEG32
    ELSEIF sz$ = "REACTIVATE" THEN
	GOTO GETFREEPATHL1
    ELSEIF sz$ = "EXIT" THEN
	UIPop 1
	GOTO QUIT
    END IF

COPYNUTMEG32:
    ClearCopyList
    CreateDir DESTNUTMEG$, cmoNone

    IF NT = 0 THEN
      OpenLogFile MakePath(DEST32S$, "SETUP.LOG"), 0
    END IF

    SrcDir$ = GetSymbolValue("STF_SRCDIR")
    IF NT = 0 THEN
        WriteToLogFile ""
        WriteToLogFile "  User chose as destination directory: '" + DESTNUTMEG$ + "'"
        WriteToLogFile ""
        WriteToLogFile "May have had to create the directory: " + DESTNUTMEG$
        WriteToLogFile ""
    END IF

    AddSectionFilesToCopyList "Win32appNutmeg32", SrcDir$, DESTNUTMEG$
    CopyFilesInCopyList

    CreateProgmanGroup "WeBeWare's Nutmeg & Spice", "", cmoNone
    ShowProgmanGroup   "WeBeWare's Nutmeg & Spice", 1, cmoNone
    CreateProgmanItem  "WeBeWare's Nutmeg & Spice", "Nutmeg32", DESTNUTMEG$ + "NUTMEG32.EXE", "", cmoOverwrite
    CreateProgmanItem  "WeBeWare's Nutmeg & Spice", "Spice32", DESTNUTMEG$ + "SPICE32.EXE", "", cmoOverwrite
    CreateProgmanItem  "WeBeWare's Nutmeg & Spice", "Readme.1st", "NOTEPAD.EXE " + DESTNUTMEG$ + "readme.1st", "", cmoOverwrite
    CreateProgmanItem  "WeBeWare's Nutmeg & Spice", "Readme.txt", "NOTEPAD.EXE " + DESTNUTMEG$ + "readme.txt", "", cmoOverwrite
    IF NT = 0 THEN
        CloseLogFile
    END IF 



QUIT:
    ON ERROR GOTO ERRQUIT
    IF ERR = 0 THEN
	dlg% = ExitCode%
    ELSEIF ERR = STFQUIT THEN
	IF NT = 1 THEN
	    dlg% = EXITQUIT_NT
	ELSE
	    dlg% = EXITQUIT
        END IF
    ELSE
	dlg% = EXITFAILURE
    END IF

QUITL1:
    sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
    IF sz$ = "REACTIVATE" THEN
	GOTO QUITL1
    END IF
    UIPop 1

    IF NT = 0 THEN
      RebootSystem
    END IF
    END

ERRQUIT:
    i% = DoMsgBox("Setup sources were corrupted!", "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:
    IF NT = 1 THEN
      sz$ = UIStartDlg(CUIDLL$, ASKQUIT_NT, "FQuitDlgProc", 0, "")
    END IF

    IF NT = 0 THEN
      sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
    END IF

    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")
    IF NT = 0 THEN
        WriteToLogFile ""
        WriteToLogFile "  User chose as destination directory: '" + DESTSYS$ + "'"
        WriteToLogFile ""
        WriteToLogFile "May have had to create the directory: " + DESTSYS$
        WriteToLogFile ""
    END IF

    AddSectionFilesToCopyList "WindowsSystem", SrcDir$, DESTSYS$
    AddSectionFilesToCopyList "WindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\"

    t% = RestartWindows( GetWindowsSysDir() + "OLECLI.DLL" )
    SetRestartDir GetWindowsDir()
    CopyFilesInCopyList

END SUB

SUB UpdateSystemIni STATIC

    VxDPath$ = DEST32S$ + "W32S.386"
    SystemIniPath$ = GetWindowsDir()

    t% = MakeSystemIni(SystemIniPath$, VxdPath$)

END SUB

SUB RebootSystem STATIC

    i% = RestartListEmpty()
    i% = ExitExecRestart()

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
