home *** CD-ROM | disk | FTP | other *** search
/ Between Heaven & Hell 2 / BetweenHeavenHell.cdr / 500 / 470 / rccl085 < prev    next >
Text File  |  1987-03-02  |  2KB  |  148 lines

  1. /*
  2.  * RTC  Version 2.0           Author :  Vincent Hayward
  3.  *                                      School of Electrical Engineering
  4.  *                                      Purdue University
  5.  *      Dir     : rtc
  6.  *      File    : play.c
  7.  *      Remarks : Utility, plays files of encoder setpoints as long as wanted.
  8.  *      Usage   : make play
  9.  */
  10.  
  11. #include <stdio.h>
  12. #include "../h/rtc.h"
  13. #include "../h/umac.h"
  14.  
  15. #define MAX     2000            /* 1 mn at tick 4 */
  16.  
  17.  
  18. extern struct chg chg;
  19.  
  20. short pts[MAX * 7];
  21.  
  22. int     check();
  23. int     play();
  24. short   *idx = pts;
  25. int     nbp;
  26. int     enough = NO;
  27.  
  28. main(argc, argv)
  29. int argc;
  30. char **argv;
  31. {
  32.     extern int terminate;
  33.     int fi = -1;
  34.     int q, rate = 2;
  35.  
  36.     switch (argc) {
  37.     case 1 :
  38.         fi = 0;
  39.         break;
  40.     case 2 :
  41.         fi = open(*(argv+1), 0);
  42.         if (fi < 0) {
  43.             printf("can't open input file\n");
  44.             exit(1);
  45.         }
  46.         break;
  47.     default :
  48.         printf("bad arg\n");
  49.         exit(2);
  50.         break;
  51.     }
  52.     nbp = read(fi, pts, MAX * 14);
  53.     if (nbp == MAX * 14) {
  54.         printf("file too big\n");
  55.         exit(3);
  56.     }
  57.     if (nbp % 7) {
  58.         printf("invalid file\n");
  59.         exit(4);
  60.     }
  61.     nbp /= 14;
  62.  
  63.     printf("%d points\n",nbp);
  64.  
  65.     control(check, play);
  66.     while (!enough) {
  67.         printf(" more ? ");
  68.         QUERY(q);
  69.         if (q == 'n') {
  70.             enough = YES;
  71.             break;
  72.         }
  73.         dsprate(rate);
  74.         printf(" slower ? ");
  75.         QUERY(q);
  76.         if (q == 'y') {
  77.             if (rate < 4) {
  78.                 ++rate;
  79.                 chg.g_rate.valg = rate;
  80.                 chg.g_rate.set = YES;
  81.             }
  82.         }
  83.         dsprate(rate);
  84.         printf(" faster ? ");
  85.         QUERY(q);
  86.         if (q == 'y') {
  87.             if (rate > 2) {
  88.                 --rate;
  89.                 chg.g_rate.valg = rate;
  90.                 chg.g_rate.set = YES;
  91.             }
  92.         }
  93.     }
  94.     while (!terminate) {
  95.         nap(10);
  96.     }
  97.     release("ok\n");
  98. }
  99.  
  100.  
  101. dsprate(r)
  102. int r;
  103. {
  104.     switch (r) {
  105.     case 2:
  106.         printf(" normal speed");
  107.         break;
  108.  
  109.     case 3:
  110.         printf(" half speed ");
  111.         break;
  112.  
  113.     case 4:
  114.         printf(" quater speed ");
  115.         break;
  116.     }
  117. }
  118.  
  119.  
  120. check()
  121. {
  122. }
  123.  
  124.  
  125. play()
  126. {
  127.     static int count = 0;
  128.     register int i;
  129.     short shdi;
  130.  
  131.     if (count == 0) {
  132.         if (enough) {
  133.             terminate = YES;
  134.             return;
  135.         }
  136.         idx = pts;
  137.         count = nbp;
  138.     }
  139.     --count;
  140.     for (i = 0; i < NJOINTS; ++i) {
  141.         chg.a_motion.vala[i] = *idx++;
  142.     }
  143.     chg.a_motion.set = POS;
  144.     shdi = (*idx++) >> 4;
  145.     chg.g_hand.set = YES;
  146.     chg.g_hand.valg = shdi;
  147. }
  148.