- return ret;
-}
-
-double length ()
-{
- return stack_size;
-}
-
-double pop ()
-{
- double ret = 0;
- if (stack_size > 0) {
- ret = stack[--stack_size];
- double *tmp = (double *) callocordie (stack_size, sizeof (double));
- memcpy (tmp, stack, stack_size * sizeof (double));
- free (stack);
- stack = tmp;
- } else {
- VERBOSE (WARNING, fprintf (stdout, "error stack empty\n"));
- }
- return ret;
-}
-
-double push (double val)
-{
- double *tmp = (double *) callocordie (stack_size + 1, sizeof (double));
- memcpy (tmp, stack, stack_size * sizeof (double));
- if (stack) {
- free (stack);
- }
- stack = tmp;
- stack[stack_size++] = val;
- return val;
-}
-
-double put (int n, double val)
-{
- if (n <= 0) {
- VERBOSE (WARNING, fprintf (stdout, "error out of bound (%d/%d)\n", n, stack_size));
- return 0;
- }
- if (n > stack_size) {
- double *tmp = (double *) callocordie (n, sizeof (double));
- memcpy (tmp, stack, stack_size * sizeof (double));
- free (stack);
- stack = tmp;
- stack_size = n;
- }
- stack[n - 1] = val;
- return val;
-}
-
-double set (int nbops, element_t **ops)
-{
- int i;
- if (stack) {
- free (stack);
- }
- stack = NULL;
- stack_size = 0;
- if (nbops != 0) {
- stack = (double *) callocordie (nbops, sizeof (double));
- for (i = 0; i < nbops; i++) {
- stack[i] = evaluate_element (ops[i], 0);
- }
- stack_size = nbops;
- }
- return stack_size;
-}
-
-void show (void)
-{
- int i;
- fprintf (stdout, "stack:");
- for (i = 0; i < stack_size; i++) {
- fprintf (stdout, " ");
- fprintf (stdout, minform, stack[i]);
- }
- fprintf (stdout, "\n");
-}
-
-/* help message */
-
-void help (void)
-{
- fprintf (stdout, "calc is a simple calculator\n\n");
- fprintf (stdout, "arithmetic op.:");
- fprintf (stdout, " + - * / %% ^\n");
- fprintf (stdout, "comparison op.:");
- fprintf (stdout, " == != >= <= > <\n");
- fprintf (stdout, "logical op.:");
- fprintf (stdout, " & | !\n");
- fprintf (stdout, "mathematic func.:");
- fprintf (stdout, " exp ln log pow sqrt\n");
- fprintf (stdout, "trigonometric func.:");
- fprintf (stdout, " acos asin atan cos sin tan\n");
- fprintf (stdout, "error functions:");
- fprintf (stdout, " erf erfc\n");
- fprintf (stdout, "miscellaneous func.:");
- fprintf (stdout, " abs ceil floor\n");
- fprintf (stdout, "storage func.:");
- fprintf (stdout, " clear dec disp inc mem rcl sto\n");
- fprintf (stdout, "control flow prim.:");
- fprintf (stdout, " cond print while {} ;\n");
- fprintf (stdout, "program management:");
- fprintf (stdout, " call del edit ls prog\n");
- fprintf (stdout, "stack management:");
- fprintf (stdout, " get len pop push put set show\n");
- fprintf (stdout, "control management:");
- fprintf (stdout, " help quit\n");
- fprintf (stdout, "constants:");
- fprintf (stdout, " ans e pi\n");