/* * Parse the <dither-matrix> node. */ static int stp_xml_process_dither_matrix(stp_mxml_node_t *dm, /* The dither matrix node */ const char *file) /* Source file */ { const char *value; int x = -1; int y = -1; value = stp_mxmlElementGetAttr(dm, "x-aspect"); x = stp_xmlstrtol(value); value = stp_mxmlElementGetAttr(dm, "y-aspect"); y = stp_xmlstrtol(value); stp_deprintf(STP_DBG_XML, "stp_xml_process_dither_matrix: x=%d, y=%d\n", x, y); stp_xml_dither_cache_set(x, y, file); return 1; }
void stp_escp2_load_model(const stp_vars_t *v, int model) { stp_list_t *dirlist = stpi_data_path(); stp_list_item_t *item; char buf[1024]; int found = 0; stp_xml_init(); sprintf(buf, "escp2/model/model_%d.xml", model); item = stp_list_get_start(dirlist); while (item) { const char *dn = (const char *) stp_list_item_get_data(item); char *fn = stpi_path_merge(dn, buf); stp_mxml_node_t *doc = stp_mxmlLoadFromFile(NULL, fn, STP_MXML_NO_CALLBACK); stp_free(fn); if (doc) { stp_mxml_node_t *node = stp_mxmlFindElement(doc, doc, "escp2:model", NULL, NULL, STP_MXML_DESCEND); if (node) { const char *stmp = stp_mxmlElementGetAttr(node, "id"); STPI_ASSERT(stmp && stp_xmlstrtol(stmp) == model, v); load_model_from_file(v, node, model); found = 1; } stp_mxmlDelete(doc); if (found) break; } item = stp_list_item_next(item); } stp_xml_exit(); stp_list_destroy(dirlist); STPI_ASSERT(found, v); }
static void load_subchannel(stp_mxml_node_t *node, stp_mxml_node_t *root, physical_subchannel_t *icl) { const char *name; stp_mxml_node_t *child = node->child; name = stp_mxmlElementGetAttr(node, "color"); if (name) icl->color = stp_xmlstrtol(name); name = stp_mxmlElementGetAttr(node, "subchannel"); if (name) icl->subchannel = stp_xmlstrtol(name); else icl->subchannel = -1; name = stp_mxmlElementGetAttr(node, "headOffset"); if (name) icl->head_offset = stp_xmlstrtol(name); name = stp_mxmlElementGetAttr(node, "name"); if (name) icl->name = stp_strdup(name); name = stp_mxmlElementGetAttr(node, "text"); if (name) icl->text = stp_strdup(name); while (child) { if (child->type == STP_MXML_ELEMENT) { const char *param = child->value.element.name; name = stp_mxmlElementGetAttr(child, "name"); if (name && !strcmp(param, "ChannelDensityParam")) icl->channel_density = stp_strdup(name); else if (name && !strcmp(param, "SubchannelTransitionParam")) icl->subchannel_transition = stp_strdup(name); else if (name && !strcmp(param, "SubchannelValueParam")) icl->subchannel_value = stp_strdup(name); else if (name && !strcmp(param, "SubchannelScaleParam")) icl->subchannel_scale = stp_strdup(name); else if (!strcmp(param, "SplitChannels")) { if (stp_mxmlElementGetAttr(child, "count")) icl->split_channel_count = stp_xmlstrtoul(stp_mxmlElementGetAttr(child, "count")); if (icl->split_channel_count > 0) { char *endptr; int count = 0; stp_mxml_node_t *cchild = child->child; icl->split_channels = stp_zalloc(sizeof(short) * icl->split_channel_count); while (cchild && count < icl->split_channel_count) { if (cchild->type == STP_MXML_TEXT) { unsigned val = strtoul(cchild->value.text.string, &endptr, 0); if (endptr) icl->split_channels[count++] = val; } cchild = cchild->next; } } } } child = child->next; } }