⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sjis.c

📁 用于移动设备上的java虚拟机源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * @(#)sjis.c	1.15 02/07/24 @(#) * * Copyright (c) 1999-2002 Sun Microsystems, Inc.  All rights reserved. * PROPRIETARY/CONFIDENTIAL * Use is subject to license terms. */#include <kni.h>#include "conv.h"static int byteToCharSJIS_convert(const unsigned char *in,                                  int inStart,                                   int inEnd,                                  unsigned short *out,                                  int outStart,                                  int outEnd,                                  int *charOff,                                  unsigned char *savedByte,                                  int *badChars);static int charToByteSJIS_convert(const unsigned short *in,                                  int inStart,                                   int inEnd,                                  unsigned char *out,                                  int outStart,                                  int outEnd,                                  int *byteOff,                                  int *badChars);static intSJISMaxLen(void){    return 2;}static intSJISLen(const unsigned char *c, int len){    if (c == NULL || *c == '\0') {        return 0;    }    if ((*c > 0x80  &&  *c < 0xA0)  ||  *c > 0xDF) {        return (len >= 2) ? 2 : -1;    }    return (len >= 1) ? 1 : -1;}static intunicodeToSJIS(const unicode *ustr, int ulen, unsigned char *sstr, int slen){    int byteOff = 0;    /* when ulen == 0, charToByteSJIS_convert dose not work correctly. */    if (ulen > 0) {        int badChars;        charToByteSJIS_convert(ustr, 0, ulen,                                sstr, 0, slen,                               &byteOff, &badChars);    }    return byteOff;}static intSJISToUnicode(const unsigned char *sstr, int slen, unicode *ustr, int ulen){    int charOff = 0;    /* when slen == 0, byteToCharSJIS_convert dose not work correctly. */    if (slen > 0) {        int badChars;        unsigned char savedByte = 0;        byteToCharSJIS_convert(sstr, 0, slen,                                ustr, 0, ulen,                                &charOff, &savedByte, &badChars);    }    return charOff;}static intsizeOfSJISInUnicode(const unsigned char *b, int offset, int len){    int numChars = 0;    if (len > 0) {        int pos = offset;        int end = offset + len;        char bPos = 1;        for (; pos < end; pos++) {            unsigned char t = (unsigned char) b[pos];            if (bPos == 2) {                bPos = 1;            } else if ((t > 0x80  &&  t < 0xA0)  ||  t > 0xDF) {                bPos = 2;                continue;            }            numChars++;        }    }    return numChars;}static intsizeOfUnicodeInSJIS(const unicode *c, int offset, int len){    int numBytes = 0;    if (len > 0) {        int pos = offset;        int end = offset + len;        for (; pos < end; pos++) {            unicode u = (unicode) c[pos];            if (u < 0x81  ||  (u > 0xFF60 && u < 0xFF9F)  ||                u == 0xA0  ||  u == 0xA5  ||  u == 0x203E) {                numBytes++;            } else {                numBytes += 2;            }        }    }    return numBytes;}    LcConvMethodsRec SJISConvRec = {    "SJIS",    SJISMaxLen,    SJISLen,    unicodeToSJIS,    SJISToUnicode,    sizeOfSJISInUnicode,    sizeOfUnicodeInSJIS};/*========================================================================= * SYSTEM:    KVM * SUBSYSTEM: Internationalization - Japanese encoding translation * FILE:      uni2sjis.h * OVERVIEW:  Definitions for Unicode to Shift-JIS encoding conversion * AUTHOR:    Jim Clark, nightware@mindspring.com *=======================================================================*/#define uni2sjis_h#define KANJI_START_VAL  0x4E00   /* First Unicode value in kanji table. *//* Set index frequency.  This controls which index into the kanji * conversion table will be compiled into uni2sjisData.c * * Define ONE of the following: * *   KANJI_INDEX_FREQ_008 *   KANJI_INDEX_FREQ_016 *   KANJI_INDEX_FREQ_032 *   KANJI_INDEX_FREQ_064 *   KANJI_INDEX_FREQ_128 *   KANJI_INDEX_FREQ_256 * */#define KANJI_INDEX_FREQ_256#ifdef  KANJI_INDEX_FREQ_008#define KANJI_INDEX_FREQ   8#endif#ifdef  KANJI_INDEX_FREQ_016#define KANJI_INDEX_FREQ  16#endif#ifdef  KANJI_INDEX_FREQ_032#define KANJI_INDEX_FREQ  32#endif#ifdef  KANJI_INDEX_FREQ_064#define KANJI_INDEX_FREQ  64#endif#ifdef  KANJI_INDEX_FREQ_128#define KANJI_INDEX_FREQ 128#endif#ifdef  KANJI_INDEX_FREQ_256#define KANJI_INDEX_FREQ 256#endif/* Kanji table index item definition. */typedef struct {    unsigned short offset;    unsigned char  hitBitmap [KANJI_INDEX_FREQ / 8];} kanjiIndexItem;/*========================================================================= * SYSTEM:    KVM * SUBSYSTEM: Internationalization - Japanese encoding translation * FILE:      sjis2uniData.c * OVERVIEW:  Data tables for Shift-JIS to Unicode encoding conversion * AUTHOR:    Jim Clark, nightware@mindspring.com *=======================================================================*/static const unsigned short sjis2uni_0x8140 [4] [189] = {  { 0x3000,     /* 0x8140  # IDEOGRAPHIC SPACE */    0x3001,     /* 0x8141  # IDEOGRAPHIC COMMA */    0x3002,     /* 0x8142  # IDEOGRAPHIC FULL STOP */    0xFF0C,     /* 0x8143  # FULLWIDTH COMMA */    0xFF0E,     /* 0x8144  # FULLWIDTH FULL STOP */    0x30FB,     /* 0x8145  # KATAKANA MIDDLE DOT */    0xFF1A,     /* 0x8146  # FULLWIDTH COLON */    0xFF1B,     /* 0x8147  # FULLWIDTH SEMICOLON */    0xFF1F,     /* 0x8148  # FULLWIDTH QUESTION MARK */    0xFF01,     /* 0x8149  # FULLWIDTH EXCLAMATION MARK */    0x309B,     /* 0x814A  # KATAKANA-HIRAGANA VOICED SOUND MARK */    0x309C,     /* 0x814B  # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */    0x00B4,     /* 0x814C  # ACUTE ACCENT */    0xFF40,     /* 0x814D  # FULLWIDTH GRAVE ACCENT */    0x00A8,     /* 0x814E  # DIAERESIS */    0xFF3E,     /* 0x814F  # FULLWIDTH CIRCUMFLEX ACCENT */    0xFFE3,     /* 0x8150  # FULLWIDTH MACRON */    0xFF3F,     /* 0x8151  # FULLWIDTH LOW LINE */    0x30FD,     /* 0x8152  # KATAKANA ITERATION MARK */    0x30FE,     /* 0x8153  # KATAKANA VOICED ITERATION MARK */    0x309D,     /* 0x8154  # HIRAGANA ITERATION MARK */    0x309E,     /* 0x8155  # HIRAGANA VOICED ITERATION MARK */    0x3003,     /* 0x8156  # DITTO MARK */    0x4EDD,     /* 0x8157  # <CJK> */    0x3005,     /* 0x8158  # IDEOGRAPHIC ITERATION MARK */    0x3006,     /* 0x8159  # IDEOGRAPHIC CLOSING MARK */    0x3007,     /* 0x815A  # IDEOGRAPHIC NUMBER ZERO */    0x30FC,     /* 0x815B  # KATAKANA-HIRAGANA PROLONGED SOUND MARK */    0x2015,     /* 0x815C  # HORIZONTAL BAR */    0x2010,     /* 0x815D  # HYPHEN */    0xFF0F,     /* 0x815E  # FULLWIDTH SOLIDUS */    0xFF3C,     /* 0x815F  # REVERSE SOLIDUS */    0x301C,     /* 0x8160  # WAVE DASH */    0x2016,     /* 0x8161  # DOUBLE VERTICAL LINE */    0xFF5C,     /* 0x8162  # FULLWIDTH VERTICAL LINE */    0x2026,     /* 0x8163  # HORIZONTAL ELLIPSIS */    0x2025,     /* 0x8164  # TWO DOT LEADER */    0x2018,     /* 0x8165  # LEFT SINGLE QUOTATION MARK */    0x2019,     /* 0x8166  # RIGHT SINGLE QUOTATION MARK */    0x201C,     /* 0x8167  # LEFT DOUBLE QUOTATION MARK */    0x201D,     /* 0x8168  # RIGHT DOUBLE QUOTATION MARK */    0xFF08,     /* 0x8169  # FULLWIDTH LEFT PARENTHESIS */    0xFF09,     /* 0x816A  # FULLWIDTH RIGHT PARENTHESIS */    0x3014,     /* 0x816B  # LEFT TORTOISE SHELL BRACKET */    0x3015,     /* 0x816C  # RIGHT TORTOISE SHELL BRACKET */    0xFF3B,     /* 0x816D  # FULLWIDTH LEFT SQUARE BRACKET */    0xFF3D,     /* 0x816E  # FULLWIDTH RIGHT SQUARE BRACKET */    0xFF5B,     /* 0x816F  # FULLWIDTH LEFT CURLY BRACKET */    0xFF5D,     /* 0x8170  # FULLWIDTH RIGHT CURLY BRACKET */    0x3008,     /* 0x8171  # LEFT ANGLE BRACKET */    0x3009,     /* 0x8172  # RIGHT ANGLE BRACKET */    0x300A,     /* 0x8173  # LEFT DOUBLE ANGLE BRACKET */    0x300B,     /* 0x8174  # RIGHT DOUBLE ANGLE BRACKET */    0x300C,     /* 0x8175  # LEFT CORNER BRACKET */    0x300D,     /* 0x8176  # RIGHT CORNER BRACKET */    0x300E,     /* 0x8177  # LEFT WHITE CORNER BRACKET */    0x300F,     /* 0x8178  # RIGHT WHITE CORNER BRACKET */    0x3010,     /* 0x8179  # LEFT BLACK LENTICULAR BRACKET */    0x3011,     /* 0x817A  # RIGHT BLACK LENTICULAR BRACKET */    0xFF0B,     /* 0x817B  # FULLWIDTH PLUS SIGN */    0x2212,     /* 0x817C  # MINUS SIGN */    0x00B1,     /* 0x817D  # PLUS-MINUS SIGN */    0x00D7,     /* 0x817E  # MULTIPLICATION SIGN */    0xFFFD,     /* 0x817f  # NO MAPPING */    0x00F7,     /* 0x8180  # DIVISION SIGN */    0xFF1D,     /* 0x8181  # FULLWIDTH EQUALS SIGN */    0x2260,     /* 0x8182  # NOT EQUAL TO */    0xFF1C,     /* 0x8183  # FULLWIDTH LESS-THAN SIGN */    0xFF1E,     /* 0x8184  # FULLWIDTH GREATER-THAN SIGN */    0x2266,     /* 0x8185  # LESS-THAN OVER EQUAL TO */    0x2267,     /* 0x8186  # GREATER-THAN OVER EQUAL TO */    0x221E,     /* 0x8187  # INFINITY */    0x2234,     /* 0x8188  # THEREFORE */    0x2642,     /* 0x8189  # MALE SIGN */    0x2640,     /* 0x818A  # FEMALE SIGN */    0x00B0,     /* 0x818B  # DEGREE SIGN */    0x2032,     /* 0x818C  # PRIME */    0x2033,     /* 0x818D  # DOUBLE PRIME */    0x2103,     /* 0x818E  # DEGREE CELSIUS */    0xFFE5,     /* 0x818F  # FULLWIDTH YEN SIGN */    0xFF04,     /* 0x8190  # FULLWIDTH DOLLAR SIGN */    0x00A2,     /* 0x8191  # CENT SIGN */    0x00A3,     /* 0x8192  # POUND SIGN */    0xFF05,     /* 0x8193  # FULLWIDTH PERCENT SIGN */    0xFF03,     /* 0x8194  # FULLWIDTH NUMBER SIGN */    0xFF06,     /* 0x8195  # FULLWIDTH AMPERSAND */    0xFF0A,     /* 0x8196  # FULLWIDTH ASTERISK */    0xFF20,     /* 0x8197  # FULLWIDTH COMMERCIAL AT */    0x00A7,     /* 0x8198  # SECTION SIGN */    0x2606,     /* 0x8199  # WHITE STAR */    0x2605,     /* 0x819A  # BLACK STAR */    0x25CB,     /* 0x819B  # WHITE CIRCLE */    0x25CF,     /* 0x819C  # BLACK CIRCLE */    0x25CE,     /* 0x819D  # BULLSEYE */    0x25C7,     /* 0x819E  # WHITE DIAMOND */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -