The patch below places the contents of argv into P0. At the moment it has the name of the script file in question in P0[0]; I haven't yet decided if this is to be construed as a feature or a bug. ;^)
A little test script to see that this is working right: set I0, P0 set I1, 0 print "start\n" LOOP: ge I1, I0, OUT set S0, P0, I1 print " " print I1 print ": " print S0 print "\n" inc I1 branch LOOP OUT: print "done\n" end --Brent Dax [EMAIL PROTECTED] Parrot Configure pumpking and regex hacker Check out the Parrot FAQ: http://www.panix.com/~ziggy/parrot.html (no, it's not mine) <obra> mmmm. hawt sysadmin chx0rs <lathos> This is sad. I know of *a* hawt sysamin chx0r. <obra> I know more than a few. <lathos> obra: There are two? Are you sure it's not the same one? --- /parrot-cvs/embed.c Wed Jan 30 06:41:34 2002 +++ /parrot/embed.c Thu Jan 31 01:49:26 2002 @@ -139,6 +139,9 @@ void Parrot_runcode(struct Parrot_Interp *interpreter, int argc, char *argv[]) { + INTVAL i; + PMC* userargv; + if(interpreter->flags & PARROT_DEBUG_FLAG) { fprintf(stderr, "Parrot VM: Debugging enabled.\n"); @@ -159,6 +162,24 @@ exit(1); } #endif + + if(interpreter->flags & PARROT_DEBUG_FLAG) { + fprintf(stderr, "Parrot VM: Setting up ARGV array in P0. Current argc: %d\n", argc); + } + + userargv=pmc_new(interpreter, enum_class_PerlArray); + + for(i=0; i < argc; i++) { + if(interpreter->flags & PARROT_DEBUG_FLAG) { + fprintf(stderr, "\t%d: %s\n", i, argv[i]); + } + + userargv->vtable->set_string_index(interpreter, userargv, + string_make(interpreter, argv[i], strlen(argv[i]), 0, 0, 0), i + ); + } + + interpreter->pmc_reg.registers[0]=userargv; runops(interpreter, interpreter->code, 0); --- /parrot-cvs/test_main.c Thu Jan 31 01:18:18 2002 +++ /parrot/test_main.c Thu Jan 31 01:45:20 2002 @@ -96,7 +96,7 @@ } OUT: - (*argc)--; + return (*(argv++))[0]; }