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