home *** CD-ROM | disk | FTP | other *** search
/ PC/CD Review 41 / PCREVMAR.BIN / setup / setup.mst < prev    next >
Encoding:
Text File  |  1994-09-21  |  10.1 KB  |  301 lines

  1. rem Required includes to interface with MSSETUP DLL's
  2. rem -------------------------------------------------
  3. '$INCLUDE 'setupapi.inc'
  4. '$INCLUDE 'msdetect.inc'
  5.  
  6.  
  7. rem Dialog box id's
  8. rem ---------------
  9. rem Note: If MSSETUP were really smart, we could use the
  10. rem #defines in DIALOGS.HR. Instead, we must manually
  11. rem keep them in step
  12. rem ----------------------------------------------------
  13.     CONST DESTPATH      = 300          ''Gets destination path
  14.     CONST EXITQUIT      = 600          ''Exits on user request
  15.     CONST EXITSUCCESS   = 700          ''Exits when install is done
  16.     CONST ASKSETUP      = 800          ''Gets setup options
  17.     CONST TOOBIG        = 6300         ''Not enough space on target disk error
  18.     CONST BADPATH       = 6400         ''Bad destination path error
  19.     CONST BADWINDOWS    = 6500         ''Wrong Windows release
  20.     CONST BADCOLORS     = 6550         ''Not in 256 colors
  21.     CONST EXITFAILURE   = 6600         ''Exits on error
  22.  
  23.  
  24. rem String id's
  25. rem -----------
  26. rem Note: If MSSETUP were really smart, we could use the
  27. rem #defines in DIALOGS.HR. Instead, we must manually
  28. rem keep them in step
  29. rem ----------------------------------------------------
  30.     CONST STR_UTILITY   = 1024         ''Utility
  31.     CONST STR_GROUP     = 1025         ''Program Manager group
  32.     CONST STR_TITLE     = 1026         ''Installer Title
  33.     CONST STR_MSG1      = 1027         ''Version error message part 1
  34.     CONST STR_MSG2      = 1028         ''Version error message part 2
  35.     CONST STR_WARNING   = 1029         ''Warning
  36.     CONST STR_README    = 1030         ''Read Me
  37.  
  38.  
  39. rem Miscellaneous Constants
  40. rem -----------------------
  41.     CONST NOLOGO = 1                   ''Dummy NULL bitmap (must be 1)
  42.     CONST NOSPACE = 1                  ''No space to complete install
  43.     CONST INSTALLOK = 2                ''Install completed OK
  44.     CONST INSTALLFAILED =3             ''Install failed for some reason
  45.  
  46.  
  47. rem Global Variables
  48. rem ----------------
  49.     GLOBAL SOURCE$                     ''Source directory
  50.     GLOBAL SRCDIR$                     ''Source directory
  51.     GLOBAL DEST$                       ''Default destination directory
  52.     GLOBAL SETUPTYPE$                  ''Setup type (Local, Client, Server)
  53.     GLOBAL QUICKINST$                  ''Setup type (Local, Client, Server)
  54.     GLOBAL PARTIALINST$                ''Setup type (Local, Client, Server)
  55.     GLOBAL FULLINST$                   ''Setup type (Local, Client, Server)
  56.     GLOBAL QTWDIR$                     ''QTW directory
  57.     GLOBAL CUIDLL$                     ''User interface DLL
  58.     GLOBAL SETUPPATH$                  ''Setup destination path
  59.     GLOBAL HELPPROC$                   ''Help dialog procedure
  60.     GLOBAL EXTRACOSTS$                 ''List of extra costs to add per drive
  61.     GLOBAL APPNEEDS$                   ''Disk space costs per drive
  62.     GLOBAL SECTIONKEY$                 ''INF file section key
  63.     GLOBAL SUCCESS%                    ''Installation completion code
  64.  
  65.  
  66. rem Initialize global vriables
  67. rem --------------------------
  68.     QUICKINST$      = "1"
  69.     PARTIALINST$    = "2"
  70.     FULLINST$       = "3"
  71.     SETUPPATH$      = "C:\"
  72.     SOURCE$         = GetSymbolValue("STF_SRCDIR")
  73.     DEST$           = SETUPPATH$
  74.     SUCCESS%        = INSTALLFAILED
  75.     EXTRACOSTS$     = "ExtraCosts"
  76.     APPNEEDS$       = "AppNeeds"
  77.     SECTIONKEY$     = "SectionKey"
  78.  
  79.     FOR i% = 1 TO 26 STEP 1
  80.         AddListItem EXTRACOSTS$, "16384"
  81.     NEXT i%
  82.  
  83.  
  84. rem Get name of localized user interface dialogs
  85. rem --------------------------------------------
  86.     CUIDLL$ = "setup.DLL"
  87.  
  88.  
  89. rem Subroutines and Functions
  90. rem -------------------------
  91.     DECLARE FUNCTION Install AS INTEGER
  92.     DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  93.     DECLARE FUNCTION GetDLLVersion LIB "setup.dll" (szDLL$) AS INTEGER
  94.     DECLARE FUNCTION HideCriticalDirectory LIB "setup.dll" (szDir$) AS INTEGER
  95.     DECLARE FUNCTION Has256Colors LIB "setup.dll" (hinst%) AS INTEGER
  96.     DECLARE FUNCTION GetResourceString LIB "setup.dll" (szResource$, idString%) AS INTEGER
  97.     DECLARE FUNCTION StartCustomSetup LIB "setup.dll" (hinst%, hwnd%) AS INTEGER
  98.     DECLARE FUNCTION StopCustomSetup LIB "setup.dll" (hinst%, hwnd%) AS INTEGER
  99. rem DECLARE FUNCTION WritePrivateProfileString LIB "krnl386.exe" (szSect$, szEntry$, szString$, szINI$) 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 Find and read the .INF file
  136. rem ---------------------------
  137.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  138.  
  139.     IF szInf$ = "" THEN
  140.        szTemp$ = GetSymbolValue("STF_SRCDIR")
  141.        szInf$ = szTemp$ + "CD.INF"
  142.     END IF
  143.  
  144.     ReadInfFile szInf$
  145.  
  146.  
  147. rem Where is QTW?
  148. rem -------------
  149. FINDQTW:
  150.     sz$ = FindTargetOnEnvVar("QTIM.DLL", "PATH")
  151.     IF sz$ = "" THEN
  152.        QTWDIR$ = GetWindowsSysDir()
  153.     ELSE
  154.        QTWDIR$ = MID$(sz$,1,INSTR(sz$,"QTIM.DLL")-1)
  155.     END IF
  156.  
  157.  
  158. rem Perform actual installation
  159. rem ---------------------------
  160. INSTALLME:
  161.     SUCCESS% = Install
  162.  
  163.     IF SUCCESS% = NOSPACE THEN
  164.        GOSUB TOOBIG
  165.     END IF
  166.  
  167.  
  168. rem When done, issue dialog
  169. rem -----------------------
  170. QUIT:
  171.     IF SUCCESS% = INSTALLOK THEN
  172.        sz$ = UIStartDlg(CUIDLL$, EXITSUCCESS, "FInfo0DlgProc", 0, "")
  173.     ELSE
  174.        sz$ = UIStartDlg(CUIDLL$, EXITFAILURE, "FInfo0DlgProc", 0, "")
  175.     END IF
  176.     UIPop 1
  177.  
  178.  
  179. rem Clean up all processing
  180. rem -----------------------
  181. CLEANUP:
  182.     i% = StopCustomSetup (HinstFrame(), HwndFrame ())
  183.  
  184.     END
  185.  
  186.  
  187. rem ASKQUIT: The user requested quit; does (s)he really want to?
  188. rem ------------------------------------------------------------
  189. ASKQUIT:
  190.     sz$ = UIStartDlg(CUIDLL$, EXITQUIT, "FInfoDlgProc", 0, "")
  191.     UIPop 1
  192.     IF sz$ = "CONTINUE" THEN
  193.        RETURN
  194.     END IF
  195.     GOTO CLEANUP
  196.  
  197.  
  198. rem BADPATH: The user entered an invalid destination directory
  199. rem ----------------------------------------------------------
  200. BADPATH:
  201.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  202.     IF sz$ = "REACTIVATE" THEN
  203.        GOTO BADPATH
  204.     END IF
  205.     UIPop 1
  206.  
  207.     RETURN
  208.  
  209.  
  210. rem TOOBIG: The source files won't fit on the requested destination disk
  211. rem --------------------------------------------------------------------
  212. TOOBIG:
  213.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  214.     IF sz$ = "REACTIVATE" THEN
  215.        GOTO TOOBIG
  216.     END IF
  217.     UIPop 1
  218.  
  219.     RETURN
  220.  
  221.  
  222. rem Install: Perform actual installation
  223. rem ------------------------------------
  224. FUNCTION Install STATIC AS INTEGER
  225.  
  226.     rem Build the copy list
  227.     rem -------------------
  228.         i% = GetDLLVersion(MakePath(QTWDIR$, "qtim.dll"))
  229.         szOld$ = GetSymbolValue ("VersionString")
  230.         i% = GetDLLVersion(MakePath(SOURCE$, "qtim.dll"))
  231.         szNew$ = GetSymbolValue ("VersionString")
  232.         rem i% = DoMsgBox(szOld$, szNew$, 0)
  233.         IF szNew$ < szOld$ THEN
  234.            rem i% = DoMsgBox("Gods QTW earlier than installed QTW", szNew$, 0)
  235.            GOTO PROGMAN
  236.         END IF
  237.         IF szNew$ = szOld$ THEN
  238.            rem i% = DoMsgBox("Gods QTW same as installed QTW", szNew$, 0)
  239.            GOTO PROGMAN
  240.         END IF
  241.         rem i% = DoMsgBox("Gods QTW more recent than installed QTW", szNew$, 0)
  242.     COPYFILES:
  243.         AddSectionFilesToCopyList "QTIM", SOURCE$, QTWDIR$
  244.  
  245.     rem Check that we have enough free space to perform the install
  246.     rem -----------------------------------------------------------
  247.         ListSym$ = APPNEEDS$
  248.         StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  249.  
  250.         drive$ = MID$(QTWDIR$, 1, 1)
  251.         ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  252.         cost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  253.         free& = GetFreeSpaceForDrive(drive$)
  254.  
  255.         IF cost& >= free& THEN
  256.            Install = NOSPACE
  257.            EXIT FUNCTION
  258.         END IF
  259.  
  260.     rem Copy all the files from the source to the destination
  261.     rem -----------------------------------------------------
  262.         CopyFilesInCopyList
  263.  
  264.     rem Create a Program Manager group
  265.     rem ------------------------------
  266.     PROGMAN:
  267.         SRCDIR$ = MID$(SOURCE$,1,INSTR(SOURCE$,"SETUP")-1)
  268.         CreateProgmanGroup "Wrath of the Gods", "", cmoNone
  269.         CreateProgmanItem "Wrath of the Gods", "Wrath Self-Running Demo",  MakePath(SRCDIR$,"selfrun\000wrath.exe"), "", cmoOverwrite
  270.         CreateProgmanItem "Wrath of the Gods", "Wrath 50MB Interactive Demo",  MakePath(SRCDIR$,"demo50\000wrath.exe"), "", cmoOverwrite
  271.         CreateProgmanItem "Wrath of the Gods", "Wrath 20MB Interactive Demo",  MakePath(SRCDIR$,"demo20\000wrath.exe"), "", cmoOverwrite
  272.         CreateProgmanItem "Wrath of the Gods", "Read Me",  MakePath(SRCDIR$,"readme.wri"), "", cmoOverwrite
  273.  
  274.     rem Indicate install completed OK
  275.     rem -----------------------------
  276.         Install = INSTALLOK
  277.  
  278. END FUNCTION
  279.  
  280.  
  281. rem MakePath: Builds path from directory and file
  282. rem ---------------------------------------------
  283. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  284.  
  285.     IF szDir$ = "" THEN
  286.        MakePath = szFile$
  287.  
  288.     ELSEIF szFile$ = "" THEN
  289.        MakePath = szDir$
  290.  
  291.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  292.        MakePath = szDir$ + szFile$
  293.  
  294.     ELSE
  295.        MakePath = szDir$ + "\" + szFile$
  296.  
  297.     END IF
  298.  
  299. END FUNCTION
  300.  
  301.