diff --git a/drmr2_hydrogen.c b/drmr2_hydrogen.c index ec6e31e..93edc4f 100644 --- a/drmr2_hydrogen.c +++ b/drmr2_hydrogen.c @@ -87,6 +87,7 @@ struct kit_info { struct hp_info { char scan_only; char in_info; + char in_component_list; char in_instrument_list; char in_instrument; char in_layer; @@ -105,22 +106,30 @@ startElement(void *userData, const char *name, const char **atts) struct hp_info* info = (struct hp_info*)userData; info->cur_off = 0; if (info->in_info) { - if (info->in_instrument) { - if (!strcmp(name,"layer") && !info->scan_only) { - info->in_layer = 1; - info->cur_layer = malloc(sizeof(struct instrument_layer)); - memset(info->cur_layer,0,sizeof(struct instrument_layer)); + if (!info->in_component_list) { + if (!strcmp(name,"componentList")) { + info->in_component_list = 1; } - } - if (info->in_instrument_list) { - if (!strcmp(name,"instrument")) { - info->in_instrument = 1; - info->cur_instrument = malloc(sizeof(struct instrument_info)); - memset(info->cur_instrument,0,sizeof(struct instrument_info)); + else + { + if (info->in_instrument) { + if (!strcmp(name,"layer") && !info->scan_only) { + info->in_layer = 1; + info->cur_layer = malloc(sizeof(struct instrument_layer)); + memset(info->cur_layer,0,sizeof(struct instrument_layer)); + } + } + if (info->in_instrument_list) { + if (!strcmp(name,"instrument")) { + info->in_instrument = 1; + info->cur_instrument = malloc(sizeof(struct instrument_info)); + memset(info->cur_instrument,0,sizeof(struct instrument_info)); + } + } else { + if (!strcmp(name,"instrumentList")) + info->in_instrument_list = 1; + } } - } else { - if (!strcmp(name,"instrumentList")) - info->in_instrument_list = 1; } } else { if (!strcmp(name,"drumkit_info")) @@ -135,7 +144,7 @@ endElement(void *userData, const char *name) if (info->cur_off == MAX_CHAR_DATA) info->cur_off--; info->cur_buf[info->cur_off]='\0'; - if (info->in_info && !info->in_instrument_list && !strcmp(name,"name")) + if (info->in_info && !info->in_component_list && !info->in_instrument_list && !strcmp(name,"name")) info->kit_info->name = strdup(info->cur_buf); if (info->scan_only && info->in_info && !info->in_instrument_list && !strcmp(name,"info")) info->kit_info->desc = strdup(info->cur_buf); @@ -187,6 +196,7 @@ endElement(void *userData, const char *name) info->cur_instrument = NULL; info->in_instrument = 0; } + if (info->in_component_list && !strcmp(name,"componentList")) info->in_component_list = 0; if (info->in_instrument_list && !strcmp(name,"instrumentList")) info->in_instrument_list = 0; if (info->in_info && !strcmp(name,"drumkit_info")) info->in_info = 0; } @@ -232,9 +242,9 @@ static char* expand_path(char* path, char* buf) { -static int *compar_kit(const void *p1, const void *p2) +static int compar_kit(const void *p1, const void *p2) { - return (int) strcmp( (* (scanned_kit **) p1)->name, (* (scanned_kit **) p2)->name); + return (int) strcmp( (* (scanned_kit **) p1)->name, (* (scanned_kit **) p2)->name); } @@ -339,7 +349,7 @@ kits* scan_kits() { cp = 0; struct kit_list * cur_k = scanned_kits; while(cur_k) { - //printf("found kit: %s\nat:%s\n\n",cur_k->skit->name,cur_k->skit->path); + // printf("found kit: %s\nat:%s\n\n",cur_k->skit->name,cur_k->skit->path); cur_k = cur_k->next; cp++; }