home *** CD-ROM | disk | FTP | other *** search
/ Mundo do CD-ROM 2 / CDROM02.iso / tlapse / install / winup / 32sinst.mst < prev    next >
Encoding:
Text File  |  1995-08-01  |  27.7 KB  |  823 lines

  1. '**************************************************************************
  2. '*                  MS Test script for Win32s setup program
  3. '**************************************************************************
  4.  
  5. '' $DEFINE DEBUG  ''Define for script development/debugging
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9.  
  10. ''Dialog ID's
  11. CONST WELCOME                  = 100
  12. CONST ASKQUIT                  = 200
  13. CONST DESTPATH                 = 300
  14. CONST EXITFAILURE              = 400
  15. CONST EXITQUIT                 = 600
  16. CONST EXITSUCCESS              = 700
  17. CONST OPTIONS                  = 800
  18. CONST BADPATH                  = 6400
  19.  
  20. CONST HELPWELCOME              = 1000
  21. CONST VERPATH                  = 1100
  22. CONST EXITFAILNOTWIN31         = 1200
  23. CONST EXITFAILNOTENH           = 1300
  24. CONST EXITFAILNOTPAGING        = 1325
  25. CONST EXITFAILNOTINTEL         = 1350
  26. CONST EXITFAILRUNAPP           = 1360
  27. CONST FREECELLINST             = 1400
  28. CONST FREECELLINSTNOWIN32S     = 1450
  29. CONST FREECELLPATH             = 1500
  30. CONST HELPFREECELL             = 1600
  31.  
  32.  
  33. ''Bitmap ID
  34. CONST LOGO = 1
  35.  
  36. ''GetTempFileName flags
  37. CONST TF_FORCEDRIVE            = 128
  38.  
  39. GLOBAL DESTWIN$      ''Windows directory.
  40. GLOBAL DESTSYS$      ''Windows\System directory.
  41. GLOBAL DEST32S$      ''Windows\System\Win32s directory
  42. GLOBAL DESTFREE$     ''Freecell directory
  43. GLOBAL OLE_PROTECT%  ''Indicates whether ole2 dlls were protected from being
  44.                      '' copied.
  45. GLOBAL OLE_OLEBOOT%
  46. GLOBAL VERNUM$       '' Win32s Version Number (i.e., for v1.25 VERNUM$="125"
  47.  
  48. '*** WING
  49. GLOBAL DEST$
  50. DECLARE FUNCTION OnWin3x LIB "setuphlp.DLL" AS INTEGER
  51. DECLARE FUNCTION VflatdPresent LIB "setuphlp.DLL" AS INTEGER
  52. DECLARE FUNCTION GetRealSystemDir LIB "setuphlp.DLL" (szDir$,cbBuf%) AS INTEGER
  53. DECLARE FUNCTION GetRealWindowsSysDir AS STRING
  54. DECLARE SUB RenameFilePlease LIB "setuphlp.DLL" (szOrig$,szNew$) 
  55. DECLARE SUB UpdateWinG32 (szOrig$) 
  56. DECLARE FUNCTION IsWin32FileNewer LIB "setuphlp.DLL" (szOrig$,szNew$) AS INTEGER
  57. '***
  58.  
  59. DECLARE SUB Install(OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%)
  60. DECLARE SUB RecoverFromCopy(szFileName$)
  61. DECLARE SUB UpdateSystemIni
  62. DECLARE FUNCTION RebootSystem(OLEONLY%) AS INTEGER
  63. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  64. DECLARE FUNCTION MakeSystemIni LIB "INIUPD.DLL" (arg1$, arg2$) AS INTEGER
  65. DECLARE FUNCTION RestartWindows LIB "INIUPD.DLL" AS INTEGER
  66. DECLARE FUNCTION OnWindowsNT LIB "INIUPD.DLL" AS INTEGER
  67. DECLARE FUNCTION PagingEnabled LIB "INIUPD.DLL" AS INTEGER
  68. DECLARE FUNCTION ShareEnabled LIB "INIUPD.DLL" AS INTEGER
  69. DECLARE FUNCTION IsWin32sLoaded LIB "INIUPD.DLL" (arg1$) AS INTEGER
  70. DECLARE FUNCTION IsRunningApp LIB "INIUPD.DLL" AS INTEGER
  71. DECLARE FUNCTION SetCuiFlags LIB "MSCUISTF.DLL" (arg1%, arg2%) AS INTEGER
  72. DECLARE FUNCTION ExitWindowsExec LIB "USER.EXE" (arg1$, arg2$) AS INTEGER
  73. DECLARE FUNCTION GetModuleHandle LIB "KRNL386.EXE" (arg1$) AS INTEGER
  74. DECLARE FUNCTION LoadLibrary LIB "KRNL386.EXE" (arg1$) AS INTEGER
  75. DECLARE SUB FreeLibrary LIB "KRNL386.EXE" (arg1%)
  76. DECLARE FUNCTION SetErrorMode LIB "KRNL386.EXE" (arg1%) AS INTEGER
  77.  
  78. DECLARE FUNCTION GetTempFileName LIB "KRNL386.EXE" (drive%, prefix$, u%, filename$) AS INTEGER
  79. DECLARE SUB WriteLine LIB "INIUPD.DLL" (filename$, text$)
  80. DECLARE FUNCTION GetTempFileAt(szDir$, szPrefix$) as string
  81. INIT:
  82.     CUIDLL$ = "mscuistf.dll"            '' Custom user interface dll
  83.     HELPPROC$ = "FHelpDlgProc"          '' Help dialog procedure
  84.     szOldVer$ ="1.00.000     "          '' Reserve space in string for version
  85.     WIN32ENABLED% = 0
  86.     OLEONLY% = 0
  87.     OLE2_16% = 0
  88.     OLE2AUTO_16% = 0
  89.     OLE16RUNAPP% = 0
  90.     OLE_PROTECT% = 0
  91.     OLE_OLEBOOT% = 0
  92.  
  93.     ON ERROR GOTO ERRNORMAL
  94.  
  95.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  96.  
  97.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  98.     IF szInf$ = "" THEN
  99.         szInf$ = GetSymbolValue("STF_CWDDIR") + "32sinst.inf"
  100.     END IF
  101.     ReadInfFile szInf$
  102.  
  103.     WIN32SVER$ = MID$(GetSectionKeyVersion("WindowsSystem", "win32s16"), 1, 4)
  104.     SetTitle "Dust Setup"
  105.     VERNUM$ = MID$(WIN32SVER$, 1, 1) + MID$(WIN32SVER$, 3 , 2)
  106.  
  107.     DESTWIN$ = GetWindowsDir()
  108.     DESTSYS$ = GetWindowsSysDir()
  109.     DEST32S$ = DESTSYS + "WIN32S\"
  110.  
  111. '$IFDEF DEBUG
  112.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  113.     WinDrive$ = MID$(GetWindowsDir, 1, 1)
  114.     IF IsDriveValid(WinDrive$) = 0 THEN
  115.         i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  116.         GOTO QUIT
  117.     END IF
  118. '$ENDIF ''DEBUG
  119.  
  120. CHECK:
  121.  
  122.  
  123. '*** WING
  124.  
  125.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  126.     DEST$ = GetWindowsSysDir
  127.     
  128.     AddSectionFilesToCopyList "wingruntime", SrcDir$, DEST$
  129.     
  130.            '
  131.     ' only use DVA on Windows 3.x
  132.     '
  133.     IF OnWin3x() = 1 THEN
  134.         AddSectionFilesToCopyList "wingdva", SrcDir$, DEST$
  135.         IF VflatdPresent() = 0 THEN
  136.         CreateSysIniKeyValue GetWindowsDir + "system.ini", "386Enh", "device", GetWindowsSysDir+"dva.386", cmoOverwrite
  137.         bInstallDVA% = 1
  138.         END IF
  139.     END IF
  140.     
  141.     DEST$ = GetRealWindowsSysDir
  142.     
  143.     AddSectionFilesToCopyList "wing32", SrcDir$, DEST$
  144.            Dest1$ = MakePath(DEST$,"wing32.dll")
  145.            Dest2$ = MakePath(DEST$,"wing32.xxx")
  146.     RenameFilePlease Dest1$,Dest2$
  147.     
  148.     CopyFilesInCopyList
  149.     
  150.     UpdateWinG32 GetRealWindowsSysDir()
  151.  
  152. '***
  153.  
  154.     '' Can not run on versions less than 3.10.
  155.     IF GetWindowsMajorVersion < 3 THEN
  156.         ExitCode% = EXITFAILNOTWIN31
  157.         GOTO QUIT
  158.     END IF
  159.     IF GetWindowsMajorVersion = 3 AND GetWindowsMinorVersion < 10 THEN
  160.         ExitCode% = EXITFAILNOTWIN31
  161.         GOTO QUIT
  162.     END IF
  163.     '' Check that we are not runnig on Chicago, including pre-released
  164.     '' Chicago versions.
  165.     IF GetWindowsMajorVersion * 100 + GetWindowsMinorVersion > 350 THEN
  166.         ExitCode% = EXITSUCCESS
  167.         WIN32ENABLED% = 1
  168.         GOTO FREECELL
  169.     END IF
  170.     IF GetWindowsMode < 2  THEN
  171.         IF OnWindowsNT() THEN
  172.             ExitCode% = EXITFAILNOTINTEL '' Running on Windows NT (on RISC)
  173.         ELSE
  174.             ExitCode% = EXITFAILNOTENH   '' Standard Mode Windows
  175.         END IF
  176.         GOTO QUIT
  177.     END IF
  178.     IF OnWindowsNT() THEN
  179.         ExitCode% = EXITSUCCESS
  180.         WIN32ENABLED% = 1
  181.         GOTO FREECELL
  182.     END IF
  183.     ExitCode% = EXITSUCCESS
  184.  
  185.     if IsRunningApp() <> 0 THEN
  186.         ExitCode% = EXITFAILRUNAPP
  187.         GOTO QUIT
  188.     END IF
  189.  
  190.     '' Get version of Win32s to be installed from version info in INF file
  191.     szNewVer$ = GetSectionKeyVersion("WindowsSystem", "win32s16")
  192.  
  193.     '' See if OLE is included.
  194.  
  195.     OLEINCLUDED% = DoesFileExist( GetSymbolValue("STF_SRCDIR") + "OLE2THK.DL_", femExists )
  196.  
  197.     IF OLEINCLUDED% = 1 THEN
  198.         '' See whether one of the OLE 16 bit components is loaded.
  199.         IF GetModulehandle("compobj") <> 0 THEN
  200.             OLE16RUNAPP% = 1
  201.             GOTO GetOleVersion
  202.         END IF
  203.         IF GetModuleHandle("ole2") <> 0 THEN
  204.             OLE16RUNAPP% = 1
  205.             GOTO GetOleVersion
  206.         END IF
  207.         IF GetModuleHandle("ole2prox") <> 0 THEN
  208.             OLE16RUNAPP% = 1
  209.             GOTO GetOleVersion
  210.         END IF
  211.         IF GetModuleHandle("ole2conv") <> 0 THEN
  212.             OLE16RUNAPP% = 1
  213.             GOTO GetOleVersion
  214.         END IF
  215.         IF GetModuleHandle("storage") <> 0 THEN
  216.             OLE16RUNAPP% = 1
  217.             GOTO GetOleVersion
  218.         END IF
  219.         IF GetModuleHandle("ole2nls") <> 0 THEN
  220.             OLE16RUNAPP% = 1
  221.             GOTO GetOleVersion
  222.         END IF
  223.         IF GetModuleHandle("ole2disp") <> 0 THEN
  224.             OLE16RUNAPP% = 1
  225.             GOTO GetOleVersion
  226.         END IF
  227.         IF GetModuleHandle("typelib") <> 0 THEN
  228.             OLE16RUNAPP% = 1
  229.             GOTO GetOleVersion
  230.         END IF
  231.  
  232. GetOleVersion:
  233.         szOleNewVer$ = GetSectionKeyVersion("OleWindowsSystemWin32s", "ole2thk")
  234.  
  235.         '' Get version of currently installed OLE32 from version info of
  236.         '' ole2thk file
  237.         szOleOldVer$ = GetVersionOfFile( DESTSYS$ + "WIN32S\OLE2THK.DLL" )
  238.  
  239.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "COMPOBJ.DLL" )
  240.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "compobj")
  241.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  242.             OLE2_16% = 1
  243.         END IF
  244.  
  245.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2.DLL" )
  246.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2")
  247.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  248.             OLE2_16% = 1
  249.         END IF
  250.  
  251.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2PROX.DLL" )
  252.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2prox")
  253.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  254.             OLE2_16% = 1
  255.         END IF
  256.  
  257.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "STORAGE.DLL" )
  258.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "storage")
  259.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  260.             OLE2_16% = 1
  261.         END IF
  262.  
  263.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2CONV.DLL" )
  264.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2conv")
  265.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  266.             OLE2_16% = 1
  267.         END IF
  268.  
  269.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2NLS.DLL" )
  270.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2nls")
  271.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  272.             OLE2AUTO_16% = 1
  273.         END IF
  274.  
  275.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2DISP.DLL" )
  276.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2disp")
  277.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  278.             OLE2AUTO_16% = 1
  279.         END IF
  280.  
  281.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "TYPELIB.DLL" )
  282.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "typelib")
  283.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  284.             OLE2AUTO_16% = 1
  285.         END IF
  286.  
  287.     END IF
  288.  
  289.     OLE2_32% = OLEINCLUDED%
  290.  
  291.     '' Check if Win32s is partially installed
  292.     sz$ = GetIniKeyString (DESTSYS$ + "WIN32S.INI", "Win32s", "Setup")
  293.     '' If WIN32S.INI specifies Win32s Setup=0, then force complete Win32s file overwrite
  294.     IF sz$ = "0" THEN
  295.         GOTO WELCOME
  296.     END IF
  297.     '' If WIN32S.INI is missing, try and reinstall Win32s files/recreate WIN32S.INI
  298.     IF sz$ <> "1" THEN
  299.         GOTO WELCOME
  300.     END IF
  301.  
  302.     '' If Win32s is already installed, get running version number
  303.     i% = DoesFileExist( DESTSYS$ + "W32SYS.DLL", femExists )
  304.     IF i% = 1 THEN
  305.         i% = IsWin32sLoaded( szOldVer$ )
  306.     ENDIF
  307.  
  308.     IF i% = 0 THEN
  309.         GOTO WELCOME
  310.     END IF
  311.  
  312.     IF szNewVer$ > szOldVer$ THEN
  313.         GOTO WELCOME
  314.     END IF
  315.  
  316.     IF OLEINCLUDED% = 1 THEN
  317.  
  318.         OLE2_32% = 0
  319.  
  320.         IF (szNewVer$ = szOldVer$) OR (szNewVer$ < szOldVer$) THEN
  321.             '' Compare OLE32 version and versions of each of OLE16 libraries.
  322.             sz$ = GetIniKeyString (DESTSYS$ + "WIN32S.INI", "OLE", "Setup")
  323.             '' If WIN32S.INI specifies OLE2 Setup=0, then force OLE2 file overwrite
  324.             IF ((sz$ <> "1") OR (szOleNewVer$ > szOleOldVer$)) THEN
  325.                 OLEONLY% = 1
  326.                 OLE2_32% = 1
  327.                 GOTO WELCOME
  328.             END IF
  329.  
  330.             IF OLE2_16% OR OLE2AUTO_16 THEN
  331.                 OLEONLY% = 1
  332.                 GOTO WELCOME
  333.             END IF
  334.  
  335.         END IF
  336.  
  337.     END IF
  338.  
  339.     WIN32ENABLED% = 1
  340.     GOTO FREECELL
  341.  
  342. WELCOME:
  343.     i% = SetCuiFlags(OLEONLY%, OLE16RUNAPP%)
  344. '***    sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", HELPWELCOME, HELPPROC$)
  345. '***    IF sz$ = "CONTINUE" THEN
  346.         UIPop 1
  347. '***    ELSE
  348. '***        UIPop 1
  349. '***        GOSUB ASKQUIT
  350. '***        GOTO WELCOME
  351. '***    END IF
  352.  
  353.  
  354. GETWIN32SPATH:
  355.     IF PagingEnabled() = 0 THEN
  356.         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)
  357.         ExitCode% = EXITFAILURE '' Enhanced mode but not paging
  358.         GOTO QUIT
  359.     END IF
  360.  
  361.     IF ShareEnabled() = 0 THEN
  362.         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)
  363.     END IF
  364.  
  365.     SetSymbolValue "EditTextIn", DESTSYS$
  366.     SetSymbolValue "EditFocus", "END"
  367.  
  368. GETPATHL1:
  369. '***    sz$ = UIStartDlg(CUIDLL$, VERPATH, "FDispDlgProc", HELPWELCOME, HELPPROC$)
  370.  
  371. '***    IF sz$ = "CONTINUE" THEN
  372.         IF IsDirWritable(DESTSYS$) = 0 THEN
  373.             GOSUB BADPATH
  374.             GOTO GETPATHL1
  375.         END IF
  376.         UIPop 1
  377. '***    ELSEIF sz$ = "REACTIVATE" THEN
  378. '***        UIPop 1
  379. '***        GOTO GETPATHL1
  380. '***    ELSEIF sz$ = "BACK" THEN
  381. '***        UIPop 1
  382. '***        GOTO WELCOME
  383. '***    ELSE
  384. '***        UIPop 1
  385. '***        GOSUB ASKQUIT
  386. '***        GOTO GETPATHL1
  387. '***    END IF
  388.  
  389. COPYFILES:
  390.     IF OLEONLY% = 0 THEN
  391.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite
  392.     END IF
  393.     IF OLE2_32% = 1 THEN
  394.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "0", cmoOverwrite
  395.     END IF
  396.  
  397.     '' Indicate Win32s install failure until all files known to be copied.
  398.     ExitCode% = EXITFAILURE
  399.     ERR = 0
  400.     CreateDir DEST32S$, cmoNone
  401.     Install OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%
  402.     UpdateSystemIni
  403.     '' Terminate if unhandled fatal error
  404.     IF ERR <> 0 THEN
  405.     GOTO QUIT
  406.     END IF
  407.  
  408.     IF OLEONLY% = 0 THEN
  409.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "1", cmoOverwrite
  410.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Version", szNewVer$, cmoOverwrite
  411.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Nls", "AnsiCP", "1252", cmoOverwrite
  412.     END IF
  413.     IF OLE2_32% = 1 THEN
  414.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "1", cmoOverwrite
  415.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Version", szOleNewVer, cmoOverwrite
  416.     END IF
  417.  
  418.     i% = DoMsgBox("Win32s files successfully installed.", "Microsoft Win32s Setup", MB_OK+MB_TASKMODAL)
  419.     '' Indicate Win32s correctly copied and installed.
  420.     ExitCode% = EXITSUCCESS
  421.  
  422. FREECELL:
  423.     GOTO QUIT
  424.     
  425.     IF OLEONLY% = 1 THEN
  426.         GOTO QUIT
  427.     ENDIF
  428.     IF WIN32ENABLED% = 1 THEN
  429.         sz$ = UIStartDlg(CUIDLL$, FREECELLINSTNOWIN32S, "FInfoDlgProc",0, "")
  430.     ELSE
  431.         sz$ = UIStartDlg(CUIDLL$, FREECELLINST, "FInfoDlgProc",0, "")
  432.     END IF
  433.     UIPop 1
  434.     IF sz$ <> "CONTINUE" THEN
  435.         GOTO QUIT
  436.     END IF
  437.  
  438. GETFREEPATH:
  439.     DESTFREE$ = MID$(DESTSYS$,1,3) + "WIN32APP\FREECELL\"
  440.     SetSymbolValue "EditTextIn", DESTFREE$
  441.     SetSymbolValue "EditFocus", "END"
  442.  
  443. GETFREEPATHL1:
  444.     sz$ = UIStartDlg(CUIDLL$, FREECELLPATH, "FEditDlgProc", HELPFREECELL, HELPPROC$)
  445.  
  446.     IF sz$ = "CONTINUE" THEN
  447.         DESTFREE$ = GetSymbolValue("EditTextOut")
  448.  
  449.         IF MID$(DESTFREE$, LEN(DESTFREE$), 1) <> "\" THEN
  450.             DESTFREE$ = DESTFREE$ + "\"
  451.         END IF
  452.         ''Validate new path.
  453.         IF IsDirWritable(DESTFREE$) = 0 THEN
  454.             GOSUB BADPATH
  455.             GOTO GETFREEPATHL1
  456.         END IF
  457.         UIPop 1
  458.  
  459.         GOTO COPYFREECELL
  460.     ELSEIF sz$ = "REACTIVATE" THEN
  461.         GOTO GETFREEPATHL1
  462.     ELSEIF sz$ = "EXIT" THEN
  463.         UIPop 1
  464.         GOTO QUIT
  465.     END IF
  466.  
  467. COPYFREECELL:
  468.     ClearCopyList
  469.     CreateDir DESTFREE$, cmoNone
  470.  
  471.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  472.  
  473.     ERR = 0
  474.     AddSectionFilesToCopyList "Win32appFreecell", SrcDir$, DESTFREE$
  475.     CopyFilesInCopyList
  476.     '' If error copying FreeCell, not a fatal error. Win32s is already installed.
  477.     IF ERR <> 0 THEN
  478.     ERR = 0
  479.     GOTO QUIT
  480.     END IF
  481.     ERR = 0
  482.  
  483.     IF DoesFileExist( DESTSYS$ + "WIN32S.INI", femExists ) THEN
  484.     CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Freecell", "Setup", "1", cmoOverwrite
  485.     CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Freecell", "Version", szNewVer$, cmoOverwrite
  486.     END IF
  487.  
  488.     ERR = 0
  489.     CreateProgmanGroup "Win32 Applications", "", cmoNone
  490.     ShowProgmanGroup   "Win32 Applications", 1, cmoNone
  491.     CreateProgmanItem  "Win32 Applications", "Freecell", DESTFREE$ + "FREECELL.EXE", "", cmoOverwrite
  492.     '' Only put up success dialog if icon added to group
  493.     IF ERR = 0 THEN
  494.     i% = DoMsgBox("Freecell was successfully installed.", "Freecell Setup", MB_OK+MB_TASKMODAL)
  495.     END IF
  496.     ERR = 0
  497.  
  498. QUIT:
  499.     '' Install error handler for final message box routines
  500.     ON ERROR GOTO ERRQUIT
  501.     IF ERR = 0 THEN
  502.         dlg% = ExitCode%
  503.     ELSEIF ERR = STFQUIT THEN
  504.         IF (OLE_PROTECT% = 1) THEN
  505.             '' Free all previously loaded libraries
  506.             FreeLibrary GetModuleHandle("compobj")
  507.             FreeLibrary GetModuleHandle("ole2")
  508.             FreeLibrary GetModuleHandle("ole2prox")
  509.             FreeLibrary GetModuleHandle("ole2conv")
  510.             FreeLibrary GetModuleHandle("storage")
  511.             FreeLibrary GetModuleHandle("ole2nls")
  512.             FreeLibrary GetModuleHandle("ole2disp")
  513.             FreeLibrary GetModuleHandle("typelib")
  514.         END IF
  515.         dlg% = EXITQUIT
  516.         ExitCode% = EXITQUIT
  517.     ELSE
  518.         dlg% = EXITFAILURE
  519.         ExitCode% = EXITQUIT
  520.     END IF
  521.  
  522. QUITL1:
  523. '*** ALWAYS RESTART
  524. '    IF WIN32ENABLED% = 1 THEN
  525. '        UIPop 1
  526. '        END
  527. '    END IF
  528.  
  529.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  530.     IF sz$ = "REACTIVATE" THEN
  531.         GOTO QUITL1
  532.     END IF
  533.     UIPop 1
  534.  
  535.     IF ExitCode% = EXITSUCCESS THEN
  536.         IF RebootSystem(OLEONLY% and not OLE_OLEBOOT%) = 0 THEN
  537.             CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite
  538.             IF OLE2_32% = 1 THEN
  539.                 CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "0", cmoOverwrite
  540.             END IF
  541.             i% = DoMsgBox("Win32s is not properly configured and Win32s Setup must be run again.", "Unable to Restart Windows", MB_ICONEXCLAMATION+MB_OK+MB_TASKMODAL)
  542.         END IF
  543.     ENDIF
  544.  
  545.     END
  546.  
  547. '' Fatal error handler for error message routine
  548. ERRQUIT:
  549.     i% = DoMsgBox("Setup sources were corrupted!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  550.     END
  551.  
  552. '' Bypass run-time errors. Let final dialog box display fatal error message.
  553. ERRNORMAL:
  554.     '' Check if user cancelled setup
  555.     IF ERR = STFQUIT THEN
  556.     GOTO QUIT
  557.     END IF
  558.     RESUME NEXT
  559.  
  560.  
  561. BADPATH:
  562.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  563.     IF sz$ = "REACTIVATE" THEN
  564.         GOTO BADPATH
  565.     END IF
  566.         UIPop 1
  567.     RETURN
  568.  
  569.   ASKQUIT:
  570.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  571.  
  572.     IF sz$ = "EXIT" THEN
  573.         UIPop 1
  574.         UIPopAll
  575.         ERROR STFQUIT
  576.     ELSEIF sz$ = "REACTIVATE" THEN
  577.         GOTO ASKQUIT
  578.     ELSE
  579.         UIPop 1
  580.     END IF
  581.     RETURN
  582.  
  583.  
  584. '*** WING
  585. FUNCTION GetRealWindowsSysDir STATIC AS STRING
  586.     szBuf$ = string$(260, 32)
  587.     cbBuf% = GetRealSystemDir(szBuf$, 260)
  588.     IF cbBuf% = 0 THEN
  589.         ERROR STFERR
  590.     ELSE
  591.         IF cbBuf% > 259 THEN
  592.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  593.             ERROR STFERR
  594.         END IF
  595.         szBuf$ = RTRIM$(szBuf$)
  596.         IF MID$(szBuf$, 1, 1) = "\" THEN
  597.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  598.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  599.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  600.         END IF
  601.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  602.             szBuf$ = szBuf$ + "\"
  603.         END IF
  604.         GetRealWindowsSysDir = szBuf$
  605.     END IF
  606.  
  607.     szBuf$ = ""
  608. END FUNCTION
  609.  
  610. SUB UpdateWinG32 (szOrig$) STATIC 
  611.     '
  612.     ' Here we check the version ourselves of wing32.dll, since 
  613.     ' we can't get version checking for Win32 apps from Win16
  614.     '
  615.     FileNew$ = MakePath(szOrig$, "wing32.dll")
  616.     FileOrig$ = MakePath(szOrig$, "wing32.xxx")
  617.     IF IsWin32FileNewer( FileOrig$, FileNew$ ) THEN
  618.     RemoveFile FileOrig$, cmoForce
  619.     ELSE
  620.         RemoveFile FileNew$, cmoForce        ' get rid of new file
  621.     RenameFilePlease FileOrig$,FileNew$    ' put back old file
  622.     END IF
  623. END SUB
  624.  
  625. '***
  626.  
  627. '**
  628. '** Purpose:
  629. '**     Builds the copy list and performs all installation operations.
  630. '** Arguments:
  631. '**     none.
  632. '** Returns:
  633. '**     none.
  634. '*************************************************************************
  635. SUB Install(OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%) STATIC
  636.  
  637.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  638.  
  639.     '' Use file layout sections that specify OLDER file version/time check
  640.     IF OLEONLY% = 0 THEN
  641.         AddSectionFilesToCopyList "WindowsSystem", SrcDir$, DESTSYS$
  642.         AddSectionFilesToCopyList "WindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\"
  643.         '' Add obsolete files to be removed
  644.         AddSectionFilesToCopyList "Win32sSystemObsoleteFiles", SrcDir$, DESTSYS$ + "WIN32S\"
  645.     END IF
  646.  
  647.     OLE_PROTECT% = 0
  648.     OLEINCLUDED% = DoesFileExist( GetSymbolValue("STF_SRCDIR") + "OLE2THK.DL_", femExists )
  649.     if OLEINCLUDED% = 1 THEN
  650.         IF (OLE2_16% = 1) OR (OLE2AUTO_16% = 1) THEN
  651.             IF OLE16RUNAPP% = 1 THEN
  652.                 '' Force all OLE2 DLLS to be copied during reboot.
  653.                 i% = SetErrorMode(-32768)
  654.                 i% = LoadLibrary(DESTSYS$ + "compobj.dll")
  655.                 i% = LoadLibrary(DESTSYS$ + "ole2.dll")
  656.                 i% = LoadLibrary(DESTSYS$ + "ole2prox.dll")
  657.                 i% = LoadLibrary(DESTSYS$ + "ole2conv.dll")
  658.                 i% = LoadLibrary(DESTSYS$ + "storage.dll")
  659.                 i% = LoadLibrary(DESTSYS$ + "ole2nls.dll")
  660.                 i% = LoadLibrary(DESTSYS$ + "ole2disp.dll")
  661.                 i% = LoadLibrary(DESTSYS$ + "typelib.dll")
  662.                 OLE_PROTECT% = 1
  663.             END IF
  664.             AddSectionFilesToCopyList "OleWindowsSystem", SrcDir$, DESTSYS$
  665.         END IF
  666.         IF OLE2_32% = 1 THEN
  667.             AddSectionFilesToCopyList "OleWindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\"
  668.         END IF
  669.         IF (OLE2_16% = 1) OR (OLE2_32% = 1) OR (OLE2AUTO_16% = 1) THEN
  670.             AddSectionFilesToCopyList "Ole2RegWindowsSystem", SrcDir$, DESTSYS$
  671.         END IF
  672.         IF (OLE2AUTO_16% = 1) THEN
  673.             AddSectionFilesToCopyList "StdoleWindowsSystem", SrcDir$, DESTSYS$
  674.             IF (OLE16RUNAPP and DoesFileExist(DESTSYS$ + "stdole.tlb", femExists) ) THEN
  675.                 ' copy stdole.tlb -> tempfile1
  676.                 stdole1$ = DESTSYS$ + GetTempFileAt(DESTSYS$, "STD")
  677.                 CopyFile DESTSYS$+"STDOLE.TLB", stdole1$, cmoOverwrit, 0
  678.                 OLE_OLEBOOT% = 1
  679.             ENDIF
  680.         END IF
  681.     END IF
  682.  
  683.     SetRestartDir GetWindowsDir()
  684.  
  685.     CopyFilesInCopyList
  686.  
  687.     IF (OLEINCLUDED% = 1) THEN
  688.         RecoverFromCopy DESTSYS$ + "compobj.dll"
  689.         RecoverFromCopy DESTSYS$ + "ole2.dll"
  690.         RecoverFromCopy DESTSYS$ + "ole2prox.dll"
  691.         RecoverFromCopy DESTSYS$ + "ole2conv.dll"
  692.         RecoverFromCopy DESTSYS$ + "storage.dll"
  693.         RecoverFromCopy DESTSYS$ + "ole2nls.dll"
  694.         RecoverFromCopy DESTSYS$ + "ole2disp.dll"
  695.         RecoverFromCopy DESTSYS$ + "typelib.dll"
  696.     END IF
  697.  
  698.     IF (OLE_PROTECT% = 1) THEN
  699.         '' Free all previously loaded libraries
  700.         FreeLibrary GetModuleHandle("compobj")
  701.         FreeLibrary GetModuleHandle("ole2")
  702.         FreeLibrary GetModuleHandle("ole2prox")
  703.         FreeLibrary GetModuleHandle("ole2conv")
  704.         FreeLibrary GetModuleHandle("storage")
  705.         FreeLibrary GetModuleHandle("ole2nls")
  706.         FreeLibrary GetModuleHandle("ole2disp")
  707.         FreeLibrary GetModuleHandle("typelib")
  708.         OLE_PROTECT% = 0
  709.     END IF
  710.     IF (OLE_OLEBOOT% = 1) THEN
  711.             'rename new stdole.tlb -> tempfile2
  712.             stdole2$ = GetTempFileAt(DESTSYS$, "STD")
  713.             RemoveFile DESTSYS$+stdole2$, cmoForce
  714.             RenameFile DESTSYS$+"STDOLE.TLB" , stdole2$
  715.             'rename tempfile1 -> stdole.tlb
  716.             RenameFile stdole1$, "STDOLE.TLB"
  717.             'write to _mssetup.bat: rename tempfile2 to stdole.tlb
  718.             WriteLine DESTWIN$+"_MSSETUP.BAT", ""
  719.             WriteLine DESTWIN$+"_MSSETUP.BAT", "DEL "+DESTSYS$+"STDOLE.TLB"
  720.             WriteLine DESTWIN$+"_MSSETUP.BAT", "REN "+DESTSYS$+stdole2$+" STDOLE.TLB"
  721.     ENDIF
  722.     IF OLEINCLUDED% AND (OLE2_16% OR OLE2_32% OR OLE2AUTO_16%) THEN
  723.         IF OLE16RUNAPP% THEN
  724.             reg1$ = DESTWIN$ + GetTempFileAt(DESTWIN$, "REG")
  725.             CopyFile DESTWIN$+"REG.DAT", reg1$, cmoOverwrit, 0
  726.         ENDIF
  727.  
  728.         RUN "regedit /s " + DESTSYS$ + "ole2.reg"
  729.  
  730.         IF OLE16RUNAPP% THEN
  731.             reg2$ = GetTempFileAt(DESTWIN$, "REG")
  732.             RemoveFile DESTWIN$ + reg2$, cmoForce
  733.             RenameFile DESTWIN$ + "REG.DAT" , reg2$
  734.             'rename tempfile1 -> reg.dat
  735.             RenameFile reg1$, "REG.DAT"
  736.             'write to _mssetup.bat: rename tempfile2 to reg.dat
  737.             WriteLine DESTWIN$+"_MSSETUP.BAT", ""
  738.             WriteLine DESTWIN$+"_MSSETUP.BAT", "DEL "+DESTWIN$+"REG.DAT"
  739.             WriteLine DESTWIN$+"_MSSETUP.BAT", "REN "+DESTWIN$ + reg2$+" REG.DAT"
  740.             OLE_OLEBOOT% = 1
  741.         ENDIF
  742.     END IF
  743. END SUB
  744.  
  745. SUB UpdateSystemIni STATIC
  746.  
  747.     VxDPath$ = DEST32S$ + "W32S.386"
  748.     SystemIniPath$ = GetWindowsDir()
  749.  
  750.     t% = MakeSystemIni(SystemIniPath$, VxdPath$)
  751.  
  752. END SUB
  753.  
  754. FUNCTION RebootSystem(OLEONLY%) STATIC AS INTEGER
  755.  
  756. '   Check if any files were locked during install.  If the RestartList
  757. '   is not empty, ExitExecRestart() will restart Windows, cleanup setup
  758. '   files, and copy over locked files before Windows restarts.
  759.     i% = RestartListEmpty()
  760.     IF i% = 0 THEN
  761. '      ExitExecRestart() only returns if applications refuse to be shutdown.
  762. '      Win32s is installed but will not operate until Windows is restarted
  763. '      and the Win32s VxD is loaded.
  764.        i% = ExitExecRestart()
  765.        RebootSystem = 0
  766.     ELSE
  767. '      If the RestartList list is empty, it is necessary to restart windows
  768. '      directly.  The MSSETUP program creates _MSRSTRT.EXE and _MSSETUP.BAT
  769. '      in the restart directory.  This program should be exec'd to handle
  770. '      proper MSSETUP cleanup (temp files) and restart Windows.
  771.        IF (OLEONLY% = 1) THEN
  772.            RebootSystem = 1
  773.        ELSE
  774.            i% = ExitWindowsExec( GetWindowsDir() + "_MSRSTRT.EXE", "_MSSETUP.BAT" )
  775.            RebootSystem = 0
  776.        END IF
  777.     ENDIF
  778.  
  779. END FUNCTION
  780.  
  781.  
  782. '**
  783. '** Purpose:
  784. '**     Appends a file name to the end of a directory path,
  785. '**     inserting a backslash character as needed.
  786. '** Arguments:
  787. '**     szDir$  - full directory path (with optional ending "\")
  788. '**     szFile$ - filename to append to directory
  789. '** Returns:
  790. '**     Resulting fully qualified path name.
  791. '*************************************************************************
  792. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  793.     IF szDir$ = "" THEN
  794.     MakePath = szFile$
  795.     ELSEIF szFile$ = "" THEN
  796.     MakePath = szDir$
  797.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  798.     MakePath = szDir$ + szFile$
  799.     ELSE
  800.     MakePath = szDir$ + "\" + szFile$
  801.     END IF
  802. END FUNCTION
  803.  
  804. FUNCTION GetTempFileAt(szDir$, szPrefix$) STATIC AS STRING
  805.     szCurDir$ = CURDIR$
  806.     CHDIR szDir$ + "."
  807.     szTempFile$ = STRING$(144, "E")
  808.     i% = GetTempFileName(TF_FORCEDRIVE, szPrefix$,0, szTempFile$)
  809.     CHDIR szCurDir$
  810.     GetTempFileAt = MID$(szTempFile$,3)
  811. END FUNCTION
  812.  
  813. SUB RecoverFromCopy(szFileName$) STATIC
  814.     IF DoesFileExist(szFileName$, femExist) = 0 THEN
  815.         szBackFile$ = MID$(szFileName$, 1, LEN(szFileName$)-3) + VERNUM$
  816.         IF DoesfileExist(szBackFile$, femExist) = 0 THEN
  817.             i% = DoMsgBox("ERROR: Could not find backup file "+szBackfile$, "Setup Error", MB_ICONEXLAMATION + MB_OK)
  818.         ELSE
  819.             CopyFile szBackFile$, szFileName$, cmoTimeStamp, 0
  820.         END IF
  821.     END IF
  822. END SUB
  823.