/*
 * test program for the very beginnings  (brother lsi1shot.c)
 */

#include <signal.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/drc.h>
#include "../h/fifoio.h"

#define NW      32
#define YES     1
#define NO      0

int     onlsi1(), onlsi2();

struct fifobuf wbuffer, rbuffer;

struct drcROBOT drcROBOT  = {
	(caddr_t) &wbuffer, /* this write buffer */
	(caddr_t) &rbuffer, /* this is read buffer */
	onlsi1,
	onlsi2
};

int fd, exch1, exch2;

main(argc,argv)
char **argv;
{
	extern onbreak(), onhung();
	register count;

	signal(SIGINT, onbreak);
	signal(SIGHUP, onhung);

	if ((fd = open("/dev/drc0", 2)) < 0) {
		printf("Can't open /dev/drc0 for write\n");
		exit(1);
	}
	if ((count=write(fd, &drcROBOT, sizeof (struct drcROBOT)))
	     != sizeof (struct drcROBOT)) {
		printf("write error initing drcROBOT, count:%d\n", count);
		exit(9);
	}
	printf("send to lsi :\n");
	for(count = 0; count < NW; ++count) {
		wbuffer.data[count] = 052525;
		rbuffer.data[count] = 0;
		printf(" %o", wbuffer.data[count] & 0xffff);
	}
	wbuffer.wc = NW;

	printf("wait for interrupt\n");
	while (exch1 == 0) {
		nap(5);
	}
	close(fd);
	printf("exch1 %d exch2 %d\n", exch1, exch2);
	printf("wc = %d, got from lsi :\n", rbuffer.wc);
	for (count = 0; count < NW; ++count) {
		printf(" %o", rbuffer.data[count] & 0xffff);
	}
}


onlsi1()
{
	exch1++;
}


onlsi2()
{
	exch2++;
}



onbreak()
{
	close(fd);
	printf("exch1 %d exch2 %d\n", exch1, exch2);
	printf("program broken\n");
	exit(3);
}



onhung()
{
	close(fd);
	printf("exch1 %d exch2 %d\n", exch1, exch2);
	printf("program hung\n");
	exit(4);
}
