sasa_c_f90.c

Go to the documentation of this file.
00001 /* ---------------------------------------------------- */
00002 /* Copyright 2006-2010, CERFACS, Toulouse, France. */
00003 /* Copyright 2006-2010, Centre National de la Recherche Scientifique, Paris, France. */
00004 /* All rights reserved. Use is subject to OASIS4 license terms. */
00005 /* ---------------------------------------------------- */
00006 /*
00007    file sasa_c_f90.c
00008    C source file for sasa
00009 */
00010 
00011 
00012 #include <string.h>
00013 #include <stdlib.h>
00014 #include <stdio.h>
00015 #include <stdarg.h>
00016 #include "sasa_c_f90.h"
00017 #include "sasa_c_xml.h"
00018 
00019 /*
00020  
00021   !DESCRIPTION:
00022  
00023    This files gathers the c routines called by the fortran that extract the 
00024    xml informations. 
00025    The extraction is done using the 'xpath' technics. 
00026    3 types of extractions are given: 
00027    - the extraction of the number of elements,
00028    - the extraction of the attributes,
00029    - the extraction of the elements (could be char, int or double).
00030    A convertion routine is also given to convert char to parameter integers.
00031 
00032          <stdio.h>
00033          <string.h>
00034          <stdlib.h>
00035          "sasa_c_f90.h"
00036 
00037   !REVISION HISTORY:
00038 
00039     Date      Programmer   Description
00040   ----------  ----------   -----------
00041    ??.??.??   P. Bourcier  Creation of sasa_c_read_file and sasa_c_close
00042    30.01.04   D. Declat    Creation of all the generic routines that extract
00043                              the attributes, the numbers and the elements
00044    14.01.08   I.Henderson  Replaced generic routines that extract the
00045                            attributes, elements and number of elements with
00046                            modified versions that can process an arbitrary
00047                            (rather than fixed) number of XPath nodes and 
00048                            support >99 elements (e.g. 100 transients).
00049                            New functions are: sasa_c_get_number,
00050                            sasa_c_get_attribute, sasa_c_get_element_c,
00051                            sasa_c_get_element_i, sasa_c_get_element_d,
00052                            sasa_c_build_xpath_str.
00053    22.03.10   JM Epitalon  Simultaneous access to multiple documents :
00054                            sasa_c_read_file() returns a pointer to doc tree
00055 
00056     Not yet implemented :  Assume that all XML elements refer to a default namespace:
00057                            add prefix "default:" to every XML elements 
00058                            when building XPaths
00059  
00060 //EOP
00061 
00062  ----------------------------------------------------------------------
00063   $Id: sasa_c_f90.c 2687 2010-10-28 15:15:52Z coquart $
00064   $Author: coquart $
00065  ---------------------------------------------------------------------- */
00066 
00067 
00068 /* Size of buffer for xpath strings */
00069 #define XPATH_STR_LEN_MAX (1023)
00070 
00071 #define PSMILE_UNDEF (-280177)
00072 
00073 /* Whether an XPath starts with "/", "//" or a nodename */
00074 typedef enum
00075 {
00076     XPATH_START_INVALID = -1,
00077 
00078     XPATH_START_FIRST,
00079   XPATH_START_CHILD_OF_ROOT_NODE = XPATH_START_FIRST,
00080   XPATH_START_DESCENDANT_OF_ROOT_NODE,
00081   XPATH_START_CHILD_OF_CURRENT_NODE,
00082     XPATH_START_LAST = XPATH_START_CHILD_OF_CURRENT_NODE,
00083 
00084     XPATH_START_COUNT
00085 
00086 } XPathStartType;
00087 
00088 
00089 /* XML node types (elements, attributes...) */
00090 typedef enum
00091 {
00092     XPATH_NODE_TYPE_INVALID = -1,
00093 
00094     XPATH_NODE_TYPE_FIRST,
00095   XPATH_NODE_TYPE_ELEMENT = XPATH_NODE_TYPE_FIRST,
00096   XPATH_NODE_TYPE_ATTRIBUTE,
00097     XPATH_NODE_TYPE_LAST = XPATH_NODE_TYPE_ATTRIBUTE,
00098 
00099     XPATH_NODE_TYPE_COUNT
00100 
00101 } XPathNodeType;
00102 
00103 
00104 /* - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = */
00105 
00106 
00107 static int sasa_c_get_number(      int *, int, size_t, ... );
00108 static int sasa_c_get_attribute(   char *, int *, int, size_t, ... );
00109 static int sasa_c_get_element_c(   char *, int *, int, size_t, ... );
00110 static int sasa_c_get_element_i(   int *, int, size_t, ... );
00111 static int sasa_c_get_element_d(   double *, int, size_t, ... );
00112 static int sasa_c_build_xpath_str( char *, XPathStartType, XPathNodeType,
00113                                    size_t, va_list );
00114 
00115 
00116 /* - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = */
00117 
00118 int
00119 __sasa_c_convert_char2int  (char *charcode, int len_charcode)
00120 {
00121     struct pair
00122     {
00123         char *keyword;
00124         int code;
00125     };
00126     struct pair *p_pair;
00127     int nb_pairs;
00128     int result;
00129 
00130     size_t len = len_charcode;
00131 
00132 #ifdef DEBUG
00133     (void)printf("sasa_c_convert_char2int : charcode: %s\n", charcode);
00134     (void)printf("sasa_c_convert_char2int : len_charcode: %d\n", len);
00135 #endif
00136 
00137     result = -280177;
00138 
00139 /*************************************************************************
00140 
00141    List of keywords (in XML element attributes) and their corresponding value in OASIS4
00142    ====================================================================================
00143      
00144     first    = 1;
00145     second   = 2;
00146     third    = 3;
00147     fourth   = 4;
00148 
00149     not_spawn = 1;
00150     spawn     = 2;
00151 
00152     false    = 0;
00153     true     = 1;
00154 
00155     meters   = 3000;
00156     bar      = 3001;
00157     millibar = 3002;
00158     decibar  = 3003;
00159     atmosphere  = 3004;
00160     pascal   = 3005;
00161     hPa      = 3006;
00162     unitless = 3007;
00163 
00164     degrees_east    = 3008;
00165     degrees_north   = 3009;
00166 
00167     single   = 3500;
00168     vector   = 3501;
00169     bundle   = 3502;
00170 
00171     mean     = 3530;
00172     max      = 3531;
00173     min      = 3532;
00174     median   = 3533;
00175     variance = 3534;
00176     integral = 3535;
00177     average  = 3536;
00178     wgt_ave  = 3537;
00179     subgrid_ave = 3538;
00180 
00181     file     = 3810;
00182     component_name   = 3800;
00183 
00184     mpp_ascii   = 3821;
00185     mpp_ieee32  = 3822;
00186     mpp_native  = 3823;
00187     mpp_netcdf  = 3824;
00188 
00189     taverage   = 3600;
00190     accumul    = 3601;
00191     tmin       = 3602;
00192     tmax       = 3603;
00193 
00194     up     = 1;
00195     down   = 2;
00196 
00197     PRISM_reglonlatvrt     = 0;
00198     PRISM_irrlonlat_regvrt = 1;
00199     PRISM_irrlonlatvrt     = 2;
00200     PRISM_irrlonlat_sigmavrt = 3;
00201     PRISM_reglonlat_sigmavrt = 4;
00202     PRISM_unstructlonlat_regvrt = 5;
00203     PRISM_unstructlonlat_sigmavrt = 6;
00204     PRISM_unstructlonlatvrt     = 7;
00205     PRISM_gridless              = 8;
00206     PRISM_gaussreduced_regvrt   = 9;
00207     PRISM_gaussreduced_sigmavrt = 10;
00208 
00209     xs:real    = 4;
00210     xs:double  = 5;
00211     xs:string  = 1;
00212     xs:integer = 2;
00213     xs:nonPositiveInteger = 2;
00214     xs:negativeInteger    = 2;
00215     xs:positiveInteger    = 2;
00216 
00217     smooth   = 3685;
00218     raw      = 3686;
00219 
00220     sinus    = 3680;
00221     cosinus  = 3681;
00222     log      = 3682;
00223 
00224     time_nneighbour = 3604;
00225     time_linear     = 3605;
00226 
00227     conserv_global    = 3675;
00228 
00229     global    = 3711;
00230     local     = 3710;
00231 
00232     iosingle    = 3825;
00233     parallel    = 3826;
00234     distributed = 3827;
00235 
00236     latitude  = 3648;
00237     latlon    = 3647;
00238 
00239     approximate  = 3657;
00240     precise      = 3658;
00241 
00242     novalue    = 3643;
00243     tneighbour = 3644;
00244     nneighbour = 3645;
00245     vneighbour = 3646;
00246 
00247 
00248     gradient   = 3660;
00249     sixteen    = -280177;
00250     fracarea   = 3665;
00251     destarea   = 3666;
00252     none       = -1;
00253     " "        = -280177;
00254 
00255     on     = 1;
00256     off    = 0;
00257 
00258 *****************************************************************************/
00259 
00260     /* Sort keywords by length */
00261     /* ----------------------- */
00262     
00263     switch (len)
00264     {
00265     case 2:
00266     {
00267         static struct pair tab2[] = { {"up", 1}, {"on", 1} };
00268         p_pair = tab2;
00269         nb_pairs = 2;
00270         break;
00271     }   
00272     case 3:
00273     {
00274         static struct pair tab3[] = {
00275             {"bar", 3001}, {"hPa", 3006}, {"max", 3531}, {"min", 3532}, {"raw", 3686}, {"log", 3682}, {"off", 0}
00276         };
00277         p_pair = tab3;
00278         nb_pairs = 7;
00279         break;
00280     }   
00281     case 4:
00282     {
00283         static struct pair tab4[] = {
00284             {"true", 1}, {"mean", 3530}, {"file", 3810}, {"tmin", 3602}, {"tmax", 3603}, {"down", 2}, {"none", -1},
00285         };
00286         p_pair = tab4;
00287         nb_pairs = 7;
00288         break;
00289     }   
00290         break;
00291     case 5:
00292     {
00293         static struct pair tab5[] = {
00294             {"first", 1}, {"third", 3}, {"spawn", 2}, {"false", 0}, {"sinus", 3680}, {"local", 3710},
00295         };
00296 
00297         p_pair = tab5;
00298         nb_pairs = 6;
00299         break;
00300     }   
00301     case 6:
00302     {
00303         static struct pair tab6[] = {
00304             {"second", 2}, {"fourth", 4}, {"meters", 3000}, {"pascal", 3005}, {"single", 3500}, {"vector", 3501},
00305             {"bundle", 3502}, {"median", 3533}, {"smooth", 3685}, {"global", 3711}, {"latlon", 3647},
00306         };
00307         p_pair = tab6;
00308         nb_pairs = 11;
00309         break;
00310     }   
00311     case 7:
00312     {
00313         static struct pair tab7[] = {
00314             {"decibar", 3003}, {"average", 3536}, {"wgt_ave", 3537}, {"accumul", 3601}, {"xs:real", 4}, {"cosinus", 3681}, 
00315             {"precise", 3658}, {"novalue", 3643}, {"sixteen", -280177},
00316         };
00317         p_pair = tab7;
00318         nb_pairs = 9;
00319         break;
00320     }   
00321     case 8:
00322     {
00323         static struct pair tab8[] = {
00324             {"millibar", 3002}, {"unitless", 3007}, {"variance", 3534}, {"integral", 3535}, {"taverage", 3600}, {"iosingle", 3825},
00325             {"parallel", 3826}, {"latitude", 3648}, {"gradient", 3660}, {"fracarea", 3665}, {"destarea", 3666},
00326         };
00327         p_pair = tab8;
00328         nb_pairs = 11;
00329         break;
00330     }   
00331     case 9:
00332     {
00333         static struct pair tab9[] = {
00334             {"not_spawn", 1}, {"mpp_ascii", 3821}, {"xs:double", 5}, {"xs:string", 1},
00335         };
00336         p_pair = tab9;
00337         nb_pairs = 4;
00338         break;
00339     }   
00340     case 10:
00341     {
00342         static struct pair tab10[] = {
00343             {"atmosphere", 3004}, {"mpp_ieee32", 3822}, {"mpp_native", 3823}, {"mpp_netcdf", 3824}, {"xs:integer", 2},
00344             {"tneighbour", 3644}, {"nneighbour", 3645}, {"vneighbour", 3646},
00345         };
00346         p_pair = tab10;
00347         nb_pairs = 8;
00348         break;
00349     }   
00350     case 11:
00351     {
00352         static struct pair tab11[] = {
00353             {"subgrid_ave", 3538}, {"time_linear", 3605}, {"distributed", 3827}, {"approximate", 3657},
00354         };
00355         p_pair = tab11;
00356         nb_pairs = 4;
00357         break;
00358     }   
00359     case 12:
00360         /* One single choice : {"degrees_east", 3008}, */
00361         result = 3008;
00362         nb_pairs = 0;
00363         break;
00364     case 13:
00365         /* One single choice : {"degrees_north", 3009}, */
00366         result = 3009;
00367         nb_pairs = 0;
00368         break;
00369     case 14:
00370     {
00371         static struct pair tab14[] = {
00372             {"component_name", 3800}, {"PRISM_gridless", 8}, {"conserv_global", 3675},
00373         };
00374         p_pair = tab14;
00375         nb_pairs = 3;
00376         break;
00377     }   
00378     case 15:
00379         /* One single choice : {"time_nneighbour", 3604}, */
00380         result = 3004;
00381         nb_pairs = 0;
00382         break;
00383     case 16:
00384     {
00385         static struct pair tab16[] = {
00386             {"PRISM_reglonlatvrt", 0}, {"PRISM_irrlonlatvrt", 2}, {"xs:negativeInteger", 2}, {"xs:positiveInteger", 2},
00387         };
00388         p_pair = tab16;
00389         nb_pairs = 4;
00390         break;
00391     }   
00392     case 17:
00393         /* One single choice : {"xs:nonPositiveInteger", 2}, */
00394         result = 2;
00395         nb_pairs = 0;
00396         break;
00397     case 18:
00398         /* One single choice : {"PRISM_irrlonlat_regvrt", 1}, */
00399         result = 1;
00400         nb_pairs = 0;
00401         break;
00402     case 19:
00403         /* One single choice : {"PRISM_unstructlonlatvrt", 7}, */
00404         result = 7;
00405         nb_pairs = 0;
00406         break;
00407     case 20:
00408     {
00409         static struct pair tab20[] = {
00410             {"PRISM_irrlonlat_sigmavrt", 3}, {"PRISM_reglonlat_sigmavrt", 4},
00411         };
00412         p_pair = tab20;
00413         nb_pairs = 2;
00414         break;
00415     }   
00416     case 21:
00417         /* One single choice : {"PRISM_gaussreduced_regvrt", 9}, */
00418         result = 9;
00419         nb_pairs = 0;
00420         break;
00421     case 22:
00422     {
00423         static struct pair tab22[] = {
00424             {"PRISM_unstructlonlat_regvrt", 5}, {"PRISM_gaussreduced_sigmavrt", 10},
00425         };
00426         p_pair = tab22;
00427         nb_pairs = 2;
00428         break;
00429     }   
00430     case 23:
00431         /* One single choice : {"PRISM_unstructlonlat_sigmavrt", 6}, */
00432         result = 6;
00433         nb_pairs = 0;
00434         break;
00435     
00436     default:
00437         /* no match */
00438         result = -280177;
00439         nb_pairs = 0;
00440         break;
00441     
00442     } /* end switch (len) */
00443 
00444    /* Compare keywords with given character string */
00445 
00446     /* For all keywords of length 'len' */
00447     while (nb_pairs -- > 0 && result == -280177)
00448     {
00449         /* if keyword matches */
00450         if (strncmp(charcode, p_pair->keyword, len) == 0)
00451             result = p_pair->code;
00452         else
00453             /* test next keyword */
00454             p_pair += 1;
00455     }
00456 
00457     /* if not empty string */
00458     if (! (charcode[0] == ' '))
00459     {
00460         /* if no match */
00461         if (result == -280177)
00462         {
00463             printf("\n");
00464             printf("sasa_c_convert_char2int : There is no corresponding parameter to char %s\n",charcode);
00465         }
00466     }
00467 
00468 #ifdef DEBUG
00469     (void)printf("sasa_c_convert_char2int : result code : %d\n",result);
00470     (void)printf("--------------------------------------------------\n");
00471 #endif
00472 
00473     return (result);
00474 }
00475 
00476 /* - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = */
00477 
00478 /*
00479 
00480 //BOP
00481 
00482   !ROUTINE: sasa_c_read_file
00483 
00484   !DESCRIPTION:
00485 
00486    Open an XML file and load its content (the XML tree) into memory.
00487    Return a handle to the XML content, that must be susequently 
00488    passed as a parameter to querying functions.
00489 
00490   !INPUT PARAMETERS:
00491   
00492    xml_file_name = Pointer to Fortran string containing the file name
00493 
00494    len_file_name = length of file name
00495    
00496    len_declared  = length of Fortran string containing the file name
00497                    (unused)
00498    
00499   !OUTPUT PARAMETERS:
00500 
00501    returned    = handle to XML document tree of open file (positive integer)
00502 
00503   !FILES USED:
00504 
00505          <stdlib.h>
00506          <stdio.h>
00507          "sasa_c_f90.h"
00508          "sasa_c_xml.h"
00509 
00510   !REVISION HISTORY:
00511 
00512     Date      Programmer   Description
00513   ----------  ----------   -----------
00514   ??.??.??    P. Bourcier  Creation
00515   22.03.10    JM Epitalon  Simultaneous access to multiple documents
00516 
00517 //EOP
00518 
00519  ----------------------------------------------------------------------
00520   $Id
00521   $Author
00522  ----------------------------------------------------------------------
00523 */
00524 int sasa_c_read_file  (char *xml_file_name,
00525                int  *len_file_name,
00526                int len_declared)
00527 {
00528   int doc;
00529 /*   Variant : int doc=EXIT_SUCCESS;  */
00530 
00531   char *file_name;
00532 
00533   file_name = (char *) calloc(*len_file_name+1, sizeof(char));
00534   strncpy(file_name,xml_file_name,*len_file_name);
00535 
00536 #ifdef DEBUG
00537   (void)printf("sasa_c_read_file : open file : %s\n", file_name);
00538 #endif
00539 
00540   doc = sasaOpenXml ((const char*)file_name);
00541 
00542   free(file_name);
00543 
00544   return(doc);
00545 
00546 }
00547 
00548 
00549 /* - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = */
00550 
00551 
00552 /*
00553 
00554 //BOP
00555 
00556   !ROUTINE: sasa_c_get_number
00557 
00558   !INTERFACE:
00559 
00560   !INPUT PARAMETERS:
00561   
00562    num_doc     = Handle to document tree as returned by sasa_c_read_file()
00563 
00564    nodes_count = Number of nodes in the given XPath *including* the element
00565                  that we're looking for.
00566 
00567    ...         = The XPath, expressed as a variable length list of triplets
00568                  describing each node in the path.  The triplets take the form: 
00569 
00570                    char *nodeName, int nodeNameLen, int nodeNum
00571 
00572                    E.g. the arguments:   "component", 14, 0,
00573                                          "transient", 9, 5,
00574                                          "intent", 6, 0
00575 
00576                    represent the XPath:  component/transient[5]/intent
00577    
00578   !OUTPUT PARAMETERS:
00579 
00580    xml_number  = Number of instances of the element referenced by the given
00581                  XPath.
00582 
00583    rc          = Return code
00584                = EXIT_SUCCESS (0) : No error
00585                = EXIT_FAILURE (1) : Error building XPath
00586 
00587   !DESCRIPTION:
00588 
00589    Get the number of instances of the XML element specified by the given XPath 
00590    in the given open XML document (e.g. SMIOC, SCC, ...).
00591 
00592   !FILES USED:
00593 
00594          <stdarg.h>
00595          <stdlib.h>
00596          <stdio.h>
00597          "sasa_c_f90.h"
00598          "sasa_c_xml.h"
00599 
00600   !REVISION HISTORY:
00601 
00602     Date      Programmer   Description
00603   ----------  ----------   -----------
00604   14.01.08    I.Henderson  created
00605   22.03.10    JM Epitalon  Simultaneous access to multiple documents
00606 
00607 //EOP
00608 
00609  ----------------------------------------------------------------------
00610   $Id
00611   $Author
00612  ----------------------------------------------------------------------
00613 */
00614 static int sasa_c_get_number( int    *xml_number,
00615                               int    num_doc,
00616                               size_t nodes_count,
00617                               ... )
00618 {
00619   va_list nodes;
00620   int     rc=EXIT_SUCCESS;  /* return code */
00621   char    xpath_str[ XPATH_STR_LEN_MAX + 1 ];
00622   int     xpath_str_len;
00623   int     number;
00624  
00625   ASSERT( xml_number != NULL );
00626   ASSERT( nodes_count > 0 );
00627 
00628   va_start( nodes, nodes_count );
00629 
00630   /* Build the xpath string (-1 to get number of parent nodes) */
00631   xpath_str_len = sasa_c_build_xpath_str(  
00632     xpath_str,
00633     XPATH_START_CHILD_OF_CURRENT_NODE,
00634     XPATH_NODE_TYPE_ELEMENT,
00635     nodes_count - 1,
00636     nodes );
00637 
00638   va_end( nodes );
00639 
00640   if ( xpath_str_len > 0 )
00641   {
00642     /* get the number with xpath input */
00643     rc=getXmlNodeCount (num_doc, xpath_str, &number);
00644     /* if returned value is EXIT_FOUND or EXIT_NOTFOUND */
00645     if (rc != EXIT_FAILURE)
00646        rc = EXIT_SUCCESS;
00647 
00648     *xml_number=number;
00649 
00650 #ifdef DEBUG
00651     printf("sasa_c_get_number (level %d) : xpath input : %s\n",
00652       nodes_count, xpath_str);
00653     printf("sasa_c_get_number (level %d) : number : %d\n",
00654       nodes_count, *xml_number);
00655     puts("--------------------------------------------------------");
00656 #endif
00657   }
00658   else
00659   {
00660     rc = EXIT_FAILURE;
00661 
00662 #ifdef DEBUG
00663     printf("sasa_c_get_number (level %d) : ERROR : building xpath string\n",
00664       nodes_count );
00665     printf("sasa_c_get_number (level %d) : return code %d\n",
00666       nodes_count, xpath_str_len );
00667     puts("--------------------------------------------------------");
00668 #endif
00669   }
00670 
00671   return (rc);
00672 
00673 } /* sasa_c_get_number */  
00674 
00675 
00676 /*
00677 
00678 //BOP
00679 
00680   !ROUTINE: sasa_c_get_attribute
00681 
00682   !INTERFACE:
00683 
00684   !INPUT PARAMETERS:
00685 
00686    num_doc     = Handle to document tree as returned by sasa_c_read_file()
00687 
00688    parent_nodes_count = Number of nodes in the given XPath *excluding* the
00689                         attribute that we're looking for.
00690 
00691    ...         = The XPath, expressed as a variable length list of triplets
00692                  describing each node in the path.  The triplets take the form: 
00693 
00694                  char *nodeName, int nodeNameLen, int nodeNum
00695 
00696                  E.g. the arguments:   "component", 14, 0,
00697                                        "transient", 9, 5,
00698                                        "local_name", 10, (0)
00699 
00700                  represent the XPath:  //component/transient[5]/@local_name
00701 
00702                  Note that the '0' at the end of the "local_name" triplet is
00703                  ignored and can therefore be omitted: XML attributes can't
00704                  have multiple instances.
00705    
00706   !OUTPUT PARAMETERS:
00707 
00708    xml_attribute = The value of the attribute referenced by the XPath,
00709                    expressed as a string.
00710 
00711    xml_attribute_length = The length of the xml_attribute string.
00712 
00713    rc          = Return code
00714                = EXIT_SUCCESS (0) : No error
00715                = EXIT_FAILURE (1) : Error building XPath
00716 
00717   !DESCRIPTION:
00718 
00719    Get the value of the XML attribute specified by the given XPath 
00720    in the given open XML document (e.g. SMIOC, SCC, ...).
00721 
00722   !FILES USED:
00723 
00724          <stdarg.h>
00725          <stdlib.h>
00726          <string.h>
00727          <stdio.h>
00728          "sasa_c_f90.h"
00729          "sasa_c_xml.h"
00730 
00731   !REVISION HISTORY:
00732 
00733     Date      Programmer   Description
00734   ----------  ----------   -----------
00735   14.01.08    I.Henderson  created
00736   22.03.10    JM Epitalon  Simultaneous access to multiple documents
00737 
00738 //EOP
00739 
00740  ----------------------------------------------------------------------
00741   $Id
00742   $Author
00743  ----------------------------------------------------------------------
00744 */
00745 static int sasa_c_get_attribute( char    *xml_attribute,
00746                                  int     *xml_attribute_length,
00747                                  int     num_doc,
00748                                  size_t  parent_nodes_count,
00749                                  ... )
00750 {
00751   va_list nodes;
00752   int     rc=EXIT_SUCCESS;  /* return code */
00753   char    xpath_str[ XPATH_STR_LEN_MAX + 1 ];
00754   int     xpath_str_len;
00755   char    *att=NULL;
00756   char    *att_name=NULL;
00757 
00758   ASSERT( xml_attribute != NULL );
00759   ASSERT( xml_attribute_length != NULL );
00760   ASSERT( parent_nodes_count >= 0 );
00761   
00762   va_start( nodes, parent_nodes_count );
00763 
00764   /* Build the xpath string */
00765   xpath_str_len = sasa_c_build_xpath_str(  
00766     xpath_str,
00767     XPATH_START_DESCENDANT_OF_ROOT_NODE,
00768     XPATH_NODE_TYPE_ATTRIBUTE,
00769     parent_nodes_count,
00770     nodes );
00771 
00772   va_end( nodes );
00773 
00774   if ( xpath_str_len > 0 )
00775   {
00776     /* get the attribute with xpath input */
00777     rc = getXmlInfo(num_doc, xpath_str, &att);
00778     if (rc == EXIT_FOUND)
00779       {
00780         (void)strcpy (xml_attribute, (const char*)att );
00781         /* since the string passed to Fortran is blank-terminated,
00782           the Fortran procedure can use the trim_len */
00783         *xml_attribute_length = strlen(xml_attribute);
00784         xml_attribute[strlen (xml_attribute)]=' '; /* the '\0' */
00785         rc = EXIT_SUCCESS;;
00786       }
00787     else if (rc == EXIT_NOTFOUND)
00788       {
00789         int i;
00790         for(i=0;i < 256; i++) *(xml_attribute+i)=' ';
00791       }
00792     free ((void*)att); 
00793 
00794 #ifdef DEBUG
00795     printf("sasa_c_get_attribute (level %d) : xpath input : %s\n",
00796       parent_nodes_count, xpath_str);
00797     att_name = (char *) calloc (*xml_attribute_length+1,sizeof (char));
00798     (void)strncpy (att_name,xml_attribute,*xml_attribute_length);
00799     printf("sasa_c_get_attribute (level %d) : xml_attribute : %s\n",
00800       parent_nodes_count, att_name);
00801     puts("--------------------------------------------------------");
00802 #endif
00803   }
00804   else
00805   {
00806     rc = EXIT_FAILURE;
00807 
00808 #ifdef DEBUG
00809     printf("sasa_c_get_attribute (level %d) : ERROR : building xpath string\n",
00810       parent_nodes_count );
00811     printf("sasa_c_get_attribute (level %d) : return code %d\n",
00812       parent_nodes_count, xpath_str_len );
00813     puts("--------------------------------------------------------");
00814 #endif
00815   }
00816 
00817   return (rc);
00818 
00819 } /* sasa_c_get_attribute */  
00820 
00821 
00822 /*
00823 
00824 //BOP
00825 
00826   !ROUTINE: sasa_c_get_element_c
00827 
00828   !INTERFACE:
00829 
00830   !INPUT PARAMETERS:
00831 
00832    num_doc         = Handle to document tree as returned by sasa_c_read_file()
00833 
00834    parent_nodes_count = Number of nodes in the given XPath *excluding* the
00835                         element that we're looking for.
00836 
00837    ...         = The XPath, expressed as a variable length list of triplets
00838                  describing each node in the path.  The triplets take the form: 
00839 
00840                  char *nodeName, int nodeNameLen, int nodeNum
00841 
00842                  E.g. the arguments:   "component", 14, 0,
00843                                        "transient", 9, 5,
00844                                        "transient_standard_name", 23, 0
00845                  represent the XPath: 
00846 
00847                    //component/transient[5]/transient_standard_name
00848    
00849   !OUTPUT PARAMETERS:
00850 
00851    xml_element = The value of the element referenced by the XPath,
00852                  expressed as a character string.
00853 
00854    xml_element_length = The length of the xml_element string.
00855 
00856    rc          = Return code
00857                = EXIT_SUCCESS (0) : No error
00858                = EXIT_FAILURE (1) : Error building XPath
00859 
00860   !DESCRIPTION:
00861 
00862    Get the string value of the XML element specified by the given XPath 
00863    in the given open XML document (e.g. SMIOC, SCC, ...).
00864    Note: sasa_c_get_element_c - c = character string.
00865 
00866   !FILES USED:
00867 
00868          <stdarg.h>
00869          <stdlib.h>
00870          <string.h>
00871          <stdio.h>
00872          "sasa_c_f90.h"
00873          "sasa_c_xml.h"
00874 
00875   !REVISION HISTORY:
00876 
00877     Date      Programmer   Description
00878   ----------  ----------   -----------
00879   14.01.08    I.Henderson  created
00880   22.03.10    JM Epitalon  Simultaneous access to multiple documents
00881 
00882 //EOP
00883 
00884  ----------------------------------------------------------------------
00885   $Id
00886   $Author
00887  ----------------------------------------------------------------------
00888 */
00889 static int sasa_c_get_element_c( char   *xml_element,
00890                                  int    *xml_element_length,
00891                                  int    num_doc,
00892                                  size_t parent_nodes_count,
00893                                  ... )
00894 {
00895   va_list nodes;
00896   int     rc=EXIT_SUCCESS;  /* return code */
00897   char    xpath_str[ XPATH_STR_LEN_MAX + 1 ];
00898   int     xpath_str_len;
00899   char    *elt=NULL;
00900   char    *att_name=NULL;
00901 
00902   ASSERT( xml_element != NULL );
00903   ASSERT( xml_element_length != NULL );
00904   ASSERT( parent_nodes_count >= 0 );
00905 
00906   va_start( nodes, parent_nodes_count );
00907 
00908   /* Build the xpath string */
00909   xpath_str_len = sasa_c_build_xpath_str(
00910     xpath_str,
00911     XPATH_START_DESCENDANT_OF_ROOT_NODE,
00912     XPATH_NODE_TYPE_ELEMENT,
00913     parent_nodes_count,
00914     nodes );
00915 
00916   va_end( nodes );
00917 
00918   if ( xpath_str_len > 0 )
00919   {
00920     /* get the string with xpath input */
00921     rc=getXmlInfo (num_doc, xpath_str, &elt);
00922     if (rc == EXIT_FOUND)
00923       {
00924         (void)strcpy (xml_element, (const char*)elt );
00925         *xml_element_length = strlen(xml_element);
00926         xml_element[strlen (xml_element)]=' '; /* the '\0' */
00927         rc = EXIT_SUCCESS;
00928       }
00929     else if (rc == EXIT_NOTFOUND)
00930       {
00931         strncpy(xml_element," ",255);
00932         xml_element[strlen (xml_element)]=' '; /* the '\0' */
00933       }
00934     free ((void*)elt); 
00935 
00936 #ifdef DEBUG
00937     printf("sasa_c_get_element_c (level %d) : xpath input : %s\n",
00938       parent_nodes_count, xpath_str);
00939     att_name = (char *) calloc (*xml_element_length+1,sizeof (char));
00940     (void)strncpy (att_name,xml_element,*xml_element_length);
00941     printf("sasa_c_get_element_c (level %d) : xml_element : %s\n",
00942       parent_nodes_count, att_name);
00943     free(att_name);
00944     puts("--------------------------------------------------------");
00945 #endif
00946   }
00947   else
00948   {
00949     rc = EXIT_FAILURE;
00950 
00951 #ifdef DEBUG
00952     printf("sasa_c_get_element_c (level %d) : ERROR : building xpath string\n",
00953       parent_nodes_count );
00954     printf("sasa_c_get_element_c (level %d) : return code %d\n",
00955       parent_nodes_count, xpath_str_len );
00956     puts("--------------------------------------------------------");
00957 #endif
00958   }
00959 
00960   return (rc);
00961 
00962 } /* sasa_c_get_element_c */  
00963 
00964 
00965 /*
00966 
00967 //BOP
00968 
00969   !ROUTINE: sasa_c_get_element_i
00970 
00971   !INTERFACE:
00972 
00973   !INPUT PARAMETERS:
00974 
00975    num_doc         = Handle to document tree as returned by sasa_c_read_file()
00976 
00977    parent_nodes_count = Number of nodes in the given XPath *excluding* the
00978                         element that we're looking for.
00979 
00980    ...         = The XPath, expressed as a variable length list of triplets
00981                  describing each node in the path.  The triplets take the form: 
00982 
00983                  char *nodeName, int nodeNameLen, int nodeNum
00984 
00985                  E.g. the arguments:   "component", 14, 0,
00986                                        "transient", 9, 5
00987                                        "intent", 6, 0,
00988                                        "output", 6, 0,
00989                                        "minimal_period", 14, 0,
00990                                        "nbr_hours", 9, 0
00991                  represent the XPath: 
00992 
00993                    //component/transient[5]/intent/
00994                      output/minimal_period/nbr_hours
00995    
00996   !OUTPUT PARAMETERS:
00997 
00998    xml_element = The value of the element referenced by the XPath,
00999                  expressed as an integer.
01000 
01001    rc          = Return code
01002                = EXIT_SUCCESS (0) : No error
01003                = EXIT_FAILURE (1) : Error building XPath
01004 
01005   !DESCRIPTION:
01006 
01007    Get the integer value of the XML element specified by the given XPath 
01008    in the given open XML document (e.g. SMIOC, SCC, ...).
01009    Note: sasa_c_get_element_i - i = integer.
01010 
01011   !FILES USED:
01012 
01013          <stdarg.h>
01014          <stdlib.h>
01015          <stdio.h>
01016          "sasa_c_f90.h"
01017          "sasa_c_xml.h"
01018 
01019   !REVISION HISTORY:
01020 
01021     Date      Programmer   Description
01022   ----------  ----------   -----------
01023   14.01.08    I.Henderson  created
01024   22.03.10    JM Epitalon  Simultaneous access to multiple documents
01025 
01026 //EOP
01027 
01028  ----------------------------------------------------------------------
01029   $Id
01030   $Author
01031  ----------------------------------------------------------------------
01032 */
01033 static int sasa_c_get_element_i( int    *xml_element,
01034                                  int    num_doc,
01035                                  size_t parent_nodes_count,
01036                                  ... )
01037 {
01038   va_list nodes;
01039   int     rc=EXIT_SUCCESS;  /* return code */
01040   char    xpath_str[ XPATH_STR_LEN_MAX + 1 ];
01041   int     xpath_str_len;
01042   char    *elt=NULL;
01043   
01044   ASSERT( xml_element != NULL );
01045   ASSERT( parent_nodes_count >= 0 );
01046 
01047   va_start( nodes, parent_nodes_count );
01048 
01049   /* Build the xpath string */
01050   xpath_str_len = sasa_c_build_xpath_str(  
01051     xpath_str,
01052     XPATH_START_DESCENDANT_OF_ROOT_NODE,
01053     XPATH_NODE_TYPE_ELEMENT,
01054     parent_nodes_count,
01055     nodes );
01056 
01057   va_end( nodes );
01058 
01059   if ( xpath_str_len > 0 )
01060   {
01061     /* get the integer with xpath input */
01062     rc=getXmlInfo (num_doc, xpath_str, &elt);
01063     if (rc == EXIT_FOUND) 
01064       {
01065         *xml_element = atoi(elt);
01066         rc = EXIT_SUCCESS;
01067       }
01068     else if (rc == EXIT_NOTFOUND)
01069       {
01070         *xml_element = PSMILE_UNDEF;
01071       }    
01072     free ((void*)elt); 
01073 
01074 #ifdef DEBUG
01075     printf("sasa_c_get_element_i (level %d) : xpath input : %s\n",
01076       parent_nodes_count, xpath_str);
01077     printf("sasa_c_get_element_i (level %d) : xml_element : %d\n",
01078       parent_nodes_count, *xml_element);
01079     puts("--------------------------------------------------------");
01080 #endif
01081   }
01082   else
01083   {
01084     rc = EXIT_FAILURE;
01085 
01086 #ifdef DEBUG
01087     printf("sasa_c_get_element_i (level %d) : ERROR : building xpath string\n",
01088       parent_nodes_count );
01089     printf("sasa_c_get_element_i (level %d) : return code %d\n",
01090       parent_nodes_count, xpath_str_len );
01091     puts("--------------------------------------------------------");
01092 #endif
01093   }
01094 
01095   return (rc);
01096 
01097 } /* sasa_c_get_element_i */  
01098 
01099 
01100 /*
01101 
01102 //BOP
01103 
01104   !ROUTINE: sasa_c_get_element_d
01105 
01106   !INTERFACE:
01107 
01108   !INPUT PARAMETERS:
01109 
01110    num_doc         = Handle to document tree as returned by sasa_c_read_file()
01111 
01112    parent_nodes_count = Number of nodes in the given XPath *excluding* the
01113                         element that we're looking for.
01114 
01115    ...         = The XPath, expressed as a variable length list of triplets
01116                  describing each node in the path.  The triplets take the form: 
01117 
01118                  char *nodeName, int nodeNameLen, int nodeNum
01119 
01120                  E.g. the arguments:   "component", 14, 0,
01121                                        "transient", 9, 5
01122                                        "physics", 7, 0,
01123                                        "valid_min", 9, 0
01124                  represent the XPath: 
01125 
01126                    //component/transient[5]/physics/valid_min
01127    
01128   !OUTPUT PARAMETERS:
01129 
01130    xml_element = The value of the element referenced by the XPath,
01131                  expressed as a double.
01132 
01133    rc          = Return code
01134                = EXIT_SUCCESS (0) : No error
01135                = EXIT_FAILURE (1) : Error building XPath
01136 
01137   !DESCRIPTION:
01138 
01139    Get the double value of the XML element specified by the given XPath 
01140    in the given open XML document (e.g. SMIOC, SCC, ...).
01141    Note: sasa_c_get_element_d - d = double.
01142 
01143   !FILES USED:
01144 
01145          <stdarg.h>
01146          <stdlib.h>
01147          <stdio.h>
01148          "sasa_c_f90.h"
01149          "sasa_c_xml.h"
01150 
01151   !REVISION HISTORY:
01152 
01153     Date      Programmer   Description
01154   ----------  ----------   -----------
01155   14.01.08    I.Henderson  created
01156   22.03.10    JM Epitalon  Simultaneous access to multiple documents
01157 
01158 //EOP
01159 
01160  ----------------------------------------------------------------------
01161   $Id
01162   $Author
01163  ----------------------------------------------------------------------
01164 */
01165 static int sasa_c_get_element_d( double *xml_element,
01166                                  int    num_doc,
01167                                  size_t parent_nodes_count,
01168                                  ... )
01169 {
01170   va_list nodes;
01171   int     rc=EXIT_SUCCESS;  /* return code */
01172   char    xpath_str[ XPATH_STR_LEN_MAX + 1 ];
01173   int     xpath_str_len;
01174   char    *elt=NULL;
01175 
01176   ASSERT( xml_element != NULL );
01177   ASSERT( parent_nodes_count >= 0 );
01178 
01179   va_start( nodes, parent_nodes_count );
01180 
01181   /* Build the xpath string */
01182   xpath_str_len = sasa_c_build_xpath_str(  
01183     xpath_str,
01184     XPATH_START_DESCENDANT_OF_ROOT_NODE,
01185     XPATH_NODE_TYPE_ELEMENT,
01186     parent_nodes_count,
01187     nodes );
01188 
01189   va_end( nodes );
01190 
01191   if ( xpath_str_len > 0 )
01192   {
01193     /* get the double with xpath input */
01194     rc=getXmlInfo (num_doc, xpath_str, &elt);
01195     if (rc == EXIT_FOUND) 
01196       {
01197         sscanf(elt,"%lf",xml_element);
01198         rc = EXIT_SUCCESS;
01199       }
01200     else if (rc == EXIT_NOTFOUND)
01201       {
01202         *xml_element = PSMILE_UNDEF;
01203       }    
01204     free ((void*)elt); 
01205 
01206 #ifdef DEBUG
01207     printf("sasa_c_get_element_d (level %d) : xpath input : %s\n",
01208       parent_nodes_count, xpath_str);
01209     printf("sasa_c_get_element_d (level %d) : xml_element : %lf\n",
01210       parent_nodes_count, *xml_element);
01211     puts("--------------------------------------------------------");
01212 #endif
01213   }
01214   else
01215   {
01216     rc = EXIT_FAILURE;
01217 
01218 #ifdef DEBUG
01219     printf("sasa_c_get_element_d (level %d) : ERROR : building xpath string\n",
01220       parent_nodes_count );
01221     printf("sasa_c_get_element_d (level %d) : return code %d\n",
01222       parent_nodes_count, xpath_str_len );
01223     puts("--------------------------------------------------------");
01224 #endif
01225   }
01226 
01227   return (rc);
01228 
01229 } /* sasa_c_get_element_d */  
01230 
01231 
01232 /*
01233 
01234 //BOP
01235 
01236   !ROUTINE: sasa_c_build_xpath_str
01237 
01238   !INTERFACE:
01239 
01240   !INPUT PARAMETERS:
01241 
01242    xpath_start_type = A constant indicating how the XPath string should start
01243                       e.g. "//" - see XPathStartType enum for options.
01244 
01245    xpath_target_node_type = A constant indicating the type of the "target" node
01246                             referenced by the XPath (i.e. whether it's an
01247                             attribute or element).
01248 
01249    parent_nodes_count = Number of nodes in the given XPath *excluding* the
01250                         node (attribute or element) that we're looking for.
01251 
01252    xpath_nodes = The XPath, expressed as a variable length list of triplets
01253                  describing each node in the path.  The triplets take the form: 
01254 
01255                  char *nodeName, int nodeNameLen, int nodeNum
01256 
01257                  E.g. the arguments:   "component", 14, 0,
01258                                        "transient", 9, 5
01259                                        "intent", 6, 0
01260 
01261                  represent the XPath: //component/transient[5]/intent
01262    
01263   !OUTPUT PARAMETERS:
01264 
01265    xpath_str = The XPath, expressed as a character string. It is the caller's
01266                responsibility to ensure that this buffer is big enough to hold
01267                the XPath string.
01268 
01269                Note: sasa_c_build_xpath_str uses the C standard library 
01270                function sprintf().  To make sasa_c_build_xpath_str safe from
01271                the risk of buffer overflows, snprintf() could be used instead.
01272                snprintf() was part of the recent C99 standard and therefore
01273                may not be available on all platforms where OASIS is built. 
01274                This, combined with the fact that XPaths are not
01275                user-specified, makes me think that sprintf() is acceptable
01276                providing a large buffer is used. 
01277 
01278    return value = The length of the xpath_str or -1 if an error occurred.
01279 
01280   !DESCRIPTION:
01281 
01282    Builds a character string representation of the given XPath.
01283    Add prefix "default:" to all XML elements included in the XPath
01284 
01285   !FILES USED:
01286 
01287          <stdarg.h>
01288          <string.h>
01289          <stdio.h>
01290          "sasa_c_f90.h"
01291 
01292   !REVISION HISTORY:
01293 
01294     Date      Programmer   Description
01295   ----------  ----------   -----------
01296   14.01.08    I.Henderson  created
01297 
01298 //EOP
01299 
01300  ----------------------------------------------------------------------
01301   $Id
01302   $Author
01303  ----------------------------------------------------------------------
01304 */
01305 static int sasa_c_build_xpath_str( char           *xpath_str,
01306                                    XPathStartType xpath_start_type,
01307                                    XPathNodeType  xpath_target_node_type,
01308                                    size_t         parent_nodes_count,
01309                                    va_list        xpath_nodes )
01310 {
01311   size_t elements_loop;
01312   int    xpath_str_len, chars_count;
01313   char   format_str[ 32 ];
01314 
01315   ASSERT( xpath_str != NULL );
01316   ASSERT( xpath_start_type >= XPATH_START_FIRST
01317        && xpath_start_type <= XPATH_START_LAST );
01318   ASSERT( xpath_target_node_type >= XPATH_NODE_TYPE_FIRST
01319        && xpath_target_node_type <= XPATH_NODE_TYPE_LAST );
01320   ASSERT( parent_nodes_count >= 0 );
01321 
01322 
01323   /* Start the XPath string appropriately */
01324   switch ( xpath_start_type )
01325   {
01326     case XPATH_START_CHILD_OF_ROOT_NODE:
01327     {
01328       strcpy( xpath_str, "/" );
01329     }
01330     break;
01331     case XPATH_START_DESCENDANT_OF_ROOT_NODE:
01332     {
01333       strcpy( xpath_str, "//" );
01334     }
01335     break;
01336     case XPATH_START_CHILD_OF_CURRENT_NODE:
01337     {
01338       xpath_str[ 0 ] = '\0';
01339     }
01340     break;
01341     default:
01342     {
01343       ASSERT( 0 );
01344     }
01345     break;
01346   }
01347   xpath_str_len = chars_count = strlen( xpath_str );
01348 
01349 
01350   /* Add successive parent elements to the XPath string */
01351   elements_loop = 0;
01352   while ( elements_loop < parent_nodes_count && chars_count != -1 )
01353   {
01354     const char *element_name = va_arg( xpath_nodes, char * ); 
01355     int element_name_len = va_arg( xpath_nodes, int ); 
01356     int element_count = va_arg( xpath_nodes, int ); 
01357 
01358     /* Since Fortran strings aren't null-terminated, we must copy an exact
01359     number of chars from element_name (given by element_name_len) to the
01360     xpath input string - e.g. we must use %.9s instead of %s for "transient". */
01361     if ( element_count == 0 )
01362     {
01363       sprintf( format_str, "%%.%ds/", element_name_len );
01364       chars_count = sprintf( xpath_str + xpath_str_len, format_str,
01365                              element_name );
01366     }
01367     else
01368     {
01369       sprintf( format_str, "%%.%ds[%%d]/", element_name_len );
01370       chars_count = sprintf( xpath_str + xpath_str_len, format_str,
01371                              element_name, element_count );
01372     }
01373 
01374     xpath_str_len += chars_count;
01375     elements_loop++;
01376   }
01377 
01378 
01379   /* Finally, add the element or attribute we want to the end of the xpath */
01380   if ( chars_count != -1 )
01381   {
01382     switch ( xpath_target_node_type )
01383     {
01384       case XPATH_NODE_TYPE_ATTRIBUTE:
01385       {
01386         const char *attribute_name = va_arg( xpath_nodes, char * ); 
01387         int attribute_name_len = va_arg( xpath_nodes, int ); 
01388         /* Ignore the last value in the node triplet (if any) -
01389         there can only be one instance of an attribute. */
01390 
01391         sprintf( format_str, "@%%.%ds", attribute_name_len );
01392         chars_count = sprintf( xpath_str + xpath_str_len, format_str,
01393                               attribute_name );
01394       }
01395       break;
01396       case XPATH_NODE_TYPE_ELEMENT:
01397       {
01398         const char *element_name = va_arg( xpath_nodes, char * ); 
01399         int element_name_len = va_arg( xpath_nodes, int ); 
01400         int element_count = va_arg( xpath_nodes, int ); 
01401 
01402         if ( element_count == 0 )
01403         {
01404           sprintf( format_str, "%%.%ds", element_name_len );
01405           chars_count = sprintf( xpath_str + xpath_str_len, format_str,
01406                                 element_name );
01407         }
01408         else
01409         {
01410           sprintf( format_str, "%%.%ds[%%d]", element_name_len );
01411           chars_count = sprintf( xpath_str + xpath_str_len, format_str,
01412                                 element_name, element_count );
01413         }
01414       }
01415       break;
01416       default:
01417       {
01418         ASSERT( 0 );
01419       }
01420       break;
01421     }
01422 
01423     xpath_str_len += chars_count;
01424   }
01425 
01426   return ( chars_count != -1 ? xpath_str_len : chars_count );
01427 
01428 } /* sasa_c_build_xpath_str */
01429 
01430 
01431 /* - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = */
01432 
01433 /*
01434 
01435 //BOP
01436 
01437   !ROUTINE: sasa_c_close
01438 
01439   !DESCRIPTION:
01440 
01441    Close an XML file and free memory form its content (the XML tree).
01442 
01443   !INPUT PARAMETERS:
01444   
01445    num_doc  =  handle to XML document tree of open file (positive integer)
01446 
01447   !OUTPUT PARAMETERS:
01448 
01449    returned    = handle to XML document tree of open file (positive integer)
01450 
01451   !FILES USED:
01452 
01453   !REVISION HISTORY:
01454 
01455     Date      Programmer   Description
01456   ----------  ----------   -----------
01457   ??.??.??    P. Bourcier  Creation
01458   22.03.10    JM Epitalon  Simultaneous access to multiple documents
01459 
01460 //EOP
01461 
01462  ----------------------------------------------------------------------
01463   $Id
01464   $Author
01465  ----------------------------------------------------------------------
01466 */
01467 int
01468 sasa_c_close  (int *num_doc)
01469 {
01470 
01471   return (sasaCloseXml (*num_doc));
01472 
01473 }
01474 
01475 
01476 /* - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = */
01477 /*                      Fortran interface                      */
01478 /* - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = */
01479 
01480 int sasa_c_convert_char2int  (char *charcode, int len_charcode) 
01481 {
01482   int result;
01483   char *name;
01484 
01485   name = (char *) calloc(len_charcode+1, sizeof(char));
01486   strncpy(name,charcode,len_charcode);
01487 
01488   result = __sasa_c_convert_char2int  (name, len_charcode);
01489 
01490   free(name);
01491 
01492   return(result);
01493 }
01494 
01495 /* - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = */
01496 
01497 int sasa_c_get_number_1st_level ( int  *num_doc,
01498                   char *firstlevel, 
01499                   int  *xml_number,
01500                   int  len_firstlevel)
01501 {
01502   int result;
01503 
01504   result = sasa_c_get_number(
01505     xml_number, *num_doc, 1,
01506     firstlevel, len_firstlevel, 0 );
01507 
01508   return(result);
01509 }
01510 
01511 
01512 int sasa_c_get_number_2nd_level  (int  *num_doc,
01513                   char *firstlevel, 
01514                   int  *firstno, 
01515                   char *secondlevel,
01516                   int  *xml_number, 
01517                   int  len_firstlevel,
01518                   int  len_secondlevel)
01519 {
01520   int result;
01521 
01522   result = sasa_c_get_number(
01523     xml_number, *num_doc, 2,
01524     firstlevel,  len_firstlevel,  *firstno,
01525     secondlevel, len_secondlevel, 0 );
01526 
01527   return(result);
01528 }
01529 
01530 
01531 int sasa_c_get_number_3rd_level  (int  *num_doc,
01532                   char *firstlevel, 
01533                   int  *firstno, 
01534                   char *secondlevel,
01535                   int  *secondno, 
01536                   char *thirdlevel,
01537                   int  *xml_number, 
01538                   int  len_firstlevel,
01539                   int  len_secondlevel,
01540                   int  len_thirdlevel)
01541 {
01542   int result;
01543 
01544   result = sasa_c_get_number(
01545     xml_number, *num_doc, 3,
01546     firstlevel,  len_firstlevel,  *firstno,
01547     secondlevel, len_secondlevel, *secondno,
01548     thirdlevel,  len_thirdlevel,  0 );
01549 
01550   return(result);
01551 }
01552 
01553 
01554 int sasa_c_get_number_4th_level  (int  *num_doc,
01555                   char *firstlevel, 
01556                   int  *firstno, 
01557                   char *secondlevel, 
01558                   int  *secondno, 
01559                   char *thirdlevel, 
01560                   int  *thirdno, 
01561                   char *fourthlevel, 
01562                   int  *xml_number,
01563                   int  len_firstlevel,
01564                   int  len_secondlevel,
01565                   int  len_thirdlevel,
01566                   int  len_fourthlevel)
01567 {
01568   int result;
01569 
01570   result = sasa_c_get_number(
01571     xml_number, *num_doc, 4,
01572     firstlevel,  len_firstlevel,  *firstno,
01573     secondlevel, len_secondlevel, *secondno,
01574     thirdlevel,  len_thirdlevel,  *thirdno,
01575     fourthlevel, len_fourthlevel, 0 );
01576 
01577   return(result);
01578 }
01579 
01580 
01581 int sasa_c_get_number_5th_level  (int  *num_doc,
01582                   char *firstlevel, 
01583                   int  *firstno, 
01584                   char *secondlevel, 
01585                   int  *secondno, 
01586                   char *thirdlevel, 
01587                   int  *thirdno, 
01588                   char *fourthlevel, 
01589                   int  *fourthno, 
01590                   char *fifthlevel, 
01591                   int  *xml_number,
01592                   int  len_firstlevel,
01593                   int  len_secondlevel,
01594                   int  len_thirdlevel,
01595                   int  len_fourthlevel,
01596                   int  len_fifthlevel)
01597 {
01598   int result;
01599 
01600   result = sasa_c_get_number(
01601     xml_number, *num_doc, 5,
01602     firstlevel,  len_firstlevel,  *firstno,
01603     secondlevel, len_secondlevel, *secondno,
01604     thirdlevel,  len_thirdlevel,  *thirdno,
01605     fourthlevel, len_fourthlevel, *fourthno,
01606     fifthlevel,  len_fifthlevel,  0 );
01607 
01608   return(result);
01609 }
01610 
01611 
01612 int sasa_c_get_number_6th_level  (int  *num_doc,
01613                   char *firstlevel, 
01614                   int  *firstno, 
01615                   char *secondlevel, 
01616                   int  *secondno, 
01617                   char *thirdlevel, 
01618                   int  *thirdno, 
01619                   char *fourthlevel, 
01620                   int  *fourthno, 
01621                   char *fifthlevel, 
01622                   int  *fifthno, 
01623                   char *sixthlevel, 
01624                   int  *xml_number,
01625                   int  len_firstlevel,
01626                   int  len_secondlevel,
01627                   int  len_thirdlevel,
01628                   int  len_fourthlevel,
01629                   int  len_fifthlevel,
01630                   int  len_sixthlevel)
01631 {
01632   int result;
01633 
01634   result = sasa_c_get_number(
01635     xml_number, *num_doc, 6,
01636     firstlevel,  len_firstlevel,  *firstno,
01637     secondlevel, len_secondlevel, *secondno,
01638     thirdlevel,  len_thirdlevel,  *thirdno,
01639     fourthlevel, len_fourthlevel, *fourthno,
01640     fifthlevel,  len_fifthlevel,  *fifthno,
01641     sixthlevel,  len_sixthlevel,  0 );
01642 
01643   return(result);
01644 }
01645 
01646 
01647 int sasa_c_get_number_7th_level  (int  *num_doc,
01648                   char *firstlevel, 
01649                   int  *firstno, 
01650                   char *secondlevel, 
01651                   int  *secondno, 
01652                   char *thirdlevel, 
01653                   int  *thirdno, 
01654                   char *fourthlevel, 
01655                   int  *fourthno, 
01656                   char *fifthlevel, 
01657                   int  *fifthno, 
01658                   char *sixthlevel, 
01659                   int  *sixthno, 
01660                   char *seventhlevel, 
01661                   int  *xml_number,
01662                   int  len_firstlevel,
01663                   int  len_secondlevel,
01664                   int  len_thirdlevel,
01665                   int  len_fourthlevel,
01666                   int  len_fifthlevel,
01667                   int  len_sixthlevel,
01668                   int  len_seventhlevel)
01669 {
01670   int result;
01671 
01672   result = sasa_c_get_number(
01673     xml_number,   *num_doc,  7,
01674     firstlevel,   len_firstlevel,   *firstno,
01675     secondlevel,  len_secondlevel,  *secondno,
01676     thirdlevel,   len_thirdlevel,   *thirdno,
01677     fourthlevel,  len_fourthlevel,  *fourthno,
01678     fifthlevel,   len_fifthlevel,   *fifthno,
01679     sixthlevel,   len_sixthlevel,   *sixthno,
01680     seventhlevel, len_seventhlevel, 0 );
01681 
01682   return(result);
01683 }
01684 
01685 
01686 int sasa_c_get_number_8th_level  (int  *num_doc,
01687                   char *firstlevel, 
01688                   int  *firstno, 
01689                   char *secondlevel, 
01690                   int  *secondno, 
01691                   char *thirdlevel, 
01692                   int  *thirdno, 
01693                   char *fourthlevel, 
01694                   int  *fourthno, 
01695                   char *fifthlevel, 
01696                   int  *fifthno, 
01697                   char *sixthlevel, 
01698                   int  *sixthno, 
01699                   char *seventhlevel, 
01700                   int  *seventhno, 
01701                   char *eighthlevel, 
01702                   int  *xml_number,
01703                   int  len_firstlevel,
01704                   int  len_secondlevel,
01705                   int  len_thirdlevel,
01706                   int  len_fourthlevel,
01707                   int  len_fifthlevel,
01708                   int  len_sixthlevel,
01709                   int  len_seventhlevel,
01710                   int  len_eighthlevel)
01711 {
01712   int result;
01713 
01714   result = sasa_c_get_number(
01715     xml_number,   *num_doc,  8,
01716     firstlevel,   len_firstlevel,   *firstno,
01717     secondlevel,  len_secondlevel,  *secondno,
01718     thirdlevel,   len_thirdlevel,   *thirdno,
01719     fourthlevel,  len_fourthlevel,  *fourthno,
01720     fifthlevel,   len_fifthlevel,   *fifthno,
01721     sixthlevel,   len_sixthlevel,   *sixthno,
01722     seventhlevel, len_seventhlevel, *seventhno,
01723     eighthlevel,  len_eighthlevel,  0 );
01724 
01725   return(result);
01726 }
01727 
01728 
01729 int sasa_c_get_number_9th_level  (int  *num_doc,
01730                   char *firstlevel, 
01731                   int  *firstno, 
01732                   char *secondlevel, 
01733                   int  *secondno, 
01734                   char *thirdlevel, 
01735                   int  *thirdno, 
01736                   char *fourthlevel, 
01737                   int  *fourthno, 
01738                   char *fifthlevel, 
01739                   int  *fifthno, 
01740                   char *sixthlevel, 
01741                   int  *sixthno, 
01742                   char *seventhlevel, 
01743                   int  *seventhno, 
01744                   char *eighthlevel, 
01745                   int  *eighthno, 
01746                   char *ninthlevel, 
01747                   int  *xml_number,
01748                   int  len_firstlevel,
01749                   int  len_secondlevel,
01750                   int  len_thirdlevel,
01751                   int  len_fourthlevel,
01752                   int  len_fifthlevel,
01753                   int  len_sixthlevel,
01754                   int  len_seventhlevel,
01755                   int  len_eighthlevel,
01756                   int  len_ninthlevel)
01757 {
01758   int result;
01759 
01760   result = sasa_c_get_number(
01761     xml_number,   *num_doc,  9,
01762     firstlevel,   len_firstlevel,   *firstno,
01763     secondlevel,  len_secondlevel,  *secondno,
01764     thirdlevel,   len_thirdlevel,   *thirdno,
01765     fourthlevel,  len_fourthlevel,  *fourthno,
01766     fifthlevel,   len_fifthlevel,   *fifthno,
01767     sixthlevel,   len_sixthlevel,   *sixthno,
01768     seventhlevel, len_seventhlevel, *seventhno,
01769     eighthlevel,  len_eighthlevel,  *eighthno,
01770     ninthlevel,   len_ninthlevel,   0 );
01771 
01772   return(result);
01773 }
01774 
01775 int sasa_c_get_number_10th_level (int  *num_doc,
01776                   char *firstlevel, 
01777                   int  *firstno, 
01778                   char *secondlevel, 
01779                   int  *secondno, 
01780                   char *thirdlevel, 
01781                   int  *thirdno, 
01782                   char *fourthlevel, 
01783                   int  *fourthno, 
01784                   char *fifthlevel, 
01785                   int  *fifthno, 
01786                   char *sixthlevel, 
01787                   int  *sixthno, 
01788                   char *seventhlevel, 
01789                   int  *seventhno, 
01790                   char *eighthlevel, 
01791                   int  *eighthno, 
01792                   char *ninthlevel,
01793                   int  *ninthno, 
01794                   char *tenthlevel, 
01795                   int  *xml_number,
01796                   int  len_firstlevel,
01797                   int  len_secondlevel,
01798                   int  len_thirdlevel,
01799                   int  len_fourthlevel,
01800                   int  len_fifthlevel,
01801                   int  len_sixthlevel,
01802                   int  len_seventhlevel,
01803                   int  len_eighthlevel,
01804                   int  len_ninthlevel,
01805                   int  len_tenthlevel)
01806 {
01807   int result;
01808 
01809   result = sasa_c_get_number(
01810     xml_number,   *num_doc,  10,
01811     firstlevel,   len_firstlevel,   *firstno,
01812     secondlevel,  len_secondlevel,  *secondno,
01813     thirdlevel,   len_thirdlevel,   *thirdno,
01814     fourthlevel,  len_fourthlevel,  *fourthno,
01815     fifthlevel,   len_fifthlevel,   *fifthno,
01816     sixthlevel,   len_sixthlevel,   *sixthno,
01817     seventhlevel, len_seventhlevel, *seventhno,
01818     eighthlevel,  len_eighthlevel,  *eighthno,
01819     ninthlevel,   len_ninthlevel,   *ninthno,
01820     tenthlevel,   len_tenthlevel,   0 );
01821 
01822   return(result);
01823 }
01824 
01825 int sasa_c_get_number_11th_level (int  *num_doc,
01826                   char *firstlevel, 
01827                   int  *firstno, 
01828                   char *secondlevel, 
01829                   int  *secondno, 
01830                   char *thirdlevel, 
01831                   int  *thirdno, 
01832                   char *fourthlevel, 
01833                   int  *fourthno, 
01834                   char *fifthlevel, 
01835                   int  *fifthno, 
01836                   char *sixthlevel, 
01837                   int  *sixthno, 
01838                   char *seventhlevel, 
01839                   int  *seventhno, 
01840                   char *eighthlevel, 
01841                   int  *eighthno, 
01842                   char *ninthlevel,
01843                   int  *ninthno, 
01844                   char *tenthlevel,
01845                   int  *tenthno, 
01846                   char *elethlevel, 
01847                   int  *xml_number,
01848                   int  len_firstlevel,
01849                   int  len_secondlevel,
01850                   int  len_thirdlevel,
01851                   int  len_fourthlevel,
01852                   int  len_fifthlevel,
01853                   int  len_sixthlevel,
01854                   int  len_seventhlevel,
01855                   int  len_eighthlevel,
01856                   int  len_ninthlevel,
01857                   int  len_tenthlevel,
01858                   int  len_elethlevel )
01859 {
01860   int result;
01861 
01862   result = sasa_c_get_number(
01863     xml_number,   *num_doc,  11,
01864     firstlevel,   len_firstlevel,   *firstno,
01865     secondlevel,  len_secondlevel,  *secondno,
01866     thirdlevel,   len_thirdlevel,   *thirdno,
01867     fourthlevel,  len_fourthlevel,  *fourthno,
01868     fifthlevel,   len_fifthlevel,   *fifthno,
01869     sixthlevel,   len_sixthlevel,   *sixthno,
01870     seventhlevel, len_seventhlevel, *seventhno,
01871     eighthlevel,  len_eighthlevel,  *eighthno,
01872     ninthlevel,   len_ninthlevel,   *ninthno,
01873     tenthlevel,   len_tenthlevel,   *tenthno,
01874     elethlevel,   len_elethlevel,   0 );
01875 
01876   return(result);
01877 }
01878 
01879 /* - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = */
01880 
01881 int sasa_c_get_attri_1st_level  (int  *num_doc,
01882                  char *firstlevel, 
01883                  int  *firstno, 
01884                  char *attribute,
01885                  char *xml_attribute,
01886                  int  *xml_attribute_length,
01887                  int  len_firstlevel,
01888                  int  len_attribute,
01889                  int  len_xml_attribute)
01890 {
01891   int result;
01892 
01893   result = sasa_c_get_attribute(
01894     xml_attribute, xml_attribute_length, *num_doc, 1,
01895     firstlevel,    len_firstlevel,       *firstno,
01896     attribute,     len_attribute );
01897 
01898   return(result);
01899 }
01900 
01901 
01902 int sasa_c_get_attri_2nd_level  (int  *num_doc,
01903                  char *firstlevel, 
01904                  int  *firstno, 
01905                  char *secondlevel, 
01906                  int  *secondno, 
01907                  char *attribute,
01908                  char *xml_attribute,
01909                  int  *xml_attribute_length,
01910                  int  len_firstlevel,
01911                  int  len_secondlevel,
01912                  int  len_attribute,
01913                  int  len_xml_attribute)
01914 {
01915   int result;
01916 
01917   result = sasa_c_get_attribute(
01918     xml_attribute, xml_attribute_length, *num_doc, 2,
01919     firstlevel,    len_firstlevel,       *firstno,
01920     secondlevel,   len_secondlevel,      *secondno,
01921     attribute,     len_attribute );
01922 
01923   return(result);
01924 }
01925 
01926 
01927 int sasa_c_get_attri_3rd_level  (int  *num_doc,
01928                  char *firstlevel, 
01929                  int  *firstno, 
01930                  char *secondlevel, 
01931                  int  *secondno, 
01932                  char *thirdlevel, 
01933                  int  *thirdno, 
01934                  char *attribute,
01935                  char *xml_attribute,
01936                  int  *xml_attribute_length,
01937                  int  len_firstlevel,
01938                  int  len_secondlevel,
01939                  int  len_thirdlevel,
01940                  int  len_attribute,
01941                  int  len_xml_attribute)
01942 {
01943   int result;
01944 
01945   result = sasa_c_get_attribute(
01946     xml_attribute, xml_attribute_length, *num_doc, 3,
01947     firstlevel,    len_firstlevel,       *firstno,
01948     secondlevel,   len_secondlevel,      *secondno,
01949     thirdlevel,    len_thirdlevel,       *thirdno,
01950     attribute,     len_attribute );
01951 
01952   return(result);
01953 }
01954 
01955 
01956 int sasa_c_get_attri_4th_level  (int  *num_doc,
01957                  char *firstlevel, 
01958                  int  *firstno, 
01959                  char *secondlevel, 
01960                  int  *secondno, 
01961                  char *thirdlevel, 
01962                  int  *thirdno, 
01963                  char *fourthlevel, 
01964                  int  *fourthno, 
01965                  char *attribute,
01966                  char *xml_attribute,
01967                  int  *xml_attribute_length,
01968                  int  len_firstlevel,
01969                  int  len_secondlevel,
01970                  int  len_thirdlevel,
01971                  int  len_fourthlevel,
01972                  int  len_attribute,
01973                  int  len_xml_attribute)
01974 {
01975   int result;
01976 
01977   result = sasa_c_get_attribute(
01978     xml_attribute, xml_attribute_length, *num_doc, 4,
01979     firstlevel,    len_firstlevel,       *firstno,
01980     secondlevel,   len_secondlevel,      *secondno,
01981     thirdlevel,    len_thirdlevel,       *thirdno,
01982     fourthlevel,   len_fourthlevel,      *fourthno,
01983     attribute,     len_attribute );
01984 
01985   return(result);
01986 }
01987 
01988 
01989 int sasa_c_get_attri_5th_level  (int  *num_doc,
01990                  char *firstlevel, 
01991                  int  *firstno, 
01992                  char *secondlevel, 
01993                  int  *secondno, 
01994                  char *thirdlevel, 
01995                  int  *thirdno, 
01996                  char *fourthlevel, 
01997                  int  *fourthno, 
01998                  char *fifthlevel, 
01999                  int  *fifthno, 
02000                  char *attribute,
02001                  char *xml_attribute,
02002                  int  *xml_attribute_length,
02003                  int  len_firstlevel,
02004                  int  len_secondlevel,
02005                  int  len_thirdlevel,
02006                  int  len_fourthlevel,
02007                  int  len_fifthlevel,
02008                  int  len_attribute,
02009                  int  len_xml_attribute)
02010 {
02011   int result;
02012 
02013   result = sasa_c_get_attribute(
02014     xml_attribute, xml_attribute_length, *num_doc, 5,
02015     firstlevel,    len_firstlevel,       *firstno,
02016     secondlevel,   len_secondlevel,      *secondno,
02017     thirdlevel,    len_thirdlevel,       *thirdno,
02018     fourthlevel,   len_fourthlevel,      *fourthno,
02019     fifthlevel,    len_fifthlevel,       *fifthno,
02020     attribute,     len_attribute );
02021 
02022   return(result);
02023 }
02024 
02025 /* - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = */
02026 
02027 int sasa_c_get_element_1st_level_c  (int  *num_doc,
02028                      char *firstlevel, 
02029                      int  *firstno, 
02030                      char *element, 
02031                      int  *elementno,
02032                      char *xml_element,
02033                      int  *xml_element_length,
02034                      int  len_firstlevel,
02035                      int  len_element,
02036                      int  len_xml_element)
02037 {
02038   int result;
02039 
02040   result = sasa_c_get_element_c(
02041     xml_element, xml_element_length, *num_doc, 1,
02042     firstlevel,  len_firstlevel,     *firstno, 
02043     element,     len_element,        *elementno );
02044 
02045   return(result);
02046 }
02047 
02048 
02049 int sasa_c_get_element_1st_level_i  (int  *num_doc,
02050                      char *firstlevel, 
02051                      int  *firstno, 
02052                      char *element, 
02053                      int  *elementno,
02054                      int  *xml_element,
02055                      int  len_firstlevel,
02056                      int  len_element)
02057 {
02058   int result;
02059 
02060   result = sasa_c_get_element_i(
02061     xml_element, *num_doc, 1,
02062     firstlevel,  len_firstlevel,     *firstno, 
02063     element,     len_element,        *elementno );
02064 
02065   return(result);
02066 }
02067 
02068 
02069 int sasa_c_get_element_1st_level_d  (int  *num_doc,
02070                      char *firstlevel, 
02071                      int  *firstno, 
02072                      char *element, 
02073                      int  *elementno,
02074                      double  *xml_element,
02075                      int  len_firstlevel,
02076                      int  len_element)
02077 {
02078   int result;
02079 
02080   result = sasa_c_get_element_d(
02081     xml_element, *num_doc, 1,
02082     firstlevel,  len_firstlevel,     *firstno, 
02083     element,     len_element,        *elementno );
02084 
02085   return(result);
02086 }
02087 
02088 
02089 int sasa_c_get_element_2nd_level_c  (int  *num_doc,
02090                      char *firstlevel, 
02091                      int  *firstno, 
02092                      char *secondlevel, 
02093                      int  *secondno, 
02094                      char *element, 
02095                      int  *elementno,
02096                      char *xml_element,
02097                      int  *xml_element_length,
02098                      int  len_firstlevel,
02099                      int  len_secondlevel,
02100                      int  len_element,
02101                      int  len_xml_element)
02102 {
02103   int result;
02104 
02105   result = sasa_c_get_element_c(
02106     xml_element, xml_element_length, *num_doc, 2,
02107     firstlevel,  len_firstlevel,     *firstno, 
02108     secondlevel, len_secondlevel,    *secondno, 
02109     element,     len_element,        *elementno );
02110 
02111   return(result);
02112 }
02113 
02114 
02115 int sasa_c_get_element_2nd_level_i  (int  *num_doc,
02116                      char *firstlevel, 
02117                      int  *firstno, 
02118                      char *secondlevel, 
02119                      int  *secondno, 
02120                      char *element, 
02121                      int  *elementno,
02122                      int  *xml_element,
02123                      int  len_firstlevel,
02124                      int  len_secondlevel,
02125                      int  len_element)
02126 {
02127   int result;
02128 
02129   result = sasa_c_get_element_i(
02130     xml_element, *num_doc, 2,
02131     firstlevel,  len_firstlevel,     *firstno, 
02132     secondlevel, len_secondlevel,    *secondno, 
02133     element,     len_element,        *elementno );
02134 
02135   return(result);
02136 }
02137 
02138 
02139 int sasa_c_get_element_2nd_level_d  (int  *num_doc,
02140                      char *firstlevel, 
02141                      int  *firstno, 
02142                      char *secondlevel, 
02143                      int  *secondno, 
02144                      char *element, 
02145                      int  *elementno,
02146                      double  *xml_element,
02147                      int  len_firstlevel,
02148                      int  len_secondlevel,
02149                      int  len_element)
02150 {
02151   int result;
02152 
02153   result = sasa_c_get_element_d(
02154     xml_element, *num_doc, 2,
02155     firstlevel,  len_firstlevel,     *firstno, 
02156     secondlevel, len_secondlevel,    *secondno, 
02157     element,     len_element,        *elementno );
02158 
02159   return(result);
02160 }
02161 
02162 
02163 int sasa_c_get_element_3rd_level_c  (int  *num_doc,
02164                      char *firstlevel, 
02165                      int  *firstno, 
02166                      char *secondlevel, 
02167                      int  *secondno, 
02168                      char *thirdlevel, 
02169                      int  *thirdno, 
02170                      char *element, 
02171                      int  *elementno,
02172                      char *xml_element,
02173                      int  *xml_element_length,
02174                      int  len_firstlevel,
02175                      int  len_secondlevel,
02176                      int  len_thirdlevel,
02177                      int  len_element,
02178                      int  len_xml_element)
02179 {
02180   int result;
02181 
02182   result = sasa_c_get_element_c(
02183     xml_element, xml_element_length, *num_doc, 3,
02184     firstlevel,  len_firstlevel,     *firstno, 
02185     secondlevel, len_secondlevel,    *secondno, 
02186     thirdlevel,  len_thirdlevel,     *thirdno, 
02187     element,     len_element,        *elementno );
02188 
02189   return(result);
02190 }
02191 
02192 
02193 int sasa_c_get_element_3rd_level_i  (int  *num_doc,
02194                      char *firstlevel, 
02195                      int  *firstno, 
02196                      char *secondlevel, 
02197                      int  *secondno, 
02198                      char *thirdlevel, 
02199                      int  *thirdno, 
02200                      char *element, 
02201                      int  *elementno,
02202                      int  *xml_element,
02203                      int  len_firstlevel,
02204                      int  len_secondlevel,
02205                      int  len_thirdlevel,
02206                      int  len_element)
02207 {
02208   int result;
02209 
02210   result = sasa_c_get_element_i(
02211     xml_element, *num_doc, 3,
02212     firstlevel,  len_firstlevel,     *firstno, 
02213     secondlevel, len_secondlevel,    *secondno, 
02214     thirdlevel,  len_thirdlevel,     *thirdno, 
02215     element,     len_element,        *elementno );
02216 
02217   return(result);
02218 }
02219 
02220 
02221 int sasa_c_get_element_3rd_level_d  (int  *num_doc,
02222                      char *firstlevel, 
02223                      int  *firstno, 
02224                      char *secondlevel, 
02225                      int  *secondno, 
02226                      char *thirdlevel, 
02227                      int  *thirdno, 
02228                      char *element, 
02229                      int  *elementno,
02230                      double  *xml_element,
02231                      int  len_firstlevel,
02232                      int  len_secondlevel,
02233                      int  len_thirdlevel,
02234                      int  len_element)
02235 {
02236   int result;
02237 
02238   result = sasa_c_get_element_d(
02239     xml_element, *num_doc, 3,
02240     firstlevel,  len_firstlevel,     *firstno, 
02241     secondlevel, len_secondlevel,    *secondno, 
02242     thirdlevel,  len_thirdlevel,     *thirdno, 
02243     element,     len_element,        *elementno );
02244 
02245   return(result);
02246 }
02247 
02248 
02249 int sasa_c_get_element_4th_level_c  (int  *num_doc,
02250                      char *firstlevel, 
02251                      int  *firstno, 
02252                      char *secondlevel, 
02253                      int  *secondno, 
02254                      char *thirdlevel, 
02255                      int  *thirdno, 
02256                      char *fourthlevel, 
02257                      int  *fourthno, 
02258                      char *element, 
02259                      int  *elementno,
02260                      char *xml_element,
02261                      int  *xml_element_length,
02262                      int  len_firstlevel,
02263                      int  len_secondlevel,
02264                      int  len_thirdlevel,
02265                      int  len_fourthlevel,
02266                      int  len_element,
02267                      int  len_xml_element)
02268 {
02269   int result;
02270 
02271   result = sasa_c_get_element_c(
02272     xml_element, xml_element_length, *num_doc, 4,
02273     firstlevel,  len_firstlevel,     *firstno, 
02274     secondlevel, len_secondlevel,    *secondno, 
02275     thirdlevel,  len_thirdlevel,     *thirdno, 
02276     fourthlevel, len_fourthlevel,    *fourthno, 
02277     element,     len_element,        *elementno );
02278 
02279   return(result);
02280 }
02281 
02282 
02283 int sasa_c_get_element_4th_level_i  (int  *num_doc,
02284                      char *firstlevel, 
02285                      int  *firstno, 
02286                      char *secondlevel, 
02287                      int  *secondno, 
02288                      char *thirdlevel, 
02289                      int  *thirdno, 
02290                      char *fourthlevel, 
02291                      int  *fourthno, 
02292                      char *element, 
02293                      int  *elementno,
02294                      int  *xml_element,
02295                      int  len_firstlevel,
02296                      int  len_secondlevel,
02297                      int  len_thirdlevel,
02298                      int  len_fourthlevel,
02299                      int  len_element)
02300 {
02301   int result;
02302 
02303   result = sasa_c_get_element_i(
02304     xml_element, *num_doc, 4,
02305     firstlevel,  len_firstlevel,     *firstno, 
02306     secondlevel, len_secondlevel,    *secondno, 
02307     thirdlevel,  len_thirdlevel,     *thirdno, 
02308     fourthlevel, len_fourthlevel,    *fourthno, 
02309     element,     len_element,        *elementno );
02310 
02311   return(result);
02312 }
02313 
02314 
02315 int sasa_c_get_element_4th_level_d  (int  *num_doc,
02316                      char *firstlevel, 
02317                      int  *firstno, 
02318                      char *secondlevel, 
02319                      int  *secondno, 
02320                      char *thirdlevel, 
02321                      int  *thirdno, 
02322                      char *fourthlevel, 
02323                      int  *fourthno, 
02324                      char *element, 
02325                      int  *elementno,
02326                      double  *xml_element,
02327                      int  len_firstlevel,
02328                      int  len_secondlevel,
02329                      int  len_thirdlevel,
02330                      int  len_fourthlevel,
02331                      int  len_element)
02332 {
02333   int result;
02334 
02335   result = sasa_c_get_element_d(
02336     xml_element, *num_doc, 4,
02337     firstlevel,  len_firstlevel,     *firstno, 
02338     secondlevel, len_secondlevel,    *secondno, 
02339     thirdlevel,  len_thirdlevel,     *thirdno, 
02340     fourthlevel, len_fourthlevel,    *fourthno, 
02341     element,     len_element,        *elementno );
02342 
02343   return(result);
02344 }
02345 
02346 
02347 int sasa_c_get_element_5th_level_c  (int  *num_doc,
02348                      char *firstlevel, 
02349                      int  *firstno, 
02350                      char *secondlevel, 
02351                      int  *secondno, 
02352                      char *thirdlevel, 
02353                      int  *thirdno, 
02354                      char *fourthlevel, 
02355                      int  *fourthno, 
02356                      char *fifthlevel, 
02357                      int  *fifthno, 
02358                      char *element, 
02359                      int  *elementno,
02360                      char *xml_element,
02361                      int  *xml_element_length,
02362                      int  len_firstlevel,
02363                      int  len_secondlevel,
02364                      int  len_thirdlevel,
02365                      int  len_fourthlevel,
02366                      int  len_fifthlevel,
02367                      int  len_element,
02368                      int  len_xml_element)
02369 {
02370   int result;
02371 
02372   result = sasa_c_get_element_c(
02373     xml_element, xml_element_length, *num_doc, 5,
02374     firstlevel,  len_firstlevel,     *firstno, 
02375     secondlevel, len_secondlevel,    *secondno, 
02376     thirdlevel,  len_thirdlevel,     *thirdno, 
02377     fourthlevel, len_fourthlevel,    *fourthno, 
02378     fifthlevel,  len_fifthlevel,     *fifthno, 
02379     element,     len_element,        *elementno );
02380 
02381   return(result);
02382 }
02383 
02384 
02385 int sasa_c_get_element_5th_level_i  (int  *num_doc,
02386                      char *firstlevel, 
02387                      int  *firstno, 
02388                      char *secondlevel, 
02389                      int  *secondno, 
02390                      char *thirdlevel, 
02391                      int  *thirdno, 
02392                      char *fourthlevel, 
02393                      int  *fourthno, 
02394                      char *fifthlevel, 
02395                      int  *fifthno, 
02396                      char *element, 
02397                      int  *elementno,
02398                      int  *xml_element,
02399                      int  len_firstlevel,
02400                      int  len_secondlevel,
02401                      int  len_thirdlevel,
02402                      int  len_fourthlevel,
02403                      int  len_fifthlevel,
02404                      int  len_element)
02405 {
02406   int result;
02407 
02408   result = sasa_c_get_element_i(
02409     xml_element, *num_doc, 5,
02410     firstlevel,  len_firstlevel,     *firstno, 
02411     secondlevel, len_secondlevel,    *secondno, 
02412     thirdlevel,  len_thirdlevel,     *thirdno, 
02413     fourthlevel, len_fourthlevel,    *fourthno, 
02414     fifthlevel,  len_fifthlevel,     *fifthno, 
02415     element,     len_element,        *elementno );
02416 
02417   return(result);
02418 }
02419 
02420 
02421 int sasa_c_get_element_5th_level_d  (int  *num_doc,
02422                      char *firstlevel, 
02423                      int  *firstno, 
02424                      char *secondlevel, 
02425                      int  *secondno, 
02426                      char *thirdlevel, 
02427                      int  *thirdno, 
02428                      char *fourthlevel, 
02429                      int  *fourthno, 
02430                      char *fifthlevel, 
02431                      int  *fifthno, 
02432                      char *element, 
02433                      int  *elementno,
02434                      double  *xml_element,
02435                      int  len_firstlevel,
02436                      int  len_secondlevel,
02437                      int  len_thirdlevel,
02438                      int  len_fourthlevel,
02439                      int  len_fifthlevel,
02440                      int  len_element)
02441 {
02442   int result;
02443 
02444   result = sasa_c_get_element_d(
02445     xml_element, *num_doc, 5,
02446     firstlevel,  len_firstlevel,     *firstno, 
02447     secondlevel, len_secondlevel,    *secondno, 
02448     thirdlevel,  len_thirdlevel,     *thirdno, 
02449     fourthlevel, len_fourthlevel,    *fourthno, 
02450     fifthlevel,  len_fifthlevel,     *fifthno, 
02451     element,     len_element,        *elementno );
02452 
02453   return(result);
02454 }
02455 
02456 
02457 int sasa_c_get_element_6th_level_c  (int  *num_doc,
02458                      char *firstlevel, 
02459                      int  *firstno, 
02460                      char *secondlevel, 
02461                      int  *secondno, 
02462                      char *thirdlevel, 
02463                      int  *thirdno, 
02464                      char *fourthlevel, 
02465                      int  *fourthno, 
02466                      char *fifthlevel, 
02467                      int  *fifthno, 
02468                      char *sixthlevel, 
02469                      int  *sixthno, 
02470                      char *element, 
02471                      int  *elementno,
02472                      char *xml_element,
02473                      int  *xml_element_length,
02474                      int  len_firstlevel,
02475                      int  len_secondlevel,
02476                      int  len_thirdlevel,
02477                      int  len_fourthlevel,
02478                      int  len_fifthlevel,
02479                      int  len_sixthlevel,
02480                      int  len_element,
02481                      int  len_xml_element)
02482 {
02483   int result;
02484 
02485   result = sasa_c_get_element_c(
02486     xml_element, xml_element_length, *num_doc, 6,
02487     firstlevel,  len_firstlevel,     *firstno, 
02488     secondlevel, len_secondlevel,    *secondno, 
02489     thirdlevel,  len_thirdlevel,     *thirdno, 
02490     fourthlevel, len_fourthlevel,    *fourthno, 
02491     fifthlevel,  len_fifthlevel,     *fifthno, 
02492     sixthlevel,  len_sixthlevel,     *sixthno, 
02493     element,     len_element,        *elementno );
02494 
02495   return(result);
02496 }
02497 
02498 
02499 int sasa_c_get_element_6th_level_i  (int  *num_doc,
02500                      char *firstlevel, 
02501                      int  *firstno, 
02502                      char *secondlevel, 
02503                      int  *secondno, 
02504                      char *thirdlevel, 
02505                      int  *thirdno, 
02506                      char *fourthlevel, 
02507                      int  *fourthno, 
02508                      char *fifthlevel, 
02509                      int  *fifthno, 
02510                      char *sixthlevel, 
02511                      int  *sixthno, 
02512                      char *element, 
02513                      int  *elementno,
02514                      int  *xml_element,
02515                      int  len_firstlevel,
02516                      int  len_secondlevel,
02517                      int  len_thirdlevel,
02518                      int  len_fourthlevel,
02519                      int  len_fifthlevel,
02520                      int  len_sixthlevel,
02521                      int  len_element)
02522 {
02523   int result;
02524 
02525   result = sasa_c_get_element_i(
02526     xml_element, *num_doc, 6,
02527     firstlevel,  len_firstlevel,     *firstno, 
02528     secondlevel, len_secondlevel,    *secondno, 
02529     thirdlevel,  len_thirdlevel,     *thirdno, 
02530     fourthlevel, len_fourthlevel,    *fourthno, 
02531     fifthlevel,  len_fifthlevel,     *fifthno, 
02532     sixthlevel,  len_sixthlevel,     *sixthno, 
02533     element,     len_element,        *elementno );
02534 
02535   return(result);
02536 }
02537 
02538 
02539 int sasa_c_get_element_6th_level_d  (int  *num_doc,
02540                      char *firstlevel, 
02541                      int  *firstno, 
02542                      char *secondlevel, 
02543                      int  *secondno, 
02544                      char *thirdlevel, 
02545                      int  *thirdno, 
02546                      char *fourthlevel, 
02547                      int  *fourthno, 
02548                      char *fifthlevel, 
02549                      int  *fifthno, 
02550                      char *sixthlevel, 
02551                      int  *sixthno, 
02552                      char *element, 
02553                      int  *elementno,
02554                      double  *xml_element,
02555                      int  len_firstlevel,
02556                      int  len_secondlevel,
02557                      int  len_thirdlevel,
02558                      int  len_fourthlevel,
02559                      int  len_fifthlevel,
02560                      int  len_sixthlevel,
02561                      int  len_element)
02562 {
02563   int result;
02564 
02565   result = sasa_c_get_element_d(
02566     xml_element, *num_doc, 6,
02567     firstlevel,  len_firstlevel,     *firstno, 
02568     secondlevel, len_secondlevel,    *secondno, 
02569     thirdlevel,  len_thirdlevel,     *thirdno, 
02570     fourthlevel, len_fourthlevel,    *fourthno, 
02571     fifthlevel,  len_fifthlevel,     *fifthno, 
02572     sixthlevel,  len_sixthlevel,     *sixthno, 
02573     element,     len_element,        *elementno );
02574 
02575   return(result);
02576 }
02577 
02578 
02579 int sasa_c_get_element_7th_level_c  (int  *num_doc,
02580                      char *firstlevel, 
02581                      int  *firstno, 
02582                      char *secondlevel, 
02583                      int  *secondno, 
02584                      char *thirdlevel, 
02585                      int  *thirdno, 
02586                      char *fourthlevel, 
02587                      int  *fourthno, 
02588                      char *fifthlevel, 
02589                      int  *fifthno, 
02590                      char *sixthlevel, 
02591                      int  *sixthno, 
02592                      char *seventhlevel, 
02593                      int  *seventhno, 
02594                      char *element, 
02595                      int  *elementno,
02596                      char *xml_element,
02597                      int  *xml_element_length,
02598                      int  len_firstlevel,
02599                      int  len_secondlevel,
02600                      int  len_thirdlevel,
02601                      int  len_fourthlevel,
02602                      int  len_fifthlevel,
02603                      int  len_sixthlevel,
02604                      int  len_seventhlevel,
02605                      int  len_element,
02606                      int  len_xml_element)
02607 {
02608   int result;
02609 
02610   result = sasa_c_get_element_c(
02611     xml_element,  xml_element_length, *num_doc, 7,
02612     firstlevel,   len_firstlevel,     *firstno, 
02613     secondlevel,  len_secondlevel,    *secondno, 
02614     thirdlevel,   len_thirdlevel,     *thirdno, 
02615     fourthlevel,  len_fourthlevel,    *fourthno, 
02616     fifthlevel,   len_fifthlevel,     *fifthno, 
02617     sixthlevel,   len_sixthlevel,     *sixthno, 
02618     seventhlevel, len_seventhlevel,   *seventhno, 
02619     element,      len_element,        *elementno );
02620 
02621   return(result);
02622 }
02623 
02624 
02625 int sasa_c_get_element_7th_level_i  (int  *num_doc,
02626                      char *firstlevel, 
02627                      int  *firstno, 
02628                      char *secondlevel, 
02629                      int  *secondno, 
02630                      char *thirdlevel, 
02631                      int  *thirdno, 
02632                      char *fourthlevel, 
02633                      int  *fourthno, 
02634                      char *fifthlevel, 
02635                      int  *fifthno, 
02636                      char *sixthlevel, 
02637                      int  *sixthno, 
02638                      char *seventhlevel, 
02639                      int  *seventhno, 
02640                      char *element, 
02641                      int  *elementno,
02642                      int  *xml_element,
02643                      int  len_firstlevel,
02644                      int  len_secondlevel,
02645                      int  len_thirdlevel,
02646                      int  len_fourthlevel,
02647                      int  len_fifthlevel,
02648                      int  len_sixthlevel,
02649                      int  len_seventhlevel,
02650                      int  len_element)
02651 {
02652   int result;
02653 
02654   result = sasa_c_get_element_i(
02655     xml_element,  *num_doc, 7,
02656     firstlevel,   len_firstlevel,     *firstno, 
02657     secondlevel,  len_secondlevel,    *secondno, 
02658     thirdlevel,   len_thirdlevel,     *thirdno, 
02659     fourthlevel,  len_fourthlevel,    *fourthno, 
02660     fifthlevel,   len_fifthlevel,     *fifthno, 
02661     sixthlevel,   len_sixthlevel,     *sixthno, 
02662     seventhlevel, len_seventhlevel,   *seventhno, 
02663     element,      len_element,        *elementno );
02664 
02665   return(result);
02666 }
02667 
02668 int sasa_c_get_element_7th_level_d  (int  *num_doc,
02669                      char *firstlevel, 
02670                      int  *firstno, 
02671                      char *secondlevel, 
02672                      int  *secondno, 
02673                      char *thirdlevel, 
02674                      int  *thirdno, 
02675                      char *fourthlevel, 
02676                      int  *fourthno, 
02677                      char *fifthlevel, 
02678                      int  *fifthno, 
02679                      char *sixthlevel, 
02680                      int  *sixthno,
02681                      char *seventhlevel, 
02682                      int  *seventhno, 
02683                      char *element, 
02684                      int  *elementno,
02685                      double  *xml_element,
02686                      int  len_firstlevel,
02687                      int  len_secondlevel,
02688                      int  len_thirdlevel,
02689                      int  len_fourthlevel,
02690                      int  len_fifthlevel,
02691                      int  len_sixthlevel,
02692                      int  len_seventhlevel,
02693                      int  len_element)
02694 {
02695   int result;
02696 
02697   result = sasa_c_get_element_d(
02698     xml_element,  *num_doc, 7,
02699     firstlevel,   len_firstlevel,     *firstno, 
02700     secondlevel,  len_secondlevel,    *secondno, 
02701     thirdlevel,   len_thirdlevel,     *thirdno, 
02702     fourthlevel,  len_fourthlevel,    *fourthno, 
02703     fifthlevel,   len_fifthlevel,     *fifthno, 
02704     sixthlevel,   len_sixthlevel,     *sixthno, 
02705     seventhlevel, len_seventhlevel,   *seventhno, 
02706     element,      len_element,        *elementno );
02707 
02708   return(result);
02709 }
02710 
02711 int sasa_c_get_element_8th_level_c  (int  *num_doc,
02712                      char *firstlevel, 
02713                      int  *firstno, 
02714                      char *secondlevel, 
02715                      int  *secondno, 
02716                      char *thirdlevel, 
02717                      int  *thirdno, 
02718                      char *fourthlevel, 
02719                      int  *fourthno, 
02720                      char *fifthlevel, 
02721                      int  *fifthno, 
02722                      char *sixthlevel, 
02723                      int  *sixthno, 
02724                      char *seventhlevel, 
02725                      int  *seventhno, 
02726                      char *eighthlevel, 
02727                      int  *eighthno, 
02728                      char *element, 
02729                      int  *elementno,
02730                      char *xml_element,
02731                      int  *xml_element_length,
02732                      int  len_firstlevel,
02733                      int  len_secondlevel,
02734                      int  len_thirdlevel,
02735                      int  len_fourthlevel,
02736                      int  len_fifthlevel,
02737                      int  len_sixthlevel,
02738                      int  len_seventhlevel,
02739                      int  len_eighthlevel,
02740                      int  len_element,
02741                      int  len_xml_element)
02742 {
02743   int result;
02744 
02745   result = sasa_c_get_element_c(
02746     xml_element,  xml_element_length, *num_doc, 8,
02747     firstlevel,   len_firstlevel,     *firstno, 
02748     secondlevel,  len_secondlevel,    *secondno, 
02749     thirdlevel,   len_thirdlevel,     *thirdno, 
02750     fourthlevel,  len_fourthlevel,    *fourthno, 
02751     fifthlevel,   len_fifthlevel,     *fifthno, 
02752     sixthlevel,   len_sixthlevel,     *sixthno, 
02753     seventhlevel, len_seventhlevel,   *seventhno, 
02754     eighthlevel,  len_eighthlevel,    *eighthno, 
02755     element,      len_element,        *elementno );
02756 
02757   return(result);
02758 }
02759 
02760 
02761 int sasa_c_get_element_8th_level_i  (int  *num_doc,
02762                      char *firstlevel, 
02763                      int  *firstno, 
02764                      char *secondlevel, 
02765                      int  *secondno, 
02766                      char *thirdlevel, 
02767                      int  *thirdno, 
02768                      char *fourthlevel, 
02769                      int  *fourthno, 
02770                      char *fifthlevel, 
02771                      int  *fifthno, 
02772                      char *sixthlevel, 
02773                      int  *sixthno, 
02774                      char *seventhlevel, 
02775                      int  *seventhno, 
02776                      char *eighthlevel, 
02777                      int  *eighthno, 
02778                      char *element, 
02779                      int  *elementno,
02780                      int  *xml_element,
02781                      int  len_firstlevel,
02782                      int  len_secondlevel,
02783                      int  len_thirdlevel,
02784                      int  len_fourthlevel,
02785                      int  len_fifthlevel,
02786                      int  len_sixthlevel,
02787                      int  len_seventhlevel,
02788                      int  len_eighthlevel,
02789                      int  len_element)
02790 {
02791   int result;
02792 
02793   result = sasa_c_get_element_i(
02794     xml_element,  *num_doc, 8,
02795     firstlevel,   len_firstlevel,     *firstno, 
02796     secondlevel,  len_secondlevel,    *secondno, 
02797     thirdlevel,   len_thirdlevel,     *thirdno, 
02798     fourthlevel,  len_fourthlevel,    *fourthno, 
02799     fifthlevel,   len_fifthlevel,     *fifthno, 
02800     sixthlevel,   len_sixthlevel,     *sixthno, 
02801     seventhlevel, len_seventhlevel,   *seventhno, 
02802     eighthlevel,  len_eighthlevel,    *eighthno, 
02803     element,      len_element,        *elementno );
02804 
02805   return(result);
02806 }
02807 
02808 int sasa_c_get_element_8th_level_d  (int  *num_doc,
02809                      char *firstlevel, 
02810                      int  *firstno, 
02811                      char *secondlevel, 
02812                      int  *secondno, 
02813                      char *thirdlevel, 
02814                      int  *thirdno, 
02815                      char *fourthlevel, 
02816                      int  *fourthno, 
02817                      char *fifthlevel, 
02818                      int  *fifthno, 
02819                      char *sixthlevel, 
02820                      int  *sixthno,
02821                      char *seventhlevel, 
02822                      int  *seventhno,
02823                      char *eighthlevel, 
02824                      int  *eighthno, 
02825                      char *element, 
02826                      int  *elementno,
02827                      double  *xml_element,
02828                      int  len_firstlevel,
02829                      int  len_secondlevel,
02830                      int  len_thirdlevel,
02831                      int  len_fourthlevel,
02832                      int  len_fifthlevel,
02833                      int  len_sixthlevel,
02834                      int  len_seventhlevel,
02835                      int  len_eighthlevel,
02836                      int  len_element)
02837 {
02838   int result;
02839 
02840   result = sasa_c_get_element_d(
02841     xml_element,  *num_doc, 8,
02842     firstlevel,   len_firstlevel,     *firstno, 
02843     secondlevel,  len_secondlevel,    *secondno, 
02844     thirdlevel,   len_thirdlevel,     *thirdno, 
02845     fourthlevel,  len_fourthlevel,    *fourthno, 
02846     fifthlevel,   len_fifthlevel,     *fifthno, 
02847     sixthlevel,   len_sixthlevel,     *sixthno, 
02848     seventhlevel, len_seventhlevel,   *seventhno, 
02849     eighthlevel,  len_eighthlevel,    *eighthno, 
02850     element,      len_element,        *elementno );
02851 
02852   return(result);
02853 }
02854 
02855 int sasa_c_get_element_9th_level_c  (int  *num_doc,
02856                      char *firstlevel, 
02857                      int  *firstno, 
02858                      char *secondlevel, 
02859                      int  *secondno, 
02860                      char *thirdlevel, 
02861                      int  *thirdno, 
02862                      char *fourthlevel, 
02863                      int  *fourthno, 
02864                      char *fifthlevel, 
02865                      int  *fifthno, 
02866                      char *sixthlevel, 
02867                      int  *sixthno, 
02868                      char *seventhlevel, 
02869                      int  *seventhno, 
02870                      char *eighthlevel, 
02871                      int  *eighthno, 
02872                      char *ninthlevel, 
02873                      int  *ninthno, 
02874                      char *element, 
02875                      int  *elementno,
02876                      char *xml_element,
02877                      int  *xml_element_length,
02878                      int  len_firstlevel,
02879                      int  len_secondlevel,
02880                      int  len_thirdlevel,
02881                      int  len_fourthlevel,
02882                      int  len_fifthlevel,
02883                      int  len_sixthlevel,
02884                      int  len_seventhlevel,
02885                      int  len_eighthlevel,
02886                      int  len_ninthlevel,
02887                      int  len_element,
02888                      int  len_xml_element)
02889 {
02890   int result;
02891 
02892   result = sasa_c_get_element_c(
02893     xml_element,  xml_element_length, *num_doc, 9,
02894     firstlevel,   len_firstlevel,     *firstno, 
02895     secondlevel,  len_secondlevel,    *secondno, 
02896     thirdlevel,   len_thirdlevel,     *thirdno, 
02897     fourthlevel,  len_fourthlevel,    *fourthno, 
02898     fifthlevel,   len_fifthlevel,     *fifthno, 
02899     sixthlevel,   len_sixthlevel,     *sixthno, 
02900     seventhlevel, len_seventhlevel,   *seventhno, 
02901     eighthlevel,  len_eighthlevel,    *eighthno, 
02902     ninthlevel,   len_ninthlevel,     *ninthno, 
02903     element,      len_element,        *elementno );
02904 
02905   return(result);
02906 }
02907 
02908 
02909 int sasa_c_get_element_9th_level_i  (int  *num_doc,
02910                      char *firstlevel, 
02911                      int  *firstno, 
02912                      char *secondlevel, 
02913                      int  *secondno, 
02914                      char *thirdlevel, 
02915                      int  *thirdno, 
02916                      char *fourthlevel, 
02917                      int  *fourthno, 
02918                      char *fifthlevel, 
02919                      int  *fifthno, 
02920                      char *sixthlevel, 
02921                      int  *sixthno, 
02922                      char *seventhlevel, 
02923                      int  *seventhno, 
02924                      char *eighthlevel, 
02925                      int  *eighthno, 
02926                      char *ninthlevel, 
02927                      int  *ninthno, 
02928                      char *element, 
02929                      int  *elementno,
02930                      int  *xml_element,
02931                      int  len_firstlevel,
02932                      int  len_secondlevel,
02933                      int  len_thirdlevel,
02934                      int  len_fourthlevel,
02935                      int  len_fifthlevel,
02936                      int  len_sixthlevel,
02937                      int  len_seventhlevel,
02938                      int  len_eighthlevel,
02939                      int  len_ninthlevel,
02940                      int  len_element)
02941 {
02942   int result;
02943 
02944   result = sasa_c_get_element_i(
02945     xml_element,  *num_doc, 9,
02946     firstlevel,   len_firstlevel,     *firstno, 
02947     secondlevel,  len_secondlevel,    *secondno, 
02948     thirdlevel,   len_thirdlevel,     *thirdno, 
02949     fourthlevel,  len_fourthlevel,    *fourthno, 
02950     fifthlevel,   len_fifthlevel,     *fifthno, 
02951     sixthlevel,   len_sixthlevel,     *sixthno, 
02952     seventhlevel, len_seventhlevel,   *seventhno, 
02953     eighthlevel,  len_eighthlevel,    *eighthno, 
02954     ninthlevel,   len_ninthlevel,     *ninthno, 
02955     element,      len_element,        *elementno );
02956 
02957   return(result);
02958 }
02959 
02960 
02961 int sasa_c_get_element_9th_level_d  (int  *num_doc,
02962                      char *firstlevel, 
02963                      int  *firstno, 
02964                      char *secondlevel, 
02965                      int  *secondno, 
02966                      char *thirdlevel, 
02967                      int  *thirdno, 
02968                      char *fourthlevel, 
02969                      int  *fourthno, 
02970                      char *fifthlevel, 
02971                      int  *fifthno, 
02972                      char *sixthlevel, 
02973                      int  *sixthno, 
02974                      char *seventhlevel, 
02975                      int  *seventhno, 
02976                      char *eighthlevel, 
02977                      int  *eighthno, 
02978                      char *ninthlevel, 
02979                      int  *ninthno, 
02980                      char *element, 
02981                      int  *elementno,
02982                      double  *xml_element,
02983                      int  len_firstlevel,
02984                      int  len_secondlevel,
02985                      int  len_thirdlevel,
02986                      int  len_fourthlevel,
02987                      int  len_fifthlevel,
02988                      int  len_sixthlevel,
02989                      int  len_seventhlevel,
02990                      int  len_eighthlevel,
02991                      int  len_ninthlevel,
02992                      int  len_element)
02993 {
02994   int result;
02995 
02996   result = sasa_c_get_element_d(
02997     xml_element,  *num_doc, 9,
02998     firstlevel,   len_firstlevel,     *firstno, 
02999     secondlevel,  len_secondlevel,    *secondno, 
03000     thirdlevel,   len_thirdlevel,     *thirdno, 
03001     fourthlevel,  len_fourthlevel,    *fourthno, 
03002     fifthlevel,   len_fifthlevel,     *fifthno, 
03003     sixthlevel,   len_sixthlevel,     *sixthno, 
03004     seventhlevel, len_seventhlevel,   *seventhno, 
03005     eighthlevel,  len_eighthlevel,    *eighthno, 
03006     ninthlevel,   len_ninthlevel,     *ninthno, 
03007     element,      len_element,        *elementno );
03008 
03009   return(result);
03010 }
03011 
03012 int sasa_c_get_element_10th_level_c (int  *num_doc,
03013                      char *firstlevel, 
03014                      int  *firstno, 
03015                      char *secondlevel, 
03016                      int  *secondno, 
03017                      char *thirdlevel, 
03018                      int  *thirdno, 
03019                      char *fourthlevel, 
03020                      int  *fourthno, 
03021                      char *fifthlevel, 
03022                      int  *fifthno, 
03023                      char *sixthlevel, 
03024                      int  *sixthno, 
03025                      char *seventhlevel, 
03026                      int  *seventhno, 
03027                      char *eighthlevel, 
03028                      int  *eighthno, 
03029                      char *ninthlevel, 
03030                      int  *ninthno,
03031                      char *tenthlevel, 
03032                      int  *tenthno, 
03033                      char *element, 
03034                      int  *elementno,
03035                      char *xml_element,
03036                      int  *xml_element_length,
03037                      int  len_firstlevel,
03038                      int  len_secondlevel,
03039                      int  len_thirdlevel,
03040                      int  len_fourthlevel,
03041                      int  len_fifthlevel,
03042                      int  len_sixthlevel,
03043                      int  len_seventhlevel,
03044                      int  len_eighthlevel,
03045                      int  len_ninthlevel,
03046                      int  len_tenthlevel,
03047                      int  len_element,
03048                      int  len_xml_element)
03049 {
03050   int result;
03051 
03052   result = sasa_c_get_element_c(
03053     xml_element,  xml_element_length, *num_doc, 10,
03054     firstlevel,   len_firstlevel,     *firstno, 
03055     secondlevel,  len_secondlevel,    *secondno, 
03056     thirdlevel,   len_thirdlevel,     *thirdno, 
03057     fourthlevel,  len_fourthlevel,    *fourthno, 
03058     fifthlevel,   len_fifthlevel,     *fifthno, 
03059     sixthlevel,   len_sixthlevel,     *sixthno, 
03060     seventhlevel, len_seventhlevel,   *seventhno, 
03061     eighthlevel,  len_eighthlevel,    *eighthno, 
03062     ninthlevel,   len_ninthlevel,     *ninthno, 
03063     tenthlevel,   len_tenthlevel,     *tenthno, 
03064     element,      len_element,        *elementno );
03065 
03066   return(result);
03067 }
03068 
03069 
03070 int sasa_c_get_element_10th_level_i (int  *num_doc,
03071                      char *firstlevel, 
03072                      int  *firstno, 
03073                      char *secondlevel, 
03074                      int  *secondno, 
03075                      char *thirdlevel, 
03076                      int  *thirdno, 
03077                      char *fourthlevel, 
03078                      int  *fourthno, 
03079                      char *fifthlevel, 
03080                      int  *fifthno, 
03081                      char *sixthlevel, 
03082                      int  *sixthno, 
03083                      char *seventhlevel, 
03084                      int  *seventhno, 
03085                      char *eighthlevel, 
03086                      int  *eighthno, 
03087                      char *ninthlevel, 
03088                      int  *ninthno,
03089                      char *tenthlevel, 
03090                      int  *tenthno, 
03091                      char *element, 
03092                      int  *elementno,
03093                      int  *xml_element,
03094                      int  len_firstlevel,
03095                      int  len_secondlevel,
03096                      int  len_thirdlevel,
03097                      int  len_fourthlevel,
03098                      int  len_fifthlevel,
03099                      int  len_sixthlevel,
03100                      int  len_seventhlevel,
03101                      int  len_eighthlevel,
03102                      int  len_ninthlevel,
03103                      int  len_tenthlevel,
03104                      int  len_element)
03105 {
03106   int result;
03107 
03108   result = sasa_c_get_element_i(
03109     xml_element,  *num_doc, 10,
03110     firstlevel,   len_firstlevel,     *firstno, 
03111     secondlevel,  len_secondlevel,    *secondno, 
03112     thirdlevel,   len_thirdlevel,     *thirdno, 
03113     fourthlevel,  len_fourthlevel,    *fourthno, 
03114     fifthlevel,   len_fifthlevel,     *fifthno, 
03115     sixthlevel,   len_sixthlevel,     *sixthno, 
03116     seventhlevel, len_seventhlevel,   *seventhno, 
03117     eighthlevel,  len_eighthlevel,    *eighthno, 
03118     ninthlevel,   len_ninthlevel,     *ninthno, 
03119     tenthlevel,   len_tenthlevel,     *tenthno, 
03120     element,      len_element,        *elementno );
03121 
03122   return(result);
03123 }
03124 
03125 
03126 int sasa_c_get_element_10th_level_d (int  *num_doc,
03127                      char *firstlevel, 
03128                      int  *firstno, 
03129                      char *secondlevel, 
03130                      int  *secondno, 
03131                      char *thirdlevel, 
03132                      int  *thirdno, 
03133                      char *fourthlevel, 
03134                      int  *fourthno, 
03135                      char *fifthlevel, 
03136                      int  *fifthno, 
03137                      char *sixthlevel, 
03138                      int  *sixthno, 
03139                      char *seventhlevel, 
03140                      int  *seventhno, 
03141                      char *eighthlevel, 
03142                      int  *eighthno, 
03143                      char *ninthlevel, 
03144                      int  *ninthno,
03145                      char *tenthlevel, 
03146                      int  *tenthno,
03147                      char *element, 
03148                      int  *elementno,
03149                      double  *xml_element,
03150                      int  len_firstlevel,
03151                      int  len_secondlevel,
03152                      int  len_thirdlevel,
03153                      int  len_fourthlevel,
03154                      int  len_fifthlevel,
03155                      int  len_sixthlevel,
03156                      int  len_seventhlevel,
03157                      int  len_eighthlevel,
03158                      int  len_ninthlevel,
03159                      int  len_tenthlevel,
03160                      int  len_element)
03161 {
03162   int result;
03163 
03164   result = sasa_c_get_element_d(
03165     xml_element,  *num_doc, 10,
03166     firstlevel,   len_firstlevel,     *firstno, 
03167     secondlevel,  len_secondlevel,    *secondno, 
03168     thirdlevel,   len_thirdlevel,     *thirdno, 
03169     fourthlevel,  len_fourthlevel,    *fourthno, 
03170     fifthlevel,   len_fifthlevel,     *fifthno, 
03171     sixthlevel,   len_sixthlevel,     *sixthno, 
03172     seventhlevel, len_seventhlevel,   *seventhno, 
03173     eighthlevel,  len_eighthlevel,    *eighthno, 
03174     ninthlevel,   len_ninthlevel,     *ninthno, 
03175     tenthlevel,   len_tenthlevel,     *tenthno, 
03176     element,      len_element,        *elementno );
03177 
03178   return(result);
03179 }

Generated on 18 Mar 2011 for Oasis4 by  doxygen 1.6.1