wcwidth.c (675e7ddbeea7202fff121da2aacfdc881a33777d) wcwidth.c (de6c9c9d5bf3ec1f15d6196253f08c327a504fa7)
1/*
2 * Copyright (c) 1989, 1993
3 * The Regents of the University of California. All rights reserved.
4 * (c) UNIX System Laboratories, Inc.
5 * All or some portions of this file are derived from material licensed
6 * to the University of California by American Telephone and Telegraph
7 * Co. or Unix System Laboratories, Inc. and are reproduced herein with
8 * the permission of UNIX System Laboratories, Inc.

--- 29 unchanged lines hidden (view full) ---

38 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
39 * SUCH DAMAGE.
40 */
41
42#include <sys/cdefs.h>
43__FBSDID("$FreeBSD$");
44
45#include <wchar.h>
1/*
2 * Copyright (c) 1989, 1993
3 * The Regents of the University of California. All rights reserved.
4 * (c) UNIX System Laboratories, Inc.
5 * All or some portions of this file are derived from material licensed
6 * to the University of California by American Telephone and Telegraph
7 * Co. or Unix System Laboratories, Inc. and are reproduced herein with
8 * the permission of UNIX System Laboratories, Inc.

--- 29 unchanged lines hidden (view full) ---

38 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
39 * SUCH DAMAGE.
40 */
41
42#include <sys/cdefs.h>
43__FBSDID("$FreeBSD$");
44
45#include <wchar.h>
46#include <wctype.h>
47
46
48#define _CTYPE_SWM 0xe0000000L /* Mask to get screen width data */
49#define _CTYPE_SWS 30 /* Bits to shift to get width */
47#undef wcwidth
50
51int
52wcwidth(wchar_t wc)
53{
48
49int
50wcwidth(wchar_t wc)
51{
54 unsigned int x;
55
52
56 if (wc == L'\0')
57 return (0);
58
59 x = (unsigned int)__maskrune(wc, _CTYPE_SWM|_CTYPE_R);
60 if ((x & _CTYPE_SWM) != 0)
61 return ((x & _CTYPE_SWM) >> _CTYPE_SWS);
62 return ((x & _CTYPE_R) != 0 ? 1 : -1);
53 return (__wcwidth(wc));
63}
54}