string Ananke::syncBsxSatellaview(const string &pathname) { auto buffer = file::read({pathname, "program.rom"}); if(buffer.size() == 0) return ""; directory::remove(pathname); information.path = pathname; information.name = notdir(string{pathname}.rtrim<1>("/")); return openBsxSatellaview(buffer); }
void Link::load() { if(opened()) close(); string basename = interface->path(Cartridge::Slot::Base, ""); string name = program != "" ? program : notdir(basename); string path = dir(basename); if(open(name, path)) { link_power = sym("link_power"); link_reset = sym("link_reset"); link_run = sym("link_run" ); link_read = sym("link_read" ); link_write = sym("link_write"); } }
string DiskBrowser::queryImageInformation() { string text; string filename; if(currentFilename(filename) == true) { if(striend(filename, ".sfc") || striend(filename, ".smc")) { unsigned size = file::size(filename); text << "<b>" << notdir(nall::basename(filename)) << "</b>"; text << "<small><table cellspacing='5'>"; text << "<tr><td><b>ROM size:</b></td><td>" << size * 8 / 1024 / 1024 << "mbit</td></tr>"; text << "</table></small>"; } } return text; }
static void main_debug_(int level, const char *file, int line, const char *func, const char *fmt, ...) { #ifndef DEBUG #define DEBUG 0 #endif if (level > DEBUG) return; va_list vl; va_start(vl,fmt); vfprintf(stderr, fmt, vl); va_end(vl); fprintf(stderr, " (in %s() at %s:%d)\n", func, notdir(file), line); }
static void NORETURN main_fatal_(int code, const char *file, int line, const char *func, const char *fmt, ...) { va_list vl; va_start(vl,fmt); vfprintf(stderr, fmt, vl); va_end(vl); fprintf(stderr, " (in %s() at %s:%d)", func, notdir(file), line); if (code & PRINT_ERRNO) fprintf(stderr, ": %s\n", strerror(errno)); else fputc('\n', stderr); longjmp(errbuf, code); }
string Ananke::syncSufamiTurbo(const string &pathname) { auto buffer = file::read({pathname, "program.rom"}); if(buffer.size() == 0) return ""; auto save = file::read({pathname, "save.ram"}); if(save.size() == 0) save = file::read({pathname, "save.rwm"}); directory::remove(pathname); information.path = pathname; information.name = notdir(string{pathname}.rtrim<1>("/")); string outputPath = openSufamiTurbo(buffer); if(save.size()) file::write({outputPath, "save.ram"}, save); return outputPath; }
void LibraryImport::onImportActivate() { if(program->ananke.open() == false) { MessageWindow().setText("ananke must be installed to use this feature").warning(); return; } function<string ()> browse = program->ananke.sym("ananke_browse"); if(!browse) return; audio.clear(); //ananke's browser is modal string pathname = browse(); pathname.rtrim<1>("/"); if(pathname.empty()) return; //after importing game, take user to the relevant game list to show the newly imported title string type = extension(pathname); for(signed bootable = 1; bootable >= 0; bootable--) { unsigned selection = 0; for(auto& browser : libraryManager->browsers) { unsigned mode = 0; for(auto& media : browser->emulator.media) { if(type == media.type && media.bootable == bootable) { browser->mediaMode.setSelection(mode); libraryManager->libraryFrame.setSelection(selection); libraryManager->onChange(); //find game in list and select it string name = notdir(nall::basename(pathname)); for(unsigned n = 0; n < browser->folders.rows(); n++) { if(browser->folders.text(n, 0) == name) { browser->folders.setSelection(n); browser->onChange(); break; } } return; } mode++; } selection++; } } }
//override filename's path with filepath, but only if filepath isn't empty //used for GUI's "path selection" functionality string filepath(const char *filename, const char *filepath) { if(!filepath || !*filepath) return filename; return string() << dir(filepath) << notdir(filename); }