typedef struct { char *t; int fd; int cfd; char *id; char response[128]; char error[128]; int fax; char phase; char ftsi[128]; /* remote ID */ long fdcs[8]; /* frame information */ long fpts[8]; /* page reception response */ long fet; /* post page message */ long fhng; /* call termination status */ int pageno; /* current page number */ char pageid[128]; /* current page file */ int pagefd; /* current page fd */ int valid; /* valid page responses */ long time; /* timestamp */ int pid; char ibuf[1024]; /* modem input buffering */ char *iptr; long icount; Biobuf *bp; /* file input buffering */ /* FDCS parameters */ long wd; /* width */ long vr; /* resolution */ long ln; /* page size (length) */ long df; /* huffman encoding */ } Modem; enum { /* ResultCodes */ Rok = 0, Rconnect, Rring, Rfailure, Rrerror, Rcontinue, Rhangup, Rnoise, }; enum { /* ErrorCodes */ Eok = 0, /* no error */ Eattn, /* can't get modem's attention */ Enoresponse, /* no response from modem */ Enoanswer, /* no answer from other side */ Enofax, /* other side isn't a fax machine */ Eincompatible, /* transmission incompatible with receiver */ Esys, /* system call error */ Eproto, /* fax protocol botch */ }; enum { /* things that are valid */ Vfdcs = 0x0001, /* page responses */ Vftsi = 0x0002, Vfpts = 0x0004, Vfet = 0x0008, Vfhng = 0x0010, Vwd = 0x4000, Vtype = 0x8000, }; /* fax2modem.c */ extern int initfaxmodem(Modem*); extern int fcon(Modem*); extern int ftsi(Modem*); extern int fdcs(Modem*); extern int fcfr(Modem*); extern int fpts(Modem*); extern int fet(Modem*); extern int fhng(Modem*); /* fax2receive.c */ extern int faxreceive(Modem*, char*); /* fax2send.c */ extern int faxsend(Modem*, int, char*[]); /* modem.c */ extern int setflow(Modem*, int); extern int setspeed(Modem*, int); extern int rawmchar(Modem*, char*); extern int getmchar(Modem*, char*, long); extern int putmchar(Modem*, char*); extern int command(Modem*, char*); extern int response(Modem*, int); extern void initmodem(Modem*, int, int, char*, char*); extern void xonoff(Modem*, int); /* spool.c */ extern void setpageid(char*, char*, long, int, int); extern int createfaxfile(Modem*, char*); extern int openfaxfile(Modem*, char*); /* subr.c */ extern void verbose(char*, ...); extern void error(char*, ...); extern int seterror(Modem*, int); extern void faxrlog(Modem*, int); extern void faxxlog(Modem*, int); extern int vflag;