Commit 88a02a16 authored by Ziirish's avatar Ziirish

splitting source code relative to strings utilities and datatables into specific source files

parent 9c532254
......@@ -63,10 +63,6 @@ cid_SOURCES = \
cid-asynchrone.h \
cid-callbacks.c \
cid-callbacks.h \
cid-file-utilities.c \
cid-file-utilities.h \
cid-gui-factory.c \
cid-gui-factory.h \
cid-config.c \
cid-config.h \
cid-console-call.c \
......@@ -74,12 +70,20 @@ cid_SOURCES = \
cid-constantes.h \
cid-cover.c \
cid-cover.h \
cid-datatables.c \
cid-datatables.h \
cid-dbus.c \
cid-dbus.h \
cid-draw.c \
cid-draw.h \
cid-exaile.c \
cid-exaile.h \
cid-file-utilities.c \
cid-file-utilities.h \
cid-gui-callback.c \
cid-gui-callback.h \
cid-gui-factory.c \
cid-gui-factory.h \
cid-md5.c \
cid-md5.h \
cid-menu-factory.c \
......@@ -89,10 +93,10 @@ cid_SOURCES = \
cid-modules.c \
cid-modules.h \
cid-mpd.c \
cid-gui-callback.c \
cid-gui-callback.h \
cid-rhythmbox.c \
cid-rhythmbox.h \
cid-string-utilities.c \
cid-string-utilities.h \
cid-utilities.c \
cid-utilities.h \
cid-X-utilities.c \
......@@ -125,20 +129,22 @@ cidsubinclude_HEADERS = \
cid-applet-canvas.h \
cid-asynchrone.h \
cid-callbacks.h \
cid-gui-factory.h \
cid-config.h \
cid-console-call.h \
cid-constantes.h \
cid-datatables.h \
cid-dbus.h \
cid-draw.h \
cid-exaile.h \
cid-gui-callback.h \
cid-gui-factory.h \
cid-md5.h \
cid-menu-factory.h \
cid-messages.h \
cid-modules.h \
cid-mpd.h \
cid-gui-callback.h \
cid-rhythmbox.h \
cid-string-utilities.h \
cid-struct.h \
cid-utilities.h \
cid-X-utilities.h \
......
This diff is collapsed.
......@@ -15,18 +15,20 @@ G_BEGIN_DECLS
/**
* Fonction permettant de recuperer un boolean dans un fichier de configuration.
* @param pCid Structure de configuration.
* @param pKeyFile Fichier de configuration.
* @param cGroup Groupe auquel appartient la cle recherchee.
* @param cKey Cle recherchee.
* @param bDefault Valeur par defaut.
* @return Le booleen correspondant aux criteres.
*/
gboolean cid_get_boolean_value_full (GKeyFile *pKeyFile, gchar *cGroup, gchar *cKey, gboolean bDefault);
#define CID_CONFIG_GET_BOOLEAN_WITH_DEFAULT(cGroup,cKey,bDefault) cid_get_boolean_value_full (cid->pKeyFile,cGroup,cKey,bDefault)
#define CID_CONFIG_GET_BOOLEAN(cGroup,cKey) cid_get_boolean_value_full (cid->pKeyFile,cGroup,cKey,FALSE)
gboolean cid_get_boolean_value_full (CidMainContainer **pCid, GKeyFile *pKeyFile, gchar *cGroup, gchar *cKey, gboolean bDefault);
#define CID_CONFIG_GET_BOOLEAN_WITH_DEFAULT(cGroup,cKey,bDefault) cid_get_boolean_value_full (pCid,cid->pKeyFile,cGroup,cKey,bDefault)
#define CID_CONFIG_GET_BOOLEAN(cGroup,cKey) cid_get_boolean_value_full (pCid,cid->pKeyFile,cGroup,cKey,FALSE)
/**
* Fonction permettant de recuperer une chaine dans un fichier de configuration.
* @param pCid Structure de configuration.
* @param pKeyFile Fichier de configuration.
* @param cGroup Groupe auquel appartient la cle recherchee.
* @param cKey Cle recherchee.
......@@ -36,15 +38,16 @@ gboolean cid_get_boolean_value_full (GKeyFile *pKeyFile, gchar *cGroup, gchar *c
* @param bDir Si on veut tester l'existance d'un dossier.
* @return La chaine correspondante aux criteres.
*/
gchar *cid_get_string_value_full (GKeyFile *pKeyFile, gchar *cGroup, gchar *cKey, gboolean bDefault, gchar *cDefault, gboolean bFile, gboolean bDir, gboolean bForce);
#define CID_CONFIG_GET_STRING(cGroup,cKey) cid_get_string_value_full (cid->pKeyFile,cGroup,cKey,FALSE,NULL,FALSE,FALSE,FALSE)
#define CID_CONFIG_GET_STRING_WITH_DEFAULT(cGroup,cKey,cDefault) cid_get_string_value_full (cid->pKeyFile,cGroup,cKey,FALSE,cDefault,FALSE,FALSE,FALSE)
#define CID_CONFIG_GET_FILE_PATH(cGroup,cKey,cDefault) cid_get_string_value_full (cid->pKeyFile,cGroup,cKey,TRUE,cDefault,TRUE,FALSE,FALSE)
#define CID_CONFIG_GET_DIR_PATH(cGroup,cKey,cDefault) cid_get_string_value_full (cid->pKeyFile,cGroup,cKey,FALSE,cDefault,FALSE,TRUE,FALSE)
#define CID_CONFIG_GET_DIR_PATH_FORCE(cGroup,cKey,cDefault) cid_get_string_value_full (cid->pKeyFile,cGroup,cKey,FALSE,cDefault,FALSE,TRUE,TRUE)
gchar *cid_get_string_value_full (CidMainContainer **pCid, GKeyFile *pKeyFile, gchar *cGroup, gchar *cKey, gboolean bDefault, gchar *cDefault, gboolean bFile, gboolean bDir, gboolean bForce);
#define CID_CONFIG_GET_STRING(cGroup,cKey) cid_get_string_value_full (pCid,cid->pKeyFile,cGroup,cKey,FALSE,NULL,FALSE,FALSE,FALSE)
#define CID_CONFIG_GET_STRING_WITH_DEFAULT(cGroup,cKey,cDefault) cid_get_string_value_full (pCid,cid->pKeyFile,cGroup,cKey,FALSE,cDefault,FALSE,FALSE,FALSE)
#define CID_CONFIG_GET_FILE_PATH(cGroup,cKey,cDefault) cid_get_string_value_full (pCid,cid->pKeyFile,cGroup,cKey,TRUE,cDefault,TRUE,FALSE,FALSE)
#define CID_CONFIG_GET_DIR_PATH(cGroup,cKey,cDefault) cid_get_string_value_full (pCid,cid->pKeyFile,cGroup,cKey,FALSE,cDefault,FALSE,TRUE,FALSE)
#define CID_CONFIG_GET_DIR_PATH_FORCE(cGroup,cKey,cDefault) cid_get_string_value_full (pCid,cid->pKeyFile,cGroup,cKey,FALSE,cDefault,FALSE,TRUE,TRUE)
/**
* Fonction permettant de recuperer un int dans un fichier de configuration.
* @param pCid Structure de configuration.
* @param pKeyFile Fichier de configuration.
* @param cGroup Groupe auquel appartient la cle recherchee.
* @param cKey Cle recherchee.
......@@ -54,10 +57,10 @@ gchar *cid_get_string_value_full (GKeyFile *pKeyFile, gchar *cGroup, gchar *cKey
* @param iMax Valeur maximale.
* @return L'entier correspondant aux criteres.
*/
gint cid_get_int_value_full (GKeyFile *pKeyFile, gchar *cGroup, gchar *cKey, gboolean bDefault, gint iDefault, gboolean bMax, gint iMax);
#define CID_CONFIG_GET_INTEGER(cGroup,cKey) cid_get_int_value_full (cid->pKeyFile,cGroup,cKey,FALSE,0,FALSE,0)
#define CID_CONFIG_GET_INTEGER_WITH_DEFAULT(cGroup,cKey,iDefault) cid_get_int_value_full (cid->pKeyFile,cGroup,cKey,TRUE,iDefault,FALSE,0)
#define CID_CONFIG_GET_INTEGER_WITH_DEFAULT_AND_MAX(cGroup,cKey,iDefault,iMax) cid_get_int_value_full (cid->pKeyFile,cGroup,cKey,TRUE,iDefault,TRUE,iMax)
gint cid_get_int_value_full (CidMainContainer **pCid, GKeyFile *pKeyFile, gchar *cGroup, gchar *cKey, gboolean bDefault, gint iDefault, gboolean bMax, gint iMax);
#define CID_CONFIG_GET_INTEGER(cGroup,cKey) cid_get_int_value_full (pCid,cid->pKeyFile,cGroup,cKey,FALSE,0,FALSE,0)
#define CID_CONFIG_GET_INTEGER_WITH_DEFAULT(cGroup,cKey,iDefault) cid_get_int_value_full (pCid,cid->pKeyFile,cGroup,cKey,TRUE,iDefault,FALSE,0)
#define CID_CONFIG_GET_INTEGER_WITH_DEFAULT_AND_MAX(cGroup,cKey,iDefault,iMax) cid_get_int_value_full (pCid,cid->pKeyFile,cGroup,cKey,TRUE,iDefault,TRUE,iMax)
/**
* Fonction qui charge la configuration .
......@@ -65,12 +68,6 @@ gint cid_get_int_value_full (GKeyFile *pKeyFile, gchar *cGroup, gchar *cKey, gbo
*/
int cid_read_config (CidMainContainer **pCid, const char *f);
/**
* vérifie que le fichier de configuration existe.
* @param f fichier de configuration à lire.
*/
void cid_check_file (const char *f);
/**
* sauvegarde les données de cid
*/
......@@ -83,12 +80,6 @@ void cid_save_data (CidMainContainer **pCid);
*/
void cid_write_keys_to_file (GKeyFile *pKeyFile, const gchar *cConfFilePath);
/**
* vérifie la version du fichier de configuration.
* @param f path du fichier à vérifier.
*/
gboolean cid_check_conf_file_version (CidMainContainer **pCid, const gchar *f);
/**
* Permet de recharger la configuration lorsqu'on applique des changement via le GUI.
*/
......
This diff is collapsed.
/*
*
* cid-datatables.h
* -------
* Conky Images Display
* --------------------------
*
*/
#ifndef __CID_DATATABLES__
#define __CID_DATATABLES__
#include <gtk/gtk.h>
G_BEGIN_DECLS
typedef struct _CidDataTable CidDataTable;
typedef struct _CidDataContent CidDataContent;
typedef struct _CidDataCase CidDataCase;
typedef void (* CidDataAction) (CidDataCase *pCase, gpointer *pData);
/// Structure représentant un couple regex/replacement
typedef struct _CidSubstitute
{
/// la regex recherchée
gchar *regex;
/// par quoi on remplace
gchar *replacement;
} CidSubstitute;
/// Structure de données représentant un tableau
struct _CidDataTable {
/// taille de la table
size_t length;
/// premier élément de la table
CidDataCase *head;
/// dernier élément de la table
CidDataCase *tail;
};
/// Structure représentant le contenu d'une case
struct _CidDataContent {
/// structure anonyme servant à encapsuler un seul type de donnée dans une case
union {
/// type chaine de caractère
gchar *string;
/// type entier
gint iNumber;
/// type booléen
gboolean booleen;
/// type #CidSubstitute
CidSubstitute *sub;
};
/// type contenu dans la case
GType type;
};
/// Structure représentant une case
struct _CidDataCase {
/// contenu de la case de type #CidDataContent
CidDataContent *content;
/// case suivante
CidDataCase *next;
/// case précédante
CidDataCase *prev;
};
/// Définition d'un nouveau type 'SUBSTITUTE'
#define CID_TYPE_SUBSTITUTE G_TYPE_MAKE_FUNDAMENTAL (49)
/**
* Fonction permettant de creer un tableau dynamique
* @param iDataType le type des donnees qui suivent
* @param ... les données, pouvant etre des chaines, des booleens, des
* entiers, ou des GType. Il faut obligatoirement terminer par un
* G_TYPE_INVALID
* @return pointeur vers notre structure
*/
CidDataTable *cid_create_datatable (GType iDataType, ...);
/**
* Fonction permettant de creer une tableau dynamique d'une taille donnee
* avec une valeur par defaut donnee
* @param iSize taille du tableau
* @param iType type des donnees
* @param value valeur par defaut
* @return notre tableau
*/
CidDataTable *cid_create_sized_datatable_with_default_full (size_t iSize, GType iType, gpointer value);
#define cid_create_sized_datatable_with_default(iSize,iType,value) cid_create_sized_datatable_with_default_full(iSize,iType,(gpointer)value)
#define cid_create_sized_datatable(iSize) cid_create_sized_datatable_with_default(iSize,G_TYPE_INVALID,NULL)
/**
* Fonction permettant de liberer notre liste
* @param pointeur vers notre liste
*/
void cid_free_datatable(CidDataTable **p_list);
/**
* Permet de supprimer le premier element 'data' de la liste 'p_list'
* @param p_list liste de depart
* @param data element a supprimer
* @return nouvelle liste
*/
void cid_datatable_remove(CidDataTable **p_list, CidDataContent *data);
/**
* Permet de supprimer tous les elements 'data' de la liste 'p_list'
* @param p_list liste de depart
* @param data element a supprimer
* @return nouvelle liste
*/
void cid_datatable_remove_all(CidDataTable **p_list, CidDataContent *data);
/**
* Supprime de la liste 'p_list' l'element situe a l'indice 'position'
* @param p_list liste de depart
* @param position indice de l'element a supprimer
* @return nouvelle liste
*/
void cid_datatable_remove_id(CidDataTable **p_list, gint position);
/**
* Permet de connaitre la taille d'une liste
* @param p_list liste dont on souhaite connaitre la taille
* @return taille de la liste
*/
size_t cid_datatable_length(CidDataTable *p_list);
/**
* Permet d'inserer un element a l'indice souhaite
* @param p_list liste dans laquelle on souhaite ajouter l'element
* @param data element a ajouter
* @param position indice ou l'on souhaite ajouter l'element
* @return nouvelle liste
*/
void cid_datatable_insert(CidDataTable **p_list, CidDataContent *data, gint position);
/**
* Permet d'ajouter un element en debut de liste
* @param p_list liste a laquelle on souhaite ajouter un element
* @param data element a ajouter
* @return nouvelle liste
*/
void cid_datatable_prepend(CidDataTable **p_list, CidDataContent *data);
/**
* Permet d'ajouter un element en fin de liste
* @param p_list liste a laquelle on souhaite ajouter un element
* @param data element a ajouter
* @return nouvelle liste
*/
void cid_datatable_append(CidDataTable **p_list, CidDataContent *data);
/**
* Permet de creer un nouvel element pouvant etre insere dans une liste
* @param iType type de l'element
* @param value valeur de l'element
* @return nouvel element
*/
CidDataContent *cid_datacontent_new (GType iType, gpointer value);
/**
* Permet de comparer deux elements
* @param d1 element 1
* @param d2 element 2
* @return TRUE si les elements sont egaux (en terme de valeur), sinon FALSE
*/
gboolean cid_datacontent_equals (CidDataContent *d1, CidDataContent *d2);
/**
* Permet de parcourir tous les elements d'une liste donnee, et d'effectue le traitement voulu
* @param p_list liste que l'on souhaite parcourir
* @param func pointeur vers la fonction que l'on souhaite effectuer sur chaque element de la liste
* @param pData donnees a transmettre a la fonction func
* /!\ pData[0] contiendra toujours l'indice de l'element courant
*/
void cid_datatable_foreach (CidDataTable *p_list, CidDataAction func, gpointer *pData);
/**
* Permet d'afficher la valeur d'un element
* @param pCase element dont on souhaite afficher la valeur
* @param pData donnees provenant eventuellement de cid_datatable_foreach
*/
void cid_datacase_print (CidDataCase *pCase, gpointer *pData);
/**
* Permet de supprimer un element
* @param pCase element a supprimer
* @param pData donnees provenant du foreach
*/
void cid_free_datacase_full (CidDataCase *pCase, gpointer *pData);
/**
* Permet de supprimer un conteneur
* @param pContent contenu a supprimer
* @param pData donnees provenant du foreach
*/
void cid_free_datacontent_full (CidDataContent *pContent, gpointer *pData);
#define cid_free_datacase(val) cid_free_datacase_full(val, NULL)
#define cid_free_datacontent(val) cid_free_datacontent_full(val, NULL)
#define cid_datacontent_new_string(val) cid_datacontent_new(G_TYPE_STRING, (gpointer)val)
#define cid_datacontent_new_int(val) cid_datacontent_new(G_TYPE_INT, (gpointer)val)
#define cid_datacontent_new_boolean(val) cid_datacontent_new(G_TYPE_BOOLEAN, (gpointer)val)
#define cid_datacontent_new_substitute(val) cid_datacontent_new(CID_TYPE_SUBSTITUTE, (gpointer)val)
#define cid_datatable_remove_first(list) cid_datatable_remove_id(list, 1)
#define cid_datatable_remove_last(list) cid_datatable_remove_id(list, cid_datatable_length(list))
/**
* Permet de convertir un tableau de chaînes classic en DataTable.
* @param table tableau de départ.
* @param iSize nombre d'élément à copier (-1 pour tout le tableau).
* @return un DataTable contenant une copie de l'ensemble des élements
* du tableau passé en paramètre.
*/
CidDataTable *cid_char_table_to_datatable (gchar **table, gint iSize);
/**
* Permet de cloner un datatable.
* @param pSource datatable à cloner.
* @return un clone du datatable source.
*/
CidDataTable *cid_clone_datatable (CidDataTable *pSource);
/**
* Crée une nouvelle structure CidSubstitute.
* @param regex La regex du substitute.
* @param replacement Ce par quoi on remplace la regex.
* @return La nouvelle structure CidSubstitute alouée.
*/
CidSubstitute *cid_new_substitute (const gchar *regex, const gchar *replacement);
/**
* Libère une structure CidSubstitute.
* @param pSub La structure à libérer.
*/
void cid_free_substitute (CidSubstitute *pSub);
CidDataTable *cid_datatable_new (void);
#define BEGIN_FOREACH_DT(dt) \
CidDataTable *p_dt=dt; \
CidDataCase *p_temp=p_dt->head; \
while(p_temp!=NULL) \
{
#define END_FOREACH_DT \
p_temp=p_temp->next; \
} \
cid_free_datatable(&p_dt);
#define END_FOREACH_DT_NF \
p_temp=p_temp->next; \
}
G_END_DECLS
#endif
......@@ -188,7 +188,7 @@ cid_create_main_window()
/* On crée la fenêtre */
cid->pWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
cid_check_position ();
cid_check_position (&cid);
/* On place, nomme, et dimenssione la fenetre */
gtk_window_set_title (GTK_WINDOW (cid->pWindow), "cid");
......
......@@ -10,6 +10,8 @@
#include "cid-file-utilities.h"
#include "cid-messages.h"
#include "cid-md5.h"
#include "cid-constantes.h"
#include "cid-config.h"
gboolean
cid_file_copy (const gchar *cSrc, const gchar *cDst)
......@@ -80,3 +82,116 @@ cid_file_remove (const gchar* cFilePath)
}
}
gboolean
cid_file_check_config_version (CidMainContainer **pCid, const gchar *f)
{
gchar *cCommand=NULL;
gchar line_f1[80], line_f2[80];
FILE *f1, *f2;
gchar *cOrigFile = g_strdup_printf("%s/%s",CID_DATA_DIR, CID_CONFIG_FILE);
f1 = fopen ((const char *)cOrigFile,"r");
f2 = fopen ((const char *)f,"r");
g_free (cOrigFile);
if (!fgets(line_f1,80,f1) || !fgets(line_f2,80,f2))
cid_exit (pCid, 3,"couldn't read conf file, try to delete it");
fclose (f1);
fclose (f2);
cid_info ("line_f1 %s\nline_f2 %s",line_f1,line_f2);
if (strcmp(line_f1,line_f2)!=0 || (*pCid)->config->bUnvalidKey)
{
cid_warning ("bad file version, building a new one\n");
cid_file_remove (f);
gchar *cTmpPath = g_strdup_printf("%s/%s",CID_DATA_DIR,CID_CONFIG_FILE);
cid_file_copy(cTmpPath,f);
g_free (cTmpPath);
cid_save_data (pCid);
cid_read_key_file (pCid, f);
return FALSE;
}
return TRUE;
}
gboolean
cid_file_move (const gchar *cSrc, const gchar *cDst)
{
if (cid_file_copy (cSrc, cDst))
cid_file_remove (cSrc);
else
return FALSE;
return TRUE;
}
gboolean
cid_file_check (const gchar *f)
{
gchar *cFileTest;
gboolean ret = TRUE;
if (!g_file_test (f, G_FILE_TEST_EXISTS))
{
gchar *cDirectory = g_path_get_dirname (f);
if (! g_file_test (cDirectory, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_EXECUTABLE))
{
cid_info ("Creating path '%s'", cDirectory);
g_mkdir_with_parents (cDirectory, 7*8*8+7*8+5);
}
g_free (cDirectory);
cFileTest = g_strdup_printf("%s/%s",g_getenv("HOME"),OLD_CONFIG_FILE) ;
if (g_file_test (cFileTest, G_FILE_TEST_EXISTS))
{
gchar *cSrc = g_strdup_printf("%s/%s",g_getenv("HOME"),OLD_CONFIG_FILE);
gchar *cDst = g_strdup_printf("%s/.config/cid/%s",g_getenv("HOME"),CID_CONFIG_FILE);
cid_debug ("Moving file from %s to %s",cSrc,cDst);
ret = cid_file_move (cSrc,cDst);
g_free (cSrc);
g_free (cDst);
g_free (cFileTest);
return ret;
}
g_free (cFileTest);
cFileTest = g_strdup_printf("%s/.config/%s",g_getenv("HOME"),OLD_CONFIG_FILE);
if (g_file_test (cFileTest, G_FILE_TEST_EXISTS))
{
gchar *cSrc = g_strdup_printf("%s/.config/%s",g_getenv("HOME"),OLD_CONFIG_FILE);
gchar *cDst = g_strdup_printf("%s/.config/cid/%s",g_getenv("HOME"),CID_CONFIG_FILE);
cid_debug ("Moving file from %s to %s",cSrc,cDst);
ret = cid_file_move (cSrc,cDst);
g_free (cSrc);
g_free (cDst);
g_free (cFileTest);
return ret;
}
g_free (cFileTest);
cFileTest = g_strdup_printf("%s/.config/%s",g_getenv("HOME"),CID_CONFIG_FILE);
if (g_file_test (cFileTest, G_FILE_TEST_EXISTS))
{
gchar *cSrc = g_strdup_printf("%s/.config/%s",g_getenv("HOME"),CID_CONFIG_FILE);
gchar *cDst = g_strdup_printf("%s/.config/cid/%s",g_getenv("HOME"),CID_CONFIG_FILE);
cid_debug ("Moving file from %s to %s",cSrc,cDst);
ret = cid_file_move (cSrc,cDst);
g_free (cSrc);
g_free (cDst);
g_free (cFileTest);
return ret;
}
g_free (cFileTest);
gchar *cSrc = g_strdup_printf("%s/%s",CID_DATA_DIR,CID_CONFIG_FILE);
cid_debug ("Copying file from %s to %s",cSrc,f);
ret = cid_file_copy (cSrc,f);
g_free (cSrc);
}
return ret;
}
gboolean
cid_file_lookup (const gchar *cFileName)
{
return FALSE;
}
......@@ -11,10 +11,12 @@
#include <gtk/gtk.h>
#include "cid-struct.h"
G_BEGIN_DECLS
/**
* Permet de copier un fichier.
* Permet de copier un fichier en vérifiant les sommes md5.
* @param cSrc Le fichier source.
* @param cDst Le fichier destination.
* @return TRUE si la copie s'est bien passée.
......@@ -27,5 +29,28 @@ gboolean cid_file_copy (const gchar *cSrc, const gchar *cDst);
*/
void cid_file_remove (const gchar* cFilePath);
/**
* Vérifie que le fichier de configuration existe.
* @param f fichier de configuration à lire.
* @return TRUE si il existe.
*/
gboolean cid_file_check (const char *f);
/**
* Vérifie la version du fichier de configuration.
* @param pCid Structure de configuration.
* @param f Path du fichier à vérifier.
* @return TRUE si les versions correspondent.
*/
gboolean cid_file_check_conf_version (CidMainContainer **pCid, const gchar *f);
/**
* Déplace un fichier en vérifiant les sommes md5.
* @param cSrc Le fichier source.
* @param cDst Le fichier déstination.
* @return TRUE si il n'y a pas d'erreurs.
*/
gboolean cid_file_move (const gchar *cSrc, const gchar *cDst);
G_END_DECLS
#endif
/*
*
* cid-string-utilities.c
* -------
* Conky Images Display
* --------------------------
*
*/
#include "cid-string-utilities.h"
#include "cid-struct.h"
gchar *
cid_toupper (gchar *cSrc)
{
register int t;
gchar *cRes = g_malloc (sizeof(gchar)*(strlen(cSrc)+1));
for(t=0; cSrc[t]; t++)
{
cRes[t] = toupper(cSrc[t]);
}
cRes[t] = '\0';
return cRes;
}
static void
cid_datacase_replace (CidDataCase *pCase, gpointer *pData)
{
if (pCase != NULL)
{
gchar **c_tmp = pData[2];
if (GPOINTER_TO_INT(pData[0]) < GPOINTER_TO_INT(pData[1]))
{
gchar *tmp = g_strdup(*c_tmp);
g_free (*c_tmp);
*c_tmp = NULL;
*c_tmp = g_strdup_printf ("%s%s%s",tmp,pCase->content->string,pData[3]);
g_free (tmp);
}
else
{
gchar *tmp = g_strdup(*c_tmp);
g_free (*c_tmp);
*c_tmp = NULL;
*c_tmp = g_strdup_printf ("%s%s",tmp,pCase->content->string);
g_free (tmp);
}
}
}
void
cid_str_replace_all (gchar **string, const gchar *sFrom, const gchar *sTo)
{
g_return_if_fail (*string != NULL && sFrom != NULL && sTo != NULL);
gchar **tmp = g_strsplit(*string,sFrom,0);
CidDataTable *t_temp = cid_datatable_new();
while (*tmp != NULL)
{
cid_datatable_append(&t_temp,cid_datacontent_new_string(*tmp));
g_free (*tmp);
tmp++;
}
size_t size = cid_datatable_length(t_temp);
if (size < 2)
{
cid_free_datatable(&t_temp);
return;
}
int length = (strlen(*string)+((strlen(sTo)-strlen(sFrom))*size))*sizeof(gchar)+1;
g_free (*string);
*string = NULL;
*string = g_malloc0(length);
gpointer *pData = g_new(gpointer,5);
pData[0] = GINT_TO_POINTER(0);
pData[1] = GINT_TO_POINTER(size);
pData[2] = string;
pData[3] = (gchar *)g_strdup(sTo);
cid_datatable_foreach(t_temp,(CidDataAction)cid_datacase_replace,pData);
cid_free_datatable(&t_temp);
g_free (pData[3]);
g_free (pData);
}
void
cid_str_replace_all_seq (gchar **string, gchar *seqFrom, gchar *seqTo)
{
// if (strlen(seqFrom) != strlen(seqTo))
// return;
/*
while (*seqFrom != '\0' && *seqTo != '\0')
{
gchar *from = g_malloc0(2*sizeof(gchar)), *to = g_malloc0(2*sizeof(gchar));
g_sprintf(from,"%c",*seqFrom);
g_sprintf(to,"%c",*seqTo);
g_print("from: %s, to: %s\n",from,to);
cid_str_replace_all (string,from,to);
g_free(from), from = NULL;
g_free(to), to = NULL;
seqFrom++;
seqTo++;
}
*/
for(;*seqFrom != '\0';seqFrom++)
{
fprintf (stdout,"%c\n",*seqFrom);
}
}
void
cid_parse_nl (gchar **input)
{
gchar *in = *input;
gint length = strlen (in);
gint ind = 0, cpt = 0;
gchar *output = g_malloc (sizeof(gchar)*length+1);
while (ind<length)
{
if (in[ind] == '\\' && ind < length-1 && in[ind+1] == 'n')
{
output[cpt] = '\n';
ind++;
}
else
{
output[cpt] = in[ind];
}
ind++,cpt++;
}
output[cpt] = '\0';
g_free (in);
in = NULL;