home *** CD-ROM | disk | FTP | other *** search
/ DMI Interactive Gallery / GALLERY.BIN / setup / setup.mst < prev    next >
Text File  |  1993-05-11  |  17KB  |  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.     CUIDLL$ = "SETUP"+GetIniKeyString("WIN.INI", "intl", "sLanguage")+".DLL"
  108.     IF DoesFileExist(CUIDLL$, femExists) = 0 THEN
  109.        CUIDLL$ = "SETUPENU.DLL"
  110.     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.        IF (drv$ = "A:") OR (drv$ = "B:") THEN
  167.           szInf$ = szTemp$ + "DISKETTE.INF"
  168.        ELSE
  169.           szInf$ = szTemp$ + "CD.INF"
  170.        END IF
  171.     END IF
  172.  
  173.     ReadInfFile szInf$
  174.  
  175.  
  176. rem Get the setup type: Local, Client or Server
  177. rem -------------------------------------------
  178. ITYPE:
  179.     SetSymbolValue "RadioDefault", SETUPTYPE$
  180.  
  181. ITYPEL1:
  182.     sz$ = UIStartDlg(CUIDLL$, ASKSETUP, "FRadioDlgProc", 0, "")
  183.  
  184.     SETUPTYPE$ = GetSymbolValue("ButtonChecked")
  185.  
  186.     IF sz$ = "CONTINUE" THEN
  187.        UIPop(1)
  188.  
  189.     ELSEIF sz$ = "REACTIVATE" THEN
  190.        GOTO ITYPEL1
  191.  
  192.     ELSE
  193.        GOSUB ASKQUIT
  194.        GOTO ITYPE
  195.  
  196.     END IF
  197.  
  198.  
  199. rem Get the AUTOEXEC.BAT modification option
  200. rem ----------------------------------------
  201. OPTION:
  202.     IF SETUPTYPE$ = SERVERINST$ THEN
  203.        GOTO GETPATH
  204.     END IF
  205.  
  206.     SetSymbolValue "RadioDefault", MODAUTOEXECOPT$
  207.  
  208. OPTL1:
  209.     sz$ = UIStartDlg(CUIDLL$, OPTIONS, "FRadioDlgProc", 0, "")
  210.  
  211.     MODAUTOEXECOPT$ = GetSymbolValue("ButtonChecked")
  212.  
  213.     IF sz$ = "CONTINUE" THEN
  214.        UIPop(1)
  215.  
  216.     ELSEIF sz$ = "REACTIVATE" THEN
  217.        GOTO OPTL1
  218.  
  219.     ELSEIF sz$ = "BACK" THEN
  220.        UIPop 1
  221.        GOTO ITYPE
  222.  
  223.     ELSE
  224.        GOSUB ASKQUIT
  225.        GOTO OPTION
  226.  
  227.     END IF
  228.  
  229.  
  230. rem Get the destination path; if it's bad, we display an error
  231. rem ----------------------------------------------------------------
  232. GETPATH:
  233.     IF SETUPTYPE$ = CLIENTINST$ THEN
  234.        DEST$ = SOURCE$
  235.        GOTO INSTALL
  236.     END IF
  237.  
  238.     SetSymbolValue "EditTextIn", DEST$
  239.     SetSymbolValue "EditFocus", "END"
  240.  
  241. GETPATHL1:
  242.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", 0, "")
  243.  
  244.     DEST$ = GetSymbolValue("EditTextOut")
  245.  
  246.     IF sz$ = "CONTINUE" THEN
  247.        IF IsDirWritable(DEST$) = 0 THEN
  248.           GOSUB BADPATH
  249.           GOTO GETPATHL1
  250.        END IF
  251.  
  252.        IF DoesFileExist(MakePath(DEST$, "bin\qtim.dll"), femExists) = 1 THEN
  253.           szError$ = MakePath(DEST$, "BIN")
  254.           i% = GetResourceString (CUIDLL$, STR_MSG1)
  255.           szError$ = szError$ + GetSymbolValue ("ResourceString")
  256.           i% = GetQTWVersion(MakePath(DEST$, "bin\qtim.dll"))
  257.           szVersion$ = GetSymbolValue ("VersionString")
  258.           szError$ = szError$ + szVersion$
  259.           i% = GetResourceString (CUIDLL$, STR_MSG2)
  260.           szError$ = szError$ + GetSymbolValue ("ResourceString")
  261.           i% = GetResourceString (CUIDLL$, STR_WARNING)
  262.           szCaption$ = GetSymbolValue ("ResourceString")
  263.           i% = DoMsgBox(szError$, szCaption$, 20)
  264.           UIPop 1
  265.           IF i% = 7 THEN
  266.              GOTO GETPATHL1
  267.           END IF
  268.           IF szVersion$ = "1.0.0" THEN
  269.              i% = GetResourceString (CUIDLL$, STR_MSG3)
  270.              szError$ = GetSymbolValue ("ResourceString")
  271.              i% = GetResourceString (CUIDLL$, STR_WARNING)
  272.              szCaption$ = GetSymbolValue ("ResourceString")
  273.              i% = DoMsgBox(szError$, szCaption$, 20)
  274.              IF i% = 6 THEN
  275.                 RemoveFile MakePath(DEST$, "bin\qcmc.dll"), cmoForce
  276.                 RemoveFile MakePath(DEST$, "bin\qtjpeg.dll"), cmoForce
  277.                 RemoveFile MakePath(DEST$, "bin\qtraw.dll"), cmoForce
  278.                 RemoveFile MakePath(DEST$, "bin\qtsmc.dll"), cmoForce
  279.                 RemoveFile MakePath(DEST$, "bin\qtrpza.dll"), cmoForce
  280.                 RemoveFile MakePath(DEST$, "bin\qtrle.dll"), cmoForce
  281.                 RemoveFile MakePath(DEST$, "bin\qtcvid.dll"), cmoForce
  282.                 RemoveFile MakePath(DEST$, "bin\qtrt21.dll"), cmoForce
  283.              END IF
  284.           END IF
  285.        END IF
  286.  
  287.        UIPop 1
  288.  
  289.     ELSEIF sz$ = "REACTIVATE" THEN
  290.        GOTO GETPATHL1
  291.  
  292.     ELSEIF sz$ = "BACK" THEN
  293.        UIPop 1
  294.        GOTO OPTION
  295.  
  296.     ELSE
  297.        GOSUB ASKQUIT
  298.        GOTO GETPATH
  299.  
  300.     END IF
  301.  
  302.  
  303. rem Perform actual installation
  304. rem ---------------------------
  305. INSTALL:
  306.     SUCCESS% = Install
  307.  
  308.     IF SUCCESS% = NOSPACE THEN
  309.        GOSUB TOOBIG
  310.        GOTO GETPATH
  311.     END IF
  312.  
  313.  
  314. rem When done, issue dialog
  315. rem -----------------------
  316. QUIT:
  317.     IF SUCCESS% = INSTALLOK THEN
  318.        sz$ = UIStartDlg(CUIDLL$, EXITSUCCESS, "FInfo0DlgProc", 0, "")
  319.     ELSE
  320.        sz$ = UIStartDlg(CUIDLL$, EXITFAILURE, "FInfo0DlgProc", 0, "")
  321.     END IF
  322.     UIPop 1
  323.  
  324.  
  325. rem Clean up all processing
  326. rem -----------------------
  327. CLEANUP:
  328.     i% = StopCustomSetup (HinstFrame(), HwndFrame ())
  329.  
  330.     END
  331.  
  332.  
  333. rem ASKQUIT: The user requested quit; does (s)he really want to?
  334. rem ------------------------------------------------------------
  335. ASKQUIT:
  336.     sz$ = UIStartDlg(CUIDLL$, EXITQUIT, "FInfoDlgProc", 0, "")
  337.     UIPop 1
  338.     IF sz$ = "CONTINUE" THEN
  339.        RETURN
  340.     END IF
  341.     GOTO CLEANUP
  342.  
  343.  
  344. rem BADPATH: The user entered an invalid destination directory
  345. rem ----------------------------------------------------------
  346. BADPATH:
  347.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  348.     IF sz$ = "REACTIVATE" THEN
  349.        GOTO BADPATH
  350.     END IF
  351.     UIPop 1
  352.  
  353.     RETURN
  354.  
  355.  
  356. rem TOOBIG: The source files won't fit on the requested destination disk
  357. rem --------------------------------------------------------------------
  358. TOOBIG:
  359.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  360.     IF sz$ = "REACTIVATE" THEN
  361.        GOTO TOOBIG
  362.     END IF
  363.     UIPop 1
  364.  
  365.     RETURN
  366.  
  367.  
  368. rem Install: Perform actual installation
  369. rem ------------------------------------
  370. FUNCTION Install STATIC AS INTEGER
  371.  
  372.     rem For Local or Server installs ...
  373.     rem --------------------------------
  374.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = SERVERINST$) THEN
  375.  
  376.        rem Create the destination directory
  377.        rem --------------------------------
  378.            CreateDir DEST$, cmoNone
  379.  
  380.        rem Build the copy list
  381.        rem -------------------
  382.            AddSectionFilesToCopyList "Files", SOURCE$, DEST$
  383.            IF SETUPTYPE$ = SERVERINST$ THEN
  384.               AddSectionFilesToCopyList "Setup", SOURCE$, DEST$
  385.            END IF
  386.  
  387.        rem Check that we have enough free space to perform the install
  388.        rem -----------------------------------------------------------
  389.            ListSym$ = APPNEEDS$
  390.            StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  391.  
  392.            drive$ = MID$(DEST$, 1, 1)
  393.            ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  394.            cost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  395.            free& = GetFreeSpaceForDrive(drive$)
  396.  
  397.            IF cost& >= free& THEN
  398.               Install = NOSPACE
  399.               EXIT FUNCTION
  400.            END IF
  401.  
  402.        rem Copy files necessary for installation from server
  403.        rem -------------------------------------------------
  404.            IF SETUPTYPE$ = SERVERINST$ THEN
  405.               CopyFile MakePath(SOURCE$, "CD.INF"), MakePath(DEST$, "CD.INF"), cmoOverwrite, 0
  406.               CopyFile MakePath(SOURCE$, "DISKETTE.INF"), MakePath(DEST$, "DISKETTE.INF"), cmoOverwrite, 0
  407.               CopyFile MakePath(SOURCE$, "DISK1.ID"), MakePath(DEST$, "DISK1.ID"), cmoOverwrite, 0
  408.            END IF
  409.  
  410.        rem Copy all the files from the source to the destination
  411.        rem -----------------------------------------------------
  412.            CopyFilesInCopyList
  413.  
  414.         END IF
  415.  
  416.     rem Update AUTOEXEC.BAT
  417.     rem -------------------
  418.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  419.            i% = UpdateAutoExecBat("C:\AUTOEXEC.BAT", "C:\AUTOEXEC.QTW", DEST$)
  420.            IF MODAUTOEXECOPT$ = MODAUTOEXEC$ THEN
  421.               CopyFile "C:\AUTOEXEC.BAT", "C:\AUTOEXEC.BAK", cmoOverwrite, 0
  422.               CopyFile "C:\AUTOEXEC.QTW", "C:\AUTOEXEC.BAT", cmoOverwrite, 0
  423.               RemoveFile "C:\AUTOEXEC.QTW", cmoForce
  424.            END IF
  425.         END IF
  426.  
  427.     rem Update WIN.INI and SYSTEM.INI
  428.     rem -----------------------------
  429.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  430.            CreateIniKeyValue "WIN.INI", "Extensions", "mov", MakePath(DEST$,"bin\player.exe") + " ^.mov", cmoNone
  431.            CreateIniKeyValue "WIN.INI", "Extensions", "pic", MakePath(DEST$,"bin\viewer.exe") + " ^.pic", cmoNone
  432.            CreateIniKeyValue "WIN.INI", "MCI Extensions", "mov", "QTWVideo", cmoNone
  433.            CreateIniKeyValue "WIN.INI", "MCI Extensions", "pic", "QTWVideo", cmoNone
  434.            CreateIniKeyValue "WIN.INI", "MCI Extensions", "jpg", "QTWVideo", cmoNone
  435.            i% = WritePrivateProfileString("MCI", "QTWVideo", MakePath(DEST$, "bin\mciqtw.drv"), "SYSTEM.INI")
  436.         END IF
  437.  
  438.     rem Update Registration Database
  439.     rem ----------------------------
  440.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  441.            RUN MakePath(DEST$, "bin\player.exe") + " install"
  442.            RUN MakePath(DEST$, "bin\viewer.exe") + " install"
  443.         END IF
  444.  
  445.     rem Create QTW.INI
  446.     rem ----------------
  447.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  448.            ini$ = MakePath(GetWindowsDir(), "QTW.INI")
  449.            CreateIniKeyValue ini$, "QuickTime for Windows", "Implementation", "Full" , cmoNone
  450.         END IF
  451.  
  452.     rem Create a Program Manager group
  453.     rem ------------------------------
  454.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  455.            i% = GetResourceString (CUIDLL$, STR_GROUP)
  456.            GROUP$ = GetSymbolValue ("ResourceString")
  457.            CreateProgmanGroup GROUP$, "", cmoNone
  458.            i% = GetResourceString (CUIDLL$, STR_PLAYER)
  459.            CreateProgmanItem GROUP$, GetSymbolValue ("ResourceString"), MakePath(DEST$,"bin\player.exe"), "", cmoOverwrite
  460.            i% = GetResourceString (CUIDLL$, STR_VIEWER)
  461.            CreateProgmanItem GROUP$, GetSymbolValue ("ResourceString"), MakePath(DEST$,"bin\viewer.exe"), "", cmoOverwrite
  462.            i% = GetResourceString (CUIDLL$, STR_HELP)
  463.            CreateProgmanItem GROUP$, GetSymbolValue ("ResourceString"), "WinHelp " + MakePath(DEST$,"help\qtw.hlp"), ",,,," + DEST$, cmoOverwrite
  464.            CreateProgmanItem GROUP$, "Read Me", "write " + MakePath(DEST$,"readme.wri"), ",,,," + DEST$, cmoOverwrite
  465.         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.