simplify ~d and ~D.
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1454 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
e7baf404d2
commit
fe36f4f441
105
C/iopreds.c
105
C/iopreds.c
@ -4060,94 +4060,63 @@ format(volatile Term otail, volatile Term oargs, int sno)
|
|||||||
|
|
||||||
)
|
)
|
||||||
goto do_type_int_error;
|
goto do_type_int_error;
|
||||||
if (!has_repeats && ch == 'd') {
|
|
||||||
Yap_plwrite (t, f_putc, Handle_vars_f|To_heap_f);
|
|
||||||
FormatInfo = &finfo;
|
|
||||||
} else {
|
|
||||||
Int siz, dec, i, div = 1;
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Int siz = 0, i;
|
||||||
|
char *ptr = tmp1;
|
||||||
|
|
||||||
|
if (IsIntegerTerm(t)) {
|
||||||
|
UInt il = IntegerOfTerm(t);
|
||||||
|
#if HAVE_SNPRINTF
|
||||||
|
snprintf(tmp1, 256, "%d", il);
|
||||||
|
#else
|
||||||
|
sprintf(tmp1, "%ld", (long int)il);
|
||||||
|
#endif
|
||||||
|
siz = strlen(tmp1);
|
||||||
|
if (il < 0) siz--;
|
||||||
|
}
|
||||||
#ifdef USE_GMP
|
#ifdef USE_GMP
|
||||||
if (IsBigIntTerm(t)) {
|
else if (IsBigIntTerm(t)) {
|
||||||
MP_INT *dst = Yap_BigIntOfTerm(t);
|
MP_INT *dst = Yap_BigIntOfTerm(t);
|
||||||
int siz = mpz_sizeinbase (dst, 10);
|
siz = mpz_sizeinbase (dst, 10);
|
||||||
char *ptr = tmp1;
|
|
||||||
if (siz+2 > 256) {
|
if (siz+2 > 256) {
|
||||||
goto do_type_int_error;
|
goto do_type_int_error;
|
||||||
}
|
}
|
||||||
mpz_get_str (tmp1, 10, dst);
|
mpz_get_str (tmp1, 10, dst);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (tmp1[0] == '-') {
|
||||||
|
f_putc(sno, (int) '-');
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
if (ch == 'D') {
|
||||||
|
int first = TRUE;
|
||||||
|
|
||||||
if (tmp1[0] == '-') {
|
|
||||||
f_putc(sno, (int) '-');
|
|
||||||
ptr++;
|
|
||||||
}
|
|
||||||
while (siz > repeats) {
|
while (siz > repeats) {
|
||||||
if ((siz-repeats) % 3 == 0) {
|
if ((siz-repeats) % 3 == 0 &&
|
||||||
|
!first) {
|
||||||
f_putc(sno, (int) ',');
|
f_putc(sno, (int) ',');
|
||||||
}
|
}
|
||||||
f_putc(sno, (int) (*ptr++));
|
f_putc(sno, (int) (*ptr++));
|
||||||
|
first = FALSE;
|
||||||
siz--;
|
siz--;
|
||||||
}
|
}
|
||||||
if (repeats) {
|
|
||||||
f_putc(sno, (int) '.');
|
|
||||||
while (repeats) {
|
|
||||||
f_putc(sno, (int) (*ptr++));
|
|
||||||
repeats--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
dec = IntegerOfTerm(t);
|
|
||||||
/*
|
|
||||||
* The guys at Quintus have probably
|
|
||||||
* read too much Cobol!
|
|
||||||
*/
|
|
||||||
if (dec < 0) {
|
|
||||||
dec = -dec;
|
|
||||||
f_putc(sno, (int) '-');
|
|
||||||
} else if (dec == 0) {
|
|
||||||
/* make sure we write something */
|
|
||||||
f_putc(sno, '0');
|
|
||||||
if (repeats == 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i = dec;
|
|
||||||
siz = 0;
|
|
||||||
while (i > 0) {
|
|
||||||
siz++;
|
|
||||||
i /= 10;
|
|
||||||
div *= 10;
|
|
||||||
}
|
|
||||||
if (repeats > siz) {
|
|
||||||
f_putc(sno, (int) '.');
|
|
||||||
while (repeats > siz) {
|
|
||||||
f_putc(sno, (int) '0');
|
|
||||||
repeats--;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
int output_done = FALSE;
|
|
||||||
while (siz > repeats) {
|
while (siz > repeats) {
|
||||||
div /= 10;
|
f_putc(sno, (int) (*ptr++));
|
||||||
if (ch == 'D'&&
|
|
||||||
(siz - repeats) % 3 == 0 &&
|
|
||||||
output_done)
|
|
||||||
f_putc(sno, (int)',');
|
|
||||||
f_putc(sno, (int)((dec/div)+'0'));
|
|
||||||
output_done = TRUE;
|
|
||||||
siz--;
|
siz--;
|
||||||
dec %= div;
|
|
||||||
}
|
|
||||||
if (repeats) {
|
|
||||||
f_putc(sno, (int) '.');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (;siz>0;siz--,dec%=div) {
|
if (repeats) {
|
||||||
div /= 10;
|
f_putc(sno, (int) '.');
|
||||||
f_putc(sno, (int)((dec/div)+'0'));
|
while (repeats) {
|
||||||
|
f_putc(sno, (int) (*ptr++));
|
||||||
|
repeats--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
FormatInfo = &finfo;
|
break;
|
||||||
break;
|
|
||||||
case 'r':
|
case 'r':
|
||||||
case 'R':
|
case 'R':
|
||||||
{
|
{
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
<h2>Yap-5.1.0:</h2>
|
<h2>Yap-5.1.0:</h2>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li> FIXED: ~D should print bignums (obs Jude Shavlik). </li>
|
||||||
<li> FIXED: format's ~d and ~D were broken (obs Jude Shavlik). </li>
|
<li> FIXED: format's ~d and ~D were broken (obs Jude Shavlik). </li>
|
||||||
<li> FIXED: profiler should not talk about hidden predicates or idb entries. </li>
|
<li> FIXED: profiler should not talk about hidden predicates or idb entries. </li>
|
||||||
<li> FIXED: recentg change in setof could bind argument (obs
|
<li> FIXED: recentg change in setof could bind argument (obs
|
||||||
|
Reference in New Issue
Block a user