diff options
Diffstat (limited to '')
-rw-r--r-- | evaluator.c | 2 | ||||
-rw-r--r-- | evaluator.h | 1 | ||||
-rw-r--r-- | plugin_math.c | 23 |
3 files changed, 25 insertions, 1 deletions
diff --git a/evaluator.c b/evaluator.c index e2b103f..aaebee9 100644 --- a/evaluator.c +++ b/evaluator.c @@ -274,7 +274,7 @@ RESULT *SetResult(RESULT ** result, const int type, const void *value) } -static RESULT *CopyResult(RESULT ** result, RESULT * value) +RESULT *CopyResult(RESULT ** result, RESULT * value) { if (*result == NULL) { if ((*result = NewResult()) == NULL) diff --git a/evaluator.h b/evaluator.h index 6b4cbca..412aeec 100644 --- a/evaluator.h +++ b/evaluator.h @@ -51,6 +51,7 @@ void DeleteFunctions(void); void DelResult(RESULT * result); RESULT *SetResult(RESULT ** result, const int type, const void *value); +RESULT *CopyResult(RESULT ** result, RESULT * value); double R2N(RESULT * result); char *R2S(RESULT * result); diff --git a/plugin_math.c b/plugin_math.c index b74f188..c3748e1 100644 --- a/plugin_math.c +++ b/plugin_math.c @@ -114,6 +114,26 @@ static void my_ceil(RESULT * result, RESULT * arg) SetResult(&result, R_NUMBER, &value); } +static void my_decode(RESULT * result, int argc, RESULT * argv[]) +{ + int index; + + if (argc < 2) { + error("decode(): wrong number of parameters"); + SetResult(&result, R_STRING, ""); + return; + } + + index = R2N(argv[0]); + + if (index < 0 || index >= argc-1) { + SetResult(&result, R_STRING, ""); + return; + } + + CopyResult (&result, argv[index+1]); +} + int plugin_init_math(void) { @@ -138,6 +158,9 @@ int plugin_init_math(void) AddFunction("floor", 1, my_floor); AddFunction("ceil", 1, my_ceil); + /* decode */ + AddFunction("decode", -1, my_decode); + return 0; } |