/*******************************************\
| * 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);
}
}
}