prepare for the release of rrdtool-1.2.20
[rrdtool.git] / src / rrd_rpncalc.c
index 3753c0f..909fd30 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * RRDtool 1.2.13  Copyright by Tobi Oetiker, 1997-2006
+ * RRDtool 1.2.20  Copyright by Tobi Oetiker, 1997-2007
  ****************************************************************************
  * rrd_rpncalc.c  RPN calculator functions
  ****************************************************************************/
@@ -162,6 +162,7 @@ void rpn_compact2str(rpn_cdefds_t *rpnc,ds_def_t *ds_def,char **str)
          add_op(OP_RAD2DEG,RAD2DEG)
          add_op(OP_DEG2RAD,DEG2RAD)
          add_op(OP_AVG,AVG)
+         add_op(OP_ABS,ABS)
 #undef add_op
               }
     (*str)[offset] = '\0';
@@ -187,7 +188,7 @@ short addop2str(enum op_en op, enum op_en op_type, char *op_str,
     return 0;
 }
 
-void parseCDEF_DS(char *def,rrd_t *rrd, int ds_idx)
+void parseCDEF_DS(const char *def,rrd_t *rrd, int ds_idx)
 {
     rpnp_t *rpnp = NULL;
     rpn_cdefds_t *rpnc = NULL;
@@ -340,6 +341,7 @@ rpn_parse(void *key_hash,const char *const expr_const,long (*lookup)(void *,char
        match_op(OP_RAD2DEG,RAD2DEG)
        match_op(OP_DEG2RAD,DEG2RAD)
        match_op(OP_AVG,AVG)
+       match_op(OP_ABS,ABS)
 #undef match_op
 
 
@@ -760,7 +762,7 @@ rpn_calc(rpnp_t *rpnp, rpnstack_t *rpnstack, long data_idx,
            case OP_AVG:
                stackunderflow(0);
                 {
-                   int i=rpnstack -> s[stptr--];
+                   int i=(int)rpnstack -> s[stptr--];
                    double sum=0;
                    int count=0;
                    stackunderflow(i-1);
@@ -771,7 +773,7 @@ rpn_calc(rpnp_t *rpnp, rpnstack_t *rpnstack, long data_idx,
                      count++;
                      sum+=val;
                    }
-                   // now push the result bavk on stack
+                   /* now push the result back on stack */
                    if (count>0) {
                      rpnstack -> s[++stptr]=sum/count;
                    } else {
@@ -779,6 +781,10 @@ rpn_calc(rpnp_t *rpnp, rpnstack_t *rpnstack, long data_idx,
                    }
                 }
                 break;
+            case OP_ABS:
+                stackunderflow(0);
+                rpnstack -> s[stptr] = fabs(rpnstack -> s[stptr]);
+                break;
            case OP_END:
                break;
        }