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