1053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd. 3053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 4053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * you may not use this file except in compliance with the License. 6053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * You may obtain a copy of the License at 7053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 8053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 10053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * See the License for the specific language governing permissions and 14053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * limitations under the License. 15053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 16053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 17053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 18053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "nj_lib.h" 19053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "nj_err.h" 20053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "nj_ext.h" 21053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "nj_dic.h" 22053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "njd.h" 23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 24053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 25053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define F_HINSI_TOP_ADDR(h) ((NJ_UINT8*)((h)+NJ_INT32_READ((h)+0x20))) 26053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define B_HINSI_TOP_ADDR(h) ((NJ_UINT8*)((h)+NJ_INT32_READ((h)+0x24))) 27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define V2_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x28))) 28053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define BUN_B_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x2A))) 29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define TAN_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x30))) 30053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define TAN_B_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x32))) 31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define SUUJI_B_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x34))) 32053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define MEISI_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x36))) 33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define MEISI_B_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x38))) 34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define JINMEI_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x3A))) 35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define JINMEI_B_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x3C))) 36053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define CHIMEI_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x3E))) 37053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define CHIMEI_B_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x40))) 38053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define KIGOU_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x42))) 39053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define KIGOU_B_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x44))) 40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define V1_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x52))) 41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#define V3_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x54))) 42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_INT16 njd_r_get_hinsi(NJ_DIC_HANDLE rule, NJ_UINT8 type) { 44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (rule == NULL) { 47053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 48053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (type) { 51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_V2_F : 52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return V2_F_HINSI(rule); 53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_BUNTOU_B : 54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return BUN_B_HINSI(rule); 55053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_TANKANJI_F : 56053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return TAN_F_HINSI(rule); 57053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_TANKANJI_B : 58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return TAN_B_HINSI(rule); 59053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_SUUJI_B: 60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return SUUJI_B_HINSI(rule); 61053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_MEISI_F : 62053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return MEISI_F_HINSI(rule); 63053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_MEISI_B : 64053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return MEISI_B_HINSI(rule); 65053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_JINMEI_F : 66053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return JINMEI_F_HINSI(rule); 67053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_JINMEI_B : 68053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return JINMEI_B_HINSI(rule); 69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_CHIMEI_F : 70053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return CHIMEI_F_HINSI(rule); 71053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_CHIMEI_B : 72053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return CHIMEI_B_HINSI(rule); 73053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_KIGOU_F : 74053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return KIGOU_F_HINSI(rule); 75053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_KIGOU_B : 76053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return KIGOU_B_HINSI(rule); 77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_V1_F : 78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return V1_F_HINSI(rule); 79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case NJ_HINSI_V3_F : 80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return V3_F_HINSI(rule); default: 81053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 82053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 83053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 84053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 86053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_INT16 njd_r_get_connect(NJ_DIC_HANDLE rule, NJ_UINT16 hinsi, NJ_UINT8 type, NJ_UINT8 **connect) { 87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project NJ_UINT16 i, rec_len; 88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 89053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 90053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (rule == NULL) { 91053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (hinsi < 1) { 94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 95053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 96053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 97053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (type == NJ_RULE_TYPE_BTOF) { 98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project i = F_HINSI_SET_CNT(rule); 99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project rec_len = (NJ_UINT16)((i + 7) / 8); 100053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 101053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *connect = (NJ_UINT8*)(F_HINSI_TOP_ADDR(rule) + ((hinsi - 1) * rec_len)); 102053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 103053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project i = B_HINSI_SET_CNT(rule); 104053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project rec_len = (NJ_UINT16)((i + 7) / 8); 105053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *connect = (NJ_UINT8*)(B_HINSI_TOP_ADDR(rule) + ((hinsi - 1) * rec_len)); 107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 111053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_INT16 njd_r_get_count(NJ_DIC_HANDLE rule, NJ_UINT16 *fcount, NJ_UINT16 *rcount) { 112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (rule == NULL) { 115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *fcount = F_HINSI_SET_CNT(rule); 119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *rcount = B_HINSI_SET_CNT(rule); 120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return 0; 122053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 123