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)