37 {
"English",
"", {127,0,176,0,0}, 589986744},
38 {
"German",
"gr", {164,0,176,0,0}, -1132430286 },
39 {
"French",
"fr", {164,0,176,0,0}, 0 },
40 {
"Polish",
"pl", {127,0,176,0,0}, -1131728960},
60 #define XSTR_SIZE 1638
77 #define PARSE_TEXT_BUF_SIZE PARSE_BUF_SIZE
78 #define PARSE_ID_BUF_SIZE 5
79 #define LCL_MAX_STRINGS 4500
111 char lang_string[128];
128 mprintf((
"TABLES: Unable to parse '%s'! Error message = %s.\n",
"strings.tbl", e.what()));
135 if ((
int)Lcl_languages.size() == 1) {
137 Lcl_languages.push_back(Lcl_builtin_languages[i]);
143 memset(lang_string, 0, 128);
157 for(idx = 0; idx < (
int)Lcl_languages.size(); idx++){
158 if(!
stricmp(Lcl_languages[idx].lang_name, lang_string)){
167 Assert((lang_init >= 0) && (lang_init < (
int)Lcl_languages.size()));
212 for (i = 0; i < (
int)Lcl_languages.size(); i++) {
213 if (!strcmp(Lcl_languages[i].lang_name, language.
lang_name)) {
222 if (lang_idx == -1) {
223 Lcl_languages.push_back(language);
234 char language_tag[512];
236 char *p_offset = NULL;
237 int offset_lo = 0, offset_hi = 0;
243 memset(language_tag, 0,
sizeof(language_tag));
252 mprintf((
"Current language not found in %s\n", filename));
258 int num_offsets_on_this_line = 0;
270 error_display(0,
"Invalid tstrings table index specified (%i). Please increment LCL_MAX_STRINGS in localize.cpp.", index);
273 Error(
LOCATION,
"Invalid strings table index specified (%i)", index);
280 if ( !isspace(buf[i]) )
301 num_offsets_on_this_line = 1;
313 num_offsets_on_this_line = 2;
316 p_offset = &buf[i+1];
327 for (i = 1; buf[
i]; i++) {
351 }
else if ( !external && (Xstr_table[index].str != NULL) ) {
352 vm_free((
void *) Xstr_table[index].str);
358 Warning(
LOCATION,
"Tstrings table index %d used more than once", index);
359 }
else if (!external && (Xstr_table[index].str != NULL)) {
360 Warning(
LOCATION,
"Strings table index %d used more than once", index);
376 if (p_offset != NULL) {
377 if (sscanf(p_offset,
"%d%d", &offset_lo, &offset_hi) < num_offsets_on_this_line) {
385 if (num_offsets_on_this_line == 2)
414 Xstr_table[i].str = NULL;
426 mprintf((
"TABLES: Unable to parse '%s'! Error message = %s.\n",
"strings.tbl", e.what()));
438 mprintf((
"TABLES: Unable to parse '%s'! Error message = %s.\n",
"tstrings.tbl", e.what()));
454 if (Xstr_table[i].str != NULL) {
455 vm_free((
void *) Xstr_table[i].str);
456 Xstr_table[
i].
str = NULL;
474 nprintf((
"General",
"Setting language to %s\n", Lcl_languages[lang].lang_name));
515 path_len = strlen(current_path);
521 last_char = current_path[path_len - 1];
543 size_t str_size = path_max + 1;
545 char *
temp =
new char[str_size];
546 memset(temp, 0, str_size *
sizeof(
char));
551 if (last_slash == NULL) {
552 strncpy(temp, current_path, path_max);
553 current_path[0] =
'\0';
555 strncpy(temp, last_slash+1, path_max);
556 last_slash[1] =
'\0';
564 strcat_s(current_path, path_max, temp);
585 size_t len = temp_text.copy(text, max_len);
622 size_t len = temp_text.copy(text, max_len);
658 str_len = strlen(in);
662 if (str_len > max_len)
663 error_display(0,
"Token too long: [%s]. Length = %i. Max is %i.\n", in, str_len, max_len);
665 strncpy(out, in, max_len);
676 if (str_len > max_len)
677 error_display(0,
"Token too long: [%s]. Length = %i. Max is %i.\n", in, str_len, max_len);
679 strncpy(out, in, max_len);
689 if (str_len > max_len)
690 error_display(0,
"Token too long: [%s]. Length = %i. Max is %i.\n", in, str_len, max_len);
692 strncpy(out, in, max_len);
700 if (str_len > max_len)
701 error_display(0,
"Token too long: [%s]. Length = %i. Max is %i.\n", in, str_len, max_len);
703 strncpy(out, in, max_len);
713 if ( strlen(text_str) > max_len )
714 error_display(0,
"Token too long: [%s]. Length = %i. Max is %i.\n", text_str, strlen(text_str), max_len);
716 strncpy(out, text_str, max_len);
734 if ( strlen(text_str) > max_len )
735 error_display(0,
"Token too long: [%s]. Length = %i. Max is %i.\n", text_str, strlen(text_str), max_len);
740 strncpy(out, text_str, max_len);
761 if (in.length() < 9) {
771 if (in.compare(0, 4,
"XSTR")) {
863 if (Xstr_table[index].str)
889 int str_start, str_end;
895 str_len = strlen(xstr);
899 str_start = str_end = 0;
900 p = strstr(xstr,
"\"");
905 str_start = p - xstr + 1;
908 if((p - xstr) >= str_len){
914 p2 = strstr(p+1,
"\"");
924 error_display(0,
"String cannot fit within XSTR buffer!\n\n%s\n", xstr);
929 memcpy(out, xstr + str_start, str_end - str_start);
938 size_t open_quote_pos, close_quote_pos;
942 open_quote_pos = xstr.find(
'\"');
943 if (open_quote_pos == SCP_string::npos) {
944 error_display(0,
"Error parsing XSTR() tag %s\n", xstr.c_str());
949 close_quote_pos = xstr.find(
'\"', open_quote_pos+1);
950 if (close_quote_pos == SCP_string::npos) {
951 error_display(0,
"Error parsing XSTR() tag %s\n", xstr.c_str());
956 out.assign(xstr, open_quote_pos + 1, close_quote_pos - open_quote_pos - 1);
965 const char *
p, *pnext;
971 str_len = strlen(xstr);
974 p = strchr(xstr,
'"');
976 error_display(0,
"Error parsing id# in XSTR() tag %s\n", xstr);
980 if((p - xstr) >= str_len){
981 error_display(0,
"Error parsing id# in XSTR() tag %s\n", xstr);
988 pnext = strchr(p,
'"');
990 error_display(0,
"Error parsing id# in XSTR() tag %s\n", xstr);
995 if(*(pnext - 1) !=
'\\'){
1005 pnext = strchr(p,
',');
1007 error_display(0,
"Error parsing id# in XSTR() tag %s\n", xstr);
1011 if((pnext - xstr) >= str_len){
1012 error_display(0,
"Error parsing id# in XSTR() tag %s\n", xstr);
1020 pnext = strchr(p+1,
')');
1022 error_display(0,
"Error parsing id# in XSTR() tag %s\n", xstr);
1030 strncpy(buf, p, pnext - p);
1047 p = xstr.find(
'\"');
1048 if (p == SCP_string::npos) {
1049 error_display(0,
"Error parsing id# in XSTR() tag %s\n", xstr.c_str());
1056 pnext = xstr.find(
'\"', p);
1057 if (pnext == SCP_string::npos) {
1058 error_display(0,
"Error parsing id# in XSTR() tag %s\n", xstr.c_str());
1063 if (xstr[pnext - 1] !=
'\\') {
1073 pnext = xstr.find(
',', p);
1074 if (pnext == SCP_string::npos) {
1075 error_display(0,
"Error parsing id# in XSTR() tag %s\n", xstr.c_str());
1082 pnext = xstr.find(
')', p);
1083 if (pnext == SCP_string::npos) {
1084 error_display(0,
"Error parsing id# in XSTR() tag %s\n", xstr.c_str());
1095 error_display(0,
"Error parsing id# in XSTR() tag %s\n", xstr.c_str());
1100 if ((pnext - p + 1) > 9) {
1101 error_display(0,
"Error parsing id# in XSTR() tag %s\n", xstr.c_str());
1104 memset(id_buf, 0, 10);
1105 xstr.copy(id_buf, pnext - p + 1, p);
1108 *out = atoi(id_buf);
1117 return ( (c ==
'-') || (c ==
'0') || (c ==
'1') || (c ==
'2') || (c ==
'3') || (c ==
'4') ||
1118 (c ==
'5') || (c ==
'6') || (c ==
'7') || (c ==
'8') || (c ==
'9') ) ? 1 : 0;
1136 if (!strcmp(name,
"Morning Star")) {
1137 strcpy(name,
"Morgenstern");
1138 }
else if (!strcmp(name,
"MorningStar")) {
1139 strcpy(name,
"Morgenstern D");
1140 }
else if (!strcmp(name,
"UD-8 Kayser")) {
1141 strcpy(name,
"Kayserstrahl");
1142 }
else if (!strcmp(name,
"UD-D Kayser")) {
1143 strcpy(name,
"Kayserstrahl");
1158 if (!
stricmp(name,
"Subspace Portal")) {
1159 strcpy(name,
"Subraum Portal");
1161 }
else if (!
stricmp(name,
"Alpha Wing")) {
1162 strcpy(name,
"Alpha");
1164 }
else if (!
stricmp(name,
"Beta Wing")) {
1165 strcpy(name,
"Beta");
1167 }
else if (!
stricmp(name,
"Zeta Wing")) {
1168 strcpy(name,
"Zeta");
1170 }
else if (!
stricmp(name,
"Capella Node")) {
1171 strcpy(name,
"Capella");
1173 }
else if (!
stricmp(name,
"Hostile")) {
1174 strcpy(name,
"Gegner");
1176 }
else if (!
stricmp(name,
"Hostile Craft")) {
1177 strcpy(name,
"Gegner");
1179 }
else if (!
stricmp(name,
"Rebel Wing")) {
1180 strcpy(name,
"Rebellen");
1182 }
else if (!
stricmp(name,
"Rebel Fleet")) {
1183 strcpy(name,
"Rebellenflotte");
1185 }
else if (!
stricmp(name,
"Sentry Gun")) {
1186 strcpy(name,
"Gesch\x81tz");
1188 }
else if (!
stricmp(name,
"Cargo")) {
1189 strcpy(name,
"Fracht");
1191 }
else if (!
stricmp(name,
"Knossos Device")) {
1192 strcpy(name,
"Knossosger\x84t");
1194 }
else if (!
stricmp(name,
"Support")) {
1195 strcpy(name,
"Versorger");
1197 }
else if (!
stricmp(name,
"Unknown")) {
1198 strcpy(name,
"Unbekannt");
1200 }
else if (!
stricmp(name,
"Instructor")) {
1201 strcpy(name,
"Ausbilder");
1203 }
else if (!
stricmp(name,
"Jump Node")) {
1204 strcpy(name,
"Sprungknoten");
1206 }
else if (!
stricmp(name,
"Escort")) {
1207 strcpy(name,
"Geleitschutz");
1209 }
else if (!
stricmp(name,
"Asteroid Field")) {
1210 strcpy(name,
"Asteroidenfeld");
1212 }
else if (!
stricmp(name,
"Enif Station")) {
1213 strcpy(name,
"Station Enif");
1215 }
else if (!
stricmp(name,
"Rally Point")) {
1216 strcpy(name,
"Sammelpunkt");
1218 }
else if ((pos = strstr(name,
"Transport")) != NULL) {
1224 }
else if ((pos = strstr(name,
"Jump Node")) != NULL) {
1230 }
else if (!
stricmp(name,
"Orion under repair")) {
1231 strcpy(name,
"Orion wird repariert");
1235 }
else if (!
stricmp(name,
"Wayfarer Station")) {
1236 strcpy(name,
"Station Wayfarer");
1237 }
else if (!
stricmp(name,
"Enemy")) {
1238 strcpy(name,
"Gegner");
1239 }
else if (!
stricmp(name,
"Supply Depot")) {
1240 strcpy(name,
"Nachschubdepot");
1241 }
else if (!
stricmp(name,
"Fighter Escort")) {
1242 strcpy(name,
"Jagdschutz");
1243 }
else if (!
stricmp(name,
"Shivans")) {
1244 strcpy(name,
"Shivaner");
1245 }
else if (!
stricmp(name,
"NTF Base of Operations")) {
1246 strcpy(name,
"NTF-Operationsbasis");
1247 }
else if (!
stricmp(name,
"NTF Bombers")) {
1248 strcpy(name,
"NTF-Bomber");
1249 }
else if (!
stricmp(name,
"NTF Fighters")) {
1250 strcpy(name,
"NTF-J\x84ger");
1251 }
else if (!
stricmp(name,
"Sentry")) {
1252 strcpy(name,
"Sperrgesch\x81tz");
1253 }
else if (!
stricmp(name,
"Cargo Containers")) {
1254 strcpy(name,
"Frachtbeh\x84lter");
1255 }
else if (!
stricmp(name,
"NTF Reinforcements")) {
1256 strcpy(name,
"NTF-Verst\x84rkungen");
1257 }
else if (!
stricmp(name,
"NTF Base")) {
1258 strcpy(name,
"NTF-St\x81tzpunkt");
1259 }
else if (!
stricmp(name,
"Refugee Convoy")) {
1260 strcpy(name,
"Fl\x81""chtlingskonvoi");
1261 }
else if (!
stricmp(name,
"Food Convoy")) {
1262 strcpy(name,
"Nachschubkonvoi");
1263 }
else if (!
stricmp(name,
"Governor's Shuttle")) {
1264 strcpy(name,
"F\x84hre des Gouverneurs");
1265 }
else if (!
stricmp(name,
"GTVA Patrol")) {
1266 strcpy(name,
"GTVA-Patrouille");
1267 }
else if (!
stricmp(name,
"Escort fighters")) {
1268 strcpy(name,
"Geleitschutz");
1269 }
else if (!
stricmp(name,
"Nagada Outpost")) {
1270 strcpy(name,
"Nagada-Aussenposten");
1271 }
else if (!
stricmp(name,
"Fighters")) {
1272 strcpy(name,
"J\x84ger");
1273 }
else if (!
stricmp(name,
"Bombers")) {
1274 strcpy(name,
"Bomber");
1275 }
else if (!
stricmp(name,
"Enemy Destroyers")) {
1276 strcpy(name,
"Feindliche Zerst\x94rer");
1277 }
else if (!
stricmp(name,
"Ross 128 System")) {
1278 strcpy(name,
"System Ross 128");
1279 }
else if (!
stricmp(name,
"Knossos Station")) {
1280 strcpy(name,
"Knossos-Station");
1281 }
else if (!
stricmp(name,
"Transporters")) {
1282 strcpy(name,
"Transporter");
1283 }
else if (!
stricmp(name,
"Pirates?")) {
1284 strcpy(name,
"Piraten?");
1285 }
else if (!
stricmp(name,
"Escorts")) {
1286 strcpy(name,
"Geleitschutz");
1287 }
else if (!
stricmp(name,
"Shivan Fighters")) {
1288 strcpy(name,
"J\x84ger");
1289 }
else if (!
stricmp(name,
"Shivan Territory")) {
1290 strcpy(name,
"Shivaner");
1305 if (!
stricmp(name,
"Subspace Portal")) {
1306 strcpy(name,
"Portal podprz.");
1308 }
else if (!
stricmp(name,
"Alpha Wing")) {
1309 strcpy(name,
"Alfa");
1311 }
else if (!
stricmp(name,
"Beta Wing")) {
1312 strcpy(name,
"Beta");
1314 }
else if (!
stricmp(name,
"Zeta Wing")) {
1315 strcpy(name,
"Zeta");
1317 }
else if (!
stricmp(name,
"Capella Node")) {
1318 strcpy(name,
"Capella");
1320 }
else if (!
stricmp(name,
"Hostile")) {
1321 strcpy(name,
"Wr\xF3g");
1323 }
else if (!
stricmp(name,
"Hostile Craft")) {
1324 strcpy(name,
"Wr\xF3g");
1326 }
else if (!
stricmp(name,
"Rebel Wing")) {
1327 strcpy(name,
"Rebelianci");
1329 }
else if (!
stricmp(name,
"Rebel Fleet")) {
1330 strcpy(name,
"Flota Rebelii");
1332 }
else if (!
stricmp(name,
"Sentry Gun")) {
1333 strcpy(name,
"Dzia\xB3o str.");
1335 }
else if (!
stricmp(name,
"Cargo")) {
1336 strcpy(name,
"\xA3\x61\x64unek");
1338 }
else if (!
stricmp(name,
"Knossos Device")) {
1339 strcpy(name,
"Urz. Knossos");
1341 }
else if (!
stricmp(name,
"Support")) {
1342 strcpy(name,
"Wsparcie");
1344 }
else if (!
stricmp(name,
"Unknown")) {
1345 strcpy(name,
"Nieznany");
1347 }
else if (!
stricmp(name,
"Instructor")) {
1348 strcpy(name,
"Instruktor");
1350 }
else if (!
stricmp(name,
"Jump Node")) {
1351 strcpy(name,
"W\xEAze\xB3 skokowy");
1353 }
else if (!
stricmp(name,
"Escort")) {
1354 strcpy(name,
"Eskorta");
1356 }
else if (!
stricmp(name,
"Asteroid Field")) {
1357 strcpy(name,
"Pole asteroid");
1359 }
else if (!
stricmp(name,
"Enif Station")) {
1360 strcpy(name,
"Stacja Enif");
1362 }
else if (!
stricmp(name,
"Rally Point")) {
1363 strcpy(name,
"Pkt zborny");
1365 }
else if ((pos = strstr(name,
"Transport")) != NULL) {
1371 }
else if ((pos = strstr(name,
"Jump Node")) != NULL) {
1373 strcpy_s(buf,
"W\xEAze\xB3 skokowy");
1377 }
else if (!
stricmp(name,
"Orion under repair")) {
1378 strcpy(name,
"Naprawiany Orion");
1390 if (!strcmp(name,
"GTDR Amazon Advanced")) {
1391 strcpy(name,
"GTDR Amazon VII");
1406 if ((pos = strstr(name,
"Sentry")) != NULL) {
1412 }
else if ((pos = strstr(name,
"Support")) != NULL) {
1418 }
else if ((pos = strstr(name,
"Unknown")) != NULL) {
1424 }
else if ((pos = strstr(name,
"Drone")) != NULL) {
1430 }
else if ((pos = strstr(name,
"Jump Node")) != NULL) {
1436 }
else if (!
stricmp(name,
"Instructor")) {
1437 strcpy(name,
"Ausbilder");
1439 }
else if (!
stricmp(name,
"NTF Vessel")) {
1440 strcpy(name,
"NTF-Schiff");
1442 }
else if (!
stricmp(name,
"Enif Station")) {
1443 strcpy(name,
"Station Enif");
1458 if ((pos = strstr(name,
"Sentry")) != NULL) {
1464 }
else if ((pos = strstr(name,
"Support")) != NULL) {
1470 }
else if ((pos = strstr(name,
"Unknown")) != NULL) {
1476 }
else if ((pos = strstr(name,
"Drone")) != NULL) {
1482 }
else if ((pos = strstr(name,
"Jump Node")) != NULL) {
1484 strcpy_s(buf,
"W\xEAze\xB3 skokowy");
1488 }
else if (!
stricmp(name,
"Instructor")) {
1489 strcpy(name,
"Instruktor");
1491 }
else if (!
stricmp(name,
"NTF Vessel")) {
1492 strcpy(name,
"Okr\xEAt NTF");
1494 }
else if (!
stricmp(name,
"Enif Station")) {
1495 strcpy(name,
"Stacja Enif");
1504 if (!strcmp(name,
"Epsilon Pegasi Liberation")) {
1505 strcpy(name,
"Epsilon Pegasi Befreiungsmedaille");
1507 }
else if (!strcmp(name,
"Imperial Order of Vasuda")) {
1508 strcpy(name,
"Imperialer Orden von Vasuda ");
1510 }
else if (!strcmp(name,
"Distinguished Flying Cross")) {
1511 strcpy(name,
"Fliegerkreuz Erster Klasse");
1513 }
else if (!strcmp(name,
"SOC Service Medallion")) {
1514 strcpy(name,
"SEK-Dienstmedaille ");
1516 }
else if (!strcmp(name,
"Intelligence Cross")) {
1517 strcpy(name,
"Geheimdienstkreuz am Bande");
1519 }
else if (!strcmp(name,
"Order of Galatea")) {
1520 strcpy(name,
"Orden von Galatea ");
1522 }
else if (!strcmp(name,
"Meritorious Unit Commendation")) {
1523 strcpy(name,
"Ehrenspange der Allianz");
1525 }
else if (!strcmp(name,
"Medal of Valor")) {
1526 strcpy(name,
"Tapferkeitsmedaille ");
1528 }
else if (!strcmp(name,
"GTVA Legion of Honor")) {
1529 strcpy(name,
"Orden der GTVA-Ehrenlegion");
1531 }
else if (!strcmp(name,
"Allied Defense Citation")) {
1532 strcpy(name,
"Alliierte Abwehrspange ");
1534 }
else if (!strcmp(name,
"Nebula Campaign Victory Star")) {
1535 strcpy(name,
"Nebel-Siegesstern");
1537 }
else if (!strcmp(name,
"NTF Campaign Victory Star")) {
1538 strcpy(name,
"NTF-Siegesstern ");
1540 }
else if (!strcmp(name,
"Rank")) {
1541 strcpy(name,
"Dienstgrad");
1543 }
else if (!strcmp(name,
"Wings")) {
1544 strcpy(name,
"Fliegerspange");
1546 }
else if (!strcmp(name,
"Ace")) {
1547 strcpy(name,
"Flieger-As");
1549 }
else if (!strcmp(name,
"Double Ace")) {
1550 strcpy(name,
"Doppel-As ");
1552 }
else if (!strcmp(name,
"Triple Ace")) {
1553 strcpy(name,
"Dreifach-As ");
1555 }
else if (!strcmp(name,
"SOC Unit Crest")) {
1556 strcpy(name,
"SEK-Abzeichen ");
1565 if (!strcmp(name,
"Epsilon Pegasi Liberation")) {
1566 strcpy(name,
"Order Wyzwolenia Epsilon Pegasi");
1568 }
else if (!strcmp(name,
"Imperial Order of Vasuda")) {
1569 strcpy(name,
"Imperialny Order Vasudy");
1571 }
else if (!strcmp(name,
"Distinguished Flying Cross")) {
1572 strcpy(name,
"Krzy\xBF Wybitnego Pilota");
1574 }
else if (!strcmp(name,
"SOC Service Medallion")) {
1575 strcpy(name,
"Krzy\xBF S\xB3u\xBF\x62 Specjalnych");
1577 }
else if (!strcmp(name,
"Intelligence Cross")) {
1578 strcpy(name,
"Krzy\xBF Wywiadu");
1580 }
else if (!strcmp(name,
"Order of Galatea")) {
1581 strcpy(name,
"Order Galatei");
1583 }
else if (!strcmp(name,
"Meritorious Unit Commendation")) {
1584 strcpy(name,
"Medal Pochwalny");
1586 }
else if (!strcmp(name,
"Medal of Valor")) {
1587 strcpy(name,
"Medal za Odwag\xEA");
1589 }
else if (!strcmp(name,
"GTVA Legion of Honor")) {
1590 strcpy(name,
"Legia Honorowa GTVA");
1592 }
else if (!strcmp(name,
"Allied Defense Citation")) {
1593 strcpy(name,
"Order za Obron\xEA Sojuszu");
1595 }
else if (!strcmp(name,
"Nebula Campaign Victory Star")) {
1596 strcpy(name,
"Gwiazda Wiktorii Kampanii w Mg\xB3\x61wicy");
1598 }
else if (!strcmp(name,
"NTF Campaign Victory Star")) {
1599 strcpy(name,
"Gwiazda Wiktorii Kampanii NTF");
1601 }
else if (!strcmp(name,
"Rank")) {
1602 strcpy(name,
"Ranga");
1604 }
else if (!strcmp(name,
"Wings")) {
1605 strcpy(name,
"Skrzyd\xB3\x61");
1607 }
else if (!strcmp(name,
"Ace")) {
1610 }
else if (!strcmp(name,
"Double Ace")) {
1611 strcpy(name,
"Podw\xF3jny As");
1613 }
else if (!strcmp(name,
"Triple Ace")) {
1614 strcpy(name,
"Potr\xF3jny As");
1616 }
else if (!strcmp(name,
"SOC Unit Crest")) {
1617 strcpy(name,
"Tarcza S\xB3u\xBF\x62 Specjalnych");
void lcl_translate_brief_icon_name_gr(char *name)
char * Lcl_ext_str[LCL_MAX_STRINGS]
int check_for_string(const char *pstr)
void drop_trailing_white_space(char *str)
void lcl_translate_medal_name_gr(char *name)
int replace_all(char *str, char *oldstr, char *newstr, uint max_len, int range)
ubyte special_char_indexes[MAX_FONTS]
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
#define FS2_OPEN_DEFAULT_LANGUAGE
SCP_vector< lang_info > Lcl_languages
char lang_name[LCL_LANG_NAME_LEN+1]
#define DIR_SEPARATOR_CHAR
void lcl_add_dir(char *current_path)
int lcl_get_xstr_offset(int index, int res)
void lcl_init(int lang_init)
#define Assertion(expr, msg,...)
const char * os_config_read_string(const char *section, const char *name, const char *default_value)
std::basic_string< char, std::char_traits< char >, std::allocator< char > > SCP_string
int required_string_either(char *str1, char *str2)
Checks for one of two required strings.
GLenum GLuint GLenum GLsizei const GLchar * buf
char callsign[CALLSIGN_LEN+1]
int lcl_ext_get_id(const char *xstr, int *out)
#define NUM_BUILTIN_LANGUAGES
int lcl_add_dir_to_path_with_filename(char *current_path, size_t path_max)
void parse_stringstbl(const char *filename)
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
lcl_xstr Xstr_table[XSTR_SIZE]
#define DIR_SEPARATOR_STR
#define strnicmp(s1, s2, n)
void stuff_string(char *outstr, int type, int len, char *terminators)
void parse_stringstbl_common(const char *filename, const bool external)
void lcl_translate_targetbox_name_gr(char *name)
int required_string(const char *pstr)
void lcl_replace_stuff(char *text, size_t max_len)
int optional_string(const char *pstr)
#define PARSE_ID_BUF_SIZE
void read_file_text(const char *filename, int mode, char *processed_text, char *raw_text)
bool Parsing_modular_table
int get_string(char *str, int max)
int lcl_ext_get_text(const char *xstr, char *out)
void _cdecl void void _cdecl Error(const char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
ubyte lcl_get_font_index(int font_num)
const char * XSTR(const char *str, int index)
void reset_parse(char *text)
GLuint const GLchar * name
void lcl_translate_ship_name_gr(char *name)
int lcl_is_valid_numeric_char(char c)
void parse_stringstbl_quick(const char *filename)
#define LCL_LANG_NAME_LEN
lang_info Lcl_builtin_languages[NUM_BUILTIN_LANGUAGES]
void error_display(int error_level, char *format,...)
void ignore_white_space()
int is_gray_space(char ch)
void lcl_translate_brief_icon_name_pl(char *name)
rank_stuff Ranks[NUM_RANKS]
void lcl_ext_localize_sub(const char *in, char *out, size_t max_len, int *id)
int parse_modular_table(const char *name_check, void(*parse_callback)(const char *filename), int path_type, int sort_type)
char lang_ext[LCL_LANG_NAME_LEN+1]
void stuff_ubyte(ubyte *i)
int is_white_space(char ch)
void lcl_ext_localize(const char *in, char *out, size_t max_len, int *id)
void parse_tstringstbl(const char *filename)
void lcl_fred_replace_stuff(char *text, size_t max_len)
void lcl_translate_wep_name_gr(char *name)
void lcl_translate_medal_name_pl(char *name)
int skip_to_string(char *pstr, char *end)
void lcl_translate_targetbox_name_pl(char *name)
void lcl_get_language_name(char *lang_name)
void lcl_set_language(int lang)