1219b2ee8SDavid du Colombier typedef struct { 2219b2ee8SDavid du Colombier char *t; 3219b2ee8SDavid du Colombier int fd; 4219b2ee8SDavid du Colombier int cfd; 5219b2ee8SDavid du Colombier char *id; 6219b2ee8SDavid du Colombier char response[128]; 7219b2ee8SDavid du Colombier char error[128]; 8219b2ee8SDavid du Colombier 9219b2ee8SDavid du Colombier int fax; 10219b2ee8SDavid du Colombier char phase; 11219b2ee8SDavid du Colombier char ftsi[128]; /* remote ID */ 12219b2ee8SDavid du Colombier long fdcs[8]; /* frame information */ 13219b2ee8SDavid du Colombier long fpts[8]; /* page reception response */ 14219b2ee8SDavid du Colombier long fet; /* post page message */ 15219b2ee8SDavid du Colombier long fhng; /* call termination status */ 16219b2ee8SDavid du Colombier int pageno; /* current page number */ 17219b2ee8SDavid du Colombier char pageid[128]; /* current page file */ 18219b2ee8SDavid du Colombier int pagefd; /* current page fd */ 19219b2ee8SDavid du Colombier int valid; /* valid page responses */ 20219b2ee8SDavid du Colombier long time; /* timestamp */ 21219b2ee8SDavid du Colombier int pid; 22219b2ee8SDavid du Colombier 23219b2ee8SDavid du Colombier char ibuf[1024]; /* modem input buffering */ 24219b2ee8SDavid du Colombier char *iptr; 25219b2ee8SDavid du Colombier long icount; 26219b2ee8SDavid du Colombier 27219b2ee8SDavid du Colombier Biobuf *bp; /* file input buffering */ 28219b2ee8SDavid du Colombier 29219b2ee8SDavid du Colombier /* FDCS parameters */ 30219b2ee8SDavid du Colombier long wd; /* width */ 31219b2ee8SDavid du Colombier long vr; /* resolution */ 32219b2ee8SDavid du Colombier long ln; /* page size (length) */ 33219b2ee8SDavid du Colombier long df; /* huffman encoding */ 34219b2ee8SDavid du Colombier } Modem; 35219b2ee8SDavid du Colombier 36219b2ee8SDavid du Colombier enum { /* ResultCodes */ 37219b2ee8SDavid du Colombier Rok = 0, 38219b2ee8SDavid du Colombier Rconnect, 39219b2ee8SDavid du Colombier Rring, 40219b2ee8SDavid du Colombier Rfailure, 41219b2ee8SDavid du Colombier Rrerror, 42219b2ee8SDavid du Colombier Rcontinue, 43219b2ee8SDavid du Colombier Rhangup, 44219b2ee8SDavid du Colombier Rnoise, 45219b2ee8SDavid du Colombier }; 46219b2ee8SDavid du Colombier 47219b2ee8SDavid du Colombier enum { /* ErrorCodes */ 48219b2ee8SDavid du Colombier Eok = 0, /* no error */ 49219b2ee8SDavid du Colombier Eattn, /* can't get modem's attention */ 50219b2ee8SDavid du Colombier Enoresponse, /* no response from modem */ 51219b2ee8SDavid du Colombier Enoanswer, /* no answer from other side */ 52219b2ee8SDavid du Colombier Enofax, /* other side isn't a fax machine */ 53219b2ee8SDavid du Colombier Eincompatible, /* transmission incompatible with receiver */ 54219b2ee8SDavid du Colombier Esys, /* system call error */ 55219b2ee8SDavid du Colombier Eproto, /* fax protocol botch */ 56219b2ee8SDavid du Colombier }; 57219b2ee8SDavid du Colombier 58219b2ee8SDavid du Colombier enum { /* things that are valid */ 59219b2ee8SDavid du Colombier Vfdcs = 0x0001, /* page responses */ 60219b2ee8SDavid du Colombier Vftsi = 0x0002, 61219b2ee8SDavid du Colombier Vfpts = 0x0004, 62219b2ee8SDavid du Colombier Vfet = 0x0008, 63219b2ee8SDavid du Colombier Vfhng = 0x0010, 64219b2ee8SDavid du Colombier 65219b2ee8SDavid du Colombier Vwd = 0x4000, 66219b2ee8SDavid du Colombier Vtype = 0x8000, 67219b2ee8SDavid du Colombier }; 68219b2ee8SDavid du Colombier 69219b2ee8SDavid du Colombier /* fax2modem.c */ 70219b2ee8SDavid du Colombier extern int initfaxmodem(Modem*); 71219b2ee8SDavid du Colombier extern int fcon(Modem*); 72219b2ee8SDavid du Colombier extern int ftsi(Modem*); 73219b2ee8SDavid du Colombier extern int fdcs(Modem*); 74219b2ee8SDavid du Colombier extern int fcfr(Modem*); 75219b2ee8SDavid du Colombier extern int fpts(Modem*); 76219b2ee8SDavid du Colombier extern int fet(Modem*); 77219b2ee8SDavid du Colombier extern int fhng(Modem*); 78219b2ee8SDavid du Colombier 79219b2ee8SDavid du Colombier /* fax2receive.c */ 80219b2ee8SDavid du Colombier extern int faxreceive(Modem*, char*); 81219b2ee8SDavid du Colombier 82219b2ee8SDavid du Colombier /* fax2send.c */ 83219b2ee8SDavid du Colombier extern int faxsend(Modem*, int, char*[]); 84219b2ee8SDavid du Colombier 85219b2ee8SDavid du Colombier /* modem.c */ 86219b2ee8SDavid du Colombier extern int setflow(Modem*, int); 87219b2ee8SDavid du Colombier extern int setspeed(Modem*, int); 88219b2ee8SDavid du Colombier extern int rawmchar(Modem*, char*); 89*7dd7cddfSDavid du Colombier extern int getmchar(Modem*, char*, long); 90219b2ee8SDavid du Colombier extern int putmchar(Modem*, char*); 91219b2ee8SDavid du Colombier extern int command(Modem*, char*); 92219b2ee8SDavid du Colombier extern int response(Modem*, int); 93219b2ee8SDavid du Colombier extern void initmodem(Modem*, int, int, char*, char*); 94219b2ee8SDavid du Colombier extern void xonoff(Modem*, int); 95219b2ee8SDavid du Colombier 96219b2ee8SDavid du Colombier /* spool.c */ 97219b2ee8SDavid du Colombier extern void setpageid(char*, char*, long, int, int); 98219b2ee8SDavid du Colombier extern int createfaxfile(Modem*, char*); 99219b2ee8SDavid du Colombier extern int openfaxfile(Modem*, char*); 100219b2ee8SDavid du Colombier 101219b2ee8SDavid du Colombier /* subr.c */ 102219b2ee8SDavid du Colombier extern void verbose(char*, ...); 103219b2ee8SDavid du Colombier extern void error(char*, ...); 104219b2ee8SDavid du Colombier extern int seterror(Modem*, int); 105219b2ee8SDavid du Colombier extern void faxrlog(Modem*, int); 106219b2ee8SDavid du Colombier extern void faxxlog(Modem*, int); 107219b2ee8SDavid du Colombier extern int vflag; 108