13e12c5d1SDavid du Colombier #include "sys.h" 23e12c5d1SDavid du Colombier 33e12c5d1SDavid du Colombier /* format of REMOTE FROM lines */ 43e12c5d1SDavid du Colombier extern char *REMFROMRE; 53e12c5d1SDavid du Colombier extern int REMSENDERMATCH; 63e12c5d1SDavid du Colombier extern int REMDATEMATCH; 73e12c5d1SDavid du Colombier extern int REMSYSMATCH; 83e12c5d1SDavid du Colombier 93e12c5d1SDavid du Colombier /* format of mailbox FROM lines */ 103e12c5d1SDavid du Colombier #define IS_HEADER(p) ((p)[0]=='F'&&(p)[1]=='r'&&(p)[2]=='o'&&(p)[3]=='m'&&(p)[4]==' ') 113e12c5d1SDavid du Colombier #define IS_TRAILER(p) ((p)[0]=='m'&&(p)[1]=='o'&&(p)[2]=='r'&&(p)[3]=='F'&&(p)[4]=='\n') 123e12c5d1SDavid du Colombier extern char *FROMRE; 133e12c5d1SDavid du Colombier extern int SENDERMATCH; 143e12c5d1SDavid du Colombier extern int DATEMATCH; 153e12c5d1SDavid du Colombier 169a747e4fSDavid du Colombier enum 179a747e4fSDavid du Colombier { 189a747e4fSDavid du Colombier Elemlen= 28, 19*21887c0bSDavid du Colombier Errlen= ERRMAX, 209a747e4fSDavid du Colombier Pathlen= 256, 219a747e4fSDavid du Colombier }; 2204c2b4eaSDavid du Colombier enum { Atnoteunknown, Atnoterecog }; 239a747e4fSDavid du Colombier 243e12c5d1SDavid du Colombier /* 253e12c5d1SDavid du Colombier * routines in mail.c 263e12c5d1SDavid du Colombier */ 273e12c5d1SDavid du Colombier extern int print_header(Biobuf*, char*, char*); 283e12c5d1SDavid du Colombier extern int print_remote_header(Biobuf*, char*, char*, char*); 293e12c5d1SDavid du Colombier extern int parse_header(char*, String*, String*); 303e12c5d1SDavid du Colombier 313e12c5d1SDavid du Colombier /* 323e12c5d1SDavid du Colombier * routines in aux.c 333e12c5d1SDavid du Colombier */ 343e12c5d1SDavid du Colombier extern String *abspath(char*, char*, String*); 353e12c5d1SDavid du Colombier extern String *mboxpath(char*, char*, String*, int); 363e12c5d1SDavid du Colombier extern char *basename(char*); 373e12c5d1SDavid du Colombier extern int delivery_status(String*); 383e12c5d1SDavid du Colombier extern void append_match(Resub*, String*, int); 393e12c5d1SDavid du Colombier extern int shellchars(char*); 407dd7cddfSDavid du Colombier extern String* escapespecial(String*); 417dd7cddfSDavid du Colombier extern String* unescapespecial(String*); 427dd7cddfSDavid du Colombier extern int returnable(char*); 433e12c5d1SDavid du Colombier 44ba64361bSDavid du Colombier /* in copymessage */ 45ba64361bSDavid du Colombier extern int appendfiletombox(int, int); 46ba64361bSDavid du Colombier extern int appendfiletofile(int, int); 47ba64361bSDavid du Colombier 483e12c5d1SDavid du Colombier /* mailbox types */ 493e12c5d1SDavid du Colombier #define MF_NORMAL 0 503e12c5d1SDavid du Colombier #define MF_PIPE 1 513e12c5d1SDavid du Colombier #define MF_FORWARD 2 523e12c5d1SDavid du Colombier #define MF_NOMBOX 3 533e12c5d1SDavid du Colombier #define MF_NOTMBOX 4 543e12c5d1SDavid du Colombier 553e12c5d1SDavid du Colombier /* a pipe between parent and child*/ 563e12c5d1SDavid du Colombier typedef struct { 573e12c5d1SDavid du Colombier Biobuf bb; 583e12c5d1SDavid du Colombier Biobuf *fp; /* parent process end*/ 593e12c5d1SDavid du Colombier int fd; /* child process end*/ 603e12c5d1SDavid du Colombier } stream; 613e12c5d1SDavid du Colombier 623e12c5d1SDavid du Colombier /* a child process*/ 633e12c5d1SDavid du Colombier typedef struct process{ 643e12c5d1SDavid du Colombier stream *std[3]; /* standard fd's*/ 653e12c5d1SDavid du Colombier int pid; /* process identifier*/ 663e12c5d1SDavid du Colombier int status; /* exit status*/ 672b7fd5adSDavid du Colombier Waitmsg *waitmsg; 683e12c5d1SDavid du Colombier } process; 693e12c5d1SDavid du Colombier 703e12c5d1SDavid du Colombier extern stream *instream(void); 713e12c5d1SDavid du Colombier extern stream *outstream(void); 723e12c5d1SDavid du Colombier extern void stream_free(stream*); 737dd7cddfSDavid du Colombier extern process *noshell_proc_start(char**, stream*, stream*, stream*, int, char*); 747dd7cddfSDavid du Colombier extern process *proc_start(char*, stream*, stream*, stream*, int, char*); 753e12c5d1SDavid du Colombier extern int proc_wait(process*); 763e12c5d1SDavid du Colombier extern int proc_free(process*); 773e12c5d1SDavid du Colombier extern int proc_kill(process*); 783e12c5d1SDavid du Colombier 793e12c5d1SDavid du Colombier /* tell compiler we're using a value so it won't complain */ 803e12c5d1SDavid du Colombier #define USE(x) if(x) 81