From 4035dd0837d18b6f7966b9ec1dc34ad49acaabc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1zaro=20Vieira?= Date: Mon, 3 Apr 2017 02:06:57 -0300 Subject: [PATCH] Initial commit --- Makefile | 216 ++++ README.md | 18 + libxml2/include/libxml/DOCBparser.h | 96 ++ libxml2/include/libxml/HTMLparser.h | 306 +++++ libxml2/include/libxml/HTMLtree.h | 147 +++ libxml2/include/libxml/SAX.h | 173 +++ libxml2/include/libxml/SAX2.h | 178 +++ libxml2/include/libxml/c14n.h | 126 ++ libxml2/include/libxml/catalog.h | 182 +++ libxml2/include/libxml/chvalid.h | 230 ++++ libxml2/include/libxml/debugXML.h | 217 ++++ libxml2/include/libxml/dict.h | 86 ++ libxml2/include/libxml/encoding.h | 240 ++++ libxml2/include/libxml/entities.h | 151 +++ libxml2/include/libxml/globals.h | 509 ++++++++ libxml2/include/libxml/hash.h | 233 ++++ libxml2/include/libxml/list.h | 137 +++ libxml2/include/libxml/nanoftp.h | 163 +++ libxml2/include/libxml/nanohttp.h | 81 ++ libxml2/include/libxml/parser.h | 1241 +++++++++++++++++++ libxml2/include/libxml/parserInternals.h | 644 ++++++++++ libxml2/include/libxml/pattern.h | 100 ++ libxml2/include/libxml/relaxng.h | 217 ++++ libxml2/include/libxml/schemasInternals.h | 958 +++++++++++++++ libxml2/include/libxml/schematron.h | 142 +++ libxml2/include/libxml/threads.h | 84 ++ libxml2/include/libxml/tree.h | 1311 +++++++++++++++++++++ libxml2/include/libxml/uri.h | 94 ++ libxml2/include/libxml/valid.h | 458 +++++++ libxml2/include/libxml/xinclude.h | 129 ++ libxml2/include/libxml/xlink.h | 189 +++ libxml2/include/libxml/xmlIO.h | 366 ++++++ libxml2/include/libxml/xmlautomata.h | 146 +++ libxml2/include/libxml/xmlerror.h | 945 +++++++++++++++ libxml2/include/libxml/xmlexports.h | 162 +++ libxml2/include/libxml/xmlmemory.h | 224 ++++ libxml2/include/libxml/xmlmodule.h | 57 + libxml2/include/libxml/xmlreader.h | 428 +++++++ libxml2/include/libxml/xmlregexp.h | 222 ++++ libxml2/include/libxml/xmlsave.h | 88 ++ libxml2/include/libxml/xmlschemas.h | 246 ++++ libxml2/include/libxml/xmlschemastypes.h | 151 +++ libxml2/include/libxml/xmlstring.h | 140 +++ libxml2/include/libxml/xmlunicode.h | 202 ++++ libxml2/include/libxml/xmlversion.h | 489 ++++++++ libxml2/include/libxml/xmlwriter.h | 488 ++++++++ libxml2/include/libxml/xpath.h | 557 +++++++++ libxml2/include/libxml/xpathInternals.h | 632 ++++++++++ libxml2/include/libxml/xpointer.h | 114 ++ libxml2/lib/libxml2.a | Bin 0 -> 2715444 bytes meta/icon.png | Bin 0 -> 1714 bytes meta/meta.xml | 9 + src/common/common.h | 36 + src/common/fs_defs.h | 62 + src/common/os_defs.h | 25 + src/common/types.h | 7 + src/dynamic_libs/acp_functions.c | 40 + src/dynamic_libs/acp_functions.h | 42 + src/dynamic_libs/aoc_functions.c | 58 + src/dynamic_libs/aoc_functions.h | 58 + src/dynamic_libs/ax_functions.c | 118 ++ src/dynamic_libs/ax_functions.h | 64 + src/dynamic_libs/curl_functions.c | 54 + src/dynamic_libs/curl_functions.h | 51 + src/dynamic_libs/fs_defs.h | 61 + src/dynamic_libs/fs_functions.c | 131 ++ src/dynamic_libs/fs_functions.h | 95 ++ src/dynamic_libs/gx2_functions.c | 173 +++ src/dynamic_libs/gx2_functions.h | 211 ++++ src/dynamic_libs/gx2_types.h | 699 +++++++++++ src/dynamic_libs/os_functions.c | 344 ++++++ src/dynamic_libs/os_functions.h | 182 +++ src/dynamic_libs/os_types.h | 27 + src/dynamic_libs/padscore_functions.c | 61 + src/dynamic_libs/padscore_functions.h | 171 +++ src/dynamic_libs/socket_functions.c | 81 ++ src/dynamic_libs/socket_functions.h | 108 ++ src/dynamic_libs/sys_functions.c | 51 + src/dynamic_libs/sys_functions.h | 48 + src/dynamic_libs/syshid_functions.c | 78 ++ src/dynamic_libs/syshid_functions.h | 90 ++ src/dynamic_libs/vpad_functions.c | 55 + src/dynamic_libs/vpad_functions.h | 114 ++ src/entry.c | 15 + src/fs/fs_utils.c | 182 +++ src/fs/fs_utils.h | 23 + src/fs/sd_fat_devoptab.c | 1019 ++++++++++++++++ src/fs/sd_fat_devoptab.h | 38 + src/lib_easy.c | 177 +++ src/lib_easy.h | 66 ++ src/link.ld | 40 + src/main.c | 264 +++++ src/main.h | 16 + src/savemng.c | 150 +++ src/savemng.h | 26 + src/system/memory.c | 198 ++++ src/system/memory.h | 42 + src/utils/logger.c | 88 ++ src/utils/logger.h | 26 + src/utils/utils.h | 47 + 100 files changed, 20534 insertions(+) create mode 100644 Makefile create mode 100644 README.md create mode 100644 libxml2/include/libxml/DOCBparser.h create mode 100644 libxml2/include/libxml/HTMLparser.h create mode 100644 libxml2/include/libxml/HTMLtree.h create mode 100644 libxml2/include/libxml/SAX.h create mode 100644 libxml2/include/libxml/SAX2.h create mode 100644 libxml2/include/libxml/c14n.h create mode 100644 libxml2/include/libxml/catalog.h create mode 100644 libxml2/include/libxml/chvalid.h create mode 100644 libxml2/include/libxml/debugXML.h create mode 100644 libxml2/include/libxml/dict.h create mode 100644 libxml2/include/libxml/encoding.h create mode 100644 libxml2/include/libxml/entities.h create mode 100644 libxml2/include/libxml/globals.h create mode 100644 libxml2/include/libxml/hash.h create mode 100644 libxml2/include/libxml/list.h create mode 100644 libxml2/include/libxml/nanoftp.h create mode 100644 libxml2/include/libxml/nanohttp.h create mode 100644 libxml2/include/libxml/parser.h create mode 100644 libxml2/include/libxml/parserInternals.h create mode 100644 libxml2/include/libxml/pattern.h create mode 100644 libxml2/include/libxml/relaxng.h create mode 100644 libxml2/include/libxml/schemasInternals.h create mode 100644 libxml2/include/libxml/schematron.h create mode 100644 libxml2/include/libxml/threads.h create mode 100644 libxml2/include/libxml/tree.h create mode 100644 libxml2/include/libxml/uri.h create mode 100644 libxml2/include/libxml/valid.h create mode 100644 libxml2/include/libxml/xinclude.h create mode 100644 libxml2/include/libxml/xlink.h create mode 100644 libxml2/include/libxml/xmlIO.h create mode 100644 libxml2/include/libxml/xmlautomata.h create mode 100644 libxml2/include/libxml/xmlerror.h create mode 100644 libxml2/include/libxml/xmlexports.h create mode 100644 libxml2/include/libxml/xmlmemory.h create mode 100644 libxml2/include/libxml/xmlmodule.h create mode 100644 libxml2/include/libxml/xmlreader.h create mode 100644 libxml2/include/libxml/xmlregexp.h create mode 100644 libxml2/include/libxml/xmlsave.h create mode 100644 libxml2/include/libxml/xmlschemas.h create mode 100644 libxml2/include/libxml/xmlschemastypes.h create mode 100644 libxml2/include/libxml/xmlstring.h create mode 100644 libxml2/include/libxml/xmlunicode.h create mode 100644 libxml2/include/libxml/xmlversion.h create mode 100644 libxml2/include/libxml/xmlwriter.h create mode 100644 libxml2/include/libxml/xpath.h create mode 100644 libxml2/include/libxml/xpathInternals.h create mode 100644 libxml2/include/libxml/xpointer.h create mode 100644 libxml2/lib/libxml2.a create mode 100644 meta/icon.png create mode 100644 meta/meta.xml create mode 100644 src/common/common.h create mode 100644 src/common/fs_defs.h create mode 100644 src/common/os_defs.h create mode 100644 src/common/types.h create mode 100644 src/dynamic_libs/acp_functions.c create mode 100644 src/dynamic_libs/acp_functions.h create mode 100644 src/dynamic_libs/aoc_functions.c create mode 100644 src/dynamic_libs/aoc_functions.h create mode 100644 src/dynamic_libs/ax_functions.c create mode 100644 src/dynamic_libs/ax_functions.h create mode 100644 src/dynamic_libs/curl_functions.c create mode 100644 src/dynamic_libs/curl_functions.h create mode 100644 src/dynamic_libs/fs_defs.h create mode 100644 src/dynamic_libs/fs_functions.c create mode 100644 src/dynamic_libs/fs_functions.h create mode 100644 src/dynamic_libs/gx2_functions.c create mode 100644 src/dynamic_libs/gx2_functions.h create mode 100644 src/dynamic_libs/gx2_types.h create mode 100644 src/dynamic_libs/os_functions.c create mode 100644 src/dynamic_libs/os_functions.h create mode 100644 src/dynamic_libs/os_types.h create mode 100644 src/dynamic_libs/padscore_functions.c create mode 100644 src/dynamic_libs/padscore_functions.h create mode 100644 src/dynamic_libs/socket_functions.c create mode 100644 src/dynamic_libs/socket_functions.h create mode 100644 src/dynamic_libs/sys_functions.c create mode 100644 src/dynamic_libs/sys_functions.h create mode 100644 src/dynamic_libs/syshid_functions.c create mode 100644 src/dynamic_libs/syshid_functions.h create mode 100644 src/dynamic_libs/vpad_functions.c create mode 100644 src/dynamic_libs/vpad_functions.h create mode 100644 src/entry.c create mode 100644 src/fs/fs_utils.c create mode 100644 src/fs/fs_utils.h create mode 100644 src/fs/sd_fat_devoptab.c create mode 100644 src/fs/sd_fat_devoptab.h create mode 100644 src/lib_easy.c create mode 100644 src/lib_easy.h create mode 100644 src/link.ld create mode 100644 src/main.c create mode 100644 src/main.h create mode 100644 src/savemng.c create mode 100644 src/savemng.h create mode 100644 src/system/memory.c create mode 100644 src/system/memory.h create mode 100644 src/utils/logger.c create mode 100644 src/utils/logger.h create mode 100644 src/utils/utils.h diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..70b0024 --- /dev/null +++ b/Makefile @@ -0,0 +1,216 @@ +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif +ifeq ($(strip $(DEVKITPRO)),) +$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") +endif +export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) +export LIBOGC_INC := $(DEVKITPRO)/libogc/include +export LIBOGC_LIB := $(DEVKITPRO)/libogc/lib/wii +export PORTLIBS := $(DEVKITPRO)/portlibs/ppc + +PREFIX := powerpc-eabi- + +export AS := $(PREFIX)as +export CC := $(PREFIX)gcc +export CXX := $(PREFIX)g++ +export AR := $(PREFIX)ar +export OBJCOPY := $(PREFIX)objcopy + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := savemii +BUILD := build +BUILD_DBG := $(TARGET)_dbg +SOURCES := src \ + src/common \ + src/dynamic_libs \ + src/fs \ + src/system \ + src/utils +DATA := +INCLUDES := src +DEFS := +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +CFLAGS := -std=gnu11 -mrvl -mcpu=750 -meabi -mhard-float -ffast-math \ + -O3 -D__wiiu__ -Wall -Wextra -Wno-unused-parameter -Wno-strict-aliasing $(INCLUDE) $(DEFS) +CXXFLAGS := -std=gnu++11 -mrvl -mcpu=750 -meabi -mhard-float -ffast-math \ + -O3 -Wall -Wextra -Wno-unused-parameter -Wno-strict-aliasing $(INCLUDE) $(DEFS) +ASFLAGS := -mregnames +LDFLAGS := -nostartfiles -Wl,-Map,$(notdir $@).map,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,_malloc_r,-wrap,_free_r,-wrap,_realloc_r,-wrap,_calloc_r,-wrap,_memalign_r,-wrap,_malloc_usable_size_r,-wrap,valloc,-wrap,_valloc_r,-wrap,_pvalloc_r,--gc-sections + +#--------------------------------------------------------------------------------- +Q := @ +MAKEFLAGS += --no-print-directory +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lfat -liosuhax -lxml2 + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(CURDIR) \ + $(DEVKITPPC)/lib + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- +export PROJECTDIR := $(CURDIR) +export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ + $(sFILES:.s=.o) $(SFILES:.S=.o) \ + $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) -I$(LIBOGC_INC) \ + -I$(PORTLIBS)/include -I$(PORTLIBS)/include/freetype2 -I$(CURDIR)/libxml2/include + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + -L$(PORTLIBS)/lib -L$(CURDIR)/libxml2/lib + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean install + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(CURDIR)/*.elf $(BUILD_DBG).elf + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).elf: $(OFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.elf: link.ld $(OFILES) + @echo "linking ... $(TARGET).elf" + $(Q)$(LD) -n -T $^ $(LDFLAGS) -o ../$(BUILD_DBG).elf $(LIBPATHS) $(LIBS) + $(Q)$(OBJCOPY) -S -R .comment -R .gnu.attributes ../$(BUILD_DBG).elf $@ + +../data/loader.bin: + $(MAKE) -C ../loader clean + $(MAKE) -C ../loader +#--------------------------------------------------------------------------------- +%.a: +#--------------------------------------------------------------------------------- + @echo $(notdir $@) + @rm -f $@ + @$(AR) -rc $@ $^ + +#--------------------------------------------------------------------------------- +%.o: %.cpp + @echo $(notdir $<) + @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -c $< -o $@ $(ERROR_FILTER) + +#--------------------------------------------------------------------------------- +%.o: %.c + @echo $(notdir $<) + @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) -c $< -o $@ $(ERROR_FILTER) + +#--------------------------------------------------------------------------------- +%.o: %.S + @echo $(notdir $<) + @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER) + +#--------------------------------------------------------------------------------- +%.png.o : %.png + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +#--------------------------------------------------------------------------------- +%.ttf.o : %.ttf + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +#--------------------------------------------------------------------------------- +%.bin.o : %.bin + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +#--------------------------------------------------------------------------------- +%.wav.o : %.wav + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +#--------------------------------------------------------------------------------- +%.mp3.o : %.mp3 + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +#--------------------------------------------------------------------------------- +%.ogg.o : %.ogg + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +#--------------------------------------------------------------------------------- +%.zip.o : %.zip + @echo $(notdir $<) + @bin2s -a 32 $< | $(AS) -o $(@) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/README.md b/README.md new file mode 100644 index 0000000..d7cbd59 --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +# savemii +Wii U Save Manager + +**You need to run iosuhax/mocha cfw first in order for this homebrew to work.** + +This homebrew allows you to backup your Wii U savegames to the SD card and also restore them. +Up to 256 backups can be made per title. +Backups are stored in sd:/wiiu/apps/savemii/backups. + +Please report any issues that may occur. + +TODO: +- add vWii support + +Credits: +- dimok, for libiosuhax and libfat for Wii U +- rw-r-r-0644, for lib_easy +- dimok again, because he's awesome :3 \ No newline at end of file diff --git a/libxml2/include/libxml/DOCBparser.h b/libxml2/include/libxml/DOCBparser.h new file mode 100644 index 0000000..9394fa7 --- /dev/null +++ b/libxml2/include/libxml/DOCBparser.h @@ -0,0 +1,96 @@ +/* + * Summary: old DocBook SGML parser + * Description: interface for a DocBook SGML non-verifying parser + * This code is DEPRECATED, and should not be used anymore. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __DOCB_PARSER_H__ +#define __DOCB_PARSER_H__ +#include + +#ifdef LIBXML_DOCB_ENABLED + +#include +#include + +#ifndef IN_LIBXML +#ifdef __GNUC__ +#warning "The DOCBparser module has been deprecated in libxml2-2.6.0" +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Most of the back-end structures from XML and SGML are shared. + */ +typedef xmlParserCtxt docbParserCtxt; +typedef xmlParserCtxtPtr docbParserCtxtPtr; +typedef xmlSAXHandler docbSAXHandler; +typedef xmlSAXHandlerPtr docbSAXHandlerPtr; +typedef xmlParserInput docbParserInput; +typedef xmlParserInputPtr docbParserInputPtr; +typedef xmlDocPtr docbDocPtr; + +/* + * There is only few public functions. + */ +XMLPUBFUN int XMLCALL + docbEncodeEntities(unsigned char *out, + int *outlen, + const unsigned char *in, + int *inlen, int quoteChar); + +XMLPUBFUN docbDocPtr XMLCALL + docbSAXParseDoc (xmlChar *cur, + const char *encoding, + docbSAXHandlerPtr sax, + void *userData); +XMLPUBFUN docbDocPtr XMLCALL + docbParseDoc (xmlChar *cur, + const char *encoding); +XMLPUBFUN docbDocPtr XMLCALL + docbSAXParseFile (const char *filename, + const char *encoding, + docbSAXHandlerPtr sax, + void *userData); +XMLPUBFUN docbDocPtr XMLCALL + docbParseFile (const char *filename, + const char *encoding); + +/** + * Interfaces for the Push mode. + */ +XMLPUBFUN void XMLCALL + docbFreeParserCtxt (docbParserCtxtPtr ctxt); +XMLPUBFUN docbParserCtxtPtr XMLCALL + docbCreatePushParserCtxt(docbSAXHandlerPtr sax, + void *user_data, + const char *chunk, + int size, + const char *filename, + xmlCharEncoding enc); +XMLPUBFUN int XMLCALL + docbParseChunk (docbParserCtxtPtr ctxt, + const char *chunk, + int size, + int terminate); +XMLPUBFUN docbParserCtxtPtr XMLCALL + docbCreateFileParserCtxt(const char *filename, + const char *encoding); +XMLPUBFUN int XMLCALL + docbParseDocument (docbParserCtxtPtr ctxt); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_DOCB_ENABLED */ + +#endif /* __DOCB_PARSER_H__ */ diff --git a/libxml2/include/libxml/HTMLparser.h b/libxml2/include/libxml/HTMLparser.h new file mode 100644 index 0000000..551186c --- /dev/null +++ b/libxml2/include/libxml/HTMLparser.h @@ -0,0 +1,306 @@ +/* + * Summary: interface for an HTML 4.0 non-verifying parser + * Description: this module implements an HTML 4.0 non-verifying parser + * with API compatible with the XML parser ones. It should + * be able to parse "real world" HTML, even if severely + * broken from a specification point of view. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __HTML_PARSER_H__ +#define __HTML_PARSER_H__ +#include +#include + +#ifdef LIBXML_HTML_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Most of the back-end structures from XML and HTML are shared. + */ +typedef xmlParserCtxt htmlParserCtxt; +typedef xmlParserCtxtPtr htmlParserCtxtPtr; +typedef xmlParserNodeInfo htmlParserNodeInfo; +typedef xmlSAXHandler htmlSAXHandler; +typedef xmlSAXHandlerPtr htmlSAXHandlerPtr; +typedef xmlParserInput htmlParserInput; +typedef xmlParserInputPtr htmlParserInputPtr; +typedef xmlDocPtr htmlDocPtr; +typedef xmlNodePtr htmlNodePtr; + +/* + * Internal description of an HTML element, representing HTML 4.01 + * and XHTML 1.0 (which share the same structure). + */ +typedef struct _htmlElemDesc htmlElemDesc; +typedef htmlElemDesc *htmlElemDescPtr; +struct _htmlElemDesc { + const char *name; /* The tag name */ + char startTag; /* Whether the start tag can be implied */ + char endTag; /* Whether the end tag can be implied */ + char saveEndTag; /* Whether the end tag should be saved */ + char empty; /* Is this an empty element ? */ + char depr; /* Is this a deprecated element ? */ + char dtd; /* 1: only in Loose DTD, 2: only Frameset one */ + char isinline; /* is this a block 0 or inline 1 element */ + const char *desc; /* the description */ + +/* NRK Jan.2003 + * New fields encapsulating HTML structure + * + * Bugs: + * This is a very limited representation. It fails to tell us when + * an element *requires* subelements (we only have whether they're + * allowed or not), and it doesn't tell us where CDATA and PCDATA + * are allowed. Some element relationships are not fully represented: + * these are flagged with the word MODIFIER + */ + const char** subelts; /* allowed sub-elements of this element */ + const char* defaultsubelt; /* subelement for suggested auto-repair + if necessary or NULL */ + const char** attrs_opt; /* Optional Attributes */ + const char** attrs_depr; /* Additional deprecated attributes */ + const char** attrs_req; /* Required attributes */ +}; + +/* + * Internal description of an HTML entity. + */ +typedef struct _htmlEntityDesc htmlEntityDesc; +typedef htmlEntityDesc *htmlEntityDescPtr; +struct _htmlEntityDesc { + unsigned int value; /* the UNICODE value for the character */ + const char *name; /* The entity name */ + const char *desc; /* the description */ +}; + +/* + * There is only few public functions. + */ +XMLPUBFUN const htmlElemDesc * XMLCALL + htmlTagLookup (const xmlChar *tag); +XMLPUBFUN const htmlEntityDesc * XMLCALL + htmlEntityLookup(const xmlChar *name); +XMLPUBFUN const htmlEntityDesc * XMLCALL + htmlEntityValueLookup(unsigned int value); + +XMLPUBFUN int XMLCALL + htmlIsAutoClosed(htmlDocPtr doc, + htmlNodePtr elem); +XMLPUBFUN int XMLCALL + htmlAutoCloseTag(htmlDocPtr doc, + const xmlChar *name, + htmlNodePtr elem); +XMLPUBFUN const htmlEntityDesc * XMLCALL + htmlParseEntityRef(htmlParserCtxtPtr ctxt, + const xmlChar **str); +XMLPUBFUN int XMLCALL + htmlParseCharRef(htmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + htmlParseElement(htmlParserCtxtPtr ctxt); + +XMLPUBFUN htmlParserCtxtPtr XMLCALL + htmlNewParserCtxt(void); + +XMLPUBFUN htmlParserCtxtPtr XMLCALL + htmlCreateMemoryParserCtxt(const char *buffer, + int size); + +XMLPUBFUN int XMLCALL + htmlParseDocument(htmlParserCtxtPtr ctxt); +XMLPUBFUN htmlDocPtr XMLCALL + htmlSAXParseDoc (xmlChar *cur, + const char *encoding, + htmlSAXHandlerPtr sax, + void *userData); +XMLPUBFUN htmlDocPtr XMLCALL + htmlParseDoc (xmlChar *cur, + const char *encoding); +XMLPUBFUN htmlDocPtr XMLCALL + htmlSAXParseFile(const char *filename, + const char *encoding, + htmlSAXHandlerPtr sax, + void *userData); +XMLPUBFUN htmlDocPtr XMLCALL + htmlParseFile (const char *filename, + const char *encoding); +XMLPUBFUN int XMLCALL + UTF8ToHtml (unsigned char *out, + int *outlen, + const unsigned char *in, + int *inlen); +XMLPUBFUN int XMLCALL + htmlEncodeEntities(unsigned char *out, + int *outlen, + const unsigned char *in, + int *inlen, int quoteChar); +XMLPUBFUN int XMLCALL + htmlIsScriptAttribute(const xmlChar *name); +XMLPUBFUN int XMLCALL + htmlHandleOmittedElem(int val); + +#ifdef LIBXML_PUSH_ENABLED +/** + * Interfaces for the Push mode. + */ +XMLPUBFUN htmlParserCtxtPtr XMLCALL + htmlCreatePushParserCtxt(htmlSAXHandlerPtr sax, + void *user_data, + const char *chunk, + int size, + const char *filename, + xmlCharEncoding enc); +XMLPUBFUN int XMLCALL + htmlParseChunk (htmlParserCtxtPtr ctxt, + const char *chunk, + int size, + int terminate); +#endif /* LIBXML_PUSH_ENABLED */ + +XMLPUBFUN void XMLCALL + htmlFreeParserCtxt (htmlParserCtxtPtr ctxt); + +/* + * New set of simpler/more flexible APIs + */ +/** + * xmlParserOption: + * + * This is the set of XML parser options that can be passed down + * to the xmlReadDoc() and similar calls. + */ +typedef enum { + HTML_PARSE_RECOVER = 1<<0, /* Relaxed parsing */ + HTML_PARSE_NODEFDTD = 1<<2, /* do not default a doctype if not found */ + HTML_PARSE_NOERROR = 1<<5, /* suppress error reports */ + HTML_PARSE_NOWARNING= 1<<6, /* suppress warning reports */ + HTML_PARSE_PEDANTIC = 1<<7, /* pedantic error reporting */ + HTML_PARSE_NOBLANKS = 1<<8, /* remove blank nodes */ + HTML_PARSE_NONET = 1<<11,/* Forbid network access */ + HTML_PARSE_NOIMPLIED= 1<<13,/* Do not add implied html/body... elements */ + HTML_PARSE_COMPACT = 1<<16,/* compact small text nodes */ + HTML_PARSE_IGNORE_ENC=1<<21 /* ignore internal document encoding hint */ +} htmlParserOption; + +XMLPUBFUN void XMLCALL + htmlCtxtReset (htmlParserCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + htmlCtxtUseOptions (htmlParserCtxtPtr ctxt, + int options); +XMLPUBFUN htmlDocPtr XMLCALL + htmlReadDoc (const xmlChar *cur, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN htmlDocPtr XMLCALL + htmlReadFile (const char *URL, + const char *encoding, + int options); +XMLPUBFUN htmlDocPtr XMLCALL + htmlReadMemory (const char *buffer, + int size, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN htmlDocPtr XMLCALL + htmlReadFd (int fd, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN htmlDocPtr XMLCALL + htmlReadIO (xmlInputReadCallback ioread, + xmlInputCloseCallback ioclose, + void *ioctx, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN htmlDocPtr XMLCALL + htmlCtxtReadDoc (xmlParserCtxtPtr ctxt, + const xmlChar *cur, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN htmlDocPtr XMLCALL + htmlCtxtReadFile (xmlParserCtxtPtr ctxt, + const char *filename, + const char *encoding, + int options); +XMLPUBFUN htmlDocPtr XMLCALL + htmlCtxtReadMemory (xmlParserCtxtPtr ctxt, + const char *buffer, + int size, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN htmlDocPtr XMLCALL + htmlCtxtReadFd (xmlParserCtxtPtr ctxt, + int fd, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN htmlDocPtr XMLCALL + htmlCtxtReadIO (xmlParserCtxtPtr ctxt, + xmlInputReadCallback ioread, + xmlInputCloseCallback ioclose, + void *ioctx, + const char *URL, + const char *encoding, + int options); + +/* NRK/Jan2003: further knowledge of HTML structure + */ +typedef enum { + HTML_NA = 0 , /* something we don't check at all */ + HTML_INVALID = 0x1 , + HTML_DEPRECATED = 0x2 , + HTML_VALID = 0x4 , + HTML_REQUIRED = 0xc /* VALID bit set so ( & HTML_VALID ) is TRUE */ +} htmlStatus ; + +/* Using htmlElemDesc rather than name here, to emphasise the fact + that otherwise there's a lookup overhead +*/ +XMLPUBFUN htmlStatus XMLCALL htmlAttrAllowed(const htmlElemDesc*, const xmlChar*, int) ; +XMLPUBFUN int XMLCALL htmlElementAllowedHere(const htmlElemDesc*, const xmlChar*) ; +XMLPUBFUN htmlStatus XMLCALL htmlElementStatusHere(const htmlElemDesc*, const htmlElemDesc*) ; +XMLPUBFUN htmlStatus XMLCALL htmlNodeStatus(const htmlNodePtr, int) ; +/** + * htmlDefaultSubelement: + * @elt: HTML element + * + * Returns the default subelement for this element + */ +#define htmlDefaultSubelement(elt) elt->defaultsubelt +/** + * htmlElementAllowedHereDesc: + * @parent: HTML parent element + * @elt: HTML element + * + * Checks whether an HTML element description may be a + * direct child of the specified element. + * + * Returns 1 if allowed; 0 otherwise. + */ +#define htmlElementAllowedHereDesc(parent,elt) \ + htmlElementAllowedHere((parent), (elt)->name) +/** + * htmlRequiredAttrs: + * @elt: HTML element + * + * Returns the attributes required for the specified element. + */ +#define htmlRequiredAttrs(elt) (elt)->attrs_req + + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_HTML_ENABLED */ +#endif /* __HTML_PARSER_H__ */ diff --git a/libxml2/include/libxml/HTMLtree.h b/libxml2/include/libxml/HTMLtree.h new file mode 100644 index 0000000..c0e1103 --- /dev/null +++ b/libxml2/include/libxml/HTMLtree.h @@ -0,0 +1,147 @@ +/* + * Summary: specific APIs to process HTML tree, especially serialization + * Description: this module implements a few function needed to process + * tree in an HTML specific way. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __HTML_TREE_H__ +#define __HTML_TREE_H__ + +#include +#include +#include +#include + +#ifdef LIBXML_HTML_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * HTML_TEXT_NODE: + * + * Macro. A text node in a HTML document is really implemented + * the same way as a text node in an XML document. + */ +#define HTML_TEXT_NODE XML_TEXT_NODE +/** + * HTML_ENTITY_REF_NODE: + * + * Macro. An entity reference in a HTML document is really implemented + * the same way as an entity reference in an XML document. + */ +#define HTML_ENTITY_REF_NODE XML_ENTITY_REF_NODE +/** + * HTML_COMMENT_NODE: + * + * Macro. A comment in a HTML document is really implemented + * the same way as a comment in an XML document. + */ +#define HTML_COMMENT_NODE XML_COMMENT_NODE +/** + * HTML_PRESERVE_NODE: + * + * Macro. A preserved node in a HTML document is really implemented + * the same way as a CDATA section in an XML document. + */ +#define HTML_PRESERVE_NODE XML_CDATA_SECTION_NODE +/** + * HTML_PI_NODE: + * + * Macro. A processing instruction in a HTML document is really implemented + * the same way as a processing instruction in an XML document. + */ +#define HTML_PI_NODE XML_PI_NODE + +XMLPUBFUN htmlDocPtr XMLCALL + htmlNewDoc (const xmlChar *URI, + const xmlChar *ExternalID); +XMLPUBFUN htmlDocPtr XMLCALL + htmlNewDocNoDtD (const xmlChar *URI, + const xmlChar *ExternalID); +XMLPUBFUN const xmlChar * XMLCALL + htmlGetMetaEncoding (htmlDocPtr doc); +XMLPUBFUN int XMLCALL + htmlSetMetaEncoding (htmlDocPtr doc, + const xmlChar *encoding); +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void XMLCALL + htmlDocDumpMemory (xmlDocPtr cur, + xmlChar **mem, + int *size); +XMLPUBFUN void XMLCALL + htmlDocDumpMemoryFormat (xmlDocPtr cur, + xmlChar **mem, + int *size, + int format); +XMLPUBFUN int XMLCALL + htmlDocDump (FILE *f, + xmlDocPtr cur); +XMLPUBFUN int XMLCALL + htmlSaveFile (const char *filename, + xmlDocPtr cur); +XMLPUBFUN int XMLCALL + htmlNodeDump (xmlBufferPtr buf, + xmlDocPtr doc, + xmlNodePtr cur); +XMLPUBFUN void XMLCALL + htmlNodeDumpFile (FILE *out, + xmlDocPtr doc, + xmlNodePtr cur); +XMLPUBFUN int XMLCALL + htmlNodeDumpFileFormat (FILE *out, + xmlDocPtr doc, + xmlNodePtr cur, + const char *encoding, + int format); +XMLPUBFUN int XMLCALL + htmlSaveFileEnc (const char *filename, + xmlDocPtr cur, + const char *encoding); +XMLPUBFUN int XMLCALL + htmlSaveFileFormat (const char *filename, + xmlDocPtr cur, + const char *encoding, + int format); + +XMLPUBFUN void XMLCALL + htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, + xmlDocPtr doc, + xmlNodePtr cur, + const char *encoding, + int format); +XMLPUBFUN void XMLCALL + htmlDocContentDumpOutput(xmlOutputBufferPtr buf, + xmlDocPtr cur, + const char *encoding); +XMLPUBFUN void XMLCALL + htmlDocContentDumpFormatOutput(xmlOutputBufferPtr buf, + xmlDocPtr cur, + const char *encoding, + int format); +XMLPUBFUN void XMLCALL + htmlNodeDumpOutput (xmlOutputBufferPtr buf, + xmlDocPtr doc, + xmlNodePtr cur, + const char *encoding); + +#endif /* LIBXML_OUTPUT_ENABLED */ + +XMLPUBFUN int XMLCALL + htmlIsBooleanAttr (const xmlChar *name); + + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_HTML_ENABLED */ + +#endif /* __HTML_TREE_H__ */ + diff --git a/libxml2/include/libxml/SAX.h b/libxml2/include/libxml/SAX.h new file mode 100644 index 0000000..20093ce --- /dev/null +++ b/libxml2/include/libxml/SAX.h @@ -0,0 +1,173 @@ +/* + * Summary: Old SAX version 1 handler, deprecated + * Description: DEPRECATED set of SAX version 1 interfaces used to + * build the DOM tree. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + + +#ifndef __XML_SAX_H__ +#define __XML_SAX_H__ + +#include +#include +#include +#include +#include + +#ifdef LIBXML_LEGACY_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif +XMLPUBFUN const xmlChar * XMLCALL + getPublicId (void *ctx); +XMLPUBFUN const xmlChar * XMLCALL + getSystemId (void *ctx); +XMLPUBFUN void XMLCALL + setDocumentLocator (void *ctx, + xmlSAXLocatorPtr loc); + +XMLPUBFUN int XMLCALL + getLineNumber (void *ctx); +XMLPUBFUN int XMLCALL + getColumnNumber (void *ctx); + +XMLPUBFUN int XMLCALL + isStandalone (void *ctx); +XMLPUBFUN int XMLCALL + hasInternalSubset (void *ctx); +XMLPUBFUN int XMLCALL + hasExternalSubset (void *ctx); + +XMLPUBFUN void XMLCALL + internalSubset (void *ctx, + const xmlChar *name, + const xmlChar *ExternalID, + const xmlChar *SystemID); +XMLPUBFUN void XMLCALL + externalSubset (void *ctx, + const xmlChar *name, + const xmlChar *ExternalID, + const xmlChar *SystemID); +XMLPUBFUN xmlEntityPtr XMLCALL + getEntity (void *ctx, + const xmlChar *name); +XMLPUBFUN xmlEntityPtr XMLCALL + getParameterEntity (void *ctx, + const xmlChar *name); +XMLPUBFUN xmlParserInputPtr XMLCALL + resolveEntity (void *ctx, + const xmlChar *publicId, + const xmlChar *systemId); + +XMLPUBFUN void XMLCALL + entityDecl (void *ctx, + const xmlChar *name, + int type, + const xmlChar *publicId, + const xmlChar *systemId, + xmlChar *content); +XMLPUBFUN void XMLCALL + attributeDecl (void *ctx, + const xmlChar *elem, + const xmlChar *fullname, + int type, + int def, + const xmlChar *defaultValue, + xmlEnumerationPtr tree); +XMLPUBFUN void XMLCALL + elementDecl (void *ctx, + const xmlChar *name, + int type, + xmlElementContentPtr content); +XMLPUBFUN void XMLCALL + notationDecl (void *ctx, + const xmlChar *name, + const xmlChar *publicId, + const xmlChar *systemId); +XMLPUBFUN void XMLCALL + unparsedEntityDecl (void *ctx, + const xmlChar *name, + const xmlChar *publicId, + const xmlChar *systemId, + const xmlChar *notationName); + +XMLPUBFUN void XMLCALL + startDocument (void *ctx); +XMLPUBFUN void XMLCALL + endDocument (void *ctx); +XMLPUBFUN void XMLCALL + attribute (void *ctx, + const xmlChar *fullname, + const xmlChar *value); +XMLPUBFUN void XMLCALL + startElement (void *ctx, + const xmlChar *fullname, + const xmlChar **atts); +XMLPUBFUN void XMLCALL + endElement (void *ctx, + const xmlChar *name); +XMLPUBFUN void XMLCALL + reference (void *ctx, + const xmlChar *name); +XMLPUBFUN void XMLCALL + characters (void *ctx, + const xmlChar *ch, + int len); +XMLPUBFUN void XMLCALL + ignorableWhitespace (void *ctx, + const xmlChar *ch, + int len); +XMLPUBFUN void XMLCALL + processingInstruction (void *ctx, + const xmlChar *target, + const xmlChar *data); +XMLPUBFUN void XMLCALL + globalNamespace (void *ctx, + const xmlChar *href, + const xmlChar *prefix); +XMLPUBFUN void XMLCALL + setNamespace (void *ctx, + const xmlChar *name); +XMLPUBFUN xmlNsPtr XMLCALL + getNamespace (void *ctx); +XMLPUBFUN int XMLCALL + checkNamespace (void *ctx, + xmlChar *nameSpace); +XMLPUBFUN void XMLCALL + namespaceDecl (void *ctx, + const xmlChar *href, + const xmlChar *prefix); +XMLPUBFUN void XMLCALL + comment (void *ctx, + const xmlChar *value); +XMLPUBFUN void XMLCALL + cdataBlock (void *ctx, + const xmlChar *value, + int len); + +#ifdef LIBXML_SAX1_ENABLED +XMLPUBFUN void XMLCALL + initxmlDefaultSAXHandler (xmlSAXHandlerV1 *hdlr, + int warning); +#ifdef LIBXML_HTML_ENABLED +XMLPUBFUN void XMLCALL + inithtmlDefaultSAXHandler (xmlSAXHandlerV1 *hdlr); +#endif +#ifdef LIBXML_DOCB_ENABLED +XMLPUBFUN void XMLCALL + initdocbDefaultSAXHandler (xmlSAXHandlerV1 *hdlr); +#endif +#endif /* LIBXML_SAX1_ENABLED */ + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_LEGACY_ENABLED */ + +#endif /* __XML_SAX_H__ */ diff --git a/libxml2/include/libxml/SAX2.h b/libxml2/include/libxml/SAX2.h new file mode 100644 index 0000000..a55212e --- /dev/null +++ b/libxml2/include/libxml/SAX2.h @@ -0,0 +1,178 @@ +/* + * Summary: SAX2 parser interface used to build the DOM tree + * Description: those are the default SAX2 interfaces used by + * the library when building DOM tree. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + + +#ifndef __XML_SAX2_H__ +#define __XML_SAX2_H__ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif +XMLPUBFUN const xmlChar * XMLCALL + xmlSAX2GetPublicId (void *ctx); +XMLPUBFUN const xmlChar * XMLCALL + xmlSAX2GetSystemId (void *ctx); +XMLPUBFUN void XMLCALL + xmlSAX2SetDocumentLocator (void *ctx, + xmlSAXLocatorPtr loc); + +XMLPUBFUN int XMLCALL + xmlSAX2GetLineNumber (void *ctx); +XMLPUBFUN int XMLCALL + xmlSAX2GetColumnNumber (void *ctx); + +XMLPUBFUN int XMLCALL + xmlSAX2IsStandalone (void *ctx); +XMLPUBFUN int XMLCALL + xmlSAX2HasInternalSubset (void *ctx); +XMLPUBFUN int XMLCALL + xmlSAX2HasExternalSubset (void *ctx); + +XMLPUBFUN void XMLCALL + xmlSAX2InternalSubset (void *ctx, + const xmlChar *name, + const xmlChar *ExternalID, + const xmlChar *SystemID); +XMLPUBFUN void XMLCALL + xmlSAX2ExternalSubset (void *ctx, + const xmlChar *name, + const xmlChar *ExternalID, + const xmlChar *SystemID); +XMLPUBFUN xmlEntityPtr XMLCALL + xmlSAX2GetEntity (void *ctx, + const xmlChar *name); +XMLPUBFUN xmlEntityPtr XMLCALL + xmlSAX2GetParameterEntity (void *ctx, + const xmlChar *name); +XMLPUBFUN xmlParserInputPtr XMLCALL + xmlSAX2ResolveEntity (void *ctx, + const xmlChar *publicId, + const xmlChar *systemId); + +XMLPUBFUN void XMLCALL + xmlSAX2EntityDecl (void *ctx, + const xmlChar *name, + int type, + const xmlChar *publicId, + const xmlChar *systemId, + xmlChar *content); +XMLPUBFUN void XMLCALL + xmlSAX2AttributeDecl (void *ctx, + const xmlChar *elem, + const xmlChar *fullname, + int type, + int def, + const xmlChar *defaultValue, + xmlEnumerationPtr tree); +XMLPUBFUN void XMLCALL + xmlSAX2ElementDecl (void *ctx, + const xmlChar *name, + int type, + xmlElementContentPtr content); +XMLPUBFUN void XMLCALL + xmlSAX2NotationDecl (void *ctx, + const xmlChar *name, + const xmlChar *publicId, + const xmlChar *systemId); +XMLPUBFUN void XMLCALL + xmlSAX2UnparsedEntityDecl (void *ctx, + const xmlChar *name, + const xmlChar *publicId, + const xmlChar *systemId, + const xmlChar *notationName); + +XMLPUBFUN void XMLCALL + xmlSAX2StartDocument (void *ctx); +XMLPUBFUN void XMLCALL + xmlSAX2EndDocument (void *ctx); +#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || \ + defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || \ + defined(LIBXML_LEGACY_ENABLED) +XMLPUBFUN void XMLCALL + xmlSAX2StartElement (void *ctx, + const xmlChar *fullname, + const xmlChar **atts); +XMLPUBFUN void XMLCALL + xmlSAX2EndElement (void *ctx, + const xmlChar *name); +#endif /* LIBXML_SAX1_ENABLED or LIBXML_HTML_ENABLED or LIBXML_LEGACY_ENABLED */ +XMLPUBFUN void XMLCALL + xmlSAX2StartElementNs (void *ctx, + const xmlChar *localname, + const xmlChar *prefix, + const xmlChar *URI, + int nb_namespaces, + const xmlChar **namespaces, + int nb_attributes, + int nb_defaulted, + const xmlChar **attributes); +XMLPUBFUN void XMLCALL + xmlSAX2EndElementNs (void *ctx, + const xmlChar *localname, + const xmlChar *prefix, + const xmlChar *URI); +XMLPUBFUN void XMLCALL + xmlSAX2Reference (void *ctx, + const xmlChar *name); +XMLPUBFUN void XMLCALL + xmlSAX2Characters (void *ctx, + const xmlChar *ch, + int len); +XMLPUBFUN void XMLCALL + xmlSAX2IgnorableWhitespace (void *ctx, + const xmlChar *ch, + int len); +XMLPUBFUN void XMLCALL + xmlSAX2ProcessingInstruction (void *ctx, + const xmlChar *target, + const xmlChar *data); +XMLPUBFUN void XMLCALL + xmlSAX2Comment (void *ctx, + const xmlChar *value); +XMLPUBFUN void XMLCALL + xmlSAX2CDataBlock (void *ctx, + const xmlChar *value, + int len); + +#ifdef LIBXML_SAX1_ENABLED +XMLPUBFUN int XMLCALL + xmlSAXDefaultVersion (int version); +#endif /* LIBXML_SAX1_ENABLED */ + +XMLPUBFUN int XMLCALL + xmlSAXVersion (xmlSAXHandler *hdlr, + int version); +XMLPUBFUN void XMLCALL + xmlSAX2InitDefaultSAXHandler (xmlSAXHandler *hdlr, + int warning); +#ifdef LIBXML_HTML_ENABLED +XMLPUBFUN void XMLCALL + xmlSAX2InitHtmlDefaultSAXHandler(xmlSAXHandler *hdlr); +XMLPUBFUN void XMLCALL + htmlDefaultSAXHandlerInit (void); +#endif +#ifdef LIBXML_DOCB_ENABLED +XMLPUBFUN void XMLCALL + xmlSAX2InitDocbDefaultSAXHandler(xmlSAXHandler *hdlr); +XMLPUBFUN void XMLCALL + docbDefaultSAXHandlerInit (void); +#endif +XMLPUBFUN void XMLCALL + xmlDefaultSAXHandlerInit (void); +#ifdef __cplusplus +} +#endif +#endif /* __XML_SAX2_H__ */ diff --git a/libxml2/include/libxml/c14n.h b/libxml2/include/libxml/c14n.h new file mode 100644 index 0000000..b8971d9 --- /dev/null +++ b/libxml2/include/libxml/c14n.h @@ -0,0 +1,126 @@ +/* + * Summary: Provide Canonical XML and Exclusive XML Canonicalization + * Description: the c14n modules provides a + * + * "Canonical XML" implementation + * http://www.w3.org/TR/xml-c14n + * + * and an + * + * "Exclusive XML Canonicalization" implementation + * http://www.w3.org/TR/xml-exc-c14n + + * Copy: See Copyright for the status of this software. + * + * Author: Aleksey Sanin + */ +#ifndef __XML_C14N_H__ +#define __XML_C14N_H__ +#ifdef LIBXML_C14N_ENABLED +#ifdef LIBXML_OUTPUT_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include +#include +#include + +/* + * XML Canonicazation + * http://www.w3.org/TR/xml-c14n + * + * Exclusive XML Canonicazation + * http://www.w3.org/TR/xml-exc-c14n + * + * Canonical form of an XML document could be created if and only if + * a) default attributes (if any) are added to all nodes + * b) all character and parsed entity references are resolved + * In order to achive this in libxml2 the document MUST be loaded with + * following global setings: + * + * xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS; + * xmlSubstituteEntitiesDefault(1); + * + * or corresponding parser context setting: + * xmlParserCtxtPtr ctxt; + * + * ... + * ctxt->loadsubset = XML_DETECT_IDS | XML_COMPLETE_ATTRS; + * ctxt->replaceEntities = 1; + * ... + */ + +/* + * xmlC14NMode: + * + * Predefined values for C14N modes + * + */ +typedef enum { + XML_C14N_1_0 = 0, /* Origianal C14N 1.0 spec */ + XML_C14N_EXCLUSIVE_1_0 = 1, /* Exclusive C14N 1.0 spec */ + XML_C14N_1_1 = 2 /* C14N 1.1 spec */ +} xmlC14NMode; + +XMLPUBFUN int XMLCALL + xmlC14NDocSaveTo (xmlDocPtr doc, + xmlNodeSetPtr nodes, + int mode, /* a xmlC14NMode */ + xmlChar **inclusive_ns_prefixes, + int with_comments, + xmlOutputBufferPtr buf); + +XMLPUBFUN int XMLCALL + xmlC14NDocDumpMemory (xmlDocPtr doc, + xmlNodeSetPtr nodes, + int mode, /* a xmlC14NMode */ + xmlChar **inclusive_ns_prefixes, + int with_comments, + xmlChar **doc_txt_ptr); + +XMLPUBFUN int XMLCALL + xmlC14NDocSave (xmlDocPtr doc, + xmlNodeSetPtr nodes, + int mode, /* a xmlC14NMode */ + xmlChar **inclusive_ns_prefixes, + int with_comments, + const char* filename, + int compression); + + +/** + * This is the core C14N function + */ +/** + * xmlC14NIsVisibleCallback: + * @user_data: user data + * @node: the curent node + * @parent: the parent node + * + * Signature for a C14N callback on visible nodes + * + * Returns 1 if the node should be included + */ +typedef int (*xmlC14NIsVisibleCallback) (void* user_data, + xmlNodePtr node, + xmlNodePtr parent); + +XMLPUBFUN int XMLCALL + xmlC14NExecute (xmlDocPtr doc, + xmlC14NIsVisibleCallback is_visible_callback, + void* user_data, + int mode, /* a xmlC14NMode */ + xmlChar **inclusive_ns_prefixes, + int with_comments, + xmlOutputBufferPtr buf); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* LIBXML_OUTPUT_ENABLED */ +#endif /* LIBXML_C14N_ENABLED */ +#endif /* __XML_C14N_H__ */ + diff --git a/libxml2/include/libxml/catalog.h b/libxml2/include/libxml/catalog.h new file mode 100644 index 0000000..5a13f51 --- /dev/null +++ b/libxml2/include/libxml/catalog.h @@ -0,0 +1,182 @@ +/** + * Summary: interfaces to the Catalog handling system + * Description: the catalog module implements the support for + * XML Catalogs and SGML catalogs + * + * SGML Open Technical Resolution TR9401:1997. + * http://www.jclark.com/sp/catalog.htm + * + * XML Catalogs Working Draft 06 August 2001 + * http://www.oasis-open.org/committees/entity/spec-2001-08-06.html + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_CATALOG_H__ +#define __XML_CATALOG_H__ + +#include + +#include +#include +#include + +#ifdef LIBXML_CATALOG_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * XML_CATALOGS_NAMESPACE: + * + * The namespace for the XML Catalogs elements. + */ +#define XML_CATALOGS_NAMESPACE \ + (const xmlChar *) "urn:oasis:names:tc:entity:xmlns:xml:catalog" +/** + * XML_CATALOG_PI: + * + * The specific XML Catalog Processing Instuction name. + */ +#define XML_CATALOG_PI \ + (const xmlChar *) "oasis-xml-catalog" + +/* + * The API is voluntarily limited to general cataloging. + */ +typedef enum { + XML_CATA_PREFER_NONE = 0, + XML_CATA_PREFER_PUBLIC = 1, + XML_CATA_PREFER_SYSTEM +} xmlCatalogPrefer; + +typedef enum { + XML_CATA_ALLOW_NONE = 0, + XML_CATA_ALLOW_GLOBAL = 1, + XML_CATA_ALLOW_DOCUMENT = 2, + XML_CATA_ALLOW_ALL = 3 +} xmlCatalogAllow; + +typedef struct _xmlCatalog xmlCatalog; +typedef xmlCatalog *xmlCatalogPtr; + +/* + * Operations on a given catalog. + */ +XMLPUBFUN xmlCatalogPtr XMLCALL + xmlNewCatalog (int sgml); +XMLPUBFUN xmlCatalogPtr XMLCALL + xmlLoadACatalog (const char *filename); +XMLPUBFUN xmlCatalogPtr XMLCALL + xmlLoadSGMLSuperCatalog (const char *filename); +XMLPUBFUN int XMLCALL + xmlConvertSGMLCatalog (xmlCatalogPtr catal); +XMLPUBFUN int XMLCALL + xmlACatalogAdd (xmlCatalogPtr catal, + const xmlChar *type, + const xmlChar *orig, + const xmlChar *replace); +XMLPUBFUN int XMLCALL + xmlACatalogRemove (xmlCatalogPtr catal, + const xmlChar *value); +XMLPUBFUN xmlChar * XMLCALL + xmlACatalogResolve (xmlCatalogPtr catal, + const xmlChar *pubID, + const xmlChar *sysID); +XMLPUBFUN xmlChar * XMLCALL + xmlACatalogResolveSystem(xmlCatalogPtr catal, + const xmlChar *sysID); +XMLPUBFUN xmlChar * XMLCALL + xmlACatalogResolvePublic(xmlCatalogPtr catal, + const xmlChar *pubID); +XMLPUBFUN xmlChar * XMLCALL + xmlACatalogResolveURI (xmlCatalogPtr catal, + const xmlChar *URI); +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void XMLCALL + xmlACatalogDump (xmlCatalogPtr catal, + FILE *out); +#endif /* LIBXML_OUTPUT_ENABLED */ +XMLPUBFUN void XMLCALL + xmlFreeCatalog (xmlCatalogPtr catal); +XMLPUBFUN int XMLCALL + xmlCatalogIsEmpty (xmlCatalogPtr catal); + +/* + * Global operations. + */ +XMLPUBFUN void XMLCALL + xmlInitializeCatalog (void); +XMLPUBFUN int XMLCALL + xmlLoadCatalog (const char *filename); +XMLPUBFUN void XMLCALL + xmlLoadCatalogs (const char *paths); +XMLPUBFUN void XMLCALL + xmlCatalogCleanup (void); +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void XMLCALL + xmlCatalogDump (FILE *out); +#endif /* LIBXML_OUTPUT_ENABLED */ +XMLPUBFUN xmlChar * XMLCALL + xmlCatalogResolve (const xmlChar *pubID, + const xmlChar *sysID); +XMLPUBFUN xmlChar * XMLCALL + xmlCatalogResolveSystem (const xmlChar *sysID); +XMLPUBFUN xmlChar * XMLCALL + xmlCatalogResolvePublic (const xmlChar *pubID); +XMLPUBFUN xmlChar * XMLCALL + xmlCatalogResolveURI (const xmlChar *URI); +XMLPUBFUN int XMLCALL + xmlCatalogAdd (const xmlChar *type, + const xmlChar *orig, + const xmlChar *replace); +XMLPUBFUN int XMLCALL + xmlCatalogRemove (const xmlChar *value); +XMLPUBFUN xmlDocPtr XMLCALL + xmlParseCatalogFile (const char *filename); +XMLPUBFUN int XMLCALL + xmlCatalogConvert (void); + +/* + * Strictly minimal interfaces for per-document catalogs used + * by the parser. + */ +XMLPUBFUN void XMLCALL + xmlCatalogFreeLocal (void *catalogs); +XMLPUBFUN void * XMLCALL + xmlCatalogAddLocal (void *catalogs, + const xmlChar *URL); +XMLPUBFUN xmlChar * XMLCALL + xmlCatalogLocalResolve (void *catalogs, + const xmlChar *pubID, + const xmlChar *sysID); +XMLPUBFUN xmlChar * XMLCALL + xmlCatalogLocalResolveURI(void *catalogs, + const xmlChar *URI); +/* + * Preference settings. + */ +XMLPUBFUN int XMLCALL + xmlCatalogSetDebug (int level); +XMLPUBFUN xmlCatalogPrefer XMLCALL + xmlCatalogSetDefaultPrefer(xmlCatalogPrefer prefer); +XMLPUBFUN void XMLCALL + xmlCatalogSetDefaults (xmlCatalogAllow allow); +XMLPUBFUN xmlCatalogAllow XMLCALL + xmlCatalogGetDefaults (void); + + +/* DEPRECATED interfaces */ +XMLPUBFUN const xmlChar * XMLCALL + xmlCatalogGetSystem (const xmlChar *sysID); +XMLPUBFUN const xmlChar * XMLCALL + xmlCatalogGetPublic (const xmlChar *pubID); + +#ifdef __cplusplus +} +#endif +#endif /* LIBXML_CATALOG_ENABLED */ +#endif /* __XML_CATALOG_H__ */ diff --git a/libxml2/include/libxml/chvalid.h b/libxml2/include/libxml/chvalid.h new file mode 100644 index 0000000..fb43016 --- /dev/null +++ b/libxml2/include/libxml/chvalid.h @@ -0,0 +1,230 @@ +/* + * Summary: Unicode character range checking + * Description: this module exports interfaces for the character + * range validation APIs + * + * This file is automatically generated from the cvs source + * definition files using the genChRanges.py Python script + * + * Generation date: Mon Mar 27 11:09:48 2006 + * Sources: chvalid.def + * Author: William Brack + */ + +#ifndef __XML_CHVALID_H__ +#define __XML_CHVALID_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Define our typedefs and structures + * + */ +typedef struct _xmlChSRange xmlChSRange; +typedef xmlChSRange *xmlChSRangePtr; +struct _xmlChSRange { + unsigned short low; + unsigned short high; +}; + +typedef struct _xmlChLRange xmlChLRange; +typedef xmlChLRange *xmlChLRangePtr; +struct _xmlChLRange { + unsigned int low; + unsigned int high; +}; + +typedef struct _xmlChRangeGroup xmlChRangeGroup; +typedef xmlChRangeGroup *xmlChRangeGroupPtr; +struct _xmlChRangeGroup { + int nbShortRange; + int nbLongRange; + const xmlChSRange *shortRange; /* points to an array of ranges */ + const xmlChLRange *longRange; +}; + +/** + * Range checking routine + */ +XMLPUBFUN int XMLCALL + xmlCharInRange(unsigned int val, const xmlChRangeGroup *group); + + +/** + * xmlIsBaseChar_ch: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsBaseChar_ch(c) (((0x41 <= (c)) && ((c) <= 0x5a)) || \ + ((0x61 <= (c)) && ((c) <= 0x7a)) || \ + ((0xc0 <= (c)) && ((c) <= 0xd6)) || \ + ((0xd8 <= (c)) && ((c) <= 0xf6)) || \ + (0xf8 <= (c))) + +/** + * xmlIsBaseCharQ: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsBaseCharQ(c) (((c) < 0x100) ? \ + xmlIsBaseChar_ch((c)) : \ + xmlCharInRange((c), &xmlIsBaseCharGroup)) + +XMLPUBVAR const xmlChRangeGroup xmlIsBaseCharGroup; + +/** + * xmlIsBlank_ch: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsBlank_ch(c) (((c) == 0x20) || \ + ((0x9 <= (c)) && ((c) <= 0xa)) || \ + ((c) == 0xd)) + +/** + * xmlIsBlankQ: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsBlankQ(c) (((c) < 0x100) ? \ + xmlIsBlank_ch((c)) : 0) + + +/** + * xmlIsChar_ch: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsChar_ch(c) (((0x9 <= (c)) && ((c) <= 0xa)) || \ + ((c) == 0xd) || \ + (0x20 <= (c))) + +/** + * xmlIsCharQ: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsCharQ(c) (((c) < 0x100) ? \ + xmlIsChar_ch((c)) :\ + (((0x100 <= (c)) && ((c) <= 0xd7ff)) || \ + ((0xe000 <= (c)) && ((c) <= 0xfffd)) || \ + ((0x10000 <= (c)) && ((c) <= 0x10ffff)))) + +XMLPUBVAR const xmlChRangeGroup xmlIsCharGroup; + +/** + * xmlIsCombiningQ: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsCombiningQ(c) (((c) < 0x100) ? \ + 0 : \ + xmlCharInRange((c), &xmlIsCombiningGroup)) + +XMLPUBVAR const xmlChRangeGroup xmlIsCombiningGroup; + +/** + * xmlIsDigit_ch: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsDigit_ch(c) (((0x30 <= (c)) && ((c) <= 0x39))) + +/** + * xmlIsDigitQ: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsDigitQ(c) (((c) < 0x100) ? \ + xmlIsDigit_ch((c)) : \ + xmlCharInRange((c), &xmlIsDigitGroup)) + +XMLPUBVAR const xmlChRangeGroup xmlIsDigitGroup; + +/** + * xmlIsExtender_ch: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsExtender_ch(c) (((c) == 0xb7)) + +/** + * xmlIsExtenderQ: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsExtenderQ(c) (((c) < 0x100) ? \ + xmlIsExtender_ch((c)) : \ + xmlCharInRange((c), &xmlIsExtenderGroup)) + +XMLPUBVAR const xmlChRangeGroup xmlIsExtenderGroup; + +/** + * xmlIsIdeographicQ: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsIdeographicQ(c) (((c) < 0x100) ? \ + 0 :\ + (((0x4e00 <= (c)) && ((c) <= 0x9fa5)) || \ + ((c) == 0x3007) || \ + ((0x3021 <= (c)) && ((c) <= 0x3029)))) + +XMLPUBVAR const xmlChRangeGroup xmlIsIdeographicGroup; +XMLPUBVAR const unsigned char xmlIsPubidChar_tab[256]; + +/** + * xmlIsPubidChar_ch: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsPubidChar_ch(c) (xmlIsPubidChar_tab[(c)]) + +/** + * xmlIsPubidCharQ: + * @c: char to validate + * + * Automatically generated by genChRanges.py + */ +#define xmlIsPubidCharQ(c) (((c) < 0x100) ? \ + xmlIsPubidChar_ch((c)) : 0) + +XMLPUBFUN int XMLCALL + xmlIsBaseChar(unsigned int ch); +XMLPUBFUN int XMLCALL + xmlIsBlank(unsigned int ch); +XMLPUBFUN int XMLCALL + xmlIsChar(unsigned int ch); +XMLPUBFUN int XMLCALL + xmlIsCombining(unsigned int ch); +XMLPUBFUN int XMLCALL + xmlIsDigit(unsigned int ch); +XMLPUBFUN int XMLCALL + xmlIsExtender(unsigned int ch); +XMLPUBFUN int XMLCALL + xmlIsIdeographic(unsigned int ch); +XMLPUBFUN int XMLCALL + xmlIsPubidChar(unsigned int ch); + +#ifdef __cplusplus +} +#endif +#endif /* __XML_CHVALID_H__ */ diff --git a/libxml2/include/libxml/debugXML.h b/libxml2/include/libxml/debugXML.h new file mode 100644 index 0000000..5b3be13 --- /dev/null +++ b/libxml2/include/libxml/debugXML.h @@ -0,0 +1,217 @@ +/* + * Summary: Tree debugging APIs + * Description: Interfaces to a set of routines used for debugging the tree + * produced by the XML parser. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __DEBUG_XML__ +#define __DEBUG_XML__ +#include +#include +#include + +#ifdef LIBXML_DEBUG_ENABLED + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The standard Dump routines. + */ +XMLPUBFUN void XMLCALL + xmlDebugDumpString (FILE *output, + const xmlChar *str); +XMLPUBFUN void XMLCALL + xmlDebugDumpAttr (FILE *output, + xmlAttrPtr attr, + int depth); +XMLPUBFUN void XMLCALL + xmlDebugDumpAttrList (FILE *output, + xmlAttrPtr attr, + int depth); +XMLPUBFUN void XMLCALL + xmlDebugDumpOneNode (FILE *output, + xmlNodePtr node, + int depth); +XMLPUBFUN void XMLCALL + xmlDebugDumpNode (FILE *output, + xmlNodePtr node, + int depth); +XMLPUBFUN void XMLCALL + xmlDebugDumpNodeList (FILE *output, + xmlNodePtr node, + int depth); +XMLPUBFUN void XMLCALL + xmlDebugDumpDocumentHead(FILE *output, + xmlDocPtr doc); +XMLPUBFUN void XMLCALL + xmlDebugDumpDocument (FILE *output, + xmlDocPtr doc); +XMLPUBFUN void XMLCALL + xmlDebugDumpDTD (FILE *output, + xmlDtdPtr dtd); +XMLPUBFUN void XMLCALL + xmlDebugDumpEntities (FILE *output, + xmlDocPtr doc); + +/**************************************************************** + * * + * Checking routines * + * * + ****************************************************************/ + +XMLPUBFUN int XMLCALL + xmlDebugCheckDocument (FILE * output, + xmlDocPtr doc); + +/**************************************************************** + * * + * XML shell helpers * + * * + ****************************************************************/ + +XMLPUBFUN void XMLCALL + xmlLsOneNode (FILE *output, xmlNodePtr node); +XMLPUBFUN int XMLCALL + xmlLsCountNode (xmlNodePtr node); + +XMLPUBFUN const char * XMLCALL + xmlBoolToText (int boolval); + +/**************************************************************** + * * + * The XML shell related structures and functions * + * * + ****************************************************************/ + +#ifdef LIBXML_XPATH_ENABLED +/** + * xmlShellReadlineFunc: + * @prompt: a string prompt + * + * This is a generic signature for the XML shell input function. + * + * Returns a string which will be freed by the Shell. + */ +typedef char * (* xmlShellReadlineFunc)(char *prompt); + +/** + * xmlShellCtxt: + * + * A debugging shell context. + * TODO: add the defined function tables. + */ +typedef struct _xmlShellCtxt xmlShellCtxt; +typedef xmlShellCtxt *xmlShellCtxtPtr; +struct _xmlShellCtxt { + char *filename; + xmlDocPtr doc; + xmlNodePtr node; + xmlXPathContextPtr pctxt; + int loaded; + FILE *output; + xmlShellReadlineFunc input; +}; + +/** + * xmlShellCmd: + * @ctxt: a shell context + * @arg: a string argument + * @node: a first node + * @node2: a second node + * + * This is a generic signature for the XML shell functions. + * + * Returns an int, negative returns indicating errors. + */ +typedef int (* xmlShellCmd) (xmlShellCtxtPtr ctxt, + char *arg, + xmlNodePtr node, + xmlNodePtr node2); + +XMLPUBFUN void XMLCALL + xmlShellPrintXPathError (int errorType, + const char *arg); +XMLPUBFUN void XMLCALL + xmlShellPrintXPathResult(xmlXPathObjectPtr list); +XMLPUBFUN int XMLCALL + xmlShellList (xmlShellCtxtPtr ctxt, + char *arg, + xmlNodePtr node, + xmlNodePtr node2); +XMLPUBFUN int XMLCALL + xmlShellBase (xmlShellCtxtPtr ctxt, + char *arg, + xmlNodePtr node, + xmlNodePtr node2); +XMLPUBFUN int XMLCALL + xmlShellDir (xmlShellCtxtPtr ctxt, + char *arg, + xmlNodePtr node, + xmlNodePtr node2); +XMLPUBFUN int XMLCALL + xmlShellLoad (xmlShellCtxtPtr ctxt, + char *filename, + xmlNodePtr node, + xmlNodePtr node2); +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void XMLCALL + xmlShellPrintNode (xmlNodePtr node); +XMLPUBFUN int XMLCALL + xmlShellCat (xmlShellCtxtPtr ctxt, + char *arg, + xmlNodePtr node, + xmlNodePtr node2); +XMLPUBFUN int XMLCALL + xmlShellWrite (xmlShellCtxtPtr ctxt, + char *filename, + xmlNodePtr node, + xmlNodePtr node2); +XMLPUBFUN int XMLCALL + xmlShellSave (xmlShellCtxtPtr ctxt, + char *filename, + xmlNodePtr node, + xmlNodePtr node2); +#endif /* LIBXML_OUTPUT_ENABLED */ +#ifdef LIBXML_VALID_ENABLED +XMLPUBFUN int XMLCALL + xmlShellValidate (xmlShellCtxtPtr ctxt, + char *dtd, + xmlNodePtr node, + xmlNodePtr node2); +#endif /* LIBXML_VALID_ENABLED */ +XMLPUBFUN int XMLCALL + xmlShellDu (xmlShellCtxtPtr ctxt, + char *arg, + xmlNodePtr tree, + xmlNodePtr node2); +XMLPUBFUN int XMLCALL + xmlShellPwd (xmlShellCtxtPtr ctxt, + char *buffer, + xmlNodePtr node, + xmlNodePtr node2); + +/* + * The Shell interface. + */ +XMLPUBFUN void XMLCALL + xmlShell (xmlDocPtr doc, + char *filename, + xmlShellReadlineFunc input, + FILE *output); + +#endif /* LIBXML_XPATH_ENABLED */ + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_DEBUG_ENABLED */ +#endif /* __DEBUG_XML__ */ diff --git a/libxml2/include/libxml/dict.h b/libxml2/include/libxml/dict.h new file mode 100644 index 0000000..b83db59 --- /dev/null +++ b/libxml2/include/libxml/dict.h @@ -0,0 +1,86 @@ +/* + * Summary: string dictionary + * Description: dictionary of reusable strings, just used to avoid allocation + * and freeing operations. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_DICT_H__ +#define __XML_DICT_H__ + +#ifdef __cplusplus +#define __XML_EXTERNC extern "C" +#else +#define __XML_EXTERNC +#endif + +/* + * The dictionary. + */ +__XML_EXTERNC typedef struct _xmlDict xmlDict; +__XML_EXTERNC typedef xmlDict *xmlDictPtr; + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Initializer + */ +XMLPUBFUN int XMLCALL xmlInitializeDict(void); + +/* + * Constructor and destructor. + */ +XMLPUBFUN xmlDictPtr XMLCALL + xmlDictCreate (void); +XMLPUBFUN size_t XMLCALL + xmlDictSetLimit (xmlDictPtr dict, + size_t limit); +XMLPUBFUN size_t XMLCALL + xmlDictGetUsage (xmlDictPtr dict); +XMLPUBFUN xmlDictPtr XMLCALL + xmlDictCreateSub(xmlDictPtr sub); +XMLPUBFUN int XMLCALL + xmlDictReference(xmlDictPtr dict); +XMLPUBFUN void XMLCALL + xmlDictFree (xmlDictPtr dict); + +/* + * Lookup of entry in the dictionary. + */ +XMLPUBFUN const xmlChar * XMLCALL + xmlDictLookup (xmlDictPtr dict, + const xmlChar *name, + int len); +XMLPUBFUN const xmlChar * XMLCALL + xmlDictExists (xmlDictPtr dict, + const xmlChar *name, + int len); +XMLPUBFUN const xmlChar * XMLCALL + xmlDictQLookup (xmlDictPtr dict, + const xmlChar *prefix, + const xmlChar *name); +XMLPUBFUN int XMLCALL + xmlDictOwns (xmlDictPtr dict, + const xmlChar *str); +XMLPUBFUN int XMLCALL + xmlDictSize (xmlDictPtr dict); + +/* + * Cleanup function + */ +XMLPUBFUN void XMLCALL + xmlDictCleanup (void); + +#ifdef __cplusplus +} +#endif +#endif /* ! __XML_DICT_H__ */ diff --git a/libxml2/include/libxml/encoding.h b/libxml2/include/libxml/encoding.h new file mode 100644 index 0000000..7967cc6 --- /dev/null +++ b/libxml2/include/libxml/encoding.h @@ -0,0 +1,240 @@ +/* + * Summary: interface for the encoding conversion functions + * Description: interface for the encoding conversion functions needed for + * XML basic encoding and iconv() support. + * + * Related specs are + * rfc2044 (UTF-8 and UTF-16) F. Yergeau Alis Technologies + * [ISO-10646] UTF-8 and UTF-16 in Annexes + * [ISO-8859-1] ISO Latin-1 characters codes. + * [UNICODE] The Unicode Consortium, "The Unicode Standard -- + * Worldwide Character Encoding -- Version 1.0", Addison- + * Wesley, Volume 1, 1991, Volume 2, 1992. UTF-8 is + * described in Unicode Technical Report #4. + * [US-ASCII] Coded Character Set--7-bit American Standard Code for + * Information Interchange, ANSI X3.4-1986. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_CHAR_ENCODING_H__ +#define __XML_CHAR_ENCODING_H__ + +#include + +#ifdef LIBXML_ICONV_ENABLED +#include +#endif +#ifdef LIBXML_ICU_ENABLED +#include +#endif +#ifdef __cplusplus +extern "C" { +#endif + +/* + * xmlCharEncoding: + * + * Predefined values for some standard encodings. + * Libxml does not do beforehand translation on UTF8 and ISOLatinX. + * It also supports ASCII, ISO-8859-1, and UTF16 (LE and BE) by default. + * + * Anything else would have to be translated to UTF8 before being + * given to the parser itself. The BOM for UTF16 and the encoding + * declaration are looked at and a converter is looked for at that + * point. If not found the parser stops here as asked by the XML REC. A + * converter can be registered by the user using xmlRegisterCharEncodingHandler + * but the current form doesn't allow stateful transcoding (a serious + * problem agreed !). If iconv has been found it will be used + * automatically and allow stateful transcoding, the simplest is then + * to be sure to enable iconv and to provide iconv libs for the encoding + * support needed. + * + * Note that the generic "UTF-16" is not a predefined value. Instead, only + * the specific UTF-16LE and UTF-16BE are present. + */ +typedef enum { + XML_CHAR_ENCODING_ERROR= -1, /* No char encoding detected */ + XML_CHAR_ENCODING_NONE= 0, /* No char encoding detected */ + XML_CHAR_ENCODING_UTF8= 1, /* UTF-8 */ + XML_CHAR_ENCODING_UTF16LE= 2, /* UTF-16 little endian */ + XML_CHAR_ENCODING_UTF16BE= 3, /* UTF-16 big endian */ + XML_CHAR_ENCODING_UCS4LE= 4, /* UCS-4 little endian */ + XML_CHAR_ENCODING_UCS4BE= 5, /* UCS-4 big endian */ + XML_CHAR_ENCODING_EBCDIC= 6, /* EBCDIC uh! */ + XML_CHAR_ENCODING_UCS4_2143=7, /* UCS-4 unusual ordering */ + XML_CHAR_ENCODING_UCS4_3412=8, /* UCS-4 unusual ordering */ + XML_CHAR_ENCODING_UCS2= 9, /* UCS-2 */ + XML_CHAR_ENCODING_8859_1= 10,/* ISO-8859-1 ISO Latin 1 */ + XML_CHAR_ENCODING_8859_2= 11,/* ISO-8859-2 ISO Latin 2 */ + XML_CHAR_ENCODING_8859_3= 12,/* ISO-8859-3 */ + XML_CHAR_ENCODING_8859_4= 13,/* ISO-8859-4 */ + XML_CHAR_ENCODING_8859_5= 14,/* ISO-8859-5 */ + XML_CHAR_ENCODING_8859_6= 15,/* ISO-8859-6 */ + XML_CHAR_ENCODING_8859_7= 16,/* ISO-8859-7 */ + XML_CHAR_ENCODING_8859_8= 17,/* ISO-8859-8 */ + XML_CHAR_ENCODING_8859_9= 18,/* ISO-8859-9 */ + XML_CHAR_ENCODING_2022_JP= 19,/* ISO-2022-JP */ + XML_CHAR_ENCODING_SHIFT_JIS=20,/* Shift_JIS */ + XML_CHAR_ENCODING_EUC_JP= 21,/* EUC-JP */ + XML_CHAR_ENCODING_ASCII= 22 /* pure ASCII */ +} xmlCharEncoding; + +/** + * xmlCharEncodingInputFunc: + * @out: a pointer to an array of bytes to store the UTF-8 result + * @outlen: the length of @out + * @in: a pointer to an array of chars in the original encoding + * @inlen: the length of @in + * + * Take a block of chars in the original encoding and try to convert + * it to an UTF-8 block of chars out. + * + * Returns the number of bytes written, -1 if lack of space, or -2 + * if the transcoding failed. + * The value of @inlen after return is the number of octets consumed + * if the return value is positive, else unpredictiable. + * The value of @outlen after return is the number of octets consumed. + */ +typedef int (* xmlCharEncodingInputFunc)(unsigned char *out, int *outlen, + const unsigned char *in, int *inlen); + + +/** + * xmlCharEncodingOutputFunc: + * @out: a pointer to an array of bytes to store the result + * @outlen: the length of @out + * @in: a pointer to an array of UTF-8 chars + * @inlen: the length of @in + * + * Take a block of UTF-8 chars in and try to convert it to another + * encoding. + * Note: a first call designed to produce heading info is called with + * in = NULL. If stateful this should also initialize the encoder state. + * + * Returns the number of bytes written, -1 if lack of space, or -2 + * if the transcoding failed. + * The value of @inlen after return is the number of octets consumed + * if the return value is positive, else unpredictiable. + * The value of @outlen after return is the number of octets produced. + */ +typedef int (* xmlCharEncodingOutputFunc)(unsigned char *out, int *outlen, + const unsigned char *in, int *inlen); + + +/* + * Block defining the handlers for non UTF-8 encodings. + * If iconv is supported, there are two extra fields. + */ +#ifdef LIBXML_ICU_ENABLED +struct _uconv_t { + UConverter *uconv; /* for conversion between an encoding and UTF-16 */ + UConverter *utf8; /* for conversion between UTF-8 and UTF-16 */ +}; +typedef struct _uconv_t uconv_t; +#endif + +typedef struct _xmlCharEncodingHandler xmlCharEncodingHandler; +typedef xmlCharEncodingHandler *xmlCharEncodingHandlerPtr; +struct _xmlCharEncodingHandler { + char *name; + xmlCharEncodingInputFunc input; + xmlCharEncodingOutputFunc output; +#ifdef LIBXML_ICONV_ENABLED + iconv_t iconv_in; + iconv_t iconv_out; +#endif /* LIBXML_ICONV_ENABLED */ +#ifdef LIBXML_ICU_ENABLED + uconv_t *uconv_in; + uconv_t *uconv_out; +#endif /* LIBXML_ICU_ENABLED */ +}; + +#ifdef __cplusplus +} +#endif +#include +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Interfaces for encoding handlers. + */ +XMLPUBFUN void XMLCALL + xmlInitCharEncodingHandlers (void); +XMLPUBFUN void XMLCALL + xmlCleanupCharEncodingHandlers (void); +XMLPUBFUN void XMLCALL + xmlRegisterCharEncodingHandler (xmlCharEncodingHandlerPtr handler); +XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL + xmlGetCharEncodingHandler (xmlCharEncoding enc); +XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL + xmlFindCharEncodingHandler (const char *name); +XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL + xmlNewCharEncodingHandler (const char *name, + xmlCharEncodingInputFunc input, + xmlCharEncodingOutputFunc output); + +/* + * Interfaces for encoding names and aliases. + */ +XMLPUBFUN int XMLCALL + xmlAddEncodingAlias (const char *name, + const char *alias); +XMLPUBFUN int XMLCALL + xmlDelEncodingAlias (const char *alias); +XMLPUBFUN const char * XMLCALL + xmlGetEncodingAlias (const char *alias); +XMLPUBFUN void XMLCALL + xmlCleanupEncodingAliases (void); +XMLPUBFUN xmlCharEncoding XMLCALL + xmlParseCharEncoding (const char *name); +XMLPUBFUN const char * XMLCALL + xmlGetCharEncodingName (xmlCharEncoding enc); + +/* + * Interfaces directly used by the parsers. + */ +XMLPUBFUN xmlCharEncoding XMLCALL + xmlDetectCharEncoding (const unsigned char *in, + int len); + +XMLPUBFUN int XMLCALL + xmlCharEncOutFunc (xmlCharEncodingHandler *handler, + xmlBufferPtr out, + xmlBufferPtr in); + +XMLPUBFUN int XMLCALL + xmlCharEncInFunc (xmlCharEncodingHandler *handler, + xmlBufferPtr out, + xmlBufferPtr in); +XMLPUBFUN int XMLCALL + xmlCharEncFirstLine (xmlCharEncodingHandler *handler, + xmlBufferPtr out, + xmlBufferPtr in); +XMLPUBFUN int XMLCALL + xmlCharEncCloseFunc (xmlCharEncodingHandler *handler); + +/* + * Export a few useful functions + */ +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN int XMLCALL + UTF8Toisolat1 (unsigned char *out, + int *outlen, + const unsigned char *in, + int *inlen); +#endif /* LIBXML_OUTPUT_ENABLED */ +XMLPUBFUN int XMLCALL + isolat1ToUTF8 (unsigned char *out, + int *outlen, + const unsigned char *in, + int *inlen); +#ifdef __cplusplus +} +#endif + +#endif /* __XML_CHAR_ENCODING_H__ */ diff --git a/libxml2/include/libxml/entities.h b/libxml2/include/libxml/entities.h new file mode 100644 index 0000000..47b4573 --- /dev/null +++ b/libxml2/include/libxml/entities.h @@ -0,0 +1,151 @@ +/* + * Summary: interface for the XML entities handling + * Description: this module provides some of the entity API needed + * for the parser and applications. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_ENTITIES_H__ +#define __XML_ENTITIES_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The different valid entity types. + */ +typedef enum { + XML_INTERNAL_GENERAL_ENTITY = 1, + XML_EXTERNAL_GENERAL_PARSED_ENTITY = 2, + XML_EXTERNAL_GENERAL_UNPARSED_ENTITY = 3, + XML_INTERNAL_PARAMETER_ENTITY = 4, + XML_EXTERNAL_PARAMETER_ENTITY = 5, + XML_INTERNAL_PREDEFINED_ENTITY = 6 +} xmlEntityType; + +/* + * An unit of storage for an entity, contains the string, the value + * and the linkind data needed for the linking in the hash table. + */ + +struct _xmlEntity { + void *_private; /* application data */ + xmlElementType type; /* XML_ENTITY_DECL, must be second ! */ + const xmlChar *name; /* Entity name */ + struct _xmlNode *children; /* First child link */ + struct _xmlNode *last; /* Last child link */ + struct _xmlDtd *parent; /* -> DTD */ + struct _xmlNode *next; /* next sibling link */ + struct _xmlNode *prev; /* previous sibling link */ + struct _xmlDoc *doc; /* the containing document */ + + xmlChar *orig; /* content without ref substitution */ + xmlChar *content; /* content or ndata if unparsed */ + int length; /* the content length */ + xmlEntityType etype; /* The entity type */ + const xmlChar *ExternalID; /* External identifier for PUBLIC */ + const xmlChar *SystemID; /* URI for a SYSTEM or PUBLIC Entity */ + + struct _xmlEntity *nexte; /* unused */ + const xmlChar *URI; /* the full URI as computed */ + int owner; /* does the entity own the childrens */ + int checked; /* was the entity content checked */ + /* this is also used to count entities + * references done from that entity + * and if it contains '<' */ +}; + +/* + * All entities are stored in an hash table. + * There is 2 separate hash tables for global and parameter entities. + */ + +typedef struct _xmlHashTable xmlEntitiesTable; +typedef xmlEntitiesTable *xmlEntitiesTablePtr; + +/* + * External functions: + */ + +#ifdef LIBXML_LEGACY_ENABLED +XMLPUBFUN void XMLCALL + xmlInitializePredefinedEntities (void); +#endif /* LIBXML_LEGACY_ENABLED */ + +XMLPUBFUN xmlEntityPtr XMLCALL + xmlNewEntity (xmlDocPtr doc, + const xmlChar *name, + int type, + const xmlChar *ExternalID, + const xmlChar *SystemID, + const xmlChar *content); +XMLPUBFUN xmlEntityPtr XMLCALL + xmlAddDocEntity (xmlDocPtr doc, + const xmlChar *name, + int type, + const xmlChar *ExternalID, + const xmlChar *SystemID, + const xmlChar *content); +XMLPUBFUN xmlEntityPtr XMLCALL + xmlAddDtdEntity (xmlDocPtr doc, + const xmlChar *name, + int type, + const xmlChar *ExternalID, + const xmlChar *SystemID, + const xmlChar *content); +XMLPUBFUN xmlEntityPtr XMLCALL + xmlGetPredefinedEntity (const xmlChar *name); +XMLPUBFUN xmlEntityPtr XMLCALL + xmlGetDocEntity (const xmlDoc *doc, + const xmlChar *name); +XMLPUBFUN xmlEntityPtr XMLCALL + xmlGetDtdEntity (xmlDocPtr doc, + const xmlChar *name); +XMLPUBFUN xmlEntityPtr XMLCALL + xmlGetParameterEntity (xmlDocPtr doc, + const xmlChar *name); +#ifdef LIBXML_LEGACY_ENABLED +XMLPUBFUN const xmlChar * XMLCALL + xmlEncodeEntities (xmlDocPtr doc, + const xmlChar *input); +#endif /* LIBXML_LEGACY_ENABLED */ +XMLPUBFUN xmlChar * XMLCALL + xmlEncodeEntitiesReentrant(xmlDocPtr doc, + const xmlChar *input); +XMLPUBFUN xmlChar * XMLCALL + xmlEncodeSpecialChars (const xmlDoc *doc, + const xmlChar *input); +XMLPUBFUN xmlEntitiesTablePtr XMLCALL + xmlCreateEntitiesTable (void); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlEntitiesTablePtr XMLCALL + xmlCopyEntitiesTable (xmlEntitiesTablePtr table); +#endif /* LIBXML_TREE_ENABLED */ +XMLPUBFUN void XMLCALL + xmlFreeEntitiesTable (xmlEntitiesTablePtr table); +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void XMLCALL + xmlDumpEntitiesTable (xmlBufferPtr buf, + xmlEntitiesTablePtr table); +XMLPUBFUN void XMLCALL + xmlDumpEntityDecl (xmlBufferPtr buf, + xmlEntityPtr ent); +#endif /* LIBXML_OUTPUT_ENABLED */ +#ifdef LIBXML_LEGACY_ENABLED +XMLPUBFUN void XMLCALL + xmlCleanupPredefinedEntities(void); +#endif /* LIBXML_LEGACY_ENABLED */ + + +#ifdef __cplusplus +} +#endif + +# endif /* __XML_ENTITIES_H__ */ diff --git a/libxml2/include/libxml/globals.h b/libxml2/include/libxml/globals.h new file mode 100644 index 0000000..a9305aa --- /dev/null +++ b/libxml2/include/libxml/globals.h @@ -0,0 +1,509 @@ +/* + * Summary: interface for all global variables of the library + * Description: all the global variables and thread handling for + * those variables is handled by this module. + * + * The bottom of this file is automatically generated by build_glob.py + * based on the description file global.data + * + * Copy: See Copyright for the status of this software. + * + * Author: Gary Pennington , Daniel Veillard + */ + +#ifndef __XML_GLOBALS_H +#define __XML_GLOBALS_H + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +XMLPUBFUN void XMLCALL xmlInitGlobals(void); +XMLPUBFUN void XMLCALL xmlCleanupGlobals(void); + +/** + * xmlParserInputBufferCreateFilenameFunc: + * @URI: the URI to read from + * @enc: the requested source encoding + * + * Signature for the function doing the lookup for a suitable input method + * corresponding to an URI. + * + * Returns the new xmlParserInputBufferPtr in case of success or NULL if no + * method was found. + */ +typedef xmlParserInputBufferPtr (*xmlParserInputBufferCreateFilenameFunc) (const char *URI, + xmlCharEncoding enc); + + +/** + * xmlOutputBufferCreateFilenameFunc: + * @URI: the URI to write to + * @enc: the requested target encoding + * + * Signature for the function doing the lookup for a suitable output method + * corresponding to an URI. + * + * Returns the new xmlOutputBufferPtr in case of success or NULL if no + * method was found. + */ +typedef xmlOutputBufferPtr (*xmlOutputBufferCreateFilenameFunc) (const char *URI, + xmlCharEncodingHandlerPtr encoder, + int compression); + +XMLPUBFUN xmlParserInputBufferCreateFilenameFunc +XMLCALL xmlParserInputBufferCreateFilenameDefault (xmlParserInputBufferCreateFilenameFunc func); +XMLPUBFUN xmlOutputBufferCreateFilenameFunc +XMLCALL xmlOutputBufferCreateFilenameDefault (xmlOutputBufferCreateFilenameFunc func); + +/* + * Externally global symbols which need to be protected for backwards + * compatibility support. + */ + +#undef docbDefaultSAXHandler +#undef htmlDefaultSAXHandler +#undef oldXMLWDcompatibility +#undef xmlBufferAllocScheme +#undef xmlDefaultBufferSize +#undef xmlDefaultSAXHandler +#undef xmlDefaultSAXLocator +#undef xmlDoValidityCheckingDefaultValue +#undef xmlFree +#undef xmlGenericError +#undef xmlStructuredError +#undef xmlGenericErrorContext +#undef xmlStructuredErrorContext +#undef xmlGetWarningsDefaultValue +#undef xmlIndentTreeOutput +#undef xmlTreeIndentString +#undef xmlKeepBlanksDefaultValue +#undef xmlLineNumbersDefaultValue +#undef xmlLoadExtDtdDefaultValue +#undef xmlMalloc +#undef xmlMallocAtomic +#undef xmlMemStrdup +#undef xmlParserDebugEntities +#undef xmlParserVersion +#undef xmlPedanticParserDefaultValue +#undef xmlRealloc +#undef xmlSaveNoEmptyTags +#undef xmlSubstituteEntitiesDefaultValue +#undef xmlRegisterNodeDefaultValue +#undef xmlDeregisterNodeDefaultValue +#undef xmlLastError +#undef xmlParserInputBufferCreateFilenameValue +#undef xmlOutputBufferCreateFilenameValue + +/** + * xmlRegisterNodeFunc: + * @node: the current node + * + * Signature for the registration callback of a created node + */ +typedef void (*xmlRegisterNodeFunc) (xmlNodePtr node); +/** + * xmlDeregisterNodeFunc: + * @node: the current node + * + * Signature for the deregistration callback of a discarded node + */ +typedef void (*xmlDeregisterNodeFunc) (xmlNodePtr node); + +typedef struct _xmlGlobalState xmlGlobalState; +typedef xmlGlobalState *xmlGlobalStatePtr; +struct _xmlGlobalState +{ + const char *xmlParserVersion; + + xmlSAXLocator xmlDefaultSAXLocator; + xmlSAXHandlerV1 xmlDefaultSAXHandler; + xmlSAXHandlerV1 docbDefaultSAXHandler; + xmlSAXHandlerV1 htmlDefaultSAXHandler; + + xmlFreeFunc xmlFree; + xmlMallocFunc xmlMalloc; + xmlStrdupFunc xmlMemStrdup; + xmlReallocFunc xmlRealloc; + + xmlGenericErrorFunc xmlGenericError; + xmlStructuredErrorFunc xmlStructuredError; + void *xmlGenericErrorContext; + + int oldXMLWDcompatibility; + + xmlBufferAllocationScheme xmlBufferAllocScheme; + int xmlDefaultBufferSize; + + int xmlSubstituteEntitiesDefaultValue; + int xmlDoValidityCheckingDefaultValue; + int xmlGetWarningsDefaultValue; + int xmlKeepBlanksDefaultValue; + int xmlLineNumbersDefaultValue; + int xmlLoadExtDtdDefaultValue; + int xmlParserDebugEntities; + int xmlPedanticParserDefaultValue; + + int xmlSaveNoEmptyTags; + int xmlIndentTreeOutput; + const char *xmlTreeIndentString; + + xmlRegisterNodeFunc xmlRegisterNodeDefaultValue; + xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue; + + xmlMallocFunc xmlMallocAtomic; + xmlError xmlLastError; + + xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue; + xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue; + + void *xmlStructuredErrorContext; +}; + +#ifdef __cplusplus +} +#endif +#include +#ifdef __cplusplus +extern "C" { +#endif + +XMLPUBFUN void XMLCALL xmlInitializeGlobalState(xmlGlobalStatePtr gs); + +XMLPUBFUN void XMLCALL xmlThrDefSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler); + +XMLPUBFUN void XMLCALL xmlThrDefSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler); + +XMLPUBFUN xmlRegisterNodeFunc XMLCALL xmlRegisterNodeDefault(xmlRegisterNodeFunc func); +XMLPUBFUN xmlRegisterNodeFunc XMLCALL xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func); +XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func); +XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func); + +XMLPUBFUN xmlOutputBufferCreateFilenameFunc XMLCALL + xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func); +XMLPUBFUN xmlParserInputBufferCreateFilenameFunc XMLCALL + xmlThrDefParserInputBufferCreateFilenameDefault( + xmlParserInputBufferCreateFilenameFunc func); + +/** DOC_DISABLE */ +/* + * In general the memory allocation entry points are not kept + * thread specific but this can be overridden by LIBXML_THREAD_ALLOC_ENABLED + * - xmlMalloc + * - xmlMallocAtomic + * - xmlRealloc + * - xmlMemStrdup + * - xmlFree + */ + +#ifdef LIBXML_THREAD_ALLOC_ENABLED +#ifdef LIBXML_THREAD_ENABLED +XMLPUBFUN xmlMallocFunc * XMLCALL __xmlMalloc(void); +#define xmlMalloc \ +(*(__xmlMalloc())) +#else +XMLPUBVAR xmlMallocFunc xmlMalloc; +#endif + +#ifdef LIBXML_THREAD_ENABLED +XMLPUBFUN xmlMallocFunc * XMLCALL __xmlMallocAtomic(void); +#define xmlMallocAtomic \ +(*(__xmlMallocAtomic())) +#else +XMLPUBVAR xmlMallocFunc xmlMallocAtomic; +#endif + +#ifdef LIBXML_THREAD_ENABLED +XMLPUBFUN xmlReallocFunc * XMLCALL __xmlRealloc(void); +#define xmlRealloc \ +(*(__xmlRealloc())) +#else +XMLPUBVAR xmlReallocFunc xmlRealloc; +#endif + +#ifdef LIBXML_THREAD_ENABLED +XMLPUBFUN xmlFreeFunc * XMLCALL __xmlFree(void); +#define xmlFree \ +(*(__xmlFree())) +#else +XMLPUBVAR xmlFreeFunc xmlFree; +#endif + +#ifdef LIBXML_THREAD_ENABLED +XMLPUBFUN xmlStrdupFunc * XMLCALL __xmlMemStrdup(void); +#define xmlMemStrdup \ +(*(__xmlMemStrdup())) +#else +XMLPUBVAR xmlStrdupFunc xmlMemStrdup; +#endif + +#else /* !LIBXML_THREAD_ALLOC_ENABLED */ +XMLPUBVAR xmlMallocFunc xmlMalloc; +XMLPUBVAR xmlMallocFunc xmlMallocAtomic; +XMLPUBVAR xmlReallocFunc xmlRealloc; +XMLPUBVAR xmlFreeFunc xmlFree; +XMLPUBVAR xmlStrdupFunc xmlMemStrdup; +#endif /* LIBXML_THREAD_ALLOC_ENABLED */ + +#ifdef LIBXML_DOCB_ENABLED +XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __docbDefaultSAXHandler(void); +#ifdef LIBXML_THREAD_ENABLED +#define docbDefaultSAXHandler \ +(*(__docbDefaultSAXHandler())) +#else +XMLPUBVAR xmlSAXHandlerV1 docbDefaultSAXHandler; +#endif +#endif + +#ifdef LIBXML_HTML_ENABLED +XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __htmlDefaultSAXHandler(void); +#ifdef LIBXML_THREAD_ENABLED +#define htmlDefaultSAXHandler \ +(*(__htmlDefaultSAXHandler())) +#else +XMLPUBVAR xmlSAXHandlerV1 htmlDefaultSAXHandler; +#endif +#endif + +XMLPUBFUN xmlError * XMLCALL __xmlLastError(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlLastError \ +(*(__xmlLastError())) +#else +XMLPUBVAR xmlError xmlLastError; +#endif + +/* + * Everything starting from the line below is + * Automatically generated by build_glob.py. + * Do not modify the previous line. + */ + + +XMLPUBFUN int * XMLCALL __oldXMLWDcompatibility(void); +#ifdef LIBXML_THREAD_ENABLED +#define oldXMLWDcompatibility \ +(*(__oldXMLWDcompatibility())) +#else +XMLPUBVAR int oldXMLWDcompatibility; +#endif + +XMLPUBFUN xmlBufferAllocationScheme * XMLCALL __xmlBufferAllocScheme(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlBufferAllocScheme \ +(*(__xmlBufferAllocScheme())) +#else +XMLPUBVAR xmlBufferAllocationScheme xmlBufferAllocScheme; +#endif +XMLPUBFUN xmlBufferAllocationScheme XMLCALL + xmlThrDefBufferAllocScheme(xmlBufferAllocationScheme v); + +XMLPUBFUN int * XMLCALL __xmlDefaultBufferSize(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlDefaultBufferSize \ +(*(__xmlDefaultBufferSize())) +#else +XMLPUBVAR int xmlDefaultBufferSize; +#endif +XMLPUBFUN int XMLCALL xmlThrDefDefaultBufferSize(int v); + +XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __xmlDefaultSAXHandler(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlDefaultSAXHandler \ +(*(__xmlDefaultSAXHandler())) +#else +XMLPUBVAR xmlSAXHandlerV1 xmlDefaultSAXHandler; +#endif + +XMLPUBFUN xmlSAXLocator * XMLCALL __xmlDefaultSAXLocator(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlDefaultSAXLocator \ +(*(__xmlDefaultSAXLocator())) +#else +XMLPUBVAR xmlSAXLocator xmlDefaultSAXLocator; +#endif + +XMLPUBFUN int * XMLCALL __xmlDoValidityCheckingDefaultValue(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlDoValidityCheckingDefaultValue \ +(*(__xmlDoValidityCheckingDefaultValue())) +#else +XMLPUBVAR int xmlDoValidityCheckingDefaultValue; +#endif +XMLPUBFUN int XMLCALL xmlThrDefDoValidityCheckingDefaultValue(int v); + +XMLPUBFUN xmlGenericErrorFunc * XMLCALL __xmlGenericError(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlGenericError \ +(*(__xmlGenericError())) +#else +XMLPUBVAR xmlGenericErrorFunc xmlGenericError; +#endif + +XMLPUBFUN xmlStructuredErrorFunc * XMLCALL __xmlStructuredError(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlStructuredError \ +(*(__xmlStructuredError())) +#else +XMLPUBVAR xmlStructuredErrorFunc xmlStructuredError; +#endif + +XMLPUBFUN void * * XMLCALL __xmlGenericErrorContext(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlGenericErrorContext \ +(*(__xmlGenericErrorContext())) +#else +XMLPUBVAR void * xmlGenericErrorContext; +#endif + +XMLPUBFUN void * * XMLCALL __xmlStructuredErrorContext(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlStructuredErrorContext \ +(*(__xmlStructuredErrorContext())) +#else +XMLPUBVAR void * xmlStructuredErrorContext; +#endif + +XMLPUBFUN int * XMLCALL __xmlGetWarningsDefaultValue(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlGetWarningsDefaultValue \ +(*(__xmlGetWarningsDefaultValue())) +#else +XMLPUBVAR int xmlGetWarningsDefaultValue; +#endif +XMLPUBFUN int XMLCALL xmlThrDefGetWarningsDefaultValue(int v); + +XMLPUBFUN int * XMLCALL __xmlIndentTreeOutput(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlIndentTreeOutput \ +(*(__xmlIndentTreeOutput())) +#else +XMLPUBVAR int xmlIndentTreeOutput; +#endif +XMLPUBFUN int XMLCALL xmlThrDefIndentTreeOutput(int v); + +XMLPUBFUN const char * * XMLCALL __xmlTreeIndentString(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlTreeIndentString \ +(*(__xmlTreeIndentString())) +#else +XMLPUBVAR const char * xmlTreeIndentString; +#endif +XMLPUBFUN const char * XMLCALL xmlThrDefTreeIndentString(const char * v); + +XMLPUBFUN int * XMLCALL __xmlKeepBlanksDefaultValue(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlKeepBlanksDefaultValue \ +(*(__xmlKeepBlanksDefaultValue())) +#else +XMLPUBVAR int xmlKeepBlanksDefaultValue; +#endif +XMLPUBFUN int XMLCALL xmlThrDefKeepBlanksDefaultValue(int v); + +XMLPUBFUN int * XMLCALL __xmlLineNumbersDefaultValue(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlLineNumbersDefaultValue \ +(*(__xmlLineNumbersDefaultValue())) +#else +XMLPUBVAR int xmlLineNumbersDefaultValue; +#endif +XMLPUBFUN int XMLCALL xmlThrDefLineNumbersDefaultValue(int v); + +XMLPUBFUN int * XMLCALL __xmlLoadExtDtdDefaultValue(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlLoadExtDtdDefaultValue \ +(*(__xmlLoadExtDtdDefaultValue())) +#else +XMLPUBVAR int xmlLoadExtDtdDefaultValue; +#endif +XMLPUBFUN int XMLCALL xmlThrDefLoadExtDtdDefaultValue(int v); + +XMLPUBFUN int * XMLCALL __xmlParserDebugEntities(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlParserDebugEntities \ +(*(__xmlParserDebugEntities())) +#else +XMLPUBVAR int xmlParserDebugEntities; +#endif +XMLPUBFUN int XMLCALL xmlThrDefParserDebugEntities(int v); + +XMLPUBFUN const char * * XMLCALL __xmlParserVersion(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlParserVersion \ +(*(__xmlParserVersion())) +#else +XMLPUBVAR const char * xmlParserVersion; +#endif + +XMLPUBFUN int * XMLCALL __xmlPedanticParserDefaultValue(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlPedanticParserDefaultValue \ +(*(__xmlPedanticParserDefaultValue())) +#else +XMLPUBVAR int xmlPedanticParserDefaultValue; +#endif +XMLPUBFUN int XMLCALL xmlThrDefPedanticParserDefaultValue(int v); + +XMLPUBFUN int * XMLCALL __xmlSaveNoEmptyTags(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlSaveNoEmptyTags \ +(*(__xmlSaveNoEmptyTags())) +#else +XMLPUBVAR int xmlSaveNoEmptyTags; +#endif +XMLPUBFUN int XMLCALL xmlThrDefSaveNoEmptyTags(int v); + +XMLPUBFUN int * XMLCALL __xmlSubstituteEntitiesDefaultValue(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlSubstituteEntitiesDefaultValue \ +(*(__xmlSubstituteEntitiesDefaultValue())) +#else +XMLPUBVAR int xmlSubstituteEntitiesDefaultValue; +#endif +XMLPUBFUN int XMLCALL xmlThrDefSubstituteEntitiesDefaultValue(int v); + +XMLPUBFUN xmlRegisterNodeFunc * XMLCALL __xmlRegisterNodeDefaultValue(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlRegisterNodeDefaultValue \ +(*(__xmlRegisterNodeDefaultValue())) +#else +XMLPUBVAR xmlRegisterNodeFunc xmlRegisterNodeDefaultValue; +#endif + +XMLPUBFUN xmlDeregisterNodeFunc * XMLCALL __xmlDeregisterNodeDefaultValue(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlDeregisterNodeDefaultValue \ +(*(__xmlDeregisterNodeDefaultValue())) +#else +XMLPUBVAR xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue; +#endif + +XMLPUBFUN xmlParserInputBufferCreateFilenameFunc * XMLCALL \ + __xmlParserInputBufferCreateFilenameValue(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlParserInputBufferCreateFilenameValue \ +(*(__xmlParserInputBufferCreateFilenameValue())) +#else +XMLPUBVAR xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue; +#endif + +XMLPUBFUN xmlOutputBufferCreateFilenameFunc * XMLCALL __xmlOutputBufferCreateFilenameValue(void); +#ifdef LIBXML_THREAD_ENABLED +#define xmlOutputBufferCreateFilenameValue \ +(*(__xmlOutputBufferCreateFilenameValue())) +#else +XMLPUBVAR xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue; +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __XML_GLOBALS_H */ diff --git a/libxml2/include/libxml/hash.h b/libxml2/include/libxml/hash.h new file mode 100644 index 0000000..dc8ab7e --- /dev/null +++ b/libxml2/include/libxml/hash.h @@ -0,0 +1,233 @@ +/* + * Summary: Chained hash tables + * Description: This module implements the hash table support used in + * various places in the library. + * + * Copy: See Copyright for the status of this software. + * + * Author: Bjorn Reese + */ + +#ifndef __XML_HASH_H__ +#define __XML_HASH_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The hash table. + */ +typedef struct _xmlHashTable xmlHashTable; +typedef xmlHashTable *xmlHashTablePtr; + +#ifdef __cplusplus +} +#endif + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Recent version of gcc produce a warning when a function pointer is assigned + * to an object pointer, or vice versa. The following macro is a dirty hack + * to allow suppression of the warning. If your architecture has function + * pointers which are a different size than a void pointer, there may be some + * serious trouble within the library. + */ +/** + * XML_CAST_FPTR: + * @fptr: pointer to a function + * + * Macro to do a casting from an object pointer to a + * function pointer without encountering a warning from + * gcc + * + * #define XML_CAST_FPTR(fptr) (*(void **)(&fptr)) + * This macro violated ISO C aliasing rules (gcc4 on s390 broke) + * so it is disabled now + */ + +#define XML_CAST_FPTR(fptr) fptr + + +/* + * function types: + */ +/** + * xmlHashDeallocator: + * @payload: the data in the hash + * @name: the name associated + * + * Callback to free data from a hash. + */ +typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name); +/** + * xmlHashCopier: + * @payload: the data in the hash + * @name: the name associated + * + * Callback to copy data from a hash. + * + * Returns a copy of the data or NULL in case of error. + */ +typedef void *(*xmlHashCopier)(void *payload, xmlChar *name); +/** + * xmlHashScanner: + * @payload: the data in the hash + * @data: extra scannner data + * @name: the name associated + * + * Callback when scanning data in a hash with the simple scanner. + */ +typedef void (*xmlHashScanner)(void *payload, void *data, xmlChar *name); +/** + * xmlHashScannerFull: + * @payload: the data in the hash + * @data: extra scannner data + * @name: the name associated + * @name2: the second name associated + * @name3: the third name associated + * + * Callback when scanning data in a hash with the full scanner. + */ +typedef void (*xmlHashScannerFull)(void *payload, void *data, + const xmlChar *name, const xmlChar *name2, + const xmlChar *name3); + +/* + * Constructor and destructor. + */ +XMLPUBFUN xmlHashTablePtr XMLCALL + xmlHashCreate (int size); +XMLPUBFUN xmlHashTablePtr XMLCALL + xmlHashCreateDict(int size, + xmlDictPtr dict); +XMLPUBFUN void XMLCALL + xmlHashFree (xmlHashTablePtr table, + xmlHashDeallocator f); + +/* + * Add a new entry to the hash table. + */ +XMLPUBFUN int XMLCALL + xmlHashAddEntry (xmlHashTablePtr table, + const xmlChar *name, + void *userdata); +XMLPUBFUN int XMLCALL + xmlHashUpdateEntry(xmlHashTablePtr table, + const xmlChar *name, + void *userdata, + xmlHashDeallocator f); +XMLPUBFUN int XMLCALL + xmlHashAddEntry2(xmlHashTablePtr table, + const xmlChar *name, + const xmlChar *name2, + void *userdata); +XMLPUBFUN int XMLCALL + xmlHashUpdateEntry2(xmlHashTablePtr table, + const xmlChar *name, + const xmlChar *name2, + void *userdata, + xmlHashDeallocator f); +XMLPUBFUN int XMLCALL + xmlHashAddEntry3(xmlHashTablePtr table, + const xmlChar *name, + const xmlChar *name2, + const xmlChar *name3, + void *userdata); +XMLPUBFUN int XMLCALL + xmlHashUpdateEntry3(xmlHashTablePtr table, + const xmlChar *name, + const xmlChar *name2, + const xmlChar *name3, + void *userdata, + xmlHashDeallocator f); + +/* + * Remove an entry from the hash table. + */ +XMLPUBFUN int XMLCALL + xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name, + xmlHashDeallocator f); +XMLPUBFUN int XMLCALL + xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name, + const xmlChar *name2, xmlHashDeallocator f); +XMLPUBFUN int XMLCALL + xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name, + const xmlChar *name2, const xmlChar *name3, + xmlHashDeallocator f); + +/* + * Retrieve the userdata. + */ +XMLPUBFUN void * XMLCALL + xmlHashLookup (xmlHashTablePtr table, + const xmlChar *name); +XMLPUBFUN void * XMLCALL + xmlHashLookup2 (xmlHashTablePtr table, + const xmlChar *name, + const xmlChar *name2); +XMLPUBFUN void * XMLCALL + xmlHashLookup3 (xmlHashTablePtr table, + const xmlChar *name, + const xmlChar *name2, + const xmlChar *name3); +XMLPUBFUN void * XMLCALL + xmlHashQLookup (xmlHashTablePtr table, + const xmlChar *name, + const xmlChar *prefix); +XMLPUBFUN void * XMLCALL + xmlHashQLookup2 (xmlHashTablePtr table, + const xmlChar *name, + const xmlChar *prefix, + const xmlChar *name2, + const xmlChar *prefix2); +XMLPUBFUN void * XMLCALL + xmlHashQLookup3 (xmlHashTablePtr table, + const xmlChar *name, + const xmlChar *prefix, + const xmlChar *name2, + const xmlChar *prefix2, + const xmlChar *name3, + const xmlChar *prefix3); + +/* + * Helpers. + */ +XMLPUBFUN xmlHashTablePtr XMLCALL + xmlHashCopy (xmlHashTablePtr table, + xmlHashCopier f); +XMLPUBFUN int XMLCALL + xmlHashSize (xmlHashTablePtr table); +XMLPUBFUN void XMLCALL + xmlHashScan (xmlHashTablePtr table, + xmlHashScanner f, + void *data); +XMLPUBFUN void XMLCALL + xmlHashScan3 (xmlHashTablePtr table, + const xmlChar *name, + const xmlChar *name2, + const xmlChar *name3, + xmlHashScanner f, + void *data); +XMLPUBFUN void XMLCALL + xmlHashScanFull (xmlHashTablePtr table, + xmlHashScannerFull f, + void *data); +XMLPUBFUN void XMLCALL + xmlHashScanFull3(xmlHashTablePtr table, + const xmlChar *name, + const xmlChar *name2, + const xmlChar *name3, + xmlHashScannerFull f, + void *data); +#ifdef __cplusplus +} +#endif +#endif /* ! __XML_HASH_H__ */ diff --git a/libxml2/include/libxml/list.h b/libxml2/include/libxml/list.h new file mode 100644 index 0000000..0504e0c --- /dev/null +++ b/libxml2/include/libxml/list.h @@ -0,0 +1,137 @@ +/* + * Summary: lists interfaces + * Description: this module implement the list support used in + * various place in the library. + * + * Copy: See Copyright for the status of this software. + * + * Author: Gary Pennington + */ + +#ifndef __XML_LINK_INCLUDE__ +#define __XML_LINK_INCLUDE__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _xmlLink xmlLink; +typedef xmlLink *xmlLinkPtr; + +typedef struct _xmlList xmlList; +typedef xmlList *xmlListPtr; + +/** + * xmlListDeallocator: + * @lk: the data to deallocate + * + * Callback function used to free data from a list. + */ +typedef void (*xmlListDeallocator) (xmlLinkPtr lk); +/** + * xmlListDataCompare: + * @data0: the first data + * @data1: the second data + * + * Callback function used to compare 2 data. + * + * Returns 0 is equality, -1 or 1 otherwise depending on the ordering. + */ +typedef int (*xmlListDataCompare) (const void *data0, const void *data1); +/** + * xmlListWalker: + * @data: the data found in the list + * @user: extra user provided data to the walker + * + * Callback function used when walking a list with xmlListWalk(). + * + * Returns 0 to stop walking the list, 1 otherwise. + */ +typedef int (*xmlListWalker) (const void *data, const void *user); + +/* Creation/Deletion */ +XMLPUBFUN xmlListPtr XMLCALL + xmlListCreate (xmlListDeallocator deallocator, + xmlListDataCompare compare); +XMLPUBFUN void XMLCALL + xmlListDelete (xmlListPtr l); + +/* Basic Operators */ +XMLPUBFUN void * XMLCALL + xmlListSearch (xmlListPtr l, + void *data); +XMLPUBFUN void * XMLCALL + xmlListReverseSearch (xmlListPtr l, + void *data); +XMLPUBFUN int XMLCALL + xmlListInsert (xmlListPtr l, + void *data) ; +XMLPUBFUN int XMLCALL + xmlListAppend (xmlListPtr l, + void *data) ; +XMLPUBFUN int XMLCALL + xmlListRemoveFirst (xmlListPtr l, + void *data); +XMLPUBFUN int XMLCALL + xmlListRemoveLast (xmlListPtr l, + void *data); +XMLPUBFUN int XMLCALL + xmlListRemoveAll (xmlListPtr l, + void *data); +XMLPUBFUN void XMLCALL + xmlListClear (xmlListPtr l); +XMLPUBFUN int XMLCALL + xmlListEmpty (xmlListPtr l); +XMLPUBFUN xmlLinkPtr XMLCALL + xmlListFront (xmlListPtr l); +XMLPUBFUN xmlLinkPtr XMLCALL + xmlListEnd (xmlListPtr l); +XMLPUBFUN int XMLCALL + xmlListSize (xmlListPtr l); + +XMLPUBFUN void XMLCALL + xmlListPopFront (xmlListPtr l); +XMLPUBFUN void XMLCALL + xmlListPopBack (xmlListPtr l); +XMLPUBFUN int XMLCALL + xmlListPushFront (xmlListPtr l, + void *data); +XMLPUBFUN int XMLCALL + xmlListPushBack (xmlListPtr l, + void *data); + +/* Advanced Operators */ +XMLPUBFUN void XMLCALL + xmlListReverse (xmlListPtr l); +XMLPUBFUN void XMLCALL + xmlListSort (xmlListPtr l); +XMLPUBFUN void XMLCALL + xmlListWalk (xmlListPtr l, + xmlListWalker walker, + const void *user); +XMLPUBFUN void XMLCALL + xmlListReverseWalk (xmlListPtr l, + xmlListWalker walker, + const void *user); +XMLPUBFUN void XMLCALL + xmlListMerge (xmlListPtr l1, + xmlListPtr l2); +XMLPUBFUN xmlListPtr XMLCALL + xmlListDup (const xmlListPtr old); +XMLPUBFUN int XMLCALL + xmlListCopy (xmlListPtr cur, + const xmlListPtr old); +/* Link operators */ +XMLPUBFUN void * XMLCALL + xmlLinkGetData (xmlLinkPtr lk); + +/* xmlListUnique() */ +/* xmlListSwap */ + +#ifdef __cplusplus +} +#endif + +#endif /* __XML_LINK_INCLUDE__ */ diff --git a/libxml2/include/libxml/nanoftp.h b/libxml2/include/libxml/nanoftp.h new file mode 100644 index 0000000..abb4bf7 --- /dev/null +++ b/libxml2/include/libxml/nanoftp.h @@ -0,0 +1,163 @@ +/* + * Summary: minimal FTP implementation + * Description: minimal FTP implementation allowing to fetch resources + * like external subset. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __NANO_FTP_H__ +#define __NANO_FTP_H__ + +#include + +#ifdef LIBXML_FTP_ENABLED + +/* Needed for portability to Windows 64 bits */ +#if defined(__MINGW32__) || defined(_WIN32_WCE) +#include +#else +/** + * SOCKET: + * + * macro used to provide portability of code to windows sockets + */ +#define SOCKET int +/** + * INVALID_SOCKET: + * + * macro used to provide portability of code to windows sockets + * the value to be used when the socket is not valid + */ +#undef INVALID_SOCKET +#define INVALID_SOCKET (-1) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * ftpListCallback: + * @userData: user provided data for the callback + * @filename: the file name (including "->" when links are shown) + * @attrib: the attribute string + * @owner: the owner string + * @group: the group string + * @size: the file size + * @links: the link count + * @year: the year + * @month: the month + * @day: the day + * @hour: the hour + * @minute: the minute + * + * A callback for the xmlNanoFTPList command. + * Note that only one of year and day:minute are specified. + */ +typedef void (*ftpListCallback) (void *userData, + const char *filename, const char *attrib, + const char *owner, const char *group, + unsigned long size, int links, int year, + const char *month, int day, int hour, + int minute); +/** + * ftpDataCallback: + * @userData: the user provided context + * @data: the data received + * @len: its size in bytes + * + * A callback for the xmlNanoFTPGet command. + */ +typedef void (*ftpDataCallback) (void *userData, + const char *data, + int len); + +/* + * Init + */ +XMLPUBFUN void XMLCALL + xmlNanoFTPInit (void); +XMLPUBFUN void XMLCALL + xmlNanoFTPCleanup (void); + +/* + * Creating/freeing contexts. + */ +XMLPUBFUN void * XMLCALL + xmlNanoFTPNewCtxt (const char *URL); +XMLPUBFUN void XMLCALL + xmlNanoFTPFreeCtxt (void * ctx); +XMLPUBFUN void * XMLCALL + xmlNanoFTPConnectTo (const char *server, + int port); +/* + * Opening/closing session connections. + */ +XMLPUBFUN void * XMLCALL + xmlNanoFTPOpen (const char *URL); +XMLPUBFUN int XMLCALL + xmlNanoFTPConnect (void *ctx); +XMLPUBFUN int XMLCALL + xmlNanoFTPClose (void *ctx); +XMLPUBFUN int XMLCALL + xmlNanoFTPQuit (void *ctx); +XMLPUBFUN void XMLCALL + xmlNanoFTPScanProxy (const char *URL); +XMLPUBFUN void XMLCALL + xmlNanoFTPProxy (const char *host, + int port, + const char *user, + const char *passwd, + int type); +XMLPUBFUN int XMLCALL + xmlNanoFTPUpdateURL (void *ctx, + const char *URL); + +/* + * Rather internal commands. + */ +XMLPUBFUN int XMLCALL + xmlNanoFTPGetResponse (void *ctx); +XMLPUBFUN int XMLCALL + xmlNanoFTPCheckResponse (void *ctx); + +/* + * CD/DIR/GET handlers. + */ +XMLPUBFUN int XMLCALL + xmlNanoFTPCwd (void *ctx, + const char *directory); +XMLPUBFUN int XMLCALL + xmlNanoFTPDele (void *ctx, + const char *file); + +XMLPUBFUN SOCKET XMLCALL + xmlNanoFTPGetConnection (void *ctx); +XMLPUBFUN int XMLCALL + xmlNanoFTPCloseConnection(void *ctx); +XMLPUBFUN int XMLCALL + xmlNanoFTPList (void *ctx, + ftpListCallback callback, + void *userData, + const char *filename); +XMLPUBFUN SOCKET XMLCALL + xmlNanoFTPGetSocket (void *ctx, + const char *filename); +XMLPUBFUN int XMLCALL + xmlNanoFTPGet (void *ctx, + ftpDataCallback callback, + void *userData, + const char *filename); +XMLPUBFUN int XMLCALL + xmlNanoFTPRead (void *ctx, + void *dest, + int len); + +#ifdef __cplusplus +} +#endif +#endif /* LIBXML_FTP_ENABLED */ +#endif /* __NANO_FTP_H__ */ diff --git a/libxml2/include/libxml/nanohttp.h b/libxml2/include/libxml/nanohttp.h new file mode 100644 index 0000000..22b8fb4 --- /dev/null +++ b/libxml2/include/libxml/nanohttp.h @@ -0,0 +1,81 @@ +/* + * Summary: minimal HTTP implementation + * Description: minimal HTTP implementation allowing to fetch resources + * like external subset. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __NANO_HTTP_H__ +#define __NANO_HTTP_H__ + +#include + +#ifdef LIBXML_HTTP_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif +XMLPUBFUN void XMLCALL + xmlNanoHTTPInit (void); +XMLPUBFUN void XMLCALL + xmlNanoHTTPCleanup (void); +XMLPUBFUN void XMLCALL + xmlNanoHTTPScanProxy (const char *URL); +XMLPUBFUN int XMLCALL + xmlNanoHTTPFetch (const char *URL, + const char *filename, + char **contentType); +XMLPUBFUN void * XMLCALL + xmlNanoHTTPMethod (const char *URL, + const char *method, + const char *input, + char **contentType, + const char *headers, + int ilen); +XMLPUBFUN void * XMLCALL + xmlNanoHTTPMethodRedir (const char *URL, + const char *method, + const char *input, + char **contentType, + char **redir, + const char *headers, + int ilen); +XMLPUBFUN void * XMLCALL + xmlNanoHTTPOpen (const char *URL, + char **contentType); +XMLPUBFUN void * XMLCALL + xmlNanoHTTPOpenRedir (const char *URL, + char **contentType, + char **redir); +XMLPUBFUN int XMLCALL + xmlNanoHTTPReturnCode (void *ctx); +XMLPUBFUN const char * XMLCALL + xmlNanoHTTPAuthHeader (void *ctx); +XMLPUBFUN const char * XMLCALL + xmlNanoHTTPRedir (void *ctx); +XMLPUBFUN int XMLCALL + xmlNanoHTTPContentLength( void * ctx ); +XMLPUBFUN const char * XMLCALL + xmlNanoHTTPEncoding (void *ctx); +XMLPUBFUN const char * XMLCALL + xmlNanoHTTPMimeType (void *ctx); +XMLPUBFUN int XMLCALL + xmlNanoHTTPRead (void *ctx, + void *dest, + int len); +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN int XMLCALL + xmlNanoHTTPSave (void *ctxt, + const char *filename); +#endif /* LIBXML_OUTPUT_ENABLED */ +XMLPUBFUN void XMLCALL + xmlNanoHTTPClose (void *ctx); +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_HTTP_ENABLED */ +#endif /* __NANO_HTTP_H__ */ diff --git a/libxml2/include/libxml/parser.h b/libxml2/include/libxml/parser.h new file mode 100644 index 0000000..47fbec0 --- /dev/null +++ b/libxml2/include/libxml/parser.h @@ -0,0 +1,1241 @@ +/* + * Summary: the core parser module + * Description: Interfaces, constants and types related to the XML parser + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_PARSER_H__ +#define __XML_PARSER_H__ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * XML_DEFAULT_VERSION: + * + * The default version of XML used: 1.0 + */ +#define XML_DEFAULT_VERSION "1.0" + +/** + * xmlParserInput: + * + * An xmlParserInput is an input flow for the XML processor. + * Each entity parsed is associated an xmlParserInput (except the + * few predefined ones). This is the case both for internal entities + * - in which case the flow is already completely in memory - or + * external entities - in which case we use the buf structure for + * progressive reading and I18N conversions to the internal UTF-8 format. + */ + +/** + * xmlParserInputDeallocate: + * @str: the string to deallocate + * + * Callback for freeing some parser input allocations. + */ +typedef void (* xmlParserInputDeallocate)(xmlChar *str); + +struct _xmlParserInput { + /* Input buffer */ + xmlParserInputBufferPtr buf; /* UTF-8 encoded buffer */ + + const char *filename; /* The file analyzed, if any */ + const char *directory; /* the directory/base of the file */ + const xmlChar *base; /* Base of the array to parse */ + const xmlChar *cur; /* Current char being parsed */ + const xmlChar *end; /* end of the array to parse */ + int length; /* length if known */ + int line; /* Current line */ + int col; /* Current column */ + /* + * NOTE: consumed is only tested for equality in the parser code, + * so even if there is an overflow this should not give troubles + * for parsing very large instances. + */ + unsigned long consumed; /* How many xmlChars already consumed */ + xmlParserInputDeallocate free; /* function to deallocate the base */ + const xmlChar *encoding; /* the encoding string for entity */ + const xmlChar *version; /* the version string for entity */ + int standalone; /* Was that entity marked standalone */ + int id; /* an unique identifier for the entity */ +}; + +/** + * xmlParserNodeInfo: + * + * The parser can be asked to collect Node informations, i.e. at what + * place in the file they were detected. + * NOTE: This is off by default and not very well tested. + */ +typedef struct _xmlParserNodeInfo xmlParserNodeInfo; +typedef xmlParserNodeInfo *xmlParserNodeInfoPtr; + +struct _xmlParserNodeInfo { + const struct _xmlNode* node; + /* Position & line # that text that created the node begins & ends on */ + unsigned long begin_pos; + unsigned long begin_line; + unsigned long end_pos; + unsigned long end_line; +}; + +typedef struct _xmlParserNodeInfoSeq xmlParserNodeInfoSeq; +typedef xmlParserNodeInfoSeq *xmlParserNodeInfoSeqPtr; +struct _xmlParserNodeInfoSeq { + unsigned long maximum; + unsigned long length; + xmlParserNodeInfo* buffer; +}; + +/** + * xmlParserInputState: + * + * The parser is now working also as a state based parser. + * The recursive one use the state info for entities processing. + */ +typedef enum { + XML_PARSER_EOF = -1, /* nothing is to be parsed */ + XML_PARSER_START = 0, /* nothing has been parsed */ + XML_PARSER_MISC, /* Misc* before int subset */ + XML_PARSER_PI, /* Within a processing instruction */ + XML_PARSER_DTD, /* within some DTD content */ + XML_PARSER_PROLOG, /* Misc* after internal subset */ + XML_PARSER_COMMENT, /* within a comment */ + XML_PARSER_START_TAG, /* within a start tag */ + XML_PARSER_CONTENT, /* within the content */ + XML_PARSER_CDATA_SECTION, /* within a CDATA section */ + XML_PARSER_END_TAG, /* within a closing tag */ + XML_PARSER_ENTITY_DECL, /* within an entity declaration */ + XML_PARSER_ENTITY_VALUE, /* within an entity value in a decl */ + XML_PARSER_ATTRIBUTE_VALUE, /* within an attribute value */ + XML_PARSER_SYSTEM_LITERAL, /* within a SYSTEM value */ + XML_PARSER_EPILOG, /* the Misc* after the last end tag */ + XML_PARSER_IGNORE, /* within an IGNORED section */ + XML_PARSER_PUBLIC_LITERAL /* within a PUBLIC value */ +} xmlParserInputState; + +/** + * XML_DETECT_IDS: + * + * Bit in the loadsubset context field to tell to do ID/REFs lookups. + * Use it to initialize xmlLoadExtDtdDefaultValue. + */ +#define XML_DETECT_IDS 2 + +/** + * XML_COMPLETE_ATTRS: + * + * Bit in the loadsubset context field to tell to do complete the + * elements attributes lists with the ones defaulted from the DTDs. + * Use it to initialize xmlLoadExtDtdDefaultValue. + */ +#define XML_COMPLETE_ATTRS 4 + +/** + * XML_SKIP_IDS: + * + * Bit in the loadsubset context field to tell to not do ID/REFs registration. + * Used to initialize xmlLoadExtDtdDefaultValue in some special cases. + */ +#define XML_SKIP_IDS 8 + +/** + * xmlParserMode: + * + * A parser can operate in various modes + */ +typedef enum { + XML_PARSE_UNKNOWN = 0, + XML_PARSE_DOM = 1, + XML_PARSE_SAX = 2, + XML_PARSE_PUSH_DOM = 3, + XML_PARSE_PUSH_SAX = 4, + XML_PARSE_READER = 5 +} xmlParserMode; + +/** + * xmlParserCtxt: + * + * The parser context. + * NOTE This doesn't completely define the parser state, the (current ?) + * design of the parser uses recursive function calls since this allow + * and easy mapping from the production rules of the specification + * to the actual code. The drawback is that the actual function call + * also reflect the parser state. However most of the parsing routines + * takes as the only argument the parser context pointer, so migrating + * to a state based parser for progressive parsing shouldn't be too hard. + */ +struct _xmlParserCtxt { + struct _xmlSAXHandler *sax; /* The SAX handler */ + void *userData; /* For SAX interface only, used by DOM build */ + xmlDocPtr myDoc; /* the document being built */ + int wellFormed; /* is the document well formed */ + int replaceEntities; /* shall we replace entities ? */ + const xmlChar *version; /* the XML version string */ + const xmlChar *encoding; /* the declared encoding, if any */ + int standalone; /* standalone document */ + int html; /* an HTML(1)/Docbook(2) document + * 3 is HTML after + * 10 is HTML after + */ + + /* Input stream stack */ + xmlParserInputPtr input; /* Current input stream */ + int inputNr; /* Number of current input streams */ + int inputMax; /* Max number of input streams */ + xmlParserInputPtr *inputTab; /* stack of inputs */ + + /* Node analysis stack only used for DOM building */ + xmlNodePtr node; /* Current parsed Node */ + int nodeNr; /* Depth of the parsing stack */ + int nodeMax; /* Max depth of the parsing stack */ + xmlNodePtr *nodeTab; /* array of nodes */ + + int record_info; /* Whether node info should be kept */ + xmlParserNodeInfoSeq node_seq; /* info about each node parsed */ + + int errNo; /* error code */ + + int hasExternalSubset; /* reference and external subset */ + int hasPErefs; /* the internal subset has PE refs */ + int external; /* are we parsing an external entity */ + + int valid; /* is the document valid */ + int validate; /* shall we try to validate ? */ + xmlValidCtxt vctxt; /* The validity context */ + + xmlParserInputState instate; /* current type of input */ + int token; /* next char look-ahead */ + + char *directory; /* the data directory */ + + /* Node name stack */ + const xmlChar *name; /* Current parsed Node */ + int nameNr; /* Depth of the parsing stack */ + int nameMax; /* Max depth of the parsing stack */ + const xmlChar * *nameTab; /* array of nodes */ + + long nbChars; /* number of xmlChar processed */ + long checkIndex; /* used by progressive parsing lookup */ + int keepBlanks; /* ugly but ... */ + int disableSAX; /* SAX callbacks are disabled */ + int inSubset; /* Parsing is in int 1/ext 2 subset */ + const xmlChar * intSubName; /* name of subset */ + xmlChar * extSubURI; /* URI of external subset */ + xmlChar * extSubSystem; /* SYSTEM ID of external subset */ + + /* xml:space values */ + int * space; /* Should the parser preserve spaces */ + int spaceNr; /* Depth of the parsing stack */ + int spaceMax; /* Max depth of the parsing stack */ + int * spaceTab; /* array of space infos */ + + int depth; /* to prevent entity substitution loops */ + xmlParserInputPtr entity; /* used to check entities boundaries */ + int charset; /* encoding of the in-memory content + actually an xmlCharEncoding */ + int nodelen; /* Those two fields are there to */ + int nodemem; /* Speed up large node parsing */ + int pedantic; /* signal pedantic warnings */ + void *_private; /* For user data, libxml won't touch it */ + + int loadsubset; /* should the external subset be loaded */ + int linenumbers; /* set line number in element content */ + void *catalogs; /* document's own catalog */ + int recovery; /* run in recovery mode */ + int progressive; /* is this a progressive parsing */ + xmlDictPtr dict; /* dictionary for the parser */ + const xmlChar * *atts; /* array for the attributes callbacks */ + int maxatts; /* the size of the array */ + int docdict; /* use strings from dict to build tree */ + + /* + * pre-interned strings + */ + const xmlChar *str_xml; + const xmlChar *str_xmlns; + const xmlChar *str_xml_ns; + + /* + * Everything below is used only by the new SAX mode + */ + int sax2; /* operating in the new SAX mode */ + int nsNr; /* the number of inherited namespaces */ + int nsMax; /* the size of the arrays */ + const xmlChar * *nsTab; /* the array of prefix/namespace name */ + int *attallocs; /* which attribute were allocated */ + void * *pushTab; /* array of data for push */ + xmlHashTablePtr attsDefault; /* defaulted attributes if any */ + xmlHashTablePtr attsSpecial; /* non-CDATA attributes if any */ + int nsWellFormed; /* is the document XML Nanespace okay */ + int options; /* Extra options */ + + /* + * Those fields are needed only for treaming parsing so far + */ + int dictNames; /* Use dictionary names for the tree */ + int freeElemsNr; /* number of freed element nodes */ + xmlNodePtr freeElems; /* List of freed element nodes */ + int freeAttrsNr; /* number of freed attributes nodes */ + xmlAttrPtr freeAttrs; /* List of freed attributes nodes */ + + /* + * the complete error informations for the last error. + */ + xmlError lastError; + xmlParserMode parseMode; /* the parser mode */ + unsigned long nbentities; /* number of entities references */ + unsigned long sizeentities; /* size of parsed entities */ + + /* for use by HTML non-recursive parser */ + xmlParserNodeInfo *nodeInfo; /* Current NodeInfo */ + int nodeInfoNr; /* Depth of the parsing stack */ + int nodeInfoMax; /* Max depth of the parsing stack */ + xmlParserNodeInfo *nodeInfoTab; /* array of nodeInfos */ + + int input_id; /* we need to label inputs */ + unsigned long sizeentcopy; /* volume of entity copy */ +}; + +/** + * xmlSAXLocator: + * + * A SAX Locator. + */ +struct _xmlSAXLocator { + const xmlChar *(*getPublicId)(void *ctx); + const xmlChar *(*getSystemId)(void *ctx); + int (*getLineNumber)(void *ctx); + int (*getColumnNumber)(void *ctx); +}; + +/** + * xmlSAXHandler: + * + * A SAX handler is bunch of callbacks called by the parser when processing + * of the input generate data or structure informations. + */ + +/** + * resolveEntitySAXFunc: + * @ctx: the user data (XML parser context) + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * + * Callback: + * The entity loader, to control the loading of external entities, + * the application can either: + * - override this resolveEntity() callback in the SAX block + * - or better use the xmlSetExternalEntityLoader() function to + * set up it's own entity resolution routine + * + * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. + */ +typedef xmlParserInputPtr (*resolveEntitySAXFunc) (void *ctx, + const xmlChar *publicId, + const xmlChar *systemId); +/** + * internalSubsetSAXFunc: + * @ctx: the user data (XML parser context) + * @name: the root element name + * @ExternalID: the external ID + * @SystemID: the SYSTEM ID (e.g. filename or URL) + * + * Callback on internal subset declaration. + */ +typedef void (*internalSubsetSAXFunc) (void *ctx, + const xmlChar *name, + const xmlChar *ExternalID, + const xmlChar *SystemID); +/** + * externalSubsetSAXFunc: + * @ctx: the user data (XML parser context) + * @name: the root element name + * @ExternalID: the external ID + * @SystemID: the SYSTEM ID (e.g. filename or URL) + * + * Callback on external subset declaration. + */ +typedef void (*externalSubsetSAXFunc) (void *ctx, + const xmlChar *name, + const xmlChar *ExternalID, + const xmlChar *SystemID); +/** + * getEntitySAXFunc: + * @ctx: the user data (XML parser context) + * @name: The entity name + * + * Get an entity by name. + * + * Returns the xmlEntityPtr if found. + */ +typedef xmlEntityPtr (*getEntitySAXFunc) (void *ctx, + const xmlChar *name); +/** + * getParameterEntitySAXFunc: + * @ctx: the user data (XML parser context) + * @name: The entity name + * + * Get a parameter entity by name. + * + * Returns the xmlEntityPtr if found. + */ +typedef xmlEntityPtr (*getParameterEntitySAXFunc) (void *ctx, + const xmlChar *name); +/** + * entityDeclSAXFunc: + * @ctx: the user data (XML parser context) + * @name: the entity name + * @type: the entity type + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * @content: the entity value (without processing). + * + * An entity definition has been parsed. + */ +typedef void (*entityDeclSAXFunc) (void *ctx, + const xmlChar *name, + int type, + const xmlChar *publicId, + const xmlChar *systemId, + xmlChar *content); +/** + * notationDeclSAXFunc: + * @ctx: the user data (XML parser context) + * @name: The name of the notation + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * + * What to do when a notation declaration has been parsed. + */ +typedef void (*notationDeclSAXFunc)(void *ctx, + const xmlChar *name, + const xmlChar *publicId, + const xmlChar *systemId); +/** + * attributeDeclSAXFunc: + * @ctx: the user data (XML parser context) + * @elem: the name of the element + * @fullname: the attribute name + * @type: the attribute type + * @def: the type of default value + * @defaultValue: the attribute default value + * @tree: the tree of enumerated value set + * + * An attribute definition has been parsed. + */ +typedef void (*attributeDeclSAXFunc)(void *ctx, + const xmlChar *elem, + const xmlChar *fullname, + int type, + int def, + const xmlChar *defaultValue, + xmlEnumerationPtr tree); +/** + * elementDeclSAXFunc: + * @ctx: the user data (XML parser context) + * @name: the element name + * @type: the element type + * @content: the element value tree + * + * An element definition has been parsed. + */ +typedef void (*elementDeclSAXFunc)(void *ctx, + const xmlChar *name, + int type, + xmlElementContentPtr content); +/** + * unparsedEntityDeclSAXFunc: + * @ctx: the user data (XML parser context) + * @name: The name of the entity + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * @notationName: the name of the notation + * + * What to do when an unparsed entity declaration is parsed. + */ +typedef void (*unparsedEntityDeclSAXFunc)(void *ctx, + const xmlChar *name, + const xmlChar *publicId, + const xmlChar *systemId, + const xmlChar *notationName); +/** + * setDocumentLocatorSAXFunc: + * @ctx: the user data (XML parser context) + * @loc: A SAX Locator + * + * Receive the document locator at startup, actually xmlDefaultSAXLocator. + * Everything is available on the context, so this is useless in our case. + */ +typedef void (*setDocumentLocatorSAXFunc) (void *ctx, + xmlSAXLocatorPtr loc); +/** + * startDocumentSAXFunc: + * @ctx: the user data (XML parser context) + * + * Called when the document start being processed. + */ +typedef void (*startDocumentSAXFunc) (void *ctx); +/** + * endDocumentSAXFunc: + * @ctx: the user data (XML parser context) + * + * Called when the document end has been detected. + */ +typedef void (*endDocumentSAXFunc) (void *ctx); +/** + * startElementSAXFunc: + * @ctx: the user data (XML parser context) + * @name: The element name, including namespace prefix + * @atts: An array of name/value attributes pairs, NULL terminated + * + * Called when an opening tag has been processed. + */ +typedef void (*startElementSAXFunc) (void *ctx, + const xmlChar *name, + const xmlChar **atts); +/** + * endElementSAXFunc: + * @ctx: the user data (XML parser context) + * @name: The element name + * + * Called when the end of an element has been detected. + */ +typedef void (*endElementSAXFunc) (void *ctx, + const xmlChar *name); +/** + * attributeSAXFunc: + * @ctx: the user data (XML parser context) + * @name: The attribute name, including namespace prefix + * @value: The attribute value + * + * Handle an attribute that has been read by the parser. + * The default handling is to convert the attribute into an + * DOM subtree and past it in a new xmlAttr element added to + * the element. + */ +typedef void (*attributeSAXFunc) (void *ctx, + const xmlChar *name, + const xmlChar *value); +/** + * referenceSAXFunc: + * @ctx: the user data (XML parser context) + * @name: The entity name + * + * Called when an entity reference is detected. + */ +typedef void (*referenceSAXFunc) (void *ctx, + const xmlChar *name); +/** + * charactersSAXFunc: + * @ctx: the user data (XML parser context) + * @ch: a xmlChar string + * @len: the number of xmlChar + * + * Receiving some chars from the parser. + */ +typedef void (*charactersSAXFunc) (void *ctx, + const xmlChar *ch, + int len); +/** + * ignorableWhitespaceSAXFunc: + * @ctx: the user data (XML parser context) + * @ch: a xmlChar string + * @len: the number of xmlChar + * + * Receiving some ignorable whitespaces from the parser. + * UNUSED: by default the DOM building will use characters. + */ +typedef void (*ignorableWhitespaceSAXFunc) (void *ctx, + const xmlChar *ch, + int len); +/** + * processingInstructionSAXFunc: + * @ctx: the user data (XML parser context) + * @target: the target name + * @data: the PI data's + * + * A processing instruction has been parsed. + */ +typedef void (*processingInstructionSAXFunc) (void *ctx, + const xmlChar *target, + const xmlChar *data); +/** + * commentSAXFunc: + * @ctx: the user data (XML parser context) + * @value: the comment content + * + * A comment has been parsed. + */ +typedef void (*commentSAXFunc) (void *ctx, + const xmlChar *value); +/** + * cdataBlockSAXFunc: + * @ctx: the user data (XML parser context) + * @value: The pcdata content + * @len: the block length + * + * Called when a pcdata block has been parsed. + */ +typedef void (*cdataBlockSAXFunc) ( + void *ctx, + const xmlChar *value, + int len); +/** + * warningSAXFunc: + * @ctx: an XML parser context + * @msg: the message to display/transmit + * @...: extra parameters for the message display + * + * Display and format a warning messages, callback. + */ +typedef void (XMLCDECL *warningSAXFunc) (void *ctx, + const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); +/** + * errorSAXFunc: + * @ctx: an XML parser context + * @msg: the message to display/transmit + * @...: extra parameters for the message display + * + * Display and format an error messages, callback. + */ +typedef void (XMLCDECL *errorSAXFunc) (void *ctx, + const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); +/** + * fatalErrorSAXFunc: + * @ctx: an XML parser context + * @msg: the message to display/transmit + * @...: extra parameters for the message display + * + * Display and format fatal error messages, callback. + * Note: so far fatalError() SAX callbacks are not used, error() + * get all the callbacks for errors. + */ +typedef void (XMLCDECL *fatalErrorSAXFunc) (void *ctx, + const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); +/** + * isStandaloneSAXFunc: + * @ctx: the user data (XML parser context) + * + * Is this document tagged standalone? + * + * Returns 1 if true + */ +typedef int (*isStandaloneSAXFunc) (void *ctx); +/** + * hasInternalSubsetSAXFunc: + * @ctx: the user data (XML parser context) + * + * Does this document has an internal subset. + * + * Returns 1 if true + */ +typedef int (*hasInternalSubsetSAXFunc) (void *ctx); + +/** + * hasExternalSubsetSAXFunc: + * @ctx: the user data (XML parser context) + * + * Does this document has an external subset? + * + * Returns 1 if true + */ +typedef int (*hasExternalSubsetSAXFunc) (void *ctx); + +/************************************************************************ + * * + * The SAX version 2 API extensions * + * * + ************************************************************************/ +/** + * XML_SAX2_MAGIC: + * + * Special constant found in SAX2 blocks initialized fields + */ +#define XML_SAX2_MAGIC 0xDEEDBEAF + +/** + * startElementNsSAX2Func: + * @ctx: the user data (XML parser context) + * @localname: the local name of the element + * @prefix: the element namespace prefix if available + * @URI: the element namespace name if available + * @nb_namespaces: number of namespace definitions on that node + * @namespaces: pointer to the array of prefix/URI pairs namespace definitions + * @nb_attributes: the number of attributes on that node + * @nb_defaulted: the number of defaulted attributes. The defaulted + * ones are at the end of the array + * @attributes: pointer to the array of (localname/prefix/URI/value/end) + * attribute values. + * + * SAX2 callback when an element start has been detected by the parser. + * It provides the namespace informations for the element, as well as + * the new namespace declarations on the element. + */ + +typedef void (*startElementNsSAX2Func) (void *ctx, + const xmlChar *localname, + const xmlChar *prefix, + const xmlChar *URI, + int nb_namespaces, + const xmlChar **namespaces, + int nb_attributes, + int nb_defaulted, + const xmlChar **attributes); + +/** + * endElementNsSAX2Func: + * @ctx: the user data (XML parser context) + * @localname: the local name of the element + * @prefix: the element namespace prefix if available + * @URI: the element namespace name if available + * + * SAX2 callback when an element end has been detected by the parser. + * It provides the namespace informations for the element. + */ + +typedef void (*endElementNsSAX2Func) (void *ctx, + const xmlChar *localname, + const xmlChar *prefix, + const xmlChar *URI); + + +struct _xmlSAXHandler { + internalSubsetSAXFunc internalSubset; + isStandaloneSAXFunc isStandalone; + hasInternalSubsetSAXFunc hasInternalSubset; + hasExternalSubsetSAXFunc hasExternalSubset; + resolveEntitySAXFunc resolveEntity; + getEntitySAXFunc getEntity; + entityDeclSAXFunc entityDecl; + notationDeclSAXFunc notationDecl; + attributeDeclSAXFunc attributeDecl; + elementDeclSAXFunc elementDecl; + unparsedEntityDeclSAXFunc unparsedEntityDecl; + setDocumentLocatorSAXFunc setDocumentLocator; + startDocumentSAXFunc startDocument; + endDocumentSAXFunc endDocument; + startElementSAXFunc startElement; + endElementSAXFunc endElement; + referenceSAXFunc reference; + charactersSAXFunc characters; + ignorableWhitespaceSAXFunc ignorableWhitespace; + processingInstructionSAXFunc processingInstruction; + commentSAXFunc comment; + warningSAXFunc warning; + errorSAXFunc error; + fatalErrorSAXFunc fatalError; /* unused error() get all the errors */ + getParameterEntitySAXFunc getParameterEntity; + cdataBlockSAXFunc cdataBlock; + externalSubsetSAXFunc externalSubset; + unsigned int initialized; + /* The following fields are extensions available only on version 2 */ + void *_private; + startElementNsSAX2Func startElementNs; + endElementNsSAX2Func endElementNs; + xmlStructuredErrorFunc serror; +}; + +/* + * SAX Version 1 + */ +typedef struct _xmlSAXHandlerV1 xmlSAXHandlerV1; +typedef xmlSAXHandlerV1 *xmlSAXHandlerV1Ptr; +struct _xmlSAXHandlerV1 { + internalSubsetSAXFunc internalSubset; + isStandaloneSAXFunc isStandalone; + hasInternalSubsetSAXFunc hasInternalSubset; + hasExternalSubsetSAXFunc hasExternalSubset; + resolveEntitySAXFunc resolveEntity; + getEntitySAXFunc getEntity; + entityDeclSAXFunc entityDecl; + notationDeclSAXFunc notationDecl; + attributeDeclSAXFunc attributeDecl; + elementDeclSAXFunc elementDecl; + unparsedEntityDeclSAXFunc unparsedEntityDecl; + setDocumentLocatorSAXFunc setDocumentLocator; + startDocumentSAXFunc startDocument; + endDocumentSAXFunc endDocument; + startElementSAXFunc startElement; + endElementSAXFunc endElement; + referenceSAXFunc reference; + charactersSAXFunc characters; + ignorableWhitespaceSAXFunc ignorableWhitespace; + processingInstructionSAXFunc processingInstruction; + commentSAXFunc comment; + warningSAXFunc warning; + errorSAXFunc error; + fatalErrorSAXFunc fatalError; /* unused error() get all the errors */ + getParameterEntitySAXFunc getParameterEntity; + cdataBlockSAXFunc cdataBlock; + externalSubsetSAXFunc externalSubset; + unsigned int initialized; +}; + + +/** + * xmlExternalEntityLoader: + * @URL: The System ID of the resource requested + * @ID: The Public ID of the resource requested + * @context: the XML parser context + * + * External entity loaders types. + * + * Returns the entity input parser. + */ +typedef xmlParserInputPtr (*xmlExternalEntityLoader) (const char *URL, + const char *ID, + xmlParserCtxtPtr context); + +#ifdef __cplusplus +} +#endif + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* + * Init/Cleanup + */ +XMLPUBFUN void XMLCALL + xmlInitParser (void); +XMLPUBFUN void XMLCALL + xmlCleanupParser (void); + +/* + * Input functions + */ +XMLPUBFUN int XMLCALL + xmlParserInputRead (xmlParserInputPtr in, + int len); +XMLPUBFUN int XMLCALL + xmlParserInputGrow (xmlParserInputPtr in, + int len); + +/* + * Basic parsing Interfaces + */ +#ifdef LIBXML_SAX1_ENABLED +XMLPUBFUN xmlDocPtr XMLCALL + xmlParseDoc (const xmlChar *cur); +XMLPUBFUN xmlDocPtr XMLCALL + xmlParseFile (const char *filename); +XMLPUBFUN xmlDocPtr XMLCALL + xmlParseMemory (const char *buffer, + int size); +#endif /* LIBXML_SAX1_ENABLED */ +XMLPUBFUN int XMLCALL + xmlSubstituteEntitiesDefault(int val); +XMLPUBFUN int XMLCALL + xmlKeepBlanksDefault (int val); +XMLPUBFUN void XMLCALL + xmlStopParser (xmlParserCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlPedanticParserDefault(int val); +XMLPUBFUN int XMLCALL + xmlLineNumbersDefault (int val); + +#ifdef LIBXML_SAX1_ENABLED +/* + * Recovery mode + */ +XMLPUBFUN xmlDocPtr XMLCALL + xmlRecoverDoc (const xmlChar *cur); +XMLPUBFUN xmlDocPtr XMLCALL + xmlRecoverMemory (const char *buffer, + int size); +XMLPUBFUN xmlDocPtr XMLCALL + xmlRecoverFile (const char *filename); +#endif /* LIBXML_SAX1_ENABLED */ + +/* + * Less common routines and SAX interfaces + */ +XMLPUBFUN int XMLCALL + xmlParseDocument (xmlParserCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlParseExtParsedEnt (xmlParserCtxtPtr ctxt); +#ifdef LIBXML_SAX1_ENABLED +XMLPUBFUN int XMLCALL + xmlSAXUserParseFile (xmlSAXHandlerPtr sax, + void *user_data, + const char *filename); +XMLPUBFUN int XMLCALL + xmlSAXUserParseMemory (xmlSAXHandlerPtr sax, + void *user_data, + const char *buffer, + int size); +XMLPUBFUN xmlDocPtr XMLCALL + xmlSAXParseDoc (xmlSAXHandlerPtr sax, + const xmlChar *cur, + int recovery); +XMLPUBFUN xmlDocPtr XMLCALL + xmlSAXParseMemory (xmlSAXHandlerPtr sax, + const char *buffer, + int size, + int recovery); +XMLPUBFUN xmlDocPtr XMLCALL + xmlSAXParseMemoryWithData (xmlSAXHandlerPtr sax, + const char *buffer, + int size, + int recovery, + void *data); +XMLPUBFUN xmlDocPtr XMLCALL + xmlSAXParseFile (xmlSAXHandlerPtr sax, + const char *filename, + int recovery); +XMLPUBFUN xmlDocPtr XMLCALL + xmlSAXParseFileWithData (xmlSAXHandlerPtr sax, + const char *filename, + int recovery, + void *data); +XMLPUBFUN xmlDocPtr XMLCALL + xmlSAXParseEntity (xmlSAXHandlerPtr sax, + const char *filename); +XMLPUBFUN xmlDocPtr XMLCALL + xmlParseEntity (const char *filename); +#endif /* LIBXML_SAX1_ENABLED */ + +#ifdef LIBXML_VALID_ENABLED +XMLPUBFUN xmlDtdPtr XMLCALL + xmlSAXParseDTD (xmlSAXHandlerPtr sax, + const xmlChar *ExternalID, + const xmlChar *SystemID); +XMLPUBFUN xmlDtdPtr XMLCALL + xmlParseDTD (const xmlChar *ExternalID, + const xmlChar *SystemID); +XMLPUBFUN xmlDtdPtr XMLCALL + xmlIOParseDTD (xmlSAXHandlerPtr sax, + xmlParserInputBufferPtr input, + xmlCharEncoding enc); +#endif /* LIBXML_VALID_ENABLE */ +#ifdef LIBXML_SAX1_ENABLED +XMLPUBFUN int XMLCALL + xmlParseBalancedChunkMemory(xmlDocPtr doc, + xmlSAXHandlerPtr sax, + void *user_data, + int depth, + const xmlChar *string, + xmlNodePtr *lst); +#endif /* LIBXML_SAX1_ENABLED */ +XMLPUBFUN xmlParserErrors XMLCALL + xmlParseInNodeContext (xmlNodePtr node, + const char *data, + int datalen, + int options, + xmlNodePtr *lst); +#ifdef LIBXML_SAX1_ENABLED +XMLPUBFUN int XMLCALL + xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc, + xmlSAXHandlerPtr sax, + void *user_data, + int depth, + const xmlChar *string, + xmlNodePtr *lst, + int recover); +XMLPUBFUN int XMLCALL + xmlParseExternalEntity (xmlDocPtr doc, + xmlSAXHandlerPtr sax, + void *user_data, + int depth, + const xmlChar *URL, + const xmlChar *ID, + xmlNodePtr *lst); +#endif /* LIBXML_SAX1_ENABLED */ +XMLPUBFUN int XMLCALL + xmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx, + const xmlChar *URL, + const xmlChar *ID, + xmlNodePtr *lst); + +/* + * Parser contexts handling. + */ +XMLPUBFUN xmlParserCtxtPtr XMLCALL + xmlNewParserCtxt (void); +XMLPUBFUN int XMLCALL + xmlInitParserCtxt (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlClearParserCtxt (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlFreeParserCtxt (xmlParserCtxtPtr ctxt); +#ifdef LIBXML_SAX1_ENABLED +XMLPUBFUN void XMLCALL + xmlSetupParserForBuffer (xmlParserCtxtPtr ctxt, + const xmlChar* buffer, + const char *filename); +#endif /* LIBXML_SAX1_ENABLED */ +XMLPUBFUN xmlParserCtxtPtr XMLCALL + xmlCreateDocParserCtxt (const xmlChar *cur); + +#ifdef LIBXML_LEGACY_ENABLED +/* + * Reading/setting optional parsing features. + */ +XMLPUBFUN int XMLCALL + xmlGetFeaturesList (int *len, + const char **result); +XMLPUBFUN int XMLCALL + xmlGetFeature (xmlParserCtxtPtr ctxt, + const char *name, + void *result); +XMLPUBFUN int XMLCALL + xmlSetFeature (xmlParserCtxtPtr ctxt, + const char *name, + void *value); +#endif /* LIBXML_LEGACY_ENABLED */ + +#ifdef LIBXML_PUSH_ENABLED +/* + * Interfaces for the Push mode. + */ +XMLPUBFUN xmlParserCtxtPtr XMLCALL + xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, + void *user_data, + const char *chunk, + int size, + const char *filename); +XMLPUBFUN int XMLCALL + xmlParseChunk (xmlParserCtxtPtr ctxt, + const char *chunk, + int size, + int terminate); +#endif /* LIBXML_PUSH_ENABLED */ + +/* + * Special I/O mode. + */ + +XMLPUBFUN xmlParserCtxtPtr XMLCALL + xmlCreateIOParserCtxt (xmlSAXHandlerPtr sax, + void *user_data, + xmlInputReadCallback ioread, + xmlInputCloseCallback ioclose, + void *ioctx, + xmlCharEncoding enc); + +XMLPUBFUN xmlParserInputPtr XMLCALL + xmlNewIOInputStream (xmlParserCtxtPtr ctxt, + xmlParserInputBufferPtr input, + xmlCharEncoding enc); + +/* + * Node infos. + */ +XMLPUBFUN const xmlParserNodeInfo* XMLCALL + xmlParserFindNodeInfo (const xmlParserCtxtPtr ctxt, + const xmlNodePtr node); +XMLPUBFUN void XMLCALL + xmlInitNodeInfoSeq (xmlParserNodeInfoSeqPtr seq); +XMLPUBFUN void XMLCALL + xmlClearNodeInfoSeq (xmlParserNodeInfoSeqPtr seq); +XMLPUBFUN unsigned long XMLCALL + xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeqPtr seq, + const xmlNodePtr node); +XMLPUBFUN void XMLCALL + xmlParserAddNodeInfo (xmlParserCtxtPtr ctxt, + const xmlParserNodeInfoPtr info); + +/* + * External entities handling actually implemented in xmlIO. + */ + +XMLPUBFUN void XMLCALL + xmlSetExternalEntityLoader(xmlExternalEntityLoader f); +XMLPUBFUN xmlExternalEntityLoader XMLCALL + xmlGetExternalEntityLoader(void); +XMLPUBFUN xmlParserInputPtr XMLCALL + xmlLoadExternalEntity (const char *URL, + const char *ID, + xmlParserCtxtPtr ctxt); + +/* + * Index lookup, actually implemented in the encoding module + */ +XMLPUBFUN long XMLCALL + xmlByteConsumed (xmlParserCtxtPtr ctxt); + +/* + * New set of simpler/more flexible APIs + */ +/** + * xmlParserOption: + * + * This is the set of XML parser options that can be passed down + * to the xmlReadDoc() and similar calls. + */ +typedef enum { + XML_PARSE_RECOVER = 1<<0, /* recover on errors */ + XML_PARSE_NOENT = 1<<1, /* substitute entities */ + XML_PARSE_DTDLOAD = 1<<2, /* load the external subset */ + XML_PARSE_DTDATTR = 1<<3, /* default DTD attributes */ + XML_PARSE_DTDVALID = 1<<4, /* validate with the DTD */ + XML_PARSE_NOERROR = 1<<5, /* suppress error reports */ + XML_PARSE_NOWARNING = 1<<6, /* suppress warning reports */ + XML_PARSE_PEDANTIC = 1<<7, /* pedantic error reporting */ + XML_PARSE_NOBLANKS = 1<<8, /* remove blank nodes */ + XML_PARSE_SAX1 = 1<<9, /* use the SAX1 interface internally */ + XML_PARSE_XINCLUDE = 1<<10,/* Implement XInclude substitition */ + XML_PARSE_NONET = 1<<11,/* Forbid network access */ + XML_PARSE_NODICT = 1<<12,/* Do not reuse the context dictionary */ + XML_PARSE_NSCLEAN = 1<<13,/* remove redundant namespaces declarations */ + XML_PARSE_NOCDATA = 1<<14,/* merge CDATA as text nodes */ + XML_PARSE_NOXINCNODE= 1<<15,/* do not generate XINCLUDE START/END nodes */ + XML_PARSE_COMPACT = 1<<16,/* compact small text nodes; no modification of + the tree allowed afterwards (will possibly + crash if you try to modify the tree) */ + XML_PARSE_OLD10 = 1<<17,/* parse using XML-1.0 before update 5 */ + XML_PARSE_NOBASEFIX = 1<<18,/* do not fixup XINCLUDE xml:base uris */ + XML_PARSE_HUGE = 1<<19,/* relax any hardcoded limit from the parser */ + XML_PARSE_OLDSAX = 1<<20,/* parse using SAX2 interface before 2.7.0 */ + XML_PARSE_IGNORE_ENC= 1<<21,/* ignore internal document encoding hint */ + XML_PARSE_BIG_LINES = 1<<22 /* Store big lines numbers in text PSVI field */ +} xmlParserOption; + +XMLPUBFUN void XMLCALL + xmlCtxtReset (xmlParserCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlCtxtResetPush (xmlParserCtxtPtr ctxt, + const char *chunk, + int size, + const char *filename, + const char *encoding); +XMLPUBFUN int XMLCALL + xmlCtxtUseOptions (xmlParserCtxtPtr ctxt, + int options); +XMLPUBFUN xmlDocPtr XMLCALL + xmlReadDoc (const xmlChar *cur, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN xmlDocPtr XMLCALL + xmlReadFile (const char *URL, + const char *encoding, + int options); +XMLPUBFUN xmlDocPtr XMLCALL + xmlReadMemory (const char *buffer, + int size, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN xmlDocPtr XMLCALL + xmlReadFd (int fd, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN xmlDocPtr XMLCALL + xmlReadIO (xmlInputReadCallback ioread, + xmlInputCloseCallback ioclose, + void *ioctx, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN xmlDocPtr XMLCALL + xmlCtxtReadDoc (xmlParserCtxtPtr ctxt, + const xmlChar *cur, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN xmlDocPtr XMLCALL + xmlCtxtReadFile (xmlParserCtxtPtr ctxt, + const char *filename, + const char *encoding, + int options); +XMLPUBFUN xmlDocPtr XMLCALL + xmlCtxtReadMemory (xmlParserCtxtPtr ctxt, + const char *buffer, + int size, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN xmlDocPtr XMLCALL + xmlCtxtReadFd (xmlParserCtxtPtr ctxt, + int fd, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN xmlDocPtr XMLCALL + xmlCtxtReadIO (xmlParserCtxtPtr ctxt, + xmlInputReadCallback ioread, + xmlInputCloseCallback ioclose, + void *ioctx, + const char *URL, + const char *encoding, + int options); + +/* + * Library wide options + */ +/** + * xmlFeature: + * + * Used to examine the existance of features that can be enabled + * or disabled at compile-time. + * They used to be called XML_FEATURE_xxx but this clashed with Expat + */ +typedef enum { + XML_WITH_THREAD = 1, + XML_WITH_TREE = 2, + XML_WITH_OUTPUT = 3, + XML_WITH_PUSH = 4, + XML_WITH_READER = 5, + XML_WITH_PATTERN = 6, + XML_WITH_WRITER = 7, + XML_WITH_SAX1 = 8, + XML_WITH_FTP = 9, + XML_WITH_HTTP = 10, + XML_WITH_VALID = 11, + XML_WITH_HTML = 12, + XML_WITH_LEGACY = 13, + XML_WITH_C14N = 14, + XML_WITH_CATALOG = 15, + XML_WITH_XPATH = 16, + XML_WITH_XPTR = 17, + XML_WITH_XINCLUDE = 18, + XML_WITH_ICONV = 19, + XML_WITH_ISO8859X = 20, + XML_WITH_UNICODE = 21, + XML_WITH_REGEXP = 22, + XML_WITH_AUTOMATA = 23, + XML_WITH_EXPR = 24, + XML_WITH_SCHEMAS = 25, + XML_WITH_SCHEMATRON = 26, + XML_WITH_MODULES = 27, + XML_WITH_DEBUG = 28, + XML_WITH_DEBUG_MEM = 29, + XML_WITH_DEBUG_RUN = 30, + XML_WITH_ZLIB = 31, + XML_WITH_ICU = 32, + XML_WITH_LZMA = 33, + XML_WITH_NONE = 99999 /* just to be sure of allocation size */ +} xmlFeature; + +XMLPUBFUN int XMLCALL + xmlHasFeature (xmlFeature feature); + +#ifdef __cplusplus +} +#endif +#endif /* __XML_PARSER_H__ */ diff --git a/libxml2/include/libxml/parserInternals.h b/libxml2/include/libxml/parserInternals.h new file mode 100644 index 0000000..f30fc68 --- /dev/null +++ b/libxml2/include/libxml/parserInternals.h @@ -0,0 +1,644 @@ +/* + * Summary: internals routines and limits exported by the parser. + * Description: this module exports a number of internal parsing routines + * they are not really all intended for applications but + * can prove useful doing low level processing. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_PARSER_INTERNALS_H__ +#define __XML_PARSER_INTERNALS_H__ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlParserMaxDepth: + * + * arbitrary depth limit for the XML documents that we allow to + * process. This is not a limitation of the parser but a safety + * boundary feature, use XML_PARSE_HUGE option to override it. + */ +XMLPUBVAR unsigned int xmlParserMaxDepth; + +/** + * XML_MAX_TEXT_LENGTH: + * + * Maximum size allowed for a single text node when building a tree. + * This is not a limitation of the parser but a safety boundary feature, + * use XML_PARSE_HUGE option to override it. + * Introduced in 2.9.0 + */ +#define XML_MAX_TEXT_LENGTH 10000000 + +/** + * XML_MAX_NAME_LENGTH: + * + * Maximum size allowed for a markup identitier + * This is not a limitation of the parser but a safety boundary feature, + * use XML_PARSE_HUGE option to override it. + * Note that with the use of parsing dictionaries overriding the limit + * may result in more runtime memory usage in face of "unfriendly' content + * Introduced in 2.9.0 + */ +#define XML_MAX_NAME_LENGTH 50000 + +/** + * XML_MAX_DICTIONARY_LIMIT: + * + * Maximum size allowed by the parser for a dictionary by default + * This is not a limitation of the parser but a safety boundary feature, + * use XML_PARSE_HUGE option to override it. + * Introduced in 2.9.0 + */ +#define XML_MAX_DICTIONARY_LIMIT 10000000 + +/** + * XML_MAX_LOOKUP_LIMIT: + * + * Maximum size allowed by the parser for ahead lookup + * This is an upper boundary enforced by the parser to avoid bad + * behaviour on "unfriendly' content + * Introduced in 2.9.0 + */ +#define XML_MAX_LOOKUP_LIMIT 10000000 + +/** + * XML_MAX_NAMELEN: + * + * Identifiers can be longer, but this will be more costly + * at runtime. + */ +#define XML_MAX_NAMELEN 100 + +/** + * INPUT_CHUNK: + * + * The parser tries to always have that amount of input ready. + * One of the point is providing context when reporting errors. + */ +#define INPUT_CHUNK 250 + +/************************************************************************ + * * + * UNICODE version of the macros. * + * * + ************************************************************************/ +/** + * IS_BYTE_CHAR: + * @c: an byte value (int) + * + * Macro to check the following production in the XML spec: + * + * [2] Char ::= #x9 | #xA | #xD | [#x20...] + * any byte character in the accepted range + */ +#define IS_BYTE_CHAR(c) xmlIsChar_ch(c) + +/** + * IS_CHAR: + * @c: an UNICODE value (int) + * + * Macro to check the following production in the XML spec: + * + * [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] + * | [#x10000-#x10FFFF] + * any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. + */ +#define IS_CHAR(c) xmlIsCharQ(c) + +/** + * IS_CHAR_CH: + * @c: an xmlChar (usually an unsigned char) + * + * Behaves like IS_CHAR on single-byte value + */ +#define IS_CHAR_CH(c) xmlIsChar_ch(c) + +/** + * IS_BLANK: + * @c: an UNICODE value (int) + * + * Macro to check the following production in the XML spec: + * + * [3] S ::= (#x20 | #x9 | #xD | #xA)+ + */ +#define IS_BLANK(c) xmlIsBlankQ(c) + +/** + * IS_BLANK_CH: + * @c: an xmlChar value (normally unsigned char) + * + * Behaviour same as IS_BLANK + */ +#define IS_BLANK_CH(c) xmlIsBlank_ch(c) + +/** + * IS_BASECHAR: + * @c: an UNICODE value (int) + * + * Macro to check the following production in the XML spec: + * + * [85] BaseChar ::= ... long list see REC ... + */ +#define IS_BASECHAR(c) xmlIsBaseCharQ(c) + +/** + * IS_DIGIT: + * @c: an UNICODE value (int) + * + * Macro to check the following production in the XML spec: + * + * [88] Digit ::= ... long list see REC ... + */ +#define IS_DIGIT(c) xmlIsDigitQ(c) + +/** + * IS_DIGIT_CH: + * @c: an xmlChar value (usually an unsigned char) + * + * Behaves like IS_DIGIT but with a single byte argument + */ +#define IS_DIGIT_CH(c) xmlIsDigit_ch(c) + +/** + * IS_COMBINING: + * @c: an UNICODE value (int) + * + * Macro to check the following production in the XML spec: + * + * [87] CombiningChar ::= ... long list see REC ... + */ +#define IS_COMBINING(c) xmlIsCombiningQ(c) + +/** + * IS_COMBINING_CH: + * @c: an xmlChar (usually an unsigned char) + * + * Always false (all combining chars > 0xff) + */ +#define IS_COMBINING_CH(c) 0 + +/** + * IS_EXTENDER: + * @c: an UNICODE value (int) + * + * Macro to check the following production in the XML spec: + * + * + * [89] Extender ::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | + * #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035] | + * [#x309D-#x309E] | [#x30FC-#x30FE] + */ +#define IS_EXTENDER(c) xmlIsExtenderQ(c) + +/** + * IS_EXTENDER_CH: + * @c: an xmlChar value (usually an unsigned char) + * + * Behaves like IS_EXTENDER but with a single-byte argument + */ +#define IS_EXTENDER_CH(c) xmlIsExtender_ch(c) + +/** + * IS_IDEOGRAPHIC: + * @c: an UNICODE value (int) + * + * Macro to check the following production in the XML spec: + * + * + * [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029] + */ +#define IS_IDEOGRAPHIC(c) xmlIsIdeographicQ(c) + +/** + * IS_LETTER: + * @c: an UNICODE value (int) + * + * Macro to check the following production in the XML spec: + * + * + * [84] Letter ::= BaseChar | Ideographic + */ +#define IS_LETTER(c) (IS_BASECHAR(c) || IS_IDEOGRAPHIC(c)) + +/** + * IS_LETTER_CH: + * @c: an xmlChar value (normally unsigned char) + * + * Macro behaves like IS_LETTER, but only check base chars + * + */ +#define IS_LETTER_CH(c) xmlIsBaseChar_ch(c) + +/** + * IS_ASCII_LETTER: + * @c: an xmlChar value + * + * Macro to check [a-zA-Z] + * + */ +#define IS_ASCII_LETTER(c) (((0x41 <= (c)) && ((c) <= 0x5a)) || \ + ((0x61 <= (c)) && ((c) <= 0x7a))) + +/** + * IS_ASCII_DIGIT: + * @c: an xmlChar value + * + * Macro to check [0-9] + * + */ +#define IS_ASCII_DIGIT(c) ((0x30 <= (c)) && ((c) <= 0x39)) + +/** + * IS_PUBIDCHAR: + * @c: an UNICODE value (int) + * + * Macro to check the following production in the XML spec: + * + * + * [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%] + */ +#define IS_PUBIDCHAR(c) xmlIsPubidCharQ(c) + +/** + * IS_PUBIDCHAR_CH: + * @c: an xmlChar value (normally unsigned char) + * + * Same as IS_PUBIDCHAR but for single-byte value + */ +#define IS_PUBIDCHAR_CH(c) xmlIsPubidChar_ch(c) + +/** + * SKIP_EOL: + * @p: and UTF8 string pointer + * + * Skips the end of line chars. + */ +#define SKIP_EOL(p) \ + if (*(p) == 0x13) { p++ ; if (*(p) == 0x10) p++; } \ + if (*(p) == 0x10) { p++ ; if (*(p) == 0x13) p++; } + +/** + * MOVETO_ENDTAG: + * @p: and UTF8 string pointer + * + * Skips to the next '>' char. + */ +#define MOVETO_ENDTAG(p) \ + while ((*p) && (*(p) != '>')) (p)++ + +/** + * MOVETO_STARTTAG: + * @p: and UTF8 string pointer + * + * Skips to the next '<' char. + */ +#define MOVETO_STARTTAG(p) \ + while ((*p) && (*(p) != '<')) (p)++ + +/** + * Global variables used for predefined strings. + */ +XMLPUBVAR const xmlChar xmlStringText[]; +XMLPUBVAR const xmlChar xmlStringTextNoenc[]; +XMLPUBVAR const xmlChar xmlStringComment[]; + +/* + * Function to finish the work of the macros where needed. + */ +XMLPUBFUN int XMLCALL xmlIsLetter (int c); + +/** + * Parser context. + */ +XMLPUBFUN xmlParserCtxtPtr XMLCALL + xmlCreateFileParserCtxt (const char *filename); +XMLPUBFUN xmlParserCtxtPtr XMLCALL + xmlCreateURLParserCtxt (const char *filename, + int options); +XMLPUBFUN xmlParserCtxtPtr XMLCALL + xmlCreateMemoryParserCtxt(const char *buffer, + int size); +XMLPUBFUN xmlParserCtxtPtr XMLCALL + xmlCreateEntityParserCtxt(const xmlChar *URL, + const xmlChar *ID, + const xmlChar *base); +XMLPUBFUN int XMLCALL + xmlSwitchEncoding (xmlParserCtxtPtr ctxt, + xmlCharEncoding enc); +XMLPUBFUN int XMLCALL + xmlSwitchToEncoding (xmlParserCtxtPtr ctxt, + xmlCharEncodingHandlerPtr handler); +XMLPUBFUN int XMLCALL + xmlSwitchInputEncoding (xmlParserCtxtPtr ctxt, + xmlParserInputPtr input, + xmlCharEncodingHandlerPtr handler); + +#ifdef IN_LIBXML +/* internal error reporting */ +XMLPUBFUN void XMLCALL + __xmlErrEncoding (xmlParserCtxtPtr ctxt, + xmlParserErrors xmlerr, + const char *msg, + const xmlChar * str1, + const xmlChar * str2) LIBXML_ATTR_FORMAT(3,0); +#endif + +/** + * Input Streams. + */ +XMLPUBFUN xmlParserInputPtr XMLCALL + xmlNewStringInputStream (xmlParserCtxtPtr ctxt, + const xmlChar *buffer); +XMLPUBFUN xmlParserInputPtr XMLCALL + xmlNewEntityInputStream (xmlParserCtxtPtr ctxt, + xmlEntityPtr entity); +XMLPUBFUN int XMLCALL + xmlPushInput (xmlParserCtxtPtr ctxt, + xmlParserInputPtr input); +XMLPUBFUN xmlChar XMLCALL + xmlPopInput (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlFreeInputStream (xmlParserInputPtr input); +XMLPUBFUN xmlParserInputPtr XMLCALL + xmlNewInputFromFile (xmlParserCtxtPtr ctxt, + const char *filename); +XMLPUBFUN xmlParserInputPtr XMLCALL + xmlNewInputStream (xmlParserCtxtPtr ctxt); + +/** + * Namespaces. + */ +XMLPUBFUN xmlChar * XMLCALL + xmlSplitQName (xmlParserCtxtPtr ctxt, + const xmlChar *name, + xmlChar **prefix); + +/** + * Generic production rules. + */ +XMLPUBFUN const xmlChar * XMLCALL + xmlParseName (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlParseNmtoken (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlParseEntityValue (xmlParserCtxtPtr ctxt, + xmlChar **orig); +XMLPUBFUN xmlChar * XMLCALL + xmlParseAttValue (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlParseSystemLiteral (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlParsePubidLiteral (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseCharData (xmlParserCtxtPtr ctxt, + int cdata); +XMLPUBFUN xmlChar * XMLCALL + xmlParseExternalID (xmlParserCtxtPtr ctxt, + xmlChar **publicID, + int strict); +XMLPUBFUN void XMLCALL + xmlParseComment (xmlParserCtxtPtr ctxt); +XMLPUBFUN const xmlChar * XMLCALL + xmlParsePITarget (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParsePI (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseNotationDecl (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseEntityDecl (xmlParserCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlParseDefaultDecl (xmlParserCtxtPtr ctxt, + xmlChar **value); +XMLPUBFUN xmlEnumerationPtr XMLCALL + xmlParseNotationType (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlEnumerationPtr XMLCALL + xmlParseEnumerationType (xmlParserCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlParseEnumeratedType (xmlParserCtxtPtr ctxt, + xmlEnumerationPtr *tree); +XMLPUBFUN int XMLCALL + xmlParseAttributeType (xmlParserCtxtPtr ctxt, + xmlEnumerationPtr *tree); +XMLPUBFUN void XMLCALL + xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlElementContentPtr XMLCALL + xmlParseElementMixedContentDecl + (xmlParserCtxtPtr ctxt, + int inputchk); +XMLPUBFUN xmlElementContentPtr XMLCALL + xmlParseElementChildrenContentDecl + (xmlParserCtxtPtr ctxt, + int inputchk); +XMLPUBFUN int XMLCALL + xmlParseElementContentDecl(xmlParserCtxtPtr ctxt, + const xmlChar *name, + xmlElementContentPtr *result); +XMLPUBFUN int XMLCALL + xmlParseElementDecl (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseMarkupDecl (xmlParserCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlParseCharRef (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlEntityPtr XMLCALL + xmlParseEntityRef (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseReference (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParsePEReference (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseDocTypeDecl (xmlParserCtxtPtr ctxt); +#ifdef LIBXML_SAX1_ENABLED +XMLPUBFUN const xmlChar * XMLCALL + xmlParseAttribute (xmlParserCtxtPtr ctxt, + xmlChar **value); +XMLPUBFUN const xmlChar * XMLCALL + xmlParseStartTag (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseEndTag (xmlParserCtxtPtr ctxt); +#endif /* LIBXML_SAX1_ENABLED */ +XMLPUBFUN void XMLCALL + xmlParseCDSect (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseContent (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseElement (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlParseVersionNum (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlParseVersionInfo (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlParseEncName (xmlParserCtxtPtr ctxt); +XMLPUBFUN const xmlChar * XMLCALL + xmlParseEncodingDecl (xmlParserCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlParseSDDecl (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseXMLDecl (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseTextDecl (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseMisc (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseExternalSubset (xmlParserCtxtPtr ctxt, + const xmlChar *ExternalID, + const xmlChar *SystemID); +/** + * XML_SUBSTITUTE_NONE: + * + * If no entities need to be substituted. + */ +#define XML_SUBSTITUTE_NONE 0 +/** + * XML_SUBSTITUTE_REF: + * + * Whether general entities need to be substituted. + */ +#define XML_SUBSTITUTE_REF 1 +/** + * XML_SUBSTITUTE_PEREF: + * + * Whether parameter entities need to be substituted. + */ +#define XML_SUBSTITUTE_PEREF 2 +/** + * XML_SUBSTITUTE_BOTH: + * + * Both general and parameter entities need to be substituted. + */ +#define XML_SUBSTITUTE_BOTH 3 + +XMLPUBFUN xmlChar * XMLCALL + xmlStringDecodeEntities (xmlParserCtxtPtr ctxt, + const xmlChar *str, + int what, + xmlChar end, + xmlChar end2, + xmlChar end3); +XMLPUBFUN xmlChar * XMLCALL + xmlStringLenDecodeEntities (xmlParserCtxtPtr ctxt, + const xmlChar *str, + int len, + int what, + xmlChar end, + xmlChar end2, + xmlChar end3); + +/* + * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP. + */ +XMLPUBFUN int XMLCALL nodePush (xmlParserCtxtPtr ctxt, + xmlNodePtr value); +XMLPUBFUN xmlNodePtr XMLCALL nodePop (xmlParserCtxtPtr ctxt); +XMLPUBFUN int XMLCALL inputPush (xmlParserCtxtPtr ctxt, + xmlParserInputPtr value); +XMLPUBFUN xmlParserInputPtr XMLCALL inputPop (xmlParserCtxtPtr ctxt); +XMLPUBFUN const xmlChar * XMLCALL namePop (xmlParserCtxtPtr ctxt); +XMLPUBFUN int XMLCALL namePush (xmlParserCtxtPtr ctxt, + const xmlChar *value); + +/* + * other commodities shared between parser.c and parserInternals. + */ +XMLPUBFUN int XMLCALL xmlSkipBlankChars (xmlParserCtxtPtr ctxt); +XMLPUBFUN int XMLCALL xmlStringCurrentChar (xmlParserCtxtPtr ctxt, + const xmlChar *cur, + int *len); +XMLPUBFUN void XMLCALL xmlParserHandlePEReference(xmlParserCtxtPtr ctxt); +XMLPUBFUN int XMLCALL xmlCheckLanguageID (const xmlChar *lang); + +/* + * Really core function shared with HTML parser. + */ +XMLPUBFUN int XMLCALL xmlCurrentChar (xmlParserCtxtPtr ctxt, + int *len); +XMLPUBFUN int XMLCALL xmlCopyCharMultiByte (xmlChar *out, + int val); +XMLPUBFUN int XMLCALL xmlCopyChar (int len, + xmlChar *out, + int val); +XMLPUBFUN void XMLCALL xmlNextChar (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL xmlParserInputShrink (xmlParserInputPtr in); + +#ifdef LIBXML_HTML_ENABLED +/* + * Actually comes from the HTML parser but launched from the init stuff. + */ +XMLPUBFUN void XMLCALL htmlInitAutoClose (void); +XMLPUBFUN htmlParserCtxtPtr XMLCALL htmlCreateFileParserCtxt(const char *filename, + const char *encoding); +#endif + +/* + * Specific function to keep track of entities references + * and used by the XSLT debugger. + */ +#ifdef LIBXML_LEGACY_ENABLED +/** + * xmlEntityReferenceFunc: + * @ent: the entity + * @firstNode: the fist node in the chunk + * @lastNode: the last nod in the chunk + * + * Callback function used when one needs to be able to track back the + * provenance of a chunk of nodes inherited from an entity replacement. + */ +typedef void (*xmlEntityReferenceFunc) (xmlEntityPtr ent, + xmlNodePtr firstNode, + xmlNodePtr lastNode); + +XMLPUBFUN void XMLCALL xmlSetEntityReferenceFunc (xmlEntityReferenceFunc func); + +XMLPUBFUN xmlChar * XMLCALL + xmlParseQuotedString (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlParseNamespace (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlNamespaceParseNSDef (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlScanName (xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlNamespaceParseNCName (xmlParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL xmlParserHandleReference(xmlParserCtxtPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlNamespaceParseQName (xmlParserCtxtPtr ctxt, + xmlChar **prefix); +/** + * Entities + */ +XMLPUBFUN xmlChar * XMLCALL + xmlDecodeEntities (xmlParserCtxtPtr ctxt, + int len, + int what, + xmlChar end, + xmlChar end2, + xmlChar end3); +XMLPUBFUN void XMLCALL + xmlHandleEntity (xmlParserCtxtPtr ctxt, + xmlEntityPtr entity); + +#endif /* LIBXML_LEGACY_ENABLED */ + +#ifdef IN_LIBXML +/* + * internal only + */ +XMLPUBFUN void XMLCALL + xmlErrMemory (xmlParserCtxtPtr ctxt, + const char *extra); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* __XML_PARSER_INTERNALS_H__ */ diff --git a/libxml2/include/libxml/pattern.h b/libxml2/include/libxml/pattern.h new file mode 100644 index 0000000..97d2cd2 --- /dev/null +++ b/libxml2/include/libxml/pattern.h @@ -0,0 +1,100 @@ +/* + * Summary: pattern expression handling + * Description: allows to compile and test pattern expressions for nodes + * either in a tree or based on a parser state. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_PATTERN_H__ +#define __XML_PATTERN_H__ + +#include +#include +#include + +#ifdef LIBXML_PATTERN_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlPattern: + * + * A compiled (XPath based) pattern to select nodes + */ +typedef struct _xmlPattern xmlPattern; +typedef xmlPattern *xmlPatternPtr; + +/** + * xmlPatternFlags: + * + * This is the set of options affecting the behaviour of pattern + * matching with this module + * + */ +typedef enum { + XML_PATTERN_DEFAULT = 0, /* simple pattern match */ + XML_PATTERN_XPATH = 1<<0, /* standard XPath pattern */ + XML_PATTERN_XSSEL = 1<<1, /* XPath subset for schema selector */ + XML_PATTERN_XSFIELD = 1<<2 /* XPath subset for schema field */ +} xmlPatternFlags; + +XMLPUBFUN void XMLCALL + xmlFreePattern (xmlPatternPtr comp); + +XMLPUBFUN void XMLCALL + xmlFreePatternList (xmlPatternPtr comp); + +XMLPUBFUN xmlPatternPtr XMLCALL + xmlPatterncompile (const xmlChar *pattern, + xmlDict *dict, + int flags, + const xmlChar **namespaces); +XMLPUBFUN int XMLCALL + xmlPatternMatch (xmlPatternPtr comp, + xmlNodePtr node); + +/* streaming interfaces */ +typedef struct _xmlStreamCtxt xmlStreamCtxt; +typedef xmlStreamCtxt *xmlStreamCtxtPtr; + +XMLPUBFUN int XMLCALL + xmlPatternStreamable (xmlPatternPtr comp); +XMLPUBFUN int XMLCALL + xmlPatternMaxDepth (xmlPatternPtr comp); +XMLPUBFUN int XMLCALL + xmlPatternMinDepth (xmlPatternPtr comp); +XMLPUBFUN int XMLCALL + xmlPatternFromRoot (xmlPatternPtr comp); +XMLPUBFUN xmlStreamCtxtPtr XMLCALL + xmlPatternGetStreamCtxt (xmlPatternPtr comp); +XMLPUBFUN void XMLCALL + xmlFreeStreamCtxt (xmlStreamCtxtPtr stream); +XMLPUBFUN int XMLCALL + xmlStreamPushNode (xmlStreamCtxtPtr stream, + const xmlChar *name, + const xmlChar *ns, + int nodeType); +XMLPUBFUN int XMLCALL + xmlStreamPush (xmlStreamCtxtPtr stream, + const xmlChar *name, + const xmlChar *ns); +XMLPUBFUN int XMLCALL + xmlStreamPushAttr (xmlStreamCtxtPtr stream, + const xmlChar *name, + const xmlChar *ns); +XMLPUBFUN int XMLCALL + xmlStreamPop (xmlStreamCtxtPtr stream); +XMLPUBFUN int XMLCALL + xmlStreamWantsAnyNode (xmlStreamCtxtPtr stream); +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_PATTERN_ENABLED */ + +#endif /* __XML_PATTERN_H__ */ diff --git a/libxml2/include/libxml/relaxng.h b/libxml2/include/libxml/relaxng.h new file mode 100644 index 0000000..f269c9e --- /dev/null +++ b/libxml2/include/libxml/relaxng.h @@ -0,0 +1,217 @@ +/* + * Summary: implementation of the Relax-NG validation + * Description: implementation of the Relax-NG validation + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_RELAX_NG__ +#define __XML_RELAX_NG__ + +#include +#include +#include + +#ifdef LIBXML_SCHEMAS_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _xmlRelaxNG xmlRelaxNG; +typedef xmlRelaxNG *xmlRelaxNGPtr; + + +/** + * xmlRelaxNGValidityErrorFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of an error callback from a Relax-NG validation + */ +typedef void (XMLCDECL *xmlRelaxNGValidityErrorFunc) (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); + +/** + * xmlRelaxNGValidityWarningFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of a warning callback from a Relax-NG validation + */ +typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); + +/** + * A schemas validation context + */ +typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt; +typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr; + +typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt; +typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr; + +/* + * xmlRelaxNGValidErr: + * + * List of possible Relax NG validation errors + */ +typedef enum { + XML_RELAXNG_OK = 0, + XML_RELAXNG_ERR_MEMORY, + XML_RELAXNG_ERR_TYPE, + XML_RELAXNG_ERR_TYPEVAL, + XML_RELAXNG_ERR_DUPID, + XML_RELAXNG_ERR_TYPECMP, + XML_RELAXNG_ERR_NOSTATE, + XML_RELAXNG_ERR_NODEFINE, + XML_RELAXNG_ERR_LISTEXTRA, + XML_RELAXNG_ERR_LISTEMPTY, + XML_RELAXNG_ERR_INTERNODATA, + XML_RELAXNG_ERR_INTERSEQ, + XML_RELAXNG_ERR_INTEREXTRA, + XML_RELAXNG_ERR_ELEMNAME, + XML_RELAXNG_ERR_ATTRNAME, + XML_RELAXNG_ERR_ELEMNONS, + XML_RELAXNG_ERR_ATTRNONS, + XML_RELAXNG_ERR_ELEMWRONGNS, + XML_RELAXNG_ERR_ATTRWRONGNS, + XML_RELAXNG_ERR_ELEMEXTRANS, + XML_RELAXNG_ERR_ATTREXTRANS, + XML_RELAXNG_ERR_ELEMNOTEMPTY, + XML_RELAXNG_ERR_NOELEM, + XML_RELAXNG_ERR_NOTELEM, + XML_RELAXNG_ERR_ATTRVALID, + XML_RELAXNG_ERR_CONTENTVALID, + XML_RELAXNG_ERR_EXTRACONTENT, + XML_RELAXNG_ERR_INVALIDATTR, + XML_RELAXNG_ERR_DATAELEM, + XML_RELAXNG_ERR_VALELEM, + XML_RELAXNG_ERR_LISTELEM, + XML_RELAXNG_ERR_DATATYPE, + XML_RELAXNG_ERR_VALUE, + XML_RELAXNG_ERR_LIST, + XML_RELAXNG_ERR_NOGRAMMAR, + XML_RELAXNG_ERR_EXTRADATA, + XML_RELAXNG_ERR_LACKDATA, + XML_RELAXNG_ERR_INTERNAL, + XML_RELAXNG_ERR_ELEMWRONG, + XML_RELAXNG_ERR_TEXTWRONG +} xmlRelaxNGValidErr; + +/* + * xmlRelaxNGParserFlags: + * + * List of possible Relax NG Parser flags + */ +typedef enum { + XML_RELAXNGP_NONE = 0, + XML_RELAXNGP_FREE_DOC = 1, + XML_RELAXNGP_CRNG = 2 +} xmlRelaxNGParserFlag; + +XMLPUBFUN int XMLCALL + xmlRelaxNGInitTypes (void); +XMLPUBFUN void XMLCALL + xmlRelaxNGCleanupTypes (void); + +/* + * Interfaces for parsing. + */ +XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL + xmlRelaxNGNewParserCtxt (const char *URL); +XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL + xmlRelaxNGNewMemParserCtxt (const char *buffer, + int size); +XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL + xmlRelaxNGNewDocParserCtxt (xmlDocPtr doc); + +XMLPUBFUN int XMLCALL + xmlRelaxParserSetFlag (xmlRelaxNGParserCtxtPtr ctxt, + int flag); + +XMLPUBFUN void XMLCALL + xmlRelaxNGFreeParserCtxt (xmlRelaxNGParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt, + xmlRelaxNGValidityErrorFunc err, + xmlRelaxNGValidityWarningFunc warn, + void *ctx); +XMLPUBFUN int XMLCALL + xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt, + xmlRelaxNGValidityErrorFunc *err, + xmlRelaxNGValidityWarningFunc *warn, + void **ctx); +XMLPUBFUN void XMLCALL + xmlRelaxNGSetParserStructuredErrors( + xmlRelaxNGParserCtxtPtr ctxt, + xmlStructuredErrorFunc serror, + void *ctx); +XMLPUBFUN xmlRelaxNGPtr XMLCALL + xmlRelaxNGParse (xmlRelaxNGParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlRelaxNGFree (xmlRelaxNGPtr schema); +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void XMLCALL + xmlRelaxNGDump (FILE *output, + xmlRelaxNGPtr schema); +XMLPUBFUN void XMLCALL + xmlRelaxNGDumpTree (FILE * output, + xmlRelaxNGPtr schema); +#endif /* LIBXML_OUTPUT_ENABLED */ +/* + * Interfaces for validating + */ +XMLPUBFUN void XMLCALL + xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt, + xmlRelaxNGValidityErrorFunc err, + xmlRelaxNGValidityWarningFunc warn, + void *ctx); +XMLPUBFUN int XMLCALL + xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt, + xmlRelaxNGValidityErrorFunc *err, + xmlRelaxNGValidityWarningFunc *warn, + void **ctx); +XMLPUBFUN void XMLCALL + xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt, + xmlStructuredErrorFunc serror, void *ctx); +XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL + xmlRelaxNGNewValidCtxt (xmlRelaxNGPtr schema); +XMLPUBFUN void XMLCALL + xmlRelaxNGFreeValidCtxt (xmlRelaxNGValidCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlRelaxNGValidateDoc (xmlRelaxNGValidCtxtPtr ctxt, + xmlDocPtr doc); +/* + * Interfaces for progressive validation when possible + */ +XMLPUBFUN int XMLCALL + xmlRelaxNGValidatePushElement (xmlRelaxNGValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem); +XMLPUBFUN int XMLCALL + xmlRelaxNGValidatePushCData (xmlRelaxNGValidCtxtPtr ctxt, + const xmlChar *data, + int len); +XMLPUBFUN int XMLCALL + xmlRelaxNGValidatePopElement (xmlRelaxNGValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem); +XMLPUBFUN int XMLCALL + xmlRelaxNGValidateFullElement (xmlRelaxNGValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_SCHEMAS_ENABLED */ + +#endif /* __XML_RELAX_NG__ */ diff --git a/libxml2/include/libxml/schemasInternals.h b/libxml2/include/libxml/schemasInternals.h new file mode 100644 index 0000000..c7cf552 --- /dev/null +++ b/libxml2/include/libxml/schemasInternals.h @@ -0,0 +1,958 @@ +/* + * Summary: internal interfaces for XML Schemas + * Description: internal interfaces for the XML Schemas handling + * and schema validity checking + * The Schemas development is a Work In Progress. + * Some of those interfaces are not garanteed to be API or ABI stable ! + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + + +#ifndef __XML_SCHEMA_INTERNALS_H__ +#define __XML_SCHEMA_INTERNALS_H__ + +#include + +#ifdef LIBXML_SCHEMAS_ENABLED + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + XML_SCHEMAS_UNKNOWN = 0, + XML_SCHEMAS_STRING = 1, + XML_SCHEMAS_NORMSTRING = 2, + XML_SCHEMAS_DECIMAL = 3, + XML_SCHEMAS_TIME = 4, + XML_SCHEMAS_GDAY = 5, + XML_SCHEMAS_GMONTH = 6, + XML_SCHEMAS_GMONTHDAY = 7, + XML_SCHEMAS_GYEAR = 8, + XML_SCHEMAS_GYEARMONTH = 9, + XML_SCHEMAS_DATE = 10, + XML_SCHEMAS_DATETIME = 11, + XML_SCHEMAS_DURATION = 12, + XML_SCHEMAS_FLOAT = 13, + XML_SCHEMAS_DOUBLE = 14, + XML_SCHEMAS_BOOLEAN = 15, + XML_SCHEMAS_TOKEN = 16, + XML_SCHEMAS_LANGUAGE = 17, + XML_SCHEMAS_NMTOKEN = 18, + XML_SCHEMAS_NMTOKENS = 19, + XML_SCHEMAS_NAME = 20, + XML_SCHEMAS_QNAME = 21, + XML_SCHEMAS_NCNAME = 22, + XML_SCHEMAS_ID = 23, + XML_SCHEMAS_IDREF = 24, + XML_SCHEMAS_IDREFS = 25, + XML_SCHEMAS_ENTITY = 26, + XML_SCHEMAS_ENTITIES = 27, + XML_SCHEMAS_NOTATION = 28, + XML_SCHEMAS_ANYURI = 29, + XML_SCHEMAS_INTEGER = 30, + XML_SCHEMAS_NPINTEGER = 31, + XML_SCHEMAS_NINTEGER = 32, + XML_SCHEMAS_NNINTEGER = 33, + XML_SCHEMAS_PINTEGER = 34, + XML_SCHEMAS_INT = 35, + XML_SCHEMAS_UINT = 36, + XML_SCHEMAS_LONG = 37, + XML_SCHEMAS_ULONG = 38, + XML_SCHEMAS_SHORT = 39, + XML_SCHEMAS_USHORT = 40, + XML_SCHEMAS_BYTE = 41, + XML_SCHEMAS_UBYTE = 42, + XML_SCHEMAS_HEXBINARY = 43, + XML_SCHEMAS_BASE64BINARY = 44, + XML_SCHEMAS_ANYTYPE = 45, + XML_SCHEMAS_ANYSIMPLETYPE = 46 +} xmlSchemaValType; + +/* + * XML Schemas defines multiple type of types. + */ +typedef enum { + XML_SCHEMA_TYPE_BASIC = 1, /* A built-in datatype */ + XML_SCHEMA_TYPE_ANY, + XML_SCHEMA_TYPE_FACET, + XML_SCHEMA_TYPE_SIMPLE, + XML_SCHEMA_TYPE_COMPLEX, + XML_SCHEMA_TYPE_SEQUENCE = 6, + XML_SCHEMA_TYPE_CHOICE, + XML_SCHEMA_TYPE_ALL, + XML_SCHEMA_TYPE_SIMPLE_CONTENT, + XML_SCHEMA_TYPE_COMPLEX_CONTENT, + XML_SCHEMA_TYPE_UR, + XML_SCHEMA_TYPE_RESTRICTION, + XML_SCHEMA_TYPE_EXTENSION, + XML_SCHEMA_TYPE_ELEMENT, + XML_SCHEMA_TYPE_ATTRIBUTE, + XML_SCHEMA_TYPE_ATTRIBUTEGROUP, + XML_SCHEMA_TYPE_GROUP, + XML_SCHEMA_TYPE_NOTATION, + XML_SCHEMA_TYPE_LIST, + XML_SCHEMA_TYPE_UNION, + XML_SCHEMA_TYPE_ANY_ATTRIBUTE, + XML_SCHEMA_TYPE_IDC_UNIQUE, + XML_SCHEMA_TYPE_IDC_KEY, + XML_SCHEMA_TYPE_IDC_KEYREF, + XML_SCHEMA_TYPE_PARTICLE = 25, + XML_SCHEMA_TYPE_ATTRIBUTE_USE, + XML_SCHEMA_FACET_MININCLUSIVE = 1000, + XML_SCHEMA_FACET_MINEXCLUSIVE, + XML_SCHEMA_FACET_MAXINCLUSIVE, + XML_SCHEMA_FACET_MAXEXCLUSIVE, + XML_SCHEMA_FACET_TOTALDIGITS, + XML_SCHEMA_FACET_FRACTIONDIGITS, + XML_SCHEMA_FACET_PATTERN, + XML_SCHEMA_FACET_ENUMERATION, + XML_SCHEMA_FACET_WHITESPACE, + XML_SCHEMA_FACET_LENGTH, + XML_SCHEMA_FACET_MAXLENGTH, + XML_SCHEMA_FACET_MINLENGTH, + XML_SCHEMA_EXTRA_QNAMEREF = 2000, + XML_SCHEMA_EXTRA_ATTR_USE_PROHIB +} xmlSchemaTypeType; + +typedef enum { + XML_SCHEMA_CONTENT_UNKNOWN = 0, + XML_SCHEMA_CONTENT_EMPTY = 1, + XML_SCHEMA_CONTENT_ELEMENTS, + XML_SCHEMA_CONTENT_MIXED, + XML_SCHEMA_CONTENT_SIMPLE, + XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS, /* Obsolete */ + XML_SCHEMA_CONTENT_BASIC, + XML_SCHEMA_CONTENT_ANY +} xmlSchemaContentType; + +typedef struct _xmlSchemaVal xmlSchemaVal; +typedef xmlSchemaVal *xmlSchemaValPtr; + +typedef struct _xmlSchemaType xmlSchemaType; +typedef xmlSchemaType *xmlSchemaTypePtr; + +typedef struct _xmlSchemaFacet xmlSchemaFacet; +typedef xmlSchemaFacet *xmlSchemaFacetPtr; + +/** + * Annotation + */ +typedef struct _xmlSchemaAnnot xmlSchemaAnnot; +typedef xmlSchemaAnnot *xmlSchemaAnnotPtr; +struct _xmlSchemaAnnot { + struct _xmlSchemaAnnot *next; + xmlNodePtr content; /* the annotation */ +}; + +/** + * XML_SCHEMAS_ANYATTR_SKIP: + * + * Skip unknown attribute from validation + * Obsolete, not used anymore. + */ +#define XML_SCHEMAS_ANYATTR_SKIP 1 +/** + * XML_SCHEMAS_ANYATTR_LAX: + * + * Ignore validation non definition on attributes + * Obsolete, not used anymore. + */ +#define XML_SCHEMAS_ANYATTR_LAX 2 +/** + * XML_SCHEMAS_ANYATTR_STRICT: + * + * Apply strict validation rules on attributes + * Obsolete, not used anymore. + */ +#define XML_SCHEMAS_ANYATTR_STRICT 3 +/** + * XML_SCHEMAS_ANY_SKIP: + * + * Skip unknown attribute from validation + */ +#define XML_SCHEMAS_ANY_SKIP 1 +/** + * XML_SCHEMAS_ANY_LAX: + * + * Used by wildcards. + * Validate if type found, don't worry if not found + */ +#define XML_SCHEMAS_ANY_LAX 2 +/** + * XML_SCHEMAS_ANY_STRICT: + * + * Used by wildcards. + * Apply strict validation rules + */ +#define XML_SCHEMAS_ANY_STRICT 3 +/** + * XML_SCHEMAS_ATTR_USE_PROHIBITED: + * + * Used by wildcards. + * The attribute is prohibited. + */ +#define XML_SCHEMAS_ATTR_USE_PROHIBITED 0 +/** + * XML_SCHEMAS_ATTR_USE_REQUIRED: + * + * The attribute is required. + */ +#define XML_SCHEMAS_ATTR_USE_REQUIRED 1 +/** + * XML_SCHEMAS_ATTR_USE_OPTIONAL: + * + * The attribute is optional. + */ +#define XML_SCHEMAS_ATTR_USE_OPTIONAL 2 +/** + * XML_SCHEMAS_ATTR_GLOBAL: + * + * allow elements in no namespace + */ +#define XML_SCHEMAS_ATTR_GLOBAL 1 << 0 +/** + * XML_SCHEMAS_ATTR_NSDEFAULT: + * + * allow elements in no namespace + */ +#define XML_SCHEMAS_ATTR_NSDEFAULT 1 << 7 +/** + * XML_SCHEMAS_ATTR_INTERNAL_RESOLVED: + * + * this is set when the "type" and "ref" references + * have been resolved. + */ +#define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED 1 << 8 +/** + * XML_SCHEMAS_ATTR_FIXED: + * + * the attribute has a fixed value + */ +#define XML_SCHEMAS_ATTR_FIXED 1 << 9 + +/** + * xmlSchemaAttribute: + * An attribute definition. + */ + +typedef struct _xmlSchemaAttribute xmlSchemaAttribute; +typedef xmlSchemaAttribute *xmlSchemaAttributePtr; +struct _xmlSchemaAttribute { + xmlSchemaTypeType type; + struct _xmlSchemaAttribute *next; /* the next attribute (not used?) */ + const xmlChar *name; /* the name of the declaration */ + const xmlChar *id; /* Deprecated; not used */ + const xmlChar *ref; /* Deprecated; not used */ + const xmlChar *refNs; /* Deprecated; not used */ + const xmlChar *typeName; /* the local name of the type definition */ + const xmlChar *typeNs; /* the ns URI of the type definition */ + xmlSchemaAnnotPtr annot; + + xmlSchemaTypePtr base; /* Deprecated; not used */ + int occurs; /* Deprecated; not used */ + const xmlChar *defValue; /* The initial value of the value constraint */ + xmlSchemaTypePtr subtypes; /* the type definition */ + xmlNodePtr node; + const xmlChar *targetNamespace; + int flags; + const xmlChar *refPrefix; /* Deprecated; not used */ + xmlSchemaValPtr defVal; /* The compiled value constraint */ + xmlSchemaAttributePtr refDecl; /* Deprecated; not used */ +}; + +/** + * xmlSchemaAttributeLink: + * Used to build a list of attribute uses on complexType definitions. + * WARNING: Deprecated; not used. + */ +typedef struct _xmlSchemaAttributeLink xmlSchemaAttributeLink; +typedef xmlSchemaAttributeLink *xmlSchemaAttributeLinkPtr; +struct _xmlSchemaAttributeLink { + struct _xmlSchemaAttributeLink *next;/* the next attribute link ... */ + struct _xmlSchemaAttribute *attr;/* the linked attribute */ +}; + +/** + * XML_SCHEMAS_WILDCARD_COMPLETE: + * + * If the wildcard is complete. + */ +#define XML_SCHEMAS_WILDCARD_COMPLETE 1 << 0 + +/** + * xmlSchemaCharValueLink: + * Used to build a list of namespaces on wildcards. + */ +typedef struct _xmlSchemaWildcardNs xmlSchemaWildcardNs; +typedef xmlSchemaWildcardNs *xmlSchemaWildcardNsPtr; +struct _xmlSchemaWildcardNs { + struct _xmlSchemaWildcardNs *next;/* the next constraint link ... */ + const xmlChar *value;/* the value */ +}; + +/** + * xmlSchemaWildcard. + * A wildcard. + */ +typedef struct _xmlSchemaWildcard xmlSchemaWildcard; +typedef xmlSchemaWildcard *xmlSchemaWildcardPtr; +struct _xmlSchemaWildcard { + xmlSchemaTypeType type; /* The kind of type */ + const xmlChar *id; /* Deprecated; not used */ + xmlSchemaAnnotPtr annot; + xmlNodePtr node; + int minOccurs; /* Deprecated; not used */ + int maxOccurs; /* Deprecated; not used */ + int processContents; + int any; /* Indicates if the ns constraint is of ##any */ + xmlSchemaWildcardNsPtr nsSet; /* The list of allowed namespaces */ + xmlSchemaWildcardNsPtr negNsSet; /* The negated namespace */ + int flags; +}; + +/** + * XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED: + * + * The attribute wildcard has been already builded. + */ +#define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED 1 << 0 +/** + * XML_SCHEMAS_ATTRGROUP_GLOBAL: + * + * The attribute wildcard has been already builded. + */ +#define XML_SCHEMAS_ATTRGROUP_GLOBAL 1 << 1 +/** + * XML_SCHEMAS_ATTRGROUP_MARKED: + * + * Marks the attr group as marked; used for circular checks. + */ +#define XML_SCHEMAS_ATTRGROUP_MARKED 1 << 2 + +/** + * XML_SCHEMAS_ATTRGROUP_REDEFINED: + * + * The attr group was redefined. + */ +#define XML_SCHEMAS_ATTRGROUP_REDEFINED 1 << 3 +/** + * XML_SCHEMAS_ATTRGROUP_HAS_REFS: + * + * Whether this attr. group contains attr. group references. + */ +#define XML_SCHEMAS_ATTRGROUP_HAS_REFS 1 << 4 + +/** + * An attribute group definition. + * + * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures + * must be kept similar + */ +typedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup; +typedef xmlSchemaAttributeGroup *xmlSchemaAttributeGroupPtr; +struct _xmlSchemaAttributeGroup { + xmlSchemaTypeType type; /* The kind of type */ + struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */ + const xmlChar *name; + const xmlChar *id; + const xmlChar *ref; /* Deprecated; not used */ + const xmlChar *refNs; /* Deprecated; not used */ + xmlSchemaAnnotPtr annot; + + xmlSchemaAttributePtr attributes; /* Deprecated; not used */ + xmlNodePtr node; + int flags; + xmlSchemaWildcardPtr attributeWildcard; + const xmlChar *refPrefix; /* Deprecated; not used */ + xmlSchemaAttributeGroupPtr refItem; /* Deprecated; not used */ + const xmlChar *targetNamespace; + void *attrUses; +}; + +/** + * xmlSchemaTypeLink: + * Used to build a list of types (e.g. member types of + * simpleType with variety "union"). + */ +typedef struct _xmlSchemaTypeLink xmlSchemaTypeLink; +typedef xmlSchemaTypeLink *xmlSchemaTypeLinkPtr; +struct _xmlSchemaTypeLink { + struct _xmlSchemaTypeLink *next;/* the next type link ... */ + xmlSchemaTypePtr type;/* the linked type */ +}; + +/** + * xmlSchemaFacetLink: + * Used to build a list of facets. + */ +typedef struct _xmlSchemaFacetLink xmlSchemaFacetLink; +typedef xmlSchemaFacetLink *xmlSchemaFacetLinkPtr; +struct _xmlSchemaFacetLink { + struct _xmlSchemaFacetLink *next;/* the next facet link ... */ + xmlSchemaFacetPtr facet;/* the linked facet */ +}; + +/** + * XML_SCHEMAS_TYPE_MIXED: + * + * the element content type is mixed + */ +#define XML_SCHEMAS_TYPE_MIXED 1 << 0 +/** + * XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION: + * + * the simple or complex type has a derivation method of "extension". + */ +#define XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION 1 << 1 +/** + * XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION: + * + * the simple or complex type has a derivation method of "restriction". + */ +#define XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION 1 << 2 +/** + * XML_SCHEMAS_TYPE_GLOBAL: + * + * the type is global + */ +#define XML_SCHEMAS_TYPE_GLOBAL 1 << 3 +/** + * XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD: + * + * the complexType owns an attribute wildcard, i.e. + * it can be freed by the complexType + */ +#define XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD 1 << 4 /* Obsolete. */ +/** + * XML_SCHEMAS_TYPE_VARIETY_ABSENT: + * + * the simpleType has a variety of "absent". + * TODO: Actually not necessary :-/, since if + * none of the variety flags occur then it's + * automatically absent. + */ +#define XML_SCHEMAS_TYPE_VARIETY_ABSENT 1 << 5 +/** + * XML_SCHEMAS_TYPE_VARIETY_LIST: + * + * the simpleType has a variety of "list". + */ +#define XML_SCHEMAS_TYPE_VARIETY_LIST 1 << 6 +/** + * XML_SCHEMAS_TYPE_VARIETY_UNION: + * + * the simpleType has a variety of "union". + */ +#define XML_SCHEMAS_TYPE_VARIETY_UNION 1 << 7 +/** + * XML_SCHEMAS_TYPE_VARIETY_ATOMIC: + * + * the simpleType has a variety of "union". + */ +#define XML_SCHEMAS_TYPE_VARIETY_ATOMIC 1 << 8 +/** + * XML_SCHEMAS_TYPE_FINAL_EXTENSION: + * + * the complexType has a final of "extension". + */ +#define XML_SCHEMAS_TYPE_FINAL_EXTENSION 1 << 9 +/** + * XML_SCHEMAS_TYPE_FINAL_RESTRICTION: + * + * the simpleType/complexType has a final of "restriction". + */ +#define XML_SCHEMAS_TYPE_FINAL_RESTRICTION 1 << 10 +/** + * XML_SCHEMAS_TYPE_FINAL_LIST: + * + * the simpleType has a final of "list". + */ +#define XML_SCHEMAS_TYPE_FINAL_LIST 1 << 11 +/** + * XML_SCHEMAS_TYPE_FINAL_UNION: + * + * the simpleType has a final of "union". + */ +#define XML_SCHEMAS_TYPE_FINAL_UNION 1 << 12 +/** + * XML_SCHEMAS_TYPE_FINAL_DEFAULT: + * + * the simpleType has a final of "default". + */ +#define XML_SCHEMAS_TYPE_FINAL_DEFAULT 1 << 13 +/** + * XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE: + * + * Marks the item as a builtin primitive. + */ +#define XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE 1 << 14 +/** + * XML_SCHEMAS_TYPE_MARKED: + * + * Marks the item as marked; used for circular checks. + */ +#define XML_SCHEMAS_TYPE_MARKED 1 << 16 +/** + * XML_SCHEMAS_TYPE_BLOCK_DEFAULT: + * + * the complexType did not specify 'block' so use the default of the + * item. + */ +#define XML_SCHEMAS_TYPE_BLOCK_DEFAULT 1 << 17 +/** + * XML_SCHEMAS_TYPE_BLOCK_EXTENSION: + * + * the complexType has a 'block' of "extension". + */ +#define XML_SCHEMAS_TYPE_BLOCK_EXTENSION 1 << 18 +/** + * XML_SCHEMAS_TYPE_BLOCK_RESTRICTION: + * + * the complexType has a 'block' of "restriction". + */ +#define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION 1 << 19 +/** + * XML_SCHEMAS_TYPE_ABSTRACT: + * + * the simple/complexType is abstract. + */ +#define XML_SCHEMAS_TYPE_ABSTRACT 1 << 20 +/** + * XML_SCHEMAS_TYPE_FACETSNEEDVALUE: + * + * indicates if the facets need a computed value + */ +#define XML_SCHEMAS_TYPE_FACETSNEEDVALUE 1 << 21 +/** + * XML_SCHEMAS_TYPE_INTERNAL_RESOLVED: + * + * indicates that the type was typefixed + */ +#define XML_SCHEMAS_TYPE_INTERNAL_RESOLVED 1 << 22 +/** + * XML_SCHEMAS_TYPE_INTERNAL_INVALID: + * + * indicates that the type is invalid + */ +#define XML_SCHEMAS_TYPE_INTERNAL_INVALID 1 << 23 +/** + * XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE: + * + * a whitespace-facet value of "preserve" + */ +#define XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE 1 << 24 +/** + * XML_SCHEMAS_TYPE_WHITESPACE_REPLACE: + * + * a whitespace-facet value of "replace" + */ +#define XML_SCHEMAS_TYPE_WHITESPACE_REPLACE 1 << 25 +/** + * XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE: + * + * a whitespace-facet value of "collapse" + */ +#define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE 1 << 26 +/** + * XML_SCHEMAS_TYPE_HAS_FACETS: + * + * has facets + */ +#define XML_SCHEMAS_TYPE_HAS_FACETS 1 << 27 +/** + * XML_SCHEMAS_TYPE_NORMVALUENEEDED: + * + * indicates if the facets (pattern) need a normalized value + */ +#define XML_SCHEMAS_TYPE_NORMVALUENEEDED 1 << 28 + +/** + * XML_SCHEMAS_TYPE_FIXUP_1: + * + * First stage of fixup was done. + */ +#define XML_SCHEMAS_TYPE_FIXUP_1 1 << 29 + +/** + * XML_SCHEMAS_TYPE_REDEFINED: + * + * The type was redefined. + */ +#define XML_SCHEMAS_TYPE_REDEFINED 1 << 30 +/** + * XML_SCHEMAS_TYPE_REDEFINING: + * + * The type redefines an other type. + */ +/* #define XML_SCHEMAS_TYPE_REDEFINING 1 << 31 */ + +/** + * _xmlSchemaType: + * + * Schemas type definition. + */ +struct _xmlSchemaType { + xmlSchemaTypeType type; /* The kind of type */ + struct _xmlSchemaType *next; /* the next type if in a sequence ... */ + const xmlChar *name; + const xmlChar *id ; /* Deprecated; not used */ + const xmlChar *ref; /* Deprecated; not used */ + const xmlChar *refNs; /* Deprecated; not used */ + xmlSchemaAnnotPtr annot; + xmlSchemaTypePtr subtypes; + xmlSchemaAttributePtr attributes; /* Deprecated; not used */ + xmlNodePtr node; + int minOccurs; /* Deprecated; not used */ + int maxOccurs; /* Deprecated; not used */ + + int flags; + xmlSchemaContentType contentType; + const xmlChar *base; /* Base type's local name */ + const xmlChar *baseNs; /* Base type's target namespace */ + xmlSchemaTypePtr baseType; /* The base type component */ + xmlSchemaFacetPtr facets; /* Local facets */ + struct _xmlSchemaType *redef; /* Deprecated; not used */ + int recurse; /* Obsolete */ + xmlSchemaAttributeLinkPtr *attributeUses; /* Deprecated; not used */ + xmlSchemaWildcardPtr attributeWildcard; + int builtInType; /* Type of built-in types. */ + xmlSchemaTypeLinkPtr memberTypes; /* member-types if a union type. */ + xmlSchemaFacetLinkPtr facetSet; /* All facets (incl. inherited) */ + const xmlChar *refPrefix; /* Deprecated; not used */ + xmlSchemaTypePtr contentTypeDef; /* Used for the simple content of complex types. + Could we use @subtypes for this? */ + xmlRegexpPtr contModel; /* Holds the automaton of the content model */ + const xmlChar *targetNamespace; + void *attrUses; +}; + +/* + * xmlSchemaElement: + * An element definition. + * + * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of + * structures must be kept similar + */ +/** + * XML_SCHEMAS_ELEM_NILLABLE: + * + * the element is nillable + */ +#define XML_SCHEMAS_ELEM_NILLABLE 1 << 0 +/** + * XML_SCHEMAS_ELEM_GLOBAL: + * + * the element is global + */ +#define XML_SCHEMAS_ELEM_GLOBAL 1 << 1 +/** + * XML_SCHEMAS_ELEM_DEFAULT: + * + * the element has a default value + */ +#define XML_SCHEMAS_ELEM_DEFAULT 1 << 2 +/** + * XML_SCHEMAS_ELEM_FIXED: + * + * the element has a fixed value + */ +#define XML_SCHEMAS_ELEM_FIXED 1 << 3 +/** + * XML_SCHEMAS_ELEM_ABSTRACT: + * + * the element is abstract + */ +#define XML_SCHEMAS_ELEM_ABSTRACT 1 << 4 +/** + * XML_SCHEMAS_ELEM_TOPLEVEL: + * + * the element is top level + * obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead + */ +#define XML_SCHEMAS_ELEM_TOPLEVEL 1 << 5 +/** + * XML_SCHEMAS_ELEM_REF: + * + * the element is a reference to a type + */ +#define XML_SCHEMAS_ELEM_REF 1 << 6 +/** + * XML_SCHEMAS_ELEM_NSDEFAULT: + * + * allow elements in no namespace + * Obsolete, not used anymore. + */ +#define XML_SCHEMAS_ELEM_NSDEFAULT 1 << 7 +/** + * XML_SCHEMAS_ELEM_INTERNAL_RESOLVED: + * + * this is set when "type", "ref", "substitutionGroup" + * references have been resolved. + */ +#define XML_SCHEMAS_ELEM_INTERNAL_RESOLVED 1 << 8 + /** + * XML_SCHEMAS_ELEM_CIRCULAR: + * + * a helper flag for the search of circular references. + */ +#define XML_SCHEMAS_ELEM_CIRCULAR 1 << 9 +/** + * XML_SCHEMAS_ELEM_BLOCK_ABSENT: + * + * the "block" attribute is absent + */ +#define XML_SCHEMAS_ELEM_BLOCK_ABSENT 1 << 10 +/** + * XML_SCHEMAS_ELEM_BLOCK_EXTENSION: + * + * disallowed substitutions are absent + */ +#define XML_SCHEMAS_ELEM_BLOCK_EXTENSION 1 << 11 +/** + * XML_SCHEMAS_ELEM_BLOCK_RESTRICTION: + * + * disallowed substitutions: "restriction" + */ +#define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION 1 << 12 +/** + * XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION: + * + * disallowed substitutions: "substituion" + */ +#define XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION 1 << 13 +/** + * XML_SCHEMAS_ELEM_FINAL_ABSENT: + * + * substitution group exclusions are absent + */ +#define XML_SCHEMAS_ELEM_FINAL_ABSENT 1 << 14 +/** + * XML_SCHEMAS_ELEM_FINAL_EXTENSION: + * + * substitution group exclusions: "extension" + */ +#define XML_SCHEMAS_ELEM_FINAL_EXTENSION 1 << 15 +/** + * XML_SCHEMAS_ELEM_FINAL_RESTRICTION: + * + * substitution group exclusions: "restriction" + */ +#define XML_SCHEMAS_ELEM_FINAL_RESTRICTION 1 << 16 +/** + * XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD: + * + * the declaration is a substitution group head + */ +#define XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD 1 << 17 +/** + * XML_SCHEMAS_ELEM_INTERNAL_CHECKED: + * + * this is set when the elem decl has been checked against + * all constraints + */ +#define XML_SCHEMAS_ELEM_INTERNAL_CHECKED 1 << 18 + +typedef struct _xmlSchemaElement xmlSchemaElement; +typedef xmlSchemaElement *xmlSchemaElementPtr; +struct _xmlSchemaElement { + xmlSchemaTypeType type; /* The kind of type */ + struct _xmlSchemaType *next; /* Not used? */ + const xmlChar *name; + const xmlChar *id; /* Deprecated; not used */ + const xmlChar *ref; /* Deprecated; not used */ + const xmlChar *refNs; /* Deprecated; not used */ + xmlSchemaAnnotPtr annot; + xmlSchemaTypePtr subtypes; /* the type definition */ + xmlSchemaAttributePtr attributes; + xmlNodePtr node; + int minOccurs; /* Deprecated; not used */ + int maxOccurs; /* Deprecated; not used */ + + int flags; + const xmlChar *targetNamespace; + const xmlChar *namedType; + const xmlChar *namedTypeNs; + const xmlChar *substGroup; + const xmlChar *substGroupNs; + const xmlChar *scope; + const xmlChar *value; /* The original value of the value constraint. */ + struct _xmlSchemaElement *refDecl; /* This will now be used for the + substitution group affiliation */ + xmlRegexpPtr contModel; /* Obsolete for WXS, maybe used for RelaxNG */ + xmlSchemaContentType contentType; + const xmlChar *refPrefix; /* Deprecated; not used */ + xmlSchemaValPtr defVal; /* The compiled value contraint. */ + void *idcs; /* The identity-constraint defs */ +}; + +/* + * XML_SCHEMAS_FACET_UNKNOWN: + * + * unknown facet handling + */ +#define XML_SCHEMAS_FACET_UNKNOWN 0 +/* + * XML_SCHEMAS_FACET_PRESERVE: + * + * preserve the type of the facet + */ +#define XML_SCHEMAS_FACET_PRESERVE 1 +/* + * XML_SCHEMAS_FACET_REPLACE: + * + * replace the type of the facet + */ +#define XML_SCHEMAS_FACET_REPLACE 2 +/* + * XML_SCHEMAS_FACET_COLLAPSE: + * + * collapse the types of the facet + */ +#define XML_SCHEMAS_FACET_COLLAPSE 3 +/** + * A facet definition. + */ +struct _xmlSchemaFacet { + xmlSchemaTypeType type; /* The kind of type */ + struct _xmlSchemaFacet *next;/* the next type if in a sequence ... */ + const xmlChar *value; /* The original value */ + const xmlChar *id; /* Obsolete */ + xmlSchemaAnnotPtr annot; + xmlNodePtr node; + int fixed; /* XML_SCHEMAS_FACET_PRESERVE, etc. */ + int whitespace; + xmlSchemaValPtr val; /* The compiled value */ + xmlRegexpPtr regexp; /* The regex for patterns */ +}; + +/** + * A notation definition. + */ +typedef struct _xmlSchemaNotation xmlSchemaNotation; +typedef xmlSchemaNotation *xmlSchemaNotationPtr; +struct _xmlSchemaNotation { + xmlSchemaTypeType type; /* The kind of type */ + const xmlChar *name; + xmlSchemaAnnotPtr annot; + const xmlChar *identifier; + const xmlChar *targetNamespace; +}; + +/* +* TODO: Actually all those flags used for the schema should sit +* on the schema parser context, since they are used only +* during parsing an XML schema document, and not available +* on the component level as per spec. +*/ +/** + * XML_SCHEMAS_QUALIF_ELEM: + * + * Reflects elementFormDefault == qualified in + * an XML schema document. + */ +#define XML_SCHEMAS_QUALIF_ELEM 1 << 0 +/** + * XML_SCHEMAS_QUALIF_ATTR: + * + * Reflects attributeFormDefault == qualified in + * an XML schema document. + */ +#define XML_SCHEMAS_QUALIF_ATTR 1 << 1 +/** + * XML_SCHEMAS_FINAL_DEFAULT_EXTENSION: + * + * the schema has "extension" in the set of finalDefault. + */ +#define XML_SCHEMAS_FINAL_DEFAULT_EXTENSION 1 << 2 +/** + * XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION: + * + * the schema has "restriction" in the set of finalDefault. + */ +#define XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION 1 << 3 +/** + * XML_SCHEMAS_FINAL_DEFAULT_LIST: + * + * the cshema has "list" in the set of finalDefault. + */ +#define XML_SCHEMAS_FINAL_DEFAULT_LIST 1 << 4 +/** + * XML_SCHEMAS_FINAL_DEFAULT_UNION: + * + * the schema has "union" in the set of finalDefault. + */ +#define XML_SCHEMAS_FINAL_DEFAULT_UNION 1 << 5 +/** + * XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION: + * + * the schema has "extension" in the set of blockDefault. + */ +#define XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION 1 << 6 +/** + * XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION: + * + * the schema has "restriction" in the set of blockDefault. + */ +#define XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION 1 << 7 +/** + * XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION: + * + * the schema has "substitution" in the set of blockDefault. + */ +#define XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION 1 << 8 +/** + * XML_SCHEMAS_INCLUDING_CONVERT_NS: + * + * the schema is currently including an other schema with + * no target namespace. + */ +#define XML_SCHEMAS_INCLUDING_CONVERT_NS 1 << 9 +/** + * _xmlSchema: + * + * A Schemas definition + */ +struct _xmlSchema { + const xmlChar *name; /* schema name */ + const xmlChar *targetNamespace; /* the target namespace */ + const xmlChar *version; + const xmlChar *id; /* Obsolete */ + xmlDocPtr doc; + xmlSchemaAnnotPtr annot; + int flags; + + xmlHashTablePtr typeDecl; + xmlHashTablePtr attrDecl; + xmlHashTablePtr attrgrpDecl; + xmlHashTablePtr elemDecl; + xmlHashTablePtr notaDecl; + + xmlHashTablePtr schemasImports; + + void *_private; /* unused by the library for users or bindings */ + xmlHashTablePtr groupDecl; + xmlDictPtr dict; + void *includes; /* the includes, this is opaque for now */ + int preserve; /* whether to free the document */ + int counter; /* used to give ononymous components unique names */ + xmlHashTablePtr idcDef; /* All identity-constraint defs. */ + void *volatiles; /* Obsolete */ +}; + +XMLPUBFUN void XMLCALL xmlSchemaFreeType (xmlSchemaTypePtr type); +XMLPUBFUN void XMLCALL xmlSchemaFreeWildcard(xmlSchemaWildcardPtr wildcard); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_SCHEMAS_ENABLED */ +#endif /* __XML_SCHEMA_INTERNALS_H__ */ diff --git a/libxml2/include/libxml/schematron.h b/libxml2/include/libxml/schematron.h new file mode 100644 index 0000000..364eaec --- /dev/null +++ b/libxml2/include/libxml/schematron.h @@ -0,0 +1,142 @@ +/* + * Summary: XML Schemastron implementation + * Description: interface to the XML Schematron validity checking. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + + +#ifndef __XML_SCHEMATRON_H__ +#define __XML_SCHEMATRON_H__ + +#include + +#ifdef LIBXML_SCHEMATRON_ENABLED + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + XML_SCHEMATRON_OUT_QUIET = 1 << 0, /* quiet no report */ + XML_SCHEMATRON_OUT_TEXT = 1 << 1, /* build a textual report */ + XML_SCHEMATRON_OUT_XML = 1 << 2, /* output SVRL */ + XML_SCHEMATRON_OUT_ERROR = 1 << 3, /* output via xmlStructuredErrorFunc */ + XML_SCHEMATRON_OUT_FILE = 1 << 8, /* output to a file descriptor */ + XML_SCHEMATRON_OUT_BUFFER = 1 << 9, /* output to a buffer */ + XML_SCHEMATRON_OUT_IO = 1 << 10 /* output to I/O mechanism */ +} xmlSchematronValidOptions; + +/** + * The schemas related types are kept internal + */ +typedef struct _xmlSchematron xmlSchematron; +typedef xmlSchematron *xmlSchematronPtr; + +/** + * xmlSchematronValidityErrorFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of an error callback from a Schematron validation + */ +typedef void (*xmlSchematronValidityErrorFunc) (void *ctx, const char *msg, ...); + +/** + * xmlSchematronValidityWarningFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of a warning callback from a Schematron validation + */ +typedef void (*xmlSchematronValidityWarningFunc) (void *ctx, const char *msg, ...); + +/** + * A schemas validation context + */ +typedef struct _xmlSchematronParserCtxt xmlSchematronParserCtxt; +typedef xmlSchematronParserCtxt *xmlSchematronParserCtxtPtr; + +typedef struct _xmlSchematronValidCtxt xmlSchematronValidCtxt; +typedef xmlSchematronValidCtxt *xmlSchematronValidCtxtPtr; + +/* + * Interfaces for parsing. + */ +XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL + xmlSchematronNewParserCtxt (const char *URL); +XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL + xmlSchematronNewMemParserCtxt(const char *buffer, + int size); +XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL + xmlSchematronNewDocParserCtxt(xmlDocPtr doc); +XMLPUBFUN void XMLCALL + xmlSchematronFreeParserCtxt (xmlSchematronParserCtxtPtr ctxt); +/***** +XMLPUBFUN void XMLCALL + xmlSchematronSetParserErrors(xmlSchematronParserCtxtPtr ctxt, + xmlSchematronValidityErrorFunc err, + xmlSchematronValidityWarningFunc warn, + void *ctx); +XMLPUBFUN int XMLCALL + xmlSchematronGetParserErrors(xmlSchematronParserCtxtPtr ctxt, + xmlSchematronValidityErrorFunc * err, + xmlSchematronValidityWarningFunc * warn, + void **ctx); +XMLPUBFUN int XMLCALL + xmlSchematronIsValid (xmlSchematronValidCtxtPtr ctxt); + *****/ +XMLPUBFUN xmlSchematronPtr XMLCALL + xmlSchematronParse (xmlSchematronParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlSchematronFree (xmlSchematronPtr schema); +/* + * Interfaces for validating + */ +XMLPUBFUN void XMLCALL + xmlSchematronSetValidStructuredErrors( + xmlSchematronValidCtxtPtr ctxt, + xmlStructuredErrorFunc serror, + void *ctx); +/****** +XMLPUBFUN void XMLCALL + xmlSchematronSetValidErrors (xmlSchematronValidCtxtPtr ctxt, + xmlSchematronValidityErrorFunc err, + xmlSchematronValidityWarningFunc warn, + void *ctx); +XMLPUBFUN int XMLCALL + xmlSchematronGetValidErrors (xmlSchematronValidCtxtPtr ctxt, + xmlSchematronValidityErrorFunc *err, + xmlSchematronValidityWarningFunc *warn, + void **ctx); +XMLPUBFUN int XMLCALL + xmlSchematronSetValidOptions(xmlSchematronValidCtxtPtr ctxt, + int options); +XMLPUBFUN int XMLCALL + xmlSchematronValidCtxtGetOptions(xmlSchematronValidCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlSchematronValidateOneElement (xmlSchematronValidCtxtPtr ctxt, + xmlNodePtr elem); + *******/ + +XMLPUBFUN xmlSchematronValidCtxtPtr XMLCALL + xmlSchematronNewValidCtxt (xmlSchematronPtr schema, + int options); +XMLPUBFUN void XMLCALL + xmlSchematronFreeValidCtxt (xmlSchematronValidCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlSchematronValidateDoc (xmlSchematronValidCtxtPtr ctxt, + xmlDocPtr instance); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_SCHEMATRON_ENABLED */ +#endif /* __XML_SCHEMATRON_H__ */ diff --git a/libxml2/include/libxml/threads.h b/libxml2/include/libxml/threads.h new file mode 100644 index 0000000..d31f16a --- /dev/null +++ b/libxml2/include/libxml/threads.h @@ -0,0 +1,84 @@ +/** + * Summary: interfaces for thread handling + * Description: set of generic threading related routines + * should work with pthreads, Windows native or TLS threads + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_THREADS_H__ +#define __XML_THREADS_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * xmlMutex are a simple mutual exception locks. + */ +typedef struct _xmlMutex xmlMutex; +typedef xmlMutex *xmlMutexPtr; + +/* + * xmlRMutex are reentrant mutual exception locks. + */ +typedef struct _xmlRMutex xmlRMutex; +typedef xmlRMutex *xmlRMutexPtr; + +#ifdef __cplusplus +} +#endif +#include +#ifdef __cplusplus +extern "C" { +#endif +XMLPUBFUN xmlMutexPtr XMLCALL + xmlNewMutex (void); +XMLPUBFUN void XMLCALL + xmlMutexLock (xmlMutexPtr tok); +XMLPUBFUN void XMLCALL + xmlMutexUnlock (xmlMutexPtr tok); +XMLPUBFUN void XMLCALL + xmlFreeMutex (xmlMutexPtr tok); + +XMLPUBFUN xmlRMutexPtr XMLCALL + xmlNewRMutex (void); +XMLPUBFUN void XMLCALL + xmlRMutexLock (xmlRMutexPtr tok); +XMLPUBFUN void XMLCALL + xmlRMutexUnlock (xmlRMutexPtr tok); +XMLPUBFUN void XMLCALL + xmlFreeRMutex (xmlRMutexPtr tok); + +/* + * Library wide APIs. + */ +XMLPUBFUN void XMLCALL + xmlInitThreads (void); +XMLPUBFUN void XMLCALL + xmlLockLibrary (void); +XMLPUBFUN void XMLCALL + xmlUnlockLibrary(void); +XMLPUBFUN int XMLCALL + xmlGetThreadId (void); +XMLPUBFUN int XMLCALL + xmlIsMainThread (void); +XMLPUBFUN void XMLCALL + xmlCleanupThreads(void); +XMLPUBFUN xmlGlobalStatePtr XMLCALL + xmlGetGlobalState(void); + +#if defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && defined(LIBXML_STATIC_FOR_DLL) +int XMLCALL xmlDllMain(void *hinstDLL, unsigned long fdwReason, void *lpvReserved); +#endif + +#ifdef __cplusplus +} +#endif + + +#endif /* __XML_THREADS_H__ */ diff --git a/libxml2/include/libxml/tree.h b/libxml2/include/libxml/tree.h new file mode 100644 index 0000000..4a9b3bc --- /dev/null +++ b/libxml2/include/libxml/tree.h @@ -0,0 +1,1311 @@ +/* + * Summary: interfaces for tree manipulation + * Description: this module describes the structures found in an tree resulting + * from an XML or HTML parsing, as well as the API provided for + * various processing on that tree + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_TREE_H__ +#define __XML_TREE_H__ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Some of the basic types pointer to structures: + */ +/* xmlIO.h */ +typedef struct _xmlParserInputBuffer xmlParserInputBuffer; +typedef xmlParserInputBuffer *xmlParserInputBufferPtr; + +typedef struct _xmlOutputBuffer xmlOutputBuffer; +typedef xmlOutputBuffer *xmlOutputBufferPtr; + +/* parser.h */ +typedef struct _xmlParserInput xmlParserInput; +typedef xmlParserInput *xmlParserInputPtr; + +typedef struct _xmlParserCtxt xmlParserCtxt; +typedef xmlParserCtxt *xmlParserCtxtPtr; + +typedef struct _xmlSAXLocator xmlSAXLocator; +typedef xmlSAXLocator *xmlSAXLocatorPtr; + +typedef struct _xmlSAXHandler xmlSAXHandler; +typedef xmlSAXHandler *xmlSAXHandlerPtr; + +/* entities.h */ +typedef struct _xmlEntity xmlEntity; +typedef xmlEntity *xmlEntityPtr; + +/** + * BASE_BUFFER_SIZE: + * + * default buffer size 4000. + */ +#define BASE_BUFFER_SIZE 4096 + +/** + * LIBXML_NAMESPACE_DICT: + * + * Defines experimental behaviour: + * 1) xmlNs gets an additional field @context (a xmlDoc) + * 2) when creating a tree, xmlNs->href is stored in the dict of xmlDoc. + */ +/* #define LIBXML_NAMESPACE_DICT */ + +/** + * xmlBufferAllocationScheme: + * + * A buffer allocation scheme can be defined to either match exactly the + * need or double it's allocated size each time it is found too small. + */ + +typedef enum { + XML_BUFFER_ALLOC_DOUBLEIT, /* double each time one need to grow */ + XML_BUFFER_ALLOC_EXACT, /* grow only to the minimal size */ + XML_BUFFER_ALLOC_IMMUTABLE, /* immutable buffer */ + XML_BUFFER_ALLOC_IO, /* special allocation scheme used for I/O */ + XML_BUFFER_ALLOC_HYBRID, /* exact up to a threshold, and doubleit thereafter */ + XML_BUFFER_ALLOC_BOUNDED /* limit the upper size of the buffer */ +} xmlBufferAllocationScheme; + +/** + * xmlBuffer: + * + * A buffer structure, this old construct is limited to 2GB and + * is being deprecated, use API with xmlBuf instead + */ +typedef struct _xmlBuffer xmlBuffer; +typedef xmlBuffer *xmlBufferPtr; +struct _xmlBuffer { + xmlChar *content; /* The buffer content UTF8 */ + unsigned int use; /* The buffer size used */ + unsigned int size; /* The buffer size */ + xmlBufferAllocationScheme alloc; /* The realloc method */ + xmlChar *contentIO; /* in IO mode we may have a different base */ +}; + +/** + * xmlBuf: + * + * A buffer structure, new one, the actual structure internals are not public + */ + +typedef struct _xmlBuf xmlBuf; + +/** + * xmlBufPtr: + * + * A pointer to a buffer structure, the actual structure internals are not + * public + */ + +typedef xmlBuf *xmlBufPtr; + +/* + * A few public routines for xmlBuf. As those are expected to be used + * mostly internally the bulk of the routines are internal in buf.h + */ +XMLPUBFUN xmlChar* XMLCALL xmlBufContent (const xmlBuf* buf); +XMLPUBFUN xmlChar* XMLCALL xmlBufEnd (xmlBufPtr buf); +XMLPUBFUN size_t XMLCALL xmlBufUse (const xmlBufPtr buf); +XMLPUBFUN size_t XMLCALL xmlBufShrink (xmlBufPtr buf, size_t len); + +/* + * LIBXML2_NEW_BUFFER: + * + * Macro used to express that the API use the new buffers for + * xmlParserInputBuffer and xmlOutputBuffer. The change was + * introduced in 2.9.0. + */ +#define LIBXML2_NEW_BUFFER + +/** + * XML_XML_NAMESPACE: + * + * This is the namespace for the special xml: prefix predefined in the + * XML Namespace specification. + */ +#define XML_XML_NAMESPACE \ + (const xmlChar *) "http://www.w3.org/XML/1998/namespace" + +/** + * XML_XML_ID: + * + * This is the name for the special xml:id attribute + */ +#define XML_XML_ID (const xmlChar *) "xml:id" + +/* + * The different element types carried by an XML tree. + * + * NOTE: This is synchronized with DOM Level1 values + * See http://www.w3.org/TR/REC-DOM-Level-1/ + * + * Actually this had diverged a bit, and now XML_DOCUMENT_TYPE_NODE should + * be deprecated to use an XML_DTD_NODE. + */ +typedef enum { + XML_ELEMENT_NODE= 1, + XML_ATTRIBUTE_NODE= 2, + XML_TEXT_NODE= 3, + XML_CDATA_SECTION_NODE= 4, + XML_ENTITY_REF_NODE= 5, + XML_ENTITY_NODE= 6, + XML_PI_NODE= 7, + XML_COMMENT_NODE= 8, + XML_DOCUMENT_NODE= 9, + XML_DOCUMENT_TYPE_NODE= 10, + XML_DOCUMENT_FRAG_NODE= 11, + XML_NOTATION_NODE= 12, + XML_HTML_DOCUMENT_NODE= 13, + XML_DTD_NODE= 14, + XML_ELEMENT_DECL= 15, + XML_ATTRIBUTE_DECL= 16, + XML_ENTITY_DECL= 17, + XML_NAMESPACE_DECL= 18, + XML_XINCLUDE_START= 19, + XML_XINCLUDE_END= 20 +#ifdef LIBXML_DOCB_ENABLED + ,XML_DOCB_DOCUMENT_NODE= 21 +#endif +} xmlElementType; + + +/** + * xmlNotation: + * + * A DTD Notation definition. + */ + +typedef struct _xmlNotation xmlNotation; +typedef xmlNotation *xmlNotationPtr; +struct _xmlNotation { + const xmlChar *name; /* Notation name */ + const xmlChar *PublicID; /* Public identifier, if any */ + const xmlChar *SystemID; /* System identifier, if any */ +}; + +/** + * xmlAttributeType: + * + * A DTD Attribute type definition. + */ + +typedef enum { + XML_ATTRIBUTE_CDATA = 1, + XML_ATTRIBUTE_ID, + XML_ATTRIBUTE_IDREF , + XML_ATTRIBUTE_IDREFS, + XML_ATTRIBUTE_ENTITY, + XML_ATTRIBUTE_ENTITIES, + XML_ATTRIBUTE_NMTOKEN, + XML_ATTRIBUTE_NMTOKENS, + XML_ATTRIBUTE_ENUMERATION, + XML_ATTRIBUTE_NOTATION +} xmlAttributeType; + +/** + * xmlAttributeDefault: + * + * A DTD Attribute default definition. + */ + +typedef enum { + XML_ATTRIBUTE_NONE = 1, + XML_ATTRIBUTE_REQUIRED, + XML_ATTRIBUTE_IMPLIED, + XML_ATTRIBUTE_FIXED +} xmlAttributeDefault; + +/** + * xmlEnumeration: + * + * List structure used when there is an enumeration in DTDs. + */ + +typedef struct _xmlEnumeration xmlEnumeration; +typedef xmlEnumeration *xmlEnumerationPtr; +struct _xmlEnumeration { + struct _xmlEnumeration *next; /* next one */ + const xmlChar *name; /* Enumeration name */ +}; + +/** + * xmlAttribute: + * + * An Attribute declaration in a DTD. + */ + +typedef struct _xmlAttribute xmlAttribute; +typedef xmlAttribute *xmlAttributePtr; +struct _xmlAttribute { + void *_private; /* application data */ + xmlElementType type; /* XML_ATTRIBUTE_DECL, must be second ! */ + const xmlChar *name; /* Attribute name */ + struct _xmlNode *children; /* NULL */ + struct _xmlNode *last; /* NULL */ + struct _xmlDtd *parent; /* -> DTD */ + struct _xmlNode *next; /* next sibling link */ + struct _xmlNode *prev; /* previous sibling link */ + struct _xmlDoc *doc; /* the containing document */ + + struct _xmlAttribute *nexth; /* next in hash table */ + xmlAttributeType atype; /* The attribute type */ + xmlAttributeDefault def; /* the default */ + const xmlChar *defaultValue; /* or the default value */ + xmlEnumerationPtr tree; /* or the enumeration tree if any */ + const xmlChar *prefix; /* the namespace prefix if any */ + const xmlChar *elem; /* Element holding the attribute */ +}; + +/** + * xmlElementContentType: + * + * Possible definitions of element content types. + */ +typedef enum { + XML_ELEMENT_CONTENT_PCDATA = 1, + XML_ELEMENT_CONTENT_ELEMENT, + XML_ELEMENT_CONTENT_SEQ, + XML_ELEMENT_CONTENT_OR +} xmlElementContentType; + +/** + * xmlElementContentOccur: + * + * Possible definitions of element content occurrences. + */ +typedef enum { + XML_ELEMENT_CONTENT_ONCE = 1, + XML_ELEMENT_CONTENT_OPT, + XML_ELEMENT_CONTENT_MULT, + XML_ELEMENT_CONTENT_PLUS +} xmlElementContentOccur; + +/** + * xmlElementContent: + * + * An XML Element content as stored after parsing an element definition + * in a DTD. + */ + +typedef struct _xmlElementContent xmlElementContent; +typedef xmlElementContent *xmlElementContentPtr; +struct _xmlElementContent { + xmlElementContentType type; /* PCDATA, ELEMENT, SEQ or OR */ + xmlElementContentOccur ocur; /* ONCE, OPT, MULT or PLUS */ + const xmlChar *name; /* Element name */ + struct _xmlElementContent *c1; /* first child */ + struct _xmlElementContent *c2; /* second child */ + struct _xmlElementContent *parent; /* parent */ + const xmlChar *prefix; /* Namespace prefix */ +}; + +/** + * xmlElementTypeVal: + * + * The different possibilities for an element content type. + */ + +typedef enum { + XML_ELEMENT_TYPE_UNDEFINED = 0, + XML_ELEMENT_TYPE_EMPTY = 1, + XML_ELEMENT_TYPE_ANY, + XML_ELEMENT_TYPE_MIXED, + XML_ELEMENT_TYPE_ELEMENT +} xmlElementTypeVal; + +#ifdef __cplusplus +} +#endif +#include +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlElement: + * + * An XML Element declaration from a DTD. + */ + +typedef struct _xmlElement xmlElement; +typedef xmlElement *xmlElementPtr; +struct _xmlElement { + void *_private; /* application data */ + xmlElementType type; /* XML_ELEMENT_DECL, must be second ! */ + const xmlChar *name; /* Element name */ + struct _xmlNode *children; /* NULL */ + struct _xmlNode *last; /* NULL */ + struct _xmlDtd *parent; /* -> DTD */ + struct _xmlNode *next; /* next sibling link */ + struct _xmlNode *prev; /* previous sibling link */ + struct _xmlDoc *doc; /* the containing document */ + + xmlElementTypeVal etype; /* The type */ + xmlElementContentPtr content; /* the allowed element content */ + xmlAttributePtr attributes; /* List of the declared attributes */ + const xmlChar *prefix; /* the namespace prefix if any */ +#ifdef LIBXML_REGEXP_ENABLED + xmlRegexpPtr contModel; /* the validating regexp */ +#else + void *contModel; +#endif +}; + + +/** + * XML_LOCAL_NAMESPACE: + * + * A namespace declaration node. + */ +#define XML_LOCAL_NAMESPACE XML_NAMESPACE_DECL +typedef xmlElementType xmlNsType; + +/** + * xmlNs: + * + * An XML namespace. + * Note that prefix == NULL is valid, it defines the default namespace + * within the subtree (until overridden). + * + * xmlNsType is unified with xmlElementType. + */ + +typedef struct _xmlNs xmlNs; +typedef xmlNs *xmlNsPtr; +struct _xmlNs { + struct _xmlNs *next; /* next Ns link for this node */ + xmlNsType type; /* global or local */ + const xmlChar *href; /* URL for the namespace */ + const xmlChar *prefix; /* prefix for the namespace */ + void *_private; /* application data */ + struct _xmlDoc *context; /* normally an xmlDoc */ +}; + +/** + * xmlDtd: + * + * An XML DTD, as defined by parent link */ + struct _xmlNode *next; /* next sibling link */ + struct _xmlNode *prev; /* previous sibling link */ + struct _xmlDoc *doc; /* the containing document */ + + /* End of common part */ + void *notations; /* Hash table for notations if any */ + void *elements; /* Hash table for elements if any */ + void *attributes; /* Hash table for attributes if any */ + void *entities; /* Hash table for entities if any */ + const xmlChar *ExternalID; /* External identifier for PUBLIC DTD */ + const xmlChar *SystemID; /* URI for a SYSTEM or PUBLIC DTD */ + void *pentities; /* Hash table for param entities if any */ +}; + +/** + * xmlAttr: + * + * An attribute on an XML node. + */ +typedef struct _xmlAttr xmlAttr; +typedef xmlAttr *xmlAttrPtr; +struct _xmlAttr { + void *_private; /* application data */ + xmlElementType type; /* XML_ATTRIBUTE_NODE, must be second ! */ + const xmlChar *name; /* the name of the property */ + struct _xmlNode *children; /* the value of the property */ + struct _xmlNode *last; /* NULL */ + struct _xmlNode *parent; /* child->parent link */ + struct _xmlAttr *next; /* next sibling link */ + struct _xmlAttr *prev; /* previous sibling link */ + struct _xmlDoc *doc; /* the containing document */ + xmlNs *ns; /* pointer to the associated namespace */ + xmlAttributeType atype; /* the attribute type if validating */ + void *psvi; /* for type/PSVI informations */ +}; + +/** + * xmlID: + * + * An XML ID instance. + */ + +typedef struct _xmlID xmlID; +typedef xmlID *xmlIDPtr; +struct _xmlID { + struct _xmlID *next; /* next ID */ + const xmlChar *value; /* The ID name */ + xmlAttrPtr attr; /* The attribute holding it */ + const xmlChar *name; /* The attribute if attr is not available */ + int lineno; /* The line number if attr is not available */ + struct _xmlDoc *doc; /* The document holding the ID */ +}; + +/** + * xmlRef: + * + * An XML IDREF instance. + */ + +typedef struct _xmlRef xmlRef; +typedef xmlRef *xmlRefPtr; +struct _xmlRef { + struct _xmlRef *next; /* next Ref */ + const xmlChar *value; /* The Ref name */ + xmlAttrPtr attr; /* The attribute holding it */ + const xmlChar *name; /* The attribute if attr is not available */ + int lineno; /* The line number if attr is not available */ +}; + +/** + * xmlNode: + * + * A node in an XML tree. + */ +typedef struct _xmlNode xmlNode; +typedef xmlNode *xmlNodePtr; +struct _xmlNode { + void *_private; /* application data */ + xmlElementType type; /* type number, must be second ! */ + const xmlChar *name; /* the name of the node, or the entity */ + struct _xmlNode *children; /* parent->childs link */ + struct _xmlNode *last; /* last child link */ + struct _xmlNode *parent; /* child->parent link */ + struct _xmlNode *next; /* next sibling link */ + struct _xmlNode *prev; /* previous sibling link */ + struct _xmlDoc *doc; /* the containing document */ + + /* End of common part */ + xmlNs *ns; /* pointer to the associated namespace */ + xmlChar *content; /* the content */ + struct _xmlAttr *properties;/* properties list */ + xmlNs *nsDef; /* namespace definitions on this node */ + void *psvi; /* for type/PSVI informations */ + unsigned short line; /* line number */ + unsigned short extra; /* extra data for XPath/XSLT */ +}; + +/** + * XML_GET_CONTENT: + * + * Macro to extract the content pointer of a node. + */ +#define XML_GET_CONTENT(n) \ + ((n)->type == XML_ELEMENT_NODE ? NULL : (n)->content) + +/** + * XML_GET_LINE: + * + * Macro to extract the line number of an element node. + */ +#define XML_GET_LINE(n) \ + (xmlGetLineNo(n)) + +/** + * xmlDocProperty + * + * Set of properties of the document as found by the parser + * Some of them are linked to similary named xmlParserOption + */ +typedef enum { + XML_DOC_WELLFORMED = 1<<0, /* document is XML well formed */ + XML_DOC_NSVALID = 1<<1, /* document is Namespace valid */ + XML_DOC_OLD10 = 1<<2, /* parsed with old XML-1.0 parser */ + XML_DOC_DTDVALID = 1<<3, /* DTD validation was successful */ + XML_DOC_XINCLUDE = 1<<4, /* XInclude substitution was done */ + XML_DOC_USERBUILT = 1<<5, /* Document was built using the API + and not by parsing an instance */ + XML_DOC_INTERNAL = 1<<6, /* built for internal processing */ + XML_DOC_HTML = 1<<7 /* parsed or built HTML document */ +} xmlDocProperties; + +/** + * xmlDoc: + * + * An XML document. + */ +typedef struct _xmlDoc xmlDoc; +typedef xmlDoc *xmlDocPtr; +struct _xmlDoc { + void *_private; /* application data */ + xmlElementType type; /* XML_DOCUMENT_NODE, must be second ! */ + char *name; /* name/filename/URI of the document */ + struct _xmlNode *children; /* the document tree */ + struct _xmlNode *last; /* last child link */ + struct _xmlNode *parent; /* child->parent link */ + struct _xmlNode *next; /* next sibling link */ + struct _xmlNode *prev; /* previous sibling link */ + struct _xmlDoc *doc; /* autoreference to itself */ + + /* End of common part */ + int compression;/* level of zlib compression */ + int standalone; /* standalone document (no external refs) + 1 if standalone="yes" + 0 if standalone="no" + -1 if there is no XML declaration + -2 if there is an XML declaration, but no + standalone attribute was specified */ + struct _xmlDtd *intSubset; /* the document internal subset */ + struct _xmlDtd *extSubset; /* the document external subset */ + struct _xmlNs *oldNs; /* Global namespace, the old way */ + const xmlChar *version; /* the XML version string */ + const xmlChar *encoding; /* external initial encoding, if any */ + void *ids; /* Hash table for ID attributes if any */ + void *refs; /* Hash table for IDREFs attributes if any */ + const xmlChar *URL; /* The URI for that document */ + int charset; /* encoding of the in-memory content + actually an xmlCharEncoding */ + struct _xmlDict *dict; /* dict used to allocate names or NULL */ + void *psvi; /* for type/PSVI informations */ + int parseFlags; /* set of xmlParserOption used to parse the + document */ + int properties; /* set of xmlDocProperties for this document + set at the end of parsing */ +}; + + +typedef struct _xmlDOMWrapCtxt xmlDOMWrapCtxt; +typedef xmlDOMWrapCtxt *xmlDOMWrapCtxtPtr; + +/** + * xmlDOMWrapAcquireNsFunction: + * @ctxt: a DOM wrapper context + * @node: the context node (element or attribute) + * @nsName: the requested namespace name + * @nsPrefix: the requested namespace prefix + * + * A function called to acquire namespaces (xmlNs) from the wrapper. + * + * Returns an xmlNsPtr or NULL in case of an error. + */ +typedef xmlNsPtr (*xmlDOMWrapAcquireNsFunction) (xmlDOMWrapCtxtPtr ctxt, + xmlNodePtr node, + const xmlChar *nsName, + const xmlChar *nsPrefix); + +/** + * xmlDOMWrapCtxt: + * + * Context for DOM wrapper-operations. + */ +struct _xmlDOMWrapCtxt { + void * _private; + /* + * The type of this context, just in case we need specialized + * contexts in the future. + */ + int type; + /* + * Internal namespace map used for various operations. + */ + void * namespaceMap; + /* + * Use this one to acquire an xmlNsPtr intended for node->ns. + * (Note that this is not intended for elem->nsDef). + */ + xmlDOMWrapAcquireNsFunction getNsForNodeFunc; +}; + +/** + * xmlChildrenNode: + * + * Macro for compatibility naming layer with libxml1. Maps + * to "children." + */ +#ifndef xmlChildrenNode +#define xmlChildrenNode children +#endif + +/** + * xmlRootNode: + * + * Macro for compatibility naming layer with libxml1. Maps + * to "children". + */ +#ifndef xmlRootNode +#define xmlRootNode children +#endif + +/* + * Variables. + */ + +/* + * Some helper functions + */ +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || \ + defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || \ + defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || \ + defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || \ + defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) +XMLPUBFUN int XMLCALL + xmlValidateNCName (const xmlChar *value, + int space); +#endif + +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN int XMLCALL + xmlValidateQName (const xmlChar *value, + int space); +XMLPUBFUN int XMLCALL + xmlValidateName (const xmlChar *value, + int space); +XMLPUBFUN int XMLCALL + xmlValidateNMToken (const xmlChar *value, + int space); +#endif + +XMLPUBFUN xmlChar * XMLCALL + xmlBuildQName (const xmlChar *ncname, + const xmlChar *prefix, + xmlChar *memory, + int len); +XMLPUBFUN xmlChar * XMLCALL + xmlSplitQName2 (const xmlChar *name, + xmlChar **prefix); +XMLPUBFUN const xmlChar * XMLCALL + xmlSplitQName3 (const xmlChar *name, + int *len); + +/* + * Handling Buffers, the old ones see @xmlBuf for the new ones. + */ + +XMLPUBFUN void XMLCALL + xmlSetBufferAllocationScheme(xmlBufferAllocationScheme scheme); +XMLPUBFUN xmlBufferAllocationScheme XMLCALL + xmlGetBufferAllocationScheme(void); + +XMLPUBFUN xmlBufferPtr XMLCALL + xmlBufferCreate (void); +XMLPUBFUN xmlBufferPtr XMLCALL + xmlBufferCreateSize (size_t size); +XMLPUBFUN xmlBufferPtr XMLCALL + xmlBufferCreateStatic (void *mem, + size_t size); +XMLPUBFUN int XMLCALL + xmlBufferResize (xmlBufferPtr buf, + unsigned int size); +XMLPUBFUN void XMLCALL + xmlBufferFree (xmlBufferPtr buf); +XMLPUBFUN int XMLCALL + xmlBufferDump (FILE *file, + xmlBufferPtr buf); +XMLPUBFUN int XMLCALL + xmlBufferAdd (xmlBufferPtr buf, + const xmlChar *str, + int len); +XMLPUBFUN int XMLCALL + xmlBufferAddHead (xmlBufferPtr buf, + const xmlChar *str, + int len); +XMLPUBFUN int XMLCALL + xmlBufferCat (xmlBufferPtr buf, + const xmlChar *str); +XMLPUBFUN int XMLCALL + xmlBufferCCat (xmlBufferPtr buf, + const char *str); +XMLPUBFUN int XMLCALL + xmlBufferShrink (xmlBufferPtr buf, + unsigned int len); +XMLPUBFUN int XMLCALL + xmlBufferGrow (xmlBufferPtr buf, + unsigned int len); +XMLPUBFUN void XMLCALL + xmlBufferEmpty (xmlBufferPtr buf); +XMLPUBFUN const xmlChar* XMLCALL + xmlBufferContent (const xmlBuffer *buf); +XMLPUBFUN xmlChar* XMLCALL + xmlBufferDetach (xmlBufferPtr buf); +XMLPUBFUN void XMLCALL + xmlBufferSetAllocationScheme(xmlBufferPtr buf, + xmlBufferAllocationScheme scheme); +XMLPUBFUN int XMLCALL + xmlBufferLength (const xmlBuffer *buf); + +/* + * Creating/freeing new structures. + */ +XMLPUBFUN xmlDtdPtr XMLCALL + xmlCreateIntSubset (xmlDocPtr doc, + const xmlChar *name, + const xmlChar *ExternalID, + const xmlChar *SystemID); +XMLPUBFUN xmlDtdPtr XMLCALL + xmlNewDtd (xmlDocPtr doc, + const xmlChar *name, + const xmlChar *ExternalID, + const xmlChar *SystemID); +XMLPUBFUN xmlDtdPtr XMLCALL + xmlGetIntSubset (const xmlDoc *doc); +XMLPUBFUN void XMLCALL + xmlFreeDtd (xmlDtdPtr cur); +#ifdef LIBXML_LEGACY_ENABLED +XMLPUBFUN xmlNsPtr XMLCALL + xmlNewGlobalNs (xmlDocPtr doc, + const xmlChar *href, + const xmlChar *prefix); +#endif /* LIBXML_LEGACY_ENABLED */ +XMLPUBFUN xmlNsPtr XMLCALL + xmlNewNs (xmlNodePtr node, + const xmlChar *href, + const xmlChar *prefix); +XMLPUBFUN void XMLCALL + xmlFreeNs (xmlNsPtr cur); +XMLPUBFUN void XMLCALL + xmlFreeNsList (xmlNsPtr cur); +XMLPUBFUN xmlDocPtr XMLCALL + xmlNewDoc (const xmlChar *version); +XMLPUBFUN void XMLCALL + xmlFreeDoc (xmlDocPtr cur); +XMLPUBFUN xmlAttrPtr XMLCALL + xmlNewDocProp (xmlDocPtr doc, + const xmlChar *name, + const xmlChar *value); +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \ + defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN xmlAttrPtr XMLCALL + xmlNewProp (xmlNodePtr node, + const xmlChar *name, + const xmlChar *value); +#endif +XMLPUBFUN xmlAttrPtr XMLCALL + xmlNewNsProp (xmlNodePtr node, + xmlNsPtr ns, + const xmlChar *name, + const xmlChar *value); +XMLPUBFUN xmlAttrPtr XMLCALL + xmlNewNsPropEatName (xmlNodePtr node, + xmlNsPtr ns, + xmlChar *name, + const xmlChar *value); +XMLPUBFUN void XMLCALL + xmlFreePropList (xmlAttrPtr cur); +XMLPUBFUN void XMLCALL + xmlFreeProp (xmlAttrPtr cur); +XMLPUBFUN xmlAttrPtr XMLCALL + xmlCopyProp (xmlNodePtr target, + xmlAttrPtr cur); +XMLPUBFUN xmlAttrPtr XMLCALL + xmlCopyPropList (xmlNodePtr target, + xmlAttrPtr cur); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlDtdPtr XMLCALL + xmlCopyDtd (xmlDtdPtr dtd); +#endif /* LIBXML_TREE_ENABLED */ +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN xmlDocPtr XMLCALL + xmlCopyDoc (xmlDocPtr doc, + int recursive); +#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */ +/* + * Creating new nodes. + */ +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewDocNode (xmlDocPtr doc, + xmlNsPtr ns, + const xmlChar *name, + const xmlChar *content); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewDocNodeEatName (xmlDocPtr doc, + xmlNsPtr ns, + xmlChar *name, + const xmlChar *content); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewNode (xmlNsPtr ns, + const xmlChar *name); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewNodeEatName (xmlNsPtr ns, + xmlChar *name); +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewChild (xmlNodePtr parent, + xmlNsPtr ns, + const xmlChar *name, + const xmlChar *content); +#endif +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewDocText (const xmlDoc *doc, + const xmlChar *content); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewText (const xmlChar *content); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewDocPI (xmlDocPtr doc, + const xmlChar *name, + const xmlChar *content); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewPI (const xmlChar *name, + const xmlChar *content); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewDocTextLen (xmlDocPtr doc, + const xmlChar *content, + int len); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewTextLen (const xmlChar *content, + int len); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewDocComment (xmlDocPtr doc, + const xmlChar *content); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewComment (const xmlChar *content); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewCDataBlock (xmlDocPtr doc, + const xmlChar *content, + int len); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewCharRef (xmlDocPtr doc, + const xmlChar *name); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewReference (const xmlDoc *doc, + const xmlChar *name); +XMLPUBFUN xmlNodePtr XMLCALL + xmlCopyNode (xmlNodePtr node, + int recursive); +XMLPUBFUN xmlNodePtr XMLCALL + xmlDocCopyNode (xmlNodePtr node, + xmlDocPtr doc, + int recursive); +XMLPUBFUN xmlNodePtr XMLCALL + xmlDocCopyNodeList (xmlDocPtr doc, + xmlNodePtr node); +XMLPUBFUN xmlNodePtr XMLCALL + xmlCopyNodeList (xmlNodePtr node); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewTextChild (xmlNodePtr parent, + xmlNsPtr ns, + const xmlChar *name, + const xmlChar *content); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewDocRawNode (xmlDocPtr doc, + xmlNsPtr ns, + const xmlChar *name, + const xmlChar *content); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNewDocFragment (xmlDocPtr doc); +#endif /* LIBXML_TREE_ENABLED */ + +/* + * Navigating. + */ +XMLPUBFUN long XMLCALL + xmlGetLineNo (const xmlNode *node); +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) +XMLPUBFUN xmlChar * XMLCALL + xmlGetNodePath (const xmlNode *node); +#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) */ +XMLPUBFUN xmlNodePtr XMLCALL + xmlDocGetRootElement (const xmlDoc *doc); +XMLPUBFUN xmlNodePtr XMLCALL + xmlGetLastChild (const xmlNode *parent); +XMLPUBFUN int XMLCALL + xmlNodeIsText (const xmlNode *node); +XMLPUBFUN int XMLCALL + xmlIsBlankNode (const xmlNode *node); + +/* + * Changing the structure. + */ +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) +XMLPUBFUN xmlNodePtr XMLCALL + xmlDocSetRootElement (xmlDocPtr doc, + xmlNodePtr root); +#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */ +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN void XMLCALL + xmlNodeSetName (xmlNodePtr cur, + const xmlChar *name); +#endif /* LIBXML_TREE_ENABLED */ +XMLPUBFUN xmlNodePtr XMLCALL + xmlAddChild (xmlNodePtr parent, + xmlNodePtr cur); +XMLPUBFUN xmlNodePtr XMLCALL + xmlAddChildList (xmlNodePtr parent, + xmlNodePtr cur); +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) +XMLPUBFUN xmlNodePtr XMLCALL + xmlReplaceNode (xmlNodePtr old, + xmlNodePtr cur); +#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */ +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \ + defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) +XMLPUBFUN xmlNodePtr XMLCALL + xmlAddPrevSibling (xmlNodePtr cur, + xmlNodePtr elem); +#endif /* LIBXML_TREE_ENABLED || LIBXML_HTML_ENABLED || LIBXML_SCHEMAS_ENABLED */ +XMLPUBFUN xmlNodePtr XMLCALL + xmlAddSibling (xmlNodePtr cur, + xmlNodePtr elem); +XMLPUBFUN xmlNodePtr XMLCALL + xmlAddNextSibling (xmlNodePtr cur, + xmlNodePtr elem); +XMLPUBFUN void XMLCALL + xmlUnlinkNode (xmlNodePtr cur); +XMLPUBFUN xmlNodePtr XMLCALL + xmlTextMerge (xmlNodePtr first, + xmlNodePtr second); +XMLPUBFUN int XMLCALL + xmlTextConcat (xmlNodePtr node, + const xmlChar *content, + int len); +XMLPUBFUN void XMLCALL + xmlFreeNodeList (xmlNodePtr cur); +XMLPUBFUN void XMLCALL + xmlFreeNode (xmlNodePtr cur); +XMLPUBFUN void XMLCALL + xmlSetTreeDoc (xmlNodePtr tree, + xmlDocPtr doc); +XMLPUBFUN void XMLCALL + xmlSetListDoc (xmlNodePtr list, + xmlDocPtr doc); +/* + * Namespaces. + */ +XMLPUBFUN xmlNsPtr XMLCALL + xmlSearchNs (xmlDocPtr doc, + xmlNodePtr node, + const xmlChar *nameSpace); +XMLPUBFUN xmlNsPtr XMLCALL + xmlSearchNsByHref (xmlDocPtr doc, + xmlNodePtr node, + const xmlChar *href); +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || \ + defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN xmlNsPtr * XMLCALL + xmlGetNsList (const xmlDoc *doc, + const xmlNode *node); +#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) */ + +XMLPUBFUN void XMLCALL + xmlSetNs (xmlNodePtr node, + xmlNsPtr ns); +XMLPUBFUN xmlNsPtr XMLCALL + xmlCopyNamespace (xmlNsPtr cur); +XMLPUBFUN xmlNsPtr XMLCALL + xmlCopyNamespaceList (xmlNsPtr cur); + +/* + * Changing the content. + */ +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || \ + defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) +XMLPUBFUN xmlAttrPtr XMLCALL + xmlSetProp (xmlNodePtr node, + const xmlChar *name, + const xmlChar *value); +XMLPUBFUN xmlAttrPtr XMLCALL + xmlSetNsProp (xmlNodePtr node, + xmlNsPtr ns, + const xmlChar *name, + const xmlChar *value); +#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || \ + defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) */ +XMLPUBFUN xmlChar * XMLCALL + xmlGetNoNsProp (const xmlNode *node, + const xmlChar *name); +XMLPUBFUN xmlChar * XMLCALL + xmlGetProp (const xmlNode *node, + const xmlChar *name); +XMLPUBFUN xmlAttrPtr XMLCALL + xmlHasProp (const xmlNode *node, + const xmlChar *name); +XMLPUBFUN xmlAttrPtr XMLCALL + xmlHasNsProp (const xmlNode *node, + const xmlChar *name, + const xmlChar *nameSpace); +XMLPUBFUN xmlChar * XMLCALL + xmlGetNsProp (const xmlNode *node, + const xmlChar *name, + const xmlChar *nameSpace); +XMLPUBFUN xmlNodePtr XMLCALL + xmlStringGetNodeList (const xmlDoc *doc, + const xmlChar *value); +XMLPUBFUN xmlNodePtr XMLCALL + xmlStringLenGetNodeList (const xmlDoc *doc, + const xmlChar *value, + int len); +XMLPUBFUN xmlChar * XMLCALL + xmlNodeListGetString (xmlDocPtr doc, + const xmlNode *list, + int inLine); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlChar * XMLCALL + xmlNodeListGetRawString (const xmlDoc *doc, + const xmlNode *list, + int inLine); +#endif /* LIBXML_TREE_ENABLED */ +XMLPUBFUN void XMLCALL + xmlNodeSetContent (xmlNodePtr cur, + const xmlChar *content); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN void XMLCALL + xmlNodeSetContentLen (xmlNodePtr cur, + const xmlChar *content, + int len); +#endif /* LIBXML_TREE_ENABLED */ +XMLPUBFUN void XMLCALL + xmlNodeAddContent (xmlNodePtr cur, + const xmlChar *content); +XMLPUBFUN void XMLCALL + xmlNodeAddContentLen (xmlNodePtr cur, + const xmlChar *content, + int len); +XMLPUBFUN xmlChar * XMLCALL + xmlNodeGetContent (const xmlNode *cur); + +XMLPUBFUN int XMLCALL + xmlNodeBufGetContent (xmlBufferPtr buffer, + const xmlNode *cur); +XMLPUBFUN int XMLCALL + xmlBufGetNodeContent (xmlBufPtr buf, + const xmlNode *cur); + +XMLPUBFUN xmlChar * XMLCALL + xmlNodeGetLang (const xmlNode *cur); +XMLPUBFUN int XMLCALL + xmlNodeGetSpacePreserve (const xmlNode *cur); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN void XMLCALL + xmlNodeSetLang (xmlNodePtr cur, + const xmlChar *lang); +XMLPUBFUN void XMLCALL + xmlNodeSetSpacePreserve (xmlNodePtr cur, + int val); +#endif /* LIBXML_TREE_ENABLED */ +XMLPUBFUN xmlChar * XMLCALL + xmlNodeGetBase (const xmlDoc *doc, + const xmlNode *cur); +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) +XMLPUBFUN void XMLCALL + xmlNodeSetBase (xmlNodePtr cur, + const xmlChar *uri); +#endif + +/* + * Removing content. + */ +XMLPUBFUN int XMLCALL + xmlRemoveProp (xmlAttrPtr cur); +#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN int XMLCALL + xmlUnsetNsProp (xmlNodePtr node, + xmlNsPtr ns, + const xmlChar *name); +XMLPUBFUN int XMLCALL + xmlUnsetProp (xmlNodePtr node, + const xmlChar *name); +#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */ + +/* + * Internal, don't use. + */ +XMLPUBFUN void XMLCALL + xmlBufferWriteCHAR (xmlBufferPtr buf, + const xmlChar *string); +XMLPUBFUN void XMLCALL + xmlBufferWriteChar (xmlBufferPtr buf, + const char *string); +XMLPUBFUN void XMLCALL + xmlBufferWriteQuotedString(xmlBufferPtr buf, + const xmlChar *string); + +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void xmlAttrSerializeTxtContent(xmlBufferPtr buf, + xmlDocPtr doc, + xmlAttrPtr attr, + const xmlChar *string); +#endif /* LIBXML_OUTPUT_ENABLED */ + +#ifdef LIBXML_TREE_ENABLED +/* + * Namespace handling. + */ +XMLPUBFUN int XMLCALL + xmlReconciliateNs (xmlDocPtr doc, + xmlNodePtr tree); +#endif + +#ifdef LIBXML_OUTPUT_ENABLED +/* + * Saving. + */ +XMLPUBFUN void XMLCALL + xmlDocDumpFormatMemory (xmlDocPtr cur, + xmlChar **mem, + int *size, + int format); +XMLPUBFUN void XMLCALL + xmlDocDumpMemory (xmlDocPtr cur, + xmlChar **mem, + int *size); +XMLPUBFUN void XMLCALL + xmlDocDumpMemoryEnc (xmlDocPtr out_doc, + xmlChar **doc_txt_ptr, + int * doc_txt_len, + const char *txt_encoding); +XMLPUBFUN void XMLCALL + xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc, + xmlChar **doc_txt_ptr, + int * doc_txt_len, + const char *txt_encoding, + int format); +XMLPUBFUN int XMLCALL + xmlDocFormatDump (FILE *f, + xmlDocPtr cur, + int format); +XMLPUBFUN int XMLCALL + xmlDocDump (FILE *f, + xmlDocPtr cur); +XMLPUBFUN void XMLCALL + xmlElemDump (FILE *f, + xmlDocPtr doc, + xmlNodePtr cur); +XMLPUBFUN int XMLCALL + xmlSaveFile (const char *filename, + xmlDocPtr cur); +XMLPUBFUN int XMLCALL + xmlSaveFormatFile (const char *filename, + xmlDocPtr cur, + int format); +XMLPUBFUN size_t XMLCALL + xmlBufNodeDump (xmlBufPtr buf, + xmlDocPtr doc, + xmlNodePtr cur, + int level, + int format); +XMLPUBFUN int XMLCALL + xmlNodeDump (xmlBufferPtr buf, + xmlDocPtr doc, + xmlNodePtr cur, + int level, + int format); + +XMLPUBFUN int XMLCALL + xmlSaveFileTo (xmlOutputBufferPtr buf, + xmlDocPtr cur, + const char *encoding); +XMLPUBFUN int XMLCALL + xmlSaveFormatFileTo (xmlOutputBufferPtr buf, + xmlDocPtr cur, + const char *encoding, + int format); +XMLPUBFUN void XMLCALL + xmlNodeDumpOutput (xmlOutputBufferPtr buf, + xmlDocPtr doc, + xmlNodePtr cur, + int level, + int format, + const char *encoding); + +XMLPUBFUN int XMLCALL + xmlSaveFormatFileEnc (const char *filename, + xmlDocPtr cur, + const char *encoding, + int format); + +XMLPUBFUN int XMLCALL + xmlSaveFileEnc (const char *filename, + xmlDocPtr cur, + const char *encoding); + +#endif /* LIBXML_OUTPUT_ENABLED */ +/* + * XHTML + */ +XMLPUBFUN int XMLCALL + xmlIsXHTML (const xmlChar *systemID, + const xmlChar *publicID); + +/* + * Compression. + */ +XMLPUBFUN int XMLCALL + xmlGetDocCompressMode (const xmlDoc *doc); +XMLPUBFUN void XMLCALL + xmlSetDocCompressMode (xmlDocPtr doc, + int mode); +XMLPUBFUN int XMLCALL + xmlGetCompressMode (void); +XMLPUBFUN void XMLCALL + xmlSetCompressMode (int mode); + +/* +* DOM-wrapper helper functions. +*/ +XMLPUBFUN xmlDOMWrapCtxtPtr XMLCALL + xmlDOMWrapNewCtxt (void); +XMLPUBFUN void XMLCALL + xmlDOMWrapFreeCtxt (xmlDOMWrapCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlDOMWrapReconcileNamespaces(xmlDOMWrapCtxtPtr ctxt, + xmlNodePtr elem, + int options); +XMLPUBFUN int XMLCALL + xmlDOMWrapAdoptNode (xmlDOMWrapCtxtPtr ctxt, + xmlDocPtr sourceDoc, + xmlNodePtr node, + xmlDocPtr destDoc, + xmlNodePtr destParent, + int options); +XMLPUBFUN int XMLCALL + xmlDOMWrapRemoveNode (xmlDOMWrapCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr node, + int options); +XMLPUBFUN int XMLCALL + xmlDOMWrapCloneNode (xmlDOMWrapCtxtPtr ctxt, + xmlDocPtr sourceDoc, + xmlNodePtr node, + xmlNodePtr *clonedNode, + xmlDocPtr destDoc, + xmlNodePtr destParent, + int deep, + int options); + +#ifdef LIBXML_TREE_ENABLED +/* + * 5 interfaces from DOM ElementTraversal, but different in entities + * traversal. + */ +XMLPUBFUN unsigned long XMLCALL + xmlChildElementCount (xmlNodePtr parent); +XMLPUBFUN xmlNodePtr XMLCALL + xmlNextElementSibling (xmlNodePtr node); +XMLPUBFUN xmlNodePtr XMLCALL + xmlFirstElementChild (xmlNodePtr parent); +XMLPUBFUN xmlNodePtr XMLCALL + xmlLastElementChild (xmlNodePtr parent); +XMLPUBFUN xmlNodePtr XMLCALL + xmlPreviousElementSibling (xmlNodePtr node); +#endif +#ifdef __cplusplus +} +#endif +#ifndef __XML_PARSER_H__ +#include +#endif + +#endif /* __XML_TREE_H__ */ + diff --git a/libxml2/include/libxml/uri.h b/libxml2/include/libxml/uri.h new file mode 100644 index 0000000..db48262 --- /dev/null +++ b/libxml2/include/libxml/uri.h @@ -0,0 +1,94 @@ +/** + * Summary: library of generic URI related routines + * Description: library of generic URI related routines + * Implements RFC 2396 + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_URI_H__ +#define __XML_URI_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlURI: + * + * A parsed URI reference. This is a struct containing the various fields + * as described in RFC 2396 but separated for further processing. + * + * Note: query is a deprecated field which is incorrectly unescaped. + * query_raw takes precedence over query if the former is set. + * See: http://mail.gnome.org/archives/xml/2007-April/thread.html#00127 + */ +typedef struct _xmlURI xmlURI; +typedef xmlURI *xmlURIPtr; +struct _xmlURI { + char *scheme; /* the URI scheme */ + char *opaque; /* opaque part */ + char *authority; /* the authority part */ + char *server; /* the server part */ + char *user; /* the user part */ + int port; /* the port number */ + char *path; /* the path string */ + char *query; /* the query string (deprecated - use with caution) */ + char *fragment; /* the fragment identifier */ + int cleanup; /* parsing potentially unclean URI */ + char *query_raw; /* the query string (as it appears in the URI) */ +}; + +/* + * This function is in tree.h: + * xmlChar * xmlNodeGetBase (xmlDocPtr doc, + * xmlNodePtr cur); + */ +XMLPUBFUN xmlURIPtr XMLCALL + xmlCreateURI (void); +XMLPUBFUN xmlChar * XMLCALL + xmlBuildURI (const xmlChar *URI, + const xmlChar *base); +XMLPUBFUN xmlChar * XMLCALL + xmlBuildRelativeURI (const xmlChar *URI, + const xmlChar *base); +XMLPUBFUN xmlURIPtr XMLCALL + xmlParseURI (const char *str); +XMLPUBFUN xmlURIPtr XMLCALL + xmlParseURIRaw (const char *str, + int raw); +XMLPUBFUN int XMLCALL + xmlParseURIReference (xmlURIPtr uri, + const char *str); +XMLPUBFUN xmlChar * XMLCALL + xmlSaveUri (xmlURIPtr uri); +XMLPUBFUN void XMLCALL + xmlPrintURI (FILE *stream, + xmlURIPtr uri); +XMLPUBFUN xmlChar * XMLCALL + xmlURIEscapeStr (const xmlChar *str, + const xmlChar *list); +XMLPUBFUN char * XMLCALL + xmlURIUnescapeString (const char *str, + int len, + char *target); +XMLPUBFUN int XMLCALL + xmlNormalizeURIPath (char *path); +XMLPUBFUN xmlChar * XMLCALL + xmlURIEscape (const xmlChar *str); +XMLPUBFUN void XMLCALL + xmlFreeURI (xmlURIPtr uri); +XMLPUBFUN xmlChar* XMLCALL + xmlCanonicPath (const xmlChar *path); +XMLPUBFUN xmlChar* XMLCALL + xmlPathToURI (const xmlChar *path); + +#ifdef __cplusplus +} +#endif +#endif /* __XML_URI_H__ */ diff --git a/libxml2/include/libxml/valid.h b/libxml2/include/libxml/valid.h new file mode 100644 index 0000000..2bc7b38 --- /dev/null +++ b/libxml2/include/libxml/valid.h @@ -0,0 +1,458 @@ +/* + * Summary: The DTD validation + * Description: API for the DTD handling and the validity checking + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + + +#ifndef __XML_VALID_H__ +#define __XML_VALID_H__ + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Validation state added for non-determinist content model. + */ +typedef struct _xmlValidState xmlValidState; +typedef xmlValidState *xmlValidStatePtr; + +/** + * xmlValidityErrorFunc: + * @ctx: usually an xmlValidCtxtPtr to a validity error context, + * but comes from ctxt->userData (which normally contains such + * a pointer); ctxt->userData can be changed by the user. + * @msg: the string to format *printf like vararg + * @...: remaining arguments to the format + * + * Callback called when a validity error is found. This is a message + * oriented function similar to an *printf function. + */ +typedef void (XMLCDECL *xmlValidityErrorFunc) (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); + +/** + * xmlValidityWarningFunc: + * @ctx: usually an xmlValidCtxtPtr to a validity error context, + * but comes from ctxt->userData (which normally contains such + * a pointer); ctxt->userData can be changed by the user. + * @msg: the string to format *printf like vararg + * @...: remaining arguments to the format + * + * Callback called when a validity warning is found. This is a message + * oriented function similar to an *printf function. + */ +typedef void (XMLCDECL *xmlValidityWarningFunc) (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); + +#ifdef IN_LIBXML +/** + * XML_CTXT_FINISH_DTD_0: + * + * Special value for finishDtd field when embedded in an xmlParserCtxt + */ +#define XML_CTXT_FINISH_DTD_0 0xabcd1234 +/** + * XML_CTXT_FINISH_DTD_1: + * + * Special value for finishDtd field when embedded in an xmlParserCtxt + */ +#define XML_CTXT_FINISH_DTD_1 0xabcd1235 +#endif + +/* + * xmlValidCtxt: + * An xmlValidCtxt is used for error reporting when validating. + */ +typedef struct _xmlValidCtxt xmlValidCtxt; +typedef xmlValidCtxt *xmlValidCtxtPtr; +struct _xmlValidCtxt { + void *userData; /* user specific data block */ + xmlValidityErrorFunc error; /* the callback in case of errors */ + xmlValidityWarningFunc warning; /* the callback in case of warning */ + + /* Node analysis stack used when validating within entities */ + xmlNodePtr node; /* Current parsed Node */ + int nodeNr; /* Depth of the parsing stack */ + int nodeMax; /* Max depth of the parsing stack */ + xmlNodePtr *nodeTab; /* array of nodes */ + + unsigned int finishDtd; /* finished validating the Dtd ? */ + xmlDocPtr doc; /* the document */ + int valid; /* temporary validity check result */ + + /* state state used for non-determinist content validation */ + xmlValidState *vstate; /* current state */ + int vstateNr; /* Depth of the validation stack */ + int vstateMax; /* Max depth of the validation stack */ + xmlValidState *vstateTab; /* array of validation states */ + +#ifdef LIBXML_REGEXP_ENABLED + xmlAutomataPtr am; /* the automata */ + xmlAutomataStatePtr state; /* used to build the automata */ +#else + void *am; + void *state; +#endif +}; + +/* + * ALL notation declarations are stored in a table. + * There is one table per DTD. + */ + +typedef struct _xmlHashTable xmlNotationTable; +typedef xmlNotationTable *xmlNotationTablePtr; + +/* + * ALL element declarations are stored in a table. + * There is one table per DTD. + */ + +typedef struct _xmlHashTable xmlElementTable; +typedef xmlElementTable *xmlElementTablePtr; + +/* + * ALL attribute declarations are stored in a table. + * There is one table per DTD. + */ + +typedef struct _xmlHashTable xmlAttributeTable; +typedef xmlAttributeTable *xmlAttributeTablePtr; + +/* + * ALL IDs attributes are stored in a table. + * There is one table per document. + */ + +typedef struct _xmlHashTable xmlIDTable; +typedef xmlIDTable *xmlIDTablePtr; + +/* + * ALL Refs attributes are stored in a table. + * There is one table per document. + */ + +typedef struct _xmlHashTable xmlRefTable; +typedef xmlRefTable *xmlRefTablePtr; + +/* Notation */ +XMLPUBFUN xmlNotationPtr XMLCALL + xmlAddNotationDecl (xmlValidCtxtPtr ctxt, + xmlDtdPtr dtd, + const xmlChar *name, + const xmlChar *PublicID, + const xmlChar *SystemID); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlNotationTablePtr XMLCALL + xmlCopyNotationTable (xmlNotationTablePtr table); +#endif /* LIBXML_TREE_ENABLED */ +XMLPUBFUN void XMLCALL + xmlFreeNotationTable (xmlNotationTablePtr table); +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void XMLCALL + xmlDumpNotationDecl (xmlBufferPtr buf, + xmlNotationPtr nota); +XMLPUBFUN void XMLCALL + xmlDumpNotationTable (xmlBufferPtr buf, + xmlNotationTablePtr table); +#endif /* LIBXML_OUTPUT_ENABLED */ + +/* Element Content */ +/* the non Doc version are being deprecated */ +XMLPUBFUN xmlElementContentPtr XMLCALL + xmlNewElementContent (const xmlChar *name, + xmlElementContentType type); +XMLPUBFUN xmlElementContentPtr XMLCALL + xmlCopyElementContent (xmlElementContentPtr content); +XMLPUBFUN void XMLCALL + xmlFreeElementContent (xmlElementContentPtr cur); +/* the new versions with doc argument */ +XMLPUBFUN xmlElementContentPtr XMLCALL + xmlNewDocElementContent (xmlDocPtr doc, + const xmlChar *name, + xmlElementContentType type); +XMLPUBFUN xmlElementContentPtr XMLCALL + xmlCopyDocElementContent(xmlDocPtr doc, + xmlElementContentPtr content); +XMLPUBFUN void XMLCALL + xmlFreeDocElementContent(xmlDocPtr doc, + xmlElementContentPtr cur); +XMLPUBFUN void XMLCALL + xmlSnprintfElementContent(char *buf, + int size, + xmlElementContentPtr content, + int englob); +#ifdef LIBXML_OUTPUT_ENABLED +/* DEPRECATED */ +XMLPUBFUN void XMLCALL + xmlSprintfElementContent(char *buf, + xmlElementContentPtr content, + int englob); +#endif /* LIBXML_OUTPUT_ENABLED */ +/* DEPRECATED */ + +/* Element */ +XMLPUBFUN xmlElementPtr XMLCALL + xmlAddElementDecl (xmlValidCtxtPtr ctxt, + xmlDtdPtr dtd, + const xmlChar *name, + xmlElementTypeVal type, + xmlElementContentPtr content); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlElementTablePtr XMLCALL + xmlCopyElementTable (xmlElementTablePtr table); +#endif /* LIBXML_TREE_ENABLED */ +XMLPUBFUN void XMLCALL + xmlFreeElementTable (xmlElementTablePtr table); +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void XMLCALL + xmlDumpElementTable (xmlBufferPtr buf, + xmlElementTablePtr table); +XMLPUBFUN void XMLCALL + xmlDumpElementDecl (xmlBufferPtr buf, + xmlElementPtr elem); +#endif /* LIBXML_OUTPUT_ENABLED */ + +/* Enumeration */ +XMLPUBFUN xmlEnumerationPtr XMLCALL + xmlCreateEnumeration (const xmlChar *name); +XMLPUBFUN void XMLCALL + xmlFreeEnumeration (xmlEnumerationPtr cur); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlEnumerationPtr XMLCALL + xmlCopyEnumeration (xmlEnumerationPtr cur); +#endif /* LIBXML_TREE_ENABLED */ + +/* Attribute */ +XMLPUBFUN xmlAttributePtr XMLCALL + xmlAddAttributeDecl (xmlValidCtxtPtr ctxt, + xmlDtdPtr dtd, + const xmlChar *elem, + const xmlChar *name, + const xmlChar *ns, + xmlAttributeType type, + xmlAttributeDefault def, + const xmlChar *defaultValue, + xmlEnumerationPtr tree); +#ifdef LIBXML_TREE_ENABLED +XMLPUBFUN xmlAttributeTablePtr XMLCALL + xmlCopyAttributeTable (xmlAttributeTablePtr table); +#endif /* LIBXML_TREE_ENABLED */ +XMLPUBFUN void XMLCALL + xmlFreeAttributeTable (xmlAttributeTablePtr table); +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void XMLCALL + xmlDumpAttributeTable (xmlBufferPtr buf, + xmlAttributeTablePtr table); +XMLPUBFUN void XMLCALL + xmlDumpAttributeDecl (xmlBufferPtr buf, + xmlAttributePtr attr); +#endif /* LIBXML_OUTPUT_ENABLED */ + +/* IDs */ +XMLPUBFUN xmlIDPtr XMLCALL + xmlAddID (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + const xmlChar *value, + xmlAttrPtr attr); +XMLPUBFUN void XMLCALL + xmlFreeIDTable (xmlIDTablePtr table); +XMLPUBFUN xmlAttrPtr XMLCALL + xmlGetID (xmlDocPtr doc, + const xmlChar *ID); +XMLPUBFUN int XMLCALL + xmlIsID (xmlDocPtr doc, + xmlNodePtr elem, + xmlAttrPtr attr); +XMLPUBFUN int XMLCALL + xmlRemoveID (xmlDocPtr doc, + xmlAttrPtr attr); + +/* IDREFs */ +XMLPUBFUN xmlRefPtr XMLCALL + xmlAddRef (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + const xmlChar *value, + xmlAttrPtr attr); +XMLPUBFUN void XMLCALL + xmlFreeRefTable (xmlRefTablePtr table); +XMLPUBFUN int XMLCALL + xmlIsRef (xmlDocPtr doc, + xmlNodePtr elem, + xmlAttrPtr attr); +XMLPUBFUN int XMLCALL + xmlRemoveRef (xmlDocPtr doc, + xmlAttrPtr attr); +XMLPUBFUN xmlListPtr XMLCALL + xmlGetRefs (xmlDocPtr doc, + const xmlChar *ID); + +/** + * The public function calls related to validity checking. + */ +#ifdef LIBXML_VALID_ENABLED +/* Allocate/Release Validation Contexts */ +XMLPUBFUN xmlValidCtxtPtr XMLCALL + xmlNewValidCtxt(void); +XMLPUBFUN void XMLCALL + xmlFreeValidCtxt(xmlValidCtxtPtr); + +XMLPUBFUN int XMLCALL + xmlValidateRoot (xmlValidCtxtPtr ctxt, + xmlDocPtr doc); +XMLPUBFUN int XMLCALL + xmlValidateElementDecl (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlElementPtr elem); +XMLPUBFUN xmlChar * XMLCALL + xmlValidNormalizeAttributeValue(xmlDocPtr doc, + xmlNodePtr elem, + const xmlChar *name, + const xmlChar *value); +XMLPUBFUN xmlChar * XMLCALL + xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem, + const xmlChar *name, + const xmlChar *value); +XMLPUBFUN int XMLCALL + xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlAttributePtr attr); +XMLPUBFUN int XMLCALL + xmlValidateAttributeValue(xmlAttributeType type, + const xmlChar *value); +XMLPUBFUN int XMLCALL + xmlValidateNotationDecl (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNotationPtr nota); +XMLPUBFUN int XMLCALL + xmlValidateDtd (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlDtdPtr dtd); +XMLPUBFUN int XMLCALL + xmlValidateDtdFinal (xmlValidCtxtPtr ctxt, + xmlDocPtr doc); +XMLPUBFUN int XMLCALL + xmlValidateDocument (xmlValidCtxtPtr ctxt, + xmlDocPtr doc); +XMLPUBFUN int XMLCALL + xmlValidateElement (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem); +XMLPUBFUN int XMLCALL + xmlValidateOneElement (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem); +XMLPUBFUN int XMLCALL + xmlValidateOneAttribute (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem, + xmlAttrPtr attr, + const xmlChar *value); +XMLPUBFUN int XMLCALL + xmlValidateOneNamespace (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem, + const xmlChar *prefix, + xmlNsPtr ns, + const xmlChar *value); +XMLPUBFUN int XMLCALL + xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt, + xmlDocPtr doc); +#endif /* LIBXML_VALID_ENABLED */ + +#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN int XMLCALL + xmlValidateNotationUse (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + const xmlChar *notationName); +#endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */ + +XMLPUBFUN int XMLCALL + xmlIsMixedElement (xmlDocPtr doc, + const xmlChar *name); +XMLPUBFUN xmlAttributePtr XMLCALL + xmlGetDtdAttrDesc (xmlDtdPtr dtd, + const xmlChar *elem, + const xmlChar *name); +XMLPUBFUN xmlAttributePtr XMLCALL + xmlGetDtdQAttrDesc (xmlDtdPtr dtd, + const xmlChar *elem, + const xmlChar *name, + const xmlChar *prefix); +XMLPUBFUN xmlNotationPtr XMLCALL + xmlGetDtdNotationDesc (xmlDtdPtr dtd, + const xmlChar *name); +XMLPUBFUN xmlElementPtr XMLCALL + xmlGetDtdQElementDesc (xmlDtdPtr dtd, + const xmlChar *name, + const xmlChar *prefix); +XMLPUBFUN xmlElementPtr XMLCALL + xmlGetDtdElementDesc (xmlDtdPtr dtd, + const xmlChar *name); + +#ifdef LIBXML_VALID_ENABLED + +XMLPUBFUN int XMLCALL + xmlValidGetPotentialChildren(xmlElementContent *ctree, + const xmlChar **names, + int *len, + int max); + +XMLPUBFUN int XMLCALL + xmlValidGetValidElements(xmlNode *prev, + xmlNode *next, + const xmlChar **names, + int max); +XMLPUBFUN int XMLCALL + xmlValidateNameValue (const xmlChar *value); +XMLPUBFUN int XMLCALL + xmlValidateNamesValue (const xmlChar *value); +XMLPUBFUN int XMLCALL + xmlValidateNmtokenValue (const xmlChar *value); +XMLPUBFUN int XMLCALL + xmlValidateNmtokensValue(const xmlChar *value); + +#ifdef LIBXML_REGEXP_ENABLED +/* + * Validation based on the regexp support + */ +XMLPUBFUN int XMLCALL + xmlValidBuildContentModel(xmlValidCtxtPtr ctxt, + xmlElementPtr elem); + +XMLPUBFUN int XMLCALL + xmlValidatePushElement (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem, + const xmlChar *qname); +XMLPUBFUN int XMLCALL + xmlValidatePushCData (xmlValidCtxtPtr ctxt, + const xmlChar *data, + int len); +XMLPUBFUN int XMLCALL + xmlValidatePopElement (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem, + const xmlChar *qname); +#endif /* LIBXML_REGEXP_ENABLED */ +#endif /* LIBXML_VALID_ENABLED */ +#ifdef __cplusplus +} +#endif +#endif /* __XML_VALID_H__ */ diff --git a/libxml2/include/libxml/xinclude.h b/libxml2/include/libxml/xinclude.h new file mode 100644 index 0000000..863ab25 --- /dev/null +++ b/libxml2/include/libxml/xinclude.h @@ -0,0 +1,129 @@ +/* + * Summary: implementation of XInclude + * Description: API to handle XInclude processing, + * implements the + * World Wide Web Consortium Last Call Working Draft 10 November 2003 + * http://www.w3.org/TR/2003/WD-xinclude-20031110 + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_XINCLUDE_H__ +#define __XML_XINCLUDE_H__ + +#include +#include + +#ifdef LIBXML_XINCLUDE_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * XINCLUDE_NS: + * + * Macro defining the Xinclude namespace: http://www.w3.org/2003/XInclude + */ +#define XINCLUDE_NS (const xmlChar *) "http://www.w3.org/2003/XInclude" +/** + * XINCLUDE_OLD_NS: + * + * Macro defining the draft Xinclude namespace: http://www.w3.org/2001/XInclude + */ +#define XINCLUDE_OLD_NS (const xmlChar *) "http://www.w3.org/2001/XInclude" +/** + * XINCLUDE_NODE: + * + * Macro defining "include" + */ +#define XINCLUDE_NODE (const xmlChar *) "include" +/** + * XINCLUDE_FALLBACK: + * + * Macro defining "fallback" + */ +#define XINCLUDE_FALLBACK (const xmlChar *) "fallback" +/** + * XINCLUDE_HREF: + * + * Macro defining "href" + */ +#define XINCLUDE_HREF (const xmlChar *) "href" +/** + * XINCLUDE_PARSE: + * + * Macro defining "parse" + */ +#define XINCLUDE_PARSE (const xmlChar *) "parse" +/** + * XINCLUDE_PARSE_XML: + * + * Macro defining "xml" + */ +#define XINCLUDE_PARSE_XML (const xmlChar *) "xml" +/** + * XINCLUDE_PARSE_TEXT: + * + * Macro defining "text" + */ +#define XINCLUDE_PARSE_TEXT (const xmlChar *) "text" +/** + * XINCLUDE_PARSE_ENCODING: + * + * Macro defining "encoding" + */ +#define XINCLUDE_PARSE_ENCODING (const xmlChar *) "encoding" +/** + * XINCLUDE_PARSE_XPOINTER: + * + * Macro defining "xpointer" + */ +#define XINCLUDE_PARSE_XPOINTER (const xmlChar *) "xpointer" + +typedef struct _xmlXIncludeCtxt xmlXIncludeCtxt; +typedef xmlXIncludeCtxt *xmlXIncludeCtxtPtr; + +/* + * standalone processing + */ +XMLPUBFUN int XMLCALL + xmlXIncludeProcess (xmlDocPtr doc); +XMLPUBFUN int XMLCALL + xmlXIncludeProcessFlags (xmlDocPtr doc, + int flags); +XMLPUBFUN int XMLCALL + xmlXIncludeProcessFlagsData(xmlDocPtr doc, + int flags, + void *data); +XMLPUBFUN int XMLCALL + xmlXIncludeProcessTreeFlagsData(xmlNodePtr tree, + int flags, + void *data); +XMLPUBFUN int XMLCALL + xmlXIncludeProcessTree (xmlNodePtr tree); +XMLPUBFUN int XMLCALL + xmlXIncludeProcessTreeFlags(xmlNodePtr tree, + int flags); +/* + * contextual processing + */ +XMLPUBFUN xmlXIncludeCtxtPtr XMLCALL + xmlXIncludeNewContext (xmlDocPtr doc); +XMLPUBFUN int XMLCALL + xmlXIncludeSetFlags (xmlXIncludeCtxtPtr ctxt, + int flags); +XMLPUBFUN void XMLCALL + xmlXIncludeFreeContext (xmlXIncludeCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlXIncludeProcessNode (xmlXIncludeCtxtPtr ctxt, + xmlNodePtr tree); +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_XINCLUDE_ENABLED */ + +#endif /* __XML_XINCLUDE_H__ */ diff --git a/libxml2/include/libxml/xlink.h b/libxml2/include/libxml/xlink.h new file mode 100644 index 0000000..a209a99 --- /dev/null +++ b/libxml2/include/libxml/xlink.h @@ -0,0 +1,189 @@ +/* + * Summary: unfinished XLink detection module + * Description: unfinished XLink detection module + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_XLINK_H__ +#define __XML_XLINK_H__ + +#include +#include + +#ifdef LIBXML_XPTR_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Various defines for the various Link properties. + * + * NOTE: the link detection layer will try to resolve QName expansion + * of namespaces. If "foo" is the prefix for "http://foo.com/" + * then the link detection layer will expand role="foo:myrole" + * to "http://foo.com/:myrole". + * NOTE: the link detection layer will expand URI-Refences found on + * href attributes by using the base mechanism if found. + */ +typedef xmlChar *xlinkHRef; +typedef xmlChar *xlinkRole; +typedef xmlChar *xlinkTitle; + +typedef enum { + XLINK_TYPE_NONE = 0, + XLINK_TYPE_SIMPLE, + XLINK_TYPE_EXTENDED, + XLINK_TYPE_EXTENDED_SET +} xlinkType; + +typedef enum { + XLINK_SHOW_NONE = 0, + XLINK_SHOW_NEW, + XLINK_SHOW_EMBED, + XLINK_SHOW_REPLACE +} xlinkShow; + +typedef enum { + XLINK_ACTUATE_NONE = 0, + XLINK_ACTUATE_AUTO, + XLINK_ACTUATE_ONREQUEST +} xlinkActuate; + +/** + * xlinkNodeDetectFunc: + * @ctx: user data pointer + * @node: the node to check + * + * This is the prototype for the link detection routine. + * It calls the default link detection callbacks upon link detection. + */ +typedef void (*xlinkNodeDetectFunc) (void *ctx, xmlNodePtr node); + +/* + * The link detection module interact with the upper layers using + * a set of callback registered at parsing time. + */ + +/** + * xlinkSimpleLinkFunk: + * @ctx: user data pointer + * @node: the node carrying the link + * @href: the target of the link + * @role: the role string + * @title: the link title + * + * This is the prototype for a simple link detection callback. + */ +typedef void +(*xlinkSimpleLinkFunk) (void *ctx, + xmlNodePtr node, + const xlinkHRef href, + const xlinkRole role, + const xlinkTitle title); + +/** + * xlinkExtendedLinkFunk: + * @ctx: user data pointer + * @node: the node carrying the link + * @nbLocators: the number of locators detected on the link + * @hrefs: pointer to the array of locator hrefs + * @roles: pointer to the array of locator roles + * @nbArcs: the number of arcs detected on the link + * @from: pointer to the array of source roles found on the arcs + * @to: pointer to the array of target roles found on the arcs + * @show: array of values for the show attributes found on the arcs + * @actuate: array of values for the actuate attributes found on the arcs + * @nbTitles: the number of titles detected on the link + * @title: array of titles detected on the link + * @langs: array of xml:lang values for the titles + * + * This is the prototype for a extended link detection callback. + */ +typedef void +(*xlinkExtendedLinkFunk)(void *ctx, + xmlNodePtr node, + int nbLocators, + const xlinkHRef *hrefs, + const xlinkRole *roles, + int nbArcs, + const xlinkRole *from, + const xlinkRole *to, + xlinkShow *show, + xlinkActuate *actuate, + int nbTitles, + const xlinkTitle *titles, + const xmlChar **langs); + +/** + * xlinkExtendedLinkSetFunk: + * @ctx: user data pointer + * @node: the node carrying the link + * @nbLocators: the number of locators detected on the link + * @hrefs: pointer to the array of locator hrefs + * @roles: pointer to the array of locator roles + * @nbTitles: the number of titles detected on the link + * @title: array of titles detected on the link + * @langs: array of xml:lang values for the titles + * + * This is the prototype for a extended link set detection callback. + */ +typedef void +(*xlinkExtendedLinkSetFunk) (void *ctx, + xmlNodePtr node, + int nbLocators, + const xlinkHRef *hrefs, + const xlinkRole *roles, + int nbTitles, + const xlinkTitle *titles, + const xmlChar **langs); + +/** + * This is the structure containing a set of Links detection callbacks. + * + * There is no default xlink callbacks, if one want to get link + * recognition activated, those call backs must be provided before parsing. + */ +typedef struct _xlinkHandler xlinkHandler; +typedef xlinkHandler *xlinkHandlerPtr; +struct _xlinkHandler { + xlinkSimpleLinkFunk simple; + xlinkExtendedLinkFunk extended; + xlinkExtendedLinkSetFunk set; +}; + +/* + * The default detection routine, can be overridden, they call the default + * detection callbacks. + */ + +XMLPUBFUN xlinkNodeDetectFunc XMLCALL + xlinkGetDefaultDetect (void); +XMLPUBFUN void XMLCALL + xlinkSetDefaultDetect (xlinkNodeDetectFunc func); + +/* + * Routines to set/get the default handlers. + */ +XMLPUBFUN xlinkHandlerPtr XMLCALL + xlinkGetDefaultHandler (void); +XMLPUBFUN void XMLCALL + xlinkSetDefaultHandler (xlinkHandlerPtr handler); + +/* + * Link detection module itself. + */ +XMLPUBFUN xlinkType XMLCALL + xlinkIsLink (xmlDocPtr doc, + xmlNodePtr node); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_XPTR_ENABLED */ + +#endif /* __XML_XLINK_H__ */ diff --git a/libxml2/include/libxml/xmlIO.h b/libxml2/include/libxml/xmlIO.h new file mode 100644 index 0000000..3e41744 --- /dev/null +++ b/libxml2/include/libxml/xmlIO.h @@ -0,0 +1,366 @@ +/* + * Summary: interface for the I/O interfaces used by the parser + * Description: interface for the I/O interfaces used by the parser + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_IO_H__ +#define __XML_IO_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Those are the functions and datatypes for the parser input + * I/O structures. + */ + +/** + * xmlInputMatchCallback: + * @filename: the filename or URI + * + * Callback used in the I/O Input API to detect if the current handler + * can provide input fonctionnalities for this resource. + * + * Returns 1 if yes and 0 if another Input module should be used + */ +typedef int (XMLCALL *xmlInputMatchCallback) (char const *filename); +/** + * xmlInputOpenCallback: + * @filename: the filename or URI + * + * Callback used in the I/O Input API to open the resource + * + * Returns an Input context or NULL in case or error + */ +typedef void * (XMLCALL *xmlInputOpenCallback) (char const *filename); +/** + * xmlInputReadCallback: + * @context: an Input context + * @buffer: the buffer to store data read + * @len: the length of the buffer in bytes + * + * Callback used in the I/O Input API to read the resource + * + * Returns the number of bytes read or -1 in case of error + */ +typedef int (XMLCALL *xmlInputReadCallback) (void * context, char * buffer, int len); +/** + * xmlInputCloseCallback: + * @context: an Input context + * + * Callback used in the I/O Input API to close the resource + * + * Returns 0 or -1 in case of error + */ +typedef int (XMLCALL *xmlInputCloseCallback) (void * context); + +#ifdef LIBXML_OUTPUT_ENABLED +/* + * Those are the functions and datatypes for the library output + * I/O structures. + */ + +/** + * xmlOutputMatchCallback: + * @filename: the filename or URI + * + * Callback used in the I/O Output API to detect if the current handler + * can provide output fonctionnalities for this resource. + * + * Returns 1 if yes and 0 if another Output module should be used + */ +typedef int (XMLCALL *xmlOutputMatchCallback) (char const *filename); +/** + * xmlOutputOpenCallback: + * @filename: the filename or URI + * + * Callback used in the I/O Output API to open the resource + * + * Returns an Output context or NULL in case or error + */ +typedef void * (XMLCALL *xmlOutputOpenCallback) (char const *filename); +/** + * xmlOutputWriteCallback: + * @context: an Output context + * @buffer: the buffer of data to write + * @len: the length of the buffer in bytes + * + * Callback used in the I/O Output API to write to the resource + * + * Returns the number of bytes written or -1 in case of error + */ +typedef int (XMLCALL *xmlOutputWriteCallback) (void * context, const char * buffer, + int len); +/** + * xmlOutputCloseCallback: + * @context: an Output context + * + * Callback used in the I/O Output API to close the resource + * + * Returns 0 or -1 in case of error + */ +typedef int (XMLCALL *xmlOutputCloseCallback) (void * context); +#endif /* LIBXML_OUTPUT_ENABLED */ + +#ifdef __cplusplus +} +#endif + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif +struct _xmlParserInputBuffer { + void* context; + xmlInputReadCallback readcallback; + xmlInputCloseCallback closecallback; + + xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */ + + xmlBufPtr buffer; /* Local buffer encoded in UTF-8 */ + xmlBufPtr raw; /* if encoder != NULL buffer for raw input */ + int compressed; /* -1=unknown, 0=not compressed, 1=compressed */ + int error; + unsigned long rawconsumed;/* amount consumed from raw */ +}; + + +#ifdef LIBXML_OUTPUT_ENABLED +struct _xmlOutputBuffer { + void* context; + xmlOutputWriteCallback writecallback; + xmlOutputCloseCallback closecallback; + + xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */ + + xmlBufPtr buffer; /* Local buffer encoded in UTF-8 or ISOLatin */ + xmlBufPtr conv; /* if encoder != NULL buffer for output */ + int written; /* total number of byte written */ + int error; +}; +#endif /* LIBXML_OUTPUT_ENABLED */ + +/* + * Interfaces for input + */ +XMLPUBFUN void XMLCALL + xmlCleanupInputCallbacks (void); + +XMLPUBFUN int XMLCALL + xmlPopInputCallbacks (void); + +XMLPUBFUN void XMLCALL + xmlRegisterDefaultInputCallbacks (void); +XMLPUBFUN xmlParserInputBufferPtr XMLCALL + xmlAllocParserInputBuffer (xmlCharEncoding enc); + +XMLPUBFUN xmlParserInputBufferPtr XMLCALL + xmlParserInputBufferCreateFilename (const char *URI, + xmlCharEncoding enc); +XMLPUBFUN xmlParserInputBufferPtr XMLCALL + xmlParserInputBufferCreateFile (FILE *file, + xmlCharEncoding enc); +XMLPUBFUN xmlParserInputBufferPtr XMLCALL + xmlParserInputBufferCreateFd (int fd, + xmlCharEncoding enc); +XMLPUBFUN xmlParserInputBufferPtr XMLCALL + xmlParserInputBufferCreateMem (const char *mem, int size, + xmlCharEncoding enc); +XMLPUBFUN xmlParserInputBufferPtr XMLCALL + xmlParserInputBufferCreateStatic (const char *mem, int size, + xmlCharEncoding enc); +XMLPUBFUN xmlParserInputBufferPtr XMLCALL + xmlParserInputBufferCreateIO (xmlInputReadCallback ioread, + xmlInputCloseCallback ioclose, + void *ioctx, + xmlCharEncoding enc); +XMLPUBFUN int XMLCALL + xmlParserInputBufferRead (xmlParserInputBufferPtr in, + int len); +XMLPUBFUN int XMLCALL + xmlParserInputBufferGrow (xmlParserInputBufferPtr in, + int len); +XMLPUBFUN int XMLCALL + xmlParserInputBufferPush (xmlParserInputBufferPtr in, + int len, + const char *buf); +XMLPUBFUN void XMLCALL + xmlFreeParserInputBuffer (xmlParserInputBufferPtr in); +XMLPUBFUN char * XMLCALL + xmlParserGetDirectory (const char *filename); + +XMLPUBFUN int XMLCALL + xmlRegisterInputCallbacks (xmlInputMatchCallback matchFunc, + xmlInputOpenCallback openFunc, + xmlInputReadCallback readFunc, + xmlInputCloseCallback closeFunc); + +xmlParserInputBufferPtr + __xmlParserInputBufferCreateFilename(const char *URI, + xmlCharEncoding enc); + +#ifdef LIBXML_OUTPUT_ENABLED +/* + * Interfaces for output + */ +XMLPUBFUN void XMLCALL + xmlCleanupOutputCallbacks (void); +XMLPUBFUN void XMLCALL + xmlRegisterDefaultOutputCallbacks(void); +XMLPUBFUN xmlOutputBufferPtr XMLCALL + xmlAllocOutputBuffer (xmlCharEncodingHandlerPtr encoder); + +XMLPUBFUN xmlOutputBufferPtr XMLCALL + xmlOutputBufferCreateFilename (const char *URI, + xmlCharEncodingHandlerPtr encoder, + int compression); + +XMLPUBFUN xmlOutputBufferPtr XMLCALL + xmlOutputBufferCreateFile (FILE *file, + xmlCharEncodingHandlerPtr encoder); + +XMLPUBFUN xmlOutputBufferPtr XMLCALL + xmlOutputBufferCreateBuffer (xmlBufferPtr buffer, + xmlCharEncodingHandlerPtr encoder); + +XMLPUBFUN xmlOutputBufferPtr XMLCALL + xmlOutputBufferCreateFd (int fd, + xmlCharEncodingHandlerPtr encoder); + +XMLPUBFUN xmlOutputBufferPtr XMLCALL + xmlOutputBufferCreateIO (xmlOutputWriteCallback iowrite, + xmlOutputCloseCallback ioclose, + void *ioctx, + xmlCharEncodingHandlerPtr encoder); + +/* Couple of APIs to get the output without digging into the buffers */ +XMLPUBFUN const xmlChar * XMLCALL + xmlOutputBufferGetContent (xmlOutputBufferPtr out); +XMLPUBFUN size_t XMLCALL + xmlOutputBufferGetSize (xmlOutputBufferPtr out); + +XMLPUBFUN int XMLCALL + xmlOutputBufferWrite (xmlOutputBufferPtr out, + int len, + const char *buf); +XMLPUBFUN int XMLCALL + xmlOutputBufferWriteString (xmlOutputBufferPtr out, + const char *str); +XMLPUBFUN int XMLCALL + xmlOutputBufferWriteEscape (xmlOutputBufferPtr out, + const xmlChar *str, + xmlCharEncodingOutputFunc escaping); + +XMLPUBFUN int XMLCALL + xmlOutputBufferFlush (xmlOutputBufferPtr out); +XMLPUBFUN int XMLCALL + xmlOutputBufferClose (xmlOutputBufferPtr out); + +XMLPUBFUN int XMLCALL + xmlRegisterOutputCallbacks (xmlOutputMatchCallback matchFunc, + xmlOutputOpenCallback openFunc, + xmlOutputWriteCallback writeFunc, + xmlOutputCloseCallback closeFunc); + +xmlOutputBufferPtr + __xmlOutputBufferCreateFilename(const char *URI, + xmlCharEncodingHandlerPtr encoder, + int compression); + +#ifdef LIBXML_HTTP_ENABLED +/* This function only exists if HTTP support built into the library */ +XMLPUBFUN void XMLCALL + xmlRegisterHTTPPostCallbacks (void ); +#endif /* LIBXML_HTTP_ENABLED */ + +#endif /* LIBXML_OUTPUT_ENABLED */ + +XMLPUBFUN xmlParserInputPtr XMLCALL + xmlCheckHTTPInput (xmlParserCtxtPtr ctxt, + xmlParserInputPtr ret); + +/* + * A predefined entity loader disabling network accesses + */ +XMLPUBFUN xmlParserInputPtr XMLCALL + xmlNoNetExternalEntityLoader (const char *URL, + const char *ID, + xmlParserCtxtPtr ctxt); + +/* + * xmlNormalizeWindowsPath is obsolete, don't use it. + * Check xmlCanonicPath in uri.h for a better alternative. + */ +XMLPUBFUN xmlChar * XMLCALL + xmlNormalizeWindowsPath (const xmlChar *path); + +XMLPUBFUN int XMLCALL + xmlCheckFilename (const char *path); +/** + * Default 'file://' protocol callbacks + */ +XMLPUBFUN int XMLCALL + xmlFileMatch (const char *filename); +XMLPUBFUN void * XMLCALL + xmlFileOpen (const char *filename); +XMLPUBFUN int XMLCALL + xmlFileRead (void * context, + char * buffer, + int len); +XMLPUBFUN int XMLCALL + xmlFileClose (void * context); + +/** + * Default 'http://' protocol callbacks + */ +#ifdef LIBXML_HTTP_ENABLED +XMLPUBFUN int XMLCALL + xmlIOHTTPMatch (const char *filename); +XMLPUBFUN void * XMLCALL + xmlIOHTTPOpen (const char *filename); +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void * XMLCALL + xmlIOHTTPOpenW (const char * post_uri, + int compression ); +#endif /* LIBXML_OUTPUT_ENABLED */ +XMLPUBFUN int XMLCALL + xmlIOHTTPRead (void * context, + char * buffer, + int len); +XMLPUBFUN int XMLCALL + xmlIOHTTPClose (void * context); +#endif /* LIBXML_HTTP_ENABLED */ + +/** + * Default 'ftp://' protocol callbacks + */ +#ifdef LIBXML_FTP_ENABLED +XMLPUBFUN int XMLCALL + xmlIOFTPMatch (const char *filename); +XMLPUBFUN void * XMLCALL + xmlIOFTPOpen (const char *filename); +XMLPUBFUN int XMLCALL + xmlIOFTPRead (void * context, + char * buffer, + int len); +XMLPUBFUN int XMLCALL + xmlIOFTPClose (void * context); +#endif /* LIBXML_FTP_ENABLED */ + +#ifdef __cplusplus +} +#endif + +#endif /* __XML_IO_H__ */ diff --git a/libxml2/include/libxml/xmlautomata.h b/libxml2/include/libxml/xmlautomata.h new file mode 100644 index 0000000..bf1b131 --- /dev/null +++ b/libxml2/include/libxml/xmlautomata.h @@ -0,0 +1,146 @@ +/* + * Summary: API to build regexp automata + * Description: the API to build regexp automata + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_AUTOMATA_H__ +#define __XML_AUTOMATA_H__ + +#include +#include + +#ifdef LIBXML_REGEXP_ENABLED +#ifdef LIBXML_AUTOMATA_ENABLED +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlAutomataPtr: + * + * A libxml automata description, It can be compiled into a regexp + */ +typedef struct _xmlAutomata xmlAutomata; +typedef xmlAutomata *xmlAutomataPtr; + +/** + * xmlAutomataStatePtr: + * + * A state int the automata description, + */ +typedef struct _xmlAutomataState xmlAutomataState; +typedef xmlAutomataState *xmlAutomataStatePtr; + +/* + * Building API + */ +XMLPUBFUN xmlAutomataPtr XMLCALL + xmlNewAutomata (void); +XMLPUBFUN void XMLCALL + xmlFreeAutomata (xmlAutomataPtr am); + +XMLPUBFUN xmlAutomataStatePtr XMLCALL + xmlAutomataGetInitState (xmlAutomataPtr am); +XMLPUBFUN int XMLCALL + xmlAutomataSetFinalState (xmlAutomataPtr am, + xmlAutomataStatePtr state); +XMLPUBFUN xmlAutomataStatePtr XMLCALL + xmlAutomataNewState (xmlAutomataPtr am); +XMLPUBFUN xmlAutomataStatePtr XMLCALL + xmlAutomataNewTransition (xmlAutomataPtr am, + xmlAutomataStatePtr from, + xmlAutomataStatePtr to, + const xmlChar *token, + void *data); +XMLPUBFUN xmlAutomataStatePtr XMLCALL + xmlAutomataNewTransition2 (xmlAutomataPtr am, + xmlAutomataStatePtr from, + xmlAutomataStatePtr to, + const xmlChar *token, + const xmlChar *token2, + void *data); +XMLPUBFUN xmlAutomataStatePtr XMLCALL + xmlAutomataNewNegTrans (xmlAutomataPtr am, + xmlAutomataStatePtr from, + xmlAutomataStatePtr to, + const xmlChar *token, + const xmlChar *token2, + void *data); + +XMLPUBFUN xmlAutomataStatePtr XMLCALL + xmlAutomataNewCountTrans (xmlAutomataPtr am, + xmlAutomataStatePtr from, + xmlAutomataStatePtr to, + const xmlChar *token, + int min, + int max, + void *data); +XMLPUBFUN xmlAutomataStatePtr XMLCALL + xmlAutomataNewCountTrans2 (xmlAutomataPtr am, + xmlAutomataStatePtr from, + xmlAutomataStatePtr to, + const xmlChar *token, + const xmlChar *token2, + int min, + int max, + void *data); +XMLPUBFUN xmlAutomataStatePtr XMLCALL + xmlAutomataNewOnceTrans (xmlAutomataPtr am, + xmlAutomataStatePtr from, + xmlAutomataStatePtr to, + const xmlChar *token, + int min, + int max, + void *data); +XMLPUBFUN xmlAutomataStatePtr XMLCALL + xmlAutomataNewOnceTrans2 (xmlAutomataPtr am, + xmlAutomataStatePtr from, + xmlAutomataStatePtr to, + const xmlChar *token, + const xmlChar *token2, + int min, + int max, + void *data); +XMLPUBFUN xmlAutomataStatePtr XMLCALL + xmlAutomataNewAllTrans (xmlAutomataPtr am, + xmlAutomataStatePtr from, + xmlAutomataStatePtr to, + int lax); +XMLPUBFUN xmlAutomataStatePtr XMLCALL + xmlAutomataNewEpsilon (xmlAutomataPtr am, + xmlAutomataStatePtr from, + xmlAutomataStatePtr to); +XMLPUBFUN xmlAutomataStatePtr XMLCALL + xmlAutomataNewCountedTrans (xmlAutomataPtr am, + xmlAutomataStatePtr from, + xmlAutomataStatePtr to, + int counter); +XMLPUBFUN xmlAutomataStatePtr XMLCALL + xmlAutomataNewCounterTrans (xmlAutomataPtr am, + xmlAutomataStatePtr from, + xmlAutomataStatePtr to, + int counter); +XMLPUBFUN int XMLCALL + xmlAutomataNewCounter (xmlAutomataPtr am, + int min, + int max); + +XMLPUBFUN xmlRegexpPtr XMLCALL + xmlAutomataCompile (xmlAutomataPtr am); +XMLPUBFUN int XMLCALL + xmlAutomataIsDeterminist (xmlAutomataPtr am); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_AUTOMATA_ENABLED */ +#endif /* LIBXML_REGEXP_ENABLED */ + +#endif /* __XML_AUTOMATA_H__ */ diff --git a/libxml2/include/libxml/xmlerror.h b/libxml2/include/libxml/xmlerror.h new file mode 100644 index 0000000..037c16d --- /dev/null +++ b/libxml2/include/libxml/xmlerror.h @@ -0,0 +1,945 @@ +/* + * Summary: error handling + * Description: the API used to report errors + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#include + +#ifndef __XML_ERROR_H__ +#define __XML_ERROR_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlErrorLevel: + * + * Indicates the level of an error + */ +typedef enum { + XML_ERR_NONE = 0, + XML_ERR_WARNING = 1, /* A simple warning */ + XML_ERR_ERROR = 2, /* A recoverable error */ + XML_ERR_FATAL = 3 /* A fatal error */ +} xmlErrorLevel; + +/** + * xmlErrorDomain: + * + * Indicates where an error may have come from + */ +typedef enum { + XML_FROM_NONE = 0, + XML_FROM_PARSER, /* The XML parser */ + XML_FROM_TREE, /* The tree module */ + XML_FROM_NAMESPACE, /* The XML Namespace module */ + XML_FROM_DTD, /* The XML DTD validation with parser context*/ + XML_FROM_HTML, /* The HTML parser */ + XML_FROM_MEMORY, /* The memory allocator */ + XML_FROM_OUTPUT, /* The serialization code */ + XML_FROM_IO, /* The Input/Output stack */ + XML_FROM_FTP, /* The FTP module */ + XML_FROM_HTTP, /* The HTTP module */ + XML_FROM_XINCLUDE, /* The XInclude processing */ + XML_FROM_XPATH, /* The XPath module */ + XML_FROM_XPOINTER, /* The XPointer module */ + XML_FROM_REGEXP, /* The regular expressions module */ + XML_FROM_DATATYPE, /* The W3C XML Schemas Datatype module */ + XML_FROM_SCHEMASP, /* The W3C XML Schemas parser module */ + XML_FROM_SCHEMASV, /* The W3C XML Schemas validation module */ + XML_FROM_RELAXNGP, /* The Relax-NG parser module */ + XML_FROM_RELAXNGV, /* The Relax-NG validator module */ + XML_FROM_CATALOG, /* The Catalog module */ + XML_FROM_C14N, /* The Canonicalization module */ + XML_FROM_XSLT, /* The XSLT engine from libxslt */ + XML_FROM_VALID, /* The XML DTD validation with valid context */ + XML_FROM_CHECK, /* The error checking module */ + XML_FROM_WRITER, /* The xmlwriter module */ + XML_FROM_MODULE, /* The dynamically loaded module module*/ + XML_FROM_I18N, /* The module handling character conversion */ + XML_FROM_SCHEMATRONV,/* The Schematron validator module */ + XML_FROM_BUFFER, /* The buffers module */ + XML_FROM_URI /* The URI module */ +} xmlErrorDomain; + +/** + * xmlError: + * + * An XML Error instance. + */ + +typedef struct _xmlError xmlError; +typedef xmlError *xmlErrorPtr; +struct _xmlError { + int domain; /* What part of the library raised this error */ + int code; /* The error code, e.g. an xmlParserError */ + char *message;/* human-readable informative error message */ + xmlErrorLevel level;/* how consequent is the error */ + char *file; /* the filename */ + int line; /* the line number if available */ + char *str1; /* extra string information */ + char *str2; /* extra string information */ + char *str3; /* extra string information */ + int int1; /* extra number information */ + int int2; /* error column # or 0 if N/A (todo: rename field when we would brk ABI) */ + void *ctxt; /* the parser context if available */ + void *node; /* the node in the tree */ +}; + +/** + * xmlParserError: + * + * This is an error that the XML (or HTML) parser can generate + */ +typedef enum { + XML_ERR_OK = 0, + XML_ERR_INTERNAL_ERROR, /* 1 */ + XML_ERR_NO_MEMORY, /* 2 */ + XML_ERR_DOCUMENT_START, /* 3 */ + XML_ERR_DOCUMENT_EMPTY, /* 4 */ + XML_ERR_DOCUMENT_END, /* 5 */ + XML_ERR_INVALID_HEX_CHARREF, /* 6 */ + XML_ERR_INVALID_DEC_CHARREF, /* 7 */ + XML_ERR_INVALID_CHARREF, /* 8 */ + XML_ERR_INVALID_CHAR, /* 9 */ + XML_ERR_CHARREF_AT_EOF, /* 10 */ + XML_ERR_CHARREF_IN_PROLOG, /* 11 */ + XML_ERR_CHARREF_IN_EPILOG, /* 12 */ + XML_ERR_CHARREF_IN_DTD, /* 13 */ + XML_ERR_ENTITYREF_AT_EOF, /* 14 */ + XML_ERR_ENTITYREF_IN_PROLOG, /* 15 */ + XML_ERR_ENTITYREF_IN_EPILOG, /* 16 */ + XML_ERR_ENTITYREF_IN_DTD, /* 17 */ + XML_ERR_PEREF_AT_EOF, /* 18 */ + XML_ERR_PEREF_IN_PROLOG, /* 19 */ + XML_ERR_PEREF_IN_EPILOG, /* 20 */ + XML_ERR_PEREF_IN_INT_SUBSET, /* 21 */ + XML_ERR_ENTITYREF_NO_NAME, /* 22 */ + XML_ERR_ENTITYREF_SEMICOL_MISSING, /* 23 */ + XML_ERR_PEREF_NO_NAME, /* 24 */ + XML_ERR_PEREF_SEMICOL_MISSING, /* 25 */ + XML_ERR_UNDECLARED_ENTITY, /* 26 */ + XML_WAR_UNDECLARED_ENTITY, /* 27 */ + XML_ERR_UNPARSED_ENTITY, /* 28 */ + XML_ERR_ENTITY_IS_EXTERNAL, /* 29 */ + XML_ERR_ENTITY_IS_PARAMETER, /* 30 */ + XML_ERR_UNKNOWN_ENCODING, /* 31 */ + XML_ERR_UNSUPPORTED_ENCODING, /* 32 */ + XML_ERR_STRING_NOT_STARTED, /* 33 */ + XML_ERR_STRING_NOT_CLOSED, /* 34 */ + XML_ERR_NS_DECL_ERROR, /* 35 */ + XML_ERR_ENTITY_NOT_STARTED, /* 36 */ + XML_ERR_ENTITY_NOT_FINISHED, /* 37 */ + XML_ERR_LT_IN_ATTRIBUTE, /* 38 */ + XML_ERR_ATTRIBUTE_NOT_STARTED, /* 39 */ + XML_ERR_ATTRIBUTE_NOT_FINISHED, /* 40 */ + XML_ERR_ATTRIBUTE_WITHOUT_VALUE, /* 41 */ + XML_ERR_ATTRIBUTE_REDEFINED, /* 42 */ + XML_ERR_LITERAL_NOT_STARTED, /* 43 */ + XML_ERR_LITERAL_NOT_FINISHED, /* 44 */ + XML_ERR_COMMENT_NOT_FINISHED, /* 45 */ + XML_ERR_PI_NOT_STARTED, /* 46 */ + XML_ERR_PI_NOT_FINISHED, /* 47 */ + XML_ERR_NOTATION_NOT_STARTED, /* 48 */ + XML_ERR_NOTATION_NOT_FINISHED, /* 49 */ + XML_ERR_ATTLIST_NOT_STARTED, /* 50 */ + XML_ERR_ATTLIST_NOT_FINISHED, /* 51 */ + XML_ERR_MIXED_NOT_STARTED, /* 52 */ + XML_ERR_MIXED_NOT_FINISHED, /* 53 */ + XML_ERR_ELEMCONTENT_NOT_STARTED, /* 54 */ + XML_ERR_ELEMCONTENT_NOT_FINISHED, /* 55 */ + XML_ERR_XMLDECL_NOT_STARTED, /* 56 */ + XML_ERR_XMLDECL_NOT_FINISHED, /* 57 */ + XML_ERR_CONDSEC_NOT_STARTED, /* 58 */ + XML_ERR_CONDSEC_NOT_FINISHED, /* 59 */ + XML_ERR_EXT_SUBSET_NOT_FINISHED, /* 60 */ + XML_ERR_DOCTYPE_NOT_FINISHED, /* 61 */ + XML_ERR_MISPLACED_CDATA_END, /* 62 */ + XML_ERR_CDATA_NOT_FINISHED, /* 63 */ + XML_ERR_RESERVED_XML_NAME, /* 64 */ + XML_ERR_SPACE_REQUIRED, /* 65 */ + XML_ERR_SEPARATOR_REQUIRED, /* 66 */ + XML_ERR_NMTOKEN_REQUIRED, /* 67 */ + XML_ERR_NAME_REQUIRED, /* 68 */ + XML_ERR_PCDATA_REQUIRED, /* 69 */ + XML_ERR_URI_REQUIRED, /* 70 */ + XML_ERR_PUBID_REQUIRED, /* 71 */ + XML_ERR_LT_REQUIRED, /* 72 */ + XML_ERR_GT_REQUIRED, /* 73 */ + XML_ERR_LTSLASH_REQUIRED, /* 74 */ + XML_ERR_EQUAL_REQUIRED, /* 75 */ + XML_ERR_TAG_NAME_MISMATCH, /* 76 */ + XML_ERR_TAG_NOT_FINISHED, /* 77 */ + XML_ERR_STANDALONE_VALUE, /* 78 */ + XML_ERR_ENCODING_NAME, /* 79 */ + XML_ERR_HYPHEN_IN_COMMENT, /* 80 */ + XML_ERR_INVALID_ENCODING, /* 81 */ + XML_ERR_EXT_ENTITY_STANDALONE, /* 82 */ + XML_ERR_CONDSEC_INVALID, /* 83 */ + XML_ERR_VALUE_REQUIRED, /* 84 */ + XML_ERR_NOT_WELL_BALANCED, /* 85 */ + XML_ERR_EXTRA_CONTENT, /* 86 */ + XML_ERR_ENTITY_CHAR_ERROR, /* 87 */ + XML_ERR_ENTITY_PE_INTERNAL, /* 88 */ + XML_ERR_ENTITY_LOOP, /* 89 */ + XML_ERR_ENTITY_BOUNDARY, /* 90 */ + XML_ERR_INVALID_URI, /* 91 */ + XML_ERR_URI_FRAGMENT, /* 92 */ + XML_WAR_CATALOG_PI, /* 93 */ + XML_ERR_NO_DTD, /* 94 */ + XML_ERR_CONDSEC_INVALID_KEYWORD, /* 95 */ + XML_ERR_VERSION_MISSING, /* 96 */ + XML_WAR_UNKNOWN_VERSION, /* 97 */ + XML_WAR_LANG_VALUE, /* 98 */ + XML_WAR_NS_URI, /* 99 */ + XML_WAR_NS_URI_RELATIVE, /* 100 */ + XML_ERR_MISSING_ENCODING, /* 101 */ + XML_WAR_SPACE_VALUE, /* 102 */ + XML_ERR_NOT_STANDALONE, /* 103 */ + XML_ERR_ENTITY_PROCESSING, /* 104 */ + XML_ERR_NOTATION_PROCESSING, /* 105 */ + XML_WAR_NS_COLUMN, /* 106 */ + XML_WAR_ENTITY_REDEFINED, /* 107 */ + XML_ERR_UNKNOWN_VERSION, /* 108 */ + XML_ERR_VERSION_MISMATCH, /* 109 */ + XML_ERR_NAME_TOO_LONG, /* 110 */ + XML_ERR_USER_STOP, /* 111 */ + XML_NS_ERR_XML_NAMESPACE = 200, + XML_NS_ERR_UNDEFINED_NAMESPACE, /* 201 */ + XML_NS_ERR_QNAME, /* 202 */ + XML_NS_ERR_ATTRIBUTE_REDEFINED, /* 203 */ + XML_NS_ERR_EMPTY, /* 204 */ + XML_NS_ERR_COLON, /* 205 */ + XML_DTD_ATTRIBUTE_DEFAULT = 500, + XML_DTD_ATTRIBUTE_REDEFINED, /* 501 */ + XML_DTD_ATTRIBUTE_VALUE, /* 502 */ + XML_DTD_CONTENT_ERROR, /* 503 */ + XML_DTD_CONTENT_MODEL, /* 504 */ + XML_DTD_CONTENT_NOT_DETERMINIST, /* 505 */ + XML_DTD_DIFFERENT_PREFIX, /* 506 */ + XML_DTD_ELEM_DEFAULT_NAMESPACE, /* 507 */ + XML_DTD_ELEM_NAMESPACE, /* 508 */ + XML_DTD_ELEM_REDEFINED, /* 509 */ + XML_DTD_EMPTY_NOTATION, /* 510 */ + XML_DTD_ENTITY_TYPE, /* 511 */ + XML_DTD_ID_FIXED, /* 512 */ + XML_DTD_ID_REDEFINED, /* 513 */ + XML_DTD_ID_SUBSET, /* 514 */ + XML_DTD_INVALID_CHILD, /* 515 */ + XML_DTD_INVALID_DEFAULT, /* 516 */ + XML_DTD_LOAD_ERROR, /* 517 */ + XML_DTD_MISSING_ATTRIBUTE, /* 518 */ + XML_DTD_MIXED_CORRUPT, /* 519 */ + XML_DTD_MULTIPLE_ID, /* 520 */ + XML_DTD_NO_DOC, /* 521 */ + XML_DTD_NO_DTD, /* 522 */ + XML_DTD_NO_ELEM_NAME, /* 523 */ + XML_DTD_NO_PREFIX, /* 524 */ + XML_DTD_NO_ROOT, /* 525 */ + XML_DTD_NOTATION_REDEFINED, /* 526 */ + XML_DTD_NOTATION_VALUE, /* 527 */ + XML_DTD_NOT_EMPTY, /* 528 */ + XML_DTD_NOT_PCDATA, /* 529 */ + XML_DTD_NOT_STANDALONE, /* 530 */ + XML_DTD_ROOT_NAME, /* 531 */ + XML_DTD_STANDALONE_WHITE_SPACE, /* 532 */ + XML_DTD_UNKNOWN_ATTRIBUTE, /* 533 */ + XML_DTD_UNKNOWN_ELEM, /* 534 */ + XML_DTD_UNKNOWN_ENTITY, /* 535 */ + XML_DTD_UNKNOWN_ID, /* 536 */ + XML_DTD_UNKNOWN_NOTATION, /* 537 */ + XML_DTD_STANDALONE_DEFAULTED, /* 538 */ + XML_DTD_XMLID_VALUE, /* 539 */ + XML_DTD_XMLID_TYPE, /* 540 */ + XML_DTD_DUP_TOKEN, /* 541 */ + XML_HTML_STRUCURE_ERROR = 800, + XML_HTML_UNKNOWN_TAG, /* 801 */ + XML_RNGP_ANYNAME_ATTR_ANCESTOR = 1000, + XML_RNGP_ATTR_CONFLICT, /* 1001 */ + XML_RNGP_ATTRIBUTE_CHILDREN, /* 1002 */ + XML_RNGP_ATTRIBUTE_CONTENT, /* 1003 */ + XML_RNGP_ATTRIBUTE_EMPTY, /* 1004 */ + XML_RNGP_ATTRIBUTE_NOOP, /* 1005 */ + XML_RNGP_CHOICE_CONTENT, /* 1006 */ + XML_RNGP_CHOICE_EMPTY, /* 1007 */ + XML_RNGP_CREATE_FAILURE, /* 1008 */ + XML_RNGP_DATA_CONTENT, /* 1009 */ + XML_RNGP_DEF_CHOICE_AND_INTERLEAVE, /* 1010 */ + XML_RNGP_DEFINE_CREATE_FAILED, /* 1011 */ + XML_RNGP_DEFINE_EMPTY, /* 1012 */ + XML_RNGP_DEFINE_MISSING, /* 1013 */ + XML_RNGP_DEFINE_NAME_MISSING, /* 1014 */ + XML_RNGP_ELEM_CONTENT_EMPTY, /* 1015 */ + XML_RNGP_ELEM_CONTENT_ERROR, /* 1016 */ + XML_RNGP_ELEMENT_EMPTY, /* 1017 */ + XML_RNGP_ELEMENT_CONTENT, /* 1018 */ + XML_RNGP_ELEMENT_NAME, /* 1019 */ + XML_RNGP_ELEMENT_NO_CONTENT, /* 1020 */ + XML_RNGP_ELEM_TEXT_CONFLICT, /* 1021 */ + XML_RNGP_EMPTY, /* 1022 */ + XML_RNGP_EMPTY_CONSTRUCT, /* 1023 */ + XML_RNGP_EMPTY_CONTENT, /* 1024 */ + XML_RNGP_EMPTY_NOT_EMPTY, /* 1025 */ + XML_RNGP_ERROR_TYPE_LIB, /* 1026 */ + XML_RNGP_EXCEPT_EMPTY, /* 1027 */ + XML_RNGP_EXCEPT_MISSING, /* 1028 */ + XML_RNGP_EXCEPT_MULTIPLE, /* 1029 */ + XML_RNGP_EXCEPT_NO_CONTENT, /* 1030 */ + XML_RNGP_EXTERNALREF_EMTPY, /* 1031 */ + XML_RNGP_EXTERNAL_REF_FAILURE, /* 1032 */ + XML_RNGP_EXTERNALREF_RECURSE, /* 1033 */ + XML_RNGP_FORBIDDEN_ATTRIBUTE, /* 1034 */ + XML_RNGP_FOREIGN_ELEMENT, /* 1035 */ + XML_RNGP_GRAMMAR_CONTENT, /* 1036 */ + XML_RNGP_GRAMMAR_EMPTY, /* 1037 */ + XML_RNGP_GRAMMAR_MISSING, /* 1038 */ + XML_RNGP_GRAMMAR_NO_START, /* 1039 */ + XML_RNGP_GROUP_ATTR_CONFLICT, /* 1040 */ + XML_RNGP_HREF_ERROR, /* 1041 */ + XML_RNGP_INCLUDE_EMPTY, /* 1042 */ + XML_RNGP_INCLUDE_FAILURE, /* 1043 */ + XML_RNGP_INCLUDE_RECURSE, /* 1044 */ + XML_RNGP_INTERLEAVE_ADD, /* 1045 */ + XML_RNGP_INTERLEAVE_CREATE_FAILED, /* 1046 */ + XML_RNGP_INTERLEAVE_EMPTY, /* 1047 */ + XML_RNGP_INTERLEAVE_NO_CONTENT, /* 1048 */ + XML_RNGP_INVALID_DEFINE_NAME, /* 1049 */ + XML_RNGP_INVALID_URI, /* 1050 */ + XML_RNGP_INVALID_VALUE, /* 1051 */ + XML_RNGP_MISSING_HREF, /* 1052 */ + XML_RNGP_NAME_MISSING, /* 1053 */ + XML_RNGP_NEED_COMBINE, /* 1054 */ + XML_RNGP_NOTALLOWED_NOT_EMPTY, /* 1055 */ + XML_RNGP_NSNAME_ATTR_ANCESTOR, /* 1056 */ + XML_RNGP_NSNAME_NO_NS, /* 1057 */ + XML_RNGP_PARAM_FORBIDDEN, /* 1058 */ + XML_RNGP_PARAM_NAME_MISSING, /* 1059 */ + XML_RNGP_PARENTREF_CREATE_FAILED, /* 1060 */ + XML_RNGP_PARENTREF_NAME_INVALID, /* 1061 */ + XML_RNGP_PARENTREF_NO_NAME, /* 1062 */ + XML_RNGP_PARENTREF_NO_PARENT, /* 1063 */ + XML_RNGP_PARENTREF_NOT_EMPTY, /* 1064 */ + XML_RNGP_PARSE_ERROR, /* 1065 */ + XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME, /* 1066 */ + XML_RNGP_PAT_ATTR_ATTR, /* 1067 */ + XML_RNGP_PAT_ATTR_ELEM, /* 1068 */ + XML_RNGP_PAT_DATA_EXCEPT_ATTR, /* 1069 */ + XML_RNGP_PAT_DATA_EXCEPT_ELEM, /* 1070 */ + XML_RNGP_PAT_DATA_EXCEPT_EMPTY, /* 1071 */ + XML_RNGP_PAT_DATA_EXCEPT_GROUP, /* 1072 */ + XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE, /* 1073 */ + XML_RNGP_PAT_DATA_EXCEPT_LIST, /* 1074 */ + XML_RNGP_PAT_DATA_EXCEPT_ONEMORE, /* 1075 */ + XML_RNGP_PAT_DATA_EXCEPT_REF, /* 1076 */ + XML_RNGP_PAT_DATA_EXCEPT_TEXT, /* 1077 */ + XML_RNGP_PAT_LIST_ATTR, /* 1078 */ + XML_RNGP_PAT_LIST_ELEM, /* 1079 */ + XML_RNGP_PAT_LIST_INTERLEAVE, /* 1080 */ + XML_RNGP_PAT_LIST_LIST, /* 1081 */ + XML_RNGP_PAT_LIST_REF, /* 1082 */ + XML_RNGP_PAT_LIST_TEXT, /* 1083 */ + XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME, /* 1084 */ + XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME, /* 1085 */ + XML_RNGP_PAT_ONEMORE_GROUP_ATTR, /* 1086 */ + XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR, /* 1087 */ + XML_RNGP_PAT_START_ATTR, /* 1088 */ + XML_RNGP_PAT_START_DATA, /* 1089 */ + XML_RNGP_PAT_START_EMPTY, /* 1090 */ + XML_RNGP_PAT_START_GROUP, /* 1091 */ + XML_RNGP_PAT_START_INTERLEAVE, /* 1092 */ + XML_RNGP_PAT_START_LIST, /* 1093 */ + XML_RNGP_PAT_START_ONEMORE, /* 1094 */ + XML_RNGP_PAT_START_TEXT, /* 1095 */ + XML_RNGP_PAT_START_VALUE, /* 1096 */ + XML_RNGP_PREFIX_UNDEFINED, /* 1097 */ + XML_RNGP_REF_CREATE_FAILED, /* 1098 */ + XML_RNGP_REF_CYCLE, /* 1099 */ + XML_RNGP_REF_NAME_INVALID, /* 1100 */ + XML_RNGP_REF_NO_DEF, /* 1101 */ + XML_RNGP_REF_NO_NAME, /* 1102 */ + XML_RNGP_REF_NOT_EMPTY, /* 1103 */ + XML_RNGP_START_CHOICE_AND_INTERLEAVE, /* 1104 */ + XML_RNGP_START_CONTENT, /* 1105 */ + XML_RNGP_START_EMPTY, /* 1106 */ + XML_RNGP_START_MISSING, /* 1107 */ + XML_RNGP_TEXT_EXPECTED, /* 1108 */ + XML_RNGP_TEXT_HAS_CHILD, /* 1109 */ + XML_RNGP_TYPE_MISSING, /* 1110 */ + XML_RNGP_TYPE_NOT_FOUND, /* 1111 */ + XML_RNGP_TYPE_VALUE, /* 1112 */ + XML_RNGP_UNKNOWN_ATTRIBUTE, /* 1113 */ + XML_RNGP_UNKNOWN_COMBINE, /* 1114 */ + XML_RNGP_UNKNOWN_CONSTRUCT, /* 1115 */ + XML_RNGP_UNKNOWN_TYPE_LIB, /* 1116 */ + XML_RNGP_URI_FRAGMENT, /* 1117 */ + XML_RNGP_URI_NOT_ABSOLUTE, /* 1118 */ + XML_RNGP_VALUE_EMPTY, /* 1119 */ + XML_RNGP_VALUE_NO_CONTENT, /* 1120 */ + XML_RNGP_XMLNS_NAME, /* 1121 */ + XML_RNGP_XML_NS, /* 1122 */ + XML_XPATH_EXPRESSION_OK = 1200, + XML_XPATH_NUMBER_ERROR, /* 1201 */ + XML_XPATH_UNFINISHED_LITERAL_ERROR, /* 1202 */ + XML_XPATH_START_LITERAL_ERROR, /* 1203 */ + XML_XPATH_VARIABLE_REF_ERROR, /* 1204 */ + XML_XPATH_UNDEF_VARIABLE_ERROR, /* 1205 */ + XML_XPATH_INVALID_PREDICATE_ERROR, /* 1206 */ + XML_XPATH_EXPR_ERROR, /* 1207 */ + XML_XPATH_UNCLOSED_ERROR, /* 1208 */ + XML_XPATH_UNKNOWN_FUNC_ERROR, /* 1209 */ + XML_XPATH_INVALID_OPERAND, /* 1210 */ + XML_XPATH_INVALID_TYPE, /* 1211 */ + XML_XPATH_INVALID_ARITY, /* 1212 */ + XML_XPATH_INVALID_CTXT_SIZE, /* 1213 */ + XML_XPATH_INVALID_CTXT_POSITION, /* 1214 */ + XML_XPATH_MEMORY_ERROR, /* 1215 */ + XML_XPTR_SYNTAX_ERROR, /* 1216 */ + XML_XPTR_RESOURCE_ERROR, /* 1217 */ + XML_XPTR_SUB_RESOURCE_ERROR, /* 1218 */ + XML_XPATH_UNDEF_PREFIX_ERROR, /* 1219 */ + XML_XPATH_ENCODING_ERROR, /* 1220 */ + XML_XPATH_INVALID_CHAR_ERROR, /* 1221 */ + XML_TREE_INVALID_HEX = 1300, + XML_TREE_INVALID_DEC, /* 1301 */ + XML_TREE_UNTERMINATED_ENTITY, /* 1302 */ + XML_TREE_NOT_UTF8, /* 1303 */ + XML_SAVE_NOT_UTF8 = 1400, + XML_SAVE_CHAR_INVALID, /* 1401 */ + XML_SAVE_NO_DOCTYPE, /* 1402 */ + XML_SAVE_UNKNOWN_ENCODING, /* 1403 */ + XML_REGEXP_COMPILE_ERROR = 1450, + XML_IO_UNKNOWN = 1500, + XML_IO_EACCES, /* 1501 */ + XML_IO_EAGAIN, /* 1502 */ + XML_IO_EBADF, /* 1503 */ + XML_IO_EBADMSG, /* 1504 */ + XML_IO_EBUSY, /* 1505 */ + XML_IO_ECANCELED, /* 1506 */ + XML_IO_ECHILD, /* 1507 */ + XML_IO_EDEADLK, /* 1508 */ + XML_IO_EDOM, /* 1509 */ + XML_IO_EEXIST, /* 1510 */ + XML_IO_EFAULT, /* 1511 */ + XML_IO_EFBIG, /* 1512 */ + XML_IO_EINPROGRESS, /* 1513 */ + XML_IO_EINTR, /* 1514 */ + XML_IO_EINVAL, /* 1515 */ + XML_IO_EIO, /* 1516 */ + XML_IO_EISDIR, /* 1517 */ + XML_IO_EMFILE, /* 1518 */ + XML_IO_EMLINK, /* 1519 */ + XML_IO_EMSGSIZE, /* 1520 */ + XML_IO_ENAMETOOLONG, /* 1521 */ + XML_IO_ENFILE, /* 1522 */ + XML_IO_ENODEV, /* 1523 */ + XML_IO_ENOENT, /* 1524 */ + XML_IO_ENOEXEC, /* 1525 */ + XML_IO_ENOLCK, /* 1526 */ + XML_IO_ENOMEM, /* 1527 */ + XML_IO_ENOSPC, /* 1528 */ + XML_IO_ENOSYS, /* 1529 */ + XML_IO_ENOTDIR, /* 1530 */ + XML_IO_ENOTEMPTY, /* 1531 */ + XML_IO_ENOTSUP, /* 1532 */ + XML_IO_ENOTTY, /* 1533 */ + XML_IO_ENXIO, /* 1534 */ + XML_IO_EPERM, /* 1535 */ + XML_IO_EPIPE, /* 1536 */ + XML_IO_ERANGE, /* 1537 */ + XML_IO_EROFS, /* 1538 */ + XML_IO_ESPIPE, /* 1539 */ + XML_IO_ESRCH, /* 1540 */ + XML_IO_ETIMEDOUT, /* 1541 */ + XML_IO_EXDEV, /* 1542 */ + XML_IO_NETWORK_ATTEMPT, /* 1543 */ + XML_IO_ENCODER, /* 1544 */ + XML_IO_FLUSH, /* 1545 */ + XML_IO_WRITE, /* 1546 */ + XML_IO_NO_INPUT, /* 1547 */ + XML_IO_BUFFER_FULL, /* 1548 */ + XML_IO_LOAD_ERROR, /* 1549 */ + XML_IO_ENOTSOCK, /* 1550 */ + XML_IO_EISCONN, /* 1551 */ + XML_IO_ECONNREFUSED, /* 1552 */ + XML_IO_ENETUNREACH, /* 1553 */ + XML_IO_EADDRINUSE, /* 1554 */ + XML_IO_EALREADY, /* 1555 */ + XML_IO_EAFNOSUPPORT, /* 1556 */ + XML_XINCLUDE_RECURSION=1600, + XML_XINCLUDE_PARSE_VALUE, /* 1601 */ + XML_XINCLUDE_ENTITY_DEF_MISMATCH, /* 1602 */ + XML_XINCLUDE_NO_HREF, /* 1603 */ + XML_XINCLUDE_NO_FALLBACK, /* 1604 */ + XML_XINCLUDE_HREF_URI, /* 1605 */ + XML_XINCLUDE_TEXT_FRAGMENT, /* 1606 */ + XML_XINCLUDE_TEXT_DOCUMENT, /* 1607 */ + XML_XINCLUDE_INVALID_CHAR, /* 1608 */ + XML_XINCLUDE_BUILD_FAILED, /* 1609 */ + XML_XINCLUDE_UNKNOWN_ENCODING, /* 1610 */ + XML_XINCLUDE_MULTIPLE_ROOT, /* 1611 */ + XML_XINCLUDE_XPTR_FAILED, /* 1612 */ + XML_XINCLUDE_XPTR_RESULT, /* 1613 */ + XML_XINCLUDE_INCLUDE_IN_INCLUDE, /* 1614 */ + XML_XINCLUDE_FALLBACKS_IN_INCLUDE, /* 1615 */ + XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE, /* 1616 */ + XML_XINCLUDE_DEPRECATED_NS, /* 1617 */ + XML_XINCLUDE_FRAGMENT_ID, /* 1618 */ + XML_CATALOG_MISSING_ATTR = 1650, + XML_CATALOG_ENTRY_BROKEN, /* 1651 */ + XML_CATALOG_PREFER_VALUE, /* 1652 */ + XML_CATALOG_NOT_CATALOG, /* 1653 */ + XML_CATALOG_RECURSION, /* 1654 */ + XML_SCHEMAP_PREFIX_UNDEFINED = 1700, + XML_SCHEMAP_ATTRFORMDEFAULT_VALUE, /* 1701 */ + XML_SCHEMAP_ATTRGRP_NONAME_NOREF, /* 1702 */ + XML_SCHEMAP_ATTR_NONAME_NOREF, /* 1703 */ + XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF, /* 1704 */ + XML_SCHEMAP_ELEMFORMDEFAULT_VALUE, /* 1705 */ + XML_SCHEMAP_ELEM_NONAME_NOREF, /* 1706 */ + XML_SCHEMAP_EXTENSION_NO_BASE, /* 1707 */ + XML_SCHEMAP_FACET_NO_VALUE, /* 1708 */ + XML_SCHEMAP_FAILED_BUILD_IMPORT, /* 1709 */ + XML_SCHEMAP_GROUP_NONAME_NOREF, /* 1710 */ + XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI, /* 1711 */ + XML_SCHEMAP_IMPORT_REDEFINE_NSNAME, /* 1712 */ + XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI, /* 1713 */ + XML_SCHEMAP_INVALID_BOOLEAN, /* 1714 */ + XML_SCHEMAP_INVALID_ENUM, /* 1715 */ + XML_SCHEMAP_INVALID_FACET, /* 1716 */ + XML_SCHEMAP_INVALID_FACET_VALUE, /* 1717 */ + XML_SCHEMAP_INVALID_MAXOCCURS, /* 1718 */ + XML_SCHEMAP_INVALID_MINOCCURS, /* 1719 */ + XML_SCHEMAP_INVALID_REF_AND_SUBTYPE, /* 1720 */ + XML_SCHEMAP_INVALID_WHITE_SPACE, /* 1721 */ + XML_SCHEMAP_NOATTR_NOREF, /* 1722 */ + XML_SCHEMAP_NOTATION_NO_NAME, /* 1723 */ + XML_SCHEMAP_NOTYPE_NOREF, /* 1724 */ + XML_SCHEMAP_REF_AND_SUBTYPE, /* 1725 */ + XML_SCHEMAP_RESTRICTION_NONAME_NOREF, /* 1726 */ + XML_SCHEMAP_SIMPLETYPE_NONAME, /* 1727 */ + XML_SCHEMAP_TYPE_AND_SUBTYPE, /* 1728 */ + XML_SCHEMAP_UNKNOWN_ALL_CHILD, /* 1729 */ + XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD, /* 1730 */ + XML_SCHEMAP_UNKNOWN_ATTR_CHILD, /* 1731 */ + XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD, /* 1732 */ + XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP, /* 1733 */ + XML_SCHEMAP_UNKNOWN_BASE_TYPE, /* 1734 */ + XML_SCHEMAP_UNKNOWN_CHOICE_CHILD, /* 1735 */ + XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD, /* 1736 */ + XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD, /* 1737 */ + XML_SCHEMAP_UNKNOWN_ELEM_CHILD, /* 1738 */ + XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD, /* 1739 */ + XML_SCHEMAP_UNKNOWN_FACET_CHILD, /* 1740 */ + XML_SCHEMAP_UNKNOWN_FACET_TYPE, /* 1741 */ + XML_SCHEMAP_UNKNOWN_GROUP_CHILD, /* 1742 */ + XML_SCHEMAP_UNKNOWN_IMPORT_CHILD, /* 1743 */ + XML_SCHEMAP_UNKNOWN_LIST_CHILD, /* 1744 */ + XML_SCHEMAP_UNKNOWN_NOTATION_CHILD, /* 1745 */ + XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD, /* 1746 */ + XML_SCHEMAP_UNKNOWN_REF, /* 1747 */ + XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD, /* 1748 */ + XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD, /* 1749 */ + XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD, /* 1750 */ + XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD, /* 1751 */ + XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD, /* 1752 */ + XML_SCHEMAP_UNKNOWN_TYPE, /* 1753 */ + XML_SCHEMAP_UNKNOWN_UNION_CHILD, /* 1754 */ + XML_SCHEMAP_ELEM_DEFAULT_FIXED, /* 1755 */ + XML_SCHEMAP_REGEXP_INVALID, /* 1756 */ + XML_SCHEMAP_FAILED_LOAD, /* 1757 */ + XML_SCHEMAP_NOTHING_TO_PARSE, /* 1758 */ + XML_SCHEMAP_NOROOT, /* 1759 */ + XML_SCHEMAP_REDEFINED_GROUP, /* 1760 */ + XML_SCHEMAP_REDEFINED_TYPE, /* 1761 */ + XML_SCHEMAP_REDEFINED_ELEMENT, /* 1762 */ + XML_SCHEMAP_REDEFINED_ATTRGROUP, /* 1763 */ + XML_SCHEMAP_REDEFINED_ATTR, /* 1764 */ + XML_SCHEMAP_REDEFINED_NOTATION, /* 1765 */ + XML_SCHEMAP_FAILED_PARSE, /* 1766 */ + XML_SCHEMAP_UNKNOWN_PREFIX, /* 1767 */ + XML_SCHEMAP_DEF_AND_PREFIX, /* 1768 */ + XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD, /* 1769 */ + XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI, /* 1770 */ + XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI, /* 1771 */ + XML_SCHEMAP_NOT_SCHEMA, /* 1772 */ + XML_SCHEMAP_UNKNOWN_MEMBER_TYPE, /* 1773 */ + XML_SCHEMAP_INVALID_ATTR_USE, /* 1774 */ + XML_SCHEMAP_RECURSIVE, /* 1775 */ + XML_SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE, /* 1776 */ + XML_SCHEMAP_INVALID_ATTR_COMBINATION, /* 1777 */ + XML_SCHEMAP_INVALID_ATTR_INLINE_COMBINATION, /* 1778 */ + XML_SCHEMAP_MISSING_SIMPLETYPE_CHILD, /* 1779 */ + XML_SCHEMAP_INVALID_ATTR_NAME, /* 1780 */ + XML_SCHEMAP_REF_AND_CONTENT, /* 1781 */ + XML_SCHEMAP_CT_PROPS_CORRECT_1, /* 1782 */ + XML_SCHEMAP_CT_PROPS_CORRECT_2, /* 1783 */ + XML_SCHEMAP_CT_PROPS_CORRECT_3, /* 1784 */ + XML_SCHEMAP_CT_PROPS_CORRECT_4, /* 1785 */ + XML_SCHEMAP_CT_PROPS_CORRECT_5, /* 1786 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1, /* 1787 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1, /* 1788 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2, /* 1789 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2, /* 1790 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3, /* 1791 */ + XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER, /* 1792 */ + XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE, /* 1793 */ + XML_SCHEMAP_UNION_NOT_EXPRESSIBLE, /* 1794 */ + XML_SCHEMAP_SRC_IMPORT_3_1, /* 1795 */ + XML_SCHEMAP_SRC_IMPORT_3_2, /* 1796 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1, /* 1797 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2, /* 1798 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3, /* 1799 */ + XML_SCHEMAP_COS_CT_EXTENDS_1_3, /* 1800 */ + XML_SCHEMAV_NOROOT = 1801, + XML_SCHEMAV_UNDECLAREDELEM, /* 1802 */ + XML_SCHEMAV_NOTTOPLEVEL, /* 1803 */ + XML_SCHEMAV_MISSING, /* 1804 */ + XML_SCHEMAV_WRONGELEM, /* 1805 */ + XML_SCHEMAV_NOTYPE, /* 1806 */ + XML_SCHEMAV_NOROLLBACK, /* 1807 */ + XML_SCHEMAV_ISABSTRACT, /* 1808 */ + XML_SCHEMAV_NOTEMPTY, /* 1809 */ + XML_SCHEMAV_ELEMCONT, /* 1810 */ + XML_SCHEMAV_HAVEDEFAULT, /* 1811 */ + XML_SCHEMAV_NOTNILLABLE, /* 1812 */ + XML_SCHEMAV_EXTRACONTENT, /* 1813 */ + XML_SCHEMAV_INVALIDATTR, /* 1814 */ + XML_SCHEMAV_INVALIDELEM, /* 1815 */ + XML_SCHEMAV_NOTDETERMINIST, /* 1816 */ + XML_SCHEMAV_CONSTRUCT, /* 1817 */ + XML_SCHEMAV_INTERNAL, /* 1818 */ + XML_SCHEMAV_NOTSIMPLE, /* 1819 */ + XML_SCHEMAV_ATTRUNKNOWN, /* 1820 */ + XML_SCHEMAV_ATTRINVALID, /* 1821 */ + XML_SCHEMAV_VALUE, /* 1822 */ + XML_SCHEMAV_FACET, /* 1823 */ + XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1, /* 1824 */ + XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2, /* 1825 */ + XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3, /* 1826 */ + XML_SCHEMAV_CVC_TYPE_3_1_1, /* 1827 */ + XML_SCHEMAV_CVC_TYPE_3_1_2, /* 1828 */ + XML_SCHEMAV_CVC_FACET_VALID, /* 1829 */ + XML_SCHEMAV_CVC_LENGTH_VALID, /* 1830 */ + XML_SCHEMAV_CVC_MINLENGTH_VALID, /* 1831 */ + XML_SCHEMAV_CVC_MAXLENGTH_VALID, /* 1832 */ + XML_SCHEMAV_CVC_MININCLUSIVE_VALID, /* 1833 */ + XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID, /* 1834 */ + XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID, /* 1835 */ + XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID, /* 1836 */ + XML_SCHEMAV_CVC_TOTALDIGITS_VALID, /* 1837 */ + XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID, /* 1838 */ + XML_SCHEMAV_CVC_PATTERN_VALID, /* 1839 */ + XML_SCHEMAV_CVC_ENUMERATION_VALID, /* 1840 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1, /* 1841 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2, /* 1842 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3, /* 1843 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_2_4, /* 1844 */ + XML_SCHEMAV_CVC_ELT_1, /* 1845 */ + XML_SCHEMAV_CVC_ELT_2, /* 1846 */ + XML_SCHEMAV_CVC_ELT_3_1, /* 1847 */ + XML_SCHEMAV_CVC_ELT_3_2_1, /* 1848 */ + XML_SCHEMAV_CVC_ELT_3_2_2, /* 1849 */ + XML_SCHEMAV_CVC_ELT_4_1, /* 1850 */ + XML_SCHEMAV_CVC_ELT_4_2, /* 1851 */ + XML_SCHEMAV_CVC_ELT_4_3, /* 1852 */ + XML_SCHEMAV_CVC_ELT_5_1_1, /* 1853 */ + XML_SCHEMAV_CVC_ELT_5_1_2, /* 1854 */ + XML_SCHEMAV_CVC_ELT_5_2_1, /* 1855 */ + XML_SCHEMAV_CVC_ELT_5_2_2_1, /* 1856 */ + XML_SCHEMAV_CVC_ELT_5_2_2_2_1, /* 1857 */ + XML_SCHEMAV_CVC_ELT_5_2_2_2_2, /* 1858 */ + XML_SCHEMAV_CVC_ELT_6, /* 1859 */ + XML_SCHEMAV_CVC_ELT_7, /* 1860 */ + XML_SCHEMAV_CVC_ATTRIBUTE_1, /* 1861 */ + XML_SCHEMAV_CVC_ATTRIBUTE_2, /* 1862 */ + XML_SCHEMAV_CVC_ATTRIBUTE_3, /* 1863 */ + XML_SCHEMAV_CVC_ATTRIBUTE_4, /* 1864 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_3_1, /* 1865 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1, /* 1866 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2, /* 1867 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_4, /* 1868 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_5_1, /* 1869 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_5_2, /* 1870 */ + XML_SCHEMAV_ELEMENT_CONTENT, /* 1871 */ + XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING, /* 1872 */ + XML_SCHEMAV_CVC_COMPLEX_TYPE_1, /* 1873 */ + XML_SCHEMAV_CVC_AU, /* 1874 */ + XML_SCHEMAV_CVC_TYPE_1, /* 1875 */ + XML_SCHEMAV_CVC_TYPE_2, /* 1876 */ + XML_SCHEMAV_CVC_IDC, /* 1877 */ + XML_SCHEMAV_CVC_WILDCARD, /* 1878 */ + XML_SCHEMAV_MISC, /* 1879 */ + XML_XPTR_UNKNOWN_SCHEME = 1900, + XML_XPTR_CHILDSEQ_START, /* 1901 */ + XML_XPTR_EVAL_FAILED, /* 1902 */ + XML_XPTR_EXTRA_OBJECTS, /* 1903 */ + XML_C14N_CREATE_CTXT = 1950, + XML_C14N_REQUIRES_UTF8, /* 1951 */ + XML_C14N_CREATE_STACK, /* 1952 */ + XML_C14N_INVALID_NODE, /* 1953 */ + XML_C14N_UNKNOW_NODE, /* 1954 */ + XML_C14N_RELATIVE_NAMESPACE, /* 1955 */ + XML_FTP_PASV_ANSWER = 2000, + XML_FTP_EPSV_ANSWER, /* 2001 */ + XML_FTP_ACCNT, /* 2002 */ + XML_FTP_URL_SYNTAX, /* 2003 */ + XML_HTTP_URL_SYNTAX = 2020, + XML_HTTP_USE_IP, /* 2021 */ + XML_HTTP_UNKNOWN_HOST, /* 2022 */ + XML_SCHEMAP_SRC_SIMPLE_TYPE_1 = 3000, + XML_SCHEMAP_SRC_SIMPLE_TYPE_2, /* 3001 */ + XML_SCHEMAP_SRC_SIMPLE_TYPE_3, /* 3002 */ + XML_SCHEMAP_SRC_SIMPLE_TYPE_4, /* 3003 */ + XML_SCHEMAP_SRC_RESOLVE, /* 3004 */ + XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE, /* 3005 */ + XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE, /* 3006 */ + XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES, /* 3007 */ + XML_SCHEMAP_ST_PROPS_CORRECT_1, /* 3008 */ + XML_SCHEMAP_ST_PROPS_CORRECT_2, /* 3009 */ + XML_SCHEMAP_ST_PROPS_CORRECT_3, /* 3010 */ + XML_SCHEMAP_COS_ST_RESTRICTS_1_1, /* 3011 */ + XML_SCHEMAP_COS_ST_RESTRICTS_1_2, /* 3012 */ + XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1, /* 3013 */ + XML_SCHEMAP_COS_ST_RESTRICTS_1_3_2, /* 3014 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_1, /* 3015 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1, /* 3016 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2, /* 3017 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1, /* 3018 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2, /* 3019 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3, /* 3020 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4, /* 3021 */ + XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_5, /* 3022 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_1, /* 3023 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1, /* 3024 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2, /* 3025 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2, /* 3026 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1, /* 3027 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3, /* 3028 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4, /* 3029 */ + XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_5, /* 3030 */ + XML_SCHEMAP_COS_ST_DERIVED_OK_2_1, /* 3031 */ + XML_SCHEMAP_COS_ST_DERIVED_OK_2_2, /* 3032 */ + XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED, /* 3033 */ + XML_SCHEMAP_S4S_ELEM_MISSING, /* 3034 */ + XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, /* 3035 */ + XML_SCHEMAP_S4S_ATTR_MISSING, /* 3036 */ + XML_SCHEMAP_S4S_ATTR_INVALID_VALUE, /* 3037 */ + XML_SCHEMAP_SRC_ELEMENT_1, /* 3038 */ + XML_SCHEMAP_SRC_ELEMENT_2_1, /* 3039 */ + XML_SCHEMAP_SRC_ELEMENT_2_2, /* 3040 */ + XML_SCHEMAP_SRC_ELEMENT_3, /* 3041 */ + XML_SCHEMAP_P_PROPS_CORRECT_1, /* 3042 */ + XML_SCHEMAP_P_PROPS_CORRECT_2_1, /* 3043 */ + XML_SCHEMAP_P_PROPS_CORRECT_2_2, /* 3044 */ + XML_SCHEMAP_E_PROPS_CORRECT_2, /* 3045 */ + XML_SCHEMAP_E_PROPS_CORRECT_3, /* 3046 */ + XML_SCHEMAP_E_PROPS_CORRECT_4, /* 3047 */ + XML_SCHEMAP_E_PROPS_CORRECT_5, /* 3048 */ + XML_SCHEMAP_E_PROPS_CORRECT_6, /* 3049 */ + XML_SCHEMAP_SRC_INCLUDE, /* 3050 */ + XML_SCHEMAP_SRC_ATTRIBUTE_1, /* 3051 */ + XML_SCHEMAP_SRC_ATTRIBUTE_2, /* 3052 */ + XML_SCHEMAP_SRC_ATTRIBUTE_3_1, /* 3053 */ + XML_SCHEMAP_SRC_ATTRIBUTE_3_2, /* 3054 */ + XML_SCHEMAP_SRC_ATTRIBUTE_4, /* 3055 */ + XML_SCHEMAP_NO_XMLNS, /* 3056 */ + XML_SCHEMAP_NO_XSI, /* 3057 */ + XML_SCHEMAP_COS_VALID_DEFAULT_1, /* 3058 */ + XML_SCHEMAP_COS_VALID_DEFAULT_2_1, /* 3059 */ + XML_SCHEMAP_COS_VALID_DEFAULT_2_2_1, /* 3060 */ + XML_SCHEMAP_COS_VALID_DEFAULT_2_2_2, /* 3061 */ + XML_SCHEMAP_CVC_SIMPLE_TYPE, /* 3062 */ + XML_SCHEMAP_COS_CT_EXTENDS_1_1, /* 3063 */ + XML_SCHEMAP_SRC_IMPORT_1_1, /* 3064 */ + XML_SCHEMAP_SRC_IMPORT_1_2, /* 3065 */ + XML_SCHEMAP_SRC_IMPORT_2, /* 3066 */ + XML_SCHEMAP_SRC_IMPORT_2_1, /* 3067 */ + XML_SCHEMAP_SRC_IMPORT_2_2, /* 3068 */ + XML_SCHEMAP_INTERNAL, /* 3069 non-W3C */ + XML_SCHEMAP_NOT_DETERMINISTIC, /* 3070 non-W3C */ + XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_1, /* 3071 */ + XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2, /* 3072 */ + XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3, /* 3073 */ + XML_SCHEMAP_MG_PROPS_CORRECT_1, /* 3074 */ + XML_SCHEMAP_MG_PROPS_CORRECT_2, /* 3075 */ + XML_SCHEMAP_SRC_CT_1, /* 3076 */ + XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3, /* 3077 */ + XML_SCHEMAP_AU_PROPS_CORRECT_2, /* 3078 */ + XML_SCHEMAP_A_PROPS_CORRECT_2, /* 3079 */ + XML_SCHEMAP_C_PROPS_CORRECT, /* 3080 */ + XML_SCHEMAP_SRC_REDEFINE, /* 3081 */ + XML_SCHEMAP_SRC_IMPORT, /* 3082 */ + XML_SCHEMAP_WARN_SKIP_SCHEMA, /* 3083 */ + XML_SCHEMAP_WARN_UNLOCATED_SCHEMA, /* 3084 */ + XML_SCHEMAP_WARN_ATTR_REDECL_PROH, /* 3085 */ + XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH, /* 3085 */ + XML_SCHEMAP_AG_PROPS_CORRECT, /* 3086 */ + XML_SCHEMAP_COS_CT_EXTENDS_1_2, /* 3087 */ + XML_SCHEMAP_AU_PROPS_CORRECT, /* 3088 */ + XML_SCHEMAP_A_PROPS_CORRECT_3, /* 3089 */ + XML_SCHEMAP_COS_ALL_LIMITED, /* 3090 */ + XML_SCHEMATRONV_ASSERT = 4000, /* 4000 */ + XML_SCHEMATRONV_REPORT, + XML_MODULE_OPEN = 4900, /* 4900 */ + XML_MODULE_CLOSE, /* 4901 */ + XML_CHECK_FOUND_ELEMENT = 5000, + XML_CHECK_FOUND_ATTRIBUTE, /* 5001 */ + XML_CHECK_FOUND_TEXT, /* 5002 */ + XML_CHECK_FOUND_CDATA, /* 5003 */ + XML_CHECK_FOUND_ENTITYREF, /* 5004 */ + XML_CHECK_FOUND_ENTITY, /* 5005 */ + XML_CHECK_FOUND_PI, /* 5006 */ + XML_CHECK_FOUND_COMMENT, /* 5007 */ + XML_CHECK_FOUND_DOCTYPE, /* 5008 */ + XML_CHECK_FOUND_FRAGMENT, /* 5009 */ + XML_CHECK_FOUND_NOTATION, /* 5010 */ + XML_CHECK_UNKNOWN_NODE, /* 5011 */ + XML_CHECK_ENTITY_TYPE, /* 5012 */ + XML_CHECK_NO_PARENT, /* 5013 */ + XML_CHECK_NO_DOC, /* 5014 */ + XML_CHECK_NO_NAME, /* 5015 */ + XML_CHECK_NO_ELEM, /* 5016 */ + XML_CHECK_WRONG_DOC, /* 5017 */ + XML_CHECK_NO_PREV, /* 5018 */ + XML_CHECK_WRONG_PREV, /* 5019 */ + XML_CHECK_NO_NEXT, /* 5020 */ + XML_CHECK_WRONG_NEXT, /* 5021 */ + XML_CHECK_NOT_DTD, /* 5022 */ + XML_CHECK_NOT_ATTR, /* 5023 */ + XML_CHECK_NOT_ATTR_DECL, /* 5024 */ + XML_CHECK_NOT_ELEM_DECL, /* 5025 */ + XML_CHECK_NOT_ENTITY_DECL, /* 5026 */ + XML_CHECK_NOT_NS_DECL, /* 5027 */ + XML_CHECK_NO_HREF, /* 5028 */ + XML_CHECK_WRONG_PARENT,/* 5029 */ + XML_CHECK_NS_SCOPE, /* 5030 */ + XML_CHECK_NS_ANCESTOR, /* 5031 */ + XML_CHECK_NOT_UTF8, /* 5032 */ + XML_CHECK_NO_DICT, /* 5033 */ + XML_CHECK_NOT_NCNAME, /* 5034 */ + XML_CHECK_OUTSIDE_DICT, /* 5035 */ + XML_CHECK_WRONG_NAME, /* 5036 */ + XML_CHECK_NAME_NOT_NULL, /* 5037 */ + XML_I18N_NO_NAME = 6000, + XML_I18N_NO_HANDLER, /* 6001 */ + XML_I18N_EXCESS_HANDLER, /* 6002 */ + XML_I18N_CONV_FAILED, /* 6003 */ + XML_I18N_NO_OUTPUT, /* 6004 */ + XML_BUF_OVERFLOW = 7000 +} xmlParserErrors; + +/** + * xmlGenericErrorFunc: + * @ctx: a parsing context + * @msg: the message + * @...: the extra arguments of the varags to format the message + * + * Signature of the function to use when there is an error and + * no parsing or validity context available . + */ +typedef void (XMLCDECL *xmlGenericErrorFunc) (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); +/** + * xmlStructuredErrorFunc: + * @userData: user provided data for the error callback + * @error: the error being raised. + * + * Signature of the function to use when there is an error and + * the module handles the new error reporting mechanism. + */ +typedef void (XMLCALL *xmlStructuredErrorFunc) (void *userData, xmlErrorPtr error); + +/* + * Use the following function to reset the two global variables + * xmlGenericError and xmlGenericErrorContext. + */ +XMLPUBFUN void XMLCALL + xmlSetGenericErrorFunc (void *ctx, + xmlGenericErrorFunc handler); +XMLPUBFUN void XMLCALL + initGenericErrorDefaultFunc (xmlGenericErrorFunc *handler); + +XMLPUBFUN void XMLCALL + xmlSetStructuredErrorFunc (void *ctx, + xmlStructuredErrorFunc handler); +/* + * Default message routines used by SAX and Valid context for error + * and warning reporting. + */ +XMLPUBFUN void XMLCDECL + xmlParserError (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); +XMLPUBFUN void XMLCDECL + xmlParserWarning (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); +XMLPUBFUN void XMLCDECL + xmlParserValidityError (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); +XMLPUBFUN void XMLCDECL + xmlParserValidityWarning (void *ctx, + const char *msg, + ...) LIBXML_ATTR_FORMAT(2,3); +XMLPUBFUN void XMLCALL + xmlParserPrintFileInfo (xmlParserInputPtr input); +XMLPUBFUN void XMLCALL + xmlParserPrintFileContext (xmlParserInputPtr input); + +/* + * Extended error information routines + */ +XMLPUBFUN xmlErrorPtr XMLCALL + xmlGetLastError (void); +XMLPUBFUN void XMLCALL + xmlResetLastError (void); +XMLPUBFUN xmlErrorPtr XMLCALL + xmlCtxtGetLastError (void *ctx); +XMLPUBFUN void XMLCALL + xmlCtxtResetLastError (void *ctx); +XMLPUBFUN void XMLCALL + xmlResetError (xmlErrorPtr err); +XMLPUBFUN int XMLCALL + xmlCopyError (xmlErrorPtr from, + xmlErrorPtr to); + +#ifdef IN_LIBXML +/* + * Internal callback reporting routine + */ +XMLPUBFUN void XMLCALL + __xmlRaiseError (xmlStructuredErrorFunc schannel, + xmlGenericErrorFunc channel, + void *data, + void *ctx, + void *node, + int domain, + int code, + xmlErrorLevel level, + const char *file, + int line, + const char *str1, + const char *str2, + const char *str3, + int int1, + int col, + const char *msg, + ...) LIBXML_ATTR_FORMAT(16,17); +XMLPUBFUN void XMLCALL + __xmlSimpleError (int domain, + int code, + xmlNodePtr node, + const char *msg, + const char *extra) LIBXML_ATTR_FORMAT(4,0); +#endif +#ifdef __cplusplus +} +#endif +#endif /* __XML_ERROR_H__ */ diff --git a/libxml2/include/libxml/xmlexports.h b/libxml2/include/libxml/xmlexports.h new file mode 100644 index 0000000..2c79f81 --- /dev/null +++ b/libxml2/include/libxml/xmlexports.h @@ -0,0 +1,162 @@ +/* + * Summary: macros for marking symbols as exportable/importable. + * Description: macros for marking symbols as exportable/importable. + * + * Copy: See Copyright for the status of this software. + * + * Author: Igor Zlatovic + */ + +#ifndef __XML_EXPORTS_H__ +#define __XML_EXPORTS_H__ + +/** + * XMLPUBFUN, XMLPUBVAR, XMLCALL + * + * Macros which declare an exportable function, an exportable variable and + * the calling convention used for functions. + * + * Please use an extra block for every platform/compiler combination when + * modifying this, rather than overlong #ifdef lines. This helps + * readability as well as the fact that different compilers on the same + * platform might need different definitions. + */ + +/** + * XMLPUBFUN: + * + * Macros which declare an exportable function + */ +#define XMLPUBFUN +/** + * XMLPUBVAR: + * + * Macros which declare an exportable variable + */ +#define XMLPUBVAR extern +/** + * XMLCALL: + * + * Macros which declare the called convention for exported functions + */ +#define XMLCALL +/** + * XMLCDECL: + * + * Macro which declares the calling convention for exported functions that + * use '...'. + */ +#define XMLCDECL + +/** DOC_DISABLE */ + +/* Windows platform with MS compiler */ +#if defined(_WIN32) && defined(_MSC_VER) + #undef XMLPUBFUN + #undef XMLPUBVAR + #undef XMLCALL + #undef XMLCDECL + #if defined(IN_LIBXML) && !defined(LIBXML_STATIC) + #define XMLPUBFUN __declspec(dllexport) + #define XMLPUBVAR __declspec(dllexport) + #else + #define XMLPUBFUN + #if !defined(LIBXML_STATIC) + #define XMLPUBVAR __declspec(dllimport) extern + #else + #define XMLPUBVAR extern + #endif + #endif + #if defined(LIBXML_FASTCALL) + #define XMLCALL __fastcall + #else + #define XMLCALL __cdecl + #endif + #define XMLCDECL __cdecl + #if !defined _REENTRANT + #define _REENTRANT + #endif +#endif + +/* Windows platform with Borland compiler */ +#if defined(_WIN32) && defined(__BORLANDC__) + #undef XMLPUBFUN + #undef XMLPUBVAR + #undef XMLCALL + #undef XMLCDECL + #if defined(IN_LIBXML) && !defined(LIBXML_STATIC) + #define XMLPUBFUN __declspec(dllexport) + #define XMLPUBVAR __declspec(dllexport) extern + #else + #define XMLPUBFUN + #if !defined(LIBXML_STATIC) + #define XMLPUBVAR __declspec(dllimport) extern + #else + #define XMLPUBVAR extern + #endif + #endif + #define XMLCALL __cdecl + #define XMLCDECL __cdecl + #if !defined _REENTRANT + #define _REENTRANT + #endif +#endif + +/* Windows platform with GNU compiler (Mingw) */ +#if defined(_WIN32) && defined(__MINGW32__) + #undef XMLPUBFUN + #undef XMLPUBVAR + #undef XMLCALL + #undef XMLCDECL + /* + * if defined(IN_LIBXML) this raises problems on mingw with msys + * _imp__xmlFree listed as missing. Try to workaround the problem + * by also making that declaration when compiling client code. + */ + #if defined(IN_LIBXML) && !defined(LIBXML_STATIC) + #define XMLPUBFUN __declspec(dllexport) + #define XMLPUBVAR __declspec(dllexport) extern + #else + #define XMLPUBFUN + #if !defined(LIBXML_STATIC) + #define XMLPUBVAR __declspec(dllimport) extern + #else + #define XMLPUBVAR extern + #endif + #endif + #define XMLCALL __cdecl + #define XMLCDECL __cdecl + #if !defined _REENTRANT + #define _REENTRANT + #endif +#endif + +/* Cygwin platform, GNU compiler */ +#if defined(_WIN32) && defined(__CYGWIN__) + #undef XMLPUBFUN + #undef XMLPUBVAR + #undef XMLCALL + #undef XMLCDECL + #if defined(IN_LIBXML) && !defined(LIBXML_STATIC) + #define XMLPUBFUN __declspec(dllexport) + #define XMLPUBVAR __declspec(dllexport) + #else + #define XMLPUBFUN + #if !defined(LIBXML_STATIC) + #define XMLPUBVAR __declspec(dllimport) extern + #else + #define XMLPUBVAR + #endif + #endif + #define XMLCALL __cdecl + #define XMLCDECL __cdecl +#endif + +/* Compatibility */ +#if !defined(LIBXML_DLL_IMPORT) +#define LIBXML_DLL_IMPORT XMLPUBVAR +#endif + +#endif /* __XML_EXPORTS_H__ */ + + diff --git a/libxml2/include/libxml/xmlmemory.h b/libxml2/include/libxml/xmlmemory.h new file mode 100644 index 0000000..17e375a --- /dev/null +++ b/libxml2/include/libxml/xmlmemory.h @@ -0,0 +1,224 @@ +/* + * Summary: interface for the memory allocator + * Description: provides interfaces for the memory allocator, + * including debugging capabilities. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + + +#ifndef __DEBUG_MEMORY_ALLOC__ +#define __DEBUG_MEMORY_ALLOC__ + +#include +#include + +/** + * DEBUG_MEMORY: + * + * DEBUG_MEMORY replaces the allocator with a collect and debug + * shell to the libc allocator. + * DEBUG_MEMORY should only be activated when debugging + * libxml i.e. if libxml has been configured with --with-debug-mem too. + */ +/* #define DEBUG_MEMORY_FREED */ +/* #define DEBUG_MEMORY_LOCATION */ + +#ifdef DEBUG +#ifndef DEBUG_MEMORY +#define DEBUG_MEMORY +#endif +#endif + +/** + * DEBUG_MEMORY_LOCATION: + * + * DEBUG_MEMORY_LOCATION should be activated only when debugging + * libxml i.e. if libxml has been configured with --with-debug-mem too. + */ +#ifdef DEBUG_MEMORY_LOCATION +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The XML memory wrapper support 4 basic overloadable functions. + */ +/** + * xmlFreeFunc: + * @mem: an already allocated block of memory + * + * Signature for a free() implementation. + */ +typedef void (XMLCALL *xmlFreeFunc)(void *mem); +/** + * xmlMallocFunc: + * @size: the size requested in bytes + * + * Signature for a malloc() implementation. + * + * Returns a pointer to the newly allocated block or NULL in case of error. + */ +typedef void *(LIBXML_ATTR_ALLOC_SIZE(1) XMLCALL *xmlMallocFunc)(size_t size); + +/** + * xmlReallocFunc: + * @mem: an already allocated block of memory + * @size: the new size requested in bytes + * + * Signature for a realloc() implementation. + * + * Returns a pointer to the newly reallocated block or NULL in case of error. + */ +typedef void *(XMLCALL *xmlReallocFunc)(void *mem, size_t size); + +/** + * xmlStrdupFunc: + * @str: a zero terminated string + * + * Signature for an strdup() implementation. + * + * Returns the copy of the string or NULL in case of error. + */ +typedef char *(XMLCALL *xmlStrdupFunc)(const char *str); + +/* + * The 4 interfaces used for all memory handling within libxml. +LIBXML_DLL_IMPORT xmlFreeFunc xmlFree; +LIBXML_DLL_IMPORT xmlMallocFunc xmlMalloc; +LIBXML_DLL_IMPORT xmlMallocFunc xmlMallocAtomic; +LIBXML_DLL_IMPORT xmlReallocFunc xmlRealloc; +LIBXML_DLL_IMPORT xmlStrdupFunc xmlMemStrdup; + */ + +/* + * The way to overload the existing functions. + * The xmlGc function have an extra entry for atomic block + * allocations useful for garbage collected memory allocators + */ +XMLPUBFUN int XMLCALL + xmlMemSetup (xmlFreeFunc freeFunc, + xmlMallocFunc mallocFunc, + xmlReallocFunc reallocFunc, + xmlStrdupFunc strdupFunc); +XMLPUBFUN int XMLCALL + xmlMemGet (xmlFreeFunc *freeFunc, + xmlMallocFunc *mallocFunc, + xmlReallocFunc *reallocFunc, + xmlStrdupFunc *strdupFunc); +XMLPUBFUN int XMLCALL + xmlGcMemSetup (xmlFreeFunc freeFunc, + xmlMallocFunc mallocFunc, + xmlMallocFunc mallocAtomicFunc, + xmlReallocFunc reallocFunc, + xmlStrdupFunc strdupFunc); +XMLPUBFUN int XMLCALL + xmlGcMemGet (xmlFreeFunc *freeFunc, + xmlMallocFunc *mallocFunc, + xmlMallocFunc *mallocAtomicFunc, + xmlReallocFunc *reallocFunc, + xmlStrdupFunc *strdupFunc); + +/* + * Initialization of the memory layer. + */ +XMLPUBFUN int XMLCALL + xmlInitMemory (void); + +/* + * Cleanup of the memory layer. + */ +XMLPUBFUN void XMLCALL + xmlCleanupMemory (void); +/* + * These are specific to the XML debug memory wrapper. + */ +XMLPUBFUN int XMLCALL + xmlMemUsed (void); +XMLPUBFUN int XMLCALL + xmlMemBlocks (void); +XMLPUBFUN void XMLCALL + xmlMemDisplay (FILE *fp); +XMLPUBFUN void XMLCALL + xmlMemDisplayLast(FILE *fp, long nbBytes); +XMLPUBFUN void XMLCALL + xmlMemShow (FILE *fp, int nr); +XMLPUBFUN void XMLCALL + xmlMemoryDump (void); +XMLPUBFUN void * XMLCALL + xmlMemMalloc (size_t size) LIBXML_ATTR_ALLOC_SIZE(1); +XMLPUBFUN void * XMLCALL + xmlMemRealloc (void *ptr,size_t size); +XMLPUBFUN void XMLCALL + xmlMemFree (void *ptr); +XMLPUBFUN char * XMLCALL + xmlMemoryStrdup (const char *str); +XMLPUBFUN void * XMLCALL + xmlMallocLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1); +XMLPUBFUN void * XMLCALL + xmlReallocLoc (void *ptr, size_t size, const char *file, int line); +XMLPUBFUN void * XMLCALL + xmlMallocAtomicLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1); +XMLPUBFUN char * XMLCALL + xmlMemStrdupLoc (const char *str, const char *file, int line); + + +#ifdef DEBUG_MEMORY_LOCATION +/** + * xmlMalloc: + * @size: number of bytes to allocate + * + * Wrapper for the malloc() function used in the XML library. + * + * Returns the pointer to the allocated area or NULL in case of error. + */ +#define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__) +/** + * xmlMallocAtomic: + * @size: number of bytes to allocate + * + * Wrapper for the malloc() function used in the XML library for allocation + * of block not containing pointers to other areas. + * + * Returns the pointer to the allocated area or NULL in case of error. + */ +#define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__) +/** + * xmlRealloc: + * @ptr: pointer to the existing allocated area + * @size: number of bytes to allocate + * + * Wrapper for the realloc() function used in the XML library. + * + * Returns the pointer to the allocated area or NULL in case of error. + */ +#define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__) +/** + * xmlMemStrdup: + * @str: pointer to the existing string + * + * Wrapper for the strdup() function, xmlStrdup() is usually preferred. + * + * Returns the pointer to the allocated area or NULL in case of error. + */ +#define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__) + +#endif /* DEBUG_MEMORY_LOCATION */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#ifndef __XML_GLOBALS_H +#ifndef __XML_THREADS_H__ +#include +#include +#endif +#endif + +#endif /* __DEBUG_MEMORY_ALLOC__ */ + diff --git a/libxml2/include/libxml/xmlmodule.h b/libxml2/include/libxml/xmlmodule.h new file mode 100644 index 0000000..9667820 --- /dev/null +++ b/libxml2/include/libxml/xmlmodule.h @@ -0,0 +1,57 @@ +/* + * Summary: dynamic module loading + * Description: basic API for dynamic module loading, used by + * libexslt added in 2.6.17 + * + * Copy: See Copyright for the status of this software. + * + * Author: Joel W. Reed + */ + +#ifndef __XML_MODULE_H__ +#define __XML_MODULE_H__ + +#include + +#ifdef LIBXML_MODULES_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlModulePtr: + * + * A handle to a dynamically loaded module + */ +typedef struct _xmlModule xmlModule; +typedef xmlModule *xmlModulePtr; + +/** + * xmlModuleOption: + * + * enumeration of options that can be passed down to xmlModuleOpen() + */ +typedef enum { + XML_MODULE_LAZY = 1, /* lazy binding */ + XML_MODULE_LOCAL= 2 /* local binding */ +} xmlModuleOption; + +XMLPUBFUN xmlModulePtr XMLCALL xmlModuleOpen (const char *filename, + int options); + +XMLPUBFUN int XMLCALL xmlModuleSymbol (xmlModulePtr module, + const char* name, + void **result); + +XMLPUBFUN int XMLCALL xmlModuleClose (xmlModulePtr module); + +XMLPUBFUN int XMLCALL xmlModuleFree (xmlModulePtr module); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_MODULES_ENABLED */ + +#endif /*__XML_MODULE_H__ */ diff --git a/libxml2/include/libxml/xmlreader.h b/libxml2/include/libxml/xmlreader.h new file mode 100644 index 0000000..2c99e3a --- /dev/null +++ b/libxml2/include/libxml/xmlreader.h @@ -0,0 +1,428 @@ +/* + * Summary: the XMLReader implementation + * Description: API of the XML streaming API based on C# interfaces. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_XMLREADER_H__ +#define __XML_XMLREADER_H__ + +#include +#include +#include +#ifdef LIBXML_SCHEMAS_ENABLED +#include +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlParserSeverities: + * + * How severe an error callback is when the per-reader error callback API + * is used. + */ +typedef enum { + XML_PARSER_SEVERITY_VALIDITY_WARNING = 1, + XML_PARSER_SEVERITY_VALIDITY_ERROR = 2, + XML_PARSER_SEVERITY_WARNING = 3, + XML_PARSER_SEVERITY_ERROR = 4 +} xmlParserSeverities; + +#ifdef LIBXML_READER_ENABLED + +/** + * xmlTextReaderMode: + * + * Internal state values for the reader. + */ +typedef enum { + XML_TEXTREADER_MODE_INITIAL = 0, + XML_TEXTREADER_MODE_INTERACTIVE = 1, + XML_TEXTREADER_MODE_ERROR = 2, + XML_TEXTREADER_MODE_EOF =3, + XML_TEXTREADER_MODE_CLOSED = 4, + XML_TEXTREADER_MODE_READING = 5 +} xmlTextReaderMode; + +/** + * xmlParserProperties: + * + * Some common options to use with xmlTextReaderSetParserProp, but it + * is better to use xmlParserOption and the xmlReaderNewxxx and + * xmlReaderForxxx APIs now. + */ +typedef enum { + XML_PARSER_LOADDTD = 1, + XML_PARSER_DEFAULTATTRS = 2, + XML_PARSER_VALIDATE = 3, + XML_PARSER_SUBST_ENTITIES = 4 +} xmlParserProperties; + +/** + * xmlReaderTypes: + * + * Predefined constants for the different types of nodes. + */ +typedef enum { + XML_READER_TYPE_NONE = 0, + XML_READER_TYPE_ELEMENT = 1, + XML_READER_TYPE_ATTRIBUTE = 2, + XML_READER_TYPE_TEXT = 3, + XML_READER_TYPE_CDATA = 4, + XML_READER_TYPE_ENTITY_REFERENCE = 5, + XML_READER_TYPE_ENTITY = 6, + XML_READER_TYPE_PROCESSING_INSTRUCTION = 7, + XML_READER_TYPE_COMMENT = 8, + XML_READER_TYPE_DOCUMENT = 9, + XML_READER_TYPE_DOCUMENT_TYPE = 10, + XML_READER_TYPE_DOCUMENT_FRAGMENT = 11, + XML_READER_TYPE_NOTATION = 12, + XML_READER_TYPE_WHITESPACE = 13, + XML_READER_TYPE_SIGNIFICANT_WHITESPACE = 14, + XML_READER_TYPE_END_ELEMENT = 15, + XML_READER_TYPE_END_ENTITY = 16, + XML_READER_TYPE_XML_DECLARATION = 17 +} xmlReaderTypes; + +/** + * xmlTextReader: + * + * Structure for an xmlReader context. + */ +typedef struct _xmlTextReader xmlTextReader; + +/** + * xmlTextReaderPtr: + * + * Pointer to an xmlReader context. + */ +typedef xmlTextReader *xmlTextReaderPtr; + +/* + * Constructors & Destructor + */ +XMLPUBFUN xmlTextReaderPtr XMLCALL + xmlNewTextReader (xmlParserInputBufferPtr input, + const char *URI); +XMLPUBFUN xmlTextReaderPtr XMLCALL + xmlNewTextReaderFilename(const char *URI); + +XMLPUBFUN void XMLCALL + xmlFreeTextReader (xmlTextReaderPtr reader); + +XMLPUBFUN int XMLCALL + xmlTextReaderSetup(xmlTextReaderPtr reader, + xmlParserInputBufferPtr input, const char *URL, + const char *encoding, int options); + +/* + * Iterators + */ +XMLPUBFUN int XMLCALL + xmlTextReaderRead (xmlTextReaderPtr reader); + +#ifdef LIBXML_WRITER_ENABLED +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderReadInnerXml(xmlTextReaderPtr reader); + +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderReadOuterXml(xmlTextReaderPtr reader); +#endif + +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderReadString (xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderReadAttributeValue(xmlTextReaderPtr reader); + +/* + * Attributes of the node + */ +XMLPUBFUN int XMLCALL + xmlTextReaderAttributeCount(xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderDepth (xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderHasAttributes(xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderHasValue(xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderIsDefault (xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderNodeType (xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderQuoteChar (xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderReadState (xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderIsNamespaceDecl(xmlTextReaderPtr reader); + +XMLPUBFUN const xmlChar * XMLCALL + xmlTextReaderConstBaseUri (xmlTextReaderPtr reader); +XMLPUBFUN const xmlChar * XMLCALL + xmlTextReaderConstLocalName (xmlTextReaderPtr reader); +XMLPUBFUN const xmlChar * XMLCALL + xmlTextReaderConstName (xmlTextReaderPtr reader); +XMLPUBFUN const xmlChar * XMLCALL + xmlTextReaderConstNamespaceUri(xmlTextReaderPtr reader); +XMLPUBFUN const xmlChar * XMLCALL + xmlTextReaderConstPrefix (xmlTextReaderPtr reader); +XMLPUBFUN const xmlChar * XMLCALL + xmlTextReaderConstXmlLang (xmlTextReaderPtr reader); +XMLPUBFUN const xmlChar * XMLCALL + xmlTextReaderConstString (xmlTextReaderPtr reader, + const xmlChar *str); +XMLPUBFUN const xmlChar * XMLCALL + xmlTextReaderConstValue (xmlTextReaderPtr reader); + +/* + * use the Const version of the routine for + * better performance and simpler code + */ +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderBaseUri (xmlTextReaderPtr reader); +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderLocalName (xmlTextReaderPtr reader); +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderName (xmlTextReaderPtr reader); +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderNamespaceUri(xmlTextReaderPtr reader); +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderPrefix (xmlTextReaderPtr reader); +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderXmlLang (xmlTextReaderPtr reader); +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderValue (xmlTextReaderPtr reader); + +/* + * Methods of the XmlTextReader + */ +XMLPUBFUN int XMLCALL + xmlTextReaderClose (xmlTextReaderPtr reader); +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderGetAttributeNo (xmlTextReaderPtr reader, + int no); +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderGetAttribute (xmlTextReaderPtr reader, + const xmlChar *name); +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderGetAttributeNs (xmlTextReaderPtr reader, + const xmlChar *localName, + const xmlChar *namespaceURI); +XMLPUBFUN xmlParserInputBufferPtr XMLCALL + xmlTextReaderGetRemainder (xmlTextReaderPtr reader); +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderLookupNamespace(xmlTextReaderPtr reader, + const xmlChar *prefix); +XMLPUBFUN int XMLCALL + xmlTextReaderMoveToAttributeNo(xmlTextReaderPtr reader, + int no); +XMLPUBFUN int XMLCALL + xmlTextReaderMoveToAttribute(xmlTextReaderPtr reader, + const xmlChar *name); +XMLPUBFUN int XMLCALL + xmlTextReaderMoveToAttributeNs(xmlTextReaderPtr reader, + const xmlChar *localName, + const xmlChar *namespaceURI); +XMLPUBFUN int XMLCALL + xmlTextReaderMoveToFirstAttribute(xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderMoveToNextAttribute(xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderMoveToElement (xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderNormalization (xmlTextReaderPtr reader); +XMLPUBFUN const xmlChar * XMLCALL + xmlTextReaderConstEncoding (xmlTextReaderPtr reader); + +/* + * Extensions + */ +XMLPUBFUN int XMLCALL + xmlTextReaderSetParserProp (xmlTextReaderPtr reader, + int prop, + int value); +XMLPUBFUN int XMLCALL + xmlTextReaderGetParserProp (xmlTextReaderPtr reader, + int prop); +XMLPUBFUN xmlNodePtr XMLCALL + xmlTextReaderCurrentNode (xmlTextReaderPtr reader); + +XMLPUBFUN int XMLCALL + xmlTextReaderGetParserLineNumber(xmlTextReaderPtr reader); + +XMLPUBFUN int XMLCALL + xmlTextReaderGetParserColumnNumber(xmlTextReaderPtr reader); + +XMLPUBFUN xmlNodePtr XMLCALL + xmlTextReaderPreserve (xmlTextReaderPtr reader); +#ifdef LIBXML_PATTERN_ENABLED +XMLPUBFUN int XMLCALL + xmlTextReaderPreservePattern(xmlTextReaderPtr reader, + const xmlChar *pattern, + const xmlChar **namespaces); +#endif /* LIBXML_PATTERN_ENABLED */ +XMLPUBFUN xmlDocPtr XMLCALL + xmlTextReaderCurrentDoc (xmlTextReaderPtr reader); +XMLPUBFUN xmlNodePtr XMLCALL + xmlTextReaderExpand (xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderNext (xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderNextSibling (xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderIsValid (xmlTextReaderPtr reader); +#ifdef LIBXML_SCHEMAS_ENABLED +XMLPUBFUN int XMLCALL + xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader, + const char *rng); +XMLPUBFUN int XMLCALL + xmlTextReaderRelaxNGValidateCtxt(xmlTextReaderPtr reader, + xmlRelaxNGValidCtxtPtr ctxt, + int options); + +XMLPUBFUN int XMLCALL + xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader, + xmlRelaxNGPtr schema); +XMLPUBFUN int XMLCALL + xmlTextReaderSchemaValidate (xmlTextReaderPtr reader, + const char *xsd); +XMLPUBFUN int XMLCALL + xmlTextReaderSchemaValidateCtxt(xmlTextReaderPtr reader, + xmlSchemaValidCtxtPtr ctxt, + int options); +XMLPUBFUN int XMLCALL + xmlTextReaderSetSchema (xmlTextReaderPtr reader, + xmlSchemaPtr schema); +#endif +XMLPUBFUN const xmlChar * XMLCALL + xmlTextReaderConstXmlVersion(xmlTextReaderPtr reader); +XMLPUBFUN int XMLCALL + xmlTextReaderStandalone (xmlTextReaderPtr reader); + + +/* + * Index lookup + */ +XMLPUBFUN long XMLCALL + xmlTextReaderByteConsumed (xmlTextReaderPtr reader); + +/* + * New more complete APIs for simpler creation and reuse of readers + */ +XMLPUBFUN xmlTextReaderPtr XMLCALL + xmlReaderWalker (xmlDocPtr doc); +XMLPUBFUN xmlTextReaderPtr XMLCALL + xmlReaderForDoc (const xmlChar * cur, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN xmlTextReaderPtr XMLCALL + xmlReaderForFile (const char *filename, + const char *encoding, + int options); +XMLPUBFUN xmlTextReaderPtr XMLCALL + xmlReaderForMemory (const char *buffer, + int size, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN xmlTextReaderPtr XMLCALL + xmlReaderForFd (int fd, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN xmlTextReaderPtr XMLCALL + xmlReaderForIO (xmlInputReadCallback ioread, + xmlInputCloseCallback ioclose, + void *ioctx, + const char *URL, + const char *encoding, + int options); + +XMLPUBFUN int XMLCALL + xmlReaderNewWalker (xmlTextReaderPtr reader, + xmlDocPtr doc); +XMLPUBFUN int XMLCALL + xmlReaderNewDoc (xmlTextReaderPtr reader, + const xmlChar * cur, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN int XMLCALL + xmlReaderNewFile (xmlTextReaderPtr reader, + const char *filename, + const char *encoding, + int options); +XMLPUBFUN int XMLCALL + xmlReaderNewMemory (xmlTextReaderPtr reader, + const char *buffer, + int size, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN int XMLCALL + xmlReaderNewFd (xmlTextReaderPtr reader, + int fd, + const char *URL, + const char *encoding, + int options); +XMLPUBFUN int XMLCALL + xmlReaderNewIO (xmlTextReaderPtr reader, + xmlInputReadCallback ioread, + xmlInputCloseCallback ioclose, + void *ioctx, + const char *URL, + const char *encoding, + int options); +/* + * Error handling extensions + */ +typedef void * xmlTextReaderLocatorPtr; + +/** + * xmlTextReaderErrorFunc: + * @arg: the user argument + * @msg: the message + * @severity: the severity of the error + * @locator: a locator indicating where the error occured + * + * Signature of an error callback from a reader parser + */ +typedef void (XMLCALL *xmlTextReaderErrorFunc)(void *arg, + const char *msg, + xmlParserSeverities severity, + xmlTextReaderLocatorPtr locator); +XMLPUBFUN int XMLCALL + xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator); +XMLPUBFUN xmlChar * XMLCALL + xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator); +XMLPUBFUN void XMLCALL + xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader, + xmlTextReaderErrorFunc f, + void *arg); +XMLPUBFUN void XMLCALL + xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader, + xmlStructuredErrorFunc f, + void *arg); +XMLPUBFUN void XMLCALL + xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader, + xmlTextReaderErrorFunc *f, + void **arg); + +#endif /* LIBXML_READER_ENABLED */ + +#ifdef __cplusplus +} +#endif + +#endif /* __XML_XMLREADER_H__ */ + diff --git a/libxml2/include/libxml/xmlregexp.h b/libxml2/include/libxml/xmlregexp.h new file mode 100644 index 0000000..7009645 --- /dev/null +++ b/libxml2/include/libxml/xmlregexp.h @@ -0,0 +1,222 @@ +/* + * Summary: regular expressions handling + * Description: basic API for libxml regular expressions handling used + * for XML Schemas and validation. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_REGEXP_H__ +#define __XML_REGEXP_H__ + +#include + +#ifdef LIBXML_REGEXP_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlRegexpPtr: + * + * A libxml regular expression, they can actually be far more complex + * thank the POSIX regex expressions. + */ +typedef struct _xmlRegexp xmlRegexp; +typedef xmlRegexp *xmlRegexpPtr; + +/** + * xmlRegExecCtxtPtr: + * + * A libxml progressive regular expression evaluation context + */ +typedef struct _xmlRegExecCtxt xmlRegExecCtxt; +typedef xmlRegExecCtxt *xmlRegExecCtxtPtr; + +#ifdef __cplusplus +} +#endif +#include +#include +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The POSIX like API + */ +XMLPUBFUN xmlRegexpPtr XMLCALL + xmlRegexpCompile (const xmlChar *regexp); +XMLPUBFUN void XMLCALL xmlRegFreeRegexp(xmlRegexpPtr regexp); +XMLPUBFUN int XMLCALL + xmlRegexpExec (xmlRegexpPtr comp, + const xmlChar *value); +XMLPUBFUN void XMLCALL + xmlRegexpPrint (FILE *output, + xmlRegexpPtr regexp); +XMLPUBFUN int XMLCALL + xmlRegexpIsDeterminist(xmlRegexpPtr comp); + +/** + * xmlRegExecCallbacks: + * @exec: the regular expression context + * @token: the current token string + * @transdata: transition data + * @inputdata: input data + * + * Callback function when doing a transition in the automata + */ +typedef void (*xmlRegExecCallbacks) (xmlRegExecCtxtPtr exec, + const xmlChar *token, + void *transdata, + void *inputdata); + +/* + * The progressive API + */ +XMLPUBFUN xmlRegExecCtxtPtr XMLCALL + xmlRegNewExecCtxt (xmlRegexpPtr comp, + xmlRegExecCallbacks callback, + void *data); +XMLPUBFUN void XMLCALL + xmlRegFreeExecCtxt (xmlRegExecCtxtPtr exec); +XMLPUBFUN int XMLCALL + xmlRegExecPushString(xmlRegExecCtxtPtr exec, + const xmlChar *value, + void *data); +XMLPUBFUN int XMLCALL + xmlRegExecPushString2(xmlRegExecCtxtPtr exec, + const xmlChar *value, + const xmlChar *value2, + void *data); + +XMLPUBFUN int XMLCALL + xmlRegExecNextValues(xmlRegExecCtxtPtr exec, + int *nbval, + int *nbneg, + xmlChar **values, + int *terminal); +XMLPUBFUN int XMLCALL + xmlRegExecErrInfo (xmlRegExecCtxtPtr exec, + const xmlChar **string, + int *nbval, + int *nbneg, + xmlChar **values, + int *terminal); +#ifdef LIBXML_EXPR_ENABLED +/* + * Formal regular expression handling + * Its goal is to do some formal work on content models + */ + +/* expressions are used within a context */ +typedef struct _xmlExpCtxt xmlExpCtxt; +typedef xmlExpCtxt *xmlExpCtxtPtr; + +XMLPUBFUN void XMLCALL + xmlExpFreeCtxt (xmlExpCtxtPtr ctxt); +XMLPUBFUN xmlExpCtxtPtr XMLCALL + xmlExpNewCtxt (int maxNodes, + xmlDictPtr dict); + +XMLPUBFUN int XMLCALL + xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt); + +/* Expressions are trees but the tree is opaque */ +typedef struct _xmlExpNode xmlExpNode; +typedef xmlExpNode *xmlExpNodePtr; + +typedef enum { + XML_EXP_EMPTY = 0, + XML_EXP_FORBID = 1, + XML_EXP_ATOM = 2, + XML_EXP_SEQ = 3, + XML_EXP_OR = 4, + XML_EXP_COUNT = 5 +} xmlExpNodeType; + +/* + * 2 core expressions shared by all for the empty language set + * and for the set with just the empty token + */ +XMLPUBVAR xmlExpNodePtr forbiddenExp; +XMLPUBVAR xmlExpNodePtr emptyExp; + +/* + * Expressions are reference counted internally + */ +XMLPUBFUN void XMLCALL + xmlExpFree (xmlExpCtxtPtr ctxt, + xmlExpNodePtr expr); +XMLPUBFUN void XMLCALL + xmlExpRef (xmlExpNodePtr expr); + +/* + * constructors can be either manual or from a string + */ +XMLPUBFUN xmlExpNodePtr XMLCALL + xmlExpParse (xmlExpCtxtPtr ctxt, + const char *expr); +XMLPUBFUN xmlExpNodePtr XMLCALL + xmlExpNewAtom (xmlExpCtxtPtr ctxt, + const xmlChar *name, + int len); +XMLPUBFUN xmlExpNodePtr XMLCALL + xmlExpNewOr (xmlExpCtxtPtr ctxt, + xmlExpNodePtr left, + xmlExpNodePtr right); +XMLPUBFUN xmlExpNodePtr XMLCALL + xmlExpNewSeq (xmlExpCtxtPtr ctxt, + xmlExpNodePtr left, + xmlExpNodePtr right); +XMLPUBFUN xmlExpNodePtr XMLCALL + xmlExpNewRange (xmlExpCtxtPtr ctxt, + xmlExpNodePtr subset, + int min, + int max); +/* + * The really interesting APIs + */ +XMLPUBFUN int XMLCALL + xmlExpIsNillable(xmlExpNodePtr expr); +XMLPUBFUN int XMLCALL + xmlExpMaxToken (xmlExpNodePtr expr); +XMLPUBFUN int XMLCALL + xmlExpGetLanguage(xmlExpCtxtPtr ctxt, + xmlExpNodePtr expr, + const xmlChar**langList, + int len); +XMLPUBFUN int XMLCALL + xmlExpGetStart (xmlExpCtxtPtr ctxt, + xmlExpNodePtr expr, + const xmlChar**tokList, + int len); +XMLPUBFUN xmlExpNodePtr XMLCALL + xmlExpStringDerive(xmlExpCtxtPtr ctxt, + xmlExpNodePtr expr, + const xmlChar *str, + int len); +XMLPUBFUN xmlExpNodePtr XMLCALL + xmlExpExpDerive (xmlExpCtxtPtr ctxt, + xmlExpNodePtr expr, + xmlExpNodePtr sub); +XMLPUBFUN int XMLCALL + xmlExpSubsume (xmlExpCtxtPtr ctxt, + xmlExpNodePtr expr, + xmlExpNodePtr sub); +XMLPUBFUN void XMLCALL + xmlExpDump (xmlBufferPtr buf, + xmlExpNodePtr expr); +#endif /* LIBXML_EXPR_ENABLED */ +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_REGEXP_ENABLED */ + +#endif /*__XML_REGEXP_H__ */ diff --git a/libxml2/include/libxml/xmlsave.h b/libxml2/include/libxml/xmlsave.h new file mode 100644 index 0000000..fb329b2 --- /dev/null +++ b/libxml2/include/libxml/xmlsave.h @@ -0,0 +1,88 @@ +/* + * Summary: the XML document serializer + * Description: API to save document or subtree of document + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_XMLSAVE_H__ +#define __XML_XMLSAVE_H__ + +#include +#include +#include +#include + +#ifdef LIBXML_OUTPUT_ENABLED +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlSaveOption: + * + * This is the set of XML save options that can be passed down + * to the xmlSaveToFd() and similar calls. + */ +typedef enum { + XML_SAVE_FORMAT = 1<<0, /* format save output */ + XML_SAVE_NO_DECL = 1<<1, /* drop the xml declaration */ + XML_SAVE_NO_EMPTY = 1<<2, /* no empty tags */ + XML_SAVE_NO_XHTML = 1<<3, /* disable XHTML1 specific rules */ + XML_SAVE_XHTML = 1<<4, /* force XHTML1 specific rules */ + XML_SAVE_AS_XML = 1<<5, /* force XML serialization on HTML doc */ + XML_SAVE_AS_HTML = 1<<6, /* force HTML serialization on XML doc */ + XML_SAVE_WSNONSIG = 1<<7 /* format with non-significant whitespace */ +} xmlSaveOption; + + +typedef struct _xmlSaveCtxt xmlSaveCtxt; +typedef xmlSaveCtxt *xmlSaveCtxtPtr; + +XMLPUBFUN xmlSaveCtxtPtr XMLCALL + xmlSaveToFd (int fd, + const char *encoding, + int options); +XMLPUBFUN xmlSaveCtxtPtr XMLCALL + xmlSaveToFilename (const char *filename, + const char *encoding, + int options); + +XMLPUBFUN xmlSaveCtxtPtr XMLCALL + xmlSaveToBuffer (xmlBufferPtr buffer, + const char *encoding, + int options); + +XMLPUBFUN xmlSaveCtxtPtr XMLCALL + xmlSaveToIO (xmlOutputWriteCallback iowrite, + xmlOutputCloseCallback ioclose, + void *ioctx, + const char *encoding, + int options); + +XMLPUBFUN long XMLCALL + xmlSaveDoc (xmlSaveCtxtPtr ctxt, + xmlDocPtr doc); +XMLPUBFUN long XMLCALL + xmlSaveTree (xmlSaveCtxtPtr ctxt, + xmlNodePtr node); + +XMLPUBFUN int XMLCALL + xmlSaveFlush (xmlSaveCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlSaveClose (xmlSaveCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlSaveSetEscape (xmlSaveCtxtPtr ctxt, + xmlCharEncodingOutputFunc escape); +XMLPUBFUN int XMLCALL + xmlSaveSetAttrEscape (xmlSaveCtxtPtr ctxt, + xmlCharEncodingOutputFunc escape); +#ifdef __cplusplus +} +#endif +#endif /* LIBXML_OUTPUT_ENABLED */ +#endif /* __XML_XMLSAVE_H__ */ + + diff --git a/libxml2/include/libxml/xmlschemas.h b/libxml2/include/libxml/xmlschemas.h new file mode 100644 index 0000000..97930c7 --- /dev/null +++ b/libxml2/include/libxml/xmlschemas.h @@ -0,0 +1,246 @@ +/* + * Summary: incomplete XML Schemas structure implementation + * Description: interface to the XML Schemas handling and schema validity + * checking, it is incomplete right now. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + + +#ifndef __XML_SCHEMA_H__ +#define __XML_SCHEMA_H__ + +#include + +#ifdef LIBXML_SCHEMAS_ENABLED + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * This error codes are obsolete; not used any more. + */ +typedef enum { + XML_SCHEMAS_ERR_OK = 0, + XML_SCHEMAS_ERR_NOROOT = 1, + XML_SCHEMAS_ERR_UNDECLAREDELEM, + XML_SCHEMAS_ERR_NOTTOPLEVEL, + XML_SCHEMAS_ERR_MISSING, + XML_SCHEMAS_ERR_WRONGELEM, + XML_SCHEMAS_ERR_NOTYPE, + XML_SCHEMAS_ERR_NOROLLBACK, + XML_SCHEMAS_ERR_ISABSTRACT, + XML_SCHEMAS_ERR_NOTEMPTY, + XML_SCHEMAS_ERR_ELEMCONT, + XML_SCHEMAS_ERR_HAVEDEFAULT, + XML_SCHEMAS_ERR_NOTNILLABLE, + XML_SCHEMAS_ERR_EXTRACONTENT, + XML_SCHEMAS_ERR_INVALIDATTR, + XML_SCHEMAS_ERR_INVALIDELEM, + XML_SCHEMAS_ERR_NOTDETERMINIST, + XML_SCHEMAS_ERR_CONSTRUCT, + XML_SCHEMAS_ERR_INTERNAL, + XML_SCHEMAS_ERR_NOTSIMPLE, + XML_SCHEMAS_ERR_ATTRUNKNOWN, + XML_SCHEMAS_ERR_ATTRINVALID, + XML_SCHEMAS_ERR_VALUE, + XML_SCHEMAS_ERR_FACET, + XML_SCHEMAS_ERR_, + XML_SCHEMAS_ERR_XXX +} xmlSchemaValidError; + +/* +* ATTENTION: Change xmlSchemaSetValidOptions's check +* for invalid values, if adding to the validation +* options below. +*/ +/** + * xmlSchemaValidOption: + * + * This is the set of XML Schema validation options. + */ +typedef enum { + XML_SCHEMA_VAL_VC_I_CREATE = 1<<0 + /* Default/fixed: create an attribute node + * or an element's text node on the instance. + */ +} xmlSchemaValidOption; + +/* + XML_SCHEMA_VAL_XSI_ASSEMBLE = 1<<1, + * assemble schemata using + * xsi:schemaLocation and + * xsi:noNamespaceSchemaLocation +*/ + +/** + * The schemas related types are kept internal + */ +typedef struct _xmlSchema xmlSchema; +typedef xmlSchema *xmlSchemaPtr; + +/** + * xmlSchemaValidityErrorFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of an error callback from an XSD validation + */ +typedef void (XMLCDECL *xmlSchemaValidityErrorFunc) + (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); + +/** + * xmlSchemaValidityWarningFunc: + * @ctx: the validation context + * @msg: the message + * @...: extra arguments + * + * Signature of a warning callback from an XSD validation + */ +typedef void (XMLCDECL *xmlSchemaValidityWarningFunc) + (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); + +/** + * A schemas validation context + */ +typedef struct _xmlSchemaParserCtxt xmlSchemaParserCtxt; +typedef xmlSchemaParserCtxt *xmlSchemaParserCtxtPtr; + +typedef struct _xmlSchemaValidCtxt xmlSchemaValidCtxt; +typedef xmlSchemaValidCtxt *xmlSchemaValidCtxtPtr; + +/** + * xmlSchemaValidityLocatorFunc: + * @ctx: user provided context + * @file: returned file information + * @line: returned line information + * + * A schemas validation locator, a callback called by the validator. + * This is used when file or node informations are not available + * to find out what file and line number are affected + * + * Returns: 0 in case of success and -1 in case of error + */ + +typedef int (XMLCDECL *xmlSchemaValidityLocatorFunc) (void *ctx, + const char **file, unsigned long *line); + +/* + * Interfaces for parsing. + */ +XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL + xmlSchemaNewParserCtxt (const char *URL); +XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL + xmlSchemaNewMemParserCtxt (const char *buffer, + int size); +XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL + xmlSchemaNewDocParserCtxt (xmlDocPtr doc); +XMLPUBFUN void XMLCALL + xmlSchemaFreeParserCtxt (xmlSchemaParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlSchemaSetParserErrors (xmlSchemaParserCtxtPtr ctxt, + xmlSchemaValidityErrorFunc err, + xmlSchemaValidityWarningFunc warn, + void *ctx); +XMLPUBFUN void XMLCALL + xmlSchemaSetParserStructuredErrors(xmlSchemaParserCtxtPtr ctxt, + xmlStructuredErrorFunc serror, + void *ctx); +XMLPUBFUN int XMLCALL + xmlSchemaGetParserErrors(xmlSchemaParserCtxtPtr ctxt, + xmlSchemaValidityErrorFunc * err, + xmlSchemaValidityWarningFunc * warn, + void **ctx); +XMLPUBFUN int XMLCALL + xmlSchemaIsValid (xmlSchemaValidCtxtPtr ctxt); + +XMLPUBFUN xmlSchemaPtr XMLCALL + xmlSchemaParse (xmlSchemaParserCtxtPtr ctxt); +XMLPUBFUN void XMLCALL + xmlSchemaFree (xmlSchemaPtr schema); +#ifdef LIBXML_OUTPUT_ENABLED +XMLPUBFUN void XMLCALL + xmlSchemaDump (FILE *output, + xmlSchemaPtr schema); +#endif /* LIBXML_OUTPUT_ENABLED */ +/* + * Interfaces for validating + */ +XMLPUBFUN void XMLCALL + xmlSchemaSetValidErrors (xmlSchemaValidCtxtPtr ctxt, + xmlSchemaValidityErrorFunc err, + xmlSchemaValidityWarningFunc warn, + void *ctx); +XMLPUBFUN void XMLCALL + xmlSchemaSetValidStructuredErrors(xmlSchemaValidCtxtPtr ctxt, + xmlStructuredErrorFunc serror, + void *ctx); +XMLPUBFUN int XMLCALL + xmlSchemaGetValidErrors (xmlSchemaValidCtxtPtr ctxt, + xmlSchemaValidityErrorFunc *err, + xmlSchemaValidityWarningFunc *warn, + void **ctx); +XMLPUBFUN int XMLCALL + xmlSchemaSetValidOptions (xmlSchemaValidCtxtPtr ctxt, + int options); +XMLPUBFUN void XMLCALL + xmlSchemaValidateSetFilename(xmlSchemaValidCtxtPtr vctxt, + const char *filename); +XMLPUBFUN int XMLCALL + xmlSchemaValidCtxtGetOptions(xmlSchemaValidCtxtPtr ctxt); + +XMLPUBFUN xmlSchemaValidCtxtPtr XMLCALL + xmlSchemaNewValidCtxt (xmlSchemaPtr schema); +XMLPUBFUN void XMLCALL + xmlSchemaFreeValidCtxt (xmlSchemaValidCtxtPtr ctxt); +XMLPUBFUN int XMLCALL + xmlSchemaValidateDoc (xmlSchemaValidCtxtPtr ctxt, + xmlDocPtr instance); +XMLPUBFUN int XMLCALL + xmlSchemaValidateOneElement (xmlSchemaValidCtxtPtr ctxt, + xmlNodePtr elem); +XMLPUBFUN int XMLCALL + xmlSchemaValidateStream (xmlSchemaValidCtxtPtr ctxt, + xmlParserInputBufferPtr input, + xmlCharEncoding enc, + xmlSAXHandlerPtr sax, + void *user_data); +XMLPUBFUN int XMLCALL + xmlSchemaValidateFile (xmlSchemaValidCtxtPtr ctxt, + const char * filename, + int options); + +XMLPUBFUN xmlParserCtxtPtr XMLCALL + xmlSchemaValidCtxtGetParserCtxt(xmlSchemaValidCtxtPtr ctxt); + +/* + * Interface to insert Schemas SAX validation in a SAX stream + */ +typedef struct _xmlSchemaSAXPlug xmlSchemaSAXPlugStruct; +typedef xmlSchemaSAXPlugStruct *xmlSchemaSAXPlugPtr; + +XMLPUBFUN xmlSchemaSAXPlugPtr XMLCALL + xmlSchemaSAXPlug (xmlSchemaValidCtxtPtr ctxt, + xmlSAXHandlerPtr *sax, + void **user_data); +XMLPUBFUN int XMLCALL + xmlSchemaSAXUnplug (xmlSchemaSAXPlugPtr plug); + + +XMLPUBFUN void XMLCALL + xmlSchemaValidateSetLocator (xmlSchemaValidCtxtPtr vctxt, + xmlSchemaValidityLocatorFunc f, + void *ctxt); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_SCHEMAS_ENABLED */ +#endif /* __XML_SCHEMA_H__ */ diff --git a/libxml2/include/libxml/xmlschemastypes.h b/libxml2/include/libxml/xmlschemastypes.h new file mode 100644 index 0000000..35d48d4 --- /dev/null +++ b/libxml2/include/libxml/xmlschemastypes.h @@ -0,0 +1,151 @@ +/* + * Summary: implementation of XML Schema Datatypes + * Description: module providing the XML Schema Datatypes implementation + * both definition and validity checking + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + + +#ifndef __XML_SCHEMA_TYPES_H__ +#define __XML_SCHEMA_TYPES_H__ + +#include + +#ifdef LIBXML_SCHEMAS_ENABLED + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + XML_SCHEMA_WHITESPACE_UNKNOWN = 0, + XML_SCHEMA_WHITESPACE_PRESERVE = 1, + XML_SCHEMA_WHITESPACE_REPLACE = 2, + XML_SCHEMA_WHITESPACE_COLLAPSE = 3 +} xmlSchemaWhitespaceValueType; + +XMLPUBFUN void XMLCALL + xmlSchemaInitTypes (void); +XMLPUBFUN void XMLCALL + xmlSchemaCleanupTypes (void); +XMLPUBFUN xmlSchemaTypePtr XMLCALL + xmlSchemaGetPredefinedType (const xmlChar *name, + const xmlChar *ns); +XMLPUBFUN int XMLCALL + xmlSchemaValidatePredefinedType (xmlSchemaTypePtr type, + const xmlChar *value, + xmlSchemaValPtr *val); +XMLPUBFUN int XMLCALL + xmlSchemaValPredefTypeNode (xmlSchemaTypePtr type, + const xmlChar *value, + xmlSchemaValPtr *val, + xmlNodePtr node); +XMLPUBFUN int XMLCALL + xmlSchemaValidateFacet (xmlSchemaTypePtr base, + xmlSchemaFacetPtr facet, + const xmlChar *value, + xmlSchemaValPtr val); +XMLPUBFUN int XMLCALL + xmlSchemaValidateFacetWhtsp (xmlSchemaFacetPtr facet, + xmlSchemaWhitespaceValueType fws, + xmlSchemaValType valType, + const xmlChar *value, + xmlSchemaValPtr val, + xmlSchemaWhitespaceValueType ws); +XMLPUBFUN void XMLCALL + xmlSchemaFreeValue (xmlSchemaValPtr val); +XMLPUBFUN xmlSchemaFacetPtr XMLCALL + xmlSchemaNewFacet (void); +XMLPUBFUN int XMLCALL + xmlSchemaCheckFacet (xmlSchemaFacetPtr facet, + xmlSchemaTypePtr typeDecl, + xmlSchemaParserCtxtPtr ctxt, + const xmlChar *name); +XMLPUBFUN void XMLCALL + xmlSchemaFreeFacet (xmlSchemaFacetPtr facet); +XMLPUBFUN int XMLCALL + xmlSchemaCompareValues (xmlSchemaValPtr x, + xmlSchemaValPtr y); +XMLPUBFUN xmlSchemaTypePtr XMLCALL + xmlSchemaGetBuiltInListSimpleTypeItemType (xmlSchemaTypePtr type); +XMLPUBFUN int XMLCALL + xmlSchemaValidateListSimpleTypeFacet (xmlSchemaFacetPtr facet, + const xmlChar *value, + unsigned long actualLen, + unsigned long *expectedLen); +XMLPUBFUN xmlSchemaTypePtr XMLCALL + xmlSchemaGetBuiltInType (xmlSchemaValType type); +XMLPUBFUN int XMLCALL + xmlSchemaIsBuiltInTypeFacet (xmlSchemaTypePtr type, + int facetType); +XMLPUBFUN xmlChar * XMLCALL + xmlSchemaCollapseString (const xmlChar *value); +XMLPUBFUN xmlChar * XMLCALL + xmlSchemaWhiteSpaceReplace (const xmlChar *value); +XMLPUBFUN unsigned long XMLCALL + xmlSchemaGetFacetValueAsULong (xmlSchemaFacetPtr facet); +XMLPUBFUN int XMLCALL + xmlSchemaValidateLengthFacet (xmlSchemaTypePtr type, + xmlSchemaFacetPtr facet, + const xmlChar *value, + xmlSchemaValPtr val, + unsigned long *length); +XMLPUBFUN int XMLCALL + xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet, + xmlSchemaValType valType, + const xmlChar *value, + xmlSchemaValPtr val, + unsigned long *length, + xmlSchemaWhitespaceValueType ws); +XMLPUBFUN int XMLCALL + xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type, + const xmlChar *value, + xmlSchemaValPtr *val, + xmlNodePtr node); +XMLPUBFUN int XMLCALL + xmlSchemaGetCanonValue (xmlSchemaValPtr val, + const xmlChar **retValue); +XMLPUBFUN int XMLCALL + xmlSchemaGetCanonValueWhtsp (xmlSchemaValPtr val, + const xmlChar **retValue, + xmlSchemaWhitespaceValueType ws); +XMLPUBFUN int XMLCALL + xmlSchemaValueAppend (xmlSchemaValPtr prev, + xmlSchemaValPtr cur); +XMLPUBFUN xmlSchemaValPtr XMLCALL + xmlSchemaValueGetNext (xmlSchemaValPtr cur); +XMLPUBFUN const xmlChar * XMLCALL + xmlSchemaValueGetAsString (xmlSchemaValPtr val); +XMLPUBFUN int XMLCALL + xmlSchemaValueGetAsBoolean (xmlSchemaValPtr val); +XMLPUBFUN xmlSchemaValPtr XMLCALL + xmlSchemaNewStringValue (xmlSchemaValType type, + const xmlChar *value); +XMLPUBFUN xmlSchemaValPtr XMLCALL + xmlSchemaNewNOTATIONValue (const xmlChar *name, + const xmlChar *ns); +XMLPUBFUN xmlSchemaValPtr XMLCALL + xmlSchemaNewQNameValue (const xmlChar *namespaceName, + const xmlChar *localName); +XMLPUBFUN int XMLCALL + xmlSchemaCompareValuesWhtsp (xmlSchemaValPtr x, + xmlSchemaWhitespaceValueType xws, + xmlSchemaValPtr y, + xmlSchemaWhitespaceValueType yws); +XMLPUBFUN xmlSchemaValPtr XMLCALL + xmlSchemaCopyValue (xmlSchemaValPtr val); +XMLPUBFUN xmlSchemaValType XMLCALL + xmlSchemaGetValType (xmlSchemaValPtr val); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_SCHEMAS_ENABLED */ +#endif /* __XML_SCHEMA_TYPES_H__ */ diff --git a/libxml2/include/libxml/xmlstring.h b/libxml2/include/libxml/xmlstring.h new file mode 100644 index 0000000..2d0b2d1 --- /dev/null +++ b/libxml2/include/libxml/xmlstring.h @@ -0,0 +1,140 @@ +/* + * Summary: set of routines to process strings + * Description: type and interfaces needed for the internal string handling + * of the library, especially UTF8 processing. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_STRING_H__ +#define __XML_STRING_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * xmlChar: + * + * This is a basic byte in an UTF-8 encoded string. + * It's unsigned allowing to pinpoint case where char * are assigned + * to xmlChar * (possibly making serialization back impossible). + */ +typedef unsigned char xmlChar; + +/** + * BAD_CAST: + * + * Macro to cast a string to an xmlChar * when one know its safe. + */ +#define BAD_CAST (xmlChar *) + +/* + * xmlChar handling + */ +XMLPUBFUN xmlChar * XMLCALL + xmlStrdup (const xmlChar *cur); +XMLPUBFUN xmlChar * XMLCALL + xmlStrndup (const xmlChar *cur, + int len); +XMLPUBFUN xmlChar * XMLCALL + xmlCharStrndup (const char *cur, + int len); +XMLPUBFUN xmlChar * XMLCALL + xmlCharStrdup (const char *cur); +XMLPUBFUN xmlChar * XMLCALL + xmlStrsub (const xmlChar *str, + int start, + int len); +XMLPUBFUN const xmlChar * XMLCALL + xmlStrchr (const xmlChar *str, + xmlChar val); +XMLPUBFUN const xmlChar * XMLCALL + xmlStrstr (const xmlChar *str, + const xmlChar *val); +XMLPUBFUN const xmlChar * XMLCALL + xmlStrcasestr (const xmlChar *str, + const xmlChar *val); +XMLPUBFUN int XMLCALL + xmlStrcmp (const xmlChar *str1, + const xmlChar *str2); +XMLPUBFUN int XMLCALL + xmlStrncmp (const xmlChar *str1, + const xmlChar *str2, + int len); +XMLPUBFUN int XMLCALL + xmlStrcasecmp (const xmlChar *str1, + const xmlChar *str2); +XMLPUBFUN int XMLCALL + xmlStrncasecmp (const xmlChar *str1, + const xmlChar *str2, + int len); +XMLPUBFUN int XMLCALL + xmlStrEqual (const xmlChar *str1, + const xmlChar *str2); +XMLPUBFUN int XMLCALL + xmlStrQEqual (const xmlChar *pref, + const xmlChar *name, + const xmlChar *str); +XMLPUBFUN int XMLCALL + xmlStrlen (const xmlChar *str); +XMLPUBFUN xmlChar * XMLCALL + xmlStrcat (xmlChar *cur, + const xmlChar *add); +XMLPUBFUN xmlChar * XMLCALL + xmlStrncat (xmlChar *cur, + const xmlChar *add, + int len); +XMLPUBFUN xmlChar * XMLCALL + xmlStrncatNew (const xmlChar *str1, + const xmlChar *str2, + int len); +XMLPUBFUN int XMLCALL + xmlStrPrintf (xmlChar *buf, + int len, + const char *msg, + ...) LIBXML_ATTR_FORMAT(3,4); +XMLPUBFUN int XMLCALL + xmlStrVPrintf (xmlChar *buf, + int len, + const char *msg, + va_list ap) LIBXML_ATTR_FORMAT(3,0); + +XMLPUBFUN int XMLCALL + xmlGetUTF8Char (const unsigned char *utf, + int *len); +XMLPUBFUN int XMLCALL + xmlCheckUTF8 (const unsigned char *utf); +XMLPUBFUN int XMLCALL + xmlUTF8Strsize (const xmlChar *utf, + int len); +XMLPUBFUN xmlChar * XMLCALL + xmlUTF8Strndup (const xmlChar *utf, + int len); +XMLPUBFUN const xmlChar * XMLCALL + xmlUTF8Strpos (const xmlChar *utf, + int pos); +XMLPUBFUN int XMLCALL + xmlUTF8Strloc (const xmlChar *utf, + const xmlChar *utfchar); +XMLPUBFUN xmlChar * XMLCALL + xmlUTF8Strsub (const xmlChar *utf, + int start, + int len); +XMLPUBFUN int XMLCALL + xmlUTF8Strlen (const xmlChar *utf); +XMLPUBFUN int XMLCALL + xmlUTF8Size (const xmlChar *utf); +XMLPUBFUN int XMLCALL + xmlUTF8Charcmp (const xmlChar *utf1, + const xmlChar *utf2); + +#ifdef __cplusplus +} +#endif +#endif /* __XML_STRING_H__ */ diff --git a/libxml2/include/libxml/xmlunicode.h b/libxml2/include/libxml/xmlunicode.h new file mode 100644 index 0000000..01ac8b6 --- /dev/null +++ b/libxml2/include/libxml/xmlunicode.h @@ -0,0 +1,202 @@ +/* + * Summary: Unicode character APIs + * Description: API for the Unicode character APIs + * + * This file is automatically generated from the + * UCS description files of the Unicode Character Database + * http://www.unicode.org/Public/4.0-Update1/UCD-4.0.1.html + * using the genUnicode.py Python script. + * + * Generation date: Mon Mar 27 11:09:52 2006 + * Sources: Blocks-4.0.1.txt UnicodeData-4.0.1.txt + * Author: Daniel Veillard + */ + +#ifndef __XML_UNICODE_H__ +#define __XML_UNICODE_H__ + +#include + +#ifdef LIBXML_UNICODE_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif + +XMLPUBFUN int XMLCALL xmlUCSIsAegeanNumbers (int code); +XMLPUBFUN int XMLCALL xmlUCSIsAlphabeticPresentationForms (int code); +XMLPUBFUN int XMLCALL xmlUCSIsArabic (int code); +XMLPUBFUN int XMLCALL xmlUCSIsArabicPresentationFormsA (int code); +XMLPUBFUN int XMLCALL xmlUCSIsArabicPresentationFormsB (int code); +XMLPUBFUN int XMLCALL xmlUCSIsArmenian (int code); +XMLPUBFUN int XMLCALL xmlUCSIsArrows (int code); +XMLPUBFUN int XMLCALL xmlUCSIsBasicLatin (int code); +XMLPUBFUN int XMLCALL xmlUCSIsBengali (int code); +XMLPUBFUN int XMLCALL xmlUCSIsBlockElements (int code); +XMLPUBFUN int XMLCALL xmlUCSIsBopomofo (int code); +XMLPUBFUN int XMLCALL xmlUCSIsBopomofoExtended (int code); +XMLPUBFUN int XMLCALL xmlUCSIsBoxDrawing (int code); +XMLPUBFUN int XMLCALL xmlUCSIsBraillePatterns (int code); +XMLPUBFUN int XMLCALL xmlUCSIsBuhid (int code); +XMLPUBFUN int XMLCALL xmlUCSIsByzantineMusicalSymbols (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibility (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityForms (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityIdeographs (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityIdeographsSupplement (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCJKRadicalsSupplement (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCJKSymbolsandPunctuation (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographs (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographsExtensionA (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographsExtensionB (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCherokee (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCombiningDiacriticalMarks (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCombiningDiacriticalMarksforSymbols (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCombiningHalfMarks (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCombiningMarksforSymbols (int code); +XMLPUBFUN int XMLCALL xmlUCSIsControlPictures (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCurrencySymbols (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCypriotSyllabary (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCyrillic (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCyrillicSupplement (int code); +XMLPUBFUN int XMLCALL xmlUCSIsDeseret (int code); +XMLPUBFUN int XMLCALL xmlUCSIsDevanagari (int code); +XMLPUBFUN int XMLCALL xmlUCSIsDingbats (int code); +XMLPUBFUN int XMLCALL xmlUCSIsEnclosedAlphanumerics (int code); +XMLPUBFUN int XMLCALL xmlUCSIsEnclosedCJKLettersandMonths (int code); +XMLPUBFUN int XMLCALL xmlUCSIsEthiopic (int code); +XMLPUBFUN int XMLCALL xmlUCSIsGeneralPunctuation (int code); +XMLPUBFUN int XMLCALL xmlUCSIsGeometricShapes (int code); +XMLPUBFUN int XMLCALL xmlUCSIsGeorgian (int code); +XMLPUBFUN int XMLCALL xmlUCSIsGothic (int code); +XMLPUBFUN int XMLCALL xmlUCSIsGreek (int code); +XMLPUBFUN int XMLCALL xmlUCSIsGreekExtended (int code); +XMLPUBFUN int XMLCALL xmlUCSIsGreekandCoptic (int code); +XMLPUBFUN int XMLCALL xmlUCSIsGujarati (int code); +XMLPUBFUN int XMLCALL xmlUCSIsGurmukhi (int code); +XMLPUBFUN int XMLCALL xmlUCSIsHalfwidthandFullwidthForms (int code); +XMLPUBFUN int XMLCALL xmlUCSIsHangulCompatibilityJamo (int code); +XMLPUBFUN int XMLCALL xmlUCSIsHangulJamo (int code); +XMLPUBFUN int XMLCALL xmlUCSIsHangulSyllables (int code); +XMLPUBFUN int XMLCALL xmlUCSIsHanunoo (int code); +XMLPUBFUN int XMLCALL xmlUCSIsHebrew (int code); +XMLPUBFUN int XMLCALL xmlUCSIsHighPrivateUseSurrogates (int code); +XMLPUBFUN int XMLCALL xmlUCSIsHighSurrogates (int code); +XMLPUBFUN int XMLCALL xmlUCSIsHiragana (int code); +XMLPUBFUN int XMLCALL xmlUCSIsIPAExtensions (int code); +XMLPUBFUN int XMLCALL xmlUCSIsIdeographicDescriptionCharacters (int code); +XMLPUBFUN int XMLCALL xmlUCSIsKanbun (int code); +XMLPUBFUN int XMLCALL xmlUCSIsKangxiRadicals (int code); +XMLPUBFUN int XMLCALL xmlUCSIsKannada (int code); +XMLPUBFUN int XMLCALL xmlUCSIsKatakana (int code); +XMLPUBFUN int XMLCALL xmlUCSIsKatakanaPhoneticExtensions (int code); +XMLPUBFUN int XMLCALL xmlUCSIsKhmer (int code); +XMLPUBFUN int XMLCALL xmlUCSIsKhmerSymbols (int code); +XMLPUBFUN int XMLCALL xmlUCSIsLao (int code); +XMLPUBFUN int XMLCALL xmlUCSIsLatin1Supplement (int code); +XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedA (int code); +XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedB (int code); +XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedAdditional (int code); +XMLPUBFUN int XMLCALL xmlUCSIsLetterlikeSymbols (int code); +XMLPUBFUN int XMLCALL xmlUCSIsLimbu (int code); +XMLPUBFUN int XMLCALL xmlUCSIsLinearBIdeograms (int code); +XMLPUBFUN int XMLCALL xmlUCSIsLinearBSyllabary (int code); +XMLPUBFUN int XMLCALL xmlUCSIsLowSurrogates (int code); +XMLPUBFUN int XMLCALL xmlUCSIsMalayalam (int code); +XMLPUBFUN int XMLCALL xmlUCSIsMathematicalAlphanumericSymbols (int code); +XMLPUBFUN int XMLCALL xmlUCSIsMathematicalOperators (int code); +XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousMathematicalSymbolsA (int code); +XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousMathematicalSymbolsB (int code); +XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousSymbols (int code); +XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousSymbolsandArrows (int code); +XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousTechnical (int code); +XMLPUBFUN int XMLCALL xmlUCSIsMongolian (int code); +XMLPUBFUN int XMLCALL xmlUCSIsMusicalSymbols (int code); +XMLPUBFUN int XMLCALL xmlUCSIsMyanmar (int code); +XMLPUBFUN int XMLCALL xmlUCSIsNumberForms (int code); +XMLPUBFUN int XMLCALL xmlUCSIsOgham (int code); +XMLPUBFUN int XMLCALL xmlUCSIsOldItalic (int code); +XMLPUBFUN int XMLCALL xmlUCSIsOpticalCharacterRecognition (int code); +XMLPUBFUN int XMLCALL xmlUCSIsOriya (int code); +XMLPUBFUN int XMLCALL xmlUCSIsOsmanya (int code); +XMLPUBFUN int XMLCALL xmlUCSIsPhoneticExtensions (int code); +XMLPUBFUN int XMLCALL xmlUCSIsPrivateUse (int code); +XMLPUBFUN int XMLCALL xmlUCSIsPrivateUseArea (int code); +XMLPUBFUN int XMLCALL xmlUCSIsRunic (int code); +XMLPUBFUN int XMLCALL xmlUCSIsShavian (int code); +XMLPUBFUN int XMLCALL xmlUCSIsSinhala (int code); +XMLPUBFUN int XMLCALL xmlUCSIsSmallFormVariants (int code); +XMLPUBFUN int XMLCALL xmlUCSIsSpacingModifierLetters (int code); +XMLPUBFUN int XMLCALL xmlUCSIsSpecials (int code); +XMLPUBFUN int XMLCALL xmlUCSIsSuperscriptsandSubscripts (int code); +XMLPUBFUN int XMLCALL xmlUCSIsSupplementalArrowsA (int code); +XMLPUBFUN int XMLCALL xmlUCSIsSupplementalArrowsB (int code); +XMLPUBFUN int XMLCALL xmlUCSIsSupplementalMathematicalOperators (int code); +XMLPUBFUN int XMLCALL xmlUCSIsSupplementaryPrivateUseAreaA (int code); +XMLPUBFUN int XMLCALL xmlUCSIsSupplementaryPrivateUseAreaB (int code); +XMLPUBFUN int XMLCALL xmlUCSIsSyriac (int code); +XMLPUBFUN int XMLCALL xmlUCSIsTagalog (int code); +XMLPUBFUN int XMLCALL xmlUCSIsTagbanwa (int code); +XMLPUBFUN int XMLCALL xmlUCSIsTags (int code); +XMLPUBFUN int XMLCALL xmlUCSIsTaiLe (int code); +XMLPUBFUN int XMLCALL xmlUCSIsTaiXuanJingSymbols (int code); +XMLPUBFUN int XMLCALL xmlUCSIsTamil (int code); +XMLPUBFUN int XMLCALL xmlUCSIsTelugu (int code); +XMLPUBFUN int XMLCALL xmlUCSIsThaana (int code); +XMLPUBFUN int XMLCALL xmlUCSIsThai (int code); +XMLPUBFUN int XMLCALL xmlUCSIsTibetan (int code); +XMLPUBFUN int XMLCALL xmlUCSIsUgaritic (int code); +XMLPUBFUN int XMLCALL xmlUCSIsUnifiedCanadianAboriginalSyllabics (int code); +XMLPUBFUN int XMLCALL xmlUCSIsVariationSelectors (int code); +XMLPUBFUN int XMLCALL xmlUCSIsVariationSelectorsSupplement (int code); +XMLPUBFUN int XMLCALL xmlUCSIsYiRadicals (int code); +XMLPUBFUN int XMLCALL xmlUCSIsYiSyllables (int code); +XMLPUBFUN int XMLCALL xmlUCSIsYijingHexagramSymbols (int code); + +XMLPUBFUN int XMLCALL xmlUCSIsBlock (int code, const char *block); + +XMLPUBFUN int XMLCALL xmlUCSIsCatC (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatCc (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatCf (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatCo (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatCs (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatL (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatLl (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatLm (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatLo (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatLt (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatLu (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatM (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatMc (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatMe (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatMn (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatN (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatNd (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatNl (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatNo (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatP (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatPc (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatPd (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatPe (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatPf (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatPi (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatPo (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatPs (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatS (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatSc (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatSk (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatSm (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatSo (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatZ (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatZl (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatZp (int code); +XMLPUBFUN int XMLCALL xmlUCSIsCatZs (int code); + +XMLPUBFUN int XMLCALL xmlUCSIsCat (int code, const char *cat); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_UNICODE_ENABLED */ + +#endif /* __XML_UNICODE_H__ */ diff --git a/libxml2/include/libxml/xmlversion.h b/libxml2/include/libxml/xmlversion.h new file mode 100644 index 0000000..90efc74 --- /dev/null +++ b/libxml2/include/libxml/xmlversion.h @@ -0,0 +1,489 @@ +/* + * Summary: compile-time version informations + * Description: compile-time version informations for the XML library + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_VERSION_H__ +#define __XML_VERSION_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * use those to be sure nothing nasty will happen if + * your library and includes mismatch + */ +#ifndef LIBXML2_COMPILING_MSCCDEF +XMLPUBFUN void XMLCALL xmlCheckVersion(int version); +#endif /* LIBXML2_COMPILING_MSCCDEF */ + +/** + * LIBXML_DOTTED_VERSION: + * + * the version string like "1.2.3" + */ +#define LIBXML_DOTTED_VERSION "2.9.4" + +/** + * LIBXML_VERSION: + * + * the version number: 1.2.3 value is 10203 + */ +#define LIBXML_VERSION 20904 + +/** + * LIBXML_VERSION_STRING: + * + * the version number string, 1.2.3 value is "10203" + */ +#define LIBXML_VERSION_STRING "20904" + +/** + * LIBXML_VERSION_EXTRA: + * + * extra version information, used to show a CVS compilation + */ +#define LIBXML_VERSION_EXTRA "" + +/** + * LIBXML_TEST_VERSION: + * + * Macro to check that the libxml version in use is compatible with + * the version the software has been compiled against + */ +#define LIBXML_TEST_VERSION xmlCheckVersion(20904); + +#ifndef VMS +#if 0 +/** + * WITH_TRIO: + * + * defined if the trio support need to be configured in + */ +#define WITH_TRIO +#else +/** + * WITHOUT_TRIO: + * + * defined if the trio support should not be configured in + */ +#define WITHOUT_TRIO +#endif +#else /* VMS */ +/** + * WITH_TRIO: + * + * defined if the trio support need to be configured in + */ +#define WITH_TRIO 1 +#endif /* VMS */ + +/** + * LIBXML_THREAD_ENABLED: + * + * Whether the thread support is configured in + */ +#if 0 +#if defined(_REENTRANT) || defined(__MT__) || \ + (defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE - 0 >= 199506L)) +#define LIBXML_THREAD_ENABLED +#endif +#endif + +/** + * LIBXML_THREAD_ALLOC_ENABLED: + * + * Whether the allocation hooks are per-thread + */ +#if 0 +#define LIBXML_THREAD_ALLOC_ENABLED +#endif + +/** + * LIBXML_TREE_ENABLED: + * + * Whether the DOM like tree manipulation API support is configured in + */ +#if 0 +#define LIBXML_TREE_ENABLED +#endif + +/** + * LIBXML_OUTPUT_ENABLED: + * + * Whether the serialization/saving support is configured in + */ +#if 1 +#define LIBXML_OUTPUT_ENABLED +#endif + +/** + * LIBXML_PUSH_ENABLED: + * + * Whether the push parsing interfaces are configured in + */ +#if 0 +#define LIBXML_PUSH_ENABLED +#endif + +/** + * LIBXML_READER_ENABLED: + * + * Whether the xmlReader parsing interface is configured in + */ +#if 0 +#define LIBXML_READER_ENABLED +#endif + +/** + * LIBXML_PATTERN_ENABLED: + * + * Whether the xmlPattern node selection interface is configured in + */ +#if 0 +#define LIBXML_PATTERN_ENABLED +#endif + +/** + * LIBXML_WRITER_ENABLED: + * + * Whether the xmlWriter saving interface is configured in + */ +#if 0 +#define LIBXML_WRITER_ENABLED +#endif + +/** + * LIBXML_SAX1_ENABLED: + * + * Whether the older SAX1 interface is configured in + */ +#if 0 +#define LIBXML_SAX1_ENABLED +#endif + +/** + * LIBXML_FTP_ENABLED: + * + * Whether the FTP support is configured in + */ +#if 0 +#define LIBXML_FTP_ENABLED +#endif + +/** + * LIBXML_HTTP_ENABLED: + * + * Whether the HTTP support is configured in + */ +#if 0 +#define LIBXML_HTTP_ENABLED +#endif + +/** + * LIBXML_VALID_ENABLED: + * + * Whether the DTD validation support is configured in + */ +#if 0 +#define LIBXML_VALID_ENABLED +#endif + +/** + * LIBXML_HTML_ENABLED: + * + * Whether the HTML support is configured in + */ +#if 0 +#define LIBXML_HTML_ENABLED +#endif + +/** + * LIBXML_LEGACY_ENABLED: + * + * Whether the deprecated APIs are compiled in for compatibility + */ +#if 0 +#define LIBXML_LEGACY_ENABLED +#endif + +/** + * LIBXML_C14N_ENABLED: + * + * Whether the Canonicalization support is configured in + */ +#if 0 +#define LIBXML_C14N_ENABLED +#endif + +/** + * LIBXML_CATALOG_ENABLED: + * + * Whether the Catalog support is configured in + */ +#if 0 +#define LIBXML_CATALOG_ENABLED +#endif + +/** + * LIBXML_DOCB_ENABLED: + * + * Whether the SGML Docbook support is configured in + */ +#if 0 +#define LIBXML_DOCB_ENABLED +#endif + +/** + * LIBXML_XPATH_ENABLED: + * + * Whether XPath is configured in + */ +#if 0 +#define LIBXML_XPATH_ENABLED +#endif + +/** + * LIBXML_XPTR_ENABLED: + * + * Whether XPointer is configured in + */ +#if 0 +#define LIBXML_XPTR_ENABLED +#endif + +/** + * LIBXML_XINCLUDE_ENABLED: + * + * Whether XInclude is configured in + */ +#if 0 +#define LIBXML_XINCLUDE_ENABLED +#endif + +/** + * LIBXML_ICONV_ENABLED: + * + * Whether iconv support is available + */ +#if 0 +#define LIBXML_ICONV_ENABLED +#endif + +/** + * LIBXML_ICU_ENABLED: + * + * Whether icu support is available + */ +#if 0 +#define LIBXML_ICU_ENABLED +#endif + +/** + * LIBXML_ISO8859X_ENABLED: + * + * Whether ISO-8859-* support is made available in case iconv is not + */ +#if 0 +#define LIBXML_ISO8859X_ENABLED +#endif + +/** + * LIBXML_DEBUG_ENABLED: + * + * Whether Debugging module is configured in + */ +#if 0 +#define LIBXML_DEBUG_ENABLED +#endif + +/** + * DEBUG_MEMORY_LOCATION: + * + * Whether the memory debugging is configured in + */ +#if 0 +#define DEBUG_MEMORY_LOCATION +#endif + +/** + * LIBXML_DEBUG_RUNTIME: + * + * Whether the runtime debugging is configured in + */ +#if 0 +#define LIBXML_DEBUG_RUNTIME +#endif + +/** + * LIBXML_UNICODE_ENABLED: + * + * Whether the Unicode related interfaces are compiled in + */ +#if 0 +#define LIBXML_UNICODE_ENABLED +#endif + +/** + * LIBXML_REGEXP_ENABLED: + * + * Whether the regular expressions interfaces are compiled in + */ +#if 0 +#define LIBXML_REGEXP_ENABLED +#endif + +/** + * LIBXML_AUTOMATA_ENABLED: + * + * Whether the automata interfaces are compiled in + */ +#if 0 +#define LIBXML_AUTOMATA_ENABLED +#endif + +/** + * LIBXML_EXPR_ENABLED: + * + * Whether the formal expressions interfaces are compiled in + */ +#if 0 +#define LIBXML_EXPR_ENABLED +#endif + +/** + * LIBXML_SCHEMAS_ENABLED: + * + * Whether the Schemas validation interfaces are compiled in + */ +#if 0 +#define LIBXML_SCHEMAS_ENABLED +#endif + +/** + * LIBXML_SCHEMATRON_ENABLED: + * + * Whether the Schematron validation interfaces are compiled in + */ +#if 0 +#define LIBXML_SCHEMATRON_ENABLED +#endif + +/** + * LIBXML_MODULES_ENABLED: + * + * Whether the module interfaces are compiled in + */ +#if 0 +#define LIBXML_MODULES_ENABLED +/** + * LIBXML_MODULE_EXTENSION: + * + * the string suffix used by dynamic modules (usually shared libraries) + */ +#define LIBXML_MODULE_EXTENSION "" +#endif + +/** + * LIBXML_ZLIB_ENABLED: + * + * Whether the Zlib support is compiled in + */ +#if 0 +#define LIBXML_ZLIB_ENABLED +#endif + +/** + * LIBXML_LZMA_ENABLED: + * + * Whether the Lzma support is compiled in + */ +#if 0 +#define LIBXML_LZMA_ENABLED +#endif + +#ifdef __GNUC__ +#ifdef HAVE_ANSIDECL_H +#include +#endif + +/** + * ATTRIBUTE_UNUSED: + * + * Macro used to signal to GCC unused function parameters + */ + +#ifndef ATTRIBUTE_UNUSED +# if ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 7))) +# define ATTRIBUTE_UNUSED __attribute__((unused)) +# else +# define ATTRIBUTE_UNUSED +# endif +#endif + +/** + * LIBXML_ATTR_ALLOC_SIZE: + * + * Macro used to indicate to GCC this is an allocator function + */ + +#ifndef LIBXML_ATTR_ALLOC_SIZE +# if (!defined(__clang__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))) +# define LIBXML_ATTR_ALLOC_SIZE(x) __attribute__((alloc_size(x))) +# else +# define LIBXML_ATTR_ALLOC_SIZE(x) +# endif +#else +# define LIBXML_ATTR_ALLOC_SIZE(x) +#endif + +/** + * LIBXML_ATTR_FORMAT: + * + * Macro used to indicate to GCC the parameter are printf like + */ + +#ifndef LIBXML_ATTR_FORMAT +# if ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3))) +# define LIBXML_ATTR_FORMAT(fmt,args) __attribute__((__format__(__printf__,fmt,args))) +# else +# define LIBXML_ATTR_FORMAT(fmt,args) +# endif +#else +# define LIBXML_ATTR_FORMAT(fmt,args) +#endif + +#else /* ! __GNUC__ */ +/** + * ATTRIBUTE_UNUSED: + * + * Macro used to signal to GCC unused function parameters + */ +#define ATTRIBUTE_UNUSED +/** + * LIBXML_ATTR_ALLOC_SIZE: + * + * Macro used to indicate to GCC this is an allocator function + */ +#define LIBXML_ATTR_ALLOC_SIZE(x) +/** + * LIBXML_ATTR_FORMAT: + * + * Macro used to indicate to GCC the parameter are printf like + */ +#define LIBXML_ATTR_FORMAT(fmt,args) +#endif /* __GNUC__ */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif + + diff --git a/libxml2/include/libxml/xmlwriter.h b/libxml2/include/libxml/xmlwriter.h new file mode 100644 index 0000000..dd5add3 --- /dev/null +++ b/libxml2/include/libxml/xmlwriter.h @@ -0,0 +1,488 @@ +/* + * Summary: text writing API for XML + * Description: text writing API for XML + * + * Copy: See Copyright for the status of this software. + * + * Author: Alfred Mickautsch + */ + +#ifndef __XML_XMLWRITER_H__ +#define __XML_XMLWRITER_H__ + +#include + +#ifdef LIBXML_WRITER_ENABLED + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + typedef struct _xmlTextWriter xmlTextWriter; + typedef xmlTextWriter *xmlTextWriterPtr; + +/* + * Constructors & Destructor + */ + XMLPUBFUN xmlTextWriterPtr XMLCALL + xmlNewTextWriter(xmlOutputBufferPtr out); + XMLPUBFUN xmlTextWriterPtr XMLCALL + xmlNewTextWriterFilename(const char *uri, int compression); + XMLPUBFUN xmlTextWriterPtr XMLCALL + xmlNewTextWriterMemory(xmlBufferPtr buf, int compression); + XMLPUBFUN xmlTextWriterPtr XMLCALL + xmlNewTextWriterPushParser(xmlParserCtxtPtr ctxt, int compression); + XMLPUBFUN xmlTextWriterPtr XMLCALL + xmlNewTextWriterDoc(xmlDocPtr * doc, int compression); + XMLPUBFUN xmlTextWriterPtr XMLCALL + xmlNewTextWriterTree(xmlDocPtr doc, xmlNodePtr node, + int compression); + XMLPUBFUN void XMLCALL xmlFreeTextWriter(xmlTextWriterPtr writer); + +/* + * Functions + */ + + +/* + * Document + */ + XMLPUBFUN int XMLCALL + xmlTextWriterStartDocument(xmlTextWriterPtr writer, + const char *version, + const char *encoding, + const char *standalone); + XMLPUBFUN int XMLCALL xmlTextWriterEndDocument(xmlTextWriterPtr + writer); + +/* + * Comments + */ + XMLPUBFUN int XMLCALL xmlTextWriterStartComment(xmlTextWriterPtr + writer); + XMLPUBFUN int XMLCALL xmlTextWriterEndComment(xmlTextWriterPtr writer); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteFormatComment(xmlTextWriterPtr writer, + const char *format, ...) + LIBXML_ATTR_FORMAT(2,3); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatComment(xmlTextWriterPtr writer, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(2,0); + XMLPUBFUN int XMLCALL xmlTextWriterWriteComment(xmlTextWriterPtr + writer, + const xmlChar * + content); + +/* + * Elements + */ + XMLPUBFUN int XMLCALL + xmlTextWriterStartElement(xmlTextWriterPtr writer, + const xmlChar * name); + XMLPUBFUN int XMLCALL xmlTextWriterStartElementNS(xmlTextWriterPtr + writer, + const xmlChar * + prefix, + const xmlChar * name, + const xmlChar * + namespaceURI); + XMLPUBFUN int XMLCALL xmlTextWriterEndElement(xmlTextWriterPtr writer); + XMLPUBFUN int XMLCALL xmlTextWriterFullEndElement(xmlTextWriterPtr + writer); + +/* + * Elements conveniency functions + */ + XMLPUBFUN int XMLCALL + xmlTextWriterWriteFormatElement(xmlTextWriterPtr writer, + const xmlChar * name, + const char *format, ...) + LIBXML_ATTR_FORMAT(3,4); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatElement(xmlTextWriterPtr writer, + const xmlChar * name, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(3,0); + XMLPUBFUN int XMLCALL xmlTextWriterWriteElement(xmlTextWriterPtr + writer, + const xmlChar * name, + const xmlChar * + content); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteFormatElementNS(xmlTextWriterPtr writer, + const xmlChar * prefix, + const xmlChar * name, + const xmlChar * namespaceURI, + const char *format, ...) + LIBXML_ATTR_FORMAT(5,6); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatElementNS(xmlTextWriterPtr writer, + const xmlChar * prefix, + const xmlChar * name, + const xmlChar * namespaceURI, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(5,0); + XMLPUBFUN int XMLCALL xmlTextWriterWriteElementNS(xmlTextWriterPtr + writer, + const xmlChar * + prefix, + const xmlChar * name, + const xmlChar * + namespaceURI, + const xmlChar * + content); + +/* + * Text + */ + XMLPUBFUN int XMLCALL + xmlTextWriterWriteFormatRaw(xmlTextWriterPtr writer, + const char *format, ...) + LIBXML_ATTR_FORMAT(2,3); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatRaw(xmlTextWriterPtr writer, + const char *format, va_list argptr) + LIBXML_ATTR_FORMAT(2,0); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteRawLen(xmlTextWriterPtr writer, + const xmlChar * content, int len); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteRaw(xmlTextWriterPtr writer, + const xmlChar * content); + XMLPUBFUN int XMLCALL xmlTextWriterWriteFormatString(xmlTextWriterPtr + writer, + const char + *format, ...) + LIBXML_ATTR_FORMAT(2,3); + XMLPUBFUN int XMLCALL xmlTextWriterWriteVFormatString(xmlTextWriterPtr + writer, + const char + *format, + va_list argptr) + LIBXML_ATTR_FORMAT(2,0); + XMLPUBFUN int XMLCALL xmlTextWriterWriteString(xmlTextWriterPtr writer, + const xmlChar * + content); + XMLPUBFUN int XMLCALL xmlTextWriterWriteBase64(xmlTextWriterPtr writer, + const char *data, + int start, int len); + XMLPUBFUN int XMLCALL xmlTextWriterWriteBinHex(xmlTextWriterPtr writer, + const char *data, + int start, int len); + +/* + * Attributes + */ + XMLPUBFUN int XMLCALL + xmlTextWriterStartAttribute(xmlTextWriterPtr writer, + const xmlChar * name); + XMLPUBFUN int XMLCALL xmlTextWriterStartAttributeNS(xmlTextWriterPtr + writer, + const xmlChar * + prefix, + const xmlChar * + name, + const xmlChar * + namespaceURI); + XMLPUBFUN int XMLCALL xmlTextWriterEndAttribute(xmlTextWriterPtr + writer); + +/* + * Attributes conveniency functions + */ + XMLPUBFUN int XMLCALL + xmlTextWriterWriteFormatAttribute(xmlTextWriterPtr writer, + const xmlChar * name, + const char *format, ...) + LIBXML_ATTR_FORMAT(3,4); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatAttribute(xmlTextWriterPtr writer, + const xmlChar * name, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(3,0); + XMLPUBFUN int XMLCALL xmlTextWriterWriteAttribute(xmlTextWriterPtr + writer, + const xmlChar * name, + const xmlChar * + content); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteFormatAttributeNS(xmlTextWriterPtr writer, + const xmlChar * prefix, + const xmlChar * name, + const xmlChar * namespaceURI, + const char *format, ...) + LIBXML_ATTR_FORMAT(5,6); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatAttributeNS(xmlTextWriterPtr writer, + const xmlChar * prefix, + const xmlChar * name, + const xmlChar * namespaceURI, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(5,0); + XMLPUBFUN int XMLCALL xmlTextWriterWriteAttributeNS(xmlTextWriterPtr + writer, + const xmlChar * + prefix, + const xmlChar * + name, + const xmlChar * + namespaceURI, + const xmlChar * + content); + +/* + * PI's + */ + XMLPUBFUN int XMLCALL + xmlTextWriterStartPI(xmlTextWriterPtr writer, + const xmlChar * target); + XMLPUBFUN int XMLCALL xmlTextWriterEndPI(xmlTextWriterPtr writer); + +/* + * PI conveniency functions + */ + XMLPUBFUN int XMLCALL + xmlTextWriterWriteFormatPI(xmlTextWriterPtr writer, + const xmlChar * target, + const char *format, ...) + LIBXML_ATTR_FORMAT(3,4); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatPI(xmlTextWriterPtr writer, + const xmlChar * target, + const char *format, va_list argptr) + LIBXML_ATTR_FORMAT(3,0); + XMLPUBFUN int XMLCALL + xmlTextWriterWritePI(xmlTextWriterPtr writer, + const xmlChar * target, + const xmlChar * content); + +/** + * xmlTextWriterWriteProcessingInstruction: + * + * This macro maps to xmlTextWriterWritePI + */ +#define xmlTextWriterWriteProcessingInstruction xmlTextWriterWritePI + +/* + * CDATA + */ + XMLPUBFUN int XMLCALL xmlTextWriterStartCDATA(xmlTextWriterPtr writer); + XMLPUBFUN int XMLCALL xmlTextWriterEndCDATA(xmlTextWriterPtr writer); + +/* + * CDATA conveniency functions + */ + XMLPUBFUN int XMLCALL + xmlTextWriterWriteFormatCDATA(xmlTextWriterPtr writer, + const char *format, ...) + LIBXML_ATTR_FORMAT(2,3); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatCDATA(xmlTextWriterPtr writer, + const char *format, va_list argptr) + LIBXML_ATTR_FORMAT(2,0); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteCDATA(xmlTextWriterPtr writer, + const xmlChar * content); + +/* + * DTD + */ + XMLPUBFUN int XMLCALL + xmlTextWriterStartDTD(xmlTextWriterPtr writer, + const xmlChar * name, + const xmlChar * pubid, + const xmlChar * sysid); + XMLPUBFUN int XMLCALL xmlTextWriterEndDTD(xmlTextWriterPtr writer); + +/* + * DTD conveniency functions + */ + XMLPUBFUN int XMLCALL + xmlTextWriterWriteFormatDTD(xmlTextWriterPtr writer, + const xmlChar * name, + const xmlChar * pubid, + const xmlChar * sysid, + const char *format, ...) + LIBXML_ATTR_FORMAT(5,6); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatDTD(xmlTextWriterPtr writer, + const xmlChar * name, + const xmlChar * pubid, + const xmlChar * sysid, + const char *format, va_list argptr) + LIBXML_ATTR_FORMAT(5,0); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteDTD(xmlTextWriterPtr writer, + const xmlChar * name, + const xmlChar * pubid, + const xmlChar * sysid, + const xmlChar * subset); + +/** + * xmlTextWriterWriteDocType: + * + * this macro maps to xmlTextWriterWriteDTD + */ +#define xmlTextWriterWriteDocType xmlTextWriterWriteDTD + +/* + * DTD element definition + */ + XMLPUBFUN int XMLCALL + xmlTextWriterStartDTDElement(xmlTextWriterPtr writer, + const xmlChar * name); + XMLPUBFUN int XMLCALL xmlTextWriterEndDTDElement(xmlTextWriterPtr + writer); + +/* + * DTD element definition conveniency functions + */ + XMLPUBFUN int XMLCALL + xmlTextWriterWriteFormatDTDElement(xmlTextWriterPtr writer, + const xmlChar * name, + const char *format, ...) + LIBXML_ATTR_FORMAT(3,4); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatDTDElement(xmlTextWriterPtr writer, + const xmlChar * name, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(3,0); + XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDElement(xmlTextWriterPtr + writer, + const xmlChar * + name, + const xmlChar * + content); + +/* + * DTD attribute list definition + */ + XMLPUBFUN int XMLCALL + xmlTextWriterStartDTDAttlist(xmlTextWriterPtr writer, + const xmlChar * name); + XMLPUBFUN int XMLCALL xmlTextWriterEndDTDAttlist(xmlTextWriterPtr + writer); + +/* + * DTD attribute list definition conveniency functions + */ + XMLPUBFUN int XMLCALL + xmlTextWriterWriteFormatDTDAttlist(xmlTextWriterPtr writer, + const xmlChar * name, + const char *format, ...) + LIBXML_ATTR_FORMAT(3,4); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatDTDAttlist(xmlTextWriterPtr writer, + const xmlChar * name, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(3,0); + XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDAttlist(xmlTextWriterPtr + writer, + const xmlChar * + name, + const xmlChar * + content); + +/* + * DTD entity definition + */ + XMLPUBFUN int XMLCALL + xmlTextWriterStartDTDEntity(xmlTextWriterPtr writer, + int pe, const xmlChar * name); + XMLPUBFUN int XMLCALL xmlTextWriterEndDTDEntity(xmlTextWriterPtr + writer); + +/* + * DTD entity definition conveniency functions + */ + XMLPUBFUN int XMLCALL + xmlTextWriterWriteFormatDTDInternalEntity(xmlTextWriterPtr writer, + int pe, + const xmlChar * name, + const char *format, ...) + LIBXML_ATTR_FORMAT(4,5); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteVFormatDTDInternalEntity(xmlTextWriterPtr writer, + int pe, + const xmlChar * name, + const char *format, + va_list argptr) + LIBXML_ATTR_FORMAT(4,0); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteDTDInternalEntity(xmlTextWriterPtr writer, + int pe, + const xmlChar * name, + const xmlChar * content); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteDTDExternalEntity(xmlTextWriterPtr writer, + int pe, + const xmlChar * name, + const xmlChar * pubid, + const xmlChar * sysid, + const xmlChar * ndataid); + XMLPUBFUN int XMLCALL + xmlTextWriterWriteDTDExternalEntityContents(xmlTextWriterPtr + writer, + const xmlChar * pubid, + const xmlChar * sysid, + const xmlChar * + ndataid); + XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDEntity(xmlTextWriterPtr + writer, int pe, + const xmlChar * name, + const xmlChar * + pubid, + const xmlChar * + sysid, + const xmlChar * + ndataid, + const xmlChar * + content); + +/* + * DTD notation definition + */ + XMLPUBFUN int XMLCALL + xmlTextWriterWriteDTDNotation(xmlTextWriterPtr writer, + const xmlChar * name, + const xmlChar * pubid, + const xmlChar * sysid); + +/* + * Indentation + */ + XMLPUBFUN int XMLCALL + xmlTextWriterSetIndent(xmlTextWriterPtr writer, int indent); + XMLPUBFUN int XMLCALL + xmlTextWriterSetIndentString(xmlTextWriterPtr writer, + const xmlChar * str); + + XMLPUBFUN int XMLCALL + xmlTextWriterSetQuoteChar(xmlTextWriterPtr writer, xmlChar quotechar); + + +/* + * misc + */ + XMLPUBFUN int XMLCALL xmlTextWriterFlush(xmlTextWriterPtr writer); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_WRITER_ENABLED */ + +#endif /* __XML_XMLWRITER_H__ */ diff --git a/libxml2/include/libxml/xpath.h b/libxml2/include/libxml/xpath.h new file mode 100644 index 0000000..d96776c --- /dev/null +++ b/libxml2/include/libxml/xpath.h @@ -0,0 +1,557 @@ +/* + * Summary: XML Path Language implementation + * Description: API for the XML Path Language implementation + * + * XML Path Language implementation + * XPath is a language for addressing parts of an XML document, + * designed to be used by both XSLT and XPointer + * http://www.w3.org/TR/xpath + * + * Implements + * W3C Recommendation 16 November 1999 + * http://www.w3.org/TR/1999/REC-xpath-19991116 + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_XPATH_H__ +#define __XML_XPATH_H__ + +#include + +#ifdef LIBXML_XPATH_ENABLED + +#include +#include +#include +#endif /* LIBXML_XPATH_ENABLED */ + +#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +#ifdef __cplusplus +extern "C" { +#endif +#endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED */ + +#ifdef LIBXML_XPATH_ENABLED + +typedef struct _xmlXPathContext xmlXPathContext; +typedef xmlXPathContext *xmlXPathContextPtr; +typedef struct _xmlXPathParserContext xmlXPathParserContext; +typedef xmlXPathParserContext *xmlXPathParserContextPtr; + +/** + * The set of XPath error codes. + */ + +typedef enum { + XPATH_EXPRESSION_OK = 0, + XPATH_NUMBER_ERROR, + XPATH_UNFINISHED_LITERAL_ERROR, + XPATH_START_LITERAL_ERROR, + XPATH_VARIABLE_REF_ERROR, + XPATH_UNDEF_VARIABLE_ERROR, + XPATH_INVALID_PREDICATE_ERROR, + XPATH_EXPR_ERROR, + XPATH_UNCLOSED_ERROR, + XPATH_UNKNOWN_FUNC_ERROR, + XPATH_INVALID_OPERAND, + XPATH_INVALID_TYPE, + XPATH_INVALID_ARITY, + XPATH_INVALID_CTXT_SIZE, + XPATH_INVALID_CTXT_POSITION, + XPATH_MEMORY_ERROR, + XPTR_SYNTAX_ERROR, + XPTR_RESOURCE_ERROR, + XPTR_SUB_RESOURCE_ERROR, + XPATH_UNDEF_PREFIX_ERROR, + XPATH_ENCODING_ERROR, + XPATH_INVALID_CHAR_ERROR, + XPATH_INVALID_CTXT, + XPATH_STACK_ERROR, + XPATH_FORBID_VARIABLE_ERROR +} xmlXPathError; + +/* + * A node-set (an unordered collection of nodes without duplicates). + */ +typedef struct _xmlNodeSet xmlNodeSet; +typedef xmlNodeSet *xmlNodeSetPtr; +struct _xmlNodeSet { + int nodeNr; /* number of nodes in the set */ + int nodeMax; /* size of the array as allocated */ + xmlNodePtr *nodeTab; /* array of nodes in no particular order */ + /* @@ with_ns to check wether namespace nodes should be looked at @@ */ +}; + +/* + * An expression is evaluated to yield an object, which + * has one of the following four basic types: + * - node-set + * - boolean + * - number + * - string + * + * @@ XPointer will add more types ! + */ + +typedef enum { + XPATH_UNDEFINED = 0, + XPATH_NODESET = 1, + XPATH_BOOLEAN = 2, + XPATH_NUMBER = 3, + XPATH_STRING = 4, + XPATH_POINT = 5, + XPATH_RANGE = 6, + XPATH_LOCATIONSET = 7, + XPATH_USERS = 8, + XPATH_XSLT_TREE = 9 /* An XSLT value tree, non modifiable */ +} xmlXPathObjectType; + +typedef struct _xmlXPathObject xmlXPathObject; +typedef xmlXPathObject *xmlXPathObjectPtr; +struct _xmlXPathObject { + xmlXPathObjectType type; + xmlNodeSetPtr nodesetval; + int boolval; + double floatval; + xmlChar *stringval; + void *user; + int index; + void *user2; + int index2; +}; + +/** + * xmlXPathConvertFunc: + * @obj: an XPath object + * @type: the number of the target type + * + * A conversion function is associated to a type and used to cast + * the new type to primitive values. + * + * Returns -1 in case of error, 0 otherwise + */ +typedef int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type); + +/* + * Extra type: a name and a conversion function. + */ + +typedef struct _xmlXPathType xmlXPathType; +typedef xmlXPathType *xmlXPathTypePtr; +struct _xmlXPathType { + const xmlChar *name; /* the type name */ + xmlXPathConvertFunc func; /* the conversion function */ +}; + +/* + * Extra variable: a name and a value. + */ + +typedef struct _xmlXPathVariable xmlXPathVariable; +typedef xmlXPathVariable *xmlXPathVariablePtr; +struct _xmlXPathVariable { + const xmlChar *name; /* the variable name */ + xmlXPathObjectPtr value; /* the value */ +}; + +/** + * xmlXPathEvalFunc: + * @ctxt: an XPath parser context + * @nargs: the number of arguments passed to the function + * + * An XPath evaluation function, the parameters are on the XPath context stack. + */ + +typedef void (*xmlXPathEvalFunc)(xmlXPathParserContextPtr ctxt, + int nargs); + +/* + * Extra function: a name and a evaluation function. + */ + +typedef struct _xmlXPathFunct xmlXPathFunct; +typedef xmlXPathFunct *xmlXPathFuncPtr; +struct _xmlXPathFunct { + const xmlChar *name; /* the function name */ + xmlXPathEvalFunc func; /* the evaluation function */ +}; + +/** + * xmlXPathAxisFunc: + * @ctxt: the XPath interpreter context + * @cur: the previous node being explored on that axis + * + * An axis traversal function. To traverse an axis, the engine calls + * the first time with cur == NULL and repeat until the function returns + * NULL indicating the end of the axis traversal. + * + * Returns the next node in that axis or NULL if at the end of the axis. + */ + +typedef xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt, + xmlXPathObjectPtr cur); + +/* + * Extra axis: a name and an axis function. + */ + +typedef struct _xmlXPathAxis xmlXPathAxis; +typedef xmlXPathAxis *xmlXPathAxisPtr; +struct _xmlXPathAxis { + const xmlChar *name; /* the axis name */ + xmlXPathAxisFunc func; /* the search function */ +}; + +/** + * xmlXPathFunction: + * @ctxt: the XPath interprestation context + * @nargs: the number of arguments + * + * An XPath function. + * The arguments (if any) are popped out from the context stack + * and the result is pushed on the stack. + */ + +typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs); + +/* + * Function and Variable Lookup. + */ + +/** + * xmlXPathVariableLookupFunc: + * @ctxt: an XPath context + * @name: name of the variable + * @ns_uri: the namespace name hosting this variable + * + * Prototype for callbacks used to plug variable lookup in the XPath + * engine. + * + * Returns the XPath object value or NULL if not found. + */ +typedef xmlXPathObjectPtr (*xmlXPathVariableLookupFunc) (void *ctxt, + const xmlChar *name, + const xmlChar *ns_uri); + +/** + * xmlXPathFuncLookupFunc: + * @ctxt: an XPath context + * @name: name of the function + * @ns_uri: the namespace name hosting this function + * + * Prototype for callbacks used to plug function lookup in the XPath + * engine. + * + * Returns the XPath function or NULL if not found. + */ +typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt, + const xmlChar *name, + const xmlChar *ns_uri); + +/** + * xmlXPathFlags: + * Flags for XPath engine compilation and runtime + */ +/** + * XML_XPATH_CHECKNS: + * + * check namespaces at compilation + */ +#define XML_XPATH_CHECKNS (1<<0) +/** + * XML_XPATH_NOVAR: + * + * forbid variables in expression + */ +#define XML_XPATH_NOVAR (1<<1) + +/** + * xmlXPathContext: + * + * Expression evaluation occurs with respect to a context. + * he context consists of: + * - a node (the context node) + * - a node list (the context node list) + * - a set of variable bindings + * - a function library + * - the set of namespace declarations in scope for the expression + * Following the switch to hash tables, this need to be trimmed up at + * the next binary incompatible release. + * The node may be modified when the context is passed to libxml2 + * for an XPath evaluation so you may need to initialize it again + * before the next call. + */ + +struct _xmlXPathContext { + xmlDocPtr doc; /* The current document */ + xmlNodePtr node; /* The current node */ + + int nb_variables_unused; /* unused (hash table) */ + int max_variables_unused; /* unused (hash table) */ + xmlHashTablePtr varHash; /* Hash table of defined variables */ + + int nb_types; /* number of defined types */ + int max_types; /* max number of types */ + xmlXPathTypePtr types; /* Array of defined types */ + + int nb_funcs_unused; /* unused (hash table) */ + int max_funcs_unused; /* unused (hash table) */ + xmlHashTablePtr funcHash; /* Hash table of defined funcs */ + + int nb_axis; /* number of defined axis */ + int max_axis; /* max number of axis */ + xmlXPathAxisPtr axis; /* Array of defined axis */ + + /* the namespace nodes of the context node */ + xmlNsPtr *namespaces; /* Array of namespaces */ + int nsNr; /* number of namespace in scope */ + void *user; /* function to free */ + + /* extra variables */ + int contextSize; /* the context size */ + int proximityPosition; /* the proximity position */ + + /* extra stuff for XPointer */ + int xptr; /* is this an XPointer context? */ + xmlNodePtr here; /* for here() */ + xmlNodePtr origin; /* for origin() */ + + /* the set of namespace declarations in scope for the expression */ + xmlHashTablePtr nsHash; /* The namespaces hash table */ + xmlXPathVariableLookupFunc varLookupFunc;/* variable lookup func */ + void *varLookupData; /* variable lookup data */ + + /* Possibility to link in an extra item */ + void *extra; /* needed for XSLT */ + + /* The function name and URI when calling a function */ + const xmlChar *function; + const xmlChar *functionURI; + + /* function lookup function and data */ + xmlXPathFuncLookupFunc funcLookupFunc;/* function lookup func */ + void *funcLookupData; /* function lookup data */ + + /* temporary namespace lists kept for walking the namespace axis */ + xmlNsPtr *tmpNsList; /* Array of namespaces */ + int tmpNsNr; /* number of namespaces in scope */ + + /* error reporting mechanism */ + void *userData; /* user specific data block */ + xmlStructuredErrorFunc error; /* the callback in case of errors */ + xmlError lastError; /* the last error */ + xmlNodePtr debugNode; /* the source node XSLT */ + + /* dictionary */ + xmlDictPtr dict; /* dictionary if any */ + + int flags; /* flags to control compilation */ + + /* Cache for reusal of XPath objects */ + void *cache; +}; + +/* + * The structure of a compiled expression form is not public. + */ + +typedef struct _xmlXPathCompExpr xmlXPathCompExpr; +typedef xmlXPathCompExpr *xmlXPathCompExprPtr; + +/** + * xmlXPathParserContext: + * + * An XPath parser context. It contains pure parsing informations, + * an xmlXPathContext, and the stack of objects. + */ +struct _xmlXPathParserContext { + const xmlChar *cur; /* the current char being parsed */ + const xmlChar *base; /* the full expression */ + + int error; /* error code */ + + xmlXPathContextPtr context; /* the evaluation context */ + xmlXPathObjectPtr value; /* the current value */ + int valueNr; /* number of values stacked */ + int valueMax; /* max number of values stacked */ + xmlXPathObjectPtr *valueTab; /* stack of values */ + + xmlXPathCompExprPtr comp; /* the precompiled expression */ + int xptr; /* it this an XPointer expression */ + xmlNodePtr ancestor; /* used for walking preceding axis */ + + int valueFrame; /* used to limit Pop on the stack */ +}; + +/************************************************************************ + * * + * Public API * + * * + ************************************************************************/ + +/** + * Objects and Nodesets handling + */ + +XMLPUBVAR double xmlXPathNAN; +XMLPUBVAR double xmlXPathPINF; +XMLPUBVAR double xmlXPathNINF; + +/* These macros may later turn into functions */ +/** + * xmlXPathNodeSetGetLength: + * @ns: a node-set + * + * Implement a functionality similar to the DOM NodeList.length. + * + * Returns the number of nodes in the node-set. + */ +#define xmlXPathNodeSetGetLength(ns) ((ns) ? (ns)->nodeNr : 0) +/** + * xmlXPathNodeSetItem: + * @ns: a node-set + * @index: index of a node in the set + * + * Implements a functionality similar to the DOM NodeList.item(). + * + * Returns the xmlNodePtr at the given @index in @ns or NULL if + * @index is out of range (0 to length-1) + */ +#define xmlXPathNodeSetItem(ns, index) \ + ((((ns) != NULL) && \ + ((index) >= 0) && ((index) < (ns)->nodeNr)) ? \ + (ns)->nodeTab[(index)] \ + : NULL) +/** + * xmlXPathNodeSetIsEmpty: + * @ns: a node-set + * + * Checks whether @ns is empty or not. + * + * Returns %TRUE if @ns is an empty node-set. + */ +#define xmlXPathNodeSetIsEmpty(ns) \ + (((ns) == NULL) || ((ns)->nodeNr == 0) || ((ns)->nodeTab == NULL)) + + +XMLPUBFUN void XMLCALL + xmlXPathFreeObject (xmlXPathObjectPtr obj); +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathNodeSetCreate (xmlNodePtr val); +XMLPUBFUN void XMLCALL + xmlXPathFreeNodeSetList (xmlXPathObjectPtr obj); +XMLPUBFUN void XMLCALL + xmlXPathFreeNodeSet (xmlNodeSetPtr obj); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathObjectCopy (xmlXPathObjectPtr val); +XMLPUBFUN int XMLCALL + xmlXPathCmpNodes (xmlNodePtr node1, + xmlNodePtr node2); +/** + * Conversion functions to basic types. + */ +XMLPUBFUN int XMLCALL + xmlXPathCastNumberToBoolean (double val); +XMLPUBFUN int XMLCALL + xmlXPathCastStringToBoolean (const xmlChar * val); +XMLPUBFUN int XMLCALL + xmlXPathCastNodeSetToBoolean(xmlNodeSetPtr ns); +XMLPUBFUN int XMLCALL + xmlXPathCastToBoolean (xmlXPathObjectPtr val); + +XMLPUBFUN double XMLCALL + xmlXPathCastBooleanToNumber (int val); +XMLPUBFUN double XMLCALL + xmlXPathCastStringToNumber (const xmlChar * val); +XMLPUBFUN double XMLCALL + xmlXPathCastNodeToNumber (xmlNodePtr node); +XMLPUBFUN double XMLCALL + xmlXPathCastNodeSetToNumber (xmlNodeSetPtr ns); +XMLPUBFUN double XMLCALL + xmlXPathCastToNumber (xmlXPathObjectPtr val); + +XMLPUBFUN xmlChar * XMLCALL + xmlXPathCastBooleanToString (int val); +XMLPUBFUN xmlChar * XMLCALL + xmlXPathCastNumberToString (double val); +XMLPUBFUN xmlChar * XMLCALL + xmlXPathCastNodeToString (xmlNodePtr node); +XMLPUBFUN xmlChar * XMLCALL + xmlXPathCastNodeSetToString (xmlNodeSetPtr ns); +XMLPUBFUN xmlChar * XMLCALL + xmlXPathCastToString (xmlXPathObjectPtr val); + +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathConvertBoolean (xmlXPathObjectPtr val); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathConvertNumber (xmlXPathObjectPtr val); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathConvertString (xmlXPathObjectPtr val); + +/** + * Context handling. + */ +XMLPUBFUN xmlXPathContextPtr XMLCALL + xmlXPathNewContext (xmlDocPtr doc); +XMLPUBFUN void XMLCALL + xmlXPathFreeContext (xmlXPathContextPtr ctxt); +XMLPUBFUN int XMLCALL + xmlXPathContextSetCache(xmlXPathContextPtr ctxt, + int active, + int value, + int options); +/** + * Evaluation functions. + */ +XMLPUBFUN long XMLCALL + xmlXPathOrderDocElems (xmlDocPtr doc); +XMLPUBFUN int XMLCALL + xmlXPathSetContextNode (xmlNodePtr node, + xmlXPathContextPtr ctx); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathNodeEval (xmlNodePtr node, + const xmlChar *str, + xmlXPathContextPtr ctx); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathEval (const xmlChar *str, + xmlXPathContextPtr ctx); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathEvalExpression (const xmlChar *str, + xmlXPathContextPtr ctxt); +XMLPUBFUN int XMLCALL + xmlXPathEvalPredicate (xmlXPathContextPtr ctxt, + xmlXPathObjectPtr res); +/** + * Separate compilation/evaluation entry points. + */ +XMLPUBFUN xmlXPathCompExprPtr XMLCALL + xmlXPathCompile (const xmlChar *str); +XMLPUBFUN xmlXPathCompExprPtr XMLCALL + xmlXPathCtxtCompile (xmlXPathContextPtr ctxt, + const xmlChar *str); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathCompiledEval (xmlXPathCompExprPtr comp, + xmlXPathContextPtr ctx); +XMLPUBFUN int XMLCALL + xmlXPathCompiledEvalToBoolean(xmlXPathCompExprPtr comp, + xmlXPathContextPtr ctxt); +XMLPUBFUN void XMLCALL + xmlXPathFreeCompExpr (xmlXPathCompExprPtr comp); +#endif /* LIBXML_XPATH_ENABLED */ +#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) +XMLPUBFUN void XMLCALL + xmlXPathInit (void); +XMLPUBFUN int XMLCALL + xmlXPathIsNaN (double val); +XMLPUBFUN int XMLCALL + xmlXPathIsInf (double val); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED*/ +#endif /* ! __XML_XPATH_H__ */ diff --git a/libxml2/include/libxml/xpathInternals.h b/libxml2/include/libxml/xpathInternals.h new file mode 100644 index 0000000..76a6b48 --- /dev/null +++ b/libxml2/include/libxml/xpathInternals.h @@ -0,0 +1,632 @@ +/* + * Summary: internal interfaces for XML Path Language implementation + * Description: internal interfaces for XML Path Language implementation + * used to build new modules on top of XPath like XPointer and + * XSLT + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_XPATH_INTERNALS_H__ +#define __XML_XPATH_INTERNALS_H__ + +#include +#include + +#ifdef LIBXML_XPATH_ENABLED + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************ + * * + * Helpers * + * * + ************************************************************************/ + +/* + * Many of these macros may later turn into functions. They + * shouldn't be used in #ifdef's preprocessor instructions. + */ +/** + * xmlXPathSetError: + * @ctxt: an XPath parser context + * @err: an xmlXPathError code + * + * Raises an error. + */ +#define xmlXPathSetError(ctxt, err) \ + { xmlXPatherror((ctxt), __FILE__, __LINE__, (err)); \ + if ((ctxt) != NULL) (ctxt)->error = (err); } + +/** + * xmlXPathSetArityError: + * @ctxt: an XPath parser context + * + * Raises an XPATH_INVALID_ARITY error. + */ +#define xmlXPathSetArityError(ctxt) \ + xmlXPathSetError((ctxt), XPATH_INVALID_ARITY) + +/** + * xmlXPathSetTypeError: + * @ctxt: an XPath parser context + * + * Raises an XPATH_INVALID_TYPE error. + */ +#define xmlXPathSetTypeError(ctxt) \ + xmlXPathSetError((ctxt), XPATH_INVALID_TYPE) + +/** + * xmlXPathGetError: + * @ctxt: an XPath parser context + * + * Get the error code of an XPath context. + * + * Returns the context error. + */ +#define xmlXPathGetError(ctxt) ((ctxt)->error) + +/** + * xmlXPathCheckError: + * @ctxt: an XPath parser context + * + * Check if an XPath error was raised. + * + * Returns true if an error has been raised, false otherwise. + */ +#define xmlXPathCheckError(ctxt) ((ctxt)->error != XPATH_EXPRESSION_OK) + +/** + * xmlXPathGetDocument: + * @ctxt: an XPath parser context + * + * Get the document of an XPath context. + * + * Returns the context document. + */ +#define xmlXPathGetDocument(ctxt) ((ctxt)->context->doc) + +/** + * xmlXPathGetContextNode: + * @ctxt: an XPath parser context + * + * Get the context node of an XPath context. + * + * Returns the context node. + */ +#define xmlXPathGetContextNode(ctxt) ((ctxt)->context->node) + +XMLPUBFUN int XMLCALL + xmlXPathPopBoolean (xmlXPathParserContextPtr ctxt); +XMLPUBFUN double XMLCALL + xmlXPathPopNumber (xmlXPathParserContextPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlXPathPopString (xmlXPathParserContextPtr ctxt); +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt); +XMLPUBFUN void * XMLCALL + xmlXPathPopExternal (xmlXPathParserContextPtr ctxt); + +/** + * xmlXPathReturnBoolean: + * @ctxt: an XPath parser context + * @val: a boolean + * + * Pushes the boolean @val on the context stack. + */ +#define xmlXPathReturnBoolean(ctxt, val) \ + valuePush((ctxt), xmlXPathNewBoolean(val)) + +/** + * xmlXPathReturnTrue: + * @ctxt: an XPath parser context + * + * Pushes true on the context stack. + */ +#define xmlXPathReturnTrue(ctxt) xmlXPathReturnBoolean((ctxt), 1) + +/** + * xmlXPathReturnFalse: + * @ctxt: an XPath parser context + * + * Pushes false on the context stack. + */ +#define xmlXPathReturnFalse(ctxt) xmlXPathReturnBoolean((ctxt), 0) + +/** + * xmlXPathReturnNumber: + * @ctxt: an XPath parser context + * @val: a double + * + * Pushes the double @val on the context stack. + */ +#define xmlXPathReturnNumber(ctxt, val) \ + valuePush((ctxt), xmlXPathNewFloat(val)) + +/** + * xmlXPathReturnString: + * @ctxt: an XPath parser context + * @str: a string + * + * Pushes the string @str on the context stack. + */ +#define xmlXPathReturnString(ctxt, str) \ + valuePush((ctxt), xmlXPathWrapString(str)) + +/** + * xmlXPathReturnEmptyString: + * @ctxt: an XPath parser context + * + * Pushes an empty string on the stack. + */ +#define xmlXPathReturnEmptyString(ctxt) \ + valuePush((ctxt), xmlXPathNewCString("")) + +/** + * xmlXPathReturnNodeSet: + * @ctxt: an XPath parser context + * @ns: a node-set + * + * Pushes the node-set @ns on the context stack. + */ +#define xmlXPathReturnNodeSet(ctxt, ns) \ + valuePush((ctxt), xmlXPathWrapNodeSet(ns)) + +/** + * xmlXPathReturnEmptyNodeSet: + * @ctxt: an XPath parser context + * + * Pushes an empty node-set on the context stack. + */ +#define xmlXPathReturnEmptyNodeSet(ctxt) \ + valuePush((ctxt), xmlXPathNewNodeSet(NULL)) + +/** + * xmlXPathReturnExternal: + * @ctxt: an XPath parser context + * @val: user data + * + * Pushes user data on the context stack. + */ +#define xmlXPathReturnExternal(ctxt, val) \ + valuePush((ctxt), xmlXPathWrapExternal(val)) + +/** + * xmlXPathStackIsNodeSet: + * @ctxt: an XPath parser context + * + * Check if the current value on the XPath stack is a node set or + * an XSLT value tree. + * + * Returns true if the current object on the stack is a node-set. + */ +#define xmlXPathStackIsNodeSet(ctxt) \ + (((ctxt)->value != NULL) \ + && (((ctxt)->value->type == XPATH_NODESET) \ + || ((ctxt)->value->type == XPATH_XSLT_TREE))) + +/** + * xmlXPathStackIsExternal: + * @ctxt: an XPath parser context + * + * Checks if the current value on the XPath stack is an external + * object. + * + * Returns true if the current object on the stack is an external + * object. + */ +#define xmlXPathStackIsExternal(ctxt) \ + ((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS)) + +/** + * xmlXPathEmptyNodeSet: + * @ns: a node-set + * + * Empties a node-set. + */ +#define xmlXPathEmptyNodeSet(ns) \ + { while ((ns)->nodeNr > 0) (ns)->nodeTab[--(ns)->nodeNr] = NULL; } + +/** + * CHECK_ERROR: + * + * Macro to return from the function if an XPath error was detected. + */ +#define CHECK_ERROR \ + if (ctxt->error != XPATH_EXPRESSION_OK) return + +/** + * CHECK_ERROR0: + * + * Macro to return 0 from the function if an XPath error was detected. + */ +#define CHECK_ERROR0 \ + if (ctxt->error != XPATH_EXPRESSION_OK) return(0) + +/** + * XP_ERROR: + * @X: the error code + * + * Macro to raise an XPath error and return. + */ +#define XP_ERROR(X) \ + { xmlXPathErr(ctxt, X); return; } + +/** + * XP_ERROR0: + * @X: the error code + * + * Macro to raise an XPath error and return 0. + */ +#define XP_ERROR0(X) \ + { xmlXPathErr(ctxt, X); return(0); } + +/** + * CHECK_TYPE: + * @typeval: the XPath type + * + * Macro to check that the value on top of the XPath stack is of a given + * type. + */ +#define CHECK_TYPE(typeval) \ + if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \ + XP_ERROR(XPATH_INVALID_TYPE) + +/** + * CHECK_TYPE0: + * @typeval: the XPath type + * + * Macro to check that the value on top of the XPath stack is of a given + * type. Return(0) in case of failure + */ +#define CHECK_TYPE0(typeval) \ + if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \ + XP_ERROR0(XPATH_INVALID_TYPE) + +/** + * CHECK_ARITY: + * @x: the number of expected args + * + * Macro to check that the number of args passed to an XPath function matches. + */ +#define CHECK_ARITY(x) \ + if (ctxt == NULL) return; \ + if (nargs != (x)) \ + XP_ERROR(XPATH_INVALID_ARITY); \ + if (ctxt->valueNr < ctxt->valueFrame + (x)) \ + XP_ERROR(XPATH_STACK_ERROR); + +/** + * CAST_TO_STRING: + * + * Macro to try to cast the value on the top of the XPath stack to a string. + */ +#define CAST_TO_STRING \ + if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING)) \ + xmlXPathStringFunction(ctxt, 1); + +/** + * CAST_TO_NUMBER: + * + * Macro to try to cast the value on the top of the XPath stack to a number. + */ +#define CAST_TO_NUMBER \ + if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER)) \ + xmlXPathNumberFunction(ctxt, 1); + +/** + * CAST_TO_BOOLEAN: + * + * Macro to try to cast the value on the top of the XPath stack to a boolean. + */ +#define CAST_TO_BOOLEAN \ + if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN)) \ + xmlXPathBooleanFunction(ctxt, 1); + +/* + * Variable Lookup forwarding. + */ + +XMLPUBFUN void XMLCALL + xmlXPathRegisterVariableLookup (xmlXPathContextPtr ctxt, + xmlXPathVariableLookupFunc f, + void *data); + +/* + * Function Lookup forwarding. + */ + +XMLPUBFUN void XMLCALL + xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt, + xmlXPathFuncLookupFunc f, + void *funcCtxt); + +/* + * Error reporting. + */ +XMLPUBFUN void XMLCALL + xmlXPatherror (xmlXPathParserContextPtr ctxt, + const char *file, + int line, + int no); + +XMLPUBFUN void XMLCALL + xmlXPathErr (xmlXPathParserContextPtr ctxt, + int error); + +#ifdef LIBXML_DEBUG_ENABLED +XMLPUBFUN void XMLCALL + xmlXPathDebugDumpObject (FILE *output, + xmlXPathObjectPtr cur, + int depth); +XMLPUBFUN void XMLCALL + xmlXPathDebugDumpCompExpr(FILE *output, + xmlXPathCompExprPtr comp, + int depth); +#endif +/** + * NodeSet handling. + */ +XMLPUBFUN int XMLCALL + xmlXPathNodeSetContains (xmlNodeSetPtr cur, + xmlNodePtr val); +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathDifference (xmlNodeSetPtr nodes1, + xmlNodeSetPtr nodes2); +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathIntersection (xmlNodeSetPtr nodes1, + xmlNodeSetPtr nodes2); + +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathDistinctSorted (xmlNodeSetPtr nodes); +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathDistinct (xmlNodeSetPtr nodes); + +XMLPUBFUN int XMLCALL + xmlXPathHasSameNodes (xmlNodeSetPtr nodes1, + xmlNodeSetPtr nodes2); + +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes, + xmlNodePtr node); +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathLeadingSorted (xmlNodeSetPtr nodes1, + xmlNodeSetPtr nodes2); +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathNodeLeading (xmlNodeSetPtr nodes, + xmlNodePtr node); +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathLeading (xmlNodeSetPtr nodes1, + xmlNodeSetPtr nodes2); + +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes, + xmlNodePtr node); +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathTrailingSorted (xmlNodeSetPtr nodes1, + xmlNodeSetPtr nodes2); +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathNodeTrailing (xmlNodeSetPtr nodes, + xmlNodePtr node); +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathTrailing (xmlNodeSetPtr nodes1, + xmlNodeSetPtr nodes2); + + +/** + * Extending a context. + */ + +XMLPUBFUN int XMLCALL + xmlXPathRegisterNs (xmlXPathContextPtr ctxt, + const xmlChar *prefix, + const xmlChar *ns_uri); +XMLPUBFUN const xmlChar * XMLCALL + xmlXPathNsLookup (xmlXPathContextPtr ctxt, + const xmlChar *prefix); +XMLPUBFUN void XMLCALL + xmlXPathRegisteredNsCleanup (xmlXPathContextPtr ctxt); + +XMLPUBFUN int XMLCALL + xmlXPathRegisterFunc (xmlXPathContextPtr ctxt, + const xmlChar *name, + xmlXPathFunction f); +XMLPUBFUN int XMLCALL + xmlXPathRegisterFuncNS (xmlXPathContextPtr ctxt, + const xmlChar *name, + const xmlChar *ns_uri, + xmlXPathFunction f); +XMLPUBFUN int XMLCALL + xmlXPathRegisterVariable (xmlXPathContextPtr ctxt, + const xmlChar *name, + xmlXPathObjectPtr value); +XMLPUBFUN int XMLCALL + xmlXPathRegisterVariableNS (xmlXPathContextPtr ctxt, + const xmlChar *name, + const xmlChar *ns_uri, + xmlXPathObjectPtr value); +XMLPUBFUN xmlXPathFunction XMLCALL + xmlXPathFunctionLookup (xmlXPathContextPtr ctxt, + const xmlChar *name); +XMLPUBFUN xmlXPathFunction XMLCALL + xmlXPathFunctionLookupNS (xmlXPathContextPtr ctxt, + const xmlChar *name, + const xmlChar *ns_uri); +XMLPUBFUN void XMLCALL + xmlXPathRegisteredFuncsCleanup (xmlXPathContextPtr ctxt); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathVariableLookup (xmlXPathContextPtr ctxt, + const xmlChar *name); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathVariableLookupNS (xmlXPathContextPtr ctxt, + const xmlChar *name, + const xmlChar *ns_uri); +XMLPUBFUN void XMLCALL + xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt); + +/** + * Utilities to extend XPath. + */ +XMLPUBFUN xmlXPathParserContextPtr XMLCALL + xmlXPathNewParserContext (const xmlChar *str, + xmlXPathContextPtr ctxt); +XMLPUBFUN void XMLCALL + xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt); + +/* TODO: remap to xmlXPathValuePop and Push. */ +XMLPUBFUN xmlXPathObjectPtr XMLCALL + valuePop (xmlXPathParserContextPtr ctxt); +XMLPUBFUN int XMLCALL + valuePush (xmlXPathParserContextPtr ctxt, + xmlXPathObjectPtr value); + +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathNewString (const xmlChar *val); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathNewCString (const char *val); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathWrapString (xmlChar *val); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathWrapCString (char * val); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathNewFloat (double val); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathNewBoolean (int val); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathNewNodeSet (xmlNodePtr val); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathNewValueTree (xmlNodePtr val); +XMLPUBFUN int XMLCALL + xmlXPathNodeSetAdd (xmlNodeSetPtr cur, + xmlNodePtr val); +XMLPUBFUN int XMLCALL + xmlXPathNodeSetAddUnique (xmlNodeSetPtr cur, + xmlNodePtr val); +XMLPUBFUN int XMLCALL + xmlXPathNodeSetAddNs (xmlNodeSetPtr cur, + xmlNodePtr node, + xmlNsPtr ns); +XMLPUBFUN void XMLCALL + xmlXPathNodeSetSort (xmlNodeSetPtr set); + +XMLPUBFUN void XMLCALL + xmlXPathRoot (xmlXPathParserContextPtr ctxt); +XMLPUBFUN void XMLCALL + xmlXPathEvalExpr (xmlXPathParserContextPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlXPathParseName (xmlXPathParserContextPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlXPathParseNCName (xmlXPathParserContextPtr ctxt); + +/* + * Existing functions. + */ +XMLPUBFUN double XMLCALL + xmlXPathStringEvalNumber (const xmlChar *str); +XMLPUBFUN int XMLCALL + xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt, + xmlXPathObjectPtr res); +XMLPUBFUN void XMLCALL + xmlXPathRegisterAllFunctions (xmlXPathContextPtr ctxt); +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathNodeSetMerge (xmlNodeSetPtr val1, + xmlNodeSetPtr val2); +XMLPUBFUN void XMLCALL + xmlXPathNodeSetDel (xmlNodeSetPtr cur, + xmlNodePtr val); +XMLPUBFUN void XMLCALL + xmlXPathNodeSetRemove (xmlNodeSetPtr cur, + int val); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathNewNodeSetList (xmlNodeSetPtr val); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathWrapNodeSet (xmlNodeSetPtr val); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPathWrapExternal (void *val); + +XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt); +XMLPUBFUN int XMLCALL xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt); +XMLPUBFUN int XMLCALL xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict); +XMLPUBFUN void XMLCALL xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt); +XMLPUBFUN void XMLCALL xmlXPathAddValues(xmlXPathParserContextPtr ctxt); +XMLPUBFUN void XMLCALL xmlXPathSubValues(xmlXPathParserContextPtr ctxt); +XMLPUBFUN void XMLCALL xmlXPathMultValues(xmlXPathParserContextPtr ctxt); +XMLPUBFUN void XMLCALL xmlXPathDivValues(xmlXPathParserContextPtr ctxt); +XMLPUBFUN void XMLCALL xmlXPathModValues(xmlXPathParserContextPtr ctxt); + +XMLPUBFUN int XMLCALL xmlXPathIsNodeType(const xmlChar *name); + +/* + * Some of the axis navigation routines. + */ +XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt, + xmlNodePtr cur); +XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt, + xmlNodePtr cur); +XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt, + xmlNodePtr cur); +XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt, + xmlNodePtr cur); +XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt, + xmlNodePtr cur); +XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt, + xmlNodePtr cur); +XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt, + xmlNodePtr cur); +XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt, + xmlNodePtr cur); +XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt, + xmlNodePtr cur); +XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt, + xmlNodePtr cur); +XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt, + xmlNodePtr cur); +XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt, + xmlNodePtr cur); +XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt, + xmlNodePtr cur); +/* + * The official core of XPath functions. + */ +XMLPUBFUN void XMLCALL xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs); +XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs); + +/** + * Really internal functions + */ +XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_XPATH_ENABLED */ +#endif /* ! __XML_XPATH_INTERNALS_H__ */ diff --git a/libxml2/include/libxml/xpointer.h b/libxml2/include/libxml/xpointer.h new file mode 100644 index 0000000..b99112b --- /dev/null +++ b/libxml2/include/libxml/xpointer.h @@ -0,0 +1,114 @@ +/* + * Summary: API to handle XML Pointers + * Description: API to handle XML Pointers + * Base implementation was made accordingly to + * W3C Candidate Recommendation 7 June 2000 + * http://www.w3.org/TR/2000/CR-xptr-20000607 + * + * Added support for the element() scheme described in: + * W3C Proposed Recommendation 13 November 2002 + * http://www.w3.org/TR/2002/PR-xptr-element-20021113/ + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_XPTR_H__ +#define __XML_XPTR_H__ + +#include + +#ifdef LIBXML_XPTR_ENABLED + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A Location Set + */ +typedef struct _xmlLocationSet xmlLocationSet; +typedef xmlLocationSet *xmlLocationSetPtr; +struct _xmlLocationSet { + int locNr; /* number of locations in the set */ + int locMax; /* size of the array as allocated */ + xmlXPathObjectPtr *locTab;/* array of locations */ +}; + +/* + * Handling of location sets. + */ + +XMLPUBFUN xmlLocationSetPtr XMLCALL + xmlXPtrLocationSetCreate (xmlXPathObjectPtr val); +XMLPUBFUN void XMLCALL + xmlXPtrFreeLocationSet (xmlLocationSetPtr obj); +XMLPUBFUN xmlLocationSetPtr XMLCALL + xmlXPtrLocationSetMerge (xmlLocationSetPtr val1, + xmlLocationSetPtr val2); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPtrNewRange (xmlNodePtr start, + int startindex, + xmlNodePtr end, + int endindex); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPtrNewRangePoints (xmlXPathObjectPtr start, + xmlXPathObjectPtr end); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPtrNewRangeNodePoint (xmlNodePtr start, + xmlXPathObjectPtr end); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPtrNewRangePointNode (xmlXPathObjectPtr start, + xmlNodePtr end); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPtrNewRangeNodes (xmlNodePtr start, + xmlNodePtr end); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPtrNewLocationSetNodes (xmlNodePtr start, + xmlNodePtr end); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPtrNewLocationSetNodeSet(xmlNodeSetPtr set); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPtrNewRangeNodeObject (xmlNodePtr start, + xmlXPathObjectPtr end); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPtrNewCollapsedRange (xmlNodePtr start); +XMLPUBFUN void XMLCALL + xmlXPtrLocationSetAdd (xmlLocationSetPtr cur, + xmlXPathObjectPtr val); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPtrWrapLocationSet (xmlLocationSetPtr val); +XMLPUBFUN void XMLCALL + xmlXPtrLocationSetDel (xmlLocationSetPtr cur, + xmlXPathObjectPtr val); +XMLPUBFUN void XMLCALL + xmlXPtrLocationSetRemove (xmlLocationSetPtr cur, + int val); + +/* + * Functions. + */ +XMLPUBFUN xmlXPathContextPtr XMLCALL + xmlXPtrNewContext (xmlDocPtr doc, + xmlNodePtr here, + xmlNodePtr origin); +XMLPUBFUN xmlXPathObjectPtr XMLCALL + xmlXPtrEval (const xmlChar *str, + xmlXPathContextPtr ctx); +XMLPUBFUN void XMLCALL + xmlXPtrRangeToFunction (xmlXPathParserContextPtr ctxt, + int nargs); +XMLPUBFUN xmlNodePtr XMLCALL + xmlXPtrBuildNodeList (xmlXPathObjectPtr obj); +XMLPUBFUN void XMLCALL + xmlXPtrEvalRangePredicate (xmlXPathParserContextPtr ctxt); +#ifdef __cplusplus +} +#endif + +#endif /* LIBXML_XPTR_ENABLED */ +#endif /* __XML_XPTR_H__ */ diff --git a/libxml2/lib/libxml2.a b/libxml2/lib/libxml2.a new file mode 100644 index 0000000000000000000000000000000000000000..ec8a1cd55c84ee44a6ec7ea6800b2be4f60043db GIT binary patch literal 2715444 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

urior@5jl-y6S2iQE9Zc?qeX=V= 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

k@={g2YQs9DRi!N`@CQcqVy1o8&xS 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

qIdglkX0$COih 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 C=N7Xm_Jt+bpA0YMB&%enHQ zM8CA0>q3$tpRMRZXD21dvEV{)r)@1vuB|E)E{xZt1h1swMRAG5=y^;G${5seDj6do zArtRnULrauv7AH2u&}{77QZ|AJw|c34D^$UgL>#mY(+-XxkxJljN`=hM38uuYT_P9 zCZmyxNvAXCoLGJz$L~&lkK_08{2tHm3H+YO?@9cg%(z!Ym^&QbF-WjdpUC}DuP2y@5zeowK z;%<^%tGFjx#l6ug!V#gOYV@C}QLW>Bl+ZffPYJE#1C-D@K1kwd9lt~gt>b8%>HSx*JUdm6&eTjV4DGrK5?kV(Vzmri9Yb%!$&`L}anM z(L{8!bu>AiC>>1%6fvZ9G!Y?O9ZE+NA;Q(6bTlzLq|Q=0nmj!y9ci7Blu$UcwGl32 z(gacCRmyoOQ8Kf(ssbel*hvY?RLK%*v_d6Hu)c|{REbimQ=<|~iL6c~Fqep-HEc^) z&v_Ug2vf#H==JL}4Oh9QPc){0=xJR8#1qm#sRnh?pT?mHcs)!vA(#7ZYNCO#JmC&0 z5Pe}<%CGehgc&EK>mkU2**UWz57iNvCp?revtcgq#e}tYB1%tqNcEgCpRALv1x7rc za378R37Pz!t3=sA4x;cDl>UIlN>8NU@=2Yc#KH2|&m-Oe}34Rt%;qJ(be zF-m9yJWia`73(J`p(D_@NgNe{o>a6dl!@L3!B-T12Q@#k z@b)fgl=}L)pl52gAtQfEI@~ai9b=R!Pe%2Wvq6&(Lse6-R&ig-Q9VCpCGc^M>M5&G zrnc8oDhbQ=LJB5G3};DGMJ>toLP|B|%k@G^4bjW>LP{;=%k@Ia<%H!rG-Wkmxn4-A zBYL@BNV$TrTrZ?t30x!B3n^C-&Q;>CK*JxA{_a9HONxb@v_#5DONDM}nQ26hx0wA| z(iu}Mw33#~Bo`6MQcdEP&-AJ9O8dEBzqI}{4J^)&;rCc6jB7gRD~NBxB(`WWhEUpF z+|WJL(3jCrVlDR()}o+;ZOE}u^gWh=i_*SHMb59WKFP*sQ2HA4cniewdyqV-1x`u; zLVZPgjSv%^L^?4E%}vZ2K{kwb1JSB_L%?3Hw-ikzI+46GQde{T0#T_Nn1?2IbB!Ri zv^zpgXoy?VZ_rrPdKjd-O^ktwk1~fRh{IdMIIv#KCW_bXn#~KK{{vV33#v{^9#)kr zOt?eSz5;?NL^~;iXuZQ|mHAjuUE$ZD;y#>IMHSZS3h^Il3amNe7AcMX5`|BJ{0467 z7OHu#uF0*WeOXmEVckhzVY06i*|QNc?)^zWq}Uq;zvGmJ!&jIzlHhVaFyvK`AnV!uZvOeEgQR0+^cN|s?Z*&^TYW~&km+evG4 zRU#INj(nAXwv(t0nd9*K8LR3aWKq%2bjjPmreD^vneGksR2 zN+9H>7uBdlG7>B5RKkVC6>C%?1u9&5wMtAt$%Tz7k&2S67L~vV7W3K!hp?duSpJ;# zNCvV-+cM$cHSF0(hBJQu2S1)L&oq9YD8uChOcZA&bD*5y2mCJi@>z#Segvemehq&% z-^N?o0laZC?EnuEu}oI_ELD;a6Z{mDr>=wvx6<|l42*Tc=V@w@4|b18}Co z>p)YZa3Bh!`|Y|gw~f*NG5Zz$?NRynMB)8W_+O&%6H#@)8A-pjt~NCU~)KTB@w+#u4($Sb6;rg;dPvb)k| zfaWc#^fRvHOgmSIX--*bCJ5)LO4JYY)Dw3a+-X`mDot~8C0ANDa4nCDwAmn33%ax% z!g5rkq4TEI$^~5-9ucNpmB7R8?1#wX&VHS}APp^1n!Q&0}*(TAc7

2MKX+82@;a%HlKW1A_G%zfty`nJu%f<+E(_Ud4 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�%EUf0CtplASSbudO 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

0@&iIDV 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

#UT7q0sC?A>FT$go`}HqtoF&D&Z# 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%0DQK1Gj@%;KwNtjj2%{X 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 literal 0 HcmV?d00001 diff --git a/meta/icon.png b/meta/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7d306672b0f6435d6f7b395c1a1aa9ee81a9da91 GIT binary patch literal 1714 zcmZXV`8(8$9>+i58OAIb`%d9nN>s9q{YzXVnv4vJrV>468Hbo_Jja*HrEBYS9{y`?RJofa`SToXvn8*otE9sB(`@*0s!^NpMyM$ ztBlx|XX!@*J-11aLnu_7k~&^l1FxYcW4Kp#w-v#{LC(sJXzxvOIZF0mQVxgjIC@V0 zcr-OMfyzozh)h?!n57h-ubf<@l3K2s@vB?6{AITOem*rR)TEVfT(q*S@w%TR+>88IGyd&aYBwU#EV9TiKh&r9E9G z);-Gm-H9Z^v|U;O5&>E$;eWxuQ!c5I%z#l30)eu?t8Ce2h*bw^cs46xp&MLI&*wvL za0NS^7xOa|&~NUN{KkJ?zdzpxbJuBUs){0MmHgn4+pQkj+Nm*5mV+PRK$_~DXrlP8 z{>=qJn#DYK%R3U!8lY}$7~hu`I%LNSyECOq_hDOYn(+60YyU}sC056YwI18UoC^gK zlK4vyI&iR`aDej<%BBm2|MyQt!xG?7Q5{e~ojV%z<{PJ0Kj-E^$vH$Uk+P%ALw*vO z@5Z z*Cs(USAr!1fA2X{P^PWINsPI$AU7>{3O>fZP##IF0s6_3p6}%diW9BKbS92meA@r-LRd4$=&LKY zjNPESgCOu9@)h0w5cEes*_lZYG~Y%!Hk@dYIVrAdl#%z6MazB9YM)j_$1d3+S(#Pg zV`1roSe<4a^R28PhJt=|?_~_Ch_9Tn%nLvI@-&=(jTeM%HS&~dQzqhV%Yt+6jt&2i zd5%X#h|jp65Mc=Yi$_cCmG1Nj<4dI#%-a&JLPQIvn75%0JSIN0Md&%9Jiyn8V()A& z@GcuFz1gq>XvqtaBg$ZnC~+Dr<|&WZ1k-Tp!y`F;69{HPkB1Syqu1pKpI0)iuF&bY z=1(`ggBYpstpEI;;E)}l)dorPOb71W zJy3oun21JH!~qs~Ph{lx{f~Y*ad6r@A{Ofkmisr=%yIcR@urc~33d%Ea;R`h`Qtd0 zh>zVQL2Z}rR3RL;#mtH;OMq8bOLMib!?E_+E^@ExEoa5z|YKogrWjNC-GmEz--F6=}c}+T6YR1djM~; z+BOOGrZvtj1~AMtz2K<9$9xn@y~2a`$?}q@%hSJ;oxILFzy(K(GvRhACo+l^4%(yT(E+X! + + SaveMii + Ryuzaki_MrL + 1.0.0 + 00000000000000 + Wii U Save Manager + Wii U Save Manager + \ No newline at end of file diff --git a/src/common/common.h b/src/common/common.h new file mode 100644 index 0000000..538b5ad --- /dev/null +++ b/src/common/common.h @@ -0,0 +1,36 @@ +#ifndef COMMON_H +#define COMMON_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "os_defs.h" + +#define CAFE_OS_SD_PATH "/vol/external01" +#define SD_PATH "sd:" +#define WIIU_PATH "/wiiu" + +#ifndef MEM_BASE +#define MEM_BASE (0x00800000) +#endif + +#define ELF_DATA_ADDR (*(volatile unsigned int*)(MEM_BASE + 0x1300 + 0x00)) +#define ELF_DATA_SIZE (*(volatile unsigned int*)(MEM_BASE + 0x1300 + 0x04)) +#define MAIN_ENTRY_ADDR (*(volatile unsigned int*)(MEM_BASE + 0x1400 + 0x00)) +#define OS_FIRMWARE (*(volatile unsigned int*)(MEM_BASE + 0x1400 + 0x04)) + +#define OS_SPECIFICS ((OsSpecifics*)(MEM_BASE + 0x1500)) + +#ifndef EXIT_SUCCESS +#define EXIT_SUCCESS 0 +#endif +#define EXIT_HBL_EXIT 0xFFFFFFFE +#define EXIT_RELAUNCH_ON_LOAD 0xFFFFFFFD + +#ifdef __cplusplus +} +#endif + +#endif /* COMMON_H */ + diff --git a/src/common/fs_defs.h b/src/common/fs_defs.h new file mode 100644 index 0000000..feda725 --- /dev/null +++ b/src/common/fs_defs.h @@ -0,0 +1,62 @@ +#ifndef FS_DEFS_H +#define FS_DEFS_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* FS defines and types */ +#define FS_MAX_LOCALPATH_SIZE 511 +#define FS_MAX_MOUNTPATH_SIZE 128 +#define FS_MAX_FULLPATH_SIZE (FS_MAX_LOCALPATH_SIZE + FS_MAX_MOUNTPATH_SIZE) +#define FS_MAX_ARGPATH_SIZE FS_MAX_FULLPATH_SIZE + +#define FS_STATUS_OK 0 +#define FS_RET_UNSUPPORTED_CMD 0x0400 +#define FS_RET_NO_ERROR 0x0000 +#define FS_RET_ALL_ERROR (unsigned int)(-1) + +#define FS_STAT_FLAG_IS_DIRECTORY 0x80000000 + +/* max length of file/dir name */ +#define FS_MAX_ENTNAME_SIZE 256 + +#define FS_SOURCETYPE_EXTERNAL 0 +#define FS_SOURCETYPE_HFIO 1 +#define FS_SOURCETYPE_HFIO 1 + +#define FS_MOUNT_SOURCE_SIZE 0x300 +#define FS_CLIENT_SIZE 0x1700 +#define FS_CMD_BLOCK_SIZE 0xA80 + +typedef struct +{ + uint32_t flag; + uint32_t permission; + uint32_t owner_id; + uint32_t group_id; + uint32_t size; + uint32_t alloc_size; + uint64_t quota_size; + uint32_t ent_id; + uint64_t ctime; + uint64_t mtime; + uint8_t attributes[48]; +} __attribute__((packed)) FSStat; + +typedef struct +{ + FSStat stat; + char name[FS_MAX_ENTNAME_SIZE]; +} FSDirEntry; + + +#ifdef __cplusplus +} +#endif + +#endif /* FS_DEFS_H */ + diff --git a/src/common/os_defs.h b/src/common/os_defs.h new file mode 100644 index 0000000..48a4c8f --- /dev/null +++ b/src/common/os_defs.h @@ -0,0 +1,25 @@ +#ifndef __OS_DEFS_H_ +#define __OS_DEFS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _OsSpecifics +{ + unsigned int addr_OSDynLoad_Acquire; + unsigned int addr_OSDynLoad_FindExport; + unsigned int addr_OSTitle_main_entry; + + unsigned int addr_KernSyscallTbl1; + unsigned int addr_KernSyscallTbl2; + unsigned int addr_KernSyscallTbl3; + unsigned int addr_KernSyscallTbl4; + unsigned int addr_KernSyscallTbl5; +} OsSpecifics; + +#ifdef __cplusplus +} +#endif + +#endif // __OS_DEFS_H_ diff --git a/src/common/types.h b/src/common/types.h new file mode 100644 index 0000000..3435e56 --- /dev/null +++ b/src/common/types.h @@ -0,0 +1,7 @@ +#ifndef TYPES_H +#define TYPES_H + +#include + +#endif /* TYPES_H */ + diff --git a/src/dynamic_libs/acp_functions.c b/src/dynamic_libs/acp_functions.c new file mode 100644 index 0000000..eb931f8 --- /dev/null +++ b/src/dynamic_libs/acp_functions.c @@ -0,0 +1,40 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "os_functions.h" +#include "acp_functions.h" + +unsigned int acp_handle __attribute__((section(".data"))) = 0; + +EXPORT_DECL(void, GetMetaXml, void * _ACPMetaXml); + +void InitAcquireACP(void) +{ + OSDynLoad_Acquire("nn_acp.rpl", &acp_handle); +} + +void InitACPFunctionPointers(void) +{ + InitAcquireACP(); + OSDynLoad_FindExport(acp_handle,0,"GetMetaXml__Q2_2nn3acpFP11_ACPMetaXml",&GetMetaXml); +} diff --git a/src/dynamic_libs/acp_functions.h b/src/dynamic_libs/acp_functions.h new file mode 100644 index 0000000..dc1822d --- /dev/null +++ b/src/dynamic_libs/acp_functions.h @@ -0,0 +1,42 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __ACP_FUNCTIONS_H_ +#define __ACP_FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +extern unsigned int acp_handle; + +void InitACPFunctionPointers(void); +void InitAcquireACP(void); + +#ifdef __cplusplus +} +#endif + +#endif // __VPAD_FUNCTIONS_H_ diff --git a/src/dynamic_libs/aoc_functions.c b/src/dynamic_libs/aoc_functions.c new file mode 100644 index 0000000..e74306d --- /dev/null +++ b/src/dynamic_libs/aoc_functions.c @@ -0,0 +1,58 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "os_functions.h" +#include "aoc_functions.h" + +unsigned int aoc_handle __attribute__((section(".data"))) = 0; + +EXPORT_DECL(s32, AOC_Initialize, void); +EXPORT_DECL(s32, AOC_Finalize, void); +EXPORT_DECL(u32, AOC_CalculateWorkBufferSize, u32 num_titles); +EXPORT_DECL(s32, AOC_ListTitle, u32 * num_titles, void * titles, u32 max_titles, void * buffer, u32 buffer_size); +EXPORT_DECL(s32, AOC_OpenTitle, char* aoc_path, void * title, void * buffer, u32 buffer_size); +EXPORT_DECL(s32, AOC_CloseTitle, void * title); +EXPORT_DECL(s32, AOC_DeleteContent, u64 title_id, u16 contentIndexes[], u32 numberOfContent, void* buffer, u32 buffer_size); +EXPORT_DECL(s32, AOC_GetPurchaseInfo, u32 * bResult, u64 title_id, u16 contentIndexes[], u32 numberOfContent, void * buffer, u32 buffer_size); + +void InitAcquireAoc(void) +{ + OSDynLoad_Acquire("nn_aoc.rpl", &aoc_handle); +} + +void InitAocFunctionPointers(void) +{ + InitAcquireAoc(); + if(aoc_handle == 0) + return; + + //! assigning those is not mandatory and it does not always work to load them + OSDynLoad_FindExport(aoc_handle, 0, "AOC_Initialize", &AOC_Initialize); + OSDynLoad_FindExport(aoc_handle, 0, "AOC_Finalize", &AOC_Finalize); + OSDynLoad_FindExport(aoc_handle, 0, "AOC_CalculateWorkBufferSize", &AOC_CalculateWorkBufferSize); + OSDynLoad_FindExport(aoc_handle, 0, "AOC_ListTitle", &AOC_ListTitle); + OSDynLoad_FindExport(aoc_handle, 0, "AOC_OpenTitle", &AOC_OpenTitle); + OSDynLoad_FindExport(aoc_handle, 0, "AOC_CloseTitle", &AOC_CloseTitle); + OSDynLoad_FindExport(aoc_handle, 0, "AOC_DeleteContent", &AOC_DeleteContent); + OSDynLoad_FindExport(aoc_handle, 0, "AOC_GetPurchaseInfo", &AOC_GetPurchaseInfo); +} diff --git a/src/dynamic_libs/aoc_functions.h b/src/dynamic_libs/aoc_functions.h new file mode 100644 index 0000000..efca771 --- /dev/null +++ b/src/dynamic_libs/aoc_functions.h @@ -0,0 +1,58 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __AOC_FUNCTIONS_H_ +#define __AOC_FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +extern unsigned int aoc_handle; + +#define AOC_TITLE_SIZE 104 + +typedef struct { + u64 title_ID; + u32 group_ID; + u16 version; + char path[88]; +} AOC_TitleListType; + + +void InitAocFunctionPointers(void); +void InitAcquireAoc(void); + +extern s32 (* AOC_Initialize)(void); +extern s32 (* AOC_Finalize)(void); +extern u32 (* AOC_CalculateWorkBufferSize)(u32 num_titles); +extern s32 (* AOC_ListTitle)(u32 * num_titles, void * titles, u32 max_titles, void * buffer, u32 buffer_size); +extern s32 (* AOC_OpenTitle)(char* aoc_path, void * title, void * buffer, u32 buffer_size); +extern s32 (* AOC_CloseTitle)(void * title); +extern s32 (* AOC_DeleteContent)(u64 title_id, u16 contentIndexes[], u32 numberOfContent, void * buffer, u32 buffer_size); +extern s32 (* AOC_GetPurchaseInfo)(u32 * bResult, u64 title_id, u16 contentIndexes[], u32 numberOfContent, void * buffer, u32 buffer_size); +#ifdef __cplusplus +} +#endif + +#endif // __AOC_FUNCTIONS_H_ diff --git a/src/dynamic_libs/ax_functions.c b/src/dynamic_libs/ax_functions.c new file mode 100644 index 0000000..e517f6d --- /dev/null +++ b/src/dynamic_libs/ax_functions.c @@ -0,0 +1,118 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "common/common.h" +#include "os_functions.h" +#include "ax_functions.h" + +unsigned int sound_handle __attribute__((section(".data"))) = 0; + +EXPORT_DECL(void, AXInitWithParams, u32 * params); +EXPORT_DECL(void, AXInit, void); +EXPORT_DECL(void, AXQuit, void); +EXPORT_DECL(u32, AXGetInputSamplesPerSec, void); +EXPORT_DECL(u32, AXGetInputSamplesPerFrame, void); +EXPORT_DECL(s32, AXVoiceBegin, void *v); +EXPORT_DECL(s32, AXVoiceEnd, void *v); +EXPORT_DECL(void, AXSetVoiceType, void *v, u16 type); +EXPORT_DECL(void, AXSetVoiceOffsets, void *v, const void *buf); +EXPORT_DECL(void, AXSetVoiceSrcType, void *v, u32 type); +EXPORT_DECL(void, AXSetVoiceVe, void *v, const void *vol); +EXPORT_DECL(s32, AXSetVoiceDeviceMix, void *v, s32 device, u32 id, void *mix); +EXPORT_DECL(void, AXSetVoiceState, void *v, u16 state); +EXPORT_DECL(void, AXSetVoiceSrc, void *v, const void *src); +EXPORT_DECL(s32, AXSetVoiceSrcRatio, void *v,f32 ratio) +EXPORT_DECL(void *, AXAcquireVoice, u32 prio, void * callback, u32 arg); +EXPORT_DECL(void, AXFreeVoice, void *v); +EXPORT_DECL(void, AXRegisterFrameCallback, void * callback); +EXPORT_DECL(u32, AXGetVoiceLoopCount, void *v); +EXPORT_DECL(void, AXSetVoiceEndOffset, void *v, u32 offset); +EXPORT_DECL(void, AXSetVoiceLoopOffset, void *v, u32 offset); + +void InitAcquireAX(void) +{ + unsigned int *funcPointer = 0; + + if(OS_FIRMWARE >= 400) + { + AXInit = 0; + + OSDynLoad_Acquire("sndcore2.rpl", &sound_handle); + OS_FIND_EXPORT(sound_handle, AXInitWithParams); + OS_FIND_EXPORT(sound_handle, AXGetInputSamplesPerSec); + } + else + { + AXInitWithParams = 0; + AXGetInputSamplesPerSec = 0; + + OSDynLoad_Acquire("snd_core.rpl", &sound_handle); + OS_FIND_EXPORT(sound_handle, AXInit); + } +} + +void InitAXFunctionPointers(void) +{ + unsigned int *funcPointer = 0; + + InitAcquireAX(); + + OS_FIND_EXPORT(sound_handle, AXQuit); + OS_FIND_EXPORT(sound_handle, AXVoiceBegin); + OS_FIND_EXPORT(sound_handle, AXVoiceEnd); + OS_FIND_EXPORT(sound_handle, AXSetVoiceType); + OS_FIND_EXPORT(sound_handle, AXSetVoiceOffsets); + OS_FIND_EXPORT(sound_handle, AXSetVoiceSrcType); + OS_FIND_EXPORT(sound_handle, AXSetVoiceVe); + OS_FIND_EXPORT(sound_handle, AXSetVoiceDeviceMix); + OS_FIND_EXPORT(sound_handle, AXSetVoiceState); + OS_FIND_EXPORT(sound_handle, AXSetVoiceSrc); + OS_FIND_EXPORT(sound_handle, AXSetVoiceSrcRatio); + OS_FIND_EXPORT(sound_handle, AXAcquireVoice); + OS_FIND_EXPORT(sound_handle, AXFreeVoice); + OS_FIND_EXPORT(sound_handle, AXRegisterFrameCallback); + OS_FIND_EXPORT(sound_handle, AXGetVoiceLoopCount); + OS_FIND_EXPORT(sound_handle, AXSetVoiceEndOffset); + OS_FIND_EXPORT(sound_handle, AXSetVoiceLoopOffset); +} + +void ProperlyEndTransitionAudio(void) +{ + bool (* check_os_audio_transition_flag_old)(void); + void (* AXInit_old)(void); + void (* AXQuit_old)(void); + + unsigned int *funcPointer = 0; + unsigned int sound_handle; + OSDynLoad_Acquire("snd_core.rpl", &sound_handle); + + OS_FIND_EXPORT_EX(sound_handle, check_os_audio_transition_flag, check_os_audio_transition_flag_old); + OS_FIND_EXPORT_EX(sound_handle, AXInit, AXInit_old); + OS_FIND_EXPORT_EX(sound_handle, AXQuit, AXQuit_old); + + if (check_os_audio_transition_flag_old()) + { + AXInit_old(); + AXQuit_old(); + } +} diff --git a/src/dynamic_libs/ax_functions.h b/src/dynamic_libs/ax_functions.h new file mode 100644 index 0000000..086346f --- /dev/null +++ b/src/dynamic_libs/ax_functions.h @@ -0,0 +1,64 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __AX_FUNCTIONS_H_ +#define __AX_FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +extern unsigned int sound_handle; + +void InitAXFunctionPointers(void); +void InitAcquireAX(void); +void ProperlyEndTransitionAudio(void); + +extern void (* AXInitWithParams)(u32 * params); +extern void (* AXInit)(void); +extern void (* AXQuit)(void); +extern u32 (* AXGetInputSamplesPerSec)(void); +extern s32 (* AXVoiceBegin)(void *v); +extern s32 (* AXVoiceEnd)(void *v); +extern void (* AXSetVoiceType)(void *v, u16 type); +extern void (* AXSetVoiceOffsets)(void *v, const void *buf); +extern void (* AXSetVoiceSrcType)(void *v, u32 type); +extern void (* AXSetVoiceVe)(void *v, const void *vol); +extern s32 (* AXSetVoiceDeviceMix)(void *v, s32 device, u32 id, void *mix); +extern void (* AXSetVoiceState)(void *v, u16 state); +extern void (* AXSetVoiceSrc)(void *v, const void *src); +extern s32 (* AXSetVoiceSrcRatio)(void *v, f32 ratio); +extern void * (* AXAcquireVoice)(u32 prio, void * callback, u32 arg); +extern void (* AXFreeVoice)(void *v); +extern void (* AXRegisterFrameCallback)(void * callback); +extern u32 (* AXGetVoiceLoopCount)(void * v); +extern void (* AXSetVoiceEndOffset)(void * v, u32 offset); +extern void (* AXSetVoiceLoopOffset)(void * v, u32 offset); + +#ifdef __cplusplus +} +#endif + +#endif // __VPAD_FUNCTIONS_H_ diff --git a/src/dynamic_libs/curl_functions.c b/src/dynamic_libs/curl_functions.c new file mode 100644 index 0000000..0c2988e --- /dev/null +++ b/src/dynamic_libs/curl_functions.c @@ -0,0 +1,54 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "os_functions.h" +#include "curl_functions.h" + +u32 libcurl_handle __attribute__((section(".data"))) = 0; + +EXPORT_DECL(CURLcode, n_curl_global_init, long flags); +EXPORT_DECL(CURL *, n_curl_easy_init, void); +EXPORT_DECL(CURLcode, n_curl_easy_setopt, CURL *curl, CURLoption option, ...); +EXPORT_DECL(CURLcode, n_curl_easy_perform, CURL *curl); +EXPORT_DECL(void, n_curl_easy_cleanup, CURL *curl); +EXPORT_DECL(CURLcode, n_curl_easy_getinfo, CURL *curl, CURLINFO info, ...); + +void InitAcquireCurl(void) +{ + OSDynLoad_Acquire("nlibcurl", &libcurl_handle); +} + +void InitCurlFunctionPointers(void) +{ + InitAcquireCurl(); + unsigned int *funcPointer = 0; + + OS_FIND_EXPORT_EX(libcurl_handle, curl_global_init, n_curl_global_init); + OS_FIND_EXPORT_EX(libcurl_handle, curl_easy_init, n_curl_easy_init); + OS_FIND_EXPORT_EX(libcurl_handle, curl_easy_setopt, n_curl_easy_setopt); + OS_FIND_EXPORT_EX(libcurl_handle, curl_easy_perform, n_curl_easy_perform); + OS_FIND_EXPORT_EX(libcurl_handle, curl_easy_cleanup, n_curl_easy_cleanup); + OS_FIND_EXPORT_EX(libcurl_handle, curl_easy_getinfo, n_curl_easy_getinfo); + + n_curl_global_init(CURL_GLOBAL_ALL); +} diff --git a/src/dynamic_libs/curl_functions.h b/src/dynamic_libs/curl_functions.h new file mode 100644 index 0000000..e40740b --- /dev/null +++ b/src/dynamic_libs/curl_functions.h @@ -0,0 +1,51 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __CURL_FUNCTIONS_H_ +#define __CURL_FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "socket_functions.h" +typedef int socklen_t; +#include +#include + +void InitCurlFunctionPointers(void); +void InitAcquireCurl(void); + +extern CURLcode (* n_curl_global_init)(long flags); +extern CURL * (* n_curl_easy_init)(void); +extern CURLcode (* n_curl_easy_setopt)(CURL *curl, CURLoption option, ...); +extern CURLcode (* n_curl_easy_perform)(CURL *curl); +extern void (* n_curl_easy_cleanup)(CURL *curl); +extern CURLcode (* n_curl_easy_getinfo)(CURL *curl, CURLINFO info, ...); + +#ifdef __cplusplus +} +#endif + +#endif // __CURL_FUNCTIONS_H_ diff --git a/src/dynamic_libs/fs_defs.h b/src/dynamic_libs/fs_defs.h new file mode 100644 index 0000000..1b1bc41 --- /dev/null +++ b/src/dynamic_libs/fs_defs.h @@ -0,0 +1,61 @@ +#ifndef FS_DEFS_H +#define FS_DEFS_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* FS defines and types */ +#define FS_MAX_LOCALPATH_SIZE 511 +#define FS_MAX_MOUNTPATH_SIZE 128 +#define FS_MAX_FULLPATH_SIZE (FS_MAX_LOCALPATH_SIZE + FS_MAX_MOUNTPATH_SIZE) +#define FS_MAX_ARGPATH_SIZE FS_MAX_FULLPATH_SIZE + +#define FS_STATUS_OK 0 +#define FS_RET_UNSUPPORTED_CMD 0x0400 +#define FS_RET_NO_ERROR 0x0000 +#define FS_RET_ALL_ERROR (unsigned int)(-1) + +#define FS_STAT_FLAG_IS_DIRECTORY 0x80000000 + +/* max length of file/dir name */ +#define FS_MAX_ENTNAME_SIZE 256 + +#define FS_SOURCETYPE_EXTERNAL 0 +#define FS_SOURCETYPE_HFIO 1 + +#define FS_MOUNT_SOURCE_SIZE 0x300 +#define FS_CLIENT_SIZE 0x1700 +#define FS_CMD_BLOCK_SIZE 0xA80 + +typedef struct +{ + uint32_t flag; + uint32_t permission; + uint32_t owner_id; + uint32_t group_id; + uint32_t size; + uint32_t alloc_size; + uint64_t quota_size; + uint32_t ent_id; + uint64_t ctime; + uint64_t mtime; + uint8_t attributes[48]; +} __attribute__((packed)) FSStat; + +typedef struct +{ + FSStat stat; + char name[FS_MAX_ENTNAME_SIZE]; +} FSDirEntry; + + +#ifdef __cplusplus +} +#endif + +#endif /* FS_DEFS_H */ + diff --git a/src/dynamic_libs/fs_functions.c b/src/dynamic_libs/fs_functions.c new file mode 100644 index 0000000..08a4fb6 --- /dev/null +++ b/src/dynamic_libs/fs_functions.c @@ -0,0 +1,131 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "fs_functions.h" +#include "os_functions.h" + +EXPORT_DECL(int, FSInit, void); +EXPORT_DECL(int, FSShutdown, void); +EXPORT_DECL(int, FSAddClientEx, void *pClient, int unk_zero_param, int errHandling); +EXPORT_DECL(int, FSDelClient, void *pClient); +EXPORT_DECL(void, FSInitCmdBlock, void *pCmd); +EXPORT_DECL(int, FSGetMountSource, void *pClient, void *pCmd, int type, void *source, int errHandling); + +EXPORT_DECL(int, FSMount, void *pClient, void *pCmd, void *source, char *target, uint32_t bytes, int errHandling); +EXPORT_DECL(int, FSUnmount, void *pClient, void *pCmd, const char *target, int errHandling); + +EXPORT_DECL(int, FSGetStat, void *pClient, void *pCmd, const char *path, FSStat *stats, int errHandling); +EXPORT_DECL(int, FSGetStatAsync, void *pClient, void *pCmd, const char *path, void *stats, int error, void *asyncParams); +EXPORT_DECL(int, FSRename, void *pClient, void *pCmd, const char *oldPath, const char *newPath, int error); +EXPORT_DECL(int, FSRenameAsync, void *pClient, void *pCmd, const char *oldPath, const char *newPath, int error, void *asyncParams); +EXPORT_DECL(int, FSRemove, void *pClient, void *pCmd, const char *path, int error); +EXPORT_DECL(int, FSRemoveAsync, void *pClient, void *pCmd, const char *path, int error, void *asyncParams); +EXPORT_DECL(int, FSFlushQuota, void *pClient, void *pCmd, const char* path, int error); +EXPORT_DECL(int, FSFlushQuotaAsync, void *pClient, void *pCmd, const char *path, int error, void *asyncParams); +EXPORT_DECL(int, FSGetFreeSpaceSize, void *pClient, void *pCmd, const char *path, uint64_t *returnedFreeSize, int error); +EXPORT_DECL(int, FSGetFreeSpaceSizeAsync, void *pClient, void *pCmd, const char *path, uint64_t *returnedFreeSize, int error, void *asyncParams); +EXPORT_DECL(int, FSRollbackQuota, void *pClient, void *pCmd, const char *path, int error); +EXPORT_DECL(int, FSRollbackQuotaAsync, void *pClient, void *pCmd, const char *path, int error, void *asyncParams); + +EXPORT_DECL(int, FSOpenDir, void *pClient, void *pCmd, const char *path, int *dh, int errHandling); +EXPORT_DECL(int, FSOpenDirAsync, void *pClient, void* pCmd, const char *path, int *handle, int error, void *asyncParams); +EXPORT_DECL(int, FSReadDir, void *pClient, void *pCmd, int dh, FSDirEntry *dir_entry, int errHandling); +EXPORT_DECL(int, FSRewindDir, void *pClient, void *pCmd, int dh, int errHandling); +EXPORT_DECL(int, FSCloseDir, void *pClient, void *pCmd, int dh, int errHandling); +EXPORT_DECL(int, FSChangeDir, void *pClient, void *pCmd, const char *path, int errHandling); +EXPORT_DECL(int, FSChangeDirAsync, void *pClient, void *pCmd, const char *path, int error, void *asyncParams); +EXPORT_DECL(int, FSMakeDir, void *pClient, void *pCmd, const char *path, int errHandling); +EXPORT_DECL(int, FSMakeDirAsync, void *pClient, void *pCmd, const char *path, int error, void *asyncParams); + +EXPORT_DECL(int, FSOpenFile, void *pClient, void *pCmd, const char *path, const char *mode, int *fd, int errHandling); +EXPORT_DECL(int, FSOpenFileAsync, void *pClient, void *pCmd, const char *path, const char *mode, int *handle, int error, const void *asyncParams); +EXPORT_DECL(int, FSReadFile, void *pClient, void *pCmd, void *buffer, int size, int count, int fd, int flag, int errHandling); +EXPORT_DECL(int, FSCloseFile, void *pClient, void *pCmd, int fd, int errHandling); + +EXPORT_DECL(int, FSFlushFile, void *pClient, void *pCmd, int fd, int error); +EXPORT_DECL(int, FSTruncateFile, void *pClient, void *pCmd, int fd, int error); +EXPORT_DECL(int, FSGetStatFile, void *pClient, void *pCmd, int fd, void *buffer, int error); +EXPORT_DECL(int, FSSetPosFile, void *pClient, void *pCmd, int fd, int pos, int error); +EXPORT_DECL(int, FSWriteFile, void *pClient, void *pCmd, const void *source, int block_size, int block_count, int fd, int flag, int error); + +EXPORT_DECL(int, FSBindMount, void *pClient, void *pCmd, char *source, char *target, int error); +EXPORT_DECL(int, FSBindUnmount, void *pClient, void *pCmd, char *target, int error); + +EXPORT_DECL(int, FSMakeQuota, void *pClient, void *pCmd, const char *path,u32 mode, u64 size, int errHandling); +EXPORT_DECL(int, FSMakeQuotaAsync ,void *pClient, void *pCmd, const char *path,u32 mode, u64 size, int errHandling,const void *asyncParams); + +void InitFSFunctionPointers(void) +{ + unsigned int *funcPointer = 0; + + OS_FIND_EXPORT(coreinit_handle, FSInit); + OS_FIND_EXPORT(coreinit_handle, FSShutdown); + OS_FIND_EXPORT(coreinit_handle, FSAddClientEx); + OS_FIND_EXPORT(coreinit_handle, FSDelClient); + OS_FIND_EXPORT(coreinit_handle, FSInitCmdBlock); + OS_FIND_EXPORT(coreinit_handle, FSGetMountSource); + + OS_FIND_EXPORT(coreinit_handle, FSMount); + OS_FIND_EXPORT(coreinit_handle, FSUnmount); + + OS_FIND_EXPORT(coreinit_handle, FSGetStat); + OS_FIND_EXPORT(coreinit_handle, FSGetStatAsync); + OS_FIND_EXPORT(coreinit_handle, FSRename); + OS_FIND_EXPORT(coreinit_handle, FSRenameAsync); + OS_FIND_EXPORT(coreinit_handle, FSRemove); + OS_FIND_EXPORT(coreinit_handle, FSRemoveAsync); + OS_FIND_EXPORT(coreinit_handle, FSFlushQuota); + OS_FIND_EXPORT(coreinit_handle, FSFlushQuotaAsync); + OS_FIND_EXPORT(coreinit_handle, FSGetFreeSpaceSize); + OS_FIND_EXPORT(coreinit_handle, FSGetFreeSpaceSizeAsync); + OS_FIND_EXPORT(coreinit_handle, FSRollbackQuota); + OS_FIND_EXPORT(coreinit_handle, FSRollbackQuotaAsync); + + OS_FIND_EXPORT(coreinit_handle, FSOpenDir); + OS_FIND_EXPORT(coreinit_handle, FSOpenDirAsync); + OS_FIND_EXPORT(coreinit_handle, FSReadDir); + OS_FIND_EXPORT(coreinit_handle, FSRewindDir); + OS_FIND_EXPORT(coreinit_handle, FSCloseDir); + OS_FIND_EXPORT(coreinit_handle, FSChangeDir); + OS_FIND_EXPORT(coreinit_handle, FSChangeDirAsync); + OS_FIND_EXPORT(coreinit_handle, FSMakeDir); + OS_FIND_EXPORT(coreinit_handle, FSMakeDirAsync); + + + OS_FIND_EXPORT(coreinit_handle, FSOpenFile); + OS_FIND_EXPORT(coreinit_handle, FSOpenFileAsync); + OS_FIND_EXPORT(coreinit_handle, FSReadFile); + OS_FIND_EXPORT(coreinit_handle, FSCloseFile); + + OS_FIND_EXPORT(coreinit_handle, FSFlushFile); + OS_FIND_EXPORT(coreinit_handle, FSTruncateFile); + OS_FIND_EXPORT(coreinit_handle, FSGetStatFile); + OS_FIND_EXPORT(coreinit_handle, FSSetPosFile); + OS_FIND_EXPORT(coreinit_handle, FSWriteFile); + + OS_FIND_EXPORT(coreinit_handle, FSBindMount); + OS_FIND_EXPORT(coreinit_handle, FSBindUnmount); + + OS_FIND_EXPORT(coreinit_handle, FSMakeQuota); + OS_FIND_EXPORT(coreinit_handle, FSMakeQuotaAsync); +} diff --git a/src/dynamic_libs/fs_functions.h b/src/dynamic_libs/fs_functions.h new file mode 100644 index 0000000..d024655 --- /dev/null +++ b/src/dynamic_libs/fs_functions.h @@ -0,0 +1,95 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __FS_FUNCTIONS_H_ +#define __FS_FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "fs_defs.h" + +void InitFSFunctionPointers(void); + +extern int (* FSInit)(void); +extern int (* FSShutdown)(void); +extern int (* FSAddClientEx)(void *pClient, int unk_zero_param, int errHandling); +extern int (* FSDelClient)(void *pClient); +extern void (* FSInitCmdBlock)(void *pCmd); +extern int (* FSGetMountSource)(void *pClient, void *pCmd, int type, void *source, int errHandling); + +extern int (* FSMount)(void *pClient, void *pCmd, void *source, char *target, uint32_t bytes, int errHandling); +extern int (* FSUnmount)(void *pClient, void *pCmd, const char *target, int errHandling); +extern int (* FSRename)(void *pClient, void *pCmd, const char *oldPath, const char *newPath, int error); +extern int (* FSRenameAsync)(void *pClient, void *pCmd, const char *oldPath, const char *newPath, int error, void *asyncParams); +extern int (* FSRemove)(void *pClient, void *pCmd, const char *path, int error); +extern int (* FSRemoveAsync)(void *pClient, void *pCmd, const char *path, int error, void *asyncParams); + +extern int (* FSGetStat)(void *pClient, void *pCmd, const char *path, FSStat *stats, int errHandling); +extern int (* FSGetStatAsync)(void *pClient, void *pCmd, const char *path, void *stats, int error, void *asyncParams); +extern int (* FSRename)(void *pClient, void *pCmd, const char *oldPath, const char *newPath, int error); +extern int (* FSRenameAsync)(void *pClient, void *pCmd, const char *oldPath, const char *newPath, int error, void *asyncParams); +extern int (* FSRemove)(void *pClient, void *pCmd, const char *path, int error); +extern int (* FSRemoveAsync)(void *pClient, void *pCmd, const char *path, int error, void *asyncParams); +extern int (* FSFlushQuota)(void *pClient, void *pCmd, const char* path, int error); +extern int (* FSFlushQuotaAsync)(void *pClient, void *pCmd, const char *path, int error, void *asyncParams); +extern int (* FSGetFreeSpaceSize)(void *pClient, void *pCmd, const char *path, uint64_t *returnedFreeSize, int error); +extern int (* FSGetFreeSpaceSizeAsync)(void *pClient, void *pCmd, const char *path, uint64_t *returnedFreeSize, int error, void *asyncParams); +extern int (* FSRollbackQuota)(void *pClient, void *pCmd, const char *path, int error); +extern int (* FSRollbackQuotaAsync)(void *pClient, void *pCmd, const char *path, int error, void *asyncParams); + +extern int (* FSOpenDir)(void *pClient, void *pCmd, const char *path, int *dh, int errHandling); +extern int (* FSOpenDirAsync)(void *pClient, void* pCmd, const char *path, int *handle, int error, void *asyncParams); +extern int (* FSReadDir)(void *pClient, void *pCmd, int dh, FSDirEntry *dir_entry, int errHandling); +extern int (* FSRewindDir)(void *pClient, void *pCmd, int dh, int errHandling); +extern int (* FSCloseDir)(void *pClient, void *pCmd, int dh, int errHandling); +extern int (* FSChangeDir)(void *pClient, void *pCmd, const char *path, int errHandling); +extern int (* FSChangeDirAsync)(void *pClient, void *pCmd, const char *path, int error, void *asyncParams); +extern int (* FSMakeDir)(void *pClient, void *pCmd, const char *path, int errHandling); +extern int (* FSMakeDirAsync)(void *pClient, void *pCmd, const char *path, int error, void *asyncParams); + +extern int (* FSOpenFile)(void *pClient, void *pCmd, const char *path, const char *mode, int *fd, int errHandling); +extern int (* FSOpenFileAsync)(void *pClient, void *pCmd, const char *path, const char *mode, int *handle, int error, const void *asyncParams); +extern int (* FSReadFile)(void *pClient, void *pCmd, void *buffer, int size, int count, int fd, int flag, int errHandling); +extern int (* FSCloseFile)(void *pClient, void *pCmd, int fd, int errHandling); + +extern int (* FSFlushFile)(void *pClient, void *pCmd, int fd, int error); +extern int (* FSTruncateFile)(void *pClient, void *pCmd, int fd, int error); +extern int (* FSGetStatFile)(void *pClient, void *pCmd, int fd, void *buffer, int error); +extern int (* FSSetPosFile)(void *pClient, void *pCmd, int fd, int pos, int error); +extern int (* FSWriteFile)(void *pClient, void *pCmd, const void *source, int block_size, int block_count, int fd, int flag, int error); + +extern int (* FSBindMount)(void *pClient, void *pCmd, char *source, char *target, int error); +extern int (* FSBindUnmount)(void *pClient, void *pCmd, char *target, int error); + +extern int (* FSMakeQuota)( void *pClient, void *pCmd, const char *path,u32 mode, u64 size, int errHandling); +extern int (* FSMakeQuotaAsync)(void *pClient, void *pCmd, const char *path,u32 mode, u64 size, int errHandling,const void *asyncParams); + + +#ifdef __cplusplus +} +#endif + +#endif // __FS_FUNCTIONS_H_ diff --git a/src/dynamic_libs/gx2_functions.c b/src/dynamic_libs/gx2_functions.c new file mode 100644 index 0000000..a34807e --- /dev/null +++ b/src/dynamic_libs/gx2_functions.c @@ -0,0 +1,173 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "os_functions.h" +#include "gx2_types.h" + +unsigned int gx2_handle __attribute__((section(".data"))) = 0; + +EXPORT_DECL(void, GX2Init, u32 * init_attribs); +EXPORT_DECL(void, GX2Shutdown, void); +EXPORT_DECL(void, GX2Flush, void); +EXPORT_DECL(s32, GX2GetMainCoreId, void) ; +EXPORT_DECL(s32, GX2DrawDone, void); +EXPORT_DECL(void, GX2ClearColor, GX2ColorBuffer *colorBuffer, f32 r, f32 g, f32 b, f32 a); +EXPORT_DECL(void, GX2SetViewport, f32 x, f32 y, f32 w, f32 h, f32 nearZ, f32 farZ); +EXPORT_DECL(void, GX2SetScissor, u32 x_orig, u32 y_orig, u32 wd, u32 ht); +EXPORT_DECL(void, GX2SetContextState, const GX2ContextState* state); +EXPORT_DECL(void, GX2DrawEx, s32 primitive_type, u32 count, u32 first_vertex, u32 instances_count); +EXPORT_DECL(void, GX2DrawIndexedEx, s32 primitive_type, u32 count, s32 index_format, const void* idx, u32 first_vertex, u32 instances_count); +EXPORT_DECL(void, GX2ClearDepthStencilEx, GX2DepthBuffer *depthBuffer, f32 depth_value, u8 stencil_value, s32 clear_mode); +EXPORT_DECL(void, GX2SetClearDepthStencil, GX2DepthBuffer *depthBuffer, f32 depth_value, u8 stencil_value); +EXPORT_DECL(void, GX2CopyColorBufferToScanBuffer, const GX2ColorBuffer *colorBuffer, s32 scan_target); +EXPORT_DECL(void, GX2SwapScanBuffers, void); +EXPORT_DECL(void, GX2SetTVEnable, s32 enable); +EXPORT_DECL(void, GX2SetSwapInterval, u32 swap_interval); +EXPORT_DECL(u32, GX2GetSwapInterval, void); +EXPORT_DECL(void, GX2WaitForVsync, void); +EXPORT_DECL(void, GX2CalcTVSize, s32 tv_render_mode, s32 format, s32 buffering_mode, u32 * size, s32 * scale_needed); +EXPORT_DECL(void, GX2Invalidate, s32 invalidate_type, void * ptr, u32 buffer_size); +EXPORT_DECL(void, GX2SetTVBuffer, void *buffer, u32 buffer_size, s32 tv_render_mode, s32 format, s32 buffering_mode); +EXPORT_DECL(void, GX2CalcSurfaceSizeAndAlignment, GX2Surface *surface); +EXPORT_DECL(void, GX2InitDepthBufferRegs, GX2DepthBuffer *depthBuffer); +EXPORT_DECL(void, GX2InitColorBufferRegs, GX2ColorBuffer *colorBuffer); +EXPORT_DECL(void, GX2CalcColorBufferAuxInfo, GX2ColorBuffer *colorBuffer, u32 *size, u32 *align); +EXPORT_DECL(void, GX2CalcDepthBufferHiZInfo, GX2DepthBuffer *depthBuffer, u32 *size, u32 *align); +EXPORT_DECL(void, GX2InitDepthBufferHiZEnable, GX2DepthBuffer *depthBuffer, s32 hiZ_enable); +EXPORT_DECL(void, GX2SetupContextStateEx, GX2ContextState* state, s32 enable_profiling); +EXPORT_DECL(void, GX2SetColorBuffer, const GX2ColorBuffer *colorBuffer, s32 target); +EXPORT_DECL(void, GX2SetDepthBuffer, const GX2DepthBuffer *depthBuffer); +EXPORT_DECL(void, GX2SetAttribBuffer, u32 attr_index, u32 attr_size, u32 stride, const void* attr); +EXPORT_DECL(void, GX2InitTextureRegs, GX2Texture *texture); +EXPORT_DECL(void, GX2InitSampler, GX2Sampler *sampler, s32 tex_clamp, s32 min_mag_filter); +EXPORT_DECL(u32, GX2CalcFetchShaderSizeEx, u32 num_attrib, s32 fetch_shader_type, s32 tessellation_mode); +EXPORT_DECL(void, GX2InitFetchShaderEx, GX2FetchShader* fs, void* fs_buffer, u32 count, const GX2AttribStream* attribs, s32 fetch_shader_type, s32 tessellation_mode); +EXPORT_DECL(void, GX2SetFetchShader, const GX2FetchShader* fs); +EXPORT_DECL(void, GX2SetVertexUniformReg, u32 offset, u32 count, const void *values); +EXPORT_DECL(void, GX2SetPixelUniformReg, u32 offset, u32 count, const void *values); +EXPORT_DECL(void, GX2SetPixelTexture, const GX2Texture *texture, u32 texture_hw_location); +EXPORT_DECL(void, GX2SetVertexTexture, const GX2Texture *texture, u32 texture_hw_location); +EXPORT_DECL(void, GX2SetPixelSampler, const GX2Sampler *sampler, u32 sampler_hw_location); +EXPORT_DECL(void, GX2SetVertexSampler, const GX2Sampler *sampler, u32 sampler_hw_location); +EXPORT_DECL(void, GX2SetPixelShader, const GX2PixelShader* pixelShader); +EXPORT_DECL(void, GX2SetVertexShader, const GX2VertexShader* vertexShader); +EXPORT_DECL(void, GX2InitSamplerZMFilter, GX2Sampler *sampler, s32 z_filter, s32 mip_filter); +EXPORT_DECL(void, GX2SetColorControl, s32 lop, u8 blend_enable_mask, s32 enable_multi_write, s32 enable_color_buffer); +EXPORT_DECL(void, GX2SetDepthOnlyControl, s32 enable_depth, s32 enable_depth_write, s32 depth_comp_function); +EXPORT_DECL(void, GX2SetBlendControl, s32 target, s32 color_src_blend, s32 color_dst_blend, s32 color_combine, s32 separate_alpha_blend, s32 alpha_src_blend, s32 alpha_dst_blend, s32 alpha_combine); +EXPORT_DECL(void, GX2CalcDRCSize, s32 drc_mode, s32 format, s32 buffering_mode, u32 *size, s32 *scale_needed); +EXPORT_DECL(void, GX2SetDRCBuffer, void *buffer, u32 buffer_size, s32 drc_mode, s32 surface_format, s32 buffering_mode); +EXPORT_DECL(void, GX2SetDRCScale, u32 width, u32 height); +EXPORT_DECL(void, GX2SetDRCEnable, s32 enable); +EXPORT_DECL(void, GX2SetPolygonControl, s32 front_face_mode, s32 cull_front, s32 cull_back, s32 enable_mode, s32 mode_font, s32 mode_back, s32 poly_offset_front, s32 poly_offset_back, s32 point_line_offset); +EXPORT_DECL(void, GX2SetCullOnlyControl, s32 front_face_mode, s32 cull_front, s32 cull_back); +EXPORT_DECL(void, GX2SetDepthStencilControl, s32 enable_depth_test, s32 enable_depth_write, s32 depth_comp_function, s32 stencil_test_enable, s32 back_stencil_enable, + s32 font_stencil_func, s32 front_stencil_z_pass, s32 front_stencil_z_fail, s32 front_stencil_fail, + s32 back_stencil_func, s32 back_stencil_z_pass, s32 back_stencil_z_fail, s32 back_stencil_fail); +EXPORT_DECL(void, GX2SetStencilMask, u8 mask_front, u8 write_mask_front, u8 ref_front, u8 mask_back, u8 write_mask_back, u8 ref_back); +EXPORT_DECL(void, GX2SetLineWidth, f32 width); +EXPORT_DECL(void, GX2SetTVGamma, f32 val); +EXPORT_DECL(void, GX2SetDRCGamma, f32 gam); +EXPORT_DECL(s32, GX2GetSystemTVScanMode, void); +EXPORT_DECL(s32, GX2GetSystemDRCScanMode, void); +EXPORT_DECL(void, GX2RSetAllocator, void * (* allocFunc)(u32, u32, u32), void (* freeFunc)(u32, void*)); +EXPORT_DECL(void, GX2CopySurface, GX2Surface * srcSurface,u32 srcMip,u32 srcSlice,GX2Surface * dstSurface,u32 dstMip,u32 dstSlice ); + +EXPORT_DECL(void, GX2ClearBuffersEx, GX2ColorBuffer * colorBuffer,GX2DepthBuffer * depthBuffer,f32 r, f32 g, f32 b, f32 a,f32 depthValue,u8 stencilValue,int clearFlags); + +void InitAcquireGX2(void) +{ + OSDynLoad_Acquire("gx2.rpl", &gx2_handle); +} + +void InitGX2FunctionPointers(void) +{ + unsigned int *funcPointer = 0; + InitAcquireGX2(); + + OS_FIND_EXPORT(gx2_handle, GX2Init); + OS_FIND_EXPORT(gx2_handle, GX2Shutdown); + OS_FIND_EXPORT(gx2_handle, GX2Flush); + OS_FIND_EXPORT(gx2_handle, GX2GetMainCoreId); + OS_FIND_EXPORT(gx2_handle, GX2DrawDone); + OS_FIND_EXPORT(gx2_handle, GX2ClearColor); + OS_FIND_EXPORT(gx2_handle, GX2SetViewport); + OS_FIND_EXPORT(gx2_handle, GX2SetScissor); + OS_FIND_EXPORT(gx2_handle, GX2SetContextState); + OS_FIND_EXPORT(gx2_handle, GX2DrawEx); + OS_FIND_EXPORT(gx2_handle, GX2DrawIndexedEx); + OS_FIND_EXPORT(gx2_handle, GX2ClearDepthStencilEx); + OS_FIND_EXPORT(gx2_handle, GX2CopyColorBufferToScanBuffer); + OS_FIND_EXPORT(gx2_handle, GX2SwapScanBuffers); + OS_FIND_EXPORT(gx2_handle, GX2SetTVEnable); + OS_FIND_EXPORT(gx2_handle, GX2SetSwapInterval); + OS_FIND_EXPORT(gx2_handle, GX2GetSwapInterval); + OS_FIND_EXPORT(gx2_handle, GX2WaitForVsync); + OS_FIND_EXPORT(gx2_handle, GX2CalcTVSize); + OS_FIND_EXPORT(gx2_handle, GX2Invalidate); + OS_FIND_EXPORT(gx2_handle, GX2SetTVBuffer); + OS_FIND_EXPORT(gx2_handle, GX2CalcSurfaceSizeAndAlignment); + OS_FIND_EXPORT(gx2_handle, GX2InitDepthBufferRegs); + OS_FIND_EXPORT(gx2_handle, GX2InitColorBufferRegs); + OS_FIND_EXPORT(gx2_handle, GX2CalcColorBufferAuxInfo); + OS_FIND_EXPORT(gx2_handle, GX2CalcDepthBufferHiZInfo); + OS_FIND_EXPORT(gx2_handle, GX2InitDepthBufferHiZEnable); + OS_FIND_EXPORT(gx2_handle, GX2SetupContextStateEx); + OS_FIND_EXPORT(gx2_handle, GX2SetColorBuffer); + OS_FIND_EXPORT(gx2_handle, GX2SetDepthBuffer); + OS_FIND_EXPORT(gx2_handle, GX2SetAttribBuffer); + OS_FIND_EXPORT(gx2_handle, GX2InitTextureRegs); + OS_FIND_EXPORT(gx2_handle, GX2InitSampler); + OS_FIND_EXPORT(gx2_handle, GX2CalcFetchShaderSizeEx); + OS_FIND_EXPORT(gx2_handle, GX2InitFetchShaderEx); + OS_FIND_EXPORT(gx2_handle, GX2SetFetchShader); + OS_FIND_EXPORT(gx2_handle, GX2SetVertexUniformReg); + OS_FIND_EXPORT(gx2_handle, GX2SetPixelUniformReg); + OS_FIND_EXPORT(gx2_handle, GX2SetPixelTexture); + OS_FIND_EXPORT(gx2_handle, GX2SetVertexTexture); + OS_FIND_EXPORT(gx2_handle, GX2SetPixelSampler); + OS_FIND_EXPORT(gx2_handle, GX2SetVertexSampler); + OS_FIND_EXPORT(gx2_handle, GX2SetPixelShader); + OS_FIND_EXPORT(gx2_handle, GX2SetVertexShader); + OS_FIND_EXPORT(gx2_handle, GX2InitSamplerZMFilter); + OS_FIND_EXPORT(gx2_handle, GX2SetColorControl); + OS_FIND_EXPORT(gx2_handle, GX2SetDepthOnlyControl); + OS_FIND_EXPORT(gx2_handle, GX2SetBlendControl); + OS_FIND_EXPORT(gx2_handle, GX2CalcDRCSize); + OS_FIND_EXPORT(gx2_handle, GX2SetDRCBuffer); + OS_FIND_EXPORT(gx2_handle, GX2SetDRCScale); + OS_FIND_EXPORT(gx2_handle, GX2SetDRCEnable); + OS_FIND_EXPORT(gx2_handle, GX2SetPolygonControl); + OS_FIND_EXPORT(gx2_handle, GX2SetCullOnlyControl); + OS_FIND_EXPORT(gx2_handle, GX2SetDepthStencilControl); + OS_FIND_EXPORT(gx2_handle, GX2SetStencilMask); + OS_FIND_EXPORT(gx2_handle, GX2SetLineWidth); + OS_FIND_EXPORT(gx2_handle, GX2SetDRCGamma); + OS_FIND_EXPORT(gx2_handle, GX2SetTVGamma); + OS_FIND_EXPORT(gx2_handle, GX2GetSystemTVScanMode); + OS_FIND_EXPORT(gx2_handle, GX2GetSystemDRCScanMode); + OS_FIND_EXPORT(gx2_handle, GX2RSetAllocator); + OS_FIND_EXPORT(gx2_handle, GX2CopySurface); + OS_FIND_EXPORT(gx2_handle, GX2ClearBuffersEx); + OS_FIND_EXPORT(gx2_handle, GX2SetClearDepthStencil); +} diff --git a/src/dynamic_libs/gx2_functions.h b/src/dynamic_libs/gx2_functions.h new file mode 100644 index 0000000..0b06826 --- /dev/null +++ b/src/dynamic_libs/gx2_functions.h @@ -0,0 +1,211 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __GX2_FUNCTIONS_H_ +#define __GX2_FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "gx2_types.h" + +extern unsigned int gx2_handle; + +void InitGX2FunctionPointers(void); +void InitAcquireGX2(void); + +extern void (* GX2Init)(u32 * init_attribs); +extern void (* GX2Shutdown)(void); +extern void (* GX2Flush)(void); +extern s32 (* GX2GetMainCoreId)(void) ; +extern s32 (* GX2DrawDone)(void); +extern void (* GX2ClearColor)(GX2ColorBuffer *colorBuffer, f32 r, f32 g, f32 b, f32 a); +extern void (* GX2SetViewport)(f32 x, f32 y, f32 w, f32 h, f32 nearZ, f32 farZ); +extern void (* GX2SetScissor)(u32 x_orig, u32 y_orig, u32 wd, u32 ht); +extern void (* GX2SetContextState)(const GX2ContextState* state); +extern void (* GX2DrawEx)(s32 primitive_type, u32 count, u32 first_vertex, u32 instances_count); +extern void (* GX2DrawIndexedEx)(s32 primitive_type, u32 count, s32 index_format, const void* idx, u32 first_vertex, u32 instances_count); +extern void (* GX2ClearDepthStencilEx)(GX2DepthBuffer *depthBuffer, f32 depth_value, u8 stencil_value, s32 clear_mode); +extern void (* GX2SetClearDepthStencil)(GX2DepthBuffer *depthBuffer, f32 depth_value, u8 stencil_value); +extern void (* GX2CopyColorBufferToScanBuffer)(const GX2ColorBuffer *colorBuffer, s32 scan_target); +extern void (* GX2SwapScanBuffers)(void); +extern void (* GX2SetTVEnable)(s32 enable); +extern void (* GX2SetSwapInterval)(u32 swap_interval); +extern u32 (* GX2GetSwapInterval)(void); +extern void (* GX2WaitForVsync)(void); +extern void (* GX2CalcTVSize)(s32 tv_render_mode, s32 format, s32 buffering_mode, u32 * size, s32 * scale_needed); +extern void (* GX2Invalidate)(s32 invalidate_type, void * ptr, u32 buffer_size); +extern void (* GX2SetTVBuffer)(void *buffer, u32 buffer_size, s32 tv_render_mode, s32 format, s32 buffering_mode); +extern void (* GX2CalcSurfaceSizeAndAlignment)(GX2Surface *surface); +extern void (* GX2InitDepthBufferRegs)(GX2DepthBuffer *depthBuffer); +extern void (* GX2InitColorBufferRegs)(GX2ColorBuffer *colorBuffer); +extern void (* GX2CalcColorBufferAuxInfo)(GX2ColorBuffer *colorBuffer, u32 *size, u32 *align); +extern void (* GX2CalcDepthBufferHiZInfo)(GX2DepthBuffer *depthBuffer, u32 *size, u32 *align); +extern void (* GX2InitDepthBufferHiZEnable)(GX2DepthBuffer *depthBuffer, s32 hiZ_enable); +extern void (* GX2SetupContextStateEx)(GX2ContextState* state, s32 enable_profiling); +extern void (* GX2SetColorBuffer)(const GX2ColorBuffer *colorBuffer, s32 target); +extern void (* GX2SetDepthBuffer)(const GX2DepthBuffer *depthBuffer); +extern void (* GX2SetAttribBuffer)(u32 attr_index, u32 attr_size, u32 stride, const void* attr); +extern void (* GX2InitTextureRegs)(GX2Texture *texture); +extern void (* GX2InitSampler)(GX2Sampler *sampler, s32 tex_clamp, s32 min_mag_filter); +extern u32 (* GX2CalcFetchShaderSizeEx)(u32 num_attrib, s32 fetch_shader_type, s32 tessellation_mode); +extern void (* GX2InitFetchShaderEx)(GX2FetchShader* fs, void* fs_buffer, u32 count, const GX2AttribStream* attribs, s32 fetch_shader_type, s32 tessellation_mode); +extern void (* GX2SetFetchShader)(const GX2FetchShader* fs); +extern void (* GX2SetVertexUniformReg)(u32 offset, u32 count, const void *values); +extern void (* GX2SetPixelUniformReg)(u32 offset, u32 count, const void *values); +extern void (* GX2SetPixelTexture)(const GX2Texture *texture, u32 texture_hw_location); +extern void (* GX2SetVertexTexture)(const GX2Texture *texture, u32 texture_hw_location); +extern void (* GX2SetPixelSampler)(const GX2Sampler *sampler, u32 sampler_hw_location); +extern void (* GX2SetVertexSampler)(const GX2Sampler *sampler, u32 sampler_hw_location); +extern void (* GX2SetPixelShader)(const GX2PixelShader* pixelShader); +extern void (* GX2SetVertexShader)(const GX2VertexShader* vertexShader); +extern void (* GX2InitSamplerZMFilter)(GX2Sampler *sampler, s32 z_filter, s32 mip_filter); +extern void (* GX2SetColorControl)(s32 lop, u8 blend_enable_mask, s32 enable_multi_write, s32 enable_color_buffer); +extern void (* GX2SetDepthOnlyControl)(s32 enable_depth, s32 enable_depth_write, s32 depth_comp_function); +extern void (* GX2SetBlendControl)(s32 target, s32 color_src_blend, s32 color_dst_blend, s32 color_combine, s32 separate_alpha_blend, s32 alpha_src_blend, s32 alpha_dst_blend, s32 alpha_combine); +extern void (* GX2CalcDRCSize)(s32 drc_mode, s32 format, s32 buffering_mode, u32 *size, s32 *scale_needed); +extern void (* GX2SetDRCBuffer)(void *buffer, u32 buffer_size, s32 drc_mode, s32 surface_format, s32 buffering_mode); +extern void (* GX2SetDRCScale)(u32 width, u32 height); +extern void (* GX2SetDRCEnable)(s32 enable); +extern void (* GX2SetPolygonControl)(s32 front_face_mode, s32 cull_front, s32 cull_back, s32 enable_mode, s32 mode_font, s32 mode_back, s32 poly_offset_front, s32 poly_offset_back, s32 point_line_offset); +extern void (* GX2SetCullOnlyControl)(s32 front_face_mode, s32 cull_front, s32 cull_back); +extern void (* GX2SetDepthStencilControl)(s32 enable_depth_test, s32 enable_depth_write, s32 depth_comp_function, s32 stencil_test_enable, s32 back_stencil_enable, + s32 font_stencil_func, s32 front_stencil_z_pass, s32 front_stencil_z_fail, s32 front_stencil_fail, + s32 back_stencil_func, s32 back_stencil_z_pass, s32 back_stencil_z_fail, s32 back_stencil_fail); +extern void (* GX2SetStencilMask)(u8 mask_front, u8 write_mask_front, u8 ref_front, u8 mask_back, u8 write_mask_back, u8 ref_back); +extern void (* GX2SetLineWidth)(f32 width); +extern void (* GX2SetTVGamma)(f32 val); +extern void (* GX2SetDRCGamma)(f32 val); +extern s32 (* GX2GetSystemTVScanMode)(void); +extern s32 (* GX2GetSystemDRCScanMode)(void); +extern void (* GX2RSetAllocator)(void * (*allocFunc)(u32, u32, u32), void (*freeFunc)(u32, void*)); +extern void (* GX2CopySurface)(GX2Surface * srcSurface,u32 srcMip,u32 srcSlice,GX2Surface * dstSurface,u32 dstMip,u32 dstSlice ); +extern void (* GX2ClearBuffersEx)(GX2ColorBuffer * colorBuffer,GX2DepthBuffer * depthBuffer,f32 r, f32 g, f32 b, f32 a,f32 depthValue,u8 stencilValue,int clearFlags); + +static inline void GX2InitDepthBuffer(GX2DepthBuffer *depthBuffer, s32 dimension, u32 width, u32 height, u32 depth, s32 format, s32 aa) +{ + depthBuffer->surface.dimension = dimension; + depthBuffer->surface.width = width; + depthBuffer->surface.height = height; + depthBuffer->surface.depth = depth; + depthBuffer->surface.num_mips = 1; + depthBuffer->surface.format = format; + depthBuffer->surface.aa = aa; + depthBuffer->surface.use = ((format==GX2_SURFACE_FORMAT_D_D24_S8_UNORM) || (format==GX2_SURFACE_FORMAT_D_D24_S8_FLOAT)) ? GX2_SURFACE_USE_DEPTH_BUFFER : GX2_SURFACE_USE_DEPTH_BUFFER_TEXTURE; + depthBuffer->surface.tile = GX2_TILE_MODE_DEFAULT; + depthBuffer->surface.swizzle = 0; + depthBuffer->view_mip = 0; + depthBuffer->view_first_slice = 0; + depthBuffer->view_slices_count = depth; + depthBuffer->clear_depth = 1.0f; + depthBuffer->clear_stencil = 0; + depthBuffer->hiZ_data = NULL; + depthBuffer->hiZ_size = 0; + GX2CalcSurfaceSizeAndAlignment(&depthBuffer->surface); + GX2InitDepthBufferRegs(depthBuffer); +} + +static inline void GX2InitColorBuffer(GX2ColorBuffer *colorBuffer, s32 dimension, u32 width, u32 height, u32 depth, s32 format, s32 aa) +{ + colorBuffer->surface.dimension = dimension; + colorBuffer->surface.width = width; + colorBuffer->surface.height = height; + colorBuffer->surface.depth = depth; + colorBuffer->surface.num_mips = 1; + colorBuffer->surface.format = format; + colorBuffer->surface.aa = aa; + colorBuffer->surface.use = GX2_SURFACE_USE_COLOR_BUFFER_TEXTURE_FTV; + colorBuffer->surface.image_size = 0; + colorBuffer->surface.image_data = NULL; + colorBuffer->surface.mip_size = 0; + colorBuffer->surface.mip_data = NULL; + colorBuffer->surface.tile = GX2_TILE_MODE_DEFAULT; + colorBuffer->surface.swizzle = 0; + colorBuffer->surface.align = 0; + colorBuffer->surface.pitch = 0; + u32 i; + for(i = 0; i < 13; i++) + colorBuffer->surface.mip_offset[i] = 0; + colorBuffer->view_mip = 0; + colorBuffer->view_first_slice = 0; + colorBuffer->view_slices_count = depth; + colorBuffer->aux_data = NULL; + colorBuffer->aux_size = 0; + for(i = 0; i < 5; i++) + colorBuffer->regs[i] = 0; + + GX2CalcSurfaceSizeAndAlignment(&colorBuffer->surface); + GX2InitColorBufferRegs(colorBuffer); +} + +static inline void GX2InitAttribStream(GX2AttribStream* attr, u32 location, u32 buffer, u32 offset, s32 format) +{ + attr->location = location; + attr->buffer = buffer; + attr->offset = offset; + attr->format = format; + attr->index_type = 0; + attr->divisor = 0; + attr->destination_selector = attribute_dest_comp_selector[format & 0xff]; + attr->endian_swap = GX2_ENDIANSWAP_DEFAULT; +} + +static inline void GX2InitTexture(GX2Texture *tex, u32 width, u32 height, u32 depth, u32 num_mips, s32 format, s32 dimension, s32 tile) +{ + tex->surface.dimension = dimension; + tex->surface.width = width; + tex->surface.height = height; + tex->surface.depth = depth; + tex->surface.num_mips = num_mips; + tex->surface.format = format; + tex->surface.aa = GX2_AA_MODE_1X; + tex->surface.use = GX2_SURFACE_USE_TEXTURE; + tex->surface.image_size = 0; + tex->surface.image_data = NULL; + tex->surface.mip_size = 0; + tex->surface.mip_data = NULL; + tex->surface.tile = tile; + tex->surface.swizzle = 0; + tex->surface.align = 0; + tex->surface.pitch = 0; + u32 i; + for(i = 0; i < 13; i++) + tex->surface.mip_offset[i] = 0; + tex->view_first_mip = 0; + tex->view_mips_count = num_mips; + tex->view_first_slice = 0; + tex->view_slices_count = depth; + tex->component_selector = texture_comp_selector[format & 0x3f]; + for(i = 0; i < 5; i++) + tex->regs[i] = 0; + + GX2CalcSurfaceSizeAndAlignment(&tex->surface); + GX2InitTextureRegs(tex); +} + +#ifdef __cplusplus +} +#endif + +#endif // __GX2_FUNCTIONS_H_ diff --git a/src/dynamic_libs/gx2_types.h b/src/dynamic_libs/gx2_types.h new file mode 100644 index 0000000..e292318 --- /dev/null +++ b/src/dynamic_libs/gx2_types.h @@ -0,0 +1,699 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef _GX2_TYPES_H_ +#define _GX2_TYPES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +//!----------------------------------------------------------------------------------------------------------------------- +//! Constants +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_COMMAND_BUFFER_SIZE 0x400000 +#define GX2_SCAN_BUFFER_ALIGNMENT 0x1000 +#define GX2_SHADER_ALIGNMENT 0x100 +#define GX2_CONTEXT_STATE_ALIGNMENT 0x100 +#define GX2_DISPLAY_LIST_ALIGNMENT 0x20 +#define GX2_VERTEX_BUFFER_ALIGNMENT 0x40 +#define GX2_INDEX_BUFFER_ALIGNMENT 0x20 + +#define GX2_CONTEXT_STATE_SIZE 0xA100 + +#define GX2_AUX_BUFFER_CLEAR_VALUE 0xCC + +//!----------------------------------------------------------------------------------------------------------------------- +//! Common +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_FALSE 0 +#define GX2_TRUE 1 +#define GX2_DISABLE 0 +#define GX2_ENABLE 1 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2InitAttrib +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_INIT_ATTRIB_NULL 0 +#define GX2_INIT_ATTRIB_CB_BASE 1 +#define GX2_INIT_ATTRIB_CB_SIZE 2 +#define GX2_INIT_ATTRIB_ARGC 7 +#define GX2_INIT_ATTRIB_ARGV 8 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 compare functions +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_COMPARE_NEVER 0 +#define GX2_COMPARE_LESS 1 +#define GX2_COMPARE_EQUAL 2 +#define GX2_COMPARE_LEQUAL 3 +#define GX2_COMPARE_GREATER 4 +#define GX2_COMPARE_NOTEQUAL 5 +#define GX2_COMPARE_GEQUAL 6 +#define GX2_COMPARE_ALWAYS 7 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 stencil functions +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_STENCIL_KEEP 0 +#define GX2_STENCIL_ZERO 1 +#define GX2_STENCIL_REPLACE 2 +#define GX2_STENCIL_INCR 3 +#define GX2_STENCIL_DECR 4 +#define GX2_STENCIL_INVERT 5 +#define GX2_STENCIL_INCR_WRAP 6 +#define GX2_STENCIL_DECR_WRAP 7 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 logic op functions +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_LOGIC_OP_CLEAR 0x00 +#define GX2_LOGIC_OP_NOR 0x11 +#define GX2_LOGIC_OP_INVAND 0x22 +#define GX2_LOGIC_OP_INVCOPY 0x33 +#define GX2_LOGIC_OP_REVAND 0x44 +#define GX2_LOGIC_OP_INV 0x55 +#define GX2_LOGIC_OP_XOR 0x66 +#define GX2_LOGIC_OP_NAND 0x77 +#define GX2_LOGIC_OP_AND 0x88 +#define GX2_LOGIC_OP_EQUIV 0x99 +#define GX2_LOGIC_OP_NOOP 0xAA +#define GX2_LOGIC_OP_INVOR 0xBB +#define GX2_LOGIC_OP_COPY 0xCC +#define GX2_LOGIC_OP_REVOR 0xDD +#define GX2_LOGIC_OP_OR 0xEE +#define GX2_LOGIC_OP_SET 0xFF + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 blend combination functions +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_BLEND_COMBINE_ADD 0x00 +#define GX2_BLEND_COMBINE_SRC_MINUS_DST 0x01 +#define GX2_BLEND_COMBINE_MIN 0x02 +#define GX2_BLEND_COMBINE_MAX 0x03 +#define GX2_BLEND_COMBINE_DST_MINUS_SRC 0x04 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 blend functions +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_BLEND_ZERO 0x00 +#define GX2_BLEND_ONE 0x01 +#define GX2_BLEND_SRC_ALPHA 0x04 +#define GX2_BLEND_ONE_MINUS_SRC_ALPHA 0x05 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 render targets +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_RENDER_TARGET_0 0 +#define GX2_RENDER_TARGET_1 1 +#define GX2_RENDER_TARGET_2 2 +#define GX2_RENDER_TARGET_3 3 +#define GX2_RENDER_TARGET_4 4 +#define GX2_RENDER_TARGET_5 5 +#define GX2_RENDER_TARGET_6 6 +#define GX2_RENDER_TARGET_7 7 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 cull modes +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_FRONT_FACE_CCW 0 +#define GX2_FRONT_FACE_CW 1 +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 polygon modes +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_POLYGON_MODE_POINT 0 +#define GX2_POLYGON_MODE_LINE 1 +#define GX2_POLYGON_MODE_TRIANGLE 2 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 special states +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_SPECIAL_STATE_CLEAR 0 +#define GX2_SPECIAL_STATE_CLEAR_HIZ 1 +#define GX2_SPECIAL_STATE_COPY 2 +#define GX2_SPECIAL_STATE_EXPAND_COLOR 3 +#define GX2_SPECIAL_STATE_EXPAND_DEPTH 4 +#define GX2_SPECIAL_STATE_CONVERT_DEPTH 5 +#define GX2_SPECIAL_STATE_CONVERT_AADEPTH 6 +#define GX2_SPECIAL_STATE_RESOLVE_COLOR 7 +#define GX2_SPECIAL_STATE_CLEAR_COLOR_AS_DEPTH 8 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 attribute formats +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_ATTRIB_FORMAT_8_UNORM 0x00000000 +#define GX2_ATTRIB_FORMAT_4_4_UNORM 0x00000001 +#define GX2_ATTRIB_FORMAT_16_UNORM 0x00000002 +#define GX2_ATTRIB_FORMAT_8_8_UNORM 0x00000004 +#define GX2_ATTRIB_FORMAT_16_16_UNORM 0x00000007 +#define GX2_ATTRIB_FORMAT_8_8_8_8_UNORM 0x0000000A +#define GX2_ATTRIB_FORMAT_10_10_10_2_UNORM 0x0000000B +#define GX2_ATTRIB_FORMAT_16_16_16_16_UNORM 0x0000000E + +#define GX2_ATTRIB_FORMAT_8_UINT 0x00000100 +#define GX2_ATTRIB_FORMAT_16_UINT 0x00000102 +#define GX2_ATTRIB_FORMAT_8_8_UINT 0x00000104 +#define GX2_ATTRIB_FORMAT_32_UINT 0x00000105 +#define GX2_ATTRIB_FORMAT_16_16_UINT 0x00000107 +#define GX2_ATTRIB_FORMAT_8_8_8_8_UINT 0x0000010A +#define GX2_ATTRIB_FORMAT_10_10_10_2_UINT 0x0000010B +#define GX2_ATTRIB_FORMAT_32_32_UINT 0x0000010C +#define GX2_ATTRIB_FORMAT_16_16_16_16_UINT 0x0000010E +#define GX2_ATTRIB_FORMAT_32_32_32_UINT 0x00000110 +#define GX2_ATTRIB_FORMAT_32_32_32_32_UINT 0x00000112 + +#define GX2_ATTRIB_FORMAT_8_SNORM 0x00000200 +#define GX2_ATTRIB_FORMAT_16_SNORM 0x00000202 +#define GX2_ATTRIB_FORMAT_8_8_SNORM 0x00000204 +#define GX2_ATTRIB_FORMAT_16_16_SNORM 0x00000207 +#define GX2_ATTRIB_FORMAT_8_8_8_8_SNORM 0x0000020A +#define GX2_ATTRIB_FORMAT_10_10_10_2_SNORM 0x0000020B +#define GX2_ATTRIB_FORMAT_16_16_16_16_SNORM 0x0000020E + +#define GX2_ATTRIB_FORMAT_8_SINT 0x00000300 +#define GX2_ATTRIB_FORMAT_16_SINT 0x00000303 +#define GX2_ATTRIB_FORMAT_8_8_SINT 0x00000304 +#define GX2_ATTRIB_FORMAT_32_SINT 0x00000305 +#define GX2_ATTRIB_FORMAT_16_16_SINT 0x00000307 +#define GX2_ATTRIB_FORMAT_8_8_8_8_SINT 0x0000030A +#define GX2_ATTRIB_FORMAT_10_10_10_2_SINT 0x0000030B +#define GX2_ATTRIB_FORMAT_32_32_SINT 0x0000030C +#define GX2_ATTRIB_FORMAT_16_16_16_16_SINT 0x0000030E +#define GX2_ATTRIB_FORMAT_32_32_32_SINT 0x00000310 +#define GX2_ATTRIB_FORMAT_32_32_32_32_SINT 0x00000312 + +#define GX2_ATTRIB_FORMAT_8_UINT_TO_FLOAT 0x00000800 +#define GX2_ATTRIB_FORMAT_16_UINT_TO_FLOAT 0x00000802 +#define GX2_ATTRIB_FORMAT_16_FLOAT 0x00000803 +#define GX2_ATTRIB_FORMAT_8_8_UINT_TO_FLOAT 0x00000804 +#define GX2_ATTRIB_FORMAT_32_FLOAT 0x00000806 +#define GX2_ATTRIB_FORMAT_16_16_UINT_TO_FLOAT 0x00000807 +#define GX2_ATTRIB_FORMAT_16_16_FLOAT 0x00000808 +#define GX2_ATTRIB_FORMAT_10_11_11_FLOAT 0x00000809 +#define GX2_ATTRIB_FORMAT_8_8_8_8_UINT_TO_FLOAT 0x0000080A +#define GX2_ATTRIB_FORMAT_32_32_FLOAT 0x0000080D +#define GX2_ATTRIB_FORMAT_16_16_16_16_UINT_TO_FLOAT 0x0000080E +#define GX2_ATTRIB_FORMAT_16_16_16_16_FLOAT 0x0000080F +#define GX2_ATTRIB_FORMAT_32_32_32_FLOAT 0x00000811 +#define GX2_ATTRIB_FORMAT_32_32_32_32_FLOAT 0x00000813 + +#define GX2_ATTRIB_FORMAT_8_SINT_TO_FLOAT 0x00000A00 +#define GX2_ATTRIB_FORMAT_16_SINT_TO_FLOAT 0x00000A02 +#define GX2_ATTRIB_FORMAT_8_8_SINT_TO_FLOAT 0x00000A04 +#define GX2_ATTRIB_FORMAT_16_16_SINT_TO_FLOAT 0x00000A07 +#define GX2_ATTRIB_FORMAT_8_8_8_8_SINT_TO_FLOAT 0x00000A0A +#define GX2_ATTRIB_FORMAT_16_16_16_16_SINT_TO_FLOAT 0x00000A0E + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 shader modes +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_SHADER_MODE_UNIFORM_REGISTER 0 +#define GX2_SHADER_MODE_UNIFORM_BLOCK 1 +#define GX2_SHADER_MODE_GEOMETRY_SHADER 2 +#define GX2_SHADER_MODE_COMPUTE_SHADER 3 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 shader modes +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_COMP_SEL_NONE 0x04040405 +#define GX2_COMP_SEL_X001 0x00040405 +#define GX2_COMP_SEL_XY01 0x00010405 +#define GX2_COMP_SEL_XYZ1 0x00010205 +#define GX2_COMP_SEL_XYZW 0x00010203 +#define GX2_COMP_SEL_XXXX 0x00000000 +#define GX2_COMP_SEL_YYYY 0x01010101 +#define GX2_COMP_SEL_ZZZZ 0x02020202 +#define GX2_COMP_SEL_WWWW 0x03030303 +#define GX2_COMP_SEL_WZYX 0x03020100 +#define GX2_COMP_SEL_WXYZ 0x03000102 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 variable types +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_VAR_TYPE_VOID 0 +#define GX2_VAR_TYPE_BOOL 1 +#define GX2_VAR_TYPE_INT 2 +#define GX2_VAR_TYPE_UINT 3 +#define GX2_VAR_TYPE_FLOAT 4 +#define GX2_VAR_TYPE_DOUBLE 5 +#define GX2_VAR_TYPE_VEC2 9 +#define GX2_VAR_TYPE_VEC3 10 +#define GX2_VAR_TYPE_VEC4 11 +#define GX2_VAR_TYPE_MAT2 21 +#define GX2_VAR_TYPE_MAT3 25 +#define GX2_VAR_TYPE_MAT4 29 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 sample types +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_SAMPLER_TYPE_2D 1 + + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 index formats +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_INDEX_FORMAT_U16 4 +#define GX2_INDEX_FORMAT_U32 9 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 primitive types +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_PRIMITIVE_POINTS 0x01 +#define GX2_PRIMITIVE_LINES 0x02 +#define GX2_PRIMITIVE_LINE_STRIP 0x03 +#define GX2_PRIMITIVE_TRIANGLES 0x04 +#define GX2_PRIMITIVE_TRIANGLE_FAN 0x05 +#define GX2_PRIMITIVE_TRIANGLE_STRIP 0x06 +#define GX2_PRIMITIVE_RECTS 0x11 +#define GX2_PRIMITIVE_QUADS 0x13 +#define GX2_PRIMITIVE_QUAD_STRIP 0x14 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 clear modes +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_CLEAR_DEPTH 0x01 +#define GX2_CLEAR_STENCIL 0x02 +#define GX2_CLEAR_BOTH (GX2_CLEAR_DEPTH | GX2_CLEAR_STENCIL) + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 surface formats +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_SURFACE_FORMAT_TC_R8_UNORM 0x00000001 +#define GX2_SURFACE_FORMAT_T_R4_G4_UNORM 0x00000002 +#define GX2_SURFACE_FORMAT_TCD_R16_UNORM 0x00000005 +#define GX2_SURFACE_FORMAT_TC_R8_G8_UNORM 0x00000007 +#define GX2_SURFACE_FORMAT_TCS_R5_G6_B5_UNORM 0x00000008 +#define GX2_SURFACE_FORMAT_TC_R5_G5_B5_A1_UNORM 0x0000000a +#define GX2_SURFACE_FORMAT_TC_R4_G4_B4_A4_UNORM 0x0000000b +#define GX2_SURFACE_FORMAT_TC_A1_B5_G5_R5_UNORM 0x0000000c +#define GX2_SURFACE_FORMAT_TC_R16_G16_UNORM 0x0000000f +#define GX2_SURFACE_FORMAT_D_D24_S8_UNORM 0x00000011 +#define GX2_SURFACE_FORMAT_T_R24_UNORM_X8 0x00000011 +#define GX2_SURFACE_FORMAT_TCS_R10_G10_B10_A2_UNORM 0x00000019 +#define GX2_SURFACE_FORMAT_TCS_R8_G8_B8_A8_UNORM 0x0000001a +#define GX2_SURFACE_FORMAT_TCS_A2_B10_G10_R10_UNORM 0x0000001b +#define GX2_SURFACE_FORMAT_TC_R16_G16_B16_A16_UNORM 0x0000001f +#define GX2_SURFACE_FORMAT_T_BC1_UNORM 0x00000031 +#define GX2_SURFACE_FORMAT_T_BC2_UNORM 0x00000032 +#define GX2_SURFACE_FORMAT_T_BC3_UNORM 0x00000033 +#define GX2_SURFACE_FORMAT_T_BC4_UNORM 0x00000034 +#define GX2_SURFACE_FORMAT_T_BC5_UNORM 0x00000035 +#define GX2_SURFACE_FORMAT_T_NV12_UNORM 0x00000081 + +#define GX2_SURFACE_FORMAT_TC_R8_UINT 0x00000101 +#define GX2_SURFACE_FORMAT_TC_R16_UINT 0x00000105 +#define GX2_SURFACE_FORMAT_TC_R8_G8_UINT 0x00000107 +#define GX2_SURFACE_FORMAT_TC_R32_UINT 0x0000010d +#define GX2_SURFACE_FORMAT_TC_R16_G16_UINT 0x0000010f +#define GX2_SURFACE_FORMAT_T_X24_G8_UINT 0x00000111 +#define GX2_SURFACE_FORMAT_TC_R10_G10_B10_A2_UINT 0x00000119 +#define GX2_SURFACE_FORMAT_TC_R8_G8_B8_A8_UINT 0x0000011a +#define GX2_SURFACE_FORMAT_TC_A2_B10_G10_R10_UINT 0x0000011b +#define GX2_SURFACE_FORMAT_T_X32_G8_UINT_X24 0x0000011c +#define GX2_SURFACE_FORMAT_TC_R32_G32_UINT 0x0000011d +#define GX2_SURFACE_FORMAT_TC_R16_G16_B16_A16_UINT 0x0000011f +#define GX2_SURFACE_FORMAT_TC_R32_G32_B32_A32_UINT 0x00000122 + +#define GX2_SURFACE_FORMAT_TC_R8_SNORM 0x00000201 +#define GX2_SURFACE_FORMAT_TC_R16_SNORM 0x00000205 +#define GX2_SURFACE_FORMAT_TC_R8_G8_SNORM 0x00000207 +#define GX2_SURFACE_FORMAT_TC_R16_G16_SNORM 0x0000020f +#define GX2_SURFACE_FORMAT_T_R10_G10_B10_A2_SNORM 0x00000219 +#define GX2_SURFACE_FORMAT_TC_R10_G10_B10_A2_SNORM 0x00000219 +#define GX2_SURFACE_FORMAT_TC_R8_G8_B8_A8_SNORM 0x0000021a +#define GX2_SURFACE_FORMAT_TC_R16_G16_B16_A16_SNORM 0x0000021f +#define GX2_SURFACE_FORMAT_T_BC4_SNORM 0x00000234 +#define GX2_SURFACE_FORMAT_T_BC5_SNORM 0x00000235 + +#define GX2_SURFACE_FORMAT_TC_R8_SINT 0x00000301 +#define GX2_SURFACE_FORMAT_TC_R16_SINT 0x00000305 +#define GX2_SURFACE_FORMAT_TC_R8_G8_SINT 0x00000307 +#define GX2_SURFACE_FORMAT_TC_R32_SINT 0x0000030d +#define GX2_SURFACE_FORMAT_TC_R16_G16_SINT 0x0000030f +#define GX2_SURFACE_FORMAT_TC_R10_G10_B10_A2_SINT 0x00000319 +#define GX2_SURFACE_FORMAT_TC_R8_G8_B8_A8_SINT 0x0000031a +#define GX2_SURFACE_FORMAT_TC_R32_G32_SINT 0x0000031d +#define GX2_SURFACE_FORMAT_TC_R16_G16_B16_A16_SINT 0x0000031f +#define GX2_SURFACE_FORMAT_TC_R32_G32_B32_A32_SINT 0x00000322 + +#define GX2_SURFACE_FORMAT_TCS_R8_G8_B8_A8_SRGB 0x0000041a +#define GX2_SURFACE_FORMAT_T_BC1_SRGB 0x00000431 +#define GX2_SURFACE_FORMAT_T_BC2_SRGB 0x00000432 +#define GX2_SURFACE_FORMAT_T_BC3_SRGB 0x00000433 + +#define GX2_SURFACE_FORMAT_TC_R16_FLOAT 0x00000806 +#define GX2_SURFACE_FORMAT_TCD_R32_FLOAT 0x0000080e +#define GX2_SURFACE_FORMAT_TC_R16_G16_FLOAT 0x00000810 +#define GX2_SURFACE_FORMAT_D_D24_S8_FLOAT 0x00000811 +#define GX2_SURFACE_FORMAT_TC_R11_G11_B10_FLOAT 0x00000816 +#define GX2_SURFACE_FORMAT_D_D32_FLOAT_S8_UINT_X24 0x0000081c +#define GX2_SURFACE_FORMAT_T_R32_FLOAT_X8_X24 0x0000081c +#define GX2_SURFACE_FORMAT_TC_R32_G32_FLOAT 0x0000081e +#define GX2_SURFACE_FORMAT_TC_R16_G16_B16_A16_FLOAT 0x00000820 +#define GX2_SURFACE_FORMAT_TC_R32_G32_B32_A32_FLOAT 0x00000823 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 tile modes +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_TILE_MODE_DEFAULT 0x00000000 +#define GX2_TILE_MODE_LINEAR_ALIGNED 0x00000001 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 surface use +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_SURFACE_USE_TEXTURE 0x00000001 +#define GX2_SURFACE_USE_COLOR_BUFFER 0x00000002 +#define GX2_SURFACE_USE_DEPTH_BUFFER 0x00000004 +#define GX2_SURFACE_USE_SCAN_BUFFER 0x00000008 +#define GX2_SURFACE_USE_FTV 0x80000000 +#define GX2_SURFACE_USE_COLOR_BUFFER_TEXTURE (GX2_SURFACE_USE_COLOR_BUFFER | GX2_SURFACE_USE_TEXTURE) +#define GX2_SURFACE_USE_DEPTH_BUFFER_TEXTURE (GX2_SURFACE_USE_DEPTH_BUFFER | GX2_SURFACE_USE_TEXTURE) +#define GX2_SURFACE_USE_COLOR_BUFFER_FTV (GX2_SURFACE_USE_COLOR_BUFFER | GX2_SURFACE_USE_FTV) +#define GX2_SURFACE_USE_COLOR_BUFFER_TEXTURE_FTV (GX2_SURFACE_USE_COLOR_BUFFER_TEXTURE | GX2_SURFACE_USE_FTV) + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 surface dim +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_SURFACE_DIM_1D 0x00000000 +#define GX2_SURFACE_DIM_2D 0x00000001 +#define GX2_SURFACE_DIM_3D 0x00000002 +#define GX2_SURFACE_DIM_CUBE 0x00000003 +#define GX2_SURFACE_DIM_1D_ARRAY 0x00000004 +#define GX2_SURFACE_DIM_2D_ARRAY 0x00000005 +#define GX2_SURFACE_DIM_2D_MSAA 0x00000006 +#define GX2_SURFACE_DIM_2D_MSAA_ARRAY 0x00000007 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 AA modes +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_AA_MODE_1X 0x00000000 +#define GX2_AA_MODE_2X 0x00000001 +#define GX2_AA_MODE_4X 0x00000002 +#define GX2_AA_MODE_8X 0x00000003 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 texture clamp +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_TEX_CLAMP_WRAP 0x00000000 +#define GX2_TEX_CLAMP_MIRROR 0x00000001 +#define GX2_TEX_CLAMP_CLAMP 0x00000002 +#define GX2_TEX_CLAMP_MIRROR_ONCE 0x00000003 +#define GX2_TEX_CLAMP_CLAMP_HALF_BORDER 0x00000004 +#define GX2_TEX_CLAMP_MIRROR_ONCE_HALF_BORDER 0x00000005 +#define GX2_TEX_CLAMP_CLAMP_BORDER 0x00000006 +#define GX2_TEX_CLAMP_MIRROR_ONCE_BORDER 0x00000007 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 texture filter +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_TEX_XY_FILTER_POINT 0x00000000 +#define GX2_TEX_XY_FILTER_BILINEAR 0x00000001 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 TV scan modes +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_TV_SCAN_MODE_NONE 0x00000000 +#define GX2_TV_SCAN_MODE_576I 0x00000001 +#define GX2_TV_SCAN_MODE_480I 0x00000002 +#define GX2_TV_SCAN_MODE_480P 0x00000003 +#define GX2_TV_SCAN_MODE_720P 0x00000004 +#define GX2_TV_SCAN_MODE_1080I 0x00000006 +#define GX2_TV_SCAN_MODE_1080P 0x00000007 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 TV render modes +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_TV_RENDER_480_NARROW 0x00000001 +#define GX2_TV_RENDER_480_WIDE 0x00000002 +#define GX2_TV_RENDER_720 0x00000003 +#define GX2_TV_RENDER_1080 0x00000005 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 DRC render modes +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_DRC_NONE 0x00000000 +#define GX2_DRC_SINGLE 0x00000001 +#define GX2_DRC_DOUBLE 0x00000002 +#define GX2_DRC_SINGLE_30HZ 0x00000004 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 buffering mode +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_BUFFERING_SINGLE 0x00000001 +#define GX2_BUFFERING_DOUBLE 0x00000002 +#define GX2_BUFFERING_TRIPLE 0x00000003 +#define GX2_BUFFERING_QUAD +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 scan targets +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_SCAN_TARGET_TV 0x00000001 +#define GX2_SCAN_TARGET_DRC_FIRST 0x00000004 +#define GX2_SCAN_TARGET_DRC_SECOND 0x00000008 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 invalidate types +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_INVALIDATE_ATTRIB_BUFFER 0x00000001 +#define GX2_INVALIDATE_TEXTURE 0x00000002 +#define GX2_INVALIDATE_UNIFORM_BLOCK 0x00000004 +#define GX2_INVALIDATE_SHADER 0x00000008 +#define GX2_INVALIDATE_COLOR_BUFFER 0x00000010 +#define GX2_INVALIDATE_DEPTH_BUFFER 0x00000020 +#define GX2_INVALIDATE_CPU 0x00000040 +#define GX2_INVALIDATE_CPU_ATTRIB_BUFFER (GX2_INVALIDATE_CPU | GX2_INVALIDATE_ATTRIB_BUFFER) +#define GX2_INVALIDATE_CPU_TEXTURE (GX2_INVALIDATE_CPU | GX2_INVALIDATE_TEXTURE) +#define GX2_INVALIDATE_CPU_UNIFORM_BLOCK (GX2_INVALIDATE_CPU | GX2_INVALIDATE_UNIFORM_BLOCK) +#define GX2_INVALIDATE_CPU_SHADER (GX2_INVALIDATE_CPU | GX2_INVALIDATE_SHADER) + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 swap modes +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_ENDIANSWAP_DEFAULT 0x00000003 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 tessellation modes +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_TESSELLATION_MODE_DISCRETE 0x00000000 +#define GX2_TESSELLATION_MODE_CONTINUOUS 0x00000001 +#define GX2_TESSELLATION_MODE_ADAPTIVE 0x00000002 + +//!----------------------------------------------------------------------------------------------------------------------- +//! GX2 fetch shader types +//!----------------------------------------------------------------------------------------------------------------------- +#define GX2_FETCH_SHADER_TESSELATION_NONE 0x00000000 +#define GX2_FETCH_SHADER_TESSELATION_LINES 0x00000001 +#define GX2_FETCH_SHADER_TESSELATION_TRIANGLES 0x00000002 +#define GX2_FETCH_SHADER_TESSELATION_QUADS 0x00000003 + + +typedef struct _GX2ContextState { + u8 data[GX2_CONTEXT_STATE_SIZE]; +} GX2ContextState; + +typedef struct _GX2Surface { + s32 dimension; + u32 width; + u32 height; + u32 depth; + u32 num_mips; + s32 format; + s32 aa; + s32 use; + u32 image_size; + void *image_data; + u32 mip_size; + void *mip_data; + s32 tile; + u32 swizzle; + u32 align; + u32 pitch; + u32 mip_offset[13]; +} GX2Surface; + +typedef struct _GX2ColorBuffer { + GX2Surface surface; + u32 view_mip; + u32 view_first_slice; + u32 view_slices_count; + void *aux_data; + u32 aux_size; + u32 regs[5]; +} GX2ColorBuffer; + +typedef struct _GX2DepthBuffer { + GX2Surface surface; + u32 view_mip; + u32 view_first_slice; + u32 view_slices_count; + void *hiZ_data; + u32 hiZ_size; + f32 clear_depth; + u32 clear_stencil; + u32 regs[7]; +} GX2DepthBuffer; + + +typedef struct _GX2Texture { + GX2Surface surface; + u32 view_first_mip; + u32 view_mips_count; + u32 view_first_slice; + u32 view_slices_count; + u32 component_selector; + u32 regs[5]; +} GX2Texture; + + +typedef struct _GX2Sampler { + u32 regs[3]; +} GX2Sampler; + +typedef struct _GX2AttribStream { + u32 location; + u32 buffer; + u32 offset; + s32 format; + s32 index_type; + u32 divisor; + u32 destination_selector; + s32 endian_swap; +} GX2AttribStream; + +typedef struct _GX2FetchShader { + s32 type; + u32 reg; + u32 shader_size; + void *shader_program; + u32 attributes_count; + u32 divisor[3]; +} GX2FetchShader; + +typedef struct _GX2AttribVar +{ + const char *name; + s32 var_type; + u32 array_count; + u32 location; +} GX2AttribVar; + + +typedef struct _GX2UniformBlock { + const char *name; + u32 location; + u32 block_size; +} GX2UniformBlock; + +typedef struct _GX2UniformInitialValue { + f32 value[4]; + u32 offset; +} GX2UniformInitialValue; + +typedef struct _GX2SamplerVar +{ + const char *name; + s32 sampler_type; + u32 location; +} GX2SamplerVar; + +typedef struct _GX2UniformVar +{ + const char *name; + s32 var_type; + u32 array_count; + u32 offset; + u32 block_index; +} GX2UniformVar; + +typedef struct _GX2VertexShader { + u32 regs[52]; + u32 shader_size; + void *shader_data; + s32 shader_mode; + u32 uniform_blocks_count; + GX2UniformBlock *uniform_block; + u32 uniform_vars_count; + GX2UniformVar *uniform_var; + u32 initial_values_count; + GX2UniformInitialValue *initial_value; + u32 loops_count; + void *loops_data; + u32 sampler_vars_count; + GX2SamplerVar *sampler_var; + u32 attribute_vars_count; + GX2AttribVar *attribute_var; + u32 data[6]; + u32 shader_program_buffer[16]; +} GX2VertexShader; + +typedef struct _GX2PixelShader { + u32 regs[41]; + u32 shader_size; + void *shader_data; + s32 shader_mode; + u32 uniform_blocks_count; + GX2UniformBlock *uniform_block; + u32 uniform_vars_count; + GX2UniformVar *uniform_var; + u32 initial_values_count; + GX2UniformInitialValue *initial_value; + u32 loops_count; + void *loops_data; + u32 sampler_vars_count; + GX2SamplerVar *sampler_var; + u32 shader_program_buffer[16]; +} GX2PixelShader; + +static const u32 attribute_dest_comp_selector[20] = { + GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_X001, GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_X001, + GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, + GX2_COMP_SEL_XY01, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZ1, + GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW +}; + +static const u32 texture_comp_selector[54] = { + GX2_COMP_SEL_NONE, GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_X001, + GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, + GX2_COMP_SEL_WZYX, GX2_COMP_SEL_X001, GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XY01, GX2_COMP_SEL_NONE, + GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_NONE, + GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_WZYX, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XY01, + GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, + GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_X001, + GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZ1, + GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01 +}; + +typedef struct _GX2Color { + u8 r, g, b, a; +} GX2Color; + +typedef struct _GX2ColorF32 { + f32 r, g, b, a; +} GX2ColorF32; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/dynamic_libs/os_functions.c b/src/dynamic_libs/os_functions.c new file mode 100644 index 0000000..2923bcd --- /dev/null +++ b/src/dynamic_libs/os_functions.c @@ -0,0 +1,344 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "common/common.h" +#include "os_functions.h" + +unsigned int coreinit_handle __attribute__((section(".data"))) = 0; + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Lib handle functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_DECL(int, OSDynLoad_Acquire, const char* rpl, u32 *handle); +EXPORT_DECL(int, OSDynLoad_FindExport, u32 handle, int isdata, const char *symbol, void *address); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Security functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_DECL(int, OSGetSecurityLevel, void); +EXPORT_DECL(int, OSForceFullRelaunch, void); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Thread functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_DECL(int, OSCreateThread, void *thread, s32 (*callback)(s32, void*), s32 argc, void *args, u32 stack, u32 stack_size, s32 priority, u32 attr); +EXPORT_DECL(int, OSResumeThread, void *thread); +EXPORT_DECL(int, OSSuspendThread, void *thread); +EXPORT_DECL(int, OSIsThreadTerminated, void *thread); +EXPORT_DECL(int, OSIsThreadSuspended, void *thread); +EXPORT_DECL(int, OSSetThreadPriority, void * thread, int priority); +EXPORT_DECL(int, OSJoinThread, void * thread, int * ret_val); +EXPORT_DECL(void, OSDetachThread, void * thread); +EXPORT_DECL(void, OSSleepTicks, u64 ticks); +EXPORT_DECL(u64, OSGetTick, void); +EXPORT_DECL(u64, OSGetTime, void); +EXPORT_DECL(void, OSTicksToCalendarTime, u64 time, OSCalendarTime * calendarTime); + + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Mutex functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_DECL(void, OSInitMutex, void* mutex); +EXPORT_DECL(void, OSLockMutex, void* mutex); +EXPORT_DECL(void, OSUnlockMutex, void* mutex); +EXPORT_DECL(int, OSTryLockMutex, void* mutex); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! System functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_DECL(u64, OSGetTitleID, void); +EXPORT_DECL(void, OSGetArgcArgv, int* argc, char*** argv); +EXPORT_DECL(void, __Exit, void); +EXPORT_DECL(void, OSFatal, const char* msg); +EXPORT_DECL(void, OSSetExceptionCallback, u8 exceptionType, exception_callback newCallback); +EXPORT_DECL(void, DCFlushRange, const void *addr, u32 length); +EXPORT_DECL(void, DCStoreRange, const void *addr, u32 length); +EXPORT_DECL(void, ICInvalidateRange, const void *addr, u32 length); +EXPORT_DECL(void*, OSEffectiveToPhysical, const void*); +EXPORT_DECL(int, __os_snprintf, char* s, int n, const char * format, ...); +EXPORT_DECL(int *, __gh_errno_ptr, void); + +EXPORT_DECL(void, OSScreenInit, void); +EXPORT_DECL(unsigned int, OSScreenGetBufferSizeEx, unsigned int bufferNum); +EXPORT_DECL(int, OSScreenSetBufferEx, unsigned int bufferNum, void * addr); +EXPORT_DECL(int, OSScreenClearBufferEx, unsigned int bufferNum, unsigned int temp); +EXPORT_DECL(int, OSScreenFlipBuffersEx, unsigned int bufferNum); +EXPORT_DECL(int, OSScreenPutFontEx, unsigned int bufferNum, unsigned int posX, unsigned int posY, const char * buffer); +EXPORT_DECL(int, OSScreenEnableEx, unsigned int bufferNum, int enable); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Memory functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_VAR(unsigned int *, pMEMAllocFromDefaultHeapEx); +EXPORT_VAR(unsigned int *, pMEMAllocFromDefaultHeap); +EXPORT_VAR(unsigned int *, pMEMFreeToDefaultHeap); + +EXPORT_DECL(int, MEMGetBaseHeapHandle, int mem_arena); +EXPORT_DECL(unsigned int, MEMGetAllocatableSizeForFrmHeapEx, int heap, int align); +EXPORT_DECL(void *, MEMAllocFromFrmHeapEx, int heap, unsigned int size, int align); +EXPORT_DECL(void, MEMFreeToFrmHeap, int heap, int mode); +EXPORT_DECL(void *, MEMAllocFromExpHeapEx, int heap, unsigned int size, int align); +EXPORT_DECL(int , MEMCreateExpHeapEx, void* address, unsigned int size, unsigned short flags); +EXPORT_DECL(void *, MEMDestroyExpHeap, int heap); +EXPORT_DECL(void, MEMFreeToExpHeap, int heap, void* ptr); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! MCP functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_DECL(int, MCP_Open, void); +EXPORT_DECL(int, MCP_Close, int handle); +EXPORT_DECL(int, MCP_TitleCount, int handle); +EXPORT_DECL(int, MCP_TitleList, int handle, int *res, void *data, int count); +EXPORT_DECL(int, MCP_GetOwnTitleInfo, int handle, void * data); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Loader functions (not real rpl) +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_DECL(int, LiWaitIopComplete, int unknown_syscall_arg_r3, int * remaining_bytes); +EXPORT_DECL(int, LiWaitIopCompleteWithInterrupts, int unknown_syscall_arg_r3, int * remaining_bytes); +EXPORT_DECL(void, addr_LiWaitOneChunk, void); +EXPORT_DECL(void, addr_sgIsLoadingBuffer, void); +EXPORT_DECL(void, addr_gDynloadInitialized, void); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Kernel function addresses +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_DECL(void, addr_PrepareTitle_hook, void); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Other function addresses +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_DECL(void, DCInvalidateRange, void *buffer, uint32_t length); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Energy Saver functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//Burn-in Reduction +EXPORT_DECL(int, IMEnableDim,void); +EXPORT_DECL(int, IMDisableDim,void); +EXPORT_DECL(int, IMIsDimEnabled,int * result); +//Auto power down +EXPORT_DECL(int, IMEnableAPD,void); +EXPORT_DECL(int, IMDisableAPD,void); +EXPORT_DECL(int, IMIsAPDEnabled,int * result); +EXPORT_DECL(int, IMIsAPDEnabledBySysSettings,int * result); + + +EXPORT_DECL(int, IOS_Ioctl,int fd, unsigned int request, void *input_buffer,unsigned int input_buffer_len, void *output_buffer, unsigned int output_buffer_len); +EXPORT_DECL(int, IOS_IoctlAsync,int fd, unsigned int request, void *input_buffer,unsigned int input_buffer_len, void *output_buffer, unsigned int output_buffer_len, void *cb, void *cbarg); +EXPORT_DECL(int, IOS_Open,char *path, unsigned int mode); +EXPORT_DECL(int, IOS_Close,int fd); +void InitAcquireOS(void) +{ + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! Lib handle functions + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + EXPORT_FUNC_WRITE(OSDynLoad_Acquire, (int (*)(const char*, unsigned *))OS_SPECIFICS->addr_OSDynLoad_Acquire); + EXPORT_FUNC_WRITE(OSDynLoad_FindExport, (int (*)(u32, int, const char *, void *))OS_SPECIFICS->addr_OSDynLoad_FindExport); + + OSDynLoad_Acquire("coreinit.rpl", &coreinit_handle); +} + +void InitOSFunctionPointers(void) +{ + unsigned int *funcPointer = 0; + + InitAcquireOS(); + + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! Security functions + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + OS_FIND_EXPORT(coreinit_handle, OSGetSecurityLevel); + OS_FIND_EXPORT(coreinit_handle, OSForceFullRelaunch); + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! System functions + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + OS_FIND_EXPORT(coreinit_handle, OSFatal); + OS_FIND_EXPORT(coreinit_handle, OSGetTitleID); + OS_FIND_EXPORT(coreinit_handle, OSGetArgcArgv); + OS_FIND_EXPORT(coreinit_handle, OSSetExceptionCallback); + OS_FIND_EXPORT(coreinit_handle, DCFlushRange); + OS_FIND_EXPORT(coreinit_handle, DCStoreRange); + OS_FIND_EXPORT(coreinit_handle, ICInvalidateRange); + OS_FIND_EXPORT(coreinit_handle, OSEffectiveToPhysical); + OS_FIND_EXPORT(coreinit_handle, __os_snprintf); + OS_FIND_EXPORT(coreinit_handle, __gh_errno_ptr); + + OSDynLoad_FindExport(coreinit_handle, 0, "_Exit", &__Exit); + + OS_FIND_EXPORT(coreinit_handle, OSScreenInit); + OS_FIND_EXPORT(coreinit_handle, OSScreenGetBufferSizeEx); + OS_FIND_EXPORT(coreinit_handle, OSScreenSetBufferEx); + OS_FIND_EXPORT(coreinit_handle, OSScreenClearBufferEx); + OS_FIND_EXPORT(coreinit_handle, OSScreenFlipBuffersEx); + OS_FIND_EXPORT(coreinit_handle, OSScreenPutFontEx); + OS_FIND_EXPORT(coreinit_handle, OSScreenEnableEx); + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! Thread functions + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + OS_FIND_EXPORT(coreinit_handle, OSCreateThread); + OS_FIND_EXPORT(coreinit_handle, OSResumeThread); + OS_FIND_EXPORT(coreinit_handle, OSSuspendThread); + OS_FIND_EXPORT(coreinit_handle, OSIsThreadTerminated); + OS_FIND_EXPORT(coreinit_handle, OSIsThreadSuspended); + OS_FIND_EXPORT(coreinit_handle, OSJoinThread); + OS_FIND_EXPORT(coreinit_handle, OSSetThreadPriority); + OS_FIND_EXPORT(coreinit_handle, OSDetachThread); + OS_FIND_EXPORT(coreinit_handle, OSSleepTicks); + OS_FIND_EXPORT(coreinit_handle, OSGetTick); + OS_FIND_EXPORT(coreinit_handle, OSGetTime); + OS_FIND_EXPORT(coreinit_handle, OSTicksToCalendarTime); + + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! Mutex functions + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + OS_FIND_EXPORT(coreinit_handle, OSInitMutex); + OS_FIND_EXPORT(coreinit_handle, OSLockMutex); + OS_FIND_EXPORT(coreinit_handle, OSUnlockMutex); + OS_FIND_EXPORT(coreinit_handle, OSTryLockMutex); + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! MCP functions + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + OS_FIND_EXPORT(coreinit_handle, MCP_Open); + OS_FIND_EXPORT(coreinit_handle, MCP_Close); + OS_FIND_EXPORT(coreinit_handle, MCP_TitleCount); + OS_FIND_EXPORT(coreinit_handle, MCP_TitleList); + OS_FIND_EXPORT(coreinit_handle, MCP_GetOwnTitleInfo); + + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! Memory functions + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + OSDynLoad_FindExport(coreinit_handle, 1, "MEMAllocFromDefaultHeapEx", &pMEMAllocFromDefaultHeapEx); + OSDynLoad_FindExport(coreinit_handle, 1, "MEMAllocFromDefaultHeap", &pMEMAllocFromDefaultHeap); + OSDynLoad_FindExport(coreinit_handle, 1, "MEMFreeToDefaultHeap", &pMEMFreeToDefaultHeap); + + OS_FIND_EXPORT(coreinit_handle, MEMGetBaseHeapHandle); + OS_FIND_EXPORT(coreinit_handle, MEMGetAllocatableSizeForFrmHeapEx); + OS_FIND_EXPORT(coreinit_handle, MEMAllocFromFrmHeapEx); + OS_FIND_EXPORT(coreinit_handle, MEMFreeToFrmHeap); + OS_FIND_EXPORT(coreinit_handle, MEMAllocFromExpHeapEx); + OS_FIND_EXPORT(coreinit_handle, MEMCreateExpHeapEx); + OS_FIND_EXPORT(coreinit_handle, MEMDestroyExpHeap); + OS_FIND_EXPORT(coreinit_handle, MEMFreeToExpHeap); + + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! Other function addresses + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + OS_FIND_EXPORT(coreinit_handle, DCInvalidateRange); + + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! Energy Saver functions + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //Burn-in Reduction + OS_FIND_EXPORT(coreinit_handle, IMEnableDim); + OS_FIND_EXPORT(coreinit_handle, IMDisableDim); + OS_FIND_EXPORT(coreinit_handle, IMIsDimEnabled); + //Auto power down + OS_FIND_EXPORT(coreinit_handle, IMEnableAPD); + OS_FIND_EXPORT(coreinit_handle, IMDisableAPD); + OS_FIND_EXPORT(coreinit_handle, IMIsAPDEnabled); + OS_FIND_EXPORT(coreinit_handle, IMIsAPDEnabledBySysSettings); + + OS_FIND_EXPORT(coreinit_handle, IOS_Ioctl); + OS_FIND_EXPORT(coreinit_handle, IOS_IoctlAsync); + OS_FIND_EXPORT(coreinit_handle, IOS_Open); + OS_FIND_EXPORT(coreinit_handle, IOS_Close); + + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! Special non library functions + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + if(OS_FIRMWARE == 532 || OS_FIRMWARE == 540) + { + EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100FFA4); // loader.elf + EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100FE90); // loader.elf + EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010007EC); // loader.elf + EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF18558); // kernel.elf + + EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19D00); // loader.elf + EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13C3C); // loader.elf + } + else if(OS_FIRMWARE == 500 || OS_FIRMWARE == 510) + { + EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100FBC4); + EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100FAB0); + EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010007EC); + EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF18534); + + EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19D00); + EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13C3C); + } + else if(OS_FIRMWARE == 410) + { + EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100F78C); + EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100F678); + EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010007F8); + EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF166DC); + + EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19CC0); + EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13BFC); + } + else if(OS_FIRMWARE == 400) //same for 402 and 403 + { + EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100F78C); + EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100F678); + EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010007F8); + EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF15E70); + + EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19CC0); + EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13BFC); + } + else if(OS_FIRMWARE == 550) + { + EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x01010180); + EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0101006C); + EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x0100080C); + EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF184E4); + + EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19E80); + EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13DBC); + } + else if(OS_FIRMWARE == 310) + { + EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100C4E4); + EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100C3D4); + EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010004D8); + EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF15A0C); + + EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19340); + EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE1329C); + } + else if(OS_FIRMWARE == 300) + { + EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100C4E4); + EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100C3D4); + EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010004D8); + EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF15974); + + EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19340); + EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE1329C); + } + else + { + OSFatal("Missing all OS specific addresses."); + } +} diff --git a/src/dynamic_libs/os_functions.h b/src/dynamic_libs/os_functions.h new file mode 100644 index 0000000..3d58932 --- /dev/null +++ b/src/dynamic_libs/os_functions.h @@ -0,0 +1,182 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __OS_FUNCTIONS_H_ +#define __OS_FUNCTIONS_H_ + +#include +#include "common/os_defs.h" +#include "os_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define BUS_SPEED 248625000 +#define SECS_TO_TICKS(sec) (((unsigned long long)(sec)) * (BUS_SPEED/4)) +#define MILLISECS_TO_TICKS(msec) (SECS_TO_TICKS(msec) / 1000) +#define MICROSECS_TO_TICKS(usec) (SECS_TO_TICKS(usec) / 1000000) + +#define usleep(usecs) OSSleepTicks(MICROSECS_TO_TICKS(usecs)) +#define sleep(secs) OSSleepTicks(SECS_TO_TICKS(secs)) + +#define FLUSH_DATA_BLOCK(addr) asm volatile("dcbf 0, %0; sync" : : "r"(((addr) & ~31))) +#define INVAL_DATA_BLOCK(addr) asm volatile("dcbi 0, %0; sync" : : "r"(((addr) & ~31))) + +#define EXPORT_DECL(res, func, ...) res (* func)(__VA_ARGS__) __attribute__((section(".data"))) = 0; +#define EXPORT_VAR(type, var) type var __attribute__((section(".data"))); + + +#define EXPORT_FUNC_WRITE(func, val) *(u32*)(((u32)&func) + 0) = (u32)val + +#define OS_FIND_EXPORT(handle, func) funcPointer = 0; \ + OSDynLoad_FindExport(handle, 0, # func, &funcPointer); \ + if(!funcPointer) \ + OSFatal("Function " # func " is NULL"); \ + EXPORT_FUNC_WRITE(func, funcPointer); + +#define OS_FIND_EXPORT_EX(handle, func, func_p) \ + funcPointer = 0; \ + OSDynLoad_FindExport(handle, 0, # func, &funcPointer); \ + if(!funcPointer) \ + OSFatal("Function " # func " is NULL"); \ + EXPORT_FUNC_WRITE(func_p, funcPointer); + +#define OS_MUTEX_SIZE 44 + +/* Handle for coreinit */ +extern unsigned int coreinit_handle; +void InitOSFunctionPointers(void); +void InitAcquireOS(void); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Lib handle functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern int (* OSDynLoad_Acquire)(const char* rpl, u32 *handle); +extern int (* OSDynLoad_FindExport)(u32 handle, int isdata, const char *symbol, void *address); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Security functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern int (* OSGetSecurityLevel)(void); +extern int (* OSForceFullRelaunch)(void); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Thread functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern int (* OSCreateThread)(void *thread, s32 (*callback)(s32, void*), s32 argc, void *args, u32 stack, u32 stack_size, s32 priority, u32 attr); +extern int (* OSResumeThread)(void *thread); +extern int (* OSSuspendThread)(void *thread); +extern int (* OSIsThreadTerminated)(void *thread); +extern int (* OSIsThreadSuspended)(void *thread); +extern int (* OSJoinThread)(void * thread, int * ret_val); +extern int (* OSSetThreadPriority)(void * thread, int priority); +extern void (* OSDetachThread)(void * thread); +extern void (* OSSleepTicks)(u64 ticks); +extern u64 (* OSGetTick)(void); +extern u64 (* OSGetTime)(void); +extern void (*OSTicksToCalendarTime)(u64 time, OSCalendarTime *calendarTime); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Mutex functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern void (* OSInitMutex)(void* mutex); +extern void (* OSLockMutex)(void* mutex); +extern void (* OSUnlockMutex)(void* mutex); +extern int (* OSTryLockMutex)(void* mutex); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! System functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern u64 (* OSGetTitleID)(void); +extern void (* OSGetArgcArgv)(int* argc, char*** argv); +extern void (* __Exit)(void); +extern void (* OSFatal)(const char* msg); +extern void (* DCFlushRange)(const void *addr, u32 length); +extern void (* DCStoreRange)(const void *addr, u32 length); +extern void (* ICInvalidateRange)(const void *addr, u32 length); +extern void* (* OSEffectiveToPhysical)(const void*); +extern int (* __os_snprintf)(char* s, int n, const char * format, ...); +extern int * (* __gh_errno_ptr)(void); + +extern void (*OSScreenInit)(void); +extern unsigned int (*OSScreenGetBufferSizeEx)(unsigned int bufferNum); +extern int (*OSScreenSetBufferEx)(unsigned int bufferNum, void * addr); +extern int (*OSScreenClearBufferEx)(unsigned int bufferNum, unsigned int temp); +extern int (*OSScreenFlipBuffersEx)(unsigned int bufferNum); +extern int (*OSScreenPutFontEx)(unsigned int bufferNum, unsigned int posX, unsigned int posY, const char * buffer); +extern int (*OSScreenEnableEx)(unsigned int bufferNum, int enable); + +typedef unsigned char (*exception_callback)(void * interruptedContext); +extern void (* OSSetExceptionCallback)(u8 exceptionType, exception_callback newCallback); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! MCP functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern int (* MCP_Open)(void); +extern int (* MCP_Close)(int handle); +extern int (* MCP_TitleCount)(int handle); +extern int (* MCP_TitleList)(int handle, int *res, void *data, int count); +extern int (* MCP_GetOwnTitleInfo)(int handle, void * data); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! LOADER functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern int (* LiWaitIopComplete)(int unknown_syscall_arg_r3, int * remaining_bytes); +extern int (* LiWaitIopCompleteWithInterrupts)(int unknown_syscall_arg_r3, int * remaining_bytes); +extern void (* addr_LiWaitOneChunk)(void); +extern void (* addr_sgIsLoadingBuffer)(void); +extern void (* addr_gDynloadInitialized)(void); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Kernel function addresses +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern void (* addr_PrepareTitle_hook)(void); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Other function addresses +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern void (*DCInvalidateRange)(void *buffer, uint32_t length); + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Energy Saver functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +////Burn-in Reduction +extern int (*IMEnableDim)(void); +extern int (*IMDisableDim)(void); +extern int (*IMIsDimEnabled)(int * result); +//Auto power down +extern int (*IMEnableAPD)(void); +extern int (*IMDisableAPD)(void); +extern int (*IMIsAPDEnabled)(int * result); +extern int (*IMIsAPDEnabledBySysSettings)(int * result); + +extern int (*IOS_Ioctl)(int fd, unsigned int request, void *input_buffer,unsigned int input_buffer_len, void *output_buffer, unsigned int output_buffer_len); +extern int (*IOS_IoctlAsync)(int fd, unsigned int request, void *input_buffer,unsigned int input_buffer_len, void *output_buffer, unsigned int output_buffer_len, void *cb, void *cbarg); +extern int (*IOS_Open)(char *path, unsigned int mode); +extern int (*IOS_Close)(int fd); +#ifdef __cplusplus +} +#endif + +#endif // __OS_FUNCTIONS_H_ diff --git a/src/dynamic_libs/os_types.h b/src/dynamic_libs/os_types.h new file mode 100644 index 0000000..aaa18fe --- /dev/null +++ b/src/dynamic_libs/os_types.h @@ -0,0 +1,27 @@ +#ifndef _OS_TYPES_H_ +#define _OS_TYPES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +typedef struct _OSCalendarTime { + int sec; + int min; + int hour; + int mday; + int mon; + int year; + int wday; + int yday; + int msec; + int usec; +} OSCalendarTime; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/dynamic_libs/padscore_functions.c b/src/dynamic_libs/padscore_functions.c new file mode 100644 index 0000000..f7ca8e9 --- /dev/null +++ b/src/dynamic_libs/padscore_functions.c @@ -0,0 +1,61 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "os_functions.h" +#include "padscore_functions.h" + +unsigned int padscore_handle __attribute__((section(".data"))) = 0; + +EXPORT_DECL(void, KPADInit, void); +EXPORT_DECL(void, WPADInit, void); +EXPORT_DECL(s32, WPADProbe, s32 chan, u32 * pad_type); +EXPORT_DECL(s32, WPADSetDataFormat, s32 chan, s32 format); +EXPORT_DECL(void, WPADEnableURCC, s32 enable); +EXPORT_DECL(void, WPADRead, s32 chan, void * data); +EXPORT_DECL(s32, KPADRead, s32 chan, void * data, u32 size); +EXPORT_DECL(void,WPADSetAutoSleepTime,u8 minute); +EXPORT_DECL(void,WPADDisconnect,s32 chan); + +void InitAcquirePadScore(void) +{ + OSDynLoad_Acquire("padscore.rpl", &padscore_handle); +} + +void InitPadScoreFunctionPointers(void) +{ + unsigned int *funcPointer = 0; + InitAcquirePadScore(); + + OS_FIND_EXPORT(padscore_handle, WPADInit); + OS_FIND_EXPORT(padscore_handle, KPADInit); + OS_FIND_EXPORT(padscore_handle, WPADProbe); + OS_FIND_EXPORT(padscore_handle, WPADSetDataFormat); + OS_FIND_EXPORT(padscore_handle, WPADEnableURCC); + OS_FIND_EXPORT(padscore_handle, WPADRead); + OS_FIND_EXPORT(padscore_handle, KPADRead); + OS_FIND_EXPORT(padscore_handle, WPADSetAutoSleepTime); + OS_FIND_EXPORT(padscore_handle, WPADDisconnect); + + KPADInit(); + WPADEnableURCC(1); +} diff --git a/src/dynamic_libs/padscore_functions.h b/src/dynamic_libs/padscore_functions.h new file mode 100644 index 0000000..5b000b1 --- /dev/null +++ b/src/dynamic_libs/padscore_functions.h @@ -0,0 +1,171 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __PAD_SCORE_FUNCTIONS_H_ +#define __PAD_SCORE_FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "dynamic_libs/vpad_functions.h" + +extern unsigned int padscore_handle; + +#include + +#define WPAD_BUTTON_LEFT 0x0001 +#define WPAD_BUTTON_RIGHT 0x0002 +#define WPAD_BUTTON_DOWN 0x0004 +#define WPAD_BUTTON_UP 0x0008 +#define WPAD_BUTTON_PLUS 0x0010 +#define WPAD_BUTTON_2 0x0100 +#define WPAD_BUTTON_1 0x0200 +#define WPAD_BUTTON_B 0x0400 +#define WPAD_BUTTON_A 0x0800 +#define WPAD_BUTTON_MINUS 0x1000 +#define WPAD_BUTTON_Z 0x2000 +#define WPAD_BUTTON_C 0x4000 +#define WPAD_BUTTON_HOME 0x8000 + +#define WPAD_CLASSIC_BUTTON_UP 0x0001 +#define WPAD_CLASSIC_BUTTON_LEFT 0x0002 +#define WPAD_CLASSIC_BUTTON_ZR 0x0004 +#define WPAD_CLASSIC_BUTTON_X 0x0008 +#define WPAD_CLASSIC_BUTTON_A 0x0010 +#define WPAD_CLASSIC_BUTTON_Y 0x0020 +#define WPAD_CLASSIC_BUTTON_B 0x0040 +#define WPAD_CLASSIC_BUTTON_ZL 0x0080 +#define WPAD_CLASSIC_BUTTON_R 0x0200 +#define WPAD_CLASSIC_BUTTON_PLUS 0x0400 +#define WPAD_CLASSIC_BUTTON_HOME 0x0800 +#define WPAD_CLASSIC_BUTTON_MINUS 0x1000 +#define WPAD_CLASSIC_BUTTON_L 0x2000 +#define WPAD_CLASSIC_BUTTON_DOWN 0x4000 +#define WPAD_CLASSIC_BUTTON_RIGHT 0x8000 + +#define WPAD_PRO_BUTTON_UP 0x00000001 +#define WPAD_PRO_BUTTON_LEFT 0x00000002 +#define WPAD_PRO_TRIGGER_ZR 0x00000004 +#define WPAD_PRO_BUTTON_X 0x00000008 +#define WPAD_PRO_BUTTON_A 0x00000010 +#define WPAD_PRO_BUTTON_Y 0x00000020 +#define WPAD_PRO_BUTTON_B 0x00000040 +#define WPAD_PRO_TRIGGER_ZL 0x00000080 +#define WPAD_PRO_RESERVED 0x00000100 +#define WPAD_PRO_TRIGGER_R 0x00000200 +#define WPAD_PRO_BUTTON_PLUS 0x00000400 +#define WPAD_PRO_BUTTON_HOME 0x00000800 +#define WPAD_PRO_BUTTON_MINUS 0x00001000 +#define WPAD_PRO_TRIGGER_L 0x00002000 +#define WPAD_PRO_BUTTON_DOWN 0x00004000 +#define WPAD_PRO_BUTTON_RIGHT 0x00008000 +#define WPAD_PRO_BUTTON_STICK_R 0x00010000 +#define WPAD_PRO_BUTTON_STICK_L 0x00020000 + +#define WPAD_PRO_STICK_L_EMULATION_UP 0x00200000 +#define WPAD_PRO_STICK_L_EMULATION_DOWN 0x00100000 +#define WPAD_PRO_STICK_L_EMULATION_LEFT 0x00040000 +#define WPAD_PRO_STICK_L_EMULATION_RIGHT 0x00080000 + +#define WPAD_PRO_STICK_R_EMULATION_UP 0x02000000 +#define WPAD_PRO_STICK_R_EMULATION_DOWN 0x01000000 +#define WPAD_PRO_STICK_R_EMULATION_LEFT 0x00400000 +#define WPAD_PRO_STICK_R_EMULATION_RIGHT 0x00800000 + +typedef struct _KPADData +{ + u32 btns_h; + u32 btns_d; + u32 btns_r; + u32 unused_1[5]; + f32 pos_x; + f32 pos_y; + u32 unused_2[3]; + f32 angle_x; + f32 angle_y; + u32 unused_3[8]; + u8 device_type; + u8 wpad_error; + u8 pos_valid; + u8 format; + + union + { + struct + { + f32 stick_x; + f32 stick_y; + } nunchuck; + + struct + { + u32 btns_h; + u32 btns_d; + u32 btns_r; + f32 lstick_x; + f32 lstick_y; + f32 rstick_x; + f32 rstick_y; + f32 ltrigger; + f32 rtrigger; + } classic; + + struct + { + u32 btns_h; + u32 btns_d; + u32 btns_r; + f32 lstick_x; + f32 lstick_y; + f32 rstick_x; + f32 rstick_y; + int charging; + int wired; + } pro; + + u32 unused_6[20]; + }; + u32 unused_7[16]; +} KPADData; +void InitPadScoreFunctionPointers(void); +void InitAcquirePadScore(void); + +typedef void (* wpad_connect_callback_t)(s32 chan, s32 status); + +extern void (* KPADInit)(void); +extern void (* WPADInit)(void); +extern s32 (* WPADProbe)(s32 chan, u32 * pad_type); +extern s32 (* WPADSetDataFormat)(s32 chan, s32 format); +extern void (* WPADEnableURCC)(s32 enable); +extern void (* WPADRead)(s32 chan, void * data); +extern s32 (* KPADRead)(s32 chan, void * data, u32 size); +extern s32 (* KPADReadEx)(s32 chan, KPADData * data, u32 size, s32 *error); +extern void (*WPADSetAutoSleepTime)(u8 time); +extern void (*WPADDisconnect)( s32 chan ); + +#ifdef __cplusplus +} +#endif + +#endif // __PAD_SCORE_FUNCTIONS_H_ diff --git a/src/dynamic_libs/socket_functions.c b/src/dynamic_libs/socket_functions.c new file mode 100644 index 0000000..de2c31f --- /dev/null +++ b/src/dynamic_libs/socket_functions.c @@ -0,0 +1,81 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "os_functions.h" +#include "socket_functions.h" + +u32 hostIpAddress = 0; + +unsigned int nsysnet_handle __attribute__((section(".data"))) = 0; + +EXPORT_DECL(void, socket_lib_init, void); +EXPORT_DECL(int, socket, int domain, int type, int protocol); +EXPORT_DECL(int, socketclose, int s); +EXPORT_DECL(int, connect, int s, void *addr, int addrlen); +EXPORT_DECL(int, bind, s32 s,struct sockaddr *name,s32 namelen); +EXPORT_DECL(int, listen, s32 s,u32 backlog); +EXPORT_DECL(int, accept, s32 s,struct sockaddr *addr,s32 *addrlen); +EXPORT_DECL(int, send, int s, const void *buffer, int size, int flags); +EXPORT_DECL(int, recv, int s, void *buffer, int size, int flags); +EXPORT_DECL(int, recvfrom,int sockfd, void *buf, int len, int flags,struct sockaddr *src_addr, int *addrlen); +EXPORT_DECL(int, sendto, int s, const void *buffer, int size, int flags, const struct sockaddr *dest, int dest_len); +EXPORT_DECL(int, setsockopt, int s, int level, int optname, void *optval, int optlen); +EXPORT_DECL(char *, inet_ntoa, struct in_addr in); +EXPORT_DECL(int, inet_aton, const char *cp, struct in_addr *inp); + +EXPORT_DECL(int, NSSLWrite, int connection, const void* buf, int len,int * written); +EXPORT_DECL(int, NSSLRead, int connection, const void* buf, int len,int * read); +EXPORT_DECL(int, NSSLCreateConnection, int context, const char* host, int hotlen,int options,int sock,int block); + +void InitAcquireSocket(void) +{ + OSDynLoad_Acquire("nsysnet.rpl", &nsysnet_handle); +} + +void InitSocketFunctionPointers(void) +{ + unsigned int *funcPointer = 0; + + InitAcquireSocket(); + + OS_FIND_EXPORT(nsysnet_handle, socket_lib_init); + OS_FIND_EXPORT(nsysnet_handle, socket); + OS_FIND_EXPORT(nsysnet_handle, socketclose); + OS_FIND_EXPORT(nsysnet_handle, connect); + OS_FIND_EXPORT(nsysnet_handle, bind); + OS_FIND_EXPORT(nsysnet_handle, listen); + OS_FIND_EXPORT(nsysnet_handle, accept); + OS_FIND_EXPORT(nsysnet_handle, send); + OS_FIND_EXPORT(nsysnet_handle, recv); + OS_FIND_EXPORT(nsysnet_handle, recvfrom); + OS_FIND_EXPORT(nsysnet_handle, sendto); + OS_FIND_EXPORT(nsysnet_handle, setsockopt); + OS_FIND_EXPORT(nsysnet_handle, inet_ntoa); + OS_FIND_EXPORT(nsysnet_handle, inet_aton); + + OS_FIND_EXPORT(nsysnet_handle, NSSLWrite); + OS_FIND_EXPORT(nsysnet_handle, NSSLRead); + OS_FIND_EXPORT(nsysnet_handle, NSSLCreateConnection); + + socket_lib_init(); +} diff --git a/src/dynamic_libs/socket_functions.h b/src/dynamic_libs/socket_functions.h new file mode 100644 index 0000000..1e4df1a --- /dev/null +++ b/src/dynamic_libs/socket_functions.h @@ -0,0 +1,108 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __SOCKET_FUNCTIONS_H_ +#define __SOCKET_FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +extern unsigned int nsysnet_handle; + +#include + +#define INADDR_ANY 0 + +#define AF_INET 2 + +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 + +#define IPPROTO_IP 0 +#define IPPROTO_TCP 6 +#define IPPROTO_UDP 17 + +#define TCP_NODELAY 0x2004 + +#define SOL_SOCKET -1 +#define SO_REUSEADDR 0x0004 +#define SO_NONBLOCK 0x1016 +#define SO_MYADDR 0x1013 +#define SO_RCVTIMEO 0x1006 + +#define SOL_SOCKET -1 +#define MSG_DONTWAIT 32 + +#define htonl(x) x +#define htons(x) x +#define ntohl(x) x +#define ntohs(x) x + + +struct in_addr { + unsigned int s_addr; +}; +struct sockaddr_in { + short sin_family; + unsigned short sin_port; + struct in_addr sin_addr; + char sin_zero[8]; +}; + +struct sockaddr +{ + unsigned short sa_family; + char sa_data[14]; +}; + + +void InitSocketFunctionPointers(void); +void InitAcquireSocket(void); + +extern void (*socket_lib_init)(void); +extern int (*socket)(int domain, int type, int protocol); +extern int (*socketclose)(int s); +extern int (*connect)(int s, void *addr, int addrlen); +extern int (*bind)(s32 s,struct sockaddr *name,s32 namelen); +extern int (*listen)(s32 s,u32 backlog); +extern int (*accept)(s32 s,struct sockaddr *addr,s32 *addrlen); +extern int (*send)(int s, const void *buffer, int size, int flags); +extern int (*recv)(int s, void *buffer, int size, int flags); +extern int (*recvfrom)(int sockfd, void *buf, int len, int flags,struct sockaddr *src_addr, int *addrlen); + +extern int (*sendto)(int s, const void *buffer, int size, int flags, const struct sockaddr *dest, int dest_len); +extern int (*setsockopt)(int s, int level, int optname, void *optval, int optlen); + +extern int (* NSSLWrite)(int connection, const void* buf, int len,int * written); +extern int (* NSSLRead)(int connection, const void* buf, int len,int * read); +extern int (* NSSLCreateConnection)(int context, const char* host, int hotlen,int options,int sock,int block); + +extern char * (*inet_ntoa)(struct in_addr in); +extern int (*inet_aton)(const char *cp, struct in_addr *inp); + +#ifdef __cplusplus +} +#endif + +#endif // __SOCKET_FUNCTIONS_H_ diff --git a/src/dynamic_libs/sys_functions.c b/src/dynamic_libs/sys_functions.c new file mode 100644 index 0000000..2cd44b8 --- /dev/null +++ b/src/dynamic_libs/sys_functions.c @@ -0,0 +1,51 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "os_functions.h" + + unsigned int sysapp_handle __attribute__((section(".data"))) = 0; + +EXPORT_DECL(int, _SYSLaunchTitleByPathFromLauncher, const char* path, int len, int zero); +EXPORT_DECL(int, SYSRelaunchTitle, int argc, char** argv); +EXPORT_DECL(int, SYSLaunchMenu, void); +EXPORT_DECL(int, SYSCheckTitleExists, u64 titleId); +EXPORT_DECL(int, SYSLaunchTitle, u64 titleId); +EXPORT_DECL(int, SYSLaunchSettings, int unk); + +void InitAcquireSys(void) +{ + OSDynLoad_Acquire("sysapp.rpl", &sysapp_handle); +} + +void InitSysFunctionPointers(void) +{ + unsigned int *funcPointer = 0; + InitAcquireSys(); + + OS_FIND_EXPORT(sysapp_handle, _SYSLaunchTitleByPathFromLauncher); + OS_FIND_EXPORT(sysapp_handle, SYSRelaunchTitle); + OS_FIND_EXPORT(sysapp_handle, SYSLaunchMenu); + OS_FIND_EXPORT(sysapp_handle, SYSCheckTitleExists); + OS_FIND_EXPORT(sysapp_handle, SYSLaunchTitle); + OS_FIND_EXPORT(sysapp_handle, SYSLaunchSettings); +} diff --git a/src/dynamic_libs/sys_functions.h b/src/dynamic_libs/sys_functions.h new file mode 100644 index 0000000..64fc2c7 --- /dev/null +++ b/src/dynamic_libs/sys_functions.h @@ -0,0 +1,48 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __SYS_FUNCTIONS_H_ +#define __SYS_FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +extern unsigned int sysapp_handle; + +void InitSysFunctionPointers(void); +void InitAcquireSys(void); + +extern int(*_SYSLaunchTitleByPathFromLauncher)(const char* path, int len, int zero); +extern int (* SYSRelaunchTitle)(int argc, char** argv); +extern int (* SYSLaunchMenu)(void); +extern int (* SYSCheckTitleExists)(u64 titleId); +extern int (* SYSLaunchTitle)(u64 titleId); +extern int (* SYSLaunchSettings)(int unk); + + +#ifdef __cplusplus +} +#endif + +#endif // __SYS_FUNCTIONS_H_ diff --git a/src/dynamic_libs/syshid_functions.c b/src/dynamic_libs/syshid_functions.c new file mode 100644 index 0000000..996d39d --- /dev/null +++ b/src/dynamic_libs/syshid_functions.c @@ -0,0 +1,78 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "os_functions.h" +#include "syshid_functions.h" + +unsigned int syshid_handle __attribute__((section(".data"))) = 0; + +EXPORT_DECL(int, HIDSetup,void); +EXPORT_DECL(int, HIDTeardown,void); + +EXPORT_DECL(int, HIDAddClient,HIDClient *p_client, HIDAttachCallback attach_callback); +EXPORT_DECL(int, HIDDelClient,HIDClient *p_client); + +EXPORT_DECL(int, HIDGetDescriptor,unsigned int handle,u8 descriptor_type,u8 descriptor_index, u16 language_id, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user); +EXPORT_DECL(int, HIDSetDescriptor,unsigned int handle,u8 descriptor_type,u8 descriptor_index, u16 language_id, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user); + +EXPORT_DECL(int, HIDSetProtocol,unsigned int handle,u8 interface_index,u8 protocol, HIDCallback hc, void *p_user); +EXPORT_DECL(int, HIDGetProtocol,unsigned int handle,u8 interface_index,u8 * protocol, HIDCallback hc, void *p_user); + +EXPORT_DECL(int, HIDGetReport,u32 handle, u8 report_type, u8 report_id, u8 *p_buffer, u32 buffer_length, HIDCallback hc, void *p_user); +EXPORT_DECL(int, HIDSetReport,u32 handle, u8 report_type, u8 report_id, u8 *p_buffer, u32 buffer_length, HIDCallback hc, void *p_user); + +EXPORT_DECL(int, HIDSetIdle,unsigned int handle, u8 interface_index,u8 duration, HIDCallback hc, void *p_user); + +EXPORT_DECL(int, HIDRead,unsigned int handle, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user); +EXPORT_DECL(int, HIDWrite,unsigned int handle, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user); + +void InitAcquireSysHID(void) +{ + OSDynLoad_Acquire("nsyshid.rpl", &syshid_handle); +} + +void InitSysHIDFunctionPointers(void) +{ + InitAcquireSysHID(); + + if(syshid_handle == 0){ + return; + } + + unsigned int funcPointer = 0; + + //! assigning those is not mandatory and it does not always work to load them + OS_FIND_EXPORT(syshid_handle, HIDSetup); + OS_FIND_EXPORT(syshid_handle, HIDTeardown); + OS_FIND_EXPORT(syshid_handle, HIDAddClient); + OS_FIND_EXPORT(syshid_handle, HIDDelClient); + OS_FIND_EXPORT(syshid_handle, HIDGetDescriptor); + OS_FIND_EXPORT(syshid_handle, HIDSetDescriptor); + OS_FIND_EXPORT(syshid_handle, HIDRead); + OS_FIND_EXPORT(syshid_handle, HIDWrite); + OS_FIND_EXPORT(syshid_handle, HIDSetProtocol); + OS_FIND_EXPORT(syshid_handle, HIDGetProtocol); + OS_FIND_EXPORT(syshid_handle, HIDSetIdle); + OS_FIND_EXPORT(syshid_handle, HIDGetReport); + OS_FIND_EXPORT(syshid_handle, HIDSetReport); +} diff --git a/src/dynamic_libs/syshid_functions.h b/src/dynamic_libs/syshid_functions.h new file mode 100644 index 0000000..08213b4 --- /dev/null +++ b/src/dynamic_libs/syshid_functions.h @@ -0,0 +1,90 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __SYSHID_FUNCTIONS_H_ +#define __SYSHID_FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +extern unsigned int syshid_handle; + +typedef struct +{ + unsigned int handle; + unsigned int physical_device_inst; + unsigned short vid; + unsigned short pid; + unsigned char interface_index; + unsigned char sub_class; + unsigned char protocol; + + unsigned short max_packet_size_rx; + unsigned short max_packet_size_tx; + +} HIDDevice; + +typedef struct _HIDClient HIDClient; + +#define HID_DEVICE_DETACH 0 +#define HID_DEVICE_ATTACH 1 + +typedef int (*HIDAttachCallback)(HIDClient *p_hc,HIDDevice *p_hd,unsigned int attach); + +struct _HIDClient +{ + HIDClient *next; + HIDAttachCallback attach_cb; +}; + +typedef void (*HIDCallback)(unsigned int handle,int error,unsigned char *p_buffer,unsigned int bytes_transferred,void *p_user); + +void InitSysHIDFunctionPointers(void); +void InitAcquireSysHID(void); + +extern int(*HIDSetup)(void); +extern int(*HIDTeardown)(void); + +extern int(*HIDAddClient)(HIDClient *p_client, HIDAttachCallback attach_callback); +extern int(*HIDDelClient)(HIDClient *p_client); + +extern int(*HIDGetDescriptor)(unsigned int handle,u8 descriptor_type,u8 descriptor_index, u16 language_id, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user); +extern int(*HIDSetDescriptor)(unsigned int handle,u8 descriptor_type,u8 descriptor_index, u16 language_id, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user); + +extern int(*HIDGetReport)(u32 handle, u8 report_type, u8 report_id, u8 *p_buffer, u32 buffer_length, HIDCallback hc, void *p_user); +extern int(*HIDSetReport)(u32 handle, u8 report_type, u8 report_id, u8 *p_buffer, u32 buffer_length, HIDCallback hc, void *p_user); + +extern int(*HIDSetIdle)(unsigned int handle, u8 interface_index,u8 duration, HIDCallback hc, void *p_user); + +extern int(* HIDSetProtocol)(unsigned int handle,u8 interface_index,u8 protocol, HIDCallback hc, void *p_user); +extern int(* HIDGetProtocol)(unsigned int handle,u8 interface_index,u8 * protocol, HIDCallback hc, void *p_user); + +extern int(*HIDRead)(unsigned int handle, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user); +extern int(*HIDWrite)(unsigned int handle, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user); + +#ifdef __cplusplus +} +#endif + +#endif // __SYSHID_FUNCTIONS_H_ diff --git a/src/dynamic_libs/vpad_functions.c b/src/dynamic_libs/vpad_functions.c new file mode 100644 index 0000000..201cf34 --- /dev/null +++ b/src/dynamic_libs/vpad_functions.c @@ -0,0 +1,55 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "os_functions.h" +#include "vpad_functions.h" + +unsigned int vpad_handle __attribute__((section(".data"))) = 0; +unsigned int vpadbase_handle __attribute__((section(".data"))) = 0; + +EXPORT_DECL(void, VPADInit, void); +EXPORT_DECL(int, VPADRead, int chan, VPADData *buffer, u32 buffer_size, s32 *error); +EXPORT_DECL(int, VPADGetLcdMode, int padnum, int *lcdmode); +EXPORT_DECL(int, VPADSetLcdMode, int padnum, int lcdmode); +EXPORT_DECL(int, VPADBASEGetMotorOnRemainingCount, int padnum); +EXPORT_DECL(int, VPADBASESetMotorOnRemainingCount, int padnum, int counter); + +void InitAcquireVPad(void) +{ + OSDynLoad_Acquire("vpad.rpl", &vpad_handle); + OSDynLoad_Acquire("vpadbase.rpl", &vpadbase_handle); +} + +void InitVPadFunctionPointers(void) +{ + unsigned int *funcPointer = 0; + + InitAcquireVPad(); + + OS_FIND_EXPORT(vpad_handle, VPADInit); + OS_FIND_EXPORT(vpad_handle, VPADRead); + OS_FIND_EXPORT(vpad_handle, VPADGetLcdMode); + OS_FIND_EXPORT(vpad_handle, VPADSetLcdMode); + OS_FIND_EXPORT(vpadbase_handle, VPADBASEGetMotorOnRemainingCount); + OS_FIND_EXPORT(vpadbase_handle, VPADBASESetMotorOnRemainingCount); +} diff --git a/src/dynamic_libs/vpad_functions.h b/src/dynamic_libs/vpad_functions.h new file mode 100644 index 0000000..4fafda2 --- /dev/null +++ b/src/dynamic_libs/vpad_functions.h @@ -0,0 +1,114 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __VPAD_FUNCTIONS_H_ +#define __VPAD_FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +extern unsigned int vpad_handle; +extern unsigned int vpadbase_handle; + +#include + +#define VPAD_BUTTON_A 0x8000 +#define VPAD_BUTTON_B 0x4000 +#define VPAD_BUTTON_X 0x2000 +#define VPAD_BUTTON_Y 0x1000 +#define VPAD_BUTTON_LEFT 0x0800 +#define VPAD_BUTTON_RIGHT 0x0400 +#define VPAD_BUTTON_UP 0x0200 +#define VPAD_BUTTON_DOWN 0x0100 +#define VPAD_BUTTON_ZL 0x0080 +#define VPAD_BUTTON_ZR 0x0040 +#define VPAD_BUTTON_L 0x0020 +#define VPAD_BUTTON_R 0x0010 +#define VPAD_BUTTON_PLUS 0x0008 +#define VPAD_BUTTON_MINUS 0x0004 +#define VPAD_BUTTON_HOME 0x0002 +#define VPAD_BUTTON_SYNC 0x0001 +#define VPAD_BUTTON_STICK_R 0x00020000 +#define VPAD_BUTTON_STICK_L 0x00040000 +#define VPAD_BUTTON_TV 0x00010000 + +#define VPAD_STICK_R_EMULATION_LEFT 0x04000000 +#define VPAD_STICK_R_EMULATION_RIGHT 0x02000000 +#define VPAD_STICK_R_EMULATION_UP 0x01000000 +#define VPAD_STICK_R_EMULATION_DOWN 0x00800000 + +#define VPAD_STICK_L_EMULATION_LEFT 0x40000000 +#define VPAD_STICK_L_EMULATION_RIGHT 0x20000000 +#define VPAD_STICK_L_EMULATION_UP 0x10000000 +#define VPAD_STICK_L_EMULATION_DOWN 0x08000000 + +//! Own definitions +#define VPAD_BUTTON_TOUCH 0x00080000 +#define VPAD_MASK_EMULATED_STICKS 0x7F800000 +#define VPAD_MASK_BUTTONS ~VPAD_MASK_EMULATED_STICKS + +typedef struct +{ + f32 x,y; +} Vec2D; + +typedef struct +{ + u16 x, y; /* Touch coordinates */ + u16 touched; /* 1 = Touched, 0 = Not touched */ + u16 invalid; /* 0 = All valid, 1 = X invalid, 2 = Y invalid, 3 = Both invalid? */ +} VPADTPData; + +typedef struct +{ + u32 btns_h; /* Held buttons */ + u32 btns_d; /* Buttons that are pressed at that instant */ + u32 btns_r; /* Released buttons */ + Vec2D lstick, rstick; /* Each contains 4-byte X and Y components */ + char unknown1c[0x52 - 0x1c]; /* Contains accelerometer and gyroscope data somewhere */ + VPADTPData tpdata; /* Normal touchscreen data */ + VPADTPData tpdata1; /* Modified touchscreen data 1 */ + VPADTPData tpdata2; /* Modified touchscreen data 2 */ + char unknown6a[0xa0 - 0x6a]; + uint8_t volume; + uint8_t battery; /* 0 to 6 */ + uint8_t unk_volume; /* One less than volume */ + char unknowna4[0xac - 0xa4]; +} VPADData; + +void InitVPadFunctionPointers(void); +void InitAcquireVPad(void); + +extern int (* VPADRead)(int chan, VPADData *buffer, u32 buffer_size, s32 *error); +extern int (* VPADGetLcdMode)(int padnum, int *lcdmode); +extern int (* VPADSetLcdMode)(int padnum, int lcdmode); +extern void (* VPADInit)(void); +extern int (* VPADBASEGetMotorOnRemainingCount)(int lcdmode); +extern int (* VPADBASESetMotorOnRemainingCount)(int lcdmode,int counter); + +#ifdef __cplusplus +} +#endif + +#endif // __VPAD_FUNCTIONS_H_ diff --git a/src/entry.c b/src/entry.c new file mode 100644 index 0000000..ef317ff --- /dev/null +++ b/src/entry.c @@ -0,0 +1,15 @@ +#include +#include "dynamic_libs/os_functions.h" +#include "dynamic_libs/sys_functions.h" +#include "common/common.h" +#include "utils/utils.h" +#include "main.h" +#include "lib_easy.h" + +int __entry_menu(int argc, char **argv) +{ + uInit(); //Init all the wii u stuff + int ret=Menu_Main(); //Jump to our application + uDeInit(); + return ret; +} diff --git a/src/fs/fs_utils.c b/src/fs/fs_utils.c new file mode 100644 index 0000000..613cec6 --- /dev/null +++ b/src/fs/fs_utils.c @@ -0,0 +1,182 @@ +#include +#include +#include +#include +#include +#include "common/fs_defs.h" +#include "dynamic_libs/fs_functions.h" + + +int MountFS(void *pClient, void *pCmd, char **mount_path) +{ + int result = -1; + + void *mountSrc = malloc(FS_MOUNT_SOURCE_SIZE); + if(!mountSrc) + return -3; + + char* mountPath = (char*) malloc(FS_MAX_MOUNTPATH_SIZE); + if(!mountPath) { + free(mountSrc); + return -4; + } + + memset(mountSrc, 0, FS_MOUNT_SOURCE_SIZE); + memset(mountPath, 0, FS_MAX_MOUNTPATH_SIZE); + + // Mount sdcard + if (FSGetMountSource(pClient, pCmd, FS_SOURCETYPE_EXTERNAL, mountSrc, -1) == 0) + { + result = FSMount(pClient, pCmd, mountSrc, mountPath, FS_MAX_MOUNTPATH_SIZE, -1); + if((result == 0) && mount_path) { + *mount_path = (char*)malloc(strlen(mountPath) + 1); + if(*mount_path) + strcpy(*mount_path, mountPath); + } + } + + free(mountPath); + free(mountSrc); + return result; +} + +int UmountFS(void *pClient, void *pCmd, const char *mountPath) +{ + int result = -1; + result = FSUnmount(pClient, pCmd, mountPath, -1); + + return result; +} + +int LoadFileToMem(const char *filepath, u8 **inbuffer, u32 *size) +{ + //! always initialze input + *inbuffer = NULL; + if(size) + *size = 0; + + int iFd = open(filepath, O_RDONLY); + if (iFd < 0) + return -1; + + u32 filesize = lseek(iFd, 0, SEEK_END); + lseek(iFd, 0, SEEK_SET); + + u8 *buffer = (u8 *) malloc(filesize); + if (buffer == NULL) + { + close(iFd); + return -2; + } + + u32 blocksize = 0x4000; + u32 done = 0; + int readBytes = 0; + + while(done < filesize) + { + if(done + blocksize > filesize) { + blocksize = filesize - done; + } + readBytes = read(iFd, buffer + done, blocksize); + if(readBytes <= 0) + break; + done += readBytes; + } + + close(iFd); + + if (done != filesize) + { + free(buffer); + return -3; + } + + *inbuffer = buffer; + + //! sign is optional input + if(size) { + *size = filesize; + } + return filesize; +} + +int CheckFile(const char * filepath) +{ + if(!filepath) + return 0; + + struct stat filestat; + + char dirnoslash[strlen(filepath)+2]; + snprintf(dirnoslash, sizeof(dirnoslash), "%s", filepath); + + while(dirnoslash[strlen(dirnoslash)-1] == '/') + dirnoslash[strlen(dirnoslash)-1] = '\0'; + + char * notRoot = strrchr(dirnoslash, '/'); + if(!notRoot) + { + strcat(dirnoslash, "/"); + } + + if (stat(dirnoslash, &filestat) == 0) + return 1; + + return 0; +} + +int CreateSubfolder(const char * fullpath) +{ + if(!fullpath) + return 0; + + int result = 0; + + char dirnoslash[strlen(fullpath)+1]; + strcpy(dirnoslash, fullpath); + + int pos = strlen(dirnoslash)-1; + while(dirnoslash[pos] == '/') + { + dirnoslash[pos] = '\0'; + pos--; + } + + if(CheckFile(dirnoslash)) + { + return 1; + } + else + { + char parentpath[strlen(dirnoslash)+2]; + strcpy(parentpath, dirnoslash); + char * ptr = strrchr(parentpath, '/'); + + if(!ptr) + { + //!Device root directory (must be with '/') + strcat(parentpath, "/"); + struct stat filestat; + if (stat(parentpath, &filestat) == 0) + return 1; + + return 0; + } + + ptr++; + ptr[0] = '\0'; + + result = CreateSubfolder(parentpath); + } + + if(!result) + return 0; + + if (mkdir(dirnoslash, 0777) == -1) + { + return 0; + } + + return 1; +} diff --git a/src/fs/fs_utils.h b/src/fs/fs_utils.h new file mode 100644 index 0000000..7022695 --- /dev/null +++ b/src/fs/fs_utils.h @@ -0,0 +1,23 @@ +#ifndef __FS_UTILS_H_ +#define __FS_UTILS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +int MountFS(void *pClient, void *pCmd, char **mount_path); +int UmountFS(void *pClient, void *pCmd, const char *mountPath); + +int LoadFileToMem(const char *filepath, u8 **inbuffer, u32 *size); + +//! todo: C++ class +int CreateSubfolder(const char * fullpath); +int CheckFile(const char * filepath); + +#ifdef __cplusplus +} +#endif + +#endif // __FS_UTILS_H_ diff --git a/src/fs/sd_fat_devoptab.c b/src/fs/sd_fat_devoptab.c new file mode 100644 index 0000000..f5b278b --- /dev/null +++ b/src/fs/sd_fat_devoptab.c @@ -0,0 +1,1019 @@ +/*************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include +#include +#include +#include +#include +#include +#include +#include +#include "dynamic_libs/fs_functions.h" +#include "dynamic_libs/os_functions.h" +#include "fs_utils.h" + +#define FS_ALIGNMENT 0x40 +#define FS_ALIGN(x) (((x) + FS_ALIGNMENT - 1) & ~(FS_ALIGNMENT - 1)) + +typedef struct _sd_fat_private_t { + char *mount_path; + void *pClient; + void *pCmd; + void *pMutex; +} sd_fat_private_t; + +typedef struct _sd_fat_file_state_t { + sd_fat_private_t *dev; + int fd; /* File descriptor */ + int flags; /* Opening flags */ + bool read; /* True if allowed to read from file */ + bool write; /* True if allowed to write to file */ + bool append; /* True if allowed to append to file */ + u64 pos; /* Current position within the file (in bytes) */ + u64 len; /* Total length of the file (in bytes) */ + struct _sd_fat_file_state_t *prevOpenFile; /* The previous entry in a double-linked FILO list of open files */ + struct _sd_fat_file_state_t *nextOpenFile; /* The next entry in a double-linked FILO list of open files */ +} sd_fat_file_state_t; + +typedef struct _sd_fat_dir_entry_t { + sd_fat_private_t *dev; + int dirHandle; +} sd_fat_dir_entry_t; + +static sd_fat_private_t *sd_fat_get_device_data(const char *path) +{ + const devoptab_t *devoptab = NULL; + char name[128] = {0}; + int i; + + // Get the device name from the path + strncpy(name, path, 127); + strtok(name, ":/"); + + // Search the devoptab table for the specified device name + // NOTE: We do this manually due to a 'bug' in GetDeviceOpTab + // which ignores names with suffixes and causes names + // like "ntfs" and "ntfs1" to be seen as equals + for (i = 3; i < STD_MAX; i++) { + devoptab = devoptab_list[i]; + if (devoptab && devoptab->name) { + if (strcmp(name, devoptab->name) == 0) { + return (sd_fat_private_t *)devoptab->deviceData; + } + } + } + + return NULL; +} + +static char *sd_fat_real_path (const char *path, sd_fat_private_t *dev) +{ + // Sanity check + if (!path) + return NULL; + + // Move the path pointer to the start of the actual path + if (strchr(path, ':') != NULL) { + path = strchr(path, ':') + 1; + } + + int mount_len = strlen(dev->mount_path); + + char *new_name = (char*)malloc(mount_len + strlen(path) + 1); + if(new_name) { + strcpy(new_name, dev->mount_path); + strcpy(new_name + mount_len, path); + return new_name; + } + return new_name; +} + +static int sd_fat_open_r (struct _reent *r, void *fileStruct, const char *path, int flags, int mode) +{ + sd_fat_private_t *dev = sd_fat_get_device_data(path); + if(!dev) { + r->_errno = ENODEV; + return -1; + } + + sd_fat_file_state_t *file = (sd_fat_file_state_t *)fileStruct; + + file->dev = dev; + // Determine which mode the file is opened for + file->flags = flags; + + const char *mode_str; + + if ((flags & 0x03) == O_RDONLY) { + file->read = true; + file->write = false; + file->append = false; + mode_str = "r"; + } else if ((flags & 0x03) == O_WRONLY) { + file->read = false; + file->write = true; + file->append = (flags & O_APPEND); + mode_str = file->append ? "a" : "w"; + } else if ((flags & 0x03) == O_RDWR) { + file->read = true; + file->write = true; + file->append = (flags & O_APPEND); + mode_str = file->append ? "a+" : "r+"; + } else { + r->_errno = EACCES; + return -1; + } + + int fd = -1; + + OSLockMutex(dev->pMutex); + + char *real_path = sd_fat_real_path(path, dev); + if(!path) { + r->_errno = ENOMEM; + OSUnlockMutex(dev->pMutex); + return -1; + } + + int result = FSOpenFile(dev->pClient, dev->pCmd, real_path, mode_str, &fd, -1); + + free(real_path); + + if(result == 0) + { + FSStat stats; + result = FSGetStatFile(dev->pClient, dev->pCmd, fd, &stats, -1); + if(result != 0) { + FSCloseFile(dev->pClient, dev->pCmd, fd, -1); + r->_errno = result; + OSUnlockMutex(dev->pMutex); + return -1; + } + file->fd = fd; + file->pos = 0; + file->len = stats.size; + OSUnlockMutex(dev->pMutex); + return (int)file; + } + + r->_errno = result; + OSUnlockMutex(dev->pMutex); + return -1; +} + + +static int sd_fat_close_r (struct _reent *r, int fd) +{ + sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; + if(!file->dev) { + r->_errno = ENODEV; + return -1; + } + + OSLockMutex(file->dev->pMutex); + + int result = FSCloseFile(file->dev->pClient, file->dev->pCmd, file->fd, -1); + + OSUnlockMutex(file->dev->pMutex); + + if(result < 0) + { + r->_errno = result; + return -1; + } + return 0; +} + +static off_t sd_fat_seek_r (struct _reent *r, int fd, off_t pos, int dir) +{ + sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; + if(!file->dev) { + r->_errno = ENODEV; + return 0; + } + + OSLockMutex(file->dev->pMutex); + + switch(dir) + { + case SEEK_SET: + file->pos = pos; + break; + case SEEK_CUR: + file->pos += pos; + break; + case SEEK_END: + file->pos = file->len + pos; + break; + default: + r->_errno = EINVAL; + return -1; + } + + int result = FSSetPosFile(file->dev->pClient, file->dev->pCmd, file->fd, file->pos, -1); + + OSUnlockMutex(file->dev->pMutex); + + if(result == 0) + { + return file->pos; + } + + return result; +} + +static ssize_t sd_fat_write_r (struct _reent *r, int fd, const char *ptr, size_t len) +{ + sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; + if(!file->dev) { + r->_errno = ENODEV; + return 0; + } + + if(!file->write) + { + r->_errno = EACCES; + return 0; + } + + OSLockMutex(file->dev->pMutex); + + size_t len_aligned = FS_ALIGN(len); + if(len_aligned > 0x4000) + len_aligned = 0x4000; + + unsigned char *tmpBuf = (unsigned char *)memalign(FS_ALIGNMENT, len_aligned); + if(!tmpBuf) { + r->_errno = ENOMEM; + OSUnlockMutex(file->dev->pMutex); + return 0; + } + + size_t done = 0; + + while(done < len) + { + size_t write_size = (len_aligned < (len - done)) ? len_aligned : (len - done); + memcpy(tmpBuf, ptr + done, write_size); + + int result = FSWriteFile(file->dev->pClient, file->dev->pCmd, tmpBuf, 0x01, write_size, file->fd, 0, -1); + if(result < 0) + { + r->_errno = result; + break; + } + else if(result == 0) + { + if(write_size > 0) + done = 0; + break; + } + else + { + done += result; + file->pos += result; + } + } + + free(tmpBuf); + OSUnlockMutex(file->dev->pMutex); + return done; +} + +static ssize_t sd_fat_read_r (struct _reent *r, int fd, char *ptr, size_t len) +{ + sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; + if(!file->dev) { + r->_errno = ENODEV; + return 0; + } + + if(!file->read) + { + r->_errno = EACCES; + return 0; + } + + OSLockMutex(file->dev->pMutex); + + size_t len_aligned = FS_ALIGN(len); + if(len_aligned > 0x4000) + len_aligned = 0x4000; + + unsigned char *tmpBuf = (unsigned char *)memalign(FS_ALIGNMENT, len_aligned); + if(!tmpBuf) { + r->_errno = ENOMEM; + OSUnlockMutex(file->dev->pMutex); + return 0; + } + + size_t done = 0; + + while(done < len) + { + size_t read_size = (len_aligned < (len - done)) ? len_aligned : (len - done); + + int result = FSReadFile(file->dev->pClient, file->dev->pCmd, tmpBuf, 0x01, read_size, file->fd, 0, -1); + if(result < 0) + { + r->_errno = result; + done = 0; + break; + } + else if(result == 0) + { + //! TODO: error on read_size > 0 + break; + } + else + { + memcpy(ptr + done, tmpBuf, read_size); + done += result; + file->pos += result; + } + } + + free(tmpBuf); + OSUnlockMutex(file->dev->pMutex); + return done; +} + + +static int sd_fat_fstat_r (struct _reent *r, int fd, struct stat *st) +{ + sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; + if(!file->dev) { + r->_errno = ENODEV; + return -1; + } + + OSLockMutex(file->dev->pMutex); + + // Zero out the stat buffer + memset(st, 0, sizeof(struct stat)); + + FSStat stats; + int result = FSGetStatFile(file->dev->pClient, file->dev->pCmd, file->fd, &stats, -1); + if(result != 0) { + r->_errno = result; + OSUnlockMutex(file->dev->pMutex); + return -1; + } + + st->st_mode = S_IFREG; + st->st_size = stats.size; + st->st_blocks = (stats.size + 511) >> 9; + st->st_nlink = 1; + + // Fill in the generic entry stats + st->st_dev = stats.ent_id; + st->st_uid = stats.owner_id; + st->st_gid = stats.group_id; + st->st_ino = stats.ent_id; + st->st_atime = stats.mtime; + st->st_ctime = stats.ctime; + st->st_mtime = stats.mtime; + OSUnlockMutex(file->dev->pMutex); + return 0; +} + +static int sd_fat_ftruncate_r (struct _reent *r, int fd, off_t len) +{ + sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; + if(!file->dev) { + r->_errno = ENODEV; + return -1; + } + + OSLockMutex(file->dev->pMutex); + + int result = FSTruncateFile(file->dev->pClient, file->dev->pCmd, file->fd, -1); + + OSUnlockMutex(file->dev->pMutex); + + if(result < 0) { + r->_errno = result; + return -1; + } + + return 0; +} + +static int sd_fat_fsync_r (struct _reent *r, int fd) +{ + sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; + if(!file->dev) { + r->_errno = ENODEV; + return -1; + } + + OSLockMutex(file->dev->pMutex); + + int result = FSFlushFile(file->dev->pClient, file->dev->pCmd, file->fd, -1); + + OSUnlockMutex(file->dev->pMutex); + + if(result < 0) { + r->_errno = result; + return -1; + } + + return 0; +} + +static int sd_fat_stat_r (struct _reent *r, const char *path, struct stat *st) +{ + sd_fat_private_t *dev = sd_fat_get_device_data(path); + if(!dev) { + r->_errno = ENODEV; + return -1; + } + + OSLockMutex(dev->pMutex); + + // Zero out the stat buffer + memset(st, 0, sizeof(struct stat)); + + char *real_path = sd_fat_real_path(path, dev); + if(!real_path) { + r->_errno = ENOMEM; + OSUnlockMutex(dev->pMutex); + return -1; + } + + FSStat stats; + + int result = FSGetStat(dev->pClient, dev->pCmd, real_path, &stats, -1); + + free(real_path); + + if(result < 0) { + r->_errno = result; + OSUnlockMutex(dev->pMutex); + return -1; + } + + // mark root also as directory + st->st_mode = ((stats.flag & 0x80000000) || (strlen(dev->mount_path) + 1 == strlen(real_path)))? S_IFDIR : S_IFREG; + st->st_nlink = 1; + st->st_size = stats.size; + st->st_blocks = (stats.size + 511) >> 9; + // Fill in the generic entry stats + st->st_dev = stats.ent_id; + st->st_uid = stats.owner_id; + st->st_gid = stats.group_id; + st->st_ino = stats.ent_id; + st->st_atime = stats.mtime; + st->st_ctime = stats.ctime; + st->st_mtime = stats.mtime; + + OSUnlockMutex(dev->pMutex); + + return 0; +} + +static int sd_fat_link_r (struct _reent *r, const char *existing, const char *newLink) +{ + r->_errno = ENOTSUP; + return -1; +} + +static int sd_fat_unlink_r (struct _reent *r, const char *name) +{ + sd_fat_private_t *dev = sd_fat_get_device_data(name); + if(!dev) { + r->_errno = ENODEV; + return -1; + } + + OSLockMutex(dev->pMutex); + + char *real_path = sd_fat_real_path(name, dev); + if(!real_path) { + r->_errno = ENOMEM; + OSUnlockMutex(dev->pMutex); + return -1; + } + + + int result = FSRemove(dev->pClient, dev->pCmd, real_path, -1); + + free(real_path); + + OSUnlockMutex(dev->pMutex); + + if(result < 0) { + r->_errno = result; + return -1; + } + + return 0; +} + +static int sd_fat_chdir_r (struct _reent *r, const char *name) +{ + sd_fat_private_t *dev = sd_fat_get_device_data(name); + if(!dev) { + r->_errno = ENODEV; + return -1; + } + + OSLockMutex(dev->pMutex); + + char *real_path = sd_fat_real_path(name, dev); + if(!real_path) { + r->_errno = ENOMEM; + OSUnlockMutex(dev->pMutex); + return -1; + } + + int result = FSChangeDir(dev->pClient, dev->pCmd, real_path, -1); + + free(real_path); + + OSUnlockMutex(dev->pMutex); + + if(result < 0) { + r->_errno = result; + return -1; + } + + return 0; +} + +static int sd_fat_rename_r (struct _reent *r, const char *oldName, const char *newName) +{ + sd_fat_private_t *dev = sd_fat_get_device_data(oldName); + if(!dev) { + r->_errno = ENODEV; + return -1; + } + + OSLockMutex(dev->pMutex); + + char *real_oldpath = sd_fat_real_path(oldName, dev); + if(!real_oldpath) { + r->_errno = ENOMEM; + OSUnlockMutex(dev->pMutex); + return -1; + } + char *real_newpath = sd_fat_real_path(newName, dev); + if(!real_newpath) { + r->_errno = ENOMEM; + free(real_oldpath); + OSUnlockMutex(dev->pMutex); + return -1; + } + + int result = FSRename(dev->pClient, dev->pCmd, real_oldpath, real_newpath, -1); + + free(real_oldpath); + free(real_newpath); + + OSUnlockMutex(dev->pMutex); + + if(result < 0) { + r->_errno = result; + return -1; + } + + return 0; + +} + +static int sd_fat_mkdir_r (struct _reent *r, const char *path, int mode) +{ + sd_fat_private_t *dev = sd_fat_get_device_data(path); + if(!dev) { + r->_errno = ENODEV; + return -1; + } + + OSLockMutex(dev->pMutex); + + char *real_path = sd_fat_real_path(path, dev); + if(!real_path) { + r->_errno = ENOMEM; + OSUnlockMutex(dev->pMutex); + return -1; + } + + int result = FSMakeDir(dev->pClient, dev->pCmd, real_path, -1); + + free(real_path); + + OSUnlockMutex(dev->pMutex); + + if(result < 0) { + r->_errno = result; + return -1; + } + + return 0; +} + +static int sd_fat_statvfs_r (struct _reent *r, const char *path, struct statvfs *buf) +{ + sd_fat_private_t *dev = sd_fat_get_device_data(path); + if(!dev) { + r->_errno = ENODEV; + return -1; + } + + OSLockMutex(dev->pMutex); + + // Zero out the stat buffer + memset(buf, 0, sizeof(struct statvfs)); + + char *real_path = sd_fat_real_path(path, dev); + if(!real_path) { + r->_errno = ENOMEM; + OSUnlockMutex(dev->pMutex); + return -1; + } + + u64 size; + + int result = FSGetFreeSpaceSize(dev->pClient, dev->pCmd, real_path, &size, -1); + + free(real_path); + + if(result < 0) { + r->_errno = result; + OSUnlockMutex(dev->pMutex); + return -1; + } + + // File system block size + buf->f_bsize = 512; + + // Fundamental file system block size + buf->f_frsize = 512; + + // Total number of blocks on file system in units of f_frsize + buf->f_blocks = size >> 9; // this is unknown + + // Free blocks available for all and for non-privileged processes + buf->f_bfree = buf->f_bavail = size >> 9; + + // Number of inodes at this point in time + buf->f_files = 0xffffffff; + + // Free inodes available for all and for non-privileged processes + buf->f_ffree = 0xffffffff; + + // File system id + buf->f_fsid = (int)dev; + + // Bit mask of f_flag values. + buf->f_flag = 0; + + // Maximum length of filenames + buf->f_namemax = 255; + + OSUnlockMutex(dev->pMutex); + + return 0; +} + +static DIR_ITER *sd_fat_diropen_r (struct _reent *r, DIR_ITER *dirState, const char *path) +{ + sd_fat_private_t *dev = sd_fat_get_device_data(path); + if(!dev) { + r->_errno = ENODEV; + return NULL; + } + + sd_fat_dir_entry_t *dirIter = (sd_fat_dir_entry_t *)dirState->dirStruct; + + OSLockMutex(dev->pMutex); + + char *real_path = sd_fat_real_path(path, dev); + if(!real_path) { + r->_errno = ENOMEM; + OSUnlockMutex(dev->pMutex); + return NULL; + } + + int dirHandle; + + int result = FSOpenDir(dev->pClient, dev->pCmd, real_path, &dirHandle, -1); + + free(real_path); + + OSUnlockMutex(dev->pMutex); + + if(result < 0) + { + r->_errno = result; + return NULL; + } + + dirIter->dev = dev; + dirIter->dirHandle = dirHandle; + + return dirState; +} + +static int sd_fat_dirclose_r (struct _reent *r, DIR_ITER *dirState) +{ + sd_fat_dir_entry_t *dirIter = (sd_fat_dir_entry_t *)dirState->dirStruct; + if(!dirIter->dev) { + r->_errno = ENODEV; + return -1; + } + + OSLockMutex(dirIter->dev->pMutex); + + int result = FSCloseDir(dirIter->dev->pClient, dirIter->dev->pCmd, dirIter->dirHandle, -1); + + OSUnlockMutex(dirIter->dev->pMutex); + + if(result < 0) + { + r->_errno = result; + return -1; + } + return 0; +} + +static int sd_fat_dirreset_r (struct _reent *r, DIR_ITER *dirState) +{ + sd_fat_dir_entry_t *dirIter = (sd_fat_dir_entry_t *)dirState->dirStruct; + if(!dirIter->dev) { + r->_errno = ENODEV; + return -1; + } + + OSLockMutex(dirIter->dev->pMutex); + + int result = FSRewindDir(dirIter->dev->pClient, dirIter->dev->pCmd, dirIter->dirHandle, -1); + + OSUnlockMutex(dirIter->dev->pMutex); + + if(result < 0) + { + r->_errno = result; + return -1; + } + return 0; +} + +static int sd_fat_dirnext_r (struct _reent *r, DIR_ITER *dirState, char *filename, struct stat *st) +{ + sd_fat_dir_entry_t *dirIter = (sd_fat_dir_entry_t *)dirState->dirStruct; + if(!dirIter->dev) { + r->_errno = ENODEV; + return -1; + } + + OSLockMutex(dirIter->dev->pMutex); + + FSDirEntry * dir_entry = malloc(sizeof(FSDirEntry)); + + int result = FSReadDir(dirIter->dev->pClient, dirIter->dev->pCmd, dirIter->dirHandle, dir_entry, -1); + if(result < 0) + { + free(dir_entry); + r->_errno = result; + OSUnlockMutex(dirIter->dev->pMutex); + return -1; + } + + // Fetch the current entry + strcpy(filename, dir_entry->name); + + if(st) + { + memset(st, 0, sizeof(struct stat)); + st->st_mode = (dir_entry->stat.flag & 0x80000000) ? S_IFDIR : S_IFREG; + st->st_nlink = 1; + st->st_size = dir_entry->stat.size; + st->st_blocks = (dir_entry->stat.size + 511) >> 9; + st->st_dev = dir_entry->stat.ent_id; + st->st_uid = dir_entry->stat.owner_id; + st->st_gid = dir_entry->stat.group_id; + st->st_ino = dir_entry->stat.ent_id; + st->st_atime = dir_entry->stat.mtime; + st->st_ctime = dir_entry->stat.ctime; + st->st_mtime = dir_entry->stat.mtime; + } + + free(dir_entry); + OSUnlockMutex(dirIter->dev->pMutex); + return 0; +} + +// NTFS device driver devoptab +static const devoptab_t devops_sd_fat = { + NULL, /* Device name */ + sizeof (sd_fat_file_state_t), + sd_fat_open_r, + sd_fat_close_r, + sd_fat_write_r, + sd_fat_read_r, + sd_fat_seek_r, + sd_fat_fstat_r, + sd_fat_stat_r, + sd_fat_link_r, + sd_fat_unlink_r, + sd_fat_chdir_r, + sd_fat_rename_r, + sd_fat_mkdir_r, + sizeof (sd_fat_dir_entry_t), + sd_fat_diropen_r, + sd_fat_dirreset_r, + sd_fat_dirnext_r, + sd_fat_dirclose_r, + sd_fat_statvfs_r, + sd_fat_ftruncate_r, + sd_fat_fsync_r, + NULL, /* sd_fat_chmod_r */ + NULL, /* sd_fat_fchmod_r */ + NULL /* Device data */ +}; + +static int sd_fat_add_device (const char *name, const char *mount_path, void *pClient, void *pCmd) +{ + devoptab_t *dev = NULL; + char *devname = NULL; + char *devpath = NULL; + int i; + + // Sanity check + if (!name) { + errno = EINVAL; + return -1; + } + + // Allocate a devoptab for this device + dev = (devoptab_t *) malloc(sizeof(devoptab_t) + strlen(name) + 1); + if (!dev) { + errno = ENOMEM; + return -1; + } + + // Use the space allocated at the end of the devoptab for storing the device name + devname = (char*)(dev + 1); + strcpy(devname, name); + + // create private data + sd_fat_private_t *priv = (sd_fat_private_t *)malloc(sizeof(sd_fat_private_t) + strlen(mount_path) + 1); + if(!priv) { + free(dev); + errno = ENOMEM; + return -1; + } + + devpath = (char*)(priv+1); + strcpy(devpath, mount_path); + + // setup private data + priv->mount_path = devpath; + priv->pClient = pClient; + priv->pCmd = pCmd; + priv->pMutex = malloc(OS_MUTEX_SIZE); + + if(!priv->pMutex) { + free(dev); + free(priv); + errno = ENOMEM; + return -1; + } + + OSInitMutex(priv->pMutex); + + // Setup the devoptab + memcpy(dev, &devops_sd_fat, sizeof(devoptab_t)); + dev->name = devname; + dev->deviceData = priv; + + // Add the device to the devoptab table (if there is a free slot) + for (i = 3; i < STD_MAX; i++) { + if (devoptab_list[i] == devoptab_list[0]) { + devoptab_list[i] = dev; + return 0; + } + } + + // failure, free all memory + free(priv); + free(dev); + + // If we reach here then there are no free slots in the devoptab table for this device + errno = EADDRNOTAVAIL; + return -1; +} + +static int sd_fat_remove_device (const char *path, void **pClient, void **pCmd, char **mountPath) +{ + const devoptab_t *devoptab = NULL; + char name[128] = {0}; + int i; + + // Get the device name from the path + strncpy(name, path, 127); + strtok(name, ":/"); + + // Find and remove the specified device from the devoptab table + // NOTE: We do this manually due to a 'bug' in RemoveDevice + // which ignores names with suffixes and causes names + // like "ntfs" and "ntfs1" to be seen as equals + for (i = 3; i < STD_MAX; i++) { + devoptab = devoptab_list[i]; + if (devoptab && devoptab->name) { + if (strcmp(name, devoptab->name) == 0) { + devoptab_list[i] = devoptab_list[0]; + + if(devoptab->deviceData) + { + sd_fat_private_t *priv = (sd_fat_private_t *)devoptab->deviceData; + *pClient = priv->pClient; + *pCmd = priv->pCmd; + *mountPath = (char*) malloc(strlen(priv->mount_path)+1); + if(*mountPath) + strcpy(*mountPath, priv->mount_path); + if(priv->pMutex) + free(priv->pMutex); + free(devoptab->deviceData); + } + + free((devoptab_t*)devoptab); + return 0; + } + } + } + + return -1; +} + +int mount_sd_fat(const char *path) +{ + int result = -1; + + // get command and client + void* pClient = malloc(FS_CLIENT_SIZE); + void* pCmd = malloc(FS_CMD_BLOCK_SIZE); + + if(!pClient || !pCmd) { + // just in case free if not 0 + if(pClient) + free(pClient); + if(pCmd) + free(pCmd); + return -2; + } + + FSInit(); + FSInitCmdBlock(pCmd); + FSAddClientEx(pClient, 0, -1); + + char *mountPath = NULL; + + if(MountFS(pClient, pCmd, &mountPath) == 0) { + result = sd_fat_add_device(path, mountPath, pClient, pCmd); + free(mountPath); + } + + return result; +} + +int unmount_sd_fat(const char *path) +{ + void *pClient = 0; + void *pCmd = 0; + char *mountPath = 0; + + int result = sd_fat_remove_device(path, &pClient, &pCmd, &mountPath); + if(result == 0) + { + UmountFS(pClient, pCmd, mountPath); + FSDelClient(pClient); + free(pClient); + free(pCmd); + free(mountPath); + //FSShutdown(); + } + return result; +} diff --git a/src/fs/sd_fat_devoptab.h b/src/fs/sd_fat_devoptab.h new file mode 100644 index 0000000..8df487a --- /dev/null +++ b/src/fs/sd_fat_devoptab.h @@ -0,0 +1,38 @@ +/*************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __SD_FAT_DEVOPTAB_H_ +#define __SD_FAT_DEVOPTAB_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +int mount_sd_fat(const char *path); +int unmount_sd_fat(const char *path); + +#ifdef __cplusplus +} +#endif + +#endif // __SD_FAT_DEVOPTAB_H_ diff --git a/src/lib_easy.c b/src/lib_easy.c new file mode 100644 index 0000000..37ed017 --- /dev/null +++ b/src/lib_easy.c @@ -0,0 +1,177 @@ +#include "lib_easy.h" + +int vpadError = -1; +VPADData vpad; + +int screen_buf0_size = 0; +int screen_buf1_size = 0; + +void flipBuffers() { + // Flush the cache + DCFlushRange(screenBuffer, screen_buf0_size); + DCFlushRange((screenBuffer + screen_buf0_size), screen_buf1_size); + // Flip buffers + OSScreenFlipBuffersEx(0); + OSScreenFlipBuffersEx(1); +} + +void ucls() { + for(int i=0;i<2;i++) { + OSScreenClearBufferEx(0, 0); + OSScreenClearBufferEx(1, 0); + flipBuffers(); + } + curr_line=0; +} + +void ScreenInit() { + //Init screen and screen buffers + OSScreenInit(); + screen_buf0_size = OSScreenGetBufferSizeEx(0); + screen_buf1_size = OSScreenGetBufferSizeEx(1); + screenBuffer = MEM1_alloc(screen_buf0_size + screen_buf1_size, 0x40); + OSScreenSetBufferEx(0, screenBuffer); + OSScreenSetBufferEx(1, (screenBuffer + screen_buf0_size)); + OSScreenEnableEx(0, 1); + OSScreenEnableEx(1, 1); + ucls(); //Clear screens +} + +void uprintf(int x, int y, const char* format, ...) { + char buff[255]; + va_list argptr; + va_start(argptr, format); + vsnprintf(buff, 255, format, argptr); + va_end(argptr); + char tmp_c; + int curr_x; + int curr_line_tmp; + for(int i=0; i<2; i++) { //Print on both Buffers + curr_line_tmp=y; + curr_x=x; + for(size_t ii=0; ii>1), 8, question); + console_print_pos(25 - (strlen(msg)>>1), 10, msg); + OSScreenFlipBuffersEx(0); + OSScreenFlipBuffersEx(1); + updatePressedButtons(); + if (isPressed(VPAD_BUTTON_A | VPAD_BUTTON_B | VPAD_BUTTON_HOME)) { + ret = isPressed(VPAD_BUTTON_A); + break; + } + } + return ret; +} + +void promptError(const char* message) { + ucls(); + while(1) { + OSScreenClearBufferEx(0, 0); + OSScreenClearBufferEx(1, 0); + console_print_pos(25 - (strlen(message)>>1), 9, message); + OSScreenFlipBuffersEx(0); + OSScreenFlipBuffersEx(1); + updatePressedButtons(); + if (isPressed(0xFFFF)) break; + } +} + +int64_t uGetTime() { + return OSGetTime()/SECS_TO_TICKS(1); +} + +void updatePressedButtons() { + VPADRead(0, &vpad, 1, &vpadError); + buttons_pressed = vpad.btns_d; +} + +void updateHeldButtons() { + VPADRead(0, &vpad, 1, &vpadError); + buttons_hold = vpad.btns_h; +} + +void updateReleasedButtons() { + VPADRead(0, &vpad, 1, &vpadError); + buttons_released = vpad.btns_r; +} + +int isPressed(int button) { + if(buttons_pressed&button) return 1; + else return 0; +} + +int isHeld(int button) { + if(buttons_hold&button) return 1; + else return 0; +} + +int isReleased(int button) { + if(buttons_released&button) return 1; + else return 0; +} + +void uInit() { + //--Initialize every function pointer-- (byebye FindExport :D) + InitOSFunctionPointers(); + InitSocketFunctionPointers(); + InitACPFunctionPointers(); + InitAocFunctionPointers(); + InitAXFunctionPointers(); + InitCurlFunctionPointers(); + InitFSFunctionPointers(); + InitGX2FunctionPointers(); + InitPadScoreFunctionPointers(); + InitSysFunctionPointers(); + InitSysHIDFunctionPointers(); + InitVPadFunctionPointers(); + + memoryInitialize(); //You probably shouldn't care about this for now :P + VPADInit(); //Init GamePad input library (needed for getting gamepad input) + ScreenInit(); //Init OSScreen (all the complex stuff is in easyfunctions.h :P ) +} + +void uDeInit() { + MEM1_free(screenBuffer); + screenBuffer = NULL; + memoryRelease(); +} diff --git a/src/lib_easy.h b/src/lib_easy.h new file mode 100644 index 0000000..085ec47 --- /dev/null +++ b/src/lib_easy.h @@ -0,0 +1,66 @@ +/* + * lib_easy.h + * + * Provides an easy-to-use library for wii u + * usefull for test and beginners + * + * All the "complex" Wii U stuff is here + * +*/ + +#ifndef LIB_EASY_H +#define LIB_EASY_H + +#include +#include +#include +#include +#include + +#include "dynamic_libs/ax_functions.h" +#include "dynamic_libs/sys_functions.h" +#include "dynamic_libs/socket_functions.h" +#include "dynamic_libs/fs_functions.h" +#include "dynamic_libs/aoc_functions.h" +#include "dynamic_libs/syshid_functions.h" +#include "dynamic_libs/padscore_functions.h" +#include "dynamic_libs/fs_defs.h" +#include "dynamic_libs/vpad_functions.h" +#include "dynamic_libs/gx2_types.h" +#include "dynamic_libs/curl_functions.h" +#include "dynamic_libs/os_functions.h" +#include "dynamic_libs/gx2_functions.h" +#include "dynamic_libs/acp_functions.h" +#include "fs/fs_utils.h" +#include "fs/sd_fat_devoptab.h" +#include "system/memory.h" +#include "utils/logger.h" +#include "utils/utils.h" +#include "common/common.h" + + +unsigned char *screenBuffer; +int curr_line; //Current print line +int curr_column; //Current print column +uint32_t buttons_hold; //Held buttons +uint32_t buttons_pressed; //Pressed buttons +uint32_t buttons_released; //Released buttons + +void ucls(); +void ScreenInit(); +void flipBuffers(); +void uprintf(int x, int y, const char* format, ...); +void pause(int showmsg); +int promptConfirm(const char* question); +void promptError(const char* message); +int64_t uGetTime(); +void updatePressedButtons(); +void updateHeldButtons(); +void updateReleasedButtons(); +int isPressed(int button); +int isHeld(int button); +int isReleased(int button); +void uInit(); +void uDeInit(); + +#endif /* LIB_EASY_H */ diff --git a/src/link.ld b/src/link.ld new file mode 100644 index 0000000..fc569d1 --- /dev/null +++ b/src/link.ld @@ -0,0 +1,40 @@ +OUTPUT(ftpiiu.elf); + +/* Tell linker where our application entry is so the garbage collect can work correct */ +ENTRY(__entry_menu); + +SECTIONS { + . = 0x00802000; + .text : { + *(.text*); + } + .rodata : { + *(.rodata*); + } + .data : { + *(.data*); + + __sdata_start = .; + *(.sdata*); + __sdata_end = .; + + __sdata2_start = .; + *(.sdata2*); + __sdata2_end = .; + } + .bss : { + __bss_start = .; + *(.bss*); + *(.sbss*); + *(COMMON); + __bss_end = .; + } + __CODE_END = .; + + /DISCARD/ : { + *(*); + } +} + +/******************************************************** FS ********************************************************/ +/* coreinit.rpl difference in addresses 0xFE3C00 */ diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..08eff4b --- /dev/null +++ b/src/main.c @@ -0,0 +1,264 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "main.h" +#include "savemng.h" + +#define VERSION_MAJOR 1 +#define VERSION_MINOR 0 +#define VERSION_MICRO 0 + +u8 slot = 0; +int menu = 0, mode = 0, task = 0, targ = 0; +int cursor = 0, scroll = 0; +int titlecount = 0; + +typedef struct { + u32 highID; + u32 lowID; + char shortname[256]; + bool isTitleOnUSB; +} Title; + +//just to be able to call async +void someFunc(void *arg) +{ + (void)arg; +} + +static int mcp_hook_fd = -1; +int MCPHookOpen() { + //take over mcp thread + mcp_hook_fd = MCP_Open(); + if(mcp_hook_fd < 0) return -1; + IOS_IoctlAsync(mcp_hook_fd, 0x62, (void*)0, 0, (void*)0, 0, someFunc, (void*)0); + //let wupserver start up + sleep(1); + if (IOSUHAX_Open("/dev/mcp") < 0) { + MCP_Close(mcp_hook_fd); + mcp_hook_fd = -1; + return -1; + } + return 0; +} + +void MCPHookClose() { + if(mcp_hook_fd < 0) return; + //close down wupserver, return control to mcp + IOSUHAX_Close(); + //wait for mcp to return + sleep(1); + MCP_Close(mcp_hook_fd); + mcp_hook_fd = -1; +} + +Title* loadTitles() { + + int mcp_handle = MCP_Open(); + int count = MCP_TitleCount(mcp_handle); + int listSize = count*0x61; + char *tList = memalign(32, listSize); + memset(tList, 0, listSize); + int receivedCount = count; + MCP_TitleList(mcp_handle, &receivedCount, tList, listSize); + MCP_Close(mcp_handle); + + Title* titles = malloc(receivedCount*sizeof(Title)); + + for (int i = 0; i < receivedCount; i++) { + + char* element = tList+(i*0x61); + u32 highID = *(u32*)(element), lowID = *(u32*)(element+4); + if (highID!=0x00050000) continue; + bool isTitleOnUSB = memcmp(element+0x56,"mlc",4)!=0; + char path[255]; + memset(path, 0, 255); + sprintf(path, "storage_%s:/usr/title/%08x/%08x/meta/meta.xml", isTitleOnUSB ? "usb" : "mlc", highID, lowID); + + FILE* xmlFile = fopen(path, "rb"); + if (xmlFile) { + fseek(xmlFile, 0, SEEK_END); + size_t xmlSize = ftell(xmlFile); + fseek(xmlFile, 0, SEEK_SET); + char* xmlBuf = malloc(xmlSize+1); + memset(xmlBuf, 0, xmlSize+1); + fread(xmlBuf, 1, xmlSize, xmlFile); + fclose(xmlFile); + + xmlDocPtr tmp = xmlReadMemory(xmlBuf, xmlSize, "meta.xml", "utf-8", 0); + xmlNode* root_element = xmlDocGetRootElement(tmp); + xmlNode* cur_node = NULL; + for (cur_node = root_element->children; cur_node; cur_node = cur_node->next) { + if ( + (cur_node->type != XML_ELEMENT_NODE) || + (memcmp(cur_node->name, "shortname_en", 13) != 0) || + (xmlNodeGetContent(cur_node) == NULL) || + (!strlen((char*)xmlNodeGetContent(cur_node))) + ) continue; + strcpy(titles[titlecount].shortname, (char*)xmlNodeGetContent(cur_node)); + } + + xmlFreeDoc(tmp); + free(xmlBuf); + } + + titles[titlecount].highID = highID; + titles[titlecount].lowID = lowID; + titles[titlecount].isTitleOnUSB = isTitleOnUSB; + titlecount++; + + } + + free(tList); + return titles; + +} + +void unloadTitles(Title* titles) { + free(titles); +} + +/* Entry point */ +int Menu_Main(void) { + + mount_sd_fat("sd"); + + int res = IOSUHAX_Open(NULL); + if (res < 0) { + res = MCPHookOpen(); + } + if (res < 0) { + promptError("IOSUHAX_Open failed."); + return EXIT_SUCCESS; + } + + fatInitDefault(); + + int fsaFd = IOSUHAX_FSA_Open(); + if (fsaFd < 0) { + promptError("IOSUHAX_FSA_Open failed."); + } + + mount_fs("slccmpt01", fsaFd, "/dev/slccmpt01", "/vol/storage_slccmpt01"); + mount_fs("storage_mlc", fsaFd, NULL, "/vol/storage_mlc01"); + mount_fs("storage_usb", fsaFd, NULL, "/vol/storage_usb01"); + + ucls(); + Title* titles = loadTitles(); + + while(1) { + + OSScreenClearBufferEx(0, 0); + OSScreenClearBufferEx(1, 0); + + console_print_pos(0, 0, "SaveMii v%u.%u.%u", VERSION_MAJOR, VERSION_MINOR, VERSION_MICRO); + console_print_pos(0, 1, "--------------------------------------------------"); + + switch(menu) { + case 0: { // Main Menu + console_print_pos(0, 2, " Wii U Save Management"); + // console_print_pos(0, 3, " vWii Save Management"); + console_print_pos(0, 2 + cursor, "->"); + } break; + case 1: { // WiiU/vWii Save Management + console_print_pos(0, 2, " Backup savedata"); + console_print_pos(0, 3, " Restore savedata"); + // console_print_pos(0, 4, " Wipe savedata"); + console_print_pos(0, 2 + cursor, "->"); + } break; + case 2: { // vWii/Wii U Title List + for (int i = 0; i < 14; i++) { + if (i+scroll<0 || i+scroll>=titlecount) break; + if (strlen(titles[i+scroll].shortname)) console_print_pos(0, i+2, " %s", titles[i+scroll].shortname); + else console_print_pos(0, i+2, " %08lx%08lx", titles[i+scroll].highID, titles[i+scroll].lowID); + } console_print_pos(0, 2 + cursor, "->"); + } break; + case 3: { // Slot select + console_print_pos(0, 2, "Press LEFT or RIGHT to select slot."); + console_print_pos(0, 3, " < %03u >", slot); + } break; + } + + console_print_pos(0,16, "--------------------------------------------------"); + console_print_pos(0,17, "Press HOME to exit."); + + OSScreenFlipBuffersEx(0); + OSScreenFlipBuffersEx(1); + + updatePressedButtons(); + updateHeldButtons(); + + int entrycount = ((menu==0) ? 1 : ((menu==1) ? 2 : titlecount)); + + if (isPressed(VPAD_BUTTON_DOWN) || isHeld(VPAD_BUTTON_DOWN)) { + if (entrycount<=14) cursor = (cursor + 1) % entrycount; + else if (cursor < 6) cursor++; + else if ((cursor+scroll+1) % entrycount) scroll++; + else cursor = scroll = 0; + usleep(100000); + } else if (isPressed(VPAD_BUTTON_UP) || isHeld(VPAD_BUTTON_UP)) { + if (scroll > 0) cursor -= (cursor>6) ? 1 : 0*(scroll--); + else if (cursor > 0) cursor--; + else if (entrycount>14) scroll = entrycount - (cursor = 6) - 1; + else cursor = entrycount - 1; + usleep(100000); + } + + if (isPressed(VPAD_BUTTON_LEFT) || isHeld(VPAD_BUTTON_LEFT)) { + if (menu==3) slot--; + usleep(100000); + } else if (isPressed(VPAD_BUTTON_RIGHT) || isHeld(VPAD_BUTTON_RIGHT)) { + if (menu==3) slot++; + usleep(100000); + } + + if (isPressed(VPAD_BUTTON_A)) { + ucls(); + if (menu<3) { + if (menu==0) mode = cursor; + if (menu==1) task = cursor; + if (menu==2) targ = cursor+scroll; + menu++; + cursor = scroll = 0; + } else { + switch(task) { + case 0: backupSavedata(titles[targ].highID, titles[targ].lowID, titles[targ].isTitleOnUSB, slot); break; + case 1: restoreSavedata(titles[targ].highID, titles[targ].lowID, titles[targ].isTitleOnUSB, slot); break; + case 2: wipeSavedata(titles[targ].highID, titles[targ].lowID, titles[targ].isTitleOnUSB); break; + } + } + } else if (isPressed(VPAD_BUTTON_B)) { + ucls(); + if (menu>0) menu--; + cursor = scroll = 0; + } + + if (isPressed(VPAD_BUTTON_HOME)) break; + + } + + unloadTitles(titles); + + fatUnmount("sd"); + fatUnmount("usb"); + IOSUHAX_sdio_disc_interface.shutdown(); + IOSUHAX_usb_disc_interface.shutdown(); + + unmount_fs("slccmpt01"); + unmount_fs("storage_mlc"); + unmount_fs("storage_usb"); + + unmount_sd_fat("sd"); + + IOSUHAX_FSA_Close(fsaFd); + + if (mcp_hook_fd >= 0) MCPHookClose(); + else IOSUHAX_Close(); + + return EXIT_SUCCESS; +} diff --git a/src/main.h b/src/main.h new file mode 100644 index 0000000..d7a5202 --- /dev/null +++ b/src/main.h @@ -0,0 +1,16 @@ +#ifndef _MAIN_H_ +#define _MAIN_H_ + +/* Main */ +#ifdef __cplusplus +extern "C" { +#endif + +//! C wrapper for our C++ functions +int Menu_Main(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/savemng.c b/src/savemng.c new file mode 100644 index 0000000..64afdbe --- /dev/null +++ b/src/savemng.c @@ -0,0 +1,150 @@ +#include + +#include "savemng.h" + +#define BUFFER_SIZE 0x80000 + +void console_print_pos(int x, int y, const char *format, ...) { + + char * tmp = NULL; + + va_list va; + va_start(va, format); + if ((vasprintf(&tmp, format, va) >= 0) && tmp) { + + if(strlen(tmp) > 79) tmp[79] = 0; + + OSScreenPutFontEx(0, x, y, tmp); + OSScreenPutFontEx(1, x, y, tmp); + + } + + va_end(va); + if(tmp) free(tmp); + +} + +int DumpFile(char *pPath, const char * output_path) { + + char *pFilename = strrchr(pPath, '/'); + if(!pFilename) pFilename = pPath; + else pFilename++; + + unsigned char* dataBuf = (unsigned char*)memalign(0x40, BUFFER_SIZE); + if(!dataBuf) { + promptError("Out of memory."); + return -1; + } + + FILE *pReadFile = fopen(pPath, "rb"); + if(!pReadFile) { + promptError("Failed to open file."); + return -2; + } + + FILE *pWriteFile = fopen(output_path, "wb"); + if(!pWriteFile) { + promptError("Failed to create file."); + fclose(pReadFile); + return -3; + } + + unsigned int size = 0; + unsigned int ret; + + // Copy rpl in memory + while ((ret = fread(dataBuf, 0x1, BUFFER_SIZE, pReadFile)) > 0) { + fwrite(dataBuf, 0x01, ret, pWriteFile); + size += ret; + } + + fclose(pWriteFile); + fclose(pReadFile); + free(dataBuf); + + return 0; + +} + +int DumpDir(char *pPath, const char * target_path) { + + struct dirent *dirent = NULL; + DIR *dir = NULL; + + dir = opendir(pPath); + if (dir == NULL) { + promptError("Failed to open directory."); + return -1; + } + + CreateSubfolder(target_path); + + while ((dirent = readdir(dir)) != 0) { + + OSScreenClearBufferEx(0, 0); + OSScreenClearBufferEx(1, 0); + + if(strcmp(dirent->d_name, "..") == 0 || strcmp(dirent->d_name, ".") == 0) continue; + + int len = strlen(pPath); + snprintf(pPath + len, FS_MAX_FULLPATH_SIZE - len, "/%s", dirent->d_name); + + if(dirent->d_type & DT_DIR) { + + char *targetPath = (char*)malloc(FS_MAX_FULLPATH_SIZE); + snprintf(targetPath, FS_MAX_FULLPATH_SIZE, "%s/%s", target_path, dirent->d_name); + + CreateSubfolder(targetPath); + DumpDir(pPath, targetPath); + free(targetPath); + + } else { + + char *targetPath = (char*)malloc(FS_MAX_FULLPATH_SIZE); + snprintf(targetPath, FS_MAX_FULLPATH_SIZE, "%s/%s", target_path, dirent->d_name); + + console_print_pos(0, 0, "Copying file %s", dirent->d_name); + console_print_pos(0, 1, "From: %s", pPath); + console_print_pos(0, 2, "To: %s", targetPath); + + DumpFile(pPath, targetPath); + free(targetPath); + + } + + OSScreenFlipBuffersEx(0); + OSScreenFlipBuffersEx(1); + + pPath[len] = 0; + + } + + closedir(dir); + + return 0; + +} + +void backupSavedata(u32 highID, u32 lowID, bool isUSB, int slot) { + + char srcPath[256]; + char dstPath[256]; + sprintf(srcPath, "storage_%s:/usr/save/%08x/%08x/user", isUSB ? "usb" : "mlc", highID, lowID); + sprintf(dstPath, "sd:/wiiu/apps/savemii/backups/%08x%08x/%i", highID, lowID, slot); + DumpDir(srcPath, dstPath); + +} + +void restoreSavedata(u32 highID, u32 lowID, bool isUSB, int slot) { + + char srcPath[256]; + char dstPath[256]; + sprintf(srcPath, "sd:/wiiu/apps/savemii/backups/%08x%08x/%i", highID, lowID, slot); + sprintf(dstPath, "storage_%s:/usr/save/%08x/%08x/user", isUSB ? "usb" : "mlc", highID, lowID); + DumpDir(srcPath, dstPath); + +} + +void wipeSavedata(u32 highID, u32 lowID, bool isUSB) { + +} \ No newline at end of file diff --git a/src/savemng.h b/src/savemng.h new file mode 100644 index 0000000..69955ba --- /dev/null +++ b/src/savemng.h @@ -0,0 +1,26 @@ +#ifndef _SAVEMNG_H_ +#define _SAVEMNG_H_ + +#include +#include +#include +#include +#include + +#include "lib_easy.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void console_print_pos(int x, int y, const char *format, ...); + +void backupSavedata(u32 highID, u32 lowID, bool isUSB, int slot); +void restoreSavedata(u32 highID, u32 lowID, bool isUSB, int slot); +void wipeSavedata(u32 highID, u32 lowID, bool isUSB); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/src/system/memory.c b/src/system/memory.c new file mode 100644 index 0000000..91f5392 --- /dev/null +++ b/src/system/memory.c @@ -0,0 +1,198 @@ +/**************************************************************************** + * Copyright (C) 2015 Dimok + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + ****************************************************************************/ +#include +#include +#include "dynamic_libs/os_functions.h" +#include "common/common.h" +#include "memory.h" + +#define MEMORY_ARENA_1 0 +#define MEMORY_ARENA_2 1 +#define MEMORY_ARENA_3 2 +#define MEMORY_ARENA_4 3 +#define MEMORY_ARENA_5 4 +#define MEMORY_ARENA_6 5 +#define MEMORY_ARENA_7 6 +#define MEMORY_ARENA_8 7 +#define MEMORY_ARENA_FG_BUCKET 8 + +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Memory functions +//! This is the only place where those are needed so lets keep them more or less private +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern unsigned int * pMEMAllocFromDefaultHeapEx; +extern unsigned int * pMEMAllocFromDefaultHeap; +extern unsigned int * pMEMFreeToDefaultHeap; + +extern int (* MEMGetBaseHeapHandle)(int mem_arena); +extern unsigned int (* MEMGetAllocatableSizeForFrmHeapEx)(int heap, int align); +extern void *(* MEMAllocFromFrmHeapEx)(int heap, unsigned int size, int align); +extern void (* MEMFreeToFrmHeap)(int heap, int mode); +extern void *(* MEMAllocFromExpHeapEx)(int heap, unsigned int size, int align); +extern int (* MEMCreateExpHeapEx)(void* address, unsigned int size, unsigned short flags); +extern void *(* MEMDestroyExpHeap)(int heap); +extern void (* MEMFreeToExpHeap)(int heap, void* ptr); + +static int mem1_heap = -1; +static int bucket_heap = -1; + +void memoryInitialize(void) +{ + int mem1_heap_handle = MEMGetBaseHeapHandle(MEMORY_ARENA_1); + unsigned int mem1_allocatable_size = MEMGetAllocatableSizeForFrmHeapEx(mem1_heap_handle, 4); + void *mem1_memory = MEMAllocFromFrmHeapEx(mem1_heap_handle, mem1_allocatable_size, 4); + if(mem1_memory) + mem1_heap = MEMCreateExpHeapEx(mem1_memory, mem1_allocatable_size, 0); + + int bucket_heap_handle = MEMGetBaseHeapHandle(MEMORY_ARENA_FG_BUCKET); + unsigned int bucket_allocatable_size = MEMGetAllocatableSizeForFrmHeapEx(bucket_heap_handle, 4); + void *bucket_memory = MEMAllocFromFrmHeapEx(bucket_heap_handle, bucket_allocatable_size, 4); + if(bucket_memory) + bucket_heap = MEMCreateExpHeapEx(bucket_memory, bucket_allocatable_size, 0); +} + +void memoryRelease(void) +{ + MEMDestroyExpHeap(mem1_heap); + MEMFreeToFrmHeap(MEMGetBaseHeapHandle(MEMORY_ARENA_1), 3); + mem1_heap = -1; + + MEMDestroyExpHeap(bucket_heap); + MEMFreeToFrmHeap(MEMGetBaseHeapHandle(MEMORY_ARENA_FG_BUCKET), 3); + bucket_heap = -1; +} + +//!------------------------------------------------------------------------------------------- +//! wraps +//!------------------------------------------------------------------------------------------- +void *__wrap_malloc(size_t size) +{ + // pointer to a function resolve + return ((void * (*)(size_t))(*pMEMAllocFromDefaultHeap))(size); +} + +void *__wrap_memalign(size_t align, size_t size) +{ + if (align < 4) + align = 4; + + // pointer to a function resolve + return ((void * (*)(size_t, size_t))(*pMEMAllocFromDefaultHeapEx))(size, align); +} + +void __wrap_free(void *p) +{ + // pointer to a function resolve + if(p != 0) + ((void (*)(void *))(*pMEMFreeToDefaultHeap))(p); +} + +void *__wrap_calloc(size_t n, size_t size) +{ + void *p = __wrap_malloc(n * size); + if (p != 0) { + memset(p, 0, n * size); + } + return p; +} + +size_t __wrap_malloc_usable_size(void *p) +{ + //! TODO: this is totally wrong and needs to be addressed + return 0x7FFFFFFF; +} + +void *__wrap_realloc(void *p, size_t size) +{ + void *new_ptr = __wrap_malloc(size); + if (new_ptr != 0) + { + memcpy(new_ptr, p, __wrap_malloc_usable_size(p) < size ? __wrap_malloc_usable_size(p) : size); + __wrap_free(p); + } + return new_ptr; +} + +//!------------------------------------------------------------------------------------------- +//! reent versions +//!------------------------------------------------------------------------------------------- +void *__wrap__malloc_r(struct _reent *r, size_t size) +{ + return __wrap_malloc(size); +} + +void *__wrap__calloc_r(struct _reent *r, size_t n, size_t size) +{ + return __wrap_calloc(n, size); +} + +void *__wrap__memalign_r(struct _reent *r, size_t align, size_t size) +{ + return __wrap_memalign(align, size); +} + +void __wrap__free_r(struct _reent *r, void *p) +{ + __wrap_free(p); +} + +size_t __wrap__malloc_usable_size_r(struct _reent *r, void *p) +{ + return __wrap_malloc_usable_size(p); +} + +void *__wrap__realloc_r(struct _reent *r, void *p, size_t size) +{ + return __wrap_realloc(p, size); +} + +//!------------------------------------------------------------------------------------------- +//! some wrappers +//!------------------------------------------------------------------------------------------- +void * MEM2_alloc(unsigned int size, unsigned int align) +{ + return __wrap_memalign(align, size); +} + +void MEM2_free(void *ptr) +{ + __wrap_free(ptr); +} + +void * MEM1_alloc(unsigned int size, unsigned int align) +{ + if (align < 4) + align = 4; + return MEMAllocFromExpHeapEx(mem1_heap, size, align); +} + +void MEM1_free(void *ptr) +{ + MEMFreeToExpHeap(mem1_heap, ptr); +} + +void * MEMBucket_alloc(unsigned int size, unsigned int align) +{ + if (align < 4) + align = 4; + return MEMAllocFromExpHeapEx(bucket_heap, size, align); +} + +void MEMBucket_free(void *ptr) +{ + MEMFreeToExpHeap(bucket_heap, ptr); +} diff --git a/src/system/memory.h b/src/system/memory.h new file mode 100644 index 0000000..59764d0 --- /dev/null +++ b/src/system/memory.h @@ -0,0 +1,42 @@ +/**************************************************************************** + * Copyright (C) 2015 Dimok + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + ****************************************************************************/ +#ifndef __MEMORY_H_ +#define __MEMORY_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +void memoryInitialize(void); +void memoryRelease(void); + +void * MEM2_alloc(unsigned int size, unsigned int align); +void MEM2_free(void *ptr); + +void * MEM1_alloc(unsigned int size, unsigned int align); +void MEM1_free(void *ptr); + +void * MEMBucket_alloc(unsigned int size, unsigned int align); +void MEMBucket_free(void *ptr); + +#ifdef __cplusplus +} +#endif + +#endif // __MEMORY_H_ diff --git a/src/utils/logger.c b/src/utils/logger.c new file mode 100644 index 0000000..86dd652 --- /dev/null +++ b/src/utils/logger.c @@ -0,0 +1,88 @@ +#include +#include +#include +#include +#include "common/common.h" +#include "dynamic_libs/os_functions.h" +#include "dynamic_libs/socket_functions.h" +#include "logger.h" + +#ifdef DEBUG_LOGGER +static int log_socket = -1; +static volatile int log_lock = 0; + + +void log_init(const char * ipString) +{ + log_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (log_socket < 0) + return; + + struct sockaddr_in connect_addr; + memset(&connect_addr, 0, sizeof(connect_addr)); + connect_addr.sin_family = AF_INET; + connect_addr.sin_port = 4405; + inet_aton(ipString, &connect_addr.sin_addr); + + if(connect(log_socket, (struct sockaddr*)&connect_addr, sizeof(connect_addr)) < 0) + { + socketclose(log_socket); + log_socket = -1; + } +} + +void log_deinit(void) +{ + if(log_socket >= 0) + { + socketclose(log_socket); + log_socket = -1; + } +} + +void log_print(const char *str) +{ + // socket is always 0 initially as it is in the BSS + if(log_socket < 0) { + return; + } + + while(log_lock) + usleep(1000); + log_lock = 1; + + int len = strlen(str); + int ret; + while (len > 0) { + int block = len < 1400 ? len : 1400; // take max 1400 bytes per UDP packet + ret = send(log_socket, str, block, 0); + if(ret < 0) + break; + + len -= ret; + str += ret; + } + + log_lock = 0; +} + +void log_printf(const char *format, ...) +{ + if(log_socket < 0) { + return; + } + + char * tmp = NULL; + + va_list va; + va_start(va, format); + if((vasprintf(&tmp, format, va) >= 0) && tmp) + { + log_print(tmp); + } + va_end(va); + + if(tmp) + free(tmp); +} +#endif diff --git a/src/utils/logger.h b/src/utils/logger.h new file mode 100644 index 0000000..0e19ad3 --- /dev/null +++ b/src/utils/logger.h @@ -0,0 +1,26 @@ +#ifndef __LOGGER_H_ +#define __LOGGER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +//#define DEBUG_LOGGER 1 + +#ifdef DEBUG_LOGGER +void log_init(const char * ip); +void log_deinit(void); +void log_print(const char *str); +void log_printf(const char *format, ...); +#else +#define log_init(x) +#define log_deinit() +#define log_print(x) +#define log_printf(x, ...) +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/utils/utils.h b/src/utils/utils.h new file mode 100644 index 0000000..c460fa2 --- /dev/null +++ b/src/utils/utils.h @@ -0,0 +1,47 @@ +#ifndef __UTILS_H_ +#define __UTILS_H_ + +#include +#include "../common/types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define FlushBlock(addr) asm volatile("dcbf %0, %1\n" \ + "icbi %0, %1\n" \ + "sync\n" \ + "eieio\n" \ + "isync\n" \ + : \ + :"r"(0), "r"(((addr) & ~31)) \ + :"memory", "ctr", "lr", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" \ + ); + +#define LIMIT(x, min, max) \ + ({ \ + typeof( x ) _x = x; \ + typeof( min ) _min = min; \ + typeof( max ) _max = max; \ + ( ( ( _x ) < ( _min ) ) ? ( _min ) : ( ( _x ) > ( _max ) ) ? ( _max) : ( _x ) ); \ + }) + +#define DegToRad(a) ( (a) * 0.01745329252f ) +#define RadToDeg(a) ( (a) * 57.29577951f ) + +#define ALIGN4(x) (((x) + 3) & ~3) +#define ALIGN32(x) (((x) + 31) & ~31) + +// those work only in powers of 2 +#define ROUNDDOWN(val, align) ((val) & ~(align-1)) +#define ROUNDUP(val, align) ROUNDDOWN(((val) + (align-1)), align) + +#define le16(i) ((((u16) ((i) & 0xFF)) << 8) | ((u16) (((i) & 0xFF00) >> 8))) +#define le32(i) ((((u32)le16((i) & 0xFFFF)) << 16) | ((u32)le16(((i) & 0xFFFF0000) >> 16))) +#define le64(i) ((((u64)le32((i) & 0xFFFFFFFFLL)) << 32) | ((u64)le32(((i) & 0xFFFFFFFF00000000LL) >> 32))) + +#ifdef __cplusplus +} +#endif + +#endif // __UTILS_H_

~FP-^Fl37g@O19X~y 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%0D;HlBYuj^Ru2C!Ud-_g$y+B{09N-+-Ob`)T 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 z zp*)rND4BI$7+TtS14{?E!*5`pH4DspH5nUx2uhr`LaAG**t$0S?BO1%US1e zu+Cvy165PJz2#X|`_yu)T1)+ywNEE8pH;O_gSAgBpQ`QD-ke>YgZ@rp$gOI=;wx!$ zeB={l%ZGZ{SVBHS6}KElM5Z2LyfcZ9i>!TWb5&LK4OV?ap0}#K<#~t9yjA^YKLp# zh8&)ba(hm;d|r(FioB2b|01uFEuRl$o41c;n=92Z`w<{xGBU_$#%9iKdvgJ89@;rGFarRH>-^@M;;AS#?+uzBx{3n<@sQ(O{8@WJkO#Fn%C&|oh^}+6t&js#~!^p^E zrFA9<3@oL9d#@(nWcTAg_bd75X*HZJYWFfKhq!&n|s8ylD2ktQ6%+#~d3UhJM| z<1O2pW}UqgZCvkon=r1;y4L2IT84hi+vVx_i^yNeHm)Bd>m6yr4&vky`Y|7s8CPmq zP0c!cZCt5kH8tz(wfs{X`?bO3ZGBq)sa@Qbe`nKn$Tvo~1J)(JMQ_jIlK1DTqqei~V4au^Ha33aq_?Uij@ z+Owf{2R$Cf^;fxTl%2_ptA^@pxq}`Ys=>skJ~)dOsLIpoFX$%HLFLiC66aw-#wAGH8bU^ zxOwE(GJVv{b&p?z3*05vUgvYL&gYUD#LrY4^EvVzcxYsDwRtFEo!7i9@;G@r@hc)< zCGQ|kUv_QC=Pt!9ADz!3p9d8$A+Gbe#H{nV zWyDqAVAZ!|C2{TFVC~;9-mi5p8~b;%jq8v*jO(c4jH_0~$W`Q##3_83LvtOOvD9i9 zxrxlUYPF5rQD$7Vw0~_}wX}arSckQGtBtv@%(!Zu5&3MHvD6w8d6>+&^mq0{z4&YUFA1aN>+1jLUqhY~%VzN^?l)3xUPvW@GAJO}?R&rKxKDo3s+GuE`) zGC8K{+_rUNwu4I*uow+Nxu)>NuXYTw8SvRvqnZsePgPY=uY2mZ#2P zn{)d)3}ODKVV%R{%{qreZqwDq@|+=CZvTj^eHwCmKyl0YU-B}%Ao4=l^3*wO>!J4R zid$|vheMug6`x96=kR#*7R4<$J!eDCpDAv6ejQo+G~~HYam#bRyaXSKtbJNxHw@&0~o@BsBwk@$I$&zG62I%Cz| z`qz0I`ea_Lroq$XJ+!$g@~tvst)n`QGpmjv2l@^DSZ?#(<1L>jBR?&t6aT-+I&ZC} zbr^H#$MRe++dRA%`2%@3@lPY`ybZajj=`#9$n!U~w>%HJL!N(?yRP1c$2U$S>K>=K zxrR)hb(^`zvA*iIl$n#d9n>ZjcaGZYxjA+(aXmN3wZmm~G^>u|Mq)iTgNLbq&e6J; zM7~sJ-PWBH`AT^%@#`YrC^NTpxyI%>5q~Q3v+@YyFGPM>w)|H_ zUM*Yx8zR3e&m#U|Z@yW#B zm#5)U_uzqew|p!9A@a}eA?&qu)i+r69nvb1sF$KP=BhG%)>9p=|9Yz9;9}fD{hQmU zJ!_#}r^sDp>r-_M_fj2)Sf6L9AM?2~`PaK3@bU) z&z({GhZVQ`J{Gmnehk-YKMu*DjrL=(_G1{!3iWAYTpjhlRekOu{*mJ8`18oSWV@Dj zVJv3WZg3xb)IFH9q<%tPfU88-I}bmvBT+xo<70Q@rZQ`xzV_W%v-X|sk@~7jXs^12 zHm5|_o-SK^-(LxSu1=!<$PiD|o{xQhxyO4vo&4+j{z?R2t@r@qGa}EFsc-$eBK!Wb zpTm%-|ER~qeV>roH}#*1{JgHsCcad*dvQJUnMk+(y_38CW)V6zh zy%Ooxzt_vXH@esFk$r!Kdo|$xWjQpcB$HPI)`Zpia{6q*Ityk#8Z?XC(p|iRc!$V( z4i;1E1_g?ni`-);jGrC94m+fBKrlk&if3W zsQxYgt0L=TNt^$STNO9oAzS|cjC`NGfVe&e8Ebw-aU0juk)M-oT(7&sxZad)Tx%o0 z<1XGrd`skQvh}kw@|W&Vm+vC~DBD;LMm{1lu7(vNSC;1!uMxSn%(xn6L~bmTPs5Jx z%h%v8GPyU*i`>gyOidg1mG|M3-D4AYklN42L*;pRMC8%#V(UMuZ^Nj*4a@3FT^g3v z*YcmGek=#>QMMQOJLKi&eikoYPMgPM8{?C1o9Bkl%G2=w$@B3mkyY!lmcuH=&8oGn z|Aw0sH>=jRe;by1Jj@mU9`fl!T>H1!T(*Bl;=k0UA3v8_H7zEdsoE7YzRY@Rvj8`a zoF%hnGuyhyF2}0rSn|qL?M9Pl=JDQUObS-*f=~1KWz&fdjI5eoHk0_piknBt^D)J@ zFY@E_iOG;`L-pQp*- zN{XLPJT)?7uyKtZN<1@iQ@MnAC%FiBmHXp@$o#j^kM)0sJF_1?TfPzxi9Af6L;RA+ zm%8~`3W-LlSLjFe%CvrNiTb%+W*yqkWV0MH&G$zAs9u>|UY&&f?n7<@50F$c&jj6Rmd;_r2!+O>vv&Kg-?3_nQ4&-$WDNQ=$JR>E(SkX%xAc z%=&NACUOV)e&W8@60OZW6yJ`S_mG>JISnSCCZ|U}OD5kYUav%Jv)9Y>ELI!lp-G8+ z9=c@1W-9-G4>@^Ab-{|b>S zyD3$oX^qIWW%g*(jL41U$;4YmZYy6&ymRDk@-*Uo-L2W1O;45=-~o{b%FJui^X2{c zLis2j75OrE8_RQoJQQCckHp+N)XvPD2J`%~pQ#w;Ckx*rFTuV~!y2%kuNc}h2TjT8 zn4gw&iL2Ia%zoY`+7#i})yDj$Y`LwC{EkdsP0RN03|zK+5|E)4i5WZ$#Nkn?>W4}MU#{2z(@xZCD4Yl)i_5?M=Si@y8FU7a3{Z#x9c^bYq@&oSC8N}yDULZFn{&eK$WSa-o*Vboq)z{W% z^L5_F=D+zy_eh)P4=kK_LbFZ zl$kjVW*%BF=3{1@=F$B37CN7U+bW(;JSQ^a4DIb+C%J7N^z&fDI&5*a$88>3oaeq| zCcZH82$}h5;m_Q#2V0Eu_^3g|wU>jhR@}yNL*$#?R>u}PpM!Ni+d646-`k92owQgW z&&8_mNVDoYl4o@bf6gXHS^GDm{x`cvEhJvHXBXk^iko-H+wfQN9{jDm538o56Zlt; zTh1-Z>bMk_)scQ$merBDYDt|!?dZpTwr!{d{j_Wp_0z$9K_B9sfVO(a$W*$}*YtII+R=hg#4Uyk}P<23yyRtXkXrw{GR}VX3&RrX6t? z#m(K_!;fOs)aJ1D@#>Shw=SzG<7%zO1Tu;$`)nfw?}^m;1CX ztFO7NzTBtvN8ZNPbL&rK>eX7$R$IfZzflfZST!AH{?+5dcVpEw%!Br?%|n|MZxdWq z?oT`|a=J{uZCbi5pEhmX!x?)U)i=1TzWa!)zQfI`ujSB2^$m{d+vWoA^TKS}TqINL zHe=jYuQtW<06Z!3mGardZ*gDL4{Og}L?3M)@OXpC_+Ro8ydd&Icg7sz&qe;PJfHY$ zk^d)eBfci`dbyPN*2t=9!xZA5dpvlTY~%eQ^3Sr(`Co3!zikD1DLyW84R^*&;^~ny zWb$v@B61sOFKP7 zgIjwWt4q7=$T>2#Xs7*Xb!n&lX!*B0)7x17?aq9z?z!=_|~Md8pgQsNV&U3?8lcK;l!>eh${& z986vvwFd{y!>VbB^Y5Ymg~aE}mYZr9@_brx%T0SQvvS+hCoy_4gB3?SlXIYwc{wuIaALn#``_u9JgRyI`HG zb=jxct-MVzwX{6#d!@6xMb2}lmk`(94DPG=HN?5bu1z-&kQrn4kjTT_^_aKpOCnz? zGp20rVg1xIPnM5jow4@)kNQ0e$$E@CTlEcAee35EpX1jC&y@>_KO9+mwtf-uXB0PU z&svSLmwUX9jh($@x!L#ZXRnLwXK%8u&GS}|hdK1KH(8fDW@~Sz&&RvGjeY-NHvcWm zn|ZIi59{5@zP~m5pvUX2$9i|F&wO{%p0zwX)%G^_J9Rs0&)VOi?9^CsbC$an`>0df z$Q@)d&7i`{UDO&R6@L8q9g3&^*Z9oBTUp7ImX(2P-E?(0_Pje@a_gab>gY_9)AnzuAV&qfYg=xgk zjC_uqMO^hQG^@UaoD*FxQycR*nR|Ab8hM)BpZFc_kpErsNaCt*PqXUVb23(agH_)! zmS_ChUN)BJ)qhpYm~Fg;=4GR^0l( z-Q6=6|3hZo<=hwfL3t=~)zsFleiuxlC+jQcMYS=%;_hYR`d{Q#vfcNc$eZN>#J9FmJ}!;S*lbRE%_06n}PVApRV;3??}9P zWIvO`8QV42<30D%ra(S~PjFk^yPhP^!>30+OSXJ2a{n)GV(R@ z9^yAgzRi7<>$=X4%zW9{k4_@4JsbS6;xmXp>kj$o96qv`xM~{wy0KYFdzs zGdv#LSmwU^Jv)g4a|gwzW9`!dv-YX|{PJ$9Z?NiH!1%hUzQL+*0b}nrRDGIRrye#}`4(4AgRfUSoA@n}wP*8}62Dt<^S$y$JTLNmnYr)wWaOvi9mG}Ze6#j) zK@on<+XQPbhq+p#xXl~u!16B`h;=3h`} z?U#vl)4nb+YhM=};zy@z4Fp&7_BPMmbw1~<#5$kzTVd_x;P&1=pMBR|bq`kE^QRH- ztv2Sq@@(8cGIJ5?$hf+nCo|{W&zJY&izAP67o-p$E7M2!3GzUEmCQVJzgA}K-EWSp z{T{~qfXBml|K$$(KOXr%x;CAD7Rz?uCGuRnEb?-B8}Ze$<+IKm?)$Mj-}?Ma&cI(q z*1pbfNBlR%%?IT!_%Aspk;v5^&+m_GDn1<7kw@ap$W3Kxl&ig*Pc3pgE4~QlMeZdp zC4P$AYLQ#Em#gA)6*mu&8Dnl)?U**Q&B@FN~S-P-ux zOrE|CKcjdle%^h?Lj1C9xxMBdVE0me!#tPO*XHU&Z)3IY@rgUk^RCEWy9-ljvsboj zS+B?DS@jKbepK-Vi9}w-$W`1n|9Pr)a9zczMV{}|02!_#2T| zxNV)}t&7ZifQ{=6o2#vnKXTjp$=exOd*AkN-Y*{S%38=f;O=I*{aNn(qEyu0Az3ppz9$21s&g84^y(eSU{e)@wcyAMYqI?ta(;}bg zJ~^HE5IGAElgD7y`ef_>a*y|4gZX#M!D^R3)ot^ce}l{%=HKkL`N_Y}ZTrrC&yii* zjdhp*sN43P{hlL>hdFuH9me>7vgPoKJB;gfc{cG4?q1pWU3Zu(?Q7eQ_WO*i|Go<_ zYr<^%&VHX!@DBWg+xA!f&+>l!yW93r{vR^?s6aJ6nRzRy%l@CEg}j=XqDlVWQ$@e?}*}GB*X+D{f{zS^wR~;8~Gp%f-YWh^)Qb zeKPR{iklfj=!aOr^O0YWpCqnYcQ?Q3aa$V&+P}ftzr9(r1=_#CA9?#Q58t|NpBAXr z-Hzg4`5XqdoYE5?)O{D>BktUR{PzmwZF*Kwd_J-2?q1ZqXPu~xYHjPVr)q6^_N3Nj z_v+c!ueJT#v!mPAYR_&_n|#HYpPq$oTem$=jM|*4_zq%cxNQyhJU41{zT*3dUFf#; z+;dda=5obZ+dap-?R@AtC2Dhx$8DYWyxz_26FqN<+T5Wy>#*ltazA`u)aD_N+xqYM zu)GI95w&^RQDjtW(^^yU}fXr03SC%@-cGwbAn{ zx2=ty->c1W{8MLwol!mgoje)V24_O3skQmrueCG0S4Fq2jb7Et+w{_N-_}MiJ@;*G z^vaCdH1lh1ZS-pCwzbi#L)4~=;tPm(ciY>@qTV?9o>mN~@dpv&H zNaFX)tc_m(j@mrtaa$X`o|IV|y`GKQ{8#Z(;xD;vZS;CQYO_Ld8}Dkjt&LtAqBb9U z+}1{~&)l{)dVT3_t~iXp^|-B#UO%{PZS?vzYI9KW`NWU7ZEX}*C~s3(#pAX%3ah(q zZ4}mt+B8snGVw-kTN{NfqBd<6UqHO0+tx;5x2R3N;yZ{Jx@~O~o*1>EfObBg#M&r4 z!)RVJ>-hu16t)@lfT~^1UEVtFMsI5%xiaNTjc17LXRg+58ucl`XdkZkzL>>F#cG@C z)_Uk>_hmg;pEmzR56V06BW|1jqQ~XMn0D4a*Ye@tgAZYy8}_k#k=BFNt4Qx5R<9z~ zgSEGM6}=-iE5EIsfDibvz*NC(gNJeOetU zi<`dfYnB$bI`*#awmSB%<+eKZt}i#nnKCu%-P~<;?A=;sK6_`ot&Y8OWX9AxUoORk zZmVPO6J^Vdn_E6s$KHe8`IhGe?gHzR`&pab)VKE-_X*5l@A2|HJV{=OuXgv{i?5Rp z;XB<0)9~H$3_Le7ec8QwQoG)Ij`YmJdXCt~{=J`78?!zJvAXwu+2i(H?){oP3zJjG z-@Hb)v21i7zX0p3IDRSq$m1szV4W2w48*%U-lsp-S#VSkJC4_xVEf|uhTf+8dd&E({~nC%_*U+`KA7=aJUGXlKbyGf zZtMSe)xD7Xk3Y%V1phx%_a5K%`2GR>6Cs2U`uT>X(GWr^bl7U`)T(tp=-jGR>%0zX zWgY0SRco!avTD_;sa1<%kqpJCh(Z(=r7#p>C11bS>%Lwe-}{dqp04iC{l4z&y6^k_ zDFGXepM3)Pw(MYT9)LT`VQ_EHx)b=%%3JE!BhI=Lnx`N>PUGo`GHTm0)pMGe=dtBH zGtXU1{9rzd!PlM6?{ijhrhEi5&7^BX1*_4ot4?I-_6`Vt*|!E$$KL_VCMTG z{0bR+K3wkzzAwUWusE*lKzQ&SLEmO^-ZSBPNANxg53@M;LwG|O>kaqzLwImMV141i z{ZIjGKd_JCvG!U1K1O(ZGy53c$IL#4;~Bx;h3igWAHzo}j_lkj75K8zaiS?q84_cDGy{3kQ}8~%rU4%XRceu-eD--vr{4Er1LfQWs5r5pP4vtJSWEzaM=kHFt^e)cQk zGx;2>Gw%BJjm2HRzB9Xisn@PwI^(WiRW^p_G2)^e83?pi-`TI$>N|g5vGuh!hWB%8 zopJW7_5Uee0c#JiU#&we&hywh%*=kZR^QpL*6KUIZ?|q^W7wD0NRaDoTm*NNkHKBc z>`Ut>%}uMr{pCzJ$;|H$t&`<4c%r#Ea%ugPjIpg}nOmS9t)G=qkJj1)E$Af{Z&@2& z>3Oxxd^VZ+erT;d!0!pIOB64MOXVYQuq;=zhn{qSHX&a1VoaeO7VYx1h&$xIb{I!|qw9U8jY4}Go&uN=q zWX#d#Pq_mA%gl2csq@Zr8maTna~gSzjd=v0jr@;%0#-5v*8`nm>t+^@c z5g99U&Q6}YnfdFu$UdI2HmSUu%F zj6{CSnR_o%J>_@c$Ws=ND}mKV*BABi5%i_4`sl1aK5_Z$V`Hh<#~ z#P2pYJqO=w=AYAO`>^LGa%03>$aCNbIUiQ9o6+qRXP#ZnkD*^}d&&pl0iF|O)T8Z4 z&tuH&SKBF`Q{|e7tJf`?!*ea(G6i1jd8wR@_)7UOtoytb=hS{R;zD_QJZ;_9|+5>!_M%A~tv(7cY=R`HKIPdwW#%A90QR+L-OO*P~UrR;B z*%;>zGRNqQ^Xx?RQhW+LNXELNhMF;5AWFTC$cJ^tc@IaW+8Ex$QE6u0!%_3)bFl7k zelLp3u{h6JlzPqkHfp`aqxh^%GRG9loWH~z%`vabb>TPVNceqo>;U)!8GVUTPk9eV z9kn>WFGZb@D`1S{p5Z+lbyjB1znggvM_+Dc-=nXR@wsT7W&Ykv^vxD$-=l+PIS*D( z`8_K7K8?Y;q8~J~*U?SQ{5_fIC(P_Se{IIx*x%?FGvDLUy0`h=COX*DGPs|O;kk%b zPx&s6*7@cA79H$q6^yw!f9pMPs*L_dKV#<$LK6`pT~5zIDcIb zqqEF?9@E$2+~+Zgas`}Z=01$6|F4uwSv)+ZgsM z_9ip?6_A6F*0{a#Fu;LYP6Epi2t9zdPiq$>Oe#N2(tO@%Si&{8e zgr79CU$Ono>{skiIS(Eo7s2D?WAH?CQ^r%x>{o1>nf;2LYi7S<(`EE4R`&zXSFG*_ z_A7Rkjp1DsyVlHp#UelE%znkua;?*SBWZuOG~=Uq8#IG0*R2*RS(3@{J3~B{0^*`Ps*~tK|y#Iy3ti zce9M#;%+swk8$^yA5MXFS3JBJ4!1bZ5ueTZ8zY~%F6M`@f8%=Sv-tVA0iF}(i-?aj zb3erC>~lZFO|m%e+qkJ_{`xd-rkQ<@)4PCukIS$)-$8MiaxT1FE`y&lv+r^1WPWy| znSGDjD(AyHj^Mo-_pZg+_c*;H*!Q@PEza*7ai7aa;4jVWd)x^# z`yPinvYzaF+%IPKJ?=LdKOd)e1Zy9s?|AHQJG~>~D&Q+^Jp0=YIdM*&Q~usJ&HlEl zZ)W}5HIU2U2h5N5fpzxz9iZJ~7H9q2>Fo3OD%&9s&eyL!H7ZXANR_Q0cD z%cmB9GzHcka6Yd1JjB2E{FAw9CgOjXUH!EOSpWD-EzbJKUtwnbT+hsN5r41D&uS0wT*NoEIO`w(gpB&fN6M&wy!y`jFus$;c`o9+nOXmM^_umM zA7pW!i+J4wybt4b5Aa;XPq8sP7xAfP_9b3tpXVZezQy@{BR_Q60dX3KE|u3O=`ecC+Bg-T+TNle#-NYaya6;x7o*d z-P`ca8tZ+kq?IUAl~=J{$r z%gjEu&oJ|Rwa=6f!z;}^U+q`Rp>VO8^>2^QaQ-GW;oY9!l2QNmI)hE<1B!>kpP5}*1yAOGwa`BynGl= zHM9O5(qz=XLzbEK@1XP5BphC4e`aa?A$XmQVQo8Xlu@e=TfH$aSlrd^WjPFEaMs+P zb>uwiqpRUN8k2%J`uOjdj}^~H{8O{5=a=4?Z!GR=`<>a<_9t)5uNHT8{zGP+|Nh^Y zj_NOK-tlr9!Wn=VTdoWXB1fC!3p~za72rT^)7z@}Hq}Tx?_5 z$Bs*7^s(bA8PDmsR!)KS4sDKpb=+=o_N$}rTlT2q>lSB^I=*XWUpnrS(U*>&m|ZVE zH@jYZYj*WNC1+#&S+lFT?p{~(e=N>AC+P0w_oxK)lxK>yO}Ji0Z4>I7S%E`2_Wj^+|Zl#;`sK=pE|?@<7H1z5UNyV?cgxIwubF*J&|S?wCLFXl`(S+nOV0^!S7V4 zTc`0BXWcqYl25?XJ?o4|okM({;&g_Yb?&4y&N_F}udP_;POEJU>)dIb%sTHdH>nH1 zB!|JfJeSGgh`(#*f7_&!&bzDg#};>W`&8b8F<*K(cli}U{J zth=4>*3Q!uPl0tmu+E+5TAcf{^I|jW)>(UifA**Ia~2P0o@?Y=;EkR)%Q1*+Ke#$; zKe#%-Zev`X-!!{A>rQZWK49@kuJ^EK-?kVU*v4W|1i6LT`+T> zchMeTU%Fgwaqjaj-g}|T^%m!S(xsl6ed(e*;ZcsiUvc^&a}$nNui39IEiBG`-leUX zed!V_r@)+^*_f6!u70tkdN{>-;jGt~$TWr>o8{^XdAq za===l+7P5wFYu3Pmi)@O&z=f0`&eC}Q|mKx}K!1G5k`rh?( zvs>?%GV6cR?AG*sYf0GH=R3Y zojdN&ZYegN>+Lp0t_wfyS$8k@TemEWhbO~1avHqK^I9{1f2LcZIkp(a9%W5p_rNcj z`THT=UXgL&yY2S;mYj?DdotIqUi0@OyB$`XM%_8TTg%rnbN*H?fPdBa82Asl5B#^r zbPWW$SChxWH9XgpCnJ8NjJ0>aMb3k7_k5?k2Jwf?{5`<#kIKzq{9w+l>2R6PMJ*WT z?*VpKuOm56XT|C6av|K;92Eu+l#jtl=GXx+dgkgs2cF;=>v8c6#AkS(C3F7yo)^mK zX?Nu3KD!4-pPbR7?#S<7ua{3Fu6J%6#&+LkasD&V?k}17`@r3In)&-$-OJ7V=lR|7 zbDT3O0Y2o7|4iomUwQsU#yhtA_wpI|Cv$vF_?+h|8NKasg}Eu#-s5WdFnojOo6XH4 z5x>pcA``A>=ARkp5hi23JsQeo@FQk^$LP^i#`Al$G_xi>TFWJHCo}(j`5xWmJQ#n^ zn(+4|d!Wb8A@CTD$$-`C#>{P=#UsLD{2a$eq{2(h{5{Ve%jF}m?&JurMZJqif#0w( zZL;CF<%971=D23?2QusPrN&^N^f)e;!#aa)QKugIp3^ol5a?OM#_*q&_pE8=9`31M z@9_6jd+MykUW6Okm^jp-XCoQ0p22z^hJ*F2fD>#Ce^0e%R~c*XImpbt*HiC1{yWq? zQ6pDdS#W}Z41E>E3{m=lQS*cg}RN||};EVw*3Sv-z;7R$`DL}s3^n_WI{nq590 zn_0J>pUTWfb$0ov&aQ5#7xQ=dRLacfH?zyuPe>0Td!+m)U8)- zGxO|K$ILu?H83;JUiZn!v)99B=Gm)>nR)hVAtT>j5i;`Z6=P9xw@@z{gC z*2>M{LK(UDDw44Wd%b9G&pNy!W39d3HAhc@_sQ8Xp20rGSHZ_L{!&=qTcR;{FMV%u zYeBAVeBD5xcR+3kUm+uh-n!r73t-)E@mPEBn>7Z{>V2EJJ#y<^Po4u~ot&S~?cLbS z=l0g`C$P@FTUk7w&yAA#+&G!f)&1t4tNV>>?A^!4xaVSj@LBEoT-|T+N$>>C!}wIs zGi1)Mvl+byUSe_n`Ip{#p7Z51h(GUnt9%ae63?abMa17UyL|M$G@kkFS3DCwC}+c; zc|I!VB3^0cpPlKAJh)z0Pn}Iy&%ZPt^?dRwb8HRxS~(KF$=t3C{y!PHJQ=1j&0u_< z^T#%ab=KOV22ZxNc-v!eyqR~@lL<0E+h1d_rY8r>hv6yadqUt;IT4=iS!e2A%=hFX zi#zK~-P;rKJjH3`#60iKgg1HKA}>e$1tofOhB8aP9jTl`n-mp<0hz^|C25Bkb=x!kO$=C3U7^8DHC^8D58^0c!SaJHVhI`qBV z#;^{3t*3!Acz)mO6+Z#n84UcI0oS!S^XVHRV_kh4c)rifeEK#w|C|Yj%NOBj&+W`- zFkj!!GV|#!qb7a(dLC##n}>LkXY41|=WHqBc9)tbD}DrVyGsLS=~)(MJ^Rl0Y8 zbJcg&t)KdS2K%a?`tBU;JL=glP0yw0=($`=x?Bt|mYGkE=apve=YE^bXHd_6+hm-P zelKZ!25i6X3;fDDsK4{W;r%vdKK|NI{dHD<7Zf6{{yM9_3n~%E5AJPeTI{N+T zS!a9+-b?*2QJmHp&q6N!ud%qZ&UhB?nErJXr|ZgiX8-!0b;h%PLHq&5>4(iL8^RH0 zuD8GLZLYC@yyA3%c>(I#zlY~1-m?xa|7o6|HoJTlnO#0vGIP)! z?s8jY@dc=7{{qkGN3iDob*@?e{yNtgHDH}<=QnNqBAlK6`#htjoF{W0;-7lf9loR) z;@Cs3r}SwV>+6sDx;Xut+126i|9JrB<`~vt0CM`*HRTG#Z}fbNd1)fz^*rBYUe*Wk zhMpVA#fU%dS!a1!IpXTIbF7WYsf~CS&+2tfDB}GTrw7Sc`+#K6>UB;6;*%Ap)$8S@ z@G};7)*ZflKjN8+)7j?SLU^_3bu!01?|G|vMKR*9cz#XZh4@>Z-!ZSOh4?|whvhnm zANBmT+z|1zX70}czst<$;{QA_U}oP3>K*NTt>WnWK)s{62L{^rn7I%fcU+{SQ!4m>IEhfzmE7v z?tx0UmBlmS;V3ivGAPc>z6{d)ns?WrZWdpHz6?U`-2H=E4Z`}J(U(C=MMaADp!xvRP;C2WRbv z>@vjhgKKf#BOgRu`yrdwe#kxzYd<(^KP(GD{J4GAS^I(ea1iRw`Ij|^&&a6dAnk`` z#jy4R@7TfG58Q`?wI8?-2kZULeK=U}ckV;}|DHKN_u=5WGUw6zeL1c7JMYiI57-#) z&%qDNj6Y`P{v6ywM%@NSnz=s*$H;i*;2vh)IfI{+@$-WRc^)dyL41^qdJGQU6{!8- zDHczsQ{{v3Y%}-gVBHmqd%}w>zPJypyJB%7yh3q$l{vF3Tp*8yv1ZmP6VDmE-Sdm` zJj7o$bN>(CEvLYH&D`gM-;*m~#oQyfbUhD)?LB7bjYKM z)4D5omkvR$oZmT8E|=fb-XE%W1bYn7L1eHZXIa482cIfgd*W-W%G)%sLNkAs53D zGV&i9W9Iv7XuQlkyU3hh?~a@Sa6gN){zLWdV4a5!w|H(HSnrP9P#8I}hP>Z~PLVnO zX*18)P`x`=?1C3qocG&My*v2*YUnD9&p!sQm8)RP%lYTiMP|O^hL(6Pm04%q1Fp`x z2QpYU-2<-9x(6~D*FE5@dw^$l=y99VS>GQr(-5yzoIWGZgOMNebp5(0WBy^6n%S>m zSD4waVb{v2&#)Wha`^wu?ANf{{cftBD!F~y@y))zqh^yC2 zQLABDif6z&<4bAX|4TXN4jaQh4tq()y*uo6b2{t!rp)ml$+cniG@W^>kIw32dR@fN z*?4{j9#&=Mcip6bd>XDU{|4jdSpQ`lgL$3t*Cf>RUx&$vB{elKMm>}C?p}NhZewxo zlcZ=Fu_T?rCFp6AYQ7{99;Pw0-pl;{pQJi3=n1RNyl0Z0wej5NNjhtbHo>}A7wv&n z^F`(GW{sz}$p_(Johx9~+0D7n#_*0x`q1pwqO;?2`_kfBob!~-d31krZzTP0ah`>w z^D=5RT<3+~y@y|6aqjuyxo8dW%^Rw!mtHWB0yE+8liL67B#d%i`$LBe}tHUcYNEmp&&Bzy zXfx|PqJx|OcQ$jsjp!xshx?jY=Mi`Y=gDO}$;>*B7$c+3BXAFL4C_2X=a>6!gw8MP zJYu1ZN#}Z($W`zP&#TNCH4)$FIe3=y5Z_^O_GQFNX7*(S@?Z|^%ZM_wtMj`upQ|(O z>h`h4UEMyFxh|b?p3@P>EzWn=h|``cI+7GP%NUY7pQU8&s z7tQ*Q)PCSTAF2Jo`j6CpVEspGKd}BIwI6uiM`}N?{v+`W&dK_ZY%VjOcII@{VPr>h z2J#=N``P(P#Ty|$$n#M1!brqN$uaOaGtbM&DQ5O%WU9Oep6waufw^UVhWH}SdT+9i zBefsc$C26(S$*IF8}E#|aGose!I9fNzbL06{;E6&-YqlFy`JBb%Mm{)vp$E-OT*!# zp1+n85&zE2{WJ0hnSD7cb56YrxPL}ov^bp{kkOaq8lG#)s6+CNassTqkuw0+d%;=n zh2@PAzt_e)KOp1WCqL@>F}W0Rtj+Dc{cxn2`z=}fg!?U7`-J-~xx0lvSSeXoJ|de58W62!N8 zenBorJh&g2kM;xaf#i2=4Evb;zKpz*gZBgN-4Ds${g8ZI&?OUv{Au5K3UKiH=;H>+B_sOW>9@q~*Z1dz|zEO|M zb>NnABRI-)oXk8sdG00`BHmZ#{MrNDC!>a2ocm;y?h5XcQ4=lBduh~Dazl8&IURi& zwa}cA1}~FQzfrmqGA_dF6sI?u7skL_WyW`y7x7u8=1lx`6mnucGx66^*b~lsV61^& z!aNU|vueP&rx?#-{43Aj$c+(K-?QkS6z>WnZ}(ZcO2)cIV?GzB^UBEn|DBED z_mj~-d;V2UL;Nq#|Ckqs2LfX*mt)|o%-o-2t~c{O9CMR=5JuiyOXg`f#LRngOanOu zzR#SM1nZ1*FO6xUcsblcM*d?W%uAV1jOTbc5%Df&e*YQMLq;9OXb&u_ga=uidtgj( z570XA+z(@ddw|w?=e;*3O`lDGkt^58eKJO8-+76}morcFn`4&ug!AN5IJgID!Mgvs zm&R34Dje7a{+#cbmC? z#@;Iz!w-3WROV+fFX!Z4Hx~7EZU#roDX_i+EJ=ksD^7Qp=fb-Gvr6HC7SF;O$721Q zGYhpDn=Dtt6Fg6re?fePd07=aOXhm@URXwJZ!E)k8k=on_&s@St~s{`yhg4A2lqxJ zc(cV<lyep2udM~7Ny}Bzh(%>I#ymRob zIF0!4iqq%Ke1DC@Gx=O+y%%^tjH_vJ_II52MkaC_r}qN;I8J+m_rth5Z9Km}kJH{@ zkH$SO5#k^i{hU4ed$i&UIOe$0*Ui*X5N-Vfut%BaJ*CuNTBFIT}sJ&!Q+ zei%32^CX%1PnYqWaWl>QJ~K}Hf!|@qX+QAyX~!+IF+A7fR>+0$T6sUb!OT4{ZmZ1v zcgX1JxZob3Usshn_KpJ5$%e#ae@>%jPoi*sEk%;~J>X>$hl!?-hMeyhYaBn)?4C77#?Oxr_L`n*@#UfL zOf&mC{u!CMWys7SQ)d3lJwGQGBEHVdclY>>X7+3ROXh{FiF(bmHojbOj@d6We$<>Z z1^!wtg}?KxGrl|<@!u@&{HL572u!%z^K~-z;RN+)IeoX{$bW+BpOXr!{yA^J?QM*6 zCymE*C+K?`pF2VC=;eIwFpZ(ri{+dj^Riz#yI|}m=fm(~jmO$2ER}o0s^{{?u)#ZNWB#~S0x6Hk z{A^P>9&Ra@!|L4%)H5a4;{5eaih8#)1ny(;rKo2Lp2zu@hQm4|OF4dm7oTNbQ3LU3 z<+|`Pb8aP!1YMqt7s_4XA~^|uO>PEbKe_RYzhicJzAtl)pPRGB!e7dHFrLTHW<|nh z!4p8xva_=&o^a`CK**IGO`6;}Oo<6+g`#T(g}D&#N`HR7|XIQ|LGt>gm4bw;Y_ zIK}tFSik!$-BZTCo7ms;VDov78R2=fjP*^N;u(2x&I_o+#B{UEQ)j2@X~c6Br&r3m z;I*FhKC0q#w<}J+C^OGjJ?}QV=N?cz4P!o%na>d!f1P+tu7bbyd`iBE_|KkyHJ``+ zoOs^z-*WvxU{ZC@HDvT^(siD1l+m|Iw|c%^#y+2Pm*;zA?4L>M`*~V@KVJl^@6PJ` zdDLu@`tGd0pD#sRcO!c`N$;%lsL7;0dKNuEMt>*io;*+Mp1e>K*7p- z)_JDJKqj)&1J#c~Upm-{*J#Zlx?&Zyc zx^VvUj3X!KB6xya3S*Hjj@nP2;aPVw>o$45#V_z#3*|I8&m1U+^Uc+;j>(%mZ;_iJ z{*vdNay;T?p7+QJh=1VuV;Ohex=4 zKNhdVXP>&l^VKry|I`hhb!IEiA%2_1ng3JuWaRvm?r`S+)cuM_!i_zv*Idg}I={|3 zzpV39s5|yUwL6Z$J*l!;`*d$s!5n^P~>82Tz1b4`7JozAuxm;~4;pffV!_&6PWw5=ktKCiO?BBf~#^1Y| z)5z8NB8>axUw>$B&eK+u2%_coMo=JAI>q~Sp#0>Ie1R5L%h)9ZvG;3 zDAt$yqG#-Tt|jzA#COZg;Vl_`Nqx`r0U7H{J#2P)9+A=C)UQ2%D?fp_dKZFRQva}c zJw8jl3oQu*rdP9gDC#pEYjbs;2iKG@!Z(^5)P`@7eD)deE-fser}IpKhCHnqZc#o z&}aL=^=0Hc<6h4X$ommj@9NW!DUO=V2sejve(YEGEY9CWW2V48WPUc-JB}aZjUT5m ziHJ{>Ie)6gaD19KUj1TyW~g7R&y4jprUCjeW0QOW-ewMCZZF7t;5W@zmce`FQ!sMn zTCSuIny=1=Kl7~n^XfdrPbyA-Z@y+8TxE9iUz9QD)0cX_!hBT%;@5hKmjS^c_Z4C0IRT;{BPU4?o)z0%@W*MN1tuI>YGP&^OT`Ks9*F1ENcddVKu3`hJm z&u_>B5P!$>`!ehKx%sM0_)D4joG@Qq3qCC~pI_tx_%|7Q>}j3Bt6Bg5TD)eRKp^ch zIRw5^MxJSy*X0}o*Ork_n$F>J%PKfRaoTzsXjL7Kx43hH zd?Vu4(?BcwNyYK}v>~2{%NdA|^_*f3M=#Q*d45{ng!r?b7s!Q(XM4^yN7O`ojb}Tv z?*9**X5V?tJ2WO0(r*;#SAyLv^Dj8u29g z9Gq-s9cBjmj`ht9_B|9<-y@ih`p*BB=FAoL*?;=L_8lqkPc~ejI9(`n{C3YT%FOw7 z&$_DvsKHEphUdt6zuXG(L!Nb42QDK1o#OHE4{{o;@3C&o-xjZioM&OpoZq>Ij6FE( zI?p&uZp<5q-|G2x8GB$>nCFJ(OEVCE#B);_cjT;=o?Dx*C_y~db9?zU#JhU#DeppD z@762mp%$-^3Xk%vJG{mm#I3*8oUOmrYFtFz`fIlSR=e_2#FyAS&dX%fY}OjjcCM>k z$vWtrTP+fP*~V1kx~#v|s&S0^dji6_4hLDh1u%wWteC7T^iE}zQ>yffA8kx zJdM41+Q{<|w=-MqO3rU*v)ZL0aBmyKeKOn5X0^*v+u3$kSG)WSoNQy9$C|HbfcQ*( z7W;1YGu}Lyi}|>DGUZB)S?>8cvzw>Ld`T$A6q_$a?`Go+a2{vuEoaO<`)#wE|6Q4D z{J`_aGM+#CsOPWESHvK$b6SIAbWUrO!@7sRD}(>*#s^MeKhHs9k%L+H@F|R$Q%iBW zw!8=akLNq&(}-K|0;lNvEq)sNYL4|T;M~mO-v8qd8HlXD^kJ+p|}BzE;jh{3g%;C!;>k*7w{%MxM_$F*DC+AD6Lb zp4B-$Ne6pc3EMj~aFX_V`fN|l$vpeWxp1QAB$@e-@jO9hKI-GiR9JmHSphGyG0s`? zw}`LMXZhS!ayDEb^I3&*2^{QiDIDzYF8D1Q@JV?X zjJk0DOr~+(oU!h?m;7)1+{^zrX6`kfulL5QU;OjGbJedg$a(GqHpcm38F|iq%ySF* zBI41W+nL7(5bx}{yE$bJ;(a|2lrs?5eVan7cav(tlWdH$?%PS|#aztAwL8xN9CFN<62#Ye-Y6eNe5>ajGS~H*=Qqq_FGXCvbAI3ADcFN^)jQ`;6z5uWHr=|g zpP0`?^lh%rrt{AhcWbHgj67U_v95W#W4W$**I9f_A$+svTjesu>v_IQ#(eW0^!$jK zYni9B>D*Frj&JKZ);u8rarM_({he?OarM`Epp8$#hL|_P^Jw$LRK%xv#^1a8pkMQ5 zd!8#ZpG?o$X4Y-qYR~HRq=tw;uQ;thV}nRaprv1JT@FY@A+>z8UOx&b+w;9L z_R0K*JU=QQL%g|X4RqOjrpH>);oG~JmNb0&Zjh{E8;r)lj&a-AAtYH2l~KTabGRC zOfG}3kuSp6o4KzR=w0l5o8qYVf>6(4GC!+(fct8J?tyWr^8(!i&bkN2F`u^fS!dk? zKTIe@T>HUU`ypit;@S_~p9{1f zQVzq}Hb3|00__L>`NRd<56;>TDd!N^esI=);9gzulFj41Q)ZrJp7+Rn?mjc`q6Hty zjo?pZ?5hP|$i?t+&$>4zl^|ZJIDJO0fd7=)ufNPFQy~2k&%yV8ZN#-tCezv{lk39B zkG*il-#a%(yuRlKay;VNC)~H`+9%wr>DnjG+9#6-Al}|S%YB=!y}|o1y_e$1KV5eP z_g?xCi#rcDbMK{(^_(JOkEKtOE8wTi<7>gsdR}1WeoJ5Cd6|3+@l~GJnp46N$DU(N zQcB<=xfFiU^D8pv*)4M|Z3HGpfR-Wiir*3 z-xa6zPT}2~f!Z;DXXN3Gwea6n``5^Wo>T+zTVy;p<3BRy%+P+|J2XT4VNy@{0gXXV zG9H%mVC@IqjTyoH&=}Ue!Miad*2YgB00;L2_DP2J1NTXW_QM#|GsD{t8Q2ueng2dY z#zYy5&A^&noK7>3kB8@)xd$@Ri{&EV%{&c9V=o+X}3WzPSG z=eOlEh`;ao1DVhL#PjFoiF|H_jP+%lknzlnN;B`749x5L*buJrd{M?c3on&>!dJ*C z@U@mutM6m+tcB|PSkC{Ljd5-vw?Z6!a(&qkqsPui;EtZV$k_V} zdz-n(7WR`9VeJQ(kM_glaKxwB7~V4rQ6tXJ{j+e6j2bMQXXf3qFw=9knfJ`X=VY#H zjf_3Buux8di_GKsT-^iCx(B%57Vfq&+;0nY5AZwiLiOEQedoWsurS#7>ahCG`)A=d zHV@xx3%`@OuAgMidDhH*vam`{g|SZ7VPXmX`*)a^<~~_eL&h2x)slO{wdE8zc=qW# z6wiZ$?}EngeHNcQ0Di(eAq_^q`K$>C;ST1MOt`aL0uMCv->q4so=ynBqx9JrSZACy zT=bO1Cx^h(1$T?0J}s`Y#^sdAuBoxcd8TC9M9Qz@A+^$Hq9%lfw|tG@s;Wv*qS+f!Woe(Cq3^ zZ2qPe#+1mc!!8+XT3lv!`J;|pqcdvZ%=`~|{!C^LUwPJ<{Wb&f?-i$YX1_)5i`8rA z^ET#00RLV$e(+h&)n)uOv!-XP!Hq#3GLh52u4`sZGV6QRnLUa6Wa|5y^CKFA{gc_+ z{B0jNN=|~?d+sD7$;<&});TlL%sOW#n_1_~v2qAJMNWWI&EGQ5IiBaq`G_y}yi_hi ze5L2rX6}v54W6HuS)U!AUy?5(zRPo&`6TCg*R#IEyLx`CICIu_cvnO9-C2F-dCb(g zK7u-Bs@I?6tYqTZ>=(TxU_KfSU*Y*`IR^2YJpZ4WHD7|Yxp}aTB@Jc9)zi=EruuAS zxTPEetJf77aID3h)$58p#IXj>@7z-^KwM|}ixhaI#lK)&XW4m@;#G+2EFa}_XKJ2E zc%IC8kcWHL99X@spqDGoJU5z;oP#%;T@BS=XZ81JbBsYZ5(&U{4v>U44|kLE|w`Rz34k z%#n4M`B-hZq31^CFY(tb_0(DK+%M4|{(E=Kfq7=3*3O*2qvtMiKH|vF0i8uajvm5`e z%<&(1<8?OO{Kpl~!#xcYU!*v#UVl{quTY#`C7*y%BR3~qX#N`e zWa)O#FUrjGRnNO+=C;@Kdot^MP(BSGHoN*9^{nq>6}2(uJH=^zAFBw3&niyq-mVD4 ze_yz|#lOmcYsh=x>tysa`$jX@m3^y>wPfEeBmeBXJ>M%M|LlikdDi^@o17Fkq6)%EEn|ao<$IH3!Q}PK|cQx;jY^;<0a^o|-@w$`0#y@jJco<>rs`FwcG&vFt;hKQkZV8g(Z->pgo2cSE-BWapnWp1nBd zxk~;Eaec2o1TVW(@r$s|^&wj4`V-W3SsfeWTvr}|xcc}Btv(*1AG0xB*D{^okFl<0 zk&4qXX0ByfXV2YbtZP|c&jZbF{t4!f(4%FOW$cS(Gd$0d(d%XNJuj4#5mz5SqMuW| z5?<$dqxoa>f7w>gJLIK^mwMhMbM5->hCOC{hf6bR)3w<-`U79C&@nRj5YHN&JIC*lIN*1pF7j@Gcx*~ zv)D7%@8%hU_)5>K~zRvkbW^SLzT>CM(0>%&K zGwTF=%JYxr*|ib>Rp#3NkbA;^%gA9l=5Xsmp3Bu=_Hj9WFg`N{uIm|dx#xx=u3ocW z%kNVhc`gt3nr@;v@?GB2b8GYLnuy1GZZG3G%Q3IZjYi(iVX*Gx*$v^riYLG$JnOEW zorw5E#cAEuv$^(Q-|1lA(YNL3lY17ODQ}0@m|cC=%dF29&lu?x z=e;tXx%`0V;2vNNk0?%idtmtq#aY|a=GoQZUu4!z=Y4i4tn=>brt>}<`z=@Jowdr< zd1rlcuh%^EO>zm0x!f8#9{q4mf*ZH>J}z^f;2ywQa@$&*XEQgr2O7fYrK>;3 z2loJR06p=@6I~!qnjbF^X{zkKKe<-)oW*+_tE)?tJlsIn!gzFA3Xmo zS0Vnp=kw+-h#b2JukysBkz;?g^{EqiFS)|1HK9>Mz&3LjC0$ zSE#?E2f*s@=p;D7=5$7H*z3`#{|eN?8EagjGd}tvjENa%UskBUqmb8%sTOyhAy*>) zjOY1gms_UiY?*ng*DhzBahLNZjbZ*e6R=l7%^VAt1T?)Uh_%2vyeDq-$dAoJd z`(=DDTXD$jdW65{82;Y-ic@B{-XG0wjlX&RQ$B(5I?G(+%1bOhx-P7hFOwu=@K!BUt@)R)0T0zAMXZPG|M^gJi@%Rh<4pJ^>&1eA4_O=dbjPXEWyyu?JVG z*Uo<_z9$fPPQCt+zTDymqha;hS$FusV#Moc42}K4`47GbtJlsAEY9zo&#Awx!*l8{ z*Zy3Djd50gKj?{gyyA3%jI}@4+jBn|b$D)w=iz47;kmJ%Q)JZPxoMuCmbvz4Jufi3 zwJ-6!OfJUwJkR+u>wstcTN9mkSBF(6*=O56z&)vGdv@r)0 z5!W6#m!X7QK!7Mo;R4^WByw`?=Zj5@pv9{bKYg%hZ^U-?fG4~7UCax z{#cGg{0q-t$*j*w&)>_(5I^hrcQfm=s=Ar=S*2d@L48)?+02vmSykKoP9wOk=MZ@c z;tf3CC!@xz9`>v={%#uLEiCRFA?G6=>$$yr1o5t(d&*xU-rw_Jb2;j>YJ_LJthko) zBE%xsHt~Pewe%bEu4Swpx3joYs4s=Vi6_fb-)vp0!=w+H;hggt+#=dvqto znUBu?dvssL)8RzV_zc&@v$k6AbZ6ZO`>;<|>z;Rh+Q#qWvvkip>z?1oXK4>OFVpyg zhzIuoov%3d!|FmA`(bsF`2g$oqUTrSIf(1dKR~~w_&iv5KKH}w1Bw^JpLqUU#vWK* z;rWDo2Jv&|J!4_ih4tZnSQC&-;p%4Yhcz|L?E9KpW}c%pb!5!3rmmTNToWpzhHJvi z@8h{^8p#~r*t{Qku4(QWpLhE|fOxd$cJdX7cb1XYn(i{@UeiyGhX=`g?szlTyGCc< zt#^jvT<dhNW(;_o2eHR`pi!wQSPn~yktFlXL5YYOC4c#F*SZa2I7sMqf? zAD#X8GU2yu4EN`ncg*{0!Rod1M~d@V>NWT08olfH&4W*9%t83Hd<;Hg=H6SQJ#b)b zAdr8l#rNW~`KT|~vNsdHR>tS@Z;+8&{{NY|-u&C-u5hT#F=6KSYQPVg_u=RBACb}X z{MP2Zbzq(My&NOr8SbMX@oo|)v zB3{qTv%mH(ne*K5`5~EeHZvbUuh-&-%O@VzS$?xR+|lB1eg^9-JNLHuTd2?4fu4uR zNr;c}Ji*L&+}c@+XTZ9{-(sE%6{nZT%oF`)Zg0_fas|BJGy3huoJM?`=NIH(5Z~$f zbu-EzSc~WJvu`su>;q@iW-ZqIuaA1;e=xt9k1;>XtdHK^u0H22{#Ktr0Nc=VLrvD9 zrks;?Sa+j&CvskQi}_XbVcqSX@08OJZ|J#^jNI2X_56gnECKP>o^^i9x*)Fe>#Xz3 zUauQq<6S<9nv?k?%gkY{`8CF;cutj55TEUNu6b7x;)~=mI7>bPukgIeyt^yn1#(Zg zP(BB5_xz&yjarDm=2_p<-e8^IQJj8XE{8w%tg~EJ2XWoi&c|&`Su@1-UETR7#aUT(Kvwdd>Pd5CKdl+piDJQLO)D5LLIycE{CE~9m>%MQbjX$;*$ zu7o2!$C%mo^*zn(`}#g+?!)!So9lWNeP5qseys!^>ly3e81{GlG#UL}ukUHQj=;e^ zK&RW7*9XAb1I{^$<2mc`MTc{~PV0>CJ_m2MxU z$jn}^M}Dr4^f9>^e8Tf-IRSCpDQ-Odn~a*R|I70~GU`-txo6$&WqF9-pg4WATngXj zxt@F&@q0W6_W=4^fHk{(Xyi?^zXdU7_O~G3%>EX1lhNOTUS{^UV36mbX7;yWl#Kos zjFXSRQ$5cx@5b{Bo{@XP^W}4Jrsr%kdsm>d@4QxVtf`>TGxFfN-Y7@>CC@wMi-;pX zSBExT+!M>w+1xGZ7J|?4&1t;YcIC%EiqhA%L|By@JzyIeA$kF9+I1tzn z>@|I@;^@(an>_!Ynf=;uulcn|_yKt`94_Oz8}M_Se^(7y?`!9dila^&y344?2EDI& z9ycT_PLDOe9)R%-&grbP{5t2Er8xbpjJ>pBq30!X72>&`kt^rijodc`&oZs|_3mO= zXW97$jW0o5J>5+sDL2nKc#oO;WCQjA<8L&CKlFS^ZjAUBGRAKBNud z*ck4U4R{{s=iR=+JJ%b$bG z+h$jv_dS1LcD4G{b8rtd#yrOrr-OR{dt>8IiqmK16L6K;)%>E2nr}jlT%G9}GHSo+ zI?p%CiHQHl^Br;u;&*%2+2?y<)5D6>P2^Izh35$QFyg^IK(|-C67K4`r;UKgs5BeP-kabyv!K04p1 zIja!A)${F|Clc|yJl`XyA>PPyW0~_m;klJuf_RkYIJpe*PM*8T%pZG;b>2D;PBL$c zhsSuHV15C)6i)T5p1y$372@-p$2mhjh&XEP;`DO)5WL#+I&&#%S@^u?tunsz7GiCj zr<5)=^KL18*X;7&XWoXNFT^uA-uW~04zBAfxhwpQoC1IES!a1iHsa?Lr_n#RmOAi1 zGS>e5rSe$#D$jafzi+pO>i*xPI_w?Myydwnh!Jdc7p@@(3JW#tWS>2 z`mFN2R%T5$d)7PM)#oLPyZY#z?&|ZF;;hd*GV61|?CSH8+!gT(v#SrD7u*}qSDJUQ zZfE3dxXSzjbG|6!bDOK1na}1LGIH2l%ltB8n`_H8;oCf`*RLR-&G@|A!-hH^5D zxftJB1UHk5;YiOhatY!+%-b->X1$|dz|U_UWO1Iy&3Z@kylhrax1ood^^WE~**r({ z9E9hYan%MkFZQgnyd5>zjNUU(=X^N?@lBq$$e3@lzME~QUsgO5eqH8s-;`1N&E=l= zn~V8eooi>E>tfV~wzJ}>&6e)+ zF}SbifpR6{BRr2bzkqsf(SG1Q*`ocxJ-;PQV@|+x%rDl2b;e5qu=WPe>6RQD!?U?% zrHplKS!?Eb+_FKAfiVH=!}GWWHKMr>w_t7bcJyw`9ytNtXLhyvP;QF&r*c>L3wZ*3 zT+W71%B&}9!TH@9&&XV3m6_*y%S9P$DZ-jvZuneLE%SE7if-|&?`GSPXHk8NbAJ{! zkZZ#anwfvmBQo+Y(tCUd@-NbRd5(M+dRB)i*&}>$0GHb zeJRp?&UF>3*DrC-RQoLNq9XO0@86=i7BA&^^|~|}R!?^{gZ1uqIjg57*bhZ|cbC+F zOKl$RhoW7YGX#FyoBv%o67df_e=PI4M?HUS-idsRzLWFeALN7ZdGpI$%il8kwe@n( zSDCr?t=F5mKeyf_7^T--CISnpQ#j`iHy zQSkw=&TJ{&TX8;jpywgxoq34k=Q!uie0Z#U8h+aBo;%yjK5kv$d69fI;>$d*keMgu zbvZN70yEziTVFJnOo3mKE8*Rq^)7z7CgSf|+*$8pd@Qi_u*IE^$TbjGPhX+GRh)fM zPhF3GRvdY4{oS*A{mMDq9e4)wcgFhNT9D5+tU0)@ZP&?>h~F%uuG?-kbG_T{F_&C~ z)$5l~?``NS=W)gvpkGGawzcxy#{3GNzb(#l2N`SJ*3EM-8SC9Pz;mKpfcQu=&)~K( zW|!v-^Gj)n&yrEsZSy@ZG{1~}yDi&uu3U-u8o3HyZ)PvHZT5`fa=owAMf@etJ7w0P z%t+2>x`-cRwau+IL=^l-(K;BlTOnt4XHr+Q8^^B&;$Ev|+4&-M%%due;NXYB{K zu1yv%X^t^lG={n9`@$2#sPxGukuESlsLw$5s z9}8Fq_0i>{KDr##M`!hMO(MptkIw3&d#?KEtUkJDsgKU;mR_M)v8siMyXY+R*k}{l_KPvFog7n(P-5o3?cL*Oon0332{P) zAw(fgC!?i*OH*NKDz#3j$<$Ih{XF654gu9wY(rR|9{Kb@T|bIH)*kM#Sdw@To16h|FD`kR~ie{@A)_4sVgpQ$*V<$jyb;*Mkf zX7%_x5ybEExLG|urw!t{9yeoce0I*ch(8%vJw9g;;;Oq@b)U<%%<}PO)qU<&h^y{q z)&1QR#8r2*>i#b0DfM~GYh=v*k?L!E60I-SzSGCpp6qhJU5)t9f%m&@?YgVY$2>j< z`4lw{+)Tzk6sgwSlcJLp$37Hw39MRk?M0_~+}vBnJ`@cIe72i^@3Uxd;B=Yu3=4dv zjD08?@8&-TF1k_1o)zItvv#xV;7M{ltUG)*{gB7s=6dsGyuYYG#+fR5R?dU}CF9qN zUJk6g{q5<9&rzIKt>0#z3q1Y~&U}$-{Z0+M)Z;uqMJr^iyXecnU&|SYe=BFhTV$-S zs4{SsoQt^XK6ePLy0aD^M|=#=&&RQHDID*92eFS6K*Xq%r$o^|I~BGLPHZ z*Scp<#+YwpzPG|{@7?B}lZyBcfp^P%@2_$-{JYHe{^7Rw9+k1@pR{nl9Sf_MdHz39 zP5IAWKEcmf-*<<=s;Rk;;=>VFP2a`desYfD*w0T?$2okL>Np4a@b@{KlWYG3&zR@I zsk5>_nCQcdEkvQ*Sp35La*7dJp)RGjQ%cIda?! zu|BTxj0*f-JuYy(djRUTuyx>eGWKC%=fK_M35cH>xR-nz;{9dp!$Rz@?Jf3U;ok#a z=spuQT6lS2oDYsa6LT!QCh&DK_F>`mfp3!MBYu0}yX0cTrv%1bWAkI*7XH)CeOvgf z%>8*O@GEi+;%^4VhaTtYpN6>VZjRQS@o3$-htaxcz|p#Me^hs#jfLetr#V`8=B8e@ zy{hyvwm<4+^IpZdKkDT(=|hUo$M5qafiZ7%ABx+!xevvOGWMakYv7aJ19~E!Dq~&6 zSSRNhFcCgW#=44ezgQgWD!w4_#cr;pI9hA^D#cOv;%Keuv5I3Y#Wx4WIkWt^F7^AF zwEF$b68K3UbH*AtT5GQBUy9SwT35lZdA$ELSheoYIp0&9{!m68it#~cYvg(t$*6zv zionrYb06@R<;?Y#%h>PY&4IVdNr?aIK7(slO$RXkhsOtS|BuQTv#61bd=@p8@lO8z zGJ9_XR;{`Ji#jPztJXYAi+U=~Ia6iq=OWdV=VXz3nfJ+}OMHy^a(Dk6#IFpjUhY2y zan;nUULJt=EV{+Vb6tzn%L9hMlNG1&yzO}goF{X=`7+n5TCi$&31 z&Vql@oXp|3C?voKPhAEr_adD=Xp2(|8}4LJMgPA?&eQt%SAB8aSttL{Muhe-_oz~y^8}c zm(vhm6dd2BYGWYzuz~9T`5U-Xe!~5i!uzLJ8`jFzU!|HMV|H&3NP#pDI ztR8=jZlQQFoaE*{FHUy9G7#<=I8~m4_!%*uVFtItH;gyyyku`zF%YLhh(l@J#PC@pg7k%({1Z5blZC04*agn z^DP-v_7w2 z#T-kn@Mp~yC9Sc~;M2 z&zJm5=Dxig_%#`GEYW#*jn;YKSz3ZzxhF4I!q`(g8&lwwGGa?syLmR2eC>WM4vzLd z*RoY{dWXzBcgf82CmHWta@hUyZ1{-#m1+2QRbyqmcPZY%e0YB@ZFhY9(vBK45b^GT zd&tOtX>XbH^m7+-{MmuelabrfivnNjewF!*2%I4oA)XaDTgLt@4QjpgHjlH`OYaGM zpN#!kIyLa4GV}RIVBPtw*U}dhr~fT;f1*8J4}akC!Z;YY+8%OFj5A|ROI6dCQ{k^X z{xa^frK+h}_c{MNB1>^T_^i1~#(peSU%yPNuXz_O!&r`g4DVmo$eoY%F2i0hZccDN zjx(@K^);)$kIzF~y=*?!#~0Kgj=4CGxxf1<+!@Q%%jUl;J{a*~Zp-INcRt20yEgC` z_v3kpPY9eNGoQNy-|My<9t!-3`zh@IvVy?VWajgV+w#HZobAaV#ODNlU&dKmwjl5) z?#HtcUn(=V74Cv~c#VubUREYghjnlB&m&s4S@F5>_P{%3?(?3&Kf9l5gSdXLZB{Qo zm4yG#Kty9`_3~3#@AB3j=X#f`*7?|vZ&8%L2 zVkY9cx6Qh@3z&oM?Se_L?(KqH81vfs;hb6W5?FOF*a+t+UJ2hRV^5Z=m!IkhKjv{; z*OP8r3+A<&a*Z?OZLsQY>r&k<&v$%`<@uh>JpU^*&yQv1xlCrBpUKSg3z>PYbz7dQ zZ+;%)s&9T3tooW&U!JSwwf-#oZaL=STAmmLACs|vB@N|#xLM$q?k7_aKPhl~c?9Cg zfiaHrKZ*C2oF2H3jJ21X8TcHz8u9Z3>kfYs`IZb-oW}b&Klip|RN&F_WW=uze3Q)g z-Y#R$OY}XB{a!M~nJG+Tq<+^uVl`@&RtLmM|+$(Z}qt4x!0YKeJc4?=J~yY=3k+{E{MSD>jFHtLVa!H)z<|Th!57Y zbb2t)Rqn^j5LZnf#~N3RRh(8$pGbvo(X(lAw5C}5iph%8Q{+kT!!p;X9_O98;vb50 zjnBwj;|p${hZX;p2g0)g&z7;K6(6}DFNPP&6>y2$_FVNX$U;2m7p)t7&+`)8_e zUKOnRnpNMteTZMEXX#7a{BJ*gc8#0s`s_M+HmsWF(l;qy2CJsIwE8p`b@}W8jiINy zr>=n?5B!u|j`;I|)w2)duzvQc#~&_*)w6jM;kh2SeV8ZbAzl<1HD>SRRU*Dz-UqLA z+j`f#a|;pQBxCN+z6<=l%>1hZV=m5bYyUm)A@@Ux7=QG*S2mDG;QycBG;j-f0^+Cv z=X{99^Jc7frRx3=t-3#y53BBG)%~Gb#8r2*>OK{7uS5@UPIJ2Z;mL?!9(cHn^R`mw z;bB_mfpu9qUSmq(8{K(5VdTg8^H7VGILGGM@O^=CMlC)c@kawcA#X$cX&HOG@;Nu_ zwQ`o5=W`|I9EejRPNz1je$!Wx*tx3)%)g_iVsA*UEq%LAjG=`K1D`dN_7U< zFQxrFo|gnid!If}an!5yBANMIDq}6BBLiP8PeVLQo(*Tq*zeMuz!T*P#P5-@H>ElQ zk6?dFRqLtD=N~?1>KU+VZGOSy4-Z1TQ0BU3X-?)pM`q6N%gjyR+w+*)CyJND`re*L zuTY%1tqEM_wmfwP%$pUD$9R3OdxYMpIL>G3e)m+y54bJ=dKvkD9&xi@K5rr;|IeGt z$p7;bW#s>PTX`egN!|x{b+a!%PjgS@`2O+|_*{+W{C}4V;9>3#sQc$v%FE$v1CMbh zVXr=)5I9G!Lj3N)_qsbJApTI`N8}X5{~7pMc_QL327Xy)&e#j~R400_j2}P$PvDPa zu2=Q#M614?BQVy$d2GGdM>FRBTz%bvR$nKT!n=Ho`6syw@!G(3?oP3YtFP%*>g!G^ zu2B{-2=~<(T6a6wxJorOU+81F-c`|>&V;Y=ct^Z* zm1^1%?_4$B<4M?$RY6Txp&qv9Z4g)gcB0k4wie`PW4OkAc@iA0FY}MqcOD$AFLPFX zEzfuT*$&L}1Gx_VIPfBON9IrxxK!p^)&~AY9)fs9;BE30#D5IDN9I1%1g@3w+^QqT zy&C6;Yfl;xiL8zb94}-4R-Y8Oy^Q@?og5f@XY=GDo*Fn!#=fmSTdso7b9cgeSEtLE zV>Q-kwZOVo50|n3tFMxmz@r0?ld;~_HwC^`#vZJW)}2<}S+CVk_?QlBVBOmt%HZb| zr(clQ!G(cmxjQBxu6x_8dzq4+=;d2sC=X}sG!7~T+A_jbo@ z#J4L>>)!5oCmcNk^v@bI1Fj8RC(lJ({oWB?qkiwW5pJe2v_8i>Zi96m%+d2O0r6xX zpG0GAb{=kqPY>Kj&PDvpz~{)b5I;Y#KGTyb5Fe^|6+FV-DG?qeRcTy7K^8(`; z+aKI>YZeAxEKfrGGnwmMCGUfEKP1t*A3DXu*dxoCM&4%b$q#{d%YzaBCGc#pdO3hPdIU?2Q%AM+sNSP$nn&z9#St~=pD`ag;n!;1pzPI#~u@lwUgC*cc$>$6-w0Q_YcpW=ta-1;4|2SE)_hQL)at89;8+>&{i=E3R_;Sn z5N{h;J$oo0@ve%~C(AffU!gWUONZz*xeh)j@ZV(A^ef%rhv-W^UWYlp%5>La-@eL{ z`@=W54{|Lx%SrGZf$x@65LZnP(hnVCz&i|^9uT6(%2SyKYjkTi@ zpRYMNzDP#Rzgq0J`IpQ2h_8~lCtu3wv#46M)YgUlb#GY6iBudsLY z0gNw;)p+DnhBL(YLA;d)h5%V(k9#eAYQWj^Xz%SSb}_iobs6EH?Kt>v@d zD^9DX2YSN$JZ`R$vk^ZO_)j?x|Lye#fg8){-?c3QpCIErtW9)tpVub2xvsU{W#qHA zhddqb9k`!71M#y1pC@A<)~37blHnmT&coVKZtnlu(K7aYt@@YyzgGQQyAf9Zn$^Fx z%vrTItA7uqA+B1R)xQS{5P#m^WqwiSKB$*%A9Mx|)*=3$k1>DfKE(My3H+(deOn=O z-#(YQ54x*)9@gr67th1mXx+IFs(WoF{Ifr6-Y-u?{D|hnJYUDS>)OCg1FP1Y|Ld+E zzdjK@S3i%)R>9ed9KG zk;ZeLl3;wPT!Z*mf!E2LM|ZF7=T48`Sd92jfq!vZo(E*+dDzX|)?vT7=jKK-=3f`@ zz6~{9mmp)`)}eo_UbEp8H}`6t?%|uT_I0|4bCA!vGkr`>8GMf0-gUm)=2uNwmvtE) zXD!xcx^F0g@eaP%Ji%@6z0Ga!y;IJ^`1=B@H!Yt>J#P6tA#=UYxNnKT>djk|;D3AE ztlqqJ2I6lkPQNR2Kj*t`UC5g`+qzb|udl?I)$SXr;IC!Wdfj^WgmQRG;O}IP!8rTFD3jQn>_32Heu=@07>}z=&A8$@{=foo3C9v+~ zoHWEwQ=INC&D+mK?0BT%XJ4;fkX!<@zjUUCPIL{FV{$jdD4R zU*tTuaL!4AC%aj@a-9M5!-}JJaI>f18m&ppm_UjBu9LQhzCviV!ZYY@kM!FNrdE8Wat`7b%VqFoZr1vnD+6C6$04pe{1#fD(L4{|+^RA39dZGDZ{P>ya>O4A{J5KE zJeWXSZ5$@ zFydQ1Zr&jeL3~%>pX5o1?+<)Ho`N{u!93I8_1Is!Z#vv0u+Bi=p@^TTINjFW4{KlF zDR5UA`?mh{z&Zo{`Xhd(;r(~#!|-TCJ86h}TAE(v_Oj2|~#8Cdujo(alb605KF{z5eFsR(fK_+1>Ym2hsqSVxZ+nuDcwOLn z`K3r?W5d8r+9e_zye zqwat6Wg1_AxXwdgTIZqfE3nRkS?8fI*1ZvXVehJibspG98+9J~;Y@DSdFYn`KkVbp zI7584-_3~sBe3p-e$x?uL2+7lLO<^3EXC0~8)wV&;dz1abDO^mah;8R^kR?mTy6Zy z&2zPJox3;Iv2kUYKILvlHM^tiuO@Atu;ecR0AW}SgPGZ5FE zZ|vXzJp-Zy)X9vTh-mHy7R1l`=;ik z-;q(5Z=?5rEv!4CAM?@u&vW>#?gZXB-+u1Tn)N-fANNY%0nEA+cvpXmy|A-X2;;1n z=fhb4U*0E|A$}n6VK>j)rlxM5w@v!~&%0}r>TZtKy$12FK0Xb(Z8}-bfK_+iOPf@8 z-rJj^b*H0sN1mJ1?`ia9J`eYQlj_d>-=w6Z%);i48+r9?8D}Pfd|Qx5Wg_+C2sc7=HY>_lBXelom>l# zb+eB)-y|o&x5{|`=DXzn@c+qN%R_-5kuwo5kPBhFFWNhs{}uQpnS1qm;J4hY%jN~{ zUd;0ockdDK(!eX^iHM^fd>8Nb&6wAWbGms$;OL!?95-)QoZji~lMU|){Ikq?4hH^1 zo)L*u;GKLI>t4}Fu7Ts-tb0X*Tnx99OW=;~zHQ)caw2?+JPGb4V;?H|x>>J^fimh< zq4U6=s?d2b>pb*h4#PAab*Z>go&}E%JkHJiueig_J+HW1#y(WsFJs>-bOw5J&V0q^ z!T2@X|26P)fz|tcI1iq&eWQ_wc{V&po(sP(b8mGXY@c-=`qUu4+{f^qtXL^?-|!6Q z$uUDwPPT;G*~*Y>9#Mh$3wUTk?-u7w|yIp%qHpLqC1c?kTf+urqtj6L2mH!yOt{Ob_^ zDDXnJ<@2SxZxzOTEi;F2H6HnH*&^q{)$Xww@IHAO{CnU-@;1bEZ;yrlr+a%W?*9Mj z-ZrbIV=?#t+UZ%kqg(^4Psh^g({XXI`qZpG9oGhN^&|8ApZam^Td?}ktbQC@f%vt0 z7d=L1o)ZG+$jnW>X*u8PaeMFM8pHQKCG)-01J97l5Pv1`>oVV~&tlu3_Y~)QivkzB z?Y*lN=X>?}YinGuICIz(JX;wUwdXmpd7^dXJkdJx*=QZ%tQYe4ef9 zNACaD?i#~q)sM_=tNM|9xOHGK&!Au)_1(~Vj8WfRF&|dnnbmj0FvnK)omqW1EFJMX zeNOW|@(9Eq2t3toIX~^T_v$XaVll?g^ticD#$Im4dbo!+{~UQJ;vWWHAahR^$yxAH z_vmc6RGtN|k#SD8u9H!#tsC4~sqp_~u2G+@V`JeTJw7%L)*U-G5w1}@1+JBm&$fnc zu6J7#H`lnWW#AKK@cC};|F)~#md_}+T7wbzGl_e z@=>3f)u+Rl&-x&rXrFR^^ajtB&A-om1EJ0i~GM}SoD-c(WuAnbc9Q*&>P&e209s0_8f%9j|*u(Gem&J478v@_# z9yuNHI|AP=qqn}hKk!5He8ltRVz|J474v^K@V{jA(04Bfeofwn_}g+7{H~0>{|@h9 z&R5Yz?u=L%y}`J7x!fG_RdNEX&(^DJ;BP#B4deQ3wf)EYIFIc=-a%h67h~|uU#^w8 z=SSV#=k2O&fTU zkG}?Y-S)|D?%Vdq+}yYAPr7*~x2x{9KdQU!Ptd>H)xWksbNtz1wRrY@nR6Be#$GW0 z;ml379-axWR6GmD*|IV82ATVy`*~y%yxrp?(_r1t<~@qDE;WIX6X&#A{OP`m^*Saa zhaHUr>kM3#gZK%G(?5^!M(lXL65VJJ5+bx!#h-W z)^W#6!91$<6_tp;rDw5kJ5=itTLuFnI1A#<V^O2;3uNxYOYRKj`HDOXelrp|8{-di zE$UOt?R_6Jx(e|H!I*`L*CD>xos|xM7K~Y~ICK8WZ8@(G#%%Vu<*zd^HU;B%24i+> z4A-((=30IW#^_Gwx^_17F&S9bPW36*vQvFJ8vD6ZeQH*pj>Z|-ne5M+@r>0a2l3Mb z_mL+dt~+@&eU9Q)@cD8be33h=Cp z?g7?!r|xr}&z-u@$6{}GmTOLWql{Yb{K0MY)p^Kx9r0g1ZuQk2ZZ-W=@qrklvoRX= z{h^8CbaOceZXLLtT!47zz}@6oh@a+WO@HVuqmDo5JY?;Ibsn-%uOBYZ7+Uwkm;`v3 z$IVyDob%eiW90sb-xyfm)5hc@K1p$UvW$BDpfkXF{gCHz*5U`O&F%+!n%oiomplZ1 zNzQ=hxVis7yf1SfRBP`44+}kR`@B5xN_is2=>8v#bNa*AikHFq>>gbQZ}GV8ZDrsp zITd5}$%Eh;IUUCH)>9R5y^OI{4Fl^8aL=ps8DZ8L;C@!=Gs3Jhz`LvJ6rYFtS*0^D z7W-D!SMelxfQ&t<(sy;9^D5m5{9LPweirauSNnM0S5>Mt_p@re$46(ws`Y4&QSbBf zqDr;qzEw@}@!YqnhXbqkdCye+Q*rE1)w449=f%J;yKPV2l$qx{GWX#_x2d0 zw~%ozendSuCx4IgW3pTepBlKA`TR&gEH3o^Ibh;oQGZNuaWcs#Zkvy>aQ!~;qyIyCF;EE z(!f{9SmUlyZsxgbwEQf5o5tV_?7CAP0pA<=0r@J#9|`=pjQ!s=&CNaEg>~B5n+U(; z=05LwMIH#h8TcJ}DB>Tux#zq7D`U@h;T@dQ@?RnsAigs2YMJ}5JJ$Amy~oGQLR>v) z{!a0Ei0^arTpY&>2Jx|S z8jR1=zsB6EIQDt>9r8^0|AH|(1J@-WKGnxu$9!-G{+j0>isNqB{fx}@qR0Ol^RnVx z`)hI;{B|(rJ&$K`%!e|^d>oAV)Z=58AihklfIkn$sP4nLpXhzoZaBxN?&j}3ZhMQp zpZnx-@b7^S$=v6oZtiWh?qr_ZYTe1aE2?!TXJS9AG0x5~_OLop&V;+j*tcrk z1J_N0Pg9)kEn`2c2gul;>a%6+PxW9o_pKUtDBqRE_~mZyRrPS0@oNI>oQ%Q#RNvz9 z;pngG+hyjjyL~wQpyIRPf6DnV?i9XvL_DnCH>>wY^haF1Z&vS*K*#ihWB>Pbc4rmB-Q*?kseyaR9FM)@oUG%XfpP^r#61eR z>>29j+V|kT=6J4g4}Q_|!5a6Bm9dsR*UMas>OLCl*rU4h``DhzK8C-~-7`hbhaZ-i z+ha2G`G=clX^-v!yfU)q1&{OhL3{LB&+k!t=6Zb8Ab6gPb?o^l@Io2qch9oGpSf+l zU&u2tX04kw-J>(W`)UtzvVE8U>kQbse(-n}$LI{OclP|EIG)?1GhpjF>~XFO!);Ek z>!(;5wfae)`(x==ietS$b#{;9c-4K>Kv;D*tL~%DMI6sFXEVlGP1_)TzC07Y$j$Zs zG)&HfuavRgpGLd6-k-+F9Frqsy+2KqE8zcgbG<*^@3!?mDl`8lWUlKa_oxC`{XVJ& ze$(SThd-&`GiSjcc>G$%MR%;#f0tGgr#95LaJcNUN_e#INsFUz^p} z>1mP3zKB0-#=ALZ`nia!ug&V~^udU?)fl>id^y}T@X7KB#8G3Llg9hZqv5jx<9&=@ zv;^@B0$(hDg}BbZMf6C;vA6p&182!w5x*hu&F+hl%f5Tv7i7Z^xG&6yACc?e$KC1J zn|;#)PnWTdeYywIInOJK;~eeNJ&;bn<8fP;?g6vz0b5J4#&BI&zwHCprF-BadbQ$Q zm+pa!Xx#(0uJ3&e&(FReW#;yC;QjJ!#Ia7k>jJvo&3*V;_W;k&&rLj@UJ6Ig0IkpZ z^jbK2258;+>9}Klj-CNpcm74_wV!nc%>8}-i`pPQNX~%=%hp9!PMY=EA!3FPINwUfTycPsV5R&riD3u}?q$(|u6{em?Mv zGWP7}x7`=V!|%$8Fy`g_7t=*@M_Bc3h4uZc`nD>7RbR8}+iDHsy64Th=M&Nq-|cgn z_sZFb{}%Y5%>6lX+`k|%=9ch&B=SpKV64I7$o&`9lzINr&Ew4N7uD39G2`RU!O{k1;>4 z@rj5}lPAG=#@372FY4`~H{rG|v+FL%A0IIPfCP!}&{O&X1n4`KQ3>^S``K z<{G!VTg`)aD$aTK$ec&LZ2MF1asDAqzv5hS&Ir!YuT26sm)9V!&*&i&;I1AYG8gU{ zI90Ah{EWb7$@>sLKQJ1C@4Yk)@u7i7xG&>)^`?2W$1hJnT)k<&$>T#a5x+gKdUhzD z`*n)qbgn!Pek|~l@_!J2Ca`*z{~Y|+H#~0ppq?EvAMp`Ea(({PAmybDwJ_2F4mJJ{$4-0zW7hBc30)KrTW2xxg>Tb%?(j_zgGf zRWnx}2+xzb59;g7Xq|z}2E%v(l_9=d1qdJgek- z#MR5GG%je%X9TQX?nVEhINtSJY+%*27vB3@E5&Kmv=`p_+sVi0{7s+5+=t)N6vx_s z>o3oS&kg){xdicx1FNRohu^OC_^C7CF*4To+l0V5?$ZhozccVX@^r)>3jBy%ggBnz zo}5Nclb66R27XztM*NMyy0=fOL42Xd`5o`K#WM2x?X$qE+?R07+Q8q)*r(sro0rf# z6wiQn1^!7Mh4}u!2V|VV-%xL^>k|0)h&&h8=kg`AK9`4N!6*6{b6XjE{CiI~*Y!L8 z;+z*_UB4s0zdX==NiyQ9srf?1G4^-Wl8%0u9ZfhWm1h~F3ZK^ZkU@Oa>-* z#DCDU^lq8C{SsK;bNE?vFjjHoa1iH-IrCiyTgiCWLDh)!AMEDwo*Z+EjQJ1t3fxyN zMO-!NNe@!I48Az9?#xqT5g+Msv+m4Ok=Ma2#cAB3mM8Y`;GLR>`RH@7C)f3W;`CIx z2v!|?(yC)m=JPL&pZvardZ$Yu!Bu!G8umCa2@Sq1iNW3poq%Hh~l635ZAQOGoRQ z14rviN9#KgzEIC1heMaheDAPe{wss|)sLrO9f#D9J&?;G%*C3TC&`(Js~>yN4=RrO zA5tBA(5hpPHSlzep=ZeDu==qFt$ysW4Sq*s==bC*xF~S3T!*;oX!)y-JrWUD9nGp^ zj}eHgj%L--a^9;snLq9+TRU?;7+Bv|dmx`W?2V0~8_CG0PIc@t7e*d72IsD>OJLol z+#mk;{{EULO|C}#@9tA_Vb$~$&ZFKmtEQ)Lo=lCWv*b$nhQK$=od2%C|0nN59PeX3 zr_gzF4g9>!9A1?9u2*Hg>kXOn&v!R0hE=;+h#giB#?k{6 zM?QyD$5>i*jGY6kj%L*{mU(9DS)7Z*6XXo|w!pe$V^Q0~Qxu;It9G$V;KvlFpOja^ zGiA(uxKPF%hu;c}{A|y$&xhv+E|R&H61fz{UpBrH-XN#Io8d4Q9i-Kh3&78*D_pjmFT4@-|raX9HUIXM-wO_orF4Yl!Fm80gQM z2gzxOUl{ljxj*6~1MBm#;XK5%6sJ{Fp1nU*J6o4N9~u7ndc3YmhR~v9Gx>wD*R~xKBT=%N^dwt1Eff8za?1Fd_t;Z<uVr@_x?46VDjA!`2T8y@dE9e!IbgOLaKp({OK-Uojgc$vE!_xAI^U&xr_&kcdq zzuhq3pW79uce+!C!nJP8r%q-LsBtu(`i3(4y1s>s-0DwoGoO0=#qnnByLm9;>e+6z zYT6BZTi;h>Xx+Enu!r@76fcDFjLm~})vIT_(U&WZwbbKz8$)NxMez8*H_GLRPn0*p zljIusK6m$l@PjhyUjL{(8-7COJWtEqhv(!v_?5t~yHk21{*H|G)xReXg%`QI7Q;*B zO1RYBEdsBR6X11$qqR;%e4FAlp0_>W-tG>pUba2_O>ypndfC=~#N+f4)RXgcN1jLG z0>{hPlOwGItCzcDEk`;lPGb=^5BBQFseyaR*#9H_whTDzJ3PXC7HACpiJT4V3`FP^icf~u1TK?v5!V@r(3=%6gw^j6)@Y~Vti^sg z0w0i>bNz82#jkPyne)*mft$ZNAp$If41y5cp;}6Y)C&-!0?UkKP~nAvp)}XWd=%;D5>aucRcp#=$C=Nma`H6Ht-gi`TP)Ay&S(9@n00D)ywe} z@L|Pi^>Tb=Byy~k$C=Nu)*6!lcL>~B#{GKiKa3)n8`y zSF;BZSB=c-uV&K_SB=cOJm(4KHvv&4d>PUMh2*(!guv8HleByh+}R_;-Q7 zm+KL)4!qB8dwbN)d>S;+m=SQ(z%Aq(5ZC8gQ#w&`S+0>j!l`5dd>WR#+Mw z6p3l5dbOMgt6pZ+tK}NRRWGyZ)v_FM)yu4Uwd#Yo>Sb2FT4B8nRWGyZ)e5y}sCrpG zs#i<&OGDMmta`P49q|diKW5d=a=2S@=BC=Utb-p?oL22Dw*rrwr^(FcHI3)~yeUtH zbx*dWKTw?c6bD`+Glx}yb!XxuC#K;y9yjaGv>fo6>cfl9`Y0N!uUYlP%HLu^7wo zX5EwA6aKw9i__8CA)naJiqooHt7Q08y^9WN7aOe?Y8o5VD>kTCY_wjv7!$1*9n>o} zS|jG8{$jmiqcx({U#;TdXpLy~7xyGq{bg2v@%+T9zqmiK>aUjhu=>la{<8g1f0@-^ zmXG?&to~}1hMwH(-}6Q@5m$}O>aRw# z5Lb=N>aRwJ5Lb=N>aWIeh^t;^)vIv=;;NVBqk1*ULR|GSt6q)nL|px4R_!bY^_N+- zYgCQ#>MyfuXSu1r%<3=8NBw2_sJ|LzU>^0CS^Z@>sK3nWFUvvwWmbPRs>D3%FSGi~ za;Vgva}U*DmXG?&@=<>^8XAddto|~qznBA_vHmhgYlnI@R(~;{#?jhU!0N9?bWpp- zsuy!>9Mr3^>eZwWan-8{_PMd@Wmdi7uy2i3FSF_uhx#^Fz09gtTrT3Oms$0SD?nWJ zGOJ#3>k!v>Nb^g+_BiZwW7W~DI`T8FagmR){8hUq9Ix+_W__QG`#a*Qomo9-Ialai zT+22&57zg|I9lH)E$3e}hHLpvo&_Hcd_=~&n#2Z)-AajU|*R!;Gkom-^*O*V7?#U)KaBm-P?x$z5Cvj&V&mrzS8J`z%7X`jlE-a^f6}rUZDA4#Pu0xo~kh;5Le$dr&YV=|AEzaX7ycj?ulw= zR^K&WgShHt`KVsa@fjMYzB8-uns-55bu_DvmV^4vtiEeL7vt4;X7!!rroJ<)rp%|Q z`iuEARev>)h4ICQ-%re~W#rRTy~cc+s;11LY3lL4YMLgaubb-k-OXwJzMDBTRj-*Z z(|G2i{^FhARQ=U>K76x}G3)o;O(KX#`;J!MHNk#1&GYf*e0d7u{|x-BT!8qCfz^XN zt4-BwmXAK~8e^ZEs*YyWu`$kkQ`OO|I$92EH9vFHXJ3;^uuxt(od*j`k*UYoU(@gzn zRzGsznq?}V95`B2?0>Txl=DnjHMQ}o9siz2GxcDLOjviO`Eh@?#XQ8-gXZaq7bC9P zwV>65Ex9MUKh3Hszl%0g?d-ivG!JuD?OM>Q702HPXtqA^rr^Dmfvemt+hP3Pz`x3P zZ*$$5d~fqcdNv!551b(5z0ErY?jmE2%})*7%iS^#@&17a%E+hrg@G@TnUB7=wBej% zJl>`bo)B2~=SdR~ztiJp-Jd7jgScvEo~kiZ5ZC>A60O>uG!54MdD1Lc_vcA-;dg@f zzNdLo5&u-?m}PPW{CVIn+-)p%^C9+;S3Ga<> z61cg>M-V?Ta9bJgjZY4oA}1n#df+}X-W&fnISsx*9s*w)_zHPA;_9`w>2S8k$7; zae9@z%OH4dV0{jD8G`s$#pxaLbodvy<*%A{=H4DwoK{UcXGCIJHddT&c6=V(_13eT zr=@zZ^G9$G#cB0m7reLSdBOPegE2z_4|Uu4v5I4jEw7iE!>xhukTVf~D6l@`I!{9U z8O2eHme0$%@auu!lJgMPeb|{^ra0H4`_R_-g~u&V?X!*7KHHdG!LvUFR_I)f-&m@Z<4tW z)xr3EGWX&4z=w{HKcQ(P(giiZ|6)#PA&-FZnPPD|QGOEc61clO6Y&8u=Rq&nvqRv) zfzyNW*97CQlQS`XeBc{pzIRgK$ui&jgv|H;Lmmj@JAmatzaUS73j@!RIsf~C|08q$ z6*A|?9c6Roz-58UWzK{9%Er(;WX`i+<~#@F!7%PC8xP|ua%237x|fo1C!eT$DH&(` z#7d@S&jGV?^e`1|){8ug;PCc&uJUq-#m$%xMhjM`Z|6Y&LsKarX9(!eWZ z=D)#h`EQm>5Z@knr_B6+4vd=ey_WNzfseVnqIX(14%|#eKCMp*++IdLtxtC|pVs<( zNv?pSb);3tWaQIYwKHF;XR(K^uL>Nk9s05LSiOtZ=RWJ(T6Hw5j$N5gv|h|7TCZua zKKGO9=Yw~tUfh$`LA_cB^=cih7tUMjkChL-NFEHA1TK}C&nCC+&;R5?#G^H$cPTy# zj@FC$s9s%D;KQ1eJ|ZKBHnD-@WW2Wx?m*TW|L$c>n5x-G!=5vdj3*(-&d}!R0X6#9u2LnGWGar3srO;0+ z&U|JBo+;NN{(9iI+?J2}E`?)0Q9KF$JQ)8)5U+6K&nJp$vrXOr{}6b$JG%_=UjqLo zZ$!NQxY1I!-tifcn3I|WZZ2mbuD%;jtMA6ogOfFePLYdX_2YP2{WyLbe5S_G>c{a_ zaJu635cl#;xaND|G za*vygF|Wv6*PDUgaobux2>f4}Ygrt4x!cyVN@o6F%FO?pz~9Que}~MR)ytNrde-th z=wo<(+UoA5+u`g)&rdtuy*xkd;uS}p?b-(J;AWofy2{A2-N`cYX_qP^pLS_(=F{%) zZsybOLK*$o?y|tc+}yWzSIf-dTDcZheY5FkecQm%`qI(*GS6IpmS>|~p3FR-l$qy0 z-InLeZp-sE8TVwnw*$ZH<~`YNe&8Z`BjU>ff9AG*)17SjtW})(Y?PUg?rO_tx5vj7 zA->m*Er@BS`tsgrr}~b^=U1ZobX+B@KF!9SB&tu%>eKAOh<7~x-o!34=TV>DmjkO$ z@0$y&PtEGnDcFZZ-NR#K-u%%;Vkn$042*c%qzu_`QK2a6hmQ z@u%GPt%3D+$`z{h5l>=g6F2^{uB>-y;R^a35pVciM<5b>3PSIg;$Z*kYpg};-_;HtpYGR{)_UuEv+?{W?NM__&a9?6fy zbWmS&KRc+e@&6Tw>7c$gtFMnD{|@SFv- z4yyaH(Xi@nR^5+fA@22M55;uw`o^@sEfUkw>+AOV#P4ZZtiYw zoQ0T^Ghd}oL;Pmr0<9f9w5 zcfjXP$NK|6Br_kcV@wCy>lo94`Mj)oaK<{mCg;Ll$C&oC*DgE4P2Yis_Ju_%`KCSIXUC|6GpgK<`z&C;Xe73Lliu zf{z?`QjCoCCPnKz1CG|W5bo$>+SA^@ww5ICU)#4N?_bLy$@@2^J^DJy``6Z+bdlyk zjgl^vtKpG>RqGCMh-Z1+tXi{1Nw+9Y-!3!%Xic%+q(>AV2v3(8pAp3UGdHGV65?|_ z-Z2mUFz^C*rz*r31zzgz%p6t+{z@K<`1-*9SscTEo|UB9nY}k-x>O+UcdzH;pSdv| z(bq}pO}dkR=EiiK4L9}q%`J}S(5YQu)sFA#q~0{Ec6@KAftm;V&}op&clmc?%c0XH zif=<)y@~S})9K3KU8)!Nq?77p@48uIn8R)EF1Q~${a;}9W|u_7^AxA^W#;L3sqIfE z^``B~8$QOY-ekQx&GWcfy=l39>T&ZjnYn!)_zSn~PldbVG>qBiwmE+Y#_tZstJiG2 z?pW?sXZ4!7(eZgYw>myg=hm7B`_s8o;I1eX5G zviGW9JSUwOYEF8woCtpwSa+%AsXH@i9>#3(F-aw``p&GrOInAx?#wRPuzwed=`smc z9nGp^7ySDz{CoEN-04z)zf?#5v$-zuiqpDFySxIcAG?&n>PP0;MR#ULj_>WycANWHM7(9-6Wv@(a{IvQ&E8m7au3Dn)7{KJxnJNjW#pfH zUf}a(a88o__bf5yj}_mD_>#aSZd=!Sx2s@ru*xQ|@_J^{H8X$~?QOPnl;|^=T^3Nmuo$S$*0YpAlUL zD<3-jcy3*X1-?=_FwbiPkCB<%gupp6^Sm?gJ?^wv#2*MeRZc^^An-J|t?L!Ht?PBS zt>vA-@40zqx)ud4cH7=A54=)l{%Zs4JFV?)h2mVxHn-*Ti`(+~&29M{4t&JTe7dP; z&CNZ|e7c<&xUGzQx+MorkUXwTApJkET&sW+KVw~IW^e7X${Ji^WM*=IxoaZCA z&7;p#n@69gwqDiItUB8KTQv{&e22{Wb@y7%KYQHfKj!BA-5bi-&+g3vw{&ybCj6);wI7?pT{&y~et9uk`yp35|z^9++YPqdDlM|HG$bZ4ecLVTj; z#2HA@otaAC7tF6a)AD>YnExr6^FQrQTLRArtj|jBTgvN-({H&gp9SvJI>bM5_ey}5 z243N|^{#PSK4mi38~rZCd^UTWbxhHBA;@c2cKc>+^Kc>|C82opkV^9|RPTMOR z*1c+0t$W>oxb9W6YTY{?@lO6M^E^3PYvg%yPsNMjXsv7DGZe=@oP3r$Ee`%$;0t8z z&&ij{Y48;?)_bzP_oi{qOpo_Xg2&0p@C|Z*_-=QfeE41&XW-;$&vGq~XguFr5O|v0 z8u4h)u7OqSKGoR3#u5AT_#pfN7dGA)!98aGo{#^`{yA5JIQ%5m$27nl6T#2<&%gNJ z!ivPp{bBsv;Nvf>4Bid+nPA4Tx{h)4v_@Y$qE@Ibi=_IomtR1FVSd>@=H z*T6&EoiKM~sEk--guDdy{f~6o2xltJXS3X$!AOp~V+lM_E`^a3bL+SUo-CKcQ{4P} zQIT9Z5zdp7;e2@nT;R4mr^(E7y39Oh$joz=yK^2qTgG#dxiWq|GEc6A=gW0)k-JM8 zTrBs8@eZz~%Rsn9W)4`V#WUbFayDEhPln6oJb0sw+#{9pEVxQWUXkj+`()%8L4JH! z4?bHj8#0-(A!9!)NB_>njXTe$WTo}39{AKV2nRDj2`%Q)? z%A9kO%sKIEe70X9oaa8H7|xfMzy)$SjORK2j0zafo9o~i?*3`;O!t|1E(Y^*%$f6H zTFI7(XVsFPMZM+qf^p zdmALWFXH=?+!v?f$DVRFe&o;bu1n(aW18F_Kk_fe`L4n8Z2XumGoK+ca~$d(!uOAm z`OXY^Ab!l02jRyonRDm3hfTwe6XhBBk?TPY!wT`^WO*)roZ{x6Z`&Z(edT=om?szE zN3I{w^3SntP~hgD=i7kqK>X?n_;I?-_w#*>^Zhg3{Bv&`@ZE@CGZa70a%ZODNA3mU z{BuzoFejLQ9&UqqGUsDXh>ziWm=n$Cm=n$CmdJc=je8j1UncYY zC&2M?F3kM64>MrCgT^}e`ATOoo+LA#?B<^V+Au|~fSD7F`jw7|wKGl>ukTh&9ZXXTew-bGT|YoFmVLC(4{>lFa;(lZ~&2^V}Kv zF#cjZV?JCU?}L$_#p_|@M~_Z{XSlP{;hAy;T=UB{Z&W96atSL50u7H!> z{4*S5@jS`?c3&N)KP zf-~fKFxJWO+N+y0h`l*h#_o$#Mf%1G9^IDvF4wjiiy8Dqf@Cf%*%-twM#@vlEWz5|uOJ<(gay~pkUIOR1A7=g& zFyW#-XZ_b-1~sXeN}hfzma5nY>yo!5p)0nVKja3FdF* z|AVvO7K;xa1#fj&>9nCdkE#APhfjf_Pw9_C@8TU6@8x?jeN*~g^)YSn??%BHhoNh6 zpUXqq;=K;%!2K3~fp!)ju-MQ!?6BH8;xIHWhE_vAG%h~ouxOxfO7A}nhE{_oz@rXd z0`pAi`vUMehoN`zd51;Yn8o{*|ANH>YHQr$gJ;1PEq*KkrVZ8kSOu6e1`mQK9X@e*tp>5^ap9GgUTnCOioC3!j-U=>t7#fz8Ih+Q^9nOHu9qt8JTD%8ZmQ-2%JJ7kL z+TnI^jl&1Pv?qFgN4UY^W8g-MrISmV99AA^QvTl)ozP^kXlrwM;Oi2~D1G2Oc)P=6 z;0}i`fOj~25!`9<0cc!8-&FQM2F%CcUU1Ig2{3;vU1MZPzs0{teM_KE>Ay!EOAb1G z96ado74Wdd8k^k#wHbWb;jKXs4O|}Rjh47{ zzN0))JzwQJ8grO_`Fno88VB>Y$x{yIZ-bk_{B1C8MH3FItqO;S!POQYYXrj=Q zRz37n_`mH1L#*)EsgL`ZET+EbDTme8sKe^xX^WpJ0aLFjdlY=$;bY)2i$|)#7aZOS z9=CY39emN@PVl6~&xq#B4j%zuaai?FIZXXa1BdB{zjx>_8^KYV{+HXqF^f;vfa4bb z6=_S$9X9af%Ji@)6l=A*LTZU^%*coIx|!rwR# z?zH%?E5T`t&m04192N~Zi@#kB?sZsw?{|5qgL_C#oo9x@2OT~F9&}iB^33$556m-z z&w-Cx{B6}qK0_z8FFo!swEKIIzTE*HwdvnfJ*OQ$2|nZUQ*P;5hxuMQX7QN#!$MSv;_n9F35QF-mmH3QCmpT>Q$}U~PW<5`{Jlo-l*QxFvWzlH|1N3EVlICI zT@(%#?-RWvvd!!EF}*Fb8gTcnrM5;_s8T3|dY72f=BF zFM=}`|3I|$S^SS%!SqM@|8W%D@9+fpfW;H4pSqN1;sSWk;c@V=#XkzbM=buyIq-3d z|M>)%kIMe@NiZLS&wx)kto*dCbp5XHveOQWX7VXrzdO3@ti#m3j4~$uJeZHclVE5P zzFY&QyztLOGyM_%->UPH#lJ{{DWmjX^nx!t3|-5vI1F9OrW`)aU1{{wVzZt)8laJj>M;L1=Q%BxP3r#h5}KA7}D@}~@r6jgv5ELQw!d85UP zp=EiK#q!0LH(RWEX?csoXTWV1Yu)VbeTrypw|u)zmrY&X;V^lZ?{GK=?sWJ7n7^Sd zB0XB(>o9zBcR)p!N5RmiJj+|bv|+INLV4j>J9yY((Qw4!v*4o^uYj)Q#~h~p{t%o)gF`Du$eD;O+4=hAz@=N&!)=9y@C9rZ20;4t+qpRhOqEz2)i zyh?3NT3n&Bmo0vycyh(!+l8kb<~tTx{H8K+iNn+xgD+~gvJ*@ugQ-7O>hNhWWt4tL z0?bEvmC`FLenTU;(&F2oD^_K3MKieC;@kO-)i?}ov6RbC-dKaf<6!Di{S`;SO%9&` zZ*_PFxHXig&Em=g>Fo}yFWVhfUpgFCJ!y;II1J{Q+A_4|EPm4^(tBNg)!FaTkAM$^ z@*H$|ROg_>r@_!|ct!iMV-C}P?6|{yV9F@Z>PqlQhv{GJl*66iQHMo8^_u+97(3%I zw8YLjJPAH$@tsldd51}hjayvR1ionT8fb}4SiH6we92+@6q|JTDEP9)oOuXV1TGyK zSClwRxfQf0+SXETMaZ>_8(P4P4(|XrSzJ#)R#2DfsUHTDPxu|@z*`-@ z0B*JT?ox1@!TiU6FH`=PP<0 z=J|>~i|?WR6?+|?0QXzGS!EA6d>(wz;c@Vw#aoVmhaDEp{4Ls=M8k25-`WU1;cyf9 zq{W8+ryM>*`l!WkYXzUS_*bE21jLB=dkK&v^doYZn9Y8^rmKu?>P=`ariWN ztHl}@H&I6QZ$1caa~S^J)NZk9YrDf0q<1)c1e~_G{t7r_vBvvNIg1+(fO{Q23+{7x z47}H3jq98GE!Mcci87+c@DQ4WHLhESf0U>G68M6{SHR;I zZx#&~9j5)8CM~XM1z&bpG*CwM7@kZyoCt!_sKxauaLnNhxYT0JiKS%@LrW=TRL|W9 zz!eTddugS`o0H%whv{!Af17sIR-MC?E2TY?PPtO@8QczTwD{dB+vIQ>-0ZMuYq40e zE8Xhw1i01VDKO7e=VoYk_sB&yLzlZpF0%PNxWnZc2k)?0Ho3IZ;j>`cRy~qwDQyeC z=P0<(;&%^%_d2Zfeus~N4_MqN8V*`)>YVAJrpWEgiG?owQ$i!C}5j$1OIzqHX0jGM%*8 z^!>8K>LWBM&wHS&bjo4qx;b$8B)G)kQ()*b`Okr44xa~?TKvAF;4+7)^X7!b_g(^5 zI6MiibeQ&UuCn<3)!?MXEj+)u&fykt%Hi!`_#ztaYXVU)N zzy}>Z4<2;*0+=$Y^C8i2%;78G;|@=OPgwjh(RR||5-@G3?8lplFFJe#JmK(B@Fj<#_vT55Y5!*WVCtd$o9TnWqMwiO zZ^VM&mZ-xOVE#7gmEcl`tH5OrSA*jY*MQ3%PJ$B-w}7e3)Uy>#T?Y4qsmow!zJ)Rd zp9R-Bd=8v)_&m75;W2Qd!xz9!4v&MIE$%1*)3)mDh=OU`;2gNsVbQSN;fvr7hbO>0 z9KHnZba)b+cK9+liGUzaE-ZJd)S@02u z)%W8Te^T|IaJT_{(qYQoa?0VO;4>CeWpE31iMAaT;ByWuKlPe)nuxpDDk z$4vg_H_zk=D4TNi1eEo42K23vUg^?L(p*g_J?YZVklqkVZ?x%=9O>Ib=^ZYe{skvO z>C~%si&g(*DE+ccFX1~9q9@|$(V2qC)|vc~R-0e@mXW=o^nRNjogjTQlz!T#FDoH^ zJd}RXrBhE)*-Uy-+@>!-!*^pSy~(DVm`5g*p0nv@eRe#QPT$pEzi$eOatw-ncOU{MT&)am~Wj5!U3i)0AuZIVVVl(*{mCop)&J_9li>hrsi5Bv2 z4W+l*^i?_1=|drZhfAkjo#!c}!xQnjqKWh)p>%kn^f%JqMHfQp<2L+$Ckss>39)$h*MZ0xZR@|QguTm9JyH51{=A*M(Y-VIqy090 z9kfKpLh0~O`D+{5d!jC1|I(;U-*}Sr=1_WzO@9Y@m*zt0y*B+_RiuaLTzcB3H@1_0 zIg}s1tKFt4_9nK@r2BoM57W*vc;V?;Hf;0XUq+0&bS8Z{f2*F4#7S=prPH3$f1{Ih z`tIvle!!-8oFN?=3hB_H{GWsmG0OOK7yAu$UMy69 z%+;T%Af^1$q3DO5c>BBbvSNYaj(%0|SlEI(A53SLBx?7_KI#;0e zP9eS1*7HmW=|@88M{WA)8qz6K$PXVSmv2wvo5g3+Z-ysI|L-x<8$#)gHvRvG_M6k8 z^o&g(Ya{(!DE+)m*M6(~J>RbL_kzD~Aw3yNue168VU+Yx{m%ahenQ>191Z0^X7m3O z?cZ`alzzpg|BUu;g=XLGtxYyv`*F8YrjVYq=`ReD9;*LVSN{~xZ>7#c{wbS34{yps z{VI#O^j6ZVXY!ZTnDj_Mxw3xuKT79bpx~7kL+KMXUHfsrQZbYME0s3=js)rLq4e!G z{myaH&xFz)-?TpxubxSd^S9d7nl~QePdsDOwSJ5r3*|p<)BnBF&xg{XPxX9&e)Ibu zg?_z?wv_(iQ>2Ib`>H;h{s8p9>O?62NtfP1`sq+QeNjCRPnmbQD}K}sNGk)b|1P(`higXgEs#|)c5MMq4aY${bM|TO)!)Gni8A-8?^bFWGKDP zrJp99w!D0~m&efG0iE2%Gm}1U(?0CRwH`?k()!J3ae@<_0z zkh#PSEo(t_~Zk#{@(WRwoiQYK~Ia#Gfz^-L!Wri*Gk*Lng>4l@sB_F z3A$rQwB>&N;cXv(FnBrt5@g2K2a8=H-sgR!++ls81LmI;LpWvrT68C0A3$${*YZ($ zJ&W;_Bq-hg^Yy)xgm8W6o6cmL`s8%_`hE?p`gn(1=s#ZO|4M`H zf6AxNz3w~3Hx%trzBC`vx0H{suN|!V-pU8`o5*67rPU;ue0u(fp7L@0JD32g4*$>N zED6eI|3wZ~1d-&A{hxgMXWVgO%BRe;MZeR*?>p`Qi@p_nJbk|d_GRGWe`n)v(T_;; z|NOHd5dX8c=CgnH zRaYj(HyZXAo%~f6lm^VRp1E0f||^+DU3BuMp@@$vQjEqJEB zlAC@W1kLXz&HwYyq?am_G7qBvsK4WURG%hYU*B_Jm8s@KYFi!eCipR`6g|`DlKXb~ ze*6ypzKxIn=kvWlg0THp^5g9^S>gZWTkYx}bkCx10$=_lX`=7d?wQ7m0>f7K073L; z!&I+v;s5!z^j+i=gGEdBQnZ=BwMZ7NYPXb+#=uN{i{gy8Tjus7=zRFW2iJUZZNmS1 zOHH!+uIjhn^{a19B&toK{r@f1)o*|M+Y^bmzU{8N*72Q4v@OfNv*}$CrkldQh>_n+ zLh*M8&9fTweW3n&nP|~h4y?*w>5l}l?%RTrJ9o3AGZdWX zyO`(kb$8@{skGFg;NZH3AhK$8u(<1v;;(cU2jyK2?@zDoQ$0adcV$p=-|b6YNPac{ z%e9MxNadq^mIe{kvl?9gc#ujx8r0<;2+C~RLAlyntGb7R(zSbnMXC?HHQAQW=b$IK zDu`yH#b0@EE=as1mA_QKD@d-}97MW`?@rTZrvCTynI~@xk{@54&#&E+&y$u^xvtx` zq{C&EKb$W$l)pgRG1?ANBS9%RE=>8BBsV^&{FeOmch_-C=6$P6UYpvL?@YD@LE8iQ z{FZ!v`<%M^DPLpCkK|9A-VA8GY^Vxf(<_5}pJ_x$*5pPOX=^1^RAivL7 zxoMPgKL~>B<%d`0*)RPh-OWhs5gqWl2O4^yK{D=v4)_?SjfC>*naM+5<(YXNB%B_N zLwk89`XQiDOweXHZib$0}jb<2X1%(L%XlX<>=jrg>W ze6&?T-Q{YF_7mdcefLD`_A$CQB&g>O-gs_EyuBYf`W>zP&?;W!NK>2r%n~`C<;2UO zV29cdw}}k)s;++er21$(K5uKLPKm;A2Jou1N2?iXc);eP&!93Oakf z1y6^}*e&UqhBm7gd%N#9?Fail97OkRf{&Y^Ym>n-zDxO(b#J7s)$>zpd(C)B4gARD z3kIfDKA-P@I*9iFFfe8M^FbN1s51HnT}JlMg-j}qZf`VYOQ=KTOX$m}<7q6!(^6zq zCVfIi(xp}KDL_X)lk0|`Pa-3pBd0jytkLr&%(rBlBOVSc>l`$4sl z^GN=@ua`UxJ@DGeJc-O>$TZfy+1fnDR!TOMd}-;L^cH*CAzR^W#JS{nKA-)@&(cmO zgKW?9*t)CTZk%@X{D8be#-8l;bYfdtHU5!9a6KEaK;3VwDyFZyf>OzS-)%uDd>yp) z<@49851x-}Y;@&<+p&{nvXj`z(#+s(#=gM&xa`e7+Z?Fc;}u# z^VVs`&dr&TJJV|x8GBy?Z;t!E!K=aSp>fIuXXcdKt8%3GYV5&-bJ*8v!^e@JLb_hR zKPV0Hxzh8wek6aSds7h0p8i={`k*<1^5;|g^W*fpLVWC&PFj0gitR1y%5^7t=#T84 zw|Q#^;oC@1ZOi2IFQtsDKk`!YN-oa!Oqls+mOcl)%w2wdPD`KR#g3lmgDR(g?Q0*U zJbbl!9vr0471<*{F?}X)GM5da;*a42x=31u@?aaH*`dai_(EDD#KSUp7yzDGf!LDW&Z9i!@taDUXzwTV0d}h_A&d|t2KY7liUcF{p>l- z-5uG#`dL~$7k{#c{}(omc{~xU@7nY)UrX*J-y8oXoo)YKI+K01e-=De7ewHxolBt2 z$P)T`pcxwwXAG31{|RJUm|w)_WF{yQpTj(6p2*#RCkM0H?_t;S{f>uyv+VcaZPwp< zGHkztCfPt^qw0*V*6qH{%)9I9f3=%8E19Fys*^rPNl*RmYUbyB5Lv@G$4;zIeIb9T z78%i3<6B+NzGW}In3f(He$zJgE#03nZEsbbnVl~f{>kpq=i{c&$ld6{=!`C?e2#L) zhL7ZXH^8?r&jwBzJ=$>to;7DaYV^0k=||n}H_g-kiQ4qKRH6Tg->pRU_~haKC)>FF zhH;YoSPVL@Q70o$^HAdgF%lOVEtUvOyzwdbp zzo;juP(8?U(&#&5Qe)1KW5!;q?16k=H=mWt=kdD3GvgZ~x7q1#tSc}2=j}{XC?92xIy$#rz4fuN-f-=%?;k!ir%|81x zqi6kH=<-3-zB_L)E?S%}UG#G$GL31@L$0No|IFO^Tu`ood*O!bME`quc8KC92Jzy1543!3O-=RhQAW?pGwUfIfA(~6$A z!HahIu${T3V_$dBSU*%$XYEH(O}F)X@tuk)Gf&)>-jqN#F9y{c$Elk+Cv)=7wC3B) z5AI6W=7QkOpCb}QM5uOM5Ul@&@zoOavqOD#x>ix}u~@4cexe)3m#8p4*4Wy?;)&Wp z#V{f#>i0*sXFvCRI{U8gq%|icbHQ7a+k$8<v`sCZ94OH zZ1-cgrT4WeANugFf<7GV{*b{+AMW`v7(E9cShLiO-O`XAXOLmp+TEfPAKi`EX~V<(apW8gtpSbiU~O0afa)4xZj^59D>pQZ z=DtVS$3#~ok^4Gj@BU6Y$=J+R{0(;D#jD~Qb4(6h^>KrCzy3^_wJf@kFZ8WZ{lK;b zsk!~QpMKQNyG{++zx>I8A2KifHRD<1^}+9I1q`g`U{? zcop#|tbi&d=Y@diQGfAMk-^)A}|?Yf3bVR!`@^6!s5V4V^deef|9G;zea@TlUKRUE;=e zowL!CTEoZ>(!68rCHkg1(4$G{DD!@eU&CnJ&hcHM#&==9lut@s71;Qgd>P}zJQtMX zCzN&H9aPt%BhoqS(}@iUBaf7Plg#(A>8BVI*n01CIbNM&-I7Y?9Boe+pJk=iKpHpM z2fk;05%klnd6h<7Lj7Qlt8uZCQtv~MmV}ll>!fP6kKQEIzVp!&N(=pMd>u~@yr>Xg zyi9uNBl==>=Slc9$6u%$r+=e-=3jfAP|Oa$vmy7fg1=Pde7u!zj8yo)-@{s$m}uP2 zW%)~#sgfM@k)Hf3WwL|%eJopJzL~!Jcy>egJ*?sP1S`>lOSSan<@O(+xJu>B95a$X zE#5+_mG}3YyzzxRf33WWT4u@n&@6e!y&S~{t$(pU$DQ2cUheK$4bRT5MPJa9xYrZ+ zEXlJ{^q@sCFm$0xG@=V-(g*UNA@;4luQ1s1L34D@^G7@(PwBqHFLPoG^r&yLLmkSa zvOb@l8MzGQ+sIpKbakQiA$;C6iX7oNJea-y(HNU2UF#wBs}}kD{t_!3HSJK>d}G4X zHcz>}mr5Uf&(Pmq(|7tz-zKitCNxzQ)`a*RiuKACy133s(Ufcp+GG=aKb&1Uik`M5 zbJi}gURo-f^&WVR__x;n}F>592327u01Ao47~={(d>Wega>=0{^L!d7z4U zpqhE0246pkzZAzW=+}HtEZq1(;s?6i34cl+x+5s+x`REQJHET~%}?OdFQqT^XZ?6^ zdu;$t1htz|hUanokEcE#iRKOmm9h5#wtGGE5c8L8jF+{q8@)Qpcx{k;8MATc>z3o|CY-NZfge%XLw}hQs_}Je zm=BW7opsEcDcNV%2sO|W^>)h5!`pK`#0Q627rS}O#cZ}Cze=SiWg}?!@#li*6WfBN z>VxXhw}1Y`DxO8`GxY(zzvTN$J!OUmuAlDtS?M7825aFjc`Dp|l)%5&dZh^7mh)Z8 zTpeS+sir=S1vA&=_Fz9)50hs{cST{&sBu2U716~wQaP=|BCfAh@Nm}NEM*m^xk@{d z*Xdk)P^os5ua349+Z3L`?y)N_Aodwy3 z{EIq2j@J&EvAINJnZETA&uDh`Et4F^r|d2G7SVZpi%PZkGJOiW&Q>23(|_{X{ZX$M z{n%mTw6}KL$m>iU-`DXkj%FUcEuCq9jbGEv@QXHxL0Eo0s79E7CIM_DZ7p<$cCf3?oYi9bKaDCRES2caE z(z==XBQ~>NQj}WrI>x|oP@SC7%Odq#V^jVdah$rI5#}S!txpFDVxmbqZX<)aE53t^Z5q;&6j_YPUaT<3iK7JjJH>&d{uipGG(8yjQjm~tso(ovkDYlwC`+0C2JKz=pv0vjlta;jm^28_FKKbEIF&b zm!Z$spF2kIr`+7swK4uR^srX_)qLpFoo?+-_SjgFANSIuTEm0)DdQ9kpp;WP8{ zh`Ag)7QIolB{knNNbguq>`KkCuhk4fOlv&ZXDY-5c=c zwC7D`H~t;AL4JXFq%#q+AJXHO!J~hRkD;>(|9|r_tjy(46Hk=vjm%}kuvL=1WG>lj z?=&R)-g#ti?3Mb6?I@G)9~y`MI+Z8Y9KtMhRJpe3dy{lp3+;tF#6a{n}Gjc~5)2 zJzu35Oc8$81=>pJEQRu5x6Zn8;d>>1n)dh1 zSupld%IulvNQ3f;2A(%`SF*oxKQYR~+AoZ3U#9|puqu1FS$%2+R|}``7uTie8-IKLY5!0B z5)Y{368x(2{8O5q?`t%E;F*2!l02jQ9pn3`s|z17KRkyf(|^)aq*q-_tLZ~H-Q}Mi zn^)%<=d5A;`OZt)zqS01jP>jen#1!kYm!dRY{r~y>S*7@5qqWs#kgX`v;JlE9_b4H z^Y7bpgWe8lZ&2qc;PF|`PDD42<6GIdOwD|8aoVc%`D8!fSHV{$J?Y9;FHlzJGh{CU zmG%A}X*Jg`hrdjoYsz(TzRt#ujeTJ(R?hjmYR=!)bN;TI^*1(MzMa}31~)67B3khi z3TM*8{I4IG?hVKM(34K}v%t%de8R7BOnW2KQ@+peJ&w*KYjY-+ruf!%&$^>4qy+*Hw0(Xuin5RrIL7BRF$}}$APH>Jg z+M}MO_xfAo(2oP?n?U~lOi{E4nVR{rd;UE__#4d8!%ANlI#{m075Fxiukz~_tAqKd z`eA4uVNLGVI__CQ^txxQbDo*;8>U+{n|&zicqugd{HAa8@p^lp=({;z>hxVP9qIeb z8Pjc{GZoJT6;|&f+Lv?lXr%hS)k{tiBUs9LijwXRV@KKlVvd^Z*&H-)V%)8HHTs2~ zb9N`#lrZNGS2AYe*voOwHJJToaH9JI1zcwOe~&$TtF}UVU53rozCx4q-_fBs!Da05 zKiPeSNU6q$c%2$T=8PXV9v2z|UWYZes9(Gv71Z#pn4Hy7w@2^l)Od*M?0(qJ>hG}J zY#a-Jjq^p>5uJ6&n|*?L$00nIjE&4zy|gnAzK`|TzgfH($(MRwq@K#FKkzFreXU%# zkvY5i#Cl~d7~pUb295W{Vn_4^URFDEgG!PU6N2a#^eq2 z+4+Mxf&A!7Ysl|yR{3!K-k(?hm49ab$*XL_`N{L0A&HxQ9kw(xKQ4HN#MN<<7!+ri zj4yl4#lx;(BVxuM>}gKH)3hD)=b+)Zl(;^F39A$wlos_~&s z%$fXUIwL@NzpiNaJ|N>%Yn4({r;F*pFMk%MFvk%?p7&jp+@qWw8%9SBt>6BpXoZJ5 zgK6bHl0Qh>^2z&Ix9J>(c0}6m9jkul^8g zot<_bAblLWdyVdg%2gqsN^1uqt+b2HjGXj!r4B`ot^2TSr`A73M?CMn-xZn{WbbFq z3)HLiRf(&6n7WJWSvT<=rN3>+s$BL)~(x!LJ<_T6Y{%9_2Sa9<&tfD088+j|;3j0?mgtbNelNm>Zg*ty1E{BXXogV>B|euk1v@=z75910(}jdm1jPB;T!W?zSGl|I+SOhf4a@Qie~vgU z?`SB7SBu^-C+J^nBH zDSqFb_Lwht&y>AKS1$6o8A1_>!F~5??uS2RKA1vVTirhbHu!3>duZR-j!6@ zuKRhX^i+Oa<<0qy!_Eex%X7;km($rpS5l0R6m^=pmwF~tr|Ll#ojq4+>o8+|BuMag zJWK~NHt+vYUa>RHS;a=ywCUTT%!N=L%$?KcXUa{VQ8{Rpzh4?Umogr1hdR!|!>D41 z(lw{s&Da$~8+J1n&hP7omP@qPZu>ah>ifvJPLQX}^lK=8kvu7TR(HB?mhWoMSef?@ z83X=YN~35{d(v}Z?FIP$s!rrrQO*4WI+Kjd=k@b!d-;pA+ME4;)JeyiThPU0Mi=j} zy4bb4aZT4fAw6V2#QDX&zP<1s4K&&~ApW!Hb$PcM+F2jcwuGeeFtLKIPMh}mxPR`z$_bKPn zsd~MC%ASGlR_a>}s5M zf0S0O`jr>?`#Hg!?^8d~E9q$9Y0(-$wBSou@u_C4P8PgI?yC%gwq0{_ze*!k(K6tsk;O=G}N-w_+EAPOlY{K8KHB&Jt7aS+Ln# z#-G<3qa0seHfO=P2%XbiG4g*(jUB)@a&xN2!gg?YENo?eLi0m&?ywsZPQEJ7csNM= z=6o%5jVq5ID}F5`T9mfX+^F~tx~F{%w?D#qVUv9i96A$Pcd0yeb1r4{s{8~WhcR|t z{9w*@>!mUud-LDOCv@&7I6e2=kD-q~>HLrMec%0-cj&?_f6DV8AFWqqG>0$Lrvgt# zrU$`M?ox5KWqNPHw)k;E-_Yr1bAH;%&e%?L%#Hb3bm+W|o>Qh=JkdH&{MnL!`Z@82 zbj>N()7ds?62GLMEz()1mwnP(mtN=e){G;KA@yH6EdAwM`)GAukFQz(ewcOc#-I#d zN+)&3UwRqG=6N3@3cvljx0IMdX?Do$Lk)X*T!**bzF$PPw!V?P-jOru=x~SO`DV{^ z?!&--m_BS|U9;O_*+TIPJ&x;{;x3B0NN@Z)$?I?rw4>|WJ#CD&86S3zo+wXY{#!tX zrXJ3hsgKSMn)s-fH@1iN{y9G1c*_3J=*tCUeAMr2?C-`_A28>ITKCrniT&Gxiv3Rp zRr{X_s`o#~Iq*o3`TKPS+t22T+i?{c8$?M*iujRgg z$+}S*_$YkRdBjIK-5j)-{{=Bxff{{GTDVp^e)*hWVH*~>_RrX zkPYYAlf+i*dXP;IvSFRsh+Z^df0~(xTF`~9W^K@epUxbe>ABKucq0AnWKMJOA;qyW zkGw`_?)Bcf_KbPAH8SOCGPWLjYIyC+WF8h@i*}eYcNON8E6%=7Xe{h(7%=?SSmC|E zU}w*l3gbgE&0aRPs1%+S!9UG!m&M0*uMe;hMFH`ab6u~$JAL0hi#MW60ne7Eo-%Xp z_Ur`f$3sEe?#dui-Wx2dod_bUC4)V0C{sC=G5NocALCh(Y?az$4Lq!OgT)7()$dyM zYBPSGSUTg^kSBvJ+>soojNVbSvU-JNr8-oWb@bMq9~wyS{J;QqGhbo&YIuUK?VqD- z4@=jA({p)38^`H;@%qC-vHA_q8`V$hD$jiO-m={_?CG@_ebafktz9kePba@gJo88S z!!6%hys>41KC;)cx-VGNvM2F&;`?V=2R(h?YLjl#GCy8lmf5qptp4{o%SV05&jrhT zos6a9wU>h;*?oAqgLm(j(U-lf^9ysamHl)B{cW4+@6{`MpENZz)z8_(%>Mt3EkZAH z`>lQ4|DB*g<@z7NM;*C3xu3h>Scm)f;Vx6x1@U(0KYZQuR_A<*WFIVVUz|ceimiUU zI4OHUI}>XUus#}@8r#6%(k0nkZ*O@%n*F8pY3d|pOI+C#h4~Cw&;Q;*#Ox_(J*N7g zqx#zS4k9JYm4$Q5idW!UnzPHuAWpxX?b4F z*o*7jt?Ww5*bzb|3!J?b4@9rCl{5Pyl%=kheP+vB@HXj8F5d@h$Ibr3XdU0l zQ9kpZtsE}!nK@1NUvVJ4C(0aQ);x*_$?wM&9|`g6p!j9R4mQcpnX;p1EsV~~o;dzB zh56@sM_=2;w-C=-3p|6DTC>=AWBw9zZ<%;)=1}~gh5Upt9q=FxPvozfbIN?5@_j9w z>9c({>m%kzbDq?kXH(zdf%BLOX$;qIepsulKUh*_c5|L{)LHCk8oE9`ioz# zvkA@q9U1WxdtlE+GnQwMt^5(kgF&Ykd*MO&%%|3>KGtyrUrp41Sr9{To~E#-z?w`SCRB z=P%9m8gD!^>phw8t^ zv5B!WmS=2Pz5<=EMAw=e-- zGRA#U#((qcUgm7(_ma^hKAifWJv^C84K9j$KdgSJWC~Z!_;&K4YIFE-DSWt5zTCsQ+ZL?)T{Zb$DfW_yi~63-mD((Kn?Rwsi7=EtJ!&@g3# z1C)(0*73iJO67YID@dVd2WI(J4}Nd9Z{_?u;K>Mtwh64Xh{8eJ}27n_in5I zLQ!0IN*UWclHabmz3aBgX4y5#7#*4rKi-kbH;EVCN38!Z`8s$pVb;y~3)lE-?)~`% z{Iyea_?DF1oS!y0@G!dU_#ivbZ+sHMkBs$#pN0=_d_32VE88~P$1B?5_PcuLmhE0Q zkB^7Ur5~IPh%G4Nk?FPqZDy<&ZC(4g?9p^%T^n=G18!ZRdn&#-T{G}oiYHH3?QF&W z`k?W@`u1e;AqR{PIpy^t_0-i%q}3Wq^=^X3gdlK*Dn$@o1- zr<-F$v?tx{1$%WQT)cg#y{)}ma6ZoKNl>zuQKs=`rg>}#&?vd z|LanP{-535LjP3{XG3mO2ma^iy3P2Xji!E6Z|2Nf%epG>mH!!Acf0W~hiPk)_uS-b z9&kQgo9y5`K3$`HO8xAuHtDX6iM%`Qkz8 zrhnf5Te9IV_9DkJ$etyp6x?M1skT!_eYRqJF!}!d zynh$h9v=6!l`Gy&KJNqREN(*gy^1#YN!-`OyNELoTO(gjp8T7f9Jzl~`9t|ieOcv4 zKBe^ey6?0wo@U}<+TXalz~@#UgJfUMoC|e+y4mB+UVTw9G5N|h{X_Wwhi?=AYt&vX z`Y-wy^0`GDu`-oyhtD(TZoA>NeP6s{U>m%C()gKicwSEIiF3D+OgCp<;HCJ!LwCRG zt~TbZj!na0{F>UQ_~yPntsm5m^C27UeIt%zA5b!U7f0}K`iwJ>=OHnl!;3RB#$lmuRKH^$vqd+spHuvCZ$t5 z7_VNZ+F2`^`_oC^I%}MbAQcGdlR9x!*2!eI1;>gbp559G{rOR%atSh}Sm~uWuq= z-;8dyppUK0S8dqKcJ#49V_ANY#xr_W?POlbxkaO=q?IfFmHRStCAL#`$lebZB;iem z)=$Kp8x3D*huCv7ylR10Tj6Ibb7&iD+;(Em+ZB7x>0KG_(L*NZYMEc_hUxQ{`EW<0 zc;oL7G;?t8^G5HGm5GTv{Y*0~%~^4+D|KfiG*!=6PPDE$T>K-I)B1`w>sV7YiH3EX zh|9UVAw`ec?s}8COY&sb?OW2>Mb8#!VGcT$DypSfaPir=i*+*tjo#;dv1uA<3Lv(b>+73tL2W-lYm<<(siI{&RU2Zp%I2)n|)s@ww|DG5J^kC*5CebL2jD(rYIig7Qo zi_;XDyBQ=4&T~aox9k#ijAA4FS(5~5I=8Ri9WiIeQ-|!kf0U`zJ1E=*ab9g+H^wO$ zvYys^p|a(E?ov!Zdk)mU7o9clVrY(XI{T9D5ER|`Fi~ey8=u@1B>&UKASwUEj0x&j z%-GvS`8L?T1A6A{bkv_`qs#^CYZ$-P@gt%$SGU6J>Td3CaQ=8r?vL#J?&Gocyi!p> zUAj}<^HP2=WrI%3$4D={^>ca)ZOK<}@?)woC|aj6K^?@e@RwLGNoP_cX0K|h5WjkM zPQ3J+#7j4#d;5toec$XIo$}DUlq+C-9i{8}fnV zs`?7D9hq*OC2Q^pHRIFCma=uV!&=Kt*KqEk+U+r={QRx^%r!pozXCl|I{h~>SH%&) z{j9|TH-;|^Y$Vq1cutI=pL&lPJz-zf_%h6wdS^j0z`ofzfbnYXb7ah7=Vsl%!7x1S z<}IBeN@NF398-5$6z-1_@A;I{)(KB9deMA68*lr3RcpTrtv!*k&NLXm-`)Sz=wuMp z+>TuR8u+sGhWL3L3$Iw8NC*5{L1QI3O5B2dHQmd>8u)J|H|hG$ z9(;>kK_m0_s4vIbs9bua@}!?eR_48}9_DE8D=svbiyrC2jq>`wcKLVxM(&*L)7kZg z-VNwnQ-UtBw!uaE){Y%7agc z9~-%hJ&khSz{a+XpB6baz#PE(%8&CV=BR}3wLzyopcs!C<6Zc%+zXD*SF&z1XB^x( zKQQaS_boF5l9ueNpF{eE;Pe|k=OWB5)o;%MWHkqP5(J_#-C4=C=Tae!Y__)ROu zZmBy{CI7NdW43mbPtMFY;&rFD3vT|j=YTnbZ0=3M_KNSc_bJVz?!0aaJvnRa0c$32 zOGrD19LkNI7ERjsVxI4LX7>3j#!wJ@7LHd zlD}yBtXPWoY3TdhKKEc7+?-U6Eva(jtHS%WM*eoqtanV!Jpu6ZXze)mOFX?n{nS}) z>eN1>^Ob#_`V9-!gHD~?l7FmMIs<>Mz!NifIa>67VBvnjE%`sK4*#vSgD)o;s4R6E zKL$H7r|j2s{CEx0as@d`x2?}!j*lKw%nupLR=V}PeLrT?D7yU= zpC6!K@J#mD%S*b;erFl-^ykILrQ5W*;2BHWH|vI3YlaBx$5r#M8=z^gqew+-GSs(Y^sA~i!8(icORN!R`P)7CPw4A4zLR9NApv~}=0DaW-k(=p|C)OKt#!cv zGof``4fgFb?4`yspEh?8)$KkEgd#>n76?#%_*K(Ziy&r#_ z*u4B}_A6WL`+`N6y5DAWi2I5om-LK0#0DcqUPgZKLvq?U4qrz3AU7k&b$rL|Ik}Cb zBP;n)mQmH2#B*u84}iyHikByrn`J8 z*$*>TbI2AOVr&WH)sJcNSB2(-QePI{jn`5J8{25#C!gNo?T+fk7Q`s0ScJ|>%=+!D zdiI!28g{_Tj{5XlZFP0jDIQ2)=97bdpXH^>V%O6_Vhuk7U%&rqg7rsi)40_u`c@d{ z!t&|79PowGT0@fmvYY$koEs=~~)U{i!z*w_t8d zeKCK*x5sxx?an(-*g4{~WT$s@M9Y15EIDb$;-R1%{%YN5*OTZpI&0ovLl)*84EX`h zm)k)d-Y0)K?_ngp4ro79?de^jbqTZgW!fdiU8Q%67&C?T!)4Hyv+n((7TH0K7y3F$ zzsodkn3v4&4@h3vI`g}WF81E8ywZ7mZL`KV`G07BJ2K|So#O6Z*3wh{Hh%vT&rpl0h&%=|g#0KOKR1(|Nex>3`G9r0P&P&mYyL zzl|P+#z?p>m3b-olxMziR^ShO(j92#-PyYthvSUb=Z#MzeMsTAsNd%IJ|C;J_L!K1 zJzFrsy$;XP$7QMJeRo6u;&+toD-NOue{Az@NHH!pqeDD%Jf3hop7Fc8?O96fjC}7a zMt_El{`3;FD#`X%>g?CJWRN*h*=*kFBOQ5&zN3;0{LgsalC~pv*vzfbOz%(2x;8d8 zXL}OO+1=x*e$pAM(fX%?3eAbsS=xQS8P7rXtMB_7fAb#B|0>g7j$)Va&c1&Jjb`16 zPRh22$Ft<9yqTV#nmr%tGxPeo0DdgH=WEhMrI}bL^>=N4Ls?fvWAi@JL<`RcYdIgw zw_GRu5JKreYXxEy|JJ2)U{o#U4&v(BL9usS!&ItD~O7D*#KlW83C+i0zopvln zI`}R@rl+wHjDwr<*t44ZmPYH?=h6Ae3i&#zQzq`;SAQVVd*2;AJKUJk8ARUsp42%U zVo=VGMUJYTuBEAF&Wk-jo1;dK#G=FVl8Mb8(zuM&=y&-zV-gje*V6|*6Mq(xVeQ3W znbA+)F@zqgpPXaJ4WUP0V$2@qT*F{6A$l^0e{ANFIeL23=qY7I6Jw~u(9Zljhjz_# zncPUASfPoFDWB2PoilnWKCDae_lL~5Etg&7%2f1$So$Oo^J0kliok8Z!8n0$ANpXS)?)A1zdCi!}{@`AF_6xhy zbradO#hf99j0L-eU@GdlFmpXyys+1W8OzG{Lo>-b&Rt02a&`EzPYd7YoJkS}*-MqYt=AKRX>490g?U=L+CN6h<89qaBf zzyDK0UxVGRqo2&>zq_%pj?{T7J&PuH2g|r42s_2^qR!U)7Uj8KJ*>x#Z=kWRywVZ1 z1CQqQ+3Lm@wj;g_b=dLo+{~KF@$i^c+0HXT{v5-w=ut z3!8ODkG-r?&YbvhP@*xA%mr`Int#R)M9N5e)10*CO)2z>n2d>kT_vtaTyhh9P&vI@ zS^IrHzg;*#{|5FPxq~-o!^bht-MRWV@b2X$_r7;o<|*DUz>cY2)dO!TRBsP-oBaX$ zU~CBeVs4ss#z_27J>fcN&+O5ukN6jhO{|T&?YNf@_d>V)JJF;$NbM2BvTe{Naja|F zk)CcEXRVZ{J?2_Z>s-23kDeE3hu#A1&&=$*iEdvXG#n54BNb}Pj}4_u2aH|h9vQxu zV*g{TgG@fwWJ~wmR=|PBnt!zBS6!y=oH^&AvZWhRtQkILpRG#;OO;n^N9E;j<7@iA zL+fzG8%i|?hvN;QwRbhNn6)*2a*2FpKCv8Q!>o(YZ}H(J#tqJ*%h%Wh>~Ru%=i_w9 z@we8Qe$s~MQags%w54{O?~xD5e#i9_Y!!`Jebc>S4Utxq>yZ z<_gAsLT7Z?UrvGjzUHuOg8VM{r1z1d@H(D(h_gYfBPTf%H1?_0f!?)J45+HR+ul!r zKAUq3X3rEFpu19XP+xTBM&m*CQlI?FcCDjmH^}Aj8_jQ|a)0JC%m?;7S4;OQyRXQ6 z)Y$zlc(NxcAMmVv9@#Cet?#?z%1+K1MZ_QKFYCI!aZPr2GDW_IuEzJL*Ks)IzI#g7 zzaz*`)DB}~|BO2>{*bXqY&Q2fji1kc+{CQqpZ}1t`iJZfK8bDZhVR?7clw!6t>rf% zu+5D*{&s#vnPeq7d7n^xke=U&7p!M0!~@2!&MYYo=gy=D8RDsaALr7I+oJs&@SQUN zZJxKBLpe%YRc@ZqITG2-fH+W2J~{K!LyNebLhOqPOc^sWqaRxt4d& z^QRf-jsC0*yy5Po{6T*{rha6)T71+#_iSFK-)MNr`DE%pfecG1cLe=CuCdw0*$AV* z+xTrRd*-!;eUNJQL29u5N%lZe_?Hc=NgL7erhVPKZ?}pwMCdi27$44SFBq z|8LQW?$@AieF1w{i;n8M<;zQ^vt8daF*^0Lb~K-_O=08llaR*+^59PuwP&Be{~ub^ zmV1&IT`r$rgP(?eRj|iu&pZq*Iw<`mPXqlfbNQ>aH!b~UejQ`J=;)?id(S(+M`zDK z(oWi<)fm4CEE`{u`!V}Io6+;nO$Pnn#QwaIHT&&b(&Rbr&QNK8m$8~3 z+s8eTdR#}Toe(gu`q|Om%9%x)6eb;m4&+fjWSjoj}<`~AKqm_B<;ib7q z(4u*ad7#Sp3fM~aFl)^Gi@of@j^h8Nda#*2*i8I}Cg$X3&B>C{8rhOBOm9aYFFmxB zIM#E_pZwlt_RP=H`pwNGZ0ABP6{exhY7^HN`7UP@sr*ay!1sqw2a``8!W z9|@BCR|R$ZxgTXe_oM9Z4jS3ZZ`#j0)BB&}Y$g)-B%!WG^B&YY*$?~Th}*baX(?j2(z^KR(qhOVw2 z?r(vfUC^@&dUiq2F6d#8wP_dh?1CQjdn@|UieKN>13l=*c66fy-PnO{bfO#l1`hk* z|BkaUItRtM%dT7RPTMoC{GL5AhWeq!(d^@iRBEWG@6C*9;ziB->anMvXH2%@C)1yG z@M=>4zdpnn17u8E`KE;VPUtsWyUE}6)89_7AGiB8Z(hckgMfWR@@~wL7U%E(!8Z;< z_VF>bHPwBKnag-r$BqATLjDVTEM{(`pKaa6jFUcN z)7x?r_%EN!X?|UgT_tzpzhIvxYSWY{k#5U>(LN8K zLcaB-W*?$S>D`O5fqka#=>FT;2l$4iL35|eXL!#2v$@)oiN9Rh`QCwa?$6wuI)vY~ z%ItxQZPbgMPvO7fvn1uu+j*||NcU3axjr|~EoGkT zs}$X4oq-1+q-;=l8+r<+r{_Xz!kcdU1&Q#+sjA!F;I8y z7$`Z)7^q9;+&Zi<2Dq!)jRE)>?0;HkI<5x0{@m&Y=St+;*T_faJ2UVKt(mUYVCT4( zdumK$MKLgFG#65D?-a}#y!dv8#Zd#JEp zH}6j>z5f%;*$;W0vgZ#;i|zZL$nbwYl1_a--$}k$?nyiMLsPq_2fP(M<9DE(Z#<)O z-HR$ec*6PvcbjWKfd1hR;_aURPt9``L_EaU6Rt}B*;Z2GhR;XC*QF9ac8 zce0K#zptiuyL9J+;!29CXj~HKOKTr2Ii8<#zL#0ALEC$rt!$NDr;iE4Z^jn-btI(w zx;xB{*P*F)_}XW6Aac6v^dsq7<{gc{?7P2{-WlylG#M~Yy*5X<9_wbxMwV%pg(S{@!~oD4$BN$etD&C96cW8 zgUw}ZYp<|~x{K7VmGdvo?`(fUcSuMFcDwb1=Avqi7uhHA9L#;6NmBdDCqZP1Igdme)^LddI1`*UeVu52P>8m z6F_Td)7MAoZT~? z;#p;OP+gcsyWq9)XW=(K?7!+x!hydF67Fon z@UK1fr_-E!RDAq^UE7=AkvY@Vs`nD6PtvC)@Wr#xr`{AR;A!}Mbtcgo>2gdCA zku%=d=UKn$YTo5czvZ5MzH9S6rEALYyY@$V@kz{kt46b&Xjo zWPilDIcVOQ3U2@R_l_@KKgt@Q4PBuftp_&JHt~i8`j1X7O5i)i?Ybm-kaH-qwdL8} z($__??)BF9MW%_a^~AwG7?hBfV86eN`SF6uH*$46d-z;Rb^!g)IUl-u-5U!&bhWRC z^R<0N1x>@-)4M4ixulT#GM+4@Rgqp z#rm-K+0RYb7~X9@))!P=6YIO1IrwgT@F9InkCxN6elV^Em7I81zNAC-={K0XGUI}7$A;a7(4i3Gh=6QS$OQoUYN0tE-gIP-S2SE8SB(< z-$mQR7(ayUh`-m5yf~=$bkN0Hz-_f{tl!EF-&#o1?1U~ zEWdeIke1&p-->s>V*6f;jUX@Mq(reuoo^ZVJ~n+YXa?&y7lw1hp4>XKu6{o*!;Iao z^0K3?#0)HQmHxAmO*^_w$Bhv4l&(#jNj7Ofg5CKk@w8J=CT_Tq(*|L`Jy%ZvIA z6aPL?HTLAZ@>yT#mzSZbRQAHIZ{!o)zY4$N!i<0V%X2sOPk(u==L59yxODaEku}(l zH=_%=$D!NAFoH(fY3(^_e&@8>%~f&tZ02qh_&|TmJHPOxO67C#Ior#9YM%hdaxua+TiWXpFLOw zQqO`{B=3=#+t;1$%7$G~+Vkp)dZozeJz>L9OHM})StoOSa5Bc?vpDCjE?X(K!gr~U zSzCP@<*L{kpN9KxcXg|k;d{NvYj*FQb_>?!e3UtVu(yd1z7aV7+WXvBvGwyuu-}WP z$o9nNpTKWAH=g+XJ^0|Q&<9U^ekkd~&!3OTUBNz-UFOCW{5`JE_oebZdj0WrPJ8y7 z>74d-ZJm?y9&OkAo}*<+d5@MP7 zz%gH5M}79V7Kn@)BEuD{e*9G@$k>^#J*q6y17GLSvb|vQ??q!$3wql=tM<*@k+K1ST zBY(9M-2fqHcldf4eNEe9eqI^9hv$1M{LMVMhew_`@jd)SxVL0~yh8x_{M?5O+;_>m z#F_h*z}v%jT{+f+r@QX>JH2A-r|m&Ex%Y~o4iq1V&gBj|nZsO|Qg;w|Pj_?*9IWb4gWFTlRpm@CslUn0jxb4%|hkYAC1 zY(8fu<^K}78NXizoA~!-zcd%oQFpYrna6}A|GzBL#}eIa?{pEW*CHOC!3((mX$ z-s-+s_H7>|^}FaP(~q_lz2qK#>yc@4-m9|&+jIOz6z30w z7|sbOoil6Nl$vB)q}Pl&qgziv-_{+wbTTwaS6Nj_z9G*kGioNzo-uY>>72Ra=1i<% zTj!3QlI;^_(q!@p`wZ@zY@ac60z^udY3OKqY)#GVDdXnWfM^adXfb6@>5Q2*rBh~< z4z2o5hwgP<-ywrKbnkx3X&rE$8;&u4^4Qs9$3wQ#*%L3FI2)ehFv<2vZL-hI>C-39 z5FNt0vnzX7^>%K`jCo_HO_@+SdE$bx6DE$IG94Nxhd|rhiFL_;F3mB0%8ao!6DO2{ z*OZ#elLC~s?tIFex*@NB$7jyOv9rfdP6-`1VdAA@=T57EUrz2c2V+^;e1$q-<7dvg zTzaWl-L$bYCQ&X4KEPSCC(fBTd!E>0at(q5pUD%)(%o*{*g0Ac+ep2}n7dR$4Z6*q zaXRbABiJRX$IZPIrgf8M&z#ROt>{{UrcL$SnKiiKYYRLQ%awx$beKPT?5tVv%lMhF z6`hS3Mg4G8pFM5njEMswdb@9(UK;5(79N){`A=wPlrm;IXpgVwoecc(=6(yoha0#! z)r|+dX7iH#?A=2=7RS*YK#)n0hQIc)m{i5%>8y(3mQKE};d)Cs?GVbN!fpwniAhr; zo{qWXVwu`8Q`iU|XJjoxnJvHXT>2HID$}FDca%Ku$PPL1uT6sE~uyFh zeK9F9Zu+w+l@-Hxrm=)6x%QTAlESboZGBiZH%LwX0u{RqM&&~+I zB+*xm5db9mnsWo{R&CB@=1L68lwlG@6g814401Dq&M2%f1}78u47#w8u$Hdi);(J! z>W=!&CSju&GGgN)(-tL*O$6B}A6}QzQ9isTk;;eHWO#agne{<>aMj-JNDyw3_w-bZ zG<1ZKP2*IUY=!A8%(B7^78Y1xCdRpIu@z>a@aQrtVA8niZC04gKD(@d4NQ=>&k8jx z?6<;P79O+0JQkj|!hCXjo(4(B_!)PJK^lhTN2Qz*mY{T+k8r3+NETzl)0J{HU3|rALWt3hMq6ZW02S zy%_?*)vO+mY764bDXh*Mf$!qv%! z%yk+lUu`=J6)mN$9mnm3VmG#*uM%Y=d(}Bh+WYwSQPMw3G#o^eglIa5(h;9^u0(tK zR%Ma{>(;q07hGLg?o|%<%^{w9H7>mjU*ueuM!LDkT@1WZm#JK2s4jJMnaW-2T+Xfe zd9%mPce&RP*Cjs}DZ?*Qxz`cbWh!?Wyi`_dGC=dXSt8?=qInL?RJVx;RhqjB_;M9$ zbwns+wl0HAsI|Z^H=%Bb2(?~>(!LuaLT!u)b(08Xf|O#c^%SITJr$%C(A!0j9(mXW zWlhY(_S@wlQNYQ!|<2`VGxpReuYPo#m|D5a8a`~9zIoGM>@-dTL zwOTH}E0pM_mdihdGIUir;q2U=-4%zoJDk-cZ|DU$fyaE!?OCDqvdyhj9G*w2H)CMn z?B9toUTOi8xKTN9P)ZQLsmsdx#Mb1A^-P3ORa{h*fG%At%tXzMsY`#QwBVkjK^A+%aDw}`7 z8#Z-vj-pQ&os~HO>M?g@^5z66Ve(iZCbP#1h#^cLD_~H}A1h#3OrSDOpqwBfGss#p zQD|6Zg*q5#Rl71Ah=8mv3Xiw97A&X8KUT;_;jr$Oa{`Etd1NinDYs`2v)d62Dr$<9D;;V zHe(KS`X?T*uJ+n~iU_-|oiY2&x%x}JwuedPwf&rOdTqZzp}W@>Zgk!8@PwvLh>8_C z0hXS6KQX2^MOEAsRq^Jiikm5}S8)pqUd3A|yI1j6ws?yy+N2o)2}5bzs4CjCG9Y7(=QLb&O%T33ZG~f;Syw$ndV(bc`Wo*ZYa-7(0Un z(=mqSx@f)W7?btdbd1S@-J@*E1cXSe7xk$yeJWU}EE{@3f3#o)&F$I8TF&C2{jE^x zTyf!GE1bhVRaW>8$wpYA4-2Ejmi2zlsL5;88dt0yK{2#D=Y)AE14M}4#vp3$dw{rb z{@3-Oqt3V9G~gQXV3V8xt7YM*Dpmkv7M^1s3}DQ{`EhHJ^)j<;d}j=f^|B~4yKMZ) zz`GImF^a{rDAW8GoJJd!=-plp@6U>2RJ8DWa$RGh%x9Pw{yosN5wS{gf@@G%VuN1` ze7zUzIuvrfSj#ww1y-<}1q-ZT1?<$z3$_yD78ZF~mV(1-N>S8Eu5E05Y$5aiY&f=% zMGr{pW~;dmH9tjOEqX*m?35EcfJ8CdM0}9Lc@g(hDKFxIsE7|Sj=hKvv*1O1gavQA z?=uDY`TYYH{QQ2Dnpg^Z48nvd>~RdU%0fSQg3`42`rZ!)SBox>$n~eD(YqKj0gdXf zu!{G9?~Cbo0~qwBn`-lalQA=kw=aI7^Z-Oo9|`#M0Z4Q5BC4Dfy{ zh$!)2oNJ8((AZjRo1ep5@Zw2o+t{TM+s3A%U8aH!&j z#{VMV*GSDuXjQZX#l7`$nS@LIEx6?Nl#8xe^)PsGZaM~V^-6#~DLwa!*t%mVVD;Zb zX;CxB_N^=1XrrXnkA*|QUenA!K zb+cbEl=ZsVFBnE#Zz2nZ6W7gt!3fgpX20M<;=0){7zwLW92$duH)r8L9P?!dZ}C|$#t?^r^xj( zxlWbqG`UWf>kPThlW4J-Lz?;_P5ls8Kg87!arHx7 z{Sa3_#MKXR^+R0!5LZ9M)emv?LtOn3S3ktn4{`NFT>TJNKg87!arHx7{Sa3_#MKXR z^+R0!5LZ9M)emv?LtOn3S3ktn5AkMVtax(;>Xo>9CEijiTPY}0&{{zo1#K0yQ}8VX z-&Syvg7ykJDCnr5TtO!VofVv{po@a83QkdQs)B9`x+^$M!RZRlP|!ocnF@L;=%t`S zL2m_TDL7j}rGj%5d`H2#3i>GMtKd8Z{S@?9FhIdT1%ng}R&c(83lt1dP^Dm~f?*1V zD;S~RLIoogT%=%>f{PVgqF}UwF$%^i7^mPq1@|j>K*56w_A5A`;2{MMD|ke~_Z9p= z!J`TuQ}DQgCloxX;Glx16#P)Zj}$zu;28nw8p7!s!s!~q=^Dc63zXz?1y?9osNhZo zuPOMwfDUBMj+b}QJUV6Os=v&3Cm+Na=d1@|bpSAov4gwC!<^ z#}Ycn5<15cI>!<^#}Ycn5<15cI>!<^#}Ycn5<15cI>!<^#}Ycn5>M-R&nWn@f}bdO zR>4md{7k`f3Z7T+a|ORp@Jj_RDEO6v7ZvbXRbig3}e8p`eF?GZpky&`Uvug5CO{e z74%WiSHXD-`YGtIV1R;w3I-_{tl)eF7bqB_pi03|1;Z2!S1?V%bOkdM%v7*d!EFk* zDcG)Hhk~67UQqBW1urW2wE~@u89Ey?bT(!^B5hgUSMUP`k1BXf!Q%>^Q1GOJg9@Hf z@IwVZQt-5bXB7Nc!A}%CtKg>!ex~3#1EK3#3QpK`Vv8S&lDV1@VSC76nv@Rh=Q*a{7b=60ohJL zpdh9oO+j2ix`Kp)3L{qIAWK2Ef*b|83i1@>E2yWSKtZ8^JPqhP4d}u$sVr=* zV3~sD3RWmsso;7As}!tOutvdJ1?v>tpx{OY>lJKJuu;KH3N|UYS;1xnTNK=);8q1X zDGPN{7OD<~rh`t(LYuHQL^ie!tMR4av5R zc&k8UY5x~Jf6T|(aR)sw3*;Qxl5=9e_z46>aXs_or^FBE(&kHU=>w{ANeGq3& zMDax-#>F3$8|h_e`-70a#o_){i%dGGukwQVq_uua@de#t_UqULLu9`Iq*Jo5@3Dqd z)&mbgJNA(t12Iy^*-2_*)iRR5Kx6B5S7b~)Kk2waIIJay@27AOy@XAK*J01*InX~N zU7usuw^O=Ghr&-i?QcQwccJ|ZwB^Mqv}QgL)OUCXRPz2;c{_IK?mJ}t$W#0kFK;DG zqkl&5e}Q}yhbkY(p7VWA8Kr|gi^+>+qD>yXl`kjR%}Fxxe)(;z-Jh%lh6vH|Vu-%- z?-`B?X- zG-e@lqRUI8!;0Hm3#M&(_fA$wpitS>3edKEus)s6OQR3x>l?^g)9`_?PCSJp;7*Ee=FcIO!?8lR=_iyP7SK8kcUDmeL9WTR8S}%Wi9m}b*C{_ zC_qcr1S=H6I{%t%1a@U4dgMzbL{uHbl~gGQtWW8OcB>bJ1t}qn z(wBgWkiJe{rO(2O)&l=wripPq=;bBmlYcJEa!*A?YYNllBon4fB}7PhF&3!j9_o8c!fQTghhhT8o?^aB!M zzIFMvC+bp%V^kaEOf*UU@521wt`mjCC3)in-`f%)~m~v=;L) z^GiiB3+s$(Cf)c7c!Q@5Z_8l~FUP7@U^s*g>(4@rj<)*q_>!XGc={O9T!gGrZuNW= zc!A+lLDS3dIT0K_5Bn~S;Bb2SR-@k-slP3P?}^}e6d&^WL8R{wBlTEkLYkK%`0wcf z8|!V_+3>#tUurnAUzfe&@8TxTopL!+&M8wQK;y+AIc00!w3+i=F^$|^1GKo5cud_@ z+zK@Ju+vuQlv&&w_^-878xW4NPV~bld$p|?;dIKI?4<9*TQvZE*(>+GFA3 zj>L5;6vKI^mg-xJ#hrk+$(A{GN)03Kl)VxK#e;!r@DyK}M3*JeTaxH~N%RS#64hXQ zHL{^=eUxu!pE^U?KFMl9B^*bQ6i>BJ-6ijEpL(;{vO&GLpGKK z%`k(yt&}7iG@B2+sjgu`vjr^Z8WuDI*PwqU0uV1W)i#hB23Wi zI&ip2M!Qu;%MO~sxZPf~(JFEn$Ri??|2xbomcjA_lv?h&X`4 zZOd>)YUL;Qr2szbRnD-`mf}f7t&C`^e>wAdgK)%r}1(+ddLJMBC~)929cjMI_K=Pb^8~wW{|HLnYQje zshP+cHi`F$T;*#Jt`G|~8_vY#R+fm|?vcBRm={lfkzHS9jkf?ycKZFaz<0%c-%GYM zLd!GS;zF~37hSzODBlgG*u@jX!6wEk$ir47niM?XSmlt8>H? z>=*!_Kv&M8lY?P&BlzkdBgozu4J-y-=LjRD81EU_zsEUdF0WJ=xM!eoGWlO$OSA** zc4h5uwfoDs2>eiQj2qG*hcQ{v2mAzWhjDj+DDPFlGLb7ig2bUU6Ff4)BUoFKao-CW zRwB69dLoF|UfX!tW0Bc&Ed1W<0NXHlzrIBH3EE)U>e&=y_JjFlsD4Ntip=)Nr5+hc z#Lu;U8(9M1emgvJk4Jvsk!Ohbh%Uw4`4v07$XW})ZTo5Gm11XV;r)Z0dM0Bab{(5^ zX$y_$1MC2(dS)q=XE^>a%d0tr@#>oisvcTP*Kx4nczM*C#~()XVC!U34SK~h@xmj! z_Iv=s_mYg|rNsR1xsE);^z2(2q2+dMNzQMCW@rtH{#!D9iK3opI;Ldbo}V6@eS6il zLBaqFk&x@$Y1C#7hUvwzf;P9|T8(?kUVo|prWM7L4By7}(D3cRXB!SThxI$T^jZBb z2WGuxNo;cm>(4?3c}%LiwqXI3jEayQlzoK0?}dFsttGi- zcJjIFz-aiQ0kyaWa#WGo&{(7yS?KHzXpXPjwkQ#HV(r;st>ugJmzibH9z}kcJwkGh zv9R_S$!6rhvv2a;I6gM1p4AZG<3<{*nGn{Ezms~2_)#5Tdmb!DO9K^1+b6Crrg9OD04&$>obgG;RGO?TKP1U5Ew?H~1=I35?^OVE0V{l3 zZqB}tNQ zbrLgzQMV_TBP{EfM3&g~dL>g6&g*Wfw~er8r6{}Hm2 z)cM&0+jyCuePjK_?X2)~vc>gudw;IsEmkpDDnJYzf>j}x0M6X4WsqYIu>FFIX}*OeV~epmgugi z1)LC_A1#nq_2fb4Qwyk^Qmz0?nJ*e!Ef6;RwhN@=7utgskn_CP)7EXWeM^gTe18q) z7Tm^3e~q&iQ`omFFZdL}Ft3%*m~%21jrWYXA`W~{30(W2#So0pV32cz(s3F1`C#92 zI;sj-2m=jv1MNpf0G=aJ#P`@;KTas#V)bJp5hTYW$h(o78wm|??gu-iaJDErfbGnA zw=!#a(j#;O#&<3##Z;|4s2latqjbNdc%&nG zQbW8HF{g}QH^$rzAE`jC3)twFozjgF#@G@27%!FGu?=!F=`~tQ1@Ap`E_Td@bE=eX z=HNym_&K^{mHrYVB3?A_m*#5;SBvWbXKI|XMf1MKIm^*FFRe!z*w5%u);QFhSz4$m zb+Q!^iLN@fZbE8t3=?Rnw4vRVBY{RrqDXzQA{sTmOBVz6_*CMWXG^OsfaXra`S6b! zK*$PKH|Q1Ay{bXw>zFMEARLfWaUxL#(HK4J#xOyx3VV{5S@a*7?g+BDO?Bj%5uRYk$g%c;d3s ztMQxt$d6PmA>Hh0lo6*`6H?|{vv(lFpziV_9W|wJm`_#L{8)7Lg)5(x8QtG?r!zQmgIPcD>;}Sp=|aX_?Y; zQKY4f45ede;I_F*{X9I`3dB9kF~ja%iKxRI0#_F(6SK*EfIS!8p)i?#}b-yWZV zkqCp2lO$_GU8+6?`+7xyutBXB5s$q6ecB9BAX!V5RbR~OyD#5IdHLgYZ zd{%bm1-s^znv`uXT`TJ~-G;6Mq2Iqd!LzIvS%NI+h8;rhaSSbl8>bIG2Uc3+0VLUB zIREiy{*jIRMs`6Qsun@hvw_mF!w#8aQ4u;8cy7=BY6&6KT`+I>&|mkxO@2)d_`@eQ zfyN#FmKv8W(P$G&F`nA1$#2jlT7DVy+z;8&LX%g3iak@8iza`;7}tGc!{P3cpW!$M ztfJ9;`A(E2BeV>weqeU>=G=~MavA``g|Foyt;tiUGF#|G9+79ZK+A|c_K@vg zPCJdvCinVyLxarx5f#<}E!M$Exq^G%{b}bB_jMq@pb1(=+(*>9qO5k;`;;b7)>T`! zJ8&n6w?X9q4;_bb()d(zfQG=yv^i^&(-@fx@ZkW8Az75nXRVqsT z!<0fxic+K$rM%GZnb3?L5ju>AWMo(l)*tr+o$TvJb{-*_leIbXf+2&^z)y)WECwzN zox6nfLE}#d@R42R$m>)>)~bY~wRI$Jxpa%@D=zmHRiy9*6RPp6+Rb&M-XnjYLa~-Y z4P#@__;)B3g!_%g2mO#}+{11c4IMar;&c$AMYsJLiBc9NbOYEJQLn9QffjXzbzST! zYiY3*efTqp-zk*$#375iHeOJAcV!oe^|n2lEBp3yWM>*a<%?@_~x zyP8Jhd`m51E`=~}e2p;2E=jeR%)mhHzJ`h1Tn>}#u{T#q_j0MXiR#`G4fdIj&=Nf} zX^e7o;bvKT`uQ2YDslkgZ9%GILg)-Cd=4D6vJa~!sPyA5ka6F&anW+|yX>QzdeQ z8gu-SyGBM9D~w)kBcml{WRz1zM&zexJ^E?qMlVerIil$(Y8*6b#$K?`=%*{fii_V( z;{HUEgcweHHH7D-*O(%uWQFfVJh!LrkQ(Alxc+Q?@Y3+lz>nC8c*CRotwT$iLBsD; zYe+Gs!uX+LOog2Z3G@uE9S%Ck?y?AEUp}Tlo_a1DDjS zR01Q8<=wri zS{$bvp6B>ijiTMg(jq()va~;r55RH0;n}su0JGRNlGIwG>{knoo(4Yw5AOEIy{P_X zh4;7MTPiqA&;SdxKSn2>+p~Ag92|=`_?cMWoI2CH0#4mUr;a~tPDM+KQ(2BW73CDC zBG>AZ8gnADn9liBCpN&!JpQ}?ixbBq^ZVx^aF|~l{Bu7ZrHy~Y7K7S0AOFHJHXr|P z(#C!*q1hP>Hpd!ZQpy~g(8_F%3giPh18sl_M8!3|6#tcGf_o+mP&a5r6t`Vm@yp=P z&or8S!oh*#`L-`>qh@B=%q&~hff{Tn^llWs~))Z5VYVWtFE{T*Q3z z&%^F@BA-w}ja1)FXcf9Ry8cf*;rf3Gr3~sbi4c*s|I!|+D{G^=vaGs#-HwR?<#M4%-Bm?syd!(-c=SuD=siKEPd98Rs9|zXh-``+GH}JMQ2J^9l+&-?~Zc0 z)u?|1y4}k9KJt!5{TpSundu|-IS!v$k@Af5(zo@sr~0@1*Pis@Y5hCME0|%Nb}J{- z>OeevOxg~zRoU=Zh;?|~b=H4|ohXj)_Ocmc(kApOr_P8&Z=g3&$2WkYDeVI*hr=PO zPny+7BBuU}DwAL9545&hUTkmNq}Avt3D{=!f!1c*qJKdkiBM!QvF&6#zhH~XueN4c zZEgOZT&%HLKhrlv^qHKlvYJ-j=AYHppwhX?Gc<1a)g#@?7~j)<97XwF{Gajd0ltr# zFR|w9D{RKMpXcix5jXKB$x*33E`}>YM}6iAKRW@Tt_VecO4`!RVw_I7T9^nd%Q=PEFy{x9BR$xS4_{A3mc)WRve9S$zNYCZpb2=n2xzgo)j{ZKa*?>|QOMWmaGm&>a7+JH??eqn8D z2h`b4#gv^Y4~AEV$2Yp7sxJ%Qgf*(gCN5YkzI)6REcQQZ1G@AifA`_N{iS_N|Iu6 z0uGfugwCtNQa@qAR?hyW&DZE@n>TGgCcySyxgFkxikd zUt&DM7CpPHhmC9fEhgX$zN*Rjk8t5B#8679YSsf5a+K4Y=|5BpNy`zcVk3l?=8#s5(3hG?XE`#f)(Dz{Yllr-)|ke$zw^w}oHvt%YMIR2AelgTh1f%?^JL*1X4K^b3$o9UIE_Cj`uDqOSlFe;nL(R2S43xEa zZH0kP`?tJIgSl-$*_INo3azMYQLcRlpFb7ESA*?0yMs4pRm)PC`o?&5a{ZIp5PhLM z4};;Y7!2W}kzW!xk1{HxprYJ=4^dzB&1b;;yLESj`?8e9)sXqwBf5C6@kZSZ+rrolTF)@+emY+VYIlosa2zNbvb2ENpr(@{zj zAk90<+2sfMO{UsVj9v4d&R}VY%wQ=;R7>_$)$(wQqntW&NR0h~%(%S!{EYMU_v<~(Eb%RAGb6pUGqaq#}HOg?MGgtU=r?9L$X4}K)G9hWd&*?ktM zz?`ct$A2;k^8W6(1U5bReUX}TxE_RG1mpKbY9^Td`GzL4Bqz@)RD|J$SoHbf8cf@o zrR<*kF2-b3ZK4REvr&ZX0S!Z}tPyHyfdOh)9nvaO=^DI_L<&2^$iwzW&O7F|QLk%- zE_`{**w`BjLLOc_1BU2R%mO@bn)ey>XwLwjJ52*R*6}gAB zIwniyyuQkTwd!{B(%gOJ^0rMbwvD=Ec>m2i*;+pIE#~5fPWv~A8T2768gq}Nn2lBQ z@{X;-0RT;BmVBtvEGg;NVii+Rg~k~NwF+`qVS3HGN{!3^9OmC&&4o{k_uE&~a*?BW z&u4wkWuJSk4`L|n(^>xyEf!hph5B+ZdFG^FZmP&ImoZ`mmndHewZ~x?()cOM9h-g1Dy+F za1y;x7Lq8Fv%%!~|D1_9#W?we3t>9{b&di1+n7slwXzSQ1zD!d5U-4%atoKjM$Ji% z)M)`VVSw?T2RAI}VU1QdVF2m|vktb1(lHgJFfn1~^|c1?qpjZ3h@i>z(d7-)o!McF z`6w)#k6>2~KpR(te=Su$sr#t5ED=F3m-}%T%d~}(x}s%Y;Mqg4Z6eq!CP>&~f`(-i zY>4k^(7tsQ+{BKeIE9_=8*`o3%%RcpE?p-lgHD65fg zH^CNS-Sap3@Uo@Bx_?0$T=-B0`3H4zdx~$v$O<6%5f!KI`>3C7;aL}c@#)ve6VWU4 zRRn1{LQX0o%X%8zXZ&0o#@GEFdj>;HpsUi=xMASb{eFbA1kP3I#+fZq&L~IE)Y;SS zV05G(cuq)`kyqI3KIPn%_ae{zR~zOlpQHs-H_TW5A+&1k4f8`IF_`Uq8Kc)n_9O^1 z+Z@!rNsQv$Rpk|^gq2W%hfAu*CecIlLS1YlLc>>bUR|}#%)^$bc~DL<56WsDa|HGr zQAcbuM`)A}4Mm$EWEkgV6Acyq?YFwXoqd74?nIGn6lx&<5bJeywnY*uE|_Z^fQQP# z@zBSVYb*tFaQar&qKT#)TJ$`}q6%eIP6NGe6W>!080+Hw13lX9D%^0?@7&domCN&< zy5*>=X1z_}0~^tJ6MYExSREaA^<7qH!TOLqX8}#Ehp2Vi;&;vX`#}FyL@kp0pVWw2 zgxd(4r?n#rC-iO+c0|!N4-XpLq7kfHRV%*KuysE2=7C{l*RpuC8dh2&QNwc7uyy|K zdwN4w-~=z-49WYT+J;=@*Z+ti7ky%~r5F;j)-q(BFTwo0|JIO;#XYHpT+Fw=^aSO2 zhFrYL3>n@iBqwE^tEf6Mo{n`RoF6(HLbu7;k#F= zqHKZPt%bjd^4+zy^AZEx6od9*wvl76C0CeYY>6m_Vv1sTETM{+Vqsb5Yn^cWZi+1_ z)!j>-+;BuMW1e$M&akY6T?Suaj_ABZUYdv3BFZkAlA^2y-I9A*oAhtyuQ(J0UvjT} z_mkzKB^6NK1;lf%)BKzHqKGs~8+Q9nZ)qo#!%o0`d}QvCPHM(X&ERB!*GL&3-|L}v zVN29b$?`=?{XOn@F7$(O2AQ?mf_& zrP$R&-B`acc*R|M0b%lNgI5?y51c1|X-D~gWb zUv_^56$+$6-^C;96LCfvB{PyJjx^%8s~K2&{i}!>TxO3{g71#r^3FuY`C0kjPfB_@mIqZNO!I`2rkG1(mJqJG5r~F9;)z6Og1g6kEny#61|IHStD8?`6s@;eBRh;E=YgY8&MNw`cFfCIKWN+Sy+-^#Y%t9yHnroNPix^Z>5y_ge_4` z+|0SUv5D{s>ZCzaZu%jVp>s&Ma*8<=$w4QtnMrdo%;s6HeDYlO3li84u0FzF-qT%t zVhCzw2p>TUom)Fe&Dmvhf>XlTieEyAwNO-QRK?jnE2bSVVTGk9+^o*vKVCC zww5K6G5Njmw7Ti_x#r9BP5l`Lo}Jeo?HDej^o!`yBuErsl#l<- zD1)g2K283uK6s#oj5-Hzi? zUyc}D^%z_9AuiIGrG{0{vo^{1z#E{H`#(%i8%uhBk<#1C_Zb2)mo1!|Q*+4-uu)+EC{d{56Z*P84s=+U~4Wv=)?{T#-(MPK96vcA1$F1AE77t5Nt z^nFs6EltQPjqy)CCr%>Vl-4f8^qMU+lf@6GX0rI_o+MCWr0ZE7+vdo6k zji{@g*Z8Ah$H{BrspIA~MBCc0aQPqe8sBFdCNG<5#_1NxI1shexpm|Jr%@!Y=_n`4 zYv}_qiu}04339ZbQ2#+*laWr4*V3^p+>n4a-!QM;(1;TW8;#>7vK!81BZsY>$Zn8y zh;ETNdBa3wWp$jBH_-L6z*O-^1g(W>?}nR?$6NY5n9|46-VHxuZ6xhsHr?mbD` z3`J{CNn}le^aq{0u|sGWA}NWii6niC^2M9MB(yN%C0scWFMGj=zlx+54jIWJo4RtC zEh9?^)8dVM4v?A_Z$hFx1r)VbvW@8!$s-%1y}~81?`3fEMuh| zEBd;J4n~PL9EX7{hmm>3!Dao6F#UOLruJfS9J526g1p?7?%Mc%2M!#t#WvmJ`9LU+ zWTcdEN8~Y090uF?b>9Fz_OzfDlbgU~3w-)toy>2P^Z(2--kJQ#&W-ZYZ}i9^+1wh< z;{WJ=25R{5Jx?tkle_Ls*?O83M{P>DLIXWb>Z;`2Oy5*(u{_MLh2{9|!gyFRS26-` z8e=Z8Nu-awAyKFW{CLwfB)UGePO@OFy1R|e$NF;~dD$axc;v$nftmQZiJKrf*|HG4 z=}U4$^!WKL2_GX`(4^hxP2pUceA{vJc-{Z7C3ZO_B@!3{a=~91SWU>sCgVU(UNx^i7b4Bv5omfR3y5VI(Uqn5(DzX`95&-%-j-eVCw| zJYC(g-vSUVDFKLbN&rqeQP~1;vgcgOwU=YP>G9thbW49~oodi6Q(1RHgKm*s5DXPD z-j*AWHRu-k{u}0MxSydxC#sqH!kAlL)dT1>oL2fTzNRskEwOZ$COy$X&QNd3)pW;N zJyonCFAOXh!d`PoYr#r<-F4u*I zEjodd<*3Wp9$koHzxA9fN8IwVWrDbGuncz~`NOD|$+o;o3&L8pj=W=khdhnHv3tF5 zF#fG_>@Dt0{VK?<=VHjzue#oP5v4$?_x&+hZk@?G_|E5Cd9o}=^nP)*aH6Y~k*E4ZzW`ib{45zp`eR{CnUhCk23FSqAhcPUj25SOZqH_Nv1 z$Tr%bRyl6*Ro`v0m>xwn(G=Ilk3NVRFDn9%AemfRQHDVYw?W_+ZJ}{$~s| zp_nCG!?!;H%crKD?Y}{lB@;i8#Bv(@C3i@r;Rt@uRC*zXxMKp{qom0D4bBJIH`^_t zFZAgnvjumDvI^|vuD{QGvL*68kF4>?W{=$A5$q9__-90*c%PSv%mVU+-yQC3&H7JR zZ?@;ZDB1BxhO7QGJil+qGoH}TM#mo%-HB5ghC02%U&-fp?07CD|A`>tCtXffV33X+ z2_2Vl*msB;JO1G8&VD+quahC>AAbnWCH!jXS3VSU2wEc))DXl4tQp=I%Qk2y{}+PZ z7ekOOKc^r@j$2}ohx_Bf4CI|3fn2x8Am6;0%@Wu-IVDO#S2PHbZIKTwA(*&IUDf=~Qc?A`~=LKqcM^7q;1gu(aBtk8B5b+bg6m+p;>7v@+zWo25 zws#a9tL+`h1;C!{_c%r~o@vQPG~3N>*5bQZ0fiPnOeCt%bMV+z_w(|2RFSKGnyN_M zY5%?3?)cqt6#0U6Cv@BHW1fGkf!uJLe_tTY(QSKw38|KyNu7xF^+=UR#&|@QJQ!fv z0@e^&O2qQWo_(y@z?yD|PFZ1C2r|HFPcc=$hGimGcm&eaetzfIogsL^0Kf90|62vm z@ES0uF~1Gdsiྨ{r`fDgftjIxU1{R1tvmnj!4mzRARe0%;sZ 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 z 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