diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/fax/fax2modem.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/fax/fax2modem.c')
-rwxr-xr-x | sys/src/cmd/fax/fax2modem.c | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/sys/src/cmd/fax/fax2modem.c b/sys/src/cmd/fax/fax2modem.c new file mode 100755 index 000000000..00640ab49 --- /dev/null +++ b/sys/src/cmd/fax/fax2modem.c @@ -0,0 +1,119 @@ +#include <u.h> +#include <libc.h> +#include <bio.h> + +#include "modem.h" + +int +initfaxmodem(Modem *m) +{ + m->fax = 1; + m->phase = 'A'; + m->valid = 0; + + return Eok; +} + +static int +parameters(long a[], char *s) +{ + char *p; + int i; + + i = 0; + if((p = strchr(s, ':')) == 0) + return 0; + p++; + while(s = strchr(p, ',')){ + a[i++] = strtol(p, 0, 10); + p = s+1; + } + if(p) + a[i++] = strtol(p, 0, 10); + + return i; +} + +int +fcon(Modem *m) +{ + verbose("fcon: %s", m->response); + if(m->fax == 0 || m->phase != 'A') + return Rrerror; + m->phase = 'B'; + return Rcontinue; +} + +int +ftsi(Modem *m) +{ + char *p, *q; + + verbose("ftsi: %s", m->response); + if((p = strchr(m->response, '"')) == 0 || (q = strrchr(p+1, '"')) == 0) + return Rrerror; + while(*++p == ' ') + ; + *q = 0; + if((m->valid & Vftsi) == 0){ + strncpy(m->ftsi, p, sizeof(m->ftsi)-1); + m->valid |= Vftsi; + } + return Rcontinue; +} + +int +fdcs(Modem *m) +{ + verbose("fdcs: %s", m->response); + parameters(m->fdcs, m->response); + m->valid |= Vfdcs; + return Rcontinue; +} + +int +fcfr(Modem *m) +{ + verbose("fcfr: %s", m->response); + if(m->fax == 0) + return Rrerror; + /* ???? */ + return Rcontinue; +} + +int +fpts(Modem *m) +{ + verbose("fpts: %s", m->response); + if(m->fax == 0) + return Rrerror; + parameters(m->fpts, m->response); + m->valid |= Vfpts; + return Rcontinue; +} + +int +fet(Modem *m) +{ + char *p; + + verbose("fet: %s", m->response); + if(m->fax == 0 || (p = strchr(m->response, ':')) == 0) + return Rrerror; + m->fet = strtol(p+1, 0, 10); + m->valid |= Vfet; + return Rcontinue; +} + +int +fhng(Modem *m) +{ + char *p; + + verbose("fhng: %s", m->response); + if(m->fax == 0 || (p = strchr(m->response, ':')) == 0) + return Rrerror; + m->fhng = strtol(p+1, 0, 10); + m->valid |= Vfhng; + return Rhangup; +} |