1254225Speter/*- 2254225Speter * Copyright (c) 1992, 1993, 1994 3254225Speter * The Regents of the University of California. All rights reserved. 4254225Speter * Copyright (c) 1992, 1993, 1994, 1995, 1996 5254225Speter * Keith Bostic. All rights reserved. 6254225Speter * 7254225Speter * See the LICENSE file for redistribution information. 8254225Speter * 9254225Speter * $Id: multibyte.h,v 1.32 2012/10/07 01:35:58 zy Exp $ 10254225Speter */ 11254225Speter 12254225Speter#ifndef MULTIBYTE_H 13254225Speter#define MULTIBYTE_H 14254225Speter 15254225Speter/* 16254225Speter * Fundamental character types. 17254225Speter * 18254225Speter * CHAR_T An integral type that can hold any character. 19254225Speter * ARG_CHAR_T The type of a CHAR_T when passed as an argument using 20254225Speter * traditional promotion rules. It should also be able 21254225Speter * to be compared against any CHAR_T for equality without 22254225Speter * problems. 23254225Speter * UCHAR_T The shortest unified character type (8-bit clean). 24254225Speter * RCHAR_T The character type used by the internal regex engine. 25254225Speter * 26254225Speter * If no integral type can hold a character, don't even try the port. 27254225Speter */ 28254225Spetertypedef int ARG_CHAR_T; 29254225Speter 30254225Speter#ifdef USE_WIDECHAR 31254225Speter#include <wchar.h> 32254225Speter#include <wctype.h> 33254225Speter 34254225Spetertypedef wchar_t CHAR_T; 35254225Spetertypedef wint_t UCHAR_T; 36254225Spetertypedef wchar_t RCHAR_T; 37254225Speter#define REOF WEOF 38254225Speter 39254225Speter#define STRLEN wcslen 40254225Speter#define STRTOL wcstol 41254225Speter#define STRTOUL wcstoul 42254225Speter#define SPRINTF swprintf 43254225Speter#define STRCMP wcscmp 44254225Speter#define STRPBRK wcspbrk 45254225Speter#define ISBLANK iswblank 46254225Speter#define ISCNTRL iswcntrl 47254225Speter#define ISDIGIT iswdigit 48254225Speter#define ISXDIGIT iswxdigit 49254225Speter#define ISGRAPH iswgraph 50254225Speter#define ISLOWER iswlower 51254225Speter#define ISPRINT iswprint 52254225Speter#define ISPUNCT iswpunct 53254225Speter#define ISSPACE iswspace 54254225Speter#define ISUPPER iswupper 55254225Speter#define TOLOWER towlower 56254225Speter#define TOUPPER towupper 57254225Speter#define STRSET wmemset 58254225Speter#define STRCHR wcschr 59254225Speter#define STRRCHR wcsrchr 60254225Speter#define GETC getwc 61254225Speter 62254225Speter#define L(ch) L ## ch 63254225Speter#define WS "%ls" 64254225Speter#define WVS "%*ls" 65254225Speter#define WC "%lc" 66254225Speter 67254225Speter#else 68254225Spetertypedef u_char CHAR_T; 69254225Spetertypedef u_char UCHAR_T; 70254225Spetertypedef char RCHAR_T; 71254225Speter#define REOF EOF 72254225Speter 73254225Speter#define STRLEN strlen 74254225Speter#define STRTOL(a,b,c) (strtol(a,(char**)b,c)) 75254225Speter#define STRTOUL(a,b,c) (strtoul(a,(char**)b,c)) 76254225Speter#define SPRINTF snprintf 77254225Speter#define STRCMP strcmp 78254225Speter#define STRPBRK strpbrk 79254225Speter#define ISBLANK isblank 80254225Speter#define ISCNTRL iscntrl 81254225Speter#define ISDIGIT isdigit 82254225Speter#define ISXDIGIT isxdigit 83254225Speter#define ISGRAPH isgraph 84254225Speter#define ISLOWER islower 85254225Speter#define ISPRINT isprint 86254225Speter#define ISPUNCT ispunct 87254225Speter#define ISSPACE isspace 88254225Speter#define ISUPPER isupper 89254225Speter#define TOLOWER tolower 90254225Speter#define TOUPPER toupper 91254225Speter#define STRSET memset 92254225Speter#define STRCHR strchr 93254225Speter#define STRRCHR strrchr 94254225Speter#define GETC getc 95254225Speter 96254225Speter#define L(ch) ch 97254225Speter#define WS "%s" 98254225Speter#define WVS "%*s" 99254225Speter#define WC "%c" 100254225Speter 101254225Speter#endif 102254225Speter 103254225Speter#if defined(USE_WIDECHAR) && defined(DEBUG) 104254225Speter#define MEMCPY wmemcpy 105254225Speter#define MEMMOVE wmemmove 106254225Speter#define MEMCMP wmemcmp 107254225Speter#else 108254225Speter#define MEMCPY(p, t, len) memcpy(p, t, (len) * sizeof(CHAR_T)) 109254225Speter#define MEMMOVE(p, t, len) memmove(p, t, (len) * sizeof(CHAR_T)) 110254225Speter#define MEMCMP(p, t, len) memcmp(p, t, (len) * sizeof(CHAR_T)) 111254225Speter#endif 112254225Speter 113254225Speter#define SIZE(w) (sizeof(w) / sizeof(*w)) 114254225Speter 115254225Speter#endif 116