source: trunk/zoo-kernel/service_conf.y @ 183

Last change on this file since 183 was 114, checked in by djay, 14 years ago

Code cleanup to avoid most of the warning messages at compilation time.

File size: 22.5 KB
RevLine 
[1]1%{
2//======================================================
3/**
4 * Thx to Jean-Marie CODOL and Naitan GROLLEMUND
5 * copyright 2009 GeoLabs SARL
6 * Author : Gérald FENOY
7 *
8 */
9//======================================================
10
11#include <string>
12#include <stdio.h>
13#include <ctype.h>
14#include <service.h>
[9]15  //#include <vector>
[1]16
17static int tmp_count=1;
18static int defaultsc=0;
19static bool wait_maincontent=true;
20static bool wait_mainmetadata=false;
21static bool wait_metadata=false;
22static bool wait_inputs=false;
23static bool wait_defaults=false;
24static bool wait_supporteds=false;
25static bool wait_outputs=false;
26static bool wait_data=false;
27static int services_c=0;
28static service* my_service=NULL;
29static map* previous_content=NULL;
30static map* current_content=NULL;
31static elements* current_element=NULL;
32static map* scontent=NULL;
33static char* curr_key;
34static int debug=0;
35static int data=-1;
36static int previous_data=0;
37static int current_data=0;
38// namespace
39using namespace std;
40//======================================================
41
42// srerror
[114]43void srerror(const char *s);
[1]44//======================================================
45
46// usage ()
47void usage(void) ;
48//======================================================
49
50// srdebug
51extern int srdebug;
52//======================================================
53
54extern char srtext[];
55
56// srlineno
57extern int srlineno;
58//======================================================
59
60// srin
61extern FILE* srin;
62//======================================================
63
64// srlex
65extern int srlex(void);
[9]66extern int srlex_destroy(void);
[1]67
[9]68//vector<char*> lattribute;
[1]69
70%}
71
72
73
74%union
75{char * s;char* chaine;char* key;char* val;}
76
77// jetons //
78%token <s> ID
79%token <s> CHAINE
80/* STARTXMLDECL et ENDXMLDECL qui sont <?xml et ?>*/
81%token STARTXMLDECL ENDXMLDECL
82//======================================================
83/* version="xxx" et encoding="xxx" */
84%token VERSIONDECL ENCODINGDECL SDDECL
85//======================================================
86/* < et > */
87%token INFCAR SUPCAR
88//======================================================
89/* / = a1  texte "texte" */
90%token SLASH Eq CHARDATA ATTVALUE PAIR SPAIR EPAIR ANID
91%type <chaine> PAIR
92%type <chaine> EPAIR
93%type <chaine> SPAIR
94//======================================================
95/* <!-- xxx -> <? xxx yyy ?> */
96%token PI PIERROR /** COMMENT **/
97//======================================================
98/* <!-- xxx -> <? xxx yyy ?> */
99%token ERREURGENERALE CDATA WHITESPACE NEWLINE
100%type <s> STag
101%type <s> ETag
102%type <s> ANID
103//======================================================
104// %start
105//======================================================
106
107%%
108// document <//===
109//======================================================
110// regle 1
111// on est a la racine du fichier xml
112//======================================================
113document
114 : miscetoile element miscetoile {}
115 | contentetoile processid contentetoile document {}
116 ;
117
118miscetoile
119 : miscetoile PIERROR {  srerror("processing instruction begining with <?xml ?> impossible\n");}
120 | miscetoile PI {}
121 | {}
122 ;
123// element
124//======================================================
125// regle 39
126// OUVRANTE CONTENU FERMANTE obligatoirement
127// ou neutre
128// on ne peut pas avoir Epsilon
129// un fichier xml ne peut pas etre vide ou seulement avec un prolog
130//======================================================
131element
132 : STag contentetoile ETag     
133{
134}
[20]135
[1]136// pour neutre
137// on a rien a faire, meme pas renvoyer l identificateur de balise
138// vu qu'il n y a pas de comparaison d'identificateurs avec un balise jumelle .
139 | EmptyElemTag          {}
140 ;
[20]141
[1]142//======================================================
143// STag
144//======================================================
145// regle 40
146// BALISE OUVRANTE
147// on est obligé de faire appel a infcar et supcar
148// pour acceder aux start conditions DANSBALISE et INITIAL
149//======================================================
150STag
151: INFCAR ID Attributeetoile SUPCAR
152{
153  if(my_service->content==NULL){
154#ifdef DEBUG_SERVICE_CONF
155    fprintf(stderr,"NO CONTENT\n");
156#endif
[9]157    addMapToMap(&my_service->content,current_content);
158    freeMap(&current_content);
159    free(current_content);
[1]160    current_content=NULL;
161    my_service->metadata=NULL;
162    wait_maincontent=false;
163  }
[9]164  if(strncasecmp($2,"DataInputs",10)==0){
[1]165    if(wait_mainmetadata==true){
[9]166      addMapToMap(&my_service->metadata,current_content);
167      freeMap(&current_content);
168      free(current_content);
[1]169      current_content=NULL;
[104]170      wait_mainmetadata=false;
[1]171    }
172    if(current_element==NULL){
173#ifdef DEBUG_SERVICE_CONF
[104]174      fprintf(stderr,"(DATAINPUTS - %d) FREE current_element\n",__LINE__);
[1]175#endif
176      freeElements(&current_element);
177      free(current_element);
178#ifdef DEBUG_SERVICE_CONF
[104]179      fprintf(stderr,"(DATAINPUTS - %d) ALLOCATE current_element\n",__LINE__);
[1]180#endif
181      current_element=NULL;
182      current_element=(elements*)malloc(ELEMENTS_SIZE);
183      current_element->name=NULL;
184      current_element->content=NULL;
185      current_element->metadata=NULL;
186      current_element->format=NULL;
187      current_element->defaults=NULL;
188      current_element->supported=NULL;
189      current_element->next=NULL;
190    }
191    wait_inputs=true;
192    current_data=1;
193    previous_data=1;
194  }
195  else
[9]196    if(strncasecmp($2,"DataOutputs",11)==0){
[1]197      if(wait_inputs==true){
198#ifdef DEBUG_SERVICE_CONF
[104]199        fprintf(stderr,"(DATAOUTPUTS %d) DUP INPUTS current_element\n",__LINE__);
[9]200        fprintf(stderr,"CURRENT_ELEMENT\n");
201        dumpElements(current_element);
202        fprintf(stderr,"SERVICE INPUTS\n");
203        dumpElements(my_service->inputs);
204        dumpService(my_service);
[65]205#endif 
[9]206        if(my_service->inputs==NULL){
[1]207          my_service->inputs=dupElements(current_element);
[9]208          my_service->inputs->next=NULL;
209        }
[57]210        else if(current_element!=NULL && current_element->name!=NULL){
[9]211          addToElements(&my_service->inputs,current_element);
[57]212        }
[1]213#ifdef DEBUG_SERVICE_CONF
[9]214        fprintf(stderr,"CURRENT_ELEMENT\n");
[1]215        dumpElements(current_element);
[9]216        fprintf(stderr,"SERVICE INPUTS\n");
[1]217        dumpElements(my_service->inputs);
218        fprintf(stderr,"(DATAOUTPUTS) FREE current_element\n");
219#endif
220        freeElements(&current_element);
221        free(current_element);
222        current_element=NULL;
223        wait_inputs=false;
224      }
225      if(current_element==NULL){
226#ifdef DEBUG_SERVICE_CONF
[104]227        fprintf(stderr,"(DATAOUTPUTS - %d) ALLOCATE current_element (%s)\n",__LINE__,$2);
[1]228#endif
229        current_element=(elements*)malloc(ELEMENTS_SIZE);
230        current_element->name=NULL;
231        current_element->content=NULL;
232        current_element->metadata=NULL;
233        current_element->format=NULL;
234        current_element->defaults=NULL;
235        current_element->supported=NULL;
236        current_element->next=NULL;
237      }
238      wait_outputs=true;
239      current_data=2;
[65]240      previous_data=2;
[1]241    }
242    else
[9]243      if(strncasecmp($2,"MetaData",8)==0){
[73]244        previous_data=current_data;
[1]245        current_data=3;
246        if(current_element!=NULL){
247#ifdef DEBUG_SERVICE_CONF
248          fprintf(stderr,"add current_content to current_element->content\n");
[104]249          fprintf(stderr,"LINE %d",__LINE__);
[1]250#endif
251          addMapToMap(&current_element->content,current_content);
252          freeMap(&current_content);
253          free(current_content);
[104]254          if(previous_data==1 || previous_data==2)
255            wait_metadata=true;
256          else
257            wait_mainmetadata=true;
[1]258        }
259        else{
[104]260          if(previous_data==1 || previous_data==2)
261            wait_metadata=true;
262          else
263            wait_mainmetadata=true;
[1]264        }
265        current_content=NULL;
266      }
267      else
[9]268        if(strncasecmp($2,"ComplexData",11)==0 || strncasecmp($2,"LiteralData",10)==0
[76]269           || strncasecmp($2,"ComplexOutput",13)==0 || strncasecmp($2,"LiteralOutput",12)==0
270           || strncasecmp($2,"BoundingBoxOutput",13)==0 || strncasecmp($2,"BoundingBoxData",12)==0){
[1]271          current_data=4;
272          if(wait_metadata==true){
273            if(current_content!=NULL){
[9]274              addMapToMap(&current_element->metadata,current_content);
[1]275              current_element->next=NULL;
[104]276              if($2!=NULL)
277                current_element->format=strdup($2);
278             
[1]279              current_element->defaults=NULL;
[9]280              current_element->supported=NULL;
281              freeMap(&current_content);
282              free(current_content);
[1]283            }
[9]284          }else{
285            // No MainMetaData
286            addMapToMap(&current_element->content,current_content);
287            freeMap(&current_content);
288            free(current_content);
[1]289            current_element->metadata=NULL;
290            current_element->next=NULL;
[104]291            if($2!=NULL)
[57]292            current_element->format=strdup($2);
[1]293            current_element->defaults=NULL;
[9]294            current_element->supported=NULL;
[1]295          }
296          current_content=NULL;
297          wait_metadata=false;
298        }
299        else
[9]300          if(strncasecmp($2,"Default",7)==0){
[1]301            wait_defaults=true;
302            current_data=5;
303          }
304          else
[9]305            if(strncasecmp($2,"Supported",9)==0){
[1]306              wait_supporteds=true;
307              if(wait_defaults==true){
308                defaultsc++;
309              }
310              current_data=5;
311            }
312#ifdef DEBUG_SERVICE_CONF
313  printf("* Identifiant : %s\n",$2);
314#endif
315}
316 ;
[20]317
[1]318//======================================================
319// Attributeetoile
320//======================================================
321// regle 41
322// une liste qui peut etre vide d'attributs
323// utiliser la récursivité a gauche
324//======================================================
325Attributeetoile
326 : Attributeetoile attribute  {}
327 |                                {/* Epsilon */}
328 ;
[20]329
[1]330//======================================================
331// attribute
332//======================================================
333// regle 41
334// un attribut est compose d'un identifiant
335// d'un "="
336// et d'une définition de chaine de caractere
337// ( "xxx" ou 'xxx' )
338//======================================================
339attribute
340 : ID Eq ATTVALUE               
341{
342#ifdef DEBUG_SERVICE_CONF
343  printf ("attribute : %s\n",$1) ;
344#endif
345}
346 ;
[20]347
[1]348//======================================================
349// EmptyElemTag
350//======================================================
351// regle 44
352// ICI ON DEFINIT NEUTRE
353// on ne renvoie pas de char*
354// parce qu'il n'y a pas de comparaisons a faire
355// avec un identifiant d'une balise jumelle
356//======================================================
357EmptyElemTag
[104]358 : INFCAR ID Attributeetoile SLASH SUPCAR       {}
[1]359 ;
[20]360
[1]361//======================================================
362// ETag
363//======================================================
364// regle 42
365// BALISE FERMANTE
366// les separateurs après ID sont filtrés
367//======================================================
368ETag
369 : INFCAR SLASH ID SUPCAR
370{
371  if(strcmp($3,"DataInputs")==0){
372    current_data=1;
373  }
374  if(strcmp($3,"DataOutputs")==0){
375    current_data=2;
376  }
377  if(strcmp($3,"MetaData")==0){
378    current_data=previous_data;
379  }
380  if(strcmp($3,"ComplexData")==0 || strcmp($3,"LiteralData")==0
381     || strcmp($3,"ComplexOutput")==0 || strcmp($3,"LiteralOutput")==0){
382    current_content=NULL;
383  }
384  if(strcmp($3,"Default")==0){
385    current_data=previous_data;
386    if(current_element->defaults==NULL){
[9]387      current_element->defaults=(iotype*)malloc(IOTYPE_SIZE);
388      current_element->defaults->content=NULL;
[1]389    }
[9]390    addMapToMap(&current_element->defaults->content,current_content);
391    freeMap(&current_content);
392    free(current_content);
[1]393    current_element->defaults->next=NULL;
394    wait_defaults=false;
395    current_content=NULL;
396    current_element->supported=NULL;
[57]397    current_element->next=NULL;
[1]398  }
399  if(strcmp($3,"Supported")==0){
400    current_data=previous_data;
401    if(current_element->supported==NULL){
[57]402      if(current_content!=NULL){
403        current_element->supported=(iotype*)malloc(IOTYPE_SIZE);
404        current_element->supported->content=NULL;
405        addMapToMap(&current_element->supported->content,current_content);
406        freeMap(&current_content);
407        free(current_content);
408        current_element->supported->next=NULL;
409        current_content=NULL;
410      }else{
411        current_element->supported=NULL;
412        current_element->next=NULL;
413      }
[1]414    }
[9]415    else{
[57]416#ifdef DEBUG_SERVICE_CONF
[9]417      fprintf(stderr,"SECOND SUPPORTED FORMAT !!!!\n");
[1]418#endif
[57]419      addMapToIoType(&current_element->supported,current_content);
[9]420      freeMap(&current_content);
421      free(current_content);
422      current_content=NULL;
[57]423#ifdef DEBUG_SERVICE_CONF
424      dumpElements(current_element);
[9]425      fprintf(stderr,"SECOND SUPPORTED FORMAT !!!!\n");
426#endif
[1]427    }
428    current_content=NULL;
429  }
430}
431 ;
[20]432
[1]433//======================================================
434// contentetoile
435//======================================================
436// regle 43
437// ENTRE 2 BALISES
438// entre 2 balises, on peut avoir :
439// --- OUVRANTE CONTENU FERMANTE (recursivement !)
440// --- DU TEXTE quelconque
441// --- COMMENTS
442// --- DES PROCESSES INSTRUCTIONS
443// --- /!\ il peut y avoir une processing instruction invalide ! <?xml
444// --- EPSILON
445// ### et/ou tout ca a la suite en nombre indeterminé
446// ### donc c'est un operateur etoile (*)
447//======================================================
448contentetoile
449: contentetoile element           {}
450 | contentetoile PIERROR                  {srerror("processing instruction <?xml ?> impossible\n");}
451 | contentetoile PI                       {}
452///// on filtre les commentaires | contentetoile comment              {}
453 | contentetoile NEWLINE {/*printf("NEWLINE FOUND !!");*/}
454 | contentetoile pair {}
455 | contentetoile processid {}
456 | contentetoile texteinterbalise         {}
457 | contentetoile CDATA {} 
458 | {/* Epsilon */}
459 ;
[20]460
[1]461//======================================================
462// texteinterbalise
463//======================================================
464// regle 14
465// DU TEXTE quelconque
466// c'est du CHARDATA
467// il y a eut un probleme avec ID,
468// on a mis des starts conditions,
469// maintenant on croise les ID dans les dbalises
470// et des CHARDATA hors des balises
471//======================================================
472texteinterbalise
473 : CHARDATA             {}
474 ;
475//======================================================
476
[104]477pair: PAIR { if(debug) fprintf(stderr,"PAIR FOUND !!\n");if(curr_key!=NULL){free(curr_key);curr_key=NULL;} }
[1]478| EPAIR {
479#ifdef DEBUG_SERVICE_CONF
[104]480  fprintf(stderr,"EPAIR FOUND !! \n");
481  fprintf(stderr,"[%s=>%s]\n",curr_key,$1);
482  fprintf(stderr,"[ZOO: service_conf.y line %d free(%s)]\n",__LINE__,curr_key);
483  dumpMap(current_content);
484  fflush(stderr);
[1]485#endif
[104]486  if($1!=NULL){
487    if(current_content==NULL){
[1]488#ifdef DEBUG_SERVICE_CONF
[104]489      fprintf(stderr,"[ZOO: service_conf.y line %d free(%s)]\n",__LINE__,curr_key);
[1]490#endif
[104]491      current_content=createMap(curr_key,$1);
[1]492#ifdef DEBUG_SERVICE_CONF
[104]493      fprintf(stderr,"[ZOO: service_conf.y line %d free(%s)]\n",__LINE__,curr_key);
[1]494#endif
[104]495      //current_content->next=NULL;
496    }
497    else{
[1]498#ifdef DEBUG_SERVICE_CONF
[104]499      dumpMap(current_content);
500      fprintf(stderr,"addToMap(current_content,%s,%s) !! \n",curr_key,$1);
[1]501#endif
[104]502      addToMap(current_content,curr_key,$1);
[1]503#ifdef DEBUG_SERVICE_CONF
[104]504      fprintf(stderr,"addToMap(current_content,%s,%s) end !! \n",curr_key,$1);
[1]505#endif   
[104]506    }
[1]507  }
508#ifdef DEBUG_SERVICE_CONF
509  fprintf(stderr,"EPAIR FOUND !! \n");
510  fprintf(stderr,"[%s=>%s]\n",curr_key,$1);
[93]511  fprintf(stderr,"[ZOO: service_conf.y line %d free(%s)]\n",__LINE__,curr_key);
[1]512  fflush(stderr);
513#endif
[9]514  if(curr_key!=NULL){
515    free(curr_key);
516    curr_key=NULL;
[1]517  }
[9]518  }
[104]519| SPAIR  { if(curr_key!=NULL) {free(curr_key);curr_key=NULL;} if($1!=NULL) curr_key=strdup($1);if(debug) fprintf(stderr,"SPAIR FOUND !!\n"); }
[1]520 ;
521
522
523processid
524: ANID  {
525  if(data==-1){
526    data=1;
[104]527    if($1!=NULL){
528      char *cen=strdup($1);
529      my_service->name=(char*)malloc((strlen(cen)-1)*sizeof(char*));
530      cen[strlen(cen)-1]=0;
531      cen+=1;
532      sprintf(my_service->name,"%s",cen);
533      cen-=1;
534      free(cen);
535      my_service->content=NULL;
536      my_service->metadata=NULL;
537      my_service->inputs=NULL;
538      my_service->outputs=NULL;
539    }
[1]540  } else {
541    if(current_data==1){
542      if(my_service->content!=NULL && current_element->name!=NULL){
543        if(my_service->inputs==NULL){
544          my_service->inputs=dupElements(current_element);
[9]545          my_service->inputs->next=NULL;
[1]546          tmp_count++;
547        }
548        else{
[9]549          addToElements(&my_service->inputs,current_element);
[1]550        }
551#ifdef DEBUG_SERVICE_CONF
[9]552        fprintf(stderr,"(%s %d)FREE current_element (after adding to allread existing inputs)",__FILE__,__LINE__);
553        dumpElements(current_element);
554        fprintf(stderr,"(%s %d)FREE current_element (after adding to allread existing inputs)",__FILE__,__LINE__);
[1]555        dumpElements(my_service->inputs);
556#endif
[9]557        freeElements(&current_element);
[1]558        free(current_element);
559        current_element=NULL;
560#ifdef DEBUG_SERVICE_CONF
561        fprintf(stderr,"(DATAINPUTS - 489) ALLOCATE current_element\n");
562#endif
563        current_element=(elements*)malloc(ELEMENTS_SIZE);
564        current_element->name=NULL;
565        current_element->content=NULL;
566        current_element->metadata=NULL;
567        current_element->format=NULL;
568        current_element->defaults=NULL;
569        current_element->supported=NULL;
570        current_element->next=NULL;
571      }
572      if(current_element->name==NULL){
573#ifdef DEBUG_SERVICE_CONF
574        fprintf(stderr,"NAME IN %s (current - %s)\n",
575                $1,current_element->name);
576#endif
577        wait_inputs=true;
578#ifdef DEBUG_SERVICE_CONF
579        fprintf(stderr,"(DATAINPUTS - 501) SET NAME OF current_element\n");
580#endif
[104]581        if($1!=NULL){
582          char *cen=strdup($1);
583          current_element->name=(char*)malloc((strlen(cen)-1)*sizeof(char*));
584          cen[strlen(cen)-1]=0;
585          cen+=1;
586          sprintf(current_element->name,"%s",cen);
587          cen-=1;
588          free(cen);
[1]589#ifdef DEBUG_SERVICE_CONF
[104]590          fprintf(stderr,"NAME IN %s (current - %s)\n",$1,current_element->name);
[1]591#endif
[104]592          current_element->content=NULL;
593          current_element->metadata=NULL;
594          current_element->format=NULL;
595          current_element->defaults=NULL;
596          current_element->supported=NULL;
597          current_element->next=NULL;
[1]598#ifdef DEBUG_SERVICE_CONF
[104]599          fprintf(stderr,"NAME IN %s (current - %s)\n",$1,current_element->name);
[1]600#endif
[104]601        }
[1]602      }
603    }
604    else
605      if(current_data==2){
[65]606        wait_outputs=true;
607        if(wait_inputs){
[57]608          if(current_element!=NULL && current_element->name!=NULL){
[65]609            if(my_service->outputs==NULL){
610              my_service->outputs=dupElements(current_element);
611              my_service->outputs->next=NULL;
[1]612            }
613            else{
614#ifdef DEBUG_SERVICE_CONF
615              fprintf(stderr,"LAST NAME IN %s (current - %s)\n",$1,current_element->name);
616#endif
[65]617              addToElements(&my_service->outputs,current_element);
[1]618            }
619#ifdef DEBUG_SERVICE_CONF
620            dumpElements(current_element);
[9]621            fprintf(stderr,"(DATAOUTPUTS) FREE current_element %s %i\n",__FILE__,__LINE__);
[1]622#endif
623            freeElements(&current_element);
[9]624            free(current_element);
[1]625            current_element=NULL;
626#ifdef DEBUG_SERVICE_CONF
[104]627            fprintf(stderr,"(DATAOUTPUTS -%d) ALLOCATE current_element %s \n",__LINE__,__FILE__);
[1]628#endif
629            current_element=(elements*)malloc(ELEMENTS_SIZE);
630            current_element->name=NULL;
631            current_element->content=NULL;
632            current_element->metadata=NULL;
633            current_element->format=NULL;
634            current_element->defaults=NULL;
635            current_element->supported=NULL;
636            current_element->next=NULL;
637          }
638          if(current_element->name==NULL){
639#ifdef DEBUG_SERVICE_CONF
640            fprintf(stderr,"NAME OUT %s\n",$1);
[104]641            fprintf(stderr,"(DATAOUTPUTS - %d) SET NAME OF current_element\n",__LINE__);
[1]642#endif
[104]643            if($1!=NULL){
644              char *cen=strdup($1);
645              current_element->name=(char*)malloc((strlen(cen)-1)*sizeof(char));
646              cen[strlen(cen)-1]=0;
647              cen+=1;
648              sprintf(current_element->name,"%s",cen);
649              cen-=1;
650              free(cen);
651              current_element->content=NULL;
652              current_element->metadata=NULL;
653              current_element->format=NULL;
654              current_element->defaults=NULL;
655              current_element->supported=NULL;
656              current_element->next=NULL;
657            }
[1]658          }
[65]659
[1]660          current_content=NULL;
661        }
662        else
[65]663          if(current_element!=NULL && current_element->name!=NULL){
664            if(my_service->outputs==NULL)
665              my_service->outputs=dupElements(current_element);
666            else
667              addToElements(&my_service->outputs,current_element);
[92]668#ifdef DEBUG_SERVICE_CONF
[65]669            fprintf(stderr,"ADD TO OUTPUTS Elements\n");
670            dupElements(current_element);
[92]671#endif
[65]672            freeElements(&current_element);
673            free(current_element);
674            current_element=NULL;
675          }
676          else{
[1]677#ifdef DEBUG_SERVICE_CONF
678            fprintf(stderr,"NAME OUT %s\n",$1);
679            fprintf(stderr,"(DATAOUTPUTS - 545) SET NAME OF current_element\n");
680#endif
[104]681            if($1!=NULL){
682              char *cen=strdup($1);
683              current_element->name=(char*)malloc((strlen(cen)-1)*sizeof(char*));
684              cen[strlen(cen)-1]=0;
[9]685#ifdef DEBUG
[104]686              fprintf(stderr,"tmp %s\n",cen);
[9]687#endif
[104]688              cen+=1;
689              sprintf(current_element->name,"%s",cen);
690              cen-=1;
691              free(cen);
692              current_element->content=NULL;
693              current_element->metadata=NULL;
694              current_element->format=NULL;
695              current_element->defaults=NULL;
696              current_element->supported=NULL;
697              current_element->next=NULL;
698            }
[1]699          }
[65]700        wait_inputs=false;
[1]701        wait_outputs=true;
[65]702        //wait_outputs=true;
[1]703      }
704  }
705 }
706 ;
707
708%%
709
710// srerror
711//======================================================
712/* fonction qui affiche l erreur si il y en a une */
713//======================================================
[114]714void srerror(const char *s)
[1]715{
716  if(debug)
717    fprintf(stderr,"\nligne %d : %s\n",srlineno,s);
718}
719
720/**
721 * getServiceFromFile :
722 * set service given as second parameter with informations extracted from the
723 * definition file.
724 */
[114]725int getServiceFromFile(const char* file,service** service){
[1]726
727  freeMap(&previous_content);
728  previous_content=NULL;
729  freeMap(&current_content);
730  current_content=NULL;
731  freeMap(&scontent);
732#ifdef DEBUG_SERVICE_CONF
733  fprintf(stderr,"(STARTING)FREE current_element\n");
734#endif
735  freeElements(&current_element);
[60]736  free(current_element);
[1]737  current_element=NULL;
738  my_service=NULL;
739  scontent=NULL;
740
741  wait_maincontent=true;
742  wait_mainmetadata=false;
743  wait_metadata=false;
744  wait_inputs=false;
745  wait_defaults=false;
746  wait_supporteds=false;
747  wait_outputs=false;
748  wait_data=false;
749  data=-1;
750  previous_data=1;
751  current_data=0;
752 
753  my_service=*service;
754
755  srin = fopen(file,"r");
756  if (srin==NULL){
[60]757    fprintf(stderr,"error : file not found\n") ;
[9]758    return -1;
[1]759  }
760
761  int resultatYYParse = srparse() ;
762 
[65]763  if(wait_outputs && current_element!=NULL && current_element->name!=NULL){
[1]764    if(my_service->outputs==NULL){     
765#ifdef DEBUG_SERVICE_CONF
[104]766      fprintf(stderr,"(DATAOUTPUTS - %d) DUP current_element\n",__LINE__);
[1]767#endif
768      my_service->outputs=dupElements(current_element);
[9]769      my_service->outputs->next=NULL;
[1]770    }
771    else{
772#ifdef DEBUG_SERVICE_CONF
[104]773      fprintf(stderr,"(DATAOUTPUTS - %d) COPY current_element\n",__LINE__);
[1]774#endif
[9]775      addToElements(&my_service->outputs,current_element);
[1]776    }
777#ifdef DEBUG_SERVICE_CONF
[104]778    fprintf(stderr,"(DATAOUTPUTS - %d) FREE current_element\n",__LINE__);
[1]779#endif
780    freeElements(&current_element);
[9]781    free(current_element);
782    current_element=NULL;
[57]783#ifdef DEBUG_SERVICE_CONF
[104]784    fprintf(stderr,"(DATAOUTPUTS - %d) FREE current_element\n",__LINE__);
[57]785#endif
[1]786  }
787  if(current_element!=NULL){
788    freeElements(&current_element);
[9]789    free(current_element);
[1]790    current_element=NULL;
791  }
792  if(current_content!=NULL){
793    freeMap(&current_content);
[9]794    free(current_content);
[1]795    current_content=NULL;
796  }
797  fclose(srin);
798#ifdef DEBUG_SERVICE_CONF
799  dumpService(my_service);
800#endif
801  *service=my_service;
802
[9]803  srlex_destroy();
[1]804  return resultatYYParse;
805}
Note: See TracBrowser for help on using the repository browser.

Search

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png