diff options
-rw-r--r-- | settings.c | 21 | ||||
-rw-r--r-- | settings.h | 5 |
2 files changed, 22 insertions, 4 deletions
diff --git a/settings.c b/settings.c index 2b6ffe644..fa1c7d69d 100644 --- a/settings.c +++ b/settings.c @@ -93,6 +93,7 @@ struct IniGroup { IniItem *item, **last_item; IniGroup *next; IniFile *ini; + IniGroupType type; // type of group }; struct IniFile { @@ -121,6 +122,10 @@ static IniGroup *ini_group_alloc(IniFile *ini, const char *grpt, int len) IniGroup *grp = pool_alloc(&ini->pool, sizeof(IniGroup)); grp->ini = ini; grp->name = pool_strdup(&ini->pool, grpt, len); + if(!strcmp(grp->name, "newgrf")) + grp->type = IGT_LIST; + else + grp->type = IGT_VARIABLES; grp->next = NULL; grp->item = NULL; grp->comment = NULL; @@ -212,6 +217,12 @@ static IniFile *ini_load(const char *filename) comment_size = 0; } + // for list items, the name and value are the same: + if( group->type == IGT_LIST ) { + item->value = item->name; + continue; + } + // find start of parameter while (*t == '=' || *t == ' ' || *t == '\t') t++; item->value = pool_strdup(&ini->pool, t, e - t); @@ -282,7 +293,10 @@ static bool ini_save(const char *filename, IniFile *ini) fprintf(f, "[%s]\n", group->name); for(item = group->item; item; item = item->next) { if (item->comment) fputs(item->comment, f); - fprintf(f, "%s = %s\n", item->name, item->value ? item->value : ""); + if(group->type==IGT_LIST) + fprintf(f, "%s\n", item->value ? item->value : ""); + else + fprintf(f, "%s = %s\n", item->name, item->value ? item->value : ""); } } if (ini->comment) fputs(ini->comment, f); @@ -901,13 +915,12 @@ static void LoadGrfSettings(IniFile *ini) if (!group) return; + item = group->item; for(i=0; i!=lengthof(_newgrf_files); i++) { - char buf[3]; - sprintf(buf, "%d", i); - item = ini_getitem(group, buf, false); if (!item) break; _newgrf_files[i] = strdup(item->value); + item = item->next; } } diff --git a/settings.h b/settings.h index 6e55862ed..ed6545924 100644 --- a/settings.h +++ b/settings.h @@ -28,6 +28,11 @@ enum SettingDescType { SDT_BOOL = SDT_BOOLX | SDT_UINT8, }; +typedef enum { + IGT_VARIABLES = 0, // values of the form "landscape = hilly" + IGT_LIST = 1, // a list of values, seperated by \n and terminated by the next group block +} IniGroupType; + typedef struct SettingDesc { const char *name; int flags; |