sync with OpenBSD -current
This commit is contained in:
parent
3f3212838f
commit
36c45cb00b
26 changed files with 324 additions and 349 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: ctype_.c,v 1.12 2015/09/19 04:02:21 guenther Exp $ */
|
||||
/* $OpenBSD: ctype_.c,v 1.13 2024/02/04 13:03:18 jca Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
|
@ -36,6 +36,16 @@
|
|||
#include <ctype.h>
|
||||
#include "ctype_private.h"
|
||||
|
||||
/* Shorter names for the defines provided by <ctype.h> */
|
||||
#define _U _CTYPE_U
|
||||
#define _L _CTYPE_L
|
||||
#define _N _CTYPE_N
|
||||
#define _S _CTYPE_S
|
||||
#define _P _CTYPE_P
|
||||
#define _C _CTYPE_C
|
||||
#define _X _CTYPE_X
|
||||
#define _B _CTYPE_B
|
||||
|
||||
const char _C_ctype_[1 + CTYPE_NUM_CHARS] = {
|
||||
0,
|
||||
_C, _C, _C, _C, _C, _C, _C, _C,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: isctype.c,v 1.12 2015/09/13 11:38:08 guenther Exp $ */
|
||||
/* $OpenBSD: isctype.c,v 1.13 2024/02/04 13:03:18 jca Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
|
@ -41,7 +41,8 @@
|
|||
int
|
||||
isalnum(int c)
|
||||
{
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & (_U|_L|_N)));
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] &
|
||||
(_CTYPE_U|_CTYPE_L|_CTYPE_N)));
|
||||
}
|
||||
DEF_STRONG(isalnum);
|
||||
|
||||
|
@ -49,7 +50,8 @@ DEF_STRONG(isalnum);
|
|||
int
|
||||
isalpha(int c)
|
||||
{
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & (_U|_L)));
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] &
|
||||
(_CTYPE_U|_CTYPE_L)));
|
||||
}
|
||||
DEF_STRONG(isalpha);
|
||||
|
||||
|
@ -65,7 +67,7 @@ DEF_STRONG(isblank);
|
|||
int
|
||||
iscntrl(int c)
|
||||
{
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _C));
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_C));
|
||||
}
|
||||
DEF_STRONG(iscntrl);
|
||||
|
||||
|
@ -73,7 +75,7 @@ DEF_STRONG(iscntrl);
|
|||
int
|
||||
isdigit(int c)
|
||||
{
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _N));
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_N));
|
||||
}
|
||||
DEF_STRONG(isdigit);
|
||||
|
||||
|
@ -81,7 +83,8 @@ DEF_STRONG(isdigit);
|
|||
int
|
||||
isgraph(int c)
|
||||
{
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & (_P|_U|_L|_N)));
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] &
|
||||
(_CTYPE_P|_CTYPE_U|_CTYPE_L|_CTYPE_N)));
|
||||
}
|
||||
DEF_STRONG(isgraph);
|
||||
|
||||
|
@ -89,7 +92,7 @@ DEF_STRONG(isgraph);
|
|||
int
|
||||
islower(int c)
|
||||
{
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _L));
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_L));
|
||||
}
|
||||
DEF_STRONG(islower);
|
||||
|
||||
|
@ -97,7 +100,8 @@ DEF_STRONG(islower);
|
|||
int
|
||||
isprint(int c)
|
||||
{
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & (_P|_U|_L|_N|_B)));
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] &
|
||||
(_CTYPE_P|_CTYPE_U|_CTYPE_L|_CTYPE_N|_CTYPE_B)));
|
||||
}
|
||||
DEF_STRONG(isprint);
|
||||
|
||||
|
@ -105,7 +109,7 @@ DEF_STRONG(isprint);
|
|||
int
|
||||
ispunct(int c)
|
||||
{
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _P));
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_P));
|
||||
}
|
||||
DEF_STRONG(ispunct);
|
||||
|
||||
|
@ -113,7 +117,7 @@ DEF_STRONG(ispunct);
|
|||
int
|
||||
isspace(int c)
|
||||
{
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _S));
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_S));
|
||||
}
|
||||
DEF_STRONG(isspace);
|
||||
|
||||
|
@ -121,7 +125,7 @@ DEF_STRONG(isspace);
|
|||
int
|
||||
isupper(int c)
|
||||
{
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _U));
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _CTYPE_U));
|
||||
}
|
||||
DEF_STRONG(isupper);
|
||||
|
||||
|
@ -129,7 +133,8 @@ DEF_STRONG(isupper);
|
|||
int
|
||||
isxdigit(int c)
|
||||
{
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] & (_N|_X)));
|
||||
return (c == EOF ? 0 : ((_ctype_ + 1)[(unsigned char)c] &
|
||||
(_CTYPE_N|_CTYPE_X)));
|
||||
}
|
||||
DEF_STRONG(isxdigit);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: iswctype.c,v 1.8 2022/07/25 21:38:24 guenther Exp $ */
|
||||
/* $OpenBSD: iswctype.c,v 1.9 2024/02/04 12:46:01 jca Exp $ */
|
||||
/* $NetBSD: iswctype.c,v 1.15 2005/02/09 21:35:46 kleink Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -80,75 +80,75 @@ __tolower_w(wint_t c)
|
|||
int
|
||||
iswalnum(wint_t c)
|
||||
{
|
||||
return (__isctype_w((c), _CTYPE_A|_CTYPE_D));
|
||||
return (__isctype_w((c), _RUNETYPE_A|_RUNETYPE_D));
|
||||
}
|
||||
|
||||
int
|
||||
iswalpha(wint_t c)
|
||||
{
|
||||
return (__isctype_w((c), _CTYPE_A));
|
||||
return (__isctype_w((c), _RUNETYPE_A));
|
||||
}
|
||||
|
||||
int
|
||||
iswblank(wint_t c)
|
||||
{
|
||||
return (__isctype_w((c), _CTYPE_B));
|
||||
return (__isctype_w((c), _RUNETYPE_B));
|
||||
}
|
||||
|
||||
int
|
||||
iswcntrl(wint_t c)
|
||||
{
|
||||
return (__isctype_w((c), _CTYPE_C));
|
||||
return (__isctype_w((c), _RUNETYPE_C));
|
||||
}
|
||||
|
||||
int
|
||||
iswdigit(wint_t c)
|
||||
{
|
||||
return (__isctype_w((c), _CTYPE_D));
|
||||
return (__isctype_w((c), _RUNETYPE_D));
|
||||
}
|
||||
|
||||
int
|
||||
iswgraph(wint_t c)
|
||||
{
|
||||
return (__isctype_w((c), _CTYPE_G));
|
||||
return (__isctype_w((c), _RUNETYPE_G));
|
||||
}
|
||||
|
||||
int
|
||||
iswlower(wint_t c)
|
||||
{
|
||||
return (__isctype_w((c), _CTYPE_L));
|
||||
return (__isctype_w((c), _RUNETYPE_L));
|
||||
}
|
||||
|
||||
int
|
||||
iswprint(wint_t c)
|
||||
{
|
||||
return (__isctype_w((c), _CTYPE_R));
|
||||
return (__isctype_w((c), _RUNETYPE_R));
|
||||
}
|
||||
|
||||
int
|
||||
iswpunct(wint_t c)
|
||||
{
|
||||
return (__isctype_w((c), _CTYPE_P));
|
||||
return (__isctype_w((c), _RUNETYPE_P));
|
||||
}
|
||||
|
||||
int
|
||||
iswspace(wint_t c)
|
||||
{
|
||||
return (__isctype_w((c), _CTYPE_S));
|
||||
return (__isctype_w((c), _RUNETYPE_S));
|
||||
}
|
||||
DEF_STRONG(iswspace);
|
||||
|
||||
int
|
||||
iswupper(wint_t c)
|
||||
{
|
||||
return (__isctype_w((c), _CTYPE_U));
|
||||
return (__isctype_w((c), _RUNETYPE_U));
|
||||
}
|
||||
DEF_STRONG(iswupper);
|
||||
|
||||
int
|
||||
iswxdigit(wint_t c)
|
||||
{
|
||||
return (__isctype_w((c), _CTYPE_X));
|
||||
return (__isctype_w((c), _RUNETYPE_X));
|
||||
}
|
||||
|
||||
wint_t
|
||||
|
@ -167,8 +167,9 @@ DEF_STRONG(towlower);
|
|||
int
|
||||
wcwidth(wchar_t c)
|
||||
{
|
||||
if (__isctype_w((c), _CTYPE_R))
|
||||
return (((unsigned)__runetype_w(c) & _CTYPE_SWM) >> _CTYPE_SWS);
|
||||
if (__isctype_w((c), _RUNETYPE_R))
|
||||
return (((unsigned)__runetype_w(c) & _RUNETYPE_SWM) >>
|
||||
_RUNETYPE_SWS);
|
||||
return -1;
|
||||
}
|
||||
DEF_WEAK(wcwidth);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: iswctype_l.c,v 1.2 2022/07/25 21:38:24 guenther Exp $ */
|
||||
/* $OpenBSD: iswctype_l.c,v 1.3 2024/02/04 12:46:01 jca Exp $ */
|
||||
/* $NetBSD: iswctype.c,v 1.15 2005/02/09 21:35:46 kleink Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -82,73 +82,73 @@ __isctype_wl(wint_t c, _RuneType f, locale_t locale)
|
|||
int
|
||||
iswalnum_l(wint_t c, locale_t locale)
|
||||
{
|
||||
return __isctype_wl(c, _CTYPE_A|_CTYPE_D, locale);
|
||||
return __isctype_wl(c, _RUNETYPE_A|_RUNETYPE_D, locale);
|
||||
}
|
||||
|
||||
int
|
||||
iswalpha_l(wint_t c, locale_t locale)
|
||||
{
|
||||
return __isctype_wl(c, _CTYPE_A, locale);
|
||||
return __isctype_wl(c, _RUNETYPE_A, locale);
|
||||
}
|
||||
|
||||
int
|
||||
iswblank_l(wint_t c, locale_t locale)
|
||||
{
|
||||
return __isctype_wl(c, _CTYPE_B, locale);
|
||||
return __isctype_wl(c, _RUNETYPE_B, locale);
|
||||
}
|
||||
|
||||
int
|
||||
iswcntrl_l(wint_t c, locale_t locale)
|
||||
{
|
||||
return __isctype_wl(c, _CTYPE_C, locale);
|
||||
return __isctype_wl(c, _RUNETYPE_C, locale);
|
||||
}
|
||||
|
||||
int
|
||||
iswdigit_l(wint_t c, locale_t locale)
|
||||
{
|
||||
return __isctype_wl(c, _CTYPE_D, locale);
|
||||
return __isctype_wl(c, _RUNETYPE_D, locale);
|
||||
}
|
||||
|
||||
int
|
||||
iswgraph_l(wint_t c, locale_t locale)
|
||||
{
|
||||
return __isctype_wl(c, _CTYPE_G, locale);
|
||||
return __isctype_wl(c, _RUNETYPE_G, locale);
|
||||
}
|
||||
|
||||
int
|
||||
iswlower_l(wint_t c, locale_t locale)
|
||||
{
|
||||
return __isctype_wl(c, _CTYPE_L, locale);
|
||||
return __isctype_wl(c, _RUNETYPE_L, locale);
|
||||
}
|
||||
|
||||
int
|
||||
iswprint_l(wint_t c, locale_t locale)
|
||||
{
|
||||
return __isctype_wl(c, _CTYPE_R, locale);
|
||||
return __isctype_wl(c, _RUNETYPE_R, locale);
|
||||
}
|
||||
|
||||
int
|
||||
iswpunct_l(wint_t c, locale_t locale)
|
||||
{
|
||||
return __isctype_wl(c, _CTYPE_P, locale);
|
||||
return __isctype_wl(c, _RUNETYPE_P, locale);
|
||||
}
|
||||
|
||||
int
|
||||
iswspace_l(wint_t c, locale_t locale)
|
||||
{
|
||||
return __isctype_wl(c, _CTYPE_S, locale);
|
||||
return __isctype_wl(c, _RUNETYPE_S, locale);
|
||||
}
|
||||
|
||||
int
|
||||
iswupper_l(wint_t c, locale_t locale)
|
||||
{
|
||||
return __isctype_wl(c, _CTYPE_U, locale);
|
||||
return __isctype_wl(c, _RUNETYPE_U, locale);
|
||||
}
|
||||
|
||||
int
|
||||
iswxdigit_l(wint_t c, locale_t locale)
|
||||
{
|
||||
return __isctype_wl(c, _CTYPE_X, locale);
|
||||
return __isctype_wl(c, _RUNETYPE_X, locale);
|
||||
}
|
||||
|
||||
wint_t
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: rune.h,v 1.4 2017/09/05 03:16:13 schwarze Exp $ */
|
||||
/* $OpenBSD: rune.h,v 1.5 2024/02/04 12:46:01 jca Exp $ */
|
||||
/* $NetBSD: rune.h,v 1.9 2003/08/07 16:43:04 agc Exp $ */
|
||||
|
||||
/*-
|
||||
|
@ -47,34 +47,6 @@
|
|||
#define _LOCALE_C (locale_t)1
|
||||
#define _LOCALE_UTF8 (locale_t)2
|
||||
|
||||
/*
|
||||
* map _RTYPE_x to _CTYPE_x
|
||||
*
|
||||
* XXX: these should be defined in ctype.h and used in isxxx macros.
|
||||
* (note: current isxxx macros use "old" NetBSD masks and
|
||||
* _CTYPE_x are not public.)
|
||||
*/
|
||||
#define _CTYPE_A _RUNETYPE_A
|
||||
#define _CTYPE_C _RUNETYPE_C
|
||||
#define _CTYPE_D _RUNETYPE_D
|
||||
#define _CTYPE_G _RUNETYPE_G
|
||||
#define _CTYPE_L _RUNETYPE_L
|
||||
#define _CTYPE_P _RUNETYPE_P
|
||||
#define _CTYPE_S _RUNETYPE_S
|
||||
#define _CTYPE_U _RUNETYPE_U
|
||||
#define _CTYPE_X _RUNETYPE_X
|
||||
#define _CTYPE_B _RUNETYPE_B
|
||||
#define _CTYPE_R _RUNETYPE_R
|
||||
#define _CTYPE_I _RUNETYPE_I
|
||||
#define _CTYPE_T _RUNETYPE_T
|
||||
#define _CTYPE_Q _RUNETYPE_Q
|
||||
#define _CTYPE_SWM _RUNETYPE_SWM
|
||||
#define _CTYPE_SWS _RUNETYPE_SWS
|
||||
#define _CTYPE_SW0 _RUNETYPE_SW0
|
||||
#define _CTYPE_SW1 _RUNETYPE_SW1
|
||||
#define _CTYPE_SW2 _RUNETYPE_SW2
|
||||
#define _CTYPE_SW3 _RUNETYPE_SW3
|
||||
|
||||
__BEGIN_HIDDEN_DECLS
|
||||
extern _RuneLocale _DefaultRuneLocale;
|
||||
extern _RuneLocale *_Utf8RuneLocale;
|
||||
|
|
|
@ -48,134 +48,134 @@ _RuneLocale _DefaultRuneLocale = {
|
|||
"NONE",
|
||||
_DEFAULT_INVALID_RUNE,
|
||||
|
||||
{ /*00*/ _CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
/*08*/ _CTYPE_C,
|
||||
_CTYPE_C|_CTYPE_S|_CTYPE_B,
|
||||
_CTYPE_C|_CTYPE_S,
|
||||
_CTYPE_C|_CTYPE_S,
|
||||
_CTYPE_C|_CTYPE_S,
|
||||
_CTYPE_C|_CTYPE_S,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
/*10*/ _CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
/*18*/ _CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
_CTYPE_C,
|
||||
/*20*/ _CTYPE_S|_CTYPE_B|_CTYPE_R|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
/*28*/ _CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
/*30*/ _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|_CTYPE_SW1|0,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|_CTYPE_SW1|1,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|_CTYPE_SW1|2,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|_CTYPE_SW1|3,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|_CTYPE_SW1|4,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|_CTYPE_SW1|5,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|_CTYPE_SW1|6,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|_CTYPE_SW1|7,
|
||||
/*38*/ _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|_CTYPE_SW1|8,
|
||||
_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|_CTYPE_SW1|9,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
/*40*/ _CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1|10,
|
||||
_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1|11,
|
||||
_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1|12,
|
||||
_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1|13,
|
||||
_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1|14,
|
||||
_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1|15,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
/*48*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
/*50*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
/*58*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
/*60*/ _CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1|10,
|
||||
_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1|11,
|
||||
_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1|12,
|
||||
_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1|13,
|
||||
_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1|14,
|
||||
_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1|15,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
/*68*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
/*70*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
/*78*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_P|_CTYPE_R|_CTYPE_G|_CTYPE_SW1,
|
||||
_CTYPE_C,
|
||||
{ /*00*/ _RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
/*08*/ _RUNETYPE_C,
|
||||
_RUNETYPE_C|_RUNETYPE_S|_RUNETYPE_B,
|
||||
_RUNETYPE_C|_RUNETYPE_S,
|
||||
_RUNETYPE_C|_RUNETYPE_S,
|
||||
_RUNETYPE_C|_RUNETYPE_S,
|
||||
_RUNETYPE_C|_RUNETYPE_S,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
/*10*/ _RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
/*18*/ _RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
_RUNETYPE_C,
|
||||
/*20*/ _RUNETYPE_S|_RUNETYPE_B|_RUNETYPE_R|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
/*28*/ _RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
/*30*/ _RUNETYPE_D|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_X|_RUNETYPE_SW1|0,
|
||||
_RUNETYPE_D|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_X|_RUNETYPE_SW1|1,
|
||||
_RUNETYPE_D|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_X|_RUNETYPE_SW1|2,
|
||||
_RUNETYPE_D|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_X|_RUNETYPE_SW1|3,
|
||||
_RUNETYPE_D|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_X|_RUNETYPE_SW1|4,
|
||||
_RUNETYPE_D|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_X|_RUNETYPE_SW1|5,
|
||||
_RUNETYPE_D|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_X|_RUNETYPE_SW1|6,
|
||||
_RUNETYPE_D|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_X|_RUNETYPE_SW1|7,
|
||||
/*38*/ _RUNETYPE_D|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_X|_RUNETYPE_SW1|8,
|
||||
_RUNETYPE_D|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_X|_RUNETYPE_SW1|9,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
/*40*/ _RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_X|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1|10,
|
||||
_RUNETYPE_U|_RUNETYPE_X|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1|11,
|
||||
_RUNETYPE_U|_RUNETYPE_X|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1|12,
|
||||
_RUNETYPE_U|_RUNETYPE_X|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1|13,
|
||||
_RUNETYPE_U|_RUNETYPE_X|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1|14,
|
||||
_RUNETYPE_U|_RUNETYPE_X|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1|15,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
/*48*/ _RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
/*50*/ _RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
/*58*/ _RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_U|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
/*60*/ _RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_X|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1|10,
|
||||
_RUNETYPE_L|_RUNETYPE_X|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1|11,
|
||||
_RUNETYPE_L|_RUNETYPE_X|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1|12,
|
||||
_RUNETYPE_L|_RUNETYPE_X|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1|13,
|
||||
_RUNETYPE_L|_RUNETYPE_X|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1|14,
|
||||
_RUNETYPE_L|_RUNETYPE_X|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1|15,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
/*68*/ _RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
/*70*/ _RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
/*78*/ _RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_L|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_A|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_P|_RUNETYPE_R|_RUNETYPE_G|_RUNETYPE_SW1,
|
||||
_RUNETYPE_C,
|
||||
},
|
||||
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: wctype.c,v 1.1 2022/07/25 21:38:24 guenther Exp $ */
|
||||
/* $OpenBSD: wctype.c,v 1.2 2024/02/04 12:46:01 jca Exp $ */
|
||||
/* $NetBSD: iswctype.c,v 1.15 2005/02/09 21:35:46 kleink Exp $ */
|
||||
|
||||
/*
|
||||
|
@ -43,18 +43,18 @@
|
|||
|
||||
static struct _WCTypeEntry wctype_entries[_WCTYPE_NINDEXES] =
|
||||
{
|
||||
{ "alnum", _CTYPE_A|_CTYPE_D },
|
||||
{ "alpha", _CTYPE_A },
|
||||
{ "blank", _CTYPE_B },
|
||||
{ "cntrl", _CTYPE_C },
|
||||
{ "digit", _CTYPE_D },
|
||||
{ "graph", _CTYPE_G },
|
||||
{ "lower", _CTYPE_L },
|
||||
{ "print", _CTYPE_R },
|
||||
{ "punct", _CTYPE_P },
|
||||
{ "space", _CTYPE_S },
|
||||
{ "upper", _CTYPE_U },
|
||||
{ "xdigit", _CTYPE_X },
|
||||
{ "alnum", _RUNETYPE_A|_RUNETYPE_D },
|
||||
{ "alpha", _RUNETYPE_A },
|
||||
{ "blank", _RUNETYPE_B },
|
||||
{ "cntrl", _RUNETYPE_C },
|
||||
{ "digit", _RUNETYPE_D },
|
||||
{ "graph", _RUNETYPE_G },
|
||||
{ "lower", _RUNETYPE_L },
|
||||
{ "print", _RUNETYPE_R },
|
||||
{ "punct", _RUNETYPE_P },
|
||||
{ "space", _RUNETYPE_S },
|
||||
{ "upper", _RUNETYPE_U },
|
||||
{ "xdigit", _RUNETYPE_X },
|
||||
};
|
||||
|
||||
wctype_t
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue