Okay final version. Pulled out all the stops now... Only two divs or mods in the whole thing. I even got rid of two gotos! Time to retire this one:
Code:
int iMalcsUltimateFormat(long snum, char s[])
{
char *ps = s;
unsigned long num1 = snum, num2, num3, div;
if (snum < 0) {
*ps++ = '-';
num1 = -snum;
}
if (num1 < 10000) {
if (num1 < 10) goto L1;
if (num1 < 100) goto L2;
if (num1 < 1000) goto L3;
} else {
num2 = num1 / 10000;
num1 -= num2 * 10000;
if (num2 < 10000) {
if (num2 < 10) goto L5;
if (num2 < 100) goto L6;
if (num2 < 1000) goto L7;
} else {
num3 = num2 / 10000;
num2 -= num3 * 10000;
if (num3 >= 10) {
*ps++ = '0' + (char)(div = (num3*6554UL)>>16); num3 -= div*10;
*ps++ = ',';
}
*ps++ = '0' + (char)(num3);
}
*ps++ = '0' + (char)(div = (num2*8389UL)>>23); num2 -= div*1000;
L7:
*ps++ = '0' + (char)(div = (num2*5243UL)>>19); num2 -= div*100;
*ps++ = ',';
L6:
*ps++ = '0' + (char)(div = (num2*6554UL)>>16); num2 -= div*10;
L5:
*ps++ = '0' + (char)(num2);
}
*ps++ = '0' + (char)(div = (num1*8389UL)>>23); num1 -= div*1000;
*ps++ = ',';
L3:
*ps++ = '0' + (char)(div = (num1*5243UL)>>19); num1 -= div*100;
L2:
*ps++ = '0' + (char)(div = (num1*6554UL)>>16); num1 -= div*10;
L1:
*ps++ = '0' + (char)(num1);
*ps = '\0';
return ps - s;
}