1/*-
2 * Copyright (c) 1992, 1993, 1994
3 *	The Regents of the University of California.  All rights reserved.
4 * Copyright (c) 1992, 1993, 1994, 1995, 1996
5 *	Keith Bostic.  All rights reserved.
6 *
7 * See the LICENSE file for redistribution information.
8 *
9 *	$Id: multibyte.h,v 1.32 2012/10/07 01:35:58 zy Exp $
10 */
11
12#ifndef MULTIBYTE_H
13#define MULTIBYTE_H
14
15/*
16 * Fundamental character types.
17 *
18 * CHAR_T	An integral type that can hold any character.
19 * ARG_CHAR_T	The type of a CHAR_T when passed as an argument using
20 *		traditional promotion rules.  It should also be able
21 *		to be compared against any CHAR_T for equality without
22 *		problems.
23 * UCHAR_T	The shortest unified character type (8-bit clean).
24 * RCHAR_T	The character type used by the internal regex engine.
25 *
26 * If no integral type can hold a character, don't even try the port.
27 */
28typedef	int		ARG_CHAR_T;
29
30#ifdef USE_WIDECHAR
31#include <wchar.h>
32#include <wctype.h>
33
34typedef	wchar_t		CHAR_T;
35typedef	wint_t		UCHAR_T;
36typedef wchar_t 	RCHAR_T;
37#define REOF		WEOF
38
39#define STRLEN		wcslen
40#define STRTOL		wcstol
41#define STRTOUL		wcstoul
42#define SPRINTF		swprintf
43#define STRCMP		wcscmp
44#define STRPBRK		wcspbrk
45#define ISBLANK		iswblank
46#define ISCNTRL		iswcntrl
47#define ISDIGIT		iswdigit
48#define ISXDIGIT	iswxdigit
49#define ISGRAPH		iswgraph
50#define ISLOWER		iswlower
51#define ISPRINT		iswprint
52#define ISPUNCT		iswpunct
53#define ISSPACE		iswspace
54#define ISUPPER		iswupper
55#define TOLOWER		towlower
56#define TOUPPER		towupper
57#define STRSET		wmemset
58#define STRCHR		wcschr
59#define STRRCHR		wcsrchr
60#define GETC		getwc
61
62#define L(ch)		L ## ch
63#define WS		"%ls"
64#define WVS		"%*ls"
65#define WC		"%lc"
66
67#else
68typedef	u_char		CHAR_T;
69typedef	u_char		UCHAR_T;
70typedef	char		RCHAR_T;
71#define REOF		EOF
72
73#define STRLEN		strlen
74#define STRTOL(a,b,c)	(strtol(a,(char**)b,c))
75#define STRTOUL(a,b,c)	(strtoul(a,(char**)b,c))
76#define SPRINTF		snprintf
77#define STRCMP		strcmp
78#define STRPBRK		strpbrk
79#define ISBLANK		isblank
80#define ISCNTRL		iscntrl
81#define ISDIGIT		isdigit
82#define ISXDIGIT	isxdigit
83#define ISGRAPH		isgraph
84#define ISLOWER		islower
85#define ISPRINT		isprint
86#define ISPUNCT		ispunct
87#define ISSPACE		isspace
88#define ISUPPER		isupper
89#define TOLOWER		tolower
90#define TOUPPER		toupper
91#define STRSET		memset
92#define STRCHR		strchr
93#define STRRCHR		strrchr
94#define GETC		getc
95
96#define L(ch)		ch
97#define WS		"%s"
98#define WVS		"%*s"
99#define WC		"%c"
100
101#endif
102
103#if defined(USE_WIDECHAR) && defined(DEBUG)
104#define MEMCPY			wmemcpy
105#define MEMMOVE			wmemmove
106#define MEMCMP			wmemcmp
107#else
108#define MEMCPY(p, t, len)	memcpy(p, t, (len) * sizeof(CHAR_T))
109#define MEMMOVE(p, t, len)	memmove(p, t, (len) * sizeof(CHAR_T))
110#define MEMCMP(p, t, len)	memcmp(p, t, (len) * sizeof(CHAR_T))
111#endif
112
113#define SIZE(w)			(sizeof(w) / sizeof(*w))
114
115#endif
116