home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1994-02-02 | 46.6 KB | 1,534 lines
'************************************************************************** '* FoxPro for Windows Setup '************************************************************************** '$INCLUDE 'setup.inc' '************************************************************************** '* Localize these strings '************************************************************************** CONST C_COPYRIGHT$ = "(c) 1985 - 1993 Microsoft Corporation" CONST C_NAME$ = "Microsoft FoxPro for Windows" ''Product name used in setup copyright. CONST DESCRIP$ = "FoxPro for Windows" ''Program Manager item name. CONST LASTRESORT$ = "Setup was damaged. Please call Microsoft product support." ''Worst case error message. CONST LASTTITLE$ = "Setup Error" ''Title of worst case error box. CONST NOGROUP$ = "- NONE -" ''Group name which means don't create a group. CONST QADES$ = "FoxPro Q&A" ''PM Description. CONST READMEDES$ = "FoxPro Readme" ''PM Description. CONST TITLE$ = "Microsoft FoxPro for Windows Setup" ''Main window title. '************************************************************************** DECLARE FUNCTION GetProgMgrGrps LIB "mscuistf.dll" AS INTEGER DECLARE FUNCTION QuietConfigUpdate LIB "mscuistf.dll" AS INTEGER DECLARE FUNCTION CanFindConfigSys LIB "mscuistf.dll" AS INTEGER DECLARE FUNCTION CalcListSize LIB "mscuistf.dll" AS LONG DECLARE FUNCTION WindowWidth LIB "mscuistf.dll" (iWind%) AS INTEGER DECLARE FUNCTION WindowHeight LIB "mscuistf.dll" (iWind%) AS INTEGER DECLARE FUNCTION AddLabelRecords LIB "mscuistf.dll" (foxuser$, label$) AS INTEGER DECLARE FUNCTION UpdateConfigFPW LIB "mscuistf.dll" (dest$, foxprowcfg$) AS INTEGER DECLARE FUNCTION FPWSetDate LIB "mscuistf.dll" (f$) AS INTEGER DECLARE FUNCTION FPWSetCurrencySym LIB "mscuistf.dll" (f$) AS INTEGER DECLARE FUNCTION FPWSetCurrencyRight LIB "mscuistf.dll" (i%) AS INTEGER DECLARE FUNCTION FPWSetKeyComp LIB "mscuistf.dll" (f$) AS INTEGER DECLARE FUNCTION FPWSetCodepage LIB "mscuistf.dll" (f$) AS INTEGER DECLARE FUNCTION FPWSetCollate LIB "mscuistf.dll" (f$) AS INTEGER DECLARE FUNCTION FPWSetHours24 LIB "mscuistf.dll" (i%) AS INTEGER ''Local functions and procedures. DECLARE SUB AddLabels DECLARE SUB AddToPM DECLARE SUB CheckDiskSpace DECLARE SUB ConfirmQuit DECLARE SUB DoRestart DECLARE SUB Install DECLARE SUB Get20Compatibility DECLARE SUB GetAdminPathInfo DECLARE SUB GetPathInfo DECLARE SUB GetPathGrpInfo DECLARE SUB GetUserAll DECLARE SUB GetUserInfo DECLARE SUB SetSectionSize DECLARE SUB UpdateConfig DECLARE SUB UpdateFPConfig DECLARE SUB UpdateINI DECLARE SUB WarnBadName DECLARE SUB WarnBadOrg DECLARE FUNCTION CheckNoDosProd () AS STRING DECLARE FUNCTION CheckNoWinProd () AS STRING DECLARE FUNCTION ConfirmNameOrg () AS STRING DECLARE FUNCTION EnoughSpace () AS STRING DECLARE FUNCTION GetInstallOptions () AS STRING DECLARE FUNCTION GetInstallType () AS STRING DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING DECLARE FUNCTION SetInstall (szType$) AS STRING DECLARE FUNCTION SectionSize (szSection$) AS STRING DECLARE FUNCTION WarnBadPath (dlg%) AS STRING ''Dialog ID's CONST ASKQUIT = 200 ''Is the user certain they want to quit? CONST BADINI = 4500 ''We couldn't read setup.ini. CONST BADMODE = 2100 ''We aren't in Enhanced mode. CONST BADNAME = 7700 ''The user has to enter a name. CONST BADPATH = 6400 ''The target directory can't be written to. CONST BADPATHTOOLS = 4400 ''The MSDEST$ directory is bad. CONST BILLBOARD = 20000 ''Used to hold billboard bitmaps. CONST CANTFIND = 3900 ''Can't find config.sys. CONST CANTQUIT = 2300 ''Couldn't exit Windows. CONST CANTUPDATE = 3500 ''Coulsn't update config.sys. CONST COMPATIBILITY = 1600 ''Install aoptional config.fpw, etc. CONST CONFIRMINFO = 7300 ''Is the name and organization ok? CONST CUSTOMINST = 1100 ''Get type of installation. CONST DESTPATHADMIN = 4300 ''Get the FoxPro and tools directories. CONST DESTPATH = 300 ''Get target directory without a group. CONST DESTPATHGROUP = 1000 ''Get target directory and group. CONST DICTIONARY = 4100 ''Ask the user what dictionary to use. CONST DISKFULL = 1700 ''Not enough disk space is available. CONST DISKWINFULL = 3100 ''Not enough space on Windows drive. CONST DOSPRODUCT = 1900 ''A DOS FoxPro is in the target directory. CONST DRIVEMAP = 4600 ''Add-ons are mapped to a different drive than FP. CONST EDITCONFIG = 2700 ''Review changes to config.sys CONST EDITMODE = 3800 ''Select method of updating config.sys CONST EDITOK = 3700 ''We updated config.sys CONST EXITADMINOK = 2500 ''We finished ok from admin type install. CONST EXITFAILURE = 400 ''We are quiting due to an error. CONST EXITNOICON = 2800 ''We installed, but don't have an icon. CONST EXITSUCCESS = 700 ''We have successfully finished. CONST EXITQUIT = 600 ''We were forced to quit by the user. CONST GETNAMEORG = 1300 ''Get the user's name and organization. CONST NOT386 = 1800 ''Machine is less than a 386SX. CONST OPTIONS = 800 ''Basic type of installation. CONST OPTSERVER = 2900 ''Type of installation including server. CONST OPTCLIENT = 3000 ''Type of installation including workstation. CONST REINSTALL = 2000 ''Copy disincentive message. CONST RESTARTWIN = 2200 ''Warn before restarting windows. CONST WAITINI = 2400 ''Wait while updating INI files. CONST WAITSPACE = 1500 ''Wait while getting free disk space. CONST WINPRODUCT = 4200 ''Overwrite another copy of the executable? CONST REQFILES = 1 CONST WINHELP = 2 CONST FPHELP = 3 CONST TUTORIAL = 4 CONST FOXAPP = 6 CONST EXAMPLES = 5 CONST FOXDOC = 7 CONST MSGRAPH = 8 CONST SPELL = 9 CONST SYSFILES = 10 CONST SETUP = 11 CONST WINFILES = 12 CONST KEYCOMPDOS = 1 CONST KEYCOMPWIN = 2 CONST SPELLUS = 3 CONST SPELLUK = 4 CONST CONFIG$ = "config.fpw" ''Name of config file we will write CONST DBFBAK$ = "foxuser.dbk" ''Name used to backup foxuser.dbf. CONST DIRINI$ = "setup\paths.ini" ''Records tools location CONST FPTBAK$ = "foxuser.fpk" ''Name used to backup foxuser.fpt. CONST CUIDLL$ = "mscuistf.dll" ''The .DLL containing our dialog routines. CONST INIFILE$ = "setup.ini" ''Name of the .INI file to brand. CONST LOGO = 1 ''Logo Bitmap ID. CONST MINFILES% = 40 CONST QA$ = "psskb.txt" ''Name of QA file. CONST README$ = "readme.txt" ''Name of README file. CONST SAVECONFIG$ = "config.old" ''What to call existing config if backing up GLOBAL BRAND% ''Used to warn us that we didn't brand product during copy. GLOBAL DEST$ ''Default destination directory. GLOBAL fEXE% ''Installing the executable? GLOBAL fGRAPH% ''Flag indicating if MS Graph is going to be installed. GLOBAL FLAGS% ''Flags passed to UpdateConfigFPW(). GLOBAL fSPELL% ''Flag indicating if the spell checker is to be installed. GLOBAL fWIN30% ''Flag indicating if we are running under 3.0 GLOBAL GROUP$ ''Default destination group. GLOBAL MSDEST$ ''MS Tools destination directory. GLOBAL SRCDIR$ ''Location of install files. GLOBAL SIZESSET% ''Have we recorded the section sizes yet? GLOBAL WINDIR$ ''Windows directory. GLOBAL WINSYSDIR$ ''Windows system directory. INIT: ON ERROR GOTO QUIT BRAND% = 0 DEST$ = "c:\fpw26" DLG% = 0 fEXE% = 0 fWIN30% = 0 fGRAPH% = 0 fSPELL% = 0 GROUP$ = "FoxPro for Windows" MSDEST$ = MakePath(GetWindowsDir(), "msapps") PMGROUPS% = 0 SIZESET% = 0 SRCDIR$ = GetSymbolValue("STF_SRCDIR") WINDIR$ = GetWindowsDir() WINSYSDIR$ = GetWindowsSysDir() x% = SetTimeValue(2,50,0) FOR x% = 1 TO WINFILES STEP 1 IF x% <> SETUP THEN AddListItem "CheckItems", "ON" ELSE AddListItem "CheckItems", "OFF" ENDIF AddListItem "CheckItemsSize", "0" AddListItem "WinDriveSize", "0" NEXT SetBitmap CUIDLL$, LOGO SetTitle TITLE$ SetAbout C_NAME$, C_COPYRIGHT$ SetSymbolValue "NoGroup", NOGROUP$ SetSymbolValue "FoxProGroup", GROUP$ szInf$ = GetSymbolValue("STF_SRCINFPATH") IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") + "FOXPROW.INF" END IF ReadInfFile szInf$ '' '' Make sure we have at least a 386SX. '' IF GetProcessorType() < 3 THEN PROCESSOR: sz$ = UIStartDlg(CUIDLL$, NOT386, "FInfo0DlgProc", 0, "") IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN ConfirmQuit GOTO PROCESSOR END IF UIPop 1 END END IF '' '' Warn the user if we are not in Enhanced mode. '' IF GetWindowsMode() < 2 THEN ENHANCED: sz$ = UIStartDlg(CUIDLL$, BADMODE, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN ConfirmQuit GOTO ENHANCED ELSE UIPop 1 END IF END IF '' '' For our own use, see if we are running on a version later than 3.0. If '' so, try and get a list of the groups. '' IF GetWindowsMajorVersion() = 3 AND GetWindowsMinorVersion() = 0 THEN fWIN30% = 1 ELSE PMGROUPS% = GetProgMgrGrps() END IF '' '' Have the user specify their name and organization. '' x% = InitSystemRead(1, INIFILE$, 0) '' '' We don't want the user to do a workstation installation if a sever '' installation hasn't been done. This check tries to catch the most '' blatant transgressions by making sure that the executable exists in '' the source directory. '' IF GetSymbolValue("STF_MODE") = "NETWORK" THEN IF DoesFileExist(MakePath(SRCDIR$,"foxprow.exe"), femExists) = 0 THEN SetSymbolValue "STF_MODE", "NORM" END IF END IF sz$ = GetSymbolValue("STF_CD_TYPE") IF sz$ = "NEW" OR sz$ = "WKST" OR sz$ = "USEDNAME" OR sz$ = "ORGUSED" THEN GetUserInfo ELSE sz$ = UIStartDlg(CUIDLL$, BADINI, "FInfo0DlgProc", 0, "") GOTO QUIT END IF '' '' Have the user specify where to put the product. (Including the group if '' we can get the info.) '' GETTARGETINFO: SetSymbolValue "FreeSpace", "" SetSymbolValue "FreeSpaceWin", "" IF GetSymbolValue("STF_MODE") = "ADMIN" THEN GetAdminPathInfo ELSEIF fWIN30% = 1 OR GetListLength("ListItemsIn") = 0 THEN GetPathInfo ELSE GetPathGrpInfo END IF CheckDiskSpace '' '' Get the type of installation we are doing. '' IF GetSymbolValue("STF_MODE") = "NETWORK" THEN y$ = SetInstall("WKST") ELSEIF GetSymbolValue("STF_MODE") = "ADMIN" THEN y$ = SetInstall("ADMIN") ELSE IF GetInstallType() = "CUSTOM" THEN CUSTOMINSTALLATION: IF GetInstallOptions() = "BACK" THEN GOTO GETTARGETINFO END IF END IF END IF IF EnoughSpace() = "BACK" THEN GOTO CUSTOMINSTALLATION END IF '' '' See if the user wants DOS or Windows style keys. '' Get20Compatibility '' '' Try to gaurantee that FILES are at least a minimum value. '' UpdateConfig Install IF ERR = STFQUIT THEN DLG% = EXITQUIT ELSE IF GetSymbolValue("STF_MODE") = "ADMIN" THEN DLG% = EXITADMINOK ELSE DLG% = EXITSUCCESS END IF END IF GOTO QUITL1 QUIT: UIPopAll IF ERR = STFPROGMAN THEN DLG% = EXITNOICON ELSEIF ERR = STFQUIT THEN DLG% = EXITQUIT ELSE DLG% = EXITFAILURE END IF QUITL1: ON ERROR GOTO TOAST sz$ = UIStartDlg(CUIDLL$, DLG%, "FQuitDlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO QUITL1 END IF UIPop ALL IF BRAND%=1 AND DoesFileExist(MakePath(DEST$,"foxprow.exe"), femExists) = 1 THEN CloseSystem "reqfiles", "prodfile", DEST$, 456, 123 END IF END TOAST: UIPopAll i% = DoMsgBox(LASTRESORT$, LASTTITLE$, MB_OK+MB_TASKMODAL+MB_ICONHAND) END '** '** Purpose: '** Copies the files in the copy list and adds FoxPro to the target '** group if one was psecified. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB Install STATIC IF GetSymbolValue("STF_CD_TYPE") = "NEW" THEN IF InitSystemWrite( 1, INIFILE$, 1 ) = 0 THEN sz$ = UIStartDlg(CUIDLL$, BADINI, "FInfo0DlgProc", 0, "") ERROR EXITFAILURE END IF END IF '' '' Initialize the billboard '' ClearBillboardList SetSymbolValue "BillboardList", "" AddListItem "BillboardList", "F1" AddListItem "BillboardList", "F2" AddListItem "BillboardList", "F3" AddListItem "BillboardList", "F4" AddListItem "BillboardList", "F5" AddListItem "BillboardList", "F6" AddListItem "BillboardList", "F7" AddListItem "BillboardList", "F8" AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1 IF GetSymbolValue("STF_MODE") <> "NETWORK" THEN AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1 AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1 AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1 AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1 AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1 AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1 AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1 SetSymbolValue "BillboardNumber", "1" ELSE SetSymbolValue "BillboardNumber", "8" END IF SetCopyGaugePosition WindowWidth(HwndFrame())-158, WindowHeight(HwndFrame())-72 '' '' Remember that we need to brand the executable. '' IF GetSymbolValue("STF_MODE") <> "NETWORK" THEN IF (fEXE% = 1 OR GetSymbolValue("STF_MODE") = "ADMIN") THEN BRAND% = 1 END IF END IF '' '' Do the copy '' SetRestartDir GetSymbolValue("STF_CWDDIR") CopyFilesInCopyList AddLabels AddToPM UpdateFPConfig UpdateINI IF RestartListEmpty() = 0 THEN DoRestart END IF END SUB '** '** Purpose: '** Creates the PM group and items(s). '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB AddToPM STATIC IF DoesDirExist(DEST$) = 0 THEN CreateDir DEST$, cmoVital END IF IF GROUP$ <> NOGROUP$ AND (fEXE% = 1 OR GetSymbolValue("STF_MODE") = "NETWORK") AND GetSymbolValue("STF_MODE") <> "ADMIN" THEN CreateProgmanGroup GROUP$, "", cmoNone IF GetSymbolValue("STF_MODE") = "NETWORK" AND DoesFileExist(MakePath(SRCDIR$,"foxprow.exe"), femExists) = 1 THEN IF fWIN30% = 1 THEN CreateProgmanItem GROUP$, DESCRIP$, MakePath(SRCDIR$,"foxprow.exe"), "", cmoOverwrite ELSE CreateProgmanItem GROUP$, DESCRIP$, MakePath(SRCDIR$,"foxprow.exe"), MakePath(SRCDIR$,"foxprow.exe")+",0,0,0,"+DEST$, cmoOverwrite ENDIF ELSE IF fWIN30% = 1 THEN CreateProgmanItem GROUP$, DESCRIP$, MakePath(DEST$,"foxprow.exe"), "", cmoOverwrite ELSE CreateProgmanItem GROUP$, DESCRIP$, MakePath(DEST$,"foxprow.exe"), MakePath(DEST$,"foxprow.exe")+",0,0,0,"+DEST$, cmoOverwrite ENDIF END IF '' Add the readme file IF GetSymbolValue("STF_MODE") = "NETWORK" THEN IF DoesFileExist(MakePath(SRCDIR$,README$), femExists) = 1 THEN CreateProgmanItem GROUP$, READMEDES$, MakePath(SRCDIR$, README$), "", cmoOverwrite END IF ELSE IF DoesFileExist(MakePath(DEST$,README$), femExists) = 1 THEN CreateProgmanItem GROUP$, READMEDES$, MakePath(DEST$, README$), "", cmoOverwrite END IF END IF '' Add the Q&A file IF GetSymbolValue("STF_MODE") = "NETWORK" THEN IF DoesFileExist(MakePath(SRCDIR$,QA$), femExists) = 1 THEN CreateProgmanItem GROUP$, QADES$, MakePath(SRCDIR$, QA$), "", cmoOverwrite END IF ELSE IF DoesFileExist(MakePath(DEST$,QA$), femExists) = 1 THEN CreateProgmanItem GROUP$, QADES$, MakePath(DEST$, QA$), "", cmoOverwrite END IF END IF ShowProgmanGroup GROUP$, 1, cmoNone ENDIF END SUB '** '** Purpose: '** Adds label layouts to FoxUser, creating it if needed. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB AddLabels STATIC IF DoesFileExist(MakePath(DEST$,"foxuser.dbf"), femExists) = 1 THEN CopyFile MakePath(DEST$, "FOXUSER.DBF"), MakePath(DEST$, DBFBAK$), cmoOverwrite, 0 CopyFile MakePath(DEST$, "FOXUSER.FPT"), MakePath(DEST$, FPTBAK$), cmoOverwrite, 0 CopyFile MakePath(GetSymbolValue("STF_CWDDIR"),"FOXLABEL.DBF"), MakePath(DEST$,"FOXLABEL.DBF"), cmoOverwrite, 0 CopyFile MakePath(GetSymbolValue("STF_CWDDIR"),"FOXLABEL.FPT"), MakePath(DEST$,"FOXLABEL.FPT"), cmoOverwrite, 0 x% = AddLabelRecords(MakePath(DEST$,"FOXUSER.DBF"), MakePath(DEST$,"FOXLABEL.DBF")) IF x% <> 0 THEN CopyFile MakePath(DEST$, DBFBAK$), MakePath(DEST$,"FOXUSER.DBF"), cmoOverwrite, 0 CopyFile MakePath(DEST$, FPTBAK$), MakePath(DEST$,"FOXUSER.FPT"), cmoOverwrite, 0 ENDIF RemoveFile MakePath(DEST$, DBFBAK$), cmpFprce RemoveFile MakePath(DEST$, FPTBAK$), cmpFprce RemoveFile MakePath(DEST$,"FOXLABEL.DBF"), cmoForce RemoveFile MakePath(DEST$,"FOXLABEL.FPT"), cmoForce ELSE CopyFile MakePath(GetSymbolValue("STF_CWDDIR"),"FOXLABEL.DBF"), MakePath(DEST$,"FOXUSER.DBF"), cmoOverwrite, 0 CopyFile MakePath(GetSymbolValue("STF_CWDDIR"),"FOXLABEL.FPT"), MakePath(DEST$,"FOXUSER.FPT"), cmoOverwrite, 0 END IF END SUB '** '** Purpose: '** Updates the user's FoxPro configuration. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB UpdateFPConfig STATIC IF GetSymbolValue("STF_MODE") <> "NETWORK" THEN x% = UpdateConfigFPW(DEST$, GetEnvVariableValue("FOXPROWCFG")) IF (fEXE% = 1 OR GetSymbolValue("STF_MODE") = "ADMIN") THEN CloseSystem "reqfiles", "prodfile", DEST$, 456, 123 BRAND% = 0 END IF END IF END SUB '** '** Purpose: '** Exits to DOS to update Window's system files which were in use. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB DoRestart STATIC RESTARTBEGIN: sz$ = UIStartDlg(CUIDLL$, RESTARTWIN, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN ConfirmQuit GOTO RESTARTBEGIN END IF UIPop 1 TRYTOQUIT: IF ExitExecRestart() = 0 THEN TRYTOQUITL2: sz$ = UIStartDlg(CUIDLL$, CANTQUIT, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN ConfirmQuit GOTO TRYTOQUITL2 END IF GOTO TRYTOQUIT END IF END SUB '** '** Purpose: '** Gets the user's name and organization as appropriate. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB GetUserInfo STATIC IF GetSymbolValue("STF_MODE") <> "NETWORK" THEN IF IsDriveNetwork(MID$(SRCDIR$, 1, 1)) <> 1 OR DoesFileExist(MakePath(SRCDIR$,"foxprow.exe"),femExists) <> 1 THEN IF GetSymbolValue("STF_CD_TYPE") = "NEW" THEN GetUserAll ELSE '' '' Copy Disincentive Dialog '' USEDDISKS: SetSymbolValue "ConfirmTextIn", "" AddListItem "ConfirmTextIn", GetSymbolValue( "STF_CD_NAME" ) AddListItem "ConfirmTextIn", GetSymbolValue( "STF_CD_ORG" ) sz$ = UIStartDlg(CUIDLL$, REINSTALL, "FConfirmDlgProc", 0, "") IF sz$ = "EXIT" or sz$ = "CANCEL" THEN ConfirmQuit GOTO USEDDISKS END IF UIPop 1 END IF END IF END IF END SUB '** '** Purpose: '** Gets both the user's name and organization. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB GetUserAll STATIC szName$ = GetSymbolValue( "STF_CD_NAME" ) szOrg$ = GetSymbolValue( "STF_CD_ORG" ) SetSymbolValue "NameIn", "" SetSymbolValue "NameOut", "" SetSymbolValue "OrgIn", "" SetSymbolValue "OrgOut", "" SetSymbolValue "ConfirmTextIn", "" AddListItem "NameIn", szName$ AddListItem "OrgIn", szOrg$ AddListItem "ConfirmTextIn", szName$ AddListItem "ConfirmTextIn", szOrg$ NEWNAMEORG: ReplaceListItem "NameIn", 1, szName$ ReplaceListItem "OrgIn", 1, szOrg$ sz$ = UIStartDlg(CUIDLL$, GETNAMEORG, "FNameOrgDlgProc", 0, "") szName$ = RTRIM$(LTRIM$(GetSymbolValue("NameOut"))) szOrg$ = GetSymbolValue("OrgOut") IF sz$ = "CONTINUE" THEN IF LEN(szName$) = 0 THEN WarnBadName GOTO NEWNAMEORG END IF UIPop 1 ELSE ConfirmQuit GOTO NEWNAMEORG END IF ReplaceListItem "ConfirmTextIn", 1, szName$ ReplaceListItem "ConfirmTextIn", 2, szOrg$ IF ConfirmNameOrg() = "BACK" THEN ReplaceListItem "NameIn", 1, szName$ ReplaceListItem "OrgIn", 1, szOrg$ GOTO NEWNAMEORG ENDIF SetSymbolValue "STF_CD_NAME", szName$ SetSymbolValue "STF_CD_ORG", szOrg$ RemoveSymbol "ConfirmTextIn" RemoveSymbol "NameIn" RemoveSymbol "NameOut" RemoveSymbol "OrgIn" RemoveSymbol "OrgOut" END SUB '** '** Purpose: '** Has the user verify that the name and organization info is '** acceptable. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* FUNCTION ConfirmNameOrg () STATIC AS STRING VALIDATENAMEORG: sz$ = UIStartDlg(CUIDLL$, CONFIRMINFO, "FConfirmDlgProc", 0, "") IF sz$ = "CONTINUE" THEN ConfirmNameOrg = "CONTINUE" ELSEIF sz$ = "BACK" THEN ConfirmNameOrg = "BACK" ELSE ConfirmQuit GOTO VALIDATENAMEORG END IF UIPop 1 END FUNCTION '** '** Purpose: '** Gets the path where the user wishes to install FoxPro and the '** path for the Windows support routines. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB GetAdminPathInfo STATIC GETADMINPATHINFOSTART: SetSymbolValue "NameIn", LCASE$(DEST$) SetSymbolValue "NameOut", "" SetSymbolValue "OrgIn", LCASE$(MSDEST$) SetSymbolValue "OrgOut", "" sz$ = UIStartDlg(CUIDLL$, DESTPATHADMIN, "FNameOrgDlgProc", 0, "") DEST$ = GetSymbolValue("NameOut") DEST$ = LCASE$(DEST$) MSDEST$ = LCASE$(MSDEST$) IF MID$(DEST$, LEN(DEST$), 1) <> "\" THEN DEST$ = DEST$ + "\" END IF MSDEST$ = GetSymbolValue("OrgOut") IF MID$(MSDEST$, LEN(MSDEST$), 1) <> "\" THEN MSDEST$ = MSDEST$ + "\" END IF IF sz$ = "CONTINUE" THEN IF IsDirWritable(DEST$) = 0 THEN x$ = WarnBadPath(BADPATH) GOTO GETADMINPATHINFOSTART END IF IF IsDirWritable(MSDEST$) = 0 THEN x$ = WarnBadPath(BADPATHTOOLS) GOTO GETADMINPATHINFOSTART END IF ELSEIF sz$ = "REACTIVATE" THEN GOTO GETADMINPATHINFOSTART ELSE ConfirmQuit GOTO GETADMINPATHINFOSTART END IF IF LCASE$(MID$(DEST$, 1, 1)) <> LCASE$(MID$(MSDEST$, 1, 1)) THEN GETDRIVECONFIRM: sz$ = UIStartDlg(CUIDLL$, DRIVEMAP, "FInfo0DlgProc", 0, "") IF sz$ = "BACK" THEN UIPop 1 GOTO GETADMINPATHINFOSTART ELSEIF sz$ = "EXIT" OR sz$ = "CANCEL" THEN ConfirmQuit GOTO GETDRIVECONFIRM END IF UIPop 1 END IF IF CheckNoWinProd() = "BACK" THEN GOTO GETADMINPATHINFOSTART END IF IF CheckNoDosProd() = "BACK" THEN GOTO GETADMINPATHINFOSTART END IF UIPop 1 RemoveSymbol "NameIn" RemoveSymbol "NameOut" RemoveSymbol "OrgIn" RemoveSymbol "OrgOut" END SUB '** '** Purpose: '** Gets the path where the user wishes to install FoxPro. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB GetPathInfo STATIC SetSymbolValue "EditTextIn", LCASE$( DEST$ ) SetSymbolValue "EditFocus", "END" GETPATHINFOSTART: sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", 0, "") DEST$ = GetSymbolValue("EditTextOut") IF MID$(DEST$, LEN(DEST$), 1) = ":" THEN DEST$ = DEST$ + "\" END IF IF sz$ = "CONTINUE" THEN IF IsDirWritable(DEST$) = 0 THEN x$ = WarnBadPath(BADPATH) GOTO GETPATHINFOSTART END IF ELSEIF sz$ = "REACTIVATE" THEN GOTO GETPATHINFOSTART ELSE ConfirmQuit GOTO GETPATHINFOSTART END IF IF CheckNoWinProd() = "BACK" THEN SetSymbolValue "EditTextIn", DEST$ GOTO GETPATHINFOSTART END IF IF CheckNoDosProd() = "BACK" THEN SetSymbolValue "EditTextIn", DEST$ GOTO GETPATHINFOSTART END IF UIPop 1 RemoveSymbol "EditTextIn" RemoveSymbol "EditTextOut" RemoveSymbol "EditFocus" END SUB '** '** Purpose: '** Gets the path and PM group where the user wishes to install FoxPro. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB GetPathGrpInfo () STATIC SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "ListDefault", GROUP$ GETPATHGRPINFOSTART: sz$ = UIStartDlg(CUIDLL$, DESTPATHGROUP, "FDirGrpProc", 0, "") DEST$ = GetSymbolValue("EditTextOut") GROUP$ = GetSymbolValue("ListItemsOut") IF MID$(DEST$, LEN(DEST$), 1) = ":" THEN DEST$ = DEST$ + "\" END IF IF sz$ = "CONTINUE" THEN IF IsDirWritable(DEST$) = 0 THEN x$ = WarnBadPath(BADPATH) GOTO GETPATHGRPINFOSTART END IF ELSEIF sz$ = "REACTIVATE" THEN GOTO GETPATHGRPINFOSTART ELSE ConfirmQuit GOTO GETPATHGRPINFOSTART END IF IF CheckNoWinProd() = "BACK" THEN SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "ListDefault", GROUP$ GOTO GETPATHGRPINFOSTART END IF IF CheckNoDosProd() = "BACK" THEN SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "ListDefault", GROUP$ GOTO GETPATHGRPINFOSTART END IF UIPop 1 RemoveSymbol "EditTextIn" RemoveSymbol "EditTextOut" RemoveSymbol "ListDefault" RemoveSymbol "ListItemsOut" END SUB '** '** Purpose: '** Checks to see if we are installing over another copy of FoxPro for '** Windows and asks the user if they really want to do it. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* FUNCTION CheckNoWinProd () STATIC AS STRING CHECKNOWIN: IF DOESFILEEXIST( MakePath( DEST$, "FOXPROW.EXE" ), femExists ) = 1 THEN HASWIN: sz$ = UIStartDlg(CUIDLL$, WINPRODUCT, "FInfo0DlgProc", 0, "") IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN ConfirmQuit GOTO HASWIN ENDIF CheckNoWinProd = sz$ UIPop 1 ELSE CheckNoWinProd = "CONTINUE" ENDIF END FUNCTION '** '** Purpose: '** Check to see if the installation directory contains a FoxPro for DOS and, '** if so, let the user change their mind. '** '** Arguments: '** none. '** Returns: '** "CONTINUE" or "BACK" to indicate that we should go ahead and '** install here or ask for another path. '************************************************************************* FUNCTION CheckNoDosProd () STATIC AS STRING CHECKNODOS: IF DoesFileExist( MakePath( DEST$, "FOXPRO.EXE" ), femExists ) = 0 THEN IF DoesFileExist( MakePath( DEST$, "FOXPROX.EXE" ), femExists ) = 0 THEN IF DoesFileExist( MakePath( DEST$, "FOXPROL.EXE" ), femExists ) = 0 THEN IF DoesFileExist( MakePath( DEST$, "FOXPROLX.EXE" ), femExists ) = 0 THEN CheckNoDosProd = "CONTINUE" GOTO CHECKNODOSEND END IF END IF END IF END IF CHECKNODOSMIDDLE: sz$ = UIStartDlg(CUIDLL$, DOSPRODUCT, "FInfo0DlgProc", 0, "") IF sz$ = "EXIT" or sz$ = "CANCEL" THEN ConfirmQuit GOTO CHECKNODOSMIDDLE END IF UIPop 1 CheckNoDosProd = sz$ CHECKNODOSEND: END FUNCTION '** '** Purpose: '** Fills the copy list with the sections the user wants to install '** based on installation categories. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* FUNCTION GetInstallType () STATIC AS STRING modeflg% = 0 dlg% = OPTIONS IF GetSymbolValue("STF_MODE") = "ADMIN" OR IsDriveNetwork(MID$(DEST$, 1, 1)) = 1 THEN modeflg% = 3 dlg% = OPTSERVER ELSEIF GetSymbolValue("STF_MODE") = "NETWORK" OR ((IsDriveNetwork(MID$(SRCDIR$, 1, 1)) = 1 OR GetSymbolValue("STF_CD_TYPE") = "WKST") AND DoesFileExist(MakePath(SRCDIR$,"foxprow.exe"), femExists) = 1) THEN modeflg% = 2 dlg% = OPTCLIENT ELSE modeflg% = 1 dlg% = OPTIONS ENDIF GETINSTALLTYPESTART: sz$ = UIStartDlg(CUIDLL$, dlg%, "FThreeOptDlgProc", 0, "") IF sz$ = "ONE" THEN UIPop 1 GetInstallType = "FULL" SetSymbolValue "STF_MODE", "NORMAL" y$ = SetInstall("MAX") ELSEIF sz$ = "TWO" THEN UIPop 1 GetInstallType = "CUSTOM" SetSymbolValue "STF_MODE", "NORMAL" ELSEIF sz$ = "THREE" THEN UIPop 1 GetInstallType = "MINIMUM" IF modeflg% = 3 THEN SetSymbolValue "STF_MODE", "ADMIN" MSDEST$ = MakePath(DEST$, "setup\msapps") y$ = SetInstall("ADMIN") ELSEIF modeflg% = 2 THEN SetSymbolValue "STF_MODE", "NETWORK" y$ = SetInstall("WKST") ELSE y$ = SetInstall("MIN") END IF ELSE ConfirmQuit GOTO GETINSTALLTYPESTART END IF END FUNCTION '** '** Purpose: '** Fills the copy list with the sections the user wants to install '** based on selections from the available options. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* FUNCTION GetInstallOptions () STATIC AS STRING GetInstallOptions = "CONTINUE" SetSymbolValue "Drive", UCASE$(MID$(DEST$, 1, 1)) + ":" SetSymbolValue "WinDrive", UCASE$(MID$(WINSYSDIR$, 1, 1)) + ": (Windows)" GETINSTALLOPTIONSSTART: sz$ = UIStartDlg(CUIDLL$, CUSTOMINST, "FCustInstDlgProc", 0, "") IF sz$ = "CONTINUE" THEN y$ = SetInstall("CUST") UIPop 1 ELSEIF sz$ = "REACTIVATE" THEN GOTO GETINSTALLOPTIONSSTART ELSEIF sz$ = "BACK" THEN UIPop 1 GetInstallOptions = "BACK" ELSE ConfirmQuit GOTO GETINSTALLOPTIONSSTART END IF END FUNCTION '** '** Purpose: '** Sets the global copy list to install a the options selected by '** the user as indicated by the list CheckItems. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* FUNCTION SetInstall (szType$) STATIC AS STRING fEXE% = 2 IF DoesFileExist(MakePath(SRCDIR$,DIRINI$), femExists) = 1 THEN ToolsLoc$ = GetIniKeyString(MakePath(SRCDIR$, DIRINI$), "TOOLS LOCATION", "DIR") IF MID$(ToolsLoc$, 1, 1) = "\" THEN ToolsLoc$ = MID$(SRCDIR$, 1, 1) + ":" + ToolsLoc$ END IF ELSE ToolsLoc$ = "" END IF IF szType$ = "MAX" THEN ReplaceListItem "CheckItems", REQFILES, "ON" ReplaceListItem "CheckItems", WINHELP, "ON" ReplaceListItem "CheckItems", FPHELP, "ON" ReplaceListItem "CheckItems", TUTORIAL, "ON" ReplaceListItem "CheckItems", FOXAPP, "ON" ReplaceListItem "CheckItems", EXAMPLES, "ON" ReplaceListItem "CheckItems", FOXDOC, "ON" ReplaceListItem "CheckItems", MSGRAPH, "ON" ReplaceListItem "CheckItems", SPELL, "ON" ReplaceListItem "CheckItems", SYSFILES, "ON" ReplaceListItem "CheckItems", WINFILES, "ON" ReplaceListItem "CheckItems", SETUP, "OFF" fEXE% = 1 ELSEIF szType$ = "ADMIN" THEN ReplaceListItem "CheckItems", REQFILES, "ON" ReplaceListItem "CheckItems", WINHELP, "ON" ReplaceListItem "CheckItems", FPHELP, "ON" ReplaceListItem "CheckItems", TUTORIAL, "ON" ReplaceListItem "CheckItems", FOXAPP, "ON" ReplaceListItem "CheckItems", EXAMPLES, "ON" ReplaceListItem "CheckItems", FOXDOC, "ON" ReplaceListItem "CheckItems", MSGRAPH, "ON" ReplaceListItem "CheckItems", SPELL, "ON" ReplaceListItem "CheckItems", SYSFILES, "ON" ReplaceListItem "CheckItems", WINFILES, "ON" ReplaceListItem "CheckItems", SETUP, "ON" fEXE% = 0 ELSEIF szType$ = "MIN" THEN ReplaceListItem "CheckItems", REQFILES, "ON" ReplaceListItem "CheckItems", WINHELP, "OFF" ReplaceListItem "CheckItems", FPHELP, "OFF" ReplaceListItem "CheckItems", TUTORIAL, "OFF" ReplaceListItem "CheckItems", FOXAPP, "OFF" ReplaceListItem "CheckItems", EXAMPLES, "OFF" ReplaceListItem "CheckItems", FOXDOC, "OFF" ReplaceListItem "CheckItems", MSGRAPH, "OFF" ReplaceListItem "CheckItems", SPELL, "OFF" ReplaceListItem "CheckItems", SYSFILES, "ON" ReplaceListItem "CheckItems", WINFILES, "ON" ReplaceListItem "CheckItems", SETUP, "OFF" fEXE% = 1 ELSEIF szType$ = "WKST" THEN ReplaceListItem "CheckItems", REQFILES, "OFF" ReplaceListItem "CheckItems", WINHELP, "OFF" ReplaceListItem "CheckItems", FPHELP, "OFF" ReplaceListItem "CheckItems", TUTORIAL, "OFF" ReplaceListItem "CheckItems", FOXAPP, "OFF" ReplaceListItem "CheckItems", EXAMPLES, "OFF" ReplaceListItem "CheckItems", FOXDOC, "OFF" ReplaceListItem "CheckItems", MSGRAPH, "OFF" ReplaceListItem "CheckItems", SPELL, "OFF" ReplaceListItem "CheckItems", SYSFILES, "ON" ReplaceListItem "CheckItems", WINFILES, "ON" ReplaceListItem "CheckItems", SETUP, "OFF" MSDEST$ = ToolsLoc$ IF ToolsLoc$ <> "" THEN fGRAPH% = 1 fSPELL% = 1 END IF fEXE% = 1 END IF ClearCopyList IF GetListItem("CheckItems", REQFILES) = "ON" THEN IF fEXE% = 2 THEN fEXE% = 1 END IF AddSectionFilesToCopyList "reqfiles", SRCDIR$, DEST$ ELSE IF fEXE% = 2 THEN fEXE% = 0 END IF END IF IF GetListItem("CheckItems", WINHELP) = "ON" THEN AddSectionFilesToCopyList "winhelp", SRCDIR$, DEST$ END IF IF GetListItem("CheckItems", FPHELP) = "ON" THEN AddSectionFilesToCopyList "fphelp", SRCDIR$, DEST$ END IF IF GetListItem("CheckItems", TUTORIAL) = "ON" THEN AddSectionFilesToCopyList "tutorial", SRCDIR$, DEST$ END IF IF GetListItem("CheckItems", FOXAPP) = "ON" THEN AddSectionFilesToCopyList "foxapp", SRCDIR$, DEST$ END IF IF GetListItem("CheckItems", EXAMPLES) = "ON" THEN AddSectionFilesToCopyList "examples", SRCDIR$, DEST$ END IF IF GetListItem("CheckItems", FOXDOC) = "ON" THEN AddSectionFilesToCopyList "foxdoc", SRCDIR$, DEST$ END IF IF GetListItem("CheckItems", MSGRAPH) = "ON" THEN IF ToolsLoc$ <> "" THEN AddSectionFilesToCopyList "msgraph", ToolsLoc$, MakePath(MSDEST$, "msgraph") ELSE AddSectionFilesToCopyList "msgraph", SRCDIR$, MakePath(MSDEST$, "msgraph") END IF AddSectionFilesToCopyList "graphwiz", SRCDIR$, DEST$ fGRAPH% = 1 END IF IF GetListItem("CheckItems", SPELL) = "ON" THEN IF ToolsLoc$ <> "" THEN AddSectionFilesToCopyList "spell", ToolsLoc$, MakePath(MSDEST$, "proof") ELSE AddSectionFilesToCopyList "spell", SRCDIR$, MakePath(MSDEST$, "proof") END IF AddSectionFilesToCopyList "spellapp", SRCDIR$, DEST$ fSPELL% = 1 END IF IF GetListItem("CheckItems", SYSFILES) = "ON" THEN IF szType$ <> "ADMIN" THEN AddSectionFilesToCopyList "sysfiles", SRCDIR$, WINSYSDIR$ ELSE AddSectionFilesToCopyList "sysfiles", SRCDIR$, MakePath(DEST$, "setup") END IF END IF IF GetListItem("CheckItems", WINFILES) = "ON" THEN IF szType$ <> "ADMIN" THEN AddSectionFilesToCopyList "winfiles", SRCDIR$, WINDIR$ ELSE AddSectionFilesToCopyList "winfiles", SRCDIR$, MakePath(DEST$, "setup") END IF END IF IF GetListItem("CheckItems", SETUP) = "ON" THEN AddSectionFilesToCopyList "setup", SRCDIR$, DEST$ END IF SetInstall = "OK" END FUNCTION '** '** Purpose: '** Sets all the symbols we need to determine if the user has enough '** disk space. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB CheckDiskSpace STATIC oldCursor% = ShowWaitCursor() sz$ = UIStartDlg( CUIDLL$, WAITSPACE, "FNoWaitDlgProc", 0, "") IF SIZESET% = 0 THEN SetSectionSize SIZESET% = 1 ENDIF SetSymbolValue "FreeSpace", STR$(GetFreeSpaceForDrive(MID$(DEST$, 1, 1)) / 1024) IF MID$(DEST$, 1, 1) <> MID$(WINSYSDIR$, 1, 1) THEN SetSymbolValue "FreeSpaceWin", STR$(GetFreeSpaceForDrive(MID$(WINSYSDIR$, 1, 1)) / 1024) ELSE SetSymbolValue "FreeSpaceWin", GetSymbolValue("FreeSpace") END IF RestoreCursor oldCursor% UIPop 1 END SUB '** '** Purpose: '** Determines if we have enough space to do the install. '** Arguments: '** none. '** Returns: '** "CONTINUE" or "BACK". '************************************************************************* FUNCTION EnoughSpace() STATIC AS STRING EnoughSpace = "CONTINUE" SpaceAvail& = VAL(GetSymbolValue("FreeSpace")) SpaceAvailWin& = VAL(GetSymbolValue("FreeSpaceWin")) SpaceNeed& = 0 SpaceNeedWin& = 0 FOR x% = 1 TO WINFILES IF GetListItem("CheckItems", x%) = "ON" THEN SpaceNeed& = SpaceNeed& + VAL(GetListItem("CheckItemsSize", x%)) SpaceNeedWin& = SpaceNeedWin& + VAL(GetListItem("WinDriveSize", x%)) END IF NEXT '' '' If Windows is on the drive we are installing to, combine '' the needed values. '' IF MID$(DEST$, 1, 1) = MID$(WINSYSDIR$, 1, 1) THEN SpaceNeed& = SpaceNeed& + SpaceNeedWin& END IF '' '' Check to see if we have room '' IF SpaceNeed& > SpaceAvail& THEN dialog% = DISKFULL ELSEIF SpaceNeedWin& > SpaceAvailWin& THEN dialog% = DISKWINFULL ELSE dialog% = 0 END IF IF dialog% > 0 THEN NOROOM: sz$ = UIStartDlg(CUIDLL$, dialog%, "FQuitDlgProc", 0, "") IF sz$ = "BACK" THEN EnoughSpace = "BACK" ELSEIF sz$ = "EXIT" or sz$ = "CANCEL" THEN ConfirmQuit GOTO NOROOM END IF UIPop 1 END IF END FUNCTION '** '** Purpose: '** Determines whether or not the user wishes to install the 2.0 '** compaitibility files. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB Get20Compatibility STATIC IF GetSymbolValue( "STF_MODE" ) <> "NETWORK" THEN COMPATIBILITYSTART: sz$ = UIStartDlg(CUIDLL$, COMPATIBILITY, "FThreeOptDlgProc", 0, "") IF sz$ = "ONE" THEN FLAGS% = FPWSetKeyComp("DOS") ELSEIF sz$ = "TWO" THEN FLAGS% = FPWSetKeyComp("WIN") ELSE ConfirmQuit GOTO COMPATIBILITYSTART END IF UIPop 1 END IF END SUB '** '** Purpose: '** Updates any INI files that need it and does any other misc. updates. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB UpdateINI STATIC IF fGRAPH% = 1 OR fSPELL% = 1 OR ((fEXE% = 1 OR GetSymbolValue("STF_MODE") = "NETWORK") AND GetSymbolValue("STF_MODE") <> "ADMIN") THEN oldCursor% = ShowWaitCursor() sz$ = UIStartDlg(CUIDLL$, WAITINI, "FNoWaitDlgProc", 0, "") IF GetSymbolValue("STF_MODE") = "ADMIN" THEN IF LCASE$(MID$(MSDEST$, 1, 1)) = LCASE$(MID$(DEST$, 1, 1)) THEN MSDEST$ = MID$(MSDEST$, 3, LEN(MSDEST$)-2) END IF CreateIniKeyValue MakePath(DEST$, DIRINI$), "TOOLS LOCATION", "DIR", MSDEST$, cmoOverwrite END IF IF fGRAPH% = 1 THEN CreateIniKeyValue "WIN.INI", "MSAPPS", "msapps", MSDEST$, cmoOverwrite CreateRegKeyValue "MSGraph", "Microsoft Graph" CreateRegKeyValue ".gra", "MSGraph" CreateRegKeyValue "MSGraph\protocol\StdFileEditing\server", MakePath(MSDEST$,"msgraph\graph.exe") CreateRegKeyValue "MSGraph\protocol\StdFileEditing\SetDataFormats", "Native,CF_TEXT" CreateRegKeyValue "MSGraph\protocol\StdFileEditing\RequestDataFormats", "Native,CF_METAFILEPICT" CreateRegKeyValue "MSGraph\protocol\StdExecute\server", MakePath(MSDEST$,"msgraph\graph.exe") END IF IF fSPELL% = 1 THEN CreateIniKeyValue "WIN.INI", "MS Proofing Tools", "Custom Dict 1", MakePath(MSDEST$,"proof\custom.dic"), cmoOverwrite CreateIniKeyValue "WIN.INI", "MS Proofing Tools", "Spelling 2057,0", MakePath(MSDEST$,"proof\msspell.dll")+","+MakePath(MSDEST$,"proof\mssp_br.lex"), cmoOverwrite CreateIniKeyValue "WIN.INI", "MS Proofing Tools", "Spelling 1033,0", MakePath(MSDEST$,"proof\msspell.dll")+","+MakePath(MSDEST$,"proof\mssp_am.lex"), cmoOverwrite END IF IF (fEXE% = 1 OR GetSymbolValue("STF_MODE") = "NETWORK") AND GetSymbolValue("STF_MODE") <> "ADMIN" THEN CreateRegKeyValue "MSFoxPro", "Microsoft FoxPro for Windows" CreateRegKeyValue "MSFoxPro\shell\open\command", MakePath(DEST$,"FOXPROW.EXE")+" %1" CreateRegKeyValue ".prg", "MSFoxPro" CreateRegKeyValue ".fxp", "MSFoxPro" CreateRegKeyValue ".app", "MSFoxPro" END IF UIPop 1 RestoreCursor oldCursor% END IF END SUB '** '** Purpose: '** Update FILES in config.sys if needed. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB UpdateConfig STATIC IF CanFindConfigSys() <> 0 THEN IF GetConfigNumFiles() < MINFILES% THEN SetSymbolValue "RadioDefault", "1" UPDATETYPE: sz$ = UIStartDlg(CUIDLL$, EDITMODE, "FRadioDlgProc", 0, "") IF sz$ = "CONTINUE" THEN UIPop 1 SetSymbolValue "MIN_FILES", "40" IF GetSymbolValue("ButtonChecked") = "1" THEN x% = QuietConfigUpdate() ELSEIF GetSymbolValue("ButtonChecked") = "2" THEN EDITCONFIGSTART: sz$ = UIStartDlg(CUIDLL$, EDITCONFIG, "ConfigEditDlg", 0, "") IF sz$ = "EXIT" or sz$ = "CANCEL" THEN ConfirmQuit GOTO EDITCONFIGSTART ENDIF UIPop 1 ELSE GOTO CONFIGEND ENDIF IF GetSymbolValue("UPDATE_RESULT") = "ERROR" THEN sz$ = UIStartDlg(CUIDLL$, CANTUPDATE, "FInfo0DlgProc", 0, "") ELSE sz$ = UIStartDlg(CUIDLL$, EDITOK, "FDlgFNameProc", 0, "") END IF UIPop 1 ELSE ConfirmQuit SetSymbolValue "RadioDefault", GetSymbolValue("ButtonChecked") GOTO UPDATETYPE END IF END IF CONFIGEND: ELSE SetSymbolValue "ConfirmTextIn", "" AddListItem "ConfirmTextIn", STR$(MINFILES%) AddListItem "ConfirmTextIn", STR$(MINFILES%) sz$ = UIStartDlg(CUIDLL$, CANTFIND, "FSprintfDlgProc", 0, "") UIPop 1 END IF END SUB '** '** Purpose: '** Confirms that the user really wants to quit when they select a quit '** option. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB ConfirmQuit STATIC CONFIRMQUITSTART: sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" or sz$ = "CANCEL" THEN UIPopAll ERROR STFQUIT ELSEIF sz$ = "REACTIVATE" THEN GOTO CONFIRMQUITSTART ELSE UIPop 1 END IF END SUB '** '** Purpose: '** Warns the user that they must enter a name. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB WarnBadName STATIC WARNBADNAMESTART: sz$ = UIStartDlg(CUIDLL$, BADNAME, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO WARNBADNAMESTART END IF UIPop 1 END SUB '** '** Purpose: '** Warns the user that they have specified an invalid path. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* FUNCTION WarnBadPath (dlg%) STATIC AS STRING WARNBADPATHSTART: sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO WARNBADPATHSTART END IF UIPop 1 WarnBadPath = sz$ END FUNCTION '** '** 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: '** Records the section sizes. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB SetSectionSize STATIC ReplaceListItem "CheckItemsSize", REQFILES, SectionSize("reqfiles") ReplaceListItem "WinDriveSize", REQFILES, "0" ReplaceListItem "CheckItemsSize", WINHELP, SectionSize("winhelp") ReplaceListItem "WinDriveSize", WINHELP, "0" ReplaceListItem "CheckItemsSize", FPHELP, SectionSize("fphelp") ReplaceListItem "WinDriveSize", FPHELP, "0" ReplaceListItem "CheckItemsSize", TUTORIAL, SectionSize("tutorial") ReplaceListItem "WinDriveSize", TUTORIAL, "0" ReplaceListItem "CheckItemsSize", FOXAPP, SectionSize("foxapp") ReplaceListItem "WinDriveSize", FOXAPP, "0" ReplaceListItem "CheckItemsSize", EXAMPLES, SectionSize("examples") ReplaceListItem "WinDriveSize", EXAMPLES, "0" ReplaceListItem "CheckItemsSize", FOXDOC, SectionSize("foxdoc") ReplaceListItem "WinDriveSize", FOXDOC, "0" ReplaceListItem "CheckItemsSize", MSGRAPH, SectionSize("msgraph") ReplaceListItem "WinDriveSize", MSGRAPH, SectionSize("graphwiz") ReplaceListItem "CheckItemsSize", SPELL, SectionSize("spellapp") ReplaceListItem "WinDriveSize", SPELL, SectionSize("spell") '' '' The following items are not options given to the user. '' ReplaceListItem "CheckItemsSize", SYSFILES, "0" ReplaceListItem "WinDriveSize", SYSFILES, SectionSize("sysfiles") ReplaceListItem "CheckItemsSize", WINFILES, "0" ReplaceListItem "WinDriveSize", WINFILES, SectionSize("winfiles") ReplaceListItem "CheckItemsSize", SETUP, SectionSize("setup") ReplaceListItem "WinDriveSize", SETUP, "0" END SUB '** '** Purpose: '** Determines how much space a given section will occupy. '** Arguments: '** szSection$ - The section to determine the size of. '** Returns: '** The size in K bytes of the section. '************************************************************************* FUNCTION SectionSize (szSection$) STATIC AS STRING MakeListFromSectionSize "SizeList", szSection$ SectionSize = STR$(CalcListSize()) RemoveSymbol "SizeList" END FUNCTION