/*====================================================================* * * Copyright (c) 2013 Qualcomm Atheros, Inc. * * All rights reserved. * *====================================================================*/ /*====================================================================* * * signed getargv (signed argc, char const * argv []) * * symbol.h * * read one line from stdin; fill argv [] with fields from that * line; return the number of fields found; ignore blank lines * and script style comment lines; this implementation inserts * a program name at argv [0] to emulate a true argv []; * * Contributor(s): * Charles Maier <cmaier@qca.qualcomm.com> * *--------------------------------------------------------------------*/ #ifndef GETARGV_SOURCE #define GETARGV_SOURCE #include <stdio.h> #include <ctype.h> #include <memory.h> #include "../tools/symbol.h" #include "../tools/chars.h" signed getargv (signed argc, char const * argv []) { extern char const * program_name; static char string [2048]; char const ** argp = argv; char * sp = string; signed c = getc (stdin); memset (string, 0, sizeof (string)); memset ((char **) (argv), 0, argc * sizeof (char const *)); while (nobreak (c)) { if (isspace (c)) { do { c = getc (stdin); } while (isspace (c)); } if (c == '#') { do { c = getc (stdin); } while (nobreak (c)); c = getc (stdin); continue; } * argp++ = program_name; * argp++ = sp = string; while (nobreak (c)) { if (c == '#') { do { c = getc (stdin); } while (nobreak (c)); break; } if (isblank (c)) { c = (char) (0); * argp = sp + 1; } else if (sp == * argp) { if ((signed) (argp - argv) < argc) { argp++; } } * sp++ = (char) (c); c = getc (stdin); } * argp = (char const *) (0); * sp = (char) (0); } return ((unsigned) (argp - argv)); } /*====================================================================* * *--------------------------------------------------------------------*/ #if 0 char const * program_name = "program"; #include <stdio.h> int main (int argc, char const * argv []) { char const * fields [16]; signed count; while ((count = getargv (SIZEOF (fields), fields))) { signed field; for (field = 0; field < count; field++) { printf ("field[%d]=[%s]\n", field, fields [field]); } printf ("\n"); } return (0); } #endif /*====================================================================* * *--------------------------------------------------------------------*/ #endif