home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a087 / 1.ddi / FOXPROW.MS_ / FOXPROW.bin
Encoding:
Text File  |  1994-02-02  |  46.6 KB  |  1,534 lines

  1. '**************************************************************************
  2. '*                      FoxPro for Windows Setup
  3. '**************************************************************************
  4.  
  5. '$INCLUDE 'setup.inc'
  6.  
  7. '**************************************************************************
  8. '*                       Localize these strings
  9. '**************************************************************************
  10.  
  11. CONST C_COPYRIGHT$    = "(c) 1985 - 1993 Microsoft Corporation"
  12. CONST C_NAME$        = "Microsoft FoxPro for Windows"        ''Product name used in setup copyright.
  13. CONST DESCRIP$        = "FoxPro for Windows"                    ''Program Manager item name.
  14. CONST LASTRESORT$    = "Setup was damaged.  Please call Microsoft product support."  ''Worst case error message.
  15. CONST LASTTITLE$    = "Setup Error"                            ''Title of worst case error box.
  16. CONST NOGROUP$        = "- NONE -"                            ''Group name which means don't create a group.
  17. CONST QADES$        = "FoxPro Q&A"                          ''PM Description.
  18. CONST READMEDES$    = "FoxPro Readme"                       ''PM Description.
  19. CONST TITLE$        = "Microsoft FoxPro for Windows Setup"    ''Main window title.
  20.  
  21. '**************************************************************************
  22.  
  23. DECLARE FUNCTION GetProgMgrGrps LIB "mscuistf.dll" AS INTEGER
  24. DECLARE FUNCTION QuietConfigUpdate LIB "mscuistf.dll" AS INTEGER
  25. DECLARE FUNCTION CanFindConfigSys LIB "mscuistf.dll" AS INTEGER
  26. DECLARE FUNCTION CalcListSize LIB "mscuistf.dll" AS LONG
  27. DECLARE FUNCTION WindowWidth LIB "mscuistf.dll" (iWind%) AS INTEGER
  28. DECLARE FUNCTION WindowHeight LIB "mscuistf.dll" (iWind%) AS INTEGER
  29. DECLARE FUNCTION AddLabelRecords LIB "mscuistf.dll" (foxuser$, label$) AS INTEGER
  30. DECLARE FUNCTION UpdateConfigFPW LIB "mscuistf.dll" (dest$, foxprowcfg$) AS INTEGER
  31. DECLARE FUNCTION FPWSetDate LIB "mscuistf.dll" (f$) AS INTEGER
  32. DECLARE FUNCTION FPWSetCurrencySym LIB "mscuistf.dll" (f$) AS INTEGER
  33. DECLARE FUNCTION FPWSetCurrencyRight LIB "mscuistf.dll" (i%) AS INTEGER
  34. DECLARE FUNCTION FPWSetKeyComp LIB "mscuistf.dll" (f$) AS INTEGER
  35. DECLARE FUNCTION FPWSetCodepage LIB "mscuistf.dll" (f$) AS INTEGER
  36. DECLARE FUNCTION FPWSetCollate LIB "mscuistf.dll" (f$) AS INTEGER
  37. DECLARE FUNCTION FPWSetHours24 LIB "mscuistf.dll" (i%) AS INTEGER
  38.  
  39. ''Local functions and procedures.
  40. DECLARE SUB AddLabels
  41. DECLARE SUB AddToPM
  42. DECLARE SUB CheckDiskSpace
  43. DECLARE SUB ConfirmQuit
  44. DECLARE SUB DoRestart
  45. DECLARE SUB Install
  46. DECLARE SUB Get20Compatibility
  47. DECLARE SUB GetAdminPathInfo
  48. DECLARE SUB GetPathInfo
  49. DECLARE SUB GetPathGrpInfo
  50. DECLARE SUB GetUserAll
  51. DECLARE SUB GetUserInfo
  52. DECLARE SUB SetSectionSize
  53. DECLARE SUB UpdateConfig
  54. DECLARE SUB UpdateFPConfig
  55. DECLARE SUB UpdateINI
  56. DECLARE SUB WarnBadName
  57. DECLARE SUB WarnBadOrg
  58.  
  59. DECLARE FUNCTION CheckNoDosProd () AS STRING
  60. DECLARE FUNCTION CheckNoWinProd () AS STRING
  61. DECLARE FUNCTION ConfirmNameOrg () AS STRING
  62. DECLARE FUNCTION EnoughSpace () AS STRING
  63. DECLARE FUNCTION GetInstallOptions () AS STRING
  64. DECLARE FUNCTION GetInstallType () AS STRING
  65. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  66. DECLARE FUNCTION SetInstall (szType$) AS STRING
  67. DECLARE FUNCTION SectionSize (szSection$) AS STRING
  68. DECLARE FUNCTION WarnBadPath (dlg%) AS STRING
  69.  
  70.  
  71. ''Dialog ID's
  72. CONST ASKQUIT           = 200           ''Is the user certain they want to quit?
  73. CONST BADINI            = 4500            ''We couldn't read setup.ini.
  74. CONST BADMODE           = 2100          ''We aren't in Enhanced mode.
  75. CONST BADNAME           = 7700          ''The user has to enter a name.
  76. CONST BADPATH           = 6400          ''The target directory can't be written to.
  77. CONST BADPATHTOOLS      = 4400          ''The MSDEST$ directory is bad.
  78. CONST BILLBOARD         = 20000         ''Used to hold billboard bitmaps.
  79. CONST CANTFIND          = 3900          ''Can't find config.sys.
  80. CONST CANTQUIT          = 2300          ''Couldn't exit Windows.
  81. CONST CANTUPDATE        = 3500          ''Coulsn't update config.sys.
  82. CONST COMPATIBILITY     = 1600          ''Install aoptional config.fpw, etc.
  83. CONST CONFIRMINFO       = 7300          ''Is the name and organization ok?
  84. CONST CUSTOMINST        = 1100          ''Get type of installation.
  85. CONST DESTPATHADMIN     = 4300          ''Get the FoxPro and tools directories.
  86. CONST DESTPATH          = 300           ''Get target directory without a group.
  87. CONST DESTPATHGROUP     = 1000          ''Get target directory and group.
  88. CONST DICTIONARY        = 4100          ''Ask the user what dictionary to use.
  89. CONST DISKFULL          = 1700          ''Not enough disk space is available.
  90. CONST DISKWINFULL       = 3100          ''Not enough space on Windows drive.
  91. CONST DOSPRODUCT        = 1900          ''A DOS FoxPro is in the target directory.
  92. CONST DRIVEMAP            = 4600            ''Add-ons are mapped to a different drive than FP.
  93. CONST EDITCONFIG        = 2700          ''Review changes to config.sys
  94. CONST EDITMODE          = 3800          ''Select method of updating config.sys
  95. CONST EDITOK            = 3700          ''We updated config.sys
  96. CONST EXITADMINOK       = 2500          ''We finished ok from admin type install.
  97. CONST EXITFAILURE       = 400           ''We are quiting due to an error.
  98. CONST EXITNOICON        = 2800          ''We installed, but don't have an icon.
  99. CONST EXITSUCCESS       = 700           ''We have successfully finished.
  100. CONST EXITQUIT          = 600           ''We were forced to quit by the user.
  101. CONST GETNAMEORG        = 1300          ''Get the user's name and organization.
  102. CONST NOT386            = 1800          ''Machine is less than a 386SX.
  103. CONST OPTIONS           = 800           ''Basic type of installation.
  104. CONST OPTSERVER         = 2900          ''Type of installation including server.
  105. CONST OPTCLIENT         = 3000          ''Type of installation including workstation.
  106. CONST REINSTALL         = 2000          ''Copy disincentive message.
  107. CONST RESTARTWIN        = 2200          ''Warn before restarting windows.
  108. CONST WAITINI           = 2400          ''Wait while updating INI files.
  109. CONST WAITSPACE         = 1500          ''Wait while getting free disk space.
  110. CONST WINPRODUCT        = 4200          ''Overwrite another copy of the executable?
  111.  
  112. CONST REQFILES          = 1
  113. CONST WINHELP           = 2
  114. CONST FPHELP            = 3
  115. CONST TUTORIAL          = 4
  116. CONST FOXAPP            = 6
  117. CONST EXAMPLES          = 5
  118. CONST FOXDOC            = 7
  119. CONST MSGRAPH           = 8
  120. CONST SPELL             = 9
  121. CONST SYSFILES          = 10
  122. CONST SETUP             = 11
  123. CONST WINFILES          = 12
  124.  
  125. CONST KEYCOMPDOS        = 1
  126. CONST KEYCOMPWIN        = 2
  127. CONST SPELLUS           = 3
  128. CONST SPELLUK           = 4
  129.  
  130. CONST CONFIG$           = "config.fpw"                  ''Name of config file we will write
  131. CONST DBFBAK$           = "foxuser.dbk"                 ''Name used to backup foxuser.dbf.
  132. CONST DIRINI$            = "setup\paths.ini"                ''Records tools location
  133. CONST FPTBAK$           = "foxuser.fpk"                 ''Name used to backup foxuser.fpt.
  134. CONST CUIDLL$           = "mscuistf.dll"                ''The .DLL containing our dialog routines.
  135. CONST INIFILE$          = "setup.ini"                   ''Name of the .INI file to brand.
  136. CONST LOGO              = 1                             ''Logo Bitmap ID.
  137. CONST MINFILES%         = 40
  138. CONST QA$               = "psskb.txt"                   ''Name of QA file.
  139. CONST README$           = "readme.txt"                  ''Name of README file.
  140. CONST SAVECONFIG$       = "config.old"                  ''What to call existing config if backing up
  141.  
  142. GLOBAL BRAND%           ''Used to warn us that we didn't brand product during copy.
  143. GLOBAL DEST$            ''Default destination directory.
  144. GLOBAL fEXE%            ''Installing the executable?
  145. GLOBAL fGRAPH%          ''Flag indicating if MS Graph is going to be installed.
  146. GLOBAL FLAGS%           ''Flags passed to UpdateConfigFPW().
  147. GLOBAL fSPELL%          ''Flag indicating if the spell checker is to be installed.
  148. GLOBAL fWIN30%          ''Flag indicating if we are running under 3.0
  149. GLOBAL GROUP$           ''Default destination group.
  150. GLOBAL MSDEST$          ''MS Tools destination directory.
  151. GLOBAL SRCDIR$          ''Location of install files.
  152. GLOBAL SIZESSET%        ''Have we recorded the section sizes yet?
  153. GLOBAL WINDIR$          ''Windows directory.
  154. GLOBAL WINSYSDIR$       ''Windows system directory.
  155.  
  156. INIT:
  157.     ON ERROR GOTO QUIT
  158.  
  159.     BRAND%          = 0
  160.     DEST$           = "c:\fpw26"
  161.     DLG%            = 0
  162.     fEXE%           = 0
  163.     fWIN30%         = 0
  164.     fGRAPH%         = 0
  165.     fSPELL%         = 0
  166.     GROUP$          = "FoxPro for Windows"
  167.     MSDEST$         = MakePath(GetWindowsDir(), "msapps")
  168.     PMGROUPS%       = 0
  169.     SIZESET%        = 0
  170.     SRCDIR$         = GetSymbolValue("STF_SRCDIR")
  171.     WINDIR$         = GetWindowsDir()
  172.     WINSYSDIR$      = GetWindowsSysDir()
  173.  
  174.     x% = SetTimeValue(2,50,0)
  175.  
  176.     FOR x% = 1 TO WINFILES STEP 1
  177.         IF x% <> SETUP THEN
  178.             AddListItem "CheckItems", "ON"
  179.         ELSE
  180.             AddListItem "CheckItems", "OFF"
  181.         ENDIF
  182.         AddListItem "CheckItemsSize", "0"
  183.         AddListItem "WinDriveSize", "0"
  184.     NEXT
  185.  
  186.     SetBitmap CUIDLL$, LOGO
  187.  
  188.     SetTitle TITLE$
  189.     SetAbout C_NAME$, C_COPYRIGHT$
  190.     SetSymbolValue "NoGroup", NOGROUP$
  191.     SetSymbolValue "FoxProGroup", GROUP$
  192.  
  193.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  194.     IF szInf$ = "" THEN
  195.     szInf$ = GetSymbolValue("STF_CWDDIR") + "FOXPROW.INF"
  196.     END IF
  197.     ReadInfFile szInf$
  198.  
  199. ''
  200. '' Make sure we have at least a 386SX.
  201. ''
  202. IF GetProcessorType() < 3 THEN
  203.     PROCESSOR:
  204.     sz$ = UIStartDlg(CUIDLL$, NOT386, "FInfo0DlgProc", 0, "")
  205.     IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN
  206.         ConfirmQuit
  207.         GOTO PROCESSOR
  208.     END IF
  209.     UIPop 1
  210.     END
  211. END IF
  212.  
  213. ''
  214. '' Warn the user if we are not in Enhanced mode.
  215. ''
  216. IF GetWindowsMode() < 2 THEN
  217.     ENHANCED:
  218.         sz$ = UIStartDlg(CUIDLL$, BADMODE, "FQuitDlgProc", 0, "")
  219.         IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN
  220.             ConfirmQuit
  221.             GOTO ENHANCED
  222.         ELSE
  223.             UIPop 1
  224.         END IF
  225. END IF
  226.  
  227. ''
  228. '' For our own use, see if we are running on a version later than 3.0.  If
  229. '' so, try and get a list of the groups.
  230. ''
  231. IF GetWindowsMajorVersion() = 3 AND GetWindowsMinorVersion() = 0 THEN
  232.     fWIN30% = 1
  233. ELSE
  234.     PMGROUPS% = GetProgMgrGrps()
  235. END IF
  236.  
  237. ''
  238. '' Have the user specify their name and organization.
  239. ''
  240. x% = InitSystemRead(1, INIFILE$, 0)
  241.  
  242.     ''
  243.     '' We don't want the user to do a workstation installation if a sever
  244.     '' installation hasn't been done.  This check tries to catch the most
  245.     '' blatant transgressions by making sure that the executable exists in
  246.     '' the source directory.
  247.     ''
  248.     IF GetSymbolValue("STF_MODE") = "NETWORK" THEN
  249.         IF DoesFileExist(MakePath(SRCDIR$,"foxprow.exe"), femExists) = 0 THEN
  250.             SetSymbolValue "STF_MODE", "NORM"
  251.         END IF
  252.     END IF
  253.  
  254.     sz$ = GetSymbolValue("STF_CD_TYPE")
  255.     IF  sz$ = "NEW" OR sz$ = "WKST" OR sz$ = "USEDNAME" OR sz$ = "ORGUSED" THEN
  256.         GetUserInfo
  257.     ELSE
  258.         sz$ = UIStartDlg(CUIDLL$, BADINI, "FInfo0DlgProc", 0, "")
  259.         GOTO QUIT
  260.     END IF
  261.  
  262. ''
  263. '' Have the user specify where to put the product.  (Including the group if
  264. '' we can get the info.)
  265. ''
  266. GETTARGETINFO:
  267.     SetSymbolValue "FreeSpace", ""
  268.     SetSymbolValue "FreeSpaceWin", ""
  269.     IF GetSymbolValue("STF_MODE") = "ADMIN" THEN
  270.         GetAdminPathInfo
  271.     ELSEIF fWIN30% = 1 OR GetListLength("ListItemsIn") = 0 THEN
  272.         GetPathInfo
  273.     ELSE
  274.         GetPathGrpInfo
  275.     END IF
  276.  
  277.     CheckDiskSpace
  278.  
  279. ''
  280. '' Get the type of installation we are doing.
  281. ''
  282. IF GetSymbolValue("STF_MODE") = "NETWORK" THEN
  283.     y$ = SetInstall("WKST")
  284. ELSEIF GetSymbolValue("STF_MODE") = "ADMIN" THEN
  285.     y$ = SetInstall("ADMIN")
  286. ELSE
  287.     IF GetInstallType() = "CUSTOM" THEN
  288.         CUSTOMINSTALLATION:
  289.             IF GetInstallOptions() = "BACK" THEN
  290.                 GOTO GETTARGETINFO
  291.             END IF
  292.     END IF
  293. END IF
  294.  
  295. IF EnoughSpace() = "BACK" THEN
  296.     GOTO CUSTOMINSTALLATION
  297. END IF
  298.  
  299. ''
  300. '' See if the user wants DOS or Windows style keys.
  301. ''
  302. Get20Compatibility
  303.  
  304. ''
  305. '' Try to gaurantee that FILES are at least a minimum value.
  306. ''
  307. UpdateConfig
  308.  
  309. Install
  310.  
  311. IF ERR = STFQUIT THEN
  312.     DLG% = EXITQUIT
  313. ELSE
  314.     IF GetSymbolValue("STF_MODE") = "ADMIN" THEN
  315.         DLG% = EXITADMINOK
  316.     ELSE
  317.         DLG% = EXITSUCCESS
  318.     END IF
  319. END IF
  320. GOTO QUITL1
  321.  
  322. QUIT:
  323.     UIPopAll
  324.     IF ERR = STFPROGMAN THEN
  325.         DLG% = EXITNOICON
  326.     ELSEIF ERR = STFQUIT THEN
  327.         DLG% = EXITQUIT
  328.     ELSE
  329.         DLG% = EXITFAILURE
  330.     END IF
  331.  
  332. QUITL1:
  333.     ON ERROR GOTO TOAST
  334.  
  335.     sz$ = UIStartDlg(CUIDLL$, DLG%, "FQuitDlgProc", 0, "")
  336.     IF sz$ = "REACTIVATE" THEN
  337.     GOTO QUITL1
  338.     END IF
  339.     UIPop ALL
  340.  
  341.     IF BRAND%=1 AND DoesFileExist(MakePath(DEST$,"foxprow.exe"), femExists) = 1 THEN
  342.         CloseSystem "reqfiles", "prodfile", DEST$, 456, 123
  343.     END IF
  344.  
  345.     END
  346.  
  347. TOAST:
  348.     UIPopAll
  349.     i% = DoMsgBox(LASTRESORT$, LASTTITLE$, MB_OK+MB_TASKMODAL+MB_ICONHAND)
  350.     END
  351.  
  352. '**
  353. '** Purpose:
  354. '**     Copies the files in the copy list and adds FoxPro to the target
  355. '**             group if one was psecified.
  356. '** Arguments:
  357. '**     none.
  358. '** Returns:
  359. '**     none.
  360. '*************************************************************************
  361. SUB Install STATIC
  362.  
  363.     IF GetSymbolValue("STF_CD_TYPE") = "NEW" THEN
  364.         IF InitSystemWrite( 1, INIFILE$, 1 ) = 0 THEN
  365.             sz$ = UIStartDlg(CUIDLL$, BADINI, "FInfo0DlgProc", 0, "")
  366.             ERROR EXITFAILURE
  367.         END IF
  368.     END IF
  369.  
  370.     ''
  371.     '' Initialize the billboard
  372.     ''
  373.     ClearBillboardList
  374.     SetSymbolValue "BillboardList", ""
  375.     AddListItem "BillboardList", "F1"
  376.     AddListItem "BillboardList", "F2"
  377.     AddListItem "BillboardList", "F3"
  378.     AddListItem "BillboardList", "F4"
  379.     AddListItem "BillboardList", "F5"
  380.     AddListItem "BillboardList", "F6"
  381.     AddListItem "BillboardList", "F7"
  382.     AddListItem "BillboardList", "F8"
  383.     AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  384.     IF GetSymbolValue("STF_MODE") <> "NETWORK" THEN
  385.         AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  386.         AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  387.         AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  388.         AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  389.         AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  390.         AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  391.         AddToBillboardList CUIDLL$, BILLBOARD, "FBillboardDlgProc", 1
  392.         SetSymbolValue "BillboardNumber", "1"
  393.     ELSE
  394.         SetSymbolValue "BillboardNumber", "8"
  395.     END IF
  396.  
  397.     SetCopyGaugePosition WindowWidth(HwndFrame())-158, WindowHeight(HwndFrame())-72
  398.  
  399.     ''
  400.     '' Remember that we need to brand the executable.
  401.     ''
  402.     IF GetSymbolValue("STF_MODE") <> "NETWORK" THEN
  403.         IF (fEXE% = 1 OR GetSymbolValue("STF_MODE") = "ADMIN") THEN
  404.             BRAND% = 1
  405.         END IF
  406.     END IF
  407.  
  408.     ''
  409.     '' Do the copy
  410.     ''
  411.     SetRestartDir GetSymbolValue("STF_CWDDIR")
  412.     CopyFilesInCopyList
  413.  
  414.     AddLabels
  415.     AddToPM
  416.     UpdateFPConfig
  417.     UpdateINI
  418.  
  419.     IF RestartListEmpty() = 0 THEN
  420.         DoRestart
  421.     END IF
  422.  
  423. END SUB
  424.  
  425. '**
  426. '** Purpose:
  427. '**     Creates the PM group and items(s).
  428. '** Arguments:
  429. '**     none.
  430. '** Returns:
  431. '**     none.
  432. '*************************************************************************
  433. SUB AddToPM STATIC
  434.     IF DoesDirExist(DEST$) = 0 THEN
  435.         CreateDir DEST$, cmoVital
  436.     END IF
  437.  
  438.     IF GROUP$ <> NOGROUP$ AND (fEXE% = 1 OR GetSymbolValue("STF_MODE") = "NETWORK") AND GetSymbolValue("STF_MODE") <> "ADMIN" THEN
  439.         CreateProgmanGroup GROUP$, "", cmoNone
  440.  
  441.         IF GetSymbolValue("STF_MODE") = "NETWORK" AND DoesFileExist(MakePath(SRCDIR$,"foxprow.exe"), femExists) = 1 THEN
  442.             IF fWIN30% = 1 THEN
  443.                 CreateProgmanItem GROUP$, DESCRIP$, MakePath(SRCDIR$,"foxprow.exe"), "", cmoOverwrite
  444.             ELSE
  445.                 CreateProgmanItem GROUP$, DESCRIP$, MakePath(SRCDIR$,"foxprow.exe"), MakePath(SRCDIR$,"foxprow.exe")+",0,0,0,"+DEST$, cmoOverwrite
  446.             ENDIF
  447.         ELSE
  448.             IF fWIN30% = 1 THEN
  449.                 CreateProgmanItem GROUP$, DESCRIP$, MakePath(DEST$,"foxprow.exe"), "", cmoOverwrite
  450.             ELSE
  451.                 CreateProgmanItem GROUP$, DESCRIP$, MakePath(DEST$,"foxprow.exe"), MakePath(DEST$,"foxprow.exe")+",0,0,0,"+DEST$, cmoOverwrite
  452.             ENDIF
  453.         END IF
  454.  
  455.         '' Add the readme file
  456.         IF GetSymbolValue("STF_MODE") = "NETWORK" THEN
  457.             IF DoesFileExist(MakePath(SRCDIR$,README$), femExists) = 1 THEN
  458.                 CreateProgmanItem GROUP$, READMEDES$, MakePath(SRCDIR$, README$), "", cmoOverwrite
  459.             END IF
  460.         ELSE
  461.             IF DoesFileExist(MakePath(DEST$,README$), femExists) = 1 THEN
  462.                 CreateProgmanItem GROUP$, READMEDES$, MakePath(DEST$, README$), "", cmoOverwrite
  463.             END IF
  464.         END IF
  465.  
  466.         '' Add the Q&A file
  467.         IF GetSymbolValue("STF_MODE") = "NETWORK" THEN
  468.             IF DoesFileExist(MakePath(SRCDIR$,QA$), femExists) = 1 THEN
  469.                 CreateProgmanItem GROUP$, QADES$, MakePath(SRCDIR$, QA$), "", cmoOverwrite
  470.             END IF
  471.         ELSE
  472.             IF DoesFileExist(MakePath(DEST$,QA$), femExists) = 1 THEN
  473.                 CreateProgmanItem GROUP$, QADES$, MakePath(DEST$, QA$), "", cmoOverwrite
  474.             END IF
  475.         END IF
  476.  
  477.         ShowProgmanGroup  GROUP$, 1, cmoNone
  478.     ENDIF
  479. END SUB
  480.  
  481. '**
  482. '** Purpose:
  483. '**     Adds label layouts to FoxUser, creating it if needed.
  484. '** Arguments:
  485. '**     none.
  486. '** Returns:
  487. '**     none.
  488. '*************************************************************************
  489. SUB AddLabels STATIC
  490.     IF DoesFileExist(MakePath(DEST$,"foxuser.dbf"), femExists) = 1 THEN
  491.         CopyFile MakePath(DEST$, "FOXUSER.DBF"), MakePath(DEST$, DBFBAK$), cmoOverwrite, 0
  492.         CopyFile MakePath(DEST$, "FOXUSER.FPT"), MakePath(DEST$, FPTBAK$), cmoOverwrite, 0
  493.         CopyFile MakePath(GetSymbolValue("STF_CWDDIR"),"FOXLABEL.DBF"), MakePath(DEST$,"FOXLABEL.DBF"), cmoOverwrite, 0
  494.         CopyFile MakePath(GetSymbolValue("STF_CWDDIR"),"FOXLABEL.FPT"), MakePath(DEST$,"FOXLABEL.FPT"), cmoOverwrite, 0
  495.         x% = AddLabelRecords(MakePath(DEST$,"FOXUSER.DBF"), MakePath(DEST$,"FOXLABEL.DBF"))
  496.         IF x% <> 0 THEN
  497.             CopyFile MakePath(DEST$, DBFBAK$), MakePath(DEST$,"FOXUSER.DBF"), cmoOverwrite, 0
  498.             CopyFile MakePath(DEST$, FPTBAK$), MakePath(DEST$,"FOXUSER.FPT"), cmoOverwrite, 0
  499.         ENDIF
  500.         RemoveFile MakePath(DEST$, DBFBAK$), cmpFprce
  501.         RemoveFile MakePath(DEST$, FPTBAK$), cmpFprce
  502.         RemoveFile MakePath(DEST$,"FOXLABEL.DBF"), cmoForce
  503.         RemoveFile MakePath(DEST$,"FOXLABEL.FPT"), cmoForce
  504.     ELSE
  505.         CopyFile MakePath(GetSymbolValue("STF_CWDDIR"),"FOXLABEL.DBF"), MakePath(DEST$,"FOXUSER.DBF"), cmoOverwrite, 0
  506.         CopyFile MakePath(GetSymbolValue("STF_CWDDIR"),"FOXLABEL.FPT"), MakePath(DEST$,"FOXUSER.FPT"), cmoOverwrite, 0
  507.     END IF
  508. END SUB
  509.  
  510. '**
  511. '** Purpose:
  512. '**     Updates the user's FoxPro configuration.
  513. '** Arguments:
  514. '**     none.
  515. '** Returns:
  516. '**     none.
  517. '*************************************************************************
  518. SUB UpdateFPConfig STATIC
  519.     IF GetSymbolValue("STF_MODE") <> "NETWORK" THEN
  520.         x% = UpdateConfigFPW(DEST$, GetEnvVariableValue("FOXPROWCFG"))
  521.  
  522.         IF (fEXE% = 1 OR GetSymbolValue("STF_MODE") = "ADMIN") THEN
  523.             CloseSystem "reqfiles", "prodfile", DEST$, 456, 123
  524.             BRAND% = 0
  525.         END IF
  526.     END IF
  527. END SUB
  528.  
  529. '**
  530. '** Purpose:
  531. '**     Exits to DOS to update Window's system files which were in use.
  532. '** Arguments:
  533. '**     none.
  534. '** Returns:
  535. '**     none.
  536. '*************************************************************************
  537. SUB DoRestart STATIC
  538.     RESTARTBEGIN:
  539.         sz$ = UIStartDlg(CUIDLL$, RESTARTWIN, "FQuitDlgProc", 0, "")
  540.         IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN
  541.             ConfirmQuit
  542.             GOTO RESTARTBEGIN
  543.         END IF
  544.         UIPop 1
  545.  
  546.         TRYTOQUIT:
  547.         IF ExitExecRestart() = 0 THEN
  548.             TRYTOQUITL2:
  549.             sz$ = UIStartDlg(CUIDLL$, CANTQUIT, "FQuitDlgProc", 0, "")
  550.             IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN
  551.                 ConfirmQuit
  552.                 GOTO TRYTOQUITL2
  553.             END IF
  554.             GOTO TRYTOQUIT
  555.         END IF
  556. END SUB
  557.  
  558. '**
  559. '** Purpose:
  560. '**     Gets the user's name and organization as appropriate.
  561. '** Arguments:
  562. '**     none.
  563. '** Returns:
  564. '**     none.
  565. '*************************************************************************
  566. SUB GetUserInfo STATIC
  567.     IF GetSymbolValue("STF_MODE") <> "NETWORK" THEN
  568.         IF IsDriveNetwork(MID$(SRCDIR$, 1, 1)) <> 1 OR DoesFileExist(MakePath(SRCDIR$,"foxprow.exe"),femExists) <> 1 THEN
  569.             IF GetSymbolValue("STF_CD_TYPE") = "NEW" THEN
  570.                 GetUserAll
  571.             ELSE
  572.                 ''
  573.                 '' Copy Disincentive Dialog
  574.                 ''
  575.                 USEDDISKS:
  576.                     SetSymbolValue "ConfirmTextIn", ""
  577.                     AddListItem "ConfirmTextIn", GetSymbolValue( "STF_CD_NAME" )
  578.                     AddListItem "ConfirmTextIn", GetSymbolValue( "STF_CD_ORG" )
  579.  
  580.                     sz$ = UIStartDlg(CUIDLL$, REINSTALL, "FConfirmDlgProc", 0, "")
  581.                     IF sz$ = "EXIT" or sz$ = "CANCEL" THEN
  582.                         ConfirmQuit
  583.                         GOTO USEDDISKS
  584.                     END IF
  585.                     UIPop 1
  586.             END IF
  587.         END IF
  588.     END IF
  589.  
  590. END SUB
  591.  
  592. '**
  593. '** Purpose:
  594. '**     Gets both the user's name and organization.
  595. '** Arguments:
  596. '**     none.
  597. '** Returns:
  598. '**     none.
  599. '*************************************************************************
  600. SUB GetUserAll STATIC
  601.     szName$ = GetSymbolValue( "STF_CD_NAME" )
  602.     szOrg$ = GetSymbolValue( "STF_CD_ORG" )
  603.  
  604.     SetSymbolValue "NameIn", ""
  605.     SetSymbolValue "NameOut", ""
  606.     SetSymbolValue "OrgIn", ""
  607.     SetSymbolValue "OrgOut", ""
  608.     SetSymbolValue "ConfirmTextIn", ""
  609.  
  610.     AddListItem "NameIn", szName$
  611.     AddListItem "OrgIn", szOrg$
  612.     AddListItem "ConfirmTextIn", szName$
  613.     AddListItem "ConfirmTextIn", szOrg$
  614.  
  615.     NEWNAMEORG:
  616.         ReplaceListItem "NameIn", 1, szName$
  617.         ReplaceListItem "OrgIn", 1, szOrg$
  618.         sz$ = UIStartDlg(CUIDLL$, GETNAMEORG, "FNameOrgDlgProc", 0, "")
  619.         szName$ = RTRIM$(LTRIM$(GetSymbolValue("NameOut")))
  620.         szOrg$ = GetSymbolValue("OrgOut")
  621.         IF sz$ = "CONTINUE" THEN
  622.             IF LEN(szName$) = 0 THEN
  623.                 WarnBadName
  624.                 GOTO NEWNAMEORG
  625.             END IF
  626.             UIPop 1
  627.         ELSE
  628.             ConfirmQuit
  629.             GOTO NEWNAMEORG
  630.         END IF
  631.  
  632.         ReplaceListItem "ConfirmTextIn", 1, szName$
  633.         ReplaceListItem "ConfirmTextIn", 2, szOrg$
  634.         IF ConfirmNameOrg() = "BACK" THEN
  635.             ReplaceListItem "NameIn", 1, szName$
  636.             ReplaceListItem "OrgIn", 1, szOrg$
  637.             GOTO NEWNAMEORG
  638.         ENDIF
  639.  
  640.     SetSymbolValue "STF_CD_NAME", szName$
  641.     SetSymbolValue "STF_CD_ORG", szOrg$
  642.  
  643.     RemoveSymbol "ConfirmTextIn"
  644.     RemoveSymbol "NameIn"
  645.     RemoveSymbol "NameOut"
  646.     RemoveSymbol "OrgIn"
  647.     RemoveSymbol "OrgOut"
  648. END SUB
  649.  
  650. '**
  651. '** Purpose:
  652. '**     Has the user verify that the name and organization info is
  653. '**             acceptable.
  654. '** Arguments:
  655. '**     none.
  656. '** Returns:
  657. '**     none.
  658. '*************************************************************************
  659. FUNCTION ConfirmNameOrg () STATIC AS STRING
  660.     VALIDATENAMEORG:
  661.         sz$ = UIStartDlg(CUIDLL$, CONFIRMINFO, "FConfirmDlgProc", 0, "")
  662.         IF sz$ = "CONTINUE" THEN
  663.             ConfirmNameOrg = "CONTINUE"
  664.         ELSEIF sz$ = "BACK" THEN
  665.             ConfirmNameOrg = "BACK"
  666.         ELSE
  667.             ConfirmQuit
  668.             GOTO VALIDATENAMEORG
  669.         END IF
  670.  
  671.         UIPop 1
  672. END FUNCTION
  673.  
  674. '**
  675. '** Purpose:
  676. '**     Gets the path where the user wishes to install FoxPro and the
  677. '**             path for the Windows support routines.
  678. '** Arguments:
  679. '**     none.
  680. '** Returns:
  681. '**     none.
  682. '*************************************************************************
  683. SUB GetAdminPathInfo STATIC
  684.  
  685.     GETADMINPATHINFOSTART:
  686.         SetSymbolValue "NameIn", LCASE$(DEST$)
  687.         SetSymbolValue "NameOut", ""
  688.         SetSymbolValue "OrgIn", LCASE$(MSDEST$)
  689.         SetSymbolValue "OrgOut", ""
  690.  
  691.         sz$ = UIStartDlg(CUIDLL$, DESTPATHADMIN, "FNameOrgDlgProc", 0, "")
  692.         DEST$ = GetSymbolValue("NameOut")
  693.  
  694.         DEST$ = LCASE$(DEST$)
  695.         MSDEST$ = LCASE$(MSDEST$)
  696.  
  697.         IF MID$(DEST$, LEN(DEST$), 1) <> "\" THEN
  698.             DEST$ = DEST$ + "\"
  699.         END IF
  700.         MSDEST$ = GetSymbolValue("OrgOut")
  701.         IF MID$(MSDEST$, LEN(MSDEST$), 1) <> "\" THEN
  702.             MSDEST$ = MSDEST$ + "\"
  703.         END IF
  704.  
  705.         IF sz$ = "CONTINUE" THEN
  706.             IF IsDirWritable(DEST$) = 0 THEN
  707.             x$ = WarnBadPath(BADPATH)
  708.                 GOTO GETADMINPATHINFOSTART
  709.             END IF
  710.                 IF IsDirWritable(MSDEST$) = 0 THEN
  711.                     x$ = WarnBadPath(BADPATHTOOLS)
  712.                     GOTO GETADMINPATHINFOSTART
  713.                 END IF
  714.         ELSEIF sz$ = "REACTIVATE" THEN
  715.             GOTO GETADMINPATHINFOSTART
  716.         ELSE
  717.                 ConfirmQuit
  718.             GOTO GETADMINPATHINFOSTART
  719.         END IF
  720.  
  721.         IF LCASE$(MID$(DEST$, 1, 1)) <> LCASE$(MID$(MSDEST$, 1, 1)) THEN
  722.             GETDRIVECONFIRM:
  723.                 sz$ = UIStartDlg(CUIDLL$, DRIVEMAP, "FInfo0DlgProc", 0, "")
  724.                 IF sz$ = "BACK" THEN
  725.                     UIPop 1
  726.                     GOTO GETADMINPATHINFOSTART
  727.                 ELSEIF sz$ = "EXIT" OR sz$ = "CANCEL" THEN
  728.                     ConfirmQuit
  729.                     GOTO GETDRIVECONFIRM
  730.                 END IF
  731.  
  732.                 UIPop 1
  733.         END IF
  734.  
  735.         IF CheckNoWinProd() = "BACK" THEN
  736.             GOTO GETADMINPATHINFOSTART
  737.         END IF
  738.  
  739.         IF CheckNoDosProd() = "BACK" THEN
  740.             GOTO GETADMINPATHINFOSTART
  741.         END IF
  742.  
  743.         UIPop 1
  744.  
  745.         RemoveSymbol "NameIn"
  746.         RemoveSymbol "NameOut"
  747.         RemoveSymbol "OrgIn"
  748.         RemoveSymbol "OrgOut"
  749. END SUB
  750.  
  751. '**
  752. '** Purpose:
  753. '**     Gets the path where the user wishes to install FoxPro.
  754. '** Arguments:
  755. '**     none.
  756. '** Returns:
  757. '**     none.
  758. '*************************************************************************
  759. SUB GetPathInfo STATIC
  760.  
  761.     SetSymbolValue "EditTextIn", LCASE$( DEST$ )
  762.     SetSymbolValue "EditFocus", "END"
  763.  
  764.     GETPATHINFOSTART:
  765.         sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", 0, "")
  766.         DEST$ = GetSymbolValue("EditTextOut")
  767.         IF MID$(DEST$, LEN(DEST$), 1) = ":" THEN
  768.             DEST$ = DEST$ + "\"
  769.         END IF
  770.  
  771.     IF sz$ = "CONTINUE" THEN
  772.         IF IsDirWritable(DEST$) = 0 THEN
  773.         x$ = WarnBadPath(BADPATH)
  774.             GOTO GETPATHINFOSTART
  775.         END IF
  776.         ELSEIF sz$ = "REACTIVATE" THEN
  777.         GOTO GETPATHINFOSTART
  778.         ELSE
  779.             ConfirmQuit
  780.         GOTO GETPATHINFOSTART
  781.         END IF
  782.  
  783.         IF CheckNoWinProd() = "BACK" THEN
  784.             SetSymbolValue "EditTextIn", DEST$
  785.             GOTO GETPATHINFOSTART
  786.         END IF
  787.  
  788.         IF CheckNoDosProd() = "BACK" THEN
  789.             SetSymbolValue "EditTextIn", DEST$
  790.             GOTO GETPATHINFOSTART
  791.         END IF
  792.  
  793.         UIPop 1
  794.  
  795.         RemoveSymbol "EditTextIn"
  796.         RemoveSymbol "EditTextOut"
  797.         RemoveSymbol "EditFocus"
  798. END SUB
  799.  
  800. '**
  801. '** Purpose:
  802. '**     Gets the path and PM group where the user wishes to install FoxPro.
  803. '** Arguments:
  804. '**     none.
  805. '** Returns:
  806. '**     none.
  807. '*************************************************************************
  808. SUB GetPathGrpInfo () STATIC
  809.  
  810.     SetSymbolValue "EditTextIn", DEST$
  811.     SetSymbolValue "ListDefault", GROUP$
  812.  
  813.     GETPATHGRPINFOSTART:
  814.         sz$ = UIStartDlg(CUIDLL$, DESTPATHGROUP, "FDirGrpProc", 0, "")
  815.         DEST$ = GetSymbolValue("EditTextOut")
  816.         GROUP$ = GetSymbolValue("ListItemsOut")
  817.         IF MID$(DEST$, LEN(DEST$), 1) = ":" THEN
  818.             DEST$ = DEST$ + "\"
  819.         END IF
  820.  
  821.         IF sz$ = "CONTINUE" THEN
  822.             IF IsDirWritable(DEST$) = 0 THEN
  823.                 x$ = WarnBadPath(BADPATH)
  824.                 GOTO GETPATHGRPINFOSTART
  825.             END IF
  826.         ELSEIF sz$ = "REACTIVATE" THEN
  827.             GOTO GETPATHGRPINFOSTART
  828.         ELSE
  829.             ConfirmQuit
  830.             GOTO GETPATHGRPINFOSTART
  831.         END IF
  832.  
  833.         IF CheckNoWinProd() = "BACK" THEN
  834.             SetSymbolValue "EditTextIn", DEST$
  835.             SetSymbolValue "ListDefault", GROUP$
  836.             GOTO GETPATHGRPINFOSTART
  837.         END IF
  838.  
  839.         IF CheckNoDosProd() = "BACK" THEN
  840.             SetSymbolValue "EditTextIn", DEST$
  841.             SetSymbolValue "ListDefault", GROUP$
  842.             GOTO GETPATHGRPINFOSTART
  843.         END IF
  844.  
  845.         UIPop 1
  846.  
  847.         RemoveSymbol "EditTextIn"
  848.         RemoveSymbol "EditTextOut"
  849.         RemoveSymbol "ListDefault"
  850.         RemoveSymbol "ListItemsOut"
  851. END SUB
  852.  
  853. '**
  854. '** Purpose:
  855. '**     Checks to see if we are installing over another copy of FoxPro for
  856. '**             Windows and asks the user if they really want to do it.
  857. '** Arguments:
  858. '**     none.
  859. '** Returns:
  860. '**     none.
  861. '*************************************************************************
  862. FUNCTION CheckNoWinProd () STATIC AS STRING
  863.  
  864.     CHECKNOWIN:
  865.         IF DOESFILEEXIST( MakePath( DEST$, "FOXPROW.EXE" ), femExists ) = 1 THEN
  866.             HASWIN:
  867.                 sz$ = UIStartDlg(CUIDLL$, WINPRODUCT, "FInfo0DlgProc", 0, "")
  868.                 IF sz$ = "EXIT" OR sz$ = "CANCEL" THEN
  869.                     ConfirmQuit
  870.                     GOTO HASWIN
  871.                 ENDIF
  872.                 CheckNoWinProd = sz$
  873.  
  874.                 UIPop 1
  875.         ELSE
  876.             CheckNoWinProd = "CONTINUE"
  877.         ENDIF
  878. END FUNCTION
  879.  
  880.  
  881. '**
  882. '** Purpose:
  883. '**    Check to see if the installation directory contains a FoxPro for DOS and,
  884. '**        if so, let the user change their mind.
  885. '**
  886. '** Arguments:
  887. '**     none.
  888. '** Returns:
  889. '**     "CONTINUE" or "BACK" to indicate that we should go ahead and
  890. '**             install here or ask for another path.
  891. '*************************************************************************
  892. FUNCTION CheckNoDosProd () STATIC AS STRING
  893.  
  894.     CHECKNODOS:
  895.         IF DoesFileExist( MakePath( DEST$, "FOXPRO.EXE" ), femExists ) = 0 THEN
  896.         IF DoesFileExist( MakePath( DEST$, "FOXPROX.EXE" ), femExists ) = 0 THEN
  897.         IF DoesFileExist( MakePath( DEST$, "FOXPROL.EXE" ), femExists ) = 0 THEN
  898.         IF DoesFileExist( MakePath( DEST$, "FOXPROLX.EXE" ), femExists ) = 0 THEN
  899.             CheckNoDosProd = "CONTINUE"
  900.             GOTO CHECKNODOSEND
  901.         END IF
  902.         END IF
  903.         END IF
  904.         END IF
  905.  
  906.     CHECKNODOSMIDDLE:
  907.         sz$ = UIStartDlg(CUIDLL$, DOSPRODUCT, "FInfo0DlgProc", 0, "")
  908.         IF sz$ = "EXIT" or sz$ = "CANCEL" THEN
  909.             ConfirmQuit
  910.             GOTO CHECKNODOSMIDDLE
  911.         END IF
  912.  
  913.         UIPop 1
  914.         CheckNoDosProd = sz$
  915.  
  916.     CHECKNODOSEND:
  917. END FUNCTION
  918.  
  919. '**
  920. '** Purpose:
  921. '**     Fills the copy list with the sections the user wants to install
  922. '**             based on installation categories.
  923. '** Arguments:
  924. '**     none.
  925. '** Returns:
  926. '**     none.
  927. '*************************************************************************
  928. FUNCTION GetInstallType () STATIC AS STRING
  929.  
  930.     modeflg% = 0
  931.     dlg% = OPTIONS
  932.     IF GetSymbolValue("STF_MODE") = "ADMIN" OR IsDriveNetwork(MID$(DEST$, 1, 1)) = 1 THEN
  933.         modeflg% = 3
  934.         dlg% = OPTSERVER
  935.     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
  936.         modeflg% = 2
  937.         dlg% = OPTCLIENT
  938.     ELSE
  939.         modeflg% = 1
  940.         dlg% = OPTIONS
  941.     ENDIF
  942.  
  943.     GETINSTALLTYPESTART:
  944.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FThreeOptDlgProc", 0, "")
  945.         IF sz$ = "ONE" THEN
  946.             UIPop 1
  947.             GetInstallType = "FULL"
  948.             SetSymbolValue "STF_MODE", "NORMAL"
  949.             y$ = SetInstall("MAX")
  950.     ELSEIF sz$ = "TWO" THEN
  951.             UIPop 1
  952.             GetInstallType = "CUSTOM"
  953.             SetSymbolValue "STF_MODE", "NORMAL"
  954.     ELSEIF sz$ = "THREE" THEN
  955.             UIPop 1
  956.             GetInstallType = "MINIMUM"
  957.  
  958.             IF modeflg% = 3 THEN
  959.                 SetSymbolValue "STF_MODE", "ADMIN"
  960.                 MSDEST$ = MakePath(DEST$, "setup\msapps")
  961.                 y$ = SetInstall("ADMIN")
  962.             ELSEIF modeflg% = 2 THEN
  963.                 SetSymbolValue "STF_MODE", "NETWORK"
  964.                 y$ = SetInstall("WKST")
  965.             ELSE
  966.                 y$ = SetInstall("MIN")
  967.             END IF
  968.         ELSE
  969.             ConfirmQuit
  970.             GOTO GETINSTALLTYPESTART
  971.     END IF
  972. END FUNCTION
  973.  
  974. '**
  975. '** Purpose:
  976. '**     Fills the copy list with the sections the user wants to install
  977. '**             based on selections from the available options.
  978. '** Arguments:
  979. '**     none.
  980. '** Returns:
  981. '**     none.
  982. '*************************************************************************
  983. FUNCTION GetInstallOptions () STATIC AS STRING
  984.  
  985.     GetInstallOptions = "CONTINUE"
  986.  
  987.     SetSymbolValue "Drive", UCASE$(MID$(DEST$, 1, 1)) + ":"
  988.     SetSymbolValue "WinDrive", UCASE$(MID$(WINSYSDIR$, 1, 1)) + ": (Windows)"
  989.  
  990.     GETINSTALLOPTIONSSTART:
  991.         sz$ = UIStartDlg(CUIDLL$, CUSTOMINST, "FCustInstDlgProc", 0, "")
  992.         IF sz$ = "CONTINUE" THEN
  993.             y$ = SetInstall("CUST")
  994.             UIPop 1
  995.         ELSEIF sz$ = "REACTIVATE" THEN
  996.             GOTO GETINSTALLOPTIONSSTART
  997.         ELSEIF sz$ = "BACK" THEN
  998.             UIPop 1
  999.             GetInstallOptions = "BACK"
  1000.         ELSE
  1001.             ConfirmQuit
  1002.             GOTO GETINSTALLOPTIONSSTART
  1003.         END IF
  1004.  
  1005. END FUNCTION
  1006.  
  1007. '**
  1008. '** Purpose:
  1009. '**     Sets the global copy list to install a the options selected by
  1010. '**             the user as indicated by the list CheckItems.
  1011. '** Arguments:
  1012. '**     none.
  1013. '** Returns:
  1014. '**     none.
  1015. '*************************************************************************
  1016. FUNCTION SetInstall (szType$) STATIC AS STRING
  1017.  
  1018.     fEXE% = 2
  1019.     IF DoesFileExist(MakePath(SRCDIR$,DIRINI$), femExists) = 1 THEN
  1020.         ToolsLoc$ = GetIniKeyString(MakePath(SRCDIR$, DIRINI$), "TOOLS LOCATION", "DIR")
  1021.         IF MID$(ToolsLoc$, 1, 1) = "\" THEN
  1022.             ToolsLoc$ = MID$(SRCDIR$, 1, 1) + ":" + ToolsLoc$
  1023.         END IF
  1024.     ELSE
  1025.         ToolsLoc$ = ""
  1026.     END IF
  1027.  
  1028.     IF szType$ = "MAX" THEN
  1029.         ReplaceListItem "CheckItems", REQFILES, "ON"
  1030.         ReplaceListItem "CheckItems", WINHELP,  "ON"
  1031.         ReplaceListItem "CheckItems", FPHELP,   "ON"
  1032.         ReplaceListItem "CheckItems", TUTORIAL, "ON"
  1033.         ReplaceListItem "CheckItems", FOXAPP,   "ON"
  1034.         ReplaceListItem "CheckItems", EXAMPLES, "ON"
  1035.         ReplaceListItem "CheckItems", FOXDOC,   "ON"
  1036.         ReplaceListItem "CheckItems", MSGRAPH,  "ON"
  1037.         ReplaceListItem "CheckItems", SPELL,    "ON"
  1038.         ReplaceListItem "CheckItems", SYSFILES, "ON"
  1039.         ReplaceListItem "CheckItems", WINFILES, "ON"
  1040.         ReplaceListItem "CheckItems", SETUP,    "OFF"
  1041.         fEXE% = 1
  1042.  
  1043.     ELSEIF szType$ = "ADMIN" THEN
  1044.         ReplaceListItem "CheckItems", REQFILES, "ON"
  1045.         ReplaceListItem "CheckItems", WINHELP,  "ON"
  1046.         ReplaceListItem "CheckItems", FPHELP,   "ON"
  1047.         ReplaceListItem "CheckItems", TUTORIAL, "ON"
  1048.         ReplaceListItem "CheckItems", FOXAPP,   "ON"
  1049.         ReplaceListItem "CheckItems", EXAMPLES, "ON"
  1050.         ReplaceListItem "CheckItems", FOXDOC,   "ON"
  1051.         ReplaceListItem "CheckItems", MSGRAPH,  "ON"
  1052.         ReplaceListItem "CheckItems", SPELL,    "ON"
  1053.         ReplaceListItem "CheckItems", SYSFILES, "ON"
  1054.         ReplaceListItem "CheckItems", WINFILES, "ON"
  1055.         ReplaceListItem "CheckItems", SETUP,    "ON"
  1056.         fEXE% = 0
  1057.  
  1058.     ELSEIF szType$ = "MIN" THEN
  1059.         ReplaceListItem "CheckItems", REQFILES, "ON"
  1060.         ReplaceListItem "CheckItems", WINHELP,  "OFF"
  1061.         ReplaceListItem "CheckItems", FPHELP,   "OFF"
  1062.         ReplaceListItem "CheckItems", TUTORIAL, "OFF"
  1063.         ReplaceListItem "CheckItems", FOXAPP,   "OFF"
  1064.         ReplaceListItem "CheckItems", EXAMPLES, "OFF"
  1065.         ReplaceListItem "CheckItems", FOXDOC,   "OFF"
  1066.         ReplaceListItem "CheckItems", MSGRAPH,  "OFF"
  1067.         ReplaceListItem "CheckItems", SPELL,    "OFF"
  1068.         ReplaceListItem "CheckItems", SYSFILES, "ON"
  1069.         ReplaceListItem "CheckItems", WINFILES, "ON"
  1070.         ReplaceListItem "CheckItems", SETUP,    "OFF"
  1071.         fEXE% = 1
  1072.  
  1073.     ELSEIF szType$ = "WKST" THEN
  1074.         ReplaceListItem "CheckItems", REQFILES, "OFF"
  1075.         ReplaceListItem "CheckItems", WINHELP,  "OFF"
  1076.         ReplaceListItem "CheckItems", FPHELP,   "OFF"
  1077.         ReplaceListItem "CheckItems", TUTORIAL, "OFF"
  1078.         ReplaceListItem "CheckItems", FOXAPP,   "OFF"
  1079.         ReplaceListItem "CheckItems", EXAMPLES, "OFF"
  1080.         ReplaceListItem "CheckItems", FOXDOC,   "OFF"
  1081.         ReplaceListItem "CheckItems", MSGRAPH,  "OFF"
  1082.         ReplaceListItem "CheckItems", SPELL,    "OFF"
  1083.         ReplaceListItem "CheckItems", SYSFILES, "ON"
  1084.         ReplaceListItem "CheckItems", WINFILES, "ON"
  1085.         ReplaceListItem "CheckItems", SETUP,    "OFF"
  1086.         MSDEST$ = ToolsLoc$
  1087.         IF ToolsLoc$ <> "" THEN
  1088.             fGRAPH% = 1
  1089.             fSPELL% = 1
  1090.         END IF
  1091.         fEXE% = 1
  1092.  
  1093.     END IF
  1094.  
  1095.     ClearCopyList
  1096.  
  1097.     IF GetListItem("CheckItems", REQFILES) = "ON" THEN
  1098.         IF fEXE% = 2 THEN
  1099.             fEXE% = 1
  1100.         END IF
  1101.         AddSectionFilesToCopyList "reqfiles", SRCDIR$, DEST$
  1102.     ELSE
  1103.         IF fEXE% = 2 THEN
  1104.             fEXE% = 0
  1105.         END IF
  1106.     END IF
  1107.  
  1108.     IF GetListItem("CheckItems", WINHELP) = "ON" THEN
  1109.         AddSectionFilesToCopyList "winhelp", SRCDIR$, DEST$
  1110.     END IF
  1111.  
  1112.     IF GetListItem("CheckItems", FPHELP) = "ON" THEN
  1113.         AddSectionFilesToCopyList "fphelp", SRCDIR$, DEST$
  1114.     END IF
  1115.  
  1116.     IF GetListItem("CheckItems", TUTORIAL) = "ON" THEN
  1117.         AddSectionFilesToCopyList "tutorial", SRCDIR$, DEST$
  1118.     END IF
  1119.  
  1120.     IF GetListItem("CheckItems", FOXAPP) = "ON" THEN
  1121.         AddSectionFilesToCopyList "foxapp", SRCDIR$, DEST$
  1122.     END IF
  1123.  
  1124.     IF GetListItem("CheckItems", EXAMPLES) = "ON" THEN
  1125.         AddSectionFilesToCopyList "examples", SRCDIR$, DEST$
  1126.     END IF
  1127.  
  1128.     IF GetListItem("CheckItems", FOXDOC) = "ON" THEN
  1129.         AddSectionFilesToCopyList "foxdoc", SRCDIR$, DEST$
  1130.     END IF
  1131.  
  1132.     IF GetListItem("CheckItems", MSGRAPH) = "ON" THEN
  1133.         IF ToolsLoc$ <> "" THEN
  1134.             AddSectionFilesToCopyList "msgraph", ToolsLoc$, MakePath(MSDEST$, "msgraph")
  1135.         ELSE
  1136.             AddSectionFilesToCopyList "msgraph", SRCDIR$, MakePath(MSDEST$, "msgraph")
  1137.         END IF
  1138.         AddSectionFilesToCopyList "graphwiz", SRCDIR$, DEST$
  1139.         fGRAPH% = 1
  1140.     END IF
  1141.  
  1142.     IF GetListItem("CheckItems", SPELL) = "ON" THEN
  1143.         IF ToolsLoc$ <> "" THEN
  1144.             AddSectionFilesToCopyList "spell", ToolsLoc$, MakePath(MSDEST$, "proof")
  1145.         ELSE
  1146.             AddSectionFilesToCopyList "spell", SRCDIR$, MakePath(MSDEST$, "proof")
  1147.         END IF
  1148.         AddSectionFilesToCopyList "spellapp", SRCDIR$, DEST$
  1149.         fSPELL% = 1
  1150.     END IF
  1151.  
  1152.     IF GetListItem("CheckItems", SYSFILES) = "ON" THEN
  1153.         IF szType$ <> "ADMIN" THEN
  1154.             AddSectionFilesToCopyList "sysfiles", SRCDIR$, WINSYSDIR$
  1155.         ELSE
  1156.             AddSectionFilesToCopyList "sysfiles", SRCDIR$, MakePath(DEST$, "setup")
  1157.         END IF
  1158.     END IF
  1159.  
  1160.     IF GetListItem("CheckItems", WINFILES) = "ON" THEN
  1161.         IF szType$ <> "ADMIN" THEN
  1162.             AddSectionFilesToCopyList "winfiles", SRCDIR$, WINDIR$
  1163.         ELSE
  1164.             AddSectionFilesToCopyList "winfiles", SRCDIR$, MakePath(DEST$, "setup")
  1165.         END IF
  1166.     END IF
  1167.  
  1168.     IF GetListItem("CheckItems", SETUP) = "ON" THEN
  1169.         AddSectionFilesToCopyList "setup", SRCDIR$, DEST$
  1170.     END IF
  1171.  
  1172.     SetInstall = "OK"
  1173. END FUNCTION
  1174.  
  1175. '**
  1176. '** Purpose:
  1177. '**     Sets all the symbols we need to determine if the user has enough
  1178. '**             disk space.
  1179. '** Arguments:
  1180. '**     none.
  1181. '** Returns:
  1182. '**     none.
  1183. '*************************************************************************
  1184. SUB CheckDiskSpace STATIC
  1185.     oldCursor% = ShowWaitCursor()
  1186.     sz$ = UIStartDlg( CUIDLL$, WAITSPACE, "FNoWaitDlgProc", 0, "")
  1187.  
  1188.     IF SIZESET% = 0 THEN
  1189.         SetSectionSize
  1190.         SIZESET% = 1
  1191.     ENDIF
  1192.  
  1193.     SetSymbolValue "FreeSpace", STR$(GetFreeSpaceForDrive(MID$(DEST$, 1, 1)) / 1024)
  1194.     IF MID$(DEST$, 1, 1) <> MID$(WINSYSDIR$, 1, 1) THEN
  1195.         SetSymbolValue "FreeSpaceWin", STR$(GetFreeSpaceForDrive(MID$(WINSYSDIR$, 1, 1)) / 1024)
  1196.     ELSE
  1197.         SetSymbolValue "FreeSpaceWin", GetSymbolValue("FreeSpace")
  1198.     END IF
  1199.  
  1200.     RestoreCursor oldCursor%
  1201.     UIPop 1
  1202. END SUB
  1203.  
  1204. '**
  1205. '** Purpose:
  1206. '**     Determines if we have enough space to do the install.
  1207. '** Arguments:
  1208. '**     none.
  1209. '** Returns:
  1210. '**     "CONTINUE" or "BACK".
  1211. '*************************************************************************
  1212. FUNCTION EnoughSpace() STATIC AS STRING
  1213.     EnoughSpace = "CONTINUE"
  1214.  
  1215.     SpaceAvail& = VAL(GetSymbolValue("FreeSpace"))
  1216.     SpaceAvailWin& = VAL(GetSymbolValue("FreeSpaceWin"))
  1217.  
  1218.     SpaceNeed& = 0
  1219.     SpaceNeedWin& = 0
  1220.     FOR x% = 1 TO WINFILES
  1221.         IF GetListItem("CheckItems", x%) = "ON" THEN
  1222.             SpaceNeed& = SpaceNeed& + VAL(GetListItem("CheckItemsSize", x%))
  1223.             SpaceNeedWin& = SpaceNeedWin& + VAL(GetListItem("WinDriveSize", x%))
  1224.         END IF
  1225.     NEXT
  1226.  
  1227.     ''
  1228.     '' If Windows is on the drive we are installing to, combine
  1229.     '' the needed values.
  1230.     ''
  1231.     IF MID$(DEST$, 1, 1) = MID$(WINSYSDIR$, 1, 1) THEN
  1232.         SpaceNeed& = SpaceNeed& + SpaceNeedWin&
  1233.     END IF
  1234.  
  1235.     ''
  1236.     '' Check to see if we have room
  1237.     ''
  1238.     IF SpaceNeed& > SpaceAvail& THEN
  1239.         dialog% = DISKFULL
  1240.     ELSEIF SpaceNeedWin& > SpaceAvailWin& THEN
  1241.         dialog% = DISKWINFULL
  1242.     ELSE
  1243.         dialog% = 0
  1244.     END IF
  1245.  
  1246.     IF dialog% > 0 THEN
  1247.         NOROOM:
  1248.             sz$ = UIStartDlg(CUIDLL$, dialog%, "FQuitDlgProc", 0, "")
  1249.             IF sz$ = "BACK" THEN
  1250.                 EnoughSpace = "BACK"
  1251.             ELSEIF sz$ = "EXIT" or sz$ = "CANCEL" THEN
  1252.                 ConfirmQuit
  1253.                 GOTO NOROOM
  1254.             END IF
  1255.             UIPop 1
  1256.     END IF
  1257. END FUNCTION
  1258.  
  1259. '**
  1260. '** Purpose:
  1261. '**     Determines whether or not the user wishes to install the 2.0
  1262. '**             compaitibility files.
  1263. '** Arguments:
  1264. '**     none.
  1265. '** Returns:
  1266. '**     none.
  1267. '*************************************************************************
  1268. SUB Get20Compatibility STATIC
  1269.     IF GetSymbolValue( "STF_MODE" ) <> "NETWORK" THEN
  1270.         COMPATIBILITYSTART:
  1271.         sz$ = UIStartDlg(CUIDLL$, COMPATIBILITY, "FThreeOptDlgProc", 0, "")
  1272.  
  1273.             IF sz$ = "ONE" THEN
  1274.                 FLAGS% = FPWSetKeyComp("DOS")
  1275.             ELSEIF sz$ = "TWO" THEN
  1276.                 FLAGS% = FPWSetKeyComp("WIN")
  1277.             ELSE
  1278.                 ConfirmQuit
  1279.                 GOTO COMPATIBILITYSTART
  1280.             END IF
  1281.             UIPop 1
  1282.     END IF
  1283. END SUB
  1284.  
  1285. '**
  1286. '** Purpose:
  1287. '**     Updates any INI files that need it and does any other misc. updates.
  1288. '** Arguments:
  1289. '**     none.
  1290. '** Returns:
  1291. '**     none.
  1292. '*************************************************************************
  1293. SUB UpdateINI STATIC
  1294.     IF fGRAPH% = 1 OR fSPELL% = 1 OR ((fEXE% = 1 OR GetSymbolValue("STF_MODE") = "NETWORK") AND GetSymbolValue("STF_MODE") <> "ADMIN") THEN
  1295.         oldCursor% = ShowWaitCursor()
  1296.         sz$ = UIStartDlg(CUIDLL$, WAITINI, "FNoWaitDlgProc", 0, "")
  1297.  
  1298.         IF GetSymbolValue("STF_MODE") = "ADMIN" THEN
  1299.             IF LCASE$(MID$(MSDEST$, 1, 1)) = LCASE$(MID$(DEST$, 1, 1)) THEN
  1300.                 MSDEST$ = MID$(MSDEST$, 3, LEN(MSDEST$)-2)
  1301.             END IF
  1302.             CreateIniKeyValue MakePath(DEST$, DIRINI$), "TOOLS LOCATION", "DIR", MSDEST$, cmoOverwrite
  1303.         END IF
  1304.  
  1305.         IF fGRAPH% = 1 THEN
  1306.             CreateIniKeyValue "WIN.INI", "MSAPPS", "msapps", MSDEST$, cmoOverwrite
  1307.  
  1308.             CreateRegKeyValue "MSGraph", "Microsoft Graph"
  1309.             CreateRegKeyValue ".gra", "MSGraph"
  1310.             CreateRegKeyValue "MSGraph\protocol\StdFileEditing\server", MakePath(MSDEST$,"msgraph\graph.exe")
  1311.             CreateRegKeyValue "MSGraph\protocol\StdFileEditing\SetDataFormats", "Native,CF_TEXT"
  1312.             CreateRegKeyValue "MSGraph\protocol\StdFileEditing\RequestDataFormats", "Native,CF_METAFILEPICT"
  1313.             CreateRegKeyValue "MSGraph\protocol\StdExecute\server", MakePath(MSDEST$,"msgraph\graph.exe")
  1314.         END IF
  1315.  
  1316.         IF fSPELL% = 1 THEN
  1317.             CreateIniKeyValue "WIN.INI", "MS Proofing Tools", "Custom Dict 1", MakePath(MSDEST$,"proof\custom.dic"), cmoOverwrite
  1318.             CreateIniKeyValue "WIN.INI", "MS Proofing Tools", "Spelling 2057,0", MakePath(MSDEST$,"proof\msspell.dll")+","+MakePath(MSDEST$,"proof\mssp_br.lex"), cmoOverwrite
  1319.             CreateIniKeyValue "WIN.INI", "MS Proofing Tools", "Spelling 1033,0", MakePath(MSDEST$,"proof\msspell.dll")+","+MakePath(MSDEST$,"proof\mssp_am.lex"), cmoOverwrite
  1320.         END IF
  1321.  
  1322.         IF (fEXE% = 1 OR GetSymbolValue("STF_MODE") = "NETWORK") AND GetSymbolValue("STF_MODE") <> "ADMIN" THEN
  1323.             CreateRegKeyValue "MSFoxPro", "Microsoft FoxPro for Windows"
  1324.             CreateRegKeyValue "MSFoxPro\shell\open\command", MakePath(DEST$,"FOXPROW.EXE")+" %1"
  1325.             CreateRegKeyValue ".prg", "MSFoxPro"
  1326.             CreateRegKeyValue ".fxp", "MSFoxPro"
  1327.             CreateRegKeyValue ".app", "MSFoxPro"
  1328.         END IF
  1329.  
  1330.         UIPop 1
  1331.         RestoreCursor oldCursor%
  1332.     END IF
  1333. END SUB
  1334.  
  1335. '**
  1336. '** Purpose:
  1337. '**     Update FILES in config.sys if needed.
  1338. '** Arguments:
  1339. '**     none.
  1340. '** Returns:
  1341. '**     none.
  1342. '*************************************************************************
  1343. SUB UpdateConfig STATIC
  1344.     IF CanFindConfigSys() <> 0 THEN
  1345.         IF GetConfigNumFiles() < MINFILES% THEN
  1346.             SetSymbolValue "RadioDefault", "1"
  1347.             UPDATETYPE:
  1348.                 sz$ = UIStartDlg(CUIDLL$, EDITMODE, "FRadioDlgProc", 0, "")
  1349.                 IF sz$ = "CONTINUE" THEN
  1350.                     UIPop 1
  1351.  
  1352.                     SetSymbolValue "MIN_FILES", "40"
  1353.  
  1354.                     IF GetSymbolValue("ButtonChecked") = "1" THEN
  1355.                         x% = QuietConfigUpdate()
  1356.                     ELSEIF GetSymbolValue("ButtonChecked") = "2" THEN
  1357.                         EDITCONFIGSTART:
  1358.                             sz$ = UIStartDlg(CUIDLL$, EDITCONFIG, "ConfigEditDlg", 0, "")
  1359.                             IF sz$ = "EXIT" or sz$ = "CANCEL" THEN
  1360.                                 ConfirmQuit
  1361.                                 GOTO EDITCONFIGSTART
  1362.                             ENDIF
  1363.                             UIPop 1
  1364.                     ELSE
  1365.                         GOTO CONFIGEND
  1366.                     ENDIF
  1367.  
  1368.                     IF GetSymbolValue("UPDATE_RESULT") = "ERROR" THEN
  1369.                         sz$ = UIStartDlg(CUIDLL$, CANTUPDATE, "FInfo0DlgProc", 0, "")
  1370.                     ELSE
  1371.                         sz$ = UIStartDlg(CUIDLL$, EDITOK, "FDlgFNameProc", 0, "")
  1372.                     END IF
  1373.                     UIPop 1
  1374.  
  1375.                 ELSE
  1376.                     ConfirmQuit
  1377.                     SetSymbolValue "RadioDefault", GetSymbolValue("ButtonChecked")
  1378.                     GOTO UPDATETYPE
  1379.                 END IF
  1380.         END IF
  1381.         CONFIGEND:
  1382.     ELSE
  1383.         SetSymbolValue "ConfirmTextIn", ""
  1384.         AddListItem "ConfirmTextIn", STR$(MINFILES%)
  1385.         AddListItem "ConfirmTextIn", STR$(MINFILES%)
  1386.         sz$ = UIStartDlg(CUIDLL$, CANTFIND, "FSprintfDlgProc", 0, "")
  1387.         UIPop 1
  1388.     END IF
  1389. END SUB
  1390.  
  1391. '**
  1392. '** Purpose:
  1393. '**     Confirms that the user really wants to quit when they select a quit
  1394. '**             option.
  1395. '** Arguments:
  1396. '**     none.
  1397. '** Returns:
  1398. '**     none.
  1399. '*************************************************************************
  1400. SUB ConfirmQuit STATIC
  1401.     CONFIRMQUITSTART:
  1402.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  1403.  
  1404.     IF sz$ = "EXIT" or sz$ = "CANCEL" THEN
  1405.         UIPopAll
  1406.         ERROR STFQUIT
  1407.         ELSEIF sz$ = "REACTIVATE" THEN
  1408.         GOTO CONFIRMQUITSTART
  1409.         ELSE
  1410.         UIPop 1
  1411.         END IF
  1412. END SUB
  1413.  
  1414. '**
  1415. '** Purpose:
  1416. '**     Warns the user that they must enter a name.
  1417. '** Arguments:
  1418. '**     none.
  1419. '** Returns:
  1420. '**     none.
  1421. '*************************************************************************
  1422. SUB WarnBadName STATIC
  1423.     WARNBADNAMESTART:
  1424.         sz$ = UIStartDlg(CUIDLL$, BADNAME, "FInfo0DlgProc", 0, "")
  1425.         IF sz$ = "REACTIVATE" THEN
  1426.         GOTO WARNBADNAMESTART
  1427.         END IF
  1428.         UIPop 1
  1429. END SUB
  1430.  
  1431. '**
  1432. '** Purpose:
  1433. '**     Warns the user that they have specified an invalid path.
  1434. '** Arguments:
  1435. '**     none.
  1436. '** Returns:
  1437. '**     none.
  1438. '*************************************************************************
  1439. FUNCTION WarnBadPath (dlg%) STATIC AS STRING
  1440.     WARNBADPATHSTART:
  1441.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  1442.     IF sz$ = "REACTIVATE" THEN
  1443.         GOTO WARNBADPATHSTART
  1444.         END IF
  1445.         UIPop 1
  1446.  
  1447.     WarnBadPath = sz$
  1448. END FUNCTION
  1449.  
  1450. '**
  1451. '** Purpose:
  1452. '**     Appends a file name to the end of a directory path,
  1453. '**     inserting a backslash character as needed.
  1454. '** Arguments:
  1455. '**     szDir$  - full directory path (with optional ending "\")
  1456. '**     szFile$ - filename to append to directory
  1457. '** Returns:
  1458. '**     Resulting fully qualified path name.
  1459. '*************************************************************************
  1460. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  1461.     IF szDir$ = "" THEN
  1462.     MakePath = szFile$
  1463.     ELSEIF szFile$ = "" THEN
  1464.     MakePath = szDir$
  1465.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  1466.     MakePath = szDir$ + szFile$
  1467.     ELSE
  1468.     MakePath = szDir$ + "\" + szFile$
  1469.     END IF
  1470. END FUNCTION
  1471.  
  1472. '**
  1473. '** Purpose:
  1474. '**     Records the section sizes.
  1475. '** Arguments:
  1476. '**     none.
  1477. '** Returns:
  1478. '**     none.
  1479. '*************************************************************************
  1480. SUB SetSectionSize STATIC
  1481.     ReplaceListItem "CheckItemsSize", REQFILES, SectionSize("reqfiles")
  1482.     ReplaceListItem "WinDriveSize", REQFILES, "0"
  1483.  
  1484.     ReplaceListItem "CheckItemsSize", WINHELP, SectionSize("winhelp")
  1485.     ReplaceListItem "WinDriveSize", WINHELP, "0"
  1486.  
  1487.     ReplaceListItem "CheckItemsSize", FPHELP, SectionSize("fphelp")
  1488.     ReplaceListItem "WinDriveSize", FPHELP, "0"
  1489.  
  1490.     ReplaceListItem "CheckItemsSize", TUTORIAL, SectionSize("tutorial")
  1491.     ReplaceListItem "WinDriveSize", TUTORIAL, "0"
  1492.  
  1493.     ReplaceListItem "CheckItemsSize", FOXAPP, SectionSize("foxapp")
  1494.     ReplaceListItem "WinDriveSize", FOXAPP, "0"
  1495.  
  1496.     ReplaceListItem "CheckItemsSize", EXAMPLES, SectionSize("examples")
  1497.     ReplaceListItem "WinDriveSize", EXAMPLES, "0"
  1498.  
  1499.     ReplaceListItem "CheckItemsSize", FOXDOC, SectionSize("foxdoc")
  1500.     ReplaceListItem "WinDriveSize", FOXDOC, "0"
  1501.  
  1502.     ReplaceListItem "CheckItemsSize", MSGRAPH, SectionSize("msgraph")
  1503.     ReplaceListItem "WinDriveSize", MSGRAPH, SectionSize("graphwiz")
  1504.  
  1505.     ReplaceListItem "CheckItemsSize", SPELL, SectionSize("spellapp")
  1506.     ReplaceListItem "WinDriveSize", SPELL, SectionSize("spell")
  1507.  
  1508.     ''
  1509.     ''  The following items are not options given to the user.
  1510.     ''
  1511.     ReplaceListItem "CheckItemsSize", SYSFILES, "0"
  1512.     ReplaceListItem "WinDriveSize", SYSFILES, SectionSize("sysfiles")
  1513.  
  1514.     ReplaceListItem "CheckItemsSize", WINFILES, "0"
  1515.     ReplaceListItem "WinDriveSize", WINFILES, SectionSize("winfiles")
  1516.  
  1517.     ReplaceListItem "CheckItemsSize", SETUP, SectionSize("setup")
  1518.     ReplaceListItem "WinDriveSize", SETUP, "0"
  1519. END SUB
  1520.  
  1521. '**
  1522. '** Purpose:
  1523. '**     Determines how much space a given section will occupy.
  1524. '** Arguments:
  1525. '**     szSection$ - The section to determine the size of.
  1526. '** Returns:
  1527. '**     The size in K bytes of the section.
  1528. '*************************************************************************
  1529. FUNCTION SectionSize (szSection$) STATIC AS STRING
  1530.     MakeListFromSectionSize "SizeList", szSection$
  1531.     SectionSize = STR$(CalcListSize())
  1532.     RemoveSymbol "SizeList"
  1533. END FUNCTION
  1534.