Home | History | Annotate | Download | only in libxmlrpg
      1       * Summary: internals routines and limits exported by the parser.
      2       * Description: this module exports a number of internal parsing routines
      3       *              they are not really all intended for applications but
      4       *              can prove useful doing low level processing.
      5       *
      6       * Copy: See Copyright for the status of this software.
      7       *
      8       * Author: Patrick Monnerat <pm (a] datasphere.ch>, DATASPHERE S.A.
      9 
     10       /if not defined(XML_PARSER_INTERNALS_H__)
     11       /define XML_PARSER_INTERNALS_H__
     12 
     13       /include "libxmlrpg/xmlversion"
     14       /include "libxmlrpg/parser"
     15       /include "libxmlrpg/HTMLparser"
     16       /include "libxmlrpg/chvalid"
     17 
     18       * xmlParserMaxDepth:
     19       *
     20       * arbitrary depth limit for the XML documents that we allow to
     21       * process. This is not a limitation of the parser but a safety
     22       * boundary feature, use XML_PARSE_HUGE option to override it.
     23 
     24      d xmlParserMaxDepth...
     25      d                 s             10u 0 import('xmlParserMaxDepth')
     26 
     27       * XML_MAX_TEXT_LENGTH:
     28       *
     29       * Maximum size allowed for a single text node when building a tree.
     30       * This is not a limitation of the parser but a safety boundary feature,
     31       * use XML_PARSE_HUGE option to override it.
     32       * Introduced in 2.9.0
     33 
     34      d XML_MAX_TEXT_LENGTH...
     35      d                 c                   10000000
     36 
     37       * XML_MAX_NAME_LENGTH:
     38       *
     39       * Maximum size allowed for a markup identitier
     40       * This is not a limitation of the parser but a safety boundary feature,
     41       * use XML_PARSE_HUGE option to override it.
     42       * Note that with the use of parsing dictionaries overriding the limit
     43       * may result in more runtime memory usage in face of "unfriendly' content
     44       * Introduced in 2.9.0
     45 
     46      d XML_MAX_NAME_LENGTH...
     47      d                 c                   50000
     48 
     49       * XML_MAX_DICTIONARY_LIMIT:
     50       *
     51       * Maximum size allowed by the parser for a dictionary by default
     52       * This is not a limitation of the parser but a safety boundary feature,
     53       * use XML_PARSE_HUGE option to override it.
     54       * Introduced in 2.9.0
     55 
     56      d XML_MAX_DICTIONARY_LIMIT...
     57      d                 c                   10000000
     58 
     59       * XML_MAX_LOOKUP_LIMIT:
     60       *
     61       * Maximum size allowed by the parser for ahead lookup
     62       * This is an upper boundary enforced by the parser to avoid bad
     63       * behaviour on "unfriendly' content
     64       * Introduced in 2.9.0
     65 
     66      d XML_MAX_LOOKUP_LIMIT...
     67      d                 c                   10000000
     68 
     69       * XML_MAX_NAMELEN:
     70       *
     71       * Identifiers can be longer, but this will be more costly
     72       * at runtime.
     73 
     74      d XML_MAX_NAMELEN...
     75      d                 c                   100
     76 
     77       * INPUT_CHUNK:
     78       *
     79       * The parser tries to always have that amount of input ready.
     80       * One of the point is providing context when reporting errors.
     81 
     82      d INPUT_CHUNK     c                   250
     83 
     84       * Global variables used for predefined strings.
     85 
     86      d xmlStringText   s              4    import('xmlStringText')              \0 in 5th byte
     87 
     88      d xmlStringTextNoenc...
     89      d                 s              9    import('xmlStringTextNoenc')         \0 in 10th byte
     90 
     91      d xmlStringComment...
     92      d                 s              7    import('xmlStringComment')           \0 in 8th byte
     93 
     94       * Function to finish the work of the macros where needed.
     95 
     96      d xmlIsLetter     pr            10i 0 extproc('xmlIsLetter')
     97      d c                             10i 0 value
     98 
     99       * Parser context.
    100 
    101      d xmlCreateFileParserCtxt...
    102      d                 pr                  extproc('xmlCreateFileParserCtxt')
    103      d                                     like(xmlParserCtxtPtr)
    104      d filename                        *   value options(*string)               const char *
    105 
    106      d xmlCreateURLParserCtxt...
    107      d                 pr                  extproc('xmlCreateURLParserCtxt')
    108      d                                     like(xmlParserCtxtPtr)
    109      d filename                        *   value options(*string)               const char *
    110      d options                       10i 0 value
    111 
    112      d xmlCreateMemoryParserCtxt...
    113      d                 pr                  extproc('xmlCreateMemoryParserCtxt')
    114      d                                     like(xmlParserCtxtPtr)
    115      d buffer                          *   value options(*string)               const char *
    116      d size                          10i 0 value
    117 
    118      d xmlCreateEntityParserCtxt...
    119      d                 pr                  extproc('xmlCreateEntityParserCtxt')
    120      d                                     like(xmlParserCtxtPtr)
    121      d URL                             *   value options(*string)               const xmlChar *
    122      d ID                              *   value options(*string)               const xmlChar *
    123      d base                            *   value options(*string)               const xmlChar *
    124 
    125      d xmlSwitchEncoding...
    126      d                 pr            10i 0 extproc('xmlSwitchEncoding')
    127      d ctxt                                value like(xmlParserCtxtPtr)
    128      d enc                                 value like(xmlCharEncoding)
    129 
    130      d xmlSwitchToEncoding...
    131      d                 pr            10i 0 extproc('xmlSwitchToEncoding')
    132      d ctxt                                value like(xmlParserCtxtPtr)
    133      d handler                             value like(xmlCharEncodingHandlerPtr)
    134 
    135      d xmlSwitchInputEncoding...
    136      d                 pr            10i 0 extproc('xmlSwitchInputEncoding')
    137      d ctxt                                value like(xmlParserCtxtPtr)
    138      d input                               value like(xmlParserInputPtr)
    139      d handler                             value like(xmlCharEncodingHandlerPtr)
    140 
    141       * Input Streams.
    142 
    143      d xmlNewStringInputStream...
    144      d                 pr                  extproc('xmlNewStringInputStream')
    145      d                                     like(xmlParserInputPtr)
    146      d ctxt                                value like(xmlParserCtxtPtr)
    147      d buffer                          *   value options(*string)               const xmlChar *
    148 
    149      d xmlNewEntityInputStream...
    150      d                 pr                  extproc('xmlNewEntityInputStream')
    151      d                                     like(xmlParserInputPtr)
    152      d ctxt                                value like(xmlParserCtxtPtr)
    153      d entity                              value like(xmlEntityPtr)
    154 
    155      d xmlPushInput    pr            10i 0 extproc('xmlPushInput')
    156      d ctxt                                value like(xmlParserCtxtPtr)
    157      d input                               value like(xmlParserInputPtr)
    158 
    159      d xmlPopInput     pr                  extproc('xmlPopInput')
    160      d                                     like(xmlChar)
    161      d ctxt                                value like(xmlParserCtxtPtr)
    162 
    163      d xmlFreeInputStream...
    164      d                 pr                  extproc('xmlFreeInputStream')
    165      d input                               value like(xmlParserInputPtr)
    166 
    167      d xmlNewInputFromFile...
    168      d                 pr                  extproc('xmlNewInputFromFile')
    169      d                                     like(xmlParserInputPtr)
    170      d ctxt                                value like(xmlParserCtxtPtr)
    171      d filename                        *   value options(*string)               const char *
    172 
    173      d xmlNewInputStream...
    174      d                 pr                  extproc('xmlNewInputStream')
    175      d                                     like(xmlParserInputPtr)
    176      d ctxt                                value like(xmlParserCtxtPtr)
    177 
    178       * Namespaces.
    179 
    180      d xmlSplitQName   pr              *   extproc('xmlSplitQName')             xmlChar *
    181      d ctxt                                value like(xmlParserCtxtPtr)
    182      d name                            *   value options(*string)               const xmlChar *
    183      d prefix                          *                                        xmlChar *(*)
    184 
    185       * Generic production rules.
    186 
    187      d xmlParseName    pr              *   extproc('xmlParseName')              const xmlChar *
    188      d ctxt                                value like(xmlParserCtxtPtr)
    189 
    190      d xmlParseNmtoken...
    191      d                 pr              *   extproc('xmlParseNmtoken')           xmlChar *
    192      d ctxt                                value like(xmlParserCtxtPtr)
    193 
    194      d xmlParseEntityValue...
    195      d                 pr              *   extproc('xmlParseEntityValue')       xmlChar *
    196      d ctxt                                value like(xmlParserCtxtPtr)
    197      d orig                            *                                        xmlChar *(*)
    198 
    199      d xmlParseAttValue...
    200      d                 pr              *   extproc('xmlParseAttValue')          xmlChar *
    201      d ctxt                                value like(xmlParserCtxtPtr)
    202 
    203      d xmlParseSystemLiteral...
    204      d                 pr              *   extproc('xmlParseSystemLiteral')     xmlChar *
    205      d ctxt                                value like(xmlParserCtxtPtr)
    206 
    207      d xmlParsePubidLiteral...
    208      d                 pr              *   extproc('xmlParsePubidLiteral')      xmlChar *
    209      d ctxt                                value like(xmlParserCtxtPtr)
    210 
    211      d xmlParseCharData...
    212      d                 pr                  extproc('xmlParseCharData')
    213      d ctxt                                value like(xmlParserCtxtPtr)
    214      d cdata                         10i 0 value
    215 
    216      d xmlParseExternalID...
    217      d                 pr              *   extproc('xmlParseExternalID')        xmlChar *
    218      d ctxt                                value like(xmlParserCtxtPtr)
    219      d publicID                        *                                        xmlChar *(*)
    220      d strict                        10i 0 value
    221 
    222      d xmlParseComment...
    223      d                 pr                  extproc('xmlParseComment')
    224      d ctxt                                value like(xmlParserCtxtPtr)
    225 
    226      d xmlParsePITarget...
    227      d                 pr              *   extproc('xmlParsePITarget')          const xmlChar *
    228      d ctxt                                value like(xmlParserCtxtPtr)
    229 
    230      d xmlParsePI      pr                  extproc('xmlParsePI')
    231      d ctxt                                value like(xmlParserCtxtPtr)
    232 
    233      d xmlParseNotationDecl...
    234      d                 pr                  extproc('xmlParseNotationDecl')
    235      d ctxt                                value like(xmlParserCtxtPtr)
    236 
    237      d xmlParseEntityDecl...
    238      d                 pr                  extproc('xmlParseEntityDecl')
    239      d ctxt                                value like(xmlParserCtxtPtr)
    240 
    241      d xmlParseDefaultDecl...
    242      d                 pr            10i 0 extproc('xmlParseDefaultDecl')
    243      d ctxt                                value like(xmlParserCtxtPtr)
    244      d value                           *                                        xmlChar *(*)
    245 
    246      d xmlParseNotationType...
    247      d                 pr                  extproc('xmlParseNotationType')
    248      d                                     like(xmlEnumerationPtr)
    249      d ctxt                                value like(xmlParserCtxtPtr)
    250 
    251      d xmlParseEnumerationType...
    252      d                 pr                  extproc('xmlParseEnumerationType')
    253      d                                     like(xmlEnumerationPtr)
    254      d ctxt                                value like(xmlParserCtxtPtr)
    255 
    256      d xmlParseEnumeratedType...
    257      d                 pr            10i 0 extproc('xmlParseEnumeratedType')
    258      d ctxt                                value like(xmlParserCtxtPtr)
    259      d tree                            *   value                                xmlEnumerationPtr *
    260 
    261      d xmlParseAttributeType...
    262      d                 pr            10i 0 extproc('xmlParseAttributeType')
    263      d ctxt                                value like(xmlParserCtxtPtr)
    264      d tree                            *   value                                xmlEnumerationPtr *
    265 
    266      d xmlParseAttributeListDecl...
    267      d                 pr                  extproc('xmlParseAttributeListDecl')
    268      d ctxt                                value like(xmlParserCtxtPtr)
    269 
    270      d xmlParseElementMixedContentDecl...
    271      d                 pr                  extproc(
    272      d                                     'xmlParseElementMixedContentDecl')
    273      d                                     like(xmlElementContentPtr)
    274      d ctxt                                value like(xmlParserCtxtPtr)
    275      d inputchk                      10i 0 value
    276 
    277      d xmlParseElementChildrenContentDecl...
    278      d                 pr                  extproc(
    279      d                                     'xmlParseElementChildrenContentDecl')
    280      d                                     like(xmlElementContentPtr)
    281      d ctxt                                value like(xmlParserCtxtPtr)
    282      d inputchk                      10i 0 value
    283 
    284      d xmlParseElementContentDecl...
    285      d                 pr            10i 0 extproc('xmlParseElementContentDecl')
    286      d ctxt                                value like(xmlParserCtxtPtr)
    287      d name                            *   value options(*string)               const xmlChar *
    288      d result                          *   value                                xmlElementContentPtr
    289      d                                                                          *
    290 
    291      d xmlParseElementDecl...
    292      d                 pr            10i 0 extproc('xmlParseElementDecl')
    293      d ctxt                                value like(xmlParserCtxtPtr)
    294 
    295      d xmlParseMarkupDecl...
    296      d                 pr                  extproc('xmlParseMarkupDecl')
    297      d ctxt                                value like(xmlParserCtxtPtr)
    298 
    299      d xmlParseCharRef...
    300      d                 pr            10i 0 extproc('xmlParseCharRef')
    301      d ctxt                                value like(xmlParserCtxtPtr)
    302 
    303      d xmlParseEntityRef...
    304      d                 pr                  extproc('xmlParseEntityRef')
    305      d                                     like(xmlEntityPtr)
    306      d ctxt                                value like(xmlParserCtxtPtr)
    307 
    308      d xmlParseReference...
    309      d                 pr                  extproc('xmlParseReference')
    310      d ctxt                                value like(xmlParserCtxtPtr)
    311 
    312      d xmlParsePEReference...
    313      d                 pr                  extproc('xmlParsePEReference')
    314      d ctxt                                value like(xmlParserCtxtPtr)
    315 
    316      d xmlParseDocTypeDecl...
    317      d                 pr                  extproc('xmlParseDocTypeDecl')
    318      d ctxt                                value like(xmlParserCtxtPtr)
    319 
    320       /if defined(LIBXML_SAX1_ENABLED)
    321      d xmlParseAttribute...
    322      d                 pr              *   extproc('xmlParseAttribute')         const xmlChar *
    323      d ctxt                                value like(xmlParserCtxtPtr)
    324      d value                           *                                        xmlChar *(*)
    325 
    326      d xmlParseStartTag...
    327      d                 pr              *   extproc('xmlParseStartTag')          const xmlChar *
    328      d ctxt                                value like(xmlParserCtxtPtr)
    329 
    330      d xmlParseEndTag  pr                  extproc('xmlParseEndTag')
    331      d ctxt                                value like(xmlParserCtxtPtr)
    332       /endif                                                                    LIBXML_SAX1_ENABLED
    333 
    334      d xmlParseCDSect  pr                  extproc('xmlParseCDSect')
    335      d ctxt                                value like(xmlParserCtxtPtr)
    336 
    337      d xmlParseContent...
    338      d                 pr                  extproc('xmlParseContent')
    339      d ctxt                                value like(xmlParserCtxtPtr)
    340 
    341      d xmlParseElement...
    342      d                 pr                  extproc('xmlParseElement')
    343      d ctxt                                value like(xmlParserCtxtPtr)
    344 
    345      d xmlParseVersionNum...
    346      d                 pr              *   extproc('xmlParseVersionNum')        xmlChar *
    347      d ctxt                                value like(xmlParserCtxtPtr)
    348 
    349      d xmlParseVersionInfo...
    350      d                 pr              *   extproc('xmlParseVersionInfo')       xmlChar *
    351      d ctxt                                value like(xmlParserCtxtPtr)
    352 
    353      d xmlParseEncName...
    354      d                 pr              *   extproc('xmlParseEncName')           xmlChar *
    355      d ctxt                                value like(xmlParserCtxtPtr)
    356 
    357      d xmlParseEncodingDecl...
    358      d                 pr              *   extproc('xmlParseEncodingDecl')      const xmlChar *
    359      d ctxt                                value like(xmlParserCtxtPtr)
    360 
    361      d xmlParseSDDecl  pr            10i 0 extproc('xmlParseSDDecl')
    362      d ctxt                                value like(xmlParserCtxtPtr)
    363 
    364      d xmlParseXMLDecl...
    365      d                 pr                  extproc('xmlParseXMLDecl')
    366      d ctxt                                value like(xmlParserCtxtPtr)
    367 
    368      d xmlParseTextDecl...
    369      d                 pr                  extproc('xmlParseTextDecl')
    370      d ctxt                                value like(xmlParserCtxtPtr)
    371 
    372      d xmlParseMisc    pr                  extproc('xmlParseMisc')
    373      d ctxt                                value like(xmlParserCtxtPtr)
    374 
    375      d xmlParseExternalSubset...
    376      d                 pr                  extproc('xmlParseExternalSubset')
    377      d ctxt                                value like(xmlParserCtxtPtr)
    378      d ExternalID                      *   value options(*string)               const xmlChar *
    379      d SystemID                        *   value options(*string)               const xmlChar *
    380 
    381       * XML_SUBSTITUTE_NONE:
    382       *
    383       * If no entities need to be substituted.
    384 
    385      d XML_SUBSTITUTE_NONE...
    386      d                 c                   0
    387 
    388       * XML_SUBSTITUTE_REF:
    389       *
    390       * Whether general entities need to be substituted.
    391 
    392      d XML_SUBSTITUTE_REF...
    393      d                 c                   1
    394 
    395       * XML_SUBSTITUTE_PEREF:
    396       *
    397       * Whether parameter entities need to be substituted.
    398 
    399      d XML_SUBSTITUTE_PEREF...
    400      d                 c                   2
    401 
    402       * XML_SUBSTITUTE_BOTH:
    403       *
    404       * Both general and parameter entities need to be substituted.
    405 
    406      d XML_SUBSTITUTE_BOTH...
    407      d                 c                   3
    408 
    409      d xmlStringDecodeEntities...
    410      d                 pr              *   extproc('xmlStringDecodeEntities')   xmlChar *
    411      d ctxt                                value like(xmlParserCtxtPtr)
    412      d str                             *   value options(*string)               const xmlChar *
    413      d what                          10i 0 value
    414      d end                                 value like(xmlChar)
    415      d end2                                value like(xmlChar)
    416      d end3                                value like(xmlChar)
    417 
    418      d xmlStringLenDecodeEntities...
    419      d                 pr              *   extproc('xmlStringLenDecodeEntities')xmlChar *
    420      d ctxt                                value like(xmlParserCtxtPtr)
    421      d str                             *   value options(*string)               const xmlChar *
    422      d len                           10i 0 value
    423      d what                          10i 0 value
    424      d end                                 value like(xmlChar)
    425      d end2                                value like(xmlChar)
    426      d end3                                value like(xmlChar)
    427 
    428       * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP.
    429 
    430      d nodePush        pr            10i 0 extproc('nodePush')
    431      d ctxt                                value like(xmlParserCtxtPtr)
    432      d value                               value like(xmlNodePtr)
    433 
    434      d nodePop         pr                  extproc('nodePop')
    435      d                                     like(xmlNodePtr)
    436      d ctxt                                value like(xmlParserCtxtPtr)
    437 
    438      d inputPush       pr            10i 0 extproc('inputPush')
    439      d ctxt                                value like(xmlParserCtxtPtr)
    440      d value                               value like(xmlParserInputPtr)
    441 
    442      d inputPop        pr                  extproc('inputPop')
    443      d                                     like(xmlParserInputPtr)
    444      d ctxt                                value like(xmlParserCtxtPtr)
    445 
    446      d namePop         pr              *   extproc('namePop')                   const xmlChar *
    447      d ctxt                                value like(xmlParserCtxtPtr)
    448 
    449      d namePush        pr            10i 0 extproc('namePush')
    450      d ctxt                                value like(xmlParserCtxtPtr)
    451      d value                           *   value options(*string)               const xmlChar *
    452 
    453       * other commodities shared between parser.c and parserInternals.
    454 
    455      d xmlSkipBlankChars...
    456      d                 pr            10i 0 extproc('xmlSkipBlankChars')
    457      d ctxt                                value like(xmlParserCtxtPtr)
    458 
    459      d xmlStringCurrentChar...
    460      d                 pr            10i 0 extproc('xmlStringCurrentChar')
    461      d ctxt                                value like(xmlParserCtxtPtr)
    462      d cur                             *   value options(*string)               const xmlChar *
    463      d len                             *   value                                int *
    464 
    465      d xmlParserHandlePEReference...
    466      d                 pr                  extproc('xmlParserHandlePEReference')
    467      d ctxt                                value like(xmlParserCtxtPtr)
    468 
    469      d xmlCheckLanguageID...
    470      d                 pr            10i 0 extproc('xmlCheckLanguageID')
    471      d lang                            *   value options(*string)               const xmlChar *
    472 
    473       * Really core function shared with HTML parser.
    474 
    475      d xmlCurrentChar  pr            10i 0 extproc('xmlCurrentChar')
    476      d ctxt                                value like(xmlParserCtxtPtr)
    477      d len                             *   value                                int *
    478 
    479      d xmlCopyCharMultiByte...
    480      d                 pr            10i 0 extproc('xmlCopyCharMultiByte')
    481      d out                             *   value options(*string)               xmlChar *
    482      d val                           10i 0 value
    483 
    484      d xmlCopyChar     pr            10i 0 extproc('xmlCopyChar')
    485      d len                           10i 0 value
    486      d out                             *   value options(*string)               xmlChar *
    487      d val                           10i 0 value
    488 
    489      d xmlNextChar     pr                  extproc('xmlNextChar')
    490      d ctxt                                value like(xmlParserCtxtPtr)
    491 
    492      d xmlParserInputShrink...
    493      d                 pr                  extproc('xmlParserInputShrink')
    494      d in                                  value like(xmlParserInputPtr)
    495 
    496       /if defined(LIBXML_HTML_ENABLED)
    497 
    498       * Actually comes from the HTML parser but launched from the init stuff.
    499 
    500      d htmlInitAutoClose...
    501      d                 pr                  extproc('htmlInitAutoClose')
    502 
    503      d htmlCreateFileParserCtxt...
    504      d                 pr                  extproc('htmlCreateFileParserCtxt')
    505      d                                     like(htmlParserCtxtPtr)
    506      d filename                        *   value options(*string)               const char *
    507      d encoding                        *   value options(*string)               const char *
    508       /endif
    509 
    510       * Specific function to keep track of entities references
    511       * and used by the XSLT debugger.
    512 
    513       /if defined(LIBXML_LEGACY_ENABLED)
    514       * xmlEntityReferenceFunc:
    515       * @ent: the entity
    516       * @firstNode:  the fist node in the chunk
    517       * @lastNode:  the last nod in the chunk
    518       *
    519       * Callback function used when one needs to be able to track back the
    520       * provenance of a chunk of nodes inherited from an entity replacement.
    521 
    522      d xmlEntityReferenceFunc...
    523      d                 s               *   based(######typedef######)
    524      d                                     procptr
    525 
    526      d xmlSetEntityReferenceFunc...
    527      d                 pr                  extproc('xmlSetEntityReferenceFunc')
    528      d func                                value like(xmlEntityReferenceFunc)
    529 
    530      d xmlParseQuotedString...
    531      d                 pr              *   extproc('xmlParseQuotedString')      xmlChar *
    532      d ctxt                                value like(xmlParserCtxtPtr)
    533 
    534      d xmlParseNamespace...
    535      d                 pr                  extproc('xmlParseNamespace')
    536      d ctxt                                value like(xmlParserCtxtPtr)
    537 
    538      d xmlNamespaceParseNSDef...
    539      d                 pr              *   extproc('xmlNamespaceParseNSDef')    xmlChar *
    540      d ctxt                                value like(xmlParserCtxtPtr)
    541 
    542      d xmlScanName     pr              *   extproc('xmlScanName')               xmlChar *
    543      d ctxt                                value like(xmlParserCtxtPtr)
    544 
    545      d xmlNamespaceParseNCName...
    546      d                 pr              *   extproc('xmlNamespaceParseNCName')   xmlChar *
    547      d ctxt                                value like(xmlParserCtxtPtr)
    548 
    549      d xmlParserHandleReference...
    550      d                 pr                  extproc('xmlParserHandleReference')
    551      d ctxt                                value like(xmlParserCtxtPtr)
    552 
    553      d xmlNamespaceParseQName...
    554      d                 pr              *   extproc('xmlNamespaceParseQName')    xmlChar *
    555      d ctxt                                value like(xmlParserCtxtPtr)
    556      d prefix                          *                                        xmlChar *(*)
    557 
    558       * Entities
    559 
    560      d xmlDecodeEntities...
    561      d                 pr              *   extproc('xmlDecodeEntities')         xmlChar *
    562      d ctxt                                value like(xmlParserCtxtPtr)
    563      d len                           10i 0 value
    564      d what                          10i 0 value
    565      d end                                 value like(xmlChar)
    566      d end2                                value like(xmlChar)
    567      d end3                                value like(xmlChar)
    568 
    569      d xmlHandleEntity...
    570      d                 pr                  extproc('xmlHandleEntity')
    571      d ctxt                                value like(xmlParserCtxtPtr)
    572      d entity                              value like(xmlEntityPtr)
    573       /endif                                                                    LIBXML_LEGACY_ENABLD
    574 
    575       /endif
    576