OpenFPGA/vpr7_x2p/vpr/SRC/base/read_settings.c

79 lines
1.3 KiB
C

#include <string.h>
#include <assert.h>
#include "read_xml_util.h"
#include "read_settings.h"
static int process_settings(ezxml_t Cur, char ** outv)
{
int count = 0;
if (!Cur)
return(0);
while (Cur->attr[count])
{
if (outv)
{
if (! (count % 2))
{
outv[count] = (char *)my_malloc(strlen(Cur->attr[count]) + 3);
strcpy(&outv[count][2], Cur->attr[count]);
outv[count][0] = outv[count][1] = '-';
}
else
outv[count] = Cur->attr[count];
}
count++;
}
Cur = Cur->child;
while (Cur)
{
if (outv)
{
outv[count] = (char *)my_malloc(strlen(Cur->name) + 3);
strcpy(&outv[count][2], Cur->name);
outv[count][0] = outv[count][1] = '-';
}
count++;
if (strlen(Cur->txt))
{
if (outv) outv[count] = Cur->txt;
count++;
}
Cur = Cur->ordered;
}
return count;
}
int read_settings_file(char * file_name, char *** outv)
{
ezxml_t Cur;
int count;
Cur = ezxml_parse_file(file_name);
assert(*outv == NULL);
assert(! strcmp("settings",Cur->name));
Cur = FindElement(Cur, "arguments", FALSE);
count = process_settings(Cur, *outv);
/* prepend the settings file name */
count++;
*outv = (char **)my_malloc(count * sizeof(char *));
(*outv)[0] = my_strdup(file_name);
if (count)
{
process_settings(Cur, &((*outv)[1]));
}
return(count);
}