shithub: riscv

ref: b0377e84cf31c48afed765c433abe7eebb4135a5
dir: /sys/src/cmd/fax/subr.c/

View raw version
#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);
}