X-Git-Url: https://git.rohieb.name/hackover2013-badge-firmware.git/blobdiff_plain/cde2e04c6ed7210ec4ff242adc1b640666fcabf5..5830bb11cb11ca00fa53b04413d0587bac89b70f:/badge/jumpnrun/starter.c diff --git a/badge/jumpnrun/starter.c b/badge/jumpnrun/starter.c index 146e85c..93e769c 100644 --- a/badge/jumpnrun/starter.c +++ b/badge/jumpnrun/starter.c @@ -18,6 +18,7 @@ static uint8_t jumpnrun_load_progress(void) { if(FR_OK == f_open(&fd, PROGRESS_FNAME, FA_OPEN_EXISTING | FA_READ)) { UINT bytes; f_read(&fd, &progress, sizeof(progress), &bytes); + f_close(&fd); } return progress; @@ -26,9 +27,10 @@ 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_NEW | FA_WRITE)) { + if(FR_OK == f_open(&fd, PROGRESS_FNAME, FA_CREATE_ALWAYS | FA_WRITE)) { UINT bytes; f_write(&fd, &progress, sizeof(progress), &bytes); + f_close(&fd); } } @@ -46,9 +48,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) { @@ -62,8 +64,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; } @@ -90,7 +99,7 @@ void jumpnrun_play(void) { while(0 == jumpnrun_pick_level(buf, &first_visible, &selected, progress)) { if(JUMPNRUN_WON == jumpnrun_play_level(buf) && selected == progress) { - ++progress; + selected = ++progress; jumpnrun_save_progress(progress); } }