From: Kevin Ryde <user42@zip.com.au>
Cc: guile-devel@gnu.org
Subject: Re: doc scm_set_program_arguments
Date: Tue, 16 Jan 2007 09:20:04 +1100 [thread overview]
Message-ID: <873b6cue3v.fsf@zip.com.au> (raw)
In-Reply-To: <87bql2msh3.fsf@ossau.uklinux.net> (Neil Jerram's message of "Sat, 13 Jan 2007 23:12:24 +0000")
Neil Jerram <neil@ossau.uklinux.net> writes:
>
> Is argv normally NULL-terminated?
Yes, if it's from main().
> I would have thought that "argc-i" would be more reliable than "-1"
> here.
I guess it's clearer to use one method or the other (not a mixture).
I changed it to below (with set-program-arguments added too).
Is there a particular reason for the extra `command-line' name?
-- Scheme Procedure: program-arguments
-- Scheme Procedure: command-line
-- Scheme Procedure: set-program-arguments
-- C Function: scm_program_arguments ()
-- C Function: scm_set_program_arguments_scm (lst)
Get the command line arguments passed to Guile, or set new
arguments.
The arguments are a list of strings, the first of which is the
invoked program name. This is just "guile" (or the executable
path) when run interactively, or it's the script name when running
a script with `-s' (*note Invoking Guile::).
guile -L /my/extra/dir -s foo.scm abc def
(program-arguments) => ("foo.scm" "abc" "def")
`set-program-arguments' allows a library module or similar to
modify the arguments, for example to strip options it recognises,
leaving the rest for the mainline.
The argument list is held in a fluid, which means it's separate for
each thread. Neither the list nor the strings within it are
copied at any point and normally should not be mutated.
The two names `program-arguments' and `command-line' are an
historical accident, they both do exactly the same thing. The name
`scm_set_program_arguments_scm' has an extra `_scm' on the end to
avoid clashing with the C function below.
-- C Function: void scm_set_program_arguments (int argc, char **argv,
char *first)
Set the list of command line arguments for `program-arguments' and
`command-line' above.
ARGV is an array of null-terminated strings, as in a C `main'
function. ARGC is the number of strings in ARGV, or if it's
negative then a `NULL' entry in ARGV marks its end.
FIRST is an extra string put at the start of the arguments, or
`NULL' for no such extra. This is a convenient way to pass the
program name after advancing ARGV to strip option arguments.
{
char *progname = argv[0];
int i;
for (argv++; argv[0] != NULL && argv[0][0] == '-'; argv++)
{
/* munch option ... */
}
/* remaining args for scheme level use */
scm_set_program_arguments (-1, argv, progname);
}
This sort of thing is often done at startup under `scm_boot_guile'
with any options handled at the C level removed. The given
strings are all copied, so the C data is not accessed again once
`scm_set_program_arguments' returns.
_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-devel
next prev parent reply other threads:[~2007-01-15 22:20 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-13 22:29 doc scm_set_program_arguments Kevin Ryde
2007-01-13 23:12 ` Neil Jerram
2007-01-15 22:20 ` Kevin Ryde [this message]
2007-01-17 19:26 ` Neil Jerram
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=873b6cue3v.fsf@zip.com.au \
--to=user42@zip.com.au \
--cc=guile-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).