home *** CD-ROM | disk | FTP | other *** search
/ Chip 1996 October / CHIP_CD_1996_10_PL.iso / software / ktest / saps / windows / install.mst < prev    next >
Encoding:
Text File  |  1996-01-11  |  16.5 KB  |  592 lines

  1. '**************************************************************************
  2. '* Script d'Installation de SAPS 2.11 (voir SPINST.INC)
  3. '* Install Script for SAPS 2.11 (see SPINST.INC)
  4. '**************************************************************************
  5.  
  6. '$INCLUDE 'setupapi.inc'
  7. '$INCLUDE 'msdetect.inc'
  8.  
  9. ''Dialog ID's
  10. CONST WELCOME                   = 100
  11. CONST ASKQUIT                   = 200
  12. CONST DESTPATH                  = 300
  13. CONST EXITFAILURE               = 400
  14. CONST EXITQUIT                  = 600
  15. CONST EXITQUIT1                 = 650
  16. CONST EXITSUCCESS               = 700
  17. CONST APPHELP                   = 900
  18. CONST EXITSUCCESSANDREBOOT      = 1000
  19. CONST ASKFORREBOOT              = 1100
  20. CONST SHOWINSTALLPATH           = 1200
  21. CONST CDSERNB                   = 1300
  22. CONST CDCOMPNAME                = 1400
  23. CONST TOOBIG                    = 6300
  24. CONST BADPATH                   = 6400
  25.  
  26. ''Bitmap ID
  27. CONST LOGO = 1
  28.  
  29. GLOBAL DEST$            ''Default destination directory.
  30. GLOBAL WINDIR$
  31. GLOBAL SYSINI$
  32. GLOBAL CTLINI$
  33. GLOBAL SYSOLD$
  34. GLOBAL CTLOLD$
  35. GLOBAL SAPSUSER$
  36. GLOBAL RestoreIniFlag%
  37.  
  38. GLOBAL WINDRIVE$        ''Windows drive letter.
  39.  
  40. ''CustInst list symbol names
  41. GLOBAL APPNEEDS$        ''Option list costs per drive
  42. GLOBAL EXTRACOSTS$      ''List of extra costs to add per drive
  43. GLOBAL DESTSPACEOK$
  44.  
  45. GLOBAL LANG%
  46. GLOBAL TYPESAPS%
  47. GLOBAL SITE%
  48.  
  49. ''Install Dialog list symbol names
  50. GLOBAL CHECKSTATES$
  51. GLOBAL STATUSTEXT$
  52. GLOBAL DRIVETEXT$
  53.  
  54. DECLARE SUB InstallFiles
  55. DECLARE SUB UpdateIniFiles
  56. DECLARE SUB RestoreIniFiles
  57.  
  58. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  59. DECLARE SUB RecalcSpaceNeeded
  60. DECLARE SUB SetDriveStatus
  61.  
  62. INIT:
  63.  
  64. '$INCLUDE 'spinst.inc'
  65.  
  66.  
  67.     IF LANG = 0 THEN
  68.         IF TYPESAPS% = 0 THEN
  69.             SetTitle "Installation de SAPS pour Windows"
  70.         ELSE
  71.             SetTitle "Installation du Client SAPS pour Windows"
  72.         END IF
  73.     ELSE
  74.         IF TYPESAPS% = 0 THEN
  75.             SetTitle "SAPS for Windows Setup Program"
  76.         ELSE
  77.             SetTitle "SAPS Client for Windows Setup Program"
  78.         END IF
  79.     END IF
  80.  
  81.     SetAbout "SpartaCom Asynchronous Port Sharing","Copyright (c) 1993-1994 SpartaCom S.A."
  82.     CUIDLL$ = "mscuistf.dll"        ''Custom user interface dll
  83.     HELPPROC$ = "FHelpDlgProc"      ''Help dialog procedure
  84.  
  85.     SetBitmap CUIDLL$, LOGO
  86.  
  87.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  88.     IF szInf$ = "" THEN
  89.         szInf$ = GetSymbolValue("STF_CWDDIR") + "INSTALL.INF"
  90.     END IF
  91.     ReadInfFile szInf$
  92.  
  93.     WINDIR$ = GetWindowsDir()
  94.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  95.     DEST$=WINDRIVE$ + ":\SAPS"
  96.     SYSINI$ = "SYSTEM.INI"
  97.     SYSINIFILE$ = MakePath (WINDIR$,SYSINI$)
  98.     SYSOLD$ = "SYSOLD.INI"
  99.     IF TYPESAPS% = 0 THEN
  100.         CTLINI$ = "CONTROL.INI"
  101.         CTLOLD$ = "CTLOLD.INI"
  102.     END IF
  103.     RestoreIniFlag% = 0
  104.  
  105.     ''Install list symbols for FCustinstDlgProc
  106.     CHECKSTATES$ = "CheckItemsState"
  107.     STATUSTEXT$ = "StatusItemsText"
  108.     DRIVETEXT$ = "DriveStatusText"
  109.     FOR i% = 1 TO 7 STEP 1
  110.         AddListItem DRIVETEXT$, ""
  111.     NEXT i%
  112.     ReplaceListItem DRIVETEXT$, 7, DEST$
  113.  
  114.     ''Disk cost list symbols
  115.     APPNEEDS$ = "AppNeeds"
  116.     EXTRACOSTS$ = "ExtraCosts"
  117.     FOR i% = 1 TO 26 STEP 1
  118.         AddListItem EXTRACOSTS$, "0"
  119.     NEXT i%
  120.  
  121. '$IFDEF DEBUG
  122.     i% = SetSizeCheckMode(scmOnIgnore)      '' could use scmOff; def = scmOnFatal
  123.     WinDrive$ = MID$(GetWindowsDir, 1, 1)
  124.     IF IsDriveValid(WinDrive$) = 0 THEN
  125.         i% = DoMsgBox("Le lecteur de Windows ('"+WinDrive$+"') est invalide.", "Diagnostic", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  126.         GOTO QUIT
  127.     END IF
  128. '$ENDIF ''DEBUG
  129.  
  130.  
  131. WELCOME:
  132.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  133.     IF sz$ = "CONTINUE" THEN
  134.         UIPop 1
  135.     ELSE
  136.         GOSUB ASKQUIT
  137.         GOTO WELCOME
  138.     END IF
  139.  
  140. SERIALNB:
  141.     IF SITE% = 0 THEN
  142.         sz$ = UIStartDlg(CUIDLL$, CDSERNB, "FSerNbDlgProc", APPHELP, HELPPROC$)
  143.         IF sz$ = "CONTINUE" THEN
  144.             UIPop 1
  145.         ELSE
  146.             GOSUB ASKQUIT
  147.             GOTO SERIALNB
  148.         END IF
  149.     END IF
  150.  
  151. COMPNAME:
  152.     CompName$ = GetIniKeyString(SYSINIFILE$,"Network","ComputerName")
  153.     IF CompName$ = "" THEN
  154.         sz$ = UIStartDlg(CUIDLL$, CDCOMPNAME, "FCompNameDlgProc", APPHELP, HELPPROC$)
  155.         IF sz$ = "CONTINUE" THEN
  156.             UIPop 1
  157.         ELSE
  158.             GOSUB ASKQUIT
  159.             GOTO COMPNAME
  160.         END IF
  161.     END IF
  162.  
  163. SEARCHDESTPATH:
  164.     WinPath$ = GetWindowsDir()
  165.     SAPSUSER$ = MakePath(WinPath$, "SAPSUSER.INI")
  166.     IF DoesIniKeyExist(SAPSUSER$, "SPORTMAN", "WorkingDirectory") THEN
  167.         DIRDEST$ = GetIniKeyString(SAPSUSER$, "SPORTMAN", "WorkingDirectory")
  168.         IF IsDirWritable(DIRDEST$) THEN
  169.             DEST$=DIRDEST$
  170.             ReplaceListItem DRIVETEXT$, 7, DEST$
  171.         END IF
  172.     END IF
  173.  
  174. SHOWINSTALL:
  175.     RecalcSpaceNeeded
  176.     SetDriveStatus
  177.  
  178.     sz$ = UIStartDlg(CUIDLL$, SHOWINSTALLPATH, "FCustInstDlgProc", APPHELP, HELPPROC$)
  179.     IF sz$ = "CONTINUE" THEN
  180.         ''Install only if it will fit.
  181.         IF DESTSPACEOK$ <> "YES" THEN
  182.             GOSUB TOOBIG
  183.             GOTO SHOWINSTALL
  184.         END IF
  185.         UIPop 1
  186.         GOTO INSTALL
  187.     ELSEIF sz$ = "PATH" THEN
  188.         GOSUB GETPATH
  189.         GOTO SHOWINSTALL
  190.  
  191.     ELSEIF sz$ = "BACK" THEN
  192.         UIPop 1
  193.         GOTO SERIALNB
  194.     ELSEIF sz$ = "REACTIVATE" THEN
  195.         RecalcSpaceNeeded
  196.         SetDriveStatus
  197.         GOTO SHOWINSTALL
  198.     ELSE
  199.         GOSUB ASKQUIT
  200.         GOTO SHOWINSTALL
  201.     END IF
  202.  
  203. GETPATH:
  204.     SetSymbolValue "EditTextIn", DEST$
  205.     SetSymbolValue "EditFocus", "END"
  206.  
  207. GETPATHL1:
  208.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  209.     IF sz$ = "CONTINUE" THEN
  210.         NEWDEST$ = GetSymbolValue("EditTextOut")
  211.         IF IsDirWritable(NEWDEST$) = 0 THEN
  212.             GOSUB BADPATH
  213.             GOTO GETPATHL1
  214.         END IF
  215.         UIPop 1
  216.         DEST$=NEWDEST$
  217.         ''Truncate display if too long.
  218.         IF LEN(DEST$) > 23 THEN
  219.             ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  220.         ELSE
  221.             ReplaceListItem DRIVETEXT$, 7, DEST$
  222.         END IF
  223.     ELSEIF sz$ = "REACTIVATE" THEN
  224.         RecalcSpaceNeeded
  225.         SetDriveStatus
  226.         GOTO GETPATHL1
  227.     ELSEIF sz$ = "BACK" THEN
  228.         UIPop 1
  229.     ELSE
  230.         GOSUB ASKQUIT
  231.         GOTO GETPATH
  232.     END IF
  233.     RETURN
  234.  
  235. INSTALL:
  236.     InstallFiles
  237.  
  238. QUIT:
  239.     ON ERROR GOTO ERRQUIT
  240.  
  241.     IF ERR = 0 THEN
  242.         dlg% = EXITSUCCESSANDREBOOT
  243.     ELSEIF ERR = STFQUIT THEN
  244.         dlg% = EXITQUIT
  245.     ELSE
  246.         dlg% = EXITFAILURE
  247.     END IF
  248.  
  249. QUITL1:
  250.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  251.     IF sz$ = "REACTIVATE" THEN
  252.         GOTO QUITL1
  253.     END IF
  254.     UIPop 1
  255.     IF dlg% = EXITSUCCESSANDREBOOT THEN
  256.         IF sz$ = "EXIT" THEN
  257.                         MSRSTRT$ = MakePath(DEST$, "_MSRSTRT.EXE")
  258.                         WHILE ExitWindowsExec(MSRSTRT$, "") = 0
  259.                                 GOSUB ASKREBOOT
  260.                         WEND
  261.         ELSE
  262.             IF RestartListEmpty() <> 1 THEN
  263.                 sz$ = UIStartDlg(CUIDLL$, EXITQUIT1, "FQuitDlgProc", 0, "")
  264.                 UIPopAll
  265.             END IF
  266.         END IF
  267.     ELSEIF dlg% <> EXITSUCCESS THEN
  268.         '' Installation fails. Restore INI files
  269.         IF RestoreIniFlag% = 1 THEN
  270.             RestoreIniFiles
  271.         END IF
  272.     END IF
  273.  
  274.     END
  275.  
  276. ERRQUIT:
  277.     i% = DoMsgBox("Les fichiers du programme d'installation ont ΘtΘ corrompus, contactez le service de support technique du produit !", "Message du programme d'installation", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  278.     END
  279.  
  280. TOOBIG:
  281.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  282.     IF sz$ = "REACTIVATE" THEN
  283.         RecalcSpaceNeeded
  284.         SetDriveStatus
  285.         GOTO TOOBIG
  286.     END IF
  287.     UIPop 1
  288.     RETURN
  289.  
  290. BADPATH:
  291.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  292.     IF sz$ = "REACTIVATE" THEN
  293.         GOTO BADPATH
  294.     END IF
  295.     UIPop 1
  296.     RETURN
  297.  
  298. ASKQUIT:
  299.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  300.     IF sz$ = "EXIT" THEN
  301.         UIPopAll
  302.         ERROR STFQUIT
  303.     ELSEIF sz$ = "REACTIVATE" THEN
  304.         GOTO ASKQUIT
  305.     ELSE
  306.         UIPop 1
  307.     END IF
  308.     RETURN
  309.  
  310. ASKREBOOT:
  311.     sz$ = UIStartDlg(CUIDLL$, ASKFORREBOOT, "FQuitDlgProc", 0, "")
  312.     IF sz$ = "EXIT" THEN
  313.         GOSUB ASKQUIT
  314.         GOTO ASKREBOOT
  315.     ELSEIF sz$ = "REACTIVATE" THEN
  316.         GOTO ASKREBOOT
  317.     ELSE
  318.         UIPop 1
  319.     END IF
  320.     RETURN
  321.  
  322. '**
  323. '** Purpose:
  324. '**      Builds the copy list and performs all installation operations.
  325. '** Arguments:
  326. '**      none.
  327. '** Returns:
  328. '**      none.
  329. '*************************************************************************
  330.  
  331. SUB InstallFiles STATIC
  332.  
  333.     WINDIR$ = GetWindowsDir()
  334.     SYSINI$ = "SYSTEM.INI"
  335.     SYSINIFILE$ = MakePath(WINDIR$, SYSINI$)
  336.     WinSysDir$ = GetWindowsSysDir()
  337.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  338.     CreateDir DEST$, cmoNone
  339.  
  340.     OpenLogFile MakePath(DEST$, "LOGFILE.OUT"), 0
  341.     IF LANG% = 0 THEN
  342.         WriteToLogFile "Installation de SAPS"
  343.         WriteToLogFile "--------------------"
  344.         WriteToLogFile "Répertoire d'installation : '" + DEST$ + "'"
  345.     ELSE
  346.         WriteToLogFile "SAPS Installation"
  347.         WriteToLogFile "-----------------"
  348.         WriteToLogFile "Destination Path : '" + DEST$ + "'"
  349.     END IF
  350.     WriteToLogFile ""
  351.     WriteToLogFile ""
  352.  
  353.     ClearCopyList
  354.     AddSectionFilesToCopyList "Files", SrcDir$, DEST$
  355.     AddSectionFilesToCopyList "System_Files", SrcDir$, WinSysDir$
  356.  
  357.     SetRestartDir DEST$
  358.  
  359.     CopyFilesInCopyList
  360.  
  361.     COMMDRV$ = GetIniKeyString(SYSINIFILE$, "BOOT", "comm.drv")
  362.     IF UCASE$(COMMDRV$) <> "SPCOMM.DRV" THEN
  363.         IF UCASE$(COMMDRV$) = "COMM.DRV" THEN
  364.             OLDCOMMDRV$ = MakePath(WinSysDir$, COMMDRV$)
  365.             NEWCOMMDRV$ = MakePath(WinSysDir$, "mscomm.drv")
  366.             CopyFile OLDCOMMDRV$, NEWCOMMDRV$, cmoOverwrite, 0
  367.             CreateIniKeyValue MakePath(WINDIR$, "SAPS.INI"), "SAPS", "comm.drv", "mscomm.drv", cmoOverwrite
  368.         ELSE
  369.             CreateIniKeyValue MakePath(WINDIR$, "SAPS.INI"), "SAPS", "comm.drv", COMMDRV$, cmoOverwrite
  370.         END IF
  371.     END IF
  372.  
  373.     IF TYPESAPS% = 0 THEN
  374.         SPSRV$ = MakePath(WINDIR$, "SPSRV.INI")
  375.         CreateIniKeyValue SPSRV$, "SERVER", "WorkingDirectory", DEST$, cmoOverwrite
  376.         CreateIniKeyValue SPSRV$, "SERVER", "Visible", "1", cmoOverwrite
  377.     END IF
  378.     CreateIniKeyValue SAPSUSER$, "SPORTMAN", "WorkingDirectory", DEST$, cmoOverwrite
  379.     CreateIniKeyValue SAPSUSER$, "SPORTMAN", "SW", "1", cmoOverwrite
  380.     CreateIniKeyValue SAPSUSER$, "SPORTMAN", "X", "50", cmoOverwrite
  381.     CreateIniKeyValue SAPSUSER$, "SPORTMAN", "Y", "100", cmoOverwrite
  382.     CreateIniKeyValue SAPSUSER$, "SPORTMAN", "CX", "500", cmoOverwrite
  383.     CreateIniKeyValue SAPSUSER$, "SPORTMAN", "CY", "250", cmoOverwrite
  384.         IF TYPESAPS% = 0 THEN
  385.                 CreateIniKeyValue SAPSUSER$, "SPORTMAN", "Server", "1", cmoOverwrite
  386.         ENDIF
  387.     
  388.     CursorSave% = ShowWaitCursor()
  389.     UpdateIniFiles
  390.  
  391.     CreateProgmanGroup "SAPS", "" , cmoNone
  392.     ShowProgmanGroup "SAPS", 1 , cmoNone
  393.     IF LANG% = 0 THEN
  394.                 CreateProgmanItem "SAPS", "Gestionnaire de ports asynchrones", MakePath(DEST$, "SPORTMAN.EXE"), "", cmoOverwrite
  395.         CreateProgmanItem "SAPS", "Aide du gestionnaire", MakePath(WinDir$, "WINHELP.EXE "+MakePath(DEST$, "SPORTMAN.HLP")), "", cmoOverwrite
  396.         IF TYPESAPS% = 0 THEN
  397.             CreateProgmanItem "SAPS", "Serveur SAPS", MakePath(DEST$, "SPSRV.EXE"), "", cmoOverwrite
  398.             CreateProgmanItem "SAPS", "Aide du serveur", MakePath(WinDir$, "WINHELP.EXE "+MakePath(DEST$, "SPSRV.HLP")), "", cmoOverwrite
  399.         END IF
  400.         CreateProgmanItem "SAPS", "Lisez moi", MakePath(WinDir$, "WRITE.EXE "+MakePath(DEST$, "LISEZMOI.WRI")), "", cmoOverwrite
  401.     ELSE
  402.         CreateProgmanItem "SAPS", "Asynchronous Port Manager", MakePath(DEST$, "SPORTMAN.EXE"),"", cmoOverwrite
  403.         CreateProgmanItem "SAPS", "SAPS Help", MakePath(WinDir$, "WINHELP.EXE "+MakePath(DEST$, "SPORTMAN.HLP")), "", cmoOverwrite
  404.         IF TYPESAPS% = 0 THEN
  405.             CreateProgmanItem "SAPS", "SAPS Server", MakePath(DEST$, "SPSRV.EXE"), "", cmoOverwrite
  406.             CreateProgmanItem "SAPS", "Server Help", MakePath(WinDir$, "WINHELP.EXE "+MakePath(DEST$, "SPSRV.HLP")), "", cmoOverwrite
  407.             CreateProgmanItem "SAPS", "SpartaCom Upgrades", MakePath(WinDir$, "WRITE.EXE "+MakePath(DEST$, "UPGRADES.WRI")), "", cmoOverwrite
  408.         END IF
  409.         CreateProgmanItem "SAPS", "Read me", MakePath(WinDir$, "WRITE.EXE "+MakePath(DEST$, "README.WRI")), "", cmoOverwrite
  410.     ENDIF
  411.     RestoreCursor CursorSave%
  412.  
  413.     CloseLogFile
  414. END SUB
  415.  
  416.  
  417. '**
  418. '** Purpose:
  419. '**      Save .INI files to .OLD and Update .INI files
  420. '** Arguments:
  421. '**      none.
  422. '** Returns:
  423. '**      none.
  424. '*************************************************************************
  425.  
  426. SUB UpdateIniFiles STATIC
  427.  
  428.     WINDIR$ = GetWindowsDir()
  429.     SYSINI$ = "SYSTEM.INI"
  430.     SYSINIFILE$ = MakePath(WINDIR$, SYSINI$)
  431.     WinSysDir$ = GetWindowsSysDir()
  432.  
  433.     CopyFile SYSINIFILE$, MakePath(DEST$, SYSOLD$), cmoOverwrite+cmoReadOnly, 0
  434.     CreateIniKeyValue SYSINIFILE$, "boot", "comm.drv", "spcomm.drv", cmoOverwrite
  435.  
  436.     IF TYPESAPS% = 0 THEN
  437.         CTLINIFILE$ = MakePath(WINDIR$, CTLINI$)
  438.         CopyFile CTLINIFILE$, MakePath(DEST$, CTLOLD$), cmoOverwrite+cmoReadOnly, 0
  439.         CreateIniKeyValue CTLINIFILE$, "mmcpl", "SAPSServer", MakePath(DEST$, "CPLSAPS.DLL"), cmoOverwrite
  440.     END IF
  441.  
  442.     NETHEAP$ = GetIniKeyString(SYSINIFILE$, "386Enh", "NetHeapSize")
  443.     IF VAL(NETHEAP$) < 28 THEN
  444.         CreateIniKeyValue SYSINIFILE$, "386Enh", "NetHeapSize", "28", cmoOverwrite
  445.     END IF
  446.     IF DoesIniSectionExist(SYSINIFILE$, "Standard") THEN
  447.         NETHEAP$ = GetIniKeyString(SYSINIFILE$, "Standard", "NetHeapSize")
  448.         IF VAL(NETHEAP$) < 28 THEN
  449.             CreateIniKeyValue SYSINIFILE$, "Standard", "NetHeapSize", "28", cmoOverwrite
  450.         END IF
  451.     END IF
  452.     RestoreIniFlag% = 1
  453. END SUB
  454.  
  455. '**
  456. '** Purpose:
  457. '**      Restore .INI files to previous contents
  458. '** Arguments:
  459. '**      none.
  460. '** Returns:
  461. '**      none.
  462. '*************************************************************************
  463.  
  464. SUB RestoreIniFiles STATIC
  465.  
  466.     WinSysDir$ = GetWindowsSysDir()
  467.  
  468.     CopyFile MakePath(DEST$, SYSOLD$), MakePath(WINDIR$, SYSINI$), cmoOverwrite, 0
  469.     RemoveFile MakePath(DEST$, SYSOLD$), cmoForce
  470.     IF TYPESAPS% = 0 THEN
  471.             CopyFile MakePath(DEST$, CTLOLD$), MakePath(WINDIR$, CTLINI$), cmoOverwrite, 0
  472.             RemoveFile MakePath(DEST$, CTLOLD$), cmoForce
  473.     END IF
  474.  
  475.     RestoreIniFlag% = 0
  476. END SUB
  477.  
  478. '**
  479. '** Purpose:
  480. '**      Recalculates disk space for the given option files and sets
  481. '**      the status info symbol "StatusItemsText".
  482. '** Arguments:
  483. '**      none
  484. '** Returns:
  485. '**      none.
  486. '*************************************************************************
  487.  
  488. SUB RecalcSpaceNeeded STATIC
  489.  
  490.     CursorSave% = ShowWaitCursor()
  491.     WinSysDir$ = GetWindowsSysDir()
  492.  
  493.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  494.  
  495.     ClearCopyList
  496.     AddSectionFilesToCopyList "Files", SrcDir$, DEST$
  497.     AddSectionFilesToCopyList "System_Files", SrcDir$, WinSysDir$
  498.  
  499.  
  500.     dstdrive$ = MID$(DEST$, 1, 1)
  501.     wdrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  502.     ndrive% = ASC(ucase$(dstdrive$)) - ASC("A") + 1
  503.  
  504.         cost& = GetSizeOfFile(MakePath(WINDIR$, SYSINI$))
  505.     IF TYPESAPS% = 0 THEN
  506.         cost& = cost&+GetSizeOfFile(MakePath(WINDIR$, CTLINI$))
  507.     END IF
  508.  
  509.     IF dstdrive$ = WINDRIVE$ THEN
  510.         ''Add all extra cost to destination drive
  511.         ReplaceListItem EXTRACOSTS$, ndrive%, STR$(cost&+11264)
  512.     ELSE
  513.         ''Add extra cost to Windows drive for ini/progman, etc.
  514.         ReplaceListItem EXTRACOSTS$, ndrive%, STR$(cost&)
  515.         ReplaceListItem EXTRACOSTS$, wdrive%, "11264"
  516.     END IF
  517.  
  518.     StillNeed& = GetCopyListCost(EXTRACOSTS$, APPNEEDS$, "")
  519.  
  520.     IF StillNeed& > 0 THEN
  521.         DESTSPACEOK$ = "NO"
  522.     ELSE
  523.         DESTSPACEOK$ = "YES"
  524.     END IF
  525.  
  526.     RestoreCursor CursorSave%
  527. END SUB
  528.  
  529. '**
  530. '** Purpose:
  531. '**      Appends a file name to the end of a directory path,
  532. '**      inserting a backslash character as needed.
  533. '** Arguments:
  534. '**      szDir$  - full directory path (with optional ending "\")
  535. '**      szFile$ - filename to append to directory
  536. '** Returns:
  537. '**      Resulting fully qualified path name.
  538. '*************************************************************************
  539.  
  540. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  541.  
  542.     IF szDir$ = "" THEN
  543.         MakePath = szFile$
  544.     ELSEIF szFile$ = "" THEN
  545.         MakePath = szDir$
  546.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  547.         MakePath = szDir$ + szFile$
  548.     ELSE
  549.         MakePath = szDir$ + "\" + szFile$
  550.     END IF
  551. END FUNCTION
  552.  
  553.  
  554. '**
  555. '** Purpose:
  556. '**      Sets drive status info according to latest disk space calcs.
  557. '** Arguments:
  558. '**      none.
  559. '** Returns:
  560. '**      none.
  561. '*************************************************************************
  562.  
  563. SUB SetDriveStatus STATIC
  564.  
  565.     drive$ = MID$(DEST$, 1, 1)
  566.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  567.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  568.     free& = GetFreeSpaceForDrive(drive$)
  569.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  570.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " Ko"
  571.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " Ko"
  572.  
  573.     IF drive$ = WINDRIVE$ THEN
  574.         ReplaceListItem DRIVETEXT$, 4, ""
  575.         ReplaceListItem DRIVETEXT$, 5, ""
  576.         ReplaceListItem DRIVETEXT$, 6, ""
  577.     ELSE
  578.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  579.         cost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  580.         IF cost& = 0 THEN
  581.             ReplaceListItem DRIVETEXT$, 4, ""
  582.             ReplaceListItem DRIVETEXT$, 5, ""
  583.             ReplaceListItem DRIVETEXT$, 6, ""
  584.         ELSE
  585.             free& = GetFreeSpaceForDrive(WINDRIVE$)
  586.             ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  587.             ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " Ko"
  588.             ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " Ko"
  589.         END IF
  590.     END IF
  591. END SUB
  592.