'************************************************************************** '* MSSetup GeoVu (II-3) '************************************************************************** '$DEFINE DEBUG ''Define for script development/debugging '$INCLUDE 'setupapi.inc' '$INCLUDE 'msdetect.inc' ''Dialog ID's CONST ASKQUIT = 200 CONST DESTPATH = 300 CONST EXITFAILURE = 400 CONST EXITQUIT = 600 CONST EXITSUCCESS = 700 CONST OPTIONS = 800 CONST APPHELP = 900 CONST CUSTINST = 6200 CONST TOOBIG = 6300 CONST BADPATH = 6400 CONST MB_YESNO = 4 CONST IDNO = 7 ''Bitmap ID CONST LOGO = 1 ''File Types CONST APPFILES = 1 CONST OPTFILES1 = 2 CONST OPTFILES2 = 3 GLOBAL MEN_NAME$ GLOBAL G2_DEST$ GLOBAL DATE_STR$ GLOBAL DEST$ ''Default destination directory. GLOBAL INI_DEST$ ''Destination directory for the application .ini file. GLOBAL WINDRIVE$ ''Windows drive letter. GLOBAL OPT1OPT$ ''Option selection from OptFiles1 option dialog. GLOBAL OPT2OPT$ ''Option selection from OptFiles2 option dialog. ''CustInst list symbol names GLOBAL APPNEEDS$ ''Option list costs per drive GLOBAL OPT1NEEDS$ GLOBAL OPT2NEEDS$ GLOBAL EXTRACOSTS$ ''List of extra costs to add per drive GLOBAL BIGLIST$ ''List of option files cost calc results (boolean) ''Dialog list symbol names GLOBAL CHECKSTATES$ GLOBAL STATUSTEXT$ GLOBAL DRIVETEXT$ DECLARE SUB AddOptFilesToCopyList (ftype%) DECLARE SUB RecalcOptFiles (ftype%) DECLARE SUB RecalcPath DECLARE SUB SetDriveStatus DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING INIT: CUIDLL$ = "mscuistf.dll" ''custom user interface dll HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure SetBitmap CUIDLL$, LOGO SetTitle "GeoVu Installation" szInf$ = GetSymbolValue("STF_SRCINFPATH") IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") + "GVTHREE.INF" END IF ReadInfFile szInf$ WINDRIVE$ = MID$(GetWindowsDir, 1, 1) INI_DEST$ = MakePath(GetWindowsDir, "freeform.ini") DEST$ = WINDRIVE$ + ":\GEOVU" ''CustInst list symbols CHECKSTATES$ = "CheckItemsState" STATUSTEXT$ = "StatusItemsText" DRIVETEXT$ = "DriveStatusText" FOR i% = 1 TO 3 STEP 1 AddListItem CHECKSTATES$, "ON" NEXT i% FOR i% = 1 TO 3 STEP 1 AddListItem STATUSTEXT$, "" NEXT i% FOR i% = 1 TO 7 STEP 1 AddListItem DRIVETEXT$, "" NEXT i% ReplaceListItem DRIVETEXT$, 7, DEST$ ''Disk cost list symbols APPNEEDS$ = "AppNeeds" OPT1NEEDS$ = "Opt1Needs" OPT2NEEDS$ = "Opt2Needs" EXTRACOSTS$ = "ExtraCosts" BIGLIST$ = "BigList" FOR i% = 1 TO 3 STEP 1 AddListItem BIGLIST$, "" NEXT i% FOR i% = 1 TO 26 STEP 1 AddListItem EXTRACOSTS$, "0" NEXT i% ''File Option Variables OPT1OPT$ = "1" OPT2OPT$ = "1" RecalcPath SetDriveStatus '$IFDEF DEBUG i% = SetSizeCheckMode(scmOnIgnore) '' could use scmOff; def = scmOnFatal '$ENDIF ''DEBUG CUSTINST: sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN ''Install only if it will fit. FOR i% = 1 TO 3 STEP 1 IF GetListItem(BIGLIST$, i%) <> "" THEN GOSUB TOOBIG GOTO CUSTINST END IF NEXT i% UIPop 1 GOTO INSTALL ELSEIF sz$ = "PATH" THEN GOTO GETPATH ELSEIF sz$ = "CHK1" THEN RecalcOptFiles APPFILES SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK2" THEN RecalcOptFiles OPTFILES1 SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK3" THEN RecalcOptFiles OPTFILES2 SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO CUSTINST ELSE GOSUB ASKQUIT GOTO CUSTINST END IF INSTALL: ClearCopyList AddOptFilesToCopyList APPFILES AddOptFilesToCopyList OPTFILES1 AddOptFilesToCopyList OPTFILES2 CreateDir DEST$, cmoNone szSrc$ = GetSymbolValue("STF_SRCDIR") MEN_NAME$ = MakePath(szSrc$, "sampler.men") i% = DoesFileExist(MEN_NAME$, femExists) IF i% = 1 THEN MEN_DEST$ = MakePath(DEST$, "sampler.men") CopyFile MEN_NAME$, MEN_DEST$, cmoOverwrite, 0 END IF MEN_NAME$ = MakePath(szSrc$, "slide1.men") i% = DoesFileExist(MEN_NAME$, femExists) IF i% = 1 THEN MEN_DEST$ = MakePath(DEST$, "slide1.men") CopyFile MEN_NAME$, MEN_DEST$, cmoOverwrite, 0 END IF MEN_NAME$ = MakePath(szSrc$, "slide2.men") i% = DoesFileExist(MEN_NAME$, femExists) IF i% = 1 THEN MEN_DEST$ = MakePath(DEST$, "slide2.men") CopyFile MEN_NAME$, MEN_DEST$, cmoOverwrite, 0 END IF MEN_NAME$ = MakePath(szSrc$, "ged_gv94.men") i% = DoesFileExist(MEN_NAME$, femExists) IF i% = 1 THEN MEN_DEST$ = MakePath(DEST$, "ged_gv94.men") CopyFile MEN_NAME$, MEN_DEST$, cmoOverwrite, 0 END IF MEN_NAME$ = MakePath(szSrc$, "ged_b_93.men") i% = DoesFileExist(MEN_NAME$, femExists) IF i% = 1 THEN MEN_DEST$ = MakePath(DEST$, "ged_b_93.men") CopyFile MEN_NAME$, MEN_DEST$, cmoOverwrite, 0 END IF MEN_NAME$ = MakePath(szSrc$, "ged_a_92.men") i% = DoesFileExist(MEN_NAME$, femExists) IF i% = 1 THEN MEN_DEST$ = MakePath(DEST$, "ged_a_92.men") CopyFile MEN_NAME$, MEN_DEST$, cmoOverwrite, 0 END IF MEN_NAME$ = MakePath(szSrc$, "chesapea.men") i% = DoesFileExist(MEN_NAME$, femExists) IF i% = 1 THEN MEN_DEST$ = MakePath(DEST$, "chesapea.men") CopyFile MEN_NAME$, MEN_DEST$, cmoOverwrite, 0 END IF MEN_NAME$ = MakePath(szSrc$, "grelief.men") i% = DoesFileExist(MEN_NAME$, femExists) IF i% = 1 THEN MEN_DEST$ = MakePath(DEST$, "grelief.men") CopyFile MEN_NAME$, MEN_DEST$, cmoOverwrite, 0 END IF MEN_NAME$ = MakePath(szSrc$, "gravcd.men") i% = DoesFileExist(MEN_NAME$, femExists) IF i% = 1 THEN MEN_DEST$ = MakePath(DEST$, "gravcd.men") CopyFile MEN_NAME$, MEN_DEST$, cmoOverwrite, 0 END IF MEN_NAME$ = MakePath(szSrc$, "grav_94.men") i% = DoesFileExist(MEN_NAME$, femExists) IF i% = 1 THEN MEN_DEST$ = MakePath(DEST$, "grav_94.men") CopyFile MEN_NAME$, MEN_DEST$, cmoOverwrite, 0 END IF MEN_NAME$ = MakePath(szSrc$, "terr_94.men") i% = DoesFileExist(MEN_NAME$, femExists) IF i% = 1 THEN MEN_DEST$ = MakePath(DEST$, "terr_94.men") CopyFile MEN_NAME$, MEN_DEST$, cmoOverwrite, 0 END IF MEN_NAME$ = MakePath(szSrc$, "gallo_94.men") i% = DoesFileExist(MEN_NAME$, femExists) IF i% = 1 THEN MEN_DEST$ = MakePath(DEST$, "gallo_94.men") CopyFile MEN_NAME$, MEN_DEST$, cmoOverwrite, 0 END IF MEN_NAME$ = MakePath(szSrc$, "spitak.men") i% = DoesFileExist(MEN_NAME$, femExists) IF i% = 1 THEN MEN_DEST$ = MakePath(DEST$, "spitak.men") CopyFile MEN_NAME$, MEN_DEST$, cmoOverwrite, 0 END IF MEN_NAME$ = MakePath(szSrc$, "minnhelp.men") i% = DoesFileExist(MEN_NAME$, femExists) IF i% = 1 THEN MEN_DEST$ = MakePath(DEST$, "minnhelp.men") CopyFile MEN_NAME$, MEN_DEST$, cmoOverwrite, 0 END IF G2_DEST$ = MakePath(DEST$, "g2.exe") DATE_STR$ = GetDateOfFile(G2_DEST$) IF DATE_STR$ = "1980-01-01-00-00-00" THEN ELSE i% = DoMsgBox("GeoVu file ('"+G2_DEST$+"') found: GeoVu may already be installed. Continue?", "Continue to install?", MB_YESNO+MB_TASKMODAL) IF i% = IDNO THEN END END IF END IF CopyFilesInCopyList IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN CreateProgmanGroup "GEOVU","", cmoNone ShowProgmanGroup "GEOVU", 1, cmoNone CreateProgmanItem "GEOVU", "Run GeoVu", DEST$ + "\g2.exe", "", cmoOverwrite CreateIniKeyValue INI_DEST$, "GeoVu", "GEOVUDIR", DEST$, cmoOverwrite 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: sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO QUITL1 END IF UIPop 1 END ERRQUIT: i% = DoMsgBox("Setup sources were corrupted!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND) END GETPATH: SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "EditFocus", "END" GETPATHL1: sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN olddest$ = DEST$ DEST$ = GetSymbolValue("EditTextOut") ''Validate new path. IF IsDirWritable(DEST$) = 0 THEN GOSUB BADPATH GOTO GETPATHL1 END IF UIPop 1 ''Truncate display if too long. IF LEN(DEST$) > 23 THEN ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..." ELSE ReplaceListItem DRIVETEXT$, 7, DEST$ END IF ''Recalc if path changed. IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN RecalcPath SetDriveStatus END IF olddest$ = "" GOTO CUSTINST ELSEIF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO GETPATHL1 ELSEIF sz$ = "EXIT" THEN GOSUB ASKQUIT GOTO GETPATHL1 ELSE UIPop 1 GOTO CUSTINST END IF TOOBIG: sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO TOOBIG END IF UIPop 1 RETURN BADPATH: sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus 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 '** '** Purpose: '** Adds the specified option files to the copy list. '** Arguments: '** ftype% - type of files to add, one of the following: '** APPFILES, OPTFILES1, OPTFILES2 '** Returns: '** none. '************************************************************************* SUB AddOptFilesToCopyList (ftype%) STATIC IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN SrcDir$ = GetSymbolValue("STF_SRCDIR") IF ftype% = APPFILES THEN AddSectionFilesToCopyList "appfiles", SrcDir$, DEST$ ELSEIF ftype% = OPTFILES1 THEN AddSectionFilesToCopyList "optfiles1", SrcDir$, DEST$ ELSEIF ftype% = OPTFILES2 THEN AddSectionFilesToCopyList "optfiles2", SrcDir$, DEST$ END IF SrcDir$ = "" END IF END SUB '** '** Purpose: '** Recalculates disk space for the given option files and sets '** the status info symbol "StatusItemsText". '** Arguments: '** ftype% - type of files to add, one of the following: '** APPFILES, OPTFILES1, OPTFILES2 '** Returns: '** none. '************************************************************************* SUB RecalcOptFiles (ftype%) STATIC CursorSave% = ShowWaitCursor() ClearCopyList AddOptFilesToCopyList ftype% fExtra% = 0 IF ftype% = APPFILES THEN ListSym$ = APPNEEDS$ IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN ''Add extra cost to Windows drive for ini/progman, etc. ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1 ReplaceListItem EXTRACOSTS$, ndrive%, "10240" fExtra% = 1 END IF ELSEIF ftype% = OPTFILES1 THEN ListSym$ = OPT1NEEDS$ ELSEIF ftype% = OPTFILES2 THEN ListSym$ = OPT2NEEDS$ END IF StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "") cost& = 0 FOR i% = 1 TO 26 STEP 1 cost& = cost& + VAL(GetListItem(ListSym$, i%)) NEXT i% ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K" IF StillNeed& > 0 THEN ReplaceListItem BIGLIST$, ftype%, "YES" ELSE ReplaceListItem BIGLIST$, ftype%, "" END IF IF fExtra% THEN ReplaceListItem EXTRACOSTS$, ndrive%, "0" END IF RestoreCursor CursorSave% ListSym$ = "" END SUB '** '** Purpose: '** Recalculates disk space and sets option status info according '** to the current destination path. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB RecalcPath STATIC CursorSave% = ShowWaitCursor() RecalcOptFiles APPFILES RecalcOptFiles OPTFILES1 RecalcOptFiles OPTFILES2 RestoreCursor CursorSave% END SUB '** '** 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%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%)) + VAL(GetListItem(OPT2NEEDS$, ndrive%)) free& = GetFreeSpaceForDrive(drive$) ReplaceListItem DRIVETEXT$, 1, drive$ + ":" ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K" ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K" 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%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%)) + VAL(GetListItem(OPT2NEEDS$, 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) + " K" ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K" END IF END IF 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