EXPORT(ModUtil_LookupString);
EXPORT(ModUtil_SetIdent);
EXPORT(UnHex);
+EXPORT(SwapEndian16);
+EXPORT(SwapEndian32);
// === CODE ===
/**
int vsnprintf(char *__s, size_t __maxlen, const char *__format, va_list args)
{
char c, pad = ' ';
- int minSize = 0, len;
+ int minSize = 0, precision = -1, len;
char tmpBuf[34]; // For Integers
const char *p = NULL;
int isLongLong = 0;
}
// - Padding Side Flag
- if(c == '+') {
+ if(c == '-') {
bPadLeft = 1;
c = *__format++;
}
}
}
else
- minSize = 1;
+ minSize = 0;
+
+ // - Precision
+ precision = -1;
+ if( c == '.' ) {
+ c = *__format++;
+
+ if(c == '*') { // Dynamic length
+ precision = va_arg(args, unsigned int);
+ c = *__format++;
+ }
+ else if('1' <= c && c <= '9')
+ {
+ precision = 0;
+ while('0' <= c && c <= '9')
+ {
+ precision *= 10;
+ precision += c - '0';
+ c = *__format++;
+ }
+ }
+ }
// - Default, Long or LongLong?
isLongLong = 0;
// String - Null Terminated Array
case 's':
p = va_arg(args, char*); // Get Argument
- if( !CheckString(p) ) continue; // Avoid #PFs
+ if( !CheckString(p) ) p = "(inval)"; // Avoid #PFs
printString:
if(!p) p = "(null)";
len = strlen(p);
if( !bPadLeft ) while(len++ < minSize) PUTCH(pad);
- while(*p) PUTCH(*p++);
+ while(*p && precision--) PUTCH(*p++);
if( bPadLeft ) while(len++ < minSize) PUTCH(pad);
break;
}
return i/2;
}
+
+Uint16 SwapEndian16(Uint16 Val)
+{
+ return ((Val&0xFF)<<8) | ((Val>>8)&0xFF);
+}
+Uint32 SwapEndian32(Uint32 Val)
+{
+ return ((Val&0xFF)<<24) | ((Val&0xFF00)<<8) | ((Val>>8)&0xFF00) | ((Val>>24)&0xFF);
+}