%{ #include "options.h" #include "mboxsize.h" #define RESET_FIELDS do { \ subject[0] = '\0'; \ from[0] = '\0'; \ date[0] = '\0'; \ } while (0) %} %s in_header %% int subjlen = strlen("Subject: "); int fromlen = strlen("From: "); int datelen = strlen("Date: "); /* "subject: " (case insensitive per RFC 822) */ ^[Ss][Uu][Bb][Jj][Ee][Cc][Tt]:[ ](.*) { header_copy(subject, yytext + subjlen, yyleng - subjlen); } /* "from: " (case insensitive) */ ^[Ff][Rr][Oo][Mm]:[ ](.*) { header_copy(from, yytext + fromlen, yyleng - fromlen); } /* "date: " (case insensitive) */ ^[Dd][Aa][Tt][Ee]:[ ](.*) { header_copy(date, yytext + datelen, yyleng - datelen); } ^\n { /* dbg_print("entering INITIAL"); */ ++message_chars; BEGIN(INITIAL); } ^From[ ] { BEGIN(in_header); /* dbg_print("entering in_message"); */ opts->showmsg(); RESET_FIELDS; message_chars = yyleng; } <> { opts->showmsg(); RESET_FIELDS; yyterminate(); } .|\n { ++message_chars; } .|\n ++message_chars; %%