[Change] Thrown XML crap into a single header.
-- player.c currently uses this.
This commit is contained in:
parent
dc76d96432
commit
c4e7a8a9ee
@ -1,15 +1,12 @@
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include <libxml/parser.h>
|
||||
|
||||
#include "main.h"
|
||||
#include "log.h"
|
||||
#include "pack.h"
|
||||
#include "xml.h"
|
||||
#include "faction.h"
|
||||
|
||||
#define XML_NODE_START 1
|
||||
#define XML_NODE_TEXT 3
|
||||
|
||||
#define XML_FACTION_ID "Factions" // XML section id.
|
||||
#define XML_FACTION_TAG "faction"
|
||||
#define XML_ALLIANCE_ID "Alliances"
|
||||
|
14
src/outfit.c
14
src/outfit.c
@ -1,15 +1,12 @@
|
||||
#include <libxml/parser.h>
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "main.h"
|
||||
#include "log.h"
|
||||
#include "pack.h"
|
||||
#include "xml.h"
|
||||
#include "outfit.h"
|
||||
|
||||
#define XML_NODE_START 1
|
||||
#define XML_NODE_TEXT 3
|
||||
|
||||
#define XML_OUTFIT_ID "Outfits"
|
||||
#define XML_OUTFIT_TAG "outfit"
|
||||
|
||||
@ -82,7 +79,7 @@ static void outfit_parseSWeapon(Outfit* tmp, const xmlNodePtr parent) {
|
||||
|
||||
char str[PATH_MAX] = "\0";
|
||||
|
||||
while((node = node->next)) {
|
||||
do {
|
||||
// Load all the things.
|
||||
if(strcmp((char*)node->name, "speed")==0)
|
||||
tmp->speed = (double)atoi((char*)node->children->content);
|
||||
@ -106,7 +103,7 @@ static void outfit_parseSWeapon(Outfit* tmp, const xmlNodePtr parent) {
|
||||
tmp->damage_shield = atof((char*)cur->children->content);
|
||||
}
|
||||
}
|
||||
}
|
||||
} while((node = node->next));
|
||||
#define MELEMENT(o,s) if((o) == 0) WARN("Outfit '%s' missing '"s"' element", tmp->name)
|
||||
MELEMENT(tmp->accuracy, "tech");
|
||||
MELEMENT(tmp->delay, "delay");
|
||||
@ -128,8 +125,7 @@ static Outfit* outfit_parse(const xmlNodePtr parent) {
|
||||
if(tmp->name == NULL) WARN("Outfit in "OUTFIT_DATA" has invalid or no name");
|
||||
|
||||
node = parent->xmlChildrenNode;
|
||||
|
||||
while((node = node->next)) {
|
||||
do {
|
||||
// Load all the things.
|
||||
if(strcmp((char*)node->name, "general")==0) {
|
||||
cur = node->children;
|
||||
@ -160,7 +156,7 @@ static Outfit* outfit_parse(const xmlNodePtr parent) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while((node = node->next));
|
||||
#define MELEMENT(o,s) if((o) == 0) WARN("Outfit '%s' missing '"s"' element", tmp->name)
|
||||
MELEMENT(tmp->max, "max");
|
||||
MELEMENT(tmp->tech, "tech");
|
||||
|
14
src/pilot.c
14
src/pilot.c
@ -3,17 +3,13 @@
|
||||
#include <stdlib.h>
|
||||
#include <assert.h> // We don't need this?
|
||||
|
||||
#include <libxml/parser.h>
|
||||
|
||||
#include "main.h"
|
||||
#include "log.h"
|
||||
#include "weapon.h"
|
||||
#include "pack.h"
|
||||
#include "xml.h"
|
||||
#include "pilot.h"
|
||||
|
||||
#define XML_NODE_START 1
|
||||
#define XML_NODE_TEXT 3
|
||||
|
||||
#define XML_ID "Fleets" // XML section identifier.
|
||||
#define XML_FLEET "fleet"
|
||||
|
||||
@ -342,7 +338,7 @@ static Fleet* fleet_parse(const xmlNodePtr parent) {
|
||||
tmp->name = (char*)xmlGetProp(parent, (xmlChar*)"name"); // Already mallocs.
|
||||
if(tmp->name == NULL) WARN("Fleet in "FLEET_DATA" has invalid or no name");
|
||||
|
||||
while((node = node->next)) {
|
||||
do {
|
||||
// Load all the data.
|
||||
if(strcmp((char*)node->name, "faction")==0)
|
||||
tmp->faction = faction_get((char*)node->children->content);
|
||||
@ -350,7 +346,7 @@ static Fleet* fleet_parse(const xmlNodePtr parent) {
|
||||
tmp->ai = ai_getProfile((char*)node->children->content);
|
||||
else if(strcmp((char*)node->name, "pilots")==0) {
|
||||
cur = node->children;
|
||||
while((cur = cur->next)) {
|
||||
do {
|
||||
if(strcmp((char*)cur->name, "pilot")==0) {
|
||||
tmp->npilots++; // Pilot count.
|
||||
pilot = MALLOC_L(FleetPilot);
|
||||
@ -373,9 +369,9 @@ static Fleet* fleet_parse(const xmlNodePtr parent) {
|
||||
memcpy(tmp->pilots+(tmp->npilots-1), pilot, sizeof(FleetPilot));
|
||||
free(pilot);
|
||||
}
|
||||
} while((cur = cur->next));
|
||||
}
|
||||
}
|
||||
}
|
||||
} while((node = node->next));
|
||||
#define MELEMENT(o,s) if((o) == NULL) WARN("Fleet '%s' missing '"s"' element", tmp->name)
|
||||
MELEMENT(tmp->ai, "ai");
|
||||
MELEMENT(tmp->faction, "faction");
|
||||
|
43
src/player.c
43
src/player.c
@ -1,11 +1,11 @@
|
||||
#include <malloc.h>
|
||||
#include <libxml/parser.h>
|
||||
|
||||
#include "main.h"
|
||||
#include "pilot.h"
|
||||
#include "log.h"
|
||||
#include "opengl.h"
|
||||
#include "pack.h"
|
||||
#include "xml.h"
|
||||
#include "player.h"
|
||||
|
||||
#define XML_NODE_START 1
|
||||
@ -340,7 +340,7 @@ int gui_load(const char* name) {
|
||||
xmlDocPtr doc = xmlParseMemory(buf, bufsize);
|
||||
|
||||
node = doc->xmlChildrenNode;
|
||||
if(strcmp((char*)node->name, XML_GUI_ID)) {
|
||||
if(!xml_isNode(node, XML_GUI_ID)) {
|
||||
ERR("Malformed '"GUI_DATA"' file: missing root element '"XML_GUI_ID"'");
|
||||
return -1;
|
||||
}
|
||||
@ -352,8 +352,8 @@ int gui_load(const char* name) {
|
||||
}
|
||||
|
||||
do {
|
||||
if(node->type == XML_NODE_START && strcmp((char*)node->name, XML_GUI_TAG)==0) {
|
||||
tmp = (char*)xmlGetProp(node, (xmlChar*)"name"); // Mallocs.
|
||||
if(xml_isNode(node, XML_GUI_TAG)) {
|
||||
tmp = xml_nodeProp(node, "name"); // Mallocs.
|
||||
|
||||
// Is this the gui we are looking for?
|
||||
if(strcmp(tmp, name)==0) {
|
||||
@ -388,28 +388,28 @@ static void rect_parse(const xmlNodePtr parent, double* x, double* y, double* w,
|
||||
cur = parent->children;
|
||||
|
||||
do {
|
||||
if(strcmp((char*)cur->name, "x")==0) {
|
||||
if(xml_isNode(cur, "x")) {
|
||||
if(x != NULL) {
|
||||
*x = (double)atoi((char*)cur->children->content);
|
||||
param |= (1<<0);
|
||||
} else
|
||||
WARN("Extra parameter 'x' found for GUI node '%s'", parent->name);
|
||||
}
|
||||
else if(strcmp((char*)cur->name, "y")==0) {
|
||||
else if(xml_isNode(cur, "y")) {
|
||||
if(y != NULL) {
|
||||
*y = (double)atoi((char*)cur->children->content);
|
||||
param |= (1<<1);
|
||||
} else
|
||||
WARN("Extra parameter 'y' found for GUI node '%s'", parent->name);
|
||||
}
|
||||
else if(strcmp((char*)cur->name, "w")==0) {
|
||||
else if(xml_isNode(cur, "w")) {
|
||||
if(w != NULL) {
|
||||
*w = (double)atoi((char*)cur->children->content);
|
||||
param |= (1<<2);
|
||||
} else
|
||||
WARN("Extra parameter 'w' found for GUI node '%s'", parent->name);
|
||||
}
|
||||
else if(strcmp((char*)cur->name, "h")==0) {
|
||||
else if(xml_isNode(cur, "h")) {
|
||||
if(h != NULL) {
|
||||
*h = (double)atoi((char*)cur->children->content);
|
||||
param |= (1<<3);
|
||||
@ -437,7 +437,7 @@ static int gui_parse(const xmlNodePtr parent, const char* name) {
|
||||
|
||||
// Gfx.
|
||||
// Set a property and not a node because it must be loaded first.
|
||||
tmp2 = (char*)xmlGetProp(parent, (xmlChar*)"gfx");
|
||||
tmp2 = xml_nodeProp(parent, "gfx");
|
||||
if(tmp2 == NULL) {
|
||||
ERR("GUI '%s' has no gfx property", name);
|
||||
return -1;
|
||||
@ -465,14 +465,13 @@ static int gui_parse(const xmlNodePtr parent, const char* name) {
|
||||
node = parent->children;
|
||||
do {
|
||||
// Offset.
|
||||
if(strcmp((char*)node->name, "offset")==0) {
|
||||
if(xml_isNode(node, "offset")) {
|
||||
rect_parse(node, &x, &y, NULL, NULL);
|
||||
gui_xoff = x;
|
||||
gui_yoff = y;
|
||||
}
|
||||
else if(strcmp((char*)node->name, "radar")==0) {
|
||||
tmp = (char*)xmlGetProp(node, (xmlChar*)"type");
|
||||
|
||||
else if(xml_isNode(node, "radar")) {
|
||||
tmp = xml_nodeProp(node,"type");
|
||||
// Make sure type is valid.
|
||||
if(strcmp(tmp, "rectangle")==0) gui.radar.shape = RADAR_RECT;
|
||||
else if(strcmp(tmp, "circle")==0) gui.radar.shape = RADAR_CIRCLE;
|
||||
@ -492,24 +491,24 @@ static int gui_parse(const xmlNodePtr parent, const char* name) {
|
||||
VY(gui.pos_frame) + gui.gfx_frame->h - y);
|
||||
}
|
||||
// Health bars.
|
||||
else if(strcmp((char*)node->name, "health")==0) {
|
||||
else if(xml_isNode(node, "health")) {
|
||||
cur = node->children;
|
||||
do {
|
||||
if(strcmp((char*)cur->name, "shield")==0) {
|
||||
if(xml_isNode(cur, "shield")) {
|
||||
rect_parse(cur, &x, &y, &gui.shield.w, &gui.shield.h);
|
||||
vect_csetmin(&gui.pos_shield,
|
||||
VX(gui.pos_frame) + x,
|
||||
VY(gui.pos_frame) + gui.gfx_frame->h - y);
|
||||
}
|
||||
|
||||
if(strcmp((char*)cur->name, "armor")==0) {
|
||||
if(xml_isNode(cur, "armor")) {
|
||||
rect_parse(cur, &x, &y, &gui.armor.w, &gui.armor.h);
|
||||
vect_csetmin(&gui.pos_armor,
|
||||
VX(gui.pos_frame) + x,
|
||||
VY(gui.pos_frame) + gui.gfx_frame->h - y);
|
||||
}
|
||||
|
||||
if(strcmp((char*)cur->name, "energy")==0) {
|
||||
if(xml_isNode(cur, "energy")) {
|
||||
rect_parse(cur, &x, &y, &gui.energy.w, &gui.energy.h);
|
||||
vect_csetmin(&gui.pos_energy,
|
||||
VX(gui.pos_frame) + x,
|
||||
@ -518,31 +517,31 @@ static int gui_parse(const xmlNodePtr parent, const char* name) {
|
||||
} while((cur = cur->next));
|
||||
}
|
||||
// Target.
|
||||
else if(strcmp((char*)node->name, "target")==0) {
|
||||
else if(xml_isNode(node, "target")) {
|
||||
cur = node->children;
|
||||
do {
|
||||
if(strcmp((char*)cur->name, "gfx")==0) {
|
||||
if(xml_isNode(cur, "gfx")) {
|
||||
rect_parse(cur, &x, &y, NULL, NULL);
|
||||
vect_csetmin(&gui.pos_target,
|
||||
VX(gui.pos_frame) + x,
|
||||
VY(gui.pos_frame) + gui.gfx_frame->h - y - SHIP_TARGET_H);
|
||||
}
|
||||
|
||||
if(strcmp((char*)cur->name, "name")==0) {
|
||||
if(xml_isNode(cur, "name")) {
|
||||
rect_parse(cur, &x, &y, NULL, NULL);
|
||||
vect_csetmin(&gui.pos_target_name,
|
||||
VX(gui.pos_frame) + x,
|
||||
VY(gui.pos_frame) + gui.gfx_frame->h - y - gl_defFont.h);
|
||||
}
|
||||
|
||||
if(strcmp((char*)cur->name, "faction")==0) {
|
||||
if(xml_isNode(cur, "faction")) {
|
||||
rect_parse(cur, &x, &y, NULL, NULL);
|
||||
vect_csetmin(&gui.pos_target_faction,
|
||||
VX(gui.pos_frame) + x,
|
||||
VY(gui.pos_frame) + gui.gfx_frame->h - y - gui.smallFont.h);
|
||||
}
|
||||
|
||||
if(strcmp((char*)cur->name, "health")==0) {
|
||||
if(xml_isNode(cur, "health")) {
|
||||
rect_parse(cur, &x, &y, NULL, NULL);
|
||||
vect_csetmin(&gui.pos_target_health,
|
||||
VX(gui.pos_frame) + x,
|
||||
|
26
src/ship.c
26
src/ship.c
@ -1,14 +1,11 @@
|
||||
#include <string.h>
|
||||
#include <libxml/parser.h>
|
||||
|
||||
#include "main.h"
|
||||
#include "log.h"
|
||||
#include "pack.h"
|
||||
#include "xml.h"
|
||||
#include "ship.h"
|
||||
|
||||
#define XML_NODE_START 1
|
||||
#define XML_NODE_TEXT 3
|
||||
|
||||
#define XML_ID "Ships" // XML section identifier.
|
||||
#define XML_SHIP "ship"
|
||||
|
||||
@ -48,7 +45,8 @@ static Ship* ship_parse(xmlNodePtr parent) {
|
||||
|
||||
node = parent->xmlChildrenNode;
|
||||
|
||||
while((node = node->next)) { // Load all the data.
|
||||
do {
|
||||
// Load all the data.
|
||||
if(strcmp((char*)node->name, "GFX")==0) {
|
||||
snprintf(str, strlen((char*)node->children->content)+sizeof(SHIP_GFX)+sizeof(SHIP_EXT),
|
||||
SHIP_GFX"%s"SHIP_EXT, (char*)node->children->content);
|
||||
@ -65,18 +63,18 @@ static Ship* ship_parse(xmlNodePtr parent) {
|
||||
tmp->class = atoi((char*)node->children->content);
|
||||
else if(strcmp((char*)node->name, "movement")==0) {
|
||||
cur = node->children;
|
||||
while((cur = cur->next)) {
|
||||
do {
|
||||
if(strcmp((char*)cur->name, "thrust")==0)
|
||||
tmp->thrust = atoi((char*)cur->children->content);
|
||||
else if(strcmp((char*)cur->name, "turn")==0)
|
||||
tmp->turn = atoi((char*)cur->children->content);
|
||||
else if(strcmp((char*)cur->name, "speed")==0)
|
||||
tmp->speed = atoi((char*)cur->children->content);
|
||||
}
|
||||
} while((cur = cur->next));
|
||||
}
|
||||
else if(strcmp((char*)node->name, "health")==0) {
|
||||
cur = node->children;
|
||||
while((cur = cur->next)) {
|
||||
do {
|
||||
if(strcmp((char*)cur->name, "armor")==0)
|
||||
tmp->armor = (double)atoi((char*)cur->children->content);
|
||||
else if(strcmp((char*)cur->name, "shield")==0)
|
||||
@ -89,11 +87,11 @@ static Ship* ship_parse(xmlNodePtr parent) {
|
||||
tmp->shield_regen = (double)(atoi((char*)cur->children->content))/60.0;
|
||||
else if(strcmp((char*)cur->name, "energy_regen")==0)
|
||||
tmp->energy_regen = (double)(atoi((char*)cur->children->content))/60.0;
|
||||
}
|
||||
} while((cur = cur->next));
|
||||
}
|
||||
else if(strcmp((char*)node->name, "characteristics")==0) {
|
||||
cur = node->children;
|
||||
while((cur = cur->next)) {
|
||||
do {
|
||||
if(strcmp((char*)cur->name, "crew")==0)
|
||||
tmp->crew = atoi((char*)cur->children->content);
|
||||
else if(strcmp((char*)cur->name, "mass")==0)
|
||||
@ -102,11 +100,11 @@ static Ship* ship_parse(xmlNodePtr parent) {
|
||||
tmp->cap_weapon = atoi((char*)cur->children->content);
|
||||
else if(strcmp((char*)cur->name, "cap_cargo")==0)
|
||||
tmp->cap_cargo = atoi((char*)cur->children->content);
|
||||
}
|
||||
} while((cur = cur->next));
|
||||
}
|
||||
else if(strcmp((char*)node->name, "outfits")==0) {
|
||||
cur = node->children;
|
||||
while((cur = cur->next)) {
|
||||
do {
|
||||
if(strcmp((char*)cur->name, "outfit")==0) {
|
||||
otmp = MALLOC_L(ShipOutfit);
|
||||
otmp->data = outfit_get((char*)cur->children->content);
|
||||
@ -123,9 +121,9 @@ static Ship* ship_parse(xmlNodePtr parent) {
|
||||
ocur->next = otmp;
|
||||
}
|
||||
}
|
||||
} while((cur = cur->next));
|
||||
}
|
||||
}
|
||||
}
|
||||
} while((node = node->next));
|
||||
|
||||
tmp->thrust *= tmp->mass; // Helps keep number sane.
|
||||
|
||||
|
37
src/space.c
37
src/space.c
@ -1,4 +1,3 @@
|
||||
#include <libxml/parser.h>
|
||||
#include <malloc.h>
|
||||
#include <math.h>
|
||||
|
||||
@ -8,11 +7,9 @@
|
||||
#include "pack.h"
|
||||
#include "space.h"
|
||||
#include "faction.h"
|
||||
#include "xml.h"
|
||||
#include "player.h"
|
||||
|
||||
#define XML_NODE_START 1
|
||||
#define XML_NODE_TEST 3
|
||||
|
||||
#define XML_PLANET_ID "Planets"
|
||||
#define XML_PLANET_TAG "planet"
|
||||
|
||||
@ -246,7 +243,7 @@ static Planet* planet_get(const char* name) {
|
||||
|
||||
node = node->xmlChildrenNode;
|
||||
|
||||
while((node = node->next)) {
|
||||
do {
|
||||
if(strcmp((char*)node->name, "GFX")==0) {
|
||||
cur = node->children;
|
||||
if(strcmp((char*)cur->name, "text")==0) {
|
||||
@ -257,7 +254,7 @@ static Planet* planet_get(const char* name) {
|
||||
}
|
||||
else if(strcmp((char*)node->name, "pos")==0) {
|
||||
cur = node->children;
|
||||
while((cur = cur->next)) {
|
||||
do {
|
||||
if(strcmp((char*)cur->name, "x")==0) {
|
||||
flags |= FLAG_XSET;
|
||||
tmp->pos.x = atof((char*)cur->children->content);
|
||||
@ -266,18 +263,18 @@ static Planet* planet_get(const char* name) {
|
||||
flags |= FLAG_YSET;
|
||||
tmp->pos.y = atof((char*)cur->children->content);
|
||||
}
|
||||
}
|
||||
} while((cur = cur->next));
|
||||
}
|
||||
else if(strcmp((char*)node->name, "general")==0) {
|
||||
cur = node->children;
|
||||
while((cur = cur->next)) {
|
||||
do {
|
||||
if(strcmp((char*)cur->name, "class")==0)
|
||||
tmp->class = planetclass_get(cur->children->content[0]);
|
||||
else if(strcmp((char*)cur->name, "faction")==0)
|
||||
tmp->faction = faction_get((char*)cur->children->content);
|
||||
} while((cur = cur->next));
|
||||
}
|
||||
}
|
||||
}
|
||||
} while((node = node->next));
|
||||
break;
|
||||
} else
|
||||
free(tstr); // xmlGetProp mallocs the string.
|
||||
@ -317,11 +314,11 @@ static StarSystem* system_parse(const xmlNodePtr parent) {
|
||||
|
||||
node = parent->xmlChildrenNode;
|
||||
|
||||
while((node = node->next)) {
|
||||
do {
|
||||
// Load all the things!
|
||||
if(strcmp((char*)node->name, "pos")==0) {
|
||||
cur = node->children;
|
||||
while((cur = cur->next)) {
|
||||
do {
|
||||
if(strcmp((char*)cur->name, "x")==0) {
|
||||
flags |= FLAG_XSET;
|
||||
tmp->pos.x = atof((char*)cur->children->content);
|
||||
@ -330,11 +327,11 @@ static StarSystem* system_parse(const xmlNodePtr parent) {
|
||||
flags |= FLAG_YSET;
|
||||
tmp->pos.y = atof((char*)cur->children->content);
|
||||
}
|
||||
}
|
||||
} while((cur = cur->next));
|
||||
}
|
||||
else if(strcmp((char*)node->name, "general")==0) {
|
||||
cur = node->children;
|
||||
while((cur = cur->next)) {
|
||||
do {
|
||||
if(strcmp((char*)cur->name, "stars")==0) // Non-zero.
|
||||
tmp->stars = atoi((char*)cur->children->content);
|
||||
else if(strcmp((char*)cur->name, "asteroids")==0) {
|
||||
@ -345,24 +342,24 @@ static StarSystem* system_parse(const xmlNodePtr parent) {
|
||||
flags |= FLAG_INTEFERENCESET;
|
||||
tmp->interference = atof((char*)cur->children->content);
|
||||
}
|
||||
}
|
||||
}while((cur = cur->next));
|
||||
}
|
||||
// Load all the planets.
|
||||
else if(strcmp((char*)node->name, "planets")==0) {
|
||||
cur = node->children;
|
||||
while((cur = cur->next)) {
|
||||
do {
|
||||
if(strcmp((char*)cur->name, "planet")==0) {
|
||||
planet = planet_get((const char*)cur->children->content);
|
||||
tmp->planets = realloc(tmp->planets, sizeof(Planet)*(++tmp->nplanets));
|
||||
memcpy(tmp->planets+(tmp->nplanets-1), planet, sizeof(Planet));
|
||||
free(planet);
|
||||
}
|
||||
}
|
||||
} while((cur = cur->next));
|
||||
}
|
||||
// Load all the fleets.
|
||||
else if(strcmp((char*)node->name, "fleets")==0) {
|
||||
cur = node->children;
|
||||
while((cur = cur->next)) {
|
||||
do {
|
||||
if(strcmp((char*)cur->name, "fleet")==0) {
|
||||
fleet = CALLOC_L(SystemFleet);
|
||||
fleet->fleet = fleet_get((const char*)cur->children->content);
|
||||
@ -380,9 +377,9 @@ static StarSystem* system_parse(const xmlNodePtr parent) {
|
||||
memcpy(tmp->fleets+(tmp->nfleets-1), fleet, sizeof(SystemFleet));
|
||||
free(fleet);
|
||||
}
|
||||
} while((cur = cur->next));
|
||||
}
|
||||
}
|
||||
}
|
||||
} while((node = node->next));
|
||||
// Check elements.
|
||||
#define MELEMENT(o,s) if((o) == 0) WARN("Star System '%s' missing '"s"' element", tmp->name)
|
||||
MELEMENT(flags&FLAG_XSET, "x");
|
||||
|
13
src/xml.h
Normal file
13
src/xml.h
Normal file
@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
#include "libxml/parser.h"
|
||||
|
||||
#define XML_NODE_START 1
|
||||
#define XML_NODE_TEXT 3
|
||||
|
||||
// Check if node n is of name s.
|
||||
#define xml_isNode(n,s) ((n)->type == XML_NODE_START) && \
|
||||
(strcmp((char*)(n)->name, s)==0)
|
||||
|
||||
#define xml_nodeProp(n,s) (char*)xmlGetProp(n, (xmlChar*)s)
|
||||
|
Loading…
Reference in New Issue
Block a user