Goetz Bock writes:
authorEric Andersen <andersen@codepoet.org>
Wed, 22 Oct 2003 11:24:39 +0000 (11:24 -0000)
committerEric Andersen <andersen@codepoet.org>
Wed, 22 Oct 2003 11:24:39 +0000 (11:24 -0000)
Dear list,

during my quest do pack busybox into an RPM, I've fixed a small bug
(missing \n) in dc's usage. And added two additional operations: mod and
exp/power.

Feel free to drop them.

include/usage.h
miscutils/dc.c

index 851023ea57d9a29282a4ad18f4967816b0eb5e52..268c23cac038396304ceddd352382b333a7d654b 100644 (file)
        "expression ..."
 #define dc_full_usage \
        "This is a Tiny RPN calculator that understands the\n" \
-       "following operations: +, -, /, *, and, or, not, eor.\n" \
-       "i.e., 'dc 2 2 add' -> 4, and 'dc 8 8 \\* 2 2 + /' -> 16" \
+       "following operations: +, add, -, sub, *, mul, /, div, %, mod, "\
+       "**, exp, and, or, not, eor.\n" \
+       "For example: 'dc 2 2 add' -> 4, and 'dc 8 8 \\* 2 2 + /' -> 16.\n" \
+       "\nOptions:\n" \
        "p - Prints the value on the top of the stack, without altering the stack.\n" \
        "f - Prints the entire contents of the stack without altering anything.\n" \
        "o - Pops the value off the top of the stack and uses it to set the output radix.\n" \
index 451423c62fa1fab5bca01b23716f625997f1e430..f574ae4a0f6c16c8105dc9311b7d37fbf8c204d6 100644 (file)
@@ -44,6 +44,13 @@ static void mul(void)
        push(pop() * pop());
 }
 
+static void power(void)
+{
+       double topower = pop();
+
+       push(pow(pop(), topower));
+}
+
 static void divide(void)
 {
        double divisor = pop();
@@ -51,6 +58,13 @@ static void divide(void)
        push(pop() / divisor);
 }
 
+static void mod(void)
+{
+       unsigned int d = pop();
+
+       push((unsigned int) pop() % d);
+}
+
 static void and(void)
 {
        push((unsigned int) pop() & (unsigned int) pop());
@@ -119,10 +133,16 @@ static const struct op operators[] = {
        {"mul", mul},
        {"/",   divide},
        {"div", divide},
+       {"**",  power},
+       {"exp", power},
+       {"pow", power},
+       {"%",   mod},
+       {"mod", mod},
        {"and", and},
        {"or",  or},
        {"not", not},
        {"eor", eor},
+       {"xor", eor},
        {"p", print_no_pop},
        {"f", print_stack_no_pop},
        {"o", set_output_base},