|
|
1.1 ! root 1: /* lexan.c - lexan */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <shell.h> ! 6: ! 7: /*------------------------------------------------------------------------ ! 8: * lexan - ad hoc lexical analyzer to divide command line into tokens ! 9: *------------------------------------------------------------------------ ! 10: */ ! 11: lexan(line) ! 12: char *line; ! 13: { ! 14: char **tokptr; ! 15: int ntok; ! 16: char *p; ! 17: char ch; ! 18: char *to; ! 19: char quote; ! 20: ! 21: to = Shl.shargst; /* area to place token strings */ ! 22: tokptr = &Shl.shtok[ntok = 0]; /* array of ptrs to tokens */ ! 23: for (p = line ; *p!='\0' && *p!='\n' && ntok < SHMAXTOK ;) { ! 24: while ( (ch = *p) == ' ') /* skip leading blanks */ ! 25: p++; ! 26: if (ch == '\0' || ch == '\n') /* end of line or string*/ ! 27: return(ntok); ! 28: *tokptr++ = to; /* save start of token */ ! 29: Shl.shtktyp[ntok++] = ch; ! 30: if (ch == '"' || ch == '\'') { /* check for quoted str.*/ ! 31: quote = ch; ! 32: for (p++ ; (ch = *p++) != quote && ch != '\n' ! 33: && ch != '\0' ; ) ! 34: *to++ = ch; ! 35: if (ch != quote) ! 36: return(SYSERR); ! 37: } else { /* other possible tokens */ ! 38: *to++ = *p++; ! 39: if (ch!='>' && ch!='<' && ch!='&') ! 40: while ((ch = *p)!='\n' && ch !='\0' && ! 41: ch!='<' && ch!='>' && ch!=' ' && ! 42: ch!='"' && ch!='\'' && ch !='&') ! 43: *to++= *p++; /* copy alphamerics*/ ! 44: } ! 45: *to++ = NULLCH; /* terminate token string */ ! 46: } ! 47: return(ntok); ! 48: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.