Index: utils_g.cbp
===================================================================
--- utils_g.cbp	(revision 2406)
+++ utils_g.cbp	(nonexistent)
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<CodeBlocks_project_file>
-	<FileVersion major="1" minor="6" />
-	<Project>
-		<Option title="utils_g" />
-		<Option pch_mode="2" />
-		<Option compiler="gcc" />
-		<Build>
-			<Target title="Debug">
-				<Option output="bin\Debug\libutils_g" prefix_auto="1" extension_auto="1" />
-				<Option object_output="obj\Debug\" />
-				<Option type="3" />
-				<Option compiler="gcc" />
-				<Option createDefFile="1" />
-				<Option createStaticLib="1" />
-				<Compiler>
-					<Add option="-g" />
-				</Compiler>
-			</Target>
-			<Target title="Release">
-				<Option output="bin\libutils_g" prefix_auto="1" extension_auto="1" />
-				<Option object_output="obj\" />
-				<Option type="3" />
-				<Option compiler="gcc" />
-				<Option createDefFile="1" />
-				<Option createStaticLib="1" />
-				<Compiler>
-					<Add option="-O2" />
-				</Compiler>
-				<Linker>
-					<Add option="-s" />
-				</Linker>
-			</Target>
-		</Build>
-		<Compiler>
-			<Add option="-Wall" />
-		</Compiler>
-		<Unit filename="main.c">
-			<Option compilerVar="CC" />
-		</Unit>
-		<Extensions>
-			<code_completion />
-			<debugger />
-		</Extensions>
-	</Project>
-</CodeBlocks_project_file>
Index: include/macros.h
===================================================================
--- include/macros.h	(revision 2406)
+++ include/macros.h	(revision 2407)
@@ -68,9 +68,9 @@
 /* #define CHAR2WCHAR(c)        (c == NIL ? NULL : (PtrObjWChar) MMstart (mm,((PtrObjVoid)MMstart(mm,c))->Buffer>>1))*/
 
 /* $Iri : convert any string to utf-8 (should be used with gtk ...) Don't forget to free after used !*/
-#define SCOLUTF8(string) g_locale_to_utf8 (string, -1, NULL, NULL, NULL)
+#define SCOLUTF8(string, len) g_locale_to_utf8 (string, len, NULL, NULL, NULL)
 /* $Iri : convert any string from utf-8 Don't forget to free after used !*/
-#define UTF8SCOL(string) g_locale_from_utf8 (string, -1, NULL, NULL, NULL)
+#define UTF8SCOL(string, len) g_locale_from_utf8 (string, len, NULL, NULL, NULL)
 /* $Iri : length of the int (234 -> 3)*/
 #define SIZEINT(x)  floor (log10 (x)) + 1
 /* $ Iri : float support */
Index: include/scol_glib_pregex.h
===================================================================
--- include/scol_glib_pregex.h	(revision 2406)
+++ include/scol_glib_pregex.h	(revision 2407)
@@ -21,11 +21,86 @@
 For others informations, please contact us from http://www.scolring.org/
 */
 
-#ifndef __SCOL_GTK_MISC_H__
-#define __SCOL_GTK_MISC_H__
+#ifndef __SCOL_GLIB_PREGEX_H__
+#define __SCOL_GLIB_PREGEX_H__
 
-#include "main.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <libgen.h>
+#include <glib.h>
 
-#define GLIB_PCRE_PKG_NB         1
+#if ((defined __WIN32__) || (defined WIN32))
+#include <windows.h>
+#include "scol_plugin_win.h"
+#else
+#include "scol_plugin_lin.h"
+#endif
+
+#include "macros.h"
 
-#endif  /* __SCOL_GTK_MISC_H__ */
+
+
+#define bullshit int (__cdecl *)(struct Mmachine *)
+
+#define GLIB_PCRE_PKG_NB         30
+#define DEFAULT_STRING   "Untitle"
+
+
+#define PCRE_MATCH_STANDARD     1
+#define PCRE_MATCH_DFA          2
+
+#define PCRE_MATCH_ANCHORED       1<<4
+#define PCRE_MATCH_NOTBOL         1<<7
+#define PCRE_MATCH_NOTEOL         1<<8
+#define PCRE_MATCH_NOTEMPTY       1<<10
+#define PCRE_MATCH_PARTIAL        1<<15
+#define PCRE_MATCH_NEWLINE_CR     1<<20
+#define PCRE_MATCH_NEWLINE_LF     1<<21
+#define PCRE_MATCH_NEWLINE_CRLF   PCRE_MATCH_NEWLINE_CR | PCRE_MATCH_NEWLINE_LF
+#define PCRE_MATCH_NEWLINE_ANY    1<<22
+
+#define PCRE_REGEX_CASELESS          1 << 0
+#define PCRE_REGEX_MULTILINE         1 << 1
+#define PCRE_REGEX_DOTALL            1 << 2
+#define PCRE_REGEX_EXTENDED          1 << 3
+#define PCRE_REGEX_ANCHORED          1 << 4
+#define PCRE_REGEX_DOLLAR_ENDONLY    1 << 5
+#define PCRE_REGEX_UNGREEDY          1 << 9
+#define PCRE_REGEX_RAW               1 << 11
+#define PCRE_REGEX_NO_AUTO_CAPTURE   1 << 12
+#define PCRE_REGEX_OPTIMIZE          1 << 13
+#define PCRE_REGEX_DUPNAMES          1 << 19
+#define PCRE_REGEX_NEWLINE_CR        1 << 20
+#define PCRE_REGEX_NEWLINE_LF        1 << 21
+#define PCRE_REGEX_NEWLINE_CRLF      PCRE_REGEX_NEWLINE_CR | PCRE_REGEX_NEWLINE_LF
+
+
+
+
+
+
+int PcreRelease ();
+int SCOLinitPcreClass (mmachine m);
+int SCOL_pcreEasyMatch (mmachine m);
+int SCOL_pcreEasySplit (mmachine m);
+int SCOL_pcreEasyReplace (mmachine m);
+int SCOL_pcreNormalMatch (mmachine m);
+int SCOL_pcreNormalSplit (mmachine m);
+int SCOL_pcreNormalReplace (mmachine m);
+
+GRegex * scol_pcre_regex_new (const gchar * pattern, GRegexCompileFlags compile, GRegexMatchFlags match);
+void scol_pcre_match_standard (mmachine m, const gchar *pattern, const gchar *string, GRegexCompileFlags compile, GRegexMatchFlags match, gint start);
+void scol_pcre_match_DFA (mmachine m, const gchar *pattern, const gchar *string, GRegexCompileFlags compile, GRegexMatchFlags match, gint start);
+
+
+#if ((defined _WIN32) || (defined __WIN32__))
+__declspec (dllexport) int SCOLloadPCRE (mmachine m, cbmachine w);
+__declspec (dllexport) int SCOLfreePCRE ();
+#else
+int SCOLloadPCRE (mmachine m);
+int SCOLfreePCRE ();
+#endif
+
+#endif  /* __SCOL_GLIB_PREGEX_H__ */
Index: pcre.layout
===================================================================
--- pcre.layout	(nonexistent)
+++ pcre.layout	(revision 2407)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<CodeBlocks_layout_file>
+	<ActiveTarget name="Release" />
+	<File name="include\scol_glib_pregex.h" open="1" top="0" tabpos="1">
+		<Cursor position="1425" topLine="24" />
+	</File>
+	<File name="src\scol_glib_pregex.c" open="1" top="1" tabpos="2">
+		<Cursor position="2719" topLine="96" />
+	</File>
+</CodeBlocks_layout_file>
Index: src/scol_glib_pregex.c
===================================================================
--- src/scol_glib_pregex.c	(revision 2406)
+++ src/scol_glib_pregex.c	(revision 2407)
@@ -21,5 +21,567 @@
 For others informations, please contact us from http://www.scolring.org/
 */
 
+#ifdef __cplusplus
+#error This source file is not C++ but rather C. Please use a C-compiler
+#endif
 
+
+
 #include "../include/scol_glib_pregex.h"
+
+/* http://library.gnome.org/devel/glib/unstable/glib-Perl-compatible-regular-expressions.html */
+
+#if ((defined _WIN32) || (defined __WIN32__))
+cbmachine ww;
+#endif
+mmachine  mm;
+
+/*
+    Easy interface
+
+    - SCOL_pcreEasyMatch
+    - SCOL_pcreEasySplit
+    - SCOL_pcreEasyReplace
+*/
+
+
+/**
+ * \brief Scans for a match in string for pattern
+ * \param : S : pattern : the regular expression
+ * \param : S : string : the string to scan for matches
+ * \return : I : 1 if matched, else 0 (or nil if string or pattern is nil)
+ *
+ * The compile options for the regular expression are at 0
+ * The match options ara at 0 too
+ */
+int SCOL_pcreEasyMatch (mmachine m)
+{
+    int mpattern, mstring;
+    gchar *pattern, *string;
+
+    MMechostr (MSKDEBUG, "SCOL_pcreEasyMatch : entering\n");
+
+    mstring = MTOP (MMpull (m));
+    mpattern = MTOP (MMpull (m));
+
+    if((mstring == NIL) || (mpattern == NIL))
+    {
+        MMechostr (0, "SCOL_pcreEasyMatch error : an argument is nil");
+        MMpush (m, NIL);
+        return 0;
+    }
+    pattern = SCOLUTF8 (MMstartstr (m, mpattern), MMsizestr (m, mpattern));
+    string = SCOLUTF8 (MMstartstr (m, mstring), MMsizestr (m, mstring));
+
+    MMpush (m, ITOM (g_regex_match_simple (pattern, string, 0, 0)));
+    g_free (pattern);
+    g_free (string);
+    return 0;
+}
+
+/**
+ * \brief Breaks the string on the pattern, and returns an list of the tokens.
+ * \param : S : pattern : the regular expression
+ * \param : S : string : the string to scan for matches
+ * \return : [S r1] : a list of substrings or nil
+ *
+ * The compile options for the regular expression are at 0
+ * The match options ara at 0 too
+ */
+int SCOL_pcreEasySplit (mmachine m)
+{
+    int mpattern, mstring;
+    int i = 0;
+    gchar *pattern, *string;
+    gchar **result;
+
+    MMechostr (MSKDEBUG, "SCOL_pcreEsaySplit : entering\n");
+
+    mstring = MTOP (MMpull (m));
+    mpattern = MTOP (MMpull (m));
+
+    if (mstring == NIL)
+    {
+        MMechostr (0, "SCOL_pcreEsaySplit error : an argument is nil");
+        MMpush (m, NIL);
+        return 0;
+    }
+    if (mpattern == NIL)
+    {
+        Mpushstrbloc (m, MMstartstr (m, mstring));
+        MMpush (m, NIL);
+        MMpush (m, ITOM (2));
+        MBdeftab (m);
+        return 0;
+    }
+
+    pattern = SCOLUTF8 (MMstartstr (m, mpattern), MMsizestr (m, mpattern));
+    string = SCOLUTF8 (MMstartstr (m, mstring), MMsizestr (m, mstring));
+
+    result = g_regex_split_simple (pattern, string, 0, 0);
+    while (result[i] != NULL)
+    {
+        Mpushstrbloc (m, UTF8SCOL (result[i], strlen (result[i])));
+        i++;
+    }
+    g_strfreev (result);
+    g_free (pattern);
+    g_free (string);
+    MMpush (m, NIL);
+    for (; i > 0; i--)
+    {
+        MMpush (m, ITOM (2));
+        MBdeftab (m);
+    }
+    return 0;
+}
+
+/**
+ * \brief Replaces all occurrences of the pattern in string with a replacement text
+ * \param S : pattern
+ * \param S : string
+ * \param S : replacement text
+ * \return S : new string containing the replacements
+ */
+int SCOL_pcreEasyReplace (mmachine m)
+{
+    int mpattern, mstring, mreplace;
+    GRegex *regex;
+    gchar *result;
+    gchar *pattern, *string, *replace;
+
+    MMechostr (MSKDEBUG, "SCOL_pcreEasyReplace : entering\n");
+
+    mreplace = MTOP (MMpull (m));
+    mstring = MTOP (MMpull (m));
+    mpattern = MTOP (MMpull (m));
+
+    if(mstring == NIL)
+    {
+        MMechostr (0, "SCOL_pcreEasyReplace error : an argument is nil");
+        MMpush (m, NIL);
+        return 0;
+    }
+    if ((mreplace == NIL) || (mpattern == NIL))
+    {
+        Mpushstrbloc (m, MMstartstr (m, mstring));
+        return 0;
+    }
+
+    pattern = SCOLUTF8 (MMstartstr (m, mpattern), MMsizestr (m, mpattern));
+    string = SCOLUTF8 (MMstartstr (m, mstring), MMsizestr (m, mstring));
+    replace = SCOLUTF8 (MMstartstr (m, mreplace), MMsizestr (m, mreplace));
+
+    regex = scol_pcre_regex_new (pattern, 0, 0);
+    result = g_regex_replace (regex, string, strlen (string), 0, replace, 0, NULL);
+    result = UTF8SCOL (result, strlen (result));
+    Mpushstrbloc (m, result);
+    g_free (result);
+    g_regex_unref (regex);
+    g_free (pattern);
+    g_free (string);
+    g_free (replace);
+    return 0;
+}
+
+
+/*
+    Normal interface
+
+    - SCOL_pcreNormalMatch
+    - SCOL_pcreNormalSplit
+*/
+
+int SCOL_pcreNormalMatch (mmachine m)
+{
+    int mpattern, mstring, mcompile, mstart, mmatch, malgo;
+    gchar * pattern, *string;
+
+    MMechostr (MSKDEBUG, "SCOL_pcreNormalMatch : entering\n");
+
+    malgo = MTOI (MMpull (m));
+    mmatch = MMpull (m);
+    mstart = MTOI (MMpull (m));
+    mcompile = MMpull (m);
+    mstring = MTOP (MMpull (m));
+    mpattern = MTOP (MMpull (m));
+
+    if ((mstring == NIL) || (mpattern == NIL))
+    {
+        MMechostr (0, "SCOL_pcreNormalMatch error : string or pattern is nil\n");
+        MMpush (m, NIL);
+        return 0;
+    }
+
+    if (mstart< 0)
+        mstart = 0;
+
+    if (malgo != PCRE_MATCH_DFA)
+        malgo = PCRE_MATCH_STANDARD;
+
+    if (mcompile == NIL)
+        mcompile = 0;
+
+    if (mmatch == NIL)
+        mmatch = 0;
+
+    pattern = SCOLUTF8 (MMstartstr (m, mpattern), MMsizestr (m, mpattern));
+    string = SCOLUTF8 (MMstartstr (m, mstring), MMsizestr (m, mstring));
+
+    if (malgo == PCRE_MATCH_STANDARD)
+        scol_pcre_match_standard (m, pattern, string, mcompile, mmatch, mstart);
+    else
+        scol_pcre_match_DFA (m, pattern, string, mcompile, mmatch, mstart);
+
+    g_free (pattern);
+    g_free (string);
+    return 0;
+}
+
+int SCOL_pcreNormalSplit (mmachine m)
+{
+    int mpattern, mstring, mcompile, mstart, mmax, mmatch;
+    int i = 0;
+    gchar *pattern, *string;
+    GRegex *regex;
+    GError *error = NULL;
+    gchar **result;
+
+    MMechostr (MSKDEBUG, "SCOL_pcreNormalSplit : entering\n");
+
+    mmax = MTOI (MMpull (m));
+    mmatch = MMpull (m);
+    mstart = MTOI (MMpull (m));
+    mcompile = MMpull (m);
+    mstring = MTOP (MMpull (m));
+    mpattern = MTOP (MMpull (m));
+
+    if ((mstring == NIL) || (mpattern == NIL))
+    {
+        MMechostr (0, "SCOL_pcreNormalSplit error : string or pattern is nil\n");
+        MMpush (m, NIL);
+        return 0;
+    }
+
+    if (mstart < 0)
+        mstart = 0;
+    if (mcompile == NIL)
+        mcompile = 0;
+    if (mmatch == NIL)
+        mmatch = 0;
+
+    pattern = SCOLUTF8 (MMstartstr (m, mpattern), MMsizestr (m, mpattern));
+    string = SCOLUTF8 (MMstartstr (m, mstring), MMsizestr (m, mstring));
+
+    regex = scol_pcre_regex_new (pattern, mcompile, mmatch);
+    result = g_regex_split_full (regex, string, strlen (string), mstart, mmatch, mmax, &error);
+    g_regex_unref (regex);
+    if (error != NULL)
+    {
+        MMechostr (0, "SCOL_pcreNormalSplit error : %s\n", error->message);
+        MMpush (m, NIL);
+        g_error_free (error);
+    }
+
+    while (result[i] != NULL)
+    {
+        Mpushstrbloc (m, UTF8SCOL (result[i], strlen (result[i])));
+        i++;
+    }
+    g_strfreev (result);
+    g_free (pattern);
+    g_free (string);
+    MMpush (m, NIL);
+    for (; i > 0; i--)
+    {
+        MMpush (m, ITOM (2));
+        MBdeftab (m);
+    }
+    return 0;
+}
+
+int SCOL_pcreNormalReplace (mmachine m)
+{
+    return 0;
+}
+
+
+
+
+/*
+    Internals functions
+    - scol_pcre_regex_new
+        GRegex * scol_pcre_regex_new (const gchar *, GRegexCompileFlags, GRegexMatchFlags);
+        Create a new regular expression
+
+    - scol_pcre_match_standard
+        void scol_pcre_match_full (mmachine, const gchar *, const gchar *, GRegexCompileFlags  GRegexMatchFlags, gint)
+
+    - scol_pcre_match_DFA
+        void scol_pcre_match_DFA (mmachine m, const gchar *pattern, const gchar *string, GRegexCompileFlags compile, GRegexMatchFlags match, gint start)
+
+*/
+
+GRegex * scol_pcre_regex_new (const gchar * pattern, GRegexCompileFlags compile, GRegexMatchFlags match)
+{
+    return g_regex_new (pattern, compile, match, NULL);
+}
+
+
+void scol_pcre_match_standard (mmachine m, const gchar *pattern, const gchar *string, GRegexCompileFlags compile, GRegexMatchFlags match, gint start)
+{
+    GRegex *regex;
+    GMatchInfo *match_info;
+    GError *error = NULL;
+    gchar *word;
+    gboolean r;
+    int i, n = 0;
+    gint pos1 = -1, pos2 = -1;
+
+    regex = scol_pcre_regex_new (pattern, compile, match);
+
+    r = g_regex_match_full (regex, string, strlen (string), start, match, &match_info, &error);
+    while (g_match_info_matches (match_info))
+    {
+        word = g_match_info_fetch (match_info, 0);
+        g_match_info_fetch_pos (match_info, 0, &pos1, &pos2);
+        Mpushstrbloc (m, word);
+        MMpush (m, ITOM (pos1));
+        MMpush (m, ITOM (pos2));
+        MMpush (m, ITOM (3));
+        MBdeftab (m);
+        g_free (word);
+        pos1 = -1; pos2 = -1;
+        g_match_info_next (match_info, &error);
+        n++;
+    }
+
+    g_match_info_free (match_info);
+    g_regex_unref (regex);
+    if (error != NULL)
+    {
+        MMechostr (0, "scol_pcre_match_standard error : %s\n", error->message);
+        g_error_free (error);
+    }
+    MMpush (m, NIL);
+    for (i = 0; i < n; i++)
+    {
+        MMpush (m, ITOM (2));
+        MBdeftab (m);
+    }
+    return;
+}
+
+void scol_pcre_match_DFA (mmachine m, const gchar *pattern, const gchar *string, GRegexCompileFlags compile, GRegexMatchFlags match, gint start)
+{
+    GRegex *regex;
+    GMatchInfo *match_info;
+    GError *error = NULL;
+    gchar *word;
+    gboolean r;
+    int i, n = 0;
+    gint pos1 = -1, pos2 = -1;
+
+    regex = scol_pcre_regex_new (pattern, compile, match);
+
+    r = g_regex_match_all_full (regex, string, strlen (string), start, match, &match_info, &error);
+    while (g_match_info_matches (match_info))
+    {
+        word = g_match_info_fetch (match_info, 0);
+        g_match_info_fetch_pos (match_info, 0, &pos1, &pos2);
+        Mpushstrbloc (m, word);
+        MMpush (m, ITOM (pos1));
+        MMpush (m, ITOM (pos2));
+        MMpush (m, ITOM (3));
+        MBdeftab (m);
+        g_free (word);
+        pos1 = -1; pos2 = -1;
+        g_match_info_next (match_info, &error);
+        n++;
+    }
+
+    g_match_info_free (match_info);
+    g_regex_unref (regex);
+    if (error != NULL)
+    {
+        MMechostr (0, "scol_pcre_match_DFA error : %s\n", error->message);
+        g_error_free (error);
+    }
+    MMpush (m, NIL);
+    for (i = 0; i < n; i++)
+    {
+        MMpush (m, ITOM (2));
+        MBdeftab (m);
+    }
+    return;
+}
+
+
+
+
+/* API definitions : */
+
+char* glib_pcre_name[GLIB_PCRE_PKG_NB]=
+{
+    "PCRE_MATCH_STANDARD", "PCRE_MATCH_DFA",
+
+    "PCRE_MATCH_ANCHORED", "PCRE_MATCH_NOTBOL", "PCRE_MATCH_NOTEOL",
+    "PCRE_MATCH_NOTEMPTY", "PCRE_MATCH_PARTIAL", "PCRE_MATCH_NEWLINE_CR",
+    "PCRE_MATCH_NEWLINE_LF", "PCRE_MATCH_NEWLINE_CRLF", "PCRE_MATCH_NEWLINE_ANY",
+
+    "PCRE_REGEX_CASELESS", "PCRE_REGEX_MULTILINE", "PCRE_REGEX_DOTALL",
+    "PCRE_REGEX_EXTENDED", "PCRE_REGEX_ANCHORED", "PCRE_REGEX_DOLLAR_ENDONLY",
+    "PCRE_REGEX_UNGREEDY", "PCRE_REGEX_RAW", "PCRE_REGEX_NO_AUTO_CAPTURE",
+    "PCRE_REGEX_OPTIMIZE", "PCRE_REGEX_DUPNAMES", "PCRE_REGEX_NEWLINE_CR",
+    "PCRE_REGEX_NEWLINE_LF", "PCRE_REGEX_NEWLINE_CRLF",
+
+    "_pcreEasyMatch",
+    "_pcreEasySplit",
+    "_pcreEasyReplace",
+
+    "_pcreNormalMatch",
+    "_pcreNormalSplit"
+};
+
+int (*glib_pcre_fun[GLIB_PCRE_PKG_NB])(mmachine m)=
+{
+    (bullshit) (1*2), (bullshit) (2*2),
+
+    (bullshit) (1<<4), (bullshit) (1<<7), (bullshit) (1<<8),
+    (bullshit) (1<<10), (bullshit) (1<<15), (bullshit) (1<<20),
+    (bullshit) (1<<21), (bullshit) (1<<20|1<<21), (bullshit) (1<<22),
+
+    (bullshit) (1<<0), (bullshit) (1<<1), (bullshit) (1<<2),
+    (bullshit) (1<<3), (bullshit) (1<<4), (bullshit) (1<<5),
+    (bullshit) (1<<9), (bullshit) (1<<11), (bullshit) (1<<12),
+    (bullshit) (1<<13), (bullshit) (1<<19), (bullshit) (1<<20),
+    (bullshit) (1<<21), (bullshit) (1<<20|1<<21),
+
+    SCOL_pcreEasyMatch,
+    SCOL_pcreEasySplit,
+    SCOL_pcreEasyReplace,
+
+    SCOL_pcreNormalMatch,
+    SCOL_pcreNormalSplit
+};
+
+int glib_pcre_narg[GLIB_PCRE_PKG_NB]=
+{
+    TYPVAR, TYPVAR,
+
+    TYPVAR, TYPVAR, TYPVAR,
+    TYPVAR, TYPVAR, TYPVAR,
+    TYPVAR, TYPVAR, TYPVAR,
+
+    TYPVAR, TYPVAR, TYPVAR,
+    TYPVAR, TYPVAR, TYPVAR,
+    TYPVAR, TYPVAR, TYPVAR,
+    TYPVAR, TYPVAR, TYPVAR,
+    TYPVAR, TYPVAR,
+
+    2,
+    2,
+    3,
+
+    6,
+    6
+};
+
+char* glib_pcre_type[GLIB_PCRE_PKG_NB]=
+{
+    "I", "I",
+
+    "I", "I", "I",
+    "I", "I", "I",
+    "I", "I", "I",
+
+    "I", "I", "I",
+    "I", "I", "I",
+    "I", "I", "I",
+    "I", "I", "I",
+    "I", "I",
+
+    "fun [S S] I",
+    "fun [S S] [S r1]",
+    "fun [S S S] S",
+
+    "fun [S S I I I I] [[S I I] r1]",
+    "fun [S S I I I I] [S r1]"
+};
+
+/**
+ * \brief Load the Scol api
+ */
+int SCOLinitPcreClass (mmachine m)
+{
+    int k;
+
+    MMechostr (0, "SCOLinitPcreClass : entering\n");
+
+    k = PKhardpak (m, "PCREengine", GLIB_PCRE_PKG_NB, glib_pcre_name, glib_pcre_fun, glib_pcre_narg, glib_pcre_type);
+    return k;
+}
+
+
+/**
+ * \brief Load and free the regular expression library
+ * Plateforms supported : MS Windows and GNU / Linux
+ */
+
+int PcreRelease ()
+{
+    MMechostr (0, "\nPCRE library released !\n");
+    return 0;
+}
+
+#if ((defined _WIN32) || (defined __WIN32__))
+
+__declspec (dllexport) int SCOLloadPCRE (mmachine m, cbmachine w)
+{
+    int k = 0;
+    ww = w;
+    mm = m;
+
+    MMechostr (MSKDEBUG, "\nPCRE library loading .... !\n");
+    SCOLinitplugin (w);
+    if ((k = SCOLinitPcreClass (m))) return k;
+    MMechostr(MSKDEBUG, "\nPCRE library loaded !\n");
+    return k;
+}
+
+__declspec (dllexport) int SCOLfreePCRE ()
+{
+    PcreRelease ();
+    return 0;
+}
+
+
+
+
+
+/* Version GNU / Linux */
+#elif ((defined linux) || (defined __linux))
+
+int SCOLloadPCRE (mmachine m)
+{
+    int k = 0;
+    mm = m;
+
+    MMechostr (MSKDEBUG, "\nPCRE library loading !\n");
+    if ((k = SCOLinitPcreClass (m))) return k;
+    MMechostr (MSKDEBUG, "\nPCRE library loaded !\n");
+
+    return k;
+}
+
+int SCOLfreePCRE ()
+{
+    MMechostr(MSKDEBUG, "\nPCRE library release !\n");
+
+    PcreRelease ();
+    return 0;
+}
+
+#else
+#error no platform supported
+#endif
Index: pcre.depend
===================================================================
--- pcre.depend	(nonexistent)
+++ pcre.depend	(revision 2407)
@@ -0,0 +1,334 @@
+# depslib dependency file v1.0
+1298416589 source:x:\utils_g\src\scol_glib_misc.c
+	"../include/scol_glib_misc.h"
+
+1298416599 x:\utils_g\include\scol_glib_misc.h
+	<glib.h>
+
+1293381426 c:\mingw\include\glib-2.0\glib.h
+	<glib/galloca.h>
+	<glib/garray.h>
+	<glib/gasyncqueue.h>
+	<glib/gatomic.h>
+	<glib/gbacktrace.h>
+	<glib/gbase64.h>
+	<glib/gbitlock.h>
+	<glib/gbookmarkfile.h>
+	<glib/gcache.h>
+	<glib/gchecksum.h>
+	<glib/gcompletion.h>
+	<glib/gconvert.h>
+	<glib/gdataset.h>
+	<glib/gdate.h>
+	<glib/gdatetime.h>
+	<glib/gdir.h>
+	<glib/gerror.h>
+	<glib/gfileutils.h>
+	<glib/ghash.h>
+	<glib/ghook.h>
+	<glib/ghostutils.h>
+	<glib/giochannel.h>
+	<glib/gkeyfile.h>
+	<glib/glist.h>
+	<glib/gmacros.h>
+	<glib/gmain.h>
+	<glib/gmappedfile.h>
+	<glib/gmarkup.h>
+	<glib/gmem.h>
+	<glib/gmessages.h>
+	<glib/gnode.h>
+	<glib/goption.h>
+	<glib/gpattern.h>
+	<glib/gpoll.h>
+	<glib/gprimes.h>
+	<glib/gqsort.h>
+	<glib/gquark.h>
+	<glib/gqueue.h>
+	<glib/grand.h>
+	<glib/grel.h>
+	<glib/gregex.h>
+	<glib/gscanner.h>
+	<glib/gsequence.h>
+	<glib/gshell.h>
+	<glib/gslice.h>
+	<glib/gslist.h>
+	<glib/gspawn.h>
+	<glib/gstrfuncs.h>
+	<glib/gstring.h>
+	<glib/gtestutils.h>
+	<glib/gthread.h>
+	<glib/gthreadpool.h>
+	<glib/gtimer.h>
+	<glib/gtimezone.h>
+	<glib/gtree.h>
+	<glib/gtypes.h>
+	<glib/gunicode.h>
+	<glib/gurifuncs.h>
+	<glib/gutils.h>
+	<glib/gvarianttype.h>
+	<glib/gvariant.h>
+	<glib/gwin32.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\galloca.h
+	<glib/gtypes.h>
+	<alloca.h>
+	<malloc.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gtypes.h
+	<glibconfig.h>
+	<glib/gmacros.h>
+
+1293381426 c:\mingw\lib\glib-2.0\include\glibconfig.h
+	<glib/gmacros.h>
+	<limits.h>
+	<float.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gmacros.h
+	<stddef.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\garray.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gasyncqueue.h
+	<glib/gthread.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gthread.h
+	<glib/gerror.h>
+	<glib/gutils.h>
+	<glib/gatomic.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gerror.h
+	<stdarg.h>
+	<glib/gquark.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gquark.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gutils.h
+	<glib/gtypes.h>
+	<stdarg.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gatomic.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gbacktrace.h
+	<glib/gtypes.h>
+	<signal.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gbase64.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gbitlock.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gbookmarkfile.h
+	<glib/gerror.h>
+	<time.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gcache.h
+	<glib/glist.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\glist.h
+	<glib/gmem.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gmem.h
+	<glib/gslice.h>
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gslice.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gchecksum.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gcompletion.h
+	<glib/glist.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gconvert.h
+	<glib/gerror.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gdataset.h
+	<glib/gquark.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gdate.h
+	<time.h>
+	<glib/gtypes.h>
+	<glib/gquark.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gdatetime.h
+	<glib/gtimezone.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gtimezone.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gdir.h
+	<glib/gerror.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gfileutils.h
+	<glib/gerror.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\ghash.h
+	<glib/gtypes.h>
+	<glib/glist.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\ghook.h
+	<glib/gmem.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\ghostutils.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\giochannel.h
+	<glib/gconvert.h>
+	<glib/gmain.h>
+	<glib/gstring.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gmain.h
+	<glib/gpoll.h>
+	<glib/gslist.h>
+	<glib/gthread.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gpoll.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gslist.h
+	<glib/gmem.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gstring.h
+	<glib/gtypes.h>
+	<glib/gunicode.h>
+	<glib/gutils.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gunicode.h
+	<glib/gerror.h>
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gkeyfile.h
+	<glib/gerror.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gmappedfile.h
+	<glib/gerror.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gmarkup.h
+	<stdarg.h>
+	<glib/gerror.h>
+	<glib/gslist.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gmessages.h
+	<stdarg.h>
+	<glib/gtypes.h>
+	<glib/gmacros.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gnode.h
+	<glib/gmem.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\goption.h
+	<glib/gerror.h>
+	<glib/gquark.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gpattern.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gprimes.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gqsort.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gqueue.h
+	<glib/glist.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\grand.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\grel.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gregex.h
+	<glib/gerror.h>
+	<glib/gstring.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gscanner.h
+	<glib/gdataset.h>
+	<glib/ghash.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gsequence.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gshell.h
+	<glib/gerror.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gspawn.h
+	<glib/gerror.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gstrfuncs.h
+	<stdarg.h>
+	<glib/gmacros.h>
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gtestutils.h
+	<glib/gmessages.h>
+	<glib/gstring.h>
+	<glib/gerror.h>
+	<glib/gslist.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gthreadpool.h
+	<glib/gthread.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gtimer.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gtree.h
+	<glib/gnode.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gurifuncs.h
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gvarianttype.h
+	<glib/gmessages.h>
+	<glib/gtypes.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gvariant.h
+	<glib/gvarianttype.h>
+	<glib/gstring.h>
+
+1293381427 c:\mingw\include\glib-2.0\glib\gwin32.h
+	<glib/gtypes.h>
+
+1298498356 source:x:\utils_g\src\scol_glib_pregex.c
+	"../include/scol_glib_pregex.h"
+
+1298498380 x:\utils_g\include\scol_glib_pregex.h
+	<stdio.h>
+	<stdlib.h>
+	<string.h>
+	<math.h>
+	<libgen.h>
+	<glib.h>
+	<windows.h>
+	"scol_plugin_win.h"
+	"scol_plugin_lin.h"
+	"macros.h"
+
+1298417439 x:\utils_g\include\main.h
+	<stdio.h>
+	<stdlib.h>
+	<string.h>
+	<math.h>
+	<libgen.h>
+	<glib.h>
+	<windows.h>
+	"scol_plugin_win.h"
+	"scol_plugin_lin.h"
+	"macros.h"
+
+1297894138 x:\utils_g\include\scol_plugin_win.h
+	<windows.h>
+	<stdio.h>
+	<stdlib.h>
+
+1296481042 x:\utils_g\include\scol_plugin_lin.h
+	<stdio.h>
+	<stdlib.h>
+
+1298486475 x:\utils_g\include\macros.h
+
Index: bin/pcre.dll
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: bin/pcre.dll
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bin/libpcre.dll.def
===================================================================
--- bin/libpcre.dll.def	(nonexistent)
+++ bin/libpcre.dll.def	(revision 2407)
@@ -0,0 +1,3 @@
+EXPORTS
+    SCOLfreePCRE @1
+    SCOLloadPCRE @2
Index: obj/src/scol_glib_pregex.o
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: pcre.cbp
===================================================================
--- pcre.cbp	(nonexistent)
+++ pcre.cbp	(revision 2407)
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<CodeBlocks_project_file>
+	<FileVersion major="1" minor="6" />
+	<Project>
+		<Option title="pcre" />
+		<Option pch_mode="2" />
+		<Option compiler="gcc" />
+		<Build>
+			<Target title="Debug">
+				<Option output="bin\Debug\pcre" prefix_auto="1" extension_auto="1" />
+				<Option object_output="obj\Debug\" />
+				<Option type="3" />
+				<Option compiler="gcc" />
+				<Option createDefFile="1" />
+				<Option createStaticLib="1" />
+				<Compiler>
+					<Add option="-O1" />
+					<Add option="-Wshadow" />
+					<Add option="-Wredundant-decls" />
+					<Add option="-Wcast-align" />
+					<Add option="-Wundef" />
+					<Add option="-Wfloat-equal" />
+					<Add option="-Winline" />
+					<Add option="-Wunreachable-code" />
+					<Add option="-Wswitch-enum" />
+					<Add option="-Wswitch-default" />
+					<Add option="-pedantic" />
+					<Add option="-pg" />
+					<Add option="-g" />
+					<Add directory="$(#gtk.include)\glib-2.0" />
+					<Add directory="$(#gtk.lib)\glib-2.0\include" />
+				</Compiler>
+				<Linker>
+					<Add option="-pg -lgmon" />
+					<Add library="glib-2.0" />
+				</Linker>
+			</Target>
+			<Target title="Release">
+				<Option output="bin\pcre" prefix_auto="1" extension_auto="1" />
+				<Option object_output="obj\" />
+				<Option type="3" />
+				<Option compiler="gcc" />
+				<Option createDefFile="1" />
+				<Option createStaticLib="1" />
+				<Compiler>
+					<Add option="-O1" />
+					<Add option="-Wshadow" />
+					<Add option="-Wredundant-decls" />
+					<Add option="-Wcast-align" />
+					<Add option="-Wundef" />
+					<Add option="-Wfloat-equal" />
+					<Add option="-Winline" />
+					<Add option="-Wunreachable-code" />
+					<Add option="-Wswitch-enum" />
+					<Add option="-Wswitch-default" />
+					<Add option="-pedantic" />
+					<Add option="-Wfatal-errors" />
+					<Add option="-Wextra" />
+					<Add option="-Wall" />
+					<Add directory="$(#gtk.include)\glib-2.0" />
+					<Add directory="$(#gtk.lib)\glib-2.0\include" />
+				</Compiler>
+				<Linker>
+					<Add option="-s" />
+					<Add library="glib-2.0" />
+				</Linker>
+			</Target>
+		</Build>
+		<Compiler>
+			<Add option="-O1" />
+			<Add option="-Wshadow" />
+			<Add option="-Winit-self" />
+			<Add option="-Wredundant-decls" />
+			<Add option="-Wcast-align" />
+			<Add option="-Wundef" />
+			<Add option="-Wfloat-equal" />
+			<Add option="-Winline" />
+			<Add option="-Wunreachable-code" />
+			<Add option="-Wmissing-declarations" />
+			<Add option="-Wswitch-enum" />
+			<Add option="-Wswitch-default" />
+			<Add option="-pedantic" />
+			<Add option="-Wextra" />
+			<Add option="-Wall" />
+		</Compiler>
+		<Unit filename="include\macros.h" />
+		<Unit filename="include\scol_glib_pregex.h" />
+		<Unit filename="include\scol_plugin_lin.h" />
+		<Unit filename="include\scol_plugin_win.h" />
+		<Unit filename="src\scol_glib_pregex.c">
+			<Option compilerVar="CC" />
+		</Unit>
+		<Extensions>
+			<code_completion />
+			<debugger />
+		</Extensions>
+	</Project>
+</CodeBlocks_project_file>
