/* dfilter-scanner.l
* Scanner for display filters
*
- * $Id: dfilter-scanner.l,v 1.18 1999/10/11 17:04:33 deniel Exp $
+ * $Id: dfilter-scanner.l,v 1.26 1999/10/19 05:45:45 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
whitespace [\t ]
hex [A-Fa-f0-9]{1,2}
hexsep [-:\.]
+minus [-]
+plus [+]
%%
return T_VAL_BYTE_RANGE;
}
+\[{whitespace}*-?[0-9]+{whitespace}*\] { /* range [ x ] */
+
+ char *byterange_string = g_strdup(yytext);
+ char *s = byterange_string + 1; /* I don't want the first '[' */
+ char *p;
+
+ /* Get the offset from the string */
+ if ((p = strtok(s, "]"))) {
+ dfilter_lval.byte_range.offset = strtol(p, NULL, 10);
+ }
+ else {
+ g_free(byterange_string);
+ return 0;
+ }
+
+ dfilter_lval.byte_range.length = 0;
+ g_free(byterange_string);
+ return T_VAL_BYTE_RANGE;
+}
{hex}({hexsep}{hex})+ { /* byte string, any length */
dfilter_lval.string = g_strdup(yytext);
}
-[A-Za-z][A-Za-z0-9\.\_\-]+ { /* looks like a protocol, field name, or hostname */
+0[xX][A-Fa-f0-9]+ { /* hex values */
+ dfilter_lval.string = g_strdup(yytext);
+ return T_VAL_UNQUOTED_STRING;
+}
+
+[A-Za-z0-9\:][A-Za-z0-9\.\_\-\:]+ {
+ /* looks like a protocol, field name, or hostname */
int retval = 0;
enum ftenum ftype;
retval = T_FT_BOOLEAN;
break;
case FT_UINT8:
- case FT_VALS_UINT8:
retval = T_FT_UINT8;
break;
case FT_UINT16:
- case FT_VALS_UINT16:
retval = T_FT_UINT16;
break;
case FT_UINT32:
- case FT_VALS_UINT32:
- case FT_VALS_UINT24:
retval = T_FT_UINT32;
break;
+ case FT_INT8:
+ retval = T_FT_INT8;
+ break;
+ case FT_INT16:
+ retval = T_FT_INT16;
+ break;
+ case FT_INT32:
+ retval = T_FT_INT32;
+ break;
case FT_DOUBLE:
- dfilter_fail("Sorry, you can't filter on field \"%s\", as we don't yet support filtering on floating-point values.",
- yytext);
- retval = 0;
+ retval = T_FT_DOUBLE;
break;
case FT_ABSOLUTE_TIME:
dfilter_fail("Sorry, you can't filter on field \"%s\", as we don't yet support filtering on time-of-day values.",
retval = 0;
break;
case FT_STRING:
- dfilter_fail("Sorry, you can't filter on field \"%s\", as we don't yet support filtering on string values.",
- yytext);
- retval = 0;
+ retval = T_FT_STRING;
break;
case FT_ETHER:
retval = T_FT_ETHER;
retval = T_FT_IPXNET;
break;
default:
+ printf("ftype for %s is %d\n", yytext, ftype);
g_assert_not_reached();
retval = 0;
break;
return retval;
}
-[0-9]+ { /* decimal or octal values */
+({plus}|{minus})?[0-9]+ { /* decimal and octal integers */
dfilter_lval.string = g_strdup(yytext);
- return T_VAL_NUMBER_STRING;
+ return T_VAL_UNQUOTED_STRING;
}
-
-0[xX][A-Fa-f0-9]+ { /* hex values */
+({plus}|{minus})?([0-9]+|[0-9]+\.[0-9]+|\.[0-9]+)([eE]({plus}|{minus})?[0-9]+)? {
+ /* I'm trying to capture all floating points here, and
+ * am using the strtod manpage as the description of
+ * valid formats */
dfilter_lval.string = g_strdup(yytext);
- return T_VAL_NUMBER_STRING;
+ return T_VAL_UNQUOTED_STRING;
}
[0-9\:\.]+ {