#include #include #include #include "proboard.hpp" LanguageFile pb_curlang; LanguageString *pb_lang; int pb_num_lang = 0; static void KillLanguage() { if(pb_lang) { delete [] pb_lang; } pb_lang = NULL; pb_num_lang = 0; } bool ReadLanguage( char *langname ) { if(langname == NULL) { KillLanguage(); return FALSE; } FileName fn(syspath , langname , ".PBL"); File f; if(!f.open(fn , fmode_read , 4096)) { LOG("ERROR: Unable to read language file %s",(char *)fn); return FALSE; } if(f.read(&pb_curlang , sizeof(LanguageFile)) != sizeof(LanguageFile)) { LOG("Error reading language file <%s>" , (char *)fn); return FALSE; } if(strlen(pb_curlang.menuPath) < 3) pb_curlang.menuPath[0] = '\0'; if(strlen(pb_curlang.txtPath) < 3) pb_curlang.txtPath[0] = '\0'; if(strlen(pb_curlang.questPath) < 3) pb_curlang.questPath[0] = '\0'; if(pb_curlang.menuPath[0]) append_backspace(pb_curlang.menuPath); if(pb_curlang.txtPath[0]) append_backspace(pb_curlang.txtPath); if(pb_curlang.questPath[0]) append_backspace(pb_curlang.questPath); KillLanguage(); f >> pb_num_lang; pb_lang = new LanguageString[pb_num_lang]; for(int i=0;i0) LOG("s = '%s'",(char *)str); #endif if(pb_lang[i].flags & LANG_PROMPT) { if(!last_was_ansi) str << ' '; str << char(26) << char(pb_lang[i].promptcolor); } delete [] pb_lang[i].s; pb_lang[i].len = str.len(); pb_lang[i].s = new char[ pb_lang[i].len + 1 ]; strcpy(pb_lang[i].s , str); } f.close(); S_PRESS_ENTER_TO_CONTINUE = _S_PRESS_ENTER_TO_CONTINUE; S_PRESS_ENTER_TO_CONTINUE << '\t'; return TRUE; } char wait_language_hotkeys(char *hk, bool enter) { String hotkeys; hotkeys = hk; if(enter) hotkeys << '\r'; char k = io.wait(hotkeys); k = hotkeys.find(String(char(k))); if(hotkeys[k] == '\r') return '\r'; else return k; } int language_string_length( char *str ) { int l = 0; for( ; *str ; str++) { char c = *str; if(c == char(26)) { str++; continue; } l++; } return l; }