aboutsummaryrefslogtreecommitdiff
path: root/miscutils
diff options
context:
space:
mode:
Diffstat (limited to 'miscutils')
-rw-r--r--miscutils/dc.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/miscutils/dc.c b/miscutils/dc.c
index 451423c62..f574ae4a0 100644
--- a/miscutils/dc.c
+++ b/miscutils/dc.c
@@ -44,6 +44,13 @@ static void mul(void)
44 push(pop() * pop()); 44 push(pop() * pop());
45} 45}
46 46
47static void power(void)
48{
49 double topower = pop();
50
51 push(pow(pop(), topower));
52}
53
47static void divide(void) 54static void divide(void)
48{ 55{
49 double divisor = pop(); 56 double divisor = pop();
@@ -51,6 +58,13 @@ static void divide(void)
51 push(pop() / divisor); 58 push(pop() / divisor);
52} 59}
53 60
61static void mod(void)
62{
63 unsigned int d = pop();
64
65 push((unsigned int) pop() % d);
66}
67
54static void and(void) 68static void and(void)
55{ 69{
56 push((unsigned int) pop() & (unsigned int) pop()); 70 push((unsigned int) pop() & (unsigned int) pop());
@@ -119,10 +133,16 @@ static const struct op operators[] = {
119 {"mul", mul}, 133 {"mul", mul},
120 {"/", divide}, 134 {"/", divide},
121 {"div", divide}, 135 {"div", divide},
136 {"**", power},
137 {"exp", power},
138 {"pow", power},
139 {"%", mod},
140 {"mod", mod},
122 {"and", and}, 141 {"and", and},
123 {"or", or}, 142 {"or", or},
124 {"not", not}, 143 {"not", not},
125 {"eor", eor}, 144 {"eor", eor},
145 {"xor", eor},
126 {"p", print_no_pop}, 146 {"p", print_no_pop},
127 {"f", print_stack_no_pop}, 147 {"f", print_stack_no_pop},
128 {"o", set_output_base}, 148 {"o", set_output_base},