home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume27 / distributed-c-2.1 / part01 / examples / buffer / chris.txt < prev    next >
Encoding:
Text File  |  1993-12-22  |  1.4 KB  |  126 lines

  1. # 1 "buffer.dc"
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29. process spec buffer(int max)  
  30. {
  31.      
  32.     trans void put(char c); 
  33.  
  34.      
  35.     trans char get();
  36. }  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46. process body buffer(max)
  47. {
  48.     int   n   = 0, 
  49.           in  = 0, 
  50.           out = 0;
  51.     char *buf;
  52.  
  53.     buf = (char *) malloc(max + 1);
  54.  
  55.     memset(buf, '\0', max + 1);
  56.  
  57.     while(1) {
  58.         select {
  59.         (n < max):
  60.             accept put(c) { 
  61.             buf[in] = c; 
  62.         }
  63.             n++;
  64.             in = (in + 1) % max;
  65.     or (n > 0):
  66.             accept get() { 
  67.             treturn(buf[out]); 
  68.         }
  69.             n--;
  70.             out = (out + 1) % max;
  71.     or
  72.         terminate
  73.         }  
  74.     }  
  75. }  
  76.         
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84. main()
  85. {
  86.     int     size, op, erg;
  87.     char    c, tmp, bufferhost[256];
  88.     process buffer b;
  89.  
  90.      
  91.     puts("This program simulates a FIFO buffer:");
  92.  
  93.      
  94.     printf("buffer size? ");
  95.     scanf("%d%c", &size, &tmp);
  96.  
  97.     printf("location to create buffer? ");
  98.     scanf("%s", bufferhost);
  99.      
  100.     b = create buffer(size) at host(bufferhost);
  101.  
  102.      
  103.     while(1) {
  104.     printf("\nOperation (0 = end, 1 = put, 2 = get) ? ");
  105.     scanf("%d%c", &op, &tmp);
  106.     switch(op) {
  107.     case 0:
  108.          
  109.         exit(0);
  110.          
  111.     case 1:
  112.         printf("character to put into buffer? ");
  113.         scanf("%c%c", &c, &tmp);
  114.         within 5 ? (b@put(c) : puts("buffer is full!"));
  115.         break;
  116.     case 2:
  117.         erg = within 5 ? (b@get() : -1);
  118.         if (erg == -1)
  119.             puts("buffer is empty!");
  120.         else
  121.             printf("result = %c\n", erg);
  122.         break;
  123.     }
  124.     }  
  125. }  
  126.