static bool CC_server(const UTF8 *arg) { char server[300]; unsigned int port = 0; server[0] = 0; switch(trio_sscanf((char*)arg, "%.299s %u", server, &port)) { default: case 0: break; case 1: MDFNI_SetSetting("netplay.host", (char*)server); break; case 2: MDFNI_SetSetting("netplay.host", (char*)server); MDFNI_SetSettingUI("netplay.port", port); break; } MDFND_NetworkConnect(); return(false); }
bool MDFNI_SetSettingUI(const char *name, uint64 value) { char tmpstr[32]; trio_snprintf(tmpstr, 32, "%llu", value); return(MDFNI_SetSetting(name, tmpstr, FALSE)); }
bool MDFNI_SetSettingB(const char *name, bool value) { char tmpstr[2]; tmpstr[0] = value ? '1' : '0'; tmpstr[1] = 0; return(MDFNI_SetSetting(name, tmpstr, FALSE)); }
static std::string GetFile () { if(FileChooser == 0) { FileChooser = new FileSelect(_("Select ROM"), MDFN_GetSettingS("es.bookmarks"), "", new SummerfaceStaticConduit(FileBrowserHook, (void*)0)); } std::string result = FileChooser->GetFile(); std::string bookmarks; MDFNI_SetSetting("es.bookmarks", FileChooser->GetBookmarks(bookmarks).c_str()); return result; }
static void ParseSTDIOCommand(char *buf) { char *arguments[8]; int which_argument = 0; size_t blen = strlen(buf); bool InQuote = 0; char *InBegin = NULL; char last_char = 0; memset(arguments, 0, sizeof(arguments)); for(size_t x = 0; x <= blen; x++) { if((buf[x] == ' ' || buf[x] == 0) && last_char != '\\' && !InQuote && InBegin) { buf[x] = 0; unescape_string(InBegin); arguments[which_argument] = InBegin; which_argument++; if(which_argument == 8) { break; } InBegin = NULL; } else if(buf[x] != ' ' && buf[x] != '\t' && buf[x] != '"' && last_char != '\\' && !InQuote && !InBegin) { InBegin = &buf[x]; } else if(buf[x] == '"' && last_char != '\\') { if(InBegin) { buf[x] = 0; unescape_string(InBegin); arguments[which_argument] = InBegin; which_argument++; if(which_argument == 8) { break; } InQuote = 0; InBegin = NULL; } else { InQuote = TRUE; InBegin = &buf[x + 1]; } } last_char = buf[x]; } int numargs = which_argument; // numargs count includes the command. Misleading, yes! bool success = 0; bool suppress_success = 0; if(numargs) { if(!strcasecmp(arguments[0], "exit")) { MainRequestExit(); suppress_success = TRUE; } else if(!strcasecmp(arguments[0], "nop")) { success = true; } else if(!strcasecmp(arguments[0], "sync_video")) { success = GT_ReinitVideo(); } else if(!strcasecmp(arguments[0], "sync_sound")) { success = GT_ReinitSound(); } else if(!strcasecmp(arguments[0], "get_setting")) { if(numargs == 2) { std::string sval; sval = MDFN_GetSettingS(arguments[1]); success = TRUE; Remote_SendCommand("return", 2, "success", sval.c_str()); return; } else puts("Invalid number of arguments"); } else if(!strcasecmp(arguments[0], "set_setting")) { if(numargs == 3) { success = MDFNI_SetSetting(arguments[1], arguments[2]); } else puts("Invalid number of arguments"); } else if(!strcasecmp(arguments[0], "get_known_fileexts")) { uint32 count = 0; char count_string[64]; // TODO: Move to core for(unsigned int i = 0; i < MDFNSystems.size(); i++) { const FileExtensionSpecStruct *FileExtensions = MDFNSystems[i]->FileExtensions; if(FileExtensions) while(FileExtensions->extension) { count++; FileExtensions++; } } trio_snprintf(count_string, 64, "%u", count); Remote_SendCommand("result_count", 1, count_string); for(unsigned int i = 0; i < MDFNSystems.size(); i++) { const FileExtensionSpecStruct *FileExtensions = MDFNSystems[i]->FileExtensions; if(FileExtensions) while(FileExtensions->extension) { Remote_SendCommand("result", 3, MDFNSystems[i]->shortname, FileExtensions->extension, FileExtensions->description); FileExtensions++; } } success = TRUE; } else { puts("Unknown command!"); } } if(!suppress_success) { if(success) { Remote_SendCommand("return", 1, "success"); } else { Remote_SendCommand("return", 1, "failure"); } } //printf("%s %s %s %s %s %s\n", arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void Settings::setString(const string& key, const string& value) { stringstream strstr; strstr << value; MDFNI_SetSetting((string("stella.") + key).c_str(), strstr.str().c_str()); }
static int HokeyPokeyFallDown(const char *name, const char *value) { if(!MDFNI_SetSetting(name, value)) return(0); return(1); }
void MemDebuggerPrompt::TheEnd(const std::string &pstring) { if(error_string) { free(error_string); error_string = NULL; } if(InPrompt == Goto || InPrompt == GotoDD) { unsigned long NewAddie; if(trio_sscanf(pstring.c_str(), "%08lx", &NewAddie) == 1) { ASpacePos[CurASpace] = NewAddie; LowNib = FALSE; if(InPrompt == GotoDD) GoGoPowerDD[CurASpace] = NewAddie; } } else if(InPrompt == SetCharset) { if(ICV_Init(pstring.c_str())) { LockGameMutex(1); MDFNI_SetSetting(std::string(std::string(CurGame->shortname) + "." + std::string("debugger.memcharenc")).c_str(), pstring.c_str()); LockGameMutex(0); } } else if(InPrompt == DumpMem) { uint32 A1, A2, tmpsize; char fname[256]; bool acceptable = FALSE; if(trio_sscanf(pstring.c_str(), "%08x %08x %255[^\r\n]", &A1, &A2, fname) == 3) acceptable = TRUE; else if(trio_sscanf(pstring.c_str(), "%08x +%08x %255[^\r\n]", &A1, &tmpsize, fname) == 3) { acceptable = TRUE; A2 = A1 + tmpsize - 1; } if(acceptable) { FILE *fp = fopen(fname, "wb"); if(fp) { uint8 write_buffer[256]; uint64 a = A1; //printf("%08x %08x\n", A1, A2); LockGameMutex(1); while(a <= A2) { size_t to_write; to_write = A2 - a + 1; if(to_write > 256) to_write = 256; ASpace->GetAddressSpaceBytes(ASpace->name, a, to_write, write_buffer); if(fwrite(write_buffer, 1, to_write, fp) != to_write) { error_string = trio_aprintf("File write error: %m", errno); error_time = SDL_GetTicks(); break; } a += to_write; } LockGameMutex(0); fclose(fp); } else { error_string = trio_aprintf("File open error: %m", errno); error_time = SDL_GetTicks(); } } } else if(InPrompt == LoadMem) { uint32 A1, A2, tmpsize; char fname[256]; bool acceptable = FALSE; if(trio_sscanf(pstring.c_str(), "%08x %08x %255[^\r\n]", &A1, &A2, fname) == 3) acceptable = TRUE; else if(trio_sscanf(pstring.c_str(), "%08x +%08x %255[^\r\n]", &A1, &tmpsize, fname) == 3) { acceptable = TRUE; A2 = A1 + tmpsize - 1; } if(acceptable) { FILE *fp = fopen(fname, "rb"); if(fp) { LockGameMutex(1); uint8 read_buffer[256]; uint64 a = A1; while(a <= A2) { size_t to_read; size_t read_len; to_read = A2 - a + 1; if(to_read > 256) to_read = 256; read_len = fread(read_buffer, 1, to_read, fp); if(read_len > 0) ASpace->PutAddressSpaceBytes(ASpace->name, a, read_len, 1, TRUE, read_buffer); a += read_len; if(read_len != to_read) { if(ferror(fp)) { error_string = trio_aprintf("File read error: %m", errno); error_time = SDL_GetTicks(); } else if(feof(fp)) { error_string = trio_aprintf("Warning: unexpected EOF(short by %08x byte(s))", A2 - a + 1); error_time = SDL_GetTicks(); } break; } } LockGameMutex(0); fclose(fp); } else { error_string = trio_aprintf("File open error: %m", errno); error_time = SDL_GetTicks(); } } } else if(InPrompt == TextSearch) { uint8 *thebytes; uint32 bcount; TS_String = pstring; char *inbuf, *outbuf; char *utf8_string; size_t ibl, obl, obl_start; size_t result; utf8_string = strdup(pstring.c_str()); ibl = strlen(utf8_string); obl_start = obl = (ibl + 1) * 8; // Hehe, ugly maximum estimation! thebytes = (uint8 *)calloc(1, obl_start); inbuf = utf8_string; outbuf = (char*)thebytes; result = iconv(ict, (ICONV_CONST char **)&inbuf, &ibl, &outbuf, &obl); if(result == (size_t)-1) { error_string = trio_aprintf("iconv() error: %m", errno); error_time = SDL_GetTicks(); InPrompt = None; free(utf8_string); free(thebytes); return; } bcount = obl_start - obl; free(utf8_string); if(!DoBSSearch(bcount, thebytes)) { error_string = trio_aprintf("String not found."); error_time = SDL_GetTicks(); InPrompt = None; } free(thebytes); } else if(InPrompt == ByteStringSearch) { size_t byte_count; uint8 *the_bytes; BSS_String = pstring; if(!(the_bytes = TextToBS(pstring.c_str(), &byte_count))) return; if(!DoBSSearch(byte_count, the_bytes)) { free(the_bytes); error_string = trio_aprintf("Bytestring \"%s\" not found.", pstring.c_str()); error_time = SDL_GetTicks(); InPrompt = None; return; } free(the_bytes); } else if(InPrompt == RelSearch) { size_t byte_count; uint8 *the_bytes; RS_String = pstring; if(!(the_bytes = TextToBS(pstring.c_str(), &byte_count))) return; if(!DoRSearch(byte_count, the_bytes)) { free(the_bytes); error_string = trio_aprintf("Bytestring \"%s\" not found.", pstring.c_str()); error_time = SDL_GetTicks(); InPrompt = None; return; } free(the_bytes); } InPrompt = None; }