fix error in plot_raw_custom_data() wave expression calculator (missing part of the expression due to an improper else if

This commit is contained in:
stefan schippers
2024-03-08 11:07:14 +01:00
parent 336a132219
commit ae69c55bd8
+9 -3
View File
@@ -1534,7 +1534,7 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr, c
} }
my_strdup2(_ALLOC_ID_, &ntok_copy, expr); my_strdup2(_ALLOC_ID_, &ntok_copy, expr);
ntok_ptr = ntok_copy; ntok_ptr = ntok_copy;
dbg(1, "plot_raw_custom_data(): expr=%s, first=%d, last=%d\n", expr, first, last); dbg(0, "plot_raw_custom_data(): expr=%s, first=%d, last=%d\n", expr, first, last);
while( (n = my_strtok_r(ntok_ptr, " \t\n", "", 0, &ntok_save)) ) { while( (n = my_strtok_r(ntok_ptr, " \t\n", "", 0, &ntok_save)) ) {
if(stackptr1 >= STACKMAX -2) { if(stackptr1 >= STACKMAX -2) {
dbg(0, "stack overflow in graph expression parsing. Interrupted\n"); dbg(0, "stack overflow in graph expression parsing. Interrupted\n");
@@ -1622,24 +1622,28 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr, c
stack1[stackptr1].idx = idx; stack1[stackptr1].idx = idx;
stackptr1++; stackptr1++;
} }
dbg(1, " plot_raw_custom_data(): stack1= %d\n", stack1[stackptr1 - 1].i); dbg(0, " plot_raw_custom_data(): stack1= %d\n", stack1[stackptr1 - 1].i);
} /* while(n = my_strtok_r(...) */ } /* while(n = my_strtok_r(...) */
my_free(_ALLOC_ID_, &ntok_copy); my_free(_ALLOC_ID_, &ntok_copy);
for(p = first ; p <= last; p++) { for(p = first ; p <= last; p++) {
stackptr2 = 0; stackptr2 = 0;
for(i = 0; i < stackptr1; ++i) { for(i = 0; i < stackptr1; ++i) {
dbg(0, "\n stackptr1=%d, stack1[i]i.i=%d stackptr2=%d\n", i, stack1[i].i, stackptr2);
if(stack1[i].i == NUMBER) { /* number */ if(stack1[i].i == NUMBER) { /* number */
dbg(0, "stackptr2=%d, number=%g\n", stackptr2, stack1[i].d);
stack2[stackptr2++] = stack1[i].d; stack2[stackptr2++] = stack1[i].d;
} }
else if(stack1[i].i == IDX) { else if(stack1[i].i == IDX) {
stack2[stackptr2++] = (double)p; stack2[stackptr2++] = (double)p;
} }
else if(stack1[i].i == SPICE_NODE && stack1[i].idx < xctx->raw->nvars) { /* spice node */ else if(stack1[i].i == SPICE_NODE && stack1[i].idx < xctx->raw->nvars) { /* spice node */
dbg(0, "stackptr2=%d, spice_node=%g\n", stackptr2, xctx->raw->values[stack1[i].idx][p]);
stack2[stackptr2++] = xctx->raw->values[stack1[i].idx][p]; stack2[stackptr2++] = xctx->raw->values[stack1[i].idx][p];
} }
if(stackptr2 > 1) { /* 2 argument operators */ if(stackptr2 > 1) { /* 2 argument operators */
switch(stack1[i].i) { switch(stack1[i].i) {
case PLUS: case PLUS:
dbg(0, "stackptr2=%d, +: %g %g\n", stackptr2, stack2[stackptr2 - 2], stack2[stackptr2 - 1]);
stack2[stackptr2 - 2] = stack2[stackptr2 - 2] + stack2[stackptr2 - 1]; stack2[stackptr2 - 2] = stack2[stackptr2 - 2] + stack2[stackptr2 - 1];
stackptr2--; stackptr2--;
break; break;
@@ -1648,6 +1652,7 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr, c
stackptr2--; stackptr2--;
break; break;
case MULT: case MULT:
dbg(0, "stackptr2=%d, *: %g %g\n", stackptr2, stack2[stackptr2 - 2], stack2[stackptr2 - 1]);
stack2[stackptr2 - 2] = stack2[stackptr2 - 2] * stack2[stackptr2 - 1]; stack2[stackptr2 - 2] = stack2[stackptr2 - 2] * stack2[stackptr2 - 1];
stackptr2--; stackptr2--;
break; break;
@@ -1736,7 +1741,7 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr, c
break; break;
} /* switch(...) */ } /* switch(...) */
} /* if(stackptr2 > 1) */ } /* if(stackptr2 > 1) */
else if(stackptr2 > 0) { /* 1 argument operators */ if(stackptr2 > 0) { /* 1 argument operators */
switch(stack1[i].i) { switch(stack1[i].i) {
case AVG: case AVG:
if( p == first ) { if( p == first ) {
@@ -1933,6 +1938,7 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr, c
stack2[stackptr2 - 1] = mylog(stack2[stackptr2 - 1]); stack2[stackptr2 - 1] = mylog(stack2[stackptr2 - 1]);
break; break;
case LOG10: case LOG10:
dbg(0, "stackptr2=%d, log10(): %g\n", stackptr2, stack2[stackptr2 - 1]);
stack2[stackptr2 - 1] = mylog10(stack2[stackptr2 - 1]); stack2[stackptr2 - 1] = mylog10(stack2[stackptr2 - 1]);
break; break;
case DB20: case DB20: