summaryrefslogtreecommitdiff
path: root/include/default.inc
diff options
context:
space:
mode:
Diffstat (limited to 'include/default.inc')
-rw-r--r--include/default.inc231
1 files changed, 231 insertions, 0 deletions
diff --git a/include/default.inc b/include/default.inc
new file mode 100644
index 0000000..b82ff14
--- /dev/null
+++ b/include/default.inc
@@ -0,0 +1,231 @@
+/* Float arithmetic
+ *
+ * (c) Copyright 1999, Artran, Inc.
+ * Written by Greg Garner (gmg@artran.com)
+ * Modified in March 2001 to include user defined
+ * operators for the floating point functions.
+ * (c) Copyright 2004, Carsten Haitzler
+ * Modified March 2004 by Carsten Haitzler <raster@rasterman.com> to conform
+ * to E coding style
+ * Became default include for embryo...
+ * Added string functions
+ * Added rand functions
+ * Added time functions
+ *
+ * This file is provided as is (no warranties).
+ */
+#if defined DEFAULT_INC
+#endinput
+#endif
+#define DEFAULT_INC
+
+#pragma rational Float
+
+#define PI 3.1415926535897932384626433832795
+
+/* Different methods of rounding */
+enum Float_Round_Method
+{
+ ROUND, FLOOR, CEIL, TOZERO
+};
+/* different angle addressing modes (default is radians) */
+enum Float_Angle_Mode
+{
+ RADIAN, DEGREES, GRADES
+};
+
+/* varags - get numebr of args to a function */
+native numargs();
+/* varags - get arg no "arg" */
+native getarg(arg, index=0);
+native getsarg(arg, buf[], buflen);
+native Float:getfarg(arg, index=0);
+/* varags - set arg no "arg" */
+native setarg(arg, index=0, value);
+native setfarg(arg, index=0, Float:value);
+
+/* Convert a string into a floating point value */
+native Float:atof(const string[]);
+/* Return the fractional part of a float */
+native Float:fract(Float:value);
+/* Round a float into a integer value */
+native round(Float:value, Float_Round_Method:method=ROUND);
+/* Return the square root of value, same as float_power(value, 0.5) */
+native Float:sqrt(Float:value);
+/* Return the value raised to the power of the exponent */
+native Float:pow(Float:value, Float:exponent);
+/* Return the logarithm */
+native Float:log(Float:value, Float:base=10.0);
+/* Return the sine, cosine or tangent. The input angle may be in radian*/
+/* degrees or grades. */
+native Float:sin(Float:value, Float_Angle_Mode:mode=RADIAN);
+native Float:cos(Float:value, Float_Angle_Mode:mode=RADIAN);
+native Float:tan(Float:value, Float_Angle_Mode:mode=RADIAN);
+/* Return the absolute value */
+native Float:abs(Float:value);
+/* return integer from string */
+native atoi(str[]);
+/* return 0 if string matches glob, non-zero otherwise */
+native fnmatch(glob[], str[]);
+/* same as strcmp() */
+native strcmp(str1[], str2[]);
+/* same as strncmp */
+native strncmp(str1[], str2[], n);
+/* same as strcpy */
+native strcpy(dst[], src[]);
+/* same as strncpy except it nul terminates */
+native strncpy(dst[], src[], n);
+/* same as strlen */
+native strlen(str[]);
+/* same as strcat */
+native strcat(dst[], src[]);
+/* same as strncat except it nul terminates */
+native strncat(dst[], src[], n);
+/* prepends src string onto start of dst string */
+native strprep(dst[], src[]);
+/* prepends at most n chars from src string onto dst string */
+native strnprep(dst[], src[], n);
+/* cuts chars from char n to (not including) n2, and puts them in str */
+native strcut(dst[], str[], n, n2);
+/* same as snprintf, except only supports %%, %c, %i, %d, %f, %x, %X, %s, \n and \t */
+native snprintf(dst[], dstn, fmt[], ...);
+/* same as strstr */
+native strstr(str[], ndl[]);
+/* same as strchr, except ch must be a 1 charater long string, and returns string index */
+native strchr(str[], ch[]);
+/* same as strrchr, except ch must be a 1 charater long string and returns string index */
+native strrchr(str[], ch[]);
+/* return random number 0 - 65535 */
+native rand();
+/* return random number 0.0 - 1.0 */
+native Float:randf();
+/* return seconds since midnight as a float */
+native Float:seconds();
+/* return the current date, year, time etc. in the variables provided */
+native date(&year, &month, &day, &yearday, &weekday, &hr, &min, &Float:sec);
+
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+
+/**************************************************/
+/* Hidden calls - all are overloaded on operators */
+/**************************************************/
+
+/* Convert an integer into a floating point value */
+native Float:float(value);
+/* Multiple two floats together */
+native Float:float_mul(Float:oper1, Float:oper2);
+/* Divide the dividend float by the divisor float */
+native Float:float_div(Float:dividend, Float:divisor);
+/* Add two floats together */
+native Float:float_add(Float:oper1, Float:oper2);
+/* Subtract oper2 float from oper1 float */
+native Float:float_sub(Float:oper1, Float:oper2);
+/* Compare two integers. If the two elements are equal, return 0. */
+/* If the first argument is greater than the second argument, return 1, */
+/* If the first argument is less than the second argument, return -1. */
+native float_cmp(Float:oper1, Float:oper2);
+/* user defined operators */
+native Float:operator*(Float:oper1, Float:oper2) = float_mul;
+native Float:operator/(Float:oper1, Float:oper2) = float_div;
+native Float:operator+(Float:oper1, Float:oper2) = float_add;
+native Float:operator-(Float:oper1, Float:oper2) = float_sub;
+native Float:operator=(oper) = float;
+stock Float:operator++(Float:oper)
+ return oper+1.0;
+stock Float:operator--(Float:oper)
+ return oper-1.0;
+stock Float:operator-(Float:oper)
+ return oper^Float:0x80000000; /* IEEE values are sign/magnitude */
+stock Float:operator*(Float:oper1, oper2)
+ return float_mul(oper1, float(oper2)); /* "*" is commutative */
+stock Float:operator/(Float:oper1, oper2)
+ return float_div(oper1, float(oper2));
+stock Float:operator/(oper1, Float:oper2)
+ return float_div(float(oper1), oper2);
+stock Float:operator+(Float:oper1, oper2)
+ return float_add(oper1, float(oper2)); /* "+" is commutative */
+stock Float:operator-(Float:oper1, oper2)
+ return float_sub(oper1, float(oper2));
+stock Float:operator-(oper1, Float:oper2)
+ return float_sub(float(oper1), oper2);
+stock bool:operator==(Float:oper1, Float:oper2)
+ return float_cmp(oper1, oper2) == 0;
+stock bool:operator==(Float:oper1, oper2)
+ return float_cmp(oper1, float(oper2)) == 0; /* "==" is commutative */
+stock bool:operator!=(Float:oper1, Float:oper2)
+ return float_cmp(oper1, oper2) != 0;
+stock bool:operator!=(Float:oper1, oper2)
+ return float_cmp(oper1, float(oper2)) != 0; /* "!=" is commutative */
+stock bool:operator>(Float:oper1, Float:oper2)
+ return float_cmp(oper1, oper2) > 0;
+stock bool:operator>(Float:oper1, oper2)
+ return float_cmp(oper1, float(oper2)) > 0;
+stock bool:operator>(oper1, Float:oper2)
+ return float_cmp(float(oper1), oper2) > 0;
+stock bool:operator>=(Float:oper1, Float:oper2)
+ return float_cmp(oper1, oper2) >= 0;
+stock bool:operator>=(Float:oper1, oper2)
+ return float_cmp(oper1, float(oper2)) >= 0;
+stock bool:operator>=(oper1, Float:oper2)
+ return float_cmp(float(oper1), oper2) >= 0;
+stock bool:operator<(Float:oper1, Float:oper2)
+ return float_cmp(oper1, oper2) < 0;
+stock bool:operator<(Float:oper1, oper2)
+ return float_cmp(oper1, float(oper2)) < 0;
+stock bool:operator<(oper1, Float:oper2)
+ return float_cmp(float(oper1), oper2) < 0;
+stock bool:operator<=(Float:oper1, Float:oper2)
+ return float_cmp(oper1, oper2) <= 0;
+stock bool:operator<=(Float:oper1, oper2)
+ return float_cmp(oper1, float(oper2)) <= 0;
+stock bool:operator<=(oper1, Float:oper2)
+ return float_cmp(float(oper1), oper2) <= 0;
+stock bool:operator!(Float:oper)
+ return (_:oper & 0x7fffffff) == 0;
+/* forbidden operations */
+forward operator%(Float:oper1, Float:oper2);
+forward operator%(Float:oper1, oper2);
+forward operator%(oper1, Float:oper2);
+
+/**************************************************************************/
+/* ADDED in embryo 1.2 */
+/**************************************************************************/
+/* use this to determine embryo age */
+#define EMBRYO_12 12
+/* Return the inverse sine, cosine or tangent. The output may be radians, */
+/* degrees or grades. */
+native Float:asin(Float:value, Float_Angle_Mode:mode=RADIAN);
+native Float:acos(Float:value, Float_Angle_Mode:mode=RADIAN);
+native Float:atan(Float:value, Float_Angle_Mode:mode=RADIAN);
+native Float:atan2(Float:valuey, Float:valuex, Float_Angle_Mode:mode=RADIAN);
+/* same as libc functions */
+native Float:log1p(Float:value);
+native Float:cbrt(Float:value);
+native Float:exp(Float:value);
+native Float:exp2(Float:value);
+native Float:hypot(Float:valuex, Float:valuey);