Duane Ellis <openocd@duaneellis.com>: This simple patch adds precision support to...
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Mon, 7 Jul 2008 18:57:27 +0000 (18:57 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Mon, 7 Jul 2008 18:57:27 +0000 (18:57 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@767 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/jim.c

index e9eb588223568dbb61bb7422ac458cc0315b9e67..88893b0da60a3a017e1616de13dfe6a8eab0650e 100644 (file)
--- a/src/jim.c
+++ b/src/jim.c
@@ -2180,6 +2180,10 @@ Jim_Obj *Jim_FormatString(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
                int spad;
                int altfm;
                int forceplus;
+               int prec;
+               int inprec;
+               int haveprec;
+               int accum;
 
         while (*fmt != '%' && fmtLen) {
             fmt++; fmtLen--;
@@ -2194,6 +2198,9 @@ Jim_Obj *Jim_FormatString(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
                ljust = 0;
                altfm = 0;
                forceplus = 0;
+               inprec = 0;
+               haveprec = 0;
+               prec = -1; /* not found yet */
     next_fmt:
                if( fmtLen <= 0 ){
                        break;
@@ -2237,7 +2244,12 @@ Jim_Obj *Jim_FormatString(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
                        altfm = 1;
                        *fmt++; fmtLen--;
                        goto next_fmt;
-                       
+
+               case '.':
+                       inprec = 1;
+                       *fmt++; fmtLen--;
+                       goto next_fmt;
+                       break;
                case '1':
                case '2':
                case '3':
@@ -2247,11 +2259,17 @@ Jim_Obj *Jim_FormatString(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
                case '7':
                case '8':
                case '9':
-                       width = 0;
+                       accum = 0;
                        while( isdigit(*fmt) && (fmtLen > 0) ){
-                               width = (width * 10) + (*fmt - '0');
+                               accum = (accum * 10) + (*fmt - '0');
                                fmt++;  fmtLen--;
                        }
+                       if( inprec ){
+                               haveprec = 1;
+                               prec = accum;
+                       } else {
+                               width = accum;
+                       }
                        goto next_fmt;
                case '*':
                        /* suck up the next item as an integer */
@@ -2264,10 +2282,20 @@ Jim_Obj *Jim_FormatString(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
                                Jim_FreeNewObj(interp, resObjPtr );
                                return NULL;
                        }
-                       width = wideValue;
-                       if( width < 0 ){
-                               ljust = 1;
-                               width = -width;
+                       if( inprec ){
+                               haveprec = 1;
+                               prec = wideValue;
+                               if( prec < 0 ){
+                                       /* man 3 printf says */
+                                       /* if prec is negative, it is zero */
+                                       prec = 0;
+                               }
+                       } else {
+                               width = wideValue;
+                               if( width < 0 ){
+                                       ljust = 1;
+                                       width = -width;
+                               }
                        }
                        objv++;
                        goto next_fmt;
@@ -2313,6 +2341,16 @@ Jim_Obj *Jim_FormatString(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
                        /* skip ahead */
                        cp = strchr(cp,0);
                }
+               /* did we find a period? */
+               if( inprec ){
+                       /* then add it */
+                       *cp++ = '.';
+                       /* did something occur after the period? */
+                       if( haveprec ){
+                               sprintf( cp, "%d", prec );
+                       }
+                       cp = strchr(cp,0);
+               }
                *cp = 0;
 
                /* here we do the work */

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)