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