home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Between Heaven & Hell 2
/
BetweenHeavenHell.cdr
/
500
/
470
/
rccl085
< prev
next >
Wrap
Text File
|
1987-03-02
|
2KB
|
148 lines
/*
* RTC Version 2.0 Author : Vincent Hayward
* School of Electrical Engineering
* Purdue University
* Dir : rtc
* File : play.c
* Remarks : Utility, plays files of encoder setpoints as long as wanted.
* Usage : make play
*/
#include <stdio.h>
#include "../h/rtc.h"
#include "../h/umac.h"
#define MAX 2000 /* 1 mn at tick 4 */
extern struct chg chg;
short pts[MAX * 7];
int check();
int play();
short *idx = pts;
int nbp;
int enough = NO;
main(argc, argv)
int argc;
char **argv;
{
extern int terminate;
int fi = -1;
int q, rate = 2;
switch (argc) {
case 1 :
fi = 0;
break;
case 2 :
fi = open(*(argv+1), 0);
if (fi < 0) {
printf("can't open input file\n");
exit(1);
}
break;
default :
printf("bad arg\n");
exit(2);
break;
}
nbp = read(fi, pts, MAX * 14);
if (nbp == MAX * 14) {
printf("file too big\n");
exit(3);
}
if (nbp % 7) {
printf("invalid file\n");
exit(4);
}
nbp /= 14;
printf("%d points\n",nbp);
control(check, play);
while (!enough) {
printf(" more ? ");
QUERY(q);
if (q == 'n') {
enough = YES;
break;
}
dsprate(rate);
printf(" slower ? ");
QUERY(q);
if (q == 'y') {
if (rate < 4) {
++rate;
chg.g_rate.valg = rate;
chg.g_rate.set = YES;
}
}
dsprate(rate);
printf(" faster ? ");
QUERY(q);
if (q == 'y') {
if (rate > 2) {
--rate;
chg.g_rate.valg = rate;
chg.g_rate.set = YES;
}
}
}
while (!terminate) {
nap(10);
}
release("ok\n");
}
dsprate(r)
int r;
{
switch (r) {
case 2:
printf(" normal speed");
break;
case 3:
printf(" half speed ");
break;
case 4:
printf(" quater speed ");
break;
}
}
check()
{
}
play()
{
static int count = 0;
register int i;
short shdi;
if (count == 0) {
if (enough) {
terminate = YES;
return;
}
idx = pts;
count = nbp;
}
--count;
for (i = 0; i < NJOINTS; ++i) {
chg.a_motion.vala[i] = *idx++;
}
chg.a_motion.set = POS;
shdi = (*idx++) >> 4;
chg.g_hand.set = YES;
chg.g_hand.valg = shdi;
}