summaryrefslogtreecommitdiffstats
path: root/gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c')
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c175
1 files changed, 93 insertions, 82 deletions
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c
index 9d9412af21b..5a0df9173d8 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c
@@ -1,57 +1,55 @@
/* MODULE HTLex.c
-** LEXICAL ANALYSOR
-**
-** AUTHORS:
-** AL Ari Luotonen luotonen@dxcern.cern.ch
-**
-** HISTORY:
-**
-**
-** BUGS:
-**
-**
-*/
+ * LEXICAL ANALYSOR
+ *
+ * AUTHORS:
+ * AL Ari Luotonen luotonen@dxcern.cern.ch
+ *
+ * HISTORY:
+ *
+ *
+ * BUGS:
+ *
+ *
+ */
#include <HTUtils.h>
-#include <HTLex.h> /* Implemented here */
+#include <HTLex.h> /* Implemented here */
#include <LYLeaks.h>
/*
-** Global variables
-*/
-PUBLIC char HTlex_buffer[40]; /* Read lexical string */
-PUBLIC int HTlex_line = 1; /* Line number in source file */
-
+ * Global variables
+ */
+char HTlex_buffer[40]; /* Read lexical string */
+int HTlex_line = 1; /* Line number in source file */
/*
-** Module-wide variables
-*/
-PRIVATE int lex_cnt;
-PRIVATE BOOL lex_template;
-PRIVATE LexItem lex_pushed_back = LEX_NONE;
-PRIVATE FILE *cache = NULL;
-
-
-PUBLIC void unlex ARGS1(LexItem, lex_item)
+ * Module-wide variables
+ */
+static int lex_cnt;
+static BOOL lex_template;
+static LexItem lex_pushed_back = LEX_NONE;
+static FILE *cache = NULL;
+
+void unlex(LexItem lex_item)
{
lex_pushed_back = lex_item;
}
-
-PUBLIC LexItem lex ARGS1(FILE *, fp)
+LexItem lex(FILE *fp)
{
int ch = 0;
- if (fp != cache) { /* This cache doesn't work ok because the system */
- cache = fp; /* often assign same FILE structure the next open */
- HTlex_line = 1; /* file. So, if there are syntax errors in setup */
- } /* files it may confuse things later on. */
-
+ if (fp != cache) { /* This cache doesn't work ok because the system */
+ cache = fp; /* often assign same FILE structure the next open */
+ HTlex_line = 1; /* file. So, if there are syntax errors in setup *
+ files it may confuse things later on. */
+ }
if (lex_pushed_back != LEX_NONE) {
LexItem ret = lex_pushed_back;
+
lex_pushed_back = LEX_NONE;
return ret;
}
@@ -59,73 +57,86 @@ PUBLIC LexItem lex ARGS1(FILE *, fp)
lex_cnt = 0;
lex_template = NO;
- for(;;) {
+ for (;;) {
switch (ch = getc(fp)) {
- case EOF:
- case ' ':
- case '\t':
- case '\r':
- case '\n':
- case ':':
- case ',':
- case '(':
- case ')':
- case '@':
+ case EOF:
+ case ' ':
+ case '\t':
+ case '\r':
+ case '\n':
+ case ':':
+ case ',':
+ case '(':
+ case ')':
+ case '@':
if (lex_cnt > 0) {
- if (ch != EOF) ungetc(ch,fp);
- if (lex_template) return LEX_TMPL_STR;
- else return LEX_ALPH_STR;
- }
- else switch(ch) {
- case EOF: return LEX_EOF;
- case '\n':
- HTlex_line++; return LEX_REC_SEP;
- case ':': return LEX_FIELD_SEP;
- case ',': return LEX_ITEM_SEP;
- case '(': return LEX_OPEN_PAREN;
- case ')': return LEX_CLOSE_PAREN;
- case '@': return LEX_AT_SIGN;
- default: ; /* Leading white space ignored (SP,TAB,CR) */
- }
+ if (ch != EOF)
+ ungetc(ch, fp);
+ if (lex_template)
+ return LEX_TMPL_STR;
+ else
+ return LEX_ALPH_STR;
+ } else
+ switch (ch) {
+ case EOF:
+ return LEX_EOF;
+ case '\n':
+ HTlex_line++;
+ return LEX_REC_SEP;
+ case ':':
+ return LEX_FIELD_SEP;
+ case ',':
+ return LEX_ITEM_SEP;
+ case '(':
+ return LEX_OPEN_PAREN;
+ case ')':
+ return LEX_CLOSE_PAREN;
+ case '@':
+ return LEX_AT_SIGN;
+ default: /* Leading white space ignored (SP,TAB,CR) */
+ break;
+ }
break;
- default:
- HTlex_buffer[lex_cnt++] = (char) ch;
+ default:
+ if (lex_cnt < (int) (sizeof(HTlex_buffer) - 1))
+ HTlex_buffer[lex_cnt++] = (char) ch;
HTlex_buffer[lex_cnt] = '\0';
- if ('*' == ch) lex_template = YES;
- } /* switch ch */
- } /* forever */
+ if ('*' == ch)
+ lex_template = YES;
+ } /* switch ch */
+ } /* forever */
}
-
-PUBLIC char *lex_verbose ARGS1(LexItem, lex_item)
+const char *lex_verbose(LexItem lex_item)
{
- static char msg[100]; /* @@@@@@@@ */
+ static char msg[sizeof(HTlex_buffer) + 30]; /* @@@@@@@@ */
switch (lex_item) {
- case LEX_NONE: /* Internally used */
+ case LEX_NONE: /* Internally used */
return "NO-LEX-ITEM";
- case LEX_EOF: /* End of file */
+ case LEX_EOF: /* End of file */
return "end-of-file";
- case LEX_REC_SEP: /* Record separator */
+ case LEX_REC_SEP: /* Record separator */
return "record separator (newline)";
- case LEX_FIELD_SEP: /* Field separator */
+ case LEX_FIELD_SEP: /* Field separator */
return "field separator ':'";
- case LEX_ITEM_SEP: /* List item separator */
+ case LEX_ITEM_SEP: /* List item separator */
return "item separator ','";
- case LEX_OPEN_PAREN: /* Group start tag */
+ case LEX_OPEN_PAREN: /* Group start tag */
return "'('";
- case LEX_CLOSE_PAREN: /* Group end tag */
+ case LEX_CLOSE_PAREN: /* Group end tag */
return "')'";
- case LEX_AT_SIGN: /* Address qualifier */
+ case LEX_AT_SIGN: /* Address qualifier */
return "address qualifier '@'";
- case LEX_ALPH_STR: /* Alphanumeric string */
- sprintf(msg, "alphanumeric string '%.70s'", HTlex_buffer);
+ case LEX_ALPH_STR: /* Alphanumeric string */
+ sprintf(msg, "alphanumeric string '%.*s'",
+ (int) sizeof(HTlex_buffer), HTlex_buffer);
return msg;
- case LEX_TMPL_STR: /* Template string */
- sprintf(msg, "template string '%.70s'", HTlex_buffer);
+ case LEX_TMPL_STR: /* Template string */
+ sprintf(msg, "template string '%.*s'",
+ (int) sizeof(HTlex_buffer), HTlex_buffer);
return msg;
- default:
+ default:
return "UNKNOWN-LEX-ITEM";
}
}
-