summaryrefslogtreecommitdiff
path: root/src/mpicalc.c
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2013-09-07 10:06:46 +0200
committerWerner Koch <wk@gnupg.org>2013-09-25 13:20:47 +0200
commit9a4447ccd1b90bcd701941e80a7f484a1825fcea (patch)
tree62063a27d2f9b93e9f98691e69941ceb6bfe9dea /src/mpicalc.c
parent64a7d347847d606eb5f4c156e24ba060271b8f6b (diff)
downloadlibgcrypt-9a4447ccd1b90bcd701941e80a7f484a1825fcea.tar.gz
mpicalc: Add statement to compute the number of bits.
* src/mpicalc.c (do_nbits): New. (main): Add statement 'b'. Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'src/mpicalc.c')
-rw-r--r--src/mpicalc.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/mpicalc.c b/src/mpicalc.c
index 762d7c81..dd852277 100644
--- a/src/mpicalc.c
+++ b/src/mpicalc.c
@@ -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++)
{