source: trunk/zoo-project/zoo-kernel/service_conf.y @ 453

Last change on this file since 453 was 453, checked in by djay, 7 years ago

Add the optional Ruby Language Support to the ZOO-Kernel with an API similar to the Python ZOO-API. Small rewrite of Python support. Fix issue #86 and #87. Add usid in [lenv] section, this value is used to generate an unique identifier based on time and the process identifier. This usid is now used to name the stored result or the mapfile generated. Remove *some* warning messages displayed at compilation time.

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