home *** CD-ROM | disk | FTP | other *** search
- '**************************************************************************
- '** Microsoft ODBC SDK 1.0 Setup **
- '**************************************************************************
-
- '$DEFINE DEBUG ''Define for script development/debugging
-
- '-- Includes ---------------------------------------------------------------
- '$INCLUDE 'setupapi.inc'
- '$INCLUDE 'msdetect.inc'
-
- '$INCLUDE 'odbcsdk.inc'
-
- '-- Constants --------------------------------------------------------------
- CONST szGroupName$= "ODBC SDK 1.0"
- CONST szInfName$ = "ODBCSDK.INF"
- CONST szDefDir$ = "C:\ODBCSDK"
- CONST fTRUE% = 1
- CONST fFALSE% = 0
- CONST szON$ = "ON"
- CONST szOFF$ = "OFF"
-
- ''Dialog ID's (must match those in SDKDLG.H)
- CONST WELCOME = 1100
- CONST ASKINSTALL = 1200
- CONST ASKQUIT = 1300
- CONST NOINSTALL = 1400
- CONST GETPATH = 1500
- CONST BADDIR = 1600
- CONST CREATEPATH = 1700
- CONST DETERSIZE = 1800
- CONST EXITSUCCESS = 1900
- CONST EXITQUIT = 2000
- CONST HELPINSTALL = 2100
- CONST HELPPATH = 2200
- CONST NOSPACE = 2300
- CONST EXITFAILURE = 2400
-
- ''Bitmap ID (must match those in SDKDLG.RC)
- CONST LOGO = 1
-
- '-- Globals ----------------------------------------------------------------
- GLOBAL szDir$ ''Destination directory
- GLOBAL szDrive$ ''Destination drive
- GLOBAL cbDrive& ''Space available on destination drive
- GLOBAL szSrcDir$ ''Source directory
- GLOBAL fInstallODBCTools% ''Install ODBC tools flag
- GLOBAL fInstallODBCHelp% ''Install ODBC help flag
- GLOBAL cbODBCTools& ''KBytes required for ODBC SDK tools
- GLOBAL cbODBCHelp& ''KBytes required for ODBC SDK help
- GLOBAL CUIDLL$ ''Dialog/Images DLL
- GLOBAL HELPPROC$ ''Help dialog procedure
-
-
- '-- Prototypes -------------------------------------------------------------
- DECLARE SUB BadPath
- DECLARE SUB CalcPathSpace
- DECLARE FUNCTION CreateInstallPath(szDir$) AS STRING
- DECLARE SUB DetermineSizes
- DECLARE SUB GetInstallPath
- DECLARE SUB Install
- DECLARE SUB InsufficientSpace
- DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
-
-
- '---------------------------------------------------------------------------
- ' INIT: Load globals and read .INF file
- '---------------------------------------------------------------------------
- INIT:
- CUIDLL$ = "mscuistf.dll" ''Custom user interface dll
- HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure
-
- SetBitmap CUIDLL$, LOGO
- SetTitle szTitle$
-
- szInf$ = GetSymbolValue("STF_SRCINFPATH")
- IF szInf$ = "" THEN
- szInf$ = GetSymbolValue("STF_CWDDIR") + szInfName$
- END IF
- ReadInfFile szInf$
-
- '$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: Display Welcome dialog
- '---------------------------------------------------------------------------
- WELCOME:
- sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", 0, "")
- IF sz$ = "CONTINUE" THEN
- UIPop 1
- ELSE
- GOSUB ASKQUIT
- GOTO WELCOME
- END IF
-
-
- '---------------------------------------------------------------------------
- ' DETERSIZES: Determine space required for install
- '---------------------------------------------------------------------------
- DETERSIZES:
- sz$ = UIStartDlg(CUIDLL$, DETERSIZE, "FModelessDlgProc", 0, "")
- szDir$ = szDefDir$
- DetermineSizes
- CalcPathSpace
- UIPop 1
-
-
- '---------------------------------------------------------------------------
- ' ASKINSTALL: Get users installation selections
- '---------------------------------------------------------------------------
- ASKINSTALL:
- CHECKSTATES$ = "CheckItemsState"
- STATUSTEXT$ = "StatusItemsText"
- DRIVETEXT$ = "DriveStatusText"
- FOR i% = 1 TO 2 STEP 1
- AddListItem CHECKSTATES$, "ON"
- NEXT i%
- FOR i% = 1 TO 2 STEP 1
- AddListItem STATUSTEXT$, "0"+szKB
- NEXT i%
- FOR i% = 1 to 7 STEP 1
- AddListItem DRIVETEXT$, ""
- NEXT i%
-
- fInstallODBCTools% = fTRUE%
- fInstallODBCHelp% = fTRUE%
-
- ASKI1:
- ReplaceListItem STATUSTEXT$, 1, Str$(cbODBCTools&)+szKB
- ReplaceListItem STATUSTEXT$, 2, Str$(cbODBCHelp&)+szKB
-
- cbTotal& = 0
- IF fInstallODBCTools% = fTRUE% THEN
- cbTotal& = cbTotal& + cbODBCTools&
- END IF
- IF fInstallODBCHelp% = fTRUE% THEN
- cbTotal& = cbTotal& + cbODBCHelp&
- END IF
-
- ReplaceListItem DRIVETEXT$, 1, szDrive$
- ReplaceListItem DRIVETEXT$, 2, Str$(cbTotal&)+szKB
- ReplaceListItem DRIVETEXT$, 3, Str$(cbDrive&)+szKB
- ReplaceListItem DRIVETEXT$, 7, szDir$
-
- sz$ = UIStartDlg(CUIDLL$, ASKINSTALL, "FCustInstDlgProc", HELPINSTALL, HELPPROC$)
-
- IF sz$ = "CONTINUE" THEN
- IF fInstallODBCTools% = fFALSE% AND fInstallODBCHelp% = fFALSE% THEN
- GOSUB NOSELECTIONS
- GOTO ASKI1
- END IF
- IF cbTotal& > cbDrive& THEN
- InsufficientSpace
- GOTO ASKI1
- END IF
- UIPop 1
- ELSEIF sz$ = "PATH" THEN
- GetInstallPath
- GOTO ASKI1
- ELSEIF sz$ = "REACTIVATE" THEN
- GOTO ASKI1
- ELSEIF sz$ = "EXIT" THEN
- GOSUB ASKQUIT
- GOTO ASKI1
- ELSEIF sz$ = "CHK1" THEN
- IF fInstallODBCTools% = fTRUE% THEN
- fInstallODBCTools% = fFALSE%
- ELSE
- fInstallODBCTools% = fTRUE%
- END IF
- GOTO ASKI1
- ELSEIF sz$ = "CHK2" THEN
- IF fInstallODBCHelp% = fTRUE% THEN
- fInstallODBCHelp% = fFALSE%
- ELSE
- fInstallODBCHelp% = fTRUE%
- END IF
- GOTO ASKI1
- ELSE
- GOTO ASKI1
- END IF
- UIPop 1
-
- Install
-
-
-
- '---------------------------------------------------------------------------
- ' QUIT: Exit setup
- '---------------------------------------------------------------------------
- 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(szBadDisks$, szTitle$, MB_OK+MB_TASKMODAL+MB_ICONHAND)
- END
-
-
- '---------------------------------------------------------------------------
- ' ASKQUIT: Ensure the user really wants to quit
- '---------------------------------------------------------------------------
- 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
-
-
- '---------------------------------------------------------------------------
- ' NOSELECTIONS: Warn the user that nothing was selected
- '---------------------------------------------------------------------------
- NOSELECTIONS:
- sz$ = UIStartDlg(CUIDLL$, NOINSTALL, "FInfoDlgProc", 0, "")
- UIPop 1
-
- IF sz$ = "EXIT" THEN
- GOSUB ASKQUIT
- END IF
- RETURN
-
- '*************************************************************************
- ' S U B R O U T I N E S
- '*************************************************************************
-
- '*************************************************************************
- '** Routine: BadPath
- '** Purpose:
- '** Display BADDIR dialog
- '** Arguments:
- '** none.
- '** Returns:
- '** none.
- '*************************************************************************
- SUB BadPath STATIC
- BADPATH1:
- sz$ = UIStartDlg(CUIDLL$, BADDIR, "FInfo0DlgProc", 0, "")
- IF sz$ = "REACTIVATE" THEN
- GOTO BADPATH1
- END IF
- UIPop 1
- END SUB
-
- '*************************************************************************
- '** Routine: CalcPathSpace
- '** Purpose:
- '** Determine free space on path drive.
- '** Arguments:
- '** szDir
- '** Returns:
- '** cbDrive
- '** szDrive
- '*************************************************************************
- SUB CalcPathSpace STATIC
- szDrive$ = Mid$(szDir$, 1, 1)
- cbDrive& = GetFreeSpaceForDrive(Mid$(szDrive$,1, 1))
- cbDrive& = (cbDrive& + 1023) / 1024
- END SUB
-
- '*************************************************************************
- '** Routine: CreateInstallPath
- '** Purpose:
- '** Create destination directories
- '** Arguments:
- '** none.
- '** Returns:
- '** none.
- '*************************************************************************
- FUNCTION CreateInstallPath (szDir$) STATIC AS STRING
- sz$ = "CONTINUE"
- IF DoesDirExist(szDir$) <> 1 THEN
- CREATEPATH1:
- sz$ = UIStartDlg(CUIDLL$, CREATEPATH, "FInfo0DlgProc", 0, "")
- IF sz$ = "REACTIVATE" THEN
- GOTO CREATEPATH1
- ELSEIF sz$ = "CONTINUE" THEN
- CreateDir szDir$, cmoVital
- END IF
- UIPop 1
- END IF
- CreateInstallPath = sz$
- END FUNCTION
-
- '*************************************************************************
- '** Routine: DetermineSizes
- '** Purpose:
- '** Determine space required for each option.
- '** Arguments:
- '** none.
- '** Returns:
- '** cbODBCTools
- '** cbODBCHelp
- '*************************************************************************
- SUB DetermineSizes STATIC
- szSrcDir$ = GetSymbolValue("STF_SRCDIR")
-
- ClearCopyList
- AddSectionFilesToCopyList "Root", szSrcDir$, szDir$
- AddSectionFilesToCopyList "Gator", szSrcDir$, szDir$
- AddSectionFilesToCopyList "GatorObjects", szSrcDir$, szDir$
- AddSectionFilesToCopyList "Include", szSrcDir$, szDir$
- AddSectionFilesToCopyList "Lib", szSrcDir$, szDir$
- AddSectionFilesToCopyList "SampleDriver", szSrcDir$, szDir$
- AddSectionFilesToCopyList "SampleSetup", szSrcDir$, szDir$
- AddSectionFilesToCopyList "VBDemo", szSrcDir$, szDir$
- AddSectionFilesToCopyList "ODBC", szSrcDir$, szDir$
-
- ListSym$ = "ToolNeeds"
- cbODBCTools& = GetCopyListCost ("", ListSym$, "")
- cbODBCTools& = 0
- FOR i% = 1 TO 26 STEP 1
- cbODBCTools& = cbODBCTools& + VAL(GetListItem(ListSym$, i%))
- NEXT i%
- cbODBCTools& = (cbODBCTools& + 1023) / 1024
-
- ClearCopyList
- AddSectionFilesToCopyList "ODBCHelp", szSrcDir$, szDir$
-
- ListSym$ = "HelpNeeds"
- cbODBCHelp& = GetCopyListCost ("", ListSym$, "")
- cbODBCHelp& = 0
- FOR i% = 1 TO 26 STEP 1
- cbODBCHelp& = cbODBCHelp& + VAL(GetListItem(ListSym$, i%))
- NEXT i%
- cbODBCHelp& = (cbODBCHelp& + 1023) / 1024
-
- ClearCopyList
- ListSym$ = ""
- END SUB
-
- '*************************************************************************
- '** Routine: GetInstallPath
- '** Purpose:
- '** Query user for installation path.
- '** Arguments:
- '** none.
- '** Returns:
- '** szDir$
- '*************************************************************************
- SUB GetInstallPath STATIC
- GETPATH:
- SetSymbolValue "EditTextIn", szDir$
- SetSymbolValue "EditFocus", "END"
- GETPATHL1:
- fError% = fFALSE%
- sz$ = UIStartDlg(CUIDLL$, GETPATH, "FEditDlgProc", HELPPATH, HELPPROC$)
-
- IF sz$ = "CONTINUE" THEN
- szTDir$ = GetSymbolValue("EditTextOut")
- szTDir$ = LTRIM$(szTDir$)
- szTDir$ = RTRIM$(szTDir$)
-
- IF InStr(1, szTDir$, ":") = 0 THEN
- szTDir$ = Mid$(GetSymbolValue("STF_CWDDIR"), 1, 1) + ":" + szTDir$
- END IF
-
- IF MID$(szTDir$, LEN(szTDir$), 1) = "\" THEN
- fError% = fTRUE%
- END IF
-
- IF fError% <> fTRUE% AND IsDirWritable(szTDir$) = 0 THEN
- fError% = fTRUE%
- END IF
-
- IF fError% <> fTRUE% AND Exists(szTDir$) THEN
- fError% = fTRUE%
- END IF
-
- IF fError% <> fTRUE% THEN
- i% = 0
- GETPATHL2:
- iLastDir% = i%
- i% = INSTR(iLastDir%+1, szTDir$, "\")
- IF i% <> 0 THEN
- GOTO GETPATHL2
- END IF
- IF MID$(szTDir$, iLastDir%, 1) = "\" THEN
- iLastDir% = iLastDir% + 1
- END IF
-
- szLastDir$ = UCASE$(MID$(szTDir$, iLastDir%))
-
- IF szLastDir$ = "PRN" OR szLastDir$ = "AUX" OR szLastDir$ = "CON" THEN
- fError% = fTRUE%
- END IF
-
- IF LEN(szLastDir$) = 4 THEN
- iNum = VAL(MID$(szLastDir$, 4, 1))
- IF iNum >= 1 AND iNum <= 9 THEN
- IF MID$(szLastDir$, 1, 3) = "COM" OR MID$(szLastDir$, 1, 3) = "LPT" THEN
- fError% = fTRUE%
- END IF
- END IF
- END IF
- END IF
-
- IF fError% = fTRUE% THEN
- BadPath
- GOTO GETPATHL1
- END IF
-
- sz$ = CreateInstallPath(szTDir$)
- IF sz$ <> "CONTINUE" THEN
- GOTO GETPATHL1
- END IF
-
- sz$ = UIStartDlg(CUIDLL$, DETERSIZE, "FModelessDlgProc", 0, "")
- szDir$ = szTDir$
- DetermineSizes
- CalcPathSpace
- UIPop 1
-
- END IF
- UIPop 1
- END SUB
-
- '*************************************************************************
- '** Routine: Install
- '** Purpose:
- '** Builds the copy list and performs all installation operations.
- '** Arguments:
- '** none.
- '** Returns:
- '** none.
- '*************************************************************************
- SUB Install STATIC
- CreateDir szDir$, cmoVital
- IF fInstallODBCTools% THEN
- AddSectionFilesToCopyList "Root", szSrcDir$, szDir$
- SubDir$ = MakePath (szDir$, "Gator")
- CreateDir SubDir$, cmoVital
- AddSectionFilesToCopyList "Gator", szSrcDir$, SubDir$
- SubDir$ = MakePath (SubDir$, "OBJ")
- CreateDir SubDir$, cmoVital
- AddSectionFilesToCopyList "GatorObjects", szSrcDir$, SubDir$
- SubDir$ = MakePath (szDir$, "Include")
- CreateDir SubDir$, cmoVital
- AddSectionFilesToCopyList "Include", szSrcDir$, SubDir$
- SubDir$ = MakePath (szDir$, "Lib")
- CreateDir SubDir$, cmoVital
- AddSectionFilesToCopyList "Lib", szSrcDir$, SubDir$
- SubDir$ = MakePath (szDir$, "Sample")
- CreateDir SubDir$, cmoVital
- SubDir$ = MakePath (SubDir$, "Driver")
- CreateDir SubDir$, cmoVital
- AddSectionFilesToCopyList "SampleDriver", szSrcDir$, SubDir$
- SubDir$ = MakePath (szDir$, "Sample\Setup")
- CreateDir SubDir$, cmoVital
- AddSectionFilesToCopyList "SampleSetup", szSrcDir$, SubDir$
- SubDir$ = MakePath (szDir$, "VBDemo")
- CreateDir SubDir$, cmoVital
- AddSectionFilesToCopyList "VBDemo", szSrcDir$, SubDir$
- SubDir$ = MakePath (szDir$, "ODBC")
- CreateDir SubDir$, cmoVital
- AddSectionFilesToCopyList "ODBC", szSrcDir$, SubDir$
- END IF
- IF fInstallODBCHelp% THEN
- AddSectionFilesToCopyList "ODBCHelp", szSrcDir$, szDir$
- END IF
- CopyFilesInCopyList
-
- CreateProgmanGroup szGroupName$, "", cmoNone
- IF fInstallODBCTools% THEN
- CreateProgmanItem szGroupName$, "Readme", "Notepad.exe " + MakePath (szDir$, "README.TXT"), "", cmoOverwrite
- CreateProgmanItem szGroupName$, "ODBC Test", MakePath (szDir$, "Gator.exe"), "", cmoOverwrite
- CreateProgmanItem szGroupName$, "ODBC Setup", MakePath (szDir$, "ODBC\Setup.exe"), "", cmoOverwrite
- CreateProgmanItem szGroupName$, "VB Demo", MakePath (szDir$, "VBDemo\VBDemo.exe"), "", cmoOverwrite
- END IF
- IF fInstallODBCHelp% THEN
- CreateProgmanItem szGroupName$, "ODBC API Reference", "WinHelp.exe " + MakePath(szDir$, "ODBCAPI.hlp"), "", cmoOverwrite
- END IF
- END SUB
-
- '*************************************************************************
- '** Routine: InsufficientSpace
- '** Purpose:
- '** Display NOSPACE dialog
- '** Arguments:
- '** none.
- '** Returns:
- '** none.
- '*************************************************************************
- SUB InsufficientSpace STATIC
- BADPATH1:
- sz$ = UIStartDlg(CUIDLL$, NOSPACE, "FInfo0DlgProc", 0, "")
- IF sz$ = "REACTIVATE" THEN
- GOTO BADPATH1
- END IF
- UIPop 1
- END SUB
-
-
- '*************************************************************************
- '** Routine: MakePath
- '** 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
-