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

  1. /*
  2.  * MAC  Version 2.0           Author :  Vincent Hayward
  3.  *                                      School of Electrical Engineering
  4.  *                                      Purdue University
  5.  *      Dir     : sys
  6.  *      File    : lsitst.c
  7.  *      Remarks : fifo test program
  8.  *      Usage   : cc vaxtst.c ; use with lsitst
  9.  */
  10.  
  11. #include <signal.h>
  12. #include <sys/types.h>
  13. #include <stdio.h>
  14. #include <sys/drc.h>
  15. #include "../h/fifoio.h"
  16. #include "../h/umac.h"
  17.  
  18. #define YES     1
  19. #define NO      0
  20.  
  21. int     onlsi1(), onlsi2();
  22.  
  23. struct fifobuf wbuffer, rbuffer;
  24.  
  25. struct drcROBOT drcROBOT  = {
  26.     (caddr_t) &wbuffer,  /* this write buffer */
  27.     (caddr_t) &rbuffer,  /* this is read buffer */
  28.     onlsi1,
  29.     onlsi2
  30. };
  31.  
  32. int DONE = 0;
  33. int enough = 0;
  34. int fd, exch1 = 0, exch2 = 0;
  35. int delay1, delay2;
  36.  
  37. main()
  38. {
  39.     extern onbreak(), onhung();
  40.     register count;
  41.  
  42.     signal(SIGINT, onbreak);
  43.     signal(SIGHUP, onhung);
  44.  
  45.     for(count = 0; count < FIFOBUFS; ++count)
  46.         wbuffer.data[count] = OD;
  47.     wbuffer.wc = FIFOBUFS;
  48.  
  49.     if ((fd = open("/dev/drc0", 2)) < 0) {
  50.         printf("Can't open /dev/drc0 for write\n");
  51.         exit(1);
  52.     }
  53.     if ((count=write(fd, &drcROBOT, sizeof (struct drcROBOT)))
  54.          != sizeof (struct drcROBOT)) {
  55.         printf("write error initing drcROBOT, count:%d\n", count);
  56.         exit(9);
  57.     }
  58.  
  59.     printf("enter delay1 delay2 ");
  60.     scanf("%d%d", &delay1, &delay2);
  61.  
  62.     printf("end ?");
  63.     QUERY(count);
  64.     enough = 1;
  65.  
  66.     while (!DONE)
  67.         nap(10);
  68.     close(fd);
  69.  
  70.     printf("wc %d exch1 %d exch2 %d\n",rbuffer.wc, exch1, exch2);
  71.     for (count = 0; count < FIFOBUFS; ++count) {
  72.         printf("%o ", rbuffer.data[count] & 0xffff);
  73.     }
  74.     printf("\nprogram finished DONE = %d , time spend in f1 %f f2 %f\n",
  75.         DONE, 3.88 * (double)delay1, 3.88 * (double)delay2);
  76. }
  77.  
  78.  
  79. onlsi1()
  80. {
  81.     register i;
  82.     int spin;
  83.     static int inserf = NO;
  84.  
  85.     if (inserf) {
  86.         DONE = -1;
  87.         return;
  88.     }
  89.     inserf = YES;
  90.     if (DONE) {
  91.         inserf = NO;
  92.         return;
  93.     }
  94.     if (enough) {
  95.         wbuffer.data[0] = 0;
  96.         DONE = 1;
  97.         inserf = NO;
  98.         return;
  99.     }
  100.     for (i = 0; i < FIFOBUFS; ++i) {
  101.         if (rbuffer.data[i] != (short)ID) {
  102.             wbuffer.data[0] = 0;
  103.             DONE = -3;
  104.         }
  105.     }
  106.     spin = delay1;
  107.     while (spin--)
  108.         ;
  109.     exch1++;
  110.     inserf = NO;
  111. }
  112.  
  113.  
  114. onlsi2()
  115. {
  116.     static int inserf = NO;
  117.     int spin;
  118.  
  119.     if (inserf) {
  120.         DONE = -2;
  121.         return;
  122.     }
  123.     inserf = YES;
  124.     if (DONE) {
  125.         inserf = NO;
  126.         return;
  127.     }
  128.     spin = delay2;
  129.     while (spin--)
  130.         ;
  131.     exch2++;
  132.     inserf = NO;
  133. }
  134.  
  135.  
  136.  
  137. onbreak()
  138. {
  139.     DONE = 1;
  140.     nap(10);
  141.     close(fd);
  142.     printf("exch1 %d exch2 %d\n",exch1, exch2);
  143.     exit(3);
  144. }
  145.  
  146.  
  147.  
  148. onhung()
  149. {
  150.     DONE = 1;
  151.     nap(10);
  152.     close(fd);
  153.     printf("exch1 %d exch2 %d\n", exch1, exch2);
  154.     exit(4);
  155. }
  156.