/*******************************************\ | * Ce programme est sous liscence GNU GPL * | | * This software is under GNU/GPL licence * | | * * * * * * * * * * * * * * * * * * * * * * | | * http://www.gnu.org/copyleft/gpl.html * | \*******************************************/ /* Cr er par Laurent Coustet <ed@zehome.com> * http://ed.zehome.com/ * Made by Laurent Coustet <ed@zehome.com> */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/file.h> #include "templates.h" #include "debug.h" #ifndef TPL_SYB #define TPL_SYB "ř" #endif varval_st *tete_liste = NULL; void parse_template (varval_st *_z_struct_varval, FILE *__out, char *__tpl_file) { FILE *_tpl_opened_file; char *read_buffer; char *temp_buffer,*begin; char *var; int ok=0; int size=0; varval_st *zlist_move; if (( _tpl_opened_file = fopen (__tpl_file,"r"))==NULL) { printf("impossible d'ouvrir %s\n",__tpl_file); ERROR ("Impossible to open template file %s in read only.\n",__tpl_file); // exit (1); return; } else { fseek (_tpl_opened_file, 0, SEEK_END); size = ftell (_tpl_opened_file); fseek (_tpl_opened_file, 0, SEEK_SET); read_buffer = (char *) malloc (sizeof (char) * size+1); temp_buffer = (char *) malloc (sizeof (char) * size+1); begin = (char *) malloc (sizeof (char) * size+1); var = (char *) malloc (sizeof (char) * size+1); if (size > 100000) { ERROR ("Error: try to open a too big template: %s, size: %d\n",_tpl_opened_file,size); exit (1); } fread (read_buffer, sizeof (char), size, _tpl_opened_file); if ( strstr (read_buffer,TPL_SYB) != NULL ) { strcpy (begin, read_buffer); strtok (begin, TPL_SYB); while (( temp_buffer = strstr (read_buffer,TPL_SYB)) != NULL ) { //VERBOSE ("begining of the string: %s\n",begin); fprintf (__out,begin); strncpy (var,temp_buffer,strlen(read_buffer)); if (strtok (var, TPL_SYB)==NULL) break; //VERBOSE ("var: %s\n",var); for (zlist_move=_z_struct_varval;zlist_move!=NULL;zlist_move=zlist_move->next) { if ((strcmp ((var+strlen(TPL_SYB)),zlist_move->_tpl_var))==0) { fprintf (__out,"%s",zlist_move->_tpl_val); ok=1; break; } else { ok=0; // VERBOSE ("NotAVal: %s\n",var); } } if (ok == 0) { fprintf (__out,"[UnknowVar]"); } if ( ((strlen(temp_buffer)) - (strlen(TPL_SYB)*2) - (strlen(var))) < 0) { fprintf (__out,temp_buffer); break; } read_buffer += strlen(begin) + strlen(TPL_SYB) + strlen(var); strcpy (begin, read_buffer); strtok (begin, TPL_SYB); } if (strlen(read_buffer) > 0) { fprintf (__out,read_buffer); } } else { fprintf (__out,read_buffer); } fclose (_tpl_opened_file); } return; } /* retourne un pointeur vers une le prochain élément de la liste. */ varval_st *add_tpl_value (varval_st *_z_struct_varval, char *__tpl_var, char *__tpl_val) { varval_st *new_node; varval_st *new_node_moving; if ((new_node = malloc(sizeof(varval_st)))==NULL) { ERROR ("Malloc structure FAILED EXITING.\n"); exit (1); } /* on ajoute les éléments dans la structure...*/ new_node->_tpl_var = __tpl_var; new_node->_tpl_val = __tpl_val; /* on est le dernier maillon. */ new_node->next = NULL; if (_z_struct_varval == NULL) { /* la liste etait vide, on devient le premier element */ return (new_node); } else { for (new_node_moving=_z_struct_varval;new_node_moving->next!=NULL;new_node_moving=new_node_moving->next); /* le dernier element pointe maitenant sur le nouvel element */ new_node_moving->next = new_node; return (_z_struct_varval); } } varval_st *del_tpl_var (varval_st *list, char *_var) { varval_st *zlist_move; varval_st *zlist_move_prev; varval_st *zlist_tmp; zlist_move_prev = NULL; for(zlist_move=list;(zlist_move!=NULL) && (zlist_move->_tpl_var!=_var); zlist_move_prev=zlist_move,zlist_move=zlist_move->next); if (zlist_move == NULL) { return (list); } else { if (zlist_move_prev == NULL) { zlist_tmp = zlist_move->next; free (zlist_move); return (zlist_tmp); } else { zlist_move_prev->next = zlist_move->next; free (zlist_move); return (list); } } }