home *** CD-ROM | disk | FTP | other *** search
/ My First Incredible Amazing Dictionary / Win_DorlingKindersley_MyFirstIncredibleAmazingDictionary.iso / dksetup / dksetup.mst < prev    next >
Text File  |  1994-08-15  |  27KB  |  946 lines

  1.  
  2. '**************************************************************************
  3. '*                       Stowaway Setup
  4. '**************************************************************************
  5.  
  6. '$DEFINE DEBUG  ''Define for script development/debugging
  7.  
  8. '$INCLUDE 'setupapi.inc'
  9. '$INCLUDE 'msdetect.inc'
  10. '' '$INCLUDE 'msshared.inc'
  11.  
  12. '' OPTION EXPLICIT
  13.  
  14. DECLARE FUNCTION FIsVGA LIB "mscuistf.dll" AS INTEGER
  15. DECLARE FUNCTION FIs256Colour LIB "mscuistf.dll" AS INTEGER
  16.  
  17.  
  18.  
  19. ''Dialog ID's
  20. CONST WELCOME       = 100
  21. CONST CUSTOMHELP    = 106
  22. CONST SPEED         = 111
  23. CONST BILLBOARD     = 113
  24. CONST ASKQUIT       = 200
  25. CONST DESTPATH      = 300
  26. CONST EXITFAILURE   = 400
  27. CONST EXITQUIT      = 600
  28. CONST EXITSUCCESS   = 700
  29. CONST OPTIONS       = 800
  30. CONST APPHELP       = 900
  31. CONST DONENEWSYSSOFT    = 1100
  32. CONST MAILMAN           = 1500
  33. CONST DONENOSYSSOFT     = 1800
  34. CONST NEWSYSTEMSOFTWARE = 2300
  35. CONST NEWADPCM          = 2600
  36. CONST WARNNOSYSSOFT     = 3100
  37. CONST PROGMANGRP        = 3742
  38. CONST CUSTOM        = 6200
  39. CONST NOSPACE       = 6300
  40. CONST BADPATH       = 6400
  41. CONST NEED31        = 6401
  42. CONST NOMOUSE       = 6402
  43. CONST BADVGA        = 6403
  44. CONST NOT256        = 6404
  45. CONST POORMACHINE   = 6405
  46. CONST AWFULMACHINE  = 6406
  47. CONST PATHHELP      = 6407
  48. CONST WHIZZHELP     = 6408
  49. CONST URKADPCM      = 6409
  50. CONST ADPCMHELP     = 6410
  51.  
  52. ''Bitmap ID
  53. CONST LOGO = 1
  54.  
  55. GLOBAL CURSOR%      '' Old mouse cursor state
  56. GLOBAL DEST$        '' Default destination directory.
  57. GLOBAL ProdSrc$, dirCode$, dirSetup$
  58. GLOBAL SysSrc$
  59. GLOBAL SRCDIR$      '' Source Drive
  60. GLOBAL FussyUser$   '' "1" for express installation, "2" for custom.
  61. GLOBAL MINIMAL$     '' "ON" for minimal installation, "OFF" for normal
  62. GLOBAL PROGMAN$     '' "ON" for invoke program manager, "OFF" otherwise
  63. GLOBAL CUSTCHECK$   '' the state of all Custom dialogue check boxes
  64. GLOBAL PROGGRP$     '' Name of Program Manager Group
  65. GLOBAL PRODNAME$    '' Product Name
  66. GLOBAL COMPNAME$    '' Company Name
  67. GLOBAL WINSYSDIR$   '' Windows System Driver
  68. GLOBAL DESTDRIVE$   '' Destination drive
  69. GLOBAL WINDRIVE$    '' Windows drive (system directory)
  70. GLOBAL WinDir$      '' Windows directory
  71. GLOBAL DD%          '' Integer DESTDRIVE$
  72. GLOBAL WD%          '' Integer WINDRIVE$
  73. GLOBAL SizeReq&     '' Total installation size?
  74. GLOBAL NEWSYSADPCM$
  75. GLOBAL CrapLng%
  76. GLOBAL Junk&
  77. GLOBAL CUIDLL$
  78. GLOBAL HELPPROC$
  79. GLOBAL SZINF$
  80. GLOBAL OPTCUR$
  81. GLOBAL I%
  82. GLOBAL SZ$, Key$, SrcDrive$, SrcPengeDir$
  83. GLOBAL VerNew$
  84. GLOBAL VerOld$
  85. GLOBAL ADPCMCOPY%, ADPCMINIUPDATED%
  86. GLOBAL dlg%
  87. GLOBAL INI$
  88. GLOBAL INSTRINI$
  89. GLOBAL Count%, RebootMsg%, uLen%
  90. GLOBAL OLDNTH&, NEWNTH&
  91. GLOBAL OldYear%, NewYear%, OldMonth%, NewMonth%, OldDay%, NewDay%
  92. GLOBAL ExeFile$, PengeFile$, IniFile$, Section$, Moi$
  93.  
  94. DECLARE SUB Install
  95. DECLARE FUNCTION IsVersionLater (VersionOld$, VersionNew$) AS INTEGER
  96. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  97. DECLARE FUNCTION IsDateLater (DateOld$, DateNew$) AS INTEGER
  98.  
  99. '******************************************************************
  100. '** Declare the funcitons in USER.EXE we need to register a
  101. '** unique message identifier and needed to post that message
  102. '** to the NSETUP.EXE program.  See the Windows api documentation
  103. '** for additional information on these functions.
  104. '******************************************************************
  105. DECLARE FUNCTION PostMessage LIB "user" (hwnd%, msg%, wparam%, lparam&) AS INTEGER
  106. DECLARE FUNCTION RegisterWindowMessage LIB "user" (szRebootMessage$) AS INTEGER
  107.  
  108.  
  109.  
  110. INIT:
  111.     Cursor% = ShowWaitCursor ()
  112.     dirCode$ = "DKCODE"
  113.     dirSetup$ = "DKSETUP"
  114.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  115.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  116.     PRODNAME$ = "My First Incredible, Amazing Dictionary"
  117.     COMPNAME$ = "DK Multimedia"
  118.     ExeFile$ = "mfd.exe"
  119.     PengeFile$ = "mfd.png"
  120.     IniFile$ = "mfd.ini"
  121.     Section$ = "MFD"
  122.     Moi$ = ProdName$ + " Setup"
  123.     WinSysDir$ = GetWindowsSysDir ()
  124.     WinDir$ = GetWindowsDir ()
  125.     WINDRIVE$ = MID$ (GetWindowsSysDir (), 1, 1)
  126.     INSTRINI$ = MakePath(GetWindowsDir(),IniFile$)
  127.  
  128.     SrcDir$ = GetSymbolValue ("STF_SRCDIR")
  129.     uLen% = Len (SrcDir$) - Len (dirSetup$)
  130.     ProdSrc$ = Mid$ (SrcDir$, 1, uLen% - 1) + dirCode$
  131.     SysSrc$ = SrcDir$
  132.  
  133.     SetAbout PRODNAME$, "⌐ 1994 " + COMPNAME$
  134.     CrapLng% = SetBeepingMode (1)
  135.     SetBitmap CUIDLL$, LOGO
  136.     SetTitle PRODNAME$ + " Setup"
  137.     CrapLng% = SetDecompMode (1)
  138.  
  139.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  140.  
  141.     IF szInf$ = "" THEN
  142.         szInf$ = GetSymbolValue("STF_CWDDIR") + "SETUP.INF"
  143.     END IF
  144.  
  145.     ReadInfFile szInf$
  146.  
  147.     OPTCUR$ = "1"
  148.     DEST$ = "C:\DKMM\MFD"
  149.     MINIMAL$ = "OFF"
  150.     PROGMAN$ = "ON"
  151.  
  152. '***************************************************************
  153. '**  Here we go registering the message so we can communicate
  154. '**  with NSETUP.EXE.
  155. '***************************************************************
  156.     RebootMsg% = RegisterWindowMessage ("NSetup")
  157.  
  158.  
  159. '$IFDEF DEBUG
  160.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  161.     WinDrive$ = MID$(GetWindowsDir, 1, 1)
  162.     IF IsDriveValid(WinDrive$) = 0 THEN
  163.         i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  164.         GOTO QUIT
  165.     END IF
  166. '$ENDIF ''DEBUG
  167.  
  168.  
  169. WELCOME:
  170.     RestoreCursor (Cursor%)
  171.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  172.     Cursor% = ShowWaitCursor ()
  173.     IF sz$ = "CONTINUE" THEN
  174.         UIPop 1
  175.     ELSE
  176.         GOSUB ASKQUIT
  177.         GOTO WELCOME
  178.     END IF
  179.  
  180. TEST31:
  181.     IF GetWindowsMajorVersion () > 3 THEN
  182.         GOTO TESTVGA
  183.     END IF
  184.  
  185.     IF GetWindowsMajorVersion () < 3 THEN
  186.         GOTO GORDONBENNETT
  187.     END IF
  188.  
  189.     IF GetWindowsMinorVersion () >= 10 THEN
  190.         GOTO TESTVGA
  191.     END IF
  192.  
  193. GORDONBENNETT:
  194.     RestoreCursor (Cursor%)
  195.     sz$ = UIStartDlg (CUIDLL$, NEED31, "FInfoDlgProc", AWFULMACHINE, HELPPROC$)
  196.     Cursor% = ShowWaitCursor ()
  197.     UIPopAll
  198.     ERROR STFQUIT
  199.  
  200.  
  201. TESTVGA:
  202.     IF GetScreenHeight () >= 480 AND GetScreenWidth () >= 640 THEN
  203.         GOTO TESTMOUSE
  204.     ELSE
  205.         RestoreCursor (Cursor%)
  206.         sz$ = UIStartDlg (CUIDLL$, BADVGA, "FInfoDlgProc", AWFULMACHINE, HELPPROC$)
  207.         Cursor% = ShowWaitCursor ()
  208.         IF sz$ = "CONTINUE" THEN
  209.             UIPop(1)
  210.             GOTO TESTMOUSE
  211.         ELSEIF sz$ = "REACTIVATE" THEN
  212.             GOTO TESTVGA
  213.         ELSEIF sz$ = "BACK" THEN
  214.             UIPop 1
  215.             GOTO WELCOME
  216.         ELSE
  217.             GOSUB ASKQUIT
  218.             GOTO TESTMOUSE
  219.         END IF
  220.     END IF
  221.  
  222. TESTMOUSE:
  223.     IF HasMouseInstalled() > 0 THEN
  224.         GOTO TESTCOLOUR
  225.     ELSE
  226.         RestoreCursor (Cursor%)
  227.         sz$ = UIStartDlg (CUIDLL$, NOMOUSE, "FInfoDlgProc", AWFULMACHINE, HELPPROC$)
  228.         Cursor% = ShowWaitCursor ()
  229.         IF sz$ = "CONTINUE" THEN
  230.             UIPop(1)
  231.             GOTO TESTCOLOUR
  232.         ELSEIF sz$ = "REACTIVATE" THEN
  233.             GOTO TESTMOUSE
  234.         ELSEIF sz$ = "BACK" THEN
  235.             UIPop 1
  236.             GOTO WELCOME
  237.         ELSE
  238.             GOSUB ASKQUIT
  239.             GOTO TESTCOLOUR
  240.         END IF
  241.     END IF
  242.  
  243. TESTCOLOUR:
  244.     IF FIs256Colour() > 0 THEN
  245.         GOTO WHIZZO
  246.     ELSE
  247.         RestoreCursor (Cursor%)
  248.         sz$ = UIStartDlg (CUIDLL$, NOT256, "FInfoDlgProc", POORMACHINE, HELPPROC$)
  249.         Cursor% = ShowWaitCursor ()
  250.         IF sz$ = "CONTINUE" THEN
  251.             UIPop(1)
  252.             GOTO WHIZZO
  253.         ELSEIF sz$ = "REACTIVATE" THEN
  254.             GOTO TESTCOLOUR
  255.         ELSEIF sz$ = "BACK" THEN
  256.             UIPop 1
  257.             GOTO WELCOME
  258.         ELSE
  259.             GOSUB ASKQUIT
  260.             GOTO WHIZZO
  261.         END IF
  262.     END IF
  263.  
  264. WHIZZO:
  265.     SetSymbolValue "RadioDefault", FussyUser$
  266. WHIZZ1:
  267.     RestoreCursor (Cursor%)
  268.     sz$ = UIStartDlg(CUIDLL$, SPEED, "FRadioDlgProc", WHIZZHELP, HELPPROC$)
  269.     Cursor% = ShowWaitCursor ()
  270.     FussyUser$ = GetSymbolValue("ButtonChecked")
  271.  
  272.     IF sz$ = "CONTINUE" THEN
  273.         UIPop(1)
  274.         GOTO FUSSPOT
  275.     ELSEIF sz$ = "REACTIVATE" THEN
  276.         GOTO WHIZZ1
  277.     ELSEIF sz$ = "BACK" THEN
  278.         UIPop 1
  279.         GOTO WELCOME
  280.     ELSE
  281.         GOSUB ASKQUIT
  282.         GOTO FUSSPOT
  283.     END IF
  284.  
  285. '' At this point, determine which device drivers need to be loaded.
  286. FUSSPOT:
  287.     IF FussyUser$ = "1" THEN
  288.         AddSectionFilesToCopyList Section$, ProdSrc$, Dest$
  289.         GOTO TESTDRIVERS
  290.     END IF
  291.  
  292. GETPATH:
  293.     SetSymbolValue "EditTextIn", DEST$
  294.     VerOld$ = Dest$
  295.     SetSymbolValue "EditFocus", "ALL"
  296. GETPATH1:
  297.     RestoreCursor (Cursor%)
  298.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", PATHHELP, HELPPROC$)
  299.     Cursor% = ShowWaitCursor ()
  300.     DEST$ = GetSymbolValue("EditTextOut")
  301.  
  302.     IF sz$ = "CONTINUE" THEN
  303.  
  304.         IF MID$ (DEST$, 2, 1) <> ":" THEN
  305.             IF MID$ (DEST$, 1, 1) <> "\" THEN
  306.                 DEST$ = WINDRIVE$ + ":\" + DEST$
  307.             ELSE
  308.                 DEST$ = WINDRIVE$ + ":" + DEST$
  309.             END IF
  310.         ELSEIF IsDriveValid (MID$ (DEST$, 1, 1)) = 0 THEN
  311.             Dest$ = VerOld$
  312.             UIPop 1
  313.             GOSUB BADPATH
  314.             GOTO GETPATH
  315.         END IF
  316.  
  317.         IF IsDirWritable(DEST$) = 0 THEN
  318.             Dest$ = VerOld$
  319.             UIPop 1
  320.             GOSUB BADPATH
  321.             GOTO GETPATH
  322.         END IF
  323.         IF DoesDirExist( DEST$ ) = 0 THEN
  324.             i% = DoMsgBox( "The specified directory does not exist.  Do you want to create the directory?", "Install Location", 8228)
  325.             IF i% = 7 THEN
  326.                 GOTO GETPATH1
  327.             END IF
  328.         END IF
  329.         UIPop 1
  330.     ELSEIF sz$ = "REACTIVATE" THEN
  331.         GOTO GETPATH1
  332.     ELSEIF sz$ = "BACK" THEN
  333.         UIPop 1
  334.         GOTO WHIZZO
  335.     ELSE
  336.         GOSUB ASKQUIT
  337.         GOTO DOCUSTOM
  338.     END IF
  339.  
  340.  
  341. DOCUSTOM:
  342.     SrcDir$ = GetSymbolValue ("STF_SRCDIR")
  343.     SetSymbolValue "CheckItemsState", ""
  344.     AddListItem "CheckItemsState", MINIMAL$
  345.     AddListItem "CheckItemsState", PROGMAN$
  346.  
  347. '' **      "DriveStatusText" - list of seven strings to initialize drive status
  348. '' **          text items (IDC_TEXT1-7) in the following sequence:
  349. '' **              dst_drive, dst_space_need, dst_space_free,
  350. '' **              win_drive, win_space_need, win_space_free,
  351. '' **              dst_path
  352. '' **          If any of the "win_" items is an empty string, its label
  353. '' **          text will be made non-visible.
  354.  
  355.     DESTDRIVE$ = MID$ (DEST$, 1, 1)
  356.     DD% = ASC (DESTDRIVE$) - ASC ("A") + 1
  357.     WD% = ASC (WINDRIVE$) - ASC ("A") + 1
  358.  
  359.  
  360. CUSTOM1:
  361.     ClearCopyList
  362.  
  363.     IF MINIMAL$ = "OFF" THEN
  364.         AddSectionFilesToCopyList Section$, ProdSrc$, Dest$
  365.     END IF
  366.  
  367.     SetSymbolValue "ExtraSpace", ""
  368.     SetSymbolValue "Needed", ""
  369.     SetSymbolValue "Cost", ""
  370.     SetSymbolValue "DriveStatusText", ""
  371.  
  372.     for i% = 1 to wd% - 1
  373.  
  374.         AddListItem "ExtraSpace", ""
  375.  
  376.     next i%
  377.  
  378.     AddListItem "ExtraSpace", "2048"
  379.     Junk& = GetCopyListCost ("ExtraSpace", "Needed", "Cost")
  380.  
  381.     AddListItem "DriveStatusText", DESTDRIVE$
  382.     AddListItem "DriveStatusText", GetListItem ("Needed", DD%)
  383.     AddListItem "DriveStatusText", STR$ (GetFreeSpaceForDrive (DESTDRIVE$))
  384.  
  385.     if dd% = wd% then
  386.  
  387.         AddListItem "DriveStatusText", ""
  388.         AddListItem "DriveStatusText", ""
  389.         AddListItem "DriveStatusText", ""
  390.  
  391.     else
  392.  
  393.         AddListItem "DriveStatusText", WINDRIVE$
  394.         AddListItem "DriveStatusText", GetListItem ("Needed", WD%)
  395.         AddListItem "DriveStatusText", STR$ (GetFreeSpaceForDrive (WINDRIVE$))
  396.  
  397.     end if
  398.  
  399.     AddListItem "DriveStatusText", DEST$
  400.  
  401.     RestoreCursor (Cursor%)
  402.     sz$ = UIStartDlg(CUIDLL$, CUSTOM, "FCustInstDlgProc", CUSTOMHELP, HELPPROC$)
  403.     Cursor% = ShowWaitCursor ()
  404.  
  405.     MINIMAL$ = GetListItem ("CheckItemsState", 1)
  406.     PROGMAN$ = GetListItem ("CheckItemsState", 2)
  407.  
  408.     IF sz$ = "CONTINUE" THEN
  409.         UIPop 1
  410.     ELSEIF sz$ = "REACTIVATE" THEN
  411.         GOTO CUSTOM1
  412.     ELSEIF sz$ = "BACK" THEN
  413.         UIPop 1
  414.         GOTO GETPATH
  415.     ELSE
  416.         GOSUB ASKQUIT
  417.         GOTO GETPATH
  418.     END IF
  419.  
  420.     ClearCopyList
  421.  
  422.     IF MINIMAL$ = "OFF" THEN
  423.         AddSectionFilesToCopyList Section$, ProdSrc$, Dest$
  424.     END IF
  425.  
  426.     RemoveSymbol "Needed"
  427.     RemoveSymbol "Cost"
  428.     RemoveSymbol "ExtraSpace"
  429.  
  430. TESTDRIVERS:
  431.     AddToBillboardList CUIDLL$, MAILMAN, "MailmanDlgProc", 2500
  432.     SetCopyGaugePosition -1, 140
  433.  
  434.     ADPCMINIUPDATED% = 0
  435.  
  436.  
  437.         'Change WIN.INI and SYSTEM.INI for ACM driver and ADPCM compresser
  438.  
  439.     Key$ = GetIniKeyString (WinDir$ + "system.ini", "drivers", "WaveMapper")
  440.  
  441.     IF Key$ = "" THEN
  442.  
  443.         ADPCMCOPY% = 1
  444.         GOTO SIDTHETHIRD
  445.  
  446.     END IF
  447.  
  448.     IF Key$ <> "msacm.drv" AND Key$ <> "" THEN
  449.  
  450. ADPCMINI1:
  451.         RestoreCursor (Cursor%)
  452.         sz$ = UIStartDlg(CUIDLL$, URKADPCM, "FInfoDlgProc", ADPCMHELP, HELPPROC$)
  453.         Cursor% = ShowWaitCursor ()
  454.  
  455.         IF sz$ = "REACTIVATE" THEN
  456.             GOTO ADPCMINI1
  457.         ELSEIF sz$ = "EXIT" THEN
  458.             GOSUB ASKQUIT
  459.             GOTO ADPCMINI1
  460.         ELSEIF sz$ = "BACK" THEN
  461.             UIPop 1
  462.             GOTO WHIZZO
  463.         ELSEIF SZ$ = "CANCEL" THEN
  464.             UIPop(1)
  465.             GOTO SIDTHEFIFTH
  466.         END IF
  467.         UIPop 1
  468.         ADPCMCOPY% = 1
  469.         GOTO SIDTHETHIRD
  470.  
  471.     ENDIF
  472.  
  473.     Key$ = GetIniKeyString (WinDir$ + "system.ini", "MSACM", "Install")
  474.  
  475.     IF Key$ <> "msadpcm.acm" AND Key$ <> "" THEN
  476.  
  477. ADPCMINI2:
  478.         RestoreCursor (Cursor%)
  479.         sz$ = UIStartDlg(CUIDLL$, URKADPCM, "FInfoDlgProc", ADPCMHELP, HELPPROC$)
  480.         Cursor% = ShowWaitCursor ()
  481.  
  482.         IF sz$ = "REACTIVATE" THEN
  483.             GOTO ADPCMINI2
  484.         ELSEIF sz$ = "EXIT" THEN
  485.             GOSUB ASKQUIT
  486.             GOTO ADPCMINI2
  487.         ELSEIF sz$ = "BACK" THEN
  488.             UIPop 1
  489.             GOTO WHIZZO
  490.         ELSEIF sz$ = "CANCEL" THEN
  491.             UIPOP 1
  492.             GOTO SIDTHEFIFTH
  493.         ENDIF
  494.  
  495.         UIPop 1
  496.         ADPCMCOPY% = 1
  497.         GOTO SIDTHETHIRD
  498.  
  499.     ENDIF
  500.  
  501. ADPCMCOPY:
  502.     ADPCMCOPY% = 0
  503.  
  504.     'Find out if msacm driver is installed
  505.  
  506.     IF DoesFileExist ((MakePath (WinSysDir$, "msacm.drv")), femExists) = 1 THEN
  507.  
  508.         'Is the version installed the latest version?
  509.  
  510.         VerNew$ = GetVersionOfFile (MakePath (ProdSrc$, "msacm.drv"))
  511.         VerOld$ = GetVersionOfFile (MakePath (WinSysDir$, "msacm.drv"))
  512.         ADPCMCOPY% = IsVersionLater (VerOld$, VerNew$)
  513.  
  514.     ELSE
  515.  
  516.         ADPCMCOPY% = 1
  517.  
  518.     END IF
  519.  
  520.  
  521.     'We only need to look at the msadpcm.acm file if we have not already
  522.     'installed our version of ADPCM
  523.  
  524.     IF ADPCMCOPY% = 0 THEN
  525.  
  526.         'Find out if msadpcm.acm is installed
  527.  
  528.         IF DoesFileExist ((MakePath (WinSysDir$, "msadpcm.acm")), femExists) = 1 THEN
  529.  
  530.             'Is the version installed the latest version?
  531.  
  532.             VerNew$ = GetVersionOfFile (MakePath (ProdSrc$, "msadpcm.acm"))
  533.             VerOld$ = GetVersionOfFile (MakePath (WinSysDir$, "msadpcm.acm"))
  534.             ADPCMCOPY% = IsVersionLater (VerOld$, VerNew$)
  535.  
  536.         ELSE
  537.  
  538.             ADPCMCOPY% = 1
  539.  
  540.         END IF
  541.  
  542.     END IF
  543.  
  544. SIDTHETHIRD:
  545.     IF ADPCMCOPY% = 1 THEN
  546.  
  547. ADPCM1:
  548.  
  549.         RestoreCursor (Cursor%)
  550.         sz$ = UIStartDlg(CUIDLL$, NEWSYSTEMSOFTWARE, "FInfoDlgProc", NEWADPCM, HELPPROC$)
  551.         Cursor% = ShowWaitCursor ()
  552.  
  553.         IF sz$ = "CONTINUE" THEN
  554.             UIPop(1)
  555.             AddSpecialFileToCopyList "ACM Drivers", "MSACM", ProdSrc$, MakePath (WinSysDir$, "msacm.drv")
  556.             AddSpecialFileToCopyList "ACM Drivers", "MSADPCM", ProdSrc$, MakePath (WinSysDir$, "msadpcm.acm")
  557.             CreateIniKeyValue WinDir$ + "system.ini", "drivers", "WaveMapper", "msacm.drv", cmoOverwrite
  558.             CreateIniKeyValue WinDir$ + "system.ini", "MSACM", "Install", "msadpcm.acm", cmoOverwrite
  559.             CreateIniKeyValue WinDir$ + "control.ini", "drivers.desc", "msacm.drv","MS Audio Compression Manager", cmoOverwrite
  560.             CreateIniKeyValue WinDir$ + "control.ini", "Userinstallable.drivers", "WaveMapper", "msacm.drv", cmoOverwrite
  561.             CreateIniKeyValue WinDir$ + "control.ini", "related.desc", "WaveMapper", "", cmoOverwrite
  562.             ADPCMINIUPDATED% = 1
  563.             GOTO SIDTHEFOURTH
  564.         ELSEIF sz$ = "EXIT" THEN
  565.             GOSUB ASKQUIT
  566.             GOTO ADPCM1
  567.         ELSEIF sz$ = "REACTIVATE" THEN
  568.             GOTO ADPCM1
  569.         ELSEIF sz$ = "BACK" THEN
  570.             UIPop 1
  571.             GOTO WHIZZO
  572.         ELSE
  573.             GOSUB ASKQUIT
  574.         END IF
  575.  
  576. NOSYSSOFT:
  577.         RestoreCursor (Cursor%)
  578.         sz$ = UIStartDlg(CUIDLL$, WARNNOSYSSOFT, "FInfoDlgProc", 0, "")
  579.         Cursor% = ShowWaitCursor ()
  580.  
  581.         IF sz$ = "CONTINUE" THEN
  582.             UIPop(1)
  583.             GOTO SIDTHEFOURTH
  584.         ELSEIF sz$ = "EXIT" THEN
  585.             GOSUB ASKQUIT
  586.             GOTO NOSYSSOFT
  587.         ELSEIF sz$ = "REACTIVATE" THEN
  588.             GOTO NOSYSSOFT
  589.         ELSEIF sz$ = "BACK" THEN
  590.             UIPop 1
  591.             GOTO ADPCM1
  592.         ELSE
  593.             GOSUB ASKQUIT
  594.         END IF
  595.  
  596. SIDTHEFOURTH:
  597.         UIPop 1
  598.  
  599. SIDTHEFIFTH:
  600.  
  601.     END IF
  602.  
  603.     DESTDRIVE$ = MID$ (DEST$, 1, 1)
  604.     DD% = ASC (DESTDRIVE$) - ASC ("A") + 1
  605.     WD% = ASC (WINDRIVE$) - ASC ("A") + 1
  606.     SetSymbolValue "ExtraSpace", ""
  607.     SetSymbolValue "Needed", ""
  608.     SetSymbolValue "Cost", ""
  609.     SetSymbolValue "DriveStatusText", ""
  610.  
  611.     for i% = 1 to wd% - 1
  612.  
  613.         AddListItem "ExtraSpace", ""
  614.  
  615.     next i%
  616.  
  617.     AddListItem "ExtraSpace", "2048"
  618.  
  619.     Junk& = GetCopyListCost ("ExtraSpace", "Cost", "Needed")
  620.  
  621.     if Junk& > 0 THEN
  622.  
  623.         if wd% <> dd% then
  624.  
  625.             Junk& = Val (GetListItem ("Needed", wd%))
  626.  
  627.             if Junk& > 0 then
  628.  
  629.                 Junk& = Junk& / 1024 + 1
  630.  
  631.                 if Junk& > 2048 then
  632.  
  633.                     sz$ = "Setup needs an additional " + str$(Junk&/1024 + 1) + " Mbytes of disk space on drive "
  634.  
  635.                 else
  636.  
  637.                     sz$ = "Setup needs an additional " + str$(Junk&) + " Kbytes of disk space on drive "
  638.  
  639.                 end if
  640.  
  641.                 sz$ = sz$ + WINDRIVE$ + ", your Windows drive, to install the "
  642.                 sz$ = sz$ + "system files needed by " + PRODNAME$ + ". Setup will now exit. You should delete some "
  643.                 sz$ = sz$ + "unnecessary files on drive " + WINDRIVE$ + " before you run " + Moi$ + " again."
  644.                 i% = DoMsgBox(sz$, Moi$, MB_OK + MB_ICONHAND)
  645.                 END
  646.  
  647.             end if
  648.  
  649.         end if
  650.  
  651.         Junk& = Val (GetListItem ("Needed", dd%)) / 1024 + 1
  652.  
  653.         if Junk& > 2048 then
  654.  
  655.             sz$ = "Setup needs an additional " + str$ (Junk&/1024+1) + " Mbytes of disk space on drive "
  656.  
  657.         else
  658.  
  659.             sz$ = "Setup needs an additional " + str$ (Junk&) + " Kbytes of disk space on drive "
  660.  
  661.         end if
  662.  
  663.         sz$ = sz$ + DESTDRIVE$ + " to install " + PRODNAME$ + ". You should select an alternative disk drive, or delete "
  664.         sz$ = sz$ + "some unnecessary files on drive " + DESTDRIVE$
  665.         sz$ = sz$ + " (which you can do using File Manager or a similar product)."
  666.         i% = DoMsgBox (sz$, Moi$, MB_OK + MB_ICONHAND)
  667.         goto GETPATH
  668.  
  669.     end if
  670.  
  671.     Install
  672.  
  673.  
  674. QUIT:
  675.     ON ERROR GOTO ERRQUIT
  676.  
  677.     IF ERR = 0 THEN
  678.         dlg% = EXITSUCCESS
  679.     ELSEIF ERR = STFQUIT THEN
  680.         dlg% = EXITQUIT
  681.         GOTO QUITL1
  682.     ELSE
  683.         dlg% = EXITFAILURE
  684.         GOTO QUITL1
  685.     END IF
  686.  
  687. QUITL3:
  688.     IF ADPCMINIUPDATED% = 1 THEN
  689.         dlg% = DONENEWSYSSOFT
  690.     ELSE
  691.         dlg% = DONENOSYSSOFT
  692.     END IF
  693.  
  694.     RestoreCursor (Cursor%)
  695.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfoDlgProc", 0, "")
  696.     Cursor% = ShowWaitCursor ()
  697.  
  698.     IF sz$ = "REACTIVATE" THEN
  699.         GOTO QUITL3
  700.     ELSEIF sz$ = "CONTINUE" THEN
  701.         IF MINIMAL$ = "OFF" THEN
  702.             RUN "NOTEPAD.EXE" + " " + MakePath(DEST$,"README.TXT"), NOWAIT
  703.         ELSE
  704.             RUN "NOTEPAD.EXE" + " " + MakePath(SRCDIR$,"..\" + dirCode$ + "\README.TXT"), NOWAIT
  705.         END IF
  706.         GOTO QUITL3
  707.     ELSEIF sz$ = "BACK" THEN
  708.         SetRestartDir DEST$
  709.         i% = PostMessage (65535, RebootMsg%, 0, 0)
  710.     ELSEIF sz$ = "EXIT" THEN
  711.         IF ADPCMINIUPDATED% = 1 THEN
  712.             i% = DoMsgBox( "The new system configuration will not be loaded until Windows is restarted.", Moi$, MB_OK+MB_TASKMODAL+MB_ICONHAND)
  713.         END IF
  714.     END IF
  715.     UIPop 1
  716.  
  717.     STOP
  718.     END
  719.  
  720.  
  721. QUITL1:
  722.     RestoreCursor (Cursor%)
  723.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  724.     Cursor% = ShowWaitCursor ()
  725.     IF sz$ = "REACTIVATE" THEN
  726.         GOTO QUITL1
  727.     END IF
  728.     UIPop 1
  729.  
  730.     STOP
  731.     END
  732.  
  733. ERRQUIT:
  734.     i% = DoMsgBox("The setup sources were corrupted. You may be able to correct the problem by using SCANDISK to fix your hard disk.", Moi$, MB_OK+MB_TASKMODAL+MB_ICONHAND)
  735.     END
  736.  
  737.  
  738.  
  739. BADPATH:
  740.     RestoreCursor (Cursor%)
  741.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  742.     Cursor% = ShowWaitCursor ()
  743.  
  744.     IF sz$ = "REACTIVATE" THEN
  745.         GOTO BADPATH
  746.     END IF
  747.     UIPop 1
  748.     RETURN
  749.  
  750.  
  751.  
  752. ASKQUIT:
  753.     RestoreCursor (Cursor%)
  754.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  755.     Cursor% = ShowWaitCursor ()
  756.  
  757.     IF sz$ = "EXIT" THEN
  758.         UIPopAll
  759.         ERROR STFQUIT
  760.     ELSEIF sz$ = "REACTIVATE" THEN
  761.         GOTO ASKQUIT
  762.     ELSE
  763.         UIPop 1
  764.     END IF
  765.     RETURN
  766.  
  767.  
  768.  
  769. '**
  770. '** Purpose:
  771. '**     Builds the copy list and performs all installation operations.
  772. '** Arguments:
  773. '**     none.
  774. '** Returns:
  775. '**     none.
  776. '*************************************************************************
  777. SUB Install STATIC
  778.  
  779.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  780.     CreateDir DEST$, cmoNone
  781.  
  782.     OpenLogFile MakePath(DEST$, "SETUP.LOG"), 0
  783.     WriteToLogFile ""
  784.     WriteToLogFile "  User chose as destination directory: '" + DEST$ + "'"
  785.     WriteToLogFile "  User chose option: '" + OPTCUR$ + "'"
  786.     WriteToLogFile ""
  787.     WriteToLogFile "May have had to create the directory: " + DEST$
  788.     WriteToLogFile ""
  789.  
  790.     CopyFilesInCopyList
  791.  
  792.     SrcDrive$ = MID$(SrcDir$, 1, 1)
  793.     uLen% = LEN (SrcDir$) - Len (dirSetup$) - 1
  794.     SrcPengeDir$ = MID$(SrcDir$, 1, uLen%-1)
  795.  
  796.     if DoesIniSectionExist (INSTRINI$, "Directory") = 1 then
  797.  
  798.         RemoveIniSection INSTRINI$, "Directory", cmoNone
  799.  
  800.     end if
  801.  
  802.     CreateIniKeyValue INSTRINI$, "Directory", "Data", SrcPengeDir$, cmoOverwrite
  803.  
  804.     IF PROGMAN$ = "ON" THEN
  805.  
  806.         PROGGRP$ = COMPNAME$
  807.  
  808.         WriteToLogFile ""
  809.         WriteToLogFile "Updating Program Manager."
  810.         WriteToLogFile ""
  811.         CreateProgmanGroup PROGGRP$, "", cmoNone
  812.         ShowProgmanGroup   PROGGRP$, 1, cmoNone
  813.         sz$ = "My First Dictionary Read Me"
  814.  
  815.         IF MINIMAL$ = "ON" THEN
  816.  
  817.             szInf$ = MakePath (SrcDir$,"..\" + dirCode$ + "\" + ExeFile$ + " ")+MakePath(SrcDir$,"..\" + dirCode$ + "\" + PengeFile$)
  818.             CreateProgmanItem PROGGRP$, "My First Incredible Amazing Dictionary", szInf$, szInf$, cmoOverwrite
  819.             CreateProgmanItem PROGGRP$, sz$, "notepad.exe "+MakePath(SrcDir$,"..\" + dirCode$ + "\readme.txt"), "", cmoOverwrite
  820.  
  821.         ELSE
  822.  
  823.             szInf$ = MakePath(DEST$,ExeFile$ + " ")+MakePath(DEST$,PengeFile$)
  824.             CreateProgmanItem PROGGRP$, "My First Incredible Amazing Dictionary", szInf$, szInf$, cmoOverwrite
  825.             CreateProgmanItem PROGGRP$, sz$, "notepad.exe "+MakePath(DEST$,"readme.txt"), "", cmoOverwrite
  826.  
  827.         END IF
  828.  
  829.     END IF
  830.  
  831.     WriteToLogFile ""
  832.     WriteToLogFile "Installation complete"
  833.     WriteToLogFile ""
  834.     CloseLogFile
  835.     Kill MakePath(DEST$, "SETUP.LOG")
  836.  
  837. END SUB
  838.  
  839. FUNCTION IsVersionLater (VersionOld$, VersionNew$) STATIC AS INTEGER
  840.  
  841.     IsVersionLater = 0
  842.  
  843.     FOR Count% = 1 TO 4
  844.  
  845.        OldNth& = GetVersionNthField (VersionOld$, Count%)
  846.        NewNth& = GetVersionNthField (VersionNew$, Count%)
  847.  
  848.         IF OldNth& > NewNth& THEN
  849.  
  850.             EXIT FOR
  851.  
  852.         END IF
  853.  
  854.         IF NewNth& > OldNth& THEN
  855.  
  856.             IsVersionLater = 1
  857.             EXIT FOR
  858.  
  859.         END IF
  860.  
  861.     NEXT Count%
  862.  
  863. END FUNCTION
  864.  
  865. '*************************************************************************
  866. '**
  867. '** IsDateLater
  868. '** --------
  869. '** Purpose:
  870. '**     Compares two file dates
  871. '** Arguments:
  872. '**     DateOld$ in YYYY-MM-DD-HH-MM-SS format
  873. '**     DateNew$ in YYYY-MM-DD-HH-MM-SS format
  874. '** Returns:
  875. '**     1 if new date is later, 0 if new date is older or the same
  876. '*************************************************************************
  877. FUNCTION IsDateLater (DateOld$, DateNew$) STATIC AS INTEGER
  878.  
  879.     'First compare year
  880.  
  881.     OldYear% = GetYearFromDate (DateOld$)
  882.     NewYear% = GetYearFromDate (DateNew$)
  883.  
  884.     IF NewYear% < OldYear% THEN
  885.         IsDateLater = 0
  886.  
  887.     ELSEIF NewYear% = OldYear% THEN
  888.  
  889.         'If year is the same, compare month
  890.  
  891.         OldMonth% = GetMonthFromDate (DateOld$)
  892.         NewMonth% = GetMonthFromDate (DateNew$)
  893.  
  894.         IF NewMonth% < OldMonth% THEN
  895.             IsDateLater = 0
  896.  
  897.         ELSEIF NewMonth% = OldMonth% THEN
  898.  
  899.             'If month is the same, compare day
  900.  
  901.             OldDay% = GetDayFromDate (DateOld$)
  902.             NewDay% = GetDayFromDate (DateNew$)
  903.  
  904.             IF NewDay% <= OldDay% THEN
  905.                 IsDateLater = 0
  906.             ELSE
  907.                 IsDateLater = 1
  908.             END IF
  909.  
  910.         ELSE
  911.             IsDateLater = 1
  912.         END IF
  913.  
  914.     ELSE
  915.         IsDateLater = 1
  916.     ENDIF
  917.  
  918. END FUNCTION
  919.  
  920.  
  921.  
  922.  
  923. '**
  924. '** Purpose:
  925. '**     Appends a file name to the end of a directory path,
  926. '**     inserting a backslash character as needed.
  927. '** Arguments:
  928. '**     szDir$  - full directory path (with optional ending "\")
  929. '**     szFile$ - filename to append to directory
  930. '** Returns:
  931. '**     Resulting fully qualified path name.
  932. '*************************************************************************
  933. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  934.     IF szDir$ = "" THEN
  935.         MakePath = szFile$
  936.     ELSEIF szFile$ = "" THEN
  937.         MakePath = szDir$
  938.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  939.         MakePath = szDir$ + szFile$
  940.     ELSE
  941.         MakePath = szDir$ + "\" + szFile$
  942.     END IF
  943. END FUNCTION
  944.  
  945.  
  946.