374 |
#define B_NEWLINE 8 |
#define B_NEWLINE 8 |
375 |
#define B_ADDRFIELD 9 |
#define B_ADDRFIELD 9 |
376 |
#define B_DATEFIELD 10 |
#define B_DATEFIELD 10 |
377 |
#define B_MAX 11 |
#define B_DECODE 12 |
378 |
|
#define B_MAX 13 |
379 |
|
|
380 |
/* String variables */ |
/* String variables */ |
381 |
#define S_OVERFLOWTEXT 0 |
#define S_OVERFLOWTEXT 0 |
661 |
int |
int |
662 |
eval_body (struct eval_env *env) |
eval_body (struct eval_env *env) |
663 |
{ |
{ |
|
body_t body = NULL; |
|
664 |
stream_t input = NULL; |
stream_t input = NULL; |
665 |
|
stream_t dstr = NULL; |
666 |
char buf[128]; /* FIXME: Fixed size. Bad */ |
char buf[128]; /* FIXME: Fixed size. Bad */ |
667 |
size_t n; |
size_t n; |
668 |
|
body_t body = NULL; |
669 |
|
|
670 |
env->prefix = env->svar[S_COMPONENT]; |
env->prefix = env->svar[S_COMPONENT]; |
671 |
|
|
672 |
message_get_body (env->msg, &body); |
message_get_body (env->msg, &body); |
673 |
body_get_stream (body, &input); |
body_get_stream (body, &input); |
674 |
|
|
675 |
|
if (env->bvar[B_DECODE]) |
676 |
|
{ |
677 |
|
header_t hdr; |
678 |
|
char *encoding = NULL; |
679 |
|
|
680 |
|
message_get_header (env->msg, &hdr); |
681 |
|
header_aget_value (hdr, MU_HEADER_CONTENT_TRANSFER_ENCODING, &encoding); |
682 |
|
if (encoding) |
683 |
|
{ |
684 |
|
int rc = filter_create(&dstr, input, encoding, |
685 |
|
MU_FILTER_DECODE, MU_STREAM_READ); |
686 |
|
if (rc == 0) |
687 |
|
input = dstr; |
688 |
|
free (encoding); |
689 |
|
} |
690 |
|
} |
691 |
|
|
692 |
stream_seek (input, 0, SEEK_SET); |
stream_seek (input, 0, SEEK_SET); |
693 |
while (stream_sequential_readline (input, buf, sizeof buf, &n) == 0 |
while (stream_sequential_readline (input, buf, sizeof buf, &n) == 0 |
694 |
&& n > 0) |
&& n > 0) |
696 |
buf[n] = 0; |
buf[n] = 0; |
697 |
print (env, buf, 0); |
print (env, buf, 0); |
698 |
} |
} |
699 |
|
if (dstr) |
700 |
|
stream_destroy (&dstr, stream_get_owner (dstr)); |
701 |
return 0; |
return 0; |
702 |
} |
} |
703 |
|
|
793 |
|
|
794 |
int |
int |
795 |
mhl_format_run (list_t fmt, |
mhl_format_run (list_t fmt, |
796 |
int width, int length, int clearscreen, int bell, |
int width, int length, int flags, |
797 |
message_t msg, stream_t output) |
message_t msg, stream_t output) |
798 |
{ |
{ |
799 |
int rc; |
int rc; |
806 |
list_create (&env.printed_fields); |
list_create (&env.printed_fields); |
807 |
env.ivar[I_WIDTH] = width; |
env.ivar[I_WIDTH] = width; |
808 |
env.ivar[I_LENGTH] = length; |
env.ivar[I_LENGTH] = length; |
809 |
env.bvar[B_CLEARSCREEN] = clearscreen; |
env.bvar[B_CLEARSCREEN] = flags & MHL_CLEARSCREEN; |
810 |
env.bvar[B_BELL] = bell; |
env.bvar[B_BELL] = flags & MHL_BELL; |
811 |
|
env.bvar[B_DECODE] = flags & MHL_DECODE; |
812 |
env.pos = 0; |
env.pos = 0; |
813 |
env.nlines = 0; |
env.nlines = 0; |
814 |
env.msg = msg; |
env.msg = msg; |