xref: /plan9/sys/src/cmd/fax/fax2modem.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier #include <u.h>
2*219b2ee8SDavid du Colombier #include <libc.h>
3*219b2ee8SDavid du Colombier #include <bio.h>
4*219b2ee8SDavid du Colombier 
5*219b2ee8SDavid du Colombier #include "modem.h"
6*219b2ee8SDavid du Colombier 
7*219b2ee8SDavid du Colombier int
initfaxmodem(Modem * m)8*219b2ee8SDavid du Colombier initfaxmodem(Modem *m)
9*219b2ee8SDavid du Colombier {
10*219b2ee8SDavid du Colombier 	m->fax = 1;
11*219b2ee8SDavid du Colombier 	m->phase = 'A';
12*219b2ee8SDavid du Colombier 	m->valid = 0;
13*219b2ee8SDavid du Colombier 
14*219b2ee8SDavid du Colombier 	return Eok;
15*219b2ee8SDavid du Colombier }
16*219b2ee8SDavid du Colombier 
17*219b2ee8SDavid du Colombier static int
parameters(long a[],char * s)18*219b2ee8SDavid du Colombier parameters(long a[], char *s)
19*219b2ee8SDavid du Colombier {
20*219b2ee8SDavid du Colombier 	char *p;
21*219b2ee8SDavid du Colombier 	int i;
22*219b2ee8SDavid du Colombier 
23*219b2ee8SDavid du Colombier 	i = 0;
24*219b2ee8SDavid du Colombier 	if((p = strchr(s, ':')) == 0)
25*219b2ee8SDavid du Colombier 		return 0;
26*219b2ee8SDavid du Colombier 	p++;
27*219b2ee8SDavid du Colombier 	while(s = strchr(p, ',')){
28*219b2ee8SDavid du Colombier 		a[i++] = strtol(p, 0, 10);
29*219b2ee8SDavid du Colombier 		p = s+1;
30*219b2ee8SDavid du Colombier 	}
31*219b2ee8SDavid du Colombier 	if(p)
32*219b2ee8SDavid du Colombier 		a[i++] = strtol(p, 0, 10);
33*219b2ee8SDavid du Colombier 
34*219b2ee8SDavid du Colombier 	return i;
35*219b2ee8SDavid du Colombier }
36*219b2ee8SDavid du Colombier 
37*219b2ee8SDavid du Colombier int
fcon(Modem * m)38*219b2ee8SDavid du Colombier fcon(Modem *m)
39*219b2ee8SDavid du Colombier {
40*219b2ee8SDavid du Colombier 	verbose("fcon: %s", m->response);
41*219b2ee8SDavid du Colombier 	if(m->fax == 0 || m->phase != 'A')
42*219b2ee8SDavid du Colombier 		return Rrerror;
43*219b2ee8SDavid du Colombier 	m->phase = 'B';
44*219b2ee8SDavid du Colombier 	return Rcontinue;
45*219b2ee8SDavid du Colombier }
46*219b2ee8SDavid du Colombier 
47*219b2ee8SDavid du Colombier int
ftsi(Modem * m)48*219b2ee8SDavid du Colombier ftsi(Modem *m)
49*219b2ee8SDavid du Colombier {
50*219b2ee8SDavid du Colombier 	char *p, *q;
51*219b2ee8SDavid du Colombier 
52*219b2ee8SDavid du Colombier 	verbose("ftsi: %s", m->response);
53*219b2ee8SDavid du Colombier 	if((p = strchr(m->response, '"')) == 0 || (q = strrchr(p+1, '"')) == 0)
54*219b2ee8SDavid du Colombier 		return Rrerror;
55*219b2ee8SDavid du Colombier 	while(*++p == ' ')
56*219b2ee8SDavid du Colombier 		;
57*219b2ee8SDavid du Colombier 	*q = 0;
58*219b2ee8SDavid du Colombier 	if((m->valid &  Vftsi) == 0){
59*219b2ee8SDavid du Colombier 		strncpy(m->ftsi, p, sizeof(m->ftsi)-1);
60*219b2ee8SDavid du Colombier 		m->valid |= Vftsi;
61*219b2ee8SDavid du Colombier 	}
62*219b2ee8SDavid du Colombier 	return Rcontinue;
63*219b2ee8SDavid du Colombier }
64*219b2ee8SDavid du Colombier 
65*219b2ee8SDavid du Colombier int
fdcs(Modem * m)66*219b2ee8SDavid du Colombier fdcs(Modem *m)
67*219b2ee8SDavid du Colombier {
68*219b2ee8SDavid du Colombier 	verbose("fdcs: %s", m->response);
69*219b2ee8SDavid du Colombier 	parameters(m->fdcs, m->response);
70*219b2ee8SDavid du Colombier 	m->valid |= Vfdcs;
71*219b2ee8SDavid du Colombier 	return Rcontinue;
72*219b2ee8SDavid du Colombier }
73*219b2ee8SDavid du Colombier 
74*219b2ee8SDavid du Colombier int
fcfr(Modem * m)75*219b2ee8SDavid du Colombier fcfr(Modem *m)
76*219b2ee8SDavid du Colombier {
77*219b2ee8SDavid du Colombier 	verbose("fcfr: %s", m->response);
78*219b2ee8SDavid du Colombier 	if(m->fax == 0)
79*219b2ee8SDavid du Colombier 		return Rrerror;
80*219b2ee8SDavid du Colombier 	/* ???? */
81*219b2ee8SDavid du Colombier 	return Rcontinue;
82*219b2ee8SDavid du Colombier }
83*219b2ee8SDavid du Colombier 
84*219b2ee8SDavid du Colombier int
fpts(Modem * m)85*219b2ee8SDavid du Colombier fpts(Modem *m)
86*219b2ee8SDavid du Colombier {
87*219b2ee8SDavid du Colombier 	verbose("fpts: %s", m->response);
88*219b2ee8SDavid du Colombier 	if(m->fax == 0)
89*219b2ee8SDavid du Colombier 		return Rrerror;
90*219b2ee8SDavid du Colombier 	parameters(m->fpts, m->response);
91*219b2ee8SDavid du Colombier 	m->valid |= Vfpts;
92*219b2ee8SDavid du Colombier 	return Rcontinue;
93*219b2ee8SDavid du Colombier }
94*219b2ee8SDavid du Colombier 
95*219b2ee8SDavid du Colombier int
fet(Modem * m)96*219b2ee8SDavid du Colombier fet(Modem *m)
97*219b2ee8SDavid du Colombier {
98*219b2ee8SDavid du Colombier 	char *p;
99*219b2ee8SDavid du Colombier 
100*219b2ee8SDavid du Colombier 	verbose("fet: %s", m->response);
101*219b2ee8SDavid du Colombier 	if(m->fax == 0 || (p = strchr(m->response, ':')) == 0)
102*219b2ee8SDavid du Colombier 		return Rrerror;
103*219b2ee8SDavid du Colombier 	m->fet = strtol(p+1, 0, 10);
104*219b2ee8SDavid du Colombier 	m->valid |= Vfet;
105*219b2ee8SDavid du Colombier 	return Rcontinue;
106*219b2ee8SDavid du Colombier }
107*219b2ee8SDavid du Colombier 
108*219b2ee8SDavid du Colombier int
fhng(Modem * m)109*219b2ee8SDavid du Colombier fhng(Modem *m)
110*219b2ee8SDavid du Colombier {
111*219b2ee8SDavid du Colombier 	char *p;
112*219b2ee8SDavid du Colombier 
113*219b2ee8SDavid du Colombier 	verbose("fhng: %s", m->response);
114*219b2ee8SDavid du Colombier 	if(m->fax == 0 || (p = strchr(m->response, ':')) == 0)
115*219b2ee8SDavid du Colombier 		return Rrerror;
116*219b2ee8SDavid du Colombier 	m->fhng = strtol(p+1, 0, 10);
117*219b2ee8SDavid du Colombier 	m->valid |= Vfhng;
118*219b2ee8SDavid du Colombier 	return Rhangup;
119*219b2ee8SDavid du Colombier }
120