diff options
author | rubidium <rubidium@openttd.org> | 2007-01-02 19:19:48 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-01-02 19:19:48 +0000 |
commit | 66bbf336c6af7353ef0aeed58002c46543b30635 (patch) | |
tree | ad4a63860df2626b22f77e7dac712e958bea54cb /src/string.h | |
parent | ccc0a3f4dbf58c005b22341ac8874252924690cd (diff) | |
download | openttd-66bbf336c6af7353ef0aeed58002c46543b30635.tar.xz |
(svn r7759) -Merge: makefile rewrite. This merge features:
- A proper ./configure, so everything needs to be configured only once, not for every make.
- Usage of makedepend when available. This greatly reduces the time needed for generating the dependencies.
- A generator for all project files. There is a single file with sources, which is used to generate Makefiles and the project files for MSVC.
- Proper support for OSX universal binaries.
- Object files for non-MSVC compiles are also placed in separate directories, making is faster to switch between debug and release compiles and it does not touch the directory with the source files.
- Functionality to make a bundle of all needed files for for example a nightly or distribution of a binary with all needed GRFs and language files.
Note: as this merge moves almost all files, it is recommended to make a backup of your working copy before updating your working copy.
Diffstat (limited to 'src/string.h')
-rw-r--r-- | src/string.h | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/src/string.h b/src/string.h new file mode 100644 index 000000000..2dbc06eee --- /dev/null +++ b/src/string.h @@ -0,0 +1,114 @@ +/* $Id$ */ + +#ifndef STRING_H +#define STRING_H + +#include "macros.h" + +/* + * dst: destination buffer + * src: string to copy/concatenate + * size: size of the destination buffer + * usage: ttd_strlcpy(dst, src, lengthof(dst)); + */ +void ttd_strlcat(char *dst, const char *src, size_t size); +void ttd_strlcpy(char *dst, const char *src, size_t size); + +/* + * dst: destination buffer + * src: string to copy + * last: pointer to the last element in the dst array + * if NULL no boundary check is performed + * returns a pointer to the terminating \0 in the destination buffer + * usage: strecpy(dst, src, lastof(dst)); + */ +char* strecat(char* dst, const char* src, const char* last); +char* strecpy(char* dst, const char* src, const char* last); + +char* CDECL str_fmt(const char* str, ...); + +/** Scans the string for valid characters and if it finds invalid ones, + * replaces them with a question mark '?' */ +void str_validate(char *str); + +/** Scans the string for colour codes and strips them */ +void str_strip_colours(char *str); + +/** + * Valid filter types for IsValidChar. + */ +typedef enum CharSetFilter { + CS_ALPHANUMERAL, //! Both numeric and alphabetic and spaces and stuff + CS_NUMERAL, //! Only numeric ones + CS_ALPHA, //! Only alphabetic values +} CharSetFilter; + +/** Convert the given string to lowercase, only works with ASCII! */ +void strtolower(char *str); + + +/** Get the length of a string, within a limited buffer */ +static inline int ttd_strnlen(const char *str, int maxlen) +{ + const char *t; + for (t = str; *t != '\0' && t - str < maxlen; t++); + return t - str; +} + + +typedef uint32 WChar; + +/** + * Only allow certain keys. You can define the filter to be used. This makes + * sure no invalid keys can get into an editbox, like BELL. + * @param key character to be checked + * @param afilter the filter to use + * @return true or false depending if the character is printable/valid or not + */ +bool IsValidChar(WChar key, CharSetFilter afilter); + +size_t Utf8Decode(WChar *c, const char *s); +size_t Utf8Encode(char *buf, WChar c); + + +static inline WChar Utf8Consume(const char **s) +{ + WChar c; + *s += Utf8Decode(&c, *s); + return c; +} + + +/** Return the length of a UTF-8 encoded character. + * @param c Unicode character. + * @return Length of UTF-8 encoding for character. + */ +static inline size_t Utf8CharLen(WChar c) +{ + if (c < 0x80) return 1; + if (c < 0x800) return 2; + if (c < 0x10000) return 3; + if (c < 0x110000) return 4; + + /* Invalid valid, we encode as a '?' */ + return 1; +} + + +/* Check if the given character is part of a UTF8 sequence */ +static inline bool IsUtf8Part(char c) +{ + return GB(c, 6, 2) == 2; +} + + +static inline bool IsPrintable(WChar c) +{ + if (c < 0x20) return false; + if (c < 0xE000) return true; + if (c < 0xE200) return false; + return true; +} + + +#endif /* STRING_H */ |