Пример #1
0
int find_key(char *key, int sockfd, char *buf, int size)
{
  int i;
  char keyC[KEY_LEN];
  char *key_p = key;
  char *keyC_p = keyC;
  char gfb;

  for(i = 0; *(key + i) != '\0' && i < KEY_LEN; i++) {
    keyC[i] = toupper(*(key + i));
  }
  keyC[i] = '\0';

  while (1) {
    if (!(gfb = get_from_buffer(sockfd, buf, size))) {
      return 1; // すべて読み込み終了
    }
    if (gfb == *key_p || gfb == *keyC_p) {
      key_p += 1;
      keyC_p += 1;
      if (*key_p == '\0') {
        return 0;
      }
    }
    else {
      key_p = key;
      keyC_p = keyC;
    }
  }
  return 0;
}
Пример #2
0
sample_t
simple_mean_filter (parampointer_t parampointer)
{
  longsample_t sum;
  sample_t sample;
  long i;

  advance_current_pos (&parampointer->buffer, parampointer->filterno);

  sum.left = 0;
  sum.right = 0;

  for (i = 0; i <= parampointer->postlength1 + parampointer->prelength1;
       i++)
    {
      sample = get_from_buffer (&parampointer->buffer,
				i - parampointer->postlength1);
      sum.left += sample.left;
      sum.right += sample.right;
    }

  sample.left = sum.left / (parampointer->postlength1 +
			    parampointer->prelength1 + 1);
  sample.right = sum.right / (parampointer->postlength1 +
			      parampointer->prelength1 + 1);

  return sample;
}
Пример #3
0
sample_t
experiment_filter (parampointer_t parampointer)
{
  sample_t sample;
  longsample_t longsample;
/* doublesample_t doublesample; */

  advance_current_pos (&parampointer->buffer, parampointer->filterno);

/* Example: a smoothing filter (lowpass, that is):

   y[t] = { x[t-2] + 5*x[t-1] + 13*x[t] + 5*x[t+1] + x[t+2] } / 25
 */

  /* zero totals */
  longsample.left = 0;
  longsample.right = 0;

  /* compute the weighted sum */
  sample = get_from_buffer (&parampointer->buffer, -2);
  longsample.left += sample.left;
  longsample.right += sample.right;

  sample = get_from_buffer (&parampointer->buffer, -1);
  longsample.left += 5 * sample.left;
  longsample.right += 5 * sample.right;

  sample = get_from_buffer (&parampointer->buffer, 0);
  longsample.left += 13 * sample.left;
  longsample.right += 13 * sample.right;

  sample = get_from_buffer (&parampointer->buffer, 1);
  longsample.left += 5 * sample.left;
  longsample.right += 5 * sample.right;

  sample = get_from_buffer (&parampointer->buffer, 2);
  longsample.left += sample.left;
  longsample.right += sample.right;

  /* devide by the total weight */
  sample.left = longsample.left / 25;
  sample.right = longsample.right / 25;

  /* return the computed sample */
  return sample;
}
Пример #4
0
int get_title(struct alist *parent, int sockfd, char *buf, int size)
{
  char gfb;
  char *pt = parent->self->title;
  bool start_flag = false;
  while (1) {
    if (!(gfb = get_from_buffer(sockfd, buf, size))) {
      return 1; // すべて読み込み終了
    }

    if (!start_flag) {
      if (gfb == '>') {
        start_flag = true;
      }
      continue;
    }

    if (gfb != '<') {
      if (pt != &(parent->self->title[sizeof(parent->self->title)-1])) {
        *pt = gfb;
        pt += 1;
      }
      else {
        *(pt-4) = '.';
        *(pt-3) = '.';
        *(pt-2) = '.';
        return 0;
      }
    }
    else {
      if (!(gfb = get_from_buffer(sockfd, buf, size))) {
        return 1; // すべて読み込み終了
      }

      if (gfb == '/') {
        *pt = '\0';
        return 0;
      }
      else {
        *pt = '<';
        pt += 1;
      }
    }
  }
}
Пример #5
0
int get_anchor(struct alist *parent, int sockfd, char *buf, int size)
{
  char pare = get_from_buffer(sockfd, buf, size);
  char gfb = get_from_buffer(sockfd, buf, size);
  if (!pare || !gfb) {
    return 1;
  }
  if (gfb != '.' && gfb != '/' && gfb != '#' && gfb == 'h') {
    printf("└\"");
    while (gfb != pare && gfb != ' ' && gfb != '<') {
      printf("%c", gfb);
      gfb = get_from_buffer(sockfd, buf, size);
      if (!gfb) {
        return 1;
      }
    }
    puts("\"");
  }
  return 0;
}
Пример #6
0
sample_t
monoize_filter (parampointer_t parampointer)
{
  sample_t sample;
  longsample_t sum;

  advance_current_pos (&parampointer->buffer, parampointer->filterno);

  sample = get_from_buffer (&parampointer->buffer, 0);
  sum.left = (sample.left + sample.right) / 2;
  sample.left = sum.left;
  sample.right = sum.left;

  return sample;
}
Пример #7
0
static 
PT_THREAD(consumer(struct pt *pt))
{
  static int consumed;
  
  PT_BEGIN(pt);
 
  for(consumed = 0; consumed < NUM_ITEMS; ++consumed) {
    
    PT_SEM_WAIT(pt, &empty);
    
    consume_item(get_from_buffer());    
    
    PT_SEM_SIGNAL(pt, &full);
  }
 
  PT_END(pt);
}