Ejemplo n.º 1
0
static struct gd_val *list_read(FILE *i, FILE *o, int *n)
{
    struct gd_val *l = NULL;
    *n = 0;

    fprintf(o, "OK ready to receive list\n");

    for (;;) {
        char *p = line_read(i);

        if (p == NULL || strcmp(p, ".") == 0) {
            free(p);
            break;
        }

        if (p[0] == '>') {
            char *t = strdup(p + 1);
            free(p);
            p = t;
        }

        l = gd_val_append(l, p, NULL);
        (*n)++;
    }

    return l;
}
Ejemplo n.º 2
0
Archivo: ui.c Proyecto: barak/gtkboard
void ui_check_who_won()
{
	char *line, *who_str = NULL;
	int who, len;
	if (!move_fout)
		return;
	fprintf (move_fout, "WHO_WON \n");
	fflush (move_fout);
	line = line_read(move_fin);
	if (g_strncasecmp(line, "ACK", 3))
	{
		// NAK ==> not implemented
		ui_gameover = FALSE;
		sb_set_score ("");
		return;
	}
	line += 4;
	line = g_strstrip(line);
	who_str = line;
	while(!isspace(*line) && *line) line++;
	while(isspace(*line)) line++;
	sb_set_score (line);
	if (!g_strncasecmp(who_str, "NYET", 4))
	{
		ui_gameover = FALSE;
		return;
	}
	ui_stopped = TRUE;
	ui_gameover = TRUE;
	if (opt_logfile)
		fprintf(opt_logfile, "RESULT: %s\n", who_str);
	if (!state_gui_active)
		ui_cleanup();
	sb_update ();
	if (game_single_player && !ui_cheated && !g_strncasecmp(who_str, "WON", 3))
	{
		gboolean retval;
		retval = prefs_add_highscore (line, sb_get_human_time ());
		if (retval)
			sound_play (SOUND_HIGHSCORE);
		else 
			sound_play (SOUND_WON);
		if (game_levels)
		{
			GameLevel *next_level = game_levels;
			while (next_level->name)
			{
				if (next_level->game == opt_game)
					break;
				next_level++;
			}
			next_level++;
			if (next_level->name)
				menu_put_level (next_level->name);
		}
	}
	if (game_single_player && !ui_cheated && !g_strncasecmp(who_str, "LOST", 4))
		sound_play (SOUND_LOST);
}
Ejemplo n.º 3
0
Archivo: uniq.c Proyecto: darius/ung
static void uniq (void) {
  Line line1, line2;
  Line *prev = &line1;
  Line *next = &line2;

  line_read (prev);
  line_write (prev);
  while (!feof (stdin)) {
    line_read (next);
    if (!lines_match (prev, next)) {
      Line *tmp = prev;
      prev = next;
      next = tmp;
      line_write (prev);
    }
  }
}
Ejemplo n.º 4
0
/* format into 1kb pages */
void format_page(char *out, FILE * f1, FILE * fi, int n) {
  int p = 0, i, j, l, oft, num, ps;
  struct line line;
  char path[L];
  int *addr1;
  char *addr2;
  FILE *f;

  rewind(f1);

  sprintf(path, "%s.pages", out);
  mkdir(path, -1);
  chdir(path);

  for (i = 0; i < n; i = j) {
    ps = 4;
    oft = 0;
    num = 0;
    addr1 = (int *)((void *)buffer[1] + 1024 - 4);
    addr2 = (char *)buffer[1];

    for (j = i; j < n; j++) {
      if (j % M == 0) {
        fseek(f1, j * S, SEEK_SET);
        fread(buffer[0], S, min(M, n - j), f1);
      }

      fseek(fi, buffer[0][j % M].p, SEEK_SET);
      line_read(fi, &line);
      l = strlen(line.s);

      if (ps + l + 8 <= 1024) {
        ps += l + 8;

        *--addr1 = oft;
        *--addr1 = l;

        memcpy(addr2, line.s, l);
        addr2 += l;

        oft += l;
        num++;
      } else
        break;
    }

    *(int *)((void *)buffer[1] + 1024 - 4) = num;
    memset(addr2, 0, 1024 - ps);

    sprintf(path, "%s.%07d", out, p++);
    f = fopen(path, "w");
    fwrite(buffer[1], 1, 1024, f);
    fclose(f);
  }

  chdir("..");
}
Ejemplo n.º 5
0
static struct gd_val *obj_read(FILE *i, FILE *o)
{
    struct gd_val *l = NULL;

