home *** CD-ROM | disk | FTP | other *** search
/ MIDI Music Collection / MUSIC.iso / keysound / wfsound.ms_ / wfsound.bin
Encoding:
Text File  |  1994-06-15  |  19.0 KB  |  800 lines

  1. '**************************************************************************
  2. '*                     Wired for Sound Install Script
  3. '*     version 1.1   by Aaron Wallace  (c) 1993 Aristosoft, Inc
  4. '**************************************************************************
  5.  
  6. '' Define DEBUG for script debugging
  7.  
  8. '$DEFINE DEBUG
  9.  
  10. '$INCLUDE 'setupapi.inc'
  11. '$INCLUDE 'msdetect.inc'
  12.  
  13. ''Dialog ID's
  14. CONST WELCOME      = 100
  15. CONST ASKQUIT      = 200
  16. CONST DESTPATH     = 300
  17. CONST EXITFAILURE  = 400
  18. CONST EXITQUIT     = 600
  19. CONST EXITSUCCESS  = 700
  20. CONST WHICHINST    = 800
  21. CONST APPHELP      = 900
  22. CONST WHICHINSTHLP = 910
  23. CONST SETOWNER       = 1000
  24. CONST TESTSOUND    = 1100
  25. CONST INSTALLDRV   = 1200
  26. CONST SOUNDPLAYED  = 1300
  27. CONST WAITDLG       = 1400
  28. CONST EXITREBOOT   = 1500
  29. CONST BBD1       = 5000
  30. CONST BBD2       = 5010
  31. CONST BBD3       = 5020
  32. CONST BBD4       = 5030
  33. CONST BBD5       = 5040
  34. CONST BBD6       = 5050
  35. CONST SOUNDSDLG    = 5200
  36. CONST TAPPSDLG     = 5300
  37. CONST VOICESDLG    = 5400
  38. CONST CUSTINST     = 6200
  39. CONST TOOBIG       = 6300
  40. CONST BADPATH      = 6400
  41.  
  42. '' For message boxes
  43. CONST MB_YESNO=4
  44. CONST IDNO=7
  45. CONST IDYES=6
  46.  
  47. ''Bitmap ID
  48. CONST LOGO         = 1
  49.  
  50. ''File Types
  51. CONST BASEFILES     = 1
  52. CONST TAPPFILES     = 2
  53. CONST SOUNDFILES    = 3
  54. CONST VOICEFILES    = 4
  55. CONST MAX_TYPES     = 4
  56.  
  57. ''Install directories, etc.
  58. GLOBAL DEST$        ''Default destination directory.
  59. GLOBAL WINDRIVE$    ''Windows drive letter.
  60. GLOBAL CUIDLL$        ''CUI DLL
  61. GLOBAL WINDIR$        ''Windows directory
  62. GLOBAL SYSDIR$        ''System directory
  63. GLOBAL WININI$        ''"win.ini"
  64. GLOBAL SYSINI$        ''GetWindowsDir() + "system.ini"
  65.  
  66. '' User info
  67. GLOBAL OWNER$        '' Product registered owner
  68. GLOBAL WORKPLACE$   '' Company or such
  69.  
  70. ''Install item lists
  71. GLOBAL BASE$        ''List of base files
  72. GLOBAL TAPPS$       ''List of all talking apps
  73. GLOBAL SOUNDS$      ''List of all sounds.
  74. GLOBAL VOICES$      ''List of available voices
  75.  
  76. GLOBAL BASEINST$    ''List of base files to install
  77. GLOBAL TAPPSINST$   ''List of Talking Apps to install
  78. GLOBAL SOUNDSINST$  ''List of sounds to install
  79. GLOBAL VOICESINST$  ''List of voices to install
  80.  
  81. ''Custom Install list symbol names
  82. GLOBAL BASENEEDS$   ''Option list costs per drive
  83. GLOBAL TAPPNEEDS$
  84. GLOBAL SOUNDNEEDS$
  85. GLOBAL VOICENEEDS$
  86. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  87.  
  88. ''Custom Install dialog list symbol names
  89. GLOBAL CHECKSTATES$ ''List of check box values
  90. GLOBAL STATUSTEXT$  ''List of values to initialize status items
  91. GLOBAL DRIVETEXT$   ''Drive space info, etc.
  92.  
  93. '' Install DSOUND
  94. GLOBAL INSTDSOUND%
  95.  
  96. '' Customize product
  97. GLOBAL CUSTOMIZE%
  98.  
  99. '' Test sound hardware
  100. GLOBAL DOTEST%
  101.  
  102. GLOBAL WFSFOUND%
  103. GLOBAL CUSTINSTALL%
  104.  
  105. '' Which type of install to perform, by default
  106. GLOBAL DEFINSTOPT$
  107.  
  108. ''Progman titles
  109. GLOBAL WFSAPP$        ''Name of WFS app
  110.  
  111. ''Win.ini [Aristosoft] install code
  112. GLOBAL INSTDIR$
  113.  
  114. ''Space requirements
  115. GLOBAL FITS%        '' > 0 if everything fits
  116.  
  117. DECLARE SUB RecalcOptFiles (ftype%)
  118. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  119. DECLARE FUNCTION GetWindowsVersionCorrectly& ()
  120. DECLARE FUNCTION MakeVer& (x as integer, y as integer)
  121. DECLARE FUNCTION StringInList (s$, y$) AS INTEGER
  122. DECLARE FUNCTION sndPlaySound LIB "MMSYSTEM.DLL" (f$, fl%) AS INTEGER
  123. DECLARE SUB RemoveSectionFiles (dest$, sect$)
  124. DECLARE SUB RemDirectory (d$)
  125. DECLARE FUNCTION HasSoundDriver() AS INTEGER
  126. DECLARE SUB SendProgmanCommand LIB "CUI.DLL" (s$)
  127. DECLARE SUB KillFiles LIB "CUI.DLL" (s$)
  128. DECLARE FUNCTION GetModuleHandle LIB "KERNEL" (f$) AS INTEGER
  129.  
  130. DECLARE SUB Ctl3dRegister LIB "WFSUI.DLL" (f%)
  131. DECLARE SUB Ctl3dAutoSubclass LIB "WFSUI.DLL" (f%)
  132. DECLARE SUB Ctl3dUnregister LIB "WFSUI.DLL" (f%)
  133.  
  134.  
  135. '' These are defined in wfs.inc (product-specific)
  136. DECLARE SUB SetProductTitles
  137. DECLARE FUNCTION InfFile() AS STRING
  138. DECLARE FUNCTION MakeInstDir(D$) AS STRING
  139. DECLARE SUB AddInfSectionNames (BASE$, TAPPS$, SOUNDS$, VOICES$, BASEINST$, TAPPSINST$, SOUNDSINST$, VOICESINST$)
  140. DECLARE SUB RecalcPath
  141. DECLARE SUB AddOptFilesToCopyList (ftype%)
  142. DECLARE SUB SetDriveStatus
  143. DECLARE SUB AddOptFiles
  144. DECLARE SUB ConfigureApps
  145. DECLARE SUB AddBillboards
  146. DECLARE SUB DoUninstall
  147.  
  148.  
  149. '' This is where it all begins!
  150.  
  151. INIT:
  152.  
  153.     CUIDLL$ = "cui.dll"
  154.     DEFINSTOPT$ = "1"
  155.     INSTDSOUND% = 0
  156.     CUSTOMIZE% = -1
  157.     DOTEST% = -1
  158.  
  159.     SetProductTitles
  160.  
  161.     HELPPROC$ = "FHelpDlgProc"        ''Help dialog procedure
  162.  
  163.     SetBitmap CUIDLL$, LOGO
  164.  
  165.  
  166. '' We don't do Windows 3.0...
  167.  
  168.     If GetWindowsVersionCorrectly() < MakeVer(3, 10) Then
  169.     i% = DoMsgBox("This product requires Windows version 3.10 or greater", WFSAPP$, MB_OK)
  170.     GOTO DONEFINIFIN
  171.     End If
  172.  
  173. '' We don't want these DLLs to be loaded quite yet...
  174. LookAround:
  175.     IF GetModuleHandle("SNDAPI") OR GetModuleHandle("WFSABOUT") THEN
  176.     i% = DoMsgBox("Please quit all other Aristosoft products before continuing with Setup.", WFSAPP$, MB_RETRYCANCEL)
  177.     IF i% = IDRETRY THEN
  178.         GOTO LookAround
  179.     ELSEIF i% = IDCANCEL THEN
  180.         GOTO DONEFINIFIN
  181.     END IF
  182.     END IF
  183.  
  184.     HCUI% = GetModuleHandle("CUI")
  185.     Ctl3dRegister(HCUI%)
  186.     Ctl3dAutoSubclass(HCUI%)
  187. ''Find location of INF file and create a default dest. dir
  188.  
  189.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  190.     IF szInf$ = "" THEN
  191.     szInf$ = GetSymbolValue("STF_CWDDIR") + InfFile()
  192.     END IF
  193.  
  194.     '' Load the INF file
  195.     ReadInfFile szInf$
  196.  
  197.     '' Construct default strings
  198.     WINDIR$ = GetWindowsDir()
  199.     SYSDIR$ = GetWindowsSysDir()
  200.     WININI$ = "win.ini"
  201.     SYSINI$ = MakePath(WINDIR$, "system.ini")
  202.  
  203.     '' Construct the default install path
  204.     WINDRIVE$ = MID$(WINDIR$, 1, 1)
  205.     DEST$ = MakeInstDir(WINDRIVE$)
  206.  
  207.     '' Setup install symbols
  208.     BASE$ = "Base Files"
  209.     TAPPS$ = "Talking Apps"
  210.     SOUNDS$ = "Sounds"
  211.     VOICES$ = "Voices"
  212.     BASEINST$ = "Base Files Inst"
  213.     TAPPSINST$ = "Talking Apps Inst"
  214.     SOUNDSINST$ = "Sounds Inst"
  215.     VOICESINST$ = "Voices Inst"
  216.  
  217.     SetSymbolValue BASE$, ""
  218.     SetSymbolValue TAPPS$, ""
  219.     SetSymbolValue SOUNDS$, ""
  220.     SetSymbolValue VOICES$, ""
  221.  
  222.     ''Set up symbols for the initial install dialog
  223.     RADIODEFAULT$ = "Radio Default"
  224.  
  225.     ''Set up symbols for the custom install dialog
  226.     CHECKSTATES$ = "CheckItemsState"
  227.     STATUSTEXT$  = "StatusItemsText"
  228.     DRIVETEXT$   = "DriveStatusText"
  229.     FOR i% = 1 TO 4 STEP 1
  230.     AddListItem CHECKSTATES$, "ON"
  231.     NEXT i%
  232.     FOR i% = 1 TO 4 STEP 1
  233.     AddListItem STATUSTEXT$, ""
  234.     NEXT i%
  235.     FOR i% = 1 TO 7 STEP 1
  236.     AddListItem DRIVETEXT$, ""
  237.     NEXT i%
  238.     ReplaceListItem DRIVETEXT$, 7, DEST$
  239.  
  240.     ''Disk cost list symbols
  241.     BASENEEDS$   = "BaseNeeds"
  242.     TAPPNEEDS$   = "TAppNeeds"
  243.     SOUNDNEEDS$  = "SoundNeeds"
  244.     VOICENEEDS$  = "VoiceNeeds"
  245.     EXTRACOSTS$  = "ExtraCosts"
  246.     FOR i% = 1 TO 26 STEP 1
  247.     AddListItem EXTRACOSTS$, "0"
  248.     NEXT i%
  249.  
  250.     ''Configure lists of installable files
  251.     AddInfSectionNames BASE$, TAPPS$, SOUNDS$, VOICES$, BASEINST$, TAPPSINST$, SOUNDSINST$, VOICESINST$
  252.  
  253. '$IFDEF DEBUG
  254.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  255. '$ENDIF ''DEBUG
  256.  
  257.  
  258. '' Display Welcome dialog
  259. WELCOME:
  260.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  261.     
  262.     IF sz$ = "EXIT" THEN
  263.     GOSUB ASKQUIT
  264.     GOTO WELCOME
  265.     ELSEIF sz$ = "CONTINUE" THEN
  266.     UIPop 1
  267.     GOTO WHICHINST
  268.     END IF
  269.     GOTO WELCOME
  270.  
  271.  
  272. '' See if users want an easy install, custom install, or no install...
  273. WHICHINST:
  274.     SetSymbolValue "RadioDefault", DEFINSTOPT$
  275.     sz$ = UIStartDlg(CUIDLL$, WHICHINST, "FRadioDlgProc", WHICHINSTHLP, HELPPROC$)
  276.     
  277.     ''sz$ is the button the user pressed; RADIODEFAULT$ is the option selected
  278.  
  279.     IF sz$ = "EXIT" THEN
  280.     GOSUB ASKQUIT
  281.     GOTO WHICHINST
  282.     ELSEIF sz$ = "CONTINUE" THEN
  283.     sz$ = GetSymbolValue("ButtonChecked")
  284.     IF sz$ = "1" THEN
  285.         UIPop 1
  286.         CUSTINSTALL% = 0
  287.         GOTO CUSTOMIZE
  288.     ELSEIF sz$ = "2" THEN
  289.         UIPop 1
  290.         CUSTINSTALL% = -1
  291.         GOTO CUSTOMIZE
  292.     ELSEIF sz$ = "3" THEN
  293.         DoUninstall
  294.         GOTO WHICHINST
  295.     END IF
  296.     END IF
  297.     GOTO WHICHINST
  298.  
  299.  
  300. '' Customize the copy of the product
  301. CUSTOMIZE:
  302.     IF NOT CUSTOMIZE% THEN
  303.     GOTO SOUNDTEST
  304.     END IF
  305.  
  306.     sz$ = UIStartDlg(CUIDLL$, SETOWNER, "FNameOrgDlgProc", WHICHINSTHLP, HELPPROC$)
  307.  
  308.     IF sz$ = "EXIT" THEN
  309.     GOSUB ASKQUIT
  310.     GOTO CUSTOMIZE
  311.     ELSEIF sz$ = "CONTINUE" THEN
  312.     OWNER$ = GetSymbolValue("NameOut")
  313.     WORKPLACE$ = GetSymbolValue("OrgOut")
  314.     UIPop 1
  315.     GOTO SOUNDTEST
  316.     ELSEIF sz$ = "BACK" THEN
  317.     UIPop 1
  318.     GOTO WHICHINST
  319.     END IF
  320.     GOTO CUSTOMIZE
  321.  
  322.  
  323. '' Test the sound system
  324. SOUNDTEST:
  325.     IF NOT DOTEST% THEN
  326.     GOTO DOINST
  327.     END IF
  328.  
  329.     sz$ = UIStartDlg(CUIDLL$, TESTSOUND, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  330.  
  331.     IF sz$ = "EXIT" THEN
  332.     GOSUB ASKQUIT
  333.     GOTO SOUNDTEST
  334.     ELSEIF sz$ = "CONTINUE" THEN
  335.     UIPop 1
  336.     IF HasSoundDriver() THEN
  337.         GOTO DOINST
  338.     ELSE
  339.         GOTO INSTDSOUND
  340.     END IF
  341.     ELSEIF sz$ = "BACK" THEN
  342.     UIPop 1
  343.     GOTO CUSTOMIZE
  344.     ELSEIF sz$ = "TEST" THEN
  345.     w$ = "TEST.WAV"
  346.     res% = sndPlaySound(w$, 2)
  347.     UIPop 1
  348.     GOTO DIDPLAY
  349.     END IF
  350.     GOTO SOUNDTEST
  351.  
  352.  
  353. '' Did the sound play?
  354. DIDPLAY:
  355.     sz$ = UIStartDlg(CUIDLL$, SOUNDPLAYED, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  356.  
  357.     IF sz$ = "EXIT" THEN
  358.     GOSUB ASKQUIT
  359.     GOTO DIDPLAY
  360.     ELSEIF sz$ = "YES" THEN
  361.     UIPop 1
  362.     GOTO DOINST
  363.     ELSEIF sz$ = "NO" THEN
  364.     UIPop 1
  365.     GOTO INSTDSOUND
  366.     ELSEIF sz$ = "BACK" THEN
  367.     UIPop 1
  368.     GOTO SOUNDTEST
  369.     END IF
  370.     GOTO DIDPLAY
  371.  
  372.  
  373. '' Install DSOUND
  374. INSTDSOUND:
  375.     sz$ = UIStartDlg(CUIDLL$, INSTALLDRV, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  376.  
  377.     IF sz$ = "EXIT" THEN
  378.     GOSUB ASKQUIT
  379.     GOTO INSTDSOUND
  380.     ELSEIF sz$ = "INSTALL" THEN
  381.     UIPop 1
  382.     INSTDSOUND% = -1
  383.     GOTO DOINST
  384.     ELSEIF sz$ = "CONTINUE" THEN
  385.     UIPop 1
  386.     GOTO DOINST
  387.     ELSEIF sz$ = "BACK" THEN
  388.     UIPop 1
  389.     GOTO DIDPLAY
  390.     END IF
  391.     GOTO INSTDSOUND
  392.  
  393.  
  394. '' Do the appropriate type of install
  395. DOINST:
  396.     IF CUSTINSTALL% THEN
  397.     GOTO CUSTINST
  398.     END IF
  399.     '' else fall-thru
  400.  
  401. ''Perform a default installation (of all files and options)
  402. DEFINST:
  403.     RecalcPath
  404.     SetDriveStatus
  405.  
  406. GETDEFINSTPATH:
  407.     GOSUB GETPATH
  408.  
  409.     IF sz$ = "CONTINUE" THEN
  410.     ''Install only if it will fit.
  411.     IF FITS% > 0 THEN
  412.         GOSUB TOOBIG
  413.         GOTO GETDEFINSTPATH
  414.     END IF
  415.     UIPop 1
  416.     GOTO INSTALL
  417.     ELSEIF sz$ = "BACK" THEN
  418.     GOTO WHICHINST
  419.     END IF
  420.     GOTO GETDEFINSTPATH
  421.  
  422.  
  423. ''Perform a custom installation (let user choose files, etc)
  424. CUSTINST:
  425.     RecalcPath
  426.     SetDriveStatus
  427.  
  428. CUSTINSTDLG:
  429.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  430.  
  431.     IF sz$ = "CONTINUE" THEN
  432.     ''Install only if it will fit.
  433.     IF FITS% > 0 THEN
  434.         GOSUB TOOBIG
  435.         GOTO CUSTINSTDLG
  436.     END IF
  437.     UIPop 1
  438.     GOTO INSTALL
  439.     ELSEIF sz$ = "PATH" THEN
  440.     GOSUB GETPATH
  441.     GOTO CUSTINSTDLG
  442.     ELSEIF sz$ = "CHK1" THEN
  443.     RecalcOptFiles BASEFILES
  444.     SetDriveStatus
  445.     GOTO CUSTINSTDLG
  446.     ELSEIF sz$ = "CHK2" THEN
  447.     RecalcOptFiles TAPPFILES
  448.     SetDriveStatus
  449.     GOTO CUSTINSTDLG
  450.     ELSEIF sz$ = "CHK3" THEN
  451.     RecalcOptFiles SOUNDFILES
  452.     SetDriveStatus
  453.     GOTO CUSTINSTDLG
  454.     ELSEIF sz$ = "CHK4" THEN
  455.     RecalcOptFiles VOICEFILES
  456.     SetDriveStatus
  457.     GOTO CUSTINSTDLG
  458.     ELSEIF sz$ = "BTN2" THEN
  459.     GOTO TAPPFILES
  460.     ELSEIF sz$ = "BTN3" THEN
  461.     GOTO SOUNDFILES
  462.     ELSEIF sz$ = "BTN4" THEN
  463.     GOTO VOICEFILES
  464.     ELSEIF sz$ = "EXIT" THEN
  465.     GOSUB ASKQUIT
  466.     GOTO CUSTINST
  467.     END IF
  468.     GOTO CUSTINSTDLG
  469.  
  470.  
  471. INSTALL:
  472.     SetRestartDir DEST$
  473.     ClearCopyList
  474.  
  475.     AddOptFiles
  476.  
  477.     AddBillboards
  478.  
  479.     CreateDir DEST$, cmoNone
  480.  
  481.     UIPopAll
  482.  
  483.     ''Do the copyn'
  484.     SetCopyGaugePosition 10, 135
  485.     CopyFilesInCopyList
  486.  
  487.     ''Back up SYSTEM.INI and WIN.INI
  488.     CopyFile MakePath(WINDIR$, WININI$), MakePath(WINDIR$, "WIN.BAK"), cmoOverwrite, 0
  489.     CopyFile SYSINI$, MakePath(WINDIR$, "SYSTEM.BAK"), cmoOverwrite, 0
  490.  
  491.     '' Configure the installed applications
  492.     ConfigureApps
  493.  
  494.     ''See if we need to restart Windows to finish installing system files which may be in use
  495.     IF RestartListEmpty() = 0 THEN
  496.     i% = DoMsgBox("Certain system files that Setup needs to install are currently in use." + "  Please close all other applications and press OK.  Setup will exit Windows, install these files, and restart Windows.", WFSAPP$ + " Setup", MB_OK)
  497.     i% = ExitExecRestart()
  498.     END IF
  499.  
  500. QUIT:
  501.     ON ERROR GOTO ERRQUIT
  502.  
  503.     IF ERR = 0 THEN
  504.     dlg% = EXITREBOOT
  505.     ELSEIF ERR = STFQUIT THEN
  506.     dlg% = EXITQUIT
  507.     ELSE
  508.  
  509. '$IFNDEF DEBUG
  510.     RESUME NEXT
  511. '$ELSE
  512.     dlg% = EXITFAILURE
  513. '$ENDIF
  514.  
  515.     END IF
  516. QUITL1:
  517.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  518.     IF sz$ = "REACTIVATE" THEN
  519.     GOTO QUITL1
  520.     END IF
  521.     UIPop 1
  522.  
  523. DONEFINIFIN:
  524.     Ctl3dUnregister(HCUI%)
  525.     END
  526.  
  527. ERRQUIT:
  528.     i% = DoMsgBox("Setup sources were corrupted, call Aristosoft at (510) 426-5355!", "Setup Error", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  529.     Ctl3dUnregister(HCUI%)
  530.     END
  531.  
  532.  
  533.  
  534. GETPATH:
  535.     SetSymbolValue "EditTextIn", DEST$
  536.     SetSymbolValue "EditFocus", "END"
  537. GETPATHL1:
  538.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  539.  
  540.     IF sz$ = "CONTINUE" THEN
  541.     olddest$ = DEST$
  542.     DEST$ = GetSymbolValue("EditTextOut")
  543.  
  544.     ''Validate new path.
  545.     IF IsDirWritable(DEST$) = 0 THEN
  546.         GOSUB BADPATH
  547.         GOTO GETPATHL1
  548.     END IF
  549.     UIPop 1
  550.  
  551.     ''Truncate display if too long.
  552.     IF LEN(DEST$) > 23 THEN
  553.         ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  554.     ELSE
  555.         ReplaceListItem DRIVETEXT$, 7, DEST$
  556.     END IF
  557.  
  558.     ''Recalc if path changed.
  559.     ''IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  560.         RecalcPath
  561.         SetDriveStatus
  562.     ''END IF
  563.  
  564.     olddest$ = ""
  565.     RETURN
  566.     ELSEIF sz$ = "EXIT" THEN
  567.     GOSUB ASKQUIT
  568.     GOTO GETPATHL1
  569.     ELSEIF sz$ = "BACK" THEN
  570.     UIPop 1
  571.     RETURN
  572.     END IF
  573.     GOTO GETPATHL1
  574.  
  575.  
  576. TAPPFILES:
  577.     SetSymbolValue "ListItemsIn", GetSymbolValue(TAPPS$)
  578.     SetSymbolValue "ListItemsOut", GetSymbolValue(TAPPSINST$)
  579. TAPPF:
  580.     sz$ = UIStartDlg(CUIDLL$, TAPPSDLG, "FMultiDlgProc", APPHELP, HELPPROC$)
  581.  
  582.     IF sz$ = "CONTINUE" THEN
  583.     UIPop 1
  584.     SetSymbolValue TAPPSINST$, GetSymbolValue("ListItemsOut")
  585.     RecalcOptFiles TAPPFILES
  586.     SetDriveStatus
  587.     GOTO CUSTINSTDLG
  588.     ELSEIF sz$ = "EXIT" THEN
  589.     GOSUB ASKQUIT
  590.     GOTO TAPPF
  591.     ELSE '' Back...
  592.     UIPop 1
  593.     GOTO CUSTINSTDLG
  594.     END IF
  595.     GOTO TAPPF
  596.  
  597.  
  598. SOUNDFILES:
  599.     SetSymbolValue "ListItemsIn", GetSymbolValue(SOUNDS$)
  600.     SetSymbolValue "ListItemsOut", GetSymbolValue(SOUNDSINST$)
  601. SOUNDF:
  602.     sz$ = UIStartDlg(CUIDLL$, SOUNDSDLG, "FMultiDlgProc", APPHELP, HELPPROC$)
  603.  
  604.     IF sz$ = "CONTINUE" THEN
  605.     UIPop 1
  606.     SetSymbolValue SOUNDSINST$, GetSymbolValue("ListItemsOut")
  607.     RecalcOptFiles SOUNDFILES
  608.     SetDriveStatus
  609.     GOTO CUSTINSTDLG
  610.     ELSEIF sz$ = "EXIT" THEN
  611.     GOSUB ASKQUIT
  612.     GOTO SOUNDF
  613.     ELSE '' Back...
  614.     UIPop 1
  615.     GOTO CUSTINSTDLG
  616.     END IF
  617.     GOTO SOUNDF
  618.  
  619.  
  620. VOICEFILES:
  621.     SetSymbolValue "ListItemsIn", GetSymbolValue(VOICES$)
  622.     SetSymbolValue "ListItemsOut", GetSymbolValue(VOICESINST$)
  623. VOICEF:
  624.     sz$ = UIStartDlg(CUIDLL$, VOICESDLG, "FMultiDlgProc", APPHELP, HELPPROC$)
  625.  
  626.     IF sz$ = "CONTINUE" THEN
  627.     UIPop 1
  628.     SetSymbolValue VOICESINST$, GetSymbolValue("ListItemsOut")
  629.     RecalcOptFiles VOICEFILES
  630.     SetDriveStatus
  631.     GOTO CUSTINSTDLG
  632.     ELSEIF sz$ = "EXIT" THEN
  633.     GOSUB ASKQUIT
  634.     GOTO VOICEF
  635.     ELSE '' Back...
  636.     UIPop 1
  637.     GOTO CUSTINSTDLG
  638.     END IF
  639.     GOTO VOICEF
  640.  
  641.  
  642. TOOBIG:
  643.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  644.     UIPop 1
  645.     RETURN
  646.  
  647.  
  648.  
  649. BADPATH:
  650.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  651.     UIPop 1
  652.     RETURN
  653.  
  654.  
  655. ASKQUIT:
  656.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  657.  
  658.     IF sz$ = "EXIT" THEN
  659.     UIPopAll
  660.     ERROR STFQUIT
  661.     ELSEIF sz$ = "REACTIVATE" THEN
  662.     GOTO ASKQUIT
  663.     ELSE
  664.     UIPop 1
  665.     END IF
  666.     RETURN
  667.  
  668.  
  669. ''Recalculate space based on install options...
  670. SUB RecalcOptFiles (ftype%) STATIC
  671.  
  672.     CursorSave% = ShowWaitCursor()
  673.  
  674.     sz$ = UIStartDlg(CUIDLL$, WAITDLG, "FModelessDlgProc", APPHELP, HELPPROC$)
  675.  
  676.     ClearCopyList
  677.  
  678.     AddOptFilesToCopyList ftype%
  679.  
  680.     fExtra% = 0
  681.     IF ftype% = BASEFILES THEN
  682.     ListSym$ = BASENEEDS$
  683.     IF GetListItem(CHECKSTATES$, BASEFILES) = "ON" THEN
  684.         ''Add extra cost to Windows drive for ini/progman, etc.
  685.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  686.         ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  687.         fExtra% = 1
  688.     END IF
  689.     ELSEIF ftype% = TAPPFILES THEN
  690.     ListSym$ = TAPPNEEDS$
  691.     ELSEIF ftype% = SOUNDFILES THEN
  692.     ListSym$ = SOUNDNEEDS$
  693.     ELSEIF ftype% = VOICEFILES THEN
  694.     ListSym$ = VOICENEEDS$
  695.     END IF
  696.  
  697.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  698.  
  699.     cost& = 0
  700.     FOR i% = 1 TO 26 STEP 1
  701.     cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  702.     NEXT i%
  703.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  704.  
  705.     IF fExtra% THEN
  706.     ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  707.     END IF
  708.  
  709.     UIPop 1
  710.  
  711.     RestoreCursor CursorSave%
  712.  
  713.     ListSym$ = ""
  714. END SUB
  715.  
  716.  
  717. ''Make path from dir and szFile; add \  as needed
  718. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  719.     IF szDir$ = "" THEN
  720.     MakePath = szFile$
  721.     ELSEIF szFile$ = "" THEN
  722.     MakePath = szDir$
  723.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  724.     MakePath = szDir$ + szFile$
  725.     ELSE
  726.     MakePath = szDir$ + "\" + szFile$
  727.     END IF
  728. END FUNCTION
  729.  
  730.  
  731. '' Return true if the given string is in the symbol's list
  732. FUNCTION StringInList (s$, y$) STATIC AS INTEGER
  733.     l% = GetListLength(y$)
  734.     FOR i% = 1 TO l
  735.     IF s$ = GetListItem(y$, i%) THEN
  736.         StringInList = -1
  737.         GOTO DONE
  738.     END IF
  739.     NEXT i%
  740.     StringInList = 0
  741. DONE:
  742. END FUNCTION
  743.  
  744.  
  745. ''Get Windows version in a useful way
  746. FUNCTION GetWindowsVersionCorrectly& () STATIC
  747.     GetWindowsVersionCorrectly = GetWindowsMajorVersion() * 256 + GetWindowsMinorVersion()
  748. END FUNCTION
  749.  
  750.  
  751. '' Turn x, y into a major.minor version long
  752. FUNCTION MakeVer& (x as integer, y as integer) STATIC
  753.     MakeVer = x * 256 + y
  754. END FUNCTION
  755.  
  756.  
  757. '' Remove all files in the given .INF section
  758. SUB RemoveSectionFiles (dest$, sect$) STATIC
  759.     foo$ = "foo"
  760.     MakeListFromSectionFilename foo$, sect$
  761.     l% = GetListLength(foo$)
  762.     FOR i% = 1 TO l% STEP 1
  763.     RemoveFile MakePath(dest$, GetListItem(foo$, i%)), cmoForce
  764.     NEXT i%
  765.     foo$ = ""
  766. END SUB
  767.  
  768.  
  769. '' Remove directory and all files in it, if it exists
  770. SUB RemDirectory(d$) STATIC
  771.     IF Exists(MakePath(d$, "NUL")) THEN
  772.     Kill MakePath(d$, "*.*")
  773.     RmDir d$
  774.     END IF
  775. END SUB
  776.  
  777.  
  778. '' Return True (-1) if the user has a sound driver in the [drivers]
  779. ''  section of win.ini.
  780. FUNCTION HasSoundDriver() STATIC AS INTEGER
  781.     r% = 0
  782.     IF GetIniKeyString(SYSINI$, "drivers", "wave") <> "" THEN
  783.     r% = -1
  784.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave1") <> "" THEN
  785.     r% = -1
  786.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave2") <> "" THEN
  787.     r% = -1
  788.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave3") <> "" THEN
  789.     r% = -1
  790.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave4") <> "" THEN
  791.     r% = -1
  792.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave5") <> "" THEN
  793.     r% = -1
  794.     END IF
  795.     HasSoundDriver = r%
  796. END FUNCTION
  797.  
  798. '' Include product-specific function definitions
  799. '$INCLUDE 'specific.inc'
  800.