mpicalc: Add statement to compute the number of bits.
authorWerner Koch <wk@gnupg.org>
Sat, 7 Sep 2013 08:06:46 +0000 (10:06 +0200)
committerWerner Koch <wk@gnupg.org>
Wed, 25 Sep 2013 11:20:47 +0000 (13:20 +0200)
* src/mpicalc.c (do_nbits): New.
(main): Add statement 'b'.

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

index 762d7c8..dd85227 100644 (file)
@@ -238,6 +238,20 @@ do_rshift (void)
 }
 
 
+static void
+do_nbits (void)
+{
+  unsigned int n;
+
+  if (stackidx < 1)
+    {
+      fputs ("stack underflow\n", stderr);
+      return;
+    }
+  n = mpi_get_nbits (stack[stackidx - 1]);
+  mpi_set_ui (stack[stackidx - 1], n);
+}
+
 
 static int
 my_getc (void)
@@ -279,6 +293,7 @@ print_help (void)
          "i   remove item   [0] := [1]                {-1}\n"
          "d   dup item      [-1] := [0]               {+1}\n"
          "r   reverse       [0] := [1], [1] := [0]    {0}\n"
+         "b   # of bits     [0] := nbits([0])         {0}\n"
          "c   clear stack\n"
          "p   print top item\n"
          "f   print the stack\n"
@@ -381,7 +396,7 @@ main (int argc, char **argv)
                      do_add ();
                    }
                  break;
-               case '-':
+                case '-':
                  if ((c = my_getc ()) == '-')
                    do_dec ();
                  else if (isdigit (c) || (c >= 'A' && c <= 'F'))
@@ -454,6 +469,9 @@ main (int argc, char **argv)
                       stack[stackidx-2] = tmp;
                    }
                  break;
+                case 'b':
+                  do_nbits ();
+                  break;
                case 'c':
                  for (i = 0; i < stackidx; i++)
                     {