X-Git-Url: https://git.rohieb.name/hackover2013-badge-firmware.git/blobdiff_plain/8164e94111f5ef7a26dcafdf258083299c07f010..05db94c84b6f7e4ee91fd67d6e1a8d97a2b97f2e:/badge/jumpnrun/starter.c diff --git a/badge/jumpnrun/starter.c b/badge/jumpnrun/starter.c index 2e7eebf..0645487 100644 --- a/badge/jumpnrun/starter.c +++ b/badge/jumpnrun/starter.c @@ -15,7 +15,9 @@ static uint8_t jumpnrun_load_progress(void) { uint8_t progress = 0; FIL fd; - if(FR_OK == f_open(&fd, PROGRESS_FNAME, FA_OPEN_EXISTING | FA_READ)) { + + if(FR_OK == f_chdir(JUMPNRUN_PATH) && + FR_OK == f_open(&fd, PROGRESS_FNAME, FA_OPEN_EXISTING | FA_READ)) { UINT bytes; f_read(&fd, &progress, sizeof(progress), &bytes); f_close(&fd); @@ -27,7 +29,8 @@ static uint8_t jumpnrun_load_progress(void) { static void jumpnrun_save_progress(uint8_t progress) { FIL fd; - if(FR_OK == f_open(&fd, PROGRESS_FNAME, FA_CREATE_ALWAYS | FA_WRITE)) { + if(FR_OK == f_chdir(JUMPNRUN_PATH) && + FR_OK == f_open(&fd, PROGRESS_FNAME, FA_CREATE_ALWAYS | FA_WRITE)) { UINT bytes; f_write(&fd, &progress, sizeof(progress), &bytes); f_close(&fd); @@ -48,9 +51,9 @@ static uint8_t jumpnrun_pick_level_from_fd(char *buf, size_t *first_visible, siz return JUMPNRUN_ERROR; } - char menu_buf[levelcount][MENU_BUFLEN]; - char const *menu_index[levelcount]; - char const *fnames[levelcount]; + char menu_buf[levelcount + 1][MENU_BUFLEN]; + char const *menu_index[levelcount + 1]; + char const *fnames[levelcount + 1]; unsigned i; for(i = 0; i < levelcount && f_gets(menu_buf[i], MENU_BUFLEN, fd); ++i) { @@ -64,8 +67,15 @@ static uint8_t jumpnrun_pick_level_from_fd(char *buf, size_t *first_visible, siz fnames[i] = p; } - *selected = badge_menu(menu_index, i, first_visible, *selected); + strcpy(menu_buf[i], "exit"); + menu_index[i] = menu_buf[i]; + size_t choice = badge_menu(menu_index, i + 1, first_visible, *selected); + + if(choice == levelcount) { + return 1; // exit + } + *selected = choice; strcpy(buf, fnames[*selected]); return 0; } @@ -73,7 +83,8 @@ static uint8_t jumpnrun_pick_level_from_fd(char *buf, size_t *first_visible, siz static uint8_t jumpnrun_pick_level(char *buf, size_t *first_visible, size_t *selected, uint8_t progress) { FIL fd; - if(FR_OK != f_open(&fd, "levels.lst", FA_OPEN_EXISTING | FA_READ)) { + if(FR_OK != f_chdir(JUMPNRUN_PATH) || + FR_OK != f_open(&fd, "levels.lst", FA_OPEN_EXISTING | FA_READ)) { return JUMPNRUN_ERROR; }