xref: /plan9/sys/src/cmd/fax/subr.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 
5 #include "modem.h"
6 
7 int vflag;
8 
9 void
verbose(char * fmt,...)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
error(char * fmt,...)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
seterror(Modem * m,int error)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
faxrlog(Modem * m,int ok)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