diff --git a/Makefile b/Makefile index 3fdbe07..38616e8 100644 --- a/Makefile +++ b/Makefile @@ -60,7 +60,7 @@ export DEPSDIR := $(CURDIR)/$(BUILD) #--------------------------------------------------------------------------------- CFILES := char_to_kc.c CPPFILES := Display.cpp main.cpp Prefs.cpp SID.cpp REU.cpp IEC.cpp 1541fs.cpp \ - 1541d64.cpp 1541t64.cpp 1541job.o SAM.cpp C64.cpp CPUC64.cpp VIC.cpp \ + 1541d64.cpp 1541t64.cpp 1541job.cpp SAM.cpp C64.cpp CPUC64.cpp VIC.cpp \ CIA.cpp CPU1541.cpp menu.cpp sFILES := SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) diff --git a/Src/C64_SDL.i b/Src/C64_SDL.i index 96cc97c..3729aa5 100644 --- a/Src/C64_SDL.i +++ b/Src/C64_SDL.i @@ -255,7 +255,14 @@ void C64::save_load_state(Prefs *np) case 1: /* save */ { char buf[255]; - const char *name = "save"; + char name[255]; + char *p; + + p = strrchr(ThePrefs.DrivePath[0], '/'); + if (p == NULL) + strcpy(name, "unknown"); + else + strncpy(name, p + 1, 255); snprintf(buf, 255, "/apps/frodo/saves/%s.sav", name); @@ -264,7 +271,55 @@ void C64::save_load_state(Prefs *np) case 0: /* load/delete */ case 2: { + DIR *d = opendir(this->base_dir); + const char **file_list; + int cur = 0; + struct dirent *de; + int cnt = 16; + + if (!d) + return; + + file_list = (const char**)malloc(cnt * sizeof(char*)); + file_list[cur] = NULL; + + for (de = readdir(d); + de; + de = readdir(d)) + { + if (strstr(de->d_name, ".sav")) + { + char *p; + + p = strdup(de->d_name); + file_list[cur++] = p; + file_list[cur] = NULL; + if (cur > cnt - 2) + { + cnt = cnt + 32; + file_list = (const char**)realloc(file_list, cnt * sizeof(char*)); + if (!file_list) + return; + } + } + } + closedir(d); + if (cur == 0) + break; + + menu_init(&select_saves_menu, this->menu_font, file_list, + 0, 0, MENU_SIZE_X, MENU_SIZE_Y); int save = menu_select(real_screen, &select_saves_menu, NULL); + if (save >= 0) + { + if (opt == 2) + { + /* FIXME! Delete */ + } + else /* Load the snapshot */ + this->LoadSnapshot((char*)file_list[save]); + } + menu_fini(&select_saves_menu); } break; default: break; diff --git a/meta.xml b/meta.xml index 78042a0..bc7239e 100644 --- a/meta.xml +++ b/meta.xml @@ -4,7 +4,7 @@ Simon Kagstrom 1 20090107 - Frodo is a C64 emulator + Commodore 64 emulator Frodo is a C64 emulator written by Christian Bauer. It supports C64 disk and tape images in the .d64 and .t64 formats. The port to Wii was done by Simon Kagstrom.