Esempio n. 1
0
int stats_buffer_write(struct stats_buffer *sf)
{
  int rc = 0;
  sf->sf_data="";

  struct utsname uts_buf;
  uname(&uts_buf);

  sf_printf(sf, "\n%f %s %s\n", current_time, current_jobid, uts_buf.nodename);

  /* Write mark. */
  if (sf->sf_mark != NULL) {
    const char *str = sf->sf_mark;
    while (*str != 0) {
      const char *eol = strchrnul(str, '\n');
      sf_printf(sf, "%c%*s\n", SF_MARK_CHAR, (int) (eol - str), str);
      str = eol;
      if (*str == '\n')
        str++;
    }
  }

  /* Write stats. */
  size_t i = 0;
  struct stats_type *type;
  while ((type = stats_type_for_each(&i)) != NULL) {
    if (!(type->st_enabled && type->st_selected))
      continue;

    size_t j = 0;
    char *dev;
    while ((dev = dict_for_each(&type->st_current_dict, &j)) != NULL) {
      struct stats *stats = key_to_stats(dev);

      sf_printf(sf, "%s %s", type->st_name, stats->s_dev);
      size_t k;
      for (k = 0; k < type->st_schema.sc_len; k++)
	{
	  sf_printf(sf, " %llu", stats->s_val[k]);
	}
      sf_printf(sf, "\n");
    }
  }

  rc = send(sf);

  free(sf->sf_path);
  free(sf->sf_mark);
  free(sf->sf_data);

  memset(sf, 0, sizeof(struct stats_buffer));

  return rc;
}
Esempio n. 2
0
/*
 * funkcja wyswietla tetramino jakie poleci w nastepnej kolejnosci,
 * przy okazji jak jest nowe tetramino (bo wtedy jest odpalana), to mozna
 * wypisywac punkty i linie.
 */
void
tetramino_preview(struct game *g, const int *tmino, int size)
{
	static SDL_Rect r[2];
	struct position *p = g->frontend;
	int i;
	
	r[0].x = p->x2;
	r[0].y = p->y2;
	r[0].w = p->size * PREVIEW_W;
	r[0].h = p->size * PREVIEW_H;
	/* TODO: zrobic ten preview szybszy? */
	SDL_BlitSurface(bground, &r[0], screen, &r[0]);

	/* teraz petla po kaflach tetramino */
	for (i = 0; i < size; ++i) {
		/* TODO: zrobic to ansi c kompatybilne */
		SDL_Rect r = {p->x2, p->y2, p->size, p->size};
		const int pos = PREVIEW_W / 2 + tmino[i];
		const int x = pos % MATRIX_WIDTH;
		const int y = pos / MATRIX_WIDTH;
		
		r.x += p->size * x;
		r.y += p->size * y;

		SDL_BlitSurface(block[g->next_tetramino], NULL, screen, &r);
	}
	/* w tym miejscu juz stary r */

	/* TODO: do oddzielnej funkcji z tym */
	SDL_BlitSurface(bground, &r[1], screen, &r[1]);
	r[1].x = r[0].x;
	r[1].y = r[0].y + r[0].h + 5;
	sf_printf(screen, &r[1], "Points: %4d\nLines : %4d\nLevel : %4d", 
	    g->points, g->lines_cleared, g->level);

	SDL_UpdateRects(screen, sizeof(r) / sizeof(r[0]), r);
}
Esempio n. 3
0
int stats_wr_hdr(struct stats_buffer *sf)
{
  struct utsname uts_buf;
  unsigned long long uptime = 0;
  
  uname(&uts_buf);
  pscanf("/proc/uptime", "%llu", &uptime);
  
  sf->sf_data = "";
  sf_printf(sf, "%c%s %s\n", SF_PROPERTY_CHAR, STATS_PROGRAM, STATS_VERSION);

  sf_printf(sf, "%chostname %s\n", SF_PROPERTY_CHAR, uts_buf.nodename);
  sf_printf(sf, "%cuname %s %s %s %s\n", SF_PROPERTY_CHAR, uts_buf.sysname,
            uts_buf.machine, uts_buf.release, uts_buf.version);
  sf_printf(sf, "%cuptime %llu\n", SF_PROPERTY_CHAR, uptime);

  size_t i = 0;
  struct stats_type *type;
  while ((type = stats_type_for_each(&i)) != NULL) {
    if (!type->st_enabled)
      continue;

    TRACE("type %s, schema_len %zu\n", type->st_name, type->st_schema.sc_len);

    /* Write schema. */
    sf_printf(sf, "%c%s", SF_SCHEMA_CHAR, type->st_name);

    /* MOVEME */
    size_t j;
    for (j = 0; j < type->st_schema.sc_len; j++) {
      struct schema_entry *se = type->st_schema.sc_ent[j];
      sf_printf(sf, " %s", se->se_key);
      if (se->se_type == SE_CONTROL)
        sf_printf(sf, ",C");
      if (se->se_type == SE_EVENT)
        sf_printf(sf, ",E");
      if (se->se_unit != NULL)
        sf_printf(sf, ",U=%s", se->se_unit);
      if (se->se_width != 0)
        sf_printf(sf, ",W=%u", se->se_width);
    }
    sf_printf(sf, "\n");
  }

  send(sf);

  return 0;
}