Remove building with NOCRYPTO option
[minix.git] / external / bsd / nvi / dist / common / multibyte.h
blob6b032d5badd21e5472209d2773cd573421cc86b4
1 /* $NetBSD: multibyte.h,v 1.2 2013/11/22 15:52:05 christos Exp $ */
2 #ifndef MULTIBYTE_H
3 #define MULTIBYTE_H
5 /*
6 * Ex/vi commands are generally separated by whitespace characters. We
7 * can't use the standard isspace(3) macro because it returns true for
8 * characters like ^K in the ASCII character set. The 4.4BSD isblank(3)
9 * macro does exactly what we want, but it's not portable yet.
11 * XXX
12 * Note side effect, ch is evaluated multiple times.
14 #define ISBLANK(c) ((c) == ' ' || (c) == '\t')
16 #define ISDIGIT(c) ((c) >= '0' && (c) <= '9')
17 #define ISXDIGIT(c) (ISDIGIT(c) || \
18 ((c) >= 'A' && (c) <= 'F') || ((c) >= 'a' && (c) <= 'f'))
19 #define ISALPHA(c) (((c) >= 'A' && (c) <= 'Z') || ((c) >= 'a' && (c) <= 'z'))
20 #define ISALNUM(c) (ISALPHA(c) || ISDIGIT(c))
23 * Fundamental character types.
25 * CHAR_T An integral type that can hold any character.
26 * ARG_CHAR_T The type of a CHAR_T when passed as an argument using
27 * traditional promotion rules. It should also be able
28 * to be compared against any CHAR_T for equality without
29 * problems.
31 * If no integral type can hold a character, don't even try the port.
34 #ifdef USE_WIDECHAR
35 #include <wchar.h>
36 #include <wctype.h>
38 typedef wchar_t RCHAR_T;
39 #define REOF WEOF
40 typedef wchar_t CHAR_T;
41 typedef wint_t ARG_CHAR_T;
42 typedef wint_t UCHAR_T;
44 #define ISUPPER iswupper
45 #define STRLEN wcslen
46 #define STRTOL wcstol
47 #define STRTOUL wcstoul
48 #define SPRINTF swprintf
49 #define STRCHR wcschr
50 #define STRCMP wcscmp
51 #define STRPBRK wcspbrk
52 #define ISBLANK2 iswblank
53 #define ISCNTRL iswcntrl
54 #define ISGRAPH iswgraph
55 #define ISLOWER iswlower
56 #define ISPUNCT iswpunct
57 #define ISSPACE iswspace
58 #define ISUPPER iswupper
59 #define TOLOWER towlower
60 #define TOUPPER towupper
61 #define STRSET wmemset
62 #define STRCHR wcschr
64 #define L(ch) L ## ch
65 #define WS "%ls"
66 #define WVS "%*ls"
67 #define WC "%lc"
69 #else
70 #include <stdio.h>
72 #define REOF EOF
73 typedef char CHAR_T;
74 typedef int ARG_CHAR_T;
75 typedef unsigned char UCHAR_T;
77 #define ISUPPER isupper
78 #define STRLEN strlen
79 #define STRTOL strtol
80 #define STRTOUL strtoul
81 #define SPRINTF snprintf
82 #define STRCHR strchr
83 #define STRCMP strcmp
84 #define STRPBRK strpbrk
85 #define ISBLANK2 isblank
86 #define ISCNTRL iscntrl
87 #define ISGRAPH isgraph
88 #define ISLOWER islower
89 #define ISPUNCT ispunct
90 #define ISSPACE isspace
91 #define ISUPPER isupper
92 #define TOLOWER tolower
93 #define TOUPPER toupper
94 #define STRSET memset
95 #define STRCHR strchr
97 #define L(ch) ch
98 #define WS "%s"
99 #define WVS "%*s"
100 #define WC "%c"
102 #endif
104 #define MEMCMP(to, from, n) \
105 memcmp(to, from, (n) * sizeof(*(to)))
106 #define MEMMOVE(p, t, len) memmove(p, t, (len) * sizeof(*(p)))
107 #define MEMCPY(p, t, len) memcpy(p, t, (len) * sizeof(*(p)))
109 * Like MEMCPY but return a pointer to the end of the copied bytes.
110 * Glibc has a function mempcpy with the same purpose.
112 #define MEMPCPY(p, t, len) \
113 ((void *)((char *)MEMCPY(p, t, len) + (len) * sizeof(*(p))))
114 #define SIZE(w) (sizeof(w)/sizeof(*w))
116 #endif