add xml
This commit is contained in:
parent
56405d6241
commit
bcefd78599
9 changed files with 102 additions and 4 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0">
|
<?xml version="1.0"?>
|
||||||
<manifest>
|
<manifest>
|
||||||
<sfx base="sfx">
|
<sfx base="sfx">
|
||||||
<sfx name="bang">bang.ogg</sfx>
|
<sfx name="bang">bang.ogg</sfx>
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ file(GLOB GearSrc_SRC src/*.c)
|
||||||
add_library(GearSrc SHARED ${GearSrc_SRC})
|
add_library(GearSrc SHARED ${GearSrc_SRC})
|
||||||
target_include_directories(GearSrc PUBLIC include)
|
target_include_directories(GearSrc PUBLIC include)
|
||||||
target_compile_definitions(GearSrc PRIVATE _GEARSRC)
|
target_compile_definitions(GearSrc PRIVATE _GEARSRC)
|
||||||
target_link_libraries(GearSrc PRIVATE ode lz4)
|
target_link_libraries(GearSrc PRIVATE xemil ode lz4)
|
||||||
target_link_options(GearSrc PRIVATE -static-libgcc -static-libstdc++)
|
target_link_options(GearSrc PRIVATE -static-libgcc -static-libstdc++)
|
||||||
if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
||||||
target_link_libraries(GearSrc PRIVATE m)
|
target_link_libraries(GearSrc PRIVATE m)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0">
|
<?xml version="1.0"?>
|
||||||
<manifest>
|
<manifest>
|
||||||
<skybox base="skybox">
|
<skybox base="skybox">
|
||||||
<left>left.png</left>
|
<left>left.png</left>
|
||||||
|
|
|
||||||
|
|
@ -15,5 +15,6 @@
|
||||||
#include <GearSrc/Resource.h>
|
#include <GearSrc/Resource.h>
|
||||||
#include <GearSrc/Endian.h>
|
#include <GearSrc/Endian.h>
|
||||||
#include <GearSrc/SkyBox.h>
|
#include <GearSrc/SkyBox.h>
|
||||||
|
#include <GearSrc/XML.h>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,10 @@
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#ifdef _GEARSRC
|
||||||
|
#include <xemil.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(_GEARSRC) && defined(_WIN32)
|
#if defined(_GEARSRC) && defined(_WIN32)
|
||||||
#define GSDECL extern __declspec(dllexport)
|
#define GSDECL extern __declspec(dllexport)
|
||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32)
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ typedef struct _GSFile* GSFile;
|
||||||
typedef struct _GSResource* GSResource;
|
typedef struct _GSResource* GSResource;
|
||||||
typedef struct _GSGL* GSGL;
|
typedef struct _GSGL* GSGL;
|
||||||
typedef struct _GSSkyBox* GSSkyBox;
|
typedef struct _GSSkyBox* GSSkyBox;
|
||||||
|
typedef xemil_t* GSXML;
|
||||||
#else
|
#else
|
||||||
typedef void* GSClient;
|
typedef void* GSClient;
|
||||||
typedef void* GSServer;
|
typedef void* GSServer;
|
||||||
|
|
@ -56,6 +57,7 @@ typedef void* GSFile;
|
||||||
typedef void* GSResource;
|
typedef void* GSResource;
|
||||||
typedef void* GSGL;
|
typedef void* GSGL;
|
||||||
typedef void* GSSkyBox;
|
typedef void* GSSkyBox;
|
||||||
|
typedef void* GSXML;
|
||||||
#endif
|
#endif
|
||||||
typedef float GSNumber;
|
typedef float GSNumber;
|
||||||
typedef GSNumber GSVector2[2];
|
typedef GSNumber GSVector2[2];
|
||||||
|
|
@ -72,6 +74,7 @@ typedef void (*GSSleepCallback)(int ms);
|
||||||
struct _GSResourceKV {
|
struct _GSResourceKV {
|
||||||
char* key;
|
char* key;
|
||||||
GSResource value;
|
GSResource value;
|
||||||
|
GSXML xml;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef _GEARSRC
|
#ifdef _GEARSRC
|
||||||
|
|
|
||||||
18
engine/include/GearSrc/XML.h
Normal file
18
engine/include/GearSrc/XML.h
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
#ifndef __GEARSRC_XML_H__
|
||||||
|
#define __GEARSRC_XML_H__
|
||||||
|
|
||||||
|
#include <GearSrc/MachDep.h>
|
||||||
|
#include <GearSrc/TypeDefs.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
GSDECL GSXML GSXMLOpen(GSEngine engine, const char* path);
|
||||||
|
GSDECL void GSXMLClose(GSXML xml);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -4,8 +4,9 @@
|
||||||
#include <GearSrc/Log.h>
|
#include <GearSrc/Log.h>
|
||||||
#include <GearSrc/Client.h>
|
#include <GearSrc/Client.h>
|
||||||
#include <GearSrc/Server.h>
|
#include <GearSrc/Server.h>
|
||||||
#include <GearSrc/GL.h>
|
|
||||||
#include <GearSrc/Resource.h>
|
#include <GearSrc/Resource.h>
|
||||||
|
#include <GearSrc/XML.h>
|
||||||
|
#include <GearSrc/String.h>
|
||||||
|
|
||||||
#include <stb_ds.h>
|
#include <stb_ds.h>
|
||||||
|
|
||||||
|
|
@ -20,8 +21,26 @@ void GSInit(void) {
|
||||||
int GSEngineRegisterResource(GSEngine engine, const char* name, const char* path) {
|
int GSEngineRegisterResource(GSEngine engine, const char* name, const char* path) {
|
||||||
GSResource resource;
|
GSResource resource;
|
||||||
if((resource = GSResourceOpen(engine, path)) != NULL) {
|
if((resource = GSResourceOpen(engine, path)) != NULL) {
|
||||||
|
GSXML xl;
|
||||||
|
char* s = GSStringConcat(name, ":/manifest.xml");
|
||||||
|
int ind;
|
||||||
|
|
||||||
shput(engine->resource, name, resource);
|
shput(engine->resource, name, resource);
|
||||||
|
|
||||||
|
if((xl = GSXMLOpen(engine, s)) == NULL) {
|
||||||
|
free(s);
|
||||||
|
|
||||||
|
GSResourceClose(resource);
|
||||||
|
|
||||||
|
shdel(engine->resource, name);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
free(s);
|
||||||
|
|
||||||
|
ind = shgeti(engine->resource, name);
|
||||||
|
engine->resource[ind].xml = xl;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -76,6 +95,7 @@ GSEngine GSEngineCreate(GSEngineParam* param) {
|
||||||
void GSEngineDestroy(GSEngine engine) {
|
void GSEngineDestroy(GSEngine engine) {
|
||||||
int i;
|
int i;
|
||||||
for(i = 0; i < shlen(engine->resource); i++) {
|
for(i = 0; i < shlen(engine->resource); i++) {
|
||||||
|
GSXMLClose(engine->resource[i].xml);
|
||||||
GSResourceClose(engine->resource[i].value);
|
GSResourceClose(engine->resource[i].value);
|
||||||
}
|
}
|
||||||
shfree(engine->resource);
|
shfree(engine->resource);
|
||||||
|
|
|
||||||
52
engine/src/xml.c
Normal file
52
engine/src/xml.c
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
#include <GearSrc/XML.h>
|
||||||
|
|
||||||
|
#include <GearSrc/File.h>
|
||||||
|
|
||||||
|
typedef struct arg {
|
||||||
|
GSEngine engine;
|
||||||
|
const char* path;
|
||||||
|
} arg_t;
|
||||||
|
|
||||||
|
static int driver_open(xemil_t* handle) {
|
||||||
|
arg_t* arg = handle->drv_arg;
|
||||||
|
|
||||||
|
if((handle->drv_opaque = GSFileOpen(arg->engine, arg->path)) == NULL) return 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int driver_read(xemil_t* handle, void* data, int size) {
|
||||||
|
return GSFileRead(handle->drv_opaque, data, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void driver_close(xemil_t* handle) {
|
||||||
|
GSFileClose(handle->drv_opaque);
|
||||||
|
}
|
||||||
|
|
||||||
|
static xl_driver_t driver_rec = {
|
||||||
|
driver_open,
|
||||||
|
driver_read,
|
||||||
|
driver_close};
|
||||||
|
static xl_driver_t* driver = &driver_rec;
|
||||||
|
|
||||||
|
GSXML GSXMLOpen(GSEngine engine, const char* path) {
|
||||||
|
arg_t arg;
|
||||||
|
xemil_t* xl;
|
||||||
|
|
||||||
|
arg.engine = engine;
|
||||||
|
arg.path = path;
|
||||||
|
|
||||||
|
xl = xl_open(driver, &arg);
|
||||||
|
if(xl == NULL) return NULL;
|
||||||
|
if(!xl_parse(xl)) {
|
||||||
|
xl_close(xl);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return xl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GSXMLClose(GSXML xml) {
|
||||||
|
xl_close(xml);
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue