Propagate argv[0] to the scheme level and use it as first element of
the command line.
This commit is contained in:
parent
3b4becd2ba
commit
5db687eae1
5
c/init.c
5
c/init.c
|
@ -15,8 +15,6 @@ char *s48_object_file; /* specified via a command line argument */
|
|||
|
||||
char *s48_reloc_file; /* dynamic loading will set this */
|
||||
|
||||
char *prog_name;
|
||||
|
||||
void *heap, *stack;
|
||||
|
||||
int s48_main (long heap_size, long stack_size,
|
||||
|
@ -30,7 +28,7 @@ int s48_main (long heap_size, long stack_size,
|
|||
}
|
||||
|
||||
int
|
||||
internal_s48_main(long heap_size, long stack_size, char * _prog_name,
|
||||
internal_s48_main(long heap_size, long stack_size,
|
||||
char* object_file, char *image_name, int argc, char** argv)
|
||||
{
|
||||
long return_value;
|
||||
|
@ -45,7 +43,6 @@ internal_s48_main(long heap_size, long stack_size, char * _prog_name,
|
|||
extern long i_count, *i_areas[], i_sizes[];
|
||||
#endif
|
||||
|
||||
prog_name = _prog_name;
|
||||
|
||||
s48_object_file = object_file;
|
||||
s48_reloc_file = NULL;
|
||||
|
|
12
c/main.c
12
c/main.c
|
@ -32,7 +32,6 @@
|
|||
|
||||
|
||||
char ** process_args(char **argv,
|
||||
char* prog_name,
|
||||
long *heap_size,
|
||||
long *stack_size,
|
||||
char **object_file,
|
||||
|
@ -40,7 +39,7 @@ char ** process_args(char **argv,
|
|||
|
||||
extern int
|
||||
internal_s48_main(long heap_size, long stack_size,
|
||||
char* prog_name, char* object_file, char* image_name,
|
||||
char* object_file, char* image_name,
|
||||
int argc, char** argv);
|
||||
|
||||
int
|
||||
|
@ -63,12 +62,13 @@ main(argc, argv)
|
|||
#endif
|
||||
|
||||
long vm_argc = 0;
|
||||
char *me = *argv; /* Save program name. */
|
||||
prog_name = *argv++;
|
||||
prog_name = *argv++;/* Save program name. */
|
||||
|
||||
argv=process_args(argv, prog_name,
|
||||
argv=process_args(argv,
|
||||
&heap_size, &stack_size,
|
||||
&object_file, &image_name);
|
||||
argv--;
|
||||
argv[0] = prog_name;
|
||||
for(argc=0, argp=argv; *argp; argc++, argp++); /* Recompute argc. */
|
||||
return internal_s48_main(heap_size, stack_size, prog_name, object_file, image_name, argc, argv);
|
||||
return internal_s48_main(heap_size, stack_size, object_file, image_name, argc, argv);
|
||||
}
|
||||
|
|
|
@ -4,8 +4,6 @@
|
|||
|
||||
#define streq(a,b) (strcmp((a),(b))==0)
|
||||
|
||||
static char* prog_name;
|
||||
|
||||
static void usage(void) {
|
||||
fprintf(stderr, "Usage: %s [meta-arg] [vm-option+] [end-option scheme-args]\n"
|
||||
"meta-arg: \\ <script file name>\n"
|
||||
|
@ -17,7 +15,7 @@ static void usage(void) {
|
|||
"end-option: -i <image file name>\n"
|
||||
" -- (Terminates vm args.)\n"
|
||||
" -a (Terminates vm args. Obsolete.)\n",
|
||||
prog_name);}
|
||||
"scshvm");}
|
||||
|
||||
static void bad_args(int reason) {
|
||||
/* fprintf(stderr, "reason : %s\n", reason); */
|
||||
|
@ -26,15 +24,12 @@ static void bad_args(int reason) {
|
|||
}
|
||||
|
||||
char ** process_args(char **argv,
|
||||
char * _prog_name,
|
||||
long *pheap_size,
|
||||
long *pstack_size,
|
||||
char **pobject_file,
|
||||
char **pimage_name) {
|
||||
extern char **process_meta_arg(char **);
|
||||
|
||||
prog_name = _prog_name;
|
||||
|
||||
/* Handle an initial \ <fname> meta-arg expansion. */
|
||||
while ( *argv && streq(*argv, "\\") ) {
|
||||
argv++;
|
||||
|
@ -42,7 +37,7 @@ char ** process_args(char **argv,
|
|||
argv = process_meta_arg(argv);
|
||||
if( !argv ) {
|
||||
fprintf(stderr, "%s: \\ <fname> expansion failed.\n",
|
||||
prog_name);
|
||||
"scshvm");
|
||||
exit(1);}}
|
||||
|
||||
for (; *argv; argv++)
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
(init-fdports!)
|
||||
(call-with-current-continuation
|
||||
(lambda (halt)
|
||||
(set! %vm-prog-args (cons "scsh" args)) ; WRONG -- use image.
|
||||
(set! %vm-prog-args args)
|
||||
(set-command-line-args! %vm-prog-args)
|
||||
(with-handler
|
||||
(simple-condition-handler halt (current-error-port))
|
||||
|
|
Loading…
Reference in New Issue