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