static int __register(struct timejob *tj) { struct list_iterator li; int i, retval; int insert_it; struct timejob *p; retval = 0; insert_it = 0; i = 0; list_iter_set(&li, &timejob_list); while ((p = list_iter_get(&li))) { if (p->j_ts.tv_sec > tj->j_ts.tv_sec || (p->j_ts.tv_sec == tj->j_ts.tv_sec && p->j_ts.tv_nsec > tj->j_ts.tv_nsec)) { insert_it = 1; break; } i++; } list_iter_end(&li); if (insert_it) { list_insert_at(&timejob_list, i, tj); if (i == 0) retval = 1; /* reschedule timer */ } else { list_enqueue(&timejob_list, tj); if (list_count(&timejob_list) == 1) retval = 1; /* reschedule timer */ } #if 0 printf("registered:\n"); list_iter_set(&li, &timejob_list); while ((p = list_iter_get(&li))) { printf("%x - %d\n", p, p->j_arg_sec); }; list_iter_end(&li); #endif return retval; }
int db_scan(struct state *s) { struct scan_state ss; /* init scan_state */ ss.state = s; ss.year = s->rc.data_begin.year; ss.begin_week = WEEK_ID_BEGIN; ss.end_week = WEEK_ID_END; ss.last_week = INT_MIN; memset(ss.filenames, 0, DB_MAX_WEEKS_PER_YEAR); /* build path to sport in database file layout */ snprintf(ss.pathbuf, DB_MAX_PATH, "%s/%s", s->rc.data_dir, s->rc.sport); ss.pathbuf[DB_MAX_PATH-1] = '\0'; /* make sure the expected dir exists */ if (access(ss.pathbuf, R_OK)) { fprintf(stderr, "%s: error reading dir '%s': %s\n", progname, ss.pathbuf, strerror(errno)); return -1; } /* if begin year is unset, find the earliest */ if (s->rc.data_begin.year == WEEK_ID_BEGIN) { ss.year = find_earliest_year(ss.pathbuf); if (ss.year == INT_MAX) return -2; } /* for each year given in the rc, * build scan_state and call scan_year() */ for (; ss.year <= s->rc.data_end.year; ss.year++) { /* set begin week */ if (ss.year == s->rc.data_begin.year) ss.begin_week = s->rc.data_begin.week; else ss.begin_week = 1; /* set end week */ if (ss.year == s->rc.data_end.year) ss.end_week = s->rc.data_end.week; else ss.end_week = WEEK_ID_END; ss.last_week = INT_MIN; /* scan files for year */ if (scan_year(&ss) < 0) return -3; } /* print scanned files */ if (verbose) { struct list_iter iter; list_iter_begin(&s->db->game_files, &iter); while (!list_iter_end(&iter)) { fprintf(stderr, "db: %s\n", (char *)list_iter_data(&iter)); list_iter_next(&iter); } fprintf(stderr, "db: %d game files\n", s->db->game_files.length); } return 0; }
static void print_rc(const struct rc *rc) { const char *action = "unknown"; /* * map action to string * if not analyze, predict, or rank, then exit */ switch (rc->action) { case ACTION_ANALYZE: action = "analyze"; break; case ACTION_PREDICT: action = "predict"; break; case ACTION_RANK: action = "rank"; break; default: return; } /* heading */ fputs("***** run control *****\n", stderr); /* print action */ fprintf(stderr, "action: %s\n", action); /* print sport */ fprintf(stderr, "sport: %s\n", rc->sport); /* print data-begin week */ fputs("data-begin: ", stderr); print_week(stderr, &rc->data_begin); fputc('\n', stderr); /* print end week */ fputs("data-end: ", stderr); print_week(stderr, &rc->data_end); fputc('\n', stderr); /* print target week/range */ fputs("target-begin: ", stderr); print_week(stderr, &rc->target_begin); fputc('\n', stderr); fputs("target-end: ", stderr); print_week(stderr, &rc->target_end); fputc('\n', stderr); /* print algos */ fputs("algos: [ ", stderr); struct list_iter iter; char *algo; list_iter_begin(&rc->user_algorithms, &iter); while (!list_iter_end(&iter)) { algo = list_iter_data(&iter); fprintf(stderr, "%s ", algo); list_iter_next(&iter); } fputs("]\n", stderr); /* footer */ fputs("***********************\n", stderr); }