auto import from //depot/cupcake/@135843
[android/platform/external/neven.git] / Embedded / common / src / b_BitFeatureEm / Feature.c
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /* ---- includes ----------------------------------------------------------- */
18
19 #include "b_BasicEm/Functions.h"
20 #include "b_BitFeatureEm/Feature.h"
21
22 #include "b_BitFeatureEm/Sequence.h"
23 #include "b_BitFeatureEm/I04Dns2x2Ftr.h"
24 #include "b_BitFeatureEm/I04Tld2x4Ftr.h"
25 #include "b_BitFeatureEm/I04Dns2x4Ftr.h"
26 #include "b_BitFeatureEm/L01Tld2x4Ftr.h"
27 #include "b_BitFeatureEm/L01Dns2x4Ftr.h"
28 #include "b_BitFeatureEm/L04Dns2x4Ftr.h"
29 #include "b_BitFeatureEm/L04Dns3x3Ftr.h"
30 #include "b_BitFeatureEm/L06Dns3x3Ftr.h"
31 #include "b_BitFeatureEm/L06Dns4x4Ftr.h"
32 #include "b_BitFeatureEm/L06DnsNx4x4Ftr.h"
33 #include "b_BitFeatureEm/L01Tld1x1Ftr.h"
34 #include "b_BitFeatureEm/L04Tld2x4Ftr.h"
35 #include "b_BitFeatureEm/L04Dns2x2Ftr.h"
36
37 /* ------------------------------------------------------------------------- */
38
39 /* ========================================================================= */
40 /*                                                                           */
41 /* ---- \ghd{ auxiliary functions } ---------------------------------------- */
42 /*                                                                           */
43 /* ========================================================================= */
44
45 /* ------------------------------------------------------------------------- */
46
47 /* ========================================================================= */
48 /*                                                                           */
49 /* ---- \ghd{ constructor / destructor } ----------------------------------- */
50 /*                                                                           */
51 /* ========================================================================= */
52
53 /* ------------------------------------------------------------------------- */
54
55 void bbf_Feature_init( struct bbs_Context* cpA,
56                                            struct bbf_Feature* ptrA )
57 {
58         ptrA->typeE = 0;
59         ptrA->patchWidthE = 0;
60         ptrA->patchHeightE = 0;
61         ptrA->vpActivityE = NULL;
62 }
63
64 /* ------------------------------------------------------------------------- */
65
66 void bbf_Feature_exit( struct bbs_Context* cpA,
67                                            struct bbf_Feature* ptrA )
68 {
69         ptrA->typeE = 0;
70         ptrA->patchWidthE = 0;
71         ptrA->patchHeightE = 0;
72         ptrA->vpActivityE = NULL;
73 }
74
75 /* ------------------------------------------------------------------------- */
76
77 /* ========================================================================= */
78 /*                                                                           */
79 /* ---- \ghd{ operators } -------------------------------------------------- */
80 /*                                                                           */
81 /* ========================================================================= */
82
83 /* ------------------------------------------------------------------------- */
84
85 void bbf_Feature_copy( struct bbs_Context* cpA,
86                                            struct bbf_Feature* ptrA, 
87                                            const struct bbf_Feature* srcPtrA )
88 {
89         ptrA->typeE                     = srcPtrA->typeE;
90         ptrA->patchWidthE       = srcPtrA->patchWidthE;
91         ptrA->patchHeightE      = srcPtrA->patchHeightE;
92         ptrA->vpActivityE       = srcPtrA->vpActivityE;
93 }
94
95 /* ------------------------------------------------------------------------- */
96
97 flag bbf_Feature_equal( struct bbs_Context* cpA,
98                                             const struct bbf_Feature* ptrA, 
99                                                 const struct bbf_Feature* srcPtrA )
100 {
101
102         if( ptrA->typeE                 != srcPtrA->typeE ) return FALSE;
103         if( ptrA->patchWidthE   != srcPtrA->patchWidthE ) return FALSE;
104         if( ptrA->patchHeightE  != srcPtrA->patchHeightE ) return FALSE;
105         if( ptrA->vpActivityE   != srcPtrA->vpActivityE ) return FALSE;
106         return TRUE;
107 }
108
109 /* ------------------------------------------------------------------------- */
110
111 /* ========================================================================= */
112 /*                                                                           */
113 /* ---- \ghd{ query functions } -------------------------------------------- */
114 /*                                                                           */
115 /* ========================================================================= */
116
117 /* ------------------------------------------------------------------------- */
118
119 /* ========================================================================= */
120 /*                                                                           */
121 /* ---- \ghd{ modify functions } ------------------------------------------- */
122 /*                                                                           */
123 /* ========================================================================= */
124
125 /* ------------------------------------------------------------------------- */
126         
127 /* ========================================================================= */
128 /*                                                                           */
129 /* ---- \ghd{ I/O } -------------------------------------------------------- */
130 /*                                                                           */
131 /* ========================================================================= */
132
133 /* ------------------------------------------------------------------------- */
134         
135 uint32 bbf_Feature_memSize( struct bbs_Context* cpA,
136                                                     const struct bbf_Feature* ptrA )
137 {
138         uint32 memSizeL = 0;
139         memSizeL += bbs_SIZEOF16( ptrA->typeE );
140         memSizeL += bbs_SIZEOF16( ptrA->patchWidthE );
141         memSizeL += bbs_SIZEOF16( ptrA->patchHeightE );
142         return memSizeL; 
143 }
144
145 /* ------------------------------------------------------------------------- */
146         
147 uint32 bbf_Feature_memWrite( struct bbs_Context* cpA,
148                                                          const struct bbf_Feature* ptrA, 
149                                                          uint16* memPtrA )
150 {
151         uint32 memSizeL = bbf_Feature_memSize( cpA, ptrA );
152         memPtrA += bbs_memWrite32( &ptrA->typeE, memPtrA );
153         memPtrA += bbs_memWrite32( &ptrA->patchWidthE, memPtrA );
154         memPtrA += bbs_memWrite32( &ptrA->patchHeightE, memPtrA );
155         return memSizeL;
156 }
157
158 /* ------------------------------------------------------------------------- */
159
160 uint32 bbf_Feature_memRead( struct bbs_Context* cpA,
161                                                     struct bbf_Feature* ptrA, 
162                                                         const uint16* memPtrA )
163 {
164         if( bbs_Context_error( cpA ) ) return 0;
165         memPtrA += bbs_memRead32( &ptrA->typeE, memPtrA );
166         memPtrA += bbs_memRead32( &ptrA->patchWidthE, memPtrA );
167         memPtrA += bbs_memRead32( &ptrA->patchHeightE, memPtrA );
168         return bbf_Feature_memSize( cpA, ptrA );
169 }
170
171 /* ------------------------------------------------------------------------- */
172         
173 /* ========================================================================= */
174 /*                                                                           */
175 /* ---- \ghd{ exec functions } --------------------------------------------- */
176 /*                                                                           */
177 /* ========================================================================= */
178         
179 /* ------------------------------------------------------------------------- */
180
181 void bbf_featureInit( struct bbs_Context* cpA,
182                                           struct bbf_Feature* ptrA,
183                                           enum bbf_FeatureType typeA )
184 {
185         switch( typeA )
186         {
187                 case bbf_FT_SEQUENCE:               bbf_Sequence_init( cpA, ( struct bbf_Sequence* )ptrA ); return;
188                 case bbf_FT_I04_DNS_2X2_FTR:    bbf_I04Dns2x2Ftr_init( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA ); return;
189                 case bbf_FT_I04_TLD_2X4_FTR:    bbf_I04Tld2x4Ftr_init( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA ); return;
190                 case bbf_FT_I04_DNS_2X4_FTR:    bbf_I04Dns2x4Ftr_init( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA ); return;
191                 case bbf_FT_L01_TLD_2X4_FTR:    bbf_L01Tld2x4Ftr_init( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA ); return;
192                 case bbf_FT_L01_DNS_2X4_FTR:    bbf_L01Dns2x4Ftr_init( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA ); return;
193                 case bbf_FT_L04_DNS_2X4_FTR:    bbf_L04Dns2x4Ftr_init( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA ); return;
194                 case bbf_FT_L04_DNS_3X3_FTR:    bbf_L04Dns3x3Ftr_init( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA ); return;
195                 case bbf_FT_L06_DNS_3X3_FTR:    bbf_L06Dns3x3Ftr_init( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA ); return;
196                 case bbf_FT_L06_DNS_4X4_FTR:    bbf_L06Dns4x4Ftr_init( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA ); return;
197                 case bbf_FT_L06_DNS_NX4X4_FTR:  bbf_L06DnsNx4x4Ftr_init( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA ); return;
198                 case bbf_FT_L01_TLD_1X1_FTR:    bbf_L01Tld1x1Ftr_init( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA ); return;
199                 case bbf_FT_L04_TLD_2X4_FTR:    bbf_L04Tld2x4Ftr_init( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA ); return;
200                 case bbf_FT_L04_DNS_2X2_FTR:    bbf_L04Dns2x2Ftr_init( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA ); return;
201                         
202                 default: bbs_ERROR0( "bbf_featureInit: invalid type" );
203         }
204 }
205
206 /* ------------------------------------------------------------------------- */
207
208 void bbf_featureExit( struct bbs_Context* cpA, 
209                                           struct bbf_Feature* ptrA )
210 {
211         switch( ptrA->typeE )
212         {
213                 case bbf_FT_SEQUENCE:              bbf_Sequence_exit( cpA, ( struct bbf_Sequence* )ptrA ); return;
214                 case bbf_FT_I04_DNS_2X2_FTR:   bbf_I04Dns2x2Ftr_exit( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA ); return;
215                 case bbf_FT_I04_TLD_2X4_FTR:   bbf_I04Tld2x4Ftr_exit( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA ); return;
216                 case bbf_FT_I04_DNS_2X4_FTR:   bbf_I04Dns2x4Ftr_exit( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA ); return;
217                 case bbf_FT_L01_TLD_2X4_FTR:   bbf_L01Tld2x4Ftr_exit( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA ); return;
218                 case bbf_FT_L01_DNS_2X4_FTR:   bbf_L01Dns2x4Ftr_exit( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA ); return;
219                 case bbf_FT_L04_DNS_2X4_FTR:   bbf_L04Dns2x4Ftr_exit( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA ); return;
220                 case bbf_FT_L04_DNS_3X3_FTR:   bbf_L04Dns3x3Ftr_exit( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA ); return;
221                 case bbf_FT_L06_DNS_3X3_FTR:   bbf_L06Dns3x3Ftr_exit( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA ); return;
222                 case bbf_FT_L06_DNS_4X4_FTR:   bbf_L06Dns4x4Ftr_exit( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA ); return;
223                 case bbf_FT_L06_DNS_NX4X4_FTR: bbf_L06DnsNx4x4Ftr_exit( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA ); return;
224                 case bbf_FT_L01_TLD_1X1_FTR:   bbf_L01Tld1x1Ftr_exit( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA ); return;
225                 case bbf_FT_L04_TLD_2X4_FTR:   bbf_L04Tld2x4Ftr_exit( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA ); return;
226                 case bbf_FT_L04_DNS_2X2_FTR:   bbf_L04Dns2x2Ftr_exit( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA ); return;
227                 default: bbs_ERROR0( "bbf_featureExit: invalid type" );
228         }
229 }
230
231 /* ------------------------------------------------------------------------- */
232
233 uint32 bbf_featureMemSize( struct bbs_Context* cpA, 
234                                                    const struct bbf_Feature* ptrA )
235 {
236         switch( ptrA->typeE )
237         {
238                 case bbf_FT_SEQUENCE:              return bbf_Sequence_memSize( cpA, ( struct bbf_Sequence* )ptrA );
239                 case bbf_FT_I04_DNS_2X2_FTR:   return bbf_I04Dns2x2Ftr_memSize( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA );
240                 case bbf_FT_I04_TLD_2X4_FTR:   return bbf_I04Tld2x4Ftr_memSize( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA );
241                 case bbf_FT_I04_DNS_2X4_FTR:   return bbf_I04Dns2x4Ftr_memSize( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA );
242                 case bbf_FT_L01_TLD_2X4_FTR:   return bbf_L01Tld2x4Ftr_memSize( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA );
243                 case bbf_FT_L01_DNS_2X4_FTR:   return bbf_L01Dns2x4Ftr_memSize( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA );
244                 case bbf_FT_L04_DNS_2X4_FTR:   return bbf_L04Dns2x4Ftr_memSize( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA );
245                 case bbf_FT_L04_DNS_3X3_FTR:   return bbf_L04Dns3x3Ftr_memSize( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA );
246                 case bbf_FT_L06_DNS_3X3_FTR:   return bbf_L06Dns3x3Ftr_memSize( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA );
247                 case bbf_FT_L06_DNS_4X4_FTR:   return bbf_L06Dns4x4Ftr_memSize( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA );
248                 case bbf_FT_L06_DNS_NX4X4_FTR: return bbf_L06DnsNx4x4Ftr_memSize( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA );
249                 case bbf_FT_L01_TLD_1X1_FTR:   return bbf_L01Tld1x1Ftr_memSize( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA );
250                 case bbf_FT_L04_TLD_2X4_FTR:   return bbf_L04Tld2x4Ftr_memSize( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA );
251                 case bbf_FT_L04_DNS_2X2_FTR:   return bbf_L04Dns2x2Ftr_memSize( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA );
252                 default: bbs_ERROR0( "bbf_featureExit: invalid type" );
253         }
254         return 0;
255 }
256
257 /* ------------------------------------------------------------------------- */
258
259 uint32 bbf_featureMemWrite( struct bbs_Context* cpA, 
260                                                     const struct bbf_Feature* ptrA, uint16* memPtrA )
261 {
262         switch( ptrA->typeE )
263         {
264                 case bbf_FT_SEQUENCE:              return bbf_Sequence_memWrite( cpA, ( struct bbf_Sequence* )ptrA, memPtrA  );
265                 case bbf_FT_I04_DNS_2X2_FTR:   return bbf_I04Dns2x2Ftr_memWrite( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA, memPtrA );
266                 case bbf_FT_I04_TLD_2X4_FTR:   return bbf_I04Tld2x4Ftr_memWrite( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA, memPtrA );
267                 case bbf_FT_I04_DNS_2X4_FTR:   return bbf_I04Dns2x4Ftr_memWrite( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA, memPtrA );
268                 case bbf_FT_L01_TLD_2X4_FTR:   return bbf_L01Tld2x4Ftr_memWrite( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA, memPtrA );
269                 case bbf_FT_L01_DNS_2X4_FTR:   return bbf_L01Dns2x4Ftr_memWrite( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA, memPtrA );
270                 case bbf_FT_L04_DNS_2X4_FTR:   return bbf_L04Dns2x4Ftr_memWrite( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA, memPtrA );
271                 case bbf_FT_L04_DNS_3X3_FTR:   return bbf_L04Dns3x3Ftr_memWrite( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA, memPtrA );
272                 case bbf_FT_L06_DNS_3X3_FTR:   return bbf_L06Dns3x3Ftr_memWrite( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA, memPtrA );
273                 case bbf_FT_L06_DNS_4X4_FTR:   return bbf_L06Dns4x4Ftr_memWrite( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA, memPtrA );
274                 case bbf_FT_L06_DNS_NX4X4_FTR: return bbf_L06DnsNx4x4Ftr_memWrite( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA, memPtrA );
275                 case bbf_FT_L01_TLD_1X1_FTR:   return bbf_L01Tld1x1Ftr_memWrite( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA, memPtrA );
276                 case bbf_FT_L04_TLD_2X4_FTR:   return bbf_L04Tld2x4Ftr_memWrite( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA, memPtrA );
277                 case bbf_FT_L04_DNS_2X2_FTR:   return bbf_L04Dns2x2Ftr_memWrite( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA, memPtrA );
278                 default: bbs_ERROR0( "bbf_featureMemWrite: invalid type" );
279         }
280         return 0;
281 }
282
283 /* ------------------------------------------------------------------------- */
284
285 uint32 bbf_featureMemRead( struct bbs_Context* cpA,
286                                                    struct bbf_Feature* ptrA, 
287                                                    const uint16* memPtrA,
288                                                    struct bbs_MemTbl* mtpA )
289 {
290         switch( ptrA->typeE )
291         {
292                 case bbf_FT_SEQUENCE:              return bbf_Sequence_memRead( cpA, ( struct bbf_Sequence* )ptrA, memPtrA, mtpA );
293                 case bbf_FT_I04_DNS_2X2_FTR:   return bbf_I04Dns2x2Ftr_memRead( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA, memPtrA, mtpA );
294                 case bbf_FT_I04_TLD_2X4_FTR:   return bbf_I04Tld2x4Ftr_memRead( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA, memPtrA, mtpA );
295                 case bbf_FT_I04_DNS_2X4_FTR:   return bbf_I04Dns2x4Ftr_memRead( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA, memPtrA, mtpA );
296                 case bbf_FT_L01_TLD_2X4_FTR:   return bbf_L01Tld2x4Ftr_memRead( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA, memPtrA, mtpA );
297                 case bbf_FT_L01_DNS_2X4_FTR:   return bbf_L01Dns2x4Ftr_memRead( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA, memPtrA, mtpA );
298                 case bbf_FT_L04_DNS_2X4_FTR:   return bbf_L04Dns2x4Ftr_memRead( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA, memPtrA, mtpA );
299                 case bbf_FT_L04_DNS_3X3_FTR:   return bbf_L04Dns3x3Ftr_memRead( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA, memPtrA, mtpA );
300                 case bbf_FT_L06_DNS_3X3_FTR:   return bbf_L06Dns3x3Ftr_memRead( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA, memPtrA, mtpA );
301                 case bbf_FT_L06_DNS_4X4_FTR:   return bbf_L06Dns4x4Ftr_memRead( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA, memPtrA, mtpA );
302                 case bbf_FT_L06_DNS_NX4X4_FTR: return bbf_L06DnsNx4x4Ftr_memRead( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA, memPtrA, mtpA );
303                 case bbf_FT_L01_TLD_1X1_FTR:   return bbf_L01Tld1x1Ftr_memRead( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA, memPtrA, mtpA );
304                 case bbf_FT_L04_TLD_2X4_FTR:   return bbf_L04Tld2x4Ftr_memRead( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA, memPtrA, mtpA );
305                 case bbf_FT_L04_DNS_2X2_FTR:   return bbf_L04Dns2x2Ftr_memRead( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA, memPtrA, mtpA );
306                 default: bbs_ERROR0( "bbf_featureMemRead: invalid type" );
307         }
308         return 0;
309 }
310
311 /* ------------------------------------------------------------------------- */
312
313 uint32 bbf_featureSizeOf16( struct bbs_Context* cpA, enum bbf_FeatureType typeA )
314 {
315         switch( typeA )
316         {
317                 case bbf_FT_SEQUENCE:              return bbs_SIZEOF16( struct bbf_Sequence );
318                 case bbf_FT_I04_DNS_2X2_FTR:   return bbs_SIZEOF16( struct bbf_I04Dns2x2Ftr );
319                 case bbf_FT_I04_TLD_2X4_FTR:   return bbs_SIZEOF16( struct bbf_I04Tld2x4Ftr );
320                 case bbf_FT_I04_DNS_2X4_FTR:   return bbs_SIZEOF16( struct bbf_I04Dns2x4Ftr );
321                 case bbf_FT_L01_TLD_2X4_FTR:   return bbs_SIZEOF16( struct bbf_L01Tld2x4Ftr );
322                 case bbf_FT_L01_DNS_2X4_FTR:   return bbs_SIZEOF16( struct bbf_L01Dns2x4Ftr );
323                 case bbf_FT_L04_DNS_2X4_FTR:   return bbs_SIZEOF16( struct bbf_L04Dns2x4Ftr );
324                 case bbf_FT_L04_DNS_3X3_FTR:   return bbs_SIZEOF16( struct bbf_L04Dns3x3Ftr );
325                 case bbf_FT_L06_DNS_3X3_FTR:   return bbs_SIZEOF16( struct bbf_L06Dns3x3Ftr );
326                 case bbf_FT_L06_DNS_4X4_FTR:   return bbs_SIZEOF16( struct bbf_L06Dns4x4Ftr );
327                 case bbf_FT_L06_DNS_NX4X4_FTR: return bbs_SIZEOF16( struct bbf_L06DnsNx4x4Ftr );
328                 case bbf_FT_L01_TLD_1X1_FTR:   return bbs_SIZEOF16( struct bbf_L01Tld1x1Ftr );
329                 case bbf_FT_L04_TLD_2X4_FTR:   return bbs_SIZEOF16( struct bbf_L04Tld2x4Ftr );
330                 case bbf_FT_L04_DNS_2X2_FTR:   return bbs_SIZEOF16( struct bbf_L04Dns2x2Ftr );
331                 default: bbs_ERROR0( "bbf_featureSizeOf16: invalid type" );
332         }
333         return 0;
334 }
335
336 /* ------------------------------------------------------------------------- */
337
338 /* ========================================================================= */
339