Chunked-transfer decoding from stdin yy045

  •    /* chunked transfer decoding */
       
        #define echo do{if(fwrite(yytext,(size_t)yyleng,1,yyout)){}}while(0)
        #define jmp (yy_start) = 1 + 2 *
        int fileno (FILE *);
        int ischunked,chunksize,count;
       xa "\15"|"\12"
       xb "\15\12" 
       xc "HTTP/0.9"|"HTTP/1.0"|"HTTP/1.1"
       xd [Cc][Hh][Uu][Nn][Kk][Ee][Dd]
       xe [0-9a-fA-F]+\r\n
       xf [0-9a-fA-F]*\r\n
       %option noyywrap nounput noinput 
       %s xb xc xd xe xf
       %%
       ^{xc} echo;ischunked=0;jmp xc;
       <xc>^transfer-encoding: echo;jmp xb;
       <xb>\r\n\r\n echo;jmp xe;
       <xb>{xd} echo;ischunked=1;
       <xe>{xf}|{xe} {
       count=0;
       if(ischunked==1)
       {chunksize=strtol(yytext,NULL,16);
       jmp xd;};
       };
       <xd>{xb} jmp xf;
       <xd>. { 
       count++;
       if(count==chunksize)jmp xe;
       echo;
       };
       <xf>^[A-Fa-f0-9]+{xa}
       <xf>{xa}+[A-Fa-f0-9]+{xa}
       <xf>{xb}[A-Fa-f0-9]+{xb}
       %%
       int main(){ yylex();exit(0);}