home *** CD-ROM | disk | FTP | other *** search
/ CD-ROM Today - The Disc! 2 / CD-ROM_Today_-_The_Disc_2_June-July_1994.iso / garden / setup / setup.mst < prev    next >
Text File  |  1994-03-02  |  14KB  |  405 lines

  1.  
  2.  
  3. rem Required includes to interface with MSSETUP DLL's
  4. rem -------------------------------------------------
  5. '$INCLUDE 'setupapi.inc'
  6. '$INCLUDE 'msdetect.inc'
  7.  
  8.  
  9. rem Dialog box id's
  10. rem ---------------
  11. rem Note: If MSSETUP were really smart, we could use the
  12. rem #defines in DIALOGS.HR. Instead, we must manually
  13. rem keep them in step
  14. rem ----------------------------------------------------
  15.     CONST DESTPATH      = 300          ''Gets destination path
  16.     CONST EXITQUIT      = 600          ''Exits on user request
  17.     CONST EXITSUCCESS   = 700          ''Exits when install is done
  18.     CONST ASKSETUP      = 800          ''Gets setup options
  19.     CONST TOOBIG        = 6300         ''Not enough space on target disk error
  20.     CONST BADPATH       = 6400         ''Bad destination path error
  21.     CONST BADWINDOWS    = 6500         ''Wrong Windows release
  22.     CONST BADCOLORS     = 6550         ''Not in 256 colors
  23.     CONST EXITFAILURE   = 6600         ''Exits on error
  24.  
  25.  
  26. rem String id's
  27. rem -----------
  28. rem Note: If MSSETUP were really smart, we could use the
  29. rem #defines in DIALOGS.HR. Instead, we must manually
  30. rem keep them in step
  31. rem ----------------------------------------------------
  32.     CONST STR_UTILITY   = 1024         ''Utility
  33.     CONST STR_GROUP     = 1025         ''Program Manager group
  34.     CONST STR_TITLE     = 1026         ''Installer Title
  35.     CONST STR_MSG1      = 1027         ''Version error message part 1
  36.     CONST STR_MSG2      = 1028         ''Version error message part 2
  37.     CONST STR_WARNING   = 1029         ''Warning
  38.     CONST STR_README    = 1030         ''Read Me
  39.  
  40.  
  41. rem Miscellaneous Constants
  42. rem -----------------------
  43.     CONST NOLOGO = 1                   ''Dummy NULL bitmap (must be 1)
  44.     CONST NOSPACE = 1                  ''No space to complete install
  45.     CONST INSTALLOK = 2                ''Install completed OK
  46.     CONST INSTALLFAILED =3             ''Install failed for some reason
  47.  
  48.  
  49. rem Global Variables
  50. rem ----------------
  51.     GLOBAL SOURCE$                     ''Source directory
  52.     GLOBAL DEST$                       ''Default destination directory
  53.     GLOBAL SETUPTYPE$                  ''Setup type (Local, Client, Server)
  54.     GLOBAL QUICKINST$                  ''Setup type (Local, Client, Server)
  55.     GLOBAL PARTIALINST$                ''Setup type (Local, Client, Server)
  56.     GLOBAL FULLINST$                   ''Setup type (Local, Client, Server)
  57.     GLOBAL QTWDIR$                     ''QTW directory
  58.     GLOBAL CUIDLL$                     ''User interface DLL
  59.     GLOBAL SETUPPATH$                  ''Setup destination path
  60.     GLOBAL HELPPROC$                   ''Help dialog procedure
  61.     GLOBAL EXTRACOSTS$                 ''List of extra costs to add per drive
  62.     GLOBAL APPNEEDS$                   ''Disk space costs per drive
  63.     GLOBAL SECTIONKEY$                 ''INF file section key
  64.     GLOBAL SUCCESS%                    ''Installation completion code
  65.  
  66.  
  67. rem Initialize global vriables
  68. rem --------------------------
  69.     QUICKINST$      = "1"
  70.     PARTIALINST$    = "2"
  71.     FULLINST$       = "3"
  72.     SETUPPATH$      = "C:\GARDEN"
  73.     SOURCE$         = GetSymbolValue("STF_SRCDIR")
  74.     DEST$           = SETUPPATH$
  75.     SUCCESS%        = INSTALLFAILED
  76.     EXTRACOSTS$     = "ExtraCosts"
  77.     APPNEEDS$       = "AppNeeds"
  78.     SECTIONKEY$     = "SectionKey"
  79.  
  80.     FOR i% = 1 TO 26 STEP 1
  81.         AddListItem EXTRACOSTS$, "16384"
  82.     NEXT i%
  83.  
  84.  
  85. rem Get name of localized user interface dialogs
  86. rem --------------------------------------------
  87.     CUIDLL$ = "setup.DLL"
  88.  
  89.  
  90. rem Subroutines and Functions
  91. rem -------------------------
  92.     DECLARE FUNCTION Install AS INTEGER
  93.     DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  94.     DECLARE FUNCTION GetDLLVersion LIB "setup.dll" (szDLL$) AS INTEGER
  95.     DECLARE FUNCTION HideCriticalDirectory LIB "setup.dll" (szDir$) AS INTEGER
  96.     DECLARE FUNCTION Has256Colors LIB "setup.dll" (hinst%) AS INTEGER
  97.     DECLARE FUNCTION GetResourceString LIB "setup.dll" (szResource$, idString%) AS INTEGER
  98.     DECLARE FUNCTION StartCustomSetup LIB "setup.dll" (hinst%, hwnd%) AS INTEGER
  99.     DECLARE FUNCTION StopCustomSetup LIB "setup.dll" (hinst%, hwnd%) AS INTEGER
  100.  
  101.  
  102. rem Initialize custom setup logic
  103. rem -----------------------------
  104.     SetBitmap CUIDLL$, NOLOGO
  105.     i% = GetResourceString (CUIDLL$, STR_TITLE)
  106.     SetTitle GetSymbolValue ("ResourceString")
  107.     i% = StartCustomSetup (HinstFrame(), HwndFrame ())
  108.     i% = SetBeepingMode(1)
  109.  
  110.  
  111. rem Make sure that we are running on Windows 3.1 or better
  112. rem ------------------------------------------------------
  113.     IF GetWindowsMajorVersion() < 3 THEN
  114.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  115.        UIPop 1
  116.        GOTO CLEANUP
  117.     END IF
  118.  
  119.     IF (GetWindowsMajorVersion() = 3) AND (GetWindowsMinorVersion() < 10) THEN
  120.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  121.        UIPop 1
  122.        GOTO CLEANUP
  123.     END IF
  124.  
  125.  
  126. rem Make sure that we are running on a 386 or better
  127. rem ------------------------------------------------
  128.     IF GetWinFlags() AND 2 THEN
  129.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  130.        UIPop 1
  131.        GOTO CLEANUP
  132.     END IF
  133.  
  134.  
  135. rem Make sure that we are running in 256 colors
  136. rem -------------------------------------------
  137.     IF Has256Colors (HinstFrame()) = 0 THEN
  138.        sz$ = UIStartDlg(CUIDLL$, BADCOLORS, "FInfo0DlgProc", 0, "")
  139.        UIPop 1
  140.     END IF
  141.  
  142.  
  143. rem Find and read the .INF file
  144. rem ---------------------------
  145.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  146.  
  147.     IF szInf$ = "" THEN
  148.        szTemp$ = GetSymbolValue("STF_SRCDIR")
  149.        szInf$ = szTemp$ + "CD.INF"
  150.     END IF
  151.  
  152.     ReadInfFile szInf$
  153.  
  154.  
  155. rem Estimate the cost of the install
  156. rem --------------------------------
  157.     SETUPTYPE$ = QUICKINST$
  158.     GOTO GETPATH
  159.     ListSym$ = APPNEEDS$
  160.     drive$ = MID$(DEST$, 1, 1)
  161.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  162.     AddSectionFilesToCopyList "Garden", SOURCE$, DEST$
  163.     AddSectionFilesToCopyList "QTIM", SOURCE$, DEST$
  164.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  165.     QuickCost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  166.     SetSymbolValue "QuickCost", STR$(QuickCost& / 100000)
  167.     AddSectionFilesToCopyList "FromCDA", MID$(SOURCE$,1,INSTR(SOURCE$,"SETUP")-1) + "GARDEN\", DEST$
  168.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  169.     PartialCost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  170.     SetSymbolValue "PartialCost", STR$(PartialCost& / 100000)
  171.     AddSectionFilesToCopyList "FromCDB", MID$(SOURCE$,1,INSTR(SOURCE$,"SETUP")-1) + "GARDEN\", DEST$
  172.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  173.     FullCost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  174.     SetSymbolValue "FullCost", STR$(FullCost& / 100000)
  175.     ClearCopyList
  176.  
  177. rem Get the setup type: Quick, Partial or Full
  178. rem ------------------------------------------
  179. ITYPE:
  180.     SetSymbolValue "RadioDefault", SETUPTYPE$
  181.  
  182. ITYPEL1:
  183.     sz$ = UIStartDlg(CUIDLL$, ASKSETUP, "FRadioDlgProc", 0, "")
  184.  
  185.     SETUPTYPE$ = GetSymbolValue("ButtonChecked")
  186.  
  187.     IF sz$ = "CONTINUE" THEN
  188.        UIPop(1)
  189.  
  190.     ELSEIF sz$ = "REACTIVATE" THEN
  191.        GOTO ITYPEL1
  192.  
  193.     ELSE
  194.        GOSUB ASKQUIT
  195.        GOTO ITYPE
  196.  
  197.     END IF
  198.  
  199.  
  200. rem Get the destination path; if it's bad, we display an error
  201. rem ----------------------------------------------------------------
  202. GETPATH:
  203.     DEST$ = "C:\"
  204.     GOTO FINDQTW
  205.     SetSymbolValue "EditTextIn", DEST$
  206.     SetSymbolValue "EditFocus", "END"
  207.  
  208. GETPATHL1:
  209.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", 0, "")
  210.  
  211.     DEST$ = GetSymbolValue("EditTextOut")
  212.  
  213.     IF sz$ = "CONTINUE" THEN
  214.        IF IsDirWritable(DEST$) = 0 THEN
  215.           GOSUB BADPATH
  216.           GOTO GETPATHL1
  217.        END IF
  218.  
  219.        UIPop 1
  220.  
  221.     ELSEIF sz$ = "REACTIVATE" THEN
  222.        GOTO GETPATHL1
  223.  
  224.     ELSE
  225.        GOSUB ASKQUIT
  226.        GOTO GETPATH
  227.  
  228.     END IF
  229.  
  230.  
  231. rem Where is QTW?
  232. rem -------------
  233. FINDQTW:
  234.     sz$ = FindTargetOnEnvVar("QTIM.DLL", "PATH")
  235.     IF sz$ = "" THEN
  236.        QTWDIR$ = DEST$
  237.     ELSE
  238.        QTWDIR$ = MID$(sz$,1,INSTR(sz$,"QTIM.DLL")-1)
  239.     END IF
  240.  
  241.  
  242. rem Perform actual installation
  243. rem ---------------------------
  244. INSTALL:
  245.     SUCCESS% = Install
  246.  
  247.     IF SUCCESS% = NOSPACE THEN
  248.        GOSUB TOOBIG
  249.        GOTO GETPATH
  250.     END IF
  251.  
  252.  
  253. rem When done, issue dialog
  254. rem -----------------------
  255. QUIT:
  256.     IF SUCCESS% = INSTALLOK THEN
  257.        sz$ = UIStartDlg(CUIDLL$, EXITSUCCESS, "FInfo0DlgProc", 0, "")
  258.     ELSE
  259.        sz$ = UIStartDlg(CUIDLL$, EXITFAILURE, "FInfo0DlgProc", 0, "")
  260.     END IF
  261.     UIPop 1
  262.  
  263.  
  264. rem Clean up all processing
  265. rem -----------------------
  266. CLEANUP:
  267.     i% = StopCustomSetup (HinstFrame(), HwndFrame ())
  268.  
  269.     END
  270.  
  271.  
  272. rem ASKQUIT: The user requested quit; does (s)he really want to?
  273. rem ------------------------------------------------------------
  274. ASKQUIT:
  275.     sz$ = UIStartDlg(CUIDLL$, EXITQUIT, "FInfoDlgProc", 0, "")
  276.     UIPop 1
  277.     IF sz$ = "CONTINUE" THEN
  278.        RETURN
  279.     END IF
  280.     GOTO CLEANUP
  281.  
  282.  
  283. rem BADPATH: The user entered an invalid destination directory
  284. rem ----------------------------------------------------------
  285. BADPATH:
  286.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  287.     IF sz$ = "REACTIVATE" THEN
  288.        GOTO BADPATH
  289.     END IF
  290.     UIPop 1
  291.  
  292.     RETURN
  293.  
  294.  
  295. rem TOOBIG: The source files won't fit on the requested destination disk
  296. rem --------------------------------------------------------------------
  297. TOOBIG:
  298.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  299.     IF sz$ = "REACTIVATE" THEN
  300.        GOTO TOOBIG
  301.     END IF
  302.     UIPop 1
  303.  
  304.     RETURN
  305.  
  306.  
  307. rem Install: Perform actual installation
  308. rem ------------------------------------
  309. FUNCTION Install STATIC AS INTEGER
  310.         GOTO CREATEGROUP
  311.  
  312.     rem Create the destination directory
  313.     rem --------------------------------
  314.         CreateDir DEST$, cmoNone
  315.  
  316.     rem Build the copy list
  317.     rem -------------------
  318.         AddSectionFilesToCopyList "Garden", SOURCE$, DEST$
  319.         AddSectionFilesToCopyList "QTIM", SOURCE$, QTWDIR$
  320.         IF SETUPTYPE$ = PARTIALINST$ THEN
  321.            AddSectionFilesToCopyList "FromCDA", MID$(SOURCE$,1,INSTR(SOURCE$,"SETUP")-1) + "GARDEN\", DEST$
  322.         ELSEIF SETUPTYPE$ = FULLINST$ THEN
  323.            AddSectionFilesToCopyList "FromCDA", MID$(SOURCE$,1,INSTR(SOURCE$,"SETUP")-1) + "GARDEN\", DEST$
  324.            AddSectionFilesToCopyList "FromCDB", MID$(SOURCE$,1,INSTR(SOURCE$,"SETUP")-1) + "GARDEN\", DEST$
  325.         END IF
  326.  
  327.     rem Check that we have enough free space to perform the install
  328.     rem -----------------------------------------------------------
  329.         ListSym$ = APPNEEDS$
  330.         StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  331.  
  332.         drive$ = MID$(DEST$, 1, 1)
  333.         ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  334.         cost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  335.         free& = GetFreeSpaceForDrive(drive$)
  336.  
  337.         IF cost& >= free& THEN
  338.            Install = NOSPACE
  339.            EXIT FUNCTION
  340.         END IF
  341.  
  342.     rem Copy all the files from the source to the destination
  343.     rem -----------------------------------------------------
  344.         CopyFilesInCopyList
  345.  
  346.     rem Update PROGRAM.INI
  347.     rem ------------------
  348.         ini$ = MakePath(DEST$, "PROGRAM.INI")
  349.         RemoveIniSection ini$, "Directories", cmoNone
  350.         RemoveIniSection ini$, "HardDisk", cmoNone
  351.         CreateIniKeyValue ini$, "Directories", "HardDisk", DEST$ + "\" , cmoNone
  352.         CreateIniKeyValue ini$, "Directories", "CDROM", MID$(SOURCE$,1,INSTR(SOURCE$,"SETUP")-1) + "GARDEN\", cmoNone
  353.         IF SETUPTYPE$ = PARTIALINST$ THEN
  354.            CreateIniKeyValue ini$, "HardDisk", "dummy", "1" , cmoNone
  355.            CopyFile MakePath(SOURCE$, "fromcda.ini"), ini$, cmoNone, 1
  356.         ELSEIF SETUPTYPE$ = FULLINST$ THEN
  357.            CreateIniKeyValue ini$, "HardDisk", "dummy", "1" , cmoNone
  358.            CopyFile MakePath(SOURCE$, "fromcda.ini"), ini$, cmoNone, 1
  359.            CopyFile MakePath(SOURCE$, "fromcdb.ini"), ini$, cmoNone, 1
  360.         END IF
  361.  
  362.     rem Copy to AMT.INI
  363.     rem ---------------
  364.         CopyFile ini$, MakePath(GetWindowsDir(), "AMT.INI"), cmoNone, 0
  365.  
  366.  
  367.     rem Create a Program Manager group
  368.     rem ------------------------------
  369.     CREATEGROUP:
  370.         i% = GetResourceString (CUIDLL$, STR_GROUP)
  371.         GROUP$ = GetSymbolValue ("ResourceString")
  372.         CreateProgmanGroup GROUP$, "", cmoNone
  373.         i% = GetResourceString (CUIDLL$, STR_UTILITY)
  374.         CreateProgmanItem GROUP$, "Forever Growing Garden Demo", MakePath(MID$(SOURCE$,1,INSTR(SOURCE$,"SETUP")-1),"g_demo.exe"), "", cmoOverwrite
  375.         i% = GetResourceString (CUIDLL$, STR_README)
  376.         CreateProgmanItem GROUP$, GetSymbolValue ("ResourceString"), "write " + MakePath(MID$(SOURCE$,1,INSTR(SOURCE$,"SETUP")-1),"readme.wri"), "", cmoOverwrite
  377.  
  378.     rem Indicate install completed OK
  379.     rem -----------------------------
  380.         Install = INSTALLOK
  381.  
  382. END FUNCTION
  383.  
  384.  
  385. rem MakePath: Builds path from directory and file
  386. rem ---------------------------------------------
  387. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  388.  
  389.     IF szDir$ = "" THEN
  390.        MakePath = szFile$
  391.  
  392.     ELSEIF szFile$ = "" THEN
  393.        MakePath = szDir$
  394.  
  395.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  396.        MakePath = szDir$ + szFile$
  397.  
  398.     ELSE
  399.        MakePath = szDir$ + "\" + szFile$
  400.  
  401.     END IF
  402.  
  403. END FUNCTION
  404.  
  405.