66 { 480, ',', CF_TOEURO_2002, "GRD ", "" }, |
66 { 480, ',', CF_TOEURO_2002, "GRD ", "" }, |
67 { 2, ',', 0, "CHF ", "" }, |
67 { 2, ',', 0, "CHF ", "" }, |
68 { 3, ',', CF_TOEURO_2002, "NLG ", "" }, |
68 { 3, ',', CF_TOEURO_2002, "NLG ", "" }, |
69 { 2730,',', CF_TOEURO_2002, "ITL ", "" }, |
69 { 2730,',', CF_TOEURO_2002, "ITL ", "" }, |
70 { 13, '.', 0, "", " kr" }, |
70 { 13, '.', 0, "", " kr" }, |
71 { 5, ' ', 0, "", " rur" }, |
71 { 5, ' ', 0, "", " rur" }, |
72 { 50, ',', 0, "", " Kc" }, |
72 { 50, ',', 0, "", " Kc" }, |
73 { 130, '.', 0, "", " kr" }, |
73 { 130, '.', 0, "", " kr" }, |
74 { 11, '.', 0, "", " kr" }, |
74 { 11, '.', 0, "", " kr" }, |
75 { 2, ',', CF_ISEURO, "€", "" }, |
75 { 2, ',', CF_ISEURO, "€", "" }, |
76 }; |
76 }; |
169 error("!String 0x%X is invalid. Probably because an old version of the .lng file.\n", string); |
169 error("!String 0x%X is invalid. Probably because an old version of the .lng file.\n", string); |
170 |
170 |
171 return DecodeString(buffr, GetStringPtr(string)); |
171 return DecodeString(buffr, GetStringPtr(string)); |
172 } |
172 } |
173 |
173 |
174 void InjectDparam(int amount) |
174 void InjectDparam(int amount) |
175 { |
175 { |
176 memmove(_decode_parameters + amount, _decode_parameters, sizeof(_decode_parameters) - amount * sizeof(uint32)); |
176 memmove(_decode_parameters + amount, _decode_parameters, sizeof(_decode_parameters) - amount * sizeof(uint32)); |
177 } |
177 } |
178 |
178 |
179 |
179 |
180 int32 GetParamInt32() |
180 int32 GetParamInt32() |
181 { |
181 { |
350 number = (number + 500000) / 1000000; |
350 number = (number + 500000) / 1000000; |
351 compact = 'M'; |
351 compact = 'M'; |
352 } else if (number >= 1000000) { |
352 } else if (number >= 1000000) { |
353 number = (number + 500) / 1000; |
353 number = (number + 500) / 1000; |
354 compact = 'k'; |
354 compact = 'k'; |
355 } |
355 } |
356 } |
356 } |
357 |
357 |
358 // convert to ascii number and add commas |
358 // convert to ascii number and add commas |
359 p = buf; |
359 p = buf; |
360 j = 4; |
360 j = 4; |
361 do { |
361 do { |
362 if (--j == 0) { *p++ = spec->separator; j = 3; } |
362 if (--j == 0) { *p++ = spec->separator; j = 3; } |
363 *p++ = '0' + number % 10; |
363 *p++ = '0' + number % 10; |
364 } while (number /= 10); |
364 } while (number /= 10); |
365 do *buff++ = *--p; while (p != buf); |
365 do *buff++ = *--p; while (p != buf); |
366 |
366 |
451 uint16 cargo_str = _cargo_string_list[_opt.landscape][(byte)GetParamInt8()]; |
451 uint16 cargo_str = _cargo_string_list[_opt.landscape][(byte)GetParamInt8()]; |
452 uint16 multiplier = (cargo_str == STR_LITERS) ? 1000 : 1; |
452 uint16 multiplier = (cargo_str == STR_LITERS) ? 1000 : 1; |
453 // liquid type of cargo is multiplied by 100 to get correct amount |
453 // liquid type of cargo is multiplied by 100 to get correct amount |
454 buff = FormatCommaNumber(buff, GetParamInt16() * multiplier ); |
454 buff = FormatCommaNumber(buff, GetParamInt16() * multiplier ); |
455 s = GetStringPtr(cargo_str); |
455 s = GetStringPtr(cargo_str); |
456 |
456 |
457 memcpy(buff++, " ", 1); |
457 memcpy(buff++, " ", 1); |
458 while (*s) *buff++ = *s++; |
458 while (*s) *buff++ = *s++; |
459 break; |
459 break; |
460 } |
460 } |
461 |
461 |
787 char *lang = str_fmt("%s%s", _path.lang_dir, _dynlang.ent[lang_index].file); |
787 char *lang = str_fmt("%s%s", _path.lang_dir, _dynlang.ent[lang_index].file); |
788 lang_pack = ReadFileToMem(lang, &len, 100000); |
788 lang_pack = ReadFileToMem(lang, &len, 100000); |
789 free(lang); |
789 free(lang); |
790 } |
790 } |
791 if (lang_pack == NULL) return false; |
791 if (lang_pack == NULL) return false; |
792 if (len < sizeof(LanguagePackHeader) || |
792 if (len < sizeof(LanguagePackHeader) || |
793 HDR->ident != TO_LE32(LANGUAGE_PACK_IDENT) || |
793 HDR->ident != TO_LE32(LANGUAGE_PACK_IDENT) || |
794 HDR->version != TO_LE32(LANGUAGE_PACK_VERSION)) { |
794 HDR->version != TO_LE32(LANGUAGE_PACK_VERSION)) { |
795 free(lang_pack); |
795 free(lang_pack); |
796 return false; |
796 return false; |
797 } |
797 } |
798 #undef HDR |
798 #undef HDR |
799 |
799 |
800 #if defined(TTD_BIG_ENDIAN) |
800 #if defined(TTD_BIG_ENDIAN) |
801 for(i=0; i!=32; i++) { |
801 for(i=0; i!=32; i++) { |
802 ((LanguagePackHeader*)lang_pack)->offsets[i] = READ_LE_UINT16(&((LanguagePackHeader*)lang_pack)->offsets[i]); |
802 ((LanguagePackHeader*)lang_pack)->offsets[i] = READ_LE_UINT16(&((LanguagePackHeader*)lang_pack)->offsets[i]); |
803 } |
803 } |
804 #endif |
804 #endif |
853 // go through the language files and make sure that they are valid. |
853 // go through the language files and make sure that they are valid. |
854 for(i=m=0; i!=n; i++) { |
854 for(i=m=0; i!=n; i++) { |
855 char *s = str_fmt("%s%s", _path.lang_dir, files[i]); |
855 char *s = str_fmt("%s%s", _path.lang_dir, files[i]); |
856 in = fopen(s, "rb"); |
856 in = fopen(s, "rb"); |
857 free(s); |
857 free(s); |
858 if (!in || |
858 if (!in || |
859 (j = fread(&hdr, sizeof(hdr), 1, in), fclose(in), j) != 1 || |
859 (j = fread(&hdr, sizeof(hdr), 1, in), fclose(in), j) != 1 || |
860 hdr.ident != TO_LE32(LANGUAGE_PACK_IDENT) || |
860 hdr.ident != TO_LE32(LANGUAGE_PACK_IDENT) || |
861 hdr.version != TO_LE32(LANGUAGE_PACK_VERSION)) { |
861 hdr.version != TO_LE32(LANGUAGE_PACK_VERSION)) { |
862 free(files[i]); |
862 free(files[i]); |
863 continue; |
863 continue; |
864 } |
864 } |
865 |
865 |
866 dl->ent[m].file = files[i]; |
866 dl->ent[m].file = files[i]; |
867 dl->ent[m].name = strdup(hdr.name); |
867 dl->ent[m].name = strdup(hdr.name); |
868 |
868 |
869 if (!strcmp(hdr.name, "English")) def = m; |
869 if (!strcmp(hdr.name, "English")) def = m; |
870 |
870 |
871 m++; |
871 m++; |
872 } |
872 } |
873 |
873 |
874 if (m == 0) |
874 if (m == 0) |
875 error(n == 0 ? "No available language packs" : "Invalid version of language packs"); |
875 error(n == 0 ? "No available language packs" : "Invalid version of language packs"); |
876 |
876 |
877 dl->num = m; |
877 dl->num = m; |
878 for(i=0; i!=dl->num; i++) |
878 for(i=0; i!=dl->num; i++) |
879 dl->dropdown[i] = SPECSTR_LANGUAGE_START + i; |
879 dl->dropdown[i] = SPECSTR_LANGUAGE_START + i; |
880 dl->dropdown[i] = INVALID_STRING_ID; |
880 dl->dropdown[i] = INVALID_STRING_ID; |
881 |
881 |