1 /*
2 * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17
18 #include "nj_lib.h"
19 #include "nj_err.h"
20 #include "nj_ext.h"
21 #include "nj_dic.h"
22 #include "njd.h"
23
24
25 #define F_HINSI_TOP_ADDR(h) ((NJ_UINT8*)((h)+NJ_INT32_READ((h)+0x20)))
26 #define B_HINSI_TOP_ADDR(h) ((NJ_UINT8*)((h)+NJ_INT32_READ((h)+0x24)))
27 #define V2_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x28)))
28 #define BUN_B_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x2A)))
29 #define TAN_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x30)))
30 #define TAN_B_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x32)))
31 #define SUUJI_B_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x34)))
32 #define MEISI_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x36)))
33 #define MEISI_B_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x38)))
34 #define JINMEI_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x3A)))
35 #define JINMEI_B_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x3C)))
36 #define CHIMEI_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x3E)))
37 #define CHIMEI_B_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x40)))
38 #define KIGOU_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x42)))
39 #define KIGOU_B_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x44)))
40 #define V1_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x52)))
41 #define V3_F_HINSI(h) ((NJ_UINT16)(NJ_INT16_READ((h)+0x54)))
42
njd_r_get_hinsi(NJ_DIC_HANDLE rule,NJ_UINT8 type)43 NJ_INT16 njd_r_get_hinsi(NJ_DIC_HANDLE rule, NJ_UINT8 type) {
44
45
46 if (rule == NULL) {
47 return 0;
48 }
49
50 switch (type) {
51 case NJ_HINSI_V2_F :
52 return V2_F_HINSI(rule);
53 case NJ_HINSI_BUNTOU_B :
54 return BUN_B_HINSI(rule);
55 case NJ_HINSI_TANKANJI_F :
56 return TAN_F_HINSI(rule);
57 case NJ_HINSI_TANKANJI_B :
58 return TAN_B_HINSI(rule);
59 case NJ_HINSI_SUUJI_B:
60 return SUUJI_B_HINSI(rule);
61 case NJ_HINSI_MEISI_F :
62 return MEISI_F_HINSI(rule);
63 case NJ_HINSI_MEISI_B :
64 return MEISI_B_HINSI(rule);
65 case NJ_HINSI_JINMEI_F :
66 return JINMEI_F_HINSI(rule);
67 case NJ_HINSI_JINMEI_B :
68 return JINMEI_B_HINSI(rule);
69 case NJ_HINSI_CHIMEI_F :
70 return CHIMEI_F_HINSI(rule);
71 case NJ_HINSI_CHIMEI_B :
72 return CHIMEI_B_HINSI(rule);
73 case NJ_HINSI_KIGOU_F :
74 return KIGOU_F_HINSI(rule);
75 case NJ_HINSI_KIGOU_B :
76 return KIGOU_B_HINSI(rule);
77 case NJ_HINSI_V1_F :
78 return V1_F_HINSI(rule);
79 case NJ_HINSI_V3_F :
80 return V3_F_HINSI(rule); default:
81
82 return 0;
83 }
84 }
85
njd_r_get_connect(NJ_DIC_HANDLE rule,NJ_UINT16 hinsi,NJ_UINT8 type,NJ_UINT8 ** connect)86 NJ_INT16 njd_r_get_connect(NJ_DIC_HANDLE rule, NJ_UINT16 hinsi, NJ_UINT8 type, NJ_UINT8 **connect) {
87 NJ_UINT16 i, rec_len;
88
89
90 if (rule == NULL) {
91 return 0;
92 }
93 if (hinsi < 1) {
94 return 0;
95 }
96
97 if (type == NJ_RULE_TYPE_BTOF) {
98 i = F_HINSI_SET_CNT(rule);
99 rec_len = (NJ_UINT16)((i + 7) / 8);
100
101 *connect = (NJ_UINT8*)(F_HINSI_TOP_ADDR(rule) + ((hinsi - 1) * rec_len));
102 } else {
103 i = B_HINSI_SET_CNT(rule);
104 rec_len = (NJ_UINT16)((i + 7) / 8);
105
106 *connect = (NJ_UINT8*)(B_HINSI_TOP_ADDR(rule) + ((hinsi - 1) * rec_len));
107 }
108 return 0;
109 }
110
njd_r_get_count(NJ_DIC_HANDLE rule,NJ_UINT16 * fcount,NJ_UINT16 * rcount)111 NJ_INT16 njd_r_get_count(NJ_DIC_HANDLE rule, NJ_UINT16 *fcount, NJ_UINT16 *rcount) {
112
113
114 if (rule == NULL) {
115 return 0;
116 }
117
118 *fcount = F_HINSI_SET_CNT(rule);
119 *rcount = B_HINSI_SET_CNT(rule);
120
121 return 0;
122 }
123