tools: Add left shift to mpicalc.
authorWerner Koch <wk@gnupg.org>
Wed, 5 Jul 2017 18:05:41 +0000 (20:05 +0200)
committerWerner Koch <wk@gnupg.org>
Wed, 5 Jul 2017 18:05:41 +0000 (20:05 +0200)
* src/mpicalc.c (do_lshift): New.
(main): Handle '<'.

Signed-off-by: Werner Koch <wk@gnupg.org>
src/mpicalc.c

index ebd1bbb..11246f3 100644 (file)
@@ -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;