home *** CD-ROM | disk | FTP | other *** search
/ Netrunner 2004 October / NETRUNNER0410.ISO / regular / ActivePerl-5.8.4.810-MSWin32-x86.msi / _e906101f091d22de433b40c3426898dc < prev    next >
Text File  |  2004-06-01  |  2KB  |  91 lines

  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.  */
  22.  
  23.  
  24. #include <stdio.h>
  25. #include <expat.h>
  26.  
  27. #define BUFFSIZE        8192
  28.  
  29. char Buff[BUFFSIZE];
  30.  
  31. int Depth;
  32.  
  33. static void
  34. start(void *data, const char *el, const char **attr)
  35. {
  36.   int i;
  37.  
  38.   for (i = 0; i < Depth; i++)
  39.     printf("  ");
  40.  
  41.   printf("%s", el);
  42.  
  43.   for (i = 0; attr[i]; i += 2) {
  44.     printf(" %s='%s'", attr[i], attr[i + 1]);
  45.   }
  46.  
  47.   printf("\n");
  48.   Depth++;
  49. }
  50.  
  51. static void
  52. end(void *data, const char *el)
  53. {
  54.   Depth--;
  55. }
  56.  
  57. int
  58. main(int argc, char *argv[])
  59. {
  60.   XML_Parser p = XML_ParserCreate(NULL);
  61.   if (! p) {
  62.     fprintf(stderr, "Couldn't allocate memory for parser\n");
  63.     exit(-1);
  64.   }
  65.  
  66.   XML_SetElementHandler(p, start, end);
  67.  
  68.   for (;;) {
  69.     int done;
  70.     int len;
  71.  
  72.     len = fread(Buff, 1, BUFFSIZE, stdin);
  73.     if (ferror(stdin)) {
  74.       fprintf(stderr, "Read error\n");
  75.       exit(-1);
  76.     }
  77.     done = feof(stdin);
  78.  
  79.     if (XML_Parse(p, Buff, len, done) == XML_STATUS_ERROR) {
  80.       fprintf(stderr, "Parse error at line %d:\n%s\n",
  81.               XML_GetCurrentLineNumber(p),
  82.               XML_ErrorString(XML_GetErrorCode(p)));
  83.       exit(-1);
  84.     }
  85.  
  86.     if (done)
  87.       break;
  88.   }
  89.   return 0;
  90. }
  91.