home *** CD-ROM | disk | FTP | other *** search
/ MIDI Music Collection / MUSIC.iso / encore.30 / disk1 / encore30.ms_ / encore30.ms
Encoding:
Text File  |  1993-10-28  |  26.6 KB  |  1,023 lines

  1. '**************************************************************************
  2. '*                              ENCORE30.MST      : Based on MSSetup Toolkit Sample 2
  3. '**************************************************************************
  4.  
  5. ''$DEFINE DEBUG  ''Define for script development/debugging
  6. ''$DEFINE DEMO        '' Define for demo file installation
  7.  
  8. '$INCLUDE 'setupapi.inc'
  9. '$INCLUDE 'msdetect.inc'
  10.  
  11. ''Dialog ID's
  12. CONST WELCOME           = 100
  13. CONST ASKQUIT           = 200
  14. CONST DESTPATH          = 300
  15. CONST EXITFAILURE       = 400
  16. CONST EXITQUIT          = 600
  17. CONST EXITSUCCESS       = 700
  18. CONST OPTIONS           = 800
  19. CONST APPHELP           = 900
  20. CONST TT_WARNING        = 2000
  21. CONST PPDRV_WARNING        = 2200
  22. CONST TYP1_WARNING        = 2100
  23. CONST TT_INSTALLMSG        = 2300
  24. CONST FONTPATH          = 4200
  25. CONST SAMPLELIST        = 5200
  26. CONST CUSTINST          = 6200
  27. CONST TOOBIG            = 6300
  28. CONST BADPATH           = 6400
  29. CONST ALREADYUSED        = 7100
  30. CONST CONFIRMINFO       = 7300
  31. CONST GETNAMEORG        = 7500
  32. CONST BADNAME            = 7700
  33. CONST MR_WELCOME        = 8000
  34. CONST MR_CUSTINST         = 8100
  35.  
  36. ''Bitmap ID
  37. CONST LOGO         = 1
  38.  
  39. ''File Types
  40. CONST PROG_FILES        = 1
  41. CONST DVC_FILES                 = 2
  42. CONST SMPL_FILES                = 3
  43. CONST TT_FILES                  = 4
  44. CONST TYP1_FILES                = 5
  45. CONST PPDRV_FILES                = 6
  46.  
  47. GLOBAL DEST$        ''Default destination directory.
  48. GLOBAL WINDRIVE$    ''Windows drive letter.
  49. GLOBAL WINSYS$          '' Windows System Directory
  50. GLOBAL SMPL_OPT$        '' List of Sample files to install
  51. GLOBAL TYP1_DEST$       '' Destination for Type 1 fonts
  52.  
  53. GLOBAL ALL_SMPL_OPT$    '' All Sample Files
  54.  
  55. ''CustInst list symbol names
  56. GLOBAL PROG_NEEDS$    ''Option list costs per drive
  57. GLOBAL DVC_NEEDS$
  58. GLOBAL SMPL_NEEDS$
  59. GLOBAL TT_NEEDS$                
  60. GLOBAL TYP1_NEEDS$
  61. GLOBAL PPDRV_NEEDS$
  62.  
  63. '' GetNameOrg  list symbol names
  64. GLOBAL NAMEORGIN$
  65. GLOBAL NAMEORGOUT$
  66. GLOBAL CONFIRM$
  67. GLOBAL OrigSerial$
  68. GLOBAL AlreadyInstalled%
  69. GLOBAL ItsAMiracle%
  70.  
  71. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  72. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  73.  
  74. ''Dialog list symbol names
  75. GLOBAL CHECKSTATES$
  76. GLOBAL GREYSTATE$
  77. GLOBAL STATUSTEXT$
  78. GLOBAL DRIVETEXT$
  79.  
  80.  
  81. DECLARE SUB AddOptFilesToCopyList (ftype%)
  82. DECLARE SUB RecalcOptFiles (ftype%)
  83. DECLARE SUB RecalcPath
  84. DECLARE SUB SetDriveStatus
  85. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  86. DECLARE FUNCTION ValidSerialNo( szSerial$ ) AS INTEGER
  87. DECLARE FUNCTION IsWriteProtected( ) AS INTEGER
  88.  
  89. '' Functions in DLL
  90. DECLARE FUNCTION GetCurrentInfo LIB "mscuistf.dll" ( DoDir% ) AS INTEGER
  91. INIT:
  92.  
  93.     CUIDLL$ = "mscuistf.dll"            ''custom user interface dll
  94.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  95.  
  96.     SetBitmap CUIDLL$, LOGO
  97.     SetTitle "Encore 3.0 Setup"
  98.  
  99.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  100.     DEST$ = WINDRIVE$ + ":\ENCORE30"
  101.     TYP1_DEST$ = WINDRIVE$ + ":\PSFONTS"
  102.  
  103.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  104.     IF szInf$ = "" THEN
  105.         szInf$ = GetSymbolValue("STF_CWDDIR") + "E3SETUP.INF"
  106.     END IF
  107.     ReadInfFile szInf$
  108.  
  109.     '' Check if we are installing the miracle drivers...
  110.     IF INSTR( UCASE$( szInf$ ), "MIRACLE.INF" ) THEN
  111.         ItsAMiracle% = 1
  112.     ELSE
  113.         ItsAMiracle% = 0
  114.     END IF
  115.  
  116.     ''CustInst list symbols
  117.     CHECKSTATES$ = "CheckItemsState"
  118.     STATUSTEXT$  = "StatusItemsText"
  119.     DRIVETEXT$   = "DriveStatusText"
  120.  
  121.     FOR i% = 1 TO 6 STEP 1
  122.         AddListItem CHECKSTATES$, "ON"
  123.         AddListItem STATUSTEXT$, ""
  124.     NEXT i%
  125.     '' Initially, don't install Type 1 fonts
  126.     ReplaceListItem CHECKSTATES$, 5, ""
  127.  
  128.     FOR i% = 1 TO 8 STEP 1
  129.         AddListItem DRIVETEXT$, ""
  130.     NEXT i%         
  131.  
  132.     ReplaceListItem DRIVETEXT$, 7, DEST$
  133.     ReplaceListItem DRIVETEXT$, 8, TYP1_DEST$
  134.  
  135.     ''Disk cost list symbols
  136.     PROG_NEEDS$   = "ProgNeeds"
  137.     DVC_NEEDS$      = "DvcNeeds"
  138.     SMPL_NEEDS$     = "SmplNeeds"
  139.     TT_NEEDS$       = "TTNeeds"     
  140.     TYP1_NEEDS$     = "Type1Needs"
  141.     PPDRV_NEEDS$    = "PpDrvNeeds"
  142.  
  143.     EXTRACOSTS$ = "ExtraCosts"
  144.     BIGLIST$    = "BigList"
  145.  
  146.     FOR i% = 1 TO 6 STEP 1
  147.         AddListItem BIGLIST$, ""
  148.     NEXT i%
  149.  
  150.     '' NOTE: This might vary depending on the number of files
  151.     FOR i% = 1 TO 26 STEP 1
  152.         AddListItem EXTRACOSTS$, "0"
  153.     NEXT i%
  154.  
  155.  
  156.     ALL_SMPL_OPT$ = "ListItemsIn"
  157.     SMPL_OPT$ = "ListItemsOut"
  158.     MakeListFromSectionKeys  SMPL_OPT$, "SampleFiles"    '' init to ALL Sample Files
  159.  
  160.     '' Symbols for NameOrg
  161.     NAMEORGIN$ = "NameOrgIn"
  162.     NAMEORGOUT$ = "NameOrgOut"
  163.     CONFIRM$ = "ConfirmTextIn"
  164.     FOR i% = 1 TO 3 STEP 1
  165.         AddListItem NAMEORGIN$, ""
  166.         AddListItem NAMEORGOUT$, ""
  167.         AddListItem CONFIRM$, ""
  168.     NEXT i%
  169.     AddListItem NAMEORGIN$, ""      '' Extra place for disk volume name
  170.     '' The Serial Number Stuff
  171.     OrigSerial$ = ""
  172.     AlreadyInstalled% = 0
  173.  
  174.     RecalcPath
  175.     SetDriveStatus
  176.  
  177. '$IFDEF DEBUG
  178.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  179. '$ENDIF ''DEBUG
  180.  
  181. WELCOME:
  182. '$IFDEF DEMO
  183.     x% = DoMsgBox( "Welcome to Encore 3.0 Demo Setup!", "Encore 3.0 Demo Setup", 0 )
  184.     GOTO CUSTINST
  185. '$ENDIF
  186.     IF ItsAMiracle% THEN
  187.         sz$ = UIStartDlg( CUIDLL$, MR_WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$ )
  188.     ELSE
  189.         sz$ = UIStartDlg( CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$ )
  190.     END IF
  191.     
  192.     IF sz$ = "EXIT" THEN 
  193.         GOSUB ASKQUIT
  194.         GOTO WELCOME
  195.     ELSE
  196.         UIPop 1
  197.     END IF
  198.  
  199. ''-------------------------------------------------------------------------
  200. ''    This section gets and/or verifies user info
  201. ''-------------------------------------------------------------------------
  202.  
  203. GETUSERNAME:
  204.     ReplaceListItem NAMEORGIN$, 4, DEST$ 
  205.     '' Don't ask for the directory date just yet.
  206.     ok% = GetCurrentInfo( 0 )
  207.  
  208. '$IFDEF DEBUG
  209.     x% = DoMsgBox( "GetCurrentInfo() returns: " + STR$(ok%), "DEBUG", 1 )
  210.     norg% =  GetListLength( NAMEORGIN$ )
  211.     x% = DoMsgBox( "NAMEORGIN$ Len: " + STR$(norg%), "DEBUG", 1 )
  212.  
  213.     FOR i% = 1 TO norg% STEP 1
  214.         sz$ = GetListItem( NAMEORGIN$, i% )
  215.         x% = DoMsgBox( "NAMEORGIN$ (" + STR$( i% ) + "): " + sz$, "DEBUG", 1 )
  216.     NEXT i%
  217. '$ENDIF ''DEBUG
  218.  
  219.     OrigName$ = GetListItem( NAMEORGIN$, 1 )
  220.  
  221.     IF ok% <> 1 OR MID$( OrigName$, 48, 11 ) = "Uninstalled" THEN
  222.         ReplaceListItem NAMEORGIN$, 1, ""
  223.         ReplaceListItem NAMEORGIN$, 2, ""
  224.         OrigSerial$ = ""
  225.         AlreadyInstalled% = 0
  226.     ELSE
  227.         OrigSerial$ = GetListItem(NAMEORGIN$, 3)
  228.         AlreadyInstalled% = -1
  229.     END IF
  230.  
  231.     '' Clear out the Serial Number
  232.     ReplaceListItem NAMEORGIN$, 3, ""
  233.  
  234.     OrigName$ = ""
  235.  
  236.     IF AlreadyInstalled THEN
  237.         ReplaceListItem CONFIRM$, 1, GetListItem( NAMEORGIN$, 1 )
  238.         ReplaceListItem CONFIRM$, 2, GetListItem( NAMEORGIN$, 2 )
  239.         sz$ = UIStartDlg( CUIDLL$, ALREADYUSED, "FConfirmDlgProc", APPHELP, HELPPROC$ )
  240.         IF sz$ = "CONTINUE" THEN 
  241.             UIPop 1
  242.         ELSEIF sz$ = "EXIT" THEN
  243.             UIPop 1
  244.             GOSUB ASKQUIT
  245.         END IF
  246.         ReplaceListItem CONFIRM$, 1, ""
  247.         ReplaceListItem CONFIRM$, 2, ""
  248.     END IF
  249.  
  250. GETUSERNAMEL1:
  251.     sz$ = UIStartDlg( CUIDLL$, GETNAMEORG, "FNameOrgDlgProc", APPHELP, HELPPROC$ )
  252.  
  253.     IF sz$ = "CONTINUE" THEN
  254.         FOR i% = 1 TO 2 STEP 1
  255.             ReplaceListItem NAMEORGIN$, i%, GetListItem( NAMEORGOUT$, i% ) 
  256.         NEXT i%
  257.     
  258.         '' User must enter SOMEthing        
  259.         IF GetListItem( NAMEORGOUT$, 1 ) = "" THEN
  260.             sz1$ = UIStartDlg( CUIDLL$, BADNAME, "FInfoDlgProc", 0, "" )
  261.             UIPop 1
  262.             GOTO GETUSERNAMEL1
  263.         END IF
  264.  
  265.         Serial$ = UCASE$( GetListItem( NAMEORGOUT$, 3 ) )
  266.         ReplaceListItem NAMEORGIN$, 3, Serial$
  267.  
  268.         IF ValidSerialNo( Serial$ ) = 0 THEN
  269.             GOSUB BADSERIAL
  270.             GOTO GETUSERNAMEL1
  271.         END IF
  272.  
  273.         UIPop 1
  274.  
  275.     ELSEIF sz$ = "BACK" THEN
  276.         UIPop 1
  277.         GOTO WELCOME
  278.     ELSEIF sz$ = "REACTIVATE" THEN
  279.     GOTO GETUSERNAMEL1
  280.     ELSE
  281.         GOSUB ASKQUIT
  282.         GOTO GETUSERNAMEL1
  283.     END IF
  284.  
  285. '' Check to  see that disk isn't write protected
  286.  
  287.     ON ERROR GOTO WRITEPROTERR
  288.  
  289.     IF IsWriteProtected () THEN
  290.         x% = DoMsgBox( "Please make sure that " + GetSymbolValue( "STF_SRCDIR" ) + " is NOT Write Protected.", "Encore Setup", 16 )
  291.         ON ERROR GOTO QUIT
  292.         GOTO GETUSERNAMEL1
  293.     ELSE
  294.         ON ERROR GOTO QUIT
  295.         GOTO CONFIRMINFO
  296.     END IF
  297.  
  298. WRITEPROTERR:
  299.     RESUME NEXT
  300.     
  301. '' Call confirmation dialog here
  302. CONFIRMINFO:
  303.     FOR i% = 1 TO 2 STEP 1
  304.         ReplaceListItem CONFIRM$, i%, GetListItem( NAMEORGOUT$, i% )
  305.     NEXT i%
  306.     ReplaceListItem CONFIRM$, 3, UCASE$( GetListItem( NAMEORGOUT$, i% ) )
  307.  
  308. CONFIRMINFOL1:
  309.     sz$ = UIStartDlg( CUIDLL$, CONFIRMINFO, "FConfirmDlgProc", APPHELP, HELPPROC$ )
  310.     UIPop 1
  311.     IF sz$ <> "CONTINUE" THEN 
  312.         GOTO GETUSERNAMEL1
  313.     END IF
  314.  
  315.     '' Stamp Resources in CUIDLL for future installations
  316.     szName$ = GetListItem( CONFIRM$, 1 )
  317.     szOrg$ = GetListItem( CONFIRM$, 2 )
  318.     szSerial$ = GetListItem( CONFIRM$, 3 )
  319.     szDat$ = CHR$( LEN(szName$) ) + szName$ + CHR$( LEN(szOrg$) ) + szOrg$ + CHR$( LEN(szSerial$) ) + szSerial$
  320.  
  321. '$IFDEF DEBUG
  322.     x% = DoMsgBox( "NameOrgStamp: " + szDat$, "DEBUG", 1 )
  323. '$ENDIF
  324.  
  325.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  326.     StampResource "Files", "CUIDLL", SrcDir$, 6, &H471, szDat$, LEN( szDat$ )
  327.     SrcDir$ = ""
  328.     szName$ = ""
  329.     szOrg$ = ""
  330.     szSerial$ = ""
  331.     szDat$ = ""
  332.  
  333. ''-------------------------------------------------------
  334. ''    User install options dialog
  335. CUSTINST:
  336.     IF ItsAMiracle% THEN
  337.         sz$ = UIStartDlg(CUIDLL$, MR_CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  338.     ELSE
  339.         sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  340.     END IF
  341.  
  342.     IF sz$ = "CONTINUE" THEN
  343.         ''Install only if it will fit.
  344.         FOR i% = 1 TO 6 STEP 1
  345.             IF GetListItem(BIGLIST$, i%) <> "" THEN
  346.                 GOSUB TOOBIG
  347.                 GOTO CUSTINST
  348.             END IF
  349.         NEXT i%
  350.         GOTO INSTALL
  351.     ELSEIF sz$ = "PATH" THEN
  352.         GOTO GETPATH
  353.     ELSEIF sz$ = "CHK1" THEN
  354.         RecalcOptFiles PROG_FILES
  355.         SetDriveStatus
  356.         GOTO CUSTINST
  357.     ELSEIF sz$ = "CHK2" THEN
  358.         RecalcOptFiles DVC_FILES
  359.         SetDriveStatus
  360.         GOTO CUSTINST
  361.     ELSEIF sz$ = "CHK3" THEN
  362.         RecalcOptFiles SMPL_FILES
  363.         SetDriveStatus
  364.         GOTO CUSTINST
  365.     ELSEIF sz$ = "CHK4" THEN
  366.         RecalcOptFiles TT_FILES
  367.         SetDriveStatus
  368.         GOTO CUSTINST
  369.     ELSEIF sz$ = "CHK5" THEN
  370.         RecalcOptFiles TYP1_FILES
  371.         SetDriveStatus
  372.         GOTO CUSTINST
  373.     ELSEIF sz$ = "CHK6" THEN
  374.         RecalcOptFiles PPDRV_FILES
  375.         SetDriveStatus
  376.         GOTO CUSTINST
  377.     ELSEIF sz$ = "BTN1" THEN
  378.         GOTO SAMPLEFILES
  379.     ELSEIF sz$ = "BTN2" THEN
  380.         GOTO TYPE1PATH
  381.     ELSEIF sz$ = "REACTIVATE" THEN
  382.         RecalcPath
  383.         SetDriveStatus
  384.         GOTO CUSTINST
  385.     ELSE
  386.         GOSUB ASKQUIT
  387.         GOTO CUSTINST
  388.     END IF
  389.  
  390.  
  391. '' ---------------------------------------------
  392. '' This is the actual installation 
  393. '' ---------------------------------------------
  394. INSTALL:
  395.  
  396.     '' --------------------------------------------------
  397.     '' Warn user about the TrueType fonts
  398.  
  399.     IF GetListItem( CHECKSTATES$, TT_FILES ) = "ON" THEN
  400.         sz$ = UIStartDlg(CUIDLL$, TT_INSTALLMSG, "FInfoDlgProc", APPHELP, HELPPROC$)
  401.         IF sz$ = "BACK" THEN
  402.             UIPop 1
  403.             GOTO CUSTINST
  404.         ELSEIF sz$ = "EXIT" THEN
  405.             UIPop 1
  406.             GOSUB ASKQUIT
  407.             GOTO CUSTINST
  408.         ELSE
  409.             UIPop 1
  410.         END IF
  411.     ELSE
  412.         sz$ = UIStartDlg(CUIDLL$, TT_WARNING, "FInfoDlgProc", APPHELP, HELPPROC$)
  413.         IF sz$ = "BACK" THEN
  414.             UIPop 1
  415.             GOTO CUSTINST
  416.         ELSEIF sz$ = "EXIT" THEN
  417.             UIPop 1
  418.             GOSUB ASKQUIT
  419.             GOTO CUSTINST
  420.         ELSE
  421.             UIPop 1
  422.         END IF
  423.     END IF
  424.  
  425.     '' -------------------------------------------------------------
  426.     '' Warn about PostScript fonts
  427.  
  428.     IF GetListItem( CHECKSTATES$, TYP1_FILES ) = "ON" THEN
  429.         sz$ = UIStartDlg(CUIDLL$, TYP1_WARNING, "FInfoDlgProc", APPHELP, HELPPROC$)
  430.         IF sz$ = "BACK" THEN
  431.             UIPop 1
  432.             GOTO CUSTINST
  433.         ELSEIF sz$ = "EXIT" THEN
  434.             UIPop 1
  435.             GOSUB ASKQUIT
  436.             GOTO CUSTINST
  437.         ELSE
  438.             UIPop 1
  439.         END IF    
  440.     END IF
  441.  
  442. '' ----------------------------------------------------------------
  443. ''    Warn User regarding Miracles
  444.  
  445.     IF ItsAMiracle% THEN 
  446.         IF GetListItem( CHECKSTATES$, PPDRV_FILES ) = "ON" THEN
  447.             sz$ = UIStartDlg(CUIDLL$, PPDRV_WARNING, "FInfoDlgProc", APPHELP, HELPPROC$)
  448.             IF sz$ = "BACK" THEN
  449.                 UIPop 1
  450.                 GOTO CUSTINST
  451.             ELSEIF sz$ = "EXIT" THEN
  452.                 UIPop 1
  453.                 GOSUB ASKQUIT
  454.                 GOTO CUSTINST
  455.             ELSE
  456.                 UIPop 1
  457.             END IF    
  458.         END IF
  459.     END IF
  460.  
  461.  
  462. '' -----------------------------------------
  463. ''    Ready to go...
  464.     UIPop 1            '' Pop off the CUSTINST dialog
  465.  
  466. '$IFDEF DEBUG
  467.     x% = DoMsgBox( "Files are Copied Here", "DEBUG", 1 )
  468. '$ELSE
  469.     ClearCopyList
  470.     AddOptFilesToCopyList PROG_FILES
  471.     AddOptFilesToCopyList DVC_FILES
  472.     AddOptFilesToCopyList SMPL_FILES
  473.     AddOptFilesToCopyList TT_FILES
  474.     AddOptFilesToCopyList TYP1_FILES
  475.  
  476.     IF ItsAMiracle% THEN 
  477.         AddOptFilesToCopyList PPDRV_FILES
  478.     END IF
  479.  
  480.     CreateDir DEST$, cmoNone
  481.     SetRestartDir DEST$
  482.     CopyFilesInCopyList
  483.     
  484.     
  485. '$ENDIF        '' DEBUG
  486.  
  487. '' ----------------------------------
  488. '' Setup the group and program items 
  489. '' ----------------------------------
  490.  
  491.     GroupName$ = "Encore 3.0"
  492.     ProgName$ = "Encore 3.0"
  493.     IF GetListItem(CHECKSTATES$, PROG_FILES) = "ON" THEN
  494.  
  495. '$IFDEF DEBUG
  496.         x% = DoMsgBox( "Program Mgr Group and Files Created Here", "DEBUG", 1 )
  497.         GOTO SAMPLE_ITEMS
  498. '$ENDIF
  499.  
  500.         CreateProgmanGroup GroupName$, "", cmoNone
  501.         ShowProgmanGroup  GroupName$, 1, cmoNone
  502.  
  503. '$IFDEF DEMO
  504.         CreateProgmanItem GroupName$, ProgName$, MakePath(DEST$,"encdemo.exe"), "", cmoOverwrite
  505. '$ELSE
  506.         CreateProgmanItem GroupName$, ProgName$, MakePath(DEST$,"encore30.exe"), "", cmoOverwrite
  507.  
  508.         ReplaceListItem NAMEORGIN$, 4, DEST$
  509.         x% = GetCurrentInfo(1)
  510.  
  511.         szName$ = GetListItem( CONFIRM$, 1 )    '' name
  512.         szOrg$ = GetListItem( CONFIRM$, 2 )     '' company
  513.         szSerial$ = GetListItem( CONFIRM$, 3 )      '' serial no
  514.         szDat$ = CHR$( LEN(szName$) ) + szName$ + CHR$( LEN(szOrg$) ) + szOrg$ + CHR$( LEN(szSerial$) ) + szSerial$
  515.         sz$ = GetListItem( NAMEORGIN$, 4 )      '' date/time of install directory
  516.         szDat$ = szDat$ + CHR$( LEN( sz$ ) ) + sz$
  517.  
  518.         StampResource "ProgFiles", "Encore30", DEST$, 6, &H421, szDat$, LEN( szDat$ )
  519.  
  520.         sz$ = ""                        
  521.         szDat$ = ""
  522.         szName$ = ""    
  523.         szOrg$ = ""
  524.         szSerial$ = ""
  525.  
  526.         CreateProgmanItem GroupName$, "Read Me", MakePath(DEST$, "readme.txt"), "", cmoOverwrite
  527.         CreateProgmanItem GroupName$, "Upgrade Notice", MakePath(DEST$, "notice.txt"), "", cmoOverwrite
  528.         CreateProgmanItem GroupName$, "Encore Prefs", MakePath(DEST$, "Encore30.ini"), "", cmoOverwrite
  529.  
  530. '$ENDIF
  531.  
  532.     END IF
  533.  
  534. ''--------------------------------------------------------
  535. SAMPLE_ITEMS:
  536.     IF GetListItem(CHECKSTATES$, SMPL_FILES) = "ON" THEN
  537.  
  538. '$IFDEF DEMO
  539.         SampleDest$ = MakePath( DEST$, "encdemo.exe samples\" )
  540. '$ELSE
  541.         SampleDest$ = MakePath( DEST$, "encore30.exe samples\" )
  542. '$ENDIF
  543.  
  544.         NumSamples% = GetListLength( SMPL_OPT$ )
  545.         IF NumSamples% > 0 THEN
  546.             FOR x% = 1 TO NumSamples%
  547.                 sz$ = GetListItem( SMPL_OPT$, x% )
  548.                 szf$ = GetSectionKeyFilename( "SampleFiles", sz$)
  549.  
  550. '$IFDEF DEBUG
  551.                 y% = DoMsgBox( "MakingItem: " + sz$ + CHR$(13) + CHR$(10) + MakePath(SampleDest$, szf$), "DEBUG", 1 )
  552. '$ELSE
  553.                 IF sz$ = "Beethoven Example Notes" THEN
  554.                     CreateProgmanItem GroupName$, sz$, MakePath( DEST$, "samples\" + szf$), "", cmoOverwrite
  555.                 ELSE
  556.                     CreateProgmanItem GroupName$, sz$, MakePath(SampleDest$, szf$), "", cmoOverwrite
  557.                 END IF
  558. '$ENDIF
  559.  
  560.             NEXT x%
  561.             sz$ = ""
  562.             szf$ = ""
  563.         END IF
  564.         SampleDest$ = ""
  565.     END IF
  566.  
  567. '' -----------------------------------------------------------------------------
  568. ''    Miracle MIDISet program
  569.  
  570.     IF ItsAMiracle% THEN
  571.         IF GetListItem(CHECKSTATES$, PPDRV_FILES) = "ON" THEN
  572.  
  573. '$IFDEF DEBUG
  574.             y% = DoMsgBox( "Adding MIDI Setup Item", "DEBUG", 1 )
  575. '$ELSE
  576.             CreateProgmanItem GroupName$, "MIDI Setup", MakePath(DEST$,"midiset.exe"), "", cmoOverwrite
  577. '$ENDIF
  578.  
  579.         END IF 
  580.     END IF
  581.  
  582. QUIT:
  583.     ON ERROR GOTO ERRQUIT
  584.  
  585.     IF ERR = 0 THEN
  586.         dlg% = EXITSUCCESS
  587.     ELSEIF ERR = STFQUIT THEN
  588.         dlg% = EXITQUIT
  589.     ELSE
  590.         dlg% = EXITFAILURE
  591.     END IF
  592.  
  593. QUITL1:
  594.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  595.     IF sz$ = "REACTIVATE" THEN
  596.         GOTO QUITL1
  597.     END IF
  598.     UIPop 1
  599.  
  600.     END
  601.  
  602. ERRQUIT:
  603.     i% = DoMsgBox( "Encore 3.0 Setup Error:" + STR$(ERR) + CHR$(13) + CHR$(10) + ERROR$, "Encore Setup Abort", MB_OK+MB_TASKMODAL+MB_ICONHAND )
  604.     END
  605.  
  606. GETPATH:
  607.     SetSymbolValue "EditTextIn", DEST$
  608.     SetSymbolValue "EditFocus", "END"
  609. GETPATHL1:
  610.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  611.  
  612.     IF sz$ = "CONTINUE" THEN
  613.         olddest$ = DEST$
  614.         DEST$ = GetSymbolValue("EditTextOut")
  615.  
  616.         ''Validate new path.  Disallow the root dir.
  617.         IF IsDirWritable(DEST$) = 0 OR (LEN(DEST$) = 3 AND MID$(DEST$, 2, 2 ) = ":\" ) THEN
  618.             GOSUB BADPATH
  619.             GOTO GETPATHL1
  620.         END IF
  621.         UIPop 1
  622.  
  623.         ''Truncate display if too long.
  624.         IF LEN(DEST$) > 23 THEN
  625.             ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  626.         ELSE
  627.             ReplaceListItem DRIVETEXT$, 7, DEST$
  628.         END IF
  629.  
  630.         ''Recalc if path changed.
  631.         IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  632.             RecalcPath
  633.             SetDriveStatus
  634.         END IF
  635.  
  636.         olddest$ = ""
  637.         GOTO CUSTINST
  638.     ELSEIF sz$ = "REACTIVATE" THEN
  639.         RecalcPath
  640.         SetDriveStatus
  641.         GOTO GETPATHL1
  642.     ELSEIF sz$ = "EXIT" THEN
  643.         GOSUB ASKQUIT
  644.         GOTO GETPATHL1
  645.     ELSE
  646.         UIPop 1
  647.         GOTO CUSTINST
  648.     END IF
  649.  
  650. '' Set the Path for TYPE1 fonts
  651. TYPE1PATH:
  652.     SetSymbolValue "EditTextIn", TYP1_DEST$
  653.     SetSymbolValue "EditFocus", "END"
  654. TYPE1PATHL1:
  655.     sz$ = UIStartDlg(CUIDLL$, FONTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  656.  
  657.     IF sz$ = "CONTINUE" THEN
  658.         olddest$ = TYP1_DEST$
  659.         TYP1_DEST$ = GetSymbolValue("EditTextOut")
  660.  
  661.         ''Validate new path. Disallow the root dir.
  662.         IF IsDirWritable(TYP1_DEST$) = 0 OR (LEN(DEST$) = 3 AND MID$(DEST$, 2, 2 ) = ":\" ) THEN
  663.             GOSUB BADPATH
  664.             GOTO TYPE1PATHL1
  665.         END IF
  666.         UIPop 1
  667.  
  668.         ''Truncate display if too long.
  669.         IF LEN(TYP1_DEST$) > 23 THEN
  670.             ReplaceListItem DRIVETEXT$, 8, MID$(TYP1_DEST$, 1, 23)+"..."
  671.         ELSE
  672.             ReplaceListItem DRIVETEXT$, 8, TYP1_DEST$
  673.         END IF
  674.  
  675.         ''Recalc if path changed.
  676.         IF (olddest$ <> TYP1_DEST$) AND (olddest$ <> TYP1_DEST$+"\") AND (olddest$+"\" <> TYP1_DEST$) THEN
  677.             RecalcPath
  678.             SetDriveStatus
  679.         END IF
  680.  
  681.         olddest$ = ""
  682.         GOTO CUSTINST
  683.     ELSEIF sz$ = "REACTIVATE" THEN
  684.         RecalcPath
  685.         SetDriveStatus
  686.         GOTO TYPE1PATHL1
  687.     ELSEIF sz$ = "EXIT" THEN
  688.         GOSUB ASKQUIT
  689.         GOTO TYPE1PATHL1
  690.     ELSE
  691.         UIPop 1
  692.         GOTO CUSTINST
  693.     END IF
  694.  
  695. SAMPLEFILES:
  696.     MakeListFromSectionKeys  ALL_SMPL_OPT$, "SampleFiles"
  697.     oldopt$ = GetSymbolValue( SMPL_OPT$ )
  698. SMPLFILESL1:
  699.     sz$ = UIStartDlg( CUIDLL$, SAMPLELIST, "FMultiDlgProc", APPHELP, HELPPROC$ )
  700.     newopt$ = GetSymbolValue( SMPL_OPT$ ) 
  701.  
  702.     if sz$ = "CONTINUE" THEN
  703.         UIPop 1
  704.         IF newopt$ <> oldopt$ THEN
  705.             RecalcOptFiles SMPL_FILES
  706.             SetDriveStatus
  707.         END IF
  708.         newopt$ = ""
  709.         oldopt$ = ""
  710.         GOTO  CUSTINST
  711.     ELSEIF sz$ = "REACTIVATE" THEN
  712.         RecalcPath
  713.         SetDriveStatus
  714.         GOTO SMPLFILESL1
  715.     ELSEIF sz$ = "EXIT" THEN
  716.         GOSUB ASKQUIT
  717.         GOTO SMPLFILESL1
  718.     ELSE
  719.         UIPop 1
  720.         newopt$ = ""
  721.         oldopt$ = ""
  722.         GOTO CUSTINST
  723.     END IF
  724.  
  725.  
  726. TOOBIG:
  727.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  728.     IF sz$ = "REACTIVATE" THEN
  729.         RecalcPath
  730.         SetDriveStatus
  731.         GOTO TOOBIG
  732.     END IF
  733.     UIPop 1
  734.     RETURN
  735.  
  736.  
  737.  
  738. BADPATH:
  739.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  740.     IF sz$ = "REACTIVATE" THEN
  741.         RecalcPath
  742.         SetDriveStatus
  743.         GOTO BADPATH
  744.     END IF
  745.         UIPop 1
  746.     RETURN
  747.  
  748. BADSERIAL:
  749.     x% = DoMsgBox( "Incorrect Serial Number.  Please Try Again.", "Encore 3.0 Setup", MB_OK+MB_ICONHAND )
  750.     RETURN
  751.  
  752. ASKQUIT:
  753.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  754.  
  755.     IF sz$ = "EXIT" THEN
  756.         UIPopAll
  757.         ERROR STFQUIT
  758.     ELSEIF sz$ = "REACTIVATE" THEN
  759.         GOTO ASKQUIT
  760.     ELSE
  761.         UIPop 1
  762.     END IF
  763.  
  764.     RETURN
  765.  
  766. '**
  767. '** Purpose:
  768. '**     Adds the specified option files to the copy list.
  769. '** Arguments:
  770. '**     ftype%  - type of files to add, one of the following:
  771. '**             PROG_FILES, DVC_FILES, etc.
  772. '** Returns:
  773. '**     none.
  774. '*************************************************************************
  775. SUB AddOptFilesToCopyList (ftype%) STATIC
  776.     
  777.     IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
  778.         SrcDir$ = GetSymbolValue("STF_SRCDIR")
  779.         IF ftype% = PROG_FILES THEN
  780.             AddSectionFilesToCopyList "ProgFiles", SrcDir$, DEST$
  781.             AddSectionFilesToCopyList "SysFiles", SrcDir$, GetWindowsSysDir
  782.         ELSEIF ftype% = DVC_FILES THEN
  783.             AddSectionFilesToCopyList "DvcFiles", SrcDir$, MakePath( DEST$, "DEVICES" )
  784.         ELSEIF ftype% = SMPL_FILES THEN
  785.             NumSamples% = GetListLength( SMPL_OPT$ )
  786.             IF NumSamples% > 0 THEN
  787.                 FOR x% = 1 TO NumSamples%
  788.                     sz$ = GetListItem( SMPL_OPT$, x% )
  789.                     AddSectionKeyFileToCopyList "SampleFiles", sz$, SrcDir$, MakePath( DEST$, "SAMPLES" )
  790.                 NEXT x%
  791.                 sz$ = ""
  792.             END IF
  793.         ELSEIF ftype% = TT_FILES THEN
  794.             AddSectionFilesToCopyList "TrueTypeFiles", SrcDir$, DEST$
  795.         ELSEIF ftype% = TYP1_FILES THEN
  796.             AddSectionFilesToCopyList "Type1Files", SrcDir$, TYP1_DEST$
  797.         ELSEIF ftype% = PPDRV_FILES THEN
  798.             AddSectionFilesToCopyList "PassportDrivers", SrcDir$, DEST$
  799.         END IF
  800.         
  801.     SrcDir$ = ""
  802.     END IF
  803. END SUB
  804.  
  805.  
  806. '**
  807. '** Purpose:
  808. '**     Recalculates disk space for the given option files and sets
  809. '**     the status info symbol "StatusItemsText".
  810. '** Arguments:
  811. '**     ftype% - type of files to add, one of the following:
  812. '**             PROG_FILES, etc.
  813. '** Returns:
  814. '**     none.
  815. '*************************************************************************
  816. SUB RecalcOptFiles (ftype%) STATIC
  817.  
  818.     CursorSave% = ShowWaitCursor()
  819.     ClearCopyList
  820.     AddOptFilesToCopyList ftype%
  821.  
  822.     fExtra% = 0
  823.     IF ftype% = PROG_FILES THEN
  824.         ListSym$ = PROG_NEEDS$
  825.         IF GetListItem(CHECKSTATES$, PROG_FILES) = "ON" THEN
  826.             ''Add extra cost to Windows drive for ini/progman, etc.
  827.             ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  828.             ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  829.             fExtra% = 1
  830.         END IF
  831.     ELSEIF ftype% = DVC_FILES THEN
  832.         ListSym$ = DVC_NEEDS$
  833.     ELSEIF ftype% = SMPL_FILES THEN
  834.         ListSym$ = SMPL_NEEDS$
  835.     ELSEIF ftype% = TT_FILES THEN
  836.         ListSym$ = TT_NEEDS$
  837.     ELSEIF ftype% = TYP1_FILES THEN
  838.         ListSym$ = TYP1_NEEDS$
  839.     ELSEIF ftype% = PPDRV_FILES THEN
  840.         ListSym$ = PPDRV_NEEDS$
  841.     END IF
  842.  
  843.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  844.  
  845.     cost& = 0
  846.     FOR i% = 1 TO 26 STEP 1
  847.         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  848.     NEXT i%
  849.  
  850.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  851.  
  852.     IF StillNeed& > 0 THEN
  853.         ReplaceListItem BIGLIST$, ftype%, "YES"
  854.     ELSE
  855.         ReplaceListItem BIGLIST$, ftype%, ""
  856.     END IF
  857.  
  858.     IF fExtra% THEN
  859.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  860.     END IF
  861.     RestoreCursor CursorSave%
  862.     ListSym$ = ""
  863. END SUB
  864.  
  865.  
  866. '**
  867. '** Purpose:
  868. '**     Recalculates disk space and sets option status info according
  869. '**     to the current destination path.
  870. '** Arguments:
  871. '**     none.
  872. '** Returns:
  873. '**     none.
  874. '*************************************************************************
  875. SUB RecalcPath STATIC
  876.  
  877.     CursorSave% = ShowWaitCursor()
  878.  
  879.     RecalcOptFiles PROG_FILES
  880.     RecalcOptFiles DVC_FILES
  881.     RecalcOptFiles SMPL_FILES
  882.     RecalcOptFiles TT_FILES
  883.     RecalcOptFiles TYP1_FILES
  884.  
  885.     IF ItsAMiracle% THEN
  886.         RecalcOptFiles PPDRV_FILES
  887.     END IF
  888.  
  889.     RestoreCursor CursorSave%
  890. END SUB
  891.  
  892.  
  893. '**
  894. '** Purpose:
  895. '**     Sets drive status info according to latest disk space calcs.
  896. '** Arguments:
  897. '**     none.
  898. '** Returns:
  899. '**     none.
  900. '*************************************************************************
  901. SUB SetDriveStatus STATIC
  902.  
  903.     drive$ = MID$(DEST$, 1, 1)
  904.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  905.  
  906.     cost& = VAL(GetListItem(PROG_NEEDS$, ndrive%)) + VAL(GetListItem(DVC_NEEDS$, ndrive%)) + VAL(GetListItem(SMPL_NEEDS$, ndrive%))
  907.     cost& = cost& + VAL(GetListItem(TT_NEEDS$, ndrive%))  + VAL(GetListItem(TYP1_NEEDS$, ndrive%))
  908.  
  909.     IF ItsAMiracle% THEN
  910.         cost& = cost& + VAL(GetListItem(PPDRV_NEEDS$, ndrive%))
  911.     END IF
  912.  
  913.     free& = GetFreeSpaceForDrive(drive$)
  914.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  915.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  916.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  917.  
  918.     IF drive$ = WINDRIVE$ THEN
  919.         ReplaceListItem DRIVETEXT$, 4, ""
  920.         ReplaceListItem DRIVETEXT$, 5, ""
  921.         ReplaceListItem DRIVETEXT$, 6, ""
  922.     ELSE
  923.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  924.  
  925.         cost& = VAL(GetListItem(PROG_NEEDS$, ndrive%)) + VAL(GetListItem(DVC_NEEDS$, ndrive%)) + VAL(GetListItem(SMPL_NEEDS$, ndrive%))
  926.         cost& = cost& + VAL(GetListItem(TT_NEEDS$, ndrive%)) + VAL(GetListItem(TYP1_NEEDS$, ndrive%))
  927.  
  928.         IF ItsAMiracle% THEN
  929.             cost& = cost& + VAL(GetListItem(PPDRV_NEEDS$, ndrive%))
  930.         END IF
  931.  
  932.         IF cost& = 0 THEN
  933.             ReplaceListItem DRIVETEXT$, 4, ""
  934.             ReplaceListItem DRIVETEXT$, 5, ""
  935.             ReplaceListItem DRIVETEXT$, 6, ""
  936.         ELSE
  937.             free& = GetFreeSpaceForDrive(WINDRIVE$)
  938.             ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  939.             ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  940.             ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  941.         END IF
  942.  
  943. '$IFDEF DEBUG
  944.     y% = DoMsgBox( "Windrive Cost: " + str$( cost& ), "DEBUG", 1 )
  945. '$ENDIF
  946.  
  947.     END IF
  948. END SUB
  949.  
  950.  
  951. '**
  952. '** Purpose:
  953. '**     Appends a file name to the end of a directory path,
  954. '**     inserting a backslash character as needed.
  955. '** Arguments:
  956. '**     szDir$  - full directory path (with optional ending "\")
  957. '**     szFile$ - filename to append to directory
  958. '** Returns:
  959. '**     Resulting fully qualified path name.
  960. '*************************************************************************
  961. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  962.     IF szDir$ = "" THEN
  963.     MakePath = szFile$
  964.     ELSEIF szFile$ = "" THEN
  965.     MakePath = szDir$
  966.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  967.     MakePath = szDir$ + szFile$
  968.     ELSE
  969.     MakePath = szDir$ + "\" + szFile$
  970.     END IF
  971. END FUNCTION
  972.  
  973. '**
  974. '** Purpose:
  975. '**     Validate a serial number
  976. '** Arguments:
  977. '**     szSerial$  - The number to validate
  978. '** Returns:
  979. '**     -1 if OK, 0 if invalid
  980. '*************************************************************************
  981. FUNCTION ValidSerialNo( szSerial$ ) STATIC AS INTEGER
  982.  
  983.     ValidSerialNo = -1      '' Assume it's OK
  984.     IF AlreadyInstalled% AND szSerial$ <> OrigSerial$ THEN
  985.         ValidSerialNo = 0
  986.     ELSEIF LEN( szSerial$ ) <> 17  OR  MID$( szSerial$, 1 , 5 ) <> "EV30-" OR MID$( szSerial$, 7 , 7 ) <> "-02032-" THEN
  987.         ValidSerialNo = 0
  988.     END IF
  989.  
  990. END FUNCTION
  991.  
  992. '**
  993. '** Purpose:
  994. '**     Check Write Protection Status of Source Drive
  995. '** Arguments:
  996. '**     szPath$  - The source path
  997. '** Returns:
  998. '**     -1 if WriteProtected, 0 if not
  999. '*************************************************************************
  1000. FUNCTION IsWriteProtected(  ) STATIC AS INTEGER
  1001.  
  1002.     IsWriteProtected = 0        '' Assume OK
  1003.  
  1004. '$IFDEF DEBUG
  1005.     szCheckPath$ = "B:\XXX.TST"
  1006. '$ELSE
  1007.     szCheckPath$ = MakePath( GetSymbolValue( "STF_SRCDIR" ), "XXX.TST" )
  1008. '$ENDIF
  1009.  
  1010.     ERR = 0
  1011.     OPEN szCheckPath$ FOR OUTPUT AS #1
  1012.     
  1013.     IF ERR THEN 
  1014.         IsWriteProtected = -1
  1015.     ELSE
  1016.         CLOSE #1
  1017.         KILL szCheckPath$
  1018.     END IF
  1019.     ERR = 0
  1020.  
  1021. END FUNCTION
  1022.  
  1023.