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