📄 ltf_id.c
字号:
0x20,0x21-0x7e JIS X 0201 */#define A1S 0x21U#define A1E 0x77Ustatic UB T2A1[] = { 0x20, /* 0x2121 */ 0, /* 0x2122 */ 0, /* 0x2123 */ 0x2c, /* 0x2124 */ 0x2e, /* 0x2125 */ 0, /* 0x2126 */ 0x3a, /* 0x2127 */ 0x3b, /* 0x2128 */ 0x3f, /* 0x2129 */ 0x21, /* 0x212a */ 0, /* 0x212b */ 0, /* 0x212c */ 0, /* 0x212d */ 0x60, /* 0x212e */ 0, /* 0x212f */ 0x5e, /* 0x2130 */ 0x7e, /* 0x2131 */ 0x5f, /* 0x2132 */ 0, /* 0x2133 */ 0, /* 0x2134 */ 0, /* 0x2135 */ 0, /* 0x2136 */ 0, /* 0x2137 */ 0, /* 0x2138 */ 0, /* 0x2139 */ 0, /* 0x213a */ 0, /* 0x213b */ 0, /* 0x213c */ 0, /* 0x213d */ 0, /* 0x213e */ 0x2f, /* 0x213f */ 0, /* 0x2140 */ 0, /* 0x2141 */ 0, /* 0x2142 */ 0x7c, /* 0x2143 */ 0, /* 0x2144 */ 0, /* 0x2145 */ 0, /* 0x2146 */ 0x27, /* 0x2147 */ 0, /* 0x2148 */ 0x22, /* 0x2149 */ 0x28, /* 0x214a */ 0x29, /* 0x214b */ 0, /* 0x214c */ 0, /* 0x214d */ 0x5b, /* 0x214e */ 0x5d, /* 0x214f */ 0x7b, /* 0x2150 */ 0x7d, /* 0x2151 */ 0, /* 0x2152 */ 0, /* 0x2153 */ 0, /* 0x2154 */ 0, /* 0x2155 */ 0, /* 0x2156 */ 0, /* 0x2157 */ 0, /* 0x2158 */ 0, /* 0x2159 */ 0, /* 0x215a */ 0, /* 0x215b */ 0x2b, /* 0x215c */ 0x2d, /* 0x215d */ 0, /* 0x215e */ 0, /* 0x215f */ 0, /* 0x2160 */ 0x3d, /* 0x2161 */ 0, /* 0x2162 */ 0x3c, /* 0x2163 */ 0x3e, /* 0x2164 */ 0, /* 0x2165 */ 0, /* 0x2166 */ 0, /* 0x2167 */ 0, /* 0x2168 */ 0, /* 0x2169 */ 0, /* 0x216a */ 0, /* 0x216b */ 0, /* 0x216c */ 0, /* 0x216d */ 0, /* 0x216e */ 0x5c, /* 0x216f */ 0x24, /* 0x2170 */ 0, /* 0x2171 */ 0, /* 0x2172 */ 0x25, /* 0x2173 */ 0x23, /* 0x2174 */ 0x26, /* 0x2175 */ 0x2a, /* 0x2176 */ 0x40, /* 0x2177 */};/* JIS X 0208-> JIS X 0201 conversion table Use 0x23xx (Row 3) of JIS X 0208 as a reference point for offset and store corresponding JIS X 0201 characters. Offset: JIS code - 0x2330 Data: 0 Cannot be converted into SJIS(1Byte). 0x30-0x7a SJIS(1Byte) */#define A3S 0x30U#define A3E 0x7aUstatic UB T2A3[] = { 0x30, /* 0x2330 */ 0x31, /* 0x2331 */ 0x32, /* 0x2332 */ 0x33, /* 0x2333 */ 0x34, /* 0x2334 */ 0x35, /* 0x2335 */ 0x36, /* 0x2336 */ 0x37, /* 0x2337 */ 0x38, /* 0x2338 */ 0x39, /* 0x2339 */ 0, /* 0x233a */ 0, /* 0x233b */ 0, /* 0x233c */ 0, /* 0x233d */ 0, /* 0x233e */ 0, /* 0x233f */ 0, /* 0x2340 */ 0x41, /* 0x2341 */ 0x42, /* 0x2342 */ 0x43, /* 0x2343 */ 0x44, /* 0x2344 */ 0x45, /* 0x2345 */ 0x46, /* 0x2346 */ 0x47, /* 0x2347 */ 0x48, /* 0x2348 */ 0x49, /* 0x2349 */ 0x4a, /* 0x234a */ 0x4b, /* 0x234b */ 0x4c, /* 0x234c */ 0x4d, /* 0x234d */ 0x4e, /* 0x234e */ 0x4f, /* 0x234f */ 0x50, /* 0x2350 */ 0x51, /* 0x2351 */ 0x52, /* 0x2352 */ 0x53, /* 0x2353 */ 0x54, /* 0x2354 */ 0x55, /* 0x2355 */ 0x56, /* 0x2356 */ 0x57, /* 0x2357 */ 0x58, /* 0x2358 */ 0x59, /* 0x2359 */ 0x5a, /* 0x235a */ 0, /* 0x235b */ 0, /* 0x235c */ 0, /* 0x235d */ 0, /* 0x235e */ 0, /* 0x235f */ 0, /* 0x2360 */ 0x61, /* 0x2361 */ 0x62, /* 0x2362 */ 0x63, /* 0x2363 */ 0x64, /* 0x2364 */ 0x65, /* 0x2365 */ 0x66, /* 0x2366 */ 0x67, /* 0x2367 */ 0x68, /* 0x2368 */ 0x69, /* 0x2369 */ 0x6a, /* 0x236a */ 0x6b, /* 0x236b */ 0x6c, /* 0x236c */ 0x6d, /* 0x236d */ 0x6e, /* 0x236e */ 0x6f, /* 0x236f */ 0x70, /* 0x2370 */ 0x71, /* 0x2371 */ 0x72, /* 0x2372 */ 0x73, /* 0x2373 */ 0x74, /* 0x2374 */ 0x75, /* 0x2375 */ 0x76, /* 0x2376 */ 0x77, /* 0x2377 */ 0x78, /* 0x2378 */ 0x79, /* 0x2379 */ 0x7a, /* 0x237a */};/* * TC -> SJIS conversion function */LOCAL W ltf_tctosj( TF_CTX ctx, UB *pubSjDst, TC tcTCSrc, W wZenHan){ W wErr = 0, wI, wLen; UB ubC1, ubC2, ubASCII; ubC1 = ( UB)( tcTCSrc >> TSD_LTF_SFT_8); ubC2 = ( UB)( tcTCSrc & TSD_LTF_CD_0XFF); if( tcTCSrc <= TSD_LTF_TCD_0X20){ /* Control code */ if( pubSjDst != 0) { *pubSjDst = ( UB)tcTCSrc; } return( 1); } if( ctx->uhLang != TSC_SYS){ goto unsup_char; } if( IS_TFHAN( wZenHan) != 0){ ubASCII = 0; if( tcTCSrc < TSD_LTF_TCD_0X80){ /* Control code */ ubASCII = ( UB)tcTCSrc; }else if( ubC1 == TSD_LTF_CD_0X21){ /* Row 1: Symbols */ ubASCII = (( ubC2 >= A1S )&&( ubC2 <= A1E))? T2A1[ ubC2 - A1S] : 0;#ifdef USE_HKANA if( ubASCII == 0){ switch( ubC2){ case TSD_LTF_CD_0X22: ubASCII = TSD_LTF_CD_0XA4; break; case TSD_LTF_CD_0X23: ubASCII = TSD_LTF_CD_0XA1; break; case TSD_LTF_CD_0X26: ubASCII = TSD_LTF_CD_0XA5; break; case TSD_LTF_CD_0X2B: ubASCII = TSD_LTF_CD_0XDE; break; case TSD_LTF_CD_0X2C: ubASCII = TSD_LTF_CD_0XDF; break; case TSD_LTF_CD_0X56: ubASCII = TSD_LTF_CD_0XA2; break; case TSD_LTF_CD_0X57: ubASCII = TSD_LTF_CD_0XA3; break; default: /* nothing to do */ break; } } #endif /* USE_HKANA */ }else if ( ubC1 == TSD_LTF_CD_0X23) { /* Row 3: Alphanumeric */ ubASCII = (( ubC2 >= A3S )&&( ubC2 <= A3E))? T2A3[ ubC2 - A3S] : 0;#ifdef USE_HKANA }else if ( ubC1 == TSD_LTF_CD_0X25) { /* Row 5: Kana */ for( wI = 0; _hzkana[ wI] != TSD_LTF_TCD_0X212B; wI++){ if( _hzkana[ wI] == tcTCSrc){ ubASCII = TSD_LTF_CD_0XA0 + wI; break; } }#endif /* USE_HKANA */ } if( ubASCII != 0){ if( pubSjDst != 0){ *pubSjDst = ubASCII; } return( 1); } }#if defined(USE_JIS) if( isAZone( tcTCSrc) != 0){ if( pubSjDst != 0){ ubC2 += (( ubC1 & 1) == 0)? TSD_LTF_CD_0X7D: TSD_LTF_CD_0X1F; if( ubC2 >= TSD_LTF_CD_0X7F){ ubC2++; } ubC1 = ( ubC1 + TSD_LTF_CD_0XE1) >> 1; if( ubC1 >= TSD_LTF_CD_0XA0){ ubC1 += TSD_LTF_CD_0X40; } *pubSjDst++ = ubC1; *pubSjDst = ubC2; } return( TSD_LTS_RTN_2); }#endif /* defined(USE_JIS) */unsup_char: wLen = TSD_LTF_WLN_M1; switch( ctx->ubT2XUnsupChar){ case TSD_LTF_CS2_0: /* Default, = or? */ if( IS_TFHAN( wZenHan) != 0){ if( pubSjDst != 0) { *pubSjDst = TSD_LTF_CD_0X3F; /* ? */ } wLen = 1; }else{ if( pubSjDst != 0){ /* = */ *pubSjDst++ = TSD_LTF_CD_0X81; *pubSjDst = TSD_LTF_CD_0XAC; } wLen = TSD_LTF_WLN_2; } break; case TSD_LTF_CS2_2: wErr = E_NOSPT; goto err_ret; /* Not supported */ case TSD_LTF_CS2_1: default: wErr = TSD_LTF_WER_M1; goto err_ret; } return( wLen);err_ret: DP(( "DEBUG:ltf_tctosj() tcTCSrc=0x%04x, wZenHan=%d\n", tcTCSrc, wZenHan)); return( wErr);}/* * TC -> EUC conversion function */LOCAL W ltf_tctoeuc( TF_CTX ctx, UB *pubEucDst, TC tcTCSrc, W wZenHan){ W wErr = 0, wI, wLen; UB ubC1, ubC2, ubASCII; if( tcTCSrc <= TSD_LTF_TCD_0X20){ /* Control code */ if( pubEucDst != 0) { *pubEucDst = ( UB)tcTCSrc; } return( 1); } if( ctx->uhLang != TSC_SYS){ goto unsup_char; } ubC1 = ( UB)( tcTCSrc >> TSD_LTF_SFT_8); ubC2 = ( UB)( tcTCSrc & TSD_LTF_TCD_0XFF); if( IS_TFHAN( wZenHan) != 0){ ubASCII = 0; if( tcTCSrc < TSD_LTF_CCD_0X80){ /* Control code */ ubASCII = ( UB)tcTCSrc; }else if( ubC1 == TSD_LTF_CD_0X21){ /* Row 1: Symbols */ ubASCII = (( ubC2 >= A1S )&&( ubC2 <= A1E))? T2A1[ ubC2 - A1S] : 0;#ifdef USE_HKANA if( ubASCII == 0){ switch( ubC2){ case TSD_LTE_CAS_0X22: ubASCII = TSD_LTF_CD_0XA4; break; case TSD_LTE_CAS_0X23: ubASCII = TSD_LTF_CD_0XA1; break; case TSD_LTE_CAS_0X26: ubASCII = TSD_LTF_CD_0XA5; break; case TSD_LTE_CAS_0X2B: ubASCII = TSD_LTF_CD_0XDE; break; case TSD_LTE_CAS_0X2C: ubASCII = TSD_LTF_CD_0XDF; break; case TSD_LTE_CAS_0X56: ubASCII = TSD_LTF_CD_0XA2; break; case TSD_LTE_CAS_0X57: ubASCII = TSD_LTF_CD_0XA3; break; default: /* nothing to do */ break; } } #endif /* USE_HKANA */ }else if ( ubC1 == TSD_LTF_CD_0X23) { /* Row 3: Alphanumeric */ ubASCII = (( ubC2 >= A3S )&&( ubC2 <= A3E))? T2A3[ ubC2 - A3S] : 0;#ifdef USE_HKANA }else if ( ubC1 == TSD_LTF_CD_0X25) { /* Row 5: Kana */ for( wI = 0; _hzkana[ wI] != TSD_LTF_TCD_0X212B; wI++){ if( _hzkana[ wI] == tcTCSrc){ ubASCII = TSD_LTF_CD_0XA0 + wI; break; } }#endif /* USE_HKANA */ } if( ubASCII != 0){ if( pubEucDst != 0){ if( TSD_LTF_CD_0XA0 <= ubASCII){ *pubEucDst++ = TSD_LTF_CD_0X8E; } *pubEucDst = ubASCII; } if( TSD_LTF_CD_0XA0 <= ubASCII){ return( TSD_LTE_RTN_2); } return( 1); } }#if defined(USE_JIS) if( isAZone( tcTCSrc) != 0){ if( pubEucDst != 0){ tcTCSrc |= TSD_LTE_MSK_0X8080; *pubEucDst++ = tcTCSrc >> TSD_LTF_SFT_8; *pubEucDst = tcTCSrc; } return( TSD_LTE_RTN_2); }#endif /* defined(USE_JIS) */unsup_char: wLen = TSD_LTF_WLN_M1; switch( ctx->ubT2XUnsupChar){ case TSD_LTF_CS2_0: if( IS_TFHAN( wZenHan) != 0){ if( pubEucDst != 0) { *pubEucDst = TSD_LTF_CD_0X3F; /* ? */ } wLen = 1; }else{ if( pubEucDst != 0){ *pubEucDst++ = TSD_LTF_CD_0XA2; /* = */ *pubEucDst = TSD_LTF_CD_0XAE; } wLen = TSD_LTF_WLN_2; } break; case TSD_LTF_CS2_2: wErr = E_NOSPT; goto err_ret; /* Not supported */ case TSD_LTF_CS2_1: default: wErr = TSD_LTF_WER_M1; goto err_ret; } return( wLen);err_ret: DP(( "DEBUG:ltf_tctoeuc() tcTCSrc=0x%04x, wZenHan=%d\n", tcTCSrc, wZenHan)); return( wErr);}#if defined(USE_UNICODE) /* * TC -> UNICODE conversion function */LOCAL W ltf_tctouni( TF_CTX ctx, UH *puhUniDst, TC tcTCSrc, W wZenHan){ W wErr = 0, wI, wLen; UB ubC1, ubC2, ubASCII; if( tcTCSrc <= TSD_LTF_TCD_0X0020){ /* Control code */ if( puhUniDst) { *puhUniDst = tcTCSrc; } return( TSD_LTU_RTN_2); } if( ctx->uhLang != TSC_SYS){ goto unsup_char; } ubC1 = ( UB)( tcTCSrc >> TSD_LTF_SFT_8); ubC2 = ( UB)( tcTCSrc & TSD_LTF_TCD_0XFF); if( IS_TFHAN( wZenHan)){ ubASCII = 0; if( tcTCSrc < TSD_LTF_CCD_0X80){ /* Control code */ ubASCII = ( UB)tcTCSrc; }else if( ubC1 == TSD_LTF_CD_0X21){ /* Row 1: Symbols */ ubASCII = ( ubC2 >= A1S && ubC2 <= A1E)? T2A1[ ubC2 - A1S] : 0;#ifdef USE_HKANA if( ubASCII == 0){ switch( ubC2){ case TSD_LTU_CAS_22: ubASCII = TSD_LTF_CD_0XA4; break; case TSD_LTU_CAS_23: ubASCII = TSD_LTF_CD_0XA1; break; case TSD_LTU_CAS_26: ubASCII = TSD_LTF_CD_0XA5; break; case TSD_LTU_CAS_2B: ubASCII = TSD_LTF_CD_0XDE; break; case TSD_LTU_CAS_2C: ubASCII = TSD_LTF_CD_0XDF; break; case TSD_LTU_CAS_56: ubASCII = TSD_LTF_CD_0XA2; break; case TSD_LTU_CAS_57: ubASCII = TSD_LTF_CD_0XA3; break; default: /* nothing to do */ break; } } #endif /* USE_HKANA */ }else if ( ubC1 == TSD_LTF_CD_0X23) { /* Row 3: Alphanumeric */ ubASCII = ( ubC2 >= A3S && ubC2 <= A3E)? T2A3[ ubC2 - A3S] : 0;#ifdef USE_HKANA }else if ( ubC1 == TSD_LTF_CD_0X25) { /* Row 5: Kana */ for( wI = 0; _hzkana[ wI] != TSD_LTF_TCD_0X212B; wI++){ if( _hzkana[ wI] == tcTCSrc){ ubASCII = TSD_LTF_CD_0XA0 + wI; break; } }#endif /* USE_HKANA */ } if( ubASCII){ if( puhUniDst){ if( TSD_LTF_CD_0XA0 <= ubASCII){ *puhUniDst = TSD_LTF_UCD_0XFF00 | ( ubASCII - TSD_LTF_CD_0X40); }else{ *puhUniDst = ubASCII; } } return( TSD_LTU_RTN_2); } }#if defined(USE_JIS) if( isAZone( tcTCSrc)){ for( wI = 0; wI < wUni2TCLen; wI++){ if( _ptcUni2TC[ wI] == tcTCSrc){ break; } } if( wI == wUni2TCLen){ goto unsup_char; } if( puhUniDst) { *puhUniDst = ( UH)wI; } return( TSD_LTU_RTN_2); }#endif /* defined(USE_JIS) */unsup_char: wLen = TSD_LTF_WLN_M1; switch( ctx->ubT2XUnsupChar){ case TSD_LTF_CS2_0: if( IS_TFHAN( wZenHan)){ if( puhUniDst) { *puhUniDst = TSD_LTF_UCD_0X003F; /* ? */ } wLen = TSD_LTF_WLN_2; }else{ if( puhUniDst){ *puhUniDst = TSD_LTF_UCD_0X3013; /* = */ } wLen = TSD_LTF_WLN_2; } break; case TSD_LTF_CS2_2: wErr = E_NOSPT; goto err_ret; /* Not supported */ case TSD_LTF_CS2_1: default: wErr = TSD_LTF_WER_M1; goto err_ret; } return( wLen);err_ret: DP(( "DEBUG:ltf_tctouni() tcTCSrc=0x%04x, wZenHan=%d\n", tcTCSrc, wZenHan)); return( wErr);}#endif /* defined(USE_UNICODE) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -