home *** CD-ROM | disk | FTP | other *** search
/ Computer Buyer 1996 January / buyer-0196.iso / disk1 / taskey.ms_ / taskey.ms
Text File  |  1995-06-29  |  16KB  |  555 lines

  1. '**************************************************************************
  2. '*                       MSSetup Toolkit Sample 2
  3. '**************************************************************************
  4.  
  5. '$DEFINE DEBUG  ''Define for script development/debugging
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9.  
  10. ''Dialog ID's
  11. CONST WELCOME       = 100
  12. CONST ASKQUIT      = 200
  13. CONST DESTPATH     = 300
  14. CONST EXITFAILURE  = 400
  15. CONST EXITQUIT     = 600
  16. CONST EXITSUCCESS  = 700
  17. CONST OPTIONS      = 800
  18. CONST APPHELP      = 900
  19. CONST CUSTINST     = 6200
  20. CONST TOOBIG       = 6300
  21. CONST BADPATH      = 6400
  22. CONST NAMECOMP      = 7500
  23.  
  24. ''Bitmap ID
  25. CONST LOGO         = 1
  26.  
  27. ''File Types
  28. CONST APPFILES     = 1
  29. CONST OPTFILES1    = 2
  30.  
  31.  
  32. GLOBAL DEST$        ''Default destination directory.
  33. GLOBAL WINDRIVE$    ''Windows drive letter.
  34. GLOBAL WINSYSDIR$
  35. GLOBAL SrcINI$
  36. GLOBAL OPT1OPT$     ''Option selection from OptFiles1 option dialog.
  37.  
  38. ''CustInst list symbol names
  39. GLOBAL APPNEEDS$    ''Option list costs per drive
  40. GLOBAL OPT1NEEDS$
  41. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  42. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  43.  
  44. ''Dialog list symbol names
  45. GLOBAL CHECKSTATES$
  46. GLOBAL STATUSTEXT$
  47. GLOBAL DRIVETEXT$
  48.  
  49. '' TASKEY symbols
  50. GLOBAL EXPLAN$
  51. GLOBAL ADVICE$
  52. GLOBAL QDB$
  53. GLOBAL HELP$
  54. GLOBAL BMPS$
  55. GLOBAL USERS$
  56. GLOBAL FNAME$
  57. GLOBAL LNAME$
  58. GLOBAL COMP$
  59. GLOBAL USRNO$
  60. GLOBAL SRLNO$
  61.  
  62. DECLARE SUB AddOptFilesToCopyList (ftype%)
  63. DECLARE SUB RecalcOptFiles (ftype%)
  64. DECLARE SUB RecalcPath
  65. DECLARE SUB SetDriveStatus
  66. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  67.  
  68. INIT:
  69.     CUIDLL$ = "mscuistf.dll"            ''custom user interface dll
  70.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  71.  
  72.     MaximizeSetupWindow(HwndFrame())
  73.     SetBitmap CUIDLL$, LOGO
  74.     SetTitle "TASKey Trial Setup"
  75.     SetCopyGaugePosition 90, 160
  76.  
  77.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  78.     IF szInf$ = "" THEN
  79.         szInf$ = GetSymbolValue("STF_CWDDIR") + "TASKEY.INF"
  80.     END IF
  81.     ReadInfFile szInf$
  82.  
  83.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  84.     WINSYSDIR$ = GetWindowsDir + "SYSTEM"
  85.     SrcINI$ = GetWindowsDir + "TKYTRIAL.INI"
  86.     DEST$ = WINDRIVE$ + ":\TKYTRIAL"
  87.  
  88.     ''CustInst list symbols
  89.     CHECKSTATES$ = "CheckItemsState"
  90.     STATUSTEXT$  = "StatusItemsText"
  91.     DRIVETEXT$   = "DriveStatusText"
  92.     FOR i% = 1 TO 2 STEP 1
  93.         AddListItem CHECKSTATES$, "ON"
  94.     NEXT i%
  95.     FOR i% = 1 TO 2 STEP 1
  96.         AddListItem STATUSTEXT$, ""
  97.     NEXT i%
  98.     FOR i% = 1 TO 7 STEP 1
  99.         AddListItem DRIVETEXT$, ""
  100.     NEXT i%
  101.     ReplaceListItem DRIVETEXT$, 7, DEST$
  102.  
  103.     ''Disk cost list symbols
  104.     APPNEEDS$   = "AppNeeds"
  105.     OPT1NEEDS$  = "Opt1Needs"
  106.     EXTRACOSTS$ = "ExtraCosts"
  107.     BIGLIST$    = "BigList"
  108.     FOR i% = 1 TO 3 STEP 1
  109.         AddListItem BIGLIST$, ""
  110.     NEXT i%
  111.     FOR i% = 1 TO 26 STEP 1
  112.         AddListItem EXTRACOSTS$, "0"
  113.     NEXT i%
  114.  
  115.     ''File Option Variables
  116.     OPT1OPT$ = "1"
  117.  
  118. '$IFDEF DEBUG
  119.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  120. '$ENDIF ''DEBUG
  121.  
  122.  
  123.  
  124. WELCOME:
  125.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  126.     IF sz$ = "CONTINUE" THEN
  127.         UIPop 1
  128.         GOTO CHECKINSTALL
  129.     ELSE
  130.         GOSUB ASKQUIT
  131.         GOTO WELCOME
  132.     END IF
  133.  
  134. CHECKINSTALL:
  135.   IF DoesFileExist(SrcINI$, femReadWrite) = 1 THEN
  136.     COMP$ = GetIniKeyString(SrcINI$, "License", "Company")
  137.     FNAME$ = GetIniKeyString(SrcINI$, "License", "FName")
  138.     LNAME$ = GetIniKeyString(SrcINI$, "License", "LName")
  139.     USRNO$ = GetIniKeyString(SrcINI$, "License", "UserNo")
  140.     SRLNO$ = GetIniKeyString(SrcINI$, "License", "SerialNo")
  141.     DEST$ = GetIniKeyString(SrcINI$, "TASKey", "Dir")
  142.     DEST$ = MID$(Dest$, 1, LEN(Dest$) - 1)
  143.     ReplaceListItem DRIVETEXT$, 7, DEST$
  144.   END IF
  145.  
  146.   GOTO NAMECOMP
  147.  
  148.  
  149.  
  150. NAMECOMP:
  151.    FNAME$ = "TASKey"
  152.    LNAME$ = "Trial"
  153.    COMP$ = "TASK Solutions"
  154.    USRNO$ = "2013990889"
  155.    SRLNO$ = "TRIALQ"
  156.    GOTO CUSTINST
  157.  
  158.  
  159. CUSTINST:
  160.     RecalcPath
  161.     SetDriveStatus
  162.  
  163.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  164.  
  165.     IF sz$ = "CONTINUE" THEN
  166.         ''Install only if it will fit.
  167.         FOR i% = 1 TO 3 STEP 1
  168.             IF GetListItem(BIGLIST$, i%) <> "" THEN
  169.                 GOSUB TOOBIG
  170.                 GOTO CUSTINST
  171.             END IF
  172.         NEXT i%
  173.         UIPop 1
  174.         GOTO INSTALL
  175.     ELSEIF sz$ = "PATH" THEN
  176.         GOTO GETPATH
  177.     ELSEIF sz$ = "CHK1" THEN
  178.         RecalcOptFiles APPFILES
  179.         SetDriveStatus
  180.         GOTO CUSTINST
  181.     ELSEIF sz$ = "CHK2" THEN
  182.         RecalcOptFiles OPTFILES1
  183.         SetDriveStatus
  184.         GOTO CUSTINST
  185.     ELSEIF sz$ = "BTN2" THEN
  186.         GOTO OPTFILES1
  187.     ELSEIF sz$ = "REACTIVATE" THEN
  188.         RecalcPath
  189.         SetDriveStatus
  190.         GOTO CUSTINST
  191.     ELSE
  192.         GOSUB ASKQUIT
  193.         GOTO CUSTINST
  194.     END IF
  195.  
  196.  
  197.  
  198. INSTALL:
  199.     ClearCopyList
  200.     AddOptFilesToCopyList APPFILES
  201.     AddOptFilesToCopyList OPTFILES1
  202.     CreateDir DEST$, cmoNone
  203.     AddToBillboardList "mscuistf.dll", 101, "FRegisterBmpDlgProc", 5
  204.     AddToBillboardList "mscuistf.dll", 101, "FHelpBmpDlgProc", 5
  205.     CopyFilesInCopyList
  206.  
  207.     IF GetListItem(CHECKSTATES$, OPTFILES1) = "ON" THEN
  208.       ini$ = MakePath(GetWindowsDir, "TKYTRIAL.INI")
  209.  
  210.       EXPLAN$ = DEST$ + "\EXPLAN\"
  211.       ADVICE$ = DEST$ + "\ADVICE\"
  212.       QDB$ = DEST$ + "\QUEST\"
  213.       HELP$ = DEST$ + "\HELP\"
  214.       USERS$ = DEST$ + "\USERS\"
  215.       BMPS$ = DEST$ + "\BMPS\"
  216.       CreateIniKeyValue ini$, "TASKey", "Dir", DEST$ + "\", cmoOverwrite
  217.       CreateIniKeyValue ini$, "Questions", "Dir", QDB$, cmoOverwrite
  218.       CreateIniKeyValue ini$, "Explanations", "Dir", EXPLAN$, cmoOverwrite
  219.       CreateIniKeyValue ini$, "Advice", "Dir", ADVICE$, cmoOverwrite
  220.       CreateIniKeyValue ini$, "Help", "Dir", HELP$, cmoOverwrite
  221.       CreateIniKeyValue ini$, "Users", "Dir", USERS$, cmoOverwrite
  222.       CreateIniKeyValue ini$, "LICENSE", "Company", COMP$, cmoOverwrite
  223.       CreateIniKeyValue ini$, "LICENSE", "FName", FNAME$, cmoOverwrite
  224.       CreateIniKeyValue ini$, "LICENSE", "LName", LNAME$, cmoOverwrite
  225.       CreateIniKeyValue ini$, "LICENSE", "UserNo", USRNO$, cmoOverwrite
  226.       CreateIniKeyValue ini$, "LICENSE", "SerialNo", SRLNO$, cmoOverwrite
  227.       'Create Entries relating Names to Dos Files
  228.       CreateIniKeyValue ini$, "Question Templates", "Demo", "demo_tmp.qtp", cmoOverwrite
  229.  
  230.       ini$ = ""
  231.     END IF
  232.  
  233.     IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  234.       CreateProgmanGroup "TASKey Trial", WINDIR$+"TKYTRIAL.GRP", cmoNone
  235.       CreateProgmanItem "TASKey Trial", "Read This First", DEST$+"\readme.wri", "", cmoOverwrite
  236.       CreateProgmanItem "TASKey Trial", "TASKey Tutorial", DEST$+"\Tutor_e.hlp", "", cmoOverwrite
  237.       CreateProgmanItem "TASKey Trial", "What People Say About TASKey", DEST$+"\peopsay.wri", "", cmoOverwrite
  238.       CreateProgmanItem "TASKey Trial", "TASKey PERSONAL Only ú49", DEST$+"\tkypers.wri", "", cmoOverwrite
  239.       CreateProgmanItem "TASKey Trial", "TASKey - A Corporate Perspective", DEST$+"\corpbro.wri", "", cmoOverwrite
  240.       CreateProgmanItem "TASKey Trial", "Where to Buy Your TASKey", DEST$+"\where!.wri", "", cmoOverwrite
  241.       CreateProgmanItem "TASKey Trial", "TASKey Trial", DEST$+"\TKYTRIAL.exe", "", cmoOverwrite
  242.       CreateProgmanItem "TASKey Trial", "TASKey Manual", DEST$+"\taskey.hlp", "", cmoOverwrite
  243.       ShowProgmanGroup  "TASKey Trial", 1, cmoNone
  244.     END IF
  245.  
  246.  
  247. QUIT:
  248.     ON ERROR GOTO ERRQUIT
  249.  
  250.     IF ERR = 0 THEN
  251.         dlg% = EXITSUCCESS
  252.     ELSEIF ERR = STFQUIT THEN
  253.         dlg% = EXITQUIT
  254.     ELSE
  255.         dlg% = EXITFAILURE
  256.     END IF
  257. QUITL1:
  258.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  259.     IF sz$ = "REACTIVATE" THEN
  260.         GOTO QUITL1
  261.     END IF
  262.     UIPop 1
  263.  
  264.     END
  265.  
  266. ERRQUIT:
  267.     i% = DoMsgBox("Setup sources were corrupted, call +61-6-2961150!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  268.     END
  269.  
  270.  
  271.  
  272. GETPATH:
  273.     SetSymbolValue "EditTextIn", DEST$
  274.     SetSymbolValue "EditFocus", "END"
  275. GETPATHL1:
  276.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  277.  
  278.     IF sz$ = "CONTINUE" THEN
  279.         olddest$ = DEST$
  280.         DEST$ = GetSymbolValue("EditTextOut")
  281.  
  282.         ''Validate new path.
  283.         IF IsDirWritable(DEST$) = 0 THEN
  284.             GOSUB BADPATH
  285.             GOTO GETPATHL1
  286.         END IF
  287.         UIPop 1
  288.  
  289.         ''Truncate display if too long.
  290.         IF LEN(DEST$) > 23 THEN
  291.             ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  292.         ELSE
  293.             ReplaceListItem DRIVETEXT$, 7, DEST$
  294.         END IF
  295.  
  296.         ''Recalc if path changed.
  297.         IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  298.             RecalcPath
  299.             SetDriveStatus
  300.         END IF
  301.  
  302.         olddest$ = ""
  303.         GOTO CUSTINST
  304.     ELSEIF sz$ = "REACTIVATE" THEN
  305.         RecalcPath
  306.         SetDriveStatus
  307.         GOTO GETPATHL1
  308.     ELSEIF sz$ = "EXIT" THEN
  309.         GOSUB ASKQUIT
  310.         GOTO GETPATHL1
  311.     ELSE
  312.         UIPop 1
  313.         GOTO CUSTINST
  314.     END IF
  315.  
  316.  
  317.  
  318. OPTFILES1:
  319.     SetSymbolValue "RadioDefault", OPT1OPT$
  320. OPT1L1:
  321.     sz$ = UIStartDlg(CUIDLL$, OPTIONS, "FRadioDlgProc", APPHELP, HELPPROC$)
  322.     newopt$ = GetSymbolValue("ButtonChecked")
  323.  
  324.     IF sz$ = "CONTINUE" THEN
  325.         UIPop 1
  326.         IF newopt$ <> OPT1OPT$ THEN
  327.             OPT1OPT$ = newopt$
  328.             RecalcOptFiles OPTFILES1
  329.             SetDriveStatus
  330.         END IF
  331.         newopt$ = ""
  332.         GOTO CUSTINST
  333.     ELSEIF sz$ = "REACTIVATE" THEN
  334.         RecalcPath
  335.         SetDriveStatus
  336.         GOTO OPT1L1
  337.     ELSEIF sz$ = "EXIT" THEN
  338.         GOSUB ASKQUIT
  339.         GOTO OPT1L1
  340.     ELSE
  341.         UIPop 1
  342.         newopt$ = ""
  343.         GOTO CUSTINST
  344.     END IF
  345.  
  346.  
  347.  
  348. TOOBIG:
  349.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  350.     IF sz$ = "REACTIVATE" THEN
  351.         RecalcPath
  352.         SetDriveStatus
  353.         GOTO TOOBIG
  354.     END IF
  355.     UIPop 1
  356.     RETURN
  357.  
  358.  
  359.  
  360. BADPATH:
  361.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  362.     IF sz$ = "REACTIVATE" THEN
  363.         RecalcPath
  364.         SetDriveStatus
  365.         GOTO BADPATH
  366.     END IF
  367.     UIPop 1
  368.     RETURN
  369.  
  370.  
  371.  
  372. ASKQUIT:
  373.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  374.  
  375.     IF sz$ = "EXIT" THEN
  376.         UIPopAll
  377.         ERROR STFQUIT
  378.     ELSEIF sz$ = "REACTIVATE" THEN
  379.         GOTO ASKQUIT
  380.     ELSE
  381.         UIPop 1
  382.     END IF
  383.     RETURN
  384.  
  385.  
  386.  
  387. '**
  388. '** Purpose:
  389. '**     Adds the specified option files to the copy list.
  390. '** Arguments:
  391. '**     ftype%  - type of files to add, one of the following:
  392. '**             APPFILES, OPTFILES1
  393. '** Returns:
  394. '**     none.
  395. '*************************************************************************
  396. SUB AddOptFilesToCopyList (ftype%) STATIC
  397.  
  398.     IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
  399.         SrcDir$ = GetSymbolValue("STF_SRCDIR")
  400.         HELP$ = DEST$ + "\HELP"
  401.         IF ftype% = APPFILES THEN
  402.           EXPLAN$ = DEST$ + "\EXPLAN"
  403.           ADVICE$ = DEST$ + "\ADVICE"
  404.           QDB$ = DEST$ + "\QUEST"
  405.           USERS$ = DEST$ + "\USERS"
  406.           BMPS$ = DEST$ + "\BMPS"
  407.           AddSectionFilesToCopyList "System", SrcDir$, WINSYSDIR$
  408.           AddSectionFilesToCopyList "Exe", SrcDir$, DEST$
  409.           AddSectionFilesToCopyList "Explan", SrcDir$, EXPLAN$
  410.           AddSectionFilesToCopyList "Bitmap", SrcDir$, BMPS$
  411.           AddSectionFilesToCopyList "Advice", SrcDir$, ADVICE$
  412.           AddSectionFilesToCopyList "Question", SrcDir$, QDB$
  413.           AddSectionFilesToCopyList "PointHelp", SrcDir$, HELP$
  414.           AddSectionFilesToCopyList "Sched", SrcDir$, DEST$
  415.         ELSEIF ftype% = OPTFILES1 THEN
  416.           AddSectionFilesToCopyList "WinHelp", SrcDir$, DEST$
  417.           AddSectionFilesToCopyList "Windows", SrcDir$, GetWindowsDir
  418.         END IF
  419.         SrcDir$ = ""
  420.     END IF
  421. END SUB
  422.  
  423.  
  424. '**
  425. '** Purpose:
  426. '**     Recalculates disk space for the given option files and sets
  427. '**     the status info symbol "StatusItemsText".
  428. '** Arguments:
  429. '**     ftype% - type of files to add, one of the following:
  430. '**             APPFILES, OPTFILES1, OPTFILES2
  431. '** Returns:
  432. '**     none.
  433. '*************************************************************************
  434. SUB RecalcOptFiles (ftype%) STATIC
  435.     CursorSave% = ShowWaitCursor()
  436.     ClearCopyList
  437.     AddOptFilesToCopyList ftype%
  438.  
  439.     fExtra% = 0
  440.     IF ftype% = APPFILES THEN
  441.         ListSym$ = APPNEEDS$
  442.         IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  443.             ''Add extra cost to Windows drive for ini/progman, etc.
  444.             ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  445.             ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  446.             fExtra% = 1
  447.         END IF
  448.     ELSEIF ftype% = OPTFILES1 THEN
  449.         ListSym$ = OPT1NEEDS$
  450.     END IF
  451.  
  452.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  453.  
  454.     cost& = 0
  455.     FOR i% = 1 TO 26 STEP 1
  456.         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  457.     NEXT i%
  458.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  459.  
  460.     IF StillNeed& > 0 THEN
  461.         ReplaceListItem BIGLIST$, ftype%, "YES"
  462.     ELSE
  463.         ReplaceListItem BIGLIST$, ftype%, ""
  464.     END IF
  465.  
  466.     IF fExtra% THEN
  467.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  468.     END IF
  469.     RestoreCursor CursorSave%
  470.     ListSym$ = ""
  471. END SUB
  472.  
  473.  
  474. '**
  475. '** Purpose:
  476. '**     Recalculates disk space and sets option status info according
  477. '**     to the current destination path.
  478. '** Arguments:
  479. '**     none.
  480. '** Returns:
  481. '**     none.
  482. '*************************************************************************
  483. SUB RecalcPath STATIC
  484.  
  485.     CursorSave% = ShowWaitCursor()
  486.  
  487.     RecalcOptFiles APPFILES
  488.     RecalcOptFiles OPTFILES1
  489.  
  490.     RestoreCursor CursorSave%
  491. END SUB
  492.  
  493.  
  494. '**
  495. '** Purpose:
  496. '**     Sets drive status info according to latest disk space calcs.
  497. '** Arguments:
  498. '**     none.
  499. '** Returns:
  500. '**     none.
  501. '*************************************************************************
  502. SUB SetDriveStatus STATIC
  503.  
  504.     drive$ = MID$(DEST$, 1, 1)
  505.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  506.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%))
  507.     free& = GetFreeSpaceForDrive(drive$)
  508.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  509.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  510.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  511.  
  512.     IF drive$ = WINDRIVE$ THEN
  513.         ReplaceListItem DRIVETEXT$, 4, ""
  514.         ReplaceListItem DRIVETEXT$, 5, ""
  515.         ReplaceListItem DRIVETEXT$, 6, ""
  516.     ELSE
  517.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  518.         cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%))
  519.         IF cost& = 0 THEN
  520.             ReplaceListItem DRIVETEXT$, 4, ""
  521.             ReplaceListItem DRIVETEXT$, 5, ""
  522.             ReplaceListItem DRIVETEXT$, 6, ""
  523.         ELSE
  524.             free& = GetFreeSpaceForDrive(WINDRIVE$)
  525.             ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  526.             ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  527.             ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  528.         END IF
  529.     END IF
  530. END SUB
  531.  
  532.  
  533. '**
  534. '** Purpose:
  535. '**     Appends a file name to the end of a directory path,
  536. '**     inserting a backslash character as needed.
  537. '** Arguments:
  538. '**     szDir$  - full directory path (with optional ending "\")
  539. '**     szFile$ - filename to append to directory
  540. '** Returns:
  541. '**     Resulting fully qualified path name.
  542. '*************************************************************************
  543. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  544.     IF szDir$ = "" THEN
  545.         MakePath = szFile$
  546.     ELSEIF szFile$ = "" THEN
  547.         MakePath = szDir$
  548.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  549.         MakePath = szDir$ + szFile$
  550.     ELSE
  551.         MakePath = szDir$ + "\" + szFile$
  552.     END IF
  553. END FUNCTION
  554.  
  555.