int __GetLCIDFromName(const char* lname, LCID* lcid, char* cp) { char lang[MAX_LANG_LEN+1], ctry[MAX_CTRY_LEN+1], page[MAX_CP_LEN+1]; int result = 0; if(lname==NULL || lname[0]==0) { *lcid=LOCALE_USER_DEFAULT; return 0; } memset(lang, 0, MAX_LANG_LEN+1); memset(ctry, 0, MAX_CTRY_LEN+1); memset(page, 0, MAX_CP_LEN+1); if(__ParseLocaleString(lname, lang, ctry, page)==-1) return -1; if(lang[0] == 0 && ctry[0] == 0) *lcid = LOCALE_USER_DEFAULT; // Only code page given. else { if(ctry[0] == 0) result = __GetLCID(__ConvertName(lang, __rg_language, sizeof(__rg_language)/sizeof(LOCALECONV)), NULL, lcid); else result = __GetLCID(__ConvertName(lang, __rg_language, sizeof(__rg_language)/sizeof(LOCALECONV)), __ConvertName(ctry, __rg_country, sizeof(__rg_country)/sizeof(LOCALECONV)), lcid); } if(result==0) { // Handling code page if(lstrcmpiA(page, "ACP")==0 || page[0]==0) my_ltoa(__intGetACP(*lcid), cp); else if(lstrcmpiA(page, "OCP")==0) my_ltoa(__intGetOCP(*lcid), cp); else strncpy(cp, page, 5); } return result; }
char* fp_itoa(char * buf, s32fp a) { int sign = a < 0?-1:1; int32_t nat = (sign * a) >> FRAC_DIGITS; uint32_t frac = ((UTOA_FRACDEC * ((sign * a) & FRAC_MASK))) >> FRAC_DIGITS; char *p = buf; if (sign < 0) { *p = '-'; p++; } p += my_ltoa(p, nat, 10); *p = '.'; p++; for (uint32_t dec = UTOA_FRACDEC / 10; dec > 1; dec /= 10) { if ((frac / dec) == 0) { *p = '0'; p++; } } my_ltoa(p, frac, 10); return buf; }
const char* _Locale_common_default(char* buf) { char cp[MAX_CP_LEN+1]; int CodePage=__intGetACP(LOCALE_USER_DEFAULT); if(!CodePage) CodePage=__intGetOCP(LOCALE_USER_DEFAULT); my_ltoa(CodePage, cp); return __GetLocaleName(LOCALE_USER_DEFAULT, cp, buf); }
char* _Locale_ctype_name(const void* loc, char* buf) { char cp_buf[MAX_CP_LEN+1]; _Locale_ctype_t* ltype=(_Locale_ctype_t*)loc; my_ltoa(ltype->cp, cp_buf); return __GetLocaleName(ltype->lcid, cp_buf, buf); }
int check_branch( STACK *stack, unsigned offset, int min, int max) { int s_offset; /* Sign-extend */ if (offset & 0100000) s_offset = offset | ~0177777; else s_offset = offset & 077777; if (s_offset > max || s_offset < min) { char temp[16]; /* printf can't do signed octal. */ my_ltoa(s_offset, temp, 8); report(stack->top, "Branch target out of range (distance=%s)\n", temp); return 0; } return 1; }