bool LoadStringList(const char *section, ccollect< carray<char> > &list) { char name[64]; list.clear(); for (int i=1; ; i++) { snprintf(name, sizeof(name), "v%i", i); carray<char> s = RegReadString(section, name, ""); if (!s.ptr() || !s[0]) break; list.append(s); } return true; }
static bool LangListLoad(sys_char_t *fileName, ccollect<LangListNode> &list) { list.clear(); try { BFile f; f.Open(fileName); char buf[4096]; while (f.GetStr(buf, sizeof(buf))) { char *s = buf; while (IsSpace(*s)) s++; if (*s == '#') continue; if (!*s) continue; ccollect<char,0x100> id; ccollect<char,0x100> name; while (*s && !IsSpace(*s)) { id.append(*s); s++; } while (IsSpace(*s)) s++; int lastNs = -1; for (int i = 0; *s; i++, s++) { if (*s == '#') break; if (!IsSpace(*s)) lastNs = i; name.append(*s); } if (id.count()<=0 || lastNs < 0) continue; id.append(0); name.append(0); name[lastNs + 1] = 0; LangListNode(id.ptr(), name.ptr()); list.append(LangListNode(id.ptr(), name.ptr()) ); } } catch (cexception *ex) { ex->destroy(); return false; } return true; }
void InitOperCharsets() { csList.clear(); charset_struct *list[128]; int count = charset_table.GetList(list, 128); cstrhash<charset_struct*> hash; int i; for (i = 0; i<count; i++) hash[list[i]->name] = list[i]; ccollect< carray<char> > stringList; if (LoadStringList(charsetSection, stringList)) { for (i = 0; i<stringList.count(); i++) { charset_struct ** p = hash.exist(stringList[i].ptr()); if (p) csList.append(*p); } } if (csList.count()<=0) { const char *lang = sys_locale_lang(); if (!strcmp("ru", lang)) { #ifdef WIN32 csList.append(charset_table[CS_WIN1251]); csList.append(charset_table[CS_CP866]); csList.append(charset_table[CS_UTF8]); #else csList.append(charset_table[CS_UTF8]); csList.append(charset_table[CS_WIN1251]); csList.append(charset_table[CS_KOI8R]); csList.append(charset_table[CS_CP866]); #endif } } if (csList.count()<=0) { csList.append(charset_table[CS_UTF8]); csList.append(&charsetLatin1); } }