home *** CD-ROM | disk | FTP | other *** search
/ Joystick Magazine 1995 September (Special Edition) / Joystick-HS07-CD2.iso / lem4win / win32s / disk1 / 32sinst.mst < prev    next >
Text File  |  1995-03-14  |  22KB  |  653 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. GLOBAL DESTSYS$      ''Windows\System directory.
  37. GLOBAL DEST32S$      ''Windows\System\Win32s directory
  38. GLOBAL DESTFREE$     ''Freecell directory
  39. GLOBAL OLE_PROTECT%  ''Indicates whether ole2 dlls were protected from being
  40.                      '' copied.
  41.  
  42. DECLARE SUB Install(OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%)
  43. DECLARE SUB UpdateSystemIni
  44. DECLARE FUNCTION RebootSystem(OLEONLY%) AS INTEGER
  45. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  46. DECLARE FUNCTION MakeSystemIni LIB "INIUPD.DLL" (arg1$, arg2$) AS INTEGER
  47. DECLARE FUNCTION RestartWindows LIB "INIUPD.DLL" AS INTEGER
  48. DECLARE FUNCTION OnWindowsNT LIB "INIUPD.DLL" AS INTEGER
  49. DECLARE FUNCTION PagingEnabled LIB "INIUPD.DLL" AS INTEGER
  50. DECLARE FUNCTION ShareEnabled LIB "INIUPD.DLL" AS INTEGER
  51. DECLARE FUNCTION IsWin32sLoaded LIB "INIUPD.DLL" (arg1$) AS INTEGER
  52. DECLARE FUNCTION IsRunningApp LIB "INIUPD.DLL" AS INTEGER
  53. DECLARE FUNCTION SetCuiFlags LIB "MSCUISTF.DLL" (arg1%, arg2%) AS INTEGER
  54. DECLARE FUNCTION ExitWindowsExec LIB "USER.EXE" (arg1$, arg2$) AS INTEGER
  55. DECLARE FUNCTION GetModuleHandle LIB "KRNL386.EXE" (arg1$) AS INTEGER
  56. DECLARE FUNCTION LoadLibrary LIB "KRNL386.EXE" (arg1$) AS INTEGER
  57. DECLARE SUB FreeLibrary LIB "KRNL386.EXE" (arg1%)
  58. DECLARE FUNCTION SetErrorMode LIB "KRNL386.EXE" (arg1%) AS INTEGER
  59.  
  60. INIT:
  61.     CUIDLL$ = "mscuistf.dll"            '' Custom user interface dll
  62.     HELPPROC$ = "FHelpDlgProc"          '' Help dialog procedure
  63.     szOldVer$ ="1.00.000     "          '' Reserve space in string for version
  64.     WIN32ENABLED% = 0
  65.     OLEONLY% = 0
  66.     OLE2_16% = 0
  67.     OLE2AUTO_16% = 0
  68.     OLE16RUNAPP% = 0
  69.     OLE_PROTECT% = 0
  70.  
  71.     ON ERROR GOTO ERRNORMAL
  72.  
  73.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  74.  
  75.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  76.     IF szInf$ = "" THEN
  77.         szInf$ = GetSymbolValue("STF_CWDDIR") + "32sinst.inf"
  78.     END IF
  79.     ReadInfFile szInf$
  80.  
  81.     SetBitmap CUIDLL$, LOGO
  82.     SetTitle "Microsoft Win32s version " + MID$(GetSectionKeyVersion("WindowsSystem", "win32s16"), 1, 4) + " Setup Program"
  83.  
  84.     DESTSYS$ = GetWindowsSysDir()
  85.     DEST32S$ = DESTSYS + "WIN32S\"
  86.  
  87. '$IFDEF DEBUG
  88.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  89.     WinDrive$ = MID$(GetWindowsDir, 1, 1)
  90.     IF IsDriveValid(WinDrive$) = 0 THEN
  91.         i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  92.         GOTO QUIT
  93.     END IF
  94. '$ENDIF ''DEBUG
  95.  
  96. CHECK:
  97.     '' Can not run on versions less than 3.10.
  98.     IF GetWindowsMajorVersion < 3 THEN
  99.         ExitCode% = EXITFAILNOTWIN31
  100.         GOTO QUIT
  101.     END IF
  102.     IF GetWindowsMajorVersion = 3 AND GetWindowsMinorVersion < 10 THEN
  103.         ExitCode% = EXITFAILNOTWIN31
  104.         GOTO QUIT
  105.     END IF
  106.     '' Check that we are not runnig on Chicago, including pre-released
  107.     '' Chicago versions.
  108.     IF GetWindowsMajorVersion * 100 + GetWindowsMinorVersion > 350 THEN
  109.         ExitCode% = EXITSUCCESS
  110.         WIN32ENABLED% = 1
  111.         GOTO FREECELL
  112.     END IF
  113.     IF GetWindowsMode < 2  THEN
  114.         IF OnWindowsNT() THEN
  115.             ExitCode% = EXITFAILNOTINTEL '' Running on Windows NT (on RISC)
  116.         ELSE
  117.             ExitCode% = EXITFAILNOTENH   '' Standard Mode Windows
  118.         END IF
  119.         GOTO QUIT
  120.     END IF
  121.     IF OnWindowsNT() THEN
  122.         ExitCode% = EXITSUCCESS
  123.         WIN32ENABLED% = 1
  124.         GOTO FREECELL
  125.     END IF
  126.     ExitCode% = EXITSUCCESS
  127.  
  128.     if IsRunningApp() <> 0 THEN
  129.         ExitCode% = EXITFAILRUNAPP
  130.         GOTO QUIT
  131.     END IF
  132.  
  133.     '' Get version of Win32s to be installed from version info in INF file
  134.     szNewVer$ = GetSectionKeyVersion("WindowsSystem", "win32s16")
  135.  
  136.     '' See if OLE is included.
  137.  
  138.     OLEINCLUDED% = DoesFileExist( GetSymbolValue("STF_SRCDIR") + "OLE2THK.DL_", femExists )
  139.  
  140.     IF OLEINCLUDED% = 1 THEN
  141.         '' See whether one of the OLE 16 bit components is loaded.
  142.         IF GetModulehandle("compobj") <> 0 THEN
  143.             OLE16RUNAPP% = 1
  144.             GOTO GetOleVersion
  145.         END IF
  146.         IF GetModuleHandle("ole2") <> 0 THEN
  147.             OLE16RUNAPP% = 1
  148.             GOTO GetOleVersion
  149.         END IF
  150.         IF GetModuleHandle("ole2prox") <> 0 THEN
  151.             OLE16RUNAPP% = 1
  152.             GOTO GetOleVersion
  153.         END IF
  154.         IF GetModuleHandle("ole2conv") <> 0 THEN
  155.             OLE16RUNAPP% = 1
  156.             GOTO GetOleVersion
  157.         END IF
  158.         IF GetModuleHandle("storage") <> 0 THEN
  159.             OLE16RUNAPP% = 1
  160.             GOTO GetOleVersion
  161.         END IF
  162.         IF GetModuleHandle("ole2nls") <> 0 THEN
  163.             OLE16RUNAPP% = 1
  164.             GOTO GetOleVersion
  165.         END IF
  166.         IF GetModuleHandle("ole2disp") <> 0 THEN
  167.             OLE16RUNAPP% = 1
  168.             GOTO GetOleVersion
  169.         END IF
  170.         IF GetModuleHandle("typelib") <> 0 THEN
  171.             OLE16RUNAPP% = 1
  172.             GOTO GetOleVersion
  173.         END IF
  174.  
  175. GetOleVersion:
  176.         szOleNewVer$ = GetSectionKeyVersion("OleWindowsSystemWin32s", "ole2thk")
  177.  
  178.         '' Get version of currently installed OLE32 from version info of
  179.         '' ole2thk file
  180.         szOleOldVer$ = GetVersionOfFile( DESTSYS$ + "WIN32S\OLE2THK.DLL" )
  181.  
  182.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "COMPOBJ.DLL" )
  183.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "compobj")
  184.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  185.             OLE2_16% = 1
  186.         END IF
  187.  
  188.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2.DLL" )
  189.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2")
  190.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  191.             OLE2_16% = 1
  192.         END IF
  193.  
  194.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2PROX.DLL" )
  195.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2prox")
  196.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  197.             OLE2_16% = 1
  198.         END IF
  199.  
  200.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "STORAGE.DLL" )
  201.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "storage")
  202.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  203.             OLE2_16% = 1
  204.         END IF
  205.  
  206.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2CONV.DLL" )
  207.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2conv")
  208.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  209.             OLE2_16% = 1
  210.         END IF
  211.  
  212.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2NLS.DLL" )
  213.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2nls")
  214.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  215.             OLE2AUTO_16% = 1
  216.         END IF
  217.  
  218.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "OLE2DISP.DLL" )
  219.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "ole2disp")
  220.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  221.             OLE2AUTO_16% = 1
  222.         END IF
  223.  
  224.         szOle16OldVer$ = GetVersionOfFile( DESTSYS$ + "TYPELIB.DLL" )
  225.         szOle16NewVer$ = GetSectionKeyVersion("OleWindowsSystem", "typelib")
  226.         IF (szOle16NewVer$ > szOle16OldVer$) THEN
  227.             OLE2AUTO_16% = 1
  228.         END IF
  229.  
  230.     END IF
  231.  
  232.     OLE2_32% = 1
  233.  
  234.     '' Check if Win32s is partially installed
  235.     sz$ = GetIniKeyString (DESTSYS$ + "WIN32S.INI", "Win32s", "Setup")
  236.     '' If WIN32S.INI specifies Win32s Setup=0, then force complete Win32s file overwrite
  237.     IF sz$ = "0" THEN
  238.         GOTO WELCOME
  239.     END IF
  240.     '' If WIN32S.INI is missing, try and reinstall Win32s files/recreate WIN32S.INI
  241.     IF sz$ <> "1" THEN
  242.         GOTO WELCOME
  243.     END IF
  244.  
  245.     '' If Win32s is already installed, get running version number
  246.     i% = DoesFileExist( DESTSYS$ + "W32SYS.DLL", femExists )
  247.     IF i% = 1 THEN
  248.         i% = IsWin32sLoaded( szOldVer$ )
  249.     ENDIF
  250.  
  251.     IF i% = 0 THEN
  252.         GOTO WELCOME
  253.     END IF
  254.  
  255.     IF szNewVer$ > szOldVer$ THEN
  256.         GOTO WELCOME
  257.     END IF
  258.  
  259.     OLE2_32% = 0
  260.  
  261.     IF szNewVer$ = szOldVer$ AND OLEINCLUDED% = 1 THEN
  262.         '' Compare OLE32 version and versions of each of OLE16 libraries.
  263.         sz$ = GetIniKeyString (DESTSYS$ + "WIN32S.INI", "OLE", "Setup")
  264.         '' If WIN32S.INI specifies OLE2 Setup=0, then force OLE2 file overwrite
  265.         IF ((sz$ <> "1") OR (szOleNewVer$ > szOleOldVer$)) THEN
  266.             OLEONLY% = 1
  267.             OLE2_32% = 1
  268.             GOTO WELCOME
  269.         END IF
  270.  
  271.     IF OLE2_16% OR OLE2AUTO_16 THEN
  272.             OLEONLY% = 1
  273.             GOTO WELCOME
  274.         END IF
  275.  
  276.     END IF
  277.     WIN32ENABLED% = 1
  278.     GOTO FREECELL
  279.  
  280. WELCOME:
  281. '' DL
  282. ''    i% = SetCuiFlags(OLEONLY%, OLE16RUNAPP%)
  283. ''    sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", HELPWELCOME, HELPPROC$)
  284. ''    IF sz$ = "CONTINUE" THEN
  285. ''        UIPop 1
  286. ''    ELSE
  287. ''        GOSUB ASKQUIT
  288. ''        GOTO WELCOME
  289. ''    END IF
  290.  
  291.  
  292. GETWIN32SPATH:
  293.     IF PagingEnabled() = 0 THEN
  294.         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)
  295.         ExitCode% = EXITFAILURE '' Enhanced mode but not paging
  296.         GOTO QUIT
  297.     END IF
  298.  
  299.     IF ShareEnabled() = 0 THEN
  300.         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)
  301.     END IF
  302.  
  303.     SetSymbolValue "EditTextIn", DESTSYS$
  304.     SetSymbolValue "EditFocus", "END"
  305.  
  306. GETPATHL1:
  307.     sz$ = UIStartDlg(CUIDLL$, VERPATH, "FDispDlgProc", HELPWELCOME, HELPPROC$)
  308.  
  309.     IF sz$ = "CONTINUE" THEN
  310.         IF IsDirWritable(DESTSYS$) = 0 THEN
  311.             GOSUB BADPATH
  312.             GOTO GETPATHL1
  313.         END IF
  314.         UIPop 1
  315.     ELSEIF sz$ = "REACTIVATE" THEN
  316.         GOTO GETPATHL1
  317.     ELSEIF sz$ = "BACK" THEN
  318.         UIPop 1
  319.         GOTO WELCOME
  320.     ELSE
  321.         GOSUB ASKQUIT
  322.         GOTO GETPATHL1
  323.     END IF
  324.  
  325. COPYFILES:
  326.     IF OLEONLY% = 0 THEN
  327.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite
  328.     END IF
  329.     IF OLE2_32% = 1 THEN
  330.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "0", cmoOverwrite
  331.     END IF
  332.  
  333.     '' Indicate Win32s install failure until all files known to be copied.
  334.     ExitCode% = EXITFAILURE
  335.     ERR = 0
  336.     CreateDir DEST32S$, cmoNone
  337.     Install OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%
  338.     UpdateSystemIni
  339.     '' Terminate if unhandled fatal error
  340.     IF ERR <> 0 THEN
  341.     GOTO QUIT
  342.     END IF
  343.  
  344.     IF OLEONLY% = 0 THEN
  345.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "1", cmoOverwrite
  346.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Version", szNewVer$, cmoOverwrite
  347.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Nls", "AnsiCP", "1252", cmoOverwrite
  348.     END IF
  349.     IF OLE2_32% = 1 THEN
  350.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "1", cmoOverwrite
  351.         CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Version", szOleNewVer, cmoOverwrite
  352.     END IF
  353.  
  354.     i% = DoMsgBox("Win32s files successfully installed.", "Microsoft Win32s Setup", MB_OK+MB_TASKMODAL)
  355.     '' Indicate Win32s correctly copied and installed.
  356.     ExitCode% = EXITSUCCESS
  357.  
  358. '' DL
  359.     END
  360.  
  361.  
  362. FREECELL:
  363. '' DL
  364.     GOTO QUIT
  365.     IF OLEONLY% = 1 THEN
  366.         GOTO QUIT
  367.     ENDIF
  368.     IF WIN32ENABLED% = 1 THEN
  369.         sz$ = UIStartDlg(CUIDLL$, FREECELLINSTNOWIN32S, "FInfoDlgProc",0, "")
  370.     ELSE
  371.         sz$ = UIStartDlg(CUIDLL$, FREECELLINST, "FInfoDlgProc",0, "")
  372.     END IF
  373.     UIPop 1
  374.     IF sz$ <> "CONTINUE" THEN
  375.         GOTO QUIT
  376.     END IF
  377.  
  378. GETFREEPATH:
  379.     DESTFREE$ = MID$(DESTSYS$,1,3) + "WIN32APP\FREECELL\"
  380.     SetSymbolValue "EditTextIn", DESTFREE$
  381.     SetSymbolValue "EditFocus", "END"
  382.  
  383. GETFREEPATHL1:
  384.     sz$ = UIStartDlg(CUIDLL$, FREECELLPATH, "FEditDlgProc", HELPFREECELL, HELPPROC$)
  385.  
  386.     IF sz$ = "CONTINUE" THEN
  387.         DESTFREE$ = GetSymbolValue("EditTextOut")
  388.  
  389.         IF MID$(DESTFREE$, LEN(DESTFREE$), 1) <> "\" THEN
  390.             DESTFREE$ = DESTFREE$ + "\"
  391.         END IF
  392.         ''Validate new path.
  393.         IF IsDirWritable(DESTFREE$) = 0 THEN
  394.             GOSUB BADPATH
  395.             GOTO GETFREEPATHL1
  396.         END IF
  397.         UIPop 1
  398.  
  399.         GOTO COPYFREECELL
  400.     ELSEIF sz$ = "REACTIVATE" THEN
  401.         GOTO GETFREEPATHL1
  402.     ELSEIF sz$ = "EXIT" THEN
  403.         UIPop 1
  404.         GOTO QUIT
  405.     END IF
  406.  
  407. COPYFREECELL:
  408.     ClearCopyList
  409.     CreateDir DESTFREE$, cmoNone
  410.  
  411.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  412.  
  413.     ERR = 0
  414.     AddSectionFilesToCopyList "Win32appFreecell", SrcDir$, DESTFREE$
  415.     CopyFilesInCopyList
  416.     '' If error copying FreeCell, not a fatal error. Win32s is already installed.
  417.     IF ERR <> 0 THEN
  418.     ERR = 0
  419.     GOTO QUIT
  420.     END IF
  421.     ERR = 0
  422.  
  423.     IF DoesFileExist( DESTSYS$ + "WIN32S.INI", femExists ) THEN
  424.     CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Freecell", "Setup", "1", cmoOverwrite
  425.     CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Freecell", "Version", szNewVer$, cmoOverwrite
  426.     END IF
  427.  
  428.     ERR = 0
  429.     CreateProgmanGroup "Win32 Applications", "", cmoNone
  430.     ShowProgmanGroup   "Win32 Applications", 1, cmoNone
  431.     CreateProgmanItem  "Win32 Applications", "Freecell", DESTFREE$ + "FREECELL.EXE", "", cmoOverwrite
  432.     '' Only put up success dialog if icon added to group
  433.     IF ERR = 0 THEN
  434.     i% = DoMsgBox("Freecell was successfully installed.", "Freecell Setup", MB_OK+MB_TASKMODAL)
  435.     END IF
  436.     ERR = 0
  437.  
  438. QUIT:
  439.     '' Install error handler for final message box routines
  440.     ON ERROR GOTO ERRQUIT
  441.     IF ERR = 0 THEN
  442.         dlg% = ExitCode%
  443.     ELSEIF ERR = STFQUIT THEN
  444.         IF (OLE_PROTECT% = 1) THEN
  445.             '' Free all previously loaded libraries
  446.             FreeLibrary GetModuleHandle("compobj")
  447.             FreeLibrary GetModuleHandle("ole2")
  448.             FreeLibrary GetModuleHandle("ole2prox")
  449.             FreeLibrary GetModuleHandle("ole2conv")
  450.             FreeLibrary GetModuleHandle("storage")
  451.             FreeLibrary GetModuleHandle("ole2nls")
  452.             FreeLibrary GetModuleHandle("ole2disp")
  453.             FreeLibrary GetModuleHandle("typelib")
  454.         END IF
  455.         dlg% = EXITQUIT
  456.         ExitCode% = EXITQUIT
  457.     ELSE
  458.         dlg% = EXITFAILURE
  459.         ExitCode% = EXITQUIT
  460.     END IF
  461.  
  462. QUITL1:
  463.     IF WIN32ENABLED% = 1 THEN
  464.         UIPop 1
  465.         END
  466.     END IF
  467.  
  468.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  469.     IF sz$ = "REACTIVATE" THEN
  470.         GOTO QUITL1
  471.     END IF
  472.     UIPop 1
  473.  
  474.     IF ExitCode% = EXITSUCCESS THEN
  475.         IF RebootSystem(OLEONLY%) = 0 THEN
  476. 'DL            CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite
  477. 'DL            IF OLE2_32% = 1 THEN
  478. 'DL                CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "OLE", "Setup", "0", cmoOverwrite
  479. 'DL            END IF
  480. 'DL            i% = DoMsgBox("Win32s is not properly configured and Win32s Setup must be run again.", "Unable to Restart Windows", MB_ICONEXCLAMATION+MB_OK+MB_TASKMODAL)
  481.         END IF
  482.     ENDIF
  483.  
  484.     END
  485.  
  486. '' Fatal error handler for error message routine
  487. ERRQUIT:
  488.     i% = DoMsgBox("Setup sources were corrupted!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  489.     END
  490.  
  491. '' Bypass run-time errors. Let final dialog box display fatal error message.
  492. ERRNORMAL:
  493.     '' Check if user cancelled setup
  494.     IF ERR = STFQUIT THEN
  495.     GOTO QUIT
  496.     END IF
  497.     RESUME NEXT
  498.  
  499.  
  500. BADPATH:
  501.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  502.     IF sz$ = "REACTIVATE" THEN
  503.     GOTO BADPATH
  504.     END IF
  505.     UIPop 1
  506.     RETURN
  507.  
  508.   ASKQUIT:
  509.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  510.  
  511.     IF sz$ = "EXIT" THEN
  512.     UIPopAll
  513.     ERROR STFQUIT
  514.     ELSEIF sz$ = "REACTIVATE" THEN
  515.     GOTO ASKQUIT
  516.     ELSE
  517.     UIPop 1
  518.     END IF
  519.     RETURN
  520.  
  521.  
  522.  
  523. '**
  524. '** Purpose:
  525. '**     Builds the copy list and performs all installation operations.
  526. '** Arguments:
  527. '**     none.
  528. '** Returns:
  529. '**     none.
  530. '*************************************************************************
  531. SUB Install(OLEONLY%, OLE2_32%, OLE2_16%, OLE2AUTO_16%, OLE16RUNAPP%) STATIC
  532.  
  533.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  534.  
  535.     '' Use file layout sections that specify OLDER file version/time check
  536.     IF OLEONLY% = 0 THEN
  537.         AddSectionFilesToCopyList "WindowsSystem", SrcDir$, DESTSYS$
  538.         AddSectionFilesToCopyList "WindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\"
  539.         '' Add obsolete files to be removed
  540.         AddSectionFilesToCopyList "Win32sSystemObsoleteFiles", SrcDir$, DESTSYS$ + "WIN32S\"
  541.     END IF
  542.  
  543.     OLE_PROTECT% = 0
  544.     OLEINCLUDED% = DoesFileExist( GetSymbolValue("STF_SRCDIR") + "OLE2THK.DL_", femExists )
  545.     if OLEINCLUDED% = 1 THEN
  546.         IF (OLE2_16% = 1) OR (OLE2AUTO_16% = 1) THEN
  547.             IF OLE16RUNAPP% = 1 THEN
  548.                 '' Force all OLE2 DLLS to be copied during reboot.
  549.                 i% = SetErrorMode(-32768)
  550.                 i% = LoadLibrary(DESTSYS$ + "compobj.dll")
  551.                 i% = LoadLibrary(DESTSYS$ + "ole2.dll")
  552.                 i% = LoadLibrary(DESTSYS$ + "ole2prox.dll")
  553.                 i% = LoadLibrary(DESTSYS$ + "ole2conv.dll")
  554.                 i% = LoadLibrary(DESTSYS$ + "storage.dll")
  555.                 i% = LoadLibrary(DESTSYS$ + "ole2nls.dll")
  556.                 i% = LoadLibrary(DESTSYS$ + "ole2disp.dll")
  557.                 i% = LoadLibrary(DESTSYS$ + "typelib.dll")
  558.                 OLE_PROTECT% = 1
  559.             END IF
  560.             AddSectionFilesToCopyList "OleWindowsSystem", SrcDir$, DESTSYS$
  561.         END IF
  562.         IF OLE2_32% = 1 THEN
  563.             AddSectionFilesToCopyList "OleWindowsSystemWin32s", SrcDir$, DESTSYS$ + "WIN32S\"
  564.         END IF
  565.         IF (OLE2_16% = 1) OR (OLE2_32% = 1) OR (OLE2AUTO_16% = 1) THEN
  566.             AddSectionFilesToCopyList "Ole2RegWindowsSystem", SrcDir$, DESTSYS$
  567.         END IF
  568.         IF (OLE2AUTO_16% = 1) THEN
  569.             AddSectionFilesToCopyList "StdoleWindowsSystem", SrcDir$, DESTSYS$
  570.         END IF
  571.     END IF
  572.  
  573.     SetRestartDir GetWindowsDir()
  574.  
  575.     CopyFilesInCopyList
  576.  
  577.     IF (OLE_PROTECT% = 1) THEN
  578.         '' Free all previously loaded libraries
  579.         FreeLibrary GetModuleHandle("compobj")
  580.         FreeLibrary GetModuleHandle("ole2")
  581.         FreeLibrary GetModuleHandle("ole2prox")
  582.         FreeLibrary GetModuleHandle("ole2conv")
  583.         FreeLibrary GetModuleHandle("storage")
  584.         FreeLibrary GetModuleHandle("ole2nls")
  585.         FreeLibrary GetModuleHandle("ole2disp")
  586.         FreeLibrary GetModuleHandle("typelib")
  587.         OLE_PROTECT% = 0
  588.     END IF
  589.     IF OLEINCLUDED% AND (OLE2_16% OR OLE2_32% OR OLE2AUTO_16%) THEN
  590.         RUN "regedit /s " + DESTSYS$ + "ole2.reg"
  591.     END IF
  592.  
  593. END SUB
  594.  
  595. SUB UpdateSystemIni STATIC
  596.  
  597.     VxDPath$ = DEST32S$ + "W32S.386"
  598.     SystemIniPath$ = GetWindowsDir()
  599.  
  600.     t% = MakeSystemIni(SystemIniPath$, VxdPath$)
  601.  
  602. END SUB
  603.  
  604. FUNCTION RebootSystem(OLEONLY%) STATIC AS INTEGER
  605.  
  606. '   Check if any files were locked during install.  If the RestartList
  607. '   is not empty, ExitExecRestart() will restart Windows, cleanup setup
  608. '   files, and copy over locked files before Windows restarts.
  609.     i% = RestartListEmpty()
  610.     IF i% = 0 THEN
  611. '      ExitExecRestart() only returns if applications refuse to be shutdown.
  612. '      Win32s is installed but will not operate until Windows is restarted
  613. '      and the Win32s VxD is loaded.
  614. 'DL       i% = ExiwtExecRestart()
  615.        RebootSystem = 0
  616.     ELSE
  617. '      If the RestartList list is empty, it is necessary to restart windows
  618. '      directly.  The MSSETUP program creates _MSRSTRT.EXE and _MSSETUP.BAT
  619. '      in the restart directory.  This program should be exec'd to handle
  620. '      proper MSSETUP cleanup (temp files) and restart Windows.
  621.        IF (OLEONLY% = 1) THEN
  622.            RebootSystem = 1
  623.        ELSE
  624. 'DL           i% = ExitWindowsExec( GetWindowsDir() + "_MSRSTRT.EXE", "_MSSETUP.BAT" )
  625.            RebootSystem = 0
  626.        END IF
  627.     ENDIF
  628.  
  629. END FUNCTION
  630.  
  631.  
  632. '**
  633. '** Purpose:
  634. '**     Appends a file name to the end of a directory path,
  635. '**     inserting a backslash character as needed.
  636. '** Arguments:
  637. '**     szDir$  - full directory path (with optional ending "\")
  638. '**     szFile$ - filename to append to directory
  639. '** Returns:
  640. '**     Resulting fully qualified path name.
  641. '*************************************************************************
  642. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  643.     IF szDir$ = "" THEN
  644.     MakePath = szFile$
  645.     ELSEIF szFile$ = "" THEN
  646.     MakePath = szDir$
  647.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  648.     MakePath = szDir$ + szFile$
  649.     ELSE
  650.     MakePath = szDir$ + "\" + szFile$
  651.     END IF
  652. END FUNCTION
  653.