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