1 #include "libcflat.h" 2 #include "auxinfo.h" 3 4 int __argc; 5 char *__argv[100]; 6 char *__args; 7 8 static char args_copy[1000]; 9 static char *copy_ptr = args_copy; 10 11 static bool isblank(char p) 12 { 13 return p == ' ' || p == '\t'; 14 } 15 16 static char *skip_blanks(char *p) 17 { 18 while (isblank(*p)) 19 ++p; 20 return p; 21 } 22 23 void __setup_args(void) 24 { 25 char *args = __args; 26 char **argv = __argv + __argc; 27 28 while (*(args = skip_blanks(args)) != '\0') { 29 *argv++ = copy_ptr; 30 while (*args != '\0' && !isblank(*args)) 31 *copy_ptr++ = *args++; 32 *copy_ptr++ = '\0'; 33 } 34 __argc = argv - __argv; 35 } 36 37 void setup_args(char *args) 38 { 39 if (!args) 40 return; 41 42 __args = args; 43 __setup_args(); 44 } 45 46 void setup_args_progname(char *args) 47 { 48 __argv[0] = copy_ptr; 49 strcpy(__argv[0], auxinfo.progname); 50 copy_ptr += strlen(auxinfo.progname) + 1; 51 ++__argc; 52 if (args) { 53 __args = args; 54 __setup_args(); 55 } 56 } 57