[fpc-pascal] InstantFPC and argv

Mattias Gaertner nc-gaertnma at netcologne.de
Sat May 5 14:13:21 CEST 2012


On Sat, 5 May 2012 14:02:12 +0200 (CEST)
"Tomas Hajny" <XHajT03 at hajny.biz> wrote:

> On Sat, May 5, 2012 09:22, Michael Van Canneyt wrote:
> > On Fri, 4 May 2012, Mattias Gaertner wrote:
> >> On Fri, 04 May 2012 17:22:16 +0200
> >> dhkblaszyk at zeelandnet.nl wrote:
> >>
> >>>
> >>>
> >>> I'm creating a script to be executed by instantfpc when I noticed
> >>> that paramstr(0) does not reflect the location of the script but the
> >>> location of the cached executable. Is there a way to alter this
> >>> location
> >>> programatically to the script location? Is there an alternative way?
> >>
> >> instantfpc passes as first parameter the original file name.
> >> But execv overrides the first argument with the executed file. AFAIK
> >> there is no alternative.
> >>
> >> You can set an environment variable.
> >
> > I think the environment variable is the best and easiest shot.
> 
> My proposal is platform independent (i.e. it will work also under Win32,
> OS/2, etc., without any changes). Your proposal probably requires starting
> the compiled binary using platform specific API functions to run it with a
> modified environment rather than using ExecuteProcess which results in
> passing the standard parent's environment (changing the current's process
> environment may not be supported on all platforms).

ExecuteProcess is only a simple utility function.
All posix platforms can start a process with another
environment. By default they use the current.

A const requires to recompile the program every time you call the script
from another location.

A const in the main script is only accessible by the program,
not by the used units.


Mattias



More information about the fpc-pascal mailing list