    fprintf(o, "OK ready to receive object\n");

    for (;;) {
        char *p = line_read(i);
        char *k;

        if (p == NULL || strcmp(p, ".") == 0) {
            free(p);
            break;
        }

        if (p[0] == '>') {
            char *t = strdup(p + 1);
            free(p);
            p = t;
        }

        k = p;

        p = line_read(i);

        if (p == NULL || strcmp(p, ".") == 0) {
            free(k);
            free(p);
            break;
        }

        l = gd_val_set(l, k, gd_val_new(p, NULL, NULL));
    }

    return l;
}
Ejemplo n.º 6
0
/* format into single file */
void format(FILE * fo, FILE * f1, FILE * fi, int n) {
  int p, j;
  struct line line;

  rewind(fo);
  rewind(f1);

  while (n) {
    p = min(n, M * (k + 1) * (db + 1));
    fread(buffer[0], S, p, f1);
    for (j = 0; j < p; j++) {
      fseek(fi, buffer[0][j].p, SEEK_SET);
      line_read(fi, &line);
      line_write(fo, &line);
    }
    n -= p;
  }
}
Ejemplo n.º 7
0
/* check if the file sorted */
int check(FILE * f) {
  int i;
  struct line line;
  struct record *now, *pre;

  rewind(f);

  now = &buffer[0][0];
  pre = &buffer[0][1];
  for (i = 0; !feof(f); i++) {
    line_read(f, &line);
    now->x = line.x;
    now->y = line.y;
    if (i && record_cmp(pre, now) > 0) {
      printf("%d ", i);
      return 0;
    }
    *pre = *now;
  }
  return 1;
}
Ejemplo n.º 8
0
void cmdline(void)
{
	char strout[100];
	myStringPut("calling cmdline");
	myNLPut();
	unsigned int line;
	line = line_read();
	sprintf(strout,"line=%u",line);
	myStringPut(strout);
	myNLPut();

	if (line <= 10)
	{
		sprintf(strout,"WHITE detected");
		myStringPut(strout);
		myNLPut();
	}
	else
	{
		sprintf(strout,"BLACK detected");
		myStringPut(strout);
		myNLPut();
	}
}
Ejemplo n.º 9
0
int main(int argc, char **argv) {
  int i, m, n, lim, chk, page_format;
  FILE *fi, *fo, *f1, *f2;

  /* print usage */
  if (argc < 3) {
    printf("usage: %s <infile> <outfile> [options]\n", argv[0]);
    printf("options:\n");
    printf("  -b <buffer-number>      set buffer number, default and maximum value is 130\n");
    printf("  -db                     enable double buffering\n");
    printf("  -p                      output 1kb pages (task 2)\n");
    printf("  -c                      check correctness when sort completed (debug)\n");
    printf("  -l <record-number>      sort first <record-number> records (debug)\n");
    return -1;
  }

  /* get arguments */
  k = K;
  lim = 0x7fffffff;
  db = chk = page_format = 0;
  for (i = 3; i < argc; i++) {
    if (!strcmp(argv[i], "-b")) {
      sscanf(argv[++i], "%d", &k);
      if (k > K) {
        fprintf(stderr, "error: too many buffer pages.");
        return -1;
      }
    } else if (!strcmp(argv[i], "-l")) {
      sscanf(argv[++i], "%d", &lim);
    } else if (!strcmp(argv[i], "-c")) {
      chk = 1;
    } else if (!strcmp(argv[i], "-db")) {
      db = 1;
    } else if (!strcmp(argv[i], "-p")) {
      page_format = 1;
    }
  }
  k = k / (db + 1) - 1;
  if (k < 2) {
    fprintf(stderr, "error: too few buffer pages.");
    return -1;
  }

  /* open files */
  fi = fopen(argv[1], "rb+");
  if (!fi) {
    fprintf(stderr, "error: file '%s' is not found.\n", argv[1]);
    return -1;
  }
  if (!page_format) {
    if (!strcmp(argv[1], argv[2])) {
      fprintf(stderr, "error: infile cannot be the same as outfile.\n");
      return -1;
    }
    fo = fopen(argv[2], "wb+");
  }
  f1 = tmpfile();
  f2 = tmpfile();

  /* confirm arguments */
  printf("buffer pages:     %d\n", (k + 1) * (db + 1));
  printf("double buffering: %s\n", db ? "yes" : "no");
  printf("output 1kb pages: %s\n", page_format ? "yes" : "no");

  /* start timer */
  time_t start = time(0);
  puts("sorting...");

  /* init mutex, semaphore */
  if (db) {
    for (i = 0; i <= K; i++) {
      pthread_mutex_init(&mutex[i], 0);
      sem_init(&sem[i], 0, 0);
    }
  }
  /* extract useful data, quick sort pages individualy   */
  struct line line;
  for (n = 0; !feof(fi) && n < lim;) {
    buffer[0][n % M].p = ftell(fi);
    line_read(fi, &line);
    buffer[0][n % M].x = line.x;
    buffer[0][n % M].y = line.y;

    n++;

    if (n % M == 0 || feof(fi) || n == lim) {
      int num = n % M ? n % M : M;
      qsort(buffer[0], num, S, record_cmp);
      fwrite(buffer[0], S, num, f1);
    }
  }

  /* merge sort */
  if (db)
    merge_sort_db(f1, f2, 1, 0, n);
  else
    merge_sort(f1, f2, 1, 0, n);

  /* format from useful data to real data */
  if (page_format)
    format_page(argv[2], f1, fi, n);
  else
    format(fo, f1, fi, n);

  /* stop timer */
  time_t end = time(0);
  int sec = (int)difftime(end, start);
  printf("completed, time elapsed: %d min %d sec\n", sec / 60, sec % 60);

  /* check correctness */
  if (chk) {
    printf("checking correctness: ");
    fflush(stdout);
    if (page_format ? check_page(argv[2]) : check(fo))
      puts("yes");
    else
      puts("no");
  }

  /* close files */
  fclose(f1);
  fclose(f2);
  fclose(fi);
  if (!page_format)
    fclose(fo);

  return 0;
}
Ejemplo n.º 10
0
static void dialog(FILE *i, FILE *o)
{
    int done = 0;

    while (!done) {
        char *cmd = line_read(i);

        if (cmd == NULL || strcmp(cmd, "bye") == 0) {
            done = 1;
        }
        else
        if (strcmp(cmd, "about") == 0) {
            obj_write(about, o, o);
        }
        else
        if (strcmp(cmd, "topic") == 0) {
            gd_set_get(topics, i, o);
        }
        else
        if (strcmp(cmd, "store_topic") == 0) {
            gd_set_store(topics, i, o);
        }
        else
        if (strcmp(cmd, "topics") == 0) {
            gd_set_list_write(topics, i, o);
        }
        else
        if (strcmp(cmd, "user") == 0) {
            gd_set_get(users, i, o);
        }
        else
        if (strcmp(cmd, "store_user") == 0) {
            gd_set_store(users, i, o);
        }
        else
        if (strcmp(cmd, "users") == 0) {
            gd_set_list_write(users, i, o);
        }
        else
        if (strcmp(cmd, "template") == 0) {
            gd_set_get(templates, i, o);
        }
        else
        if (strcmp(cmd, "store_template") == 0) {
            gd_set_store(templates, i, o);
        }
        else
        if (strcmp(cmd, "templates") == 0) {
            gd_set_list_write(templates, i, o);
        }
        else
        if (strcmp(cmd, "store_story") == 0) {
            gd_set_store_story(i, o);
        }
        else
        if (strcmp(cmd, "delete_story") == 0) {
            gd_set_delete(stories, i, o);
        }
        else
        if (strcmp(cmd, "story") == 0) {
            gd_set_get(stories, i, o);
        }
        else
        if (strcmp(cmd, "story_set") == 0) {
            gd_story_set(i, o);
        }
        else
        if (strcmp(cmd, "_dump") == 0) {
            FILE *f;

            f = fopen("dump.bin", "w");
            dump(f);
            fclose(f);
        }
        else {
            fprintf(o, "ERROR %s command not found\n", cmd);
        }

        free(cmd);
    }
}
Ejemplo n.º 11
0
static char *arg_read(FILE *i, FILE *o)
{
    fprintf(o, "OK ready to receive argument\n");

    return line_read(i);
}