2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 | Project :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 | Modul : Ccdedit.c
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 | Copyright 2002 Texas Instruments Berlin, AG
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 | All rights reserved.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 | This file is confidential and a trade secret of Texas
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 | Instruments Berlin, AG
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 | The receipt of or possession of this file does not convey
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 | any rights to reproduce or disclose its contents or to
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 | manufacture, use, or sell anything it may describe, in
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 | whole, or in part, without the specific written consent of
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 | Texas Instruments Berlin, AG.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 | Purpose : Coder Decoder editfunctions for reading/writing the
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 | C-Structures of primitives and messages.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 #define CCDEDIT_C
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 #include <stdio.h>
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 #include <stdlib.h>
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 #include <string.h>
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 * standard definitions like UCHAR, ERROR etc.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #include "typedefs.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 * Declaration of coder/decoder-tables
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 #include "ccdtable.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 #include "ccddata.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 #include "ccdedit.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 typedef union
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 UBYTE buffer[4];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 UBYTE b[4];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 USHORT s[2];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 ULONG l;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 } T_CONV;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 typedef enum
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 isvar,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 isstruct,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 isunion,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 issdu,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 isductrl
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 } T_ELEMTYPE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 * strncpy() does not append a null chararcter to the copied string;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 * This macro adds a terminating null following a call to strncpy()
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 * In Ccdedit.h the buffers are all len+1 bytes long.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 #define STRNCPY(dest,source,len) {\
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 strncpy (dest, source, len);\
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 dest [len] = 0;\
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 static const T_CCD_CompTabEntry* mcomp;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 static const T_CCD_CompTabEntry* pcomp;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 static const T_CCD_VarTabEntry* pvar;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 static const T_CCD_ElemTabEntry* pelem;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 static const T_CCD_StrTabEntry* pstr;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 static const T_CCD_VarTabEntry* mvar;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 static const T_CCD_ElemTabEntry* melem;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 static const T_CCD_StrTabEntry* mstr;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 static const T_CCD_ValTabEntry* mval;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 static const T_CCD_ValTabEntry* pval;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 static int ccddata_num_of_entities;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 static int ccddata_max_message_id;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 static int ccddata_max_primitive_id;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 static int ccddata_max_sap_num;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 void CCDDATA_PREF(cde_init) ()
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 mcomp = ccddata_get_mcomp (0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 pcomp = ccddata_get_pcomp (0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 pvar = ccddata_get_pvar (0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 pelem = ccddata_get_pelem (0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 pstr = ccddata_get_pstr (0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 mvar = ccddata_get_mvar (0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 melem = ccddata_get_melem (0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 mstr = ccddata_get_mstr (0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 mval = ccddata_get_mval (0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 pval = ccddata_get_pval (0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 ccddata_num_of_entities = ccddata_get_num_of_entities ();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 ccddata_max_message_id = ccddata_get_max_message_id ();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 ccddata_max_primitive_id = ccddata_get_max_primitive_id ();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 ccddata_max_sap_num = ccddata_get_max_sap_num ();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 | Function : cde_val_iterate
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 | Description : This function searches the values in [pm]val.cdg for
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 | a given value and depending on the value of the parameter
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 | 'copy' adds the "Comment" of the SAP-/MSG-catalogues
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 | to the member symbolicValue of a given T_CCDE_ELEM_DESCR.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 | Parameters : elem_value - the actual value searched for
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 | edescr - the element descriptor
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 | copy - s.a.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 | Return : -1 if no values are defined or if the value is not found;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 | else: the ordinal of the value in relation to first valid
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 | value of the var
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 static void cde_val_iterate (int elem_value,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 T_CCDE_ELEM_DESCR* edescr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 S32 StartVal, EndVal;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 BOOL IsDefault;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 char *ValStr;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 SHORT NumDefs;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 USHORT ValueDef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 USHORT valdefstart;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 const T_CCD_ValTabEntry* val;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 const T_CCD_StrTabEntry* str;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 if (edescr->ccdIndex == NO_REF)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 if (edescr->esource EQ FromMsg)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 NumDefs = mvar[edescr->ccdIndex].numValueDefs;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 ValueDef = mvar[edescr->ccdIndex].valueDefs;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 val = mval;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 str = mstr;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 NumDefs = pvar[edescr->ccdIndex].numValueDefs;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 ValueDef = pvar[edescr->ccdIndex].valueDefs;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 val = pval;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 str = pstr;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 valdefstart = ValueDef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 edescr->valcheck = NumDefs ? -1 : 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 while (NumDefs-- > 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 IsDefault = val[ValueDef].isDefault;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 ValStr = str[val[ValueDef].valStringRef];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 StartVal = val[ValueDef].startValue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 EndVal = val[ValueDef].endValue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 if (IsDefault)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 /* default definition */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 STRNCPY (edescr->symbolicValue, ValStr, SYMBOLIC_VAL_LENGTH);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 * If IsDefault is 2 it is an ASN1 default value; StartVal and EndVal
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 * are set to the value. If IsDefault is 1, it means only a default
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 * symbolic value, but StartVal and EndVal are not set. In this case
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 * valcheck get the value 0.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 if (IsDefault == 2)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 if (elem_value == StartVal)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 edescr->valcheck = 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 edescr->valcheck = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 if (elem_value == StartVal && elem_value == EndVal)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 STRNCPY (edescr->symbolicValue, ValStr, SYMBOLIC_VAL_LENGTH);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 edescr->valcheck = 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 if (elem_value >= StartVal AND elem_value <= EndVal)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 /* found in range, but continue to search an exact match */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 STRNCPY (edescr->symbolicValue, ValStr, SYMBOLIC_VAL_LENGTH);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 edescr->valcheck = 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 ValueDef++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 static void eval_elemtype (T_CCDE_ELEM_DESCR* edescr,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 const T_CCD_ElemTabEntry* elem,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 T_ELEMTYPE* elemtype,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 BOOL* linked)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 *linked = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 switch (elem->elemType)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 case 'W':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 case 'M':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 case 'I':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 *linked = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 /* fallthrough */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 case 'V':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 case 'R':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 case 'F':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 *elemtype = isvar;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 case 'Z':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 case 'K':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 case 'G':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 *linked = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 /* fallthrough */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 case 'C':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 case 'P':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 case 'D':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 *elemtype = isstruct;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 case 'c':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 case 'p':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 case 'd':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 *elemtype = issdu;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 case 'Y':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 case 'L':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 case 'H':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 *linked = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 /* fallthrough */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 case 'U':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 case 'Q':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 case 'E':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 *elemtype = isunion;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 case '!':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 *elemtype = isductrl;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 if ((elem->elemType >= 'P' && elem->elemType <= 'R') ||
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 (elem->elemType >= 'K' && elem->elemType <= 'M') ||
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 elem->elemType == 'p')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 edescr->ptrtype = usptr;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 else if((elem->elemType >= 'D' && elem->elemType <= 'F') ||
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 (elem->elemType >= 'G' && elem->elemType <= 'I') ||
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 elem->elemType == 'd')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 edescr->ptrtype = ctptr;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 edescr->ptrtype = noptr;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 | PROJECT : CCD (6144) MODULE : CCDEDIT |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 | STATE : code ROUTINE : cde_get_next_elem |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 PURPOSE :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 static USHORT cde_get_next_elem (T_CCDE_HANDLE *handle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 UBYTE descent,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 T_CCDE_ELEM_DESCR *edescr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 T_CCDE_CONTEXT * ctx;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 BOOL isMsg;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 BOOL linked;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 BOOL validElemFound = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 const T_CCD_VarTabEntry *var;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 const T_CCD_CompTabEntry *comp;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 const T_CCD_ElemTabEntry *elem;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 const T_CCD_StrTabEntry *str;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 T_ELEMTYPE elemtype;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 isMsg = handle->source == FromMsg;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 if (isMsg)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 /* var, str, and comp may become reset later */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 comp = mcomp;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 elem = melem;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 str = mstr;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 var = mvar;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 comp = pcomp;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 elem = pelem;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 str = pstr;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 var = pvar;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 if (descent > handle->level AND handle->canDescent)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 handle->level++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
316
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 handle->canDescent = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
319 ctx = &handle->context[handle->level];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 do
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
323 if (ctx->numElems EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
324 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
325 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
326 * end of composition or maybe of the entire message/primitive.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
327 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
328 if (handle->level > 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
329 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
330 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
331 * end of substructured element.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
332 * switch to the context of the previous level.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
333 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
334 handle->level--;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
335 ctx = &handle->context[handle->level];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
336 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
337 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
338 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
339 edescr->offset = comp[ctx->structIdx].cSize
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
340 + handle->lenVarPart;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
341 return isMsg ? CCDEDIT_END_OF_MSG : CCDEDIT_END_OF_PRIM;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
342 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
343 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
344 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
345 * skip the spare elements (do it only for messages)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
346 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
347 if (ctx->numElems)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
348 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
349 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
350 * remember: primitives does not contain spare definitions
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
351 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
352 if (elem[ctx->elemIdx].elemType == 'S')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
353 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
354 ctx->elemIdx++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
355 ctx->numElems--;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
356 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
357 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
358 validElemFound = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
359 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
360 } while (!validElemFound);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
361
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
362
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
363 eval_elemtype (edescr, &elem[ctx->elemIdx], &elemtype, &linked);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
364
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
365 if (elemtype == isductrl)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
366 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
367 edescr->btype = T_ductrl;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
368 ctx->elemIdx++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
369 ctx->numElems--;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
370 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
371 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
372
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
373 if (linked)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
374 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
375 /* element linked from pelem to mvar/mcomp */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
376 edescr->esource = FromMsg;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
377 comp = mcomp;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
378 var = mvar;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
379 str = mstr;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
380 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
381 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
382 edescr->esource = handle->source;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
383
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
384 if (ctx->state EQ TRAVERSE_ARRAY)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
385 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
386 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
387 * for every array element calculate the offset for the
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
388 * C-structure access.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
389 * offset = leveloffset + (arrayIndex * csize) + 1
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
390 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
391 edescr->offset = elem[ctx->elemIdx].structOffs + ctx->levelOffset
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
392 + (ctx->arrayIndex
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
393 * ((elem[ctx->elemIdx].elemType NEQ 'C')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
394 ? var[elem[ctx->elemIdx].elemRef].cSize
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
395 : comp[elem[ctx->elemIdx].elemRef].cSize
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
396 )
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
397 );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
398 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
399 + 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
400 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
401 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
402 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
403 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
404 edescr->offset = elem[ctx->elemIdx].structOffs
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
405 + ctx->levelOffset;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
406 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
407
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
408 edescr->level = handle->level;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
409 edescr->maxRepeat = elem[ctx->elemIdx].maxRepeat;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
410 edescr->index = NO_REF;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
411 edescr->ccdIndex = NO_REF;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
412 edescr->validRepeats = NO_REF;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
413 edescr->isOptional = elem[ctx->elemIdx].optional;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
414 edescr->arrayType = NoArray;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
415 edescr->elemref = NO_REF;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
416 edescr->u_member = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
417 edescr->u_ctrl = 0xffffffff;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
418 edescr->bitstring = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
419 edescr->c_implicit = 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
420 edescr->issigned = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
421 edescr->valcheck = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
422
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
423 if ( edescr->maxRepeat > 0
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
424 && elem[ctx->elemIdx].repType != 'b'
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
425 && elem[ctx->elemIdx].repType != 's'
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
426 && elem[ctx->elemIdx].elemType != 'E'
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
427 && ctx->state == TRAVERSE_STRUCTURE)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
428 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
429 edescr->arrayType = ( elem[ctx->elemIdx].repType == 'v'
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
430 || elem[ctx->elemIdx].repType == 'i'
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
431 || elem[ctx->elemIdx].repType == 'J'
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
432 || elem[ctx->elemIdx].repType == 'j')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
433 ? VarArray
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
434 : FixArray;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
435
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
436 if (elem[ctx->elemIdx].repType == 'C'
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
437 || elem[ctx->elemIdx].repType == 'J')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
438 edescr->bitstring = 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
439
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
440 if (elem[ctx->elemIdx].repType == 'j'
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
441 || elem[ctx->elemIdx].repType == 'J')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
442 edescr->c_implicit = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
443
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
444 if (handle->level < MAX_LEVELS)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
445 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
446 T_CCDE_CONTEXT * new_ctx = ctx+1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
447
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
448 ctx->repeats = edescr->maxRepeat;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
449
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
450 handle->canDescent = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
451
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
452 new_ctx->structIdx = ctx->structIdx;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
453
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
454 new_ctx->elemIdx = ctx->elemIdx;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
455 new_ctx->elemType = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
456 new_ctx->arrayIndex = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
457 new_ctx->numElems = edescr->maxRepeat;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
458 new_ctx->levelOffset = ctx->levelOffset;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
459 new_ctx->arrayType = edescr->arrayType;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
460 new_ctx->state = TRAVERSE_ARRAY;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
461 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
462 * if the composition is optional, increment the offset
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
463 * because of the valid flag (v_xxx).
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
464 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
465 if (edescr->isOptional)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
466 new_ctx->levelOffset++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
467 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
468 * if the composition is a array with variable size,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
469 * increment the offset because of the counter (c_xxx).
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
470 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
471 if (edescr->arrayType EQ VarArray)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
472 new_ctx->levelOffset += edescr->maxRepeat >> 8 ? 2 : 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
473 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
474 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
475
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
476 if (ctx->state EQ TRAVERSE_ARRAY)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
477 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
478 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
479 * if the size of the array is variable, mark the
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
480 * components of this array as optional. So we can later
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
481 * determine if the array component is valid
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
482 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
483 if (ctx->arrayType EQ VarArray)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
484 edescr->isOptional = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
485 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
486 * increment the array index
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
487 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
488 edescr->index = ctx->arrayIndex++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
489 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
490
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
491 if (elemtype == isvar)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
492 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
493 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
494 * basic element (var)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
495 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
496 switch (var[elem[ctx->elemIdx].elemRef].cType)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
497 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
498 case 'C':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
499 edescr->issigned = 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
500 /* fallthrough */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
501 case 'B':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
502 edescr->btype = T_byte;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
503 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
504 case 'T':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
505 edescr->issigned = 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
506 /* fallthrough */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
507 case 'S':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
508 edescr->btype = T_short;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
509 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
510 case 'M':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
511 edescr->issigned = 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
512 /* fallthrough */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
513 case 'L':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
514 edescr->btype = T_long;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
515 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
516 case 'X':
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
517 edescr->btype = T_buffer;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
518 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
519 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
520 edescr->bytelen = var[elem[ctx->elemIdx].elemRef].cSize;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
521
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
522 #ifdef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
523 strcpy (edescr->aname, var[elem[ctx->elemIdx].elemRef].name);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
524 strcpy (edescr->sname, ccddata_get_alias (ctx->elemIdx, (int) isMsg));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
525 if (edescr->sname[0] == '\0')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
526 strcpy (edescr->sname, var[elem[ctx->elemIdx].elemRef].name);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
527 STRNCPY (edescr->lname, str[var[elem[ctx->elemIdx].elemRef].longNameRef],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
528 LONG_NAME_LENGTH);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
529 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
530 strcpy (edescr->sname, "No name info avail.");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
531 strcpy (edescr->aname, "No name info avail.");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
532 strcpy (edescr->lname, "No name info avail.");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
533 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
534 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
535 else if (elemtype == isunion)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
536 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
537 /* union */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
538 edescr->btype = T_union;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
539 edescr->bytelen = comp[elem[ctx->elemIdx].elemRef].cSize;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
540 edescr->elemref = elem[ctx->elemIdx].elemRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
541
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
542 #ifdef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
543 strcpy (edescr->aname, comp[elem[ctx->elemIdx].elemRef].name);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
544 strcpy (edescr->sname, ccddata_get_alias (ctx->elemIdx, (int) isMsg));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
545 if (edescr->sname[0] == '\0')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
546 strcpy (edescr->sname, comp[elem[ctx->elemIdx].elemRef].name);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
547 STRNCPY (edescr->lname, str[comp[elem[ctx->elemIdx].elemRef].longNameRef],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
548 LONG_NAME_LENGTH);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
549 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
550 strcpy (edescr->sname, "No name info avail.");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
551 strcpy (edescr->aname, "No name info avail.");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
552 strcpy (edescr->lname, "No name info avail.");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
553 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
554 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
555 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
556 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
557 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
558 * substructured info element
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
559 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
560 if (elemtype == issdu)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
561 edescr->btype = T_issdu;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
562 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
563 edescr->btype = T_struct;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
564 edescr->bytelen = comp[elem[ctx->elemIdx].elemRef].cSize;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
565 edescr->elemref = elem[ctx->elemIdx].elemRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
566
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
567 #ifdef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
568 strcpy (edescr->aname, comp[elem[ctx->elemIdx].elemRef].name);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
569 strcpy (edescr->sname, ccddata_get_alias (ctx->elemIdx, (int) isMsg));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
570 if (edescr->sname[0] == '\0')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
571 strcpy (edescr->sname, comp[elem[ctx->elemIdx].elemRef].name);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
572 STRNCPY (edescr->lname, str[comp[elem[ctx->elemIdx].elemRef].longNameRef],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
573 LONG_NAME_LENGTH);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
574 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
575 strcpy (edescr->sname, "No name info avail.");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
576 strcpy (edescr->aname, "No name info avail.");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
577 strcpy (edescr->lname, "No name info avail.");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
578 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
579 if (edescr->arrayType EQ NoArray
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
580 AND handle->level < MAX_LEVELS)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
581 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
582 T_CCDE_CONTEXT * new_ctx = ctx+1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
583
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
584 handle->canDescent = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
585
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
586 new_ctx->structIdx = elem[ctx->elemIdx].elemRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
587
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
588 new_ctx->elemIdx = comp[new_ctx->structIdx].componentRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
589 new_ctx->elemType = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
590 new_ctx->arrayIndex = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
591 new_ctx->numElems = comp[new_ctx->structIdx].numOfComponents;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
592 new_ctx->levelOffset = edescr->offset;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
593 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
594 * if the composition is optional, increment the offset
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
595 * because of the valid flag (v_xxx).
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
596 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
597 if (edescr->isOptional)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
598 new_ctx->levelOffset++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
599 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
600 * if the composition is a array with variable size,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
601 * increment the offset because of the counter (c_xxx).
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
602 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
603 if (edescr->arrayType EQ VarArray)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
604 new_ctx->levelOffset++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
605
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
606 new_ctx->state = TRAVERSE_STRUCTURE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
607 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
608 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
609
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
610
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
611 if (edescr->arrayType EQ NoArray && elem[ctx->elemIdx].elemType == 'V'
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
612 AND var[elem[ctx->elemIdx].elemRef].numValueDefs > 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
613 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
614 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
615 * value definitions available
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
616 * store the index of this information element in the
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
617 * element descriptor for later value requests.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
618 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
619 edescr->ccdIndex = elem[ctx->elemIdx].elemRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
620 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
621
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
622 ctx->numElems--;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
623
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
624 if (ctx->state EQ TRAVERSE_STRUCTURE)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
625 ctx->elemIdx++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
626
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
627 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
628 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
629
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
630 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
631 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
632 | PROJECT : CCD (6144) MODULE : CCDEDIT |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
633 | STATE : code ROUTINE : cde_prim_first |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
634 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
635
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
636 PURPOSE :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
637
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
638 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
639
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
640 USHORT CCDDATA_PREF(cde_prim_first) (T_CCDE_HANDLE * phandle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
641 ULONG primcode,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
642 char * name)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
643 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
644 USHORT SAP, Opcode, Direction, ThePrimitive;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
645
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
646 if (primcode & 0x80000000)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
647 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
648 SAP = (USHORT) (primcode & 0x3fff);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
649 Opcode = (USHORT) ((primcode >> 16) & 0xff);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
650 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
651 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
652 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
653 SAP = (USHORT) (((primcode & 0x3f00)>>8) & 0xff);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
654 Opcode = (USHORT) (primcode & 0xff);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
655 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
656 Direction = (USHORT) (((primcode & 0x4000)>>14) & 0x01);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
657
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
658 if (SAP > ccddata_max_sap_num OR Opcode > ccddata_max_primitive_id)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
659 return CCDEDIT_PRIM_NOT_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
660
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
661 if ((ThePrimitive = ccddata_get_pmtx(SAP,Opcode,Direction)) EQ NO_REF)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
662 return CCDEDIT_PRIM_NOT_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
663
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
664 phandle->context[0].structIdx = ThePrimitive;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
665
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
666 #ifdef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
667 strcpy (name, pcomp[phandle->context[0].structIdx].name);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
668 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
669 strcpy (name, "No name info avail.");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
670 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
671
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
672 phandle->level = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
673 phandle->context[0].elemIdx = pcomp[phandle->context[0].structIdx].componentRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
674 phandle->context[0].elemType = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
675 phandle->context[0].numElems = pcomp[phandle->context[0].structIdx].numOfComponents;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
676 phandle->context[0].levelOffset = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
677 phandle->context[0].arrayIndex = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
678 phandle->context[0].state = TRAVERSE_STRUCTURE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
679 phandle->canDescent = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
680 phandle->source = FromPrim;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
681 phandle->maxCSize = pcomp[phandle->context[0].structIdx].cSize;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
682 phandle->lenVarPart = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
683
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
684 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
685 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
686
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
687
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
688 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
689 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
690 | PROJECT : CCD (6144) MODULE : CCDEDIT |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
691 | STATE : code ROUTINE : cde_prim_next |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
692 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
693
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
694 PURPOSE :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
695
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
696 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
697
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
698
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
699 USHORT CCDDATA_PREF(cde_prim_next) (T_CCDE_HANDLE *phandle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
700 UBYTE descent,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
701 T_CCDE_ELEM_DESCR *pdescr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
702 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
703 return cde_get_next_elem (phandle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
704 descent,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
705 pdescr);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
706 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
707
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
708 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
709 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
710 | PROJECT : CCD (6144) MODULE : CCDEDIT |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
711 | STATE : code ROUTINE : cde_msg_first |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
712 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
713
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
714 PURPOSE :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
715
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
716 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
717
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
718 USHORT CCDDATA_PREF(cde_msg_first) (T_CCDE_HANDLE * mhandle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
719 UBYTE type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
720 UBYTE direction,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
721 UBYTE entity,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
722 char * name)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
723
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
724 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
725 USHORT TheMessage;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
726
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
727 if (entity > ccddata_num_of_entities OR type > ccddata_max_message_id)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
728 return CCDEDIT_MESSAGE_NOT_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
729
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
730 if ((TheMessage = ccddata_get_mmtx((USHORT) entity,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
731 (USHORT) type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
732 (USHORT) direction)) EQ NO_REF)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
733 return CCDEDIT_MESSAGE_NOT_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
734
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
735 mhandle->context[0].structIdx = TheMessage;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
736
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
737 #ifdef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
738 strcpy (name, mcomp[mhandle->context[0].structIdx].name);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
739 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
740 strcpy (name, "No name info avail.");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
741 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
742
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
743 mhandle->level = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
744 mhandle->context[0].elemIdx = mcomp[mhandle->context[0].structIdx].componentRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
745 mhandle->context[0].elemType = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
746 mhandle->context[0].numElems = mcomp[mhandle->context[0].structIdx].numOfComponents;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
747 mhandle->context[0].levelOffset = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
748 mhandle->context[0].arrayIndex = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
749 mhandle->context[0].state = TRAVERSE_STRUCTURE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
750 mhandle->canDescent = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
751 mhandle->source = FromMsg;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
752 mhandle->maxCSize = mcomp[mhandle->context[0].structIdx].cSize;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
753 mhandle->lenVarPart = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
754
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
755 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
756 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
757
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
758
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
759 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
760 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
761 | PROJECT : CCD (6144) MODULE : CCDEDIT |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
762 | STATE : code ROUTINE : cde_msg_next |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
763 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
764
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
765 PURPOSE :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
766
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
767 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
768
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
769 USHORT CCDDATA_PREF(cde_msg_next) (T_CCDE_HANDLE *mhandle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
770 UBYTE descent,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
771 T_CCDE_ELEM_DESCR *iedescr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
772 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
773 return cde_get_next_elem (mhandle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
774 descent,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
775 iedescr);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
776 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
777
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
778
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
779 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
780 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
781 | Function : cde_get_comp
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
782 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
783 | Description : This function works with similar results like cde_comp_first,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
784 | but not the whole comp table is searched for the name of the
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
785 | component. Instead the previous set elemref in the
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
786 | parameter edescr is taken to directly jump to the component.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
787 | The component found is compared with the given name in
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
788 | edescr. If equal chandle is defined. Otherwise there is an
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
789 | error.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
790 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
791 | Parameters : chandle - the handle for the component (returned)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
792 | edescr - the element descriptor
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
793 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
794 | Return : CCDEDIT_OK on success, CCDEDIT_COMP_NOT_FOUND otherwise
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
795 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
796 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
797
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
798 USHORT CCDDATA_PREF(cde_get_comp) (T_CCDE_HANDLE* chandle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
799 T_CCDE_ELEM_DESCR* edescr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
800 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
801 const T_CCD_CompTabEntry* comp;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
802 USHORT index = edescr->elemref;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
803
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
804 if (index == NO_REF)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
805 return CCDEDIT_COMP_NOT_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
806
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
807 comp = edescr->esource == FromMsg ? &mcomp[index] : &pcomp[index];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
808
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
809 #ifdef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
810 if (strcmp (comp->name, edescr->aname))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
811 return CCDEDIT_COMP_NOT_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
812 #endif /* CCD_SYMBOLS */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
813
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
814 chandle->context[0].structIdx = index;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
815 chandle->level = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
816 chandle->context[0].elemIdx = comp->componentRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
817 chandle->context[0].elemType = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
818 chandle->context[0].numElems = comp->numOfComponents;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
819 chandle->context[0].levelOffset = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
820 chandle->context[0].arrayIndex = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
821 chandle->context[0].state = TRAVERSE_STRUCTURE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
822 chandle->canDescent = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
823 chandle->source = edescr->esource;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
824 chandle->maxCSize = comp->cSize;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
825 chandle->lenVarPart = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
826
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
827 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
828 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
829
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
830 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
831 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
832 | Function : cde_comp_alias
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
833 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
834 | Description : This function works with similar results like cde_comp_first,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
835 | but not thewhole comp table is searched for the name of the
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
836 | component. Instead the alias name (as_name) from ?elem.cdg
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
837 | is taken for name comparison.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
838 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
839 | Parameters : chandle - the handle for the component (returned)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
840 | source - if message or primitve
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
841 | name - the name of the searched component
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
842 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
843 | Return : CCDEDIT_OK on success, CCDEDIT_COMP_NOT_FOUND otherwise
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
844 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
845 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
846 USHORT cde_comp_alias (T_CCDE_HANDLE * chandle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
847 T_ELM_SRC source,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
848 char * name)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
849
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
850 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
851 const T_CCD_CompTabEntry* comp;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
852 const T_CCD_ElemTabEntry* elem;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
853 int found = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
854 USHORT index, cindex;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
855
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
856 elem = source == FromMsg ? melem : pelem;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
857
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
858 index = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
859 while (!found AND (ccddata_get_alias (index, source == FromMsg) != NULL))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
860 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
861 /* name found */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
862 if (elem[index].elemType == 'C' &&
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
863 !strcmp (ccddata_get_alias (index, source == FromMsg), name))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
864 found = 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
865 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
866 index++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
867 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
868 if (!found)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
869 return CCDEDIT_COMP_NOT_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
870
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
871 cindex = elem[index].elemRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
872 comp = source == FromMsg ? &mcomp[cindex] : &pcomp[cindex];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
873 chandle->context[0].structIdx = cindex;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
874 chandle->level = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
875 chandle->context[0].elemIdx = comp->componentRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
876 chandle->context[0].elemType = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
877 chandle->context[0].numElems = comp->numOfComponents;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
878 chandle->context[0].levelOffset = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
879 chandle->context[0].arrayIndex = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
880 chandle->context[0].state = TRAVERSE_STRUCTURE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
881 chandle->canDescent = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
882 chandle->source = source;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
883 chandle->maxCSize = comp->cSize;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
884 chandle->lenVarPart = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
885
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
886 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
887 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
888
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
889 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
890 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
891 | PROJECT : CCD (6144) MODULE : CCDEDIT |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
892 | STATE : code ROUTINE : cde_comp_first |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
893 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
894
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
895 PURPOSE :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
896
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
897 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
898
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
899 USHORT CCDDATA_PREF(cde_comp_first) (T_CCDE_HANDLE * chandle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
900 T_ELM_SRC source,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
901 char * compname)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
902
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
903 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
904 USHORT index;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
905 BOOL found = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
906
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
907 if (source EQ FromMsg)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
908 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
909 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
910 * search the mcomp-table for the given name
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
911 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
912 index = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
913 while (!found AND mcomp[index].name NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
914 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
915 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
916 * composition name found
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
917 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
918 if (strcmp (mcomp[index].name, compname) EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
919 found = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
920 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
921 index++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
922 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
923 if (found)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
924 chandle->context[0].structIdx = index;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
925 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
926 return CCDEDIT_COMP_NOT_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
927
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
928 chandle->level = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
929 chandle->context[0].elemIdx = mcomp[index].componentRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
930 chandle->context[0].elemType = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
931 chandle->context[0].numElems = mcomp[index].numOfComponents;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
932 chandle->context[0].levelOffset = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
933 chandle->context[0].arrayIndex = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
934 chandle->context[0].state = TRAVERSE_STRUCTURE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
935 chandle->canDescent = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
936 chandle->source = FromMsg;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
937 chandle->maxCSize = mcomp[index].cSize;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
938 chandle->lenVarPart = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
939 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
940 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
941 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
942 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
943 * search the pcomp-table for the given name
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
944 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
945 index = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
946 while (!found AND pcomp[index].name NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
947 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
948 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
949 * composition name found
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
950 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
951 if (strcmp (pcomp[index].name, compname) EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
952 found = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
953 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
954 index++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
955 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
956 if (found)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
957 chandle->context[0].structIdx = index;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
958 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
959 return CCDEDIT_COMP_NOT_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
960
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
961 chandle->level = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
962 chandle->context[0].elemIdx = pcomp[index].componentRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
963 chandle->context[0].elemType = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
964 chandle->context[0].numElems = pcomp[index].numOfComponents;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
965 chandle->context[0].levelOffset = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
966 chandle->context[0].arrayIndex = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
967 chandle->context[0].state = TRAVERSE_STRUCTURE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
968 chandle->canDescent = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
969 chandle->source = FromPrim;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
970 chandle->maxCSize = pcomp[index].cSize;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
971 chandle->lenVarPart = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
972 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
973
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
974 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
975 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
976
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
977 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
978 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
979 | PROJECT : CCD (6144) MODULE : CCDEDIT |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
980 | STATE : code ROUTINE : cde_comp_next |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
981 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
982
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
983 PURPOSE :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
984
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
985 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
986
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
987 USHORT CCDDATA_PREF(cde_comp_next) (T_CCDE_HANDLE *chandle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
988 UBYTE descent,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
989 T_CCDE_ELEM_DESCR *descr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
990 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
991 return cde_get_next_elem (chandle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
992 descent,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
993 descr);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
994 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
995
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
996 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
997 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
998 | Function : cde_get_symval
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
999 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1000 | Description : This function adds the "Comment" of the SAP-/MSG-catalogues
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1001 | to the member symbolicValue of a given T_CCDE_ELEM_DESCR.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1002 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1003 | Parameters : elem_value - the actual value for that the comment
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1004 | is searched for
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1005 | edescr - the element descriptor
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1006 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1007 | Return : The string itself is returned which is a pointer to
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1008 | '\0' if no comment was defined for that value.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1009 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1010 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1011
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1012 char* CCDDATA_PREF(cde_get_symval) (int elem_value, T_CCDE_ELEM_DESCR* edescr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1013 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1014 edescr->symbolicValue[0] = '\0';
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1015
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1016 cde_val_iterate (elem_value, edescr);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1017
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1018 return edescr->symbolicValue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1019 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1020
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1021 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1022 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1023 | PROJECT : CCD (6144) MODULE : CCDEDIT |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1024 | STATE : code ROUTINE : cde_read_elem |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1025 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1026
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1027 PURPOSE : Reads the value of the element, referenced by the element
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1028 descriptor edescr, out of the C-Structure cstruct. The
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1029 value is stored in the memory area, addressed by the
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1030 parameter value.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1031
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1032 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1033
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1034 USHORT CCDDATA_PREF(cde_read_elem) (T_CCDE_HANDLE * handle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1035 void * cstruct,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1036 T_CCDE_ELEM_DESCR * edescr,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1037 UBYTE * value)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1038 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1039 T_CONV * cvp;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1040 U32 voffset;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1041 ULONG elem_value;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1042 UBYTE * cs = (UBYTE *) cstruct;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1043
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1044 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1045 * if this element is optional and it is no array component
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1046 * read the valid flag out of the C-structure.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1047 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1048 if (edescr->isOptional && edescr->index == NO_REF && edescr->ptrtype != usptr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1049 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1050 voffset = edescr->offset++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1051 edescr->isValid = (cs[voffset] EQ TRUE);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1052 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1053 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1054 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1055 if (edescr->index NEQ NO_REF)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1056 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1057 T_CCDE_CONTEXT *last_ctx;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1058
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1059 last_ctx = &handle->context[handle->level-1];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1060 edescr->isValid = (edescr->index < last_ctx->repeats);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1061 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1062 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1063 edescr->isValid = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1064 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1065
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1066 if (!edescr->isValid)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1067 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1068
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1069 if (edescr->u_member)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1070 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1071 edescr->u_ctrl = * (U32 *) &cs[edescr->offset];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1072 edescr->offset += sizeof (U32);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1073 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1074
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1075 if (edescr->arrayType NEQ NoArray)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1076 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1077 T_CCDE_CONTEXT *ctx;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1078
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1079 ctx = &handle->context[handle->level];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1080
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1081 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1082 * array of message elements (info elements)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1083 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1084
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1085 if (edescr->arrayType EQ VarArray)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1086 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1087 USHORT sz_of_len;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1088 sz_of_len = edescr->maxRepeat >> 8 ? 2 : 1; /* 1 or 2 bytes for len */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1089 if (sz_of_len == 1)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1090 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1091 ctx->repeats = (USHORT) cs[edescr->offset];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1092 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1093 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1094 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1095 ctx->repeats = * (USHORT *) &cs[edescr->offset];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1096 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1097 edescr->offset += sz_of_len;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1098
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1099 if (ctx->repeats > edescr->maxRepeat)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1100 ctx->repeats = edescr->maxRepeat;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1101 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1102 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1103 ctx->repeats = edescr->maxRepeat;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1104
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1105 edescr->bytelen = edescr->bytelen * ctx->repeats;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1106 edescr->validRepeats = ctx->repeats;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1107 *value++ = (UBYTE) edescr->validRepeats;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1108 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1109
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1110 if (edescr->ptrtype != noptr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1111 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1112 cs = * (UBYTE **) &cs[edescr->offset];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1113 if (!cs)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1114 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1115 edescr->isValid = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1116 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1117 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1118 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1119 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1120 cs += edescr->offset;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1121
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1122 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1123 * read the current value from the C-structure
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1124 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1125 if ((edescr->btype == T_issdu) || (edescr->btype == T_buffer))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1126 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1127 USHORT l_buf, o_buf, len;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1128
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1129 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1130 * For the structure SDU perform a special handling.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1131 * The SDU contains l_buf and o_buf and the element
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1132 * buf. This element is only defined as buf[1] because
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1133 * the real length results of the encoded message and
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1134 * must be calculated form l_buf and o_buf
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1135 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1136
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1137 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1138 * read l_buf and o_buf (length and offset) out of the struct
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1139 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1140 memcpy ((UBYTE *)&l_buf, cs, sizeof (USHORT));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1141
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1142 memcpy ((UBYTE *)&o_buf, cs+sizeof (USHORT), sizeof (USHORT));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1143
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1144 len = ((l_buf+o_buf+7)/8);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1145 handle->lenVarPart += len;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1146 handle->canDescent = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1147 if ((edescr->btype == T_issdu) &&
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1148 ((len > (U32)(ccddata_get_max_bitstream_len()/8)) ||
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1149 (len > 0x1FFF))) /* max bytes: 0xFFFF/8 = 0x1FFF */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1150 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1151 return CCDEDIT_MESSAGE_ERROR;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1152 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1153 edescr->bytelen = (2 * sizeof (USHORT)) + len;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1154 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1155
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1156 memcpy (value, cs, edescr->bytelen);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1157
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1158 cvp = (T_CONV *) cs;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1159
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1160 switch (edescr->btype)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1161 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1162 case T_byte:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1163 elem_value = (ULONG) cvp->b[0];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1164 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1165 case T_short:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1166 elem_value = (ULONG) cvp->s[0];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1167 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1168 case T_long:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1169 elem_value = (ULONG) cvp->l;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1170 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1171 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1172 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1173 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1174
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1175 (void) CCDDATA_PREF(cde_get_symval) (elem_value, edescr);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1176
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1177 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1178 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1179
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1180 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1181 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1182 | Function : cde_write_prepare
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1183 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1184 | Description : This function prepares the writing of elements, by setting
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1185 | valid flag, union controller and length of vaiable arrays
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1186 | if necessary. Current version: only valid flag and union
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1187 | controller.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1188 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1189 | Parameters : same as cde_write_elem except value
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1190 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1191 | Return : -
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1192 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1193 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1194
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1195 void CCDDATA_PREF(cde_write_prepare) (T_CCDE_HANDLE * handle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1196 void * cstruct,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1197 T_CCDE_ELEM_DESCR * edescr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1198 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1199 UBYTE * cs = (UBYTE *) cstruct;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1200
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1201 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1202 * if this element is optional and it is no array component
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1203 * set the corresponding valid flag in the C-structure.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1204 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1205 if (edescr->isOptional && edescr->ptrtype != usptr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1206 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1207 cs[edescr->offset++] = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1208 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1209
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1210 if (edescr->u_member)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1211 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1212 * (U32 *) &cs[edescr->offset] = (UBYTE) edescr->u_ctrl;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1213 edescr->offset += sizeof (U32);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1214 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1215 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1216
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1217
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1218 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1219 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1220 | PROJECT : CCD (6144) MODULE : CCDEDIT |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1221 | STATE : code ROUTINE : cde_write_elem |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1222 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1223
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1224 PURPOSE : Write the value wich is stored in the memory area,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1225 addressed by the parameter value, into the C-Structure
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1226 element, referenced by the element descriptor edescr.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1227
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1228 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1229
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1230 USHORT CCDDATA_PREF(cde_write_elem) (T_CCDE_HANDLE * handle,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1231 void * cstruct,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1232 T_CCDE_ELEM_DESCR * edescr,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1233 UBYTE * value)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1234 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1235 char *cs = (UBYTE *) cstruct;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1236 char *vb;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1237 U32 len;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1238
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1239 CCDDATA_PREF(cde_write_prepare) (handle, cs, edescr);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1240
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1241 if ((edescr->arrayType != NoArray) && (edescr->btype != T_struct))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1242 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1243 T_CCDE_CONTEXT *ctx;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1244 T_CCDE_CONTEXT _ctx;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1245
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1246 ctx = handle ? &handle->context[handle->level] : &_ctx;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1247
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1248 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1249 * Array of message elements (info elements) or
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1250 * parameter.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1251 * In case of variable sized arrays, store the
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1252 * amount of elements into the corresponding c_xxx variable
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1253 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1254 if (edescr->arrayType EQ VarArray)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1255 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1256 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1257 * array with a variable number of elements
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1258 * set the c_xxx variable in the C-Structure
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1259 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1260 USHORT sz_of_len;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1261 sz_of_len = edescr->maxRepeat >> 8 ? 2 : 1; /* 1 or 2 bytes for len */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1262 if (sz_of_len == 1)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1263 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1264 cs[edescr->offset] = (UBYTE) edescr->validRepeats;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1265 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1266 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1267 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1268 * (USHORT *) &cs[edescr->offset] = edescr->validRepeats;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1269 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1270 edescr->offset += sz_of_len;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1271 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1272 ctx->repeats = edescr->validRepeats;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1273 if (edescr->bitstring)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1274 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1275 ctx->repeats = (ctx->repeats+7)/8;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1276 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1277
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1278 edescr->bytelen = edescr->bytelen * ctx->repeats;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1279 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1280
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1281 if (edescr->ptrtype != noptr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1282 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1283 char* pointer = value;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1284 vb = (char*) &pointer;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1285 len = sizeof (char*);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1286 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1287 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1288 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1289 vb = (char*) value;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1290 len = edescr->bytelen;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1291
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1292 if ((edescr->btype == T_issdu) || (edescr->btype == T_buffer))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1293 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1294 USHORT l_buf, o_buf;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1295
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1296 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1297 * For the structure SDU perform a special handling.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1298 * The SDU contains l_buf and o_buf and the element
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1299 * buf. This element is only defined as buf[1] because
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1300 * the real length results of the encoded message and
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1301 * must be calculated form l_buf and o_buf
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1302 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1303
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1304 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1305 * read l_buf and o_buf (length and offset) out of the value
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1306 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1307 memcpy ((UBYTE *)&l_buf, vb, sizeof (USHORT));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1308
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1309 memcpy ((UBYTE *)&o_buf, vb+sizeof (USHORT), sizeof (USHORT));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1310
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1311 len = (2 * sizeof (USHORT)) + ((l_buf+o_buf+7)/8);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1312 if (handle)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1313 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1314 if (edescr->ptrtype == noptr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1315 handle->lenVarPart += (USHORT) len;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1316 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1317 handle->lenVarPart += sizeof (void*);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1318 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1319 edescr->bytelen = len;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1320 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1321 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1322
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1323 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1324 * write the value into the C-structure
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1325 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1326 memcpy (cs+edescr->offset, vb, len);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1327
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1328 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1329 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1330
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1331 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1332 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1333 | PROJECT : CCD (6144) MODULE : CCDEDIT |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1334 | STATE : code ROUTINE : cde_get_type |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1335 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1336
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1337 PURPOSE : Requests the type (primitive or message) for a given
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1338 name. The type is stored in the return parameter type.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1339
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1340 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1341
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1342 USHORT CCDDATA_PREF(cde_get_type) (char *name,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1343 T_ELM_SRC *type)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1344 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1345 #ifdef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1346 USHORT SAP, Opcode, Direction, Entity;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1347
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1348 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1349 * check the primitive table first. Look in all SAPs ands for
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1350 * all direction alls opcodes to find the name as a primitve
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1351 * name.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1352 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1353
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1354 for (SAP = 0; SAP <= ccddata_max_sap_num; SAP++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1355 for (Direction = 0; Direction <= 1; Direction++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1356 for (Opcode = 0; Opcode <= ccddata_max_primitive_id; Opcode++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1357 if (ccddata_get_pmtx(SAP, Opcode, Direction) NEQ NO_REF)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1358 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1359 if (!strcmp (name,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1360 pcomp[ccddata_get_pmtx(SAP, Opcode, Direction)].name))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1361 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1362 *type = FromPrim;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1363 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1364 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1365 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1366
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1367 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1368 * check the message table second. Look in all entities ands for
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1369 * all direction alls opcodes to find the name as a message
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1370 * name.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1371 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1372
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1373 for (Entity = 0; Entity < ccddata_num_of_entities; Entity++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1374 for (Direction = 0; Direction <= 1; Direction++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1375 for (Opcode = 0; Opcode <= ccddata_max_message_id; Opcode++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1376 if (ccddata_get_mmtx(Entity, Opcode, Direction) NEQ NO_REF)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1377 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1378 if (!strcmp (name,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1379 mcomp[ccddata_get_mmtx(Entity, Opcode, Direction)].name))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1380 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1381 *type = FromPrim;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1382 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1383 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1384 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1385
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1386 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1387
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1388 return CCDEDIT_PRIM_NOT_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1389 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1390
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1391 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1392 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1393 | PROJECT : CCD (6144) MODULE : CCDEDIT |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1394 | STATE : code ROUTINE : cde_get_primcode |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1395 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1396
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1397 PURPOSE : Requests the opcode of the primitive for a given
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1398 name. The opcode is stored in the return parameter primcode.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1399
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1400 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1401
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1402 USHORT CCDDATA_PREF(cde_get_primcode) (char *name,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1403 ULONG *primcode)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1404 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1405 #ifdef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1406 USHORT SAP, Opcode, Direction;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1407
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1408 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1409 * check the primitive table. Look in all SAPs ands for
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1410 * all direction alls opcodes to find the name as a primitve
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1411 * name.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1412 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1413
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1414 for (SAP = 0; SAP <= ccddata_max_sap_num; SAP++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1415 for (Direction = 0; Direction <= 1; Direction++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1416 for (Opcode = 0; Opcode <= ccddata_max_primitive_id; Opcode++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1417 if (ccddata_get_pmtx(SAP, Opcode, Direction) NEQ NO_REF)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1418 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1419 if (!strcmp (name, pcomp[ccddata_get_pmtx(SAP, Opcode, Direction)].name))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1420 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1421 *primcode = ((Direction & 0x01) << 14);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1422 *primcode |= (SAP & 0x3fff);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1423 *primcode |= ((Opcode & 0xff) << 16);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1424 *primcode |= 0x80000000;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1425
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1426 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1427 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1428 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1429 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1430
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1431 return CCDEDIT_PRIM_NOT_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1432 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1433
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1434
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1435 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1436 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1437 | PROJECT : CCD (6144) MODULE : CCDEDIT |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1438 | STATE : code ROUTINE : cde_get_msgcode |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1439 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1440
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1441 PURPOSE : Requests the opcode, the direction and the entity-number
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1442 of the message for a given name.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1443 The opcode is stored in the return parameters .
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1444
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1445 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1446
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1447 USHORT CCDDATA_PREF(cde_get_msgcode) (char *name,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1448 UBYTE *type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1449 UBYTE *direction,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1450 UBYTE *entity)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1451 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1452 #ifdef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1453 USHORT Opcode, Direction, Entity;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1454
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1455 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1456 * check the message table. Look in all entities ands for
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1457 * all direction alls opcodes to find the name as a message
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1458 * name.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1459 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1460
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1461 for (Entity = 0; Entity < ccddata_num_of_entities; Entity++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1462 for (Direction = 0; Direction <= 1; Direction++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1463 for (Opcode = 0; Opcode <= ccddata_max_message_id; Opcode++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1464 if (ccddata_get_mmtx(Entity, Opcode, Direction) NEQ NO_REF)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1465 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1466 if (!strcmp (name,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1467 mcomp[ccddata_get_mmtx(Entity, Opcode, Direction)].name))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1468 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1469 *type = (UBYTE) Opcode;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1470 *direction = (UBYTE) Direction;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1471 *entity = (UBYTE) Entity;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1472 return CCDEDIT_OK;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1473 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1474 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1475
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1476 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1477
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1478 return CCDEDIT_MESSAGE_NOT_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1479 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1480
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1481 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1482 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1483 | Function : cde_get_is_downlink
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1484 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1485 | Description : This function finds out if an AIM is a downlink or uplink.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1486 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1487 | Parameters : comp_index.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1488 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1489 | Return : False if uplink otherwise true (downlink or both).
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1490 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1491 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1492 int CCDDATA_PREF(cde_get_is_downlink) (ULONG comp_index)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1493 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1494 UBYTE ent;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1495 UBYTE msg_id;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1496
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1497 for(ent = 0; ent < ccddata_num_of_entities ; ent++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1498 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1499 for(msg_id = 0; msg_id <= ccddata_max_message_id ; msg_id++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1500 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1501 if(ccddata_get_mmtx (ent, msg_id, 1) == (USHORT)comp_index)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1502 return 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1503 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1504 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1505 return 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1506 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1507
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1508 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1509 * The following functions are copied from ..\TAP\tdc_interface.c and
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1510 * renamed to get the cde_ prefix instead of tdc_.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1511 * It should be checked if instead of these functions the usual approach
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1512 * to ccdedit by the functions pairs cde_comp_first/cde_comp_next
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1513 * (respectively their prim/msg pendants) can be used (maybe in combination
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1514 * with cde_get_comp). If the check confirms to use the usual approach,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1515 * those 3 functions here should be deleted again
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1516 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1517 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1518 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1519 | Function : cde_get_comp_index
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1520 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1521 | Description : This function searches the comp index in either pcomp or mcomp
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1522 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1523 | Parameters : name and table type.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1524 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1525 | Return : The table entry, if non found it returns 0xffffffff;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1526 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1527 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1528
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1529 ULONG CCDDATA_PREF(cde_get_comp_index) (CHAR* comp_name, T_ELM_SRC table)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1530 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1531 ULONG comp_index;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1532 BOOL found = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1533
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1534 if (table == FromMsg)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1535 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1536 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1537 * search the mcomp-table for the given name
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1538 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1539 comp_index = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1540 while (!found AND mcomp[comp_index].name NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1541 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1542 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1543 * composition name found
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1544 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1545 if (strcmp (mcomp[comp_index].name, comp_name) EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1546 found = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1547 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1548 comp_index++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1549 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1550 if(found)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1551 return comp_index;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1552 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1553 return NO_ENTRY_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1554 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1555 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1556 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1557 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1558 * search the pcomp-table for the given name
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1559 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1560 comp_index = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1561 while (!found AND pcomp[comp_index].name NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1562 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1563 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1564 * composition name found
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1565 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1566 if (strcmp (pcomp[comp_index].name, comp_name) EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1567 found = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1568 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1569 comp_index++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1570 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1571 if(found)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1572 return comp_index;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1573 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1574 return NO_ENTRY_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1575 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1576 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1577
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1578 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1579 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1580 | Function : cde_get_element_name
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1581 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1582 | Description : This function gets the element name for a given index + offset.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1583 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1584 | Parameters : comp_index, offset and table type.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1585 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1586 | Return : The element name.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1587 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1588 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1589
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1590 CHAR* CCDDATA_PREF(cde_get_element_name) (ULONG comp_index, USHORT elem_off , T_ELM_SRC table)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1591 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1592 if (table == FromMsg)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1593 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1594 if (mcomp[comp_index].componentRef == -1 || elem_off >= mcomp[comp_index].numOfComponents)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1595 return NULL;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1596 return ccddata_get_alias ((USHORT) (mcomp[comp_index].componentRef + elem_off), table == FromMsg);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1597 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1598 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1599 if (pcomp[comp_index].componentRef == -1 || elem_off >= pcomp[comp_index].numOfComponents)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1600 return NULL;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1601 return ccddata_get_alias ((USHORT) (pcomp[comp_index].componentRef + elem_off), table == FromMsg);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1602 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1603
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1604 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1605 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1606 | Function : cde_get_array_kind
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1607 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1608 | Description : This function gets the array kind - e.g. the cSize of the
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1609 | arrays (byte, short og long).
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1610 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1611 | Parameters : Name of the base type (var_name) and table type.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1612 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1613 | Return : The cSize of the var_name. If not found it returns 0xffffffff
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1614 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1615 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1616
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1617 ULONG CCDDATA_PREF(cde_get_array_kind) (CHAR* var_name, T_ELM_SRC table)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1618 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1619 ULONG var_index;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1620 BOOL found = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1621
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1622 if (table == FromMsg)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1623 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1624 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1625 * search the mvar-table for the given name
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1626 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1627 var_index = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1628 while (!found AND mvar[var_index].name NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1629 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1630 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1631 * name found
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1632 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1633 if (strcmp (mvar[var_index].name, var_name) EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1634 found = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1635 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1636 var_index++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1637 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1638 if(found)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1639 return (ULONG) mvar[var_index].cSize;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1640 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1641 return NO_ENTRY_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1642 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1643 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1644 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1645 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1646 * search the pvar-table for the given name
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1647 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1648 var_index = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1649 while (!found AND pvar[var_index].name NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1650 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1651 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1652 * name found
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1653 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1654 if (strcmp (pvar[var_index].name, var_name) EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1655 found = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1656 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1657 var_index++;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1658 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1659 if(found)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1660 return (ULONG) pvar[var_index].cSize;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1661 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1662 return NO_ENTRY_FOUND;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1663 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1664 }
|