1 #include <u.h> 2 #include <libc.h> 3 #include <bio.h> 4 5 #include "modem.h" 6 7 int vflag; 8 9 void 10 verbose(char *fmt, ...) 11 { 12 va_list arg; 13 char buf[512]; 14 15 if(vflag){ 16 va_start(arg, fmt); 17 vseprint(buf, buf+sizeof(buf), fmt, arg); 18 va_end(arg); 19 syslog(0, "fax", buf); 20 } 21 } 22 23 void 24 error(char *fmt, ...) 25 { 26 va_list arg; 27 char buf[512]; 28 int n; 29 30 n = sprint(buf, "%s: ", argv0); 31 va_start(arg, fmt); 32 vseprint(buf+n, buf+sizeof(buf)-n, fmt, arg); 33 va_end(arg); 34 fprint(2, buf); 35 if(vflag) 36 print(buf+n); 37 exits("error"); 38 } 39 40 static char *errors[] = { 41 [Eok] "no error", 42 [Eattn] "can't get modem's attention", 43 [Enoanswer] "Retry, no answer or busy", 44 [Enoresponse] "Retry, no response from modem", 45 [Eincompatible] "Retry, incompatible", 46 [Esys] "Retry, system call error", 47 [Eproto] "Retry, fax protocol botch", 48 }; 49 50 int 51 seterror(Modem *m, int error) 52 { 53 if(error == Esys) 54 sprint(m->error, "%s: %r", errors[Esys]); 55 else 56 strcpy(m->error, errors[error]); 57 verbose("seterror: %s", m->error); 58 return error; 59 } 60 61 void 62 faxrlog(Modem *m, int ok) 63 { 64 char buf[1024]; 65 int n; 66 67 n = sprint(buf, "receive %lud %c %d", m->time, ok == Eok ? 'Y': 'N', m->pageno-1); 68 if(ok == Eok && (m->valid & Vftsi)) 69 sprint(buf+n, " %s", m->ftsi); 70 syslog(0, "fax", buf); 71 } 72