char *nls_maketime(int mode, int hour, int minute, int second, int fraction) { char buf[4 + 4 + sizeof(int) * 8 * 4 + 6]; char *p, *q; int i, pm; #ifdef FEATURE_NLS refreshNLS(); #define fmt nlsBuf->timefmt #define sep nlsBuf->timeSep #define dsep nlsBuf->decimalSep #else #define fmt 0 #define sep ":" #define dsep "." #endif /** Warning: condition always true -- if !NLS **/ if(fmt == 0) { /* 12hour display */ if((pm = hour >= 12) != 0) { hour -= 12; } if(hour == 0) hour = 12; i = sprintf(p = buf, "%2u%s%02u", hour, sep, minute); } else { /** Warning: unreachable code -- if !defined(NLS) **/ i = sprintf(p = buf, "%02u%s%02u", hour, sep, minute); } if(i == EOF) return 0; if(second >= 0) { i = sprintf(p += i, "%s%02u", sep, second); if(i == EOF) return 0; if(fraction) { i = sprintf(p += i, "%s%u", dsep, fraction); if(i == EOF) return 0; } } /** Warning: conditional always true -- if !NLS **/ if(fmt == 0) { q = getString(pm? TEXT_STRING_PM: TEXT_STRING_AM); if(!q) return 0; if(mode & NLS_MAKE_SHORT_AMPM) { *(p += i) = *ltrimsp(q); p[1] = 0; } else strcpy(p + i, q); } return strdup(buf); }
static int is_delim(int c) { /* * is character a delimeter when used on first word? */ #ifdef FEATURE_NLS refreshNLS(); /* refresh the NLS information */ #define uc unsigned char return c < (uc)nlsBuf->inclFirst || c > (uc)nlsBuf->inclLast || (c >= (uc)nlsBuf->exclFirst && c <= (uc)nlsBuf->exclLast) || _fmemchr(nlsBuf->illegalChars, c, nlsBuf->illegalLen); #undef uc #else return c <= ' ' || c == 0x7f || strchr(".\"/\\[]:|<>+=;,", c); #endif }
void convert(unsigned long num, char * const des) { char temp[sizeof(num) * 8]; int c = 0; assert(des); if(num == 0) { des[0] = '0'; des[1] = 0; } else { refreshNLS(); assert(nlsBuf); temp[31] = 0; do { if (((c + 1) % 4) == 0) temp[30 - c++] = nlsBuf->thousendsSep[0]; temp[30 - c++] = (char)(num % 10) + '0'; } while((num /= 10) != 0); strcpy(des, &temp[31 - c]); } }