]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/nvi/common/multibyte.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / nvi / common / multibyte.h
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  */
28 typedef int             ARG_CHAR_T;
29
30 #ifdef USE_WIDECHAR
31 #include <wchar.h>
32 #include <wctype.h>
33
34 typedef wchar_t         CHAR_T;
35 typedef wint_t          UCHAR_T;
36 typedef 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
68 typedef u_char          CHAR_T;
69 typedef u_char          UCHAR_T;
70 typedef 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