home *** CD-ROM | disk | FTP | other *** search
/ CD-ROM Now 4 / mmnow_4.zip / mmnow_4 / MCLASS / MC_INST.MS_ / MC_INST.MS
Text File  |  1994-05-20  |  14KB  |  509 lines

  1. '**************************************************************************
  2. '*                       Multimedia MasterClass Install
  3. '**************************************************************************
  4.  
  5. '$DEFINE DEBUG  ''Define for script development/debugging
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9.  
  10. ''Dialog ID's
  11. CONST DLG_DETECT      = 27
  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 CUSTINST        = 6200
  21. CONST TOOBIG          = 6300
  22. CONST BADPATH         = 6400
  23. CONST CDBADFILE       = 7200
  24. CONST TAPE_SOURCE     = 7900
  25.  
  26. ''PRB - To maximise window
  27. CONST WS_VISIBLE       = &H10000000
  28. CONST WS_BORDER        = &H00800000
  29. CONST WS_CLIPCHILDREN  = &H02000000
  30. CONST GWL_STYLE        = -16
  31. CONST SW_SHOWMAXIMIZED = 3
  32.  
  33. ''Bitmap ID
  34. CONST LOGO   = 1
  35.  
  36. ''File Types
  37. CONST APPFILES     = 1
  38. CONST OPTFILES1    = 2
  39. CONST OPTFILES2    = 3
  40. CONST OPTFILES3    = 4
  41.  
  42. GLOBAL LF_STATUS$
  43.  
  44. GLOBAL DEST$        ''Default destination directory.
  45. GLOBAL WINDRIVE$    ''Windows drive letter.
  46.  
  47. ''CustInst list symbol names
  48. GLOBAL APPNEEDS$    ''Option list costs per drive
  49. GLOBAL OPT1NEEDS$
  50. GLOBAL OPT2NEEDS$
  51. GLOBAL OPT3NEEDS$
  52. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  53. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  54.  
  55. ''Dialog list symbol names
  56. GLOBAL CHECKSTATES$
  57. GLOBAL STATUSTEXT$
  58. GLOBAL DRIVETEXT$
  59.  
  60.  
  61. DECLARE SUB AddOptFilesToCopyList (ftype%)
  62. DECLARE SUB RecalcOptFiles (ftype%)
  63. DECLARE SUB RecalcPath
  64. DECLARE SUB SetDriveStatus
  65. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  66.  
  67. ''PRB - To maximise window
  68. DECLARE FUNCTION ShowWindow  LIB "user.exe" (hWnd%,iShow%) AS INTEGER
  69. DECLARE FUNCTION SetWindowLong LIB "user.exe" (hWnd%, offset%, style&) AS LONG
  70.  
  71.  
  72. INIT:
  73.     ''PRB - To maximise window
  74.     hWnd%=HwndFrame()
  75.     x&=SetWindowLong(hWnd%,GWL_STYLE,WS_VISIBLE+WS_BORDER+WS_CLIPCHILDREN)
  76.     y%=ShowWindow(hWnd%,SW_SHOWMAXIMIZED)
  77.  
  78.     CUIDLL$ = "mc_inst.dll"            ''custom user interface dll
  79.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  80.  
  81.     SetBitmap CUIDLL$, LOGO
  82.     SetTitle "Multimedia MasterClass Setup"
  83.  
  84.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  85.     IF szInf$ = "" THEN
  86.     szInf$ = GetSymbolValue("STF_CWDDIR") + "MC_INST.INF"
  87.     END IF
  88.     ReadInfFile szInf$
  89.  
  90.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  91.     DEST$ = WINDRIVE$ + ":\MCLASS"
  92.  
  93.     ''CustInst list symbols
  94.     CHECKSTATES$ = "CheckItemsState"
  95.     STATUSTEXT$  = "StatusItemsText"
  96.     DRIVETEXT$   = "DriveStatusText"
  97.     FOR i% = 1 TO 5 STEP 1
  98.     AddListItem CHECKSTATES$, "ON"
  99.     NEXT i%
  100.     FOR i% = 1 TO 5 STEP 1
  101.         AddListItem STATUSTEXT$, ""
  102.     NEXT i%
  103.     FOR i% = 1 TO 7 STEP 1
  104.         AddListItem DRIVETEXT$, ""
  105.     NEXT i%
  106.     ReplaceListItem DRIVETEXT$, 7, DEST$
  107.  
  108.     ''Disk cost list symbols
  109.     APPNEEDS$   = "AppNeeds"
  110.     OPT1NEEDS$  = "Opt1Needs"
  111.     OPT2NEEDS$  = "Opt2Needs"
  112.     OPT3NEEDS$  = "Opt3Needs"
  113.     EXTRACOSTS$ = "ExtraCosts"
  114.     BIGLIST$    = "BigList"
  115.     FOR i% = 1 TO 5 STEP 1
  116.         AddListItem BIGLIST$, ""
  117.     NEXT i%
  118.     FOR i% = 1 TO 26 STEP 1
  119.     AddListItem EXTRACOSTS$, "0"
  120.     NEXT i%
  121.  
  122.     RecalcPath
  123.     SetDriveStatus
  124.  
  125. '$IFDEF DEBUG
  126.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  127. '$ENDIF ''DEBUG
  128.  
  129.  
  130. WELCOME:
  131.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  132.     IF sz$ = "CONTINUE" THEN
  133.     UIPop 1
  134.     ELSE
  135.     GOSUB ASKQUIT
  136.     GOTO WELCOME
  137.     END IF
  138.  
  139.  
  140. GETPATH:
  141.     SetSymbolValue "EditTextIn", DEST$
  142.     SetSymbolValue "EditFocus", "END"
  143. GETPATHL1:
  144.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  145.  
  146.     IF sz$ = "CONTINUE" THEN
  147.     olddest$ = DEST$
  148.     DEST$ = GetSymbolValue("EditTextOut")
  149.  
  150.     ''Validate new path.
  151.     IF IsDirWritable(DEST$) = 0 THEN
  152.         GOSUB BADPATH
  153.         GOTO GETPATHL1
  154.     END IF
  155.     UIPop 1
  156.  
  157.     ''Truncate display if too long.
  158.     IF LEN(DEST$) > 23 THEN
  159.         ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  160.     ELSE
  161.         ReplaceListItem DRIVETEXT$, 7, DEST$
  162.     END IF
  163.  
  164.     ''Recalc if path changed.
  165.     IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  166.         RecalcPath
  167.         SetDriveStatus
  168.     END IF
  169.  
  170.     olddest$ = ""
  171.     ELSEIF sz$ = "REACTIVATE" THEN
  172.     RecalcPath
  173.     SetDriveStatus
  174.     GOTO GETPATHL1
  175.     ELSEIF sz$ = "BACK" THEN
  176.     UIPop 1
  177.     GOTO WELCOME
  178.     ELSEIF sz$ = "EXIT" THEN
  179.         GOSUB ASKQUIT
  180.         GOTO GETPATHL1
  181.     ELSE
  182.     UIPop 1
  183.     END IF
  184.  
  185.  
  186.  
  187.  
  188. CUSTINST:
  189.     SetSymbolValue "EditTextIn", DEST$
  190.  
  191. CUSTINSTL1:
  192.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  193.  
  194.     IF sz$ = "CONTINUE" THEN
  195.         ''Install only if it will fit.
  196.         FOR i% = 1 TO 5 STEP 1
  197.             IF GetListItem(BIGLIST$, i%) <> "" THEN
  198.         GOSUB TOOBIG
  199.                 GOTO GETPATH
  200.             END IF
  201.         NEXT i%
  202.     UIPop 1
  203.     GOTO INSTALL
  204.     ELSEIF sz$ = "BACK" THEN
  205.     UIPop 1
  206.     GOTO GETPATH
  207.     ELSEIF sz$ = "CHK1" THEN
  208.     RecalcOptFiles APPFILES
  209.     SetDriveStatus
  210.     GOTO CUSTINSTL1
  211.     ELSEIF sz$ = "CHK2" THEN
  212.     RecalcOptFiles OPTFILES1
  213.     SetDriveStatus
  214.     GOTO CUSTINSTL1
  215.     ELSEIF sz$ = "CHK3" THEN
  216.     RecalcOptFiles OPTFILES2
  217.     SetDriveStatus
  218.     GOTO CUSTINSTL1
  219.     ELSEIF sz$ = "CHK4" THEN
  220.     RecalcOptFiles OPTFILES3
  221.     SetDriveStatus
  222.     GOTO CUSTINSTL1
  223.     ELSEIF sz$ = "REACTIVATE" THEN
  224.     RecalcPath
  225.     SetDriveStatus
  226.     GOTO CUSTINSTL1
  227.     ELSE
  228.     GOSUB ASKQUIT
  229.     GOTO CUSTINSTL1
  230.     END IF
  231.  
  232.  
  233.  
  234. INSTALL:
  235.     SetSymbolValue "LFName", LF_NAME$
  236.  
  237.     ClearCopyList
  238.     AddOptFilesToCopyList APPFILES
  239.     AddOptFilesToCopyList OPTFILES1
  240.     AddOptFilesToCopyList OPTFILES2
  241.     AddOptFilesToCopyList OPTFILES3
  242.     CreateDir DEST$, cmoNone
  243.     CopyFilesInCopyList
  244.  
  245.     CreateProgmanGroup "Multimedia MasterClass", "", cmoNone
  246.     ShowProgmanGroup  "Multimedia MasterClass", 1, cmoNone
  247.     CreateProgmanItem "Multimedia MasterClass", "Demo User Guide", "WRITE.EXE "+MakePath(DEST$,"mcldemo.wri"), "", cmoOverwrite
  248.  
  249.  
  250.     IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  251.       CreateProgmanItem "Multimedia MasterClass", "MasterClass Developer Demo", MakePath(DEST$,"mclass.exe"), ",1,1,1,", cmoOverwrite
  252.     END IF
  253.  
  254. '    IF GetListItem(CHECKSTATES$, OPTFILES3) = "ON" THEN
  255. '      CreateProgmanItem "Multimedia MasterClass", "16 Colour Demo", MakePath(DEST$,"mclrun.exe ")+MakePath(DEST$,"EXAMPLES\DEMO16.MCL"), "", cmoOverwrite
  256. '      CreateProgmanItem "Multimedia MasterClass", "256 Colour Demo", MakePath(DEST$,"mclrun.exe ")+MakePath(DEST$,"EXAMPLES\DEMO256.MCL"), "", cmoOverwrite
  257. '    END IF
  258.  
  259.     IF GetListItem(CHECKSTATES$, OPTFILES1) = "ON" THEN
  260.       CreateProgmanItem "Multimedia MasterClass", "MasterClass Help", "WINHELP.EXE "+MakePath(DEST$,"mclass.hlp"), "", cmoOverwrite
  261.     END IF
  262.  
  263.  
  264. MC_SETTINGS:
  265.     SetSymbolValue "IniPath", DEST$
  266.  
  267. MC_SETTINGSL1:
  268.     sz$ = UIStartDlg(CUIDLL$, TAPE_SOURCE, "CustomDlgProc", APPHELP, HELPPROC$)
  269.     IF sz$ = "CONTINUE" THEN
  270.     UIPop 1
  271.     ELSE
  272.     UIPop 1
  273.     GOSUB ASKQUIT
  274.     GOTO MC_SETTINGSL1
  275.     END IF
  276.  
  277.  
  278.  
  279.  
  280. QUIT:
  281.     ON ERROR GOTO ERRQUIT
  282.  
  283.     IF ERR = 0 THEN
  284.     dlg% = EXITSUCCESS
  285.     ELSEIF ERR = STFQUIT THEN
  286.         dlg% = EXITQUIT
  287.     ELSE
  288.         dlg% = EXITFAILURE
  289.     END IF
  290. QUITL1:
  291.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  292.     IF sz$ = "REACTIVATE" THEN
  293.     GOTO QUITL1
  294.     END IF
  295.     UIPop 1
  296.  
  297.     END
  298.  
  299. ERRQUIT:
  300.     i% = DoMsgBox("Setup sources were corrupted!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  301.     END
  302.  
  303.  
  304.  
  305. TOOBIG:
  306.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  307.     IF sz$ = "REACTIVATE" THEN
  308.         RecalcPath
  309.         SetDriveStatus
  310.         GOTO TOOBIG
  311.     END IF
  312.     UIPop 1
  313.     RETURN
  314.  
  315.  
  316.  
  317. BADPATH:
  318.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  319.     IF sz$ = "REACTIVATE" THEN
  320.         RecalcPath
  321.         SetDriveStatus
  322.     GOTO BADPATH
  323.     END IF
  324.     UIPop 1
  325.     RETURN
  326.  
  327.  
  328.  
  329. ASKQUIT:
  330.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  331.  
  332.     IF sz$ = "EXIT" THEN
  333.         UIPopAll
  334.         ERROR STFQUIT
  335.     ELSEIF sz$ = "REACTIVATE" THEN
  336.         GOTO ASKQUIT
  337.     ELSE
  338.         UIPop 1
  339.     END IF
  340.     RETURN
  341.  
  342.  
  343.  
  344. '**
  345. '** Purpose:
  346. '**     Adds the specified option files to the copy list.
  347. '** Arguments:
  348. '**     ftype%  - type of files to add, one of the following:
  349. '**             APPFILES, OPTFILES1, OPTFILES2
  350. '** Returns:
  351. '**     none.
  352. '*************************************************************************
  353. SUB AddOptFilesToCopyList (ftype%) STATIC
  354.  
  355.     IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
  356.         SrcDir$ = GetSymbolValue("STF_SRCDIR")
  357.     IF ftype% = APPFILES THEN
  358.         AddSectionFilesToCopyList "AppFiles", SrcDir$, DEST$
  359.         ELSEIF ftype% = OPTFILES1 THEN
  360.         AddSectionFilesToCopyList "OptFiles1", SrcDir$, DEST$
  361.     ELSEIF ftype% = OPTFILES2 THEN
  362.             AddSectionFilesToCopyList "OptFiles2", SrcDir$, DEST$
  363.     ELSEIF ftype% = OPTFILES3 THEN
  364.             AddSectionFilesToCopyList "OptFiles3", SrcDir$, DEST$
  365.     END IF
  366.         SrcDir$ = ""
  367.     END IF
  368. END SUB
  369.  
  370.  
  371. '**
  372. '** Purpose:
  373. '**     Recalculates disk space for the given option files and sets
  374. '**     the status info symbol "StatusItemsText".
  375. '** Arguments:
  376. '**     ftype% - type of files to add, one of the following:
  377. '**             APPFILES, OPTFILES1, OPTFILES2
  378. '** Returns:
  379. '**     none.
  380. '*************************************************************************
  381. SUB RecalcOptFiles (ftype%) STATIC
  382.     CursorSave% = ShowWaitCursor()
  383.     ClearCopyList
  384.     AddOptFilesToCopyList ftype%
  385.  
  386.     fExtra% = 0
  387.     IF ftype% = APPFILES THEN
  388.         ListSym$ = APPNEEDS$
  389.         IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  390.             ''Add extra cost to Windows drive for ini/progman, etc.
  391.             ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  392.         ''ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  393.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  394.         fExtra% = 1
  395.         END IF
  396.     ELSEIF ftype% = OPTFILES1 THEN
  397.         ListSym$ = OPT1NEEDS$
  398.     ELSEIF ftype% = OPTFILES2 THEN
  399.         ListSym$ = OPT2NEEDS$
  400.     ELSEIF ftype% = OPTFILES3 THEN
  401.         ListSym$ = OPT3NEEDS$
  402.     END IF
  403.  
  404.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  405.  
  406.     cost& = 0
  407.     FOR i% = 1 TO 26 STEP 1
  408.         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  409.     NEXT i%
  410.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  411.  
  412.     IF StillNeed& > 0 THEN
  413.         ReplaceListItem BIGLIST$, ftype%, "YES"
  414.     ELSE
  415.         ReplaceListItem BIGLIST$, ftype%, ""
  416.     END IF
  417.  
  418.     IF fExtra% THEN
  419.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  420.     END IF
  421.     RestoreCursor CursorSave%
  422.     ListSym$ = ""
  423. END SUB
  424.  
  425.  
  426. '**
  427. '** Purpose:
  428. '**     Recalculates disk space and sets option status info according
  429. '**     to the current destination path.
  430. '** Arguments:
  431. '**     none.
  432. '** Returns:
  433. '**     none.
  434. '*************************************************************************
  435. SUB RecalcPath STATIC
  436.  
  437.     CursorSave% = ShowWaitCursor()
  438.  
  439.     RecalcOptFiles APPFILES
  440.     RecalcOptFiles OPTFILES1
  441.     RecalcOptFiles OPTFILES2
  442.     RecalcOptFiles OPTFILES3
  443.  
  444.     RestoreCursor CursorSave%
  445. END SUB
  446.  
  447.  
  448. '**
  449. '** Purpose:
  450. '**     Sets drive status info according to latest disk space calcs.
  451. '** Arguments:
  452. '**     none.
  453. '** Returns:
  454. '**     none.
  455. '*************************************************************************
  456. SUB SetDriveStatus STATIC
  457.  
  458.     drive$ = MID$(DEST$, 1, 1)
  459.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  460.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%)) + VAL(GetListItem(OPT2NEEDS$, ndrive%)) + VAL(GetListItem(OPT3NEEDS$, ndrive%))
  461.     free& = GetFreeSpaceForDrive(drive$)
  462.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  463.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  464.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  465.  
  466.     IF drive$ = WINDRIVE$ THEN
  467.         ReplaceListItem DRIVETEXT$, 4, ""
  468.         ReplaceListItem DRIVETEXT$, 5, ""
  469.         ReplaceListItem DRIVETEXT$, 6, ""
  470.     ELSE
  471.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  472.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%)) + VAL(GetListItem(OPT2NEEDS$, ndrive%)) + VAL(GetListItem(OPT3NEEDS$, ndrive%))
  473.     IF cost& = 0 THEN
  474.             ReplaceListItem DRIVETEXT$, 4, ""
  475.             ReplaceListItem DRIVETEXT$, 5, ""
  476.             ReplaceListItem DRIVETEXT$, 6, ""
  477.         ELSE
  478.             free& = GetFreeSpaceForDrive(WINDRIVE$)
  479.             ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  480.             ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  481.             ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  482.         END IF
  483.     END IF
  484. END SUB
  485.  
  486.  
  487. '**
  488. '** Purpose:
  489. '**     Appends a file name to the end of a directory path,
  490. '**     inserting a backslash character as needed.
  491. '** Arguments:
  492. '**     szDir$  - full directory path (with optional ending "\")
  493. '**     szFile$ - filename to append to directory
  494. '** Returns:
  495. '**     Resulting fully qualified path name.
  496. '*************************************************************************
  497. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  498.     IF szDir$ = "" THEN
  499.         MakePath = szFile$
  500.     ELSEIF szFile$ = "" THEN
  501.         MakePath = szDir$
  502.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  503.         MakePath = szDir$ + szFile$
  504.     ELSE
  505.         MakePath = szDir$ + "\" + szFile$
  506.     END IF
  507. END FUNCTION
  508.  
  509.