diff --git a/maca_morpho/src/maca_morpho_feat_fct.c b/maca_morpho/src/maca_morpho_feat_fct.c
new file mode 100644
index 0000000000000000000000000000000000000000..056f9570473884a11c72151a2e8091350574ca5f
--- /dev/null
+++ b/maca_morpho/src/maca_morpho_feat_fct.c
@@ -0,0 +1,87 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "feat_lib.h"
+
+/*patterns feature*/
+int p1(void *input)
+{
+	if(input == NULL || (int)strlen((char *)input) - 1 < 0)
+		return -1;
+	return ((char *)input)[(int)strlen((char *)input) - 1];
+}
+int p2(void *input)
+{
+	if(input == NULL || (int)strlen((char *)input) - 2 < 0)
+		return -1;
+	return ((char *)input)[(int)strlen((char *)input) - 2];
+}
+int p3(void *input)
+{
+	if(input == NULL || (int)strlen((char *)input) - 3 < 0)
+		return -1;	
+	return ((char *)input)[(int)strlen((char *)input) - 3];
+}
+int p4(void *input)
+{
+	if(input == NULL || (int)strlen((char *)input) - 4 < 0)
+		return -1;
+	return ((char *)input)[(int)strlen((char *)input) - 4];
+}
+int p5(void *input)
+{
+	if(input == NULL || (int)strlen((char *)input) - 5 < 0)
+		return -1;	
+	return ((char *)input)[(int)strlen((char *)input) - 5];
+}
+int p6(void *input)
+{
+	if(input == NULL || (int)strlen((char *)input) - 6 < 0)
+		return -1;
+	return ((char *)input)[(int)strlen((char *)input) - 6];
+}
+int p7(void *input)
+{
+	if(input == NULL || (int)strlen((char *)input) - 7 < 0)
+		return -1;
+	return ((char *)input)[(int)strlen((char *)input) - 7];
+}
+int p8(void *input)
+{
+	if(input == NULL || (int)strlen((char *)input) - 8 < 0)
+		return -1;
+	return ((char *)input)[(int)strlen((char *)input) - 8];
+}
+int p9(void *input)
+{
+	if(input == NULL || (int)strlen((char *)input) - 9 < 0)
+		return -1; 
+	return ((char *)input)[(int)strlen((char *)input) - 9];
+}
+int p10(void *input)
+{
+	if(input == NULL || (int)strlen((char *)input) - 10 < 0)
+		return -1;	
+	return ((char *)input)[(int)strlen((char *)input) - 10];
+}
+
+feat_lib *feat_lib_build(void) {
+
+  feat_lib *fl = feat_lib_new();
+  
+  feat_lib_add(fl, 1,  (char *)"p1", p1);
+  feat_lib_add(fl, 1,  (char *)"p2", p2);
+  feat_lib_add(fl, 1,  (char *)"p3", p3);
+  feat_lib_add(fl, 1,  (char *)"p4", p4);
+  feat_lib_add(fl, 1,  (char *)"p5", p5);
+  feat_lib_add(fl, 1,  (char *)"p6", p6);
+  feat_lib_add(fl, 1,  (char *)"p7", p7);
+  feat_lib_add(fl, 1,  (char *)"p8", p8);
+  feat_lib_add(fl, 1,  (char *)"p9", p9);
+  feat_lib_add(fl, 1,  (char *)"p10", p10);
+  
+  return fl;
+}
+
+
+