'*************************************************************************
'* S3/Xing Native-MPEG(TM) Driver Installation Script
'*************************************************************************
'''''$DEFINE DEBUG ''Define for script development/debugging
DECLARE FUNCTION ExitWindowsExec LIB "user" (s1$, s2$) AS INTEGER
DECLARE FUNCTION RestartWindows AS INTEGER
FUNCTION RestartWindows STATIC AS INTEGER
RestartWindows = ExitWindowsExec( "", "" )
END FUNCTION
'$INCLUDE 'setupapi.inc'
'$INCLUDE 'msdetect.inc'
'$INCLUDE 'msregdb.inc'
''Dialog ID's
CONST WELCOME = 100
CONST ASKQUIT = 200
CONST DESTPATH = 300
CONST EXITFAILURE = 400
CONST EXITQUIT = 600
CONST EXITSUCCESS = 700
CONST APPHELP = 900
CONST RESTART = 1200
CONST DIREXISTS = 1400
CONST CHECKREPLACE = 1500
CONST BADPATH = 6400
CONST LOGO = 1
GLOBAL DEST$ ''Destination directory(default=c:\mpeg)
GLOBAL WINDIR$ ''Windows directory.
GLOBAL WINSYSDIR$ ''Windows System directory.
GLOBAL CUIDLL$
GLOBAL SystemIni$ ''Windows SYSTEM.INI file
GLOBAL WinIni$ ''Windows WIN.INI file
GLOBAL CtrlIni$ ''Windows CONTROL.INI file
GLOBAL DRIVERNUM% ''Driver number for multiple instances of MpegVideo
GLOBAL ADDDRIVER% ''Replace driver (=0) or add new driver (=1)
GLOBAL DRVR$ ''Native-MPEG Driver name
GLOBAL WINSECTION$ ''WIN.INI Section Name
GLOBAL WINKEYNAME$ ''WIN.INI Keyname
DECLARE SUB Install
DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
DECLARE FUNCTION GetDriveInPath( szPath$) AS STRING
DECLARE FUNCTION DriverExists() AS INTEGER
'**========================================================================
INIT:
CUIDLL$ = "mscuistf.dll" ''Custom user interface dll
HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure
SetTitle "S3(R)/Xing(TM) Native-MPEG(TM) Driver Version 1.1"
DRVR$ = "MPEG110.DRV"
WINSECTION$ = "mpeg110"
WINKEYNAME$ = "mpeg110path"
szInf$ = GetSymbolValue("STF_SRCINFPATH")
IF szInf$ = "" THEN
szInf$ = GetSymbolValue("STF_CWDDIR") + "S3SETUP.INF"
END IF
ReadInfFile szInf$
DEST$ = "C:\MPEG" '' set the default destination to C:\MPEG
WINDIR$ = GetWindowsDir()
WINSYSDIR$ = WINDIR$ + "SYSTEM"
SystemIni$ = MakePath(WINDIR$, "SYSTEM.INI")
WinIni$ = MakePath(WINDIR$, "WIN.INI")
CtrlIni$ = MakePath(WINDIR$, "CONTROL.INI")
ADDDRIVER% = 1 ''default set to ADD new driver
'**========================================================================
WELCOME:
sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
IF sz$ = "CONTINUE" THEN
UIPop 1
IF DriverExists() = 1 THEN
GOTO CHECKREPLACE
ELSE
GOTO GETDESTPATH
ENDIF
ELSE
GOSUB ASKQUIT
GOTO WELCOME
END IF
'**========================================================================
CHECKREPLACE:
SetSymbolValue "RadioDefault", "1"
CHECKREPLACE1:
sz$ = UIStartDlg(CUIDLL$, CHECKREPLACE,"FRadioDlgProc",APPHELP,HELPPROC$)
btn$ = GetSymbolValue("ButtonChecked")
IF btn$ = "1" THEN
ADDDRIVER% = 1 '' add new driver - default
ELSE
ADDDRIVER% = 0 '' replace driver(s)
ENDIF
IF sz$ = "CONTINUE" THEN
UIPop 1
ELSEIF sz$ = "REACTIVATE" THEN
GOTO CHECKREPLACE1
ELSE
GOSUB ASKQUIT
GOTO CHECKREPLACE
END IF
'**========================================================================
GETDESTPATH:
IF DRIVERNUM% = 0 THEN
SetSymbolValue "EditTextIn", DEST$
ELSE
IF ADDDRIVER% = 1 THEN
SetSymbolValue "EditTextIn", DEST$ + LTRIM$( STR$( DRIVERNUM% ) )
ELSE
SetSymbolValue "EditTextIn", DEST$
ENDIF
ENDIF
GETDESTPATH1:
sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
DEST$ = GetSymbolValue("EditTextOut")
SrcDir$ = GetSymbolValue( "STF_SRCDIR" )
IF sz$ = "CONTINUE" THEN
IF isDirWritable( DEST$ ) = 0 THEN
GOSUB BADPATH
GOTO GETDESTPATH1
END IF
drive$ = GetDriveInPath( DEST$ ) '' check for invalid drive in path
IF IsDriveValid( drive$ ) = 0 THEN
GOSUB BADPATH
GOTO GETDESTPATH1
END IF
DestExists% = DoesDirExist( DEST$ )
IF DestExists% = 1 THEN
GOTO DIREXISTS
END IF
ELSEIF sz$ = "REACTIVATE" THEN
GOTO GETDESTPATH1
ELSE
GOSUB ASKQUIT
GOTO GETDESTPATH
END IF
STARTINSTALL:
AddSectionFilesToCopyList "MPEG files", SrcDir$, DEST$
AddSectionFilesToCopyList "Windows System files", SrcDir$,WINSYSDIR$
UIPopAll
Install
RListEmpty% = RestartListEmpty()
Exe$ = DEST$ + "\_msrstrt.exe"
Batch$ = DEST$ + "\_mssetup.bat"
empty$ = ""
RESTART:
sz$ = UIStartDlg(CUIDLL$, RESTART, "FInfoDlgProc", 0, "")
IF sz$ = "EXIT" THEN '' Restart Windows button pressed
RemoveFile "C:\swmpeg.tmp\s3setup.inf", cmoForce
RemoveFile "C:\swmpeg.tmp\s3setup.mst", cmoForce
RemoveFile "C:\swmpeg.tmp\setupapi.inc", cmoForce
RemoveFile "C:\swmpeg.tmp\msdetect.inc", cmoForce
RemoveFile "C:\swmpeg.tmp\msregdb.inc", cmoForce
RemoveFile "C:\swmpeg.tmp\_mstest.exe", cmoForce
RemoveFile "C:\swmpeg.tmp\_mssetup.exe", cmoForce
RemoveFile "C:\swmpeg.tmp\_mssetup._q_", cmoForce
RemoveFile "C:\swmpeg.tmp\mscomstf.dll", cmoForce
RemoveFile "C:\swmpeg.tmp\msdetstf.dll", cmoForce
RemoveFile "C:\swmpeg.tmp\msinsstf.dll", cmoForce
RemoveFile "C:\swmpeg.tmp\msshlstf.dll", cmoForce
RemoveFile "C:\swmpeg.tmp\msuilstf.dll", cmoForce
'$IFDEF DEBUG
CloseLogFile
'$ENDIF ''DEBUG
i% = RestartWindows()
IF i% = 0 THEN
GOTO RESTART
ELSE
RemoveFile "C:\swmpeg.tmp\mscuistf.dll", cmoForce
Run( "rmdir c:\swmpeg.tmp" )
ENDIF
ELSEIF sz$ = "REACTIVATE" THEN
GOTO RESTART
ELSE
UIPop 1
ENDIF
'**========================================================================
QUIT:
ON ERROR GOTO ERRQUIT
IF ERR = 0 THEN
dlg% = EXITSUCCESS
ELSEIF ERR = STFQUIT THEN
dlg% = EXITQUIT
ELSE
dlg% = EXITFAILURE
END IF
QUITL1:
UIPopAll
sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
IF sz$ = "REACTIVATE" THEN
GOTO QUITL1
END IF
END
'**========================================================================
ERRQUIT:
i% = DoMsgBox("Setup sources 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:
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
'**========================================================================
DIREXISTS:
sz$ = UIStartDlg(CUIDLL$, DIREXISTS, "FInfoDlgProc", APPHELP, HELPPROC$)
IF sz$ = "CONTINUE" THEN
UIPop 1
GOTO STARTINSTALL
ELSEIF sz$ = "BACK" THEN
UIPop 1
GOTO GETDESTPATH1
ELSE
GOSUB ASKQUIT
GOTO DIREXISTS
END IF
'**==========================================================================
'** Purpose:
'** Builds the copy list and performs all installation operations.
'** Arguments:
'** none.
'** Returns:
'** none.
'*************************************************************************
SUB Install STATIC
SrcDir$ = GetSymbolValue("STF_SRCDIR")
CreateDir DEST$, cmoNone '' create destination directory
'$IFDEF DEBUG
OpenLogFile MakePath(DEST$, "LOGFILE.OUT"), 0
WriteToLogFile ""
WriteToLogFile " Destination directory set to: '" + DEST$ + "'"
WriteToLogFile ""
'$ENDIF ''DEBUG
RemoveFile MakePath(WINDIR$, "MPLAYER.INI"), cmoForce
'' i% = SetCopyMode( 0 ) '' debugging: don't copy files
i% = SetCopyMode( 1 ) '' copy files
CopyFilesInCopyList
'$IFDEF DEBUG
WriteToLogFile ""
WriteToLogFile " Files copied in copy list... "
WriteToLogFile ""
'$ENDIF ''DEBUG
'' ======================================================================
'' SYSTEM.INI, WIN.INI, and CONTROL.INI File Modifications
'' ======================================================================
'' ----------------------------------------------------------------------
'' SYSTEM.INI, [mci] section: MpegVideo=MPEG1B7.DRV
'' ----------------------------------------------------------------------
IF ADDDRIVER = 1 THEN ''Add new MpegVideo driver (default)
IF DRIVERNUM% = 0 THEN
driver$ = "MpegVideo"
ELSE
driver$ = "MpegVideo" + LTRIM$( STR$( DRIVERNUM% ) )
ENDIF
'$IFDEF DEBUG
WriteToLogFile " ADDING '" + driver$ + "' driver... "
WriteToLogFile ""
'$ENDIF ''DEBUG
ELSE
driver$ = "MpegVideo"
'$IFDEF DEBUG
WriteToLogFile " REPLACING MpegVideo driver... "
WriteToLogFile ""
'$ENDIF ''DEBUG
ENDIF
'$IFDEF DEBUG
WriteToLogFile " Driver name set to: '" + driver$ + "' "
WriteToLogFile ""
'$ENDIF ''DEBUG
IF ADDDRIVER = 0 THEN ''Replace all previous MpegVideo drivers
FOR i% = 1 TO DRIVERNUM% STEP 1
drv$ = "MpegVideo" + LTRIM$( STR$( i% ) )
RemoveIniKey SystemIni$, "mci", drv$, cmoNone
NEXT
ENDIF
CreateIniKeyValue SystemIni$, "mci", driver$, DRVR$, cmoOverwrite
'' ----------------------------------------------------------------------
'' SYSTEM.INI, [mci] section: CDIVideo=[driver name]
'' ----------------------------------------------------------------------
keyExists% = DoesIniKeyExist( SystemIni$, "mci", "CDIVideo" )
IF keyExists% THEN
CreateIniKeyValue SystemIni$, "mci", "CDIVideo", DRVR$, cmoOverwrite
ELSE
CreateIniKeyValue SystemIni$, "mci", "CDIVideo", DRVR$, cmoNone
ENDIF
'' ----------------------------------------------------------------------
'' SYSTEM.INI, [Debug] section: OutputTo=NUL
'' ----------------------------------------------------------------------
keyExists% = DoesIniKeyExist( SystemIni$, "Debug", "OutputTo" )
szVal$ = "NUL"
IF keyExists% THEN
CreateIniKeyValue SystemIni$, "Debug", "OutputTo", szVal$, cmoOverwrite
ELSE
CreateIniKeyValue SystemIni$, "Debug", "OutputTo", szVal$, cmoNone
ENDIF
'' ----------------------------------------------------------------------
'' Add Registration Database entry: mpg=mplayer
'' ----------------------------------------------------------------------
keyExists% = DoesRegKeyExist( ".mpg" )
IF keyExists% THEN
CreateRegKeyValue ".mpg", "mplayer"
ELSE
CreateRegKey ".mpg"
CreateRegKeyValue ".mpg", "mplayer"
ENDIF
'' ----------------------------------------------------------------------
'' Add Registration Database entry: dat=mplayer
'' ----------------------------------------------------------------------
keyExists% = DoesRegKeyExist( ".dat" )
IF keyExists% THEN
CreateRegKeyValue ".dat", "mplayer"
ELSE
CreateRegKey ".dat"
CreateRegKeyValue ".dat", "mplayer"
ENDIF
'' ----------------------------------------------------------------------
'' WIN.INI, [Extensions] section: mpg=mplayer.exe /play ^.mpg
'' ----------------------------------------------------------------------
keyExists% = DoesIniKeyExist( WinIni$, "Extensions", "mpg" )
szVal$ = "mplayer.exe /play ^.mpg"
IF keyExists% THEN
CreateIniKeyValue WinIni$, "Extensions", "mpg", szVal$, cmoOverwrite
ELSE
CreateIniKeyValue WinIni$, "Extensions", "mpg", szVal$, cmoNone
ENDIF
'' ----------------------------------------------------------------------
'' WIN.INI, [Extensions] section: dat=mplayer.exe /play ^.dat
'' ----------------------------------------------------------------------
keyExists% = DoesIniKeyExist( WinIni$, "Extensions", "dat" )
szVal$ = "mplayer.exe /play ^.dat"
IF keyExists% THEN
CreateIniKeyValue WinIni$, "Extensions", "dat", szVal$, cmoOverwrite
ELSE
CreateIniKeyValue WinIni$, "Extensions", "dat", szVal$, cmoNone
ENDIF
'' ----------------------------------------------------------------------
'' WIN.INI, [Extensions] section: mpv=mplayer.exe /play ^.mpv
'' ----------------------------------------------------------------------
keyExists% = DoesIniKeyExist( WinIni$, "Extensions", "mpv" )
szVal$ = "mplayer.exe /play ^.mpv"
IF keyExists% THEN
CreateIniKeyValue WinIni$, "Extensions", "mpv", szVal$, cmoOverwrite
ELSE
CreateIniKeyValue WinIni$, "Extensions", "mpv", szVal$, cmoNone
ENDIF
'' ----------------------------------------------------------------------
'' WIN.INI, [Extensions] section: vbs=mplayer.exe /play ^.vbs
'' ----------------------------------------------------------------------
keyExists% = DoesIniKeyExist( WinIni$, "Extensions", "vbs" )
szVal$ = "mplayer.exe /play ^.vbs"
IF keyExists% THEN
CreateIniKeyValue WinIni$, "Extensions", "vbs", szVal$, cmoOverwrite
ELSE
CreateIniKeyValue WinIni$, "Extensions", "vbs", szVal$, cmoNone
ENDIF
'' ----------------------------------------------------------------------
'' WIN.INI, [Extensions] section: vid=mplayer.exe /play ^.vid
'' ----------------------------------------------------------------------
keyExists% = DoesIniKeyExist( WinIni$, "Extensions", "vid" )
szVal$ = "mplayer.exe /play ^.vid"
IF keyExists% THEN
CreateIniKeyValue WinIni$, "Extensions", "vid", szVal$, cmoOverwrite
ELSE
CreateIniKeyValue WinIni$, "Extensions", "vid", szVal$, cmoNone
ENDIF
'' ----------------------------------------------------------------------
'' WIN.INI, [mci extensions] section: mpg=MpegVideo
'' ----------------------------------------------------------------------
sect$ = "mci extensions"
keyExists% = DoesIniKeyExist( WinIni$, "mci extensions", "mpg" )
IF keyExists% THEN
CreateIniKeyValue WinIni$, sect$, "mpg", driver$, cmoOverwrite
ELSE
CreateIniKeyValue WinIni$, sect$, "mpg", driver$, cmoNone
ENDIF
'' ----------------------------------------------------------------------
'' WIN.INI, [mci extensions] section: dat=MpegVideo
'' ----------------------------------------------------------------------
keyExists% = DoesIniKeyExist( WinIni$, "mci extensions", "dat" )
IF keyExists% THEN
CreateIniKeyValue WinIni$, sect$, "dat", driver$, cmoOverwrite
ELSE
CreateIniKeyValue WinIni$, sect$, "dat", driver$, cmoNone
ENDIF
'' ----------------------------------------------------------------------
'' WIN.INI, [mci extensions] section: mpv=MpegVideo
'' ----------------------------------------------------------------------
keyExists% = DoesIniKeyExist( WinIni$, "mci extensions", "mpv" )
IF keyExists% THEN
CreateIniKeyValue WinIni$, sect$, "mpv", driver$, cmoOverwrite
ELSE
CreateIniKeyValue WinIni$, sect$, "mpv", driver$, cmoNone
ENDIF
'' ----------------------------------------------------------------------
'' WIN.INI, [mci extensions] section: vbs=MpegVideo
'' ----------------------------------------------------------------------
keyExists% = DoesIniKeyExist( WinIni$, "mci extensions", "vbs" )
IF keyExists% THEN
CreateIniKeyValue WinIni$, sect$, "vbs", driver$, cmoOverwrite
ELSE
CreateIniKeyValue WinIni$, sect$, "vbs", driver$, cmoNone
ENDIF
'' ----------------------------------------------------------------------
'' WIN.INI, [mci extensions] section: vid=MpegVideo
'' ----------------------------------------------------------------------
keyExists% = DoesIniKeyExist( WinIni$, "mci extensions", "vid" )
IF keyExists% THEN
CreateIniKeyValue WinIni$, sect$, "vid", driver$, cmoOverwrite
ELSE
CreateIniKeyValue WinIni$, sect$, "vid", driver$, cmoNone
ENDIF
'' ----------------------------------------------------------------------
'' WIN.INI, add [mpeg1bN] section: mpeg1bNpath=[destination path]
'' ----------------------------------------------------------------------
keyExists% = DoesIniKeyExist( WinIni$, WINSECTION$, WINKEYNAME$ )
IF keyExists% THEN
CreateIniKeyValue WinIni$, WINSECTION$, WINKEYNAME$, DEST$,cmoOverwrite
ELSE
CreateIniKeyValue WinIni$, WINSECTION$, WINKEYNAME$, DEST$,cmoNone
ENDIF
'' ----------------------------------------------------------------------
'' CONTROL.INI, add to the [drivers.desc] section:
'' MPEG1BN.DRV=[MCI]Native-MPEG(TM) Driver
'' ----------------------------------------------------------------------
IF ADDDRIVER = 1 THEN ''Add new MpegVideo driver
IF DRIVERNUM% = 0 THEN
m$ = "[MCI]Native-MPEG(TM) Driver"
ELSE
m$ = "[MCI]Native-MPEG(TM) Driver " + LTRIM$( STR$( DRIVERNUM% ) )
ENDIF
ELSE ''Replace all previous versions
m$ = "[MCI]Native-MPEG(TM) Driver"
ENDIF
keyExists% = DoesIniKeyExist( CtrlIni$, "drivers.desc", DRVR$ )
IF keyExists% THEN
CreateIniKeyValue CtrlIni$,"drivers.desc", DRVR$, m$, cmoOverwrite
ELSE
CreateIniKeyValue CtrlIni$,"drivers.desc", DRVR$, m$, cmoNone
ENDIF
'' ----------------------------------------------------------------------
'' CONTROL.INI, add to the [Userinstallable.drivers] section:
'' MpegVideo=MPEG1BN.DRV
'' ----------------------------------------------------------------------
v$ = "Userinstallable.drivers"
IF ADDDRIVER = 0 THEN ''Replace all previous MpegVideo drivers
FOR i% = 1 TO DRIVERNUM% STEP 1
drv$ = "MpegVideo" + LTRIM$( STR$( i% ) )
RemoveIniKey CtrlIni$, v$, drv$, cmoNone
NEXT
ENDIF
keyExists% = DoesIniKeyExist( CtrlIni$, v$, driver$ )
IF keyExists% THEN
CreateIniKeyValue CtrlIni$, v$, driver$, DRVR$, cmoOverwrite
ELSE
CreateIniKeyValue CtrlIni$, v$, driver$, DRVR$, cmoNone
ENDIF
'$IFDEF DEBUG
CloseLogFile
'$ENDIF ''DEBUG
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
FUNCTION GetDriveInPath( szPath$ ) STATIC AS STRING
IF INSTR( szPath$, ":" ) = 0 THEN '' no drive in path
GetDriveInPath = "C"
ELSE
GetDriveInPath = MID$( szPath$, 1, 1 )
END IF
END FUNCTION
'**==========================================================================
'** Purpose:
'** Checks to see if an MpegVideo driver has been previously installed
'** Arguments:
'** none
'** Returns:
'** 1 if a previous MpegVideo driver has been installed; 0 if not.
'*************************************************************************
FUNCTION DriverExists () STATIC AS INTEGER
keyExists% = DoesIniKeyExist( SystemIni$, "mci", "MpegVideo" )
IF keyExists% = 1 THEN '' check for additional MpegVideo drivers
DRIVERNUM% = DRIVERNUM% + 1
WHILE keyExists% = 1
driver$ = "MpegVideo" + LTRIM$( STR$( DRIVERNUM% ) )
keyExists% = DoesIniKeyExist( SystemIni$, "mci", driver$ )
IF keyExists% = 1 THEN
DRIVERNUM% = DRIVERNUM% + 1
END IF
WEND
DriverExists = 1
ELSE
DriverExists = 0
END IF
END FUNCTION