rubidium@8114: /* $Id$ */ rubidium@8114: rubidium@8114: /** @file strings_func.h Functions related to OTTD's strings. */ rubidium@8114: rubidium@8114: #ifndef STRINGS_FUNC_H rubidium@8114: #define STRINGS_FUNC_H rubidium@8114: rubidium@8114: #include "strings_type.h" rubidium@8114: rubidium@8114: char *InlineString(char *buf, StringID string); rubidium@8114: char *GetString(char *buffr, StringID string, const char *last); peter1138@8445: const char *GetStringPtr(StringID string); rubidium@8114: rubidium@8114: extern char _userstring[128]; rubidium@8114: rubidium@8114: void InjectDParam(int amount); rubidium@8114: rubidium@8114: static inline void SetDParamX(uint64 *s, uint n, uint64 v) rubidium@8114: { rubidium@8114: s[n] = v; rubidium@8114: } rubidium@8114: rubidium@8114: static inline void SetDParam(uint n, uint64 v) rubidium@8114: { rubidium@8114: extern uint64 _decode_parameters[20]; rubidium@8114: rubidium@8114: assert(n < lengthof(_decode_parameters)); rubidium@8114: _decode_parameters[n] = v; rubidium@8114: } rubidium@8114: rubidium@8114: /* Used to bind a C string name to a dparam number. rubidium@8114: * NOTE: This has a short lifetime. You can't rubidium@8114: * use this string much later or it will be gone. */ rubidium@8114: void SetDParamStr(uint n, const char *str); rubidium@8114: rubidium@8114: /** This function takes a C-string and allocates a temporary string ID. rubidium@8114: * The duration of the bound string is valid only until the next call to GetString, rubidium@8114: * so be careful. */ rubidium@8114: StringID BindCString(const char *str); rubidium@8114: rubidium@8114: static inline uint64 GetDParamX(const uint64 *s, uint n) rubidium@8114: { rubidium@8114: return s[n]; rubidium@8114: } rubidium@8114: rubidium@8114: static inline uint64 GetDParam(uint n) rubidium@8114: { rubidium@8114: extern uint64 _decode_parameters[20]; rubidium@8114: rubidium@8114: assert(n < lengthof(_decode_parameters)); rubidium@8114: return _decode_parameters[n]; rubidium@8114: } rubidium@8114: rubidium@8114: static inline void CopyInDParam(int offs, const uint64 *src, int num) rubidium@8114: { rubidium@8114: extern uint64 _decode_parameters[20]; rubidium@8114: memcpy(_decode_parameters + offs, src, sizeof(uint64) * (num)); rubidium@8114: } rubidium@8114: rubidium@8114: static inline void CopyOutDParam(uint64 *dst, int offs, int num) rubidium@8114: { rubidium@8114: extern uint64 _decode_parameters[20]; rubidium@8114: memcpy(dst, _decode_parameters + offs, sizeof(uint64) * (num)); rubidium@8114: } rubidium@8114: rubidium@8114: extern DynamicLanguages _dynlang; // defined in strings.cpp rubidium@8114: rubidium@8114: bool ReadLanguagePack(int index); rubidium@8114: void InitializeLanguagePacks(); rubidium@8114: rubidium@8114: int CDECL StringIDSorter(const void *a, const void *b); rubidium@8114: glx@8321: /** Key comparison function for std::map */ glx@8321: struct StringIDCompare glx@8321: { glx@8330: bool operator()(StringID s1, StringID s2) const { return StringIDSorter(&s1, &s2) < 0; } glx@8321: }; glx@8321: rubidium@8114: void CheckForMissingGlyphsInLoadedLanguagePack(); rubidium@8114: rubidium@8987: StringID RemapOldStringID(StringID s); rubidium@8987: char *CopyFromOldName(StringID id); rubidium@8987: rubidium@8114: #endif /* STRINGS_TYPE_H */