home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1993-06-22 | 48.5 KB | 1,404 lines
'** $Header: F:\newproj\install3\vcs\approach.msv 2.3 04 Aug 1993 17:05:00 JLevine $ '************************************************************************** '** Approach installation script '************************************************************************** '** '** Modifications: '** $Log: F:\newproj\install3\vcs\approach.msv $ '** '** Rev 2.3 04 Aug 1993 17:05:00 JLevine '** 2.1 release '** '** Rev 2.2 13 Jul 1993 17:18:54 JLevine '** DriveType stuff '** '** Rev 2.1 12 Jul 1993 23:37:30 JLevine '** 2.1 installer '** '** Rev 2.0 21 Jun 1993 15:59:18 JLevine '** No change. '** '** Rev 1.4 02 Apr 1993 11:01:48 JLevine '** 2.03 changes '** '** Rev 1.3 02 Dec 1992 16:39:50 JLevine '** OurLoadString, localizable strings '** '** Rev 1.2 01 Dec 1992 10:23:38 JLevine '** 2.01i installer '** '** Rev 1.1 21 Oct 1992 10:35:16 JLevine '** Changes for UK release '** '** Rev 1.0 16 Oct 1992 16:04:10 JLevine '** Initial revision. '** '$DEFINE NODEBUG ''Define DEBUG for script development/debugging '$INCLUDE 'setupapi.inc' '$INCLUDE 'msdetect.inc' '$INCLUDE 'msregdb.inc' '$INCLUDE 'approach.inc' ''Dialog ID's CONST WELCOME = 100 CONST WELCOMENODE = 101 CONST ASKQUIT = 200 CONST DESTPATH = 300 CONST EXITFAILURE = 400 CONST EXITQUIT = 600 CONST EXITSUCCESS = 700 CONST EXITNETWORKSUCCESS = 701 CONST OPTIONS = 800 CONST INSTOPTS = 801 CONST TEMPLATEOPTS = 802 CONST INSTSHARE = 803 CONST NETINSTOPTS = 804 CONST NETLICENSEOPTS = 805 'CONST LOTUSAPPDIR = 806 CONST APPHELP = 900 CONST APPHELPNOBACK = 901 CONST APPHELPNOCONT = 902 CONST APPINSTHELP = 903 CONST APPTEMPLATEHELP = 904 CONST APPSHAREHELP = 905 CONST APPCUSTINSTHELP = 906 CONST APPHELPYESNO = 907 CONST APPLICENSEHELP = 908 CONST APPNETHELP = 909 'CONST LOTUSAPPHELP = 910 'CONST COMMONDIRHELP = 911 'CONST COMMONDIR = 1000 CONST CUSTINST = 6200 CONST TOOBIGCUST = 6300 CONST TOOBIGFULL = 6301 CONST TOOBIGMIN = 6302 CONST BADPATH = 6400 CONST CDCONFIRMINFO = 7300 CONST CDBADNAME = 7700 CONST BILLBOARD_REG = 8000 CONST BILLBOARD_2 = 8001 CONST BILLBOARD_3 = 8002 CONST BILLBOARD_4 = 8003 CONST LOGO = 2 ''File Types CONST APPFILES = 1 ''Approach CONST OPTFILES1 = 2 ''Examples CONST OPTFILES2 = 3 ''Templates CONST OPTFILES3 = 4 ''Paradox CONST OPTFILES4 = 5 ''Oracle CONST OPTFILES5 = 6 ''SQL Server CONST OPTFILES6 = 7 ''ODBC CONST NUMFILETYPES = OPTFILES6 '' For templates CONST TEMPLATEREADME = 1 '' Do template readme files CONST SMALLBIZ = 2 '' Do smallbiz templates CONST LARGEBIZ = 3 '' Do largebiz templates CONST NUMTEMPLATES = LARGEBIZ GLOBAL DEST$ ''Default destination directory. GLOBAL WINDRIVE$ ''Windows drive letter. 'GLOBAL STATUSBARDEST$ 'GLOBAL ICONBARDEST$ 'GLOBAL LOTUSAPPDIR$ GLOBAL LICENSEDEST$ '' Licenser destination directory. GLOBAL LICENSEUTIL$ '' Licenser utility directory. GLOBAL OPT1OPT$ ''Option selection from OptFiles1 option dialog. GLOBAL OPT2OPT$ ''Option selection from OptFiles2 option dialog. GLOBAL OPT3OPT$ ''Option selection from OptFiles2 option dialog. GLOBAL OPT4OPT$ ''Option selection from OptFiles2 option dialog. GLOBAL OPT5OPT$ ''Option selection from OptFiles5 option dialog GLOBAL OPT6OPT$ ''Option selection from OptFiles6 option dialog ''CustInst list symbol names GLOBAL APPNEEDS$ ''Option list costs per drive GLOBAL OPT1NEEDS$ GLOBAL OPT2NEEDS$ GLOBAL OPT3NEEDS$ GLOBAL OPT4NEEDS$ GLOBAL OPT5NEEDS$ GLOBAL OPT6NEEDS$ GLOBAL LICENSEUTILNEEDS$ 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$ GLOBAL HELPPROC$ GLOBAL CUIDLL$ '' Flags GLOBAL instDiskFull% GLOBAL winDiskFull% DECLARE SUB AddOptFilesToCopyList (ftype%) DECLARE SUB CreateOptDir (ftype%, DEST$) DECLARE SUB RecalcOptFiles (ftype%) DECLARE SUB RecalcPath DECLARE SUB SetDriveStatus DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING DECLARE FUNCTION CompareLists(szList1$, szList2$) AS INTEGER DECLARE SUB CopyList(szList1$, szList2$) DECLARE SUB DoBadPathDlg 'DECLARE FUNCTION DoPathDlg() AS STRING DECLARE FUNCTION ValidateNewPath(oldPath$, newPath$) AS INTEGER DECLARE SUB ChangePathText(newPath$) DECLARE SUB DoAskQuitDlg DECLARE SUB DoWelcomeDlg(szUserName$, szCompanyName$) DECLARE FUNCTION OurIsDirWritable(newPath$) AS INTEGER INIT: SetTitle GetString(STANDARD_CAPTION) SetAbout GetString(COPYRIGHT_NAME), GetString(COPYRIGHT_NOTICE) '' Hack to make node installations simpler IF GetSymbolValue("STF_MODE") = "ADMIN" THEN SetSymbolValue "STF_MODE", "NODE" END IF instDiskFull% = 0 winDiskFull% = 0 CUIDLL$ = "mscuistf.dll" ''custom user interface dll HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure SetBitmap CUIDLL$, LOGO dummy% = ShowWindow (HwndFrame(), SW_SHOWMAXIMIZED) WINDRIVE$ = MID$(GetWindowsDir, 1, 1) IF GetSymbolValue("STF_MODE") = "NETWORK" THEN LICENSEUTIL$ = WINDRIVE$ + ":\LICENSER" DEST$ = "" LICENSEDEST$ = "" FOR i% = 1 TO 26 STEP 1 IF DriveType(i%) = DRIVE_REMOTE THEN NetDrive$ = CHR$(i%+ASC("A")-1) IF (DEST$ = "") AND (OurIsDirWritable(NetDrive$+GetString(NETWORK_DIR)) = 1) THEN DEST$ = NetDrive$+GetString(NETWORK_DIR) ENDIF IF (LICENSEDEST$ = "") AND (OurIsDirWritable(NetDrive$+GetString(NETLICENSE_DIR)) = 1) THEN LICENSEDEST$ = NetDrive$+GetString(NETLICENSE_DIR) END IF IF (DEST$ <> "") AND (LICENSEDEST$ <> "") THEN EXIT FOR ENDIF END IF NEXT i% IF DEST$ = "" THEN DEST$ = WINDRIVE$ + GetString(NETWORK_DIR) END IF IF LICENSEDEST$ = "" THEN LICENSEDEST$ = WINDRIVE$ + GetString(NETLICENSE_DIR) END IF ELSE DEST$ = WINDRIVE$ + ":\APPROACH" END IF szInf$ = GetSymbolValue("STF_SRCINFPATH") IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") END IF szInf$ = szInf$ + "APPROACH.INF" ' ' Guess at a location for lotusapp & shared files ' LotIni1$ = GetWindowsDir LotIni$ = LotIni1$+"LOTUS.INI" ' ICONBARDEST$ = GetIniKeyString(LotIni$, "Icon Palette", "Program Path") ' STATUSBARDEST$ = GetIniKeyString(LotIni$, "Status Bar", "Program Path") ' ' IF GetSymbolValue("STF_MODE") = "NORMAL" THEN ' LOTUSAPPDIR$ = GetIniKeyString(LotIni$, "Lotus Applications", "Common Directory") ' IF LOTUSAPPDIR$ = "" THEN ' LOTUSAPPDIR$ = LotIni1$+"LOTUSAPP" ' ENDIF ' ' IF ICONBARDEST$ = "" THEN ' ICONBARDEST$ = LOTUSAPPDIR$ ' ENDIF ' ' IF STATUSBARDEST$ = "" THEN ' STATUSBARDEST$ = LOTUSAPPDIR$ ' ENDIF ' ELSEIF GetSymbolValue("STF_MODE") = "NODE" THEN ' LOTUSAPPDIR$ = GetIniKeyString(LotIni$, "Lotus Applications", "Net Common Directory") ' LOTUSAPPDIR2$ = GetIniKeyString(GetSymbolValue("STF_SRCDIR")+"INSTALL.INI", "Save Section", "Server Common Directory") ' ' IF (LOTUSAPPDIR$ = "") OR ((LOTUSAPPDIR2$ <> "") AND (MID$(LOTUSAPPDIR$, 2) <> MID$(LOTUSAPPDIR2$, 2))) THEN ' LOTUSAPPDIR$ = LOTUSAPPDIR2$ ' ENDIF ' ' IF DoesDirExist(LOTUSAPPDIR$) = 0 THEN ' LOTUSAPPDIR$ = MID$(GetSymbolValue("STF_SRCDIR"), 1, 1) + MID$(LOTUSAPPDIR$, 2) ' ENDIF ' ELSEIF GetSymbolValue("STF_MODE") = "NETWORK" THEN ' LOTUSAPPDIR$ = GetIniKeyString(LotIni$, "Lotus Applications", "Net Common Directory") ' IF LOTUSAPPDIR$ = "" THEN ' LOTUSAPPDIR$ = MID$(DEST$, 1, 1)+":\LOTUSAPP" ' ENDIF ' ENDIF ReadInfFile szInf$ ''CustInst list symbols CHECKSTATES$ = "CheckItemsState" STATUSTEXT$ = "StatusItemsText" DRIVETEXT$ = "DriveStatusText" FOR k% = APPFILES TO NUMFILETYPES STEP 1 AddListItem STATUSTEXT$, "" NEXT k% FOR l% = 1 TO 7 STEP 1 AddListItem DRIVETEXT$, "" NEXT l% ReplaceListItem DRIVETEXT$, 7, DEST$ ''Disk cost list symbols APPNEEDS$ = "AppNeeds" OPT1NEEDS$ = "Opt1Needs" OPT2NEEDS$ = "Opt2Needs" OPT3NEEDS$ = "Opt3Needs" OPT4NEEDS$ = "Opt4Needs" OPT5NEEDS$ = "Opt5Needs" OPT6NEEDS$ = "Opt6Needs" EXTRACOSTS$ = "ExtraCosts" BIGLIST$ = "BigList" FOR m% = APPFILES TO NUMFILETYPES STEP 1 AddListItem BIGLIST$, "" NEXT m% FOR n% = 1 TO 26 STEP 1 AddListItem EXTRACOSTS$, "0" NEXT n% OPT1OPT$ = "1" OPT2OPT$ = "WhichTemplates" FOR o% = APPFILES TO NUMFILETYPES STEP 1 AddListItem CHECKSTATES$, "ON" NEXT o% ''File Option Variables IF GetSymbolValue("STF_MODE") = "NODE" THEN IF DoesFileExist(GetSymbolValue("STF_SRCDIR") + GetString(EXAMPLES_DIR) + "\" + GetSectionKeyFilename("Tutorial", "Tutorial Example File"), femExists) = 0 THEN ReplaceListItem CHECKSTATES$, OPTFILES1, "DISABLED" OPT1OPT$ = "-1" ELSE OPT1OPT$ = "1" ENDIF numTempls% = 0 IF DoesFileExist(GetSymbolValue("STF_SRCDIR") + GetString(TEMPLATES_DIR) + "\" + GetSectionKeyFilename("Template Readme", "Template Documentation"), femExists) = 0 THEN AddListItem OPT2OPT$, "DISABLED" ELSE AddListItem OPT2OPT$, "ON" numTempls% = numTempls% + 1 ENDIF IF DoesFileExist(GetSymbolValue("STF_SRCDIR") + GetString(TEMPLATES_DIR) + "\" + GetString(SMALLBIZ_DIR) + "\" + GetSectionKeyFilename("Smallbiz Templates", "Small Business Template"), femExists) = 0 THEN AddListItem OPT2OPT$, "DISABLED" ELSE AddListItem OPT2OPT$, "ON" numTempls% = numTempls% + 1 ENDIF IF DoesFileExist(GetSymbolValue("STF_SRCDIR") + GetString(TEMPLATES_DIR) + "\" + GetString(LARGEBIZ_DIR) + "\" + GetSectionKeyFilename("Largebiz Templates", "Large Business Template"), femExists) = 0 THEN AddListItem OPT2OPT$, "DISABLED" ELSE AddListItem OPT2OPT$, "ON" numTempls% = numTempls% + 1 ENDIF IF numTempls% = 0 THEN ReplaceListItem CHECKSTATES$, OPTFILES2, "DISABLED" ELSEIF numTempls% = 3 THEN ReplaceListItem CHECKSTATES$, OPTFILES2, "ON" ELSE SetSymbolValue "IsMixed" + STR$(OPTFILES2), "MIXED" ReplaceListItem CHECKSTATES$, OPTFILES2, "MIXED" ENDIF FOR p% = OPTFILES3 TO NUMFILETYPES STEP 1 ReplaceListItem CHECKSTATES$, p%, "DISABLED" NEXT p% OPT3OPT$ = "-1" OPT4OPT$ = "-1" OPT5OPT$ = "-1" OPT6OPT$ = "-1" ELSE FOR q% = 1 TO NUMTEMPLATES STEP 1 AddListItem OPT2OPT$, "ON" NEXT q% OPT3OPT$ = "1" OPT4OPT$ = "1" OPT5OPT$ = "1" OPT6OPT$ = "1" ENDIF '$IFDEF DEBUG i% = SetSizeCheckMode(scmOnIgnore) '' could use scmOff; def = scmOnFatal '$ENDIF ''DEBUG WELCOME: IF GetSymbolValue("STF_MODE") = "NODE" THEN WELCOMENODE_LOOP: sz$ = UIStartDlg(CUIDLL$, WELCOMENODE, "FInfoDlgProc", APPHELPNOBACK, HELPPROC$) IF sz$ = "CONTINUE" THEN ' Make sure they entered a user name UIPop 1 ELSEIF sz$ = "EXIT" THEN DoAskQuitDlg GOTO WELCOMENODE_LOOP ELSE GOTO WELCOMENODE_LOOP END IF ELSE DoWelcomeDlg szUserName$, szCompanyName$ ENDIF INSTOPTS: SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "EditFocus", "END" RecalcPath SetDriveStatus INSTOPTS_LOOP: sz$ = UIStartDlg(CUIDLL$, INSTOPTS, "FInstOptsDlgProc", APPINSTHELP, HELPPROC$) opt$ = GetSymbolValue("ButtonChecked") IF sz$ = "CONTINUE" THEN newInstPath$ = GetSymbolValue("EditTextOut") instPathRC% = ValidateNewPath(DEST$, newInstPath$) IF instPathRC% > 0 THEN ChangePathText(newInstPath$) ELSEIF instPathRC% < 0 THEN GOTO INSTOPTS_LOOP END IF UIPop 1 IF opt$ = "1" THEN '' Full install FOR r% = APPFILES TO NUMFILETYPES STEP 1 IF GetListItem(CHECKSTATES$, r%) <> "DISABLED" THEN ReplaceListItem CHECKSTATES$, r%, "ON" ENDIF NEXT r% RecalcPath SetDriveStatus IF instDiskFull% = 1 OR winDiskFull% = 1 THEN GOSUB TOOBIGFULL SetSymbolValue "EditTextIn", DEST$ GOTO INSTOPTS_LOOP END IF GOTO INSTALL ELSEIF opt$ = "2" THEN '' Custom install RecalcPath SetDriveStatus GOTO CUSTINST ELSEIF opt$ = "3" THEN '' Minimum install ReplaceListItem CHECKSTATES$, APPFILES, "ON" FOR s% = APPFILES+1 TO NUMFILETYPES STEP 1 IF GetListItem(CHECKSTATES$, s%) <> "DISABLED" THEN ReplaceListItem CHECKSTATES$, s%, "OFF" ENDIF NEXT s% RecalcPath SetDriveStatus IF instDiskFull% = 1 OR winDiskFull% = 1 THEN GOSUB TOOBIGMIN SetSymbolValue "EditTextIn", DEST$ GOTO INSTOPTS_LOOP END IF GOTO INSTALL END IF ELSEIF sz$ = "REACTIVATE" THEN ' RecalcPath ' SetDriveStatus opt$ = "" GOTO INSTOPTS_LOOP ELSEIF sz$ = "EXIT" THEN DoAskQuitDlg opt$ = "" GOTO INSTOPTS_LOOP ELSEIF sz$ = "PATH" THEN newPath$ = GetSymbolValue("EditTextOut") pathDummy% = ValidateNewPath(DEST$, newPath$) IF pathDummy% < 0 THEN GOTO INSTOPTS_LOOP ELSEIF pathDummy > 0 THEN ChangePathText(newPath$) ' RecalcPath ' SetDriveStatus END IF GOTO INSTOPTS_LOOP ELSE UIPop 1 GOTO WELCOME END IF CUSTINST: SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "EditFocus", "END" CUSTINST_LOOP: sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPCUSTINSTHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN ''Install only if it will fit. newPath$ = GetSymbolValue("EditTextOut") pathDummy% = ValidateNewPath(DEST$, newPath$) IF pathDummy% < 0 THEN GOTO CUSTINST_LOOP ELSEIF pathDummy > 0 THEN ChangePathText(newPath$) END IF IF instDiskFull% = 1 OR winDiskFull% = 1 THEN GOSUB TOOBIGCUST GOTO CUSTINST_LOOP END IF UIPop 1 GOTO INSTALL ELSEIF sz$ = "PATH" THEN newPath$ = GetSymbolValue("EditTextOut") pathDummy% = ValidateNewPath(DEST$, newPath$) IF pathDummy% < 0 THEN GOTO CUSTINST_LOOP ELSEIF pathDummy > 0 THEN ChangePathText(newPath$) RecalcPath SetDriveStatus END IF GOTO CUSTINST_LOOP ELSEIF sz$ = "CHK1" THEN RecalcOptFiles APPFILES SetDriveStatus GOTO CUSTINST_LOOP ELSEIF sz$ = "CHK2" THEN RecalcOptFiles OPTFILES1 SetDriveStatus GOTO CUSTINST_LOOP ELSEIF sz$ = "CHK3" THEN RecalcOptFiles OPTFILES2 SetDriveStatus GOTO CUSTINST_LOOP ELSEIF sz$ = "CHK4" THEN RecalcOptFiles OPTFILES3 SetDriveStatus GOTO CUSTINST_LOOP ELSEIF sz$ = "CHK5" THEN RecalcOptFiles OPTFILES4 SetDriveStatus GOTO CUSTINST_LOOP ELSEIF sz$ = "CHK6" THEN RecalcOptFiles OPTFILES5 SetDriveStatus GOTO CUSTINST_LOOP ELSEIF sz$ = "CHK7" THEN RecalcOptFiles OPTFILES6 SetDriveStatus GOTO CUSTINST_LOOP ELSEIF sz$ = "BTN3" THEN GOTO OPTFILES2 ELSEIF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO CUSTINST_LOOP ELSEIF sz$ = "EXIT" THEN DoAskQuitDlg GOTO CUSTINST_LOOP ELSEIF sz$ = "BACK" THEN UIPop 1 GOTO INSTOPTS ELSE GOTO CUSTINST_LOOP END IF INSTALL: ' ' Refine location for lotusapp & shared files ' ' IF GetSymbolValue("STF_MODE") = "NODE" THEN ' Do we even need to know the LOTUSAPPDIR? ' IF (ICONBARDEST$ = "") OR (DoesDirExist(ICONBARDEST$) = 0) OR (STATUSBARDEST$ = "") OR (DoesDirExist(STATUSBARDEST$) = 0) THEN 'LOTUSAPPDRIVE: ' SetSymbolValue "EditTextIn", "" 'LOTUSAPPDRIVE_LOOP: ' ' sz$ = UIStartDlg(CUIDLL$, COMMONDIR, "FEditDlgProc", COMMONDIRHELP, HELPPROC$) ' ' IF sz$ = "CONTINUE" THEN ' newLotAppDir$ = MID$(GetSymbolValue("EditTextOut"), 1, 1)+MID$(LOTUSAPPDIR$, 2) ' IF DoesDirExist(newLotAppDir$) = 0 THEN ' DoBadPathDlg ' GOTO LOTUSAPPDRIVE_LOOP ' END IF ' LOTUSAPPDIR$ = newLotAppPath$ ' UIPop 1 ' ELSEIF sz$ = "REACTIVATE" THEN ' GOTO LOTUSAPPDRIVE_LOOP ' ELSEIF sz$ = "EXIT" THEN ' DoAskQuitDlg ' GOTO LOTUSAPPDRIVE_LOOP ' ELSE ' UIPop 1 ' GOTO INSTOPTS ' END IF ' ' IF (ICONBARDEST$ = "") OR (DoesDirExist(ICONBARDEST$) = 0) THEN ' ICONBARDEST$ = LOTUSAPPDIR$ ' ENDIF ' ' IF (STATUSBARDEST$ = "") OR (DoesDirExist(STATUSBARDEST$) = 0) THEN ' STATUSBARDEST$ = LOTUSAPPDIR$ ' ENDIF ' ENDIF ' ' ELSEIF GetSymbolValue("STF_MODE") = "NETWORK" THEN IF GetSymbolValue("STF_MODE") = "NETWORK" THEN 'LOTUSAPPDIR: ' SetSymbolValue "EditTextIn", LOTUSAPPDIR$ 'LOTUSAPPDIR_LOOP: ' sz$ = UIStartDlg(CUIDLL$, LOTUSAPPDIR, "FEditDlgProc", LOTUSAPPHELP, HELPPROC$) ' ' IF sz$ = "CONTINUE" THEN ' newLotAppPath$ = GetSymbolValue("EditTextOut") ' IF ValidateNewPath(LOTUSAPPDIR$, newLotAppPath$) < 0 THEN ' GOTO LOTUSAPPDIR_LOOP ' END IF ' LOTUSAPPDIR$ = newLotAppPath$ ' UIPop 1 ' ELSEIF sz$ = "REACTIVATE" THEN ' GOTO LOTUSAPPDIR_LOOP ' ELSEIF sz$ = "EXIT" THEN ' DoAskQuitDlg ' GOTO LOTUSAPPDIR_LOOP ' ELSE ' UIPop 1 ' GOTO INSTOPTS ' END IF ' ' ICONBARDEST$ = LOTUSAPPDIR$ ' STATUSBARDEST$ = LOTUSAPPDIR$ ' NETOPTS: SetSymbolValue "EditTextIn", LICENSEUTIL$ NETOPTS_LOOP: sz$ = UIStartDlg(CUIDLL$, NETINSTOPTS, "FEditDlgProc", APPNETHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN newLicUtilPath$ = GetSymbolValue("EditTextOut") IF ValidateNewPath(LICENSEUTIL$, newLicUtilPath$) < 0 THEN GOTO NETOPTS_LOOP END IF LICENSEUTIL$ = newLicUtilPath$ UIPop 1 ELSEIF sz$ = "REACTIVATE" THEN GOTO NETOPTS_LOOP ELSEIF sz$ = "EXIT" THEN DoAskQuitDlg GOTO NETOPTS_LOOP ELSE UIPop 1 GOTO INSTOPTS END IF NETOPTS2: SetSymbolValue "EditTextIn", LICENSEDEST$ NETOPTS2_LOOP: sz$ = UIStartDlg(CUIDLL$, NETLICENSEOPTS, "FEditDlgProc", APPLICENSEHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN newLicPath$ = GetSymbolValue("EditTextOut") IF ValidateNewPath(LICENSEDEST$, newLicPath$) < 0 THEN GOTO NETOPTS2_LOOP END IF IF CountDirs(newLicPath$) <> 1 THEN DoBadPathDlg GOTO NETOPTS2_LOOP END IF LICENSEDEST$ = newLicPath$ UIPop 1 ELSEIF sz$ = "REACTIVATE" THEN GOTO NETOPTS2_LOOP ELSEIF sz$ = "EXIT" THEN DoAskQuitDlg GOTO NETOPTS2_LOOP ELSE UIPop 1 GOTO NETOPTS END IF ENDIF ClearCopyList FOR t% = APPFILES TO NUMFILETYPES STEP 1 AddOptFilesToCopyList t% CreateOptDir t%, DEST$ NEXT t% '' Grab important initialization information from the APPROACH.INI AppIni1$ = GetWindowsDir AppIni$ = AppIni1$+"APPROACH.INI" IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN oldParadoxUserName$ = GetIniKeyString(AppIni$, "Approach", "sParadoxUserName") oldParadoxNetFilePath$ = GetIniKeyString(AppIni$, "Approach", "sParadoxNetFilePath") olddBaseFileSharingMethod$ = GetIniKeyString(AppIni$, "Approach", "sdBaseFileSharingMethod") oldSQLReadOnly$ = GetIniKeyString(AppIni$, "SQL", "ReadOnly") ELSE oldParadoxUserName$ = "" oldParadoxNetFilePath$ = "" olddBaseFileSharingMethod$ = "" oldSQLReadOnly$ = "" END IF SetRestartDir GetSymbolValue("STF_CWDDIR") AddToBillboardList CUIDLL$, BILLBOARD_REG, "FBillboardDlgProc", 50 AddToBillboardList CUIDLL$, BILLBOARD_2, "FBillboardDlgProc", 50 AddToBillboardList CUIDLL$, BILLBOARD_3, "FBillboardDlgProc", 50 AddToBillboardList CUIDLL$, BILLBOARD_4, "FBillboardDlgProc", 50 CopyFilesInCopyList ClearBillboardList '' Don't version stamp or update INI or setup progman groups or register unless we're '' installing APPROACH.EXE IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN '' Version stamp IF GetSymbolValue("STF_MODE") <> "NODE" THEN IF szCompanyName$ = "" THEN szCompanyName$ = " " ENDIF szData$ = CHR$(LEN(szUserName$)) + szUserName$ + CHR$(LEN(szCompanyName$)) + szCompanyName$ StampResource "Approach Files", "Approach Executable", DEST$, 6, 51, szData$, LEN(szData) ENDIF IF GetSymbolValue("STF_MODE") <> "NETWORK" THEN '' Initialize uninitialized information into APPROACH.INI IF oldParadoxUserName$ <> "" THEN CreateIniKeyValue AppIni$, "Approach", "sParadoxUserName", oldParadoxUserName$, cmoNone END IF IF oldParadoxNetFilePath$ <> "" THEN CreateIniKeyValue AppIni$, "Approach", "sParadoxNetFilePath", oldParadoxNetFilePath$, cmoNone END IF IF olddBaseFileSharingMethod$ <> "" THEN CreateIniKeyValue AppIni$, "Approach", "sdBaseFileSharingMethod", olddBaseFileSharingMethod$, cmoNone END IF IF oldSQLReadOnly$ <> "" THEN CreateIniKeyValue AppIni$, "SQL", "ReadOnly", oldSQLReadOnly$, cmoNone END IF '' Change sParadoxSort to match current language IF GetIniKeyString(AppIni$, "Approach", "sParadoxSort") = "" THEN language$ = UCASE$(GetIniKeyString("WIN.INI", "intl", "sLanguage")) SELECT CASE language$ CASE "ENU" CreateIniKeyValue AppIni$, "Approach", "sParadoxSort", "ASCII", cmoNone CASE "NOR", "DAN" CreateIniKeyValue AppIni$, "Approach", "sParadoxSort", "NORDAN", cmoNone CASE "SVE", "FIN" CreateIniKeyValue AppIni$, "Approach", "sParadoxSort", "SWEDFIN", cmoNone CASE ELSE CreateIniKeyValue AppIni$, "Approach", "sParadoxSort", "INTL", cmoNone END SELECT END IF '' icon path CreateIniKeyValue AppIni$, "SmartIcons", "IconPath", DEST$+"\", cmoNone '' Approach LOTUS.INI item CreateIniKeyValue LotIni$, "Lotus Applications", "APPROACH", DEST$+"\APPROACH.EXE Lotus Approach for Windows", cmoNone '' Icon bar path & status bar path ' CreateIniKeyValue LotIni$, "Icon Palette", "Program Path", ICONBARDEST$, cmoNone ' CreateIniKeyValue LotIni$, "Status Bar", "Program Path", STATUSBARDEST$, cmoNone ' ' IF (STATUSBARDEST$ = LOTUSAPPDIR$) OR (ICONBARDEST$ = LOTUSAPPDIR$) THEN ' IF GetSymbolValue("STF_MODE") = "NODE" THEN ' CreateIniKeyValue LotIni$, "Lotus Applications", "Net Common Directory", LOTUSAPPDIR$, cmoNone ' ELSE ' CreateIniKeyValue LotIni$, "Lotus Applications", "Common Directory", LOTUSAPPDIR$, cmoNone ' END IF ' END IF ' ELSE ' CreateIniKeyValue Dest$+"INSTALL.INI", "Save Section", "Server Common Directory", LOTUSAPPDIR$, cmoNone END IF '' Create progman groups IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN Lotus$ = GetString(LOTUSAPPS_NAME) Approach$ = GetString(APPROACH_NAME) CreateProgmanGroup Lotus$, "", cmoNone ShowProgmanGroup Lotus$, 1, cmoNone IF GetSymbolValue("STF_MODE") = "NETWORK" THEN CreateProgmanItem Lotus$, GetString(LICENSER_NAME), MakePath(LICENSEUTIL$,"licenser.exe"), "", cmoOverwrite ELSEIF GetSymbolValue("STF_MODE") = "NODE" THEN CreateProgmanItem Lotus$, Approach$, MakePath(GetSymbolValue("STF_SRCDIR"),"approach.exe"), ",,,,"+DEST$, cmoOverwrite CreateProgmanItem Lotus$, GetString(APPROACH_README), "write.exe "+MakePath(GetSymbolValue("STF_SRCDIR"),"readme.wri"), "", cmoOverwrite ELSE CreateProgmanItem Lotus$, Approach$, MakePath(DEST$,"approach.exe"), "", cmoOverwrite CreateProgmanItem Lotus$, GetString(APPROACH_README), "write.exe "+MakePath(DEST$,"readme.wri"), "", cmoOverwrite END IF END IF '' Register Approach -- delete any previous registration information, and add current info. REGISTER: DeleteRegKey ".vew" DeleteRegKey "ApproachView" CreateRegKey ".vew" CreateRegKeyValue ".vew", "ApproachView" CreateRegKey "ApproachView" CreateRegKeyValue "ApproachView", "Approach View File" CreateRegKeyValue "ApproachView\shell\print\command", MakePath(DEST$,"approach.exe")+" /p %1" CreateRegKeyValue "ApproachView\shell\open\command", MakePath(DEST$,"approach.exe")+" %1" END IF ' Windows files WINFILES: IF RestartListEmpty() = 0 THEN IF (GetWindowsMajorVersion() = 3) AND (GetWindowsMinorVersion() = 0) THEN i% = DoMsgBox(GetString(ERROR_INUSE), GetString(STANDARD_CAPTION), MB_OK+MB_ICONHAND) ELSE RESTART: i% = DoMsgBox(GetString(ERROR_RESTART), GetString(STANDARD_CAPTION), MB_YESNO+MB_ICONHAND) IF i% = IDYES THEN i% = ExitExecRestart() ' If the installer is still running, there's a problem. Windows may have already told them. GOTO RESTART END IF END IF END IF QUIT: ON ERROR GOTO ERRQUIT IF ERR = 0 THEN IF GetSymbolValue("STF_MODE") = "NETWORK" THEN dlg% = EXITNETWORKSUCCESS ELSE dlg% = EXITSUCCESS ENDIF ELSEIF ERR = STFQUIT THEN dlg% = EXITQUIT ELSE dlg% = EXITFAILURE END IF QUITL1: sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo1DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO QUITL1 END IF UIPop 1 END ERRQUIT: i% = DoMsgBox(GetString(ERROR_GENERAL), GetString(STANDARD_CAPTION), MB_OK+MB_TASKMODAL+MB_ICONHAND) END OPTFILES2: newopt$ = "CheckItemsOut" sz$ = UIStartDlg(CUIDLL$, TEMPLATEOPTS, "FTemplateOptionsDlgProc", APPTEMPLATEHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN UIPop 1 IF CompareLists(newopt$, OPT2OPT$) <> 0 THEN CopyList OPT2OPT$, newopt$ IF (GetListItem(OPT2OPT$, TEMPLATEREADME) = "OFF") AND (GetListItem(OPT2OPT$, SMALLBIZ) = "OFF") AND (GetListItem(OPT2OPT$, LARGEBIZ) = "OFF") THEN RemoveSymbol "IsMixed" + STR$(OPTFILES2) ReplaceListItem CHECKSTATES$, OPTFILES2, "OFF" ELSEIF (GetListItem(OPT2OPT$, TEMPLATEREADME) = "ON") AND (GetListItem(OPT2OPT$, SMALLBIZ) = "ON") AND (GetListItem(OPT2OPT$, LARGEBIZ) = "ON") THEN RemoveSymbol "IsMixed" + STR$(OPTFILES2) ReplaceListItem CHECKSTATES$, OPTFILES2, "ON" ELSE SetSymbolValue "IsMixed" + STR$(OPTFILES2), "MIXED" ReplaceListItem CHECKSTATES$, OPTFILES2, "MIXED" END IF RecalcOptFiles OPTFILES2 SetDriveStatus END IF GOTO CUSTINST ELSEIF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO OPTFILES2 ELSEIF sz$ = "BUTTON" THEN IF CompareLists(newopt$, OPT2OPT$) <> 0 THEN CopyList OPT2OPT$, newopt$ IF (GetListItem(OPT2OPT$, TEMPLATEREADME) = "OFF") AND (GetListItem(OPT2OPT$, SMALLBIZ) = "OFF") AND (GetListItem(OPT2OPT$, LARGEBIZ) = "OFF") THEN RemoveSymbol "IsMixed" + STR$(OPTFILES2) ReplaceListItem CHECKSTATES$, OPTFILES2, "OFF" ELSEIF (GetListItem(OPT2OPT$, TEMPLATEREADME) = "ON") AND (GetListItem(OPT2OPT$, SMALLBIZ) = "ON") AND (GetListItem(OPT2OPT$, LARGEBIZ) = "ON") THEN RemoveSymbol "IsMixed" + STR$(OPTFILES2) ReplaceListItem CHECKSTATES$, OPTFILES2, "ON" ELSE SetSymbolValue "IsMixed" + STR$(OPTFILES2), "MIXED" ReplaceListItem CHECKSTATES$, OPTFILES2, "MIXED" END IF RecalcOptFiles OPTFILES2 SetDriveStatus END IF GOTO OPTFILES2 ELSEIF sz$ = "EXIT" THEN DoAskQuitDlg GOTO OPTFILES2 ELSE UIPop 1 GOTO CUSTINST_LOOP END IF TOOBIGCUST: sz$ = UIStartDlg(CUIDLL$, TOOBIGCUST, "FInfo1DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO TOOBIGCUST END IF UIPop 1 RETURN TOOBIGFULL: sz$ = UIStartDlg(CUIDLL$, TOOBIGFULL, "FInfo1DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO TOOBIGFULL END IF UIPop 1 RETURN TOOBIGMIN: sz$ = UIStartDlg(CUIDLL$, TOOBIGMIN, "FInfo1DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO TOOBIGMIN END IF UIPop 1 RETURN SUB CreateOptDir (ftype%, DEST$) STATIC IF (GetListItem(CHECKSTATES$, ftype%) <> "OFF") AND (GetListItem(CHECKSTATES$, ftype%) <> "DISABLED") THEN SrcDir$ = GetSymbolValue("STF_SRCDIR") CreateDir DEST$, cmoNone IF (ftype% = APPFILES) THEN ' IF (GetSymbolValue("STF_MODE") <> "NODE") THEN ' CreateDir LOTUSAPPDIR$, cmoNone ' ENDIF IF (GetSymbolValue("STF_MODE") = "NETWORK") THEN IF (FValidFATDir(LICENSEDEST$+"\APPROACH.V21") = 0) THEN CreateDir LICENSEDEST$+"APPROACH.V21", cmoNone ELSE CreateDir LICENSEDEST$+"\APPROACH.V21", cmoNone ENDIF CreateDir LICENSEUTIL$, cmoNone ENDIF ELSEIF ftype% = OPTFILES1 THEN CreateDir DEST$+"\"+GetString(EXAMPLES_DIR), cmoNone ELSEIF ftype% = OPTFILES2 THEN IF (GetListItem(OPT2OPT$, TEMPLATEREADME) = "ON") OR (GetListItem(OPT2OPT$, SMALLBIZ) = "ON") OR (GetListItem(OPT2OPT$, LARGEBIZ) = "ON") THEN CreateDir DEST$+"\"+GetString(TEMPLATES_DIR), cmoNone ENDIF IF (GetListItem(OPT2OPT$, SMALLBIZ) = "ON") THEN CreateDir DEST$+"\"+GetString(TEMPLATES_DIR)+"\"+GetString(SMALLBIZ_DIR), cmoNone ENDIF IF (GetListItem(OPT2OPT$, LARGEBIZ) = "ON") THEN CreateDir DEST$+"\"+GetString(TEMPLATES_DIR)+"\"+GetString(LARGEBIZ_DIR), cmoNone ENDIF END IF SrcDir$ = "" END IF END SUB '** '** 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%) <> "OFF") AND (GetListItem(CHECKSTATES$, ftype%) <> "DISABLED") THEN SrcDir$ = GetSymbolValue("STF_SRCDIR") IF ftype% = APPFILES THEN ' HACK ALERT! We need to copy shell.dll and ver.dll FIRST, so that we can be ' sure they they've actually been copied. We will then use them during the ' following lines. IF GetSymbolValue("STF_MODE") = "NETWORK" THEN AddSectionFilesToCopyList "Ver/Shell", SrcDir$, DEST$ ELSE IF IsWindowsShared() = 0 THEN AddSectionFilesToCopyList "Ver/Shell", SrcDir$, GetWindowsSysDir() ELSE AddSectionFilesToCopyList "Ver/Shell", SrcDir$, GetWindowsDir() ENDIF ENDIF AddSectionFilesToCopyList "Approach Files", SrcDir$, DEST$ IF GetSymbolValue("STF_MODE") = "NODE" THEN AddSectionFilesToCopyList "Design Iconbars", SrcDir$+"ICONS\DESGNICO\", DEST$+"\ICONS\DESGNICO" AddSectionFilesToCopyList "Browse Iconbars", SrcDir$+"ICONS\BROWSICO\", DEST$+"\ICONS\BROWSICO" AddSectionFilesToCopyList "Find Iconbars", SrcDir$+"ICONS\FINDICO\", DEST$+"\ICONS\FINDICO" AddSectionFilesToCopyList "Preview Iconbars", SrcDir$+"ICONS\PREVICO\", DEST$+"\ICONS\PREVICO" ELSE AddSectionFilesToCopyList "Lotus Icon Bar Files", SrcDir$, DEST$ AddSectionFilesToCopyList "Lotus Status Bar Files", SrcDir$, DEST$ AddSectionFilesToCopyList "Design Iconbars", SrcDir, DEST$+"\ICONS\DESGNICO" AddSectionFilesToCopyList "Browse Iconbars", SrcDir, DEST$+"\ICONS\BROWSICO" AddSectionFilesToCopyList "Find Iconbars", SrcDir, DEST$+"\ICONS\FINDICO" AddSectionFilesToCopyList "Preview Iconbars", SrcDir, DEST$+"\ICONS\PREVICO" ENDIF ' IF (GetSymbolValue("STF_MODE") <> "NODE") OR (ICONBARDEST$ <> LOTUSAPPDIR$) ' AddSectionFilesToCopyList "Lotus Icon Bar Files", SrcDir$, ICONBARDEST$ ' ENDIF ' IF (GetSymbolValue("STF_MODE") <> "NODE") OR (STATUSBARDEST$ <> LOTUSAPPDIR$) ' AddSectionFilesToCopyList "Lotus Status Bar Files", SrcDir$, STATUSBARDEST$ ' ENDIF IF GetSymbolValue("STF_MODE") = "NETWORK" THEN AddSectionFilesToCopyList "Approach Initialization", SrcDir$, DEST$ AddSectionFilesToCopyList "Windows Help", SrcDir$, DEST$ AddSectionFilesToCopyList "Windows", SrcDir$, DEST$ AddSectionFilesToCopyList "Installation", SrcDir$, DEST$ AddSectionFilesToCopyList "Lotus Licenser Files", SrcDir$, LICENSEUTIL$ ELSE AddSectionFilesToCopyList "Approach Initialization", SrcDir$, GetWindowsDir() AddSectionFilesToCopyList "Windows Help", SrcDir$, GetWindowsDir() IF IsWindowsShared() = 0 THEN AddSectionFilesToCopyList "Windows", SrcDir$, GetWindowsSysDir() ELSE AddSectionFilesToCopyList "Windows", SrcDir$, GetWindowsDir() ENDIF ENDIF IF GetSymbolValue("STF_MODE") = "NORMAL" THEN AddSectionFilesToCopyList "Workstation File", SrcDir$, DEST$ ENDIF ELSEIF ftype% = OPTFILES1 THEN IF GetSymbolValue("STF_MODE") = "NODE" THEN AddSectionFilesToCopyList "Tutorial", SrcDir$+GetString(EXAMPLES_DIR), DEST$+"\"+GetString(EXAMPLES_DIR) ELSE AddSectionFilesToCopyList "Tutorial", SrcDir$, DEST$+"\"+GetString(EXAMPLES_DIR) END IF MakeListFromSectionKeys "Dummy", "Tutorial" IF GetListLength("Dummy") = 0 THEN ReplaceListItem CHECKSTATES$, ftype%, "DISABLED" ENDIF ELSEIF ftype% = OPTFILES2 THEN IF (GetListItem(CHECKSTATES$, ftype%) = "ON") OR (GetListItem(OPT2OPT$, TEMPLATEREADME) = "ON") THEN IF GetSymbolValue("STF_MODE") = "NODE" THEN AddSectionFilesToCopyList "Template Readme", SrcDir$+GetString(TEMPLATES_DIR), DEST$+"\"+GetString(TEMPLATES_DIR) ELSE AddSectionFilesToCopyList "Template Readme", SrcDir$, DEST$+"\"+GetString(TEMPLATES_DIR) ENDIF MakeListFromSectionKeys "Dummy", "Template Readme" IF GetListLength("Dummy") = 0 THEN ReplaceListItem OPT2OPT$, TEMPLATEREADME, "DISABLED" ENDIF ENDIF IF (GetListItem(CHECKSTATES$, ftype%) = "ON") OR (GetListItem(OPT2OPT$, SMALLBIZ) = "ON") THEN IF GetSymbolValue("STF_MODE") = "NODE" THEN AddSectionFilesToCopyList "Smallbiz Templates", SrcDir$+GetString(TEMPLATES_DIR)+"\"+GetString(SMALLBIZ_DIR), DEST$+"\"+GetString(TEMPLATES_DIR)+"\"+GetString(SMALLBIZ_DIR) ELSE AddSectionFilesToCopyList "Smallbiz Templates", SrcDir$, DEST$+"\"+GetString(TEMPLATES_DIR)+"\"+GetString(SMALLBIZ_DIR) ENDIF MakeListFromSectionKeys "Dummy", "Smallbiz Templates" IF GetListLength("Dummy") = 0 THEN ReplaceListItem OPT2OPT$, SMALLBIZ, "DISABLED" ENDIF ENDIF IF (GetListItem(CHECKSTATES$, ftype%) = "ON") OR (GetListItem(OPT2OPT$, LARGEBIZ) = "ON") THEN IF GetSymbolValue("STF_MODE") = "NODE" THEN AddSectionFilesToCopyList "Largebiz Templates", SrcDir$+GetString(TEMPLATES_DIR)+"\"+GetString(LARGEBIZ_DIR), DEST$+"\"+GetString(TEMPLATES_DIR)+"\"+GetString(LARGEBIZ_DIR) ELSE AddSectionFilesToCopyList "Largebiz Templates", SrcDir$, DEST$+"\"+GetString(TEMPLATES_DIR)+"\"+GetString(LARGEBIZ_DIR) ENDIF MakeListFromSectionKeys "Dummy", "Largebiz Templates" IF GetListLength("Dummy") = 0 THEN ReplaceListItem OPT2OPT$, LARGEBIZ, "DISABLED" ENDIF ENDIF IF (GetListItem(OPT2OPT$, TEMPLATEREADME) = "DISABLED") AND (GetListItem(OPT2OPT$, SMALLBIZ) = "DISABLED") AND (GetListItem(OPT2OPT$, LARGEBIZ) = "DISABLED") THEN ReplaceListItem CHECKSTATES$, ftype%, "DISABLED" ENDIF ELSEIF ftype% = OPTFILES3 THEN AddSectionFilesToCopyList "Paradox", SrcDir$, DEST$ MakeListFromSectionKeys "Dummy", "Paradox" IF GetListLength("Dummy") = 0 THEN ReplaceListItem CHECKSTATES$, ftype%, "DISABLED" ENDIF ELSEIF ftype% = OPTFILES4 THEN AddSectionFilesToCopyList "Oracle", SrcDir$, DEST$ MakeListFromSectionKeys "Dummy", "Oracle" IF GetListLength("Dummy") = 0 THEN ReplaceListItem CHECKSTATES$, ftype%, "DISABLED" ENDIF ELSEIF ftype% = OPTFILES5 THEN AddSectionFilesToCopyList "SQL Server", SrcDir$, DEST$ MakeListFromSectionKeys "Dummy", "SQL Server" IF GetListLength("Dummy") = 0 THEN ReplaceListItem CHECKSTATES$, ftype%, "DISABLED" ENDIF ELSEIF ftype% = OPTFILES6 THEN AddSectionFilesToCopyList "ODBC", SrcDir$, DEST$ MakeListFromSectionKeys "Dummy", "ODBC" IF GetListLength("Dummy") = 0 THEN ReplaceListItem CHECKSTATES$, ftype%, "DISABLED" ENDIF 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, OPTFILES3, OPTFILES4 '** 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$ ELSEIF ftype% = OPTFILES3 THEN ListSym$ = OPT3NEEDS$ ELSEIF ftype% = OPTFILES4 THEN ListSym$ = OPT4NEEDS$ ELSEIF ftype% = OPTFILES5 THEN ListSym$ = OPT5NEEDS$ ELSEIF ftype% = OPTFILES6 THEN ListSym$ = OPT6NEEDS$ END IF StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "") cost& = 0 FOR u% = 1 TO 26 STEP 1 cost& = cost& + VAL(GetListItem(ListSym$, u%)) NEXT u% ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + GetString(KB_STRING) 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() FOR v% = APPFILES TO NUMFILETYPES STEP 1 RecalcOptFiles v% NEXT v% RestoreCursor CursorSave% END SUB '** '** Purpose: '** Sets drive status info according to latest disk space calcs. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* SUB SetDriveStatus STATIC k$ = GetString(KB_STRING) 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%)) + VAL(GetListItem(OPT3NEEDS$, ndrive%)) + VAL(GetListItem(OPT4NEEDS$, ndrive%)) + VAL(GetListItem(OPT5NEEDS$, ndrive%)) cost& = cost& + VAL(GetListItem(OPT6NEEDS$, ndrive%)) free& = GetFreeSpaceForDrive(drive$) IF cost& > free& THEN instDiskFull% = 1 ELSE instDiskFull% = 0 ENDIF 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%)) + VAL(GetListItem(OPT3NEEDS$, ndrive%)) + VAL(GetListItem(OPT4NEEDS$, ndrive%)) + VAL(GetListItem(OPT5NEEDS$, ndrive%)) cost& = cost& + VAL(GetListItem(OPT6NEEDS$, ndrive%)) IF cost& = 0 THEN winDiskFull% = 0 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$ IF cost& > free& THEN winDiskFull% = 1 ELSE winDiskFull% = 0 ENDIF 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 '** '** Purpose: '** Compares two lists. '** Arguments: '** szList1$, szList2$ - List names '** Returns: '** The index where the lists differ, or 0 if they are the same. '************************************************************************* FUNCTION CompareLists(szList1$, szList2$) STATIC AS INTEGER list1Len% = GetListLength(szList1) list2Len% = GetListLength(szList2) IF (list1Len% < list2Len%) THEN CompareLists = list1Len% + 1 ELSEIF (list1Len% > list2Len%) THEN CompareLists = list2Len% + 1 ELSE i% = list1Len WHILE GetListItem(szList1$, i%) = GetListItem(szList2$, i%) i% = i% - 1 IF i% = 0 THEN EXIT WHILE END IF WEND CompareLists = i% END IF END FUNCTION '** '** Purpose: '** Copies szList2 into szList1. '** Arguments: '** szList1$, szList2$ - List names '************************************************************************* SUB CopyList(szList1$, szList2$) STATIC RemoveSymbol(szList1) FOR w% = 1 TO GetListLength(szList2) STEP 1 AddListItem szList1$, GetListItem(szList2$, w%) NEXT w% END SUB SUB DoBadPathDlg STATIC sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo1DlgProc", 0, "") WHILE sz$ = "REACTIVATE" RecalcPath SetDriveStatus sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo1DlgProc", 0, "") WEND UIPop 1 END SUB SUB DoAskQuitDlg STATIC sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "") WHILE sz$ = "REACTIVATE" sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "") WEND IF sz$ = "EXIT" THEN UIPopAll ERROR STFQUIT ELSE UIPop 1 END IF END SUB SUB DoWelcomeDlg(szUserName$, szCompanyName$) STATIC WELCOME_LOOP: SetSymbolValue "WelcomeUserName", szUserName$ SetSymbolValue "WelcomeCompanyName", szCompanyName$ sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELPNOBACK, HELPPROC$) IF sz$ = "CONTINUE" THEN ' Make sure they entered a user name IF LEN(RTRIM$(LTRIM$(GetSymbolValue("WelcomeUserName")))) = 0 THEN CDBADNAME_LOOP: sz2$ = UIStartDlg(CUIDLL$, CDBADNAME, "FInfo1DlgProc", 0, "") IF sz2$ = "REACTIVATE" THEN GOTO CDBADNAME_LOOP END IF UIPop 1 GOTO WELCOME_LOOP ELSE VERIFY_NAMES: sz2$ = UIStartDlg(CUIDLL$, CDCONFIRMINFO, "FInfo0DlgProc", APPHELPYESNO, HELPPROC$) IF sz2$ = "CONTINUE" THEN szUserName$ = RTRIM$(LTRIM$(GetSymbolValue("WelcomeUserName"))) szCompanyName$ = RTRIM$(LTRIM$(GetSymbolValue("WelcomeCompanyName"))) UIPop 2 ELSEIF sz2$ = "BACK" THEN UIPop 1 GOTO WELCOME_LOOP ELSE GOTO VERIFY_NAMES END IF END IF ELSEIF sz$ = "EXIT" THEN DoAskQuitDlg GOTO WELCOME_LOOP ELSE GOTO WELCOME_LOOP END IF END SUB FUNCTION ValidateNewPath(oldPath$, newPath$) STATIC AS INTEGER ''Validate new path. IF (FValidFATDir(newPath$) = 0) OR (OurIsDirWritable(newPath$) = 0) THEN DoBadPathDlg ValidateNewPath% = -1 ELSE IF (oldPath$ <> newPath$) AND (oldPath$ <> newPath$+"\") AND (oldPath$+"\" <> newPath$) THEN ValidateNewPath% = 1 ELSE ValidateNewPath% = 0 END IF END IF END FUNCTION SUB ChangePathText(newPath$) STATIC DEST$ = newPath$ ''Truncate display if too long. IF LEN(newPath$) > 23 THEN ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..." ELSE ReplaceListItem DRIVETEXT$, 7, DEST$ END IF END SUB FUNCTION OurIsDirWritable(newPath$) STATIC AS INTEGER SPLITPATH newPath$, drive$, dir$, filename$, ext$ ' Order very important here IF IsDirWritable(newPath$) <> 0 THEN OurIsDirWritable% = 1 ' For some reason, the FValidDrive must not be in the same OR clause as IsDriveValid below ELSEIF FValidDrive(drive$) = 0 THEN OurIsDirWritable% = 0 ELSEIF (DoesDirExist(newPath$) <> 0) OR (DoesFileExist(newPath$, femExists) <> 0) OR (IsDriveValid(drive$) = 0) THEN OurIsDirWritable% = 0 ELSE WRITE_LOOP: oldDir$ = dir$ IF (IsDirWritable(drive$ + dir$) <> 0) THEN OurIsDirWritable% = 1 ELSE dir$ = MID$(dir$, 1, LEN(dir$)-1) IF dir$ <> oldDir$ THEN GOTO WRITE_LOOP ELSE OurIsDirWritable% = 0 ENDIF ENDIF ENDIF END FUNCTION