00001
00007
00008
00009 #include <kernel.h>
00010 #include <shell.h>
00011
00020 short lexan(char *line, ushort linelen, char *tokbuf, char *tok[])
00021 {
00022 char quote;
00023 ushort ntok = 0;
00024 ushort i = 0;
00025
00026 while ((i < linelen) && (ntok < SHELL_MAXTOK))
00027 {
00028
00029 while (isWhitespace(line[i]) && (i < linelen))
00030 { i++; }
00031
00032
00033 if (isEndOfLine(line[i]) || (i >= linelen))
00034 { return ntok; }
00035
00036
00037 tok[ntok] = tokbuf;
00038
00039
00040 if (isQuote(line[i]))
00041 {
00042 quote = *tokbuf++ = line[i++];
00043
00044 while ( (quote != line[i])
00045 && (!isEndOfLine(line[i])) && (i < linelen))
00046 { *tokbuf++ = line[i++]; }
00047
00048 if (quote == line[i])
00049 { *tokbuf++ = line[i++]; }
00050 else
00051 { return SYSERR; }
00052 }
00053 else
00054 {
00055 *tokbuf++ = line[i++];
00056
00057
00058 if (!isOtherSpecial(line[i-1]))
00059 {
00060 while ( (!isEndOfLine(line[i])) && (!isQuote(line[i]))
00061 && (!isOtherSpecial(line[i])) && (!isWhitespace(line[i]))
00062 && (i < linelen) )
00063 { *tokbuf++ = line[i++]; }
00064
00065 if (i >= linelen)
00066 return SYSERR;
00067 }
00068 }
00069
00070
00071 *tokbuf++ = '\0';
00072 ntok++;
00073 }
00074
00075 return ntok;
00076 }