summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2017-07-05 20:05:41 +0200
committerWerner Koch <wk@gnupg.org>2017-07-05 20:05:41 +0200
commit0d30a4a9791d20c8881b5b12bd44611d9f4274cd (patch)
tree234cf894f94049903d9f374d6e531b1d1f5d32b0
parent5feaf1cc8f22c1f8d19a34850d86fe190f1432e2 (diff)
downloadlibgcrypt-0d30a4a9791d20c8881b5b12bd44611d9f4274cd.tar.gz
tools: Add left shift to mpicalc.
* src/mpicalc.c (do_lshift): New. (main): Handle '<'. Signed-off-by: Werner Koch <wk@gnupg.org>
-rw-r--r--src/mpicalc.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/mpicalc.c b/src/mpicalc.c
index ebd1bbb9..11246f38 100644
--- a/src/mpicalc.c
+++ b/src/mpicalc.c
@@ -232,6 +232,17 @@ do_gcd (void)
}
static void
+do_lshift (void)
+{
+ if (stackidx < 1)
+ {
+ fputs ("stack underflow\n", stderr);
+ return;
+ }
+ mpi_lshift (stack[stackidx - 1], stack[stackidx - 1], 1);
+}
+
+static void
do_rshift (void)
{
if (stackidx < 1)
@@ -242,7 +253,6 @@ do_rshift (void)
mpi_rshift (stack[stackidx - 1], stack[stackidx - 1], 1);
}
-
static void
do_nbits (void)
{
@@ -305,6 +315,7 @@ print_help (void)
"* multiply [0] := [1] * [0] {-1}\n"
"/ divide [0] := [1] - [0] {-1}\n"
"% modulo [0] := [1] % [0] {-1}\n"
+ "< left shift [0] := [0] << 1 {0}\n"
"> right shift [0] := [0] >> 1 {0}\n"
"++ increment [0] := [0]++ {0}\n"
"-- decrement [0] := [0]-- {0}\n"
@@ -487,6 +498,9 @@ main (int argc, char **argv)
case '^':
do_powm ();
break;
+ case '<':
+ do_lshift ();
+ break;
case '>':
do_rshift ();
break;