Annotation of embedaddon/expat/examples/elements.c, revision 1.1

1.1     ! misho       1: /* This is simple demonstration of how to use expat. This program
        !             2:    reads an XML document from standard input and writes a line with
        !             3:    the name of each element to standard output indenting child
        !             4:    elements by one tab stop more than their parent element.
        !             5:    It must be used with Expat compiled for UTF-8 output.
        !             6: */
        !             7: 
        !             8: #include <stdio.h>
        !             9: #include "expat.h"
        !            10: 
        !            11: #if defined(__amigaos__) && defined(__USE_INLINE__)
        !            12: #include <proto/expat.h>
        !            13: #endif
        !            14: 
        !            15: #ifdef XML_LARGE_SIZE
        !            16: #if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400
        !            17: #define XML_FMT_INT_MOD "I64"
        !            18: #else
        !            19: #define XML_FMT_INT_MOD "ll"
        !            20: #endif
        !            21: #else
        !            22: #define XML_FMT_INT_MOD "l"
        !            23: #endif
        !            24: 
        !            25: static void XMLCALL
        !            26: startElement(void *userData, const char *name, const char **atts)
        !            27: {
        !            28:   int i;
        !            29:   int *depthPtr = (int *)userData;
        !            30:   for (i = 0; i < *depthPtr; i++)
        !            31:     putchar('\t');
        !            32:   puts(name);
        !            33:   *depthPtr += 1;
        !            34: }
        !            35: 
        !            36: static void XMLCALL
        !            37: endElement(void *userData, const char *name)
        !            38: {
        !            39:   int *depthPtr = (int *)userData;
        !            40:   *depthPtr -= 1;
        !            41: }
        !            42: 
        !            43: int
        !            44: main(int argc, char *argv[])
        !            45: {
        !            46:   char buf[BUFSIZ];
        !            47:   XML_Parser parser = XML_ParserCreate(NULL);
        !            48:   int done;
        !            49:   int depth = 0;
        !            50:   XML_SetUserData(parser, &depth);
        !            51:   XML_SetElementHandler(parser, startElement, endElement);
        !            52:   do {
        !            53:     int len = (int)fread(buf, 1, sizeof(buf), stdin);
        !            54:     done = len < sizeof(buf);
        !            55:     if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
        !            56:       fprintf(stderr,
        !            57:               "%s at line %" XML_FMT_INT_MOD "u\n",
        !            58:               XML_ErrorString(XML_GetErrorCode(parser)),
        !            59:               XML_GetCurrentLineNumber(parser));
        !            60:       return 1;
        !            61:     }
        !            62:   } while (!done);
        !            63:   XML_ParserFree(parser);
        !            64:   return 0;
        !            65: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>