xref: /plan9/sys/src/cmd/fax/subr.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1219b2ee8SDavid du Colombier #include <u.h>
2219b2ee8SDavid du Colombier #include <libc.h>
3219b2ee8SDavid du Colombier #include <bio.h>
4219b2ee8SDavid du Colombier 
5219b2ee8SDavid du Colombier #include "modem.h"
6219b2ee8SDavid du Colombier 
7219b2ee8SDavid du Colombier int vflag;
8219b2ee8SDavid du Colombier 
9219b2ee8SDavid du Colombier void
verbose(char * fmt,...)107dd7cddfSDavid du Colombier verbose(char *fmt, ...)
11219b2ee8SDavid du Colombier {
127dd7cddfSDavid du Colombier 	va_list arg;
13219b2ee8SDavid du Colombier 	char buf[512];
14219b2ee8SDavid du Colombier 
15219b2ee8SDavid du Colombier 	if(vflag){
167dd7cddfSDavid du Colombier 		va_start(arg, fmt);
17*9a747e4fSDavid du Colombier 		vseprint(buf, buf+sizeof(buf), fmt, arg);
187dd7cddfSDavid du Colombier 		va_end(arg);
19219b2ee8SDavid du Colombier 		syslog(0, "fax", buf);
20219b2ee8SDavid du Colombier 	}
21219b2ee8SDavid du Colombier }
22219b2ee8SDavid du Colombier 
23219b2ee8SDavid du Colombier void
error(char * fmt,...)247dd7cddfSDavid du Colombier error(char *fmt, ...)
25219b2ee8SDavid du Colombier {
267dd7cddfSDavid du Colombier 	va_list arg;
27219b2ee8SDavid du Colombier 	char buf[512];
28219b2ee8SDavid du Colombier 	int n;
29219b2ee8SDavid du Colombier 
30219b2ee8SDavid du Colombier 	n = sprint(buf, "%s: ", argv0);
317dd7cddfSDavid du Colombier 	va_start(arg, fmt);
32*9a747e4fSDavid du Colombier 	vseprint(buf+n, buf+sizeof(buf)-n, fmt, arg);
337dd7cddfSDavid du Colombier 	va_end(arg);
34219b2ee8SDavid du Colombier 	fprint(2, buf);
35219b2ee8SDavid du Colombier 	if(vflag)
36219b2ee8SDavid du Colombier 		print(buf+n);
37219b2ee8SDavid du Colombier 	exits("error");
38219b2ee8SDavid du Colombier }
39219b2ee8SDavid du Colombier 
40219b2ee8SDavid du Colombier static char *errors[] = {
41219b2ee8SDavid du Colombier 	[Eok]		"no error",
42219b2ee8SDavid du Colombier 	[Eattn]		"can't get modem's attention",
43219b2ee8SDavid du Colombier 	[Enoanswer]	"Retry, no answer or busy",
44219b2ee8SDavid du Colombier 	[Enoresponse]	"Retry, no response from modem",
45219b2ee8SDavid du Colombier 	[Eincompatible]	"Retry, incompatible",
46219b2ee8SDavid du Colombier 	[Esys]		"Retry, system call error",
47219b2ee8SDavid du Colombier 	[Eproto]	"Retry, fax protocol botch",
48219b2ee8SDavid du Colombier };
49219b2ee8SDavid du Colombier 
50219b2ee8SDavid du Colombier int
seterror(Modem * m,int error)51219b2ee8SDavid du Colombier seterror(Modem *m, int error)
52219b2ee8SDavid du Colombier {
53219b2ee8SDavid du Colombier 	if(error == Esys)
54219b2ee8SDavid du Colombier 		sprint(m->error, "%s: %r", errors[Esys]);
55219b2ee8SDavid du Colombier 	else
56219b2ee8SDavid du Colombier 		strcpy(m->error, errors[error]);
57219b2ee8SDavid du Colombier 	verbose("seterror: %s", m->error);
58219b2ee8SDavid du Colombier 	return error;
59219b2ee8SDavid du Colombier }
60219b2ee8SDavid du Colombier 
61219b2ee8SDavid du Colombier void
faxrlog(Modem * m,int ok)62219b2ee8SDavid du Colombier faxrlog(Modem *m, int ok)
63219b2ee8SDavid du Colombier {
64219b2ee8SDavid du Colombier 	char buf[1024];
65219b2ee8SDavid du Colombier 	int n;
66219b2ee8SDavid du Colombier 
67219b2ee8SDavid du Colombier 	n = sprint(buf, "receive %lud %c %d", m->time, ok == Eok ? 'Y': 'N', m->pageno-1);
68219b2ee8SDavid du Colombier 	if(ok == Eok && (m->valid & Vftsi))
69219b2ee8SDavid du Colombier 		sprint(buf+n, " %s", m->ftsi);
70219b2ee8SDavid du Colombier 	syslog(0, "fax", buf);
71219b2ee8SDavid du Colombier }
72