tron@2186: /* $Id$ */ tron@2186: belugas@6916: /** @file strings.h */ belugas@6916: tron@1309: #ifndef STRINGS_H tron@1309: #define STRINGS_H tron@1309: rubidium@7762: char *InlineString(char *buf, StringID string); rubidium@7814: char *GetString(char *buffr, StringID string, const char *last); ludde@2063: tron@2202: extern char _userstring[128]; tron@2202: tron@1309: void InjectDParam(int amount); rubidium@7762: rubidium@7762: static inline void SetDParamX(uint64 *s, uint n, uint64 v) rubidium@7762: { rubidium@7762: s[n] = v; rubidium@7762: } rubidium@7762: rubidium@7762: static inline void SetDParam(uint n, uint64 v) rubidium@7762: { rubidium@7762: extern uint64 _decode_parameters[20]; rubidium@7762: rubidium@7762: assert(n < lengthof(_decode_parameters)); rubidium@7762: _decode_parameters[n] = v; rubidium@7762: } rubidium@7762: rubidium@7762: /* Used to bind a C string name to a dparam number. rubidium@7762: * NOTE: This has a short lifetime. You can't rubidium@7762: * use this string much later or it will be gone. */ rubidium@7762: void SetDParamStr(uint n, const char *str); rubidium@7762: rubidium@7762: /** This function takes a C-string and allocates a temporary string ID. rubidium@7762: * The duration of the bound string is valid only until the next call to GetString, rubidium@7762: * so be careful. */ rubidium@7762: StringID BindCString(const char *str); rubidium@7762: rubidium@7762: static inline uint64 GetDParamX(const uint64 *s, uint n) rubidium@7762: { rubidium@7762: return s[n]; rubidium@7762: } rubidium@7762: rubidium@7762: static inline uint64 GetDParam(uint n) rubidium@7762: { rubidium@7762: extern uint64 _decode_parameters[20]; rubidium@7762: rubidium@7762: assert(n < lengthof(_decode_parameters)); rubidium@7762: return _decode_parameters[n]; rubidium@7762: } rubidium@7762: rubidium@7762: static inline void CopyInDParam(int offs, const uint64 *src, int num) rubidium@7762: { rubidium@7762: extern uint64 _decode_parameters[20]; rubidium@7762: memcpy(_decode_parameters + offs, src, sizeof(uint64) * (num)); rubidium@7762: } rubidium@7762: rubidium@7762: static inline void CopyOutDParam(uint64 *dst, int offs, int num) rubidium@7762: { rubidium@7762: extern uint64 _decode_parameters[20]; rubidium@7762: memcpy(dst, _decode_parameters + offs, sizeof(uint64) * (num)); rubidium@7762: } rubidium@7762: rubidium@7762: rubidium@7762: /** Information about a language */ rubidium@7762: struct Language { rubidium@7762: char *name; ///< The internal name of the language rubidium@7762: char *file; ///< The name of the language as it appears on disk rubidium@7762: }; rubidium@7762: rubidium@7762: /** Used for dynamic language support */ rubidium@7762: struct DynamicLanguages { rubidium@7762: int num; ///< Number of languages rubidium@7762: int curr; ///< Currently selected language index rubidium@7762: char curr_file[MAX_PATH]; ///< Currently selected language file name without path (needed for saving the filename of the loaded language). rubidium@7762: StringID dropdown[MAX_LANG + 1]; ///< List of languages in the settings gui rubidium@7762: Language ent[MAX_LANG]; ///< Information about the languages rubidium@7762: }; rubidium@7762: rubidium@7762: extern DynamicLanguages _dynlang; // defined in strings.cpp tron@1309: rubidium@6646: bool ReadLanguagePack(int index); rubidium@6646: void InitializeLanguagePacks(); rubidium@6646: glx@7289: int CDECL StringIDSorter(const void *a, const void *b); glx@7289: Darkvater@2436: #endif /* STRINGS_H */