Duane Ellis <openocd@duaneellis.com>: This simple patch adds precision support to JIM's format command.
git-svn-id: svn://svn.berlios.de/openocd/trunk@767 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
parent
994396da59
commit
cfba2f4a79
52
src/jim.c
52
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 */
|
||||
|
|
Loading…
Reference in New Issue