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 : break_cond.c
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 | Copyright 2004 Texas Instruments Deutschland GmbH
|
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 : Definition of encoding and decoding functions for BREAK_COND
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 | elements
|
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
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 * standard definitions like GLOBAL, UCHAR, ERROR etc.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 #include "typedefs.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 #include "header.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 * Prototypes of ccd (USE_DRIVER EQ undef) for prototypes only
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 * look at ccdapi.h
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #undef USE_DRIVER
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 #include "ccdapi.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 * Types and functions for bit access and manipulation
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 #include "ccd_globs.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 #include "bitfun.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 * Prototypes of ccd internal functions
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 #include "ccd.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 * Declaration of coder/decoder tables
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 #include "ccdtable.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 #include "ccddata.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 #ifndef RUN_INT_RAM
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 +-----------------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 | PROJECT : CCD (6144) MODULE : CDC_GSM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 | STATE : code ROUTINE : cdc_break_cond_decode |
|
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 PURPOSE : Decoding of the BREAK_COND element. This element consists of a V
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 component with a variable bit length and must be connected with a
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 special condition. This condition has to be a simple value, which
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 matches to the value range of BREAK_COND element itself.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 This function performs a standard decoding for a given elem table
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 entry. This means for non structured elements that 1-n bits are
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 read from the bitstream and write to a C-Variable in a machine
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 dependent format.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 After decoding of the requested number of bits the resulting value
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 will be compared with the constant given by the condition. In case
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 of equality the global variable globs->continue_array is set to
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 FALSE. This breaks decoding of the current superior composition
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 and finishes the array.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 SHORT cdc_break_cond_decode (const ULONG c_ref, const ULONG e_ref, T_CCD_Globs *globs)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 U8 break_ind = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 ULONG cix_ref, num_prolog_steps, prolog_step_ref;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 #ifdef DEBUG_CCD
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 #ifndef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 TRACE_CCD (globs, "cdc_break_cond_decode()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 TRACE_CCD (globs, "cdc_break_cond_decode() %s", ccddata_get_alias((USHORT) e_ref, 1));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 cix_ref = melem[e_ref].calcIdxRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 num_prolog_steps = calcidx[cix_ref].numPrologSteps;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 prolog_step_ref = calcidx[cix_ref].prologStepRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 * if this element is conditional, check the condition
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 if (calcidx[cix_ref].numCondCalcs NEQ 0
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 AND ! ccd_conditionOK (e_ref, globs))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 return 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 * if this element has a defined prologue
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 * we have to process it before decoding the bitstream
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 * If there are some epilogue expressions to be processed for this element
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 * (rare cases) the result here will be a reading of 0 to an internal
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 * register. The valid processing of expression takes place after the
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 * decoding of the element.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 if (num_prolog_steps)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 if (calc[prolog_step_ref].operation EQ 'P')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 break_ind = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 ccd_performOperations (num_prolog_steps, prolog_step_ref, globs);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 globs->pstructOffs = melem[e_ref].structOffs;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 if (globs->bitpos < globs->maxBitpos)
|
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 if (mvar[melem[e_ref].elemRef].cType EQ 'X')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 bf_readBitChunk (mvar[melem[e_ref].elemRef].bSize, globs);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 bf_readBits (mvar[melem[e_ref].elemRef].bSize, globs);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 if ( ( break_ind == TRUE ) && (num_prolog_steps > 0))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 if ( calc[prolog_step_ref].operand ==
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 (U16) *(globs->pstruct + globs->pstructOffs) )
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 globs->continue_array = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 globs->pstructOffs += mvar[melem[e_ref].elemRef].cSize;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 ccd_recordFault ( globs,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 ERR_ELEM_LEN,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 BREAK,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 (USHORT) e_ref,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 globs->pstruct + globs->pstructOffs);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 * process the epilogue expression for this element if there is any
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 if (num_prolog_steps)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 if ( (calc[prolog_step_ref+1].operation EQ 'K')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 || (calc[prolog_step_ref+1].operation EQ 'C')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 || (calc[prolog_step_ref+1].operation EQ 's'))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 ccd_performOperations (num_prolog_steps, prolog_step_ref, globs);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 return 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 #endif /* !RUN_INT_RAM */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 #ifndef RUN_INT_RAM
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 +-----------------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 | PROJECT : CCD (6144) MODULE : CDC_GSM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 | STATE : code ROUTINE : cdc_break_cond_encode |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 +-----------------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 PURPOSE : encoding of the BREAK_COND element. This element consists of a V
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 component with a variable bit length and must be connected with a
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 special condition. This condition has to be a simple value, which
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 matches to the value range of BREAK_COND element itself.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 SHORT cdc_break_cond_encode (const ULONG c_ref, const ULONG e_ref, T_CCD_Globs *globs)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 U8 break_ind = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 ULONG cix_ref, num_prolog_steps, prolog_step_ref;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 #ifdef DEBUG_CCD
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 #ifndef CCD_SYMBOLS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 TRACE_CCD (globs, "cdc_break_cond_encode()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 TRACE_CCD (globs, "cdc_break_cond_encode() %s", ccddata_get_alias((USHORT) e_ref, 1));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 cix_ref = melem[e_ref].calcIdxRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 num_prolog_steps = calcidx[cix_ref].numPrologSteps;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 prolog_step_ref = calcidx[cix_ref].prologStepRef;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 * if this element is conditional, check the condition
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 if (calcidx[cix_ref].numCondCalcs NEQ 0
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 AND ! ccd_conditionOK (e_ref, globs))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 return 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 * if this element have a defined Prolog
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 * we have to process it before decoding the bitstream
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 if (num_prolog_steps)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 if (calc[prolog_step_ref].operation EQ 'P')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 break_ind = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 ccd_performOperations (num_prolog_steps, prolog_step_ref, globs);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 * Element is not a SPARE.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 * Setup the readpointer into the C-structure for this element
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 globs->pstructOffs = melem[e_ref].structOffs;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 if (mvar[melem[e_ref].elemRef].cType EQ 'X')
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 bf_writeBitChunk (mvar[melem[e_ref].elemRef].bSize, globs);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 bf_writeBits (mvar[melem[e_ref].elemRef].bSize, globs);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 if ( ( break_ind == TRUE ) && (num_prolog_steps > 0))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 if ( calc[prolog_step_ref].operand ==
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 (U16) *(globs->pstruct + globs->pstructOffs) )
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 globs->continue_array = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 globs->pstructOffs += mvar[melem[e_ref].elemRef].cSize;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 return 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 #endif /* !RUN_INT_RAM */
|