1 #include "sys.h" 2 3 /* format of REMOTE FROM lines */ 4 extern char *REMFROMRE; 5 extern int REMSENDERMATCH; 6 extern int REMDATEMATCH; 7 extern int REMSYSMATCH; 8 9 /* format of mailbox FROM lines */ 10 #define IS_HEADER(p) ((p)[0]=='F'&&(p)[1]=='r'&&(p)[2]=='o'&&(p)[3]=='m'&&(p)[4]==' ') 11 #define IS_TRAILER(p) ((p)[0]=='m'&&(p)[1]=='o'&&(p)[2]=='r'&&(p)[3]=='F'&&(p)[4]=='\n') 12 extern char *FROMRE; 13 extern int SENDERMATCH; 14 extern int DATEMATCH; 15 16 enum 17 { 18 Elemlen= 28, 19 Errlen= 128, 20 Pathlen= 256, 21 }; 22 23 /* 24 * routines in mail.c 25 */ 26 extern int print_header(Biobuf*, char*, char*); 27 extern int print_remote_header(Biobuf*, char*, char*, char*); 28 extern int parse_header(char*, String*, String*); 29 30 /* 31 * routines in aux.c 32 */ 33 extern String *abspath(char*, char*, String*); 34 extern String *mboxpath(char*, char*, String*, int); 35 extern char *basename(char*); 36 extern int delivery_status(String*); 37 extern void append_match(Resub*, String*, int); 38 extern int shellchars(char*); 39 extern String* escapespecial(String*); 40 extern String* unescapespecial(String*); 41 extern int returnable(char*); 42 43 /* in copymessage */ 44 extern int appendfiletombox(int, int); 45 extern int appendfiletofile(int, int); 46 47 /* mailbox types */ 48 #define MF_NORMAL 0 49 #define MF_PIPE 1 50 #define MF_FORWARD 2 51 #define MF_NOMBOX 3 52 #define MF_NOTMBOX 4 53 54 /* a pipe between parent and child*/ 55 typedef struct { 56 Biobuf bb; 57 Biobuf *fp; /* parent process end*/ 58 int fd; /* child process end*/ 59 } stream; 60 61 /* a child process*/ 62 typedef struct process{ 63 stream *std[3]; /* standard fd's*/ 64 int pid; /* process identifier*/ 65 int status; /* exit status*/ 66 Waitmsg *waitmsg; 67 } process; 68 69 extern stream *instream(void); 70 extern stream *outstream(void); 71 extern void stream_free(stream*); 72 extern process *noshell_proc_start(char**, stream*, stream*, stream*, int, char*); 73 extern process *proc_start(char*, stream*, stream*, stream*, int, char*); 74 extern int proc_wait(process*); 75 extern int proc_free(process*); 76 extern int proc_kill(process*); 77 78 /* tell compiler we're using a value so it won't complain */ 79 #define USE(x) if(x) 80