1 typedef struct { 2 char *t; 3 int fd; 4 int cfd; 5 char *id; 6 char response[128]; 7 char error[128]; 8 9 int fax; 10 char phase; 11 char ftsi[128]; /* remote ID */ 12 long fdcs[8]; /* frame information */ 13 long fpts[8]; /* page reception response */ 14 long fet; /* post page message */ 15 long fhng; /* call termination status */ 16 int pageno; /* current page number */ 17 char pageid[128]; /* current page file */ 18 int pagefd; /* current page fd */ 19 int valid; /* valid page responses */ 20 long time; /* timestamp */ 21 int pid; 22 23 char ibuf[1024]; /* modem input buffering */ 24 char *iptr; 25 long icount; 26 27 Biobuf *bp; /* file input buffering */ 28 29 /* FDCS parameters */ 30 long wd; /* width */ 31 long vr; /* resolution */ 32 long ln; /* page size (length) */ 33 long df; /* huffman encoding */ 34 } Modem; 35 36 enum { /* ResultCodes */ 37 Rok = 0, 38 Rconnect, 39 Rring, 40 Rfailure, 41 Rrerror, 42 Rcontinue, 43 Rhangup, 44 Rnoise, 45 }; 46 47 enum { /* ErrorCodes */ 48 Eok = 0, /* no error */ 49 Eattn, /* can't get modem's attention */ 50 Enoresponse, /* no response from modem */ 51 Enoanswer, /* no answer from other side */ 52 Enofax, /* other side isn't a fax machine */ 53 Eincompatible, /* transmission incompatible with receiver */ 54 Esys, /* system call error */ 55 Eproto, /* fax protocol botch */ 56 }; 57 58 enum { /* things that are valid */ 59 Vfdcs = 0x0001, /* page responses */ 60 Vftsi = 0x0002, 61 Vfpts = 0x0004, 62 Vfet = 0x0008, 63 Vfhng = 0x0010, 64 65 Vwd = 0x4000, 66 Vtype = 0x8000, 67 }; 68 69 /* fax2modem.c */ 70 extern int initfaxmodem(Modem*); 71 extern int fcon(Modem*); 72 extern int ftsi(Modem*); 73 extern int fdcs(Modem*); 74 extern int fcfr(Modem*); 75 extern int fpts(Modem*); 76 extern int fet(Modem*); 77 extern int fhng(Modem*); 78 79 /* fax2receive.c */ 80 extern int faxreceive(Modem*, char*); 81 82 /* fax2send.c */ 83 extern int faxsend(Modem*, int, char*[]); 84 85 /* modem.c */ 86 extern int setflow(Modem*, int); 87 extern int setspeed(Modem*, int); 88 extern int rawmchar(Modem*, char*); 89 extern int getmchar(Modem*, char*, long); 90 extern int putmchar(Modem*, char*); 91 extern int command(Modem*, char*); 92 extern int response(Modem*, int); 93 extern void initmodem(Modem*, int, int, char*, char*); 94 extern void xonoff(Modem*, int); 95 96 /* spool.c */ 97 extern void setpageid(char*, char*, long, int, int); 98 extern int createfaxfile(Modem*, char*); 99 extern int openfaxfile(Modem*, char*); 100 101 /* subr.c */ 102 extern void verbose(char*, ...); 103 extern void error(char*, ...); 104 extern int seterror(Modem*, int); 105 extern void faxrlog(Modem*, int); 106 extern void faxxlog(Modem*, int); 107 extern int vflag; 108