home *** CD-ROM | disk | FTP | other *** search
/ Inside Multimedia 1995 May / IMM0595.ISO / demo / musicato / disk1 / setup.ms_ / setup.ms
Encoding:
Text File  |  1995-03-26  |  32.6 KB  |  997 lines

  1. ' ------------- Copyright (c) Jo Brodtkorb, Musicator 1992-93 ---------------
  2. ' ***************************************************************************
  3. '
  4. ' FILE NAME        : c:\mw21inst\setup.mst
  5. ' CREATED          : 92.12.15
  6. ' LAST UPDATED     : 95.2.21
  7. ' PURPOSE          : Setupprogram for Musicator Win 2.1
  8. '
  9. ' INIT  DATE         LOG (Newest first)
  10. ' ---------------------------------------------------------------------------
  11. ' Sven  93.01.04     Support for a demo verion of Musicator Win
  12. ' Sven  92.12.15     Initial version created
  13. ' **************************************************************************
  14.  
  15. ' --------------------------------------------------------------------------
  16. '
  17. ' Denne seksjonen skal redigeres for de forskjellige typer installasjon
  18. '
  19. ' Neste linje kommenteres ut med '' hvis installasjonen ikke er en demoversjon
  20. ' Når linjen ikke er kommentert ut ser den slik ut: '$DEFINE DEMO
  21. ' Av '$DEFINE DEMO
  22. ' --------------------------------------------------------------------------
  23.  
  24. '' '$DEFINE DEBUG  ''Define for script development/debugging
  25.  
  26. '-- Includes ---------------------------------------------------------------
  27.  
  28. '$INCLUDE 'setupapi.inc'
  29. '$INCLUDE 'msdetect.inc'
  30.  
  31.  
  32. '-- Constants --------------------------------------------------------------
  33.  
  34. CONST szBadDisks$ = "Setup disks may be corrupted.  Please contact your Dealer."
  35. CONST szKB$       = " K"
  36. CONST szMB$       = " MB"
  37. '$IFDEF DEMO
  38.     CONST szTitle$      = "Musicator Win Demo Setup"
  39.     CONST szGroupName$  = "Musicator Win Demo"
  40.     CONST szProgramName$= "Musicator Win Demo"
  41.     CONST szDefDir$   = "C:\MW2-DEMO"
  42. '$ELSE
  43.     CONST szTitle$      = "Musicator Win Demo Setup"
  44.     CONST szGroupName$  = "Musicator Win Demo"
  45.     CONST szProgramName$= "Musicator Win Demo"
  46.     CONST szDefDir$   = "C:\MW21demo"
  47. '$ENDIF
  48. CONST szInfName$  = "SETUP.INF"
  49. CONST fTRUE%      = 1
  50. CONST fFALSE%     = 0
  51. CONST szON$       = "ON"
  52. CONST szOFF$      = "OFF"
  53. CONST MinTempSpace%     = 3072
  54. CONST EWRestartWin&     = 42
  55. CONST EWRebootSystem&   = 43
  56. CONST MaxNoOfDisks%     = 26
  57.  
  58. ''Dialog ID's (must match those in DIALOGS.H)
  59. CONST WELCOME       = 1100
  60. CONST WELCOMEDEMO   = 1101  ' Demo version of Musicator Win
  61. CONST CUSTINST      = 1200
  62. CONST CUSTINSTDEMO  = 1201
  63. CONST ASKQUIT       = 1300
  64. CONST ASKQUITDEMO   = 1301
  65. CONST ASKATM        = 1400
  66. CONST ASKATMDEMO    = 1401
  67. CONST GETPATH       = 1500
  68. CONST GETPATHDEMO   = 1501
  69. CONST BADDIR        = 1600
  70. CONST BADDIRDEMO    = 1601
  71. CONST CREATEPATH    = 1700
  72. CONST CREATEPATHDEMO= 1701
  73. CONST WAITSIZE      = 1800
  74. CONST WAITSIZEDEMO  = 1801
  75. CONST EXITSUCCESS   = 1900
  76. CONST EXITSUCCESSDEMO = 1901
  77. CONST EXITQUIT      = 2000
  78. CONST EXITQUITDEMO  = 2001
  79. CONST HELPINSTALL   = 2100
  80. CONST HELPINSTALLDEMO = 2101
  81. CONST HELPPATH      = 2200
  82. CONST HELPPATHDEMO  = 2201
  83. CONST TOOBIG        = 2300
  84. CONST TOOBIGDEMO    = 2301
  85. CONST EXITFAILURE   = 2400
  86. CONST EXITFAILUREDEMO = 2401
  87. CONST RESTARTWIN    = 2500
  88. CONST RESTARTWINDEMO= 2501
  89. ' CONST BWCCEXISTS  = 2600
  90. ' CONST BWCCNEW     = 2700
  91. ' CONST BWCCOLD     = 2800
  92. ' CONST BWCCHELP    = 2900
  93. CONST CDCONFIRMINFO = 3000
  94. CONST CDGETNAMEORG  = 3100
  95. CONST CDALREADYUSED = 3200
  96. CONST CDBADFILE     = 3300
  97. CONST CDBADNAMEORG  = 3400
  98.  
  99. ''Bitmap ID (must match those in DIALOGS.RC)
  100. '$IFDEF DEMO
  101.    CONST LOGO = 2
  102. '$ELSE
  103.    CONST LOGO = 1
  104. '$ENDIF
  105.  
  106. '-- Globals ----------------------------------------------------------------
  107. GLOBAL  szDir$              ''Destination directory
  108. GLOBAL  szDrive$            ''Destination drive
  109. GLOBAL  szWinDrive$         ''Windows drive
  110. GLOBAL  cbDrive&            ''Space available on destination drive
  111. GLOBAL  cbWinDrive&         ''Space available on Windows drive
  112. GLOBAL  szSrcDir$           ''Source directory
  113. GLOBAL  szWinDir$           ''Windows directory
  114. GLOBAL  fATMFiles%          ''Install ATM or TrueType
  115. GLOBAL  cbMGWFiles&         ''KBytes required for basic GWS
  116. GLOBAL  cbWinFiles&         ''KBytes required for files in Windows directory
  117. GLOBAL  CUIDLL$             ''Dialog/Images DLL
  118. GLOBAL  HELPPROC$           ''Help dialog procedure
  119. GLOBAL  DriveList$          ''List of available drives
  120. GLOBAL  szCDOrganization$   ''Organisation that owns the produkt
  121. GLOBAL  szCDName$           ''Person that owns the produkt
  122.  
  123.  
  124. '-- Declaratin of DLL functions---------------------------------------------
  125. DECLARE FUNCTION SetupCryptName LIB "mscuistf.dll" (szInString$, szOutString$) AS INTEGER
  126. ' DECLARE FUNCTION ExitWindows LIB "user.exe" (dwReturnCode&, iReserved%) AS INTEGER
  127. DECLARE FUNCTION ExitWindowsExec LIB "user.exe" (lpszExe$, lpszParams$) AS INTEGER
  128.  
  129. '-- Prototypes -------------------------------------------------------------
  130. DECLARE SUB BadPath
  131. DECLARE SUB CalcPathSpace
  132. DECLARE SUB CheckTempSpace
  133. DECLARE SUB CheckATM
  134. DECLARE FUNCTION CreateInstallPath(szDir$) AS STRING
  135. DECLARE FUNCTION AskForBWCC AS INTEGER
  136. DECLARE SUB DetermineSizes
  137. DECLARE SUB GetDriveList
  138. DECLARE SUB GetInstallPath
  139. DECLARE SUB Install
  140. DECLARE SUB InsufficientSpace
  141. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  142.  
  143.  
  144. '---------------------------------------------------------------------------
  145. ' INIT:  Load globals and read .INF file
  146. '---------------------------------------------------------------------------
  147. INIT:
  148.    SetTitle szTitle$
  149.    CursorSave% = ShowWaitCursor()
  150.    CUIDLL$   = "mscuistf.dll"          ''Custom user interface dll
  151.    HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  152.  
  153.    SetBitmap CUIDLL$, LOGO
  154.  
  155.    szInf$ = GetSymbolValue("STF_SRCINFPATH")
  156.    IF szInf$ = "" THEN
  157.       szInf$ = GetSymbolValue("STF_CWDDIR") + szInfName$
  158.    END IF
  159.    ReadInfFile szInf$
  160.  
  161.    szWinDir$ = GetWindowsDir()
  162.    szWinDrive$ = MID$(szWinDir$, 1, 1)
  163. '$IFDEF DEBUG
  164.    i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  165.    '' IsDirWriteable does not work propably
  166.    IF IsDriveValid(szWinDrive$) = fFALSE% THEN
  167.       i% = DoMsgBox("Windows drive ('"+szWinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  168.       GOTO QUIT
  169.    END IF
  170. '$ENDIF ''DEBUG
  171.    RestoreCursor CursorSave%
  172.  
  173.  
  174. '---------------------------------------------------------------------------
  175. ' WELCOME:  Display Welcome dialog
  176. '---------------------------------------------------------------------------
  177. WELCOME:
  178. '$IFDEF DEMO
  179. '     sz$ = UIStartDlg(CUIDLL$, WELCOMEDEMO, "FInfoDlgProc", HELPINSTALLDEMO, HELPPROC$)
  180.    sz$ = UIStartDlg(CUIDLL$, WELCOMEDEMO, "FInfoDlgProc", 0, "")
  181. '$ELSE
  182.    sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", 0, "")
  183. '$ENDIF
  184.    IF sz$ = "CONTINUE" THEN
  185.       UIPop 1
  186.    ELSE
  187.       GOSUB ASKQUIT
  188.       GOTO WELCOME
  189.    END IF
  190.  
  191. CHECKPROSESSOR:
  192.    IF GetProcessorType() < 3 THEN ' Less than 80386
  193.       i% = DoMsgBox("'" + Ltrim$(Str$(GetProcessorType())) + "' is not a legal machine", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  194.       GOSUB ASKQUIT
  195.       GOTO CHECKDOS
  196.    ENDIF
  197.  
  198. CHECKDOS:
  199. '     IF GetDOSMajorVersion() = 3 THEN
  200. '         IF GetDOSMinorVersion() = 3 THEN
  201. '             GOTO CHECKWINDOWS
  202. '         ENDIF
  203. '     ELSEIF GetDOSMajorVersion() = 4 THEN
  204. '         IF GetDOSMinorVersion() = 1 THEN
  205. '             GOTO CHECKWINDOWS
  206. '         ENDIF
  207. '     ELSEIF GetDOSMajorVersion() > 4 THEN
  208. '         GOTO CHECKWINDOWS
  209. '     ENDIF
  210. '     i% = DoMsgBox(Ltrim$(Str$(GetDOSMajorVersion()))+"."+Ltrim$(Str$(GetDOSMinorVersion()))+ " is not a legal DOS version", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  211. '     GOSUB ASKQUIT
  212. '     GOTO CHECKDOS
  213.  
  214. CHECKWINDOWS:
  215.    IF GetWindowsMajorVersion() < 3 THEN
  216.       i% = DoMsgBox(Ltrim$(Str$(GetWindowsMajorVersion()))+"."+Ltrim$(Str$(GetWindowsMinorVersion()))+ " is not a legal Windows version", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  217.       GOSUB ASKQUIT
  218.       GOTO CHECKWINDOWS
  219.    ELSEIF GetWindowsMajorVersion() = 3 THEN
  220.       IF GetWindowsMinorVersion() = 0 THEN
  221.          i% = DoMsgBox(Ltrim$(Str$(GetWindowsMajorVersion()))+"."+Ltrim$(Str$(GetWindowsMinorVersion()))+ " is not a legal Windows version", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  222.       ENDIF
  223.    ELSEIF GetWindowsMajorVersion() > 3 THEN
  224. '             i% = DoMsgBox(Ltrim$(Str$(GetWindowsMajorVersion()))+"."+Ltrim$(Str$(GetWindowsMinorVersion()))+ " is not a legal Windows version", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  225.    ENDIF
  226.  
  227.     GOTO CUSTINST
  228.  
  229. '---------------------------------------------------------------------------
  230. ' GETOWNER: Get name and organization (the owner of the product)
  231. '---------------------------------------------------------------------------
  232. GETOWNER:
  233.    sz$ = UIStartDlg(CUIDLL$, CDGETNAMEORG, "FNameOrgDlgProc", 0, "")
  234.    IF sz$ = "CONTINUE" THEN
  235.       szCDOrganization$ = GetSymbolValue("OrgOut")
  236.       szCDName$         = GetSymbolValue("NameOut")
  237.       UIPop 1
  238.    ELSEIF sz$ = "EXIT" THEN
  239.       GOSUB ASKQUIT
  240.       GOTO GETOWNER
  241.    ELSE
  242.       UIPop 1
  243.       GOTO GETOWNER
  244.    END IF
  245.  
  246. '---------------------------------------------------------------------------
  247. ' EMPTYOWNER: Check if name and organization are empty
  248. '---------------------------------------------------------------------------
  249. EMPTYOWNER:
  250.    IF (szCDOrganization$ = "") AND (szCDName$ = "") THEN
  251.       sz$ = UIStartDlg(CUIDLL$, CDBADNAMEORG, "FInfoDlgProc", 0, "")
  252.       IF sz$ = "CONTINUE" THEN
  253.          UIPop 1
  254.          GOTO GETOWNER
  255.       ELSE
  256.          GOSUB ASKQUIT
  257.          GOTO EMPTYOWNER
  258.       ENDIF
  259.    ENDIF
  260.  
  261. '---------------------------------------------------------------------------
  262. ' CONFIRMOWNER: Confirm name and organization
  263. '---------------------------------------------------------------------------
  264. CONFIRMOWNER:
  265.    ConfirmTextIn$ = "ConfirmTextIn"
  266.    AddListItem ConfirmTextIn$, szCDOrganization$
  267.    AddListItem ConfirmTextIn$, szCDName$
  268.    sz$ = UIStartDlg(CUIDLL$, CDCONFIRMINFO, "FConfirmDlgProc", 0, "")
  269.    RemoveSymbol ConfirmTextIn$
  270.    IF sz$ = "BACK" THEN
  271.       UIPop 1
  272.       GOTO GETOWNER
  273.    ELSEIF sz$ = "CONTINUE" THEN
  274.       UIPop 1
  275.    ELSE
  276.       GOSUB ASKQUIT
  277.       GOTO CONFIRMOWNER
  278.    ENDIF
  279.  
  280. '---------------------------------------------------------------------------
  281. ' CHECKOWNER: Check name and organization
  282. '---------------------------------------------------------------------------
  283. CHECKOWNER:
  284.    szSrcDir$ = GetSymbolValue("STF_SRCDIR")
  285.    ini$ = MakePath (szSrcDir$, "setup.ini")
  286.    szOldOrg$  = GetIniKeyString (ini$, "Names", "MusicatorGSOrganisation")
  287.    szOldName$ = GetIniKeyString (ini$, "Names", "MusicatorGSName")
  288. '   i% = SetupCryptName( szCDOrganization$, Ucase$(szCDOrganization$) )
  289. '   i% = SetupCryptName( szCDName$, Ucase$(szCDName$) )
  290.    IF (szOldOrg$ = "HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{") THEN
  291.       IF (szOldName$ = "HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{") THEN
  292.       ELSE
  293.          IF (szCDOrganization$ <> szOldOrg$) OR (szCDName$ <> szOldName$) THEN
  294.             sz$ = UIStartDlg(CUIDLL$, CDBADFILE, "FInfoDlgProc", 0, "")
  295.             IF sz$ = "CONTINUE" THEN
  296.                UIPop 1
  297.             ELSE
  298.                GOSUB ASKQUIT
  299.                GOTO CHECKOWNER
  300.             ENDIF
  301.          ENDIF
  302.       ENDIF
  303.    ELSE
  304.       IF (szCDOrganization$ <> szOldOrg$) OR (szCDName$ <> szOldName$) THEN
  305.          sz$ = UIStartDlg(CUIDLL$, CDBADFILE, "FInfoDlgProc", 0, "")
  306.          IF sz$ = "CONTINUE" THEN
  307.             UIPop 1
  308.          ELSE
  309.             GOSUB ASKQUIT
  310.             GOTO CHECKOWNER
  311.          ENDIF
  312.       ENDIF
  313.    ENDIF
  314.    ini$ = MakePath (szSrcDir$, "setup.ini")
  315.    CreateIniKeyValue ini$, "Names", "MusicatorGSOrganisation", szCDOrganization$, cmoAll
  316.    CreateIniKeyValue ini$, "Names", "MusicatorGSName", szCDName$, cmoAll
  317.  
  318. '---------------------------------------------------------------------------
  319. ' CUSTINST:  Get users installation selections
  320. '---------------------------------------------------------------------------
  321. CUSTINST:
  322.    CursorSave% = ShowWaitCursor()
  323. '$IFDEF DEMO
  324.    sz$ = UIStartDlg(CUIDLL$, WAITSIZEDEMO, "FModelessDlgProc", 0, "")
  325. '$ELSE
  326.    sz$ = UIStartDlg(CUIDLL$, WAITSIZE, "FModelessDlgProc", 0, "")
  327. '$ENDIF
  328.    szDir$ = szDefDir$
  329.    DRIVETEXT$   = "DriveStatusText"
  330.    FOR i% = 1 to 7 STEP 1
  331.       AddListItem DRIVETEXT$, ""
  332.    NEXT i%
  333.    GetDriveList
  334.    iMaxDiskNo% = GetListLength (DriveList$)
  335.  
  336.    iFound% = fFALSE%
  337.    FOR iDiskNo% = 1 TO iMaxDiskNo% STEP 1
  338.       szDrive$ = MID$(GetListItem (DriveList$, iDiskNo%), 1, 1)
  339.       szDir$ = szDrive$ + MID$(szDir$, 2)
  340.       DetermineSizes
  341.       CalcPathSpace
  342.       IF szWinDrive$ = szDrive$ THEN
  343.          cbTotal& = cbMGWFiles& + cbWinFiles&
  344.       ELSE
  345.          cbTotal& = cbMGWFiles&
  346.       ENDIF
  347.       IF cbTotal& < cbDrive&  THEN
  348.          iFound% = fTRUE%
  349.          EXIT FOR
  350.       ENDIF
  351.    NEXT iDiskNo%
  352.    IF iFound% = fFALSE% THEN
  353.       szDir$ = szDefDir$
  354.       DetermineSizes
  355.       CalcPathSpace
  356.    ENDIF
  357.    UIPop 1     ''WaitSize
  358.    RestoreCursor CursorSave%
  359. ASKI1:
  360.    IF szWinDrive$ = szDrive$ THEN
  361.         cbTotal&    = cbMGWFiles& + cbWinFiles&
  362.         cbWinTotal& = fFALSE%
  363.     ELSE
  364.         cbTotal&    = cbMGWFiles&
  365.         cbWinTotal& = cbWinFiles&
  366.     ENDIF
  367.  
  368.     ReplaceListItem DRIVETEXT$, 1, szDrive$ + ":"
  369.     ReplaceListItem DRIVETEXT$, 2, Ltrim$(Str$(cbTotal&))+szKB
  370.     ReplaceListItem DRIVETEXT$, 3, Ltrim$(Str$(cbDrive&))+szKB
  371.     ReplaceListItem DRIVETEXT$, 7, szDir$
  372.  
  373.     IF szWinDrive$ = szDrive$ THEN
  374.         ReplaceListItem DRIVETEXT$, 4, ""
  375.         ReplaceListItem DRIVETEXT$, 5, ""
  376.         ReplaceListItem DRIVETEXT$, 6, ""
  377.     ELSE
  378.         ReplaceListItem DRIVETEXT$, 4, szWinDrive$ + ":"
  379.         ReplaceListItem DRIVETEXT$, 5, Ltrim$(Str$(cbWinTotal&))+szKB
  380.         ReplaceListItem DRIVETEXT$, 6, Ltrim$(Str$(cbWinDrive&))+szKB
  381.     ENDIF
  382.  
  383. '$IFDEF DEMO
  384.     sz$ = UIStartDlg(CUIDLL$, CUSTINSTDEMO, "FCustInstDlgProc", HELPINSTALLDEMO, HELPPROC$)
  385. '$ELSE
  386.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", HELPINSTALL, HELPPROC$)
  387. '$ENDIF
  388.  
  389.     IF sz$ = "CONTINUE" THEN
  390.         IF cbTotal& > cbDrive& THEN
  391.             InsufficientSpace
  392.             GOTO ASKI1
  393.         END IF
  394.         CheckTempSpace
  395.         CheckATM
  396.         UIPop 1
  397.     ELSEIF sz$ = "PATH" THEN
  398.         GetInstallPath
  399.         GOTO ASKI1
  400.     ELSEIF sz$ = "REACTIVATE" THEN
  401.         GOTO ASKI1
  402.     ELSEIF sz$ = "EXIT" THEN
  403.         GOSUB ASKQUIT
  404.         GOTO ASKI1
  405.     ELSE
  406.         GOTO ASKI1
  407.     END IF
  408.     UIPop 1
  409.  
  410.     Install
  411.  
  412.  
  413.  
  414. '---------------------------------------------------------------------------
  415. ' QUIT:  Exit setup
  416. '---------------------------------------------------------------------------
  417. QUIT:
  418.    ON ERROR GOTO ERRQUIT
  419.  
  420.    IF ERR = 0 THEN
  421. '$IFDEF DEMO
  422.       dlg% = EXITSUCCESSDEMO
  423. '$ELSE
  424.       dlg% = EXITSUCCESS
  425. '$ENDIF
  426.    ELSEIF ERR = STFQUIT THEN
  427. '$IFDEF DEMO
  428.       dlg% = EXITQUITDEMO
  429. '$ELSE
  430.       dlg% = EXITQUIT
  431. '$ENDIF
  432.    ELSE
  433. '$IFDEF DEMO
  434.       dlg% = EXITFAILUREDEMO
  435. '$ELSE
  436.       dlg% = EXITFAILURE
  437. '$ENDIF
  438.    END IF
  439.  
  440. QUITL1:
  441.    sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  442.    IF sz$ = "REACTIVATE" THEN
  443.       GOTO QUITL1
  444.    END IF
  445.    UIPop 1
  446.  
  447. AGAIN:
  448.    IF ERR = 0 THEN
  449.  
  450. ''      IF RestartListEmpty() = fFALSE% THEN
  451. '$IFDEF DEMO
  452.       sz$ = UIStartDlg(CUIDLL$, RESTARTWINDEMO, "FInfoDlgProc", 0, "")
  453. '$ELSE
  454.       sz$ = UIStartDlg(CUIDLL$, RESTARTWIN, "FInfoDlgProc", 0, "")
  455. '$ENDIF
  456.       IF sz$ = "CONTINUE" THEN
  457.          UIPop 1
  458.       ELSEIF sz$ = "BACK" THEN
  459.          UIPop 1
  460.          END
  461.       ELSE
  462.          UIPop 1
  463.          GOTO AGAIN
  464.       END IF
  465.       i% = ExitExecRestart
  466. '     IF i% = 0 THEN
  467.       i% = ExitWindowsExec ("WIN.COM", ":")
  468.       i% = DoMsgBox("Please close down and restart Windows.", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  469.       'END IF
  470. '     ELSE
  471. '        i% = ExitExecRestart
  472. '        i% = ExitWindowsExec("WIN.COM", ":")
  473. '        i% = DoMsgBox("Please close down and restart Windows.", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  474. '     ENDIF
  475.    ENDIF
  476.  
  477.    END
  478.  
  479. ERRQUIT:
  480.    i% = DoMsgBox(szBadDisks$, szTitle$, MB_OK+MB_TASKMODAL+MB_ICONHAND)
  481.    END
  482.  
  483.  
  484. '---------------------------------------------------------------------------
  485. ' ASKQUIT:  Ensure the user really wants to quit
  486. '---------------------------------------------------------------------------
  487. ASKQUIT:
  488. '$IFDEF DEMO
  489.     sz$ = UIStartDlg(CUIDLL$, ASKQUITDEMO, "FQuitDlgProc", 0, "")
  490. '$ELSE
  491.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  492. '$ENDIF
  493.  
  494.     IF sz$ = "EXIT" THEN
  495.         UIPopAll
  496.         ERROR STFQUIT
  497.     ELSEIF sz$ = "REACTIVATE" THEN
  498.         GOTO ASKQUIT
  499.     ELSE
  500.         UIPop 1
  501.     END IF
  502.     RETURN
  503.  
  504.  
  505. '*************************************************************************
  506. '                    S  U  B  R  O  U  T  I  N  E  S
  507. '*************************************************************************
  508.  
  509. '****************************************************************************
  510. ' FUNCTION         : BadPath
  511. '
  512. ' DESCRIPTION      : Display BADDIR dialog
  513. '
  514. ' NOTES            : Arguments none.
  515. '                    Returns none.
  516. '
  517. ' INIT  DATE         LOG (Newest first)
  518. ' ---------------------------------------------------------------------------
  519. ' SVBR  92.12.15     Initial version created
  520. '****************************************************************************/
  521. SUB BadPath STATIC
  522.  
  523. BADDIR1:
  524. '$IFDEF DEMO
  525.     sz$ = UIStartDlg(CUIDLL$, BADDIRDEMO, "FInfo0DlgProc", 0, "")
  526. '$ELSE
  527.     sz$ = UIStartDlg(CUIDLL$, BADDIR, "FInfo0DlgProc", 0, "")
  528. '$ENDIF
  529.     IF sz$ = "REACTIVATE" THEN
  530.         GOTO BADDIR1
  531.     END IF
  532.     UIPop 1
  533. END SUB ''End of BadPath
  534.  
  535. '*************************************************************************
  536. '** Routine: CalcPathSpace
  537. '** Purpose:
  538. '**     Determine free space on path drive.
  539. '** Arguments:
  540. '**     szDir
  541. '** Returns:
  542. '**     cbDrive
  543. '**     szDrive
  544. '*************************************************************************
  545. SUB CalcPathSpace STATIC
  546.     szDrive$ = Mid$(szDir$, 1, 1)
  547.     cbDrive& = GetFreeSpaceForDrive(Mid$(szDrive$,1, 1))
  548.     cbDrive& = (cbDrive& + 1023) / 1024
  549.     cbWinDrive& = GetFreeSpaceForDrive(Mid$(szWinDrive$,1, 1))
  550.     cbWinDrive& = (cbWinDrive& + 1023) / 1024
  551. END SUB
  552.  
  553. '*************************************************************************
  554. '** Routine: CheckTempSpace
  555. '** Purpose:
  556. '**     Check free space on temp-directory.
  557. '** Arguments:
  558. '**     none
  559. '** Returns:
  560. '**     none
  561. '*************************************************************************
  562. SUB CheckTempSpace STATIC
  563.     szTempDir$ = GetEnvVariableValue ("TEMP")
  564.     IF szTempDir$ = "" THEN
  565.         szTempDir$ = GetWindowsDir()
  566.     ENDIF
  567.     cbFree& = GetFreeSpaceForDrive(Mid$(szTempDir$,1, 1))
  568.     cbFree& = (cbFree& + 1023) / 1024
  569.     IF cbFree& < MinTempSpace% THEN
  570.         i% = DoMsgBox("It is recomended to use a TEMP-directory whith at least 3 MB free space. You have only " + Ltrim$(Str$(cbFree&)) + szKB$ + "!", szTitle$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  571.     ENDIF
  572. END SUB
  573.  
  574. '*************************************************************************
  575. '** Routine: CheckATM
  576. '** Purpose:
  577. '**     Determinate if the user has selected ATM
  578. '** Arguments:
  579. '**     none
  580. '** Returns:
  581. '**     none
  582. '*************************************************************************
  583. SUB CheckATM STATIC
  584.     ini$ = MakePath(GetWindowsDir, "ATM.INI")
  585.  
  586. AGAIN:
  587.     IF DoesFileExist (ini$, femExists) = fTRUE%  THEN
  588. '$IFDEF DEMO
  589.         sz$ = UIStartDlg(CUIDLL$, ASKATMDEMO, "FInfoDlgProc", 0, "")
  590. '$ELSE
  591.         sz$ = UIStartDlg(CUIDLL$, ASKATM, "FInfoDlgProc", 0, "")
  592. '$ENDIF
  593.         IF sz$ = "CONTINUE" THEN
  594.             UIPop 1
  595.             fATMFiles% = fTRUE%
  596.             IF GetIniKeyString (ini$, "Settings", "ATM") = "Off" THEN
  597.                 CreateIniKeyValue ini$, "Settings", "ATM", "On", cmoOverwrite
  598.             ENDIF
  599.         ELSEIF sz$ = "BACK" THEN
  600.             UIPop 1
  601.             fATMFiles% = fFALSE%
  602.         ELSE
  603.             UIPop 1
  604.             GOTO AGAIN
  605.         END IF
  606.  
  607.     ELSE
  608.         fATMFiles% = fFALSE%
  609.     ENDIF
  610. END SUB
  611.  
  612. '*************************************************************************
  613. '** Routine: AskForBWCC
  614. '** Purpose:
  615. '**
  616. '** Arguments:
  617. '**     none
  618. '** Returns:
  619. '**     none
  620. '*************************************************************************
  621. FUNCTION AskForBWCC STATIC AS INTEGER
  622.  
  623.     i% = DoMsgBox("Ikke implementert BWCC.DLL-sjekk", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  624. BWCCAGAIN:
  625.     sz$ = UIStartDlg(CUIDLL$, BWCCEXISTS, "FInfoDlgProc", BWCCHELP, HELPPROC$)
  626.  
  627.     ''Må fjerne BACK
  628.     IF sz$ = "BACK" THEN
  629.         UIPop 1
  630.         AskForBWCC = -1
  631.     ELSEIF sz$ = "CONTINUE" THEN
  632.         UIPop 1
  633.         AskForBWCC = fTRUE%
  634.     ELSEIF sz$ = "EXIT" THEN
  635.         UIPop 1
  636.         AskForBWCC = fFALSE%
  637.     ELSEIF sz$ = "CANCEL" THEN
  638.         UIPop 1
  639.         AskForBWCC = fFALSE%
  640.     ELSEIF sz$ = "REACTIVATE" THEN
  641.         GOTO BWCCAGAIN
  642.     ELSE
  643.         UIPop 1
  644.     END IF
  645.  
  646. END FUNCTION
  647.  
  648. '*************************************************************************
  649. '** Routine: CreateInstallPath
  650. '** Purpose:
  651. '**     Create destination directories
  652. '** Arguments:
  653. '**     none.
  654. '** Returns:
  655. '**     none.
  656. '*************************************************************************
  657. FUNCTION CreateInstallPath (szDir$) STATIC AS STRING
  658.     sz$ = "CONTINUE"
  659.     IF DoesDirExist(szDir$) <> 1 THEN
  660. CREATEPATH1:
  661. '$IFDEF DEMO
  662.     sz$ = UIStartDlg(CUIDLL$, CREATEPATHDEMO, "FInfo0DlgProc", 0, "")
  663. '$ELSE
  664.     sz$ = UIStartDlg(CUIDLL$, CREATEPATH, "FInfo0DlgProc", 0, "")
  665. '$ENDIF
  666.     IF sz$ = "REACTIVATE" THEN
  667.         GOTO CREATEPATH1
  668.     ELSEIF sz$ = "CONTINUE" THEN
  669.         CreateDir szDir$, cmoVital
  670.     END IF
  671.     UIPop 1
  672.     END IF
  673.     CreateInstallPath = sz$
  674. END FUNCTION
  675.  
  676. '*************************************************************************
  677. '** Routine: DetermineSizes
  678. '** Purpose:
  679. '**     Determine space required for each option.
  680. '** Arguments:
  681. '**     none.
  682. '** Returns:
  683. '**     cbMGWFiles
  684. '**     cbWinFiles
  685. '*************************************************************************
  686. SUB DetermineSizes STATIC
  687.     szSrcDir$ = GetSymbolValue("STF_SRCDIR")
  688.  
  689.     ClearCopyList
  690.     AddSectionFilesToCopyList "BasisFiles", szSrcDir$, szDir$
  691.     AddSectionFilesToCopyList "MctFiles", szSrcDir$, szDir$
  692.     IF szDir$ = szWinDir$ THEN
  693.     'AddSectionFilesToCopyList "BWCCdllFiles", szSrcDir$, MakePath (szWinDir$, "SYSTEM")
  694.     IF fATMFiles% = fTRUE% THEN
  695.         ini$ = MakePath(GetWindowsDir, "ATM.INI")
  696.         szPSpfmFontsPath$ = GetIniKeyString (ini$, "Setup", "PFM_Dir")
  697.         szPSpfbFontsPath$ = GetIniKeyString (ini$, "Setup", "PFB_Dir")
  698.         '' NB! SVBR B¢r sjekke om disse ligger på samme sted som Windows
  699.         AddSectionFilesToCopyList "ATMpfbFiles", szSrcDir$, szPSpfbFontsPath$
  700.         AddSectionFilesToCopyList "ATMpfmFiles", szSrcDir$, szPSpfmFontsPath$
  701. '           RenameFile MakePath(sz
  702.     ELSE
  703.         AddSectionFilesToCopyList "TrueTypeFiles", szSrcDir$, MakePath (szWinDir$, "SYSTEM")
  704.     ENDIF
  705.     ENDIF
  706.  
  707.     ListSym$ = "MGWNeeds"
  708.     i% = GetCopyListCost ("", ListSym$, "")
  709.     cbMGWFiles& = 0
  710.     FOR i% = 1 TO MaxNoOfDisks% STEP 1
  711.     cbMGWFiles&  = cbMGWFiles& + VAL(GetListItem(ListSym$, i%))
  712.     NEXT i%
  713.     cbMGWFiles& = (cbMGWFiles& + 1023) / 1024
  714.  
  715.     IF szDir$ <> szWinDir$ THEN
  716.     ClearCopyList
  717.     'AddSectionFilesToCopyList "BWCCdllFiles", szSrcDir$, szWinDir$
  718.     IF fATMFiles% = fTRUE% THEN
  719.         ini$ = MakePath(GetWindowsDir, "ATM.INI")
  720.         szPSpfmFontsPath$ = GetIniKeyString (ini$, "Setup", "PFM_Dir")
  721.         szPSpfbFontsPath$ = GetIniKeyString (ini$, "Setup", "PFB_Dir")
  722.         '' NB! SVBR B¢r sjekke om disse ligger på samme sted som Windows
  723.         AddSectionFilesToCopyList "ATMpfbFiles", szSrcDir$, szPSpfbFontsPath$
  724.         AddSectionFilesToCopyList "ATMpfmFiles", szSrcDir$, szPSpfmFontsPath$
  725.     ELSE
  726.         AddSectionFilesToCopyList "TrueTypeFiles", szSrcDir$, szWinDir$
  727.     ENDIF
  728.  
  729.     ListSym$ = "WindowsNeeds"
  730.     i% = GetCopyListCost ("", ListSym$, "")
  731.     cbWinFiles& = 0
  732.     FOR i% = 1 TO MaxNoOfDisks% STEP 1
  733.         cbWinFiles&  = cbWinFiles& + VAL(GetListItem(ListSym$, i%))
  734.     NEXT i%
  735.     cbWinFiles& = (cbWinFiles& + 1023) / 1024
  736.     ELSE
  737.     cbWinFiles& = 0
  738.     ENDIF
  739.  
  740.     ClearCopyList
  741.     ListSym$ = ""
  742. END SUB
  743.  
  744. '*************************************************************************
  745. '** Routine: GetDriveList
  746. '** Purpose:
  747. '**
  748. '** Arguments:
  749. '**     none.
  750. '** Returns:
  751. '**
  752. '*************************************************************************
  753. SUB GetDriveList STATIC
  754.     DriveList$ = "DriveList"
  755.     SetSymbolValue DriveList$, ""
  756.     TmpDriveList$ = "TmpDriveList"
  757.     GetValidDrivesList( TmpDriveList$ )
  758.     iMaxDiskNo% = GetListLength (TmpDriveList$)
  759.     RemovableDriveList$ = "RemovableDriveList"
  760.     GetRemovableDrivesList( RemovableDriveList$ )
  761.     iMaxRemovableDiskNo% = GetListLength (RemovableDriveList$)
  762.     FOR iDiskNo% = 1 TO iMaxDiskNo% STEP 1
  763.     fFound% = fFALSE%
  764.     FOR iRemovableDiskNo% = 1 TO iMaxRemovableDiskNo% STEP 1
  765.         IF GetListItem (TmpDriveList$, iDiskNo%) = GetListItem (RemovableDriveList$, iRemovableDiskNo%) THEN
  766.         fFound% = fTRUE%
  767.         EXIT FOR
  768.         ENDIF
  769.     NEXT iRemovableDiskNo%
  770.     IF fFound% <> 1 THEN
  771.         cbDrive& = GetFreeSpaceForDrive (GetListItem (TmpDriveList$, iDiskNo%) )
  772.         cbDrive& = (cbDrive& + 1023) / 1024
  773. '             AddListItem DriveList$, GetListItem (TmpDriveList$, iDiskNo%) + CHR$(9) + Ltrim$(Str$( cbDrive& )) + szKB
  774.         AddListItem DriveList$, GetListItem (TmpDriveList$, iDiskNo%) + "       " + Ltrim$(Str$( cbDrive& )) + szKB
  775.     ENDIF
  776.     NEXT iDiskNo%
  777. '$IFDEF DEBUG
  778.     i% = DoMsgBox("Liste over stasjoner = " + GetSymbolValue(DriveList$), "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  779. '$ENDIF ''DEBUG
  780.     RemoveSymbol (TmpDriveList$)
  781.     RemoveSymbol (RemovableDriveList$)
  782. END SUB
  783.  
  784. '*************************************************************************
  785. '** Routine: GetInstallPath
  786. '** Purpose:
  787. '**     Query user for installation path.
  788. '** Arguments:
  789. '**     none.
  790. '** Returns:
  791. '**     szDir$
  792. '*************************************************************************
  793. SUB GetInstallPath STATIC
  794. GETPATH:
  795. '$IFDEF DEBUG
  796.     i% = DoMsgBox("Liste over stasjoner = " + GetSymbolValue(DriveList$), "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  797. '$ENDIF ''DEBUG
  798.     SetSymbolValue "ListItemsIn", GetSymbolValue(DriveList$)
  799. '     LOCALHARDDRIVES$ = "LocalHardDrives"
  800. '     GetValidDrivesList( LOCALHARDDRIVES$ )
  801. '     SetSymbolValue "ListItemsIn", GetSymbolValue(LOCALHARDDRIVES$)
  802. '     NB! SVBR
  803. '     SetSymbolValue "ListItemsOut", szDir$
  804.     SetSymbolValue "EditTextIn", szDir$
  805.     SetSymbolValue "EditFocus", "END"
  806. GETPATHL1:
  807.     fError% = fFALSE%
  808. '$IFDEF DEMO
  809.     sz$ = UIStartDlg(CUIDLL$, GETPATHDEMO, "FListEditDlgProc", HELPPATHDEMO, HELPPROC$)
  810. '$ELSE
  811.     sz$ = UIStartDlg(CUIDLL$, GETPATH, "FListEditDlgProc", HELPPATH, HELPPROC$)
  812. '$ENDIF
  813.  
  814.     IF sz$ = "CONTINUE" THEN
  815.     szTDir$ = GetSymbolValue("EditTextOut")
  816.     szTDir$ = Ltrim$(szTDir$)
  817.     szTDir$ = Rtrim$(szTDir$)
  818.  
  819.     IF InStr(1, szTDir$, ":") = fFALSE% THEN
  820.         szTDir$ = Mid$(GetSymbolValue("STF_CWDDIR"), 1, 1) + ":" + szTDir$
  821.     END IF
  822.  
  823.     IF MID$(szTDir$, LEN(szTDir$), 1) = "\" THEN
  824.         fError% = fTRUE%
  825.     END IF
  826.  
  827.     '' NB! SVBR IsDirWriteable does not work propably
  828. '         IF fError% <> fTRUE% AND IsDirWritable(szTDir$) = fFALSE% THEN
  829.     IF fError% <> fTRUE% AND IsDriveValid( MID$(szTDir$, 1, 1) ) = fFALSE% THEN
  830.         fError% = fTRUE%
  831.     END IF
  832.     IF fError% <> fTRUE% AND IsDriveRemovable(szTDir$) <> 0 THEN
  833.         fError% = fTRUE%
  834.     END IF
  835.  
  836.     IF fError% <> fTRUE% AND Exists(szTDir$) THEN
  837.         fError% = fTRUE%
  838.     END IF
  839.  
  840.     IF fError% <> fTRUE% THEN
  841.         i% = 0
  842. GETPATHL2:
  843.         iLastDir% = i%
  844.         i% = INSTR(iLastDir%+1, szTDir$, "\")
  845.         IF i% <> 0 THEN
  846.         GOTO GETPATHL2
  847.         END IF
  848.         IF MID$(szTDir$, iLastDir%, 1) = "\" THEN
  849.         iLastDir% = iLastDir% + 1
  850.         END IF
  851.  
  852.         szLastDir$ = UCASE$(MID$(szTDir$, iLastDir%))
  853.  
  854.         IF szLastDir$ = "PRN" OR szLastDir$ = "AUX" OR szLastDir$ = "CON" THEN
  855.         fError% = fTRUE%
  856.         END IF
  857.  
  858.         IF LEN(szLastDir$) = 4 THEN
  859.         iNum = VAL(MID$(szLastDir$, 4, 1))
  860.         IF iNum >= 1 AND iNum <= 9 THEN
  861.             IF MID$(szLastDir$, 1, 3) = "COM" OR MID$(szLastDir$, 1, 3) = "LPT" THEN
  862.             fError% = fTRUE%
  863.             END IF
  864.         END IF
  865.         END IF
  866.     END IF
  867.  
  868.     IF fError% = fTRUE% THEN
  869.         BadPath
  870.         GOTO GETPATHL1
  871.     END IF
  872.  
  873.     sz$ = CreateInstallPath(szTDir$)
  874.     IF sz$ <> "CONTINUE" THEN
  875.         GOTO GETPATHL1
  876.     END IF
  877.  
  878. '$IFDEF DEMO
  879.     sz$ = UIStartDlg(CUIDLL$, WAITSIZEDEMO, "FModelessDlgProc", 0, "")
  880. '$ELSE
  881.     sz$ = UIStartDlg(CUIDLL$, WAITSIZE, "FModelessDlgProc", 0, "")
  882. '$ENDIF
  883.     szDir$ = szTDir$
  884.     DetermineSizes
  885.     CalcPathSpace
  886.     UIPop 1
  887.  
  888.     END IF
  889.     UIPop 1
  890. END SUB
  891.  
  892. '*************************************************************************
  893. '** Routine: Install
  894. '** Purpose:
  895. '**     Builds the copy list and performs all installation operations.
  896. '** Arguments:
  897. '**     none.
  898. '** Returns:
  899. '**     none.
  900. '*************************************************************************
  901. SUB Install STATIC
  902.     '' Do not check the size of files on diskett
  903. '    i% = SetSizeCheckMode (scmOnIgnore)
  904.  
  905.     CreateDir szDir$, cmoVital
  906.     AddSectionFilesToCopyList "BasisFiles", szSrcDir$, szDir$
  907.     AddSectionFilesToCopyList "MctFiles", szSrcDir$, szDir$
  908. '   IF DoesFileExist ( Makepath (szWinDir$, "SYSTEM\BWCC.DLL"), femExists) = fTRUE% THEN
  909. '         IF GetDateOfFile ( Makepath (szWinDir$, "SYSTEM\BWCC.DLL") ) = GetSectionKeyDate ("BWCCdllFiles", "Borland Custom Control") THEN
  910. '             AddSectionFilesToCopyList "BWCCdllFiles", szSrcDir$, MakePath (szWinDir$, "SYSTEM")
  911. '         ELSE
  912. '             InstBWCC% = AskForBWCC()
  913. '             IF InstBWCC%= 1 THEN
  914. '                 AddSectionFilesToCopyList "BWCCdllFiles", szSrcDir$, MakePath (szWinDir$, "SYSTEM")
  915. '             ELSEIF InstBWCC%= -1 THEN
  916. '                 ' Back
  917. '             ENDIF
  918. '         ENDIF
  919. '   ELSE
  920. '   AddSectionFilesToCopyList "BWCCdllFiles", szSrcDir$, MakePath (szWinDir$, "SYSTEM")
  921. '   ENDIF
  922.     IF fATMFiles% = fTRUE% THEN
  923.     ini$ = MakePath(GetWindowsDir, "ATM.INI")
  924.     szPSpfmFontsPath$ = GetIniKeyString (ini$, "Setup", "PFM_Dir")
  925.     AddSectionFilesToCopyList "ATMpfmFiles", szSrcDir$, szPSpfmFontsPath$
  926.     szPSpfbFontsPath$ = GetIniKeyString (ini$, "Setup", "PFB_Dir")
  927.     AddSectionFilesToCopyList "ATMpfbFiles", szSrcDir$, szPSpfbFontsPath$
  928.     ELSE
  929.     AddSectionFilesToCopyList "TrueTypeFiles", szSrcDir$, MakePath (szWinDir$, "SYSTEM")
  930.     ENDIF
  931.     SetRestartDir szWinDir$
  932.     CopyFilesInCopyList
  933.  
  934.     IF fATMFiles% = fTRUE% THEN
  935.     ini$ = MakePath(GetWindowsDir, "ATM.INI")
  936.     CreateIniKeyValue ini$, "Fonts", "Musicator", MakePath( szPSpfmFontsPath$, "mu______.pfm") + "," + MakePath( szPSpfbFontsPath$, "mu______.pfb"), cmoOverwrite
  937.     ELSE
  938.     ini$ = MakePath(GetWindowsDir, "WIN.INI")
  939.     CreateIniKeyValue ini$, "fonts", "Musicator (TrueType)", "MUSICA2.FOT", cmoOverwrite
  940.     ENDIF
  941.  
  942.     CreateProgmanGroup szGroupName$, "", cmoNone
  943.     CreateProgmanItem szGroupName$, "Readme", "Write.exe " + MakePath (szDir$, "README.WRI"), "", cmoOverwrite
  944.     CreateProgmanItem szGroupName$, szProgramName$, MakePath (szDir$, "winmusgs.exe"), "", cmoOverwrite
  945.     CreateProgmanItem szGroupName$, "Waveconf", MakePath (szDir$, "waveconf.exe"), "", cmoOverwrite
  946.  
  947. END SUB
  948.  
  949. '*************************************************************************
  950. '** Routine: InsufficientSpace
  951. '** Purpose:
  952. '**     Display TOOBIG dialog
  953. '** Arguments:
  954. '**     none.
  955. '** Returns:
  956. '**     none.
  957. '*************************************************************************
  958. SUB InsufficientSpace STATIC
  959. BADDIR1:
  960. '$IFDEF DEMO
  961.     sz$ = UIStartDlg(CUIDLL$, TOOBIGDEMO, "FInfo0DlgProc", 0, "")
  962. '$ELSE
  963.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  964. '$ENDIF
  965.     IF sz$ = "REACTIVATE" THEN
  966.     GOTO BADDIR1
  967.     END IF
  968.     UIPop 1
  969. END SUB
  970.  
  971.  
  972. '*************************************************************************
  973. '** Routine: MakePath
  974. '** Purpose:
  975. '**     Appends a file name to the end of a directory path,
  976. '**     inserting a backslash character as needed.
  977. '** Arguments:
  978. '**     szDir$  - full directory path (with optional ending "\")
  979. '**     szFile$ - filename to append to directory
  980. '** Returns:
  981. '**     Resulting fully qualified path name.
  982. '*************************************************************************
  983. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  984.     IF szDir$ = "" THEN
  985.     MakePath = szFile$
  986.     ELSEIF szFile$ = "" THEN
  987.     MakePath = szDir$
  988.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  989.     MakePath = szDir$ + szFile$
  990.     ELSE
  991.     MakePath = szDir$ + "\" + szFile$
  992.     END IF
  993. END FUNCTION
  994.  
  995. '' EOF
  996.  
  997.