1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
#ifndef _WIMLIB_TCHAR_H
#define _WIMLIB_TCHAR_H
/* Functions to act on "tchar" strings, which have a platform-dependent encoding
* and character size. */
#ifdef _WIN32
#include <wchar.h>
/*
* For Windows builds, the "tchar" type will be 2 bytes and will be equivalent
* to "wchar_t" and "utf16lechar". All indicate one coding unit of a string
* encoded in UTF-16LE with the additional possibility of unpaired surrogates.
*/
typedef wchar_t tchar;
# define TCHAR_IS_UTF16LE 1
# define _T(text) L##text
# define T(text) _T(text) /* Make a string literal into a wide string */
# define TS "ls" /* Format a string of "tchar" */
# define TC "lc" /* Format a "tchar" */
/* For Windows builds, the following definitions replace the "tchar" functions
* with the "wide-character" functions. */
# define tmemchr wmemchr
# define tmemcpy wmemcpy
# define tmemmove wmemmove
# define tmempcpy wmempcpy
# define tstrcat wcscat
# define tstrcpy wcscpy
# define tprintf wprintf
# define tsprintf swprintf
# define tfprintf fwprintf
# define tvfprintf vfwprintf
# define tscanf swscanf
# define istalpha(c) iswalpha((wchar_t)(c))
# define istspace(c) iswspace((wchar_t)(c))
# define totlower(c) towlower((wchar_t)(c))
# define tstrcmp wcscmp
# define tstrncmp wcsncmp
# define tstrchr wcschr
# define tstrpbrk wcspbrk
# define tstrrchr wcsrchr
# define tstrstr wcsstr
# define tstrlen wcslen
# define tmemcmp wmemcmp
# define tstrcasecmp _wcsicmp
# define tstrftime wcsftime
# define tputchar putwchar
# define tputc putwc
# define tputs _putws
# define tfputs fputws
# define tfopen _wfopen
# define topen _wopen
# define tstat wstat
# define tstrtol wcstol
# define tstrtod wcstod
# define tstrtoul wcstoul
# define tstrtoull wcstoull
# define tunlink _wunlink
# define tstrerror _wcserror
# define taccess _waccess
# define tstrdup wcsdup
# define tgetenv _wgetenv
/* The following "tchar" functions do not have exact wide-character equivalents
* on Windows so require parameter rearrangement or redirection to a replacement
* function defined ourselves. */
# define TSTRDUP WCSDUP
# define tmkdir(path, mode) _wmkdir(path)
# define tstrerror_r(errnum, buf, bufsize) \
_wcserror_s((buf), (bufsize), (errnum))
# define trename win32_rename_replacement
# define tglob win32_wglob
#else /* _WIN32 */
/*
* For non-Windows builds, the "tchar" type will be one byte and will specify a
* string encoded in UTF-8 with the additional possibility of surrogate
* codepoints.
*/
typedef char tchar;
# define TCHAR_IS_UTF16LE 0
# define T(text) text /* In this case, strings of "tchar" are simply strings of
char */
# define TS "s" /* Similarly, a string of "tchar" is printed just as a
normal string. */
# define TC "c" /* Print a single character */
/* For non-Windows builds, replace the "tchar" functions with the regular old
* string functions. */
# define tmemchr memchr
# define tmemcpy memcpy
# define tmemmove memmove
# define tmempcpy mempcpy
# define tstrcat strcat
# define tstrcpy strcpy
# define tprintf printf
# define tsprintf sprintf
# define tfprintf fprintf
# define tvfprintf vfprintf
# define tscanf sscanf
# define istalpha(c) isalpha((unsigned char)(c))
# define istspace(c) isspace((unsigned char)(c))
# define totlower(c) tolower((unsigned char)(c))
# define tstrcmp strcmp
# define tstrncmp strncmp
# define tstrchr strchr
# define tstrpbrk strpbrk
# define tstrrchr strrchr
# define tstrstr strstr
# define tstrlen strlen
# define tmemcmp memcmp
# define tstrcasecmp strcasecmp
# define tstrftime strftime
# define tputchar putchar
# define tputc putc
# define tputs puts
# define tfputs fputs
# define tfopen fopen
# define topen open
# define tstat stat
# define tunlink unlink
# define tstrerror strerror
# define tstrtol strtol
# define tstrtod strtod
# define tstrtoul strtoul
# define tstrtoull strtoull
# define tmkdir mkdir
# define tstrdup strdup
# define tgetenv getenv
# define TSTRDUP STRDUP
# define tstrerror_r strerror_r
# define trename rename
# define taccess access
# define tglob glob
#endif /* !_WIN32 */
#endif /* _WIMLIB_TCHAR_H */
|