home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Internet Business Development Kit / PRODUCT_CD.iso / ftpage / disk1 / vermeer.mst < prev    next >
Encoding:
Text File  |  1995-09-27  |  62.0 KB  |  1,622 lines

  1. '**
  2. '* Vermeer Technologies Setup
  3. '**
  4.  
  5. ''$DEFINE DEBUG
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9.  
  10. ''Dialog ID's
  11. CONST WELCOME                   = 100
  12. CONST ASKQUIT                   = 200
  13. CONST ASKWIN32OLDER             = 250
  14. CONST ASKWIN32NONE              = 260
  15. CONST DESTPATH                  = 300
  16. CONST DESTPATH2                 = 301
  17. CONST FILESLOW                  = 302
  18. CONST BADSHARE                  = 303
  19. CONST BADCONTENT                = 304
  20. CONST BADNT                     = 305
  21. CONST EXITFAILURE               = 400
  22. CONST EXITQUIT                  = 600
  23. CONST EXITSUCCESS               = 700
  24. CONST EXITSUCCESS_NOWIN32       = 710
  25. CONST OPTIONS                   = 800
  26. CONST APPHELP                   = 900
  27. CONST CUSTINST                  = 6200
  28. CONST TOOBIG                    = 6300
  29. CONST BADPATH                   = 6400
  30.  
  31. CONST HELPWELCOME               = 1000
  32. CONST VERPATH                   = 1100
  33. CONST EXITFAILNOTWIN31          = 1200
  34. CONST EXITFAILNOTENH            = 1300
  35. CONST EXITFAILNOTPAGING         = 1325
  36. CONST EXITFAILNOTINTEL          = 1350
  37. CONST EXITFAILRUNAPP            = 1360
  38. CONST FREECELLINST              = 1400
  39. CONST FREECELLINSTNOWIN32S      = 1450
  40. CONST FREECELLPATH              = 1500
  41. CONST HELPFREECELL              = 1600
  42.  
  43. ''Bitmap ID
  44. CONST LOGO         = 1
  45.  
  46. ''File Types
  47. CONST APPFILES      = 1    ''Vermeer Files
  48. CONST ALISAFILES    = 2    ''PWS Files
  49. CONST PWSDOCFILES   = 3    ''PWS Doc Files
  50. CONST EXTENDERFILES = 4
  51. CONST EXT_MINI        = 5 
  52.  
  53. ''GetTempFileName flags
  54. CONST TF_FORCEDRIVE            = 128
  55.  
  56. GLOBAL DESTWIN$      ''Windows directory.
  57. GLOBAL DESTSYS$      ''Windows\System directory.
  58. GLOBAL DEST32S$      ''Windows\System\Win32s directory
  59. GLOBAL OP_SYS$         ''Indicator of system we're installing on
  60. GLOBAL OLE_PROTECT%  ''Indicates whether ole2 dlls were protected from being
  61.                      '' copied.
  62. GLOBAL OLE_OLEBOOT%
  63. GLOBAL VERNUM$       '' Win32s Version Number (i.e., for v1.25 VERNUM$="125"
  64.  
  65. GLOBAL VERMEERINSTALLED%
  66.  
  67. GLOBAL DEST$        ''Default destination directory.
  68. GLOBAL VVERMEER$    ''Vermeer root directory
  69. GLOBAL VBIN$        ''Vermeer \bin directory
  70. GLOBAL VWEBS$        ''Vermeer \webs directory
  71. GLOBAL VPAGES$        ''Vermeer \pages directory
  72.  
  73. GLOBAL ALISADEST$   ''Vermeer Alisa directory
  74. GLOBAL CONTENTDEST$ ''Vermeer Content directory
  75. GLOBAL WINDRIVE$    ''Windows drive letter.
  76.  
  77. ''CustInst list symbol names
  78. GLOBAL APPNEEDS$    ''List costs per drive
  79. GLOBAL PWSDOCNEEDS$
  80. GLOBAL ALISANEEDS$
  81. GLOBAL EXTENDERNEEDS$
  82. GLOBAL EXT_MINI_NEEDS$
  83. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  84. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  85.  
  86. ''Dialog list symbol names
  87. GLOBAL CHECKSTATES$
  88. GLOBAL STATUSTEXT$
  89. GLOBAL DRIVETEXT$
  90. GLOBAL CONTENTEXISTS$
  91.  
  92. DECLARE SUB PWSConfigUpdate
  93. DECLARE SUB AddOptFilesToCopyList (ftype%)
  94. DECLARE SUB RecalcOptFiles (ftype%)
  95. DECLARE SUB RecalcPath
  96. DECLARE SUB SetDriveStatus
  97. DECLARE SUB CreateVermeerDirectoryStructure
  98. DECLARE SUB SetVermeerDirectoryStructure
  99. DECLARE SUB CreatePWSDirStructure 'PWS = Personal Web Server
  100. DECLARE SUB CopyPWSFileSections            
  101. DECLARE SUB CreatePWSDOCDirStructure
  102. DECLARE SUB CopyPWSDOCFileSections            
  103. DECLARE SUB Install_Vermeer
  104. DECLARE FUNCTION MakePath(szDir$, szFile$) AS STRING
  105. DECLARE FUNCTION AdjustCost(drv%) AS LONG
  106. DECLARE FUNCTION ValidateDir(Path$, State%) AS STRING
  107.  
  108. DECLARE SUB Install_With_Win32s(OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%)
  109. DECLARE SUB UpdateSystemIni
  110. DECLARE SUB RecoverFromCopy(szFileName$)
  111. DECLARE FUNCTION RebootSystem(OLEONLY%) AS INTEGER
  112. DECLARE FUNCTION MakeSystemIni LIB "INIUPD.DLL" (arg1$, arg2$) AS INTEGER
  113. DECLARE FUNCTION RestartWindows LIB "INIUPD.DLL" AS INTEGER
  114. DECLARE FUNCTION OnWindowsNT LIB "INIUPD.DLL" AS INTEGER
  115. DECLARE FUNCTION PagingEnabled LIB "INIUPD.DLL" AS INTEGER
  116. DECLARE FUNCTION ShareEnabled LIB "INIUPD.DLL" AS INTEGER
  117. DECLARE FUNCTION IsWin32sLoaded LIB "INIUPD.DLL" (arg1$) AS INTEGER
  118. DECLARE FUNCTION IsRunningApp LIB "INIUPD.DLL" AS INTEGER
  119. DECLARE FUNCTION SetCuiFlags LIB "MSCUISTF.DLL" (arg1%, arg2%) AS INTEGER
  120. DECLARE FUNCTION SearchForShare LIB "MSCUISTF.DLL" AS INTEGER
  121. DECLARE FUNCTION VermeerUpdateRegistry LIB "MSCUISTF.DLL" (arg1$) AS INTEGER
  122. DECLARE FUNCTION FindDocumentRoot LIB "MSCUISTF.DLL" (arg1$, arg2$) AS INTEGER
  123. DECLARE SUB Unix_slashTo_dos LIB "MSCUISTF.DLL" (arg1$)
  124. DECLARE FUNCTION ExitWindowsExec LIB "USER.EXE" (arg1$, arg2$) AS INTEGER
  125. DECLARE FUNCTION GetModuleHandle LIB "KRNL386.EXE" (arg1$) AS INTEGER
  126. DECLARE FUNCTION LoadLibrary LIB "KRNL386.EXE" (arg1$) AS INTEGER
  127. DECLARE SUB FreeLibrary LIB "KRNL386.EXE" (arg1%)
  128. DECLARE FUNCTION SetErrorMode LIB "KRNL386.EXE" (arg1%) AS INTEGER
  129.  
  130. DECLARE FUNCTION GetTempFileName LIB "KRNL386.EXE" (drive%, prefix$, u%, filename$) AS INTEGER
  131. DECLARE SUB WriteLine LIB "INIUPD.DLL" (filename$, text$)
  132. DECLARE FUNCTION GetTempFileAt(szDir$, szPrefix$) as string
  133.  
  134. INIT:
  135.     SetAbout "FrontPage 1.00.0", "Copyright(C) 1995, Vermeer Technologies, Inc."
  136.     CUIDLL$ = "mscuistf.dll"            ''user interface dll
  137.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog proc
  138.  
  139.     szOldVer$ ="1.00.000     "          '' Space for version
  140.     WIN32ENABLED% = 0
  141.     VERMEERINSTALLED% = 0
  142.     OLEONLY% = 0
  143.     OLE2_16% = 0
  144.     OLE2AUTO_16% = 0
  145.     OLE16RUNAPP% = 0
  146.     OLE_PROTECT% = 0
  147.     OLE_OLEBOOT% = 0
  148.  
  149.     ON ERROR GOTO ERRNORMAL
  150.  
  151.     SetBitmap CUIDLL$, LOGO
  152.     SetTitle "Vermeer FrontPage Setup"
  153.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  154.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  155.     IF szInf$ = "" THEN
  156.         szInf$ = GetSymbolValue("STF_CWDDIR") + "FP.INF"
  157.     END IF
  158.     ReadInfFile szInf$
  159.  
  160.     WIN32SVER$ = MID$(GetSectionKeyVersion("WindowsSystem", "win32s16"), 1, 4)
  161.     VERNUM$ = MID$(WIN32SVER$, 1, 1) + MID$(WIN32SVER$, 3 , 2)
  162.  
  163.     DESTWIN$ = GetWindowsDir()
  164.     DESTSYS$ = GetWindowsSysDir()
  165.     DEST32S$ = DESTSYS + "WIN32S\"
  166.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  167.     DEST$ = WINDRIVE$ + ":\VERMEER"
  168.     VVERMEER$ = DEST$
  169.     CONTENTDEST$ = WINDRIVE$ + ":\CONTENT"
  170.  
  171.     OpenLogFile MakePath(DESTWIN$, "vinstall.log"), 1     '0=overwrite, 1=append
  172.     WriteToLogFile "FP-Read .inf file successfully."
  173.  
  174.     ''CustInst list symbols
  175.     CHECKSTATES$   = "CheckItemsState"
  176.     STATUSTEXT$    = "StatusItemsText"
  177.     DRIVETEXT$     = "DriveStatusText"
  178.     CONTENTEXISTS$ = "CheckContentExists"
  179.     FOR i% = 1 TO 4 STEP 1
  180.         AddListItem CHECKSTATES$, "ON"
  181.     NEXT i%
  182.     FOR i% = 1 TO 7 STEP 1
  183.         AddListItem STATUSTEXT$, ""
  184.     NEXT i%
  185.     FOR i% = 1 TO 9 STEP 1
  186.         AddListItem DRIVETEXT$, ""
  187.     NEXT i%
  188.     FOR i% = 1 TO 1 STEP 1
  189.         AddListItem CONTENTEXISTS$, "NO"
  190.     NEXT i%
  191.  
  192.  
  193.     ''Disk cost list symbols
  194.     APPNEEDS$   = "AppNeeds"
  195.     PWSDOCNEEDS$ = "PWSDocNeeds"
  196.     ALISANEEDS$ = "AlisaNeeds"
  197.     EXTENDERNEEDS$ = "ExtenderNeeds"
  198.     EXT_MINI_NEEDS$ = "Ext_mini_Needs"
  199.     EXTRACOSTS$ = "ExtraCosts"
  200.     BIGLIST$    = "BigList"
  201.     FOR i% = 1 TO 5 STEP 1
  202.         AddListItem BIGLIST$, ""
  203.     NEXT i%
  204.     FOR i% = 1 TO 26 STEP 1
  205.         AddListItem EXTRACOSTS$, "0"
  206.     NEXT i%
  207.  
  208. CHECK:
  209.     '' Can not run on versions less than 3.10.
  210.     IF GetWindowsMajorVersion < 3 THEN
  211.     WriteToLogFile "FP-FAIL: Windows version < 3.10, exiting."
  212.         ExitCode% = EXITFAILNOTWIN31
  213.         GOTO QUIT
  214.     END IF
  215.     IF GetWindowsMajorVersion = 3 AND GetWindowsMinorVersion < 10 THEN
  216.     WriteToLogFile "FP-FAIL: Windows version < 3.10, exiting."
  217.         ExitCode% = EXITFAILNOTWIN31
  218.         GOTO QUIT
  219.     END IF
  220.     '' Check that we are not running on Chicago, including pre-released
  221.     '' Chicago versions.
  222.     IF GetWindowsMajorVersion * 100 + GetWindowsMinorVersion > 350 THEN
  223.     OP_SYS$ = "win95"
  224.     WriteToLogFile "FP-Operating System: Windows 95."
  225.         ExitCode% = EXITSUCCESS
  226.         WIN32ENABLED% = 1
  227.         GOTO WELCOME
  228.     END IF
  229.     IF GetWindowsMode < 2  THEN
  230.         IF OnWindowsNT() THEN
  231.         WriteToLogFile "FP-FAIL: NT Risc machine, exiting."
  232.             ExitCode% = EXITFAILNOTINTEL '' Running on Windows NT (on RISC)
  233.         ELSE
  234.         WriteToLogFile "FP-FAIL: Standard Mode Windows, exiting."
  235.             ExitCode% = EXITFAILNOTENH   '' Standard Mode Windows
  236.         END IF
  237.         GOTO QUIT
  238.     END IF
  239.     IF OnWindowsNT() THEN
  240.         OP_SYS$ = "winnt"
  241.         IF (DoesFileExist( DESTWIN$ + "system32\riched32.dll", femExists) = 0) THEN
  242. WINNT:
  243.             sz$ = UIStartDlg(CUIDLL$, BADNT, "FCustInstDlgProc", 0, "")
  244.             IF sz$ = "REACTIVATE" THEN
  245.                 UIPop 1
  246.                 GOTO WINNT
  247.             ELSEIF sz$ = "EXIT" THEN
  248.                 UIPop 1
  249.                 GOSUB ASKQUIT
  250.             ELSE
  251.                 UIPop 1
  252.             ENDIF
  253.         END IF
  254.  
  255.     WriteToLogFile "FP-Operating System: Win NT."
  256.         ExitCode% = EXITSUCCESS
  257.         WIN32ENABLED% = 1
  258.         GOTO WELCOME
  259.     END IF
  260.     ExitCode% = EXITSUCCESS
  261.  
  262.     if IsRunningApp() <> 0 THEN
  263.     WriteToLogFile "FP-FAIL: 32bit App running, exiting."
  264.         ExitCode% = EXITFAILRUNAPP
  265.         GOTO QUIT
  266.     END IF
  267.  
  268.     OP_SYS$ = "win32"
  269.         '' Get version of Win32s to be installed from version info in INF file
  270.     szNewVer$ = GetSectionKeyVersion("WindowsSystem", "win32s16")
  271.     WriteToLogFile "FP-Win32s version to be installed: " + szNewVer$
  272.     IF DoesFileExist( DESTSYS$ + "win32s16.dll", femExists ) THEN 'a version of Win32s is installed
  273.         '' Get version of Win32s installed from windows\system directory
  274.         szOldVer$ = GetVersionOfFile(DESTSYS$ + "win32s16.dll")
  275.     WriteToLogFile "FP-Win32s version already installed: " + szOldVer$
  276. '$IFDEF DEBUG
  277.     i% = DoMsgBox("Win32s OldVer:"+szOldVer$+"  NewVer:"+szNewVer$, "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  278. '$ENDIF ''DEBUG
  279.     IF szNewVer > szOldVer THEN
  280.         WriteToLogFile "FP-Have newer version of Win32s, installing it."
  281. WIN32OLD:
  282.         sz$ = UIStartDlg(CUIDLL$, ASKWIN32OLDER, "FQuitDlgProc", 0, "")
  283.  
  284.         IF sz$ = "EXIT" THEN
  285.             UIPop 1
  286.             UIPopAll
  287.             ERROR STFQUIT
  288.         ELSEIF sz$ = "REACTIVATE" THEN
  289.             GOTO WIN32OLD
  290.         ELSE
  291.             UIPop 1
  292.         END IF
  293.     ELSE
  294.         WriteToLogFile "FP-Have version of Win32s <= installed version, NOT installing it."
  295.             ExitCode% = EXITSUCCESS
  296.             WIN32ENABLED% = 1
  297.             GOTO WELCOME
  298.     END IF
  299.     ELSE  'No Win32s detected
  300.     WriteToLogFile "FP-No version of Win32s was detected."
  301. WIN32NONE:
  302.     sz$ = UIStartDlg(CUIDLL$, ASKWIN32NONE, "FQuitDlgProc", 0, "")
  303.     IF sz$ = "EXIT" THEN
  304.         UIPop 1
  305.         UIPopAll
  306.         ERROR STFQUIT
  307.     ELSEIF sz$ = "REACTIVATE" THEN
  308.         GOTO WIN32NONE
  309.     ELSE
  310.         UIPop 1
  311.     END IF
  312.     END IF
  313.  
  314.     '' See if OLE included.
  315.  
  316.     OLEINCLUDED% = DoesFileExist( GetSymbolValue("STF_SRCDIR") + "OLE2THK.DL_", femExists )
  317.  
  318.     IF OLEINCLUDED% = 1 THEN
  319.         '' See whether one of the OLE 16 bit components is loaded.
  320.         IF GetModulehandle("compobj") <> 0 THEN
  321.             OLE16RUNAPP% = 1
  322.             GOTO GetOleVersion
  323.         END IF
  324.         IF GetModuleHandle("ole2") <> 0 THEN
  325.             OLE16RUNAPP% = 1
  326.             GOTO GetOleVersion
  327.         END IF
  328.         IF GetModuleHandle("ole2prox") <> 0 THEN
  329.             OLE16RUNAPP% = 1
  330.             GOTO GetOleVersion
  331.         END IF
  332.         IF GetModuleHandle("ole2conv") <> 0 THEN
  333.             OLE16RUNAPP% = 1
  334.             GOTO GetOleVersion
  335.         END IF
  336.         IF GetModuleHandle("storage") <> 0 THEN
  337.             OLE16RUNAPP% = 1
  338.             GOTO GetOleVersion
  339.         END IF
  340.         IF GetModuleHandle("ole2nls") <> 0 THEN
  341.             OLE16RUNAPP% = 1
  342.             GOTO GetOleVersion
  343.         END IF
  344.         IF GetModuleHandle("ole2disp") <> 0 THEN
  345.             OLE16RUNAPP% = 1
  346.             GOTO GetOleVersion
  347.         END IF
  348.         IF GetModuleHandle("typelib") <> 0 THEN
  349.             OLE16RUNAPP% = 1
  350.             GOTO GetOleVersion
  351.         END IF
  352.  
  353. GetOleVersion:
  354.         szOleNewVer$ = GetSectionKeyVersion("OleWindowsSystemWin32s", "ole2thk")
  355.  
  356.         '' Get version of currently installed OLE32 from version info of
  357.         '' ole2thk file
  358.         szOleOldVer$ = GetVersionOfFile( DESTSYS$ + "WIN32S\OLE2THK.DLL" )
  359.  
  360.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "COMPOBJ.DLL" )
  361.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "compobj")
  362.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  363.             OLE2_16% = 1
  364.         END IF
  365.  
  366.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2.DLL" )
  367.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2")
  368.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  369.             OLE2_16% = 1
  370.         END IF
  371.  
  372.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2PROX.DLL" )
  373.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2prox")
  374.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  375.             OLE2_16% = 1
  376.         END IF
  377.  
  378.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "STORAGE.DLL" )
  379.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "storage")
  380.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  381.             OLE2_16% = 1
  382.         END IF
  383.  
  384.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2CONV.DLL" )
  385.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2conv")
  386.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  387.             OLE2_16% = 1
  388.         END IF
  389.  
  390.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2NLS.DLL" )
  391.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2nls")
  392.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  393.             OLE2AUTO_16% = 1
  394.         END IF
  395.  
  396.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2DISP.DLL" )
  397.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2disp")
  398.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  399.             OLE2AUTO_16% = 1
  400.         END IF
  401.  
  402.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "TYPELIB.DLL" )
  403.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "typelib")
  404.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  405.             OLE2AUTO_16% = 1
  406.         END IF
  407.  
  408.     END IF
  409.  
  410.     OLE2_32% = OLEINCLUDED%
  411.  
  412.     '' Check if Win32s is partially installed
  413.     sz$ = GetIniKeyString (DESTSYS$ + "WIN32S.INI", "Win32s", "Setup")
  414.     '' If WIN32S.INI specifies Win32s Setup=0, then force complete Win32s file overwrite
  415.     IF sz$ = "0" THEN
  416.         WriteToLogFile "FP-User has partially installed Win32s, reinstall."
  417.         GOTO WELCOME
  418.     END IF
  419.     '' If WIN32S.INI is missing, try and reinstall Win32s files/recreate WIN32S.INI
  420.     IF sz$ <> "1" THEN
  421.         WriteToLogFile "FP-Win32s.ini is missing, reinstall."
  422.         GOTO WELCOME
  423.     END IF
  424.  
  425.     '' If Win32s is already installed, get running version number
  426.     '' Revisit this section of code.
  427.     i% = DoesFileExist( DESTSYS$ + "W32SYS.DLL", femExists )
  428.     IF i% = 1 THEN
  429.         i% = IsWin32sLoaded( szOldVer$ )
  430.     ENDIF
  431.  
  432.     IF i% = 0 THEN
  433.         GOTO WELCOME
  434.     END IF
  435.  
  436.     IF szNewVer$ > szOldVer$ THEN
  437.         GOTO WELCOME
  438.     END IF
  439.  
  440.     IF OLEINCLUDED% = 1 THEN
  441.         OLE2_32% = 0
  442.         IF (szNewVer$ = szOldVer$) OR (szNewVer$ < szOldVer$) THEN
  443.             '' Compare OLE32 version and versions of each of OLE16 libraries.
  444.             sz$ = GetIniKeyString (DESTSYS$ + "WIN32S.INI", "OLE", "Setup")
  445.             '' If WIN32S.INI specifies OLE2 Setup=0, then force OLE2 file overwrite
  446.             IF ((sz$ <> "1") OR (szOleNewVer$ > szOleOldVer$)) THEN
  447.                 OLEONLY% = 1
  448.                 OLE2_32% = 1
  449.                 GOTO WELCOME
  450.             END IF
  451.  
  452.             IF OLE2_16% OR OLE2AUTO_16 THEN
  453.                 OLEONLY% = 1
  454.                 GOTO WELCOME
  455.             END IF
  456.         END IF
  457.     END IF
  458.  
  459.     WIN32ENABLED% = 1
  460.  
  461. WELCOME:
  462.     Temp$ = GetIniKeyString(DESTWIN$+"vermeer.ini", "FrontPage", "FrontPageRoot")
  463.     Temp$ = ValidateDir(Temp$, 0)
  464.     IF Temp$ <> "" THEN
  465.         VVERMEER$ = Temp$
  466.         DEST$ = Temp$
  467.     END IF
  468.  
  469.     Temp$ = GetIniKeyString(DESTWIN$+"vermeer.ini", "Port 80", "serviceContentDir")
  470.     Temp$ = ValidateDir(Temp$, 0)
  471.     IF Temp$ <> "" THEN
  472.         IF ((LEN(DEST$) < 18) AND (OP_SYS="win32")) THEN
  473.             CONTENTDEST$ = Temp$
  474.             ReplaceListItem CONTENTEXISTS$, 1, "YES"
  475.         ELSEIF ((OP_SYS="winnt") OR (OP_SYS="win95")) THEN
  476.             CONTENTDEST$ = Temp$
  477.             ReplaceListItem CONTENTEXISTS$, 1, "YES"
  478.         ENDIF
  479.     END IF
  480.  
  481.     ReplaceListItem STATUSTEXT$, 4, VVERMEER$
  482.     ReplaceListItem STATUSTEXT$, 7, CONTENTDEST$
  483.     SetVermeerDirectoryStructure
  484.  
  485.     i% = SetCuiFlags(OLEONLY%, OLE16RUNAPP%)
  486.     WriteToLogFile "FP-Welcome dialog."
  487.  
  488.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  489.     IF sz$ = "CONTINUE" THEN
  490.         UIPop 1
  491.     ELSE
  492.         UIPop 1
  493.         GOSUB ASKQUIT
  494.         GOTO WELCOME
  495.     END IF
  496.     
  497. CUSTINST:
  498.     WriteToLogFile "FP-Displaying FrontPage/Alisa dialog."
  499.     RecalcPath
  500.     SetDriveStatus
  501.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  502.  
  503.     IF sz$ = "CONTINUE" THEN
  504.         IF ((GetListItem(CHECKSTATES$, APPFILES) <> "ON") AND (GetListItem(CHECKSTATES$, ALISAFILES) <> "ON") AND  (GetListItem(CHECKSTATES$, EXTENDERFILES) <> "ON")) THEN
  505.             i% = DoMsgBox("Please select a FrontPage component for installation.", "Selection Required", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  506.             GOTO CUSTINST
  507.         END IF
  508.  
  509.         ''Install only if it will fit.
  510.         FOR i% = 1 TO 5 STEP 1
  511.             IF GetListItem(BIGLIST$, i%) <> "" THEN
  512.                 GOSUB TOOBIG
  513.                 GOTO CUSTINST
  514.             END IF
  515.         NEXT i%
  516.         UIPop 1
  517.  
  518.         GOTO GETWIN32SPATH
  519.     ELSEIF sz$ = "PATH" THEN
  520.         Temp$ = "FPPath"
  521.         GOTO GETPATH
  522.     ELSEIF sz$ = "CHK1" THEN
  523.         RecalcOptFiles APPFILES
  524.         SetDriveStatus
  525.         GOTO CUSTINST
  526.     ELSEIF sz$ = "CHK2" THEN
  527.         RecalcOptFiles ALISAFILES
  528.         SetDriveStatus
  529.         GOTO CUSTINST
  530.     ELSEIF sz$ = "CHK4" THEN
  531.         RecalcOptFiles EXTENDERFILES
  532.         SetDriveStatus
  533.         GOTO CUSTINST
  534.     ELSEIF sz$ = "BTN1" THEN  'BTN1 = PWS options 
  535.         GOTO PWSOPTIONS
  536.     ELSEIF sz$ = "REACTIVATE" THEN
  537.         RecalcPath
  538.         SetDriveStatus
  539.         GOTO CUSTINST
  540.     ELSE
  541.         GOSUB ASKQUIT
  542.         GOTO CUSTINST
  543.     END IF
  544.  
  545. GETPATH:
  546.     IF Temp$ = "FPPath" THEN
  547.         DEST$ = VVERMEER$
  548.     ELSE
  549.         DEST$ = CONTENTDEST$
  550.     END IF
  551.     SetSymbolValue "EditTextIn", DEST$
  552.     SetSymbolValue "EditFocus", "END"
  553. GETPATHL1:
  554.     WriteToLogFile "FP-Changing install directory."
  555.     IF Temp$ = "FPPath" THEN
  556.         WriteToLogFile "FP-Changing install path of FrontPage to:"
  557.         sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  558.     ELSE
  559.         WriteToLogFile "FP-Changing install path of PWS to:"
  560.         sz$ = UIStartDlg(CUIDLL$, DESTPATH2, "FEditDlgProc", APPHELP, HELPPROC$)
  561.     END IF
  562.  
  563.     IF sz$ = "CONTINUE" THEN
  564.         olddest$ = DEST$
  565.         DEST$ = GetSymbolValue("EditTextOut")
  566.  
  567.         ''Validate new path.
  568.         IF IsDirWritable(ValidateDir(DEST$,1)) = 0 THEN
  569.             DEST$ = olddest$
  570.             UIPop 1
  571.             GOSUB BADPATH
  572.             GOTO GETPATHL1
  573.         END IF
  574.         UIPop 1
  575.  
  576.         ''Recalc if path changed.
  577.         IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  578.             RecalcPath
  579.             SetDriveStatus
  580.         END IF
  581.     
  582.         olddest$ = ""
  583.  
  584.         IF Temp$ = "FPPath" THEN
  585.             VVERMEER$ = DEST$
  586.             SetVermeerDirectoryStructure
  587.             ''Truncate display if too long.
  588.             IF LEN(DEST$) > 23 THEN
  589.                 ReplaceListItem STATUSTEXT$, 4, MID$(DEST$, 1, 23)+"..."
  590.             ELSE
  591.                 ReplaceListItem STATUSTEXT$, 4, DEST$
  592.             END IF
  593.             WriteToLogFile "FP-New Directory = '" + VVERMEEER$+ "'"
  594.             GOTO CUSTINST
  595.         ELSE 'REVIEW
  596.             CONTENTDEST$ = DEST$
  597.             IF ((LEN(DEST$) > 18) AND (OP_SYS="win32")) THEN
  598.                 i% = DoMsgBox("Content Path must be less than 18 characters.", "Vermeer Setup", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  599.                 GOTO GETPATHL1
  600.             ELSE
  601.                 ReplaceListItem STATUSTEXT$, 7, DEST$
  602.             END IF
  603.             WriteToLogFile "FP-New Directory = '" + CONTENTDEST$+ "'"
  604.             GOTO PWSOPTIONS
  605.         END IF
  606.  
  607.     ELSEIF sz$ = "REACTIVATE" THEN
  608.         RecalcPath
  609.         SetDriveStatus
  610.     UIPop 1
  611.         GOTO GETPATHL1
  612.     ELSEIF sz$ = "EXIT" THEN
  613.     UIPop 1
  614.         GOSUB ASKQUIT
  615.         GOTO GETPATHL1
  616.     ELSE
  617.         UIPop 1
  618.         IF Temp$ = "FPPath" THEN
  619.             WriteToLogFile "FP-New Directory = '" + VVERMEEER$+ "'"
  620.             GOTO CUSTINST
  621.         ELSE
  622.             WriteToLogFile "FP-New Directory = '" + CONTENTDEST$+ "'"
  623.             GOTO PWSOPTIONS
  624.         END IF
  625.     END IF
  626.  
  627. PWSOPTIONS:
  628.     sz$ = UIStartDlg(CUIDLL$, OPTIONS, "FCustInstDlgProc2", APPHELP, HELPPROC$)
  629.  
  630.     IF sz$ = "CONTINUE" THEN
  631.         IF sz$ = "CHK3" THEN
  632.             'REVIEW
  633.             RecalcOptFiles PWSDOCFILES
  634.             SetDriveStatus
  635.         END IF
  636.         UIPop 1
  637.         GOTO CUSTINST
  638.     ELSEIF sz$ = "PATH" THEN
  639.         Temp$="Content_Path"
  640.         GOTO GETPATH
  641.     ELSEIF sz$ = "CHK3" THEN
  642.         GOTO PWSOPTIONS
  643.     ELSEIF sz$ = "REACTIVATE" THEN
  644.         RecalcPath
  645.         SetDriveStatus
  646.         GOTO PWSOPTIONS
  647.     ELSEIF sz$ = "EXIT" THEN
  648.         GOSUB ASKQUIT
  649.         GOTO PWSOPTIONS
  650.     ELSE
  651.         UIPop 1
  652.         GOTO CUSTINST
  653.     END IF
  654.  
  655. GETWIN32SPATH:
  656.     IF WIN32ENABLED% = 1 THEN
  657.         GOTO INSTALL
  658.     END IF
  659.  
  660.     WriteToLogFile "FP-Verifying Win32s directory with user."
  661.  
  662.     IF PagingEnabled() = 0 THEN
  663.         i% = DoMsgBox("Use the Control Panel 386 Enhanced icon and configure Windows using the Virtual Memory option.", "Win32s requires Virtual Memory", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  664.         ExitCode% = EXITFAILURE '' Enhanced mode but not paging
  665.     WriteToLogFile "FP-Windows using enhanced mode but not paging."
  666.         GOTO QUIT
  667.     END IF
  668.  
  669.     IF ShareEnabled() = 0 THEN
  670.         i% = DoMsgBox( "File-sharing must be enabled. Run SHARE.EXE before starting Windows or add SHARE.EXE to your AUTOEXEC.BAT file.", "Win32s Setup: SHARE.EXE is not loaded", MB_TASKMODAL+MB_ICONEXCLAMATION+MB_OK)
  671.     END IF
  672.  
  673.     SetSymbolValue "EditTextIn", DESTSYS$
  674.     SetSymbolValue "EditFocus", "END"
  675.  
  676. GETPATHL1_W32:
  677.     sz$ = UIStartDlg(CUIDLL$, VERPATH, "FDispDlgProc", HELPWELCOME, HELPPROC$)
  678.  
  679.     IF sz$ = "CONTINUE" THEN
  680.         IF IsDirWritable(DESTSYS$) = 0 THEN
  681.             GOSUB BADPATH
  682.             GOTO GETPATHL1_W32
  683.         END IF
  684.         UIPop 1
  685.     ELSEIF sz$ = "REACTIVATE" THEN
  686.         UIPop 1
  687.         GOTO GETPATHL1_W32
  688.     ELSEIF sz$ = "BACK" THEN
  689.         UIPop 1
  690.         GOTO WELCOME
  691.     ELSE
  692.         UIPop 1
  693.         GOSUB ASKQUIT
  694.         GOTO GETPATHL1_W32
  695.     END IF
  696.  
  697. COPYFILES:
  698.     IF OLEONLY% = 0 THEN
  699.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite
  700.     END IF
  701.     IF OLE2_32% = 1 THEN
  702.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "0", cmoOverwrite
  703.     END IF
  704.  
  705.     '' Indicate Win32s install failure until all files known copied.
  706.     ExitCode% = EXITFAILURE
  707.     ERR = 0
  708.     CreateDir DEST32S$, cmoNone
  709.  
  710.     Install_With_Win32s OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%
  711.     UpdateSystemIni
  712.     '' Terminate if unhandled fatal error
  713.     IF ERR <> 0 THEN
  714.     WriteToLogFile "FP-Unhandled fatal error in install with win32s, exiting."
  715.     GOTO QUIT
  716.     END IF
  717.  
  718.     IF OLEONLY% = 0 THEN
  719.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "1", cmoOverwrite
  720.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Version", szNewVer$, cmoOverwrite
  721.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Nls", "AnsiCP", "1252", cmoOverwrite
  722.     END IF
  723.     IF OLE2_32% = 1 THEN
  724.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "1", cmoOverwrite
  725.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Version", szOleNewVer, cmoOverwrite
  726.     END IF
  727.  
  728.     '' Indicate Win32s correctly copied and installed.
  729.     ExitCode% = EXITSUCCESS
  730.  
  731. INSTALL:
  732.     IF VERMEERINSTALLED = 0 THEN  ''ie. vermeer not installed with Win32s (W32 not needed)
  733.         WriteToLogFile "FP-Installing FrontPage, no Win32."
  734.         ClearCopyList
  735.         Install_Vermeer
  736.         CopyFilesInCopyList
  737.     END IF
  738.  
  739.     IF ERR = STFQUIT THEN
  740.         GOTO QUIT
  741.     END IF
  742.     
  743.     CreateIniKeyValue DESTWIN$ + "Vermeer.ini", "FrontPage", "FrontPageRoot", VVERMEER$, cmoOverwrite
  744.  
  745.     IF ((GetConfigNumFiles < 40) AND (OP_SYS="win32")) THEN
  746.         sz$ = UIStartDlg(CUIDLL$, FILESLOW, "FInfo0DlgProc", 0, "")
  747.         UIPop 1
  748.     END IF
  749.     IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  750.         WriteToLogFile "FP-Creating FrontPage Program group."
  751.         CreateProgmanGroup "Vermeer", "", cmoNone
  752.         CreateProgmanItem "Vermeer", "FrontPage Explorer", MakePath(VBIN$,"fpexplor.exe"), "", cmoOverwrite
  753.         CreateProgmanItem "Vermeer", "FrontPage Editor", MakePath(VBIN$,"fpeditor.exe"), "", cmoOverwrite
  754.         CreateIniKeyValue DESTWIN$ + "Vermeer.ini", "FrontPage", "FrontPageBin", VBIN$, cmoOverwrite
  755.         CreateIniKeyValue DESTWIN$ + "Vermeer.ini", "FrontPage", "WebWizardsDir", VWEBS$, cmoOverwrite
  756.         CreateIniKeyValue DESTWIN$ + "Vermeer.ini", "FrontPage", "PageWizardsDir", VPAGES$, cmoOverwrite
  757.         i% = VermeerUpdateRegistry(VVERMEER$)
  758.     END IF
  759.  
  760.     IF GetListItem(CHECKSTATES$, ALISAFILES) = "ON" THEN
  761.         PWSConfigUpdate
  762.         WriteToLogFile "FP-Calling Alisedit."
  763.         Temp$ = ALISADEST$ + "\CONF\ALISEDIT.EXE " + ALISADEST$ + " " + CONTENTDEST$ + " " + DEST$
  764.         RUN Temp$ 
  765.         WriteToLogFile "FP-Creating PWS program item."
  766.         CreateProgmanGroup "Vermeer", "", cmoNone
  767.         IF OP_SYS$ = "win32"  THEN 
  768.             Temp$ = "httpd.exe -d " + ALISADEST$ + " -l " + ALISADEST$ + "\vt10l16.dll"
  769.         ELSE
  770.             Temp$ = "vhttpd32.exe -d " + ALISADEST$
  771.         END IF
  772.         CreateProgmanItem "Vermeer", "Personal Web Server", MakePath(ALISADEST$, Temp$), "", cmoOverwrite
  773.  
  774.         IF OP_SYS$ = "win32"  THEN
  775.             IF ShareEnabled() = 0 THEN
  776.                 sz$ = UIStartDlg(CUIDLL$, BADSHARE, "FInfo0DlgProc", 0, "")
  777.                 UIPop 1
  778.             ELSE
  779.                 Temp$ = GetVersionOfFile(DESTSYS$+"ver.dll")
  780.                 IF Temp$ < "3.11" THEN
  781.                     IF SearchForShare() = 0 THEN
  782.                         sz$ = UIStartDlg(CUIDLL$, BADSHARE, "FInfo0DlgProc", 0, "")
  783.                         UIPop 1
  784.                     END IF
  785.                 END IF
  786.             END IF
  787.         END IF
  788.  
  789.         'Setup default service
  790.         IF WIN32ENABLED% = 1 THEN
  791.             WriteToLogFile "FP-Setting up default service."
  792.             Temp$ = VBIN$ + "\fpsrvadm.exe -t vermeer -c " + CONTENTDEST$
  793.             RUN Temp$
  794.         ELSE
  795.             WriteToLogFile "FP-Creating icon for fpsrvadm.exe."
  796.             CreateIniKeyValue DESTWIN$ + "win.ini", "FrontPage Server Admin", "CommandLine", "-t vermeer -c " + CONTENTDEST$, cmoOverwrite
  797.             Temp$ = GetIniKeyString(DESTWIN$ + "win.ini", "windows", "run")
  798.             CreateIniKeyValue DESTWIN$ + "win.ini", "windows", "run", Temp$+" "+VBIN$ + "\fpsrvadm.exe", cmoOverwrite
  799.         END IF
  800.     END IF
  801.     IF ((GetListItem(CHECKSTATES$, ALISAFILES) = "ON") OR (GetListItem(CHECKSTATES$, EXTENDERFILES) = "ON")) THEN
  802.         CreateProgmanItem "Vermeer", "Server Administrator", MakePath(VBIN$, "fpsrvadm.exe"), "", cmoOverwrite
  803.     END IF
  804.  
  805.     IF ((GetListItem(CHECKSTATES$, ALISAFILES) = "ON") OR (GetListItem(CHECKSTATES$, EXTENDERFILES) = "ON") OR (GetListItem(CHECKSTATES$, APPFILES) = "ON")) THEN
  806.         CreateProgmanItem "Vermeer", "Check Installation", MakePath(VBIN$,"fpchk.exe"), "", cmoOverwrite
  807.         CreateProgmanItem "Vermeer", "FrontPage TCP/IP Test", MakePath(VBIN$,"tcptest.exe"), "", cmoOverwrite
  808.     END IF
  809.  
  810. QUIT:
  811.     '' error handler for final message box routines
  812.     ON ERROR GOTO ERRQUIT
  813.     IF ERR = 0 THEN
  814.         dlg% = ExitCode%
  815.     ELSEIF ERR = STFQUIT THEN
  816.         IF (OLE_PROTECT% = 1) THEN
  817.             '' Free all previously loaded libraries
  818.             FreeLibrary GetModuleHandle("compobj")
  819.             FreeLibrary GetModuleHandle("ole2")
  820.             FreeLibrary GetModuleHandle("ole2prox")
  821.             FreeLibrary GetModuleHandle("ole2conv")
  822.             FreeLibrary GetModuleHandle("storage")
  823.             FreeLibrary GetModuleHandle("ole2nls")
  824.             FreeLibrary GetModuleHandle("ole2disp")
  825.             FreeLibrary GetModuleHandle("typelib")
  826.         END IF
  827.         dlg% = EXITQUIT
  828.         ExitCode% = EXITQUIT
  829.     ELSE
  830.         dlg% = EXITFAILURE
  831.         ExitCode% = EXITQUIT
  832.     END IF
  833.  
  834. QUITL1:
  835.     IF WIN32ENABLED% = 1 THEN
  836.         IF ExitCode% = EXITSUCCESS THEN
  837.         sz$ = UIStartDlg(CUIDLL$, EXITSUCCESS_NOWIN32, "FInfo0DlgProc", 0, "")
  838.             IF sz$ = "REACTIVATE" THEN
  839.                 UIPop 1
  840.                 GOTO QUITL1
  841.             END IF
  842.             UIPop 1
  843.         CloseLogFile
  844.             END
  845.         END IF
  846.     END IF
  847.  
  848.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  849.     IF sz$ = "REACTIVATE" THEN
  850.         UIPop 1
  851.         GOTO QUITL1
  852.     END IF
  853.     UIPop 1
  854.  
  855.     IF ExitCode% = EXITSUCCESS THEN
  856.         IF RebootSystem(OLEONLY% and not OLE_OLEBOOT%) = 0 THEN
  857.             CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite
  858.             IF OLE2_32% = 1 THEN
  859.                 CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "0", cmoOverwrite
  860.             END IF
  861.             i% = DoMsgBox("Win32s is not properly configured and Setup must be run again.", "Unable to Restart Windows", MB_ICONEXCLAMATION+MB_OK+MB_TASKMODAL)
  862.         END IF
  863.     ENDIF
  864.     CloseLogFile
  865.     END
  866.  
  867. '' Fatal error handler for error message routine
  868. ERRQUIT:
  869.     i% = DoMsgBox("Setup sources were corrupted!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  870.     CloseLogFile
  871.     END
  872.  
  873. '' Bypass run-time errors. Let final dialog box display fatal error message.
  874. ERRNORMAL:
  875.     '' Check if user cancelled setup
  876.     IF ERR = STFQUIT THEN
  877.     GOTO QUIT
  878.     END IF
  879.     RESUME NEXT
  880.  
  881.  
  882. TOOBIG:
  883.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  884.     IF sz$ = "REACTIVATE" THEN
  885.         RecalcPath
  886.         SetDriveStatus
  887.         GOTO TOOBIG
  888.     END IF
  889.     UIPop 1
  890.     RETURN
  891.  
  892.  
  893. BADPATH:
  894.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  895.     IF sz$ = "REACTIVATE" THEN
  896.         RecalcPath
  897.         SetDriveStatus
  898.         GOTO BADPATH
  899.     END IF
  900.     UIPop 1
  901.     RETURN
  902.  
  903.  
  904.  
  905. ASKQUIT:
  906.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  907.  
  908.     IF sz$ = "EXIT" THEN
  909.         UIPop 1
  910.         UIPopAll
  911.         ERROR STFQUIT
  912.     ELSEIF sz$ = "REACTIVATE" THEN
  913.         GOTO ASKQUIT
  914.     ELSE
  915.         UIPop 1
  916.     END IF
  917.     RETURN
  918.  
  919. SUB AddOptFilesToCopyList (ftype%) STATIC
  920.  
  921.     IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
  922.         SrcDir$ = GetSymbolValue("STF_SRCDIR")
  923.         IF ftype% = APPFILES THEN  '' Vermeer
  924.             AddSectionFilesToCopyList "AppFiles", SrcDir$, VBIN$
  925.             AddSectionFilesToCopyList "images", SrcDir$, VVERMEER$+"\images"
  926.             AddSectionFilesToCopyList "data", SrcDir$, VVERMEER$+"\data"
  927.             AddSectionFilesToCopyList "WebExtender_WinSystem_mini", SrcDir$, DESTSYS$
  928.             'Add Webs here
  929.             AddSectionFilesToCopyList "Webs_custsupp", SrcDir$, VWEBS$+"\custsupp.tem"
  930.             AddSectionFilesToCopyList "Webs_custsupp_image", SrcDir$, VWEBS$+"\custsupp.tem\images"
  931.             AddSectionFilesToCopyList "Webs_empty", SrcDir$, VWEBS$+"\empty.tem"
  932.             AddSectionFilesToCopyList "Webs_homepage", SrcDir$, VWEBS$+"\homepage.tem"
  933.             AddSectionFilesToCopyList "Webs_normal", SrcDir$, VWEBS$+"\normal.tem"
  934.             AddSectionFilesToCopyList "Webs_project", SrcDir$, VWEBS$+"\project.tem"
  935.             AddSectionFilesToCopyList "Webs_project_image", SrcDir$, VWEBS$+"\project.tem\images"
  936.             AddSectionFilesToCopyList "Webs_vtipres", SrcDir$, VWEBS$+"\vtipres.wiz"
  937.             AddSectionFilesToCopyList "Webs_vtidisc", SrcDir$, VWEBS$+"\vtidisc.wiz"
  938.             AddSectionFilesToCopyList "Webs_vtitut1", SrcDir$, VWEBS$+"\vtitut1.tem"
  939.             'Add Pages here
  940.             AddSectionFilesToCopyList "Page_confirm", SrcDir$, VPAGES$+"\confirm.tem"
  941.             AddSectionFilesToCopyList "Page_normal", SrcDir$, VPAGES$+"\normal.tem"
  942.             AddSectionFilesToCopyList "Page_biblio", SrcDir$, VPAGES$+"\biblio.tem"
  943.             AddSectionFilesToCopyList "Page_empdir", SrcDir$, VPAGES$+"\empdir.tem"
  944.             AddSectionFilesToCopyList "Page_empdir_image", SrcDir$, VPAGES$+"\empdir.tem\images"
  945.             AddSectionFilesToCopyList "Page_faq", SrcDir$, VPAGES$+"\faq.tem"
  946.             AddSectionFilesToCopyList "Page_feedback", SrcDir$, VPAGES$+"\feedback.tem"
  947.             AddSectionFilesToCopyList "Page_glossary", SrcDir$, VPAGES$+"\glossary.tem"
  948.             AddSectionFilesToCopyList "Page_guestbk", SrcDir$, VPAGES$+"\guestbk.tem"
  949.             AddSectionFilesToCopyList "Page_hdocpage", SrcDir$, VPAGES$+"\hdocpage.tem"
  950.             AddSectionFilesToCopyList "Page_hdocpage_image", SrcDir$, VPAGES$+"\hdocpage.tem\images"
  951.             AddSectionFilesToCopyList "Page_hotlist", SrcDir$, VPAGES$+"\hotlist.tem"
  952.             AddSectionFilesToCopyList "Page_jobopp", SrcDir$, VPAGES$+"\jobopp.tem"
  953.             AddSectionFilesToCopyList "Page_jobopp_image", SrcDir$, VPAGES$+"\jobopp.tem\images"
  954.             AddSectionFilesToCopyList "Page_lecture", SrcDir$, VPAGES$+"\lecture.tem"
  955.             AddSectionFilesToCopyList "Page_offdir", SrcDir$, VPAGES$+"\offdir.tem"
  956.             AddSectionFilesToCopyList "Page_pressdir", SrcDir$, VPAGES$+"\pressdir.tem"
  957.             AddSectionFilesToCopyList "Page_pressrel", SrcDir$, VPAGES$+"\pressrel.tem"
  958.             AddSectionFilesToCopyList "Page_proddesc", SrcDir$, VPAGES$+"\proddesc.tem"
  959.             AddSectionFilesToCopyList "Page_regform", SrcDir$, VPAGES$+"\regform.tem"
  960.             AddSectionFilesToCopyList "Page_reguser", SrcDir$, VPAGES$+"\reguser.tem"
  961.             AddSectionFilesToCopyList "Page_search", SrcDir$, VPAGES$+"\search.tem"
  962.             AddSectionFilesToCopyList "Page_seminar", SrcDir$, VPAGES$+"\seminar.tem"
  963.             AddSectionFilesToCopyList "Page_survey", SrcDir$, VPAGES$+"\survey.tem"
  964.             AddSectionFilesToCopyList "Page_swdata", SrcDir$, VPAGES$+"\swdata.tem"
  965.             AddSectionFilesToCopyList "Page_swdata_image", SrcDir$, VPAGES$+"\swdata.tem\images"
  966.             AddSectionFilesToCopyList "Page_toc", SrcDir$, VPAGES$+"\toc.tem"
  967.             AddSectionFilesToCopyList "Page_vtiform", SrcDir$, VPAGES$+"\vtiform.wiz"
  968.             AddSectionFilesToCopyList "Page_vtihome", SrcDir$, VPAGES$+"\vtihome.wiz"
  969.             AddSectionFilesToCopyList "Page_whatsnew", SrcDir$, VPAGES$+"\whatsnew.tem"
  970.             'Various Obsolete files to be removed
  971.             AddSectionFilesToCopyList "VermeerObsolete", SrcDir$, VBIN$
  972.             AddSectionFilesToCopyList "VermeerSystemObsolete", SrcDir$, DESTWIN$
  973.             IF OP_SYS$ = "win32"  THEN ''Copy the right version of mfc*.dll
  974.                 AddSectionFilesToCopyList "16bitMFC", SrcDir$, DESTSYS$
  975.             ELSEIF OP_SYS$ = "winnt"  THEN
  976.                 AddSectionFilesToCopyList "32bitMFC", SrcDir$, DESTWIN$ + "system32\"
  977.             END IF
  978.         ELSEIF ftype% = ALISAFILES THEN  ''Personal Web Server
  979.             CopyPWSFileSections
  980.             'Various WebExtenter files
  981.             AddSectionFilesToCopyList "images", SrcDir$, VVERMEER$+"\images"
  982.             AddSectionFilesToCopyList "WebExtender_WinSystem_mini", SrcDir$, DESTSYS$
  983.             AddSectionFilesToCopyList "WebExtender_WinSystem_full", SrcDir$, DESTSYS$
  984.             AddSectionFilesToCopyList "WebExtender_Bin", SrcDir$, VBIN$
  985.             AddSectionFilesToCopyList "WebExtender", SrcDir$, VVERMEER$+"\_vti_bin"
  986.             AddSectionFilesToCopyList "WebExtender_aut", SrcDir$, VVERMEER$+"\_vti_bin\_vti_aut"
  987.             AddSectionFilesToCopyList "WebExtender_adm", SrcDir$, VVERMEER$+"\_vti_bin\_vti_adm"
  988.             IF (GetListItem(CHECKSTATES$, PWSDOCFILES) = "ON") THEN
  989.                 AddSectionFilesToCopyList "Content_DOC", SrcDir$, CONTENTDEST$
  990.                 AddSectionFilesToCopyList "Content_vtipvt_DOC", SrcDir$, CONTENTDEST$+"\_vti_pvt"
  991.             ELSE
  992.                 AddSectionFilesToCopyList "Content_NODOC", SrcDir$, CONTENTDEST$
  993.                 AddSectionFilesToCopyList "Content_vtipvt_NODOC", SrcDir$, CONTENTDEST$+"\_vti_pvt"
  994.             ENDIF
  995.             AddSectionFilesToCopyList "Content_jpg", SrcDir$, CONTENTDEST$
  996.             IF OP_SYS$ = "win32"  THEN ''Copy the right version of mfc*.dll
  997.                 AddSectionFilesToCopyList "16bitMFC", SrcDir$, DESTSYS$
  998.             ELSEIF OP_SYS$ = "winnt"  THEN
  999.                 AddSectionFilesToCopyList "32bitMFC", SrcDir$, DESTWIN$ + "system32\"
  1000.             END IF
  1001.         ELSEIF ((ftype% = PWSDOCFILES) AND (GetListItem(CHECKSTATES$, ALISAFILES) = "ON")) THEN  ''Personal Web Server Documentation
  1002.               CopyPWSDocFileSections
  1003.         ELSEIF ftype% = EXTENDERFILES THEN
  1004.             'Various WebExtenter files
  1005.             AddSectionFilesToCopyList "images", SrcDir$, VVERMEER$+"\images"
  1006.             AddSectionFilesToCopyList "WebExtender_WinSystem_mini", SrcDir$, DESTSYS$
  1007.             AddSectionFilesToCopyList "WebExtender_WinSystem_full", SrcDir$, DESTSYS$
  1008.             AddSectionFilesToCopyList "WebExtender_Bin", SrcDir$, VBIN$
  1009.             AddSectionFilesToCopyList "WebExtender", SrcDir$, VVERMEER$+"\_vti_bin"
  1010.             AddSectionFilesToCopyList "WebExtender_aut", SrcDir$, VVERMEER$+"\_vti_bin\_vti_aut"
  1011.             AddSectionFilesToCopyList "WebExtender_adm", SrcDir$, VVERMEER$+"\_vti_bin\_vti_adm"
  1012.             IF OP_SYS$ = "win32"  THEN ''Copy the right version of mfc*.dll
  1013.                 AddSectionFilesToCopyList "16bitMFC", SrcDir$, DESTSYS$
  1014.             ELSEIF OP_SYS$ = "winnt"  THEN
  1015.                 AddSectionFilesToCopyList "32bitMFC", SrcDir$, DESTWIN$ + "system32\"
  1016.             END IF
  1017.         END IF 'ftype
  1018.  
  1019.         SrcDir$ = ""
  1020.     END IF
  1021. END SUB
  1022.  
  1023. SUB RecalcOptFiles (ftype%) STATIC
  1024.  
  1025.     CursorSave% = ShowWaitCursor()
  1026.     ClearCopyList
  1027.     IF ftype% < 5 THEN
  1028.         AddOptFilesToCopyList ftype%
  1029.     ELSE
  1030.         SrcDir$ = GetSymbolValue("STF_SRCDIR")
  1031.         AddSectionFilesToCopyList "WebExtender_WinSystem_mini", SrcDir$, DESTSYS$
  1032.     ENDIF
  1033.  
  1034.     fExtra% = 0
  1035.     IF ftype% = APPFILES THEN
  1036.         ListSym$ = APPNEEDS$
  1037.         IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  1038.             ''Add extra cost to Windows drive for ini/progman, etc.
  1039.             ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  1040.             ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  1041.             fExtra% = 1
  1042.         END IF
  1043.     ELSEIF ftype% = PWSDOCFILES THEN
  1044.         ListSym$ = PWSDOCNEEDS$
  1045.     ELSEIF ftype% = ALISAFILES THEN
  1046.         ListSym$ = ALISANEEDS$
  1047.     ELSEIF ftype% = EXTENDERFILES THEN
  1048.         ListSym$ = EXTENDERNEEDS$
  1049.     ELSEIF ftype% = EXT_MINI THEN
  1050.         ListSym$ = EXT_MINI_NEEDS$
  1051.     END IF
  1052.  
  1053.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  1054.  
  1055.     cost& = 0
  1056.     FOR i% = 1 TO 26 STEP 1
  1057.         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  1058.     NEXT i%
  1059.  
  1060.     'REVIEW:
  1061.     ' Not currently displaying size for each checkbox item, might want to do it
  1062.     ' in the future, need to fix up dialog
  1063.     'ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  1064.  
  1065.     IF StillNeed& > 0 THEN
  1066.         ReplaceListItem BIGLIST$, ftype%, "YES"
  1067.     ELSE
  1068.         ReplaceListItem BIGLIST$, ftype%, ""
  1069.     END IF
  1070.  
  1071.     IF fExtra% THEN
  1072.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  1073.     END IF
  1074.     RestoreCursor CursorSave%
  1075.     ListSym$ = ""
  1076. END SUB
  1077.  
  1078.  
  1079. SUB RecalcPath STATIC
  1080.  
  1081.     CursorSave% = ShowWaitCursor()
  1082.     RecalcOptFiles APPFILES  
  1083.     RecalcOptFiles ALISAFILES
  1084.     RecalcOptFiles PWSDOCFILES
  1085.     RecalcOptFiles EXTENDERFILES
  1086.     RecalcOptFiles EXT_MINI
  1087.     RestoreCursor CursorSave%
  1088. END SUB
  1089.  
  1090.  
  1091. SUB SetDriveStatus STATIC
  1092.  
  1093.     drive$ = MID$(ucase$(DEST$), 1, 1)
  1094.     content_drive$ = MID$(ucase$(CONTENTDEST$), 1, 1)
  1095.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  1096.  
  1097.     cost& = AdjustCost(ndrive%) 
  1098.     free& = GetFreeSpaceForDrive(drive$)
  1099.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  1100.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  1101.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  1102.  
  1103.     IF drive$ = WINDRIVE$ THEN
  1104.         ReplaceListItem DRIVETEXT$, 4, ""
  1105.         ReplaceListItem DRIVETEXT$, 5, ""
  1106.         ReplaceListItem DRIVETEXT$, 6, ""
  1107.     ELSE
  1108.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  1109.         cost& = AdjustCost(ndrive%) 
  1110.         IF cost& = 0 THEN
  1111.             ReplaceListItem DRIVETEXT$, 4, ""
  1112.             ReplaceListItem DRIVETEXT$, 5, ""
  1113.             ReplaceListItem DRIVETEXT$, 6, ""
  1114.         ELSE
  1115.             free& = GetFreeSpaceForDrive(WINDRIVE$)
  1116.             ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  1117.             ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  1118.             ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  1119.         END IF
  1120.     END IF
  1121.  
  1122.     IF ((content_drive$ = drive$) OR (content_drive$ = WINDRIVE$)) THEN
  1123.         ReplaceListItem DRIVETEXT$, 7, ""
  1124.         ReplaceListItem DRIVETEXT$, 8, ""
  1125.         ReplaceListItem DRIVETEXT$, 9, ""
  1126.     ELSE
  1127.         cdrive% = ASC(ucase$(content_drive$)) - ASC("A") + 1
  1128.         cost& = AdjustCost(cdrive%) 
  1129.         IF cost& = 0 THEN
  1130.             ReplaceListItem DRIVETEXT$, 7, ""
  1131.             ReplaceListItem DRIVETEXT$, 8, ""
  1132.             ReplaceListItem DRIVETEXT$, 9, ""
  1133.         ELSE
  1134.             free& = GetFreeSpaceForDrive(content_drive$)
  1135.             ReplaceListItem DRIVETEXT$, 7, content_drive$ + ":"
  1136.             ReplaceListItem DRIVETEXT$, 8, STR$(cost& / 1024) + " K"
  1137.             ReplaceListItem DRIVETEXT$, 9, STR$(free& / 1024) + " K"
  1138.         END IF
  1139.     END IF
  1140.  
  1141. END SUB
  1142.  
  1143. SUB CreateVermeerDirectoryStructure STATIC
  1144.  
  1145.     CreateDir VVERMEER$, cmoNone
  1146.     CreateDir VVERMEER$ + "\images", cmoNone
  1147.     CreateDir VVERMEER$ + "\_vti_bin", cmoNone
  1148.     CreateDir VVERMEER$ + "\_vti_bin\_vti_aut", cmoNone
  1149.     CreateDir VVERMEER$ + "\_vti_bin\_vti_adm", cmoNone
  1150.     CreateDir VVERMEER$ + "\data", cmoNone
  1151.     CreateDir VVERMEER$ + "\temp", cmoNone
  1152.     CreateDir VBIN$, cmoNone
  1153.     CreateDir VWEBS$, cmoNone
  1154.     CreateDir VWEBS$+"\VTIPRES.WIZ", cmoNone
  1155.     CreateDir VWEBS$+"\homepage.tem", cmoNone
  1156.     CreateDir VPAGES$, cmoNone
  1157.     CreateDir VPAGES$ + "\normal.tem", cmoNone
  1158.     CreateDir VPAGES$ + "\vtihome.wiz", cmoNone
  1159.     CreateDir VPAGES$ + "\whatsnew.tem", cmoNone
  1160. END SUB
  1161.  
  1162. SUB SetVermeerDirectoryStructure STATIC
  1163.  
  1164.     VBIN$ = VVERMEER$ + "\BIN"
  1165.     VWEBS$ = VVERMEER$ + "\WEBS"
  1166.     VPAGES$ = VVERMEER$ + "\PAGES"
  1167.     ALISADEST$ = VVERMEER$ + "\HTTPD"
  1168. END SUB
  1169.  
  1170. SUB CreatePWSDirStructure STATIC
  1171.  
  1172.     DENNY$ = VVERMEER$ + "\httpd"
  1173.     CreateDir DENNY$, cmoNone
  1174.     DENNYSUB$ = VVERMEER$ + "\httpd\conf"
  1175.     CreateDir DENNYSUB$, cmoNone
  1176.     DENNYSUB$ = VVERMEER$ + "\httpd\logs"
  1177.     CreateDir DENNYSUB$, cmoNone
  1178.     DENNYSUB$ = VVERMEER$ + "\httpd\conf\maps"
  1179.     CreateDir DENNYSUB$, cmoNone
  1180.     DENNYSUB$ = VVERMEER$ + "\httpd\support"
  1181.     CreateDir DENNYSUB$, cmoNone
  1182.     DENNYSUB$ = VVERMEER$ + "\httpd\support\htpasswd"
  1183.     CreateDir DENNYSUB$, cmoNone
  1184.     DENNYSUB$ = VVERMEER$ + "\httpd\support\logcycle"
  1185.     CreateDir DENNYSUB$, cmoNone
  1186.     DENNYSUB$ = VVERMEER$ + "\httpd\support\shutsrvr"
  1187.     CreateDir DENNYSUB$, cmoNone
  1188.     DENNYSUB$ = VVERMEER$ + "\httpd\support\sighttpd"
  1189.     CreateDir DENNYSUB$, cmoNone
  1190.     DENNYSUB$ = VVERMEER$ + "\httpd\icons"
  1191.     CreateDir DENNYSUB$, cmoNone
  1192.  
  1193.     DENNYSUB$ = CONTENTDEST$ 
  1194.     CreateDir DENNYSUB$, cmoNone
  1195.     DENNYSUB$ = CONTENTDEST$ + "\_vti_pvt"
  1196.     CreateDir DENNYSUB$, cmoNone
  1197.  
  1198. END SUB
  1199.  
  1200.  
  1201. SUB CreatePWSDOCDirStructure STATIC
  1202.  
  1203.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\cgi-dos"
  1204.     CreateDir DENNYSUB$, cmoNone
  1205.  
  1206.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\cgi-src"
  1207.     CreateDir DENNYSUB$, cmoNone
  1208.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\cgi-src\imagemap"
  1209.     CreateDir DENNYSUB$, cmoNone
  1210.  
  1211.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\cgi-win"
  1212.     CreateDir DENNYSUB$, cmoNone
  1213.  
  1214.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs"
  1215.     CreateDir DENNYSUB$, cmoNone
  1216.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\demo"
  1217.     CreateDir DENNYSUB$, cmoNone
  1218.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\demo\demotree"
  1219.     CreateDir DENNYSUB$, cmoNone
  1220.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\demo\demotree\goodies"
  1221.     CreateDir DENNYSUB$, cmoNone
  1222.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\demo\images"
  1223.     CreateDir DENNYSUB$, cmoNone
  1224.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc"
  1225.     CreateDir DENNYSUB$, cmoNone
  1226.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\images"
  1227.     CreateDir DENNYSUB$, cmoNone
  1228.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\info"
  1229.     CreateDir DENNYSUB$, cmoNone
  1230.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\auth"
  1231.     CreateDir DENNYSUB$, cmoNone
  1232.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\auth\bydomain"
  1233.     CreateDir DENNYSUB$, cmoNone
  1234.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\auth\bydomexc"
  1235.     CreateDir DENNYSUB$, cmoNone
  1236.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\auth\bypasswd"
  1237.     CreateDir DENNYSUB$, cmoNone
  1238.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\auth\bypwmult"
  1239.     CreateDir DENNYSUB$, cmoNone
  1240.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\info\cgi"
  1241.     CreateDir DENNYSUB$, cmoNone
  1242.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\info\forms"
  1243.     CreateDir DENNYSUB$, cmoNone
  1244.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\setup"
  1245.     CreateDir DENNYSUB$, cmoNone
  1246.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\setup\access"
  1247.     CreateDir DENNYSUB$, cmoNone
  1248.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\setup\admin"
  1249.     CreateDir DENNYSUB$, cmoNone
  1250.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\setup\httpd"
  1251.     CreateDir DENNYSUB$, cmoNone
  1252.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\setup\scripts"
  1253.     CreateDir DENNYSUB$, cmoNone
  1254.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\setup\srm"
  1255.     CreateDir DENNYSUB$, cmoNone
  1256.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\images"
  1257.     CreateDir DENNYSUB$, cmoNone
  1258.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\icons"
  1259.     CreateDir DENNYSUB$, cmoNone
  1260. END SUB
  1261.  
  1262. SUB CopyPWSFileSections STATIC
  1263.  
  1264.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  1265.     DENNY$ = VVERMEER$ + "\httpd"
  1266.     AddSectionFilesToCopyList "httpd", SrcDir$, DENNY$
  1267.     DENNYSUB$ = VVERMEER$ + "\httpd\conf"
  1268.     AddSectionFilesToCopyList "httpd_conf", SrcDir$, DENNYSUB$
  1269.     DENNYSUB$ = VVERMEER$ + "\httpd\conf\maps"
  1270.     AddSectionFilesToCopyList "httpd_conf_maps", SrcDir$, DENNYSUB$
  1271.     DENNYSUB$ = VVERMEER$ + "\httpd\support"
  1272.     AddSectionFilesToCopyList "whttpd14_support", SrcDir$, DENNYSUB$
  1273.     DENNYSUB$ = VVERMEER$ + "\httpd\support\htpasswd"
  1274.     AddSectionFilesToCopyList "whttpd14_support_htpasswd", SrcDir$, DENNYSUB$
  1275.     DENNYSUB$ = VVERMEER$ + "\httpd\support\logcycle"
  1276.     AddSectionFilesToCopyList "whttpd14_support_logcycle", SrcDir$, DENNYSUB$
  1277.     DENNYSUB$ = VVERMEER$ + "\httpd\support\shutsrvr"
  1278.     AddSectionFilesToCopyList "whttpd14_support_shutsrvr", SrcDir$, DENNYSUB$
  1279.     DENNYSUB$ = VVERMEER$ + "\httpd\support\sighttpd"
  1280.     AddSectionFilesToCopyList "whttpd14_support_sighttpd", SrcDir$, DENNYSUB$
  1281.     DENNYSUB$ = VVERMEER$ + "\httpd\icons"
  1282.     AddSectionFilesToCopyList "whttpd14_icons", SrcDir$, DENNYSUB$
  1283. END SUB
  1284.  
  1285. SUB CopyPWSDOCFileSections STATIC
  1286.  
  1287.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  1288.     AddSectionFilesToCopyList "whttpd14_vbrun300", SrcDir$, DESTSYS$
  1289.  
  1290.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd"
  1291.     AddSectionFilesToCopyList "whttpd14", SrcDir$, DENNYSUB$
  1292.  
  1293.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\_vti_shm"
  1294.     AddSectionFilesToCopyList "whttpd14_vti_shm", SrcDir$, DENNYSUB$
  1295.  
  1296.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\_vti_txt\default.wti"
  1297.     AddSectionFilesToCopyList "whttpd14_vti_txt", SrcDir$, DENNYSUB$
  1298.  
  1299.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\images"
  1300.     AddSectionFilesToCopyList "whttpd14_images", SrcDir$, DENNYSUB$
  1301.  
  1302.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\cgi-dos"
  1303.     AddSectionFilesToCopyList "whttpd14_cgi-dos", SrcDir$, DENNYSUB$
  1304.  
  1305.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\cgi-src"
  1306.     AddSectionFilesToCopyList "whttpd14_cgi-src", SrcDir$, DENNYSUB$
  1307.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\cgi-src\imagemap"
  1308.     AddSectionFilesToCopyList "whttpd14_cgi-src_imagemap", SrcDir$, DENNYSUB$
  1309.  
  1310.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\cgi-win"
  1311.     AddSectionFilesToCopyList "whttpd14_cgi-win", SrcDir$, DENNYSUB$
  1312.  
  1313.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs"
  1314.     AddSectionFilesToCopyList "whttpd14_htdocs", SrcDir$, DENNYSUB$
  1315.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\demo"
  1316.     AddSectionFilesToCopyList "whttpd14_htdocs_demo", SrcDir$, DENNYSUB$
  1317.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\demo\demotree"
  1318.     AddSectionFilesToCopyList "whttpd14_htdocs_demo_demotree", SrcDir$, DENNYSUB$
  1319.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\demo\demotree\goodies"
  1320.     AddSectionFilesToCopyList "whttpd14_htdocs_demo_demotree_goodies", SrcDir$, DENNYSUB$
  1321.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\demo\images"
  1322.     AddSectionFilesToCopyList "whttpd14_htdocs_demo_images", SrcDir$, DENNYSUB$
  1323.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc"
  1324.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc", SrcDir$, DENNYSUB$
  1325.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\images"
  1326.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc_images", SrcDir$, DENNYSUB$
  1327.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\info"
  1328.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc_info", SrcDir$, DENNYSUB$
  1329.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\auth\bydomain"
  1330.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc_auth_bydomain", SrcDir$, DENNYSUB$
  1331.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\auth\bydomexc"
  1332.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc_auth_bydomexc", SrcDir$, DENNYSUB$
  1333.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\auth\bypasswd"
  1334.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc_auth_bypasswd", SrcDir$, DENNYSUB$
  1335.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\auth\bypwmult"
  1336.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc_auth_bypwmult", SrcDir$, DENNYSUB$
  1337.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\info\cgi"
  1338.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc_info_cgi", SrcDir$, DENNYSUB$
  1339.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\info\forms"
  1340.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc_info_forms", SrcDir$, DENNYSUB$
  1341.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\setup"
  1342.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc_setup", SrcDir$, DENNYSUB$
  1343.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\setup\access"
  1344.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc_setup_access", SrcDir$, DENNYSUB$
  1345.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\setup\admin"
  1346.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc_setup_admin", SrcDir$, DENNYSUB$
  1347.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\setup\httpd"
  1348.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc_setup_httpd", SrcDir$, DENNYSUB$
  1349.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\setup\scripts"
  1350.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc_setup_scripts", SrcDir$, DENNYSUB$
  1351.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\httpddoc\setup\srm"
  1352.     AddSectionFilesToCopyList "whttpd14_htdocs_httpddoc_setup_srm", SrcDir$, DENNYSUB$
  1353.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\htdocs\images"
  1354.     AddSectionFilesToCopyList "whttpd14_htdocs_images", SrcDir$, DENNYSUB$
  1355.     DENNYSUB$ = CONTENTDEST$ + "\winhttpd\icons"
  1356.     AddSectionFilesToCopyList "whttpd14_icons", SrcDir$, DENNYSUB$
  1357. END SUB
  1358.  
  1359. SUB PWSConfigUpdate STATIC
  1360.  
  1361.     IF DoesFileExist(ALISADEST$ + "\conf\srm.cnf", femExists ) THEN
  1362.         WriteToLogFile "FP - srm.cnf exists."
  1363.     ELSE
  1364.         RenameFile ALISADEST$+"\conf\srm.org" , "srm.cnf"
  1365.     END IF
  1366.     IF DoesFileExist(ALISADEST$ + "\conf\httpd.cnf", femExists ) THEN 
  1367.         WriteToLogFile "FP - httpd.cnf exists."
  1368.     ELSE
  1369.         WriteToLogFile "FP - Renaming httpd.org"
  1370.         RenameFile ALISADEST$+"\conf\httpd.org" , "httpd.cnf"
  1371.     END IF
  1372.     IF DoesFileExist(ALISADEST$ + "\conf\access.cnf", femExists ) THEN 
  1373.         WriteToLogFile "FP - access.cnf exists."
  1374.     ELSE
  1375.         WriteToLogFile "FP - Renaming access.org"
  1376.         RenameFile ALISADEST$+"\conf\access.org" , "access.cnf"
  1377.     END IF
  1378.     IF DoesFileExist(ALISADEST$ + "\conf\imagemap.cnf", femExists ) THEN 
  1379.         WriteToLogFile "FP - imagemap.cnf exists."
  1380.     ELSE
  1381.         WriteToLogFile "FP - Renaming imagemap.org"
  1382.         RenameFile ALISADEST$+"\conf\imagemap.org" , "imagemap.cnf"
  1383.     END IF
  1384. END SUB
  1385.  
  1386. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  1387.     IF szDir$ = "" THEN
  1388.         MakePath = szFile$
  1389.     ELSEIF szFile$ = "" THEN
  1390.         MakePath = szDir$
  1391.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  1392.         MakePath = szDir$ + szFile$
  1393.     ELSE
  1394.         MakePath = szDir$ + "\" + szFile$
  1395.     END IF
  1396. END FUNCTION
  1397.  
  1398. SUB Install_Vermeer STATIC
  1399.     VERMEERINSTALLED% = 1
  1400.     IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN 'installing Vermeer
  1401.         CreateVermeerDirectoryStructure
  1402.         AddOptFilesToCopyList APPFILES
  1403.     END IF
  1404.     IF GetListItem(CHECKSTATES$, ALISAFILES) = "ON" THEN 'installing Alisa
  1405.         CreatePWSDirStructure
  1406.         AddOptFilesToCopyList ALISAFILES
  1407.         IF GetListItem(CHECKSTATES$, PWSDOCFILES) = "ON" THEN 'installing Personal WebServer Doc
  1408.             CreatePWSDOCDirStructure
  1409.             AddOptFilesToCopyList PWSDOCFILES
  1410.         END IF
  1411.     END IF
  1412.     IF ((GetListItem(CHECKSTATES$, APPFILES) = "ON") OR    (GetListItem(CHECKSTATES$, ALISAFILES) = "ON") OR (GetListItem(CHECKSTATES$, EXTENDERFILES) = "ON")) THEN
  1413.         AddOptFilesToCopyList EXTENDERFILES
  1414.     END IF
  1415.  
  1416.  
  1417. END SUB
  1418.  
  1419. SUB Install_With_Win32s(OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%) STATIC
  1420.  
  1421.     ClearCopyList
  1422.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  1423.  
  1424.     '' Use file layout sections that specify OLDER file version/time check
  1425.     IF OLEONLY% = 0 THEN
  1426.         AddSectionFilesToCopyList "WindowsSystem", SrcDir$, DESTSYS$
  1427.         AddSectionFilesToCopyList "WindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\"
  1428.         '' Add obsolete files to be removed
  1429.         AddSectionFilesToCopyList "Win32sSystemObsoleteFiles", SrcDir$, DESTSYS$ + "WIN32S\"
  1430.     END IF
  1431.  
  1432.     OLE_PROTECT% = 0
  1433.     OLEINCLUDED% = DoesFileExist( GetSymbolValue("STF_SRCDIR") + "OLE2THK.DL_", femExists )
  1434.     if OLEINCLUDED% = 1 THEN
  1435.         IF (OLE2_16% = 1) OR (OLE2AUTO_16% = 1) THEN
  1436.             IF OLE16RUNAPP% = 1 THEN
  1437.                 '' Force all OLE2 DLLS to be copied during reboot.
  1438.                 i% = SetErrorMode(-32768)
  1439.                 i% = LoadLibrary(DESTSYS$ + "compobj.dll")
  1440.                 i% = LoadLibrary(DESTSYS$ + "ole2.dll")
  1441.                 i% = LoadLibrary(DESTSYS$ + "ole2prox.dll")
  1442.                 i% = LoadLibrary(DESTSYS$ + "ole2conv.dll")
  1443.                 i% = LoadLibrary(DESTSYS$ + "storage.dll")
  1444.                 i% = LoadLibrary(DESTSYS$ + "ole2nls.dll")
  1445.                 i% = LoadLibrary(DESTSYS$ + "ole2disp.dll")
  1446.                 i% = LoadLibrary(DESTSYS$ + "typelib.dll")
  1447.                 OLE_PROTECT% = 1
  1448.             END IF
  1449.             AddSectionFilesToCopyList "OleWindowsSystem", SrcDir$, DESTSYS$
  1450.         END IF
  1451.         IF OLE2_32% = 1 THEN
  1452.             AddSectionFilesToCopyList "OleWindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\"
  1453.         END IF
  1454.         IF (OLE2_16% = 1) OR (OLE2_32% = 1) OR (OLE2AUTO_16% = 1) THEN
  1455.             AddSectionFilesToCopyList "Ole2RegWindowsSystem", SrcDir$, DESTSYS$
  1456.         END IF
  1457.         IF (OLE2AUTO_16% = 1) THEN
  1458.             AddSectionFilesToCopyList "StdoleWindowsSystem", SrcDir$, DESTSYS$
  1459.             IF (OLE16RUNAPP and DoesFileExist(DESTSYS$ + "stdole.tlb", femExists) ) THEN
  1460.                 ' copy stdole.tlb -> tempfile1
  1461.                 stdole1$ = DESTSYS$ + GetTempFileAt(DESTSYS$, "STD")
  1462.                 CopyFile DESTSYS$+"STDOLE.TLB", stdole1$, cmoOverwrit, 0
  1463.                 OLE_OLEBOOT% = 1
  1464.             ENDIF
  1465.         END IF
  1466.     END IF
  1467.  
  1468.     SetRestartDir GetWindowsDir()
  1469.  
  1470.     Install_Vermeer
  1471.     CopyFilesInCopyList
  1472.  
  1473.     IF (OLEINCLUDED% = 1) THEN
  1474.         RecoverFromCopy DESTSYS$ + "compobj.dll"
  1475.         RecoverFromCopy DESTSYS$ + "ole2.dll"
  1476.         RecoverFromCopy DESTSYS$ + "ole2prox.dll"
  1477.         RecoverFromCopy DESTSYS$ + "ole2conv.dll"
  1478.         RecoverFromCopy DESTSYS$ + "storage.dll"
  1479.         RecoverFromCopy DESTSYS$ + "ole2nls.dll"
  1480.         RecoverFromCopy DESTSYS$ + "ole2disp.dll"
  1481.         RecoverFromCopy DESTSYS$ + "typelib.dll"
  1482.     END IF
  1483.  
  1484.     IF (OLE_PROTECT% = 1) THEN
  1485.         '' Free all previously loaded libraries
  1486.         FreeLibrary GetModuleHandle("compobj")
  1487.         FreeLibrary GetModuleHandle("ole2")
  1488.         FreeLibrary GetModuleHandle("ole2prox")
  1489.         FreeLibrary GetModuleHandle("ole2conv")
  1490.         FreeLibrary GetModuleHandle("storage")
  1491.         FreeLibrary GetModuleHandle("ole2nls")
  1492.         FreeLibrary GetModuleHandle("ole2disp")
  1493.         FreeLibrary GetModuleHandle("typelib")
  1494.         OLE_PROTECT% = 0
  1495.     END IF
  1496.     IF (OLE_OLEBOOT% = 1) THEN
  1497.             'rename new stdole.tlb -> tempfile2
  1498.             stdole2$ = GetTempFileAt(DESTSYS$, "STD")
  1499.             RemoveFile DESTSYS$+stdole2$, cmoForce
  1500.             RenameFile DESTSYS$+"STDOLE.TLB" , stdole2$
  1501.             'rename tempfile1 -> stdole.tlb
  1502.             RenameFile stdole1$, "STDOLE.TLB"
  1503.             'write to _mssetup.bat: rename tempfile2 to stdole.tlb
  1504.             WriteLine DESTWIN$+"_MSSETUP.BAT", ""
  1505.             WriteLine DESTWIN$+"_MSSETUP.BAT", "DEL "+DESTSYS$+"STDOLE.TLB"
  1506.             WriteLine DESTWIN$+"_MSSETUP.BAT", "REN "+DESTSYS$+stdole2$+" STDOLE.TLB"
  1507.     ENDIF
  1508.     IF OLEINCLUDED% AND (OLE2_16% OR OLE2_32% OR OLE2AUTO_16%) THEN
  1509.         IF OLE16RUNAPP% THEN
  1510.             reg1$ = DESTWIN$ + GetTempFileAt(DESTWIN$, "REG")
  1511.             CopyFile DESTWIN$+"REG.DAT", reg1$, cmoOverwrit, 0
  1512.         ENDIF
  1513.  
  1514.         RUN "regedit /s " + DESTSYS$ + "ole2.reg"
  1515.  
  1516.         IF OLE16RUNAPP% THEN
  1517.             reg2$ = GetTempFileAt(DESTWIN$, "REG")
  1518.             RemoveFile DESTWIN$ + reg2$, cmoForce
  1519.             RenameFile DESTWIN$ + "REG.DAT" , reg2$
  1520.             'rename tempfile1 -> reg.dat
  1521.             RenameFile reg1$, "REG.DAT"
  1522.             'write to _mssetup.bat: rename tempfile2 to reg.dat
  1523.             WriteLine DESTWIN$+"_MSSETUP.BAT", ""
  1524.             WriteLine DESTWIN$+"_MSSETUP.BAT", "DEL "+DESTWIN$+"REG.DAT"
  1525.             WriteLine DESTWIN$+"_MSSETUP.BAT", "REN "+DESTWIN$ + reg2$+" REG.DAT"
  1526.             OLE_OLEBOOT% = 1
  1527.         ENDIF
  1528.     END IF
  1529. END SUB
  1530.  
  1531. SUB UpdateSystemIni STATIC
  1532.  
  1533.     VxDPath$ = DEST32S$ + "W32S.386"
  1534.     SystemIniPath$ = GetWindowsDir()
  1535.  
  1536.     t% = MakeSystemIni(SystemIniPath$, VxdPath$)
  1537.  
  1538. END SUB
  1539.  
  1540. FUNCTION RebootSystem(OLEONLY%) STATIC AS INTEGER
  1541.  
  1542. '   Check if any files were locked during install.  If the RestartList
  1543. '   is not empty, ExitExecRestart() will restart Windows, cleanup setup
  1544. '   files, and copy over locked files before Windows restarts.
  1545.     i% = RestartListEmpty()
  1546.     IF i% = 0 THEN
  1547. '      ExitExecRestart() only returns if applications refuse to be shutdown.
  1548. '      Win32s is installed but will not operate until Windows is restarted
  1549. '      and the Win32s VxD is loaded.
  1550.        i% = ExitExecRestart()
  1551.        RebootSystem = 0
  1552.     ELSE
  1553. '      If the RestartList list is empty, it is necessary to restart windows
  1554. '      directly.  The MSSETUP program creates _MSRSTRT.EXE and _MSSETUP.BAT
  1555. '      in the restart directory.  This program should be exec'd to handle
  1556. '      proper MSSETUP cleanup (temp files) and restart Windows.
  1557.        IF (OLEONLY% = 1) THEN
  1558.            RebootSystem = 1
  1559.        ELSE
  1560.            i% = ExitWindowsExec( GetWindowsDir() + "_MSRSTRT.EXE", "_MSSETUP.BAT" )
  1561.            RebootSystem = 0
  1562.        END IF
  1563.     ENDIF
  1564.  
  1565. END FUNCTION
  1566.  
  1567. FUNCTION GetTempFileAt(szDir$, szPrefix$) STATIC AS STRING
  1568.     szCurDir$ = CURDIR$
  1569.     CHDIR szDir$ + "."
  1570.     szTempFile$ = STRING$(144, "E")
  1571.     i% = GetTempFileName(TF_FORCEDRIVE, szPrefix$,0, szTempFile$)
  1572.     CHDIR szCurDir$
  1573.     GetTempFileAt = MID$(szTempFile$,3)
  1574. END FUNCTION
  1575.  
  1576. SUB RecoverFromCopy(szFileName$) STATIC
  1577.     IF DoesFileExist(szFileName$, femExist) = 0 THEN
  1578.         szBackFile$ = MID$(szFileName$, 1, LEN(szFileName$)-3) + VERNUM$
  1579.         IF DoesfileExist(szBackFile$, femExist) = 0 THEN
  1580.             i% = DoMsgBox("ERROR: Could not find backup file "+szBackfile$, "Setup Error", MB_ICONEXLAMATION + MB_OK)
  1581.         ELSE
  1582.             CopyFile szBackFile$, szFileName$, cmoTimeStamp, 0
  1583.         END IF
  1584.     END IF
  1585. END SUB
  1586.  
  1587. ' HACK ALERT
  1588. FUNCTION AdjustCost(drv%) STATIC AS LONG
  1589.     IF ((GetListItem(CHECKSTATES$, APPFILES) = "ON") AND (GetListItem(CHECKSTATES$, ALISAFILES) = "ON") AND (GetListItem(CHECKSTATES$, EXTENDERFILES) = "ON")) THEN
  1590.         AdjustCost = VAL(GetListItem(APPNEEDS$, drv%)) + VAL(GetListItem(PWSDOCNEEDS$, drv%)) + VAL(GetListItem(ALISANEEDS$, drv%)) - VAL(GetListItem(EXT_MINI_NEEDS$, drv%))
  1591.     ELSEIF ((GetListItem(CHECKSTATES$, APPFILES) = "ON") AND (GetListItem(CHECKSTATES$, ALISAFILES) = "ON")) THEN
  1592.         AdjustCost = VAL(GetListItem(APPNEEDS$, drv%)) + VAL(GetListItem(PWSDOCNEEDS$, drv%)) + VAL(GetListItem(ALISANEEDS$, drv%)) - VAL(GetListItem(EXT_MINI_NEEDS$, drv%))
  1593.     ELSEIF ((GetListItem(CHECKSTATES$, APPFILES) = "ON") AND (GetListItem(CHECKSTATES$, EXTENDERFILES) = "ON")) THEN
  1594.         AdjustCost = VAL(GetListItem(APPNEEDS$, drv%)) + VAL(GetListItem(EXTENDERNEEDS$, drv%)) - VAL(GetListItem(EXT_MINI_NEEDS$, drv%))
  1595.     ELSEIF ((GetListItem(CHECKSTATES$, ALISAFILES) = "ON") AND (GetListItem(CHECKSTATES$, EXTENDERFILES) = "ON")) THEN
  1596.         AdjustCost = VAL(GetListItem(PWSDOCNEEDS$, drv%)) + VAL(GetListItem(ALISANEEDS$, drv%)) - VAL(GetListItem(EXTENDERNEEDS$, drv%))
  1597.     ELSE
  1598.         AdjustCost = VAL(GetListItem(APPNEEDS$, drv%)) + VAL(GetListItem(PWSDOCNEEDS$, drv%)) + VAL(GetListItem(ALISANEEDS$, drv%)) + VAL(GetListItem(EXTENDERNEEDS$, drv%))
  1599.     ENDIF
  1600. END FUNCTION
  1601.  
  1602. FUNCTION ValidateDir(Path$, State%) STATIC AS STRING
  1603.     Unix_slashTo_dos(Path$)
  1604.     IF (DoesFileExist(Path$, femExists) = 0) THEN
  1605.         IF IsDirWritable(Path$) THEN
  1606.                ValidateDir = Path$
  1607.             IF DoesDirExist(Path$) AND (State > 0) THEN
  1608.                 i% = DoMsgBox("Directory '" + Path$ + "' exists.  Overwrite?", "Setup Detect", MB_TASKMODAL+MB_ICONQUESTION+MB_YESNO)
  1609.                 IF (i% = MB_YES) THEN
  1610.                     ValidateDir = Path$
  1611.                 ELSE 
  1612.                     ValidateDir = ""
  1613.                 END IF
  1614.             END IF
  1615.         ELSE
  1616.                ValidateDir = ""
  1617.         END IF
  1618.     ELSE
  1619.            ValidateDir = ""
  1620.     END IF
  1621. END FUNCTION
  1622.