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>