home *** CD-ROM | disk | FTP | other *** search
/ Kodak Arrange & Build It / 050506_2241.BIN / WINDOWS / ARRANGIT / BIN / ARRANGIT.MST < prev    next >
Text File  |  1996-03-08  |  15KB  |  507 lines

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