home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / dbmsg / sql / vbsql / vbsql.mst < prev    next >
Text File  |  1996-04-03  |  17KB  |  542 lines

  1. ''***************************************************************
  2. ''* This is the setup script for the Visual Basic Library for SQL Server
  3. ''*
  4. ''* Modification History
  5. ''*
  6. ''* Trish Millines-9/16/92- Upgraded to version 2.0 of Setup
  7. ''* Ben Wilk -8/18/93- Upgraded to release for VB 3.0
  8. ''***************************************************************
  9.  
  10. '$DEFINE DEBUG  ''Define for script development/debugging
  11.  
  12. '$INCLUDE 'setupapi.inc'
  13. '$INCLUDE 'msdetect.inc'
  14. '$INCLUDE 'mscpydis.inc'    ''System
  15.  
  16. ''Dialog ID's
  17. CONST WELCOME       = 100
  18. CONST ASKQUIT       = 200
  19. CONST DESTPATH      = 300
  20. CONST EXITFAILURE   = 400
  21. CONST EXITQUIT      = 600
  22. CONST EXITSUCCESS   = 700
  23. CONST OPTIONS       = 800
  24.  
  25. CONST CUSTHELP        = 1000
  26. CONST WELCOMEHELP   = 1200
  27. CONST PATHHELP        = 1100
  28. CONST NOSELECTION   = 1300
  29.  
  30. CONST CUSTINST        = 6200
  31. CONST TOOBIG        = 6300
  32. CONST BADPATH       = 6400
  33. CONST BILLBOARD     = 4545
  34.  
  35. CONST WM_SYSCOMMAND = 274
  36. CONST SC_MAXIMIZE = 61488
  37.  
  38. ''Bitmap ID
  39. CONST LOGO = 1
  40.  
  41. ''File Types
  42. CONST LIBFILES       = 1      ''Library files
  43. CONST EXAMPLEFILES = 2      ''Example files
  44. CONST HELPFILES    = 3      ''VBSql Help files
  45.  
  46. GLOBAL DEST$        ''Default destination directory.
  47. GLOBAL WINDRIVE$    ''Windows drive letter.
  48. GLOBAL WINDOWSDIR$  ''Windows directory
  49.  
  50. ''CustInst list symbol names
  51. GLOBAL LIBNEEDS$      ''Library needs
  52. GLOBAL EXAMPLENEEDS$   '' Example needs
  53. GLOBAL HELPNEEDS$      ''Help needs
  54. GLOBAL EXTRACOSTS$    ''List of extra costs to add per drive
  55. GLOBAL BIGLIST$       ''List of option files cost calc results (boolean)
  56.  
  57. ''Dialog list symbol names
  58. GLOBAL CHECKSTATES$
  59. GLOBAL STATUSTEXT$
  60. GLOBAL DRIVETEXT$
  61.  
  62. DECLARE SUB AddOptFilesToCopyList (ftype%)
  63. DECLARE SUB RecalcOptFiles (ftype%)
  64. DECLARE SUB RecalcPath
  65. DECLARE SUB SetDriveStatus
  66. DECLARE SUB SetProcStatus
  67. DECLARE SUB SetWinStatus
  68. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  69. DECLARE FUNCTION BitmapCntrlInit LIB "mscuistf.dll" as INTEGER
  70. DECLARE FUNCTION NeedProcFiles () AS INTEGER
  71. DECLARE FUNCTION NeedWinFiles () AS INTEGER
  72. DECLARE FUNCTION SendMessage LIB "user"(hwnd%, wMsg%, wParam%, lParam&)
  73.  
  74. INIT:
  75.     hwnd% = HwndFrame()
  76.     istatus% = SendMessage(hwnd%, WM_SYSCOMMAND, SC_MAXIMIZE,0)  ''Maximize the window
  77.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  78.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  79.     SQLTOOLS$ = "SQL Server Tools"
  80.     SetBitmap CUIDLL$, LOGO
  81.     SetTitle "Microsoft Visual Basic for SQL Server Tools Setup"
  82.  
  83.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  84.     IF szInf$ = "" THEN
  85.     szInf$ = GetSymbolValue("STF_CWDDIR") + "VBSQL.INF"
  86.     END IF
  87.     ReadInfFile szInf$
  88.  
  89.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  90.     WINSYSDIR$ = GetWindowsSysDir()
  91.     WINDOWSDIR$ = GetWindowsDir()
  92.     DEST$ = WINDRIVE$ + ":\MSSQL"
  93.  
  94.     ''CustInst list symbols
  95.     CHECKSTATES$ = "CheckItemsState"
  96.     STATUSTEXT$  = "StatusItemsText"
  97.     DRIVETEXT$     = "DriveStatusText"
  98.     FOR i% = 1 to 3 STEP 1
  99.        AddListItem CHECKSTATES$, "ON"
  100.     NEXT i%
  101.     FOR i% = 1 to 3 STEP 1
  102.         AddListItem STATUSTEXT$, ""
  103.     NEXT i%
  104.     FOR i% = 1 to 7 STEP 1
  105.         AddListItem DRIVETEXT$, ""
  106.     NEXT i%
  107.     ReplaceListItem DRIVETEXT$, 7, DEST$
  108.  
  109.     ''Disk cost list symbols
  110.     LIBNEEDS$       = "LibraryNeeds"
  111.     EXAMPLENEEDS$  = "ExampleNeeds"
  112.     HELPNEEDS$       = "HelpNeeds"
  113.     EXTRACOSTS$ = "ExtraCosts"
  114.     BIGLIST$    = "BigList"
  115.     FOR i% = 1 to 3 STEP 1
  116.         AddListItem BIGLIST$, ""
  117.     NEXT i%
  118.     FOR i% = 1 TO 26 STEP 1
  119.         AddListItem EXTRACOSTS$, "0"
  120.     NEXT i%
  121.  
  122.     RecalcPath
  123.     SetDriveStatus
  124.  
  125. WELCOME:
  126.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", WELCOMEHELP, HELPPROC$)
  127.     IF sz$ = "CONTINUE" THEN
  128.         UIPop 1
  129. WELCOMEL1:
  130.         IF InitSystem(1, "", 0) = 0 THEN
  131.             GOSUB ASKQUIT
  132.             GOTO WELCOMEL1
  133.         END IF
  134.     ELSE
  135.         GOSUB ASKQUIT
  136.         GOTO WELCOME
  137.     END IF
  138.  
  139. GETPATH:
  140.     SetSymbolValue "EditTextIn", DEST$
  141.     SetSymbolValue "EditFocus", "END"
  142. GETPATHL1:
  143.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", PATHHELP, HELPPROC$)
  144.     DEST$ = GetSymbolValue("EditTextOut")
  145.  
  146.     IF sz$ = "CONTINUE" THEN
  147.         IF IsDirWritable(DEST$) = 0 THEN
  148.             GOSUB BADPATH
  149.             GOTO GETPATHL1
  150.     END IF
  151.         UIPop 1
  152.     ELSEIF sz$ = "REACTIVATE" THEN
  153.         GOTO GETPATHL1
  154.     ELSE
  155.         GOSUB ASKQUIT
  156.         GOTO GETPATH
  157.     END IF
  158.  
  159. CUSTINST:
  160.     ReplaceListItem DRIVETEXT$, 7, DEST$
  161.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", CUSTHELP, HELPPROC$)
  162.  
  163.     IF sz$ = "CONTINUE" THEN
  164.         ''Install only if it will fit.
  165.     FOR i% = 1 to 3 STEP 1
  166.             IF GetListItem(BIGLIST$, i%) <> "" THEN
  167.                 GOSUB TOOBIG
  168.                 GOTO CUSTINST
  169.             END IF
  170.         NEXT i%
  171.         UIPop 1
  172.     GOTO CHECKSELECT
  173.     ELSEIF sz$ = "PATH" THEN
  174.     GOTO GETPATH
  175.     ELSEIF sz$ = "REACTIVATE" THEN
  176.         RecalcPath
  177.         SetDriveStatus
  178.         GOTO CUSTINST
  179.     ELSEIF sz$ = "CHK1" THEN
  180.     RecalcOptFiles LIBFILES
  181.     SetDriveStatus
  182.         GOTO CUSTINST
  183.     ELSEIF sz$ = "CHK2" THEN
  184.     RecalcOptFiles EXAMPLEFILES
  185.         SetDriveStatus
  186.         GOTO CUSTINST
  187.     ELSEIF sz$ = "CHK3" THEN
  188.     RecalcOptFiles HELPFILES
  189.         SetDriveStatus
  190.         GOTO CUSTINST
  191.     ELSE
  192.         GOSUB ASKQUIT
  193.         GOTO CUSTINST
  194.     END IF
  195.  
  196. CHECKSELECT:
  197.     noselect% = 0
  198.     IF GetListItem(CHECKSTATES$, LIBFILES) = "OFF"  and GetListItem(CHECKSTATES$, HELPFILES) = "OFF" and GetListItem(CHECKSTATES$, EXAMPLEFILES) = "OFF" THEN
  199.     noselect% = 1
  200.     END IF
  201.  
  202.     IF noselect% = 1 then     'If they didn't select anything
  203.        sz$ = UIStartDlg(CUIDLL$, NOSELECTION, "FInfo0DlgProc", 0, "")
  204.        UIPop 1
  205.        GOTO CUSTINST
  206.     END IF
  207.  
  208. CREATEDEST:
  209.  
  210.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  211.     CreateDir DEST$, cmoVital        ''Create the destination directory
  212.     i% = SetSizeCheckMode(scmOff)
  213.     DESTSAVE$ = DEST$            ''Save dest directory as the root path
  214.     SetCopyGaugePosition 100, 100
  215.  
  216.  COPYLIBFILES:
  217.     ClearCopyList                 ''Clear the copy list
  218.     IF GetListItem(CHECKSTATES$, LIBFILES) = "ON" THEN
  219.     DEST$ = DESTSAVE$ + "\bin"
  220.     CreateDir DEST$, cmoVital         ''Create the bin directory
  221.     AddSectionFilesToCopyList "LibFiles", SrcDir$, DEST$
  222.     AddSectionFilesToCopyList "LibFiles", SrcDir$, WINSYSDIR$
  223.     CopyFilesInCopyList              ''Copy the files
  224.     ClearCopyList                  ''Clear the copy list
  225.  
  226.     DEST$ = DESTSAVE$ + "\dblib"
  227.     CreateDir DEST$, cmoVital        ''Create the dblib directory
  228.     DEST$ = DEST$ + "\include"
  229.     CreateDir DEST$, cmoVital         ''Create the include directory
  230.     AddSectionFilesToCopyList "IncludeFile", SrcDir$, DEST$
  231.     CopyFilesInCopyList              ''Copy the files
  232.     ClearCopyList                  ''Clear the copy list
  233.     END IF
  234.  
  235. CHECKSAMPLES:
  236.     IF GetListItem(CHECKSTATES$, EXAMPLEFILES) = "ON" THEN
  237.     DEST$ = DESTSAVE$ + "\dblib"
  238.     CreateDir DEST$, cmoVital        ''Create the dblib directory
  239.     DEST$ = DEST$ + "\vsamples"
  240.     CreateDir DEST$, cmoVital         ''Create the vsamples directory
  241.     AddSectionFilesToCopyList "ReadmeSamples", SrcDir$, DEST$
  242.     CopyFilesInCopyList              ''Copy the files
  243.     ClearCopyList                  ''Clear the copy list
  244.     SAMPDEST$ = DEST$
  245.     DEST$ = SAMPDEST$ + "\common"
  246.     CreateDir DEST$, cmoVital         ''Create the destination directory
  247.     AddSectionFilesToCopyList "ProcedureFiles", SrcDir$, DEST$
  248.     CopyFilesInCopyList              ''Copy the files
  249.     ClearCopyList                  ''Clear the copy list
  250.     DEST$ = DESTSAVE$ + "\dblib\vsamples\wincode"
  251.     CreateDir DEST$, cmoVital         ''Create the destination directory
  252.     AddSectionFilesToCopyList "WinCodeFiles", SrcDir$, DEST$
  253.     CopyFilesInCopyList              ''Copy the files
  254.     ClearCopyList                  ''Clear the copy list
  255.     DEST$ = SAMPDEST$ + "\browse"
  256.     CreateDir DEST$, cmoVital         ''Create the destination directory
  257.     AddSectionFilesToCopyList "BrowseFiles", SrcDir$, DEST$
  258.     CopyFilesInCopyList              ''Copy the files
  259.     ClearCopyList                  ''Clear the copy list
  260.     DEST$ = SAMPDEST$ + "\text"
  261.     CreateDir DEST$, cmoVital         ''Create the destination directory
  262.     AddSectionFilesToCopyList "TextFiles", SrcDir$, DEST$
  263.     CopyFilesInCopyList              ''Copy the files
  264.     ClearCopyList                  ''Clear the copy list
  265.     DEST$ = SAMPDEST$ + "\image"
  266.     CreateDir DEST$, cmoVital         ''Create the destination directory
  267.     AddSectionFilesToCopyList "ImageFiles", SrcDir$, DEST$
  268.     CopyFilesInCopyList              ''Copy the files
  269.     ClearCopyList                  ''Clear the copy list
  270.     DEST$ = SAMPDEST$ + "\cursors"
  271.     CreateDir DEST$, cmoVital         ''Create the destination directory
  272.     AddSectionFilesToCopyList "CursorFiles", SrcDir$, DEST$
  273.     CopyFilesInCopyList              ''Copy the files
  274.     ClearCopyList                  ''Clear the copy list
  275.     DEST$ = SAMPDEST$ + "\query"
  276.     CreateDir DEST$, cmoVital         ''Create the destination directory
  277.     AddSectionFilesToCopyList "QueryFiles", SrcDir$, DEST$
  278.     CopyFilesInCopyList              ''Copy the files
  279.     ClearCopyList                  ''Clear the copy list
  280.     DEST$ = SAMPDEST$ + "\rpc"
  281.     CreateDir DEST$, cmoVital         ''Create the destination directory
  282.     AddSectionFilesToCopyList "RPCFiles", SrcDir$, DEST$
  283.     CopyFilesInCopyList              ''Copy the files
  284.     ClearCopyList                  ''Clear the copy list
  285.     DEST$ = SAMPDEST$ + "\pubs"
  286.     CreateDir DEST$, cmoVital         ''Create the destination directory
  287.     AddSectionFilesToCopyList "PubsFiles", SrcDir$, DEST$
  288.     CopyFilesInCopyList              ''Copy the files
  289.     ClearCopyList                  ''Clear the copy list
  290.     END IF
  291.  
  292. COPYHELPFILES:
  293.     IF GetListItem(CHECKSTATES$, HELPFILES) = "ON" THEN
  294.     DEST$ = DESTSAVE$ + "\help"
  295.     CreateDir DEST$, cmoVital         ''Create the destination directory
  296.     AddSectionFilesToCopyList "HelpFiles", SrcDir$, DEST$
  297.     CopyFilesInCopyList              ''Copy the files
  298.     ClearCopyList                  ''Clear the copy list
  299.     CreateProgmanGroup SQLTOOLS$,"",cmoNone
  300.     CreateProgmanItem SQLTOOLS$,"VBSQL Help",DEST$+"\vbsql.hlp","",cmoOverwrite
  301.     END IF
  302.  
  303.  
  304. QUIT:
  305.     ON ERROR GOTO ERRQUIT
  306.  
  307.     IF ERR = 0 THEN
  308.         dlg% = EXITSUCCESS
  309.     ELSEIF ERR = STFQUIT THEN
  310.         dlg% = EXITQUIT
  311.     ELSE
  312.         dlg% = EXITFAILURE
  313.     END IF
  314. QUITL1:
  315.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  316.     IF sz$ = "REACTIVATE" THEN
  317.         GOTO QUITL1
  318.     END IF
  319.     UIPop 1
  320.  
  321.     END
  322.  
  323. ERRQUIT:
  324.     i% = DoMsgBox("Setup sources were corrupted, contact your primary support provider.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  325.     END
  326.  
  327. TOOBIG:
  328.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  329.     IF sz$ = "REACTIVATE" THEN
  330.         RecalcPath
  331.         SetDriveStatus
  332.         GOTO TOOBIG
  333.     END IF
  334.     UIPop 1
  335.     RETURN
  336.  
  337. BADPATH:
  338.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  339.     IF sz$ = "REACTIVATE" THEN
  340.         GOTO BADPATH
  341.     END IF
  342.     UIPop 1
  343.     RETURN
  344.  
  345.  
  346.  
  347. ASKQUIT:
  348.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  349.  
  350.     IF sz$ = "EXIT" THEN
  351.         UIPopAll
  352.         ERROR STFQUIT
  353.     ELSEIF sz$ = "REACTIVATE" THEN
  354.         GOTO ASKQUIT
  355.     ELSE
  356.         UIPop 1
  357.     END IF
  358.     RETURN
  359.  
  360. '**
  361. '** Purpose:
  362. '**     Adds the specified option files to the copy list.
  363. '** Arguments:
  364. '**     ftype%  - type of files to add, one of the following:
  365. '**             ADMINFILES, OBJFILES, BASEFILES
  366. '** Returns:
  367. '**     none.
  368. '*************************************************************************
  369. SUB AddOptFilesToCopyList (ftype%) STATIC
  370.  
  371.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  372.  
  373.     IF    GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
  374.     IF ftype% = LIBFILES THEN
  375.         AddSectionFilesToCopyList "LibFiles", SrcDir$, DEST$
  376.         AddSectionFilesToCopyList "IncludeFile", SrcDir$, DEST$
  377.     ELSEIF ftype% = EXAMPLEFILES THEN
  378.         AddSectionFilesToCopyList "ProcedureFiles", SrcDir$, DEST$
  379.         AddSectionFilesToCopyList "WinCodeFiles", SrcDir$, DEST$
  380.         AddSectionFilesToCopyList "BrowseFiles", SrcDir$, DEST$
  381.         AddSectionFilesToCopyList "ImageFiles", SrcDir$, DEST$
  382.         AddSectionFilesToCopyList "TextFiles", SrcDir$, DEST$
  383.         AddSectionFilesToCopyList "CursorFiles", SrcDir$, DEST$
  384.         AddSectionFilesToCopyList "QueryFiles", SrcDir$, DEST$
  385.         AddSectionFilesToCopyList "RPCFiles", SrcDir$, DEST$
  386.         AddSectionFilesToCopyList "PubsFiles", SrcDir$, DEST$
  387.     ELSEIF ftype% = HELPFILES THEN
  388.         AddSectionFilesToCopyList "HelpFiles", SrcDir$, DEST$
  389.     END IF
  390.     SrcDir$ = ""
  391.     END IF
  392. END SUB
  393.  
  394. '**
  395. '** Purpose:
  396. '**     Recalculates disk space for the given option files and sets
  397. '**     the status info symbol "StatusItemsText".
  398. '** Arguments:
  399. '**     ftype% - type of files to add, one of the following:
  400. '**             LIBFILES,
  401. '**             EXAMPLEFILES, HELPFILES
  402. '** Returns:
  403. '**     none.
  404. '*************************************************************************
  405. SUB RecalcOptFiles (ftype%) STATIC
  406.     CursorSave% = ShowWaitCursor()
  407.     ClearCopyList
  408.     AddOptFilesToCopyList ftype%
  409.     DESTSAVE$ = DEST$
  410.  
  411.     fExtra% = 0
  412.     IF ftype% = LIBFILES THEN
  413.     ListSym$ = LIBNEEDS$
  414.     IF GetListItem(CHECKSTATES$, LIBFILES) = "ON" THEN
  415.             ''Add extra cost to Windows drive for ini/progman, etc., dll's vbx's
  416.             ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  417.             ReplaceListItem EXTRACOSTS$, ndrive%, "270240"
  418.             fExtra% = 1
  419.     END IF
  420.     ELSEIF ftype% = EXAMPLEFILES THEN
  421.     ListSym$ = EXAMPLENEEDS$
  422.     DEST$ = DEST$ + "\dblib\vsamples\browse"
  423.     IF GetListItem(CHECKSTATES$, EXAMPLEFILES) = "ON" THEN
  424.         ''Add extra cost to Windows drive for ini/progman, etc.
  425.             ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  426.             ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  427.             fExtra% = 1
  428.     END IF
  429.     ELSEIF ftype% = HELPFILES THEN
  430.     ListSym$ = HELPNEEDS$
  431.     DEST$ = DEST$ + "\help"
  432.     IF GetListItem(CHECKSTATES$, HELPFILES) = "ON" THEN
  433.         ''Add extra cost to Windows drive for ini/progman, etc.
  434.             ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  435.             ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  436.             fExtra% = 1
  437.     END IF
  438.     END IF
  439.  
  440.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  441.     IF StillNeed& > 0 THEN
  442.         ReplaceListItem BIGLIST$, ftype%, "YES"
  443.     ELSE
  444.  
  445.         ReplaceListItem BIGLIST$, ftype%, ""
  446.     END IF
  447.  
  448.     cost& = 0
  449.     FOR i% = 1 TO 26 STEP 1
  450.     cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  451.     NEXT i%
  452.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  453.     IF fExtra% THEN
  454.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  455.     END IF
  456.     RestoreCursor CursorSave%
  457.     ListSym$ = ""
  458.     DEST$ = DESTSAVE$
  459. END SUB
  460.  
  461. '**
  462. '** Purpose:
  463. '**     Recalculates disk space and sets option status info according
  464. '**     to the current destination path.
  465. '** Arguments:
  466. '**     none.
  467. '** Returns:
  468. '**     none.
  469. '*************************************************************************
  470. SUB RecalcPath STATIC
  471.  
  472.     CursorSave% = ShowWaitCursor()
  473.  
  474.     RecalcOptFiles LIBFILES
  475.     RecalcOptFiles EXAMPLEFILES
  476.     RecalcOptFiles HELPFILES
  477.  
  478.     RestoreCursor CursorSave%
  479. END SUB
  480.  
  481.  
  482. '**
  483. '** Purpose:
  484. '**     Sets drive status info according to latest disk space calcs.
  485. '** Arguments:
  486. '**     none.
  487. '** Returns:
  488. '**     none.
  489. '*************************************************************************
  490. SUB SetDriveStatus STATIC
  491.  
  492.     drive$ = MID$(DEST$, 1, 1)
  493.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  494.     cost& = VAL(GetListItem(LIBNEEDS$, ndrive%)) + VAL(GetListItem(EXAMPLENEEDS$, ndrive%)) + VAL(GetListItem(HELPNEEDS$, ndrive%))
  495.     free& = GetFreeSpaceForDrive(drive$)
  496.  
  497.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  498.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  499.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  500.  
  501.     IF drive$ = WINDRIVE$ THEN
  502.         ReplaceListItem DRIVETEXT$, 4, ""
  503.         ReplaceListItem DRIVETEXT$, 5, ""
  504.         ReplaceListItem DRIVETEXT$, 6, ""
  505.     ELSE
  506.     ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  507.     cost& = VAL(GetListItem(LIBNEEDS$, ndrive%)) + VAL(GetListItem(EXAMPLENEEDS$, ndrive%)) + VAL(GetListItem(HELPNEEDS$, ndrive%))
  508.     IF cost& = 0 THEN
  509.             ReplaceListItem DRIVETEXT$, 4, ""
  510.             ReplaceListItem DRIVETEXT$, 5, ""
  511.             ReplaceListItem DRIVETEXT$, 6, ""
  512.         ELSE
  513.             free& = GetFreeSpaceForDrive(WINDRIVE$)
  514.             ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  515.             ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  516.             ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  517.         END IF
  518.     END IF
  519. END SUB
  520.  
  521. '**
  522. '** Purpose:
  523. '**     Appends a file name to the end of a directory path,
  524. '**     inserting a backslash character as needed.
  525. '** Arguments:
  526. '**     szDir$  - full directory path (with optional ending "\")
  527. '**     szFile$ - filename to append to directory
  528. '** Returns:
  529. '**     Resulting fully qualified path name.
  530. '*************************************************************************
  531. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  532.     IF szDir$ = "" THEN
  533.         MakePath = szFile$
  534.     ELSEIF szFile$ = "" THEN
  535.         MakePath = szDir$
  536.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  537.         MakePath = szDir$ + szFile$
  538.     ELSE
  539.         MakePath = szDir$ + "\" + szFile$
  540.     END IF
  541. END FUNCTION
  542.