#ifndef _MAILX_DEF_H
#define _MAILX_DEF_H
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <termio.h>
#include <setjmp.h>
#include <time.h>
#include <sys/stat.h>
#include <maillock.h>
#include <ctype.h>
#include <errno.h>
#ifndef preSVr4
#include <unistd.h>
#include <stdlib.h>
#include <ulimit.h>
#include <wait.h>
#include <libcustr.h>
#endif
#ifdef VMUNIX
#include <sys/wait.h>
#endif
#include "local.h"
#include "uparm.h"
#define SENDESC '~'
#define NMLSIZE 1024
#define PATHSIZE 1024
#define HSHSIZE 59
#define HDRFIELDS 3
#define LINESIZE 5120
#define STRINGSIZE ((unsigned)128)
#define MAXARGC 1024
#define NOSTR ((char *)0)
#define NOSTRPTR ((char **)0)
#define NOINTPTR ((int *)0)
#define MAXEXP 25
#define equal(a, b) (strcmp(a, b) == 0)
#define fopen(s, t) my_fopen(s, t)
#define fclose(s) my_fclose(s)
struct message {
off_t m_offset;
long m_size;
long m_lines;
long m_clen;
short m_flag;
char m_text;
};
typedef struct fplst {
FILE *fp;
struct fplst *next;
} NODE;
#define MUSED (1<<0)
#define MDELETED (1<<1)
#define MSAVED (1<<2)
#define MTOUCH (1<<3)
#define MPRESERVE (1<<4)
#define MMARK (1<<5)
#define MODIFY (1<<6)
#define MNEW (1<<7)
#define MREAD (1<<8)
#define MSTATUS (1<<9)
#define MBOX (1<<10)
#define MBOXED (1<<11)
#define H_AFWDCNT 1
#define H_AFWDFROM 2
#define H_CLEN 3
#define H_CTYPE 4
#define H_DATE 5
#define H_DEFOPTS 6
#define H_EOH 7
#define H_FROM 8
#define H_FROM1 9
#define H_FROM2 10
#define H_MTSID 11
#define H_MTYPE 12
#define H_MVERS 13
#define H_MSVC 14
#define H_RECEIVED 15
#define H_RVERS 16
#define H_STATUS 17
#define H_SUBJ 18
#define H_TO 19
#define H_TCOPY 20
#define H_TROPTS 21
#define H_UAID 22
#define H_DAFWDFROM 23
#define H_DTCOPY 24
#define H_DRECEIVED 25
#define H_CONT 26
#define H_NAMEVALUE 27
struct cmd {
char *c_name;
int (*c_func)(void *);
short c_argtype;
short c_msgflag;
short c_msgmask;
};
#define c_minargs c_msgflag
#define c_maxargs c_msgmask
#define MSGLIST 0
#define STRLIST 1
#define RAWLIST 2
#define NOLIST 3
#define NDMLIST 4
#define P 040
#define I 0100
#define M 0200
#define W 0400
#define F 01000
#define T 02000
#define R 04000
#define MMNORM (MDELETED|MSAVED)
#define MMNDEL MDELETED
typedef struct headline {
custr_t *hl_from;
custr_t *hl_tty;
custr_t *hl_date;
} headline_t;
#define GTO 1
#define GSUBJECT 2
#define GCC 4
#define GBCC 8
#define GDEFOPT 16
#define GNL 32
#define GOTHER 64
#define GMASK (GTO|GSUBJECT|GCC|GBCC|GDEFOPT|GNL|GOTHER)
#define GDEL 128
#define GCLEN 256
struct header {
char *h_to;
char *h_subject;
char *h_cc;
char *h_bcc;
char *h_defopt;
char **h_others;
int h_seq;
};
struct name {
struct name *n_flink;
struct name *n_blink;
short n_type;
char *n_name;
char *n_full;
};
struct var {
struct var *v_link;
char *v_name;
char *v_value;
};
struct mgroup {
struct mgroup *ge_link;
char *ge_name;
};
struct grouphead {
struct grouphead *g_link;
char *g_name;
struct mgroup *g_list;
};
#define NIL ((struct name *)0)
#define NONE ((struct cmd *)0)
#define NOVAR ((struct var *)0)
#define NOGRP ((struct grouphead *)0)
#define NOGE ((struct mgroup *)0)
#define NOFP ((struct fplst *)0)
#define TRUE 1
#define FALSE 0
#define DEADPERM 0600
#define TEMPPERM 0600
#define MBOXPERM 0600
#ifndef MFMODE
#define MFMODE 0600
#endif
struct ignore {
struct ignore *i_link;
char *i_field;
};
#ifdef preSVr4
struct utimbuf {
time_t actime;
time_t modtime;
};
#else
#include <utime.h>
#endif
#define TEOL 0
#define TNUMBER 1
#define TDASH 2
#define TSTRING 3
#define TDOT 4
#define TUP 5
#define TDOLLAR 6
#define TSTAR 7
#define TOPEN 8
#define TCLOSE 9
#define TPLUS 10
#define REGDEP 2
#define STRINGLEN 1024
#define CANY 0
#define CRCV 1
#define CSEND 2
#define CTTY 3
#define CNOTTY 4
#define M_IGNORE 1
#define M_SAVING 2
#if !defined(VMUNIX) && defined(preSVr4)
#define vfork() fork()
#endif
#ifndef SIGRETRO
#define sigchild()
#endif
#ifdef VMUNIX
#define sigset(s, a) signal(s, a)
#define sigsys(s, a) signal(s, a)
#else
#ifndef preSVr4
#define sigsys(s, a) signal(s, a)
#define setjmp(x) sigsetjmp((x), 1)
#define longjmp siglongjmp
#define jmp_buf sigjmp_buf
#else
#define OLD_BSD_SIGS
#endif
#endif
#define trunc(stream) ftruncate(fileno(stream), (long)ftell(stream))
#define NSPACE 25
struct strings {
char *s_topFree;
char *s_nextFree;
unsigned s_nleft;
};
#ifdef preSVr4
#ifndef sun
typedef int gid_t;
typedef int uid_t;
typedef int mode_t;
typedef int pid_t;
#endif
#endif
#define STSIZ 40
#define TMPSIZ 14
extern int Copy(int *msgvec);
extern FILE *Fdopen(int fildes, char *mode);
extern int Followup(int *msgvec);
extern char *Getf(register char *s);
extern int More(int *msgvec);
extern int Respond(int *msgvec);
extern int Save(int *msgvec);
extern int Sendm(char *str);
extern int Sput(char str[]);
extern int Type(int *msgvec);
extern void Verhogen(void);
extern char *addone(char hf[], char news[]);
extern char *addto(char hf[], char news[]);
extern void alter(char name[]);
extern int alternates(char **namelist);
extern void announce(void);
extern int any(int ch, char *str);
extern int anyof(register char *s1, register char *s2);
extern int argcount(char **argv);
extern void assign(char name[], char value[]);
extern int blankline(const char linebuf[]);
extern struct name *cat(struct name *n1, struct name *n2);
extern FILE *collect(struct header *hp);
extern void commands(void);
extern char *copy(char *str1, char *str2);
extern int copycmd(char str[]);
extern int deassign(register char *s);
extern int delm(int *msgvec);
extern struct name *delname(register struct name *np, char name[]);
extern int deltype(int msgvec[]);
extern char *detract(register struct name *np, int ntype);
extern int docomma(char *s);
extern int dopipe(char str[]);
extern int dosh(char *str);
extern int echo(register char **argv);
extern int editor(int *msgvec);
extern int edstop(int noremove);
extern struct name *elide(struct name *names);
extern int elsecmd(void);
extern int endifcmd(void);
extern int execute(char linebuf[], int contxt);
extern char *expand(char *name);
extern struct name *extract(char line[], int arg_ntype);
extern int fferror(FILE *iob);
extern int field(char str[]);
extern int file(char **argv);
extern struct grouphead *findgroup(char name[]);
extern void findmail(char *name);
extern int first(int f, int m);
extern void flush(void);
extern int folders(char **arglist);
extern int followup(int *msgvec);
extern int from(int *msgvec);
extern off_t fsize(FILE *iob);
extern int getfold(char *name);
extern int gethfield(register FILE *f, char linebuf[], register long rem);
extern int getaline(char *line, int size, FILE *f, int *hasnulls);
extern int getmessage(char *buf, int *vector, int flags);
extern int getmsglist(char *buf, int *vector, int flags);
extern int getname(uid_t uid, char namebuf[]);
extern int getrawlist(char line[], char **argv, int argc);
extern void getrecf(char *buf, char *recfile,
int useauthor, int sz_recfile);
extern uid_t getuserid(char name[]);
extern int grabh(register struct header *hp, int gflags, int subjtop);
extern int group(char **argv);
extern void hangup(int);
extern int hash(char name[]);
extern char *hcontents(char hfield[]);
extern int headerp(register char *line);
extern int headers(int *msgvec);
extern int headline_alloc(headline_t **);
extern void headline_free(headline_t *);
extern void headline_reset(headline_t *);
extern int help(void);
extern char *helppath(char *file);
extern char *hfield(char field[], struct message *mp,
char *(*add)(char *, char *));
extern void holdsigs(void);
extern int icequal(register char *s1, register char *s2);
extern int ifcmd(char **argv);
extern int igfield(char *list[]);
extern int inc(void);
extern void inithost(void);
extern int isdir(char name[]);
extern boolean_t is_headline(const char *);
extern int ishfield(char linebuf[], char field[]);
extern int ishost(char *sys, char *rest);
extern int isign(char *field, int saving);
extern void istrcpy(char *dest, int dstsize, char *src);
extern void lcwrite(char *fn, FILE *fi, FILE *fo, int addnl);
extern void load(char *name);
extern int loadmsg(char str[]);
extern int lock(FILE *fp, char *mode, int blk);
extern void lockmail(void);
extern int mail(char **people);
extern void mail1(struct header *hp, int use_to, char *orig_to);
extern void mapf(register struct name *np, char *from);
extern int mboxit(int msgvec[]);
extern void mechk(struct name *names);
extern int member(register char *realfield,
register struct ignore **table);
extern int messize(int *msgvec);
extern void minit(void);
extern int more(int *msgvec);
extern long msend(struct message *mailp, FILE *obuf,
int flag, int (*fp)(const char *, FILE *));
extern int my_fclose(register FILE *iop);
extern FILE *my_fopen(char *file, char *mode);
extern char *nameof(register struct message *mp);
extern char *netmap(char name[], char from[]);
extern int newfileinfo(int start);
extern int next(int *msgvec);
extern int npclose(FILE *ptr);
extern FILE *npopen(char *cmd, char *mode);
extern char *nstrcpy(char *dst, int dstsize, char *src);
extern char *nstrcat(char *dst, int dstsize, char *src);
extern int null(char *e);
extern int outof(struct name *names, FILE *fo);
extern struct name *outpre(struct name *to);
extern void panic(char *str);
extern int parse_headline(const char *, headline_t *);
extern int pcmdlist(void);
extern int pdot(void);
extern int preserve(int *msgvec);
extern void printgroup(char name[]);
extern void printhead(int mesg);
extern int puthead(struct header *hp, FILE *fo, int w, long clen);
extern int pversion(char *e);
extern void quit(int noremove);
extern int readline(FILE *ibuf, char *linebuf);
extern void receipt(struct message *mp);
extern void relsesigs(void);
extern int removefile(char name[]);
extern int replyall(int *msgvec);
extern int replysender(int *msgvec);
extern int respond(int *msgvec);
extern int retfield(char *list[]);
extern int rexit(int e);
extern char *safeexpand(char name[]);
extern void *salloc(unsigned size);
extern void *srealloc(void *optr, unsigned size);
extern int samebody(register char *user, register char *addr,
int fuzzy);
extern int save(char str[]);
extern void savedead(int s);
extern char *savestr(char *str);
extern int schdir(char *str);
extern int screensize(void);
extern int scroll(char arg[]);
extern int sendm(char *str);
extern int set(char **arglist);
extern void setclen(register struct message *mp);
extern int setfile(char *name, int isedit);
extern FILE *setinput(register struct message *mp);
extern void setptr(register FILE *ibuf);
extern int shell(char *str);
#ifndef sigchild
extern void sigchild(void);
#endif
#ifndef sigset
extern void (*sigset())();
#endif
extern char *skin(char *name);
extern char *snarf(char linebuf[], int *flag, int erf);
extern int source(char name[]);
extern char *splice(char *addr, char *hdr);
extern int sput(char str[]);
extern void sreset(void);
extern void stop(int s);
extern int stouch(int msgvec[]);
extern int substr(char *string1, char *string2);
extern int swrite(char str[]);
extern struct name *tailof(struct name *name);
extern void tinit(void);
extern int tmail(void);
extern int top(int *msgvec);
extern void touch(int mesg);
extern struct name *translate(struct name *np);
extern int type(int *msgvec);
extern int undelete(int *msgvec);
extern int ungroup(char **argv);
extern int unigfield(char *list[]);
extern void unlockmail(void);
extern char **unpack(struct name *np);
extern int unread(int msgvec[]);
extern int unretfield(char *list[]);
extern int unset(char **arglist);
extern int unstack(void);
extern char *unuucp(char *name);
extern struct name *usermap(struct name *names);
extern char *value(char name[]);
extern char *vcopy(char str[]);
extern void vfree(register char *cp);
extern int visual(int *msgvec);
extern char *yankword(char *name, char *word, int sz, int comma);
#ifdef __cplusplus
extern "C" {
#endif
extern int delempty(mode_t, char *);
extern char *maildomain(void);
extern void touchlock(void);
extern char *xgetenv(char *);
extern int xsetenv(char *);
#ifdef __cplusplus
}
#endif
#ifdef preSVr4
extern long atol();
extern char *getcwd();
extern char *calloc();
extern char *getenv();
extern void exit();
extern void free();
extern char *malloc();
extern time_t time();
extern long ulimit();
extern int utime();
extern int wait();
extern int fputs();
#endif
#ifdef __cplusplus
}
#endif
#endif