xref: /plan9/sys/src/cmd/fax/modem.h (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
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