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 55void 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 66void 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 85void 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 97flag 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 135uint32 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 147uint32 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 160uint32 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 181void 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 208void 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 233uint32 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 259uint32 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 285uint32 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 313uint32 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 340