00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef __XML_GLOBALS_H
00028
00029 #define __XML_GLOBALS_H
00030
00031
00032
00033 #include <libxml/xmlversion.h>
00034
00035 #include <libxml/parser.h>
00036
00037 #include <libxml/xmlerror.h>
00038
00039 #include <libxml/SAX.h>
00040
00041 #include <libxml/SAX2.h>
00042
00043 #include <libxml/xmlmemory.h>
00044
00045
00046
00047 #ifdef __cplusplus
00048
00049 extern "C" {
00050
00051 #endif
00052
00053
00054
00055 XMLPUBFUN void XMLCALL xmlInitGlobals(void);
00056
00057 XMLPUBFUN void XMLCALL xmlCleanupGlobals(void);
00058
00059
00060
00061 typedef xmlParserInputBufferPtr (*xmlParserInputBufferCreateFilenameFunc) (const char *URI, xmlCharEncoding enc);
00062
00063 typedef xmlOutputBufferPtr (*xmlOutputBufferCreateFilenameFunc) (const char *URI, xmlCharEncodingHandlerPtr encoder, int compression);
00064
00065 XMLPUBFUN xmlParserInputBufferCreateFilenameFunc
00066
00067 XMLCALL xmlParserInputBufferCreateFilenameDefault (xmlParserInputBufferCreateFilenameFunc func);
00068
00069 XMLPUBFUN xmlOutputBufferCreateFilenameFunc
00070
00071 XMLCALL xmlOutputBufferCreateFilenameDefault (xmlOutputBufferCreateFilenameFunc func);
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 #undef docbDefaultSAXHandler
00086
00087 #undef htmlDefaultSAXHandler
00088
00089 #undef oldXMLWDcompatibility
00090
00091 #undef xmlBufferAllocScheme
00092
00093 #undef xmlDefaultBufferSize
00094
00095 #undef xmlDefaultSAXHandler
00096
00097 #undef xmlDefaultSAXLocator
00098
00099 #undef xmlDoValidityCheckingDefaultValue
00100
00101 #undef xmlFree
00102
00103 #undef xmlGenericError
00104
00105 #undef xmlStructuredError
00106
00107 #undef xmlGenericErrorContext
00108
00109 #undef xmlGetWarningsDefaultValue
00110
00111 #undef xmlIndentTreeOutput
00112
00113 #undef xmlTreeIndentString
00114
00115 #undef xmlKeepBlanksDefaultValue
00116
00117 #undef xmlLineNumbersDefaultValue
00118
00119 #undef xmlLoadExtDtdDefaultValue
00120
00121 #undef xmlMalloc
00122
00123 #undef xmlMallocAtomic
00124
00125 #undef xmlMemStrdup
00126
00127 #undef xmlParserDebugEntities
00128
00129 #undef xmlParserVersion
00130
00131 #undef xmlPedanticParserDefaultValue
00132
00133 #undef xmlRealloc
00134
00135 #undef xmlSaveNoEmptyTags
00136
00137 #undef xmlSubstituteEntitiesDefaultValue
00138
00139 #undef xmlRegisterNodeDefaultValue
00140
00141 #undef xmlDeregisterNodeDefaultValue
00142
00143 #undef xmlLastError
00144
00145 #undef xmlParserInputBufferCreateFilenameValue
00146
00147 #undef xmlOutputBufferCreateFilenameValue
00148
00149
00150
00151 typedef void (*xmlRegisterNodeFunc) (xmlNodePtr node);
00152
00153 typedef void (*xmlDeregisterNodeFunc) (xmlNodePtr node);
00154
00155
00156
00157 typedef struct _xmlGlobalState xmlGlobalState;
00158
00159 typedef xmlGlobalState *xmlGlobalStatePtr;
00160
00161 struct _xmlGlobalState
00162
00163 {
00164
00165 const char *xmlParserVersion;
00166
00167
00168
00169 xmlSAXLocator xmlDefaultSAXLocator;
00170
00171 xmlSAXHandlerV1 xmlDefaultSAXHandler;
00172
00173 xmlSAXHandlerV1 docbDefaultSAXHandler;
00174
00175 xmlSAXHandlerV1 htmlDefaultSAXHandler;
00176
00177
00178
00179 xmlFreeFunc xmlFree;
00180
00181 xmlMallocFunc xmlMalloc;
00182
00183 xmlStrdupFunc xmlMemStrdup;
00184
00185 xmlReallocFunc xmlRealloc;
00186
00187
00188
00189 xmlGenericErrorFunc xmlGenericError;
00190
00191 xmlStructuredErrorFunc xmlStructuredError;
00192
00193 void *xmlGenericErrorContext;
00194
00195
00196
00197 int oldXMLWDcompatibility;
00198
00199
00200
00201 xmlBufferAllocationScheme xmlBufferAllocScheme;
00202
00203 int xmlDefaultBufferSize;
00204
00205
00206
00207 int xmlSubstituteEntitiesDefaultValue;
00208
00209 int xmlDoValidityCheckingDefaultValue;
00210
00211 int xmlGetWarningsDefaultValue;
00212
00213 int xmlKeepBlanksDefaultValue;
00214
00215 int xmlLineNumbersDefaultValue;
00216
00217 int xmlLoadExtDtdDefaultValue;
00218
00219 int xmlParserDebugEntities;
00220
00221 int xmlPedanticParserDefaultValue;
00222
00223
00224
00225 int xmlSaveNoEmptyTags;
00226
00227 int xmlIndentTreeOutput;
00228
00229 const char *xmlTreeIndentString;
00230
00231
00232
00233 xmlRegisterNodeFunc xmlRegisterNodeDefaultValue;
00234
00235 xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue;
00236
00237
00238
00239 xmlMallocFunc xmlMallocAtomic;
00240
00241 xmlError xmlLastError;
00242
00243
00244
00245 xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue;
00246
00247 xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue;
00248
00249 };
00250
00251
00252
00253 #ifdef __cplusplus
00254
00255 }
00256
00257 #endif
00258
00259 #include <libxml/threads.h>
00260
00261 #ifdef __cplusplus
00262
00263 extern "C" {
00264
00265 #endif
00266
00267
00268
00269 XMLPUBFUN void XMLCALL xmlInitializeGlobalState(xmlGlobalStatePtr gs);
00270
00271
00272
00273 XMLPUBFUN void XMLCALL xmlThrDefSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler);
00274
00275
00276
00277 XMLPUBFUN void XMLCALL xmlThrDefSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler);
00278
00279
00280
00281 XMLPUBFUN xmlRegisterNodeFunc XMLCALL xmlRegisterNodeDefault(xmlRegisterNodeFunc func);
00282
00283 XMLPUBFUN xmlRegisterNodeFunc XMLCALL xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func);
00284
00285 XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func);
00286
00287 XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func);
00288
00289
00290
00291 XMLPUBFUN xmlOutputBufferCreateFilenameFunc XMLCALL
00292
00293 xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func);
00294
00295 XMLPUBFUN xmlParserInputBufferCreateFilenameFunc XMLCALL
00296
00297 xmlThrDefParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func);
00298
00299
00300
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323 #ifdef LIBXML_THREAD_ALLOC_ENABLED
00324
00325 #ifdef LIBXML_THREAD_ENABLED
00326
00327 XMLPUBFUN xmlMallocFunc * XMLCALL __xmlMalloc(void);
00328
00329 #define xmlMalloc \
00330
00331 (*(__xmlMalloc()))
00332
00333 #else
00334
00335 XMLPUBVAR xmlMallocFunc xmlMalloc;
00336
00337 #endif
00338
00339
00340
00341 #ifdef LIBXML_THREAD_ENABLED
00342
00343 XMLPUBFUN xmlMallocFunc * XMLCALL __xmlMallocAtomic(void);
00344
00345 #define xmlMallocAtomic \
00346
00347 (*(__xmlMallocAtomic()))
00348
00349 #else
00350
00351 XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
00352
00353 #endif
00354
00355
00356
00357 #ifdef LIBXML_THREAD_ENABLED
00358
00359 XMLPUBFUN xmlReallocFunc * XMLCALL __xmlRealloc(void);
00360
00361 #define xmlRealloc \
00362
00363 (*(__xmlRealloc()))
00364
00365 #else
00366
00367 XMLPUBVAR xmlReallocFunc xmlRealloc;
00368
00369 #endif
00370
00371
00372
00373 #ifdef LIBXML_THREAD_ENABLED
00374
00375 XMLPUBFUN xmlFreeFunc * XMLCALL __xmlFree(void);
00376
00377 #define xmlFree \
00378
00379 (*(__xmlFree()))
00380
00381 #else
00382
00383 XMLPUBVAR xmlFreeFunc xmlFree;
00384
00385 #endif
00386
00387
00388
00389 #ifdef LIBXML_THREAD_ENABLED
00390
00391 XMLPUBFUN xmlStrdupFunc * XMLCALL __xmlMemStrdup(void);
00392
00393 #define xmlMemStrdup \
00394
00395 (*(__xmlMemStrdup()))
00396
00397 #else
00398
00399 XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
00400
00401 #endif
00402
00403
00404
00405 #else
00406
00407 XMLPUBVAR xmlMallocFunc xmlMalloc;
00408
00409 XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
00410
00411 XMLPUBVAR xmlReallocFunc xmlRealloc;
00412
00413 XMLPUBVAR xmlFreeFunc xmlFree;
00414
00415 XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
00416
00417 #endif
00418
00419
00420
00421 #ifdef LIBXML_DOCB_ENABLED
00422
00423 XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __docbDefaultSAXHandler(void);
00424
00425 #ifdef LIBXML_THREAD_ENABLED
00426
00427 #define docbDefaultSAXHandler \
00428
00429 (*(__docbDefaultSAXHandler()))
00430
00431 #else
00432
00433 XMLPUBVAR xmlSAXHandlerV1 docbDefaultSAXHandler;
00434
00435 #endif
00436
00437 #endif
00438
00439
00440
00441 #ifdef LIBXML_HTML_ENABLED
00442
00443 XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __htmlDefaultSAXHandler(void);
00444
00445 #ifdef LIBXML_THREAD_ENABLED
00446
00447 #define htmlDefaultSAXHandler \
00448
00449 (*(__htmlDefaultSAXHandler()))
00450
00451 #else
00452
00453 XMLPUBVAR xmlSAXHandlerV1 htmlDefaultSAXHandler;
00454
00455 #endif
00456
00457 #endif
00458
00459
00460
00461 XMLPUBFUN xmlError * XMLCALL __xmlLastError(void);
00462
00463 #ifdef LIBXML_THREAD_ENABLED
00464
00465 #define xmlLastError \
00466
00467 (*(__xmlLastError()))
00468
00469 #else
00470
00471 XMLPUBVAR xmlError xmlLastError;
00472
00473 #endif
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491 XMLPUBFUN int * XMLCALL __oldXMLWDcompatibility(void);
00492
00493 #ifdef LIBXML_THREAD_ENABLED
00494
00495 #define oldXMLWDcompatibility \
00496
00497 (*(__oldXMLWDcompatibility()))
00498
00499 #else
00500
00501 XMLPUBVAR int oldXMLWDcompatibility;
00502
00503 #endif
00504
00505
00506
00507 XMLPUBFUN xmlBufferAllocationScheme * XMLCALL __xmlBufferAllocScheme(void);
00508
00509 #ifdef LIBXML_THREAD_ENABLED
00510
00511 #define xmlBufferAllocScheme \
00512
00513 (*(__xmlBufferAllocScheme()))
00514
00515 #else
00516
00517 XMLPUBVAR xmlBufferAllocationScheme xmlBufferAllocScheme;
00518
00519 #endif
00520
00521 XMLPUBFUN xmlBufferAllocationScheme XMLCALL xmlThrDefBufferAllocScheme(xmlBufferAllocationScheme v);
00522
00523
00524
00525 XMLPUBFUN int * XMLCALL __xmlDefaultBufferSize(void);
00526
00527 #ifdef LIBXML_THREAD_ENABLED
00528
00529 #define xmlDefaultBufferSize \
00530
00531 (*(__xmlDefaultBufferSize()))
00532
00533 #else
00534
00535 XMLPUBVAR int xmlDefaultBufferSize;
00536
00537 #endif
00538
00539 XMLPUBFUN int XMLCALL xmlThrDefDefaultBufferSize(int v);
00540
00541
00542
00543 XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __xmlDefaultSAXHandler(void);
00544
00545 #ifdef LIBXML_THREAD_ENABLED
00546
00547 #define xmlDefaultSAXHandler \
00548
00549 (*(__xmlDefaultSAXHandler()))
00550
00551 #else
00552
00553 XMLPUBVAR xmlSAXHandlerV1 xmlDefaultSAXHandler;
00554
00555 #endif
00556
00557
00558
00559 XMLPUBFUN xmlSAXLocator * XMLCALL __xmlDefaultSAXLocator(void);
00560
00561 #ifdef LIBXML_THREAD_ENABLED
00562
00563 #define xmlDefaultSAXLocator \
00564
00565 (*(__xmlDefaultSAXLocator()))
00566
00567 #else
00568
00569 XMLPUBVAR xmlSAXLocator xmlDefaultSAXLocator;
00570
00571 #endif
00572
00573
00574
00575 XMLPUBFUN int * XMLCALL __xmlDoValidityCheckingDefaultValue(void);
00576
00577 #ifdef LIBXML_THREAD_ENABLED
00578
00579 #define xmlDoValidityCheckingDefaultValue \
00580
00581 (*(__xmlDoValidityCheckingDefaultValue()))
00582
00583 #else
00584
00585 XMLPUBVAR int xmlDoValidityCheckingDefaultValue;
00586
00587 #endif
00588
00589 XMLPUBFUN int XMLCALL xmlThrDefDoValidityCheckingDefaultValue(int v);
00590
00591
00592
00593 XMLPUBFUN xmlGenericErrorFunc * XMLCALL __xmlGenericError(void);
00594
00595 #ifdef LIBXML_THREAD_ENABLED
00596
00597 #define xmlGenericError \
00598
00599 (*(__xmlGenericError()))
00600
00601 #else
00602
00603 XMLPUBVAR xmlGenericErrorFunc xmlGenericError;
00604
00605 #endif
00606
00607
00608
00609 XMLPUBFUN xmlStructuredErrorFunc * XMLCALL __xmlStructuredError(void);
00610
00611 #ifdef LIBXML_THREAD_ENABLED
00612
00613 #define xmlStructuredError \
00614
00615 (*(__xmlStructuredError()))
00616
00617 #else
00618
00619 XMLPUBVAR xmlStructuredErrorFunc xmlStructuredError;
00620
00621 #endif
00622
00623
00624
00625 XMLPUBFUN void * * XMLCALL __xmlGenericErrorContext(void);
00626
00627 #ifdef LIBXML_THREAD_ENABLED
00628
00629 #define xmlGenericErrorContext \
00630
00631 (*(__xmlGenericErrorContext()))
00632
00633 #else
00634
00635 XMLPUBVAR void * xmlGenericErrorContext;
00636
00637 #endif
00638
00639
00640
00641 XMLPUBFUN int * XMLCALL __xmlGetWarningsDefaultValue(void);
00642
00643 #ifdef LIBXML_THREAD_ENABLED
00644
00645 #define xmlGetWarningsDefaultValue \
00646
00647 (*(__xmlGetWarningsDefaultValue()))
00648
00649 #else
00650
00651 XMLPUBVAR int xmlGetWarningsDefaultValue;
00652
00653 #endif
00654
00655 XMLPUBFUN int XMLCALL xmlThrDefGetWarningsDefaultValue(int v);
00656
00657
00658
00659 XMLPUBFUN int * XMLCALL __xmlIndentTreeOutput(void);
00660
00661 #ifdef LIBXML_THREAD_ENABLED
00662
00663 #define xmlIndentTreeOutput \
00664
00665 (*(__xmlIndentTreeOutput()))
00666
00667 #else
00668
00669 XMLPUBVAR int xmlIndentTreeOutput;
00670
00671 #endif
00672
00673 XMLPUBFUN int XMLCALL xmlThrDefIndentTreeOutput(int v);
00674
00675
00676
00677 XMLPUBFUN const char * * XMLCALL __xmlTreeIndentString(void);
00678
00679 #ifdef LIBXML_THREAD_ENABLED
00680
00681 #define xmlTreeIndentString \
00682
00683 (*(__xmlTreeIndentString()))
00684
00685 #else
00686
00687 XMLPUBVAR const char * xmlTreeIndentString;
00688
00689 #endif
00690
00691 XMLPUBFUN const char * XMLCALL xmlThrDefTreeIndentString(const char * v);
00692
00693
00694
00695 XMLPUBFUN int * XMLCALL __xmlKeepBlanksDefaultValue(void);
00696
00697 #ifdef LIBXML_THREAD_ENABLED
00698
00699 #define xmlKeepBlanksDefaultValue \
00700
00701 (*(__xmlKeepBlanksDefaultValue()))
00702
00703 #else
00704
00705 XMLPUBVAR int xmlKeepBlanksDefaultValue;
00706
00707 #endif
00708
00709 XMLPUBFUN int XMLCALL xmlThrDefKeepBlanksDefaultValue(int v);
00710
00711
00712
00713 XMLPUBFUN int * XMLCALL __xmlLineNumbersDefaultValue(void);
00714
00715 #ifdef LIBXML_THREAD_ENABLED
00716
00717 #define xmlLineNumbersDefaultValue \
00718
00719 (*(__xmlLineNumbersDefaultValue()))
00720
00721 #else
00722
00723 XMLPUBVAR int xmlLineNumbersDefaultValue;
00724
00725 #endif
00726
00727 XMLPUBFUN int XMLCALL xmlThrDefLineNumbersDefaultValue(int v);
00728
00729
00730
00731 XMLPUBFUN int * XMLCALL __xmlLoadExtDtdDefaultValue(void);
00732
00733 #ifdef LIBXML_THREAD_ENABLED
00734
00735 #define xmlLoadExtDtdDefaultValue \
00736
00737 (*(__xmlLoadExtDtdDefaultValue()))
00738
00739 #else
00740
00741 XMLPUBVAR int xmlLoadExtDtdDefaultValue;
00742
00743 #endif
00744
00745 XMLPUBFUN int XMLCALL xmlThrDefLoadExtDtdDefaultValue(int v);
00746
00747
00748
00749 XMLPUBFUN int * XMLCALL __xmlParserDebugEntities(void);
00750
00751 #ifdef LIBXML_THREAD_ENABLED
00752
00753 #define xmlParserDebugEntities \
00754
00755 (*(__xmlParserDebugEntities()))
00756
00757 #else
00758
00759 XMLPUBVAR int xmlParserDebugEntities;
00760
00761 #endif
00762
00763 XMLPUBFUN int XMLCALL xmlThrDefParserDebugEntities(int v);
00764
00765
00766
00767 XMLPUBFUN const char * * XMLCALL __xmlParserVersion(void);
00768
00769 #ifdef LIBXML_THREAD_ENABLED
00770
00771 #define xmlParserVersion \
00772
00773 (*(__xmlParserVersion()))
00774
00775 #else
00776
00777 XMLPUBVAR const char * xmlParserVersion;
00778
00779 #endif
00780
00781
00782
00783 XMLPUBFUN int * XMLCALL __xmlPedanticParserDefaultValue(void);
00784
00785 #ifdef LIBXML_THREAD_ENABLED
00786
00787 #define xmlPedanticParserDefaultValue \
00788
00789 (*(__xmlPedanticParserDefaultValue()))
00790
00791 #else
00792
00793 XMLPUBVAR int xmlPedanticParserDefaultValue;
00794
00795 #endif
00796
00797 XMLPUBFUN int XMLCALL xmlThrDefPedanticParserDefaultValue(int v);
00798
00799
00800
00801 XMLPUBFUN int * XMLCALL __xmlSaveNoEmptyTags(void);
00802
00803 #ifdef LIBXML_THREAD_ENABLED
00804
00805 #define xmlSaveNoEmptyTags \
00806
00807 (*(__xmlSaveNoEmptyTags()))
00808
00809 #else
00810
00811 XMLPUBVAR int xmlSaveNoEmptyTags;
00812
00813 #endif
00814
00815 XMLPUBFUN int XMLCALL xmlThrDefSaveNoEmptyTags(int v);
00816
00817
00818
00819 XMLPUBFUN int * XMLCALL __xmlSubstituteEntitiesDefaultValue(void);
00820
00821 #ifdef LIBXML_THREAD_ENABLED
00822
00823 #define xmlSubstituteEntitiesDefaultValue \
00824
00825 (*(__xmlSubstituteEntitiesDefaultValue()))
00826
00827 #else
00828
00829 XMLPUBVAR int xmlSubstituteEntitiesDefaultValue;
00830
00831 #endif
00832
00833 XMLPUBFUN int XMLCALL xmlThrDefSubstituteEntitiesDefaultValue(int v);
00834
00835
00836
00837 XMLPUBFUN xmlRegisterNodeFunc * XMLCALL __xmlRegisterNodeDefaultValue(void);
00838
00839 #ifdef LIBXML_THREAD_ENABLED
00840
00841 #define xmlRegisterNodeDefaultValue \
00842
00843 (*(__xmlRegisterNodeDefaultValue()))
00844
00845 #else
00846
00847 XMLPUBVAR xmlRegisterNodeFunc xmlRegisterNodeDefaultValue;
00848
00849 #endif
00850
00851
00852
00853 XMLPUBFUN xmlDeregisterNodeFunc * XMLCALL __xmlDeregisterNodeDefaultValue(void);
00854
00855 #ifdef LIBXML_THREAD_ENABLED
00856
00857 #define xmlDeregisterNodeDefaultValue \
00858
00859 (*(__xmlDeregisterNodeDefaultValue()))
00860
00861 #else
00862
00863 XMLPUBVAR xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue;
00864
00865 #endif
00866
00867
00868
00869 XMLPUBFUN xmlParserInputBufferCreateFilenameFunc * XMLCALL __xmlParserInputBufferCreateFilenameValue(void);
00870
00871 #ifdef LIBXML_THREAD_ENABLED
00872
00873 #define xmlParserInputBufferCreateFilenameValue \
00874
00875 (*(__xmlParserInputBufferCreateFilenameValue()))
00876
00877 #else
00878
00879 XMLPUBVAR xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue;
00880
00881 #endif
00882
00883
00884
00885 XMLPUBFUN xmlOutputBufferCreateFilenameFunc * XMLCALL __xmlOutputBufferCreateFilenameValue(void);
00886
00887 #ifdef LIBXML_THREAD_ENABLED
00888
00889 #define xmlOutputBufferCreateFilenameValue \
00890
00891 (*(__xmlOutputBufferCreateFilenameValue()))
00892
00893 #else
00894
00895 XMLPUBVAR xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue;
00896
00897 #endif
00898
00899
00900
00901 #ifdef __cplusplus
00902
00903 }
00904
00905 #endif
00906
00907
00908
00909 #endif
00910