home *** CD-ROM | disk | FTP | other *** search
/ gdead.berkeley.edu / gdead.berkeley.edu.tar / gdead.berkeley.edu / pub / gdead / ibm / HOWDO201.ZIP / TITLE.MST < prev    next >
Text File  |  1996-04-02  |  18KB  |  488 lines

  1. '**************************************************************************
  2. '*
  3. '* TITLE.MST - Viewer Runtime Setup Script
  4. '*
  5. '* CUSTOMIZING TITLE.MST
  6. '*
  7. '* For a simple Setup routine, you just need to assign values to the
  8. '* series of variables following the heading "Setup Variables". This
  9. '* script also provides for the following more-advanced options, which
  10. '* are supported by subroutines located later in this script:
  11. '*
  12. '* Option                                         See Subroutine
  13. '* ------------------------------------------     ---------------------
  14. '* Install more than one .MVB file                ModifyViewerIni
  15. '* Install Help title                             ModifyViewerIni
  16. '* Install custom DLLs                            ModifyViewerIni
  17. '* Install multiple Program Manager items         ModifyProgramManager
  18. '* Display a custom icon with the ProgMan item    ModifyProgramManager
  19. '* Install custom fonts                           RegisterCustomFonts
  20. '* Install Video for Windows runtime files        RegisterDrivers
  21. '*
  22. '* Each customization note starts with the heading CUSTOMIZATION.
  23. '*
  24. '**************************************************************************
  25.  
  26.         '' Global variables
  27.  
  28.         GLOBAL TitleShortName$
  29.         GLOBAL TitleLongName$
  30.         GLOBAL MVBFileName$
  31.         GLOBAL PromptForPath%
  32.         GLOBAL DefaultPath$
  33.         GLOBAL ProgManGroup$
  34.         GLOBAL ProgManItem$
  35.         GLOBAL szTitleDir$
  36.  
  37.         '' ****************************************************************
  38.         '' ** Setup Variables
  39.         '' ****************************************************************
  40.  
  41.         '' Set the following string to a short form of the title name
  42.         '' (for example, "Gallery")
  43.  
  44.         TitleShortName$ = "How Does The Song Go"
  45.  
  46.         '' Set the following string to a long form of the title name
  47.         '' (for example, "Viewer 2.0 Gallery")
  48.  
  49.         TitleLongName$ = "How Does The Song Go v2.01"
  50.  
  51.         '' Set the following variable to the name of the MVB file, without
  52.         '' the filename extension (for example, "GALLERY")
  53.  
  54.         MVBFileName$ = "Howdoes"
  55.  
  56.         '' The following variable determines whether Setup prompts the user
  57.         '' to specify a directory in which to install title files. (Files
  58.         '' to be installed on the hard disk must be listed in the TITLE.INF
  59.         '' file under the [Installed Title Files] section.) Specify one of
  60.         '' the following values:
  61.         ''
  62.         '' 0    Install title files in the Windows directory (default setting).
  63.         ''      This is an appropriate setting if you have a limited number
  64.         ''      of files to copy (for example, a single custom icon or DLL).
  65.         ''
  66.         '' 1    Display a dialog box to prompt the user for a directory in
  67.         ''      which to install files
  68.  
  69.         PromptForPath% = 1
  70.  
  71.         '' If you have specified 1 in PromptForPath%, set the following
  72.         '' variable to the default path that will be displayed in the dialog
  73.         '' box (for example, "C:\GALLERY").
  74.  
  75.         DefaultPath$ = "c:\rtsoft"
  76.  
  77.         '' Set the following variable to the name of the program manager
  78.         '' group you would like to create (for example, "Viewer 2.0 Gallery")
  79.  
  80.         ProgManGroup$ = "Rising Tide Software"
  81.  
  82.         '' Set the following variable to the caption of the program manager
  83.         '' item for your title (for example, "Gallery")
  84.  
  85.         ProgManItem$ = "How Does The Song Go"
  86.  
  87.         '***********************************************************************
  88.         '** Mainline
  89.         '***********************************************************************
  90.  
  91.         GLOBAL CUIDLL$
  92.  
  93.         '' Include files
  94.         '$INCLUDE 'setupapi.inc'
  95.  
  96.         '' Custom UI dll
  97.         CUIDLL$ = "mscuistf.dll"
  98.  
  99.         '' Dialog ID's
  100.         CONST DESTPATH      = 1000
  101.         CONST APPHELP       = 2000
  102.         CONST TOOBIG        = 3000
  103.         CONST BADPATH       = 4000
  104.         CONST SUCCESS       = 5000
  105.  
  106.         '' Bitmap ID
  107.         CONST LOGO = 1
  108.  
  109.         '' Functions and subroutines
  110.         DECLARE FUNCTION AddFont LIB "mscuistf.dll" (szFont$, szName$) AS INTEGER
  111.         DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  112.         DECLARE FUNCTION GetTitleDir (szDefault$) AS STRING
  113.         DECLARE FUNCTION CopyFiles(szTitleDir$) AS INTEGER
  114.         DECLARE SUB RegisterFont(fontfile$, fontname$)
  115.         DECLARE SUB ModifyViewerIni
  116.         DECLARE SUB RegisterCustomFonts
  117.         DECLARE SUB ModifyProgramManager
  118.         DECLARE SUB ShowSuccess
  119.         DECLARE SUB RegisterDrivers
  120.  
  121.         '' The following statement turns size checking off. Set it to scmOnFatal
  122.         '' to enable size checking, where Setup will compare the disk file size
  123.         '' with the INF file size and report an error if they are not the same.
  124.  
  125.         i% = SetSizeCheckMode(scmOff)
  126.  
  127.         '' Set the title and banner bitmap. You must rebuild MSCUISTF.DLL to
  128.         '' alter the banner bitmap.
  129.  
  130.         SetTitle "Disc O' Dead Setup"
  131.         SetBitmap CUIDLL$, LOGO
  132.  
  133.         '' Read in the INF file.
  134.  
  135.         ReadInfFile GetSymbolValue("STF_CWDDIR") + "TITLE.INF"
  136.  
  137.         '' Decide where to put title files
  138.         IF PromptForPath% = 1 THEN
  139.                 szTitleDir$ = GetTitleDir(DefaultPath$)
  140.                 IF szTitleDir$ = "" THEN
  141.                         GOTO QUIT
  142.                 ENDIF
  143.         ELSE
  144.                 szTitleDir$ = GetWindowsDir()
  145.         ENDIF
  146.  
  147.         '' Copy files
  148.         IF CopyFiles(szTitleDir$) = 0 THEN
  149.                 GOTO QUIT
  150.         ENDIF
  151.  
  152.         '' Create the MVIEWER2.EXE MVB association
  153.         CreateIniKeyValue "WIN.INI", "Extensions", "MVB", "mviewer2.exe", cmoNone
  154.  
  155.         '' Register in VIEWER.INI
  156.         ModifyViewerIni
  157.  
  158.         '' Register custom fonts
  159.         RegisterCustomFonts
  160.  
  161.         '' Register drivers
  162.         RegisterDrivers
  163.  
  164.         '' Modify Program Manager
  165.         ModifyProgramManager
  166.  
  167.         '' Success dialog
  168.         ShowSuccess
  169.  
  170.         '' Now start the title
  171.  
  172.         RUN "mviewer2.exe " + MVBFileName$ + ".MVB", NOWAIT
  173.  
  174. QUIT:
  175.  
  176.         END
  177.  
  178.  
  179. '*************************************************************************
  180. '** Purpose:
  181. '**     Prompts the user for a path for the title files
  182. '** Arguments:
  183. '**     szDefault$ - default path
  184. '** Returns:
  185. '**     New valid path name, or "" if the user quit.
  186. '*************************************************************************
  187.  
  188. FUNCTION GetTitleDir (szDefault$) STATIC AS STRING
  189.  
  190.         SetSymbolValue "String", TitleShortName$
  191.         SetSymbolValue "EditTextIn", szDefault$
  192.         SetSymbolValue "EditFocus", "ALL"
  193.  
  194.         GETPATH:
  195.  
  196.         sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, "FHelpDlgProc")
  197.  
  198.         IF sz$ = "CONTINUE" THEN
  199.                 szTitleDir$ = GetSymbolValue("EditTextOut")
  200.                 IF IsDirWritable(szTitleDir$) = 0 THEN
  201.  
  202.                         BADPATH:
  203.  
  204.                         sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfoDlgProc", 0, "")
  205.                         IF sz$ = "REACTIVATE" THEN
  206.                                 GOTO BADPATH
  207.                         END IF
  208.                         UIPop 1
  209.                         GOTO GETPATH
  210.                 END IF
  211.                 UIPop 1
  212.                 CreateDir szTitleDir$, cmoNone
  213.  
  214.         ELSEIF sz$ = "REACTIVATE" THEN
  215.                 GOTO GETPATH
  216.  
  217.         ELSE
  218.                 szTitleDir$ = ""
  219.  
  220.         END IF
  221.  
  222.         GetTitleDir = szTitleDir$
  223.  
  224. END FUNCTION
  225.  
  226.  
  227. '*************************************************************************
  228. '** Purpose:
  229. '**     Copies the files in the INF file
  230. '** Arguments:
  231. '**     szTitleDir$ - destination directory for the title files
  232. '** Returns
  233. '**     1 if files were copied, 0 otherwise
  234. '*************************************************************************
  235.  
  236. FUNCTION CopyFiles(szTitleDir$) STATIC AS INTEGER
  237.  
  238.         '' Add all system files to the copy list
  239.         AddSectionFilesToCopyList "System Files", GetSymbolValue("STF_SRCDIR"), GetWindowsSysDir()
  240.  
  241.         '' Add all of the title files to the copy list
  242.         AddSectionFilesToCopyList "Installed Title Files", GetSymbolValue("STF_SRCDIR"), szTitleDir$
  243.  
  244.         '' Check size
  245.         szExtras$ = "Extra"
  246.         szCosts$ = "Costs"
  247.         szNeededs$ = "Neededs"
  248.         FOR i% = 1 TO 26 STEP 1
  249.                 AddListItem szExtras$, "0"
  250.         NEXT i%
  251.  
  252.         '' We assume that VIEWER.INI will take another 4K
  253.         ReplaceListItem szExtras$, ASC(MID$(GetWindowsDir(), 1, 1)) - ASC("A") + 1, STR$(4096)
  254.  
  255.         '' Get amount of space required
  256.         StillNeed& = GetCopyListCost(szExtras$, szCosts$, szNeededs$)
  257.  
  258.         '' Put up a message if there is not enough space
  259.         FOR i% = 1 TO 26 STEP 1
  260.                 IF VAL(GetListItem(szNeededs$, i%)) > 0 THEN
  261.  
  262.                         SetSymbolValue "String1", LTRIM$(STR$(VAL(GetListItem(szCosts$, i%)) / 1024))
  263.                         SetSymbolValue "String2", CHR$(i% - 1 + ASC("A"))
  264.  
  265.                         TOOBIG:
  266.  
  267.                         sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfoDlgProc", 0, "")
  268.                         IF sz$ = "REACTIVATE" THEN
  269.                                 GOTO TOOBIG
  270.                         END IF
  271.                         UIPop 1
  272.                         CopyFiles = 0
  273.                         GOTO DONTCOPY
  274.                 END IF
  275.         NEXT i%
  276.  
  277.         '' Copy the files
  278.         CopyFilesInCopyList
  279.  
  280.         CopyFiles = 1
  281.  
  282. DONTCOPY:
  283.  
  284. END FUNCTION
  285.  
  286.  
  287. '*************************************************************************
  288. '** Purpose:
  289. '**     Puts up a success dialog
  290. '*************************************************************************
  291.  
  292. SUB ShowSuccess STATIC
  293.  
  294.         SUCCESS:
  295.  
  296.         SetSymbolValue "String1", TitleShortName$
  297.         sz$ = UIStartDlg(CUIDLL$, SUCCESS, "FInfoDlgProc", 0, "")
  298.         IF sz$ = "REACTIVATE" THEN
  299.                 GOTO SUCCESS
  300.         END IF
  301.         UIPop 1
  302.  
  303. END SUB
  304.  
  305.  
  306. '*************************************************************************
  307. '** Purpose:
  308. '**     Appends a file name to the end of a directory path,
  309. '**     inserting a backslash character as needed.
  310. '** Arguments:
  311. '**     szDir$  - full directory path (with optional ending "\")
  312. '**     szFile$ - filename to append to directory
  313. '** Returns:
  314. '**     Resulting fully qualified path name.
  315. '*************************************************************************
  316.  
  317. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  318.     IF szDir$ = "" THEN
  319.                 MakePath = szFile$
  320.     ELSEIF szFile$ = "" THEN
  321.                 MakePath = szDir$
  322.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  323.                 MakePath = szDir$ + szFile$
  324.     ELSE
  325.                 MakePath = szDir$ + "\" + szFile$
  326.     END IF
  327. END FUNCTION
  328.  
  329.  
  330. '*************************************************************************
  331. '** Purpose:
  332. '**     Registers a font.
  333. '** Arguments:
  334. '**     fontfile$ - font filename
  335. '**     fontname$ - font name.
  336. '*************************************************************************
  337.  
  338. SUB RegisterFont(fontfile$, fontname$) STATIC
  339.  
  340.         '' A simple error catching wrapper around AddFont, which is a 'C' routine in MSCUISTF.DLL
  341.  
  342.     IF AddFont(fontfile$, fontname$) = -1 THEN
  343.                 j% = DoMsgBox("Could not install " + fontfile$ + " font.", "Viewer Font Installation", 0)
  344.     ENDIF
  345.  
  346. END SUB
  347.  
  348.  
  349. '*************************************************************************
  350. '** Purpose:
  351. '**     Registers title in VIEWER.INI
  352. '*************************************************************************
  353.  
  354. SUB ModifyViewerIni STATIC
  355.  
  356.         '' Get the VIEWER.INI file
  357.  
  358.         szIni$ = MakePath(GetWindowsDir(), "VIEWER.INI")
  359.  
  360.         '' First register the title file, setting the Name and Path entries.
  361.         '' We assume that the MVB file is the same directory as SETUP.EXE.
  362.         ''
  363.         '' CUSTOMIZATION: If you're installing multiple MVB files, copy the
  364.         '' following two statements for each additional file, substituting
  365.         '' the appropriate long name and MVB filename for the TitleLongName$
  366.         '' and MVBFileName$ variables.
  367.  
  368.         CreateIniKeyValue szIni$, MVBFileName$, "Name", TitleLongName$, cmoOverwrite
  369.         CreateIniKeyValue szIni$, MVBFileName$, "Path", szTitleDir$, cmoOverwrite
  370.  
  371.         CreateIniKeyValue szIni$, "VWRHELP", "Name", "Using Viewer", cmoOverwrite
  372.         CreateIniKeyValue szIni$, "VWRHELP", "Path", szTitleDir$, cmoOverwrite
  373.  
  374.         '' Now we have to register the MVB file in the [FILES] section, so
  375.         '' Viewer can find files that are not on the path and display a
  376.         '' special message when a file is not found.
  377.  
  378.         CreateIniKeyValue szIni$, "FILES", MVBFileName$ + ".MVB", szTitleDir$ + "," + "Please insert the " + TitleLongName$ + " disk.", cmoOverwrite
  379.  
  380.         CreateIniKeyValue szIni$, "FILES", "VWRHELP.MVB", szTitleDir$ + "," + "Please insert the " + TitleLongName$ + " disk.", cmoOverwrite
  381.  
  382.         '' CUSTOMIZATION: If you're installing a Help title or any custom DLLs,
  383.         '' you should copy the preceding statement for each extra title or DLL.
  384.         ''
  385.         '' Example for installing an extra title:
  386.         ''
  387.         ''    CreateIniKeyValue szIni$, "FILES", "GALHELP.MVB", GetSymbolValue("STF_SRCDIR") + "," + "Please insert the Viewer 2.0 Gallery disk.", cmoOverwrite
  388.         ''
  389.         '' Example for installing a custom DLL:
  390.         ''
  391.         ''    CreateIniKeyValue szIni$, "FILES", "GALLERY.DLL", GetSymbolValue("STF_SRCDIR") + "," + "A required file is missing. Please reinstall the Viewer Gallery.", cmoOverwrite
  392.  
  393. END SUB
  394.  
  395.  
  396. '*************************************************************************
  397. '** Purpose:
  398. '**     Creates program manager entries for the title
  399. '*************************************************************************
  400.  
  401. SUB ModifyProgramManager STATIC
  402.  
  403.         '' Create the program manager group
  404.  
  405.         CreateProgmanGroup ProgmanGroup$, "", cmoNone
  406.         ShowProgmanGroup ProgmanGroup$, 1, cmoNone
  407.  
  408.         '' Create an entry for the title
  409.  
  410.         '' CreateProgmanItem ProgmanGroup$, ProgmanItem$, "mviewer2.exe " + MakePath(GetSymbolValue("STF_SRCDIR"), MVBFileName$ + ".MVB"), "", cmoOverwrite
  411.  
  412.         '' CUSTOMIZATION:
  413.         ''
  414.         '' To create additional Program Manager items, copy the preceding
  415.         '' statement for each additional item, substituting the appropriate
  416.         '' name for the MVBFileName$ variable.
  417.         ''
  418.         '' To display a custom icon with the Program Manager item, specify
  419.         '' the icon filename with the fourth parameter (this parameter is
  420.         '' currently an empty string, ""). The following example specifies
  421.     '' an icon with the same filename as the .MVB file:
  422.         ''
  423.         CreateProgmanItem ProgmanGroup$, ProgmanItem$, "mviewer2.exe " + MakePath(szTitleDir$, MVBFileName$ + ".MVB"), MakePath(szTitleDir$, MVBFileName$ + ".ICO"), cmoOverwrite
  424.  
  425.  
  426. END SUB
  427.  
  428.  
  429. '*************************************************************************
  430. '** Purpose:
  431. '**     Registers custom fonts with Windows.
  432. '*************************************************************************
  433.  
  434. SUB RegisterCustomFonts STATIC
  435.  
  436.         '' CUSTOMIZATION: If you install custom fonts, then add statements
  437.         '' in this routine to register the fonts with the current Windows
  438.         '' session and to add them to the WIN.INI [Fonts] section.
  439.         ''
  440.         '' Note that TrueType fonts can only be installed in Windows 3.1.
  441.         '' RegisterFont automatically creates the required .FOT file for
  442.         '' TrueType fonts.
  443.         ''
  444.         '' The following example registers a font residing in MISTRAL.TTF
  445.         '' and installs the font with the name Mistral (True Type):
  446.         ''
  447.         ''     RegisterFont "mistral.ttf", "Mistral (TrueType)"
  448.         ''
  449.  
  450. END SUB
  451.  
  452.  
  453. '*************************************************************************
  454. '** Purpose:
  455. '**     Registers Windows drivers
  456. '*************************************************************************
  457.  
  458. SUB RegisterDrivers STATIC
  459.  
  460. '' CUSTOMIZATION: Video for Windows is not a standard component of
  461. '' Windows 3.1. If your title uses video, proceed as follows.
  462. ''
  463. '' 1) Add the following files to the [System Files] section of the INF file:
  464. ''
  465. ''    dispdib.dll
  466. ''    msvideo.dll
  467. ''    indeo.drv
  468. ''    mciavi.drv
  469. ''    msvidc.drv
  470. ''
  471. '' 2) Add the above files to your release directory. US versions can be
  472. ''    found in the \SYSTEM subdirectory of your Viewer disc. French and
  473. ''    German versions were not available at ship time. Please contact
  474. ''    Microsoft or check the Multimedia Viewer section on the Microsoft
  475. ''    Compuserve Forum for further details.
  476. ''
  477. '' 3) Uncomment the following lines:
  478. ''
  479. '' CreateIniKeyValue "WIN.INI", "mci extensions", "AVI", "AVIVIDEO", cmoNone
  480. '' CreateIniKeyValue MakePath(GetWindowsDir(), "SYSTEM.INI"), "mci", "AVIVIDEO", "MCIAVI.DRV", cmoNone
  481. '' CreateIniKeyValue MakePath(GetWindowsDir(), "SYSTEM.INI"), "drivers", "vidc.msvc", "msvidc.drv", cmoNone
  482. '' CreateIniKeyValue MakePath(GetWindowsDir(), "SYSTEM.INI"), "drivers", "vidc.rt21", "indeo.drv", cmoNone
  483.  
  484. END SUB
  485.  
  486.  
  487.  
  488.