tron@2186: /* $Id$ */ tron@2186: rubidium@8610: /** @file strings_func.h Functions related to OTTD's strings. */ belugas@6916: rubidium@8610: #ifndef STRINGS_FUNC_H rubidium@8610: #define STRINGS_FUNC_H rubidium@8610: rubidium@8610: #include "strings_type.h" tron@1309: rubidium@7762: char *InlineString(char *buf, StringID string); rubidium@7814: char *GetString(char *buffr, StringID string, const char *last); peter1138@8941: const char *GetStringPtr(StringID string); 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: 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: glx@8817: /** Key comparison function for std::map */ glx@8817: struct StringIDCompare glx@8817: { glx@8826: bool operator()(StringID s1, StringID s2) const { return StringIDSorter(&s1, &s2) < 0; } glx@8817: }; glx@8817: rubidium@8581: void CheckForMissingGlyphsInLoadedLanguagePack(); rubidium@8581: rubidium@8610: #endif /* STRINGS_TYPE_H */