home *** CD-ROM | disk | FTP | other *** search
/ CD-ROM Magazine 6 / cd-rommagazine6dennispublishingmarch1995.iso / pc / qt / setup.mst < prev    next >
Text File  |  1994-07-18  |  18KB  |  501 lines

  1.  
  2. rem ---------------------------------------------------------------------
  3. rem
  4. rem SETUP.MST    - MSSETUP Installation Script
  5. rem
  6. rem                Version 1.0
  7. rem
  8. rem                (c) 1988-1992 Apple Computer, Inc. All Rights Reserved.
  9. rem
  10. rem ---------------------------------------------------------------------
  11.  
  12. rem ---------------------------------------------------------------------
  13. rem
  14. rem Adapted slightly for the DK Sampler Disc setup, to avoid (c) infringement
  15. rem and to avoid supporting things DK doesn't support (e.g. French).
  16. rem
  17. rem ---------------------------------------------------------------------
  18.  
  19.  
  20. rem Required includes to interface with MSSETUP DLL's
  21. rem -------------------------------------------------
  22. '$INCLUDE 'setupapi.inc'
  23. '$INCLUDE 'msdetect.inc'
  24.  
  25.  
  26. rem Dialog box id's
  27. rem ---------------
  28. rem Note: If MSSETUP were really smart, we could use the
  29. rem #defines in DIALOGS.HR. Instead, we must manually
  30. rem keep them in step
  31. rem ----------------------------------------------------
  32.     CONST DESTPATH      = 300          ''Gets destination path
  33.     CONST EXITQUIT      = 600          ''Exits on user request
  34.     CONST EXITSUCCESS   = 700          ''Exits when install is done
  35.     CONST OPTIONS       = 800          ''Gets AUTOEXEC.BAT options
  36.     CONST ASKSETUP      = 1100         ''Gets installation type (Local etc)
  37.     CONST TOOBIG        = 6300         ''Not enough space on target disk error
  38.     CONST BADPATH       = 6400         ''Bad destination path error
  39.     CONST BADWINDOWS    = 6500         ''Wrong Windows release
  40.     CONST EXITFAILURE   = 6600         ''Exits on error
  41.  
  42.  
  43. rem String id's
  44. rem -----------
  45. rem Note: If MSSETUP were really smart, we could use the
  46. rem #defines in DIALOGS.HR. Instead, we must manually
  47. rem keep them in step
  48. rem ----------------------------------------------------
  49.     CONST STR_PLAYER    = 1024         ''Movie Player
  50.     CONST STR_VIEWER    = 1025         ''Picture Viewer
  51.     CONST STR_GROUP     = 1026         ''Program Manager group
  52.     CONST STR_TITLE     = 1027         ''Installer Title
  53.     CONST STR_MSG1      = 1028         ''Version error message part 1
  54.     CONST STR_MSG2      = 1029         ''Version error message part 2
  55.     CONST STR_MSG3      = 1030         ''Remove obsolete files?
  56.     CONST STR_WARNING   = 1031         ''Warning
  57.     CONST STR_HELP      = 1032         ''Help
  58.  
  59.  
  60. rem Miscellaneous Constants
  61. rem -----------------------
  62.     CONST NOLOGO = 1                   ''Dummy NULL bitmap (must be 1)
  63.     CONST LOGO = 2                     ''Background bitmap
  64.     CONST MOVIE = 2                    ''Movie placeholder bitmap
  65.     CONST NOSPACE = 1                  ''No space to complete install
  66.     CONST INSTALLOK = 2                ''Install completed OK
  67.     CONST INSTALLFAILED =3             ''Install failed for some reason
  68.  
  69.  
  70. rem Global Variables
  71. rem ----------------
  72.     GLOBAL SOURCE$                     ''Source directory
  73.     GLOBAL DEST$                       ''Default destination directory
  74.     GLOBAL SETUPTYPE$                  ''Setup type (Local, Client, Server)
  75.     GLOBAL LOCALINST$                  ''Local install
  76.     GLOBAL CLIENTINST$                 ''Client install
  77.     GLOBAL SERVERINST$                 ''Server install
  78.     GLOBAL MODAUTOEXECOPT$             ''Modify AUTOEXEC.BAT option
  79.     GLOBAL MODAUTOEXEC$                ''Modify AUTOEXEC.BAT
  80.     GLOBAL COPYAUTOEXEC$               ''Copy AUTOEXEC.BAT and modify it
  81.     GLOBAL CUIDLL$                     ''User interface DLL
  82.     GLOBAL SETUPPATH$                  ''Setup destination path
  83.     GLOBAL HELPPROC$                   ''Help dialog procedure
  84.     GLOBAL EXTRACOSTS$                 ''List of extra costs to add per drive
  85.     GLOBAL APPNEEDS$                   ''Disk space costs per drive
  86.     GLOBAL SECTIONKEY$                 ''INF file section key
  87.     GLOBAL SUCCESS%                    ''Installation completion code
  88.  
  89.  
  90. rem Initialize global vriables
  91. rem --------------------------
  92.     LOCALINST$      = "1"
  93.     CLIENTINST$     = "2"
  94.     SERVERINST$     = "3"
  95.     MODAUTOEXEC$    = "1"
  96.     COPYAUTOEXEC$   = "2"
  97.     SETUPPATH$      = "C:\QTW"
  98.     SETUPTYPE$      = LOCALINST$
  99.     SOURCE$         = GetSymbolValue("STF_SRCDIR")
  100.     DEST$           = SETUPPATH$
  101.     MODAUTOEXECOPT$ = MODAUTOEXEC$
  102.     SUCCESS%        = INSTALLFAILED
  103.     EXTRACOSTS$     = "ExtraCosts"
  104.     APPNEEDS$       = "AppNeeds"
  105.     SECTIONKEY$     = "SectionKey"
  106.  
  107.     FOR i% = 1 TO 26 STEP 1
  108.         AddListItem EXTRACOSTS$, "16384"
  109.     NEXT i%
  110.  
  111.  
  112. rem Get name of localized user interface dialogs
  113. rem --------------------------------------------
  114. rem    CUIDLL$ = "SETUP"+GetIniKeyString("WIN.INI", "intl", "sLanguage")+".DLL"
  115. rem    IF DoesFileExist(CUIDLL$, femExists) = 0 THEN
  116.        CUIDLL$ = "SETUPENU.DLL"
  117. rem    END IF
  118.  
  119.  
  120. rem Subroutines and Functions
  121. rem -------------------------
  122.     DECLARE FUNCTION Install AS INTEGER
  123.     DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  124.     DECLARE FUNCTION GetQTWVersion LIB "setupenu.dll" (szDLL$) AS INTEGER
  125.     DECLARE FUNCTION GetResourceString LIB "setupenu.dll" (szResource$, idString%) AS INTEGER
  126.     DECLARE FUNCTION StartCustomSetup LIB "setupenu.dll" (hinst%, hwnd%) AS INTEGER
  127.     DECLARE FUNCTION StopCustomSetup LIB "setupenu.dll" (hinst%, hwnd%) AS INTEGER
  128.     DECLARE FUNCTION UpdateAutoExecBat LIB "setupenu.dll" (szIn$, szOut$, szDest$) AS INTEGER
  129.     DECLARE FUNCTION WritePrivateProfileString LIB "krnl386.exe" (szSect$, szEntry$, szString$, szINI$) AS INTEGER
  130.  
  131.  
  132. rem Initialize custom setup logic
  133. rem -----------------------------
  134.     SetBitmap CUIDLL$, NOLOGO
  135.     i% = GetResourceString (CUIDLL$, STR_TITLE)
  136.     SetTitle GetSymbolValue ("ResourceString")
  137.     i% = StartCustomSetup (HinstFrame(), HwndFrame ())
  138.     i% = SetBeepingMode(1)
  139.  
  140.  
  141. rem Make sure that we are running on Windows 3.1 or better
  142. rem ------------------------------------------------------
  143.     IF GetWindowsMajorVersion() < 3 THEN
  144.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  145.        UIPop 1
  146.        GOTO CLEANUP
  147.     END IF
  148.  
  149.     IF (GetWindowsMajorVersion() = 3) AND (GetWindowsMinorVersion() < 10) THEN
  150.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  151.        UIPop 1
  152.        GOTO CLEANUP
  153.     END IF
  154.  
  155.  
  156. rem Make sure that we are running on a 286 or better
  157. rem ------------------------------------------------
  158.     IF GetWinFlags() AND 2 THEN
  159.        sz$ = UIStartDlg(CUIDLL$, BADWINDOWS, "FInfo0DlgProc", 0, "")
  160.        UIPop 1
  161.        GOTO CLEANUP
  162.     END IF
  163.  
  164.  
  165. rem Find and read the .INF file. We'll use DISKETTE.INF when installing
  166. rem from drive A: or B:, CD.INF otherwise.
  167. rem -------------------------------------------------------------------
  168.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  169.  
  170.     IF szInf$ = "" THEN
  171.        szTemp$ = GetSymbolValue("STF_SRCDIR")
  172.        SPLITPATH szTemp$, drv$, dir$, filename$, ext$
  173. rem       IF (drv$ = "A:") OR (drv$ = "B:") THEN
  174. rem          szInf$ = szTemp$ + "DISKETTE.INF"
  175. rem       ELSE
  176.           szInf$ = szTemp$ + "CD.INF"
  177.     END IF
  178.  
  179.     ReadInfFile szInf$
  180.  
  181.  
  182. rem Get the setup type: Local, Client or Server
  183. rem -------------------------------------------
  184. ITYPE:
  185.     SetSymbolValue "RadioDefault", SETUPTYPE$
  186.  
  187. ITYPEL1:
  188.     sz$ = UIStartDlg(CUIDLL$, ASKSETUP, "FRadioDlgProc", 0, "")
  189.  
  190.     SETUPTYPE$ = GetSymbolValue("ButtonChecked")
  191.  
  192.     IF sz$ = "CONTINUE" THEN
  193.        UIPop(1)
  194.  
  195.     ELSEIF sz$ = "REACTIVATE" THEN
  196.        GOTO ITYPEL1
  197.  
  198.     ELSE
  199.        GOSUB ASKQUIT
  200.        GOTO ITYPE
  201.  
  202.     END IF
  203.  
  204.  
  205. rem Get the AUTOEXEC.BAT modification option
  206. rem ----------------------------------------
  207. OPTIONC:
  208.     IF SETUPTYPE$ = SERVERINST$ THEN
  209.        GOTO GETPATH
  210.     END IF
  211.  
  212.     SetSymbolValue "RadioDefault", MODAUTOEXECOPT$
  213.  
  214. OPTL1:
  215.     sz$ = UIStartDlg(CUIDLL$, OPTIONS, "FRadioDlgProc", 0, "")
  216.  
  217.     MODAUTOEXECOPT$ = GetSymbolValue("ButtonChecked")
  218.  
  219.     IF sz$ = "CONTINUE" THEN
  220.        UIPop(1)
  221.  
  222.     ELSEIF sz$ = "REACTIVATE" THEN
  223.        GOTO OPTL1
  224.  
  225.     ELSEIF sz$ = "BACK" THEN
  226.        UIPop 1
  227.        GOTO ITYPE
  228.  
  229.     ELSE
  230.        GOSUB ASKQUIT
  231.        GOTO OPTIONC
  232.  
  233.     END IF
  234.  
  235.  
  236. rem Get the destination path; if it's bad, we display an error
  237. rem ----------------------------------------------------------------
  238. GETPATH:
  239.     IF SETUPTYPE$ = CLIENTINST$ THEN
  240.        DEST$ = SOURCE$
  241.        GOTO INSTALL
  242.     END IF
  243.  
  244.     SetSymbolValue "EditTextIn", DEST$
  245.     SetSymbolValue "EditFocus", "END"
  246.  
  247. GETPATHL1:
  248.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", 0, "")
  249.  
  250.     DEST$ = GetSymbolValue("EditTextOut")
  251.  
  252.     IF sz$ = "CONTINUE" THEN
  253.        IF IsDirWritable(DEST$) = 0 THEN
  254.           GOSUB BADPATH
  255.           GOTO GETPATHL1
  256.        END IF
  257.  
  258.        IF DoesFileExist(MakePath(DEST$, "bin\qtim.dll"), femExists) = 1 THEN
  259.           szError$ = MakePath(DEST$, "BIN")
  260.           i% = GetResourceString (CUIDLL$, STR_MSG1)
  261.           szError$ = szError$ + GetSymbolValue ("ResourceString")
  262.           i% = GetQTWVersion(MakePath(DEST$, "bin\qtim.dll"))
  263.           szVersion$ = GetSymbolValue ("VersionString")
  264.           szError$ = szError$ + szVersion$
  265.           i% = GetResourceString (CUIDLL$, STR_MSG2)
  266.           szError$ = szError$ + GetSymbolValue ("ResourceString")
  267.           i% = GetResourceString (CUIDLL$, STR_WARNING)
  268.           szCaption$ = GetSymbolValue ("ResourceString")
  269.           i% = DoMsgBox(szError$, szCaption$, 20)
  270.           UIPop 1
  271.           IF i% = 7 THEN
  272.              GOTO GETPATHL1
  273.           END IF
  274.           IF szVersion$ = "1.0.0" THEN
  275.              i% = GetResourceString (CUIDLL$, STR_MSG3)
  276.              szError$ = GetSymbolValue ("ResourceString")
  277.              i% = GetResourceString (CUIDLL$, STR_WARNING)
  278.              szCaption$ = GetSymbolValue ("ResourceString")
  279.              i% = DoMsgBox(szError$, szCaption$, 20)
  280.              IF i% = 6 THEN
  281.                 RemoveFile MakePath(DEST$, "bin\qcmc.dll"), cmoForce
  282.                 RemoveFile MakePath(DEST$, "bin\qtjpeg.dll"), cmoForce
  283.                 RemoveFile MakePath(DEST$, "bin\qtraw.dll"), cmoForce
  284.                 RemoveFile MakePath(DEST$, "bin\qtsmc.dll"), cmoForce
  285.                 RemoveFile MakePath(DEST$, "bin\qtrpza.dll"), cmoForce
  286.                 RemoveFile MakePath(DEST$, "bin\qtrle.dll"), cmoForce
  287.                 RemoveFile MakePath(DEST$, "bin\qtcvid.dll"), cmoForce
  288.                 RemoveFile MakePath(DEST$, "bin\qtrt21.dll"), cmoForce
  289.              END IF
  290.           END IF
  291.        END IF
  292.  
  293.        UIPop 1
  294.  
  295.     ELSEIF sz$ = "REACTIVATE" THEN
  296.        GOTO GETPATHL1
  297.  
  298.     ELSEIF sz$ = "BACK" THEN
  299.        UIPop 1
  300.        GOTO OPTIONC
  301.  
  302.     ELSE
  303.        GOSUB ASKQUIT
  304.        GOTO GETPATH
  305.  
  306.     END IF
  307.  
  308.  
  309. rem Perform actual installation
  310. rem ---------------------------
  311. INSTALL:
  312.     SUCCESS% = Install
  313.  
  314.     IF SUCCESS% = NOSPACE THEN
  315.        GOSUB TOOBIG
  316.        GOTO GETPATH
  317.     END IF
  318.  
  319.  
  320. rem When done, issue dialog
  321. rem -----------------------
  322. QUIT:
  323.     IF SUCCESS% = INSTALLOK THEN
  324.        sz$ = UIStartDlg(CUIDLL$, EXITSUCCESS, "FInfo0DlgProc", 0, "")
  325.     ELSE
  326.        sz$ = UIStartDlg(CUIDLL$, EXITFAILURE, "FInfo0DlgProc", 0, "")
  327.     END IF
  328.     UIPop 1
  329.  
  330.  
  331. rem Clean up all processing
  332. rem -----------------------
  333. CLEANUP:
  334.     i% = StopCustomSetup (HinstFrame(), HwndFrame ())
  335.  
  336.     END
  337.  
  338.  
  339. rem ASKQUIT: The user requested quit; does (s)he really want to?
  340. rem ------------------------------------------------------------
  341. ASKQUIT:
  342.     sz$ = UIStartDlg(CUIDLL$, EXITQUIT, "FInfoDlgProc", 0, "")
  343.     UIPop 1
  344.     IF sz$ = "CONTINUE" THEN
  345.        RETURN
  346.     END IF
  347.     GOTO CLEANUP
  348.  
  349.  
  350. rem BADPATH: The user entered an invalid destination directory
  351. rem ----------------------------------------------------------
  352. BADPATH:
  353.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  354.     IF sz$ = "REACTIVATE" THEN
  355.        GOTO BADPATH
  356.     END IF
  357.     UIPop 1
  358.  
  359.     RETURN
  360.  
  361.  
  362. rem TOOBIG: The source files won't fit on the requested destination disk
  363. rem --------------------------------------------------------------------
  364. TOOBIG:
  365.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  366.     IF sz$ = "REACTIVATE" THEN
  367.        GOTO TOOBIG
  368.     END IF
  369.     UIPop 1
  370.  
  371.     RETURN
  372.  
  373.  
  374. rem Install: Perform actual installation
  375. rem ------------------------------------
  376. FUNCTION Install STATIC AS INTEGER
  377.  
  378.     rem For Local or Server installs ...
  379.     rem --------------------------------
  380.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = SERVERINST$) THEN
  381.  
  382.        rem Create the destination directory
  383.        rem --------------------------------
  384.            CreateDir DEST$, cmoNone
  385.  
  386.        rem Build the copy list
  387.        rem -------------------
  388.            AddSectionFilesToCopyList "Files", SOURCE$, DEST$
  389.            IF SETUPTYPE$ = SERVERINST$ THEN
  390.               AddSectionFilesToCopyList "Setup", SOURCE$, DEST$
  391.            END IF
  392.  
  393.        rem Check that we have enough free space to perform the install
  394.        rem -----------------------------------------------------------
  395.            ListSym$ = APPNEEDS$
  396.            StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  397.  
  398.            drive$ = MID$(DEST$, 1, 1)
  399.            ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  400.            cost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  401.            free& = GetFreeSpaceForDrive(drive$)
  402.  
  403.            IF cost& >= free& THEN
  404.               Install = NOSPACE
  405.               EXIT FUNCTION
  406.            END IF
  407.  
  408.        rem Copy files necessary for installation from server
  409.        rem -------------------------------------------------
  410.        rem    IF SETUPTYPE$ = SERVERINST$ THEN
  411.        rem       CopyFile MakePath(SOURCE$, "CD.INF"), MakePath(DEST$, "CD.INF"), cmoOverwrite, 0
  412.        rem       CopyFile MakePath(SOURCE$, "DISKETTE.INF"), MakePath(DEST$, "DISKETTE.INF"), cmoOverwrite, 0
  413.        rem       CopyFile MakePath(SOURCE$, "DISK1.ID"), MakePath(DEST$, "DISK1.ID"), cmoOverwrite, 0
  414.        rem    END IF
  415.  
  416.        rem Copy all the files from the source to the destination
  417.        rem -----------------------------------------------------
  418.            CopyFilesInCopyList
  419.  
  420.         END IF
  421.  
  422.     rem Update AUTOEXEC.BAT
  423.     rem -------------------
  424.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  425.            i% = UpdateAutoExecBat("C:\AUTOEXEC.BAT", "C:\AUTOEXEC.QTW", DEST$)
  426.            IF MODAUTOEXECOPT$ = MODAUTOEXEC$ THEN
  427.               CopyFile "C:\AUTOEXEC.BAT", "C:\AUTOEXEC.BAK", cmoOverwrite, 0
  428.               CopyFile "C:\AUTOEXEC.QTW", "C:\AUTOEXEC.BAT", cmoOverwrite, 0
  429.               RemoveFile "C:\AUTOEXEC.QTW", cmoForce
  430.            END IF
  431.         END IF
  432.  
  433.     rem Update WIN.INI and SYSTEM.INI
  434.     rem -----------------------------
  435.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  436.            CreateIniKeyValue "WIN.INI", "Extensions", "mov", MakePath(DEST$,"bin\player.exe") + " ^.mov", cmoNone
  437.            CreateIniKeyValue "WIN.INI", "Extensions", "pic", MakePath(DEST$,"bin\viewer.exe") + " ^.pic", cmoNone
  438.            CreateIniKeyValue "WIN.INI", "MCI Extensions", "mov", "QTWVideo", cmoNone
  439.            CreateIniKeyValue "WIN.INI", "MCI Extensions", "pic", "QTWVideo", cmoNone
  440.            CreateIniKeyValue "WIN.INI", "MCI Extensions", "jpg", "QTWVideo", cmoNone
  441.            i% = WritePrivateProfileString("MCI", "QTWVideo", MakePath(DEST$, "bin\mciqtw.drv"), "SYSTEM.INI")
  442.         END IF
  443.  
  444.     rem Update Registration Database
  445.     rem ----------------------------
  446.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  447.            RUN MakePath(DEST$, "bin\player.exe") + " install"
  448.            RUN MakePath(DEST$, "bin\viewer.exe") + " install"
  449.         END IF
  450.  
  451.     rem Create QTW.INI
  452.     rem ----------------
  453.         IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  454.            ini$ = MakePath(GetWindowsDir(), "QTW.INI")
  455.            CreateIniKeyValue ini$, "QuickTime for Windows", "Implementation", "Full" , cmoNone
  456.         END IF
  457.  
  458.     rem Create a Program Manager group
  459.     rem ------------------------------
  460.     rem Not sure we've got the rights...
  461.     rem    IF (SETUPTYPE$ = LOCALINST$) OR (SETUPTYPE$ = CLIENTINST$) THEN
  462.     rem       i% = GetResourceString (CUIDLL$, STR_GROUP)
  463.     rem       GROUP$ = GetSymbolValue ("ResourceString")
  464.     rem       CreateProgmanGroup GROUP$, "", cmoNone
  465.     rem       i% = GetResourceString (CUIDLL$, STR_PLAYER)
  466.     rem       CreateProgmanItem GROUP$, GetSymbolValue ("ResourceString"), MakePath(DEST$,"bin\player.exe"), "", cmoOverwrite
  467.     rem       i% = GetResourceString (CUIDLL$, STR_VIEWER)
  468.     rem       CreateProgmanItem GROUP$, GetSymbolValue ("ResourceString"), MakePath(DEST$,"bin\viewer.exe"), "", cmoOverwrite
  469.     rem       i% = GetResourceString (CUIDLL$, STR_HELP)
  470.     rem       CreateProgmanItem GROUP$, GetSymbolValue ("ResourceString"), "WinHelp " + MakePath(DEST$,"help\qtw.hlp"), ",,,," + DEST$, cmoOverwrite
  471.     rem       CreateProgmanItem GROUP$, "Read Me", "write " + MakePath(DEST$,"readme.wri"), ",,,," + DEST$, cmoOverwrite
  472.     rem    END IF
  473.  
  474.     rem Indicate install completed OK
  475.     rem -----------------------------
  476.         Install = INSTALLOK
  477.  
  478. END FUNCTION
  479.  
  480.  
  481. rem MakePath: Builds path from directory and file
  482. rem ---------------------------------------------
  483. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  484.  
  485.     IF szDir$ = "" THEN
  486.        MakePath = szFile$
  487.  
  488.     ELSEIF szFile$ = "" THEN
  489.        MakePath = szDir$
  490.  
  491.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  492.        MakePath = szDir$ + szFile$
  493.  
  494.     ELSE
  495.        MakePath = szDir$ + "\" + szFile$
  496.  
  497.     END IF
  498.  
  499. END FUNCTION
  500.  
  501.