* Apparently the vmlauncher in OS/2's JDK 1.3 doesn't work properly, disable it. * Add REXX scripts to run Ant. * Add OS/2 specific notes to the docs. Submitted by: Zdenek Wagner <wagner at cesnet dot cz> git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274507 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -961,7 +961,7 @@ | |||||
| <fileset dir="${script.dir}/"/> | <fileset dir="${script.dir}/"/> | ||||
| </copy> | </copy> | ||||
| <fixcrlf srcdir="${dist.bin}" eol="dos" includes="*.bat"/> | |||||
| <fixcrlf srcdir="${dist.bin}" eol="dos" includes="*.bat,*.cmd"/> | |||||
| <fixcrlf srcdir="${dist.bin}" eol="unix"> | <fixcrlf srcdir="${dist.bin}" eol="unix"> | ||||
| <include name="ant"/> | <include name="ant"/> | ||||
| <include name="antRun"/> | <include name="antRun"/> | ||||
| @@ -1138,7 +1138,7 @@ | |||||
| </fileset> | </fileset> | ||||
| </copy> | </copy> | ||||
| <fixcrlf srcdir="${src.dist.dir}" eol="dos" includes="*.bat"/> | |||||
| <fixcrlf srcdir="${src.dist.dir}" eol="dos" includes="*.bat,*.cmd"/> | |||||
| <fixcrlf srcdir="${src.dist.dir}" eol="unix"> | <fixcrlf srcdir="${src.dist.dir}" eol="unix"> | ||||
| <include name="**/*.sh"/> | <include name="**/*.sh"/> | ||||
| <include name="**/*.pl"/> | <include name="**/*.pl"/> | ||||
| @@ -18,9 +18,9 @@ href="http://cvs.apache.org/builds/ant/nightly/">http://cvs.apache.org/builds/an | |||||
| <p>If you prefer the source edition, you can download the source for the latest Ant release from <a href="http://ant.apache.org/srcdownload.cgi">http://ant.apache.org/srcdownload.cgi</a>. | <p>If you prefer the source edition, you can download the source for the latest Ant release from <a href="http://ant.apache.org/srcdownload.cgi">http://ant.apache.org/srcdownload.cgi</a>. | ||||
| Again, if you prefer the edge, you can access | |||||
| the code as it is being developed via CVS. The Jakarta website has details on | |||||
| <a href="http://jakarta.apache.org/site/cvsindex.html" target="_top">accessing CVS</a>. Please checkout the | |||||
| Again, if you prefer the edge, you can access | |||||
| the code as it is being developed via CVS. The Jakarta website has details on | |||||
| <a href="http://jakarta.apache.org/site/cvsindex.html" target="_top">accessing CVS</a>. Please checkout the | |||||
| ant module. | ant module. | ||||
| See the section <a href="#buildingant">Building Ant</a> on how to | See the section <a href="#buildingant">Building Ant</a> on how to | ||||
| @@ -33,7 +33,7 @@ Ant CVS repository</a> on-line. </p> | |||||
| <h2><a name="sysrequirements">System Requirements</a></h2> | <h2><a name="sysrequirements">System Requirements</a></h2> | ||||
| Ant has been used successfully on many platforms, including Linux, | Ant has been used successfully on many platforms, including Linux, | ||||
| commercial flavours of Unix such as Solaris and HP-UX, | commercial flavours of Unix such as Solaris and HP-UX, | ||||
| Windows 9x and NT, Novell Netware 6 and MacOS X. | |||||
| Windows 9x and NT, OS/2 Warp, Novell Netware 6 and MacOS X. | |||||
| <p> | <p> | ||||
| To build and use Ant, you must have a JAXP-compliant XML parser installed and | To build and use Ant, you must have a JAXP-compliant XML parser installed and | ||||
| available on your classpath.</p> | available on your classpath.</p> | ||||
| @@ -95,17 +95,17 @@ file there. This directory will be known as ANT_HOME. | |||||
| <table width="80%"> | <table width="80%"> | ||||
| <tr> | <tr> | ||||
| <td colspan="2"> | <td colspan="2"> | ||||
| <b>Windows 95, Windows 98 & Windows ME Note:</b> | |||||
| <b>Windows 95, Windows 98 & Windows ME Note:</b> | |||||
| </td> | </td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td width="5%"> </td> | <td width="5%"> </td> | ||||
| <td><i> | <td><i> | ||||
| On these systems, the script used to launch Ant will have | |||||
| On these systems, the script used to launch Ant will have | |||||
| problems if ANT_HOME is a long filename (i.e. a filename which is not | problems if ANT_HOME is a long filename (i.e. a filename which is not | ||||
| of the format known as "8.3"). This is due to | |||||
| limitations in the OS's handling of the <code>"for"</code> | |||||
| batch-file statement. It is recommended, therefore, that Ant be | |||||
| of the format known as "8.3"). This is due to | |||||
| limitations in the OS's handling of the <code>"for"</code> | |||||
| batch-file statement. It is recommended, therefore, that Ant be | |||||
| installed in a <b>short</b>, 8.3 path, such as C:\Ant. </i> | installed in a <b>short</b>, 8.3 path, such as C:\Ant. </i> | ||||
| </td> | </td> | ||||
| </tr> | </tr> | ||||
| @@ -114,7 +114,7 @@ installed in a <b>short</b>, 8.3 path, such as C:\Ant. </i> | |||||
| <td> | <td> | ||||
| <p>On these systems you will also need to configure more environment | <p>On these systems you will also need to configure more environment | ||||
| space to cater for the environment variables used in the Ant lauch script. | space to cater for the environment variables used in the Ant lauch script. | ||||
| To do this, you will need to add or update the following line in | |||||
| To do this, you will need to add or update the following line in | |||||
| the <code>config.sys</code> file | the <code>config.sys</code> file | ||||
| </p> | </p> | ||||
| <p><code>shell=c:\command.com c:\ /p /e:32768</code></p> | <p><code>shell=c:\command.com c:\ /p /e:32768</code></p> | ||||
| @@ -152,7 +152,7 @@ libraries may either be placed in Ant's lib directory, where they will be picked | |||||
| automatically, or made available on the system CLASSPATH environment variable. | automatically, or made available on the system CLASSPATH environment variable. | ||||
| </p> | </p> | ||||
| <h3>Windows</h3> | |||||
| <h3>Windows and OS/2</h3> | |||||
| <p>Assume Ant is installed in <code>c:\ant\</code>. The following sets up the | <p>Assume Ant is installed in <code>c:\ant\</code>. The following sets up the | ||||
| environment:</p> | environment:</p> | ||||
| <pre>set ANT_HOME=c:\ant | <pre>set ANT_HOME=c:\ant | ||||
| @@ -161,17 +161,48 @@ set):</p> | |||||
| </ul> | </ul> | ||||
| <h2><a name="cygwin">Cygwin Users</a></h2> | <h2><a name="cygwin">Cygwin Users</a></h2> | ||||
| <p>The Unix launch script that come with Ant works correctly with Cygwin. You | |||||
| should not have any problems launching Ant form the Cygwin shell. It is important | |||||
| <p>The Unix launch script that come with Ant works correctly with Cygwin. You | |||||
| should not have any problems launching Ant form the Cygwin shell. It is important | |||||
| to note however, that once Ant is runing it is part of the JDK which operates as | to note however, that once Ant is runing it is part of the JDK which operates as | ||||
| a native Windows application. The JDK is not a Cygwin executable, and it therefore | |||||
| a native Windows application. The JDK is not a Cygwin executable, and it therefore | |||||
| has no knowledge of the Cygwin paths, etc. In particular when using the <exec> | has no knowledge of the Cygwin paths, etc. In particular when using the <exec> | ||||
| task, executable names such as "/bin/sh" will not work, even though these | |||||
| work from the Cygwin shell from which Ant was launched. You can use an executable | |||||
| task, executable names such as "/bin/sh" will not work, even though these | |||||
| work from the Cygwin shell from which Ant was launched. You can use an executable | |||||
| name such as "sh" and rely on that command being available in the Windows | name such as "sh" and rely on that command being available in the Windows | ||||
| path. | path. | ||||
| </p> | </p> | ||||
| <h2><a name="os2">OS/2 Users</a></h2> | |||||
| <p>The OS/2 lanuch script was developed so as it can perform complex task. It has two parts: | |||||
| <code>ant.cmd</code> which calls Ant and <code>antenv.cmd</code> which sets environment for Ant. | |||||
| Most often you will just call <code>ant.cmd</code> using the same command line options as described | |||||
| above. The behaviour can be modified by a number of ways explained below.</p> | |||||
| <p>Script <code>ant.cmd</code> first verifies whether the Ant environment is set correctly. The | |||||
| requirements are:</p> | |||||
| <ol> | |||||
| <li>Environment variable <code>JAVA_HOME</code> is set.</li> | |||||
| <li>Environment variable <code>ANT_HOME</code> is set.</li> | |||||
| <li>environment variable <code>CLASSPATH</code> is set and contains at least one element from | |||||
| <code>JAVA_HOME</code> and at least one element from <code>ANT_HOME</code>.</li> | |||||
| </ol> | |||||
| <p>If any of these conditions is violated, script <code>antenv.cmd</code> is called. This script | |||||
| first invokes configuration scripts if there exist: the system-wide configuration | |||||
| <code>antconf.cmd</code> from the <code>%ETC%</code> directory and then the user comfiguration | |||||
| <code>antrc.cmd</code> from the <code>%HOME%</code> directory. At this moment both | |||||
| <code>JAVA_HOME</code> and <code>ANT_HOME</code> must be defined because <code>antenv.cmd</code> | |||||
| now adds <code>classes.zip</code> or <code>tools.jar</code> (depending on version of JVM) and | |||||
| everything from <code>%ANT_HOME%\lib</code> except <code>ant-*.jar</code> to | |||||
| <code>CLASSPATH</code>. Finally <code>ant.cmd</code> calls per-directory configuration | |||||
| <code>antrc.cmd</code>. All settings made by <code>ant.cmd</code> are local and are undone when the | |||||
| script ends. The settings made by <code>antenv.cmd</code> are persistent during the lifetime of the | |||||
| shell (of course unless called automaticaly from <code>ant.cmd</code>). It is thus possible to call | |||||
| <code>antenv.cmd</code> manually and modify some settings before calling <code>ant.cmd</code>.</p> | |||||
| <p>Scripts <code>envset.cmd</code> and <code>runrc.cmd</code> perform auxilliary tasks. All scripts | |||||
| have some documentation inside.</p> | |||||
| <h2><a name="viajava">Running Ant via Java</a></h2> | <h2><a name="viajava">Running Ant via Java</a></h2> | ||||
| <p>If you have installed Ant in the do-it-yourself way, Ant can be started | <p>If you have installed Ant in the do-it-yourself way, Ant can be started | ||||
| with:</p> | with:</p> | ||||
| @@ -16,6 +16,7 @@ | |||||
| <a href="running.html#files">Files</a><br> | <a href="running.html#files">Files</a><br> | ||||
| <a href="running.html#envvars">Environment Variables</a><br> | <a href="running.html#envvars">Environment Variables</a><br> | ||||
| <a href="running.html#cygwin">Cygwin Users</a><br> | <a href="running.html#cygwin">Cygwin Users</a><br> | ||||
| <a href="running.html#os2">OS/2 Users</a><br> | |||||
| <a href="running.html#viajava">Running Ant via Java</a><br> | <a href="running.html#viajava">Running Ant via Java</a><br> | ||||
| </body> | </body> | ||||
| @@ -109,7 +109,9 @@ public class Execute { | |||||
| static { | static { | ||||
| // Try using a JDK 1.3 launcher | // Try using a JDK 1.3 launcher | ||||
| try { | try { | ||||
| vmLauncher = new Java13CommandLauncher(); | |||||
| if (!Os.isFamily("os/2")) { | |||||
| vmLauncher = new Java13CommandLauncher(); | |||||
| } | |||||
| } catch (NoSuchMethodException exc) { | } catch (NoSuchMethodException exc) { | ||||
| // Ignore and keep trying | // Ignore and keep trying | ||||
| } | } | ||||
| @@ -0,0 +1,71 @@ | |||||
| /* | |||||
| Copyright (c) 2003 The Apache Software Foundation. All rights | |||||
| reserved. | |||||
| Run ant | |||||
| */ | |||||
| parse arg mode envarg '::' antarg | |||||
| if mode\='.' & mode\='..' & mode\='/' then do | |||||
| envarg = mode envarg | |||||
| mode = '' | |||||
| end | |||||
| if antarg = '' then do | |||||
| antarg = envarg | |||||
| envarg = '' | |||||
| end | |||||
| x = setlocal() | |||||
| env="OS2ENVIRONMENT" | |||||
| antenv = _getenv_('antenv') | |||||
| if _testenv_() = 0 then do | |||||
| interpret 'call "' || antenv || '"' '"' || envarg || '"' | |||||
| if _testenv_() = 0 then do | |||||
| say 'Ant environment is not set properly' | |||||
| x = endlocal() | |||||
| exit 16 | |||||
| end | |||||
| end | |||||
| if mode = '' then mode = _getenv_('ANT_MODE' '..') | |||||
| if mode \= '/' then do | |||||
| runrc = _getenv_('runrc') | |||||
| antrc = _getenv_('antrc' 'antrc.cmd') | |||||
| if mode = '..' then mode = '-r' | |||||
| else mode = '' | |||||
| interpret 'call "' || runrc || '"' antrc '"' || mode || '"' | |||||
| end | |||||
| settings = '-Dant.home=' || ANT_HOME '-Djava.home=' || JAVA_HOME | |||||
| java = _getenv_('javacmd' 'java') | |||||
| opts = value('ANT_OPTS',,env) | |||||
| args = value('ANT_ARGS',,env) | |||||
| lcp = value('LOCALCLASSPATH',,env) | |||||
| if lcp\='' then lcp = '-cp' lcp | |||||
| java opts lcp 'org.apache.tools.ant.Main' settings args antarg | |||||
| x = endlocal() | |||||
| return rc | |||||
| _testenv_: procedure expose env ANT_HOME JAVA_HOME | |||||
| ANT_HOME = value('ANT_HOME',,env) | |||||
| if ANT_HOME = '' then return 0 | |||||
| JAVA_HOME = value('JAVA_HOME',,env) | |||||
| if JAVA_HOME = '' then return 0 | |||||
| cp = translate(value('CLASSPATH',,env)) | |||||
| if pos(translate(ANT_HOME), cp) = 0 then return 0 | |||||
| if pos(translate(JAVA_HOME), cp) = 0 then return 0 | |||||
| return 1 | |||||
| _getenv_: procedure expose env | |||||
| parse arg envar default | |||||
| if default = '' then default = envar | |||||
| var = value(translate(envar),,env) | |||||
| if var = '' then var = default | |||||
| return var | |||||
| @@ -0,0 +1,100 @@ | |||||
| /* | |||||
| Copyright (c) 2003 The Apache Software Foundation. All rights | |||||
| reserved. | |||||
| Ant environment | |||||
| */ | |||||
| call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs" | |||||
| call SysLoadFuncs | |||||
| /* Prepare the parameters for later use */ | |||||
| parse arg argv | |||||
| mode = '' | |||||
| args = '' | |||||
| opts = '' | |||||
| cp = '' | |||||
| lcp = '' | |||||
| do i = 1 to words(argv) | |||||
| param = word(argv, i) | |||||
| select | |||||
| when param='-lcp' then mode = 'l' | |||||
| when param='-cp' | param='-classpath' then mode = 'c' | |||||
| when abbrev('-opts', param, 4) then mode = 'o' | |||||
| when abbrev('-args', param, 4) then mode = 'a' | |||||
| otherwise | |||||
| select | |||||
| when mode = 'a' then args = space(args param, 1) | |||||
| when mode = 'c' then cp = space(cp param, 1) | |||||
| when mode = 'l' then lcp = space(lcp param, 1) | |||||
| when mode = 'o' then opts = space(opts param, 1) | |||||
| otherwise | |||||
| say 'Option' param 'ignored' | |||||
| end | |||||
| end | |||||
| end | |||||
| env="OS2ENVIRONMENT" | |||||
| antconf = _getenv_('antconf' 'antconf.cmd') | |||||
| runrc = _getenv_('runrc') | |||||
| interpret 'call "' || runrc || '"' '"' || antconf || '"' 'ETC' | |||||
| ANT_HOME = value('ANT_HOME',,env) | |||||
| JAVA_HOME = value('JAVA_HOME',,env) | |||||
| classpath = value('CLASSPATH',,env) | |||||
| classes = stream(JAVA_HOME || "\lib\classes.zip", "C", "QUERY EXISTS") | |||||
| if classes \= '' then classpath = prepend(classpath classes) | |||||
| classes = stream(JAVA_HOME || "\lib\tools.jar", "C", "QUERY EXISTS") | |||||
| if classes \= '' then classpath = prepend(classpath classes) | |||||
| mincp = classpath | |||||
| call SysFileTree ANT_HOME || '\lib\*.jar', 'jar', 'FO' | |||||
| do i = 1 to jar.0 | |||||
| nm = filespec('name', jar.i) | |||||
| if pos('ant-', nm) == 0 then classpath = prepend(classpath jar.i) | |||||
| end | |||||
| if length(classpath) > 512 then do | |||||
| say 'Classpath is too long, switching to the minimal version...' | |||||
| say '... some tasks will not work' | |||||
| classpath = mincp | |||||
| classpath = prepend(classpath ANT_HOME || '\lib\ant.jar') | |||||
| classpath = prepend(classpath ANT_HOME || '\lib\optional.jar') | |||||
| end | |||||
| 'SET CLASSPATH=' || classpath | |||||
| /* Setting classpathes, options and arguments */ | |||||
| envset = _getenv_('envset') | |||||
| if cp\='' then interpret 'call "' || envset || '"' '"; CLASSPATH"' '"' || cp || '"' | |||||
| if lcp\='' then interpret 'call "' || envset || '"' '"; LOCALCLASSPATH"' '"' || lcp || '"' | |||||
| if opts\='' then interpret 'call "' || envset || '"' '"-D ANT_OPTS"' '"' || opts || '"' | |||||
| if args\='' then interpret 'call "' || envset || '"' '"ANT_ARGS"' '"' || args || '"' | |||||
| exit 0 | |||||
| addpath: procedure | |||||
| parse arg path elem | |||||
| if elem = '' then do | |||||
| if path\='' & right(path, 1)\=';' then path = path || ';' | |||||
| return path | |||||
| end | |||||
| if substr(path, length(path)) = ';' then glue = '' | |||||
| else glue = ';' | |||||
| if pos(translate(elem), translate(path)) = 0 then path = path || glue || elem || ';' | |||||
| return path | |||||
| prepend: procedure | |||||
| parse arg path elem | |||||
| if elem = '' then do | |||||
| if path\='' & right(path, 1)\=';' then path = path || ';' | |||||
| return path | |||||
| end | |||||
| if pos(translate(elem), translate(path)) = 0 then path = elem || ';' || path | |||||
| return path | |||||
| _getenv_: procedure expose env | |||||
| parse arg envar default | |||||
| if default = '' then default = envar | |||||
| var = value(translate(envar),,env) | |||||
| if var = '' then var = default | |||||
| return var | |||||
| @@ -0,0 +1,119 @@ | |||||
| /* | |||||
| Copyright (c) 2003 The Apache Software Foundation. All rights | |||||
| reserved. | |||||
| SET environment variables | |||||
| First optional parameter: | |||||
| ; parameters are considered parts of a path variable, semicolons are | |||||
| appended to each element if not already present | |||||
| -D parameters are properties for Java or Makefile etc., -D will be | |||||
| prepended and the parameters will be separated by a space | |||||
| =D the same as above but equal sign is not required | |||||
| , parameters should be comma separated in the environment variable | |||||
| - parameters should be separated by the next parameter | |||||
| Other values mean that the first parameter is missing and the environment | |||||
| variable will be set to the space separated parameters | |||||
| Second parameter: name of the environment variable | |||||
| Next parameters: values | |||||
| ; implies that the equal sign is considered a part of the parameter and is | |||||
| not interpreted | |||||
| -D requires parameters in the form name=value. If the equal sign is not found, | |||||
| the parameters are changed to name=expanded_name | |||||
| Other options have optional equal sign. If it is found, only the part after | |||||
| the equal sign will be oprionally expanded. | |||||
| If the parameter is the minus sign, the next parameter will not be expanded. | |||||
| If the parameter is a single dot, it will be replaced with the value of the | |||||
| environment variable as it existed before envset was invoked. | |||||
| For other parameters the batch looks for the environment variable with the | |||||
| same name (in uppercase). If it is found, it forms the expanded_name. If | |||||
| the environment variable with such a name does not exist, the expanded_name | |||||
| will hold the parameter name without case conversion. | |||||
| */ | |||||
| parse arg mode envar args | |||||
| equal = 0 | |||||
| sep = ' ' | |||||
| /* Parse command line parameters */ | |||||
| select | |||||
| when mode='-' then do | |||||
| sep = envar | |||||
| parse var args envar args | |||||
| end | |||||
| when mode=';' then do | |||||
| sep = '' | |||||
| equal = -1 | |||||
| end | |||||
| when mode='-D' then equal = 1 | |||||
| when mode='=D' then mode = '-D' | |||||
| when mode=',' then sep = ',' | |||||
| otherwise | |||||
| args = envar args | |||||
| envar = mode | |||||
| mode = '' | |||||
| end | |||||
| env = 'OS2ENVIRONMENT' | |||||
| envar = translate(envar) | |||||
| orig = value(envar,,env) | |||||
| newval = '' | |||||
| expand = 1 | |||||
| /* for each parameter... */ | |||||
| do i = 1 to words(args) | |||||
| if expand > 0 & word(args, i) = '-' then expand = 0 | |||||
| else call addval word(args, i) | |||||
| end | |||||
| /* Optionally enclose path variable by quotes */ | |||||
| if mode = ';' & pos(' ', newval) > 0 then newval = '"' || newval || '"' | |||||
| /* Set the new value, 'SET' cannot be used since it does not allow '=' */ | |||||
| x = value(envar, newval, env) | |||||
| exit 0 | |||||
| addval: procedure expose sep equal orig expand newval mode env | |||||
| parse arg var | |||||
| if var = '.' then expvar = orig | |||||
| else do | |||||
| if equal >= 0 then do | |||||
| parse var var name '=' val | |||||
| if val = '' then var = name | |||||
| else var = val | |||||
| end | |||||
| if expand = 0 then expvar = var | |||||
| else expvar = value(translate(var),,env) | |||||
| if expvar = '' then expvar = var | |||||
| if equal >= 0 then do | |||||
| if val = '' then do | |||||
| parse var expvar key '=' val | |||||
| if val <> '' then name = key | |||||
| else do | |||||
| if equal > 0 then val = key | |||||
| else name = key | |||||
| end | |||||
| end | |||||
| else val = expvar | |||||
| if pos(' ', val) > 0 | pos('=', val) > 0 then val = '"' || val || '"' | |||||
| if val = '' then expvar = name | |||||
| else expvar = name || '=' || val | |||||
| end | |||||
| if mode = '-D' then expvar = '-D' || expvar | |||||
| if mode = ';' then do | |||||
| if right(expvar, 1) <> ';' then expvar = expvar || ';' | |||||
| end | |||||
| end | |||||
| if newval = '' then newval = expvar | |||||
| else newval = newval || sep || expvar | |||||
| expand = 1 | |||||
| return | |||||
| @@ -0,0 +1,48 @@ | |||||
| /* | |||||
| Copyright (c) 2003 The Apache Software Foundation. All rights | |||||
| reserved. | |||||
| Run RC file, name is in the first arg, second arg is either PATH | |||||
| ENV or -r or nothing | |||||
| */ | |||||
| parse arg name path rest | |||||
| if name = '' then do | |||||
| say 'RC file name is missing' | |||||
| exit 1 | |||||
| end | |||||
| if rest \= '' then do | |||||
| say 'Too many parameters' | |||||
| exit 1 | |||||
| end | |||||
| call runit name path | |||||
| exit 0 | |||||
| runit: procedure | |||||
| parse arg name path dir | |||||
| if path \= '' & path \= '-r' then do | |||||
| dir = value(translate(path),,'OS2ENVIRONMENT') | |||||
| if dir = '' then return | |||||
| dir = translate(dir, '\', '/') /* change UNIX-like path to OS/2 */ | |||||
| end | |||||
| if dir = '' then dir = directory() | |||||
| if path = '-r' then do /* recursive call */ | |||||
| subdir = filespec('path', dir) | |||||
| if subdir \= '\' then do | |||||
| subdir = left(subdir, length(subdir)-1) | |||||
| call runit name path filespec('drive', dir) || subdir | |||||
| end | |||||
| end | |||||
| /* Look for the file and run it */ | |||||
| if right(dir, 1) \= '\' then dir = dir || '\' | |||||
| rcfile = stream(dir || name, 'c', 'query exists') | |||||
| if rcfile \= '' then interpret 'call "' || rcfile || '"' | |||||
| return | |||||