ref: ca8ca008f4ab7074971a35e08de9a46cb9b5d5ab
dir: /sys/src/cmd/fax/subr.c/
#include <u.h> #include <libc.h> #include <bio.h> #include "modem.h" int vflag; void verbose(char *fmt, ...) { va_list arg; char buf[512]; if(vflag){ va_start(arg, fmt); vseprint(buf, buf+sizeof(buf), fmt, arg); va_end(arg); syslog(0, "fax", buf); } } void error(char *fmt, ...) { va_list arg; char buf[512]; int n; n = sprint(buf, "%s: ", argv0); va_start(arg, fmt); vseprint(buf+n, buf+sizeof(buf)-n, fmt, arg); va_end(arg); fprint(2, buf); if(vflag) print(buf+n); exits("error"); } static char *errors[] = { [Eok] "no error", [Eattn] "can't get modem's attention", [Enoanswer] "Retry, no answer or busy", [Enoresponse] "Retry, no response from modem", [Eincompatible] "Retry, incompatible", [Esys] "Retry, system call error", [Eproto] "Retry, fax protocol botch", }; int seterror(Modem *m, int error) { if(error == Esys) sprint(m->error, "%s: %r", errors[Esys]); else strcpy(m->error, errors[error]); verbose("seterror: %s", m->error); return error; } void faxrlog(Modem *m, int ok) { char buf[1024]; int n; n = sprint(buf, "receive %lud %c %d", m->time, ok == Eok ? 'Y': 'N', m->pageno-1); if(ok == Eok && (m->valid & Vftsi)) sprint(buf+n, " %s", m->ftsi); syslog(0, "fax", buf); }