bool ConfigurationWrite(const struct Configuration* configuration, const char* path) { struct VFile* vf = VFileOpen(path, O_WRONLY | O_CREAT | O_TRUNC); if (!vf) { return false; } HashTableEnumerate(&configuration->root, _keyHandler, vf); HashTableEnumerate(&configuration->sections, _sectionHandler, vf); vf->close(vf); return true; }
bool ConfigurationWrite(const struct Configuration* configuration, const char* path) { FILE* file = fopen(path, "w"); if (!file) { return false; } HashTableEnumerate(&configuration->root, _keyHandler, file); HashTableEnumerate(&configuration->sections, _sectionHandler, file); fclose(file); return true; }
void mScriptBridgeDebuggerEntered(struct mScriptBridge* sb, enum mDebuggerEntryReason reason, struct mDebuggerEntryInfo* info) { struct mScriptDebuggerEntry entry = { .reason = reason, .info = info }; HashTableEnumerate(&sb->engines, _seDebuggerEnter, &entry); }
void ConfigurationEnumerate(const struct Configuration* configuration, const char* section, void (*handler)(const char* key, const char* value, void* user), void* user) { struct ConfigurationHandlerData handlerData = { handler, user }; const struct Table* currentSection = &configuration->root; if (section) { currentSection = HashTableLookup(&configuration->sections, section); } if (currentSection) { HashTableEnumerate(currentSection, _enumHandler, &handlerData); } }
static void _sectionHandler(const char* key, void* section, void* user) { char line[256]; struct VFile* vf = user; size_t len = snprintf(line, sizeof(line), "[%s]\n", key); if (len >= sizeof(line)) { len = sizeof(line) - 1; } vf->write(vf, line, len); HashTableEnumerate(section, _keyHandler, user); vf->write(vf, "\n", 1); }
bool mScriptBridgeLoadScript(struct mScriptBridge* sb, const char* name) { struct VFile* vf = VFileOpen(name, O_RDONLY); if (!vf) { return false; } struct mScriptInfo info = { .name = name, .vf = vf, .success = false }; HashTableEnumerate(&sb->engines, _seTryLoad, &info); vf->close(vf); return info.success; } bool mScriptBridgeLookupSymbol(struct mScriptBridge* sb, const char* name, int32_t* out) { struct mScriptSymbol info = { .name = name, .out = out, .success = false }; HashTableEnumerate(&sb->engines, _seLookupSymbol, &info); return info.success; }
bool ConfigurationWriteSection(const struct Configuration* configuration, const char* path, const char* section) { const struct Table* currentSection = &configuration->root; FILE* file = fopen(path, "w"); if (!file) { return false; } if (section) { currentSection = HashTableLookup(&configuration->sections, section); fprintf(file, "[%s]\n", section); } if (currentSection) { HashTableEnumerate(currentSection, _sectionHandler, file); } fclose(file); return true; }
bool ConfigurationWriteSection(const struct Configuration* configuration, const char* path, const char* section) { const struct Table* currentSection = &configuration->root; struct VFile* vf = VFileOpen(path, O_WRONLY | O_CREAT | O_APPEND); if (!vf) { return false; } if (section) { currentSection = HashTableLookup(&configuration->sections, section); char line[256]; size_t len = snprintf(line, sizeof(line), "[%s]\n", section); if (len >= sizeof(line)) { len = sizeof(line) - 1; } vf->write(vf, line, len); } if (currentSection) { HashTableEnumerate(currentSection, _sectionHandler, vf); } vf->close(vf); return true; }
static void _sectionHandler(const char* key, void* section, void* user) { fprintf(user, "[%s]\n", key); HashTableEnumerate(section, _keyHandler, user); fprintf(user, "\n"); }
void ConfigurationEnumerateSections(const struct Configuration* configuration, void (*handler)(const char* sectionName, void* user), void* user) { struct ConfigurationSectionHandlerData handlerData = { handler, user }; HashTableEnumerate(&configuration->sections, _sectionEnumHandler, &handlerData); }
void mScriptBridgeRun(struct mScriptBridge* sb) { HashTableEnumerate(&sb->engines, _seRun, NULL); }