Math.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include <math.h>
  2. #include "libraries/Math.h"
  3. #include "utils/Functions.h"
  4. #define FLOAT_FUNCTION(Name, Function) \
  5. static void l##Name(Script* sc) { \
  6. float f; \
  7. if(!sPopFloat(sc, &f)) { \
  8. sPushFloat(sc, Function(f)); \
  9. } \
  10. }
  11. FLOAT_FUNCTION(Sin, sinf)
  12. FLOAT_FUNCTION(Cos, cosf)
  13. FLOAT_FUNCTION(Tan, tanf)
  14. FLOAT_FUNCTION(ASin, asinf)
  15. FLOAT_FUNCTION(ACos, acosf)
  16. FLOAT_FUNCTION(ATan, atanf)
  17. FLOAT_FUNCTION(Ln, logf)
  18. FLOAT_FUNCTION(Log, log10f)
  19. FLOAT_FUNCTION(SquareRoot, sqrtf)
  20. static void lPow(Script* sc) {
  21. float x;
  22. float y;
  23. if(!sPopFloat(sc, &x) && !sPopFloat(sc, &y)) {
  24. sPushFloat(sc, powf(y, x));
  25. }
  26. }
  27. static void lAddFloatFunction(const char* name, ScriptFunction sf) {
  28. Function f;
  29. gfInit(&f, name, dtFloat(), sf);
  30. gfAddArgument(&f, dtFloat());
  31. gfsAdd(&f);
  32. }
  33. void lMathRegister(void) {
  34. lAddFloatFunction("sin", lSin);
  35. lAddFloatFunction("cos", lCos);
  36. lAddFloatFunction("tan", lTan);
  37. lAddFloatFunction("asin", lASin);
  38. lAddFloatFunction("acos", lACos);
  39. lAddFloatFunction("atan", lATan);
  40. lAddFloatFunction("ln", lLn);
  41. lAddFloatFunction("log", lLog);
  42. lAddFloatFunction("sqrt", lSquareRoot);
  43. Function f;
  44. gfInit(&f, "pow", dtFloat(), lPow);
  45. gfAddArgument(&f, dtFloat());
  46. gfAddArgument(&f, dtFloat());
  47. gfsAdd(&f);
  48. }