diff options
author | oharboe <oharboe> | 2008-07-07 18:59:48 +0000 |
---|---|---|
committer | oharboe <oharboe> | 2008-07-07 18:59:48 +0000 |
commit | dfb095e05ea89d2be7db296ea25c73fb9ac5ba1c (patch) | |
tree | e48c34903d3f30b0c5fc81caf9d65e9f3a4a0ff5 | |
parent | 1bfae9bb5c9d3524a7d8841d2df13209f381bbb6 (diff) | |
download | jimtcl-dfb095e05ea89d2be7db296ea25c73fb9ac5ba1c.zip jimtcl-dfb095e05ea89d2be7db296ea25c73fb9ac5ba1c.tar.gz jimtcl-dfb095e05ea89d2be7db296ea25c73fb9ac5ba1c.tar.bz2 |
2008-07-07 Duane Ellis <openocd@duaneellis.com>
src/jim.c: This simple patch adds precision support to JIM's format command.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | jim.c | 42 |
2 files changed, 44 insertions, 2 deletions
@@ -1,5 +1,9 @@ 2008-07-07 Duane Ellis <openocd@duaneellis.com> +src/jim.c: This simple patch adds precision support to JIM's format command. + +2008-07-07 Duane Ellis <openocd@duaneellis.com> + src/Jim.c - ** THIS INCLUDES A PREVIOUS PATCH I SENT EARLIER ** - that impliments many [format] specifies JIM did not support. @@ -2178,6 +2178,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--; @@ -2192,6 +2196,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; @@ -2236,6 +2243,11 @@ Jim_Obj *Jim_FormatString(Jim_Interp *interp, Jim_Obj *fmtObjPtr, *fmt++; fmtLen--; goto next_fmt; + case '.': + inprec = 1; + *fmt++; fmtLen--; + goto next_fmt; + break; case '1': case '2': case '3': @@ -2245,11 +2257,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 */ @@ -2262,11 +2280,21 @@ Jim_Obj *Jim_FormatString(Jim_Interp *interp, Jim_Obj *fmtObjPtr, Jim_FreeNewObj(interp, resObjPtr ); return NULL; } + 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; break; @@ -2311,6 +2339,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 */ |