home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Between Heaven & Hell 2
/
BetweenHeavenHell.cdr
/
500
/
470
/
rccl068
< prev
next >
Wrap
Text File
|
1987-03-02
|
2KB
|
138 lines
#include <signal.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/drc.h>
#include "../h/u.h"
#define NWRD 16
#define NWWR 20
#define YES 1
#define NO 0
int onlsi1(), onlsi2();
unsigned short wbuffer[NWWR+1];
unsigned short rbuffer[NWRD];
struct drcROBOT drcROBOT = {
(caddr_t) wbuffer, /* this write buffer, first word is byte cnt */
(caddr_t) rbuffer, /* this is read buffer */
NWRD * 2, /* # of bytes to read */
onlsi1,
onlsi2
};
int DONE = 0;
int enough = 0;
int fd, count, exch1 = 0, exch2 = 0;
int delay;
main()
{
extern onbreak(), onhung();
register count;
signal(SIGINT, onbreak);
signal(SIGHUP, onhung);
for(count = 0; count < NWWR; ++count)
wbuffer[count + 1] = NWWR;
wbuffer[0] = NWWR * 2;
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);
}
delay /= 2; /* one for each */
printf("enter delay ");
scanf("%d", &delay);
printf("end ?");
QUERY(count);
enough = 1;
nap(10);
close(fd);
printf("spin %d exch1 %d exch2 %d\n",delay, exch1, exch2);
for (count = 0; count < NWRD; ++count) {
printf(" %d", rbuffer[count]);
}
printf("\nprogram finished DONE = %d\n",DONE);
}
onlsi1()
{
register i;
int spin;
static int inserf = NO;
if (inserf) {
DONE = -1;
return;
}
inserf = YES;
if (enough) {
DONE = 1;
wbuffer[1] = 0;
return;
}
spin = delay;
while (spin--)
;
exch1++;
for (i = 0; i < NWRD; ++i)
if (rbuffer[i] != NWRD)
DONE = -3;
inserf = NO;
}
onlsi2()
{
static int inserf = NO;
int spin;
if (inserf) {
DONE = -2;
return;
}
inserf = YES;
if (DONE) {
return;
}
exch2++;
spin = delay;
while (spin--)
;
inserf = NO;
}
onbreak()
{
DONE = 1;
nap(10);
close(fd);
printf("spin %d exch1 %d exch2 %d\n",delay, exch1, exch2);
exit(3);
}
onhung()
{
DONE = 1;
nap(10);
close(fd);
printf("spin %d exch1 %d exch2 %d\n",delay, exch1, exch2);
exit(4);
}