--- src/engine/formulas.c.old	2007-10-05 21:35:03.000000000 +0200
+++ src/engine/formulas.c	2007-11-03 11:46:07.000000000 +0100
@@ -1049,6 +1049,61 @@
 #define RPIP
 #include "docalc.c"
 
+#define BERYL_VARIABLES register number_t yre, yim, re1tmp, re2tmp, im1tmp, modz=0;
+#define BERYL_TEST (less_than_4(modz)||(yre*yre+yim*yim)<9*(modz))
+#define BERYL_FORMULA \
+        re1tmp=zre; \
+        re2tmp=yre; \
+        im1tmp=zim; \
+        zre=(re1tmp+re2tmp)/2; \
+        zim=(im1tmp+yim)/2; \
+        yre=(re1tmp*re2tmp-im1tmp*yim   ); \
+        yim=(re1tmp*yim   +re2tmp*im1tmp); \
+        modz=zre*zre+zim*zim;
+
+#define VARIABLES BERYL_VARIABLES;
+#define BTEST BERYL_TEST
+/* Im(U0) and Im(V0) constant */
+#define INIT yim=pim, yre=zim, zim=pre;
+#define FORMULA BERYL_FORMULA
+#define CALC beryl_calc
+#define PERI beryl_peri
+#define RANGE 2
+#include "docalc.c"
+
+#define VARIABLES BERYL_VARIABLES;
+#define BTEST BERYL_TEST
+/* U0 constant  */
+#define INIT yre=pre; yim=pim;
+#define FORMULA BERYL_FORMULA
+#define CALC emerald_calc
+#define PERI emerald_peri
+#include "docalc.c"
+
+#define VARIABLES BERYL_VARIABLES;
+#define BTEST BERYL_TEST
+/* Re(U0) and Re(V0) constant */
+#define INIT yim=zre, yre=pim, zre=pre;
+#define FORMULA BERYL_FORMULA
+#define CALC heliodor_calc
+#define PERI heliodor_peri
+#define RANGE 2
+#include "docalc.c"
+
+#define VARIABLES BERYL_VARIABLES;
+#define BTEST BERYL_TEST
+/* Re(u0) and Im(v0) constant */
+#define INIT yre=zre, zre=pre, yim=pim;
+#define FORMULA BERYL_FORMULA
+#define CALC aquamarine_calc
+#define PERI aquamarine_peri
+#define RANGE 2
+#include "docalc.c"
+
+#undef BERYL_VARIABLES
+#undef BERYL_TEST
+#undef BERYL_FORMULA
+
 /* plan9 compiler has problem with rest of formulas files. Hope that will be fixed later */
 
 #define VARIABLES
@@ -2207,7 +2262,171 @@
     {INT_MAX, INT_MAX, 0, NULL},
     },
     MANDEL_BTRACE,
-   }   
+   }   ,
+  { /* formula added by Samuel Bizien */
+    FORMULAMAGIC,
+#ifndef SLOWFUNCPTR
+   beryl_calc,
+   beryl_peri,
+   NULL,
+   NULL,
+#endif
+   NULL,
+   {"Beryl", "Beryl"},
+   "beryl",
+   {0, 0, 12, 12},
+   0, 0, 0.0, 0.0,
+   {
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    },
+   {
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    },
+    MANDEL_BTRACE,
+   }   ,
+  { /* formula added by Samuel Bizien */
+    FORMULAMAGIC,
+#ifndef SLOWFUNCPTR
+   emerald_calc,
+   emerald_peri,
+   NULL,
+   NULL,
+#endif
+   NULL,
+   {"Emeraude", "Emeraude"},
+   "emerald",
+   {-0.75, 0, 5, 5},
+   0, 0, 1.0, 0.0,
+   {
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    },
+   {
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    },
+    MANDEL_BTRACE,
+   }   ,
+  {   /* formula added by Samuel Bizien */
+    FORMULAMAGIC,
+#ifndef SLOWFUNCPTR
+   heliodor_calc,
+   heliodor_peri,
+    NULL,
+    NULL,
+#endif
+   NULL,
+   {"Heliodor", "Heliodor"},
+   "heliodor",
+   {0, 0, 4, 4},
+   0, 0, 1.0, 1.0,
+   {
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    },
+   {
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    },
+    MANDEL_BTRACE,
+   }   , 
+  {/* formula added by Samuel Bizien */
+    FORMULAMAGIC,
+#ifndef SLOWFUNCPTR
+   aquamarine_calc,
+   aquamarine_peri,
+   NULL,
+   NULL,
+#endif
+   NULL,
+   {"Aquamarine", "Aquamarine"},
+   "aquamarine",
+   {0, 0, 12, 12},
+   0, 0, 0.0, 0.0,
+   {
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    },
+   {
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    {INT_MAX, INT_MAX, 0, NULL},
+    },
+    MANDEL_BTRACE,
+   } 
 };
 
 #ifdef SLOWFUNCPTR
@@ -2287,10 +2506,22 @@
 	  break; 
 	case 22:
 	  return (koch_calc (x1, y1, x2, y2));
-	  break; 	  	  	  	  	
+	  break; 
 	case 23:
 	  return (hornflake_calc (x1, y1, x2, y2));
-	  break; 	  	  	  	  	
+	  break; 
+	case 24:
+	  return (beryl_peri (x1, y1, x2, y2));
+	  break; 
+	case 25:
+	  return (emerald_peri (x1, y1, x2, y2));
+	  break; 
+	case 26:
+	  return (heliodor_peri (x1, y1, x2, y2));
+	  break; 
+	case 27:
+	  return (aquamarine_peri (x1, y1, x2, y2));
+	  break; 
 	}
     else
       switch (cfractalc.currentformula - formulas)
@@ -2363,10 +2594,22 @@
 	  break; 
 	case 22:
 	  return (koch_calc (x1, y1, x2, y2));
-	  break; 	  	    	  	  
+	  break; 
 	case 23:
 	  return (hornflake_calc (x1, y1, x2, y2));
-	  break; 	  	    	  	  
+	  break; 
+	case 24:
+	  return (beryl_peri (x1, y1, x2, y2));
+	  break; 
+	case 25:
+	  return (emerald_peri (x1, y1, x2, y2));
+	  break; 
+	case 26:
+	  return (heliodor_peri (x1, y1, x2, y2));
+	  break; 
+	case 27:
+	  return (aquamarine_peri (x1, y1, x2, y2));
+	  break; 
 	}
   else if (cfractalc.coloringmode == 9)
     switch (cfractalc.currentformula - formulas)
@@ -2442,7 +2685,19 @@
 	break; 	
       case 23:
 	return (hornflake_calc (x1, y1, x2, y2));
-	break; 	
+	break;  
+      case 24:
+	return (beryl_calc (x1, y1, x2, y2));
+	break;  
+      case 25:
+	return (emerald_calc (x1, y1, x2, y2));
+	break;  
+      case 26:
+	return (heliodor_calc (x1, y1, x2, y2));
+	break;  
+      case 27:
+	return (aquamarine_calc (x1, y1, x2, y2));
+	break;  
       }
   else
     switch (cfractalc.currentformula - formulas)
@@ -2516,9 +2771,21 @@
       case 22:
 	return (koch_calc (x1, y1, x2, y2));
 	break; 		
-      case 22:
+      case 23:
 	return (hornflake_calc (x1, y1, x2, y2));
-	break; 		
+	break; 
+      case 24:
+	return (beryl_calc (x1, y1, x2, y2));
+	break;
+      case 25:
+	return (emerald_calc (x1, y1, x2, y2));
+	break; 
+      case 26:
+	return (heliodor_calc (x1, y1, x2, y2));
+	break; 
+      case 27:
+	return (aquamarine_calc (x1, y1, x2, y2));
+	break; 
       }
   return 0;
 }

