home *** CD-ROM | disk | FTP | other *** search
Wrap
'************************************************************************** '* Script d'Installation de SAPS 2.11 (voir SPINST.INC) '* Install Script for SAPS 2.11 (see SPINST.INC) '************************************************************************** '$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 EXITQUIT1 = 650 CONST EXITSUCCESS = 700 CONST APPHELP = 900 CONST EXITSUCCESSANDREBOOT = 1000 CONST ASKFORREBOOT = 1100 CONST SHOWINSTALLPATH = 1200 CONST CDSERNB = 1300 CONST CDCOMPNAME = 1400 CONST TOOBIG = 6300 CONST BADPATH = 6400 ''Bitmap ID CONST LOGO = 1 GLOBAL DEST$ ''Default destination directory. GLOBAL WINDIR$ GLOBAL SYSINI$ GLOBAL CTLINI$ GLOBAL SYSOLD$ GLOBAL CTLOLD$ GLOBAL SAPSUSER$ GLOBAL RestoreIniFlag% GLOBAL WINDRIVE$ ''Windows drive letter. ''CustInst list symbol names GLOBAL APPNEEDS$ ''Option list costs per drive GLOBAL EXTRACOSTS$ ''List of extra costs to add per drive GLOBAL DESTSPACEOK$ GLOBAL LANG% GLOBAL TYPESAPS% GLOBAL SITE% ''Install Dialog list symbol names GLOBAL CHECKSTATES$ GLOBAL STATUSTEXT$ GLOBAL DRIVETEXT$ DECLARE SUB InstallFiles DECLARE SUB UpdateIniFiles DECLARE SUB RestoreIniFiles DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING DECLARE SUB RecalcSpaceNeeded DECLARE SUB SetDriveStatus INIT: '$INCLUDE 'spinst.inc' IF LANG = 0 THEN IF TYPESAPS% = 0 THEN SetTitle "Installation de SAPS pour Windows" ELSE SetTitle "Installation du Client SAPS pour Windows" END IF ELSE IF TYPESAPS% = 0 THEN SetTitle "SAPS for Windows Setup Program" ELSE SetTitle "SAPS Client for Windows Setup Program" END IF END IF SetAbout "SpartaCom Asynchronous Port Sharing","Copyright (c) 1993-1994 SpartaCom S.A." CUIDLL$ = "mscuistf.dll" ''Custom user interface dll HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure SetBitmap CUIDLL$, LOGO szInf$ = GetSymbolValue("STF_SRCINFPATH") IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") + "INSTALL.INF" END IF ReadInfFile szInf$ WINDIR$ = GetWindowsDir() WINDRIVE$ = MID$(GetWindowsDir, 1, 1) DEST$=WINDRIVE$ + ":\SAPS" SYSINI$ = "SYSTEM.INI" SYSINIFILE$ = MakePath (WINDIR$,SYSINI$) SYSOLD$ = "SYSOLD.INI" IF TYPESAPS% = 0 THEN CTLINI$ = "CONTROL.INI" CTLOLD$ = "CTLOLD.INI" END IF RestoreIniFlag% = 0 ''Install list symbols for FCustinstDlgProc CHECKSTATES$ = "CheckItemsState" STATUSTEXT$ = "StatusItemsText" DRIVETEXT$ = "DriveStatusText" FOR i% = 1 TO 7 STEP 1 AddListItem DRIVETEXT$, "" NEXT i% ReplaceListItem DRIVETEXT$, 7, DEST$ ''Disk cost list symbols APPNEEDS$ = "AppNeeds" EXTRACOSTS$ = "ExtraCosts" FOR i% = 1 TO 26 STEP 1 AddListItem EXTRACOSTS$, "0" NEXT i% '$IFDEF DEBUG i% = SetSizeCheckMode(scmOnIgnore) '' could use scmOff; def = scmOnFatal WinDrive$ = MID$(GetWindowsDir, 1, 1) IF IsDriveValid(WinDrive$) = 0 THEN i% = DoMsgBox("Le lecteur de Windows ('"+WinDrive$+"') est invalide.", "Diagnostic", MB_TASKMODAL+MB_ICONHAND+MB_OK) GOTO QUIT END IF '$ENDIF ''DEBUG WELCOME: sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN UIPop 1 ELSE GOSUB ASKQUIT GOTO WELCOME END IF SERIALNB: IF SITE% = 0 THEN sz$ = UIStartDlg(CUIDLL$, CDSERNB, "FSerNbDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN UIPop 1 ELSE GOSUB ASKQUIT GOTO SERIALNB END IF END IF COMPNAME: CompName$ = GetIniKeyString(SYSINIFILE$,"Network","ComputerName") IF CompName$ = "" THEN sz$ = UIStartDlg(CUIDLL$, CDCOMPNAME, "FCompNameDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN UIPop 1 ELSE GOSUB ASKQUIT GOTO COMPNAME END IF END IF SEARCHDESTPATH: WinPath$ = GetWindowsDir() SAPSUSER$ = MakePath(WinPath$, "SAPSUSER.INI") IF DoesIniKeyExist(SAPSUSER$, "SPORTMAN", "WorkingDirectory") THEN DIRDEST$ = GetIniKeyString(SAPSUSER$, "SPORTMAN", "WorkingDirectory") IF IsDirWritable(DIRDEST$) THEN DEST$=DIRDEST$ ReplaceListItem DRIVETEXT$, 7, DEST$ END IF END IF SHOWINSTALL: RecalcSpaceNeeded SetDriveStatus sz$ = UIStartDlg(CUIDLL$, SHOWINSTALLPATH, "FCustInstDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN ''Install only if it will fit. IF DESTSPACEOK$ <> "YES" THEN GOSUB TOOBIG GOTO SHOWINSTALL END IF UIPop 1 GOTO INSTALL ELSEIF sz$ = "PATH" THEN GOSUB GETPATH GOTO SHOWINSTALL ELSEIF sz$ = "BACK" THEN UIPop 1 GOTO SERIALNB ELSEIF sz$ = "REACTIVATE" THEN RecalcSpaceNeeded SetDriveStatus GOTO SHOWINSTALL ELSE GOSUB ASKQUIT GOTO SHOWINSTALL END IF GETPATH: SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "EditFocus", "END" GETPATHL1: sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN NEWDEST$ = GetSymbolValue("EditTextOut") IF IsDirWritable(NEWDEST$) = 0 THEN GOSUB BADPATH GOTO GETPATHL1 END IF UIPop 1 DEST$=NEWDEST$ ''Truncate display if too long. IF LEN(DEST$) > 23 THEN ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..." ELSE ReplaceListItem DRIVETEXT$, 7, DEST$ END IF ELSEIF sz$ = "REACTIVATE" THEN RecalcSpaceNeeded SetDriveStatus GOTO GETPATHL1 ELSEIF sz$ = "BACK" THEN UIPop 1 ELSE GOSUB ASKQUIT GOTO GETPATH END IF RETURN INSTALL: InstallFiles QUIT: ON ERROR GOTO ERRQUIT IF ERR = 0 THEN dlg% = EXITSUCCESSANDREBOOT 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% = EXITSUCCESSANDREBOOT THEN IF sz$ = "EXIT" THEN MSRSTRT$ = MakePath(DEST$, "_MSRSTRT.EXE") WHILE ExitWindowsExec(MSRSTRT$, "") = 0 GOSUB ASKREBOOT WEND ELSE IF RestartListEmpty() <> 1 THEN sz$ = UIStartDlg(CUIDLL$, EXITQUIT1, "FQuitDlgProc", 0, "") UIPopAll END IF END IF ELSEIF dlg% <> EXITSUCCESS THEN '' Installation fails. Restore INI files IF RestoreIniFlag% = 1 THEN RestoreIniFiles END IF END IF END ERRQUIT: i% = DoMsgBox("Les fichiers du programme d'installation ont ΘtΘ corrompus, contactez le service de support technique du produit !", "Message du programme d'installation", MB_OK+MB_TASKMODAL+MB_ICONHAND) END TOOBIG: sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN RecalcSpaceNeeded SetDriveStatus GOTO TOOBIG END IF UIPop 1 RETURN 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 ASKREBOOT: sz$ = UIStartDlg(CUIDLL$, ASKFORREBOOT, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" THEN GOSUB ASKQUIT GOTO ASKREBOOT ELSEIF sz$ = "REACTIVATE" THEN GOTO ASKREBOOT ELSE UIPop 1 END IF RETURN '** '** Purpose: '** Builds the copy list and performs all installation operations. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB InstallFiles STATIC WINDIR$ = GetWindowsDir() SYSINI$ = "SYSTEM.INI" SYSINIFILE$ = MakePath(WINDIR$, SYSINI$) WinSysDir$ = GetWindowsSysDir() SrcDir$ = GetSymbolValue("STF_SRCDIR") CreateDir DEST$, cmoNone OpenLogFile MakePath(DEST$, "LOGFILE.OUT"), 0 IF LANG% = 0 THEN WriteToLogFile "Installation de SAPS" WriteToLogFile "--------------------" WriteToLogFile "Répertoire d'installation : '" + DEST$ + "'" ELSE WriteToLogFile "SAPS Installation" WriteToLogFile "-----------------" WriteToLogFile "Destination Path : '" + DEST$ + "'" END IF WriteToLogFile "" WriteToLogFile "" ClearCopyList AddSectionFilesToCopyList "Files", SrcDir$, DEST$ AddSectionFilesToCopyList "System_Files", SrcDir$, WinSysDir$ SetRestartDir DEST$ CopyFilesInCopyList COMMDRV$ = GetIniKeyString(SYSINIFILE$, "BOOT", "comm.drv") IF UCASE$(COMMDRV$) <> "SPCOMM.DRV" THEN IF UCASE$(COMMDRV$) = "COMM.DRV" THEN OLDCOMMDRV$ = MakePath(WinSysDir$, COMMDRV$) NEWCOMMDRV$ = MakePath(WinSysDir$, "mscomm.drv") CopyFile OLDCOMMDRV$, NEWCOMMDRV$, cmoOverwrite, 0 CreateIniKeyValue MakePath(WINDIR$, "SAPS.INI"), "SAPS", "comm.drv", "mscomm.drv", cmoOverwrite ELSE CreateIniKeyValue MakePath(WINDIR$, "SAPS.INI"), "SAPS", "comm.drv", COMMDRV$, cmoOverwrite END IF END IF IF TYPESAPS% = 0 THEN SPSRV$ = MakePath(WINDIR$, "SPSRV.INI") CreateIniKeyValue SPSRV$, "SERVER", "WorkingDirectory", DEST$, cmoOverwrite CreateIniKeyValue SPSRV$, "SERVER", "Visible", "1", cmoOverwrite END IF CreateIniKeyValue SAPSUSER$, "SPORTMAN", "WorkingDirectory", DEST$, cmoOverwrite CreateIniKeyValue SAPSUSER$, "SPORTMAN", "SW", "1", cmoOverwrite CreateIniKeyValue SAPSUSER$, "SPORTMAN", "X", "50", cmoOverwrite CreateIniKeyValue SAPSUSER$, "SPORTMAN", "Y", "100", cmoOverwrite CreateIniKeyValue SAPSUSER$, "SPORTMAN", "CX", "500", cmoOverwrite CreateIniKeyValue SAPSUSER$, "SPORTMAN", "CY", "250", cmoOverwrite IF TYPESAPS% = 0 THEN CreateIniKeyValue SAPSUSER$, "SPORTMAN", "Server", "1", cmoOverwrite ENDIF CursorSave% = ShowWaitCursor() UpdateIniFiles CreateProgmanGroup "SAPS", "" , cmoNone ShowProgmanGroup "SAPS", 1 , cmoNone IF LANG% = 0 THEN CreateProgmanItem "SAPS", "Gestionnaire de ports asynchrones", MakePath(DEST$, "SPORTMAN.EXE"), "", cmoOverwrite CreateProgmanItem "SAPS", "Aide du gestionnaire", MakePath(WinDir$, "WINHELP.EXE "+MakePath(DEST$, "SPORTMAN.HLP")), "", cmoOverwrite IF TYPESAPS% = 0 THEN CreateProgmanItem "SAPS", "Serveur SAPS", MakePath(DEST$, "SPSRV.EXE"), "", cmoOverwrite CreateProgmanItem "SAPS", "Aide du serveur", MakePath(WinDir$, "WINHELP.EXE "+MakePath(DEST$, "SPSRV.HLP")), "", cmoOverwrite END IF CreateProgmanItem "SAPS", "Lisez moi", MakePath(WinDir$, "WRITE.EXE "+MakePath(DEST$, "LISEZMOI.WRI")), "", cmoOverwrite ELSE CreateProgmanItem "SAPS", "Asynchronous Port Manager", MakePath(DEST$, "SPORTMAN.EXE"),"", cmoOverwrite CreateProgmanItem "SAPS", "SAPS Help", MakePath(WinDir$, "WINHELP.EXE "+MakePath(DEST$, "SPORTMAN.HLP")), "", cmoOverwrite IF TYPESAPS% = 0 THEN CreateProgmanItem "SAPS", "SAPS Server", MakePath(DEST$, "SPSRV.EXE"), "", cmoOverwrite CreateProgmanItem "SAPS", "Server Help", MakePath(WinDir$, "WINHELP.EXE "+MakePath(DEST$, "SPSRV.HLP")), "", cmoOverwrite CreateProgmanItem "SAPS", "SpartaCom Upgrades", MakePath(WinDir$, "WRITE.EXE "+MakePath(DEST$, "UPGRADES.WRI")), "", cmoOverwrite END IF CreateProgmanItem "SAPS", "Read me", MakePath(WinDir$, "WRITE.EXE "+MakePath(DEST$, "README.WRI")), "", cmoOverwrite ENDIF RestoreCursor CursorSave% CloseLogFile END SUB '** '** Purpose: '** Save .INI files to .OLD and Update .INI files '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB UpdateIniFiles STATIC WINDIR$ = GetWindowsDir() SYSINI$ = "SYSTEM.INI" SYSINIFILE$ = MakePath(WINDIR$, SYSINI$) WinSysDir$ = GetWindowsSysDir() CopyFile SYSINIFILE$, MakePath(DEST$, SYSOLD$), cmoOverwrite+cmoReadOnly, 0 CreateIniKeyValue SYSINIFILE$, "boot", "comm.drv", "spcomm.drv", cmoOverwrite IF TYPESAPS% = 0 THEN CTLINIFILE$ = MakePath(WINDIR$, CTLINI$) CopyFile CTLINIFILE$, MakePath(DEST$, CTLOLD$), cmoOverwrite+cmoReadOnly, 0 CreateIniKeyValue CTLINIFILE$, "mmcpl", "SAPSServer", MakePath(DEST$, "CPLSAPS.DLL"), cmoOverwrite END IF NETHEAP$ = GetIniKeyString(SYSINIFILE$, "386Enh", "NetHeapSize") IF VAL(NETHEAP$) < 28 THEN CreateIniKeyValue SYSINIFILE$, "386Enh", "NetHeapSize", "28", cmoOverwrite END IF IF DoesIniSectionExist(SYSINIFILE$, "Standard") THEN NETHEAP$ = GetIniKeyString(SYSINIFILE$, "Standard", "NetHeapSize") IF VAL(NETHEAP$) < 28 THEN CreateIniKeyValue SYSINIFILE$, "Standard", "NetHeapSize", "28", cmoOverwrite END IF END IF RestoreIniFlag% = 1 END SUB '** '** Purpose: '** Restore .INI files to previous contents '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB RestoreIniFiles STATIC WinSysDir$ = GetWindowsSysDir() CopyFile MakePath(DEST$, SYSOLD$), MakePath(WINDIR$, SYSINI$), cmoOverwrite, 0 RemoveFile MakePath(DEST$, SYSOLD$), cmoForce IF TYPESAPS% = 0 THEN CopyFile MakePath(DEST$, CTLOLD$), MakePath(WINDIR$, CTLINI$), cmoOverwrite, 0 RemoveFile MakePath(DEST$, CTLOLD$), cmoForce END IF RestoreIniFlag% = 0 END SUB '** '** Purpose: '** Recalculates disk space for the given option files and sets '** the status info symbol "StatusItemsText". '** Arguments: '** none '** Returns: '** none. '************************************************************************* SUB RecalcSpaceNeeded STATIC CursorSave% = ShowWaitCursor() WinSysDir$ = GetWindowsSysDir() SrcDir$ = GetSymbolValue("STF_SRCDIR") ClearCopyList AddSectionFilesToCopyList "Files", SrcDir$, DEST$ AddSectionFilesToCopyList "System_Files", SrcDir$, WinSysDir$ dstdrive$ = MID$(DEST$, 1, 1) wdrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1 ndrive% = ASC(ucase$(dstdrive$)) - ASC("A") + 1 cost& = GetSizeOfFile(MakePath(WINDIR$, SYSINI$)) IF TYPESAPS% = 0 THEN cost& = cost&+GetSizeOfFile(MakePath(WINDIR$, CTLINI$)) END IF IF dstdrive$ = WINDRIVE$ THEN ''Add all extra cost to destination drive ReplaceListItem EXTRACOSTS$, ndrive%, STR$(cost&+11264) ELSE ''Add extra cost to Windows drive for ini/progman, etc. ReplaceListItem EXTRACOSTS$, ndrive%, STR$(cost&) ReplaceListItem EXTRACOSTS$, wdrive%, "11264" END IF StillNeed& = GetCopyListCost(EXTRACOSTS$, APPNEEDS$, "") IF StillNeed& > 0 THEN DESTSPACEOK$ = "NO" ELSE DESTSPACEOK$ = "YES" END IF RestoreCursor CursorSave% 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 '** '** Purpose: '** Sets drive status info according to latest disk space calcs. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB SetDriveStatus STATIC drive$ = MID$(DEST$, 1, 1) ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1 cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) free& = GetFreeSpaceForDrive(drive$) ReplaceListItem DRIVETEXT$, 1, drive$ + ":" ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " Ko" ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " Ko" IF drive$ = WINDRIVE$ THEN ReplaceListItem DRIVETEXT$, 4, "" ReplaceListItem DRIVETEXT$, 5, "" ReplaceListItem DRIVETEXT$, 6, "" ELSE ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1 cost& = VAL(GetListItem(APPNEEDS$, 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) + " Ko" ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " Ko" END IF END IF END SUB