Fixed printing of longs

git-svn-id: http://picoc.googlecode.com/svn/trunk@393 21eae674-98b7-11dd-bd71-f92a316d2d60
This commit is contained in:
zik.saleeba 2009-11-07 21:12:12 +00:00
parent c3dcac1812
commit fcc6fd6846
2 changed files with 14 additions and 14 deletions

View file

@ -66,7 +66,7 @@ void PrintRepeatedChar(char ShowChar, int Length, struct OutputStream *Stream)
} }
/* print an unsigned integer to a stream without using printf/sprintf */ /* print an unsigned integer to a stream without using printf/sprintf */
void PrintUnsigned(unsigned int Num, unsigned int Base, int FieldWidth, int ZeroPad, int LeftJustify, struct OutputStream *Stream) void PrintUnsigned(unsigned long Num, unsigned int Base, int FieldWidth, int ZeroPad, int LeftJustify, struct OutputStream *Stream)
{ {
char Result[33]; char Result[33];
int ResPos = sizeof(Result); int ResPos = sizeof(Result);
@ -77,8 +77,8 @@ void PrintUnsigned(unsigned int Num, unsigned int Base, int FieldWidth, int Zero
Result[--ResPos] = '\0'; Result[--ResPos] = '\0';
while (Num > 0) while (Num > 0)
{ {
unsigned int NextNum = Num / Base; unsigned long NextNum = Num / Base;
unsigned int Digit = Num - NextNum * Base; unsigned long Digit = Num - NextNum * Base;
if (Digit < 10) if (Digit < 10)
Result[--ResPos] = '0' + Digit; Result[--ResPos] = '0' + Digit;
else else
@ -97,7 +97,7 @@ void PrintUnsigned(unsigned int Num, unsigned int Base, int FieldWidth, int Zero
} }
/* print an integer to a stream without using printf/sprintf */ /* print an integer to a stream without using printf/sprintf */
void PrintInt(int Num, int FieldWidth, int ZeroPad, int LeftJustify, struct OutputStream *Stream) void PrintInt(long Num, int FieldWidth, int ZeroPad, int LeftJustify, struct OutputStream *Stream)
{ {
if (Num < 0) if (Num < 0)
{ {
@ -107,7 +107,7 @@ void PrintInt(int Num, int FieldWidth, int ZeroPad, int LeftJustify, struct Outp
FieldWidth--; FieldWidth--;
} }
PrintUnsigned((unsigned int)Num, 10, FieldWidth, ZeroPad, LeftJustify, Stream); PrintUnsigned((unsigned long)Num, 10, FieldWidth, ZeroPad, LeftJustify, Stream);
} }
#ifndef NO_FP #ifndef NO_FP
@ -129,13 +129,13 @@ void PrintFP(double Num, struct OutputStream *Stream)
Exponent = math_log10(Num) - 0.999999999; Exponent = math_log10(Num) - 0.999999999;
Num /= math_pow(10.0, Exponent); Num /= math_pow(10.0, Exponent);
PrintInt((int)Num, 0, FALSE, FALSE, Stream); PrintInt((long)Num, 0, FALSE, FALSE, Stream);
PrintCh('.', Stream); PrintCh('.', Stream);
Num = (Num - (int)Num) * 10; Num = (Num - (long)Num) * 10;
if (math_abs(Num) >= 1e-7) if (math_abs(Num) >= 1e-7)
{ {
for (MaxDecimal = 6; MaxDecimal > 0 && math_abs(Num) >= 1e-7; Num = (Num - (int)(Num + 1e-7)) * 10, MaxDecimal--) for (MaxDecimal = 6; MaxDecimal > 0 && math_abs(Num) >= 1e-7; Num = (Num - (long)(Num + 1e-7)) * 10, MaxDecimal--)
PrintCh('0' + (int)(Num + 1e-7), Stream); PrintCh('0' + (long)(Num + 1e-7), Stream);
} }
else else
PrintCh('0', Stream); PrintCh('0', Stream);
@ -256,10 +256,10 @@ void GenericPrintf(struct ParseState *Parser, struct Value *ReturnValue, struct
break; break;
} }
case 'd': PrintInt(ExpressionCoerceInteger(NextArg), FieldWidth, ZeroPad, LeftJustify, Stream); break; case 'd': PrintInt(ExpressionCoerceInteger(NextArg), FieldWidth, ZeroPad, LeftJustify, Stream); break;
case 'u': PrintUnsigned((unsigned int)ExpressionCoerceInteger(NextArg), 10, FieldWidth, ZeroPad, LeftJustify, Stream); break; case 'u': PrintUnsigned(ExpressionCoerceUnsignedInteger(NextArg), 10, FieldWidth, ZeroPad, LeftJustify, Stream); break;
case 'x': PrintUnsigned((unsigned int)ExpressionCoerceInteger(NextArg), 16, FieldWidth, ZeroPad, LeftJustify, Stream); break; case 'x': PrintUnsigned(ExpressionCoerceUnsignedInteger(NextArg), 16, FieldWidth, ZeroPad, LeftJustify, Stream); break;
case 'b': PrintUnsigned((unsigned int)ExpressionCoerceInteger(NextArg), 2, FieldWidth, ZeroPad, LeftJustify, Stream); break; case 'b': PrintUnsigned(ExpressionCoerceUnsignedInteger(NextArg), 2, FieldWidth, ZeroPad, LeftJustify, Stream); break;
case 'c': PrintCh(ExpressionCoerceInteger(NextArg), Stream); break; case 'c': PrintCh(ExpressionCoerceUnsignedInteger(NextArg), Stream); break;
#ifndef NO_FP #ifndef NO_FP
case 'f': PrintFP(ExpressionCoerceFP(NextArg), Stream); break; case 'f': PrintFP(ExpressionCoerceFP(NextArg), Stream); break;
#endif #endif

View file

@ -375,7 +375,7 @@ void *VariableDereferencePointer(struct ParseState *Parser, struct Value *Pointe
void LibraryInit(struct Table *GlobalTable, const char *LibraryName, struct LibraryFunction (*FuncList)[]); void LibraryInit(struct Table *GlobalTable, const char *LibraryName, struct LibraryFunction (*FuncList)[]);
void CLibraryInit(); void CLibraryInit();
void PrintCh(char OutCh, struct OutputStream *Stream); void PrintCh(char OutCh, struct OutputStream *Stream);
void PrintInt(int Num, int FieldWidth, int ZeroPad, int LeftJustify, struct OutputStream *Stream); void PrintInt(long Num, int FieldWidth, int ZeroPad, int LeftJustify, struct OutputStream *Stream);
void PrintStr(const char *Str, struct OutputStream *Stream); void PrintStr(const char *Str, struct OutputStream *Stream);
void PrintFP(double Num, struct OutputStream *Stream); void PrintFP(double Num, struct OutputStream *Stream);
void PrintType(struct ValueType *Typ, struct OutputStream *Stream); void PrintType(struct ValueType *Typ, struct OutputStream *Stream);