File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / expat / examples / outline.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:00:54 2012 UTC (12 years, 4 months ago) by misho
Branches: expat, MAIN
CVS tags: v2_1_0, v2_0_1p0, v2_0_1, HEAD
expat

    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>