bool Rule::store () { char buff[10]; char data[0x40006]; // Cater for worst possible case if (!m_matches) return false; sprintf (buff, "%d", m_player_id); ini_locateHeading (m_inifd, buff); { int base = m_addr[0] & 0xff00; int laddr = m_addr[0]; int group = 1; char *p = data; sprintf (buff, "ID%d", group++); ini_locateKey (m_inifd, buff); p += sprintf (p, "$%04X", laddr - base); laddr--; for (int i = 0; i < m_ids; i++) { int addr = m_addr[i]; if ((addr - 1) != laddr) { if ((addr - laddr) > (RULE_MAX_ERROR + 1)) { if (ini_writeString (m_inifd, data) < 0) return false; // Error storing p = data; // Move to next group sprintf (buff, "ID%d", group++); ini_locateKey (m_inifd, buff); p = data; p += sprintf (p, "$%04X", addr - base); } else { while (++laddr < addr) p += sprintf (p, ":-"); } } p += sprintf (p, ":$%02X", m_memory[addr]); laddr = addr; } if (ini_writeString (m_inifd, data) < 0) return false; // Error storing } return true; }
bool IniConfig::readString (ini_fd_t ini, const char *key, char *&str) { char *ret; size_t length; if (ini_locateKey (ini, key) < 0) { // Dosen't exist, add it (void) ini_writeString (ini, ""); } length = (size_t) ini_dataLength (ini); if (!length) return 0; ret = (char *) malloc (++length); if (!ret) return false; if (ini_readString (ini, ret, (uint) length) < 0) goto IniCofig_readString_error; str = ret; return true; IniCofig_readString_error: if (str) free (str); return false; }
bool IniConfig::readBool (ini_fd_t ini, const char *key, bool &boolean) { int b = boolean; if (ini_locateKey (ini, key) < 0) { // Dosen't exist, add it (void) ini_writeString (ini, ""); } if (ini_readBool (ini, &b) < 0) return false; boolean = (b != 0); return true; }
bool IniConfig::readInt (ini_fd_t ini, const char *key, int &value) { int i = value; if (ini_locateKey (ini, key) < 0) { // Dosen't exist, add it (void) ini_writeString (ini, ""); } if (ini_readInt (ini, &i) < 0) return false; value = i; return true; }