📄 istlangch.c
字号:
/* *---------------------------------------------------------------------- * T-Kernel / Standard Extension * * Copyright (C) 2006 by Ken Sakamura. All rights reserved. * T-Kernel / Standard Extension is distributed * under the T-License for T-Kernel / Standard Extension. *---------------------------------------------------------------------- * * Version: 1.00.00 * Released by T-Engine Forum(http://www.t-engine.org) at 2006/8/11. * *---------------------------------------------------------------------- *//* * istlangch.c (libtcstr) */#include <basic.h>#include <tlang.h>#define MAX_FE 128#define TSD_ITH_VAL_2 2#define TSD_ITH_MSK_0XFF00 (TC)0xff00#define TSD_ITH_MAX_0XFD (TC)0xfd#define TSD_ITH_RTN_M1 (-1)#define TSD_ITH_RTN_M2 (-2)#define TSD_ITH_VAL_0XFEFE (TC)0xfefe#define TSD_ITH_MSK_0XFF (TC)0xff#define TSD_ITH_CH_0XFE00 0xfe00U#define TSD_ITH_CH_0X0000 0x0000U#define TSD_ITH_MIN_0X21 (TC)0x21#define TSD_ITH_MAX_0X7E (TC)0x7e#define TSD_ITH_MIN_0X80 (TC)0x80#define TSD_ITH_SFT_MCR ((UW)(nn-1) << 8)/* * Determination of language (script) specification code * Determine the language specification code characters one by one (in TC). * Return value > 0 Language specification code (TLANG is returned) * = 0 Not language specification code * = -1 Invalid language specification code * = -2 Indefinite language specification code (The code is not complete) * * Initialize *n to "*n = 0" when calling it for the first time. Subsequently, call the returned * value *n repeatedly without change to determine the language specification code. * * (Ex. of use) * n = 0; * while ( (lang = isTLANGch(*tp++, &n)) == -2 ); */EXPORT W isTLANGch( TC ch, W *n ){ W nn; if ( ch == TSD_ITH_VAL_0XFEFE ) { *n += TSD_ITH_VAL_2; return TSD_ITH_RTN_M2; } nn = *n; *n = 0; switch ( ch & TSD_ITH_MSK_0XFF00 ) { case TSD_ITH_CH_0XFE00: nn++; ch &= TSD_ITH_MSK_0XFF; /* no break */ case TSD_ITH_CH_0X0000: if (( nn == 0 )||( nn > MAX_FE )) { break; } if ( ((ch >= TSD_ITH_MIN_0X21 )&&( ch <= TSD_ITH_MAX_0X7E)) || ((ch >= TSD_ITH_MIN_0X80 )&&( ch <= TSD_ITH_MAX_0XFD)) ) { /* Language specification code */ return (W)(TSD_ITH_SFT_MCR | ch); } break; default: /* nothing to do */ break; } /* nn = 0 : Not language specification code nn > 0 : Invalid language specification code */ return ( nn == 0 )? 0: TSD_ITH_RTN_M1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -