home *** CD-ROM | disk | FTP | other *** search
/ CD-ROM Today (UK) 11 / CDRTODAY.iso / qtsetup / setup.mst < prev    next >
Encoding:
Text File  |  1995-01-10  |  17.1 KB  |  494 lines

  1.  
  2. rem ---------------------------------------------------------------------
  3. rem
  4. rem SETUP.MST    - MSSETUP Installation Script
  5. rem
  6. rem                Version 1.0
  7. rem
  8. rem                (c) 1988-1992 Apple Computer, Inc. All Rights Reserved.
  9. rem
  10. rem ---------------------------------------------------------------------
  11.  
  12.  
  13. rem Required includes to interface with MSSETUP DLL's
  14. rem -------------------------------------------------
  15. '$INCLUDE 'setupapi.inc'
  16. '$INCLUDE 'msdetect.inc'
  17.  
  18.  
  19. rem Dialog box id's
  20. rem ---------------
  21. rem Note: If MSSETUP were really smart, we could use the
  22. rem #defines in DIALOGS.HR. Instead, we must manually
  23. rem keep them in step
  24. rem ----------------------------------------------------
  25.     CONST DESTPATH      = 300          ''Gets destination path
  26.     CONST EXITQUIT      = 600          ''Exits on user request
  27.     CONST EXITSUCCESS   = 700          ''Exits when install is done
  28.     CONST OPTIONS       = 800          ''Gets AUTOEXEC.BAT options
  29.     CONST ASKSETUP      = 1100         ''Gets installation type (Local etc)
  30.     CONST TOOBIG        = 6300         ''Not enough space on target disk error
  31.     CONST BADPATH       = 6400         ''Bad destination path error
  32.     CONST BADWINDOWS    = 6500         ''Wrong Windows release
  33.     CONST EXITFAILURE   = 6600         ''Exits on error
  34.  
  35.  
  36. rem String id's
  37. rem -----------
  38. rem Note: If MSSETUP were really smart, we could use the
  39. rem #defines in DIALOGS.HR. Instead, we must manually
  40. rem keep them in step
  41. rem ----------------------------------------------------
  42.     CONST STR_PLAYER    = 1024         ''Movie Player
  43.     CONST STR_VIEWER    = 1025         ''Picture Viewer
  44.     CONST STR_GROUP     = 1026         ''Program Manager group
  45.     CONST STR_TITLE     = 1027         ''Installer Title
  46.     CONST STR_MSG1      = 1028         ''Version error message part 1
  47.     CONST STR_MSG2      = 1029         ''Version error message part 2
  48.     CONST STR_MSG3      = 1030         ''Remove obsolete files?
  49.     CONST STR_WARNING   = 1031         ''Warning
  50.     CONST STR_HELP      = 1032         ''Help
  51.  
  52.  
  53. rem Miscellaneous Constants
  54. rem -----------------------
  55.     CONST NOLOGO = 1                   ''Dummy NULL bitmap (must be 1)
  56.     CONST LOGO = 2                     ''Background bitmap
  57.     CONST MOVIE = 2                    ''Movie placeholder bitmap
  58.     CONST NOSPACE = 1                  ''No space to complete install
  59.     CONST INSTALLOK = 2                ''Install completed OK
  60.     CONST INSTALLFAILED =3             ''Install failed for some reason
  61.  
  62.  
  63. rem Global Variables
  64. rem ----------------
  65.     GLOBAL SOURCE$                     ''Source directory
  66.     GLOBAL DEST$                       ''Default destination directory
  67.     GLOBAL SETUPTYPE$                  ''Setup type (Local, Client, Server)
  68.     GLOBAL LOCALINST$                  ''Local install
  69.     GLOBAL CLIENTINST$                 ''Client install
  70.     GLOBAL SERVERINST$                 ''Server install
  71.     GLOBAL MODAUTOEXECOPT$             ''Modify AUTOEXEC.BAT option
  72.     GLOBAL MODAUTOEXEC$                ''Modify AUTOEXEC.BAT
  73.     GLOBAL COPYAUTOEXEC$               ''Copy AUTOEXEC.BAT and modify it
  74.     GLOBAL CUIDLL$                     ''User interface DLL
  75.     GLOBAL SETUPPATH$                  ''Setup destination path
  76.     GLOBAL HELPPROC$                   ''Help dialog procedure
  77.     GLOBAL EXTRACOSTS$                 ''List of extra costs to add per drive
  78.     GLOBAL APPNEEDS$                   ''Disk space costs per drive
  79.     GLOBAL SECTIONKEY$                 ''INF file section key
  80.     GLOBAL SUCCESS%                    ''Installation completion code
  81.  
  82.  
  83. rem Initialize global vriables
  84. rem --------------------------
  85.     LOCALINST$      = "1"
  86.     CLIENTINST$     = "2"
  87.     SERVERINST$     = "3"
  88.     MODAUTOEXEC$    = "1"
  89.     COPYAUTOEXEC$   = "2"
  90.     SETUPPATH$      = "C:\QTW"
  91.     SETUPTYPE$      = LOCALINST$
  92.     SOURCE$         = GetSymbolValue("STF_SRCDIR")
  93.     DEST$           = SETUPPATH$
  94.     MODAUTOEXECOPT$ = MODAUTOEXEC$
  95.     SUCCESS%        = INSTALLFAILED
  96.     EXTRACOSTS$     = "ExtraCosts"
  97.     APPNEEDS$       = "AppNeeds"
  98.     SECTIONKEY$     = "SectionKey"
  99.  
  100.     FOR i% = 1 TO 26 STEP 1
  101.         AddListItem EXTRACOSTS$, "16384"
  102.     NEXT i%
  103.  
  104.  
  105. rem Get name of localized user interface dialogs
  106. rem --------------------------------------------
  107. rem    CUIDLL$ = "SETUP"+GetIniKeyString("WIN.INI", "intl", "sLanguage")+".DLL"
  108. rem    IF DoesFileExist(CUIDLL$, femExists) = 0 THEN
  109.        CUIDLL$ = "SETUPENU.DLL"
  110. rem    END IF
  111.  
  112.  
  113. rem Subroutines and Functions
  114. rem -------------------------
  115.     DECLARE FUNCTION Install AS INTEGER
  116.     DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  117.     DECLARE FUNCTION GetQTWVersion LIB "setupenu.dll" (szDLL$) AS INTEGER
  118.     DECLARE FUNCTION GetResourceString LIB "setupenu.dll" (szResource$, idString%) AS INTEGER
  119.     DECLARE FUNCTION StartCustomSetup LIB "setupenu.dll" (hinst%, hwnd%) AS INTEGER
  120.     DECLARE FUNCTION StopCustomSetup LIB "setupenu.dll" (hinst%, hwnd%) AS INTEGER
  121.     DECLARE FUNCTION UpdateAutoExecBat LIB "setupenu.dll" (szIn$, szOut$, szDest$) AS INTEGER
  122.     DECLARE FUNCTION WritePrivateProfileString LIB "krnl386.exe" (szSect$, szEntry$, szString$, szINI$) AS INTEGER
  123.  
  124.  
  125. rem Initialize custom setup logic
  126. rem -----------------------------
  127.     SetBitmap CUIDLL$, NOLOGO
  128.     i% = GetResourceString (CUIDLL$, STR_TITLE)
  129.     SetTitle GetSymbolValue ("ResourceString")
  130.     i% = StartCustomSetup (HinstFrame(), HwndFrame ())
  131.     i% = SetBeepingMode(1)
  132.  
  133.  
  134. rem Make sure that we are running on Windows 3.1 or better
  135. rem ------------------------------------------------------
  136.     IF GetWindowsMajorVersion() < 3 THEN
  137.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  138.        UIPop 1
  139.        GOTO CLEANUP
  140.     END IF
  141.  
  142.     IF (GetWindowsMajorVersion() = 3) AND (GetWindowsMinorVersion() < 10) THEN
  143.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  144.        UIPop 1
  145.        GOTO CLEANUP
  146.     END IF
  147.  
  148.  
  149. rem Make sure that we are running on a 286 or better
  150. rem ------------------------------------------------
  151.     IF GetWinFlags() AND 2 THEN
  152.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  153.        UIPop 1
  154.        GOTO CLEANUP
  155.     END IF
  156.  
  157.  
  158. rem Find and read the .INF file. We'll use DISKETTE.INF when installing
  159. rem from drive A: or B:, CD.INF otherwise.
  160. rem -------------------------------------------------------------------
  161.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  162.  
  163.     IF szInf$ = "" THEN
  164.        szTemp$ = GetSymbolValue("STF_SRCDIR")
  165.        SPLITPATH szTemp$, drv$, dir$, filename$, ext$
  166. rem       IF (drv$ = "A:") OR (drv$ = "B:") THEN
  167. rem          szInf$ = szTemp$ + "DISKETTE.INF"
  168. rem       ELSE
  169.           szInf$ = szTemp$ + "CD.INF"
  170.     END IF
  171.  
  172.     ReadInfFile szInf$
  173.  
  174.  
  175. rem Get the setup type: Local, Client or Server
  176. rem -------------------------------------------
  177. ITYPE:
  178.     SetSymbolValue "RadioDefault", SETUPTYPE$
  179.  
  180. ITYPEL1:
  181.     sz$ = UIStartDlg(CUIDLL$, ASKSETUP, "FRadioDlgProc", 0, "")
  182.  
  183.     SETUPTYPE$ = GetSymbolValue("ButtonChecked")
  184.  
  185.     IF sz$ = "CONTINUE" THEN
  186.        UIPop(1)
  187.  
  188.     ELSEIF sz$ = "REACTIVATE" THEN
  189.        GOTO ITYPEL1
  190.  
  191.     ELSE
  192.        GOSUB ASKQUIT
  193.        GOTO ITYPE
  194.  
  195.     END IF
  196.  
  197.  
  198. rem Get the AUTOEXEC.BAT modification option
  199. rem ----------------------------------------
  200. OPTIONC:
  201.     IF SETUPTYPE$ = SERVERINST$ THEN
  202.        GOTO GETPATH
  203.     END IF
  204.  
  205.     SetSymbolValue "RadioDefault", MODAUTOEXECOPT$
  206.  
  207. OPTL1:
  208.     sz$ = UIStartDlg(CUIDLL$, OPTIONS, "FRadioDlgProc", 0, "")
  209.  
  210.     MODAUTOEXECOPT$ = GetSymbolValue("ButtonChecked")
  211.  
  212.     IF sz$ = "CONTINUE" THEN
  213.        UIPop(1)
  214.  
  215.     ELSEIF sz$ = "REACTIVATE" THEN
  216.        GOTO OPTL1
  217.  
  218.     ELSEIF sz$ = "BACK" THEN
  219.        UIPop 1
  220.        GOTO ITYPE
  221.  
  222.     ELSE
  223.        GOSUB ASKQUIT
  224.        GOTO OPTIONC
  225.  
  226.     END IF
  227.  
  228.  
  229. rem Get the destination path; if it's bad, we display an error
  230. rem ----------------------------------------------------------------
  231. GETPATH:
  232.     IF SETUPTYPE$ = CLIENTINST$ THEN
  233.        DEST$ = SOURCE$
  234.        GOTO INSTALL
  235.     END IF
  236.  
  237.     SetSymbolValue "EditTextIn", DEST$
  238.     SetSymbolValue "EditFocus", "END"
  239.  
  240. GETPATHL1:
  241.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", 0, "")
  242.  
  243.     DEST$ = GetSymbolValue("EditTextOut")
  244.  
  245.     IF sz$ = "CONTINUE" THEN
  246.        IF IsDirWritable(DEST$) = 0 THEN
  247.           GOSUB BADPATH
  248.           GOTO GETPATHL1
  249.        END IF
  250.  
  251.        IF DoesFileExist(MakePath(DEST$, "bin\qtim.dll"), femExists) = 1 THEN
  252.           szError$ = MakePath(DEST$, "BIN")
  253.           i% = GetResourceString (CUIDLL$, STR_MSG1)
  254.           szError$ = szError$ + GetSymbolValue ("ResourceString")
  255.           i% = GetQTWVersion(MakePath(DEST$, "bin\qtim.dll"))
  256.           szVersion$ = GetSymbolValue ("VersionString")
  257.           szError$ = szError$ + szVersion$
  258.           i% = GetResourceString (CUIDLL$, STR_MSG2)
  259.           szError$ = szError$ + GetSymbolValue ("ResourceString")
  260.           i% = GetResourceString (CUIDLL$, STR_WARNING)
  261.           szCaption$ = GetSymbolValue ("ResourceString")
  262.           i% = DoMsgBox(szError$, szCaption$, 20)
  263.           UIPop 1
  264.           IF i% = 7 THEN
  265.              GOTO GETPATHL1
  266.           END IF
  267.           IF szVersion$ = "1.0.0" THEN
  268.              i% = GetResourceString (CUIDLL$, STR_MSG3)
  269.              szError$ = GetSymbolValue ("ResourceString")
  270.              i% = GetResourceString (CUIDLL$, STR_WARNING)
  271.              szCaption$ = GetSymbolValue ("ResourceString")
  272.              i% = DoMsgBox(szError$, szCaption$, 20)
  273.              IF i% = 6 THEN
  274.                 RemoveFile MakePath(DEST$, "bin\qcmc.dll"), cmoForce
  275.                 RemoveFile MakePath(DEST$, "bin\qtjpeg.dll"), cmoForce
  276.                 RemoveFile MakePath(DEST$, "bin\qtraw.dll"), cmoForce
  277.                 RemoveFile MakePath(DEST$, "bin\qtsmc.dll"), cmoForce
  278.                 RemoveFile MakePath(DEST$, "bin\qtrpza.dll"), cmoForce
  279.                 RemoveFile MakePath(DEST$, "bin\qtrle.dll"), cmoForce
  280.                 RemoveFile MakePath(DEST$, "bin\qtcvid.dll"), cmoForce
  281.                 RemoveFile MakePath(DEST$, "bin\qtrt21.dll"), cmoForce
  282.              END IF
  283.           END IF
  284.        END IF
  285.  
  286.        UIPop 1
  287.  
  288.     ELSEIF sz$ = "REACTIVATE" THEN
  289.        GOTO GETPATHL1
  290.  
  291.     ELSEIF sz$ = "BACK" THEN
  292.        UIPop 1
  293.        GOTO OPTIONC
  294.  
  295.     ELSE
  296.        GOSUB ASKQUIT
  297.        GOTO GETPATH
  298.  
  299.     END IF
  300.  
  301.  
  302. rem Perform actual installation
  303. rem ---------------------------
  304. INSTALL:
  305.     SUCCESS% = Install
  306.  
  307.     IF SUCCESS% = NOSPACE THEN
  308.        GOSUB TOOBIG
  309.        GOTO GETPATH
  310.     END IF
  311.  
  312.  
  313. rem When done, issue dialog
  314. rem -----------------------
  315. QUIT:
  316.     IF SUCCESS% = INSTALLOK THEN
  317.        sz$ = UIStartDlg(CUIDLL$, EXITSUCCESS, "FInfo0DlgProc", 0, "")
  318.     ELSE
  319.        sz$ = UIStartDlg(CUIDLL$, EXITFAILURE, "FInfo0DlgProc", 0, "")
  320.     END IF
  321.     UIPop 1
  322.  
  323.  
  324. rem Clean up all processing
  325. rem -----------------------
  326. CLEANUP:
  327.     i% = StopCustomSetup (HinstFrame(), HwndFrame ())
  328.  
  329.     END
  330.  
  331.  
  332. rem ASKQUIT: The user requested quit; does (s)he really want to?
  333. rem ------------------------------------------------------------
  334. ASKQUIT:
  335.     sz$ = UIStartDlg(CUIDLL$, EXITQUIT, "FInfoDlgProc", 0, "")
  336.     UIPop 1
  337.     IF sz$ = "CONTINUE" THEN
  338.        RETURN
  339.     END IF
  340.     GOTO CLEANUP
  341.  
  342.  
  343. rem BADPATH: The user entered an invalid destination directory
  344. rem ----------------------------------------------------------
  345. BADPATH:
  346.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  347.     IF sz$ = "REACTIVATE" THEN
  348.        GOTO BADPATH
  349.     END IF
  350.     UIPop 1
  351.  
  352.     RETURN
  353.  
  354.  
  355. rem TOOBIG: The source files won't fit on the requested destination disk
  356. rem --------------------------------------------------------------------
  357. TOOBIG:
  358.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  359.     IF sz$ = "REACTIVATE" THEN
  360.        GOTO TOOBIG
  361.     END IF
  362.     UIPop 1
  363.  
  364.     RETURN
  365.  
  366.  
  367. rem Install: Perform actual installation
  368. rem ------------------------------------
  369. FUNCTION Install STATIC AS INTEGER
  370.  
  371.     rem For Local or Server installs ...
  372.     rem --------------------------------
  373.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = SERVERINST$) THEN
  374.  
  375.        rem Create the destination directory
  376.        rem --------------------------------
  377.            CreateDir DEST$, cmoNone
  378.  
  379.        rem Build the copy list
  380.        rem -------------------
  381.            AddSectionFilesToCopyList "Files", SOURCE$, DEST$
  382.            IF SETUPTYPE$ = SERVERINST$ THEN
  383.               AddSectionFilesToCopyList "Setup", SOURCE$, DEST$
  384.            END IF
  385.  
  386.        rem Check that we have enough free space to perform the install
  387.        rem -----------------------------------------------------------
  388.            ListSym$ = APPNEEDS$
  389.            StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  390.  
  391.            drive$ = MID$(DEST$, 1, 1)
  392.            ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  393.            cost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  394.            free& = GetFreeSpaceForDrive(drive$)
  395.  
  396.            IF cost& >= free& THEN
  397.               Install = NOSPACE
  398.               EXIT FUNCTION
  399.            END IF
  400.  
  401.        rem Copy files necessary for installation from server
  402.        rem -------------------------------------------------
  403.        rem    IF SETUPTYPE$ = SERVERINST$ THEN
  404.        rem       CopyFile MakePath(SOURCE$, "CD.INF"), MakePath(DEST$, "CD.INF"), cmoOverwrite, 0
  405.        rem       CopyFile MakePath(SOURCE$, "DISKETTE.INF"), MakePath(DEST$, "DISKETTE.INF"), cmoOverwrite, 0
  406.        rem       CopyFile MakePath(SOURCE$, "DISK1.ID"), MakePath(DEST$, "DISK1.ID"), cmoOverwrite, 0
  407.        rem    END IF
  408.  
  409.        rem Copy all the files from the source to the destination
  410.        rem -----------------------------------------------------
  411.            CopyFilesInCopyList
  412.  
  413.         END IF
  414.  
  415.     rem Update AUTOEXEC.BAT
  416.     rem -------------------
  417.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  418.            i% = UpdateAutoExecBat("C:\AUTOEXEC.BAT", "C:\AUTOEXEC.QTW", DEST$)
  419.            IF MODAUTOEXECOPT$ = MODAUTOEXEC$ THEN
  420.               CopyFile "C:\AUTOEXEC.BAT", "C:\AUTOEXEC.BAK", cmoOverwrite, 0
  421.               CopyFile "C:\AUTOEXEC.QTW", "C:\AUTOEXEC.BAT", cmoOverwrite, 0
  422.               RemoveFile "C:\AUTOEXEC.QTW", cmoForce
  423.            END IF
  424.         END IF
  425.  
  426.     rem Update WIN.INI and SYSTEM.INI
  427.     rem -----------------------------
  428.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  429.            CreateIniKeyValue "WIN.INI", "Extensions", "mov", MakePath(DEST$,"bin\player.exe") + " ^.mov", cmoNone
  430.            CreateIniKeyValue "WIN.INI", "Extensions", "pic", MakePath(DEST$,"bin\viewer.exe") + " ^.pic", cmoNone
  431.            CreateIniKeyValue "WIN.INI", "MCI Extensions", "mov", "QTWVideo", cmoNone
  432.            CreateIniKeyValue "WIN.INI", "MCI Extensions", "pic", "QTWVideo", cmoNone
  433.            CreateIniKeyValue "WIN.INI", "MCI Extensions", "jpg", "QTWVideo", cmoNone
  434.            i% = WritePrivateProfileString("MCI", "QTWVideo", MakePath(DEST$, "bin\mciqtw.drv"), "SYSTEM.INI")
  435.         END IF
  436.  
  437.     rem Update Registration Database
  438.     rem ----------------------------
  439.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  440.            RUN MakePath(DEST$, "bin\player.exe") + " install"
  441.            RUN MakePath(DEST$, "bin\viewer.exe") + " install"
  442.         END IF
  443.  
  444.     rem Create QTW.INI
  445.     rem ----------------
  446.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  447.            ini$ = MakePath(GetWindowsDir(), "QTW.INI")
  448.            CreateIniKeyValue ini$, "QuickTime for Windows", "Implementation", "Full" , cmoNone
  449.         END IF
  450.  
  451.     rem Create a Program Manager group
  452.     rem ------------------------------
  453.     rem Not sure we've got the rights...
  454.     rem    IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  455.     rem       i% = GetResourceString (CUIDLL$, STR_GROUP)
  456.     rem       GROUP$ = GetSymbolValue ("ResourceString")
  457.     rem       CreateProgmanGroup GROUP$, "", cmoNone
  458.     rem       i% = GetResourceString (CUIDLL$, STR_PLAYER)
  459.     rem       CreateProgmanItem GROUP$, GetSymbolValue ("ResourceString"), MakePath(DEST$,"bin\player.exe"), "", cmoOverwrite
  460.     rem       i% = GetResourceString (CUIDLL$, STR_VIEWER)
  461.     rem       CreateProgmanItem GROUP$, GetSymbolValue ("ResourceString"), MakePath(DEST$,"bin\viewer.exe"), "", cmoOverwrite
  462.     rem       i% = GetResourceString (CUIDLL$, STR_HELP)
  463.     rem       CreateProgmanItem GROUP$, GetSymbolValue ("ResourceString"), "WinHelp " + MakePath(DEST$,"help\qtw.hlp"), ",,,," + DEST$, cmoOverwrite
  464.     rem       CreateProgmanItem GROUP$, "Read Me", "write " + MakePath(DEST$,"readme.wri"), ",,,," + DEST$, cmoOverwrite
  465.     rem    END IF
  466.  
  467.     rem Indicate install completed OK
  468.     rem -----------------------------
  469.         Install = INSTALLOK
  470.  
  471. END FUNCTION
  472.  
  473.  
  474. rem MakePath: Builds path from directory and file
  475. rem ---------------------------------------------
  476. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  477.  
  478.     IF szDir$ = "" THEN
  479.        MakePath = szFile$
  480.  
  481.     ELSEIF szFile$ = "" THEN
  482.        MakePath = szDir$
  483.  
  484.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  485.        MakePath = szDir$ + szFile$
  486.  
  487.     ELSE
  488.        MakePath = szDir$ + "\" + szFile$
  489.  
  490.     END IF
  491.  
  492. END FUNCTION
  493.  
  494.