Annotation of embedaddon/expat/examples/outline.c, revision 1.1.1.1
1.1 misho 1: /*****************************************************************
2: * outline.c
3: *
4: * Copyright 1999, Clark Cooper
5: * All rights reserved.
6: *
7: * This program is free software; you can redistribute it and/or
8: * modify it under the terms of the license contained in the
9: * COPYING file that comes with the expat distribution.
10: *
11: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
12: * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13: * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
14: * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
15: * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
16: * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
17: * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
18: *
19: * Read an XML document from standard input and print an element
20: * outline on standard output.
21: * Must be used with Expat compiled for UTF-8 output.
22: */
23:
24:
25: #include <stdio.h>
26: #include <expat.h>
27:
28: #if defined(__amigaos__) && defined(__USE_INLINE__)
29: #include <proto/expat.h>
30: #endif
31:
32: #ifdef XML_LARGE_SIZE
33: #if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400
34: #define XML_FMT_INT_MOD "I64"
35: #else
36: #define XML_FMT_INT_MOD "ll"
37: #endif
38: #else
39: #define XML_FMT_INT_MOD "l"
40: #endif
41:
42: #define BUFFSIZE 8192
43:
44: char Buff[BUFFSIZE];
45:
46: int Depth;
47:
48: static void XMLCALL
49: start(void *data, const char *el, const char **attr)
50: {
51: int i;
52:
53: for (i = 0; i < Depth; i++)
54: printf(" ");
55:
56: printf("%s", el);
57:
58: for (i = 0; attr[i]; i += 2) {
59: printf(" %s='%s'", attr[i], attr[i + 1]);
60: }
61:
62: printf("\n");
63: Depth++;
64: }
65:
66: static void XMLCALL
67: end(void *data, const char *el)
68: {
69: Depth--;
70: }
71:
72: int
73: main(int argc, char *argv[])
74: {
75: XML_Parser p = XML_ParserCreate(NULL);
76: if (! p) {
77: fprintf(stderr, "Couldn't allocate memory for parser\n");
78: exit(-1);
79: }
80:
81: XML_SetElementHandler(p, start, end);
82:
83: for (;;) {
84: int done;
85: int len;
86:
87: len = (int)fread(Buff, 1, BUFFSIZE, stdin);
88: if (ferror(stdin)) {
89: fprintf(stderr, "Read error\n");
90: exit(-1);
91: }
92: done = feof(stdin);
93:
94: if (XML_Parse(p, Buff, len, done) == XML_STATUS_ERROR) {
95: fprintf(stderr, "Parse error at line %" XML_FMT_INT_MOD "u:\n%s\n",
96: XML_GetCurrentLineNumber(p),
97: XML_ErrorString(XML_GetErrorCode(p)));
98: exit(-1);
99: }
100:
101: if (done)
102: break;
103: }
104: XML_ParserFree(p);
105: return 0;
106: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>