{
int *dataptr = (int *) &format;
char c, *ptr, str[16];
+ int ll;
// Mask out unwanted debug messages
if (!(Mask & DebugPrintMask))
}
dataptr++;
-
+ ll = 0;
while ((c = *(format++)))
{
if (c != '%')
}
else
{
+ if (*format == 'I' && *(format+1) == '6' && *(format+2) == '4')
+ {
+ ll = 1;
+ format += 3;
+ }
+ else
+ {
+ ll = 0;
+ }
switch (c = *(format++))
{
case 'd': case 'u': case 'x':
- *convert_to_ascii(str, c, *((unsigned long *) dataptr++)) = 0;
+ if (ll)
+ {
+ *convert_i64_to_ascii(str, c, *((unsigned long long*) dataptr)) = 0;
+ dataptr += 2;
+ }
+ else
+ {
+ *convert_to_ascii(str, c, *((unsigned long *) dataptr++)) = 0;
+ }
ptr = str;
int isxdigit(int c);
char * convert_to_ascii(char *buf, int c, ...);
+char * convert_i64_to_ascii(char *buf, int c, ...);
void putchar(int ch); // Implemented in asmcode.S
int kbhit(void); // Implemented in asmcode.S
{
int *dataptr = (int *) &format;
char c, *ptr, str[16];
+ int ll;
dataptr++;
}
else
{
+ if (*format == 'I' && *(format+1) == '6' && *(format+2) == '4')
+ {
+ ll = 1;
+ format += 3;
+ }
+ else
+ {
+ ll = 0;
+ }
switch (c = *(format++))
{
case 'd': case 'u': case 'x':
- *convert_to_ascii(str, c, *((unsigned long *) dataptr++)) = 0;
+ if (ll)
+ {
+ *convert_i64_to_ascii(str, c, *((unsigned long long *) dataptr++)) = 0;
+ }
+ else
+ {
+ *convert_to_ascii(str, c, *((unsigned long *) dataptr++)) = 0;
+ }
ptr = str;
int *dataptr = (int *) &format;
char c, *ptr, str[16];
char *p = buffer;
+ int ll;
dataptr++;
}
else
{
+ if (*format == 'I' && *(format+1) == '6' && *(format+2) == '4')
+ {
+ ll = 1;
+ format += 3;
+ }
+ else
+ {
+ ll = 0;
+ }
switch (c = *(format++))
{
case 'd': case 'u': case 'x':
- *convert_to_ascii(str, c, *((unsigned long *) dataptr++)) = 0;
-
+ if (ll)
+ {
+ *convert_i64_to_ascii(str, c, *((unsigned long long*) dataptr++)) = 0;
+ }
+ else
+ {
+ *convert_to_ascii(str, c, *((unsigned long *) dataptr++)) = 0;
+ }
+
ptr = str;
while (*ptr)
return ptr;
}
+char *convert_i64_to_ascii(char *buf, int c, ...)
+{
+ unsigned long long num = *(long long*)((&c) + 1);
+ int mult = 10;
+ char *ptr = buf;
+
+ if (c == 'x')
+ mult = 16;
+
+ if ((num & 0x8000000000000000uLL) && c == 'd')
+ {
+ num = (~num)+1;
+ *(ptr++) = '-';
+ buf++;
+ }
+
+ do
+ {
+ int dig = num % mult;
+ *(ptr++) = ( (dig > 9) ? dig + 'a' - 10 : '0' + dig );
+ }
+ while (num /= mult);
+
+ /* reorder to correct direction!! */
+ {
+ char *ptr1 = ptr-1;
+ char *ptr2 = buf;
+ while (ptr1 > ptr2)
+ {
+ int c = *ptr1;
+ *ptr1 = *ptr2;
+ *ptr2 = c;
+ ptr1--;
+ ptr2++;
+ }
+ }
+
+ return ptr;
+}
+
char *itoa(int value, char *string, int radix)
{
if(radix == 16)