home *** CD-ROM | disk | FTP | other *** search
/ Dinomania / Dinomania.iso / dino.mst < prev    next >
Text File  |  1993-11-08  |  10KB  |  409 lines

  1. '' ---------------------------------------------------------------------
  2. ''
  3. ''                    Dinomania Setup
  4. ''
  5. '' ---------------------------------------------------------------------
  6.  
  7. '' '$define DEBUG  ''Define for script development/debugging
  8.  
  9. '' ---------------------------------------------------------------------
  10.  
  11. '$include 'setupapi.inc'
  12. '$include 'msdetect.inc'
  13.  
  14. '' ---------------------------------------------------------------------
  15.  
  16. '' Resource ID's
  17. CONST IDICN_SETUP       = 6000
  18. CONST IDBMP_LOGO        = 6100
  19.  
  20. '' Custom Dialog IDs
  21. CONST IDDLG_WELCOME       = 100
  22. CONST IDDLG_ASKQUIT       = 200
  23. CONST IDDLG_DESTPATH      = 300
  24. CONST IDDLG_EXITQUIT      = 400
  25. CONST IDDLG_EXITSUCCESS   = 500
  26. CONST IDDLG_NODISKSPACE   = 600
  27. CONST IDDLG_SELECTOPTIONS = 700
  28. CONST IDDLG_PLEASEWAIT    = 800
  29.  
  30. '' Custom user interface dll
  31. CONST CUIDLL$ = "cui.dll"
  32.  
  33. '' ---------------------------------------------------------------------
  34.  
  35. '' Default destination directory.
  36. GLOBAL DEST$
  37.  
  38. '' List of extra costs to add per drive
  39. CONST szExtraCosts$ = "ExtraCosts"
  40. CONST szCosts$ = "Costs"
  41.  
  42. '' Options
  43. GLOBAL OptScreenSavers%
  44. GLOBAL OptWallPapers%
  45. GLOBAL OptIcons%
  46.  
  47. '' Section names, case sensitive: any files without a section go under "Files"
  48. CONST ProgramKey$    = "dino"
  49. CONST WallPaperKey$  = "wallpaper"
  50. CONST IconKey$       = "icon"
  51.  
  52. '' ---------------------------------------------------------------------
  53.  
  54. '' My DLL functions
  55. DECLARE FUNCTION IsStringInFile LIB "cui.dll" (lpszFilename$, lpszString$) AS INTEGER
  56.  
  57. '' Local function declarations
  58. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  59. DECLARE SUB BuildCopyList (_OptScreenSavers%, _OptWallPapers%, _OptIcons%)
  60. DECLARE FUNCTION BytesPerOption (_OptScreenSavers%, _OptWallPapers%, _OptIcons%) AS LONG
  61. DECLARE SUB DoInstall
  62. DECLARE SUB AskQuit
  63. DECLARE SUB AddGroupItem (szGroup$, szGrpFile$, szTitle$, ProgName$)
  64.  
  65. '' ---------------------------------------------------------------------
  66.  
  67. '' Lets do an installation ...
  68. INIT:
  69.     ON ERROR GOTO QUIT
  70.  
  71.     '' Some standard setup stuff
  72.     SetBitmap CUIDLL$, IDBMP_LOGO
  73.     SetTitle "Dinomania Setup"
  74.  
  75.     '' Make a complete path to the INF file
  76.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  77.     IF szInf$ = "" THEN
  78.        szInf$ = GetSymbolValue("STF_CWDDIR") + "DINO.INF"
  79.     END IF
  80.  
  81.     '' Read in the INF file
  82.     ReadInfFile szInf$
  83.  
  84.     '' Screen savers go in the windows directory
  85.     DEST$ = GetWindowsDir()
  86.  
  87.     '' Default: select all options
  88.     OptScreenSavers% = 1
  89.     OptWallPapers% = 1
  90.     OptIcons% = 1
  91.  
  92. '$ifdef DEBUG
  93.     i% = SetSizeCheckMode(scmOnIgnore)
  94. '$else
  95.     i% = SetSizeCheckMode(scmOnFatal)
  96. '$endif
  97.  
  98.  
  99. WELCOME:
  100.     sz$ = UIStartDlg(CUIDLL$, IDDLG_WELCOME, "FDlgProc", 0, "")
  101.     IF sz$ = "CONTINUE" THEN
  102.         UIPop 1
  103.     ELSEIF sz$ = "REACTIVATE" THEN
  104.         GOTO WELCOME
  105.     ELSE
  106.         ASKQUIT
  107.         GOTO WELCOME
  108.     END IF
  109.  
  110.  
  111. SELECTOPTIONS:
  112.     sz$ = UIStartDlg(CUIDLL$, IDDLG_PLEASEWAIT, "FModelessDlgProc", 0, "")
  113.  
  114.     '' Screen savers
  115.     Bytes& = BytesPerOption&(1, 0, 0)
  116.     SetSymbolValue "Text1", STR$(Bytes& / 1024) + "K"
  117.  
  118.     '' Wallpapers
  119.     Bytes& = BytesPerOption&(0, 1, 0)
  120.     SetSymbolValue "Text2", STR$(Bytes& / 1024) + "K"
  121.  
  122.     '' Icons
  123.     Bytes& = BytesPerOption&(0, 0, 1)
  124.     SetSymbolValue "Text3", STR$(Bytes& / 1024) + "K"
  125.  
  126.     '' Check the options
  127.     SetSymbolValue "CheckItemsIn", ""
  128.     IF OptScreenSavers% = 1 THEN
  129.         AddListItem "CheckItemsIn", "ON"
  130.     ELSE
  131.         AddListItem "CheckItemsIn", "OFF"
  132.     END IF
  133.  
  134.     IF OptWallPapers% = 1 THEN
  135.         AddListItem "CheckItemsIn", "ON"
  136.     ELSE
  137.         AddListItem "CheckItemsIn", "OFF"
  138.     END IF
  139.  
  140.     IF OptIcons% = 1 THEN
  141.         AddListItem "CheckItemsIn", "ON"
  142.     ELSE
  143.         AddListItem "CheckItemsIn", "OFF"
  144.     END IF
  145.  
  146.     UIPop 1
  147.  
  148. SELECTOPTIONS1:
  149.     '' Run the dialog
  150.     sz$ = UIStartDlg(CUIDLL$, IDDLG_SELECTOPTIONS, "FDlgProc", 0, "")
  151.     IF sz$ = "CONTINUE" OR sz$ = "BACK" THEN
  152.  
  153.         '' Retrieve the options
  154.         IF GetListItem("CheckItemsOut", 1) = "ON" THEN
  155.             OptScreenSavers% = 1
  156.         ELSE
  157.             OptScreenSavers% = 0
  158.         END IF
  159.  
  160.         IF GetListItem("CheckItemsOut", 2) = "ON" THEN
  161.             OptWallPapers% = 1
  162.         ELSE
  163.             OptWallPapers% = 0
  164.         END IF
  165.  
  166.         IF GetListItem("CheckItemsOut", 3) = "ON" THEN
  167.             OptIcons% = 1
  168.         ELSE
  169.             OptIcons% = 0
  170.         END IF
  171.  
  172.         UIPop 1
  173.  
  174.         IF sz$ = "BACK" THEN
  175.             GOTO WELCOME
  176.         END IF
  177.  
  178.     ELSEIF sz$ = "REACTIVATE" THEN
  179.         GOTO SELECTOPTIONS        '' Recalc sizes
  180.     ELSE
  181.         ASKQUIT
  182.         GOTO SELECTOPTIONS1
  183.     END IF
  184.  
  185.     '' Like it says
  186.     BuildCopyList OptScreenSavers%, OptWallPapers%, OptIcons%
  187.  
  188. RECALC:
  189.     '' Check the amount of space needed
  190.     StillNeed& = GetCopyListCost("ExtraCostsList", "CostCostsList", "NeededCostsList")
  191.     IF StillNeed& <> 0 THEN
  192. SPACE_CHECK_DLG:
  193.         '' Space required
  194.         SetSymbolValue "Text1", STR$(StillNeed& / 1024) + "K"
  195.  
  196.         '' Space available
  197.         Bytes& = GetFreeSpaceForDrive(Mid$(DEST$, 1, 1))
  198.         SetSymbolValue "Text2", STR$(Bytes& / 1024) + "K"
  199.  
  200.         sz$ = UIStartDlg(CUIDLL$, IDDLG_NODISKSPACE, "FDlgProc", 0, "")
  201.         IF sz$ = "CONTINUE" THEN
  202.             UIPop 1
  203.             GOTO SELECTOPTIONS
  204.         ELSEIF sz$ = "REACTIVATE" THEN
  205.             GOTO RECALC
  206.         ELSE
  207.             ASKQUIT
  208.             GOTO SPACE_CHECK_DLG
  209.         END IF
  210.     ENDIF
  211.  
  212.     '' Perform the installation
  213.     DoInstall
  214.  
  215.  
  216. QUIT:
  217.     IF ERR = 0 THEN
  218.         dlg% = IDDLG_EXITSUCCESS
  219.     ELSEIF ERR = STFQUIT THEN
  220.         dlg% = IDDLG_EXITQUIT
  221.     ELSE
  222.         dlg% = IDDLG_EXITQUIT
  223.     END IF
  224.  
  225. QUITL1:
  226.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FDlgProc", 0, "")
  227.     IF sz$ = "REACTIVATE" THEN
  228.         GOTO QUITL1
  229.     END IF
  230.     UIPop 1
  231.  
  232.     END
  233.  
  234. '' ---------------------------------------------------------------------
  235.  
  236. SUB BuildCopyList (_OptScreenSavers%, _OptWallPapers%, _OptIcons%) STATIC
  237.  
  238.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  239.  
  240.     ClearCopyList
  241.  
  242.     IF _OptScreenSavers% = 1 THEN
  243.         AddSectionFilesToCopyList ProgramKey$, SrcDir$, DEST$
  244.     END IF
  245.  
  246.     IF _OptWallPapers% = 1 THEN
  247.         AddSectionFilesToCopyList WallPaperKey$, SrcDir$, DEST$
  248.     END IF
  249.  
  250.     IF _OptIcons% = 1 THEN
  251.         AddSectionFilesToCopyList IconKey$, SrcDir$, DEST$
  252.     END IF
  253.  
  254. END SUB
  255.  
  256. '' ---------------------------------------------------------------------
  257.  
  258. '**
  259. '** Count the number of bytes needed to copy the given
  260. '** section(s) to the users disk.
  261. '**
  262.  
  263. FUNCTION BytesPerOption (_OptScreenSavers%, _OptWallPapers%, _OptIcons%) STATIC AS LONG
  264.  
  265.     BuildCopyList _OptScreenSavers%, _OptWallPapers%, _OptIcons%
  266.  
  267.     SetSymbolValue szExtraCosts$, ""
  268.     FOR i% = 1 TO 26 STEP 1
  269.         AddListItem szExtraCosts$, "0"
  270.     NEXT i%
  271.  
  272.     '' Add extra cost to Windows drive for ini and progman additions
  273.     IF _OptScreenSavers% = 1 THEN
  274.         szWinDrive$ = MID$(GetWindowsDir, 1, 1)
  275.         ndrive% = ASC(ucase$(szWinDrive$)) - ASC("A") + 1
  276.         ReplaceListItem szExtraCosts$, ndrive%, "10240"
  277.     END IF
  278.  
  279.     '' Compute the space
  280.     StillNeed& = GetCopyListCost(szExtraCosts$, szCosts$, "")
  281.  
  282.     '' Add up the space required
  283.     cost& = 0
  284.     FOR i% = 1 TO 26 STEP 1
  285.         cost& = cost& + VAL(GetListItem(szCosts$, i%))
  286.     NEXT i%
  287.  
  288.     BytesPerOption = cost&
  289.  
  290. END FUNCTION
  291.  
  292. '' ---------------------------------------------------------------------
  293.  
  294. '**
  295. '** Purpose:
  296. '**     Builds the copy list and performs all installation operations.
  297. '** Arguments:
  298. '**     none.
  299. '** Returns:
  300. '**     none.
  301.  
  302. SUB DoInstall STATIC
  303.  
  304.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  305.     CreateDir DEST$, cmoNone
  306.  
  307.     ClearBillboardList
  308.     CopyFilesInCopyList
  309.  
  310.     sz$ = UIStartDlg(CUIDLL$, IDDLG_PLEASEWAIT, "FModelessDlgProc", 0, "")
  311.  
  312.     IF OptScreenSavers% = 1 THEN
  313.  
  314.         '' Create a video toys group
  315.         grp$ = "Video Toys"
  316.         grpfile$ = MakePath$(GetWindowsDir(), "videotoy.grp")
  317.         CreateProgmanGroup grp$, grpfile$, cmoNone
  318.  
  319.         '' Place the order form file in the group window
  320.         IF IsStringInFile(grpfile$, "orderfrm.wri") = 0 THEN
  321.             CreateProgmanItem grp$, "Order Form", "write.exe " + MakePath$(DEST$, "orderfrm.wri"), "", cmoOverwrite
  322.         END IF
  323.  
  324.         '' Add all the screen savers to the group (Alphabetized)
  325.         AddGroupItem grp$, grpfile$, "Dinosaur Fight", "dinofite.scr"
  326.         AddGroupItem grp$, grpfile$, "Diplodocus", "d