aboutsummaryrefslogtreecommitdiff
path: root/jim-format.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2013-11-26 08:27:01 +1000
committerSteve Bennett <steveb@workware.net.au>2013-11-28 07:17:02 +1000
commit2448a2047e587cae8a1b2f401607b7b4c3108429 (patch)
tree60640b3016aa811cb4d78c7c3527a787970e169b /jim-format.c
parent388573d26679efc0d7f6df87f834bdd32da64e5d (diff)
downloadjimtcl-2448a2047e587cae8a1b2f401607b7b4c3108429.zip
jimtcl-2448a2047e587cae8a1b2f401607b7b4c3108429.tar.gz
jimtcl-2448a2047e587cae8a1b2f401607b7b4c3108429.tar.bz2
Add basic support for [format %b]
Binary conversion Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim-format.c')
-rw-r--r--jim-format.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/jim-format.c b/jim-format.c
index 818eea4..7876d3e 100644
--- a/jim-format.c
+++ b/jim-format.c
@@ -307,6 +307,42 @@ Jim_Obj *Jim_FormatString(Jim_Interp *interp, Jim_Obj *fmtObjPtr, int objc, Jim_
formatted_chars = 1;
break;
}
+ case 'b': {
+ unsigned jim_wide w;
+ int length;
+ int i;
+ int j;
+
+ if (Jim_GetWide(interp, objv[objIndex], (jim_wide *)&w) != JIM_OK) {
+ goto error;
+ }
+ length = sizeof(w) * 8;
+
+ /* XXX: width and precision not yet implemented for binary
+ * also flags in 'spec', e.g. #, 0, -
+ */
+
+ /* Increase the size of the buffer if needed */
+ if (num_buffer_size < length + 1) {
+ num_buffer_size = length + 1;
+ num_buffer = Jim_Realloc(num_buffer, num_buffer_size);
+ }
+
+ j = 0;
+ for (i = length; i > 0; ) {
+ i--;
+ if (w & ((unsigned jim_wide)1 << i)) {
+ num_buffer[j++] = '1';
+ }
+ else if (j || i == 0) {
+ num_buffer[j++] = '0';
+ }
+ }
+ num_buffer[j] = 0;
+ formatted_chars = formatted_bytes = j;
+ formatted_buf = num_buffer;
+ break;
+ }
case 'e':
case 'E':