diff options
Diffstat (limited to 'miscutils')
-rw-r--r-- | miscutils/dc.c | 20 |
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 | ||
47 | static void power(void) | ||
48 | { | ||
49 | double topower = pop(); | ||
50 | |||
51 | push(pow(pop(), topower)); | ||
52 | } | ||
53 | |||
47 | static void divide(void) | 54 | static 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 | ||
61 | static void mod(void) | ||
62 | { | ||
63 | unsigned int d = pop(); | ||
64 | |||
65 | push((unsigned int) pop() % d); | ||
66 | } | ||
67 | |||
54 | static void and(void) | 68 | static 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}, |