-// ssprintf.cpp
-
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
#include "pch.h"
#include <malloc.h>
if (type & LEFT)
type &= ~ZEROPAD;
if (base < 2 || base > 36)
- return 0;
+ return false;
c = (type & ZEROPAD) ? '0' : ' ';
sign = 0;
if (type & SIGN) {
if (base < 2 || base > 36)
return 0;
c = (type & ZEROPAD) ? L'0' : L' ';
- sign = 0;
+ sign = false;
if (type & SIGN) {
if (num < 0) {
sign = L'-';
if ( exp_sign == 'g' || exp_sign == 'G' ) {
type |= ZEROTRUNC;
if ( exponent < -4 || fabs(exponent) >= precision )
- exp_sign -= 2; // g -> e and G -> E
+ exp_sign -= 2; // g -> e and G -> E
+ else
+ exp_sign = 'f';
}
if ( exp_sign == 'e' || exp_sign == 'E' ) {
else if ( frac < -0.5 )
e--;
- result = numberf(f,__n/pow(10.0L,e),'f',size-4, precision, type);
+ result = numberf(f,__n/pow(10.0L,(long double)e),'f',size-4, precision, type);
if (result < 0)
return false;
f += exp_sign;
{
type |= ZEROTRUNC;
if ( exponent < -4 || fabs(exponent) >= precision )
- exp_sign -= 2; // g -> e and G -> E
+ exp_sign -= 2; // g -> e and G -> E
+ else
+ exp_sign = L'f';
}
if ( exp_sign == L'e' || exp_sign == L'E' )
else if ( frac < -0.5 )
e--;
- result = wnumberf(f,__n/pow(10.0L,e),L'f',size-4, precision, type);
+ result = wnumberf(f,__n/pow(10.0L,(long double) e),L'f',size-4, precision, type);
if (result < 0)
return false;
f += exp_sign;
if ( exp_sign == 'g' || exp_sign == 'G' ) {
type |= ZEROTRUNC;
if ( exponent < -4 || fabs(exponent) >= precision )
- exp_sign -= 2; // g -> e and G -> E
+ exp_sign -= 2; // g -> e and G -> E
+ else
+ exp_sign = 'f';
}
if ( exp_sign == 'e' || exp_sign == 'E' ) {
{
while ( intr > 0.0 )
{
- p=intr;
+ p=intr;
intr/=10.0L;
modfl(intr, &intr);
if ( exp_sign == L'g' || exp_sign == L'G' ) {
type |= ZEROTRUNC;
if ( exponent < -4 || fabs(exponent) >= precision )
- exp_sign -= 2; // g -> e and G -> E
+ exp_sign -= 2; // g -> e and G -> E
+ else
+ exp_sign = 'f';
}
if ( exp_sign == L'e' || exp_sign == L'E' ) {