SCP: Add formatting support for signed t_value (t_svalue).
PV_LEFTSIGN - left justified signed value PV_RCOMMASIGN - right, space filled, Comma separated every 3 treat as signed
This commit is contained in:
parent
f2f4bfa8fb
commit
b4ca9174fd
2 changed files with 14 additions and 0 deletions
12
scp.c
12
scp.c
|
@ -9782,9 +9782,15 @@ t_stat sprint_val (char *buffer, t_value val, uint32 radix,
|
||||||
{
|
{
|
||||||
#define MAX_WIDTH ((int) ((CHAR_BIT * sizeof (t_value) * 4 + 3)/3))
|
#define MAX_WIDTH ((int) ((CHAR_BIT * sizeof (t_value) * 4 + 3)/3))
|
||||||
t_value owtest, wtest;
|
t_value owtest, wtest;
|
||||||
|
t_bool negative = FALSE;
|
||||||
int32 d, digit, ndigits, commas = 0;
|
int32 d, digit, ndigits, commas = 0;
|
||||||
char dbuf[MAX_WIDTH + 1];
|
char dbuf[MAX_WIDTH + 1];
|
||||||
|
|
||||||
|
if (((format == PV_LEFTSIGN) || (format == PV_RCOMMASIGN)) &&
|
||||||
|
(0 > (t_svalue)val)) {
|
||||||
|
val = (t_value)(-((t_svalue)val));
|
||||||
|
negative = TRUE;
|
||||||
|
}
|
||||||
for (d = 0; d < MAX_WIDTH; d++)
|
for (d = 0; d < MAX_WIDTH; d++)
|
||||||
dbuf[d] = (format == PV_RZRO)? '0': ' ';
|
dbuf[d] = (format == PV_RZRO)? '0': ' ';
|
||||||
dbuf[MAX_WIDTH] = 0;
|
dbuf[MAX_WIDTH] = 0;
|
||||||
|
@ -9795,11 +9801,15 @@ do {
|
||||||
val = val / radix;
|
val = val / radix;
|
||||||
dbuf[d] = (char)((digit <= 9)? '0' + digit: 'A' + (digit - 10));
|
dbuf[d] = (char)((digit <= 9)? '0' + digit: 'A' + (digit - 10));
|
||||||
} while ((d > 0) && (val != 0));
|
} while ((d > 0) && (val != 0));
|
||||||
|
if (negative && (format == PV_LEFTSIGN))
|
||||||
|
dbuf[--d] = '-';
|
||||||
|
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case PV_LEFT:
|
case PV_LEFT:
|
||||||
|
case PV_LEFTSIGN:
|
||||||
break;
|
break;
|
||||||
case PV_RCOMMA:
|
case PV_RCOMMA:
|
||||||
|
case PV_RCOMMASIGN:
|
||||||
for (digit = 0; digit < MAX_WIDTH; digit++)
|
for (digit = 0; digit < MAX_WIDTH; digit++)
|
||||||
if (dbuf[digit] != ' ')
|
if (dbuf[digit] != ' ')
|
||||||
break;
|
break;
|
||||||
|
@ -9810,6 +9820,8 @@ switch (format) {
|
||||||
for (digit=1; digit<=commas; digit++)
|
for (digit=1; digit<=commas; digit++)
|
||||||
dbuf[MAX_WIDTH - (digit * 4)] = ',';
|
dbuf[MAX_WIDTH - (digit * 4)] = ',';
|
||||||
d = d - commas;
|
d = d - commas;
|
||||||
|
if (negative && (format == PV_RCOMMASIGN))
|
||||||
|
dbuf[--d] = '-';
|
||||||
if (width > MAX_WIDTH) {
|
if (width > MAX_WIDTH) {
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
return width;
|
return width;
|
||||||
|
|
|
@ -418,6 +418,8 @@ typedef uint32 t_addr;
|
||||||
#define PV_RSPC 1 /* right, space fill */
|
#define PV_RSPC 1 /* right, space fill */
|
||||||
#define PV_RCOMMA 2 /* right, space fill. Comma separate every 3 */
|
#define PV_RCOMMA 2 /* right, space fill. Comma separate every 3 */
|
||||||
#define PV_LEFT 3 /* left justify */
|
#define PV_LEFT 3 /* left justify */
|
||||||
|
#define PV_RCOMMASIGN 6 /* right, space fill. Comma separate every 3 treat as signed */
|
||||||
|
#define PV_LEFTSIGN 7 /* left justify treat as signed */
|
||||||
|
|
||||||
/* Default timing parameters */
|
/* Default timing parameters */
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue