static int demo_action(int tok, int val) { audio_play(AUD_MENU, 1.0f); switch (tok) { case GUI_BACK: return goto_state(&st_title); case GUI_NEXT: first += DEMO_STEP; return goto_state(&st_demo); break; case GUI_PREV: first -= DEMO_STEP; return goto_state(&st_demo); break; case DEMO_SELECT: if (progress_replay(DIR_ITEM_GET(items, val)->path)) { last_viewed = val; demo_play_goto(0); return goto_state(&st_demo_play); } break; } return 1; }
static void make_dirs_and_migrate(void) { Array items; int i; const char *src; char *dst; if (fs_mkdir("Replays")) { if ((items = fs_dir_scan("", is_replay))) { for (i = 0; i < array_len(items); i++) { src = DIR_ITEM_GET(items, i)->path; dst = concat_string("Replays/", src, NULL); fs_rename(src, dst); free(dst); } fs_dir_free(items); } } if (fs_mkdir("Scores")) { if ((items = fs_dir_scan("", is_score))) { for (i = 0; i < array_len(items); i++) { src = DIR_ITEM_GET(items, i)->path; dst = concat_string("Scores/", src + sizeof ("neverballhs-") - 1, ".txt", NULL); fs_rename(src, dst); free(dst); } fs_dir_free(items); } } fs_mkdir("Screenshots"); }
int set_init() { fs_file fin; char *name; Array items; int i; if (sets) set_quit(); sets = array_new(sizeof (struct set)); curr = 0; /* * First, load the sets listed in the set file, preserving order. */ if ((fin = fs_open(SET_FILE, "r"))) { while (read_line(&name, fin)) { struct set *s = array_add(sets); if (!set_load(s, name)) array_del(sets); free(name); } fs_close(fin); } /* * Then, scan for any remaining set description files, and add * them after the first group in alphabetic order. */ if ((items = fs_dir_scan("", is_unseen_set))) { array_sort(items, cmp_dir_items); for (i = 0; i < array_len(items); i++) { struct set *s = array_add(sets); if (!set_load(s, DIR_ITEM_GET(items, i)->path)) array_del(sets); } fs_dir_free(items); } return array_len(sets); }
static void add_archives(const char *path) { Array archives; int i; if ((archives = dir_scan(path, is_archive, NULL, NULL))) { array_sort(archives, cmp_dir_items); for (i = 0; i < array_len(archives); i++) fs_add_path(DIR_ITEM_GET(archives, i)->path); dir_free(archives); } }
static void gui_demo_update_thumbs(void) { struct dir_item *item; struct demo *demo; int i; for (i = 0; i < ARRAYSIZE(thumbs) && thumbs[i].shot && thumbs[i].name; i++) { item = DIR_ITEM_GET(items, thumbs[i].item); demo = item->data; gui_set_image(thumbs[i].shot, demo ? demo->shot : ""); gui_set_label(thumbs[i].name, demo ? demo->name : base_name(item->path)); } }
void course_init() { fs_file fin; char *line; Array items; int i; if (course_state) course_free(); count = 0; if ((fin = fs_open(COURSE_FILE, "r"))) { while (count < MAXCRS && read_line(&line, fin)) { if (course_load(&course_v[count], line)) count++; free(line); } fs_close(fin); course_state = 1; } if ((items = fs_dir_scan("", is_unseen_course))) { array_sort(items, cmp_dir_items); for (i = 0; i < array_len(items) && count < MAXCRS; i++) if (course_load(&course_v[count], DIR_ITEM_GET(items, i)->path)) count++; fs_dir_free(items); course_state = 1; } }
int set_init() { fs_file fin; char *name; Array items; int i; if (sets) set_quit(); sets = array_new(sizeof (struct set)); curr = 0; /* * First, load the sets listed in the set file, preserving order. */ if ((fin = fs_open(SET_FILE, "r"))) { while (read_line(&name, fin)) { struct set *s = array_add(sets); if (!set_load(s, name)) array_del(sets); free(name); } fs_close(fin); } //senquack - added error reporting after getting random errors opening set files: #ifdef GCWZERO else { log_printf("Error opening sets file %s\n", SET_FILE); log_printf(fs_error()); } #endif //GCWZERO /* * Then, scan for any remaining set description files, and add * them after the first group in alphabetic order. */ if ((items = fs_dir_scan("", is_unseen_set))) { array_sort(items, cmp_dir_items); for (i = 0; i < array_len(items); i++) { struct set *s = array_add(sets); if (!set_load(s, DIR_ITEM_GET(items, i)->path)) array_del(sets); } fs_dir_free(items); } return array_len(sets); }