1 /* Determine the number of screen columns needed for a character. 2 Copyright (C) 2006 Free Software Foundation, Inc. 3 4 This program is free software; you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; either version 2, or (at your option) 7 any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program; if not, write to the Free Software Foundation, 16 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ 17 18 #ifndef _gl_WCWIDTH_H 19 #define _gl_WCWIDTH_H 20 21 #if HAVE_WCHAR_T 22 23 /* Get wcwidth if available, along with wchar_t. */ 24 # if HAVE_WCHAR_H 25 /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before 26 <wchar.h>. 27 BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before 28 <wchar.h>. */ 29 # include <stdio.h> 30 # include <time.h> 31 # include <wchar.h> 32 # endif 33 34 /* Get iswprint. */ 35 # if HAVE_WCTYPE_H 36 # include <wctype.h> 37 # endif 38 # if !defined iswprint && !HAVE_ISWPRINT 39 static inline int 40 # if HAVE_WINT_T 41 iswprint (wint_t wc) 42 # else 43 iswprint (int wc) 44 # endif 45 { 46 return (wc >= 0 && wc < 128 47 ? wc >= ' ' && wc <= '~' 48 : 1); 49 } 50 # define iswprint iswprint 51 # endif 52 53 # ifndef HAVE_DECL_WCWIDTH 54 "this configure-time declaration test was not run" 55 # endif 56 # ifndef wcwidth 57 # if !HAVE_WCWIDTH 58 59 /* wcwidth doesn't exist, so assume all printable characters have 60 width 1. */ 61 static inline int 62 wcwidth (wchar_t wc) 63 { 64 return wc == 0 ? 0 : iswprint (wc) ? 1 : -1; 65 } 66 67 # elif !HAVE_DECL_WCWIDTH 68 69 /* wcwidth exists but is not declared. */ 70 extern 71 # ifdef __cplusplus 72 "C" 73 # endif 74 int wcwidth (int /* actually wchar_t */); 75 76 # endif 77 # endif 78 79 #endif /* HAVE_WCHAR_H */ 80 81 #endif /* _gl_WCWIDTH_H */ 82