home *** CD-ROM | disk | FTP | other *** search
/ Chip Multimedia 1993 January / chip_mm_1.iso / sample2.mst < prev    next >
Encoding:
Text File  |  1993-11-02  |  16.1 KB  |  537 lines

  1. '**************************************************************************
  2. '*                       MSSetup Toolkit Sample 2
  3. '**************************************************************************
  4. ''$DEFINE DEBUG
  5.  
  6. '$INCLUDE 'setupapi.inc'
  7. '$INCLUDE 'msdetect.inc'
  8.  
  9. ''Dialog ID's
  10. CONST ASKQUIT      = 200
  11. CONST SINGLELIST     = 1900
  12. CONST EXITFAILURE  = 400
  13. CONST EXITQUIT     = 600
  14. CONST EXITSUCCESS  = 700
  15. CONST OPTIONS      = 800
  16. CONST APPHELP      = 900
  17. CONST CUSTINST     = 6200
  18. CONST TOOBIG       = 6300
  19. CONST BADPATH      = 6400
  20.  
  21. ''Bitmap ID
  22. CONST LOGO         = 1
  23.  
  24. ''File Types
  25. CONST appfiles     = 3
  26. CONST optfiles1    = 2
  27. CONST deffiles     = 1
  28. CONST optfiles3    = 4
  29.  
  30.  
  31. GLOBAL DEST$        ''Default destination directory.
  32. GLOBAL WINDRIVE$    ''Windows drive letter.
  33. GLOBAL WINDRIVEFULL$
  34. GLOBAL WINSYSDRIVE$     ''Option selection from optfiles2 option dialog.
  35. GLOBAL ISSELECTED$
  36. GLOBAL HardDrive$
  37. GLOBAL FloppyDrive$
  38.  
  39. ''CustInst list symbol names
  40. GLOBAL APPNEEDS$    ''Option list costs per drive
  41. GLOBAL OPT1NEEDS$
  42. GLOBAL OPT3NEEDS$
  43. GLOBAL DEFNEEDS$
  44. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  45. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  46.  
  47. ''Dialog list symbol names
  48. GLOBAL CHECKSTATES$
  49. GLOBAL STATUSTEXT$
  50. GLOBAL DRIVETEXT$
  51. GLOBAL OPTIONSGREYED$
  52.  
  53. DECLARE SUB AddOptFilesToCopyList (ftype%)
  54. DECLARE SUB RecalcOptFiles (ftype%)
  55. DECLARE SUB RecalcPath
  56. DECLARE SUB SetDriveStatus
  57. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  58. DECLARE FUNCTION BigWindow LIB "mscuistf.dll" (hWindow%) AS INTEGER
  59.  
  60. INIT:
  61.     CUIDLL$ = "mscuistf.dll"            ''custom user interface dll
  62.  
  63.  
  64.     hWindow% = HwndFrame()
  65.     bla% = BigWindow(hWindow%)
  66.  
  67.     SetBitmap    CUIDLL$,LOGO
  68.     SetTitle "CHIP Multimedia-CD"
  69.  
  70.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  71.     IF szInf$ = "" THEN
  72.         szInf$ = GetSymbolValue("STF_CWDDIR") + "Setup.INF"
  73.     END IF
  74.     ReadInfFile szInf$
  75.  
  76.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  77.     WINDRIVEFULL$ = GetWindowsDir
  78.     WINSYSDRIVE$ = GetWindowsSysDir
  79.     DEST$ = "C:\MM_CHIP\"
  80.  
  81.     ''CustInst list symbols
  82.     CHECKSTATES$ = "CheckItemsState"
  83.     STATUSTEXT$  = "StatusItemsText"
  84.     DRIVETEXT$   = "DriveStatusText"
  85.     OPTIONSGREYED$ = "OptionsGreyed"
  86.  
  87.     FOR i% = 1 TO 4 STEP 1
  88.         AddListItem CHECKSTATES$, "ON"
  89.     NEXT i%
  90.     ReplaceListItem CHECKSTATES$,2, "OFF"
  91.  
  92.     FOR i% = 1 TO 6 STEP 1
  93.         AddListItem STATUSTEXT$, ""
  94.     NEXT i%
  95.  
  96.     FOR i% = 1 TO 7 STEP 1
  97.         AddListItem DRIVETEXT$, ""
  98.     NEXT i%
  99.     ReplaceListItem DRIVETEXT$, 7, DEST$
  100.  
  101.     AddListItem OPTIONSGREYED$, "1"
  102.     AddListItem OPTIONSGREYED$, "0"
  103.     AddListItem OPTIONSGREYED$, "0"
  104.     AddListItem OPTIONSGREYED$, "0"
  105.  
  106.  
  107.     ''Disk cost list symbols
  108.     APPNEEDS$       = "AppNeeds"
  109.     OPT1NEEDS$      = "Opt1Needs"
  110.     OPT3NEEDS$      = "Opt3Needs"
  111.     DEFNEEDS$       = "DefNeeds"
  112.     EXTRACOSTS$     = "ExtraCosts"
  113.     BIGLIST$        = "BigList"
  114.     HardDrive$      = "HardDrive"
  115.     FloppyDrive$     = "FlopyDrive"
  116.  
  117.  
  118.     FOR i% = 1 TO 4 STEP 1
  119.         AddListItem BIGLIST$, ""
  120.     NEXT i%
  121.     FOR i% = 1 TO 26 STEP 1
  122.         AddListItem EXTRACOSTS$, "0"
  123.     NEXT i%
  124.  
  125.  
  126.     RecalcPath
  127.     SetDriveStatus
  128.  
  129. '$IFDEF DEBUG
  130.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  131. '$ENDIF ''DEBUG
  132.  
  133.  
  134.  
  135. CUSTINST:
  136.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  137.     IF sz$ = "CONTINUE" THEN
  138.         ''Install only if it will fit.
  139.         FOR i% = 1 TO 4 STEP 1
  140.             ''WriteToLogFile GetListItem(BIGLIST$, i%)
  141.             IF GetListItem(BIGLIST$, i%) <> "" THEN
  142.                 GOSUB TOOBIG
  143.                 GOTO CUSTINST
  144.             END IF
  145.         NEXT i%
  146.         UIPop 1
  147.         GOTO INSTALL
  148.     ELSEIF sz$ = "PATH" THEN
  149.  
  150.         GOTO GETPATH
  151.     ELSEIF sz$ = "CHK1" THEN
  152.         RecalcOptFiles DefFiles
  153.         SetDriveStatus
  154.         GOTO CUSTINST
  155.     ELSEIF sz$ = "CHK2" THEN
  156.         RecalcOptFiles optfiles1
  157.         SetDriveStatus
  158.         GOTO CUSTINST
  159.     ELSEIF sz$ = "CHK3" THEN
  160.         ''''''''pause "chk3"
  161.         RecalcOptFiles appfiles
  162.         SetDriveStatus
  163.         GOTO CUSTINST
  164.     ELSEIF sz$ = "CHK4" THEN
  165.         ''''''''pause "chk4"
  166.         RecalcOptFiles optfiles3
  167.         SetDriveStatus
  168.         GOTO CUSTINST
  169.     ELSEIF sz$ = "REACTIVATE" THEN
  170.      ''   ''''''pause "REACTIVATE"
  171.         RecalcPath
  172.         SetDriveStatus
  173.         GOTO CUSTINST
  174.     ELSE
  175.      ''   ''''''pause "ELSE"
  176.     GOSUB ASKQUIT
  177.         GOTO CUSTINST
  178.     END IF
  179.  
  180.  
  181.  
  182. INSTALL:
  183.     ClearCopyList
  184.     ISSELECTED$ = "0"
  185.     CreateDir MakePath(DEST$,""), cmoNone
  186.   ''  pause  MakePath(DEST$,"")
  187.     AddOptFilesToCopyList appfiles
  188.     AddOptFilesToCopyList optfiles1
  189.     AddOptFilesToCopyList optfiles3
  190.     AddOptFilesToCopyList deffiles
  191.  
  192.  
  193.     CopyFilesInCopyList
  194.  
  195.     CopyFile WINDRIVEFULL$+"WIN.INI", WINDRIVEFULL$+"WIN.CHP",cmoOverwrite,0
  196.     CopyFile WINDRIVEFULL$+"SYSTEM.INI", WINDRIVEFULL$+"SYSTEM.CHP",cmoOverwrite,0
  197.     CopyFile "c:\autoexec.bat", "c:\autoexec.CHP",cmoOverwrite,0
  198.     prependtopath "c:\autoexec.CHP","c:\autoexec.bat", MakePath(DEST$,""),cmoNone
  199.  
  200.     CreateIniKeyValue "WIN.INI", "Extensions", "Tbk", MakePath(DEST$,"tbook.exe ^.tbk "), cmoNone
  201.     CreateIniKeyValue "WIN.INI", "Extensions", "Txt", WINDRIVEFULL$ +"notepad.exe ^.txt ", cmoNone
  202.     CreateIniKeyValue "WIN.INI", "mci Extensions", "fli", "Animation1", cmoOverwrite
  203.     CreateIniKeyValue "WIN.INI", "mci Extensions", "flc", "Animation1", cmoOverwrite
  204.     CreateIniKeyValue "WIN.INI", "Toolbook", "CHIPPfad",MID$(GetSymbolValue("STF_SRCDIR"), 1, 1), cmoOverwrite
  205.     CreateIniKeyValue "WIN.INI", "Toolbook", "StartupSysBooks",MakePath(DEST$,"TBKMM.SBK"), cmoAppend
  206.     CreateIniKeyValue "WIN.INI", "aaplay animation", "DualScreen", "No", cmoOverwrite
  207.     CreateIniKeyValue "WIN.INI", "aaplay animation", "Fullscreen", "aavga.dll", cmoOverwrite
  208.     CreateIniKeyValue "WIN.INI", "aaplay animation", "WaveAudio", "c,522", cmoOverwrite
  209.     CreateIniKeyValue "WIN.INI", "aaplay animation", "Sequencer", "x,523", cmoOverwrite
  210.     CreateIniKeyValue WINDRIVEFULL$ + "system.ini", "Drivers", "VIDC.RT21", "indeo_u.drv", cmoOverwrite
  211.     CreateIniKeyValue WINDRIVEFULL$ + "system.ini", "Drivers", "VIDC.YVU9", "indeo_u.drv", cmoOverwrite
  212.     CreateIniKeyValue WINDRIVEFULL$ + "system.ini", "Drivers", "VIDC.IV31", "indeor3.drv", cmoOverwrite
  213.     CreateIniKeyValue WINDRIVEFULL$ + "system.ini", "Drivers", "MSVIDEO", "isvr.drv", cmoOverwrite
  214.     CreateIniKeyValue WINDRIVEFULL$+"SYSTEM.INI", "mci", "Animation1", "mciaap.drv", cmoOverwrite
  215.  
  216.     IF GetListItem(CHECKSTATES$, optfiles3) = "ON" THEN
  217.             CreateIniKeyValue WINDRIVEFULL$ + "system.ini", "Drivers", "VIDC.MSVC", "msvidc.drv", cmoOverwrite
  218.             CreateIniKeyValue "WIN.INI", "mci extensions", "avi", "AVIVideo", cmoOverwrite
  219.             CreateIniKeyValue WINDRIVEFULL$ + "system.ini", "mci", "AVIVideo", "mciavi.drv", cmoOverwrite
  220.  
  221.         Run ("regedit.exe /s " + MakePath(WINDRIVEFULL$, "mplayer.reg"))
  222.  
  223.     ''    Run ("profdisp")
  224.  
  225.     END IF
  226.     IF GetListItem(CHECKSTATES$, optfiles1) = "ON" THEN
  227.         CreateIniKeyValue WINDRIVEFULL$+"SYSTEM.INI", "drivers", "wave", "speaker.drv", cmoOverwrite
  228.  
  229.     END IF
  230.  
  231.     IF GetListItem(CHECKSTATES$, appfiles) = "ON" THEN
  232.         CreateProgmanGroup "CHIP", "", cmoNone
  233.         ShowProgmanGroup  "CHIP", 1, cmoNone
  234.         CreateProgmanItem "CHIP", "Multimedia-CD", MakePath(DEST$,"CHIP_CD.TBK"), MakePath(DEST$,"setup.ico"), cmoOverwrite
  235.           CreateProgmanItem "CHIP", "ReadMe", MakePath(DEST$,"Readme.txt"), "", cmoOverwrite
  236.     END IF
  237.  
  238.        IF GetListItem(CHECKSTATES$, optfiles3) = "ON" THEN
  239.         CreateProgmanGroup "CHIP", "", cmoNone
  240.         ShowProgmanGroup  "CHIP", 1, cmoNone
  241.            CreateProgmanItem "CHIP", "MPlayer", MakePath(WINDRIVEFULL$,"mplayer.exe"),"", cmoOverwrite
  242.     END IF
  243.  
  244.  
  245.  
  246. QUIT:
  247.     ON ERROR GOTO ERRQUIT
  248.  
  249.     IF ERR = 0 THEN
  250.         dlg% = EXITSUCCESS
  251.     ELSEIF ERR = STFQUIT THEN
  252.         dlg% = EXITQUIT
  253.     ELSE
  254.         dlg% = EXITFAILURE
  255.     END IF
  256. QUITL1:
  257.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  258.     IF sz$ = "REACTIVATE" THEN
  259.         GOTO QUITL1
  260.     ELSEIF sz$ = "CONTINUE" THEN
  261.     if (dlg% = EXITSUCCESS) THEN
  262.             run WINDRIVEFULL$+"notepad.exe "+MakePath( GetSymbolValue("STF_SRCDIR")+"mm_chip\","Readme.txt")
  263.     END IF
  264.     END IF
  265.     UIPop 1
  266.     IF dlg% = EXITSUCCESS THEN    
  267.     i% = DoMsgBox("Sie sollten jetzt Windows neu starten, damit CHIP Multimedia-CD korrekt arbeiten kann.", "INFORMATION", MB_OK)
  268.     END IF
  269.     END
  270.  
  271.  
  272. ERRQUIT:
  273.     i% = DoMsgBox("Setup sources were corrupted, call 555-1212!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  274.     END
  275.  
  276.  
  277.  
  278. GETPATH:
  279.     GetLocalHardDrivesList (HardDrive$)
  280.     SetSymbolValue "ListItemsIn", HardDrive$
  281. GETPATHL1:
  282.     sz$ = UIStartDlg(CUIDLL$, SINGLELIST, "FListDlgProc", APPHELP, HELPPROC$)
  283.     IF sz$ = "CONTINUE" THEN
  284.         olddest$ = DEST$
  285.         DEST$ = UCASE$(GetSymbolValue("ListItemsOut"))+":\MM_CHIP\"
  286.           ''Validate new path.
  287.         IF IsDirWritable(DEST$) = 0 THEN
  288.             GOSUB BADPATH
  289.             GOTO GETPATHL1
  290.         END IF
  291.         UIPop 1
  292.  
  293.         ReplaceListItem DRIVETEXT$, 7, DEST$
  294.  
  295.         ''Recalc if path changed.
  296.         IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  297.             RecalcPath
  298.             SetDriveStatus
  299.         END IF
  300.  
  301.         olddest$ = ""
  302.         ''''''pause "vor GoTo CustInst"
  303.         GOTO CUSTINST
  304.     ELSEIF sz$ = "REACTIVATE" THEN
  305.         ''''''pause "reactivate"
  306.         RecalcPath
  307.         SetDriveStatus
  308.         GOTO GETPATHL1
  309.     ELSEIF sz$ = "EXIT" THEN
  310.         GOSUB ASKQUIT
  311.         GOTO GETPATHL1
  312.     ELSE
  313.         UIPop 1
  314.         GOTO CUSTINST
  315.     END IF
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322. TOOBIG:
  323.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  324.     IF sz$ = "REACTIVATE" THEN
  325.         RecalcPath
  326.         SetDriveStatus
  327.         GOTO TOOBIG
  328.     END IF
  329.     UIPop 1
  330.     RETURN
  331.  
  332.  
  333.  
  334. BADPATH:
  335.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  336.     IF sz$ = "REACTIVATE" THEN
  337.         RecalcPath
  338.         SetDriveStatus
  339.         GOTO BADPATH
  340.     END IF
  341.     UIPop 1
  342.     RETURN
  343.  
  344.  
  345.  
  346. ASKQUIT:
  347.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  348.  
  349.     IF sz$ = "EXIT" THEN
  350.         UIPopAll
  351.         ERROR STFQUIT
  352.     ELSEIF sz$ = "REACTIVATE" THEN
  353.         GOTO ASKQUIT
  354.     ELSE
  355.         UIPop 1
  356.     END IF
  357.     RETURN
  358.  
  359.  
  360.  
  361. '**
  362. '** Purpose:
  363. '**     Recalculates disk space for the given option files and sets
  364. '**     the status info symbol "StatusItemsText".
  365. '** Arguments:
  366. '**     ftype% - type of files to add, one of the following:
  367. '**             appfiles, optfiles1, optfiles2
  368. '** Returns:
  369. '**     none.
  370. '*************************************************************************
  371. SUB RecalcOptFiles (ftype%) STATIC
  372.  
  373.     CursorSave% = ShowWaitCursor()
  374.     ClearCopyList
  375.     AddOptFilesToCopyList ftype%
  376.  
  377.     fExtra% = 0
  378.     IF ftype% = APPFILES THEN
  379.         ListSym$ = APPNEEDS$
  380.     ELSEIF ftype% = OPTFILES1 THEN
  381.         ListSym$ = OPT1NEEDS$
  382.     ELSEIF ftype% = OPTFILES3 THEN
  383.         ListSym$ = OPT3NEEDS$
  384.     ELSEIF ftype% = DEFFILES THEN
  385.         ListSym$ = DEFNEEDS$
  386.         IF GetListItem(CHECKSTATES$, DEFFILES) = "ON" THEN
  387.             ''Add extra cost to Windows drive for ini/progman, etc.
  388.             ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  389.             ReplaceListItem EXTRACOSTS$, ndrive%, "496960"
  390.             fExtra% = 1
  391.         END IF
  392.  
  393.     END IF
  394.  
  395.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  396.     ''pause "Stillneeds: "+STR$(Stillneed&)+" von ListSym: "+ListSym$+" der Extracostliste: "
  397.     cost& = 0
  398.     FOR i% = 1 TO 6 STEP 1
  399.         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  400.         ''pause "cost = "+STR$(cost&)+" = "+"ListSym: "+ListSym$+ " Pfad: "+STR$(i%)
  401.     NEXT i%
  402.     ''pause "ReplaceListItem ftype, cost: "+STATUSTEXT$+"   "+STR$(ftype%)+"   "+STR$(cost& / 1024)
  403.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  404.  
  405.     IF StillNeed& > 0 THEN
  406.         ReplaceListItem BIGLIST$, ftype%, "YES"
  407.     ELSE
  408.         ReplaceListItem BIGLIST$, ftype%, ""
  409.     END IF
  410.  
  411.     IF fExtra% THEN
  412.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  413.     END IF
  414.     RestoreCursor CursorSave%
  415.     ListSym$ = ""
  416.  
  417. END SUB
  418.  
  419.  
  420. '**
  421. '** Purpose:
  422. '**     Adds the specified option files to the copy list.
  423. '** Arguments:
  424. '**     ftype%  - type of files to add, one of the following:
  425. '**             appfiles, optfiles1, optfiles2
  426. '** Returns:
  427. '**     none.
  428. '*************************************************************************
  429. SUB AddOptFilesToCopyList (ftype%) STATIC
  430.      ''pause "In AddOptFilesToCopyList   ftype: "+STR$(ftype%)+"   DEST$:  "+DEST$
  431.  
  432.      IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
  433.         SrcDir$ = GetSymbolValue("STF_SRCDIR")+"mm_chip\"
  434.         ''pause srcdir$
  435.         IF ftype% = appfiles THEN
  436.             AddSectionFilesToCopyList "appfiles", SrcDir$, DEST$
  437.         ELSEIF ftype% = optfiles1 THEN
  438.         AddSectionFilesToCopyList "optfiles1", SrcDir$, WINSYSDRIVE$
  439.         ELSEIF ftype% = optfiles3 THEN
  440.         AddSectionFilesToCopyList "MPlayer",SrcDir$+"winvideo\" , WINDRIVEFULL$
  441.         AddSectionFilesToCopyList "VfWRuntime",SrcDir$+"winvideo\"  ,WINSYSDRIVE$
  442.             AddSectionFilesToCopyList "AVICodecs",SrcDir$+"winvideo\" ,WINSYSDRIVE$
  443.         ELSEIF ftype% = deffiles THEN
  444.             AddSectionFilesToCopyList "system",SrcDir$ , WINSYSDRIVE$
  445.         END IF
  446.         SrcDir$ = ""
  447.     END IF
  448. END SUB
  449.  
  450.  
  451.  
  452.  
  453. '**
  454. '** Purpose:
  455. '**     Recalculates disk space and sets option status info according
  456. '**     to the current destination path.
  457. '** Arguments:
  458. '**     none.
  459. '** Returns:
  460. '**     none.
  461. '*************************************************************************
  462. SUB RecalcPath STATIC
  463.  
  464.     CursorSave% = ShowWaitCursor()
  465.  
  466.     RecalcOptFiles appfiles
  467.     RecalcOptFiles optfiles1
  468.     RecalcOptFiles optfiles3
  469.     RecalcOptFiles deffiles
  470.  
  471.     RestoreCursor CursorSave%
  472. END SUB
  473.  
  474.  
  475. '**
  476. '** Purpose:
  477. '**     Sets drive status info according to latest disk space calcs.
  478. '** Arguments:
  479. '**     none.
  480. '** Returns:
  481. '**     none.
  482. '*************************************************************************
  483. SUB SetDriveStatus STATIC
  484.  
  485.     cost& = 0
  486.     drive$ = MID$(DEST$, 1, 1)
  487.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  488.     cost& = VAL(GetListItem(DEFNEEDS$, ndrive%)) +VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%))+ VAL(GetListItem(OPT3NEEDS$, ndrive%))
  489.     free& = GetFreeSpaceForDrive(drive$)
  490.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  491.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  492.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  493.  
  494.     IF drive$ = WINDRIVE$ THEN
  495.         ReplaceListItem DRIVETEXT$, 4, ""
  496.         ReplaceListItem DRIVETEXT$, 5, ""
  497.         ReplaceListItem DRIVETEXT$, 6, ""
  498.     ELSE
  499.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  500.         cost& = VAL(GetListItem(DEFNEEDS$, ndrive%)) +VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%))+ VAL(GetListItem(OPT3NEEDS$, ndrive%))
  501.         IF cost& = 0 THEN
  502.             ReplaceListItem DRIVETEXT$, 4, ""
  503.             ReplaceListItem DRIVETEXT$, 5, ""
  504.             ReplaceListItem DRIVETEXT$, 6, ""
  505.         ELSE
  506.             free& = GetFreeSpaceForDrive(WINDRIVE$)
  507.             ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  508.             ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  509.             ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  510.         END IF
  511.     END IF
  512. END SUB
  513.  
  514.  
  515. '**
  516. '** Purpose:
  517. '**     Appends a file name to the end of a directory path,
  518. '**     inserting a backslash character as needed.
  519. '** Arguments:
  520. '**     szDir$  - full directory path (with optional ending "\")
  521. '**     szFile$ - filename to append to directory
  522. '** Returns:
  523. '**     Resulting fully qualified path name.
  524. '*************************************************************************
  525. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  526.     IF szDir$ = "" THEN
  527.         MakePath = szFile$
  528.     ELSEIF szFile$ = "" THEN
  529.         MakePath = szDir$
  530.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  531.         MakePath = szDir$ + szFile$
  532.     ELSE
  533.         MakePath = szDir$ + "\" + szFile$
  534.     END IF
  535. END FUNCTION
  536.  
  537.