1: #ifndef lint
   2: static char sccsid[] = "@(#)getargs.c	5.1 (Berkeley) 7/2/83";
   3: #endif
   4: 
   5: #include <stdio.h>
   6: 
   7: /*******
   8:  *	getargs(s, arps)
   9:  *	char *s, *arps[];
  10:  *
  11:  *	getargs  -  this routine will generate a vector of
  12:  *	pointers (arps) to the substrings in string "s".
  13:  *	Each substring is separated by blanks and/or tabs.
  14:  *
  15:  *	If FANCYARGS is defined, you get the following:
  16:  *	Strings containing blanks may be specified by quoting,
  17:  *	in a manner similar to using the shell.
  18:  *	Control characters are entered by ^X where X is any
  19:  *	character; ^? gets you a rubout and ^^ is a real ^.
  20:  *	Warning (rti!trt): I doubt FANCYARGS is wise, since getargs
  21:  *	is used all over the place.  Its features may be useful
  22:  *	but a separate fancy_getargs() should be called instead.
  23:  *
  24:  *	return - the number of subfields.
  25:  */
  26: 
  27: getargs(s, arps)
  28: register char *s;
  29: char *arps[];
  30: {
  31:     register int i;
  32: #ifdef  FANCYARGS
  33:     register char *sp;
  34:     register char qchar;
  35: #endif
  36: 
  37:     i = 0;
  38: #ifndef FANCYARGS
  39:     for (;;) {
  40:         arps[i] = NULL;
  41:         while (*s == ' ' || *s == '\t')
  42:             *s++ = '\0';
  43:         if (*s == '\n')
  44:             *s = '\0';
  45:         if (*s == '\0')
  46:             break;
  47:         arps[i++] = s++;
  48:         while (*s != '\0' && *s != ' '
  49:             && *s != '\t' && *s != '\n')
  50:                 s++;
  51:     }
  52: #else
  53:     for (;;) {
  54:         while (*s == ' ' || *s == '\t')
  55:             ++s;
  56:         if (*s == '\n' || *s == '\0')
  57:             break;
  58:         arps[i++] = sp = s;
  59:         qchar = 0;
  60:         while(*s != '\0'  &&  *s != '\n') {
  61:             if (qchar == 0 && (*s == ' ' || *s == '\t')) {
  62:                 ++s;
  63:                 break;
  64:             }
  65:             switch(*s) {
  66:             default:
  67:                 *sp++ = *s++;
  68:                 break;
  69:             case '^':
  70:                 if(*++s == '^')
  71:                     *sp++ = '^';
  72:                 else if(*s == '?')
  73:                     *sp++ = 0177;
  74:                 else
  75:                     *sp++ = *s & 037;
  76:                 s++;
  77:                 break;
  78:             case '"':
  79:             case '\'':
  80:                 if(qchar == *s) {
  81:                     qchar = 0;
  82:                     ++s;
  83:                     break;
  84:                 }
  85:                 if(qchar)
  86:                     *sp++ = *s++;
  87:                 else
  88:                     qchar = *s++;
  89:                 break;
  90:             }
  91:         }
  92:         *sp++ = 0;
  93:     }
  94:     arps[i] = NULL;
  95: #endif
  96:     return(i);
  97: }

Defined functions

Defined variables

sccsid defined in line 2; never used
Last modified: 1983-07-27
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 624
Valid CSS Valid XHTML 1.0 Strict