char *intfstream_gets(intfstream_internal_t *intf, char *buffer, size_t len) { if (!intf) return NULL; switch (intf->type) { case INTFSTREAM_FILE: return filestream_gets(intf->file.fp, buffer, len); case INTFSTREAM_MEMORY: return memstream_gets(intf->memory.fp, buffer, len); } return NULL; }
char *intfstream_gets(intfstream_internal_t *intf, char *buffer, size_t len) { if (!intf) return NULL; switch (intf->type) { case INTFSTREAM_FILE: return filestream_gets(intf->file.fp, buffer, len); case INTFSTREAM_MEMORY: return memstream_gets(intf->memory.fp, buffer, len); case INTFSTREAM_CHD: #ifdef HAVE_CHD return chdstream_gets(intf->chd.fp, buffer, len); #else break; #endif } return NULL; }
char *rfgets(char *buffer, int maxCount, RFILE* stream) { return filestream_gets(stream, buffer, maxCount); }
/** * video_shader_resolve_parameters: * @conf : Preset file to read from. * @shader : Shader passes handle. * * Resolves all shader parameters belonging to shaders. * * Returns: true (1) if successful, otherwise false (0). **/ bool video_shader_resolve_parameters(config_file_t *conf, struct video_shader *shader) { unsigned i; struct video_shader_parameter *param = &shader->parameters[0]; shader->num_parameters = 0; /* Find all parameters in our shaders. */ for (i = 0; i < shader->passes; i++) { #ifdef HAVE_SLANG /* First try to use the more robust slang implementation to support #includes. */ /* FIXME: The check for slang can be removed if it's sufficiently tested for * GLSL/Cg as well, it should be the same implementation. */ if (string_is_equal(path_get_extension(shader->pass[i].source.path), "slang") && slang_preprocess_parse_parameters(shader->pass[i].source.path, shader)) continue; /* If that doesn't work, fallback to the old path. * Ideally, we'd get rid of this path sooner or later. */ #endif char line[4096]; RFILE *file = filestream_open(shader->pass[i].source.path, RFILE_MODE_READ_TEXT, -1); if (!file) continue; line[0] = '\0'; while (shader->num_parameters < ARRAY_SIZE(shader->parameters) && filestream_gets(file, line, sizeof(line))) { int ret = sscanf(line, "#pragma parameter %63s \"%63[^\"]\" %f %f %f %f", param->id, param->desc, ¶m->initial, ¶m->minimum, ¶m->maximum, ¶m->step); if (ret < 5) continue; param->id[63] = '\0'; param->desc[63] = '\0'; if (ret == 5) param->step = 0.1f * (param->maximum - param->minimum); RARCH_LOG("Found #pragma parameter %s (%s) %f %f %f %f\n", param->desc, param->id, param->initial, param->minimum, param->maximum, param->step); param->current = param->initial; shader->num_parameters++; param++; } filestream_close(file); } if (conf && !video_shader_resolve_current_parameters(conf, shader)) return false; return true; }
static bool playlist_read_file( playlist_t *playlist, const char *path) { unsigned i; char buf[PLAYLIST_ENTRIES][1024]; RFILE *file = filestream_open( path, RFILE_MODE_READ_TEXT, -1); for (i = 0; i < PLAYLIST_ENTRIES; i++) buf[i][0] = '\0'; /* If playlist file does not exist, * create an empty playlist instead. */ if (!file) return true; for (playlist->size = 0; playlist->size < playlist->cap; ) { unsigned i; struct playlist_entry *entry = NULL; for (i = 0; i < PLAYLIST_ENTRIES; i++) { char *last = NULL; *buf[i] = '\0'; if (!filestream_gets(file, buf[i], sizeof(buf[i]))) goto end; /* Read playlist entry and terminate string with NUL character * regardless of Windows or Unix line endings */ if((last = strrchr(buf[i], '\r'))) *last = '\0'; else if((last = strrchr(buf[i], '\n'))) *last = '\0'; } entry = &playlist->entries[playlist->size]; if (!*buf[2] || !*buf[3]) continue; if (*buf[0]) entry->path = strdup(buf[0]); if (*buf[1]) entry->label = strdup(buf[1]); entry->core_path = strdup(buf[2]); entry->core_name = strdup(buf[3]); if (*buf[4]) entry->crc32 = strdup(buf[4]); if (*buf[5]) entry->db_name = strdup(buf[5]); playlist->size++; } end: filestream_close(file); return true; }
/** * video_shader_resolve_parameters: * @conf : Preset file to read from. * @shader : Shader passes handle. * * Resolves all shader parameters belonging to shaders. * * Returns: true (1) if successful, otherwise false (0). **/ bool video_shader_resolve_parameters(config_file_t *conf, struct video_shader *shader) { unsigned i; struct video_shader_parameter *param = &shader->parameters[shader->num_parameters]; shader->num_parameters = 0; /* Find all parameters in our shaders. */ for (i = 0; i < shader->passes; i++) { char line[4096] = {0}; RFILE *file = filestream_open(shader->pass[i].source.path, RFILE_MODE_READ_TEXT, -1); if (!file) continue; while (shader->num_parameters < ARRAY_SIZE(shader->parameters) && filestream_gets(file, line, sizeof(line))) { int ret = sscanf(line, "#pragma parameter %63s \"%63[^\"]\" %f %f %f %f", param->id, param->desc, ¶m->initial, ¶m->minimum, ¶m->maximum, ¶m->step); if (ret < 5) continue; param->id[63] = '\0'; param->desc[63] = '\0'; if (ret == 5) param->step = 0.1f * (param->maximum - param->minimum); RARCH_LOG("Found #pragma parameter %s (%s) %f %f %f %f\n", param->desc, param->id, param->initial, param->minimum, param->maximum, param->step); param->current = param->initial; shader->num_parameters++; param++; } filestream_close(file); } if (conf) { /* Read in parameters which override the defaults. */ char parameters[4096] = {0}; const char *id = NULL; char *save = NULL; if (!config_get_array(conf, "parameters", parameters, sizeof(parameters))) return true; for (id = strtok_r(parameters, ";", &save); id; id = strtok_r(NULL, ";", &save)) { struct video_shader_parameter *parameter = (struct video_shader_parameter*) video_shader_parse_find_parameter(shader->parameters, shader->num_parameters, id); if (!parameter) { RARCH_WARN("[CGP/GLSLP]: Parameter %s is set in the preset, but no shader uses this parameter, ignoring.\n", id); continue; } if (!config_get_float(conf, id, ¶meter->current)) RARCH_WARN("[CGP/GLSLP]: Parameter %s is not set in preset.\n", id); } } return true; }