免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1194 | 回复: 0
打印 上一主题 下一主题

linux 0.11 - /include/ctype.h [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-11 04:33 |只看该作者 |倒序浏览

                                               
/* linux-2.6.24/include/linux/ctype.h */
#ifndef _LINUX_CTYPE_H
#define _LINUX_CTYPE_H
/*
* NOTE! This ctype does not handle EOF like the standard C
* library is required to.
*/
#define _U    0x01    /* upper */ /*  大写字母A-Z*/
#define _L    0x02    /* lower */ /* 小写字母a-z */
#define _D    0x04    /* digit */  /* 数字0-9 */
#define _C    0x08    /* cntrl */  /* 控制字符 */
#define _P    0x10    /* punct */ /*  标点符号*/
#define _S    0x20    /* white space (space/lf/tab) */ /* 空白字符:空格、\t、\n 等 */
#define _X    0x40    /* hex digit */ /* 十六进制数 */
#define _SP    0x80    /* hard space (0x20) */  /* 空格字符0x20 */
extern unsigned char _ctype[];  /* 定义于/lib/ctype.c */
#define __ismask(x) (_ctype[(int)(unsigned char)(x)])
#define isalnum(c)    ((__ismask(c)&(_U|_L|_D)) != 0)
#define isalpha(c)    ((__ismask(c)&(_U|_L)) != 0)
#define iscntrl(c)    ((__ismask(c)&(_C)) != 0)
#define isdigit(c)    ((__ismask(c)&(_D)) != 0)
#define isgraph(c)    ((__ismask(c)&(_P|_U|_L|_D)) != 0)
#define islower(c)    ((__ismask(c)&(_L)) != 0)
#define isprint(c)    ((__ismask(c)&(_P|_U|_L|_D|_SP)) != 0)
#define ispunct(c)    ((__ismask(c)&(_P)) != 0)
#define isspace(c)    ((__ismask(c)&(_S)) != 0)
#define isupper(c)    ((__ismask(c)&(_U)) != 0)
#define isxdigit(c)    ((__ismask(c)&(_D|_X)) != 0)
#define isascii(c) (((unsigned char)(c))=0x7f)
#define toascii(c) (((unsigned char)(c))&0x7f)
/* 考虑到多线程的安全问题,这里用函数代替宏定义;对比linux 0.11中的宏定义 */
static inline unsigned char __tolower(unsigned char c)
{
    if (isupper(c))
        c -= 'A'-'a';
    return c;
}
static inline unsigned char __toupper(unsigned char c)
{
    if (islower(c))
        c -= 'a'-'A';
    return c;
}
#define tolower(c) __tolower(c)
#define toupper(c) __toupper(c)
#endif
/* linux-0.11/include/ctype.h */
#ifndef _CTYPE_H
#define _CTYPE_H
#define _U    0x01    /* upper */
#define _L    0x02    /* lower */
#define _D    0x04    /* digit */
#define _C    0x08    /* cntrl */
#define _P    0x10    /* punct */
#define _S    0x20    /* white space (space/lf/tab) */
#define _X    0x40    /* hex digit */
#define _SP    0x80    /* hard space (0x20) */
extern unsigned char _ctype[];
extern char _ctmp;
#define isalnum(c) ((_ctype+1)[c]&(_U|_L|_D))  /* _ctype为数组首地址,和EOF(0x00)的地址一样 */
#define isalpha(c) ((_ctype+1)[c]&(_U|_L))
#define iscntrl(c) ((_ctype+1)[c]&(_C))
#define isdigit(c) ((_ctype+1)[c]&(_D))
#define isgraph(c) ((_ctype+1)[c]&(_P|_U|_L|_D))
#define islower(c) ((_ctype+1)[c]&(_L))
#define isprint(c) ((_ctype+1)[c]&(_P|_U|_L|_D|_SP))
#define ispunct(c) ((_ctype+1)[c]&(_P))
#define isspace(c) ((_ctype+1)[c]&(_S))
#define isupper(c) ((_ctype+1)[c]&(_U))
#define isxdigit(c) ((_ctype+1)[c]&(_D|_X))
#define isascii(c) (((unsigned) c)=0x7f)
#define toascii(c) (((unsigned) c)&0x7f)
/* 对于多线程编程来说只是不安全的,因为两个或多个县城可能在同一时刻使用这个公共的临时变量 */
#define tolower(c) (_ctmp=c,isupper(_ctmp)?_ctmp-('A'-'a'):_ctmp)
#define toupper(c) (_ctmp=c,islower(_ctmp)?_ctmp-('a'-'A'):_ctmp)
#endif
/* linux-0.11/lib/ctype.c */
/*
*  linux/lib/ctype.c
*
*  (C) 1991  Linus Torvalds
*/
#include ctype.h>
char _ctmp;
/* 字符特性数组 */
unsigned char _ctype[] = {0x00,            /* EOF */
_C,_C,_C,_C,_C,_C,_C,_C,            /* 0-7 */
_C,_C|_S,_C|_S,_C|_S,_C|_S,_C|_S,_C,_C,        /* 8-15 */
_C,_C,_C,_C,_C,_C,_C,_C,            /* 16-23 */
_C,_C,_C,_C,_C,_C,_C,_C,            /* 24-31 */
_S|_SP,_P,_P,_P,_P,_P,_P,_P,            /* 32-39 */
_P,_P,_P,_P,_P,_P,_P,_P,            /* 40-47 */
_D,_D,_D,_D,_D,_D,_D,_D,            /* 48-55 */
_D,_D,_P,_P,_P,_P,_P,_P,            /* 56-63 */
_P,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U,    /* 64-71 */
_U,_U,_U,_U,_U,_U,_U,_U,            /* 72-79 */
_U,_U,_U,_U,_U,_U,_U,_U,            /* 80-87 */
_U,_U,_U,_P,_P,_P,_P,_P,            /* 88-95 */
_P,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L,    /* 96-103 */
_L,_L,_L,_L,_L,_L,_L,_L,            /* 104-111 */
_L,_L,_L,_L,_L,_L,_L,_L,            /* 112-119 */
_L,_L,_L,_P,_P,_P,_P,_C,            /* 120-127 */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,        /* 128-143 */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,        /* 144-159 */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,        /* 160-175 */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,        /* 176-191 */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,        /* 192-207 */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,        /* 208-223 */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,        /* 224-239 */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};        /* 240-255 */
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/33029/showart_1286049.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP