FreeCalypso > hg > fc-selenite
annotate src/gpf/ccd/cdc_com.c @ 208:68184e15d92c
src/cs: sync with Magnetite (TI_PROFILER support)
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Fri, 16 Oct 2020 05:20:43 +0000 | 
| parents | 1ea54a97e831 | 
| children | 
| rev | line source | 
|---|---|
| 5 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2 +----------------------------------------------------------------------------- | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3 | Project : | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 4 | Modul : cdc_com.c | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 +----------------------------------------------------------------------------- | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 | Copyright 2002 Texas Instruments Berlin, AG | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 7 | All rights reserved. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 8 | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 | This file is confidential and a trade secret of Texas | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 10 | Instruments Berlin, AG | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 11 | The receipt of or possession of this file does not convey | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 12 | any rights to reproduce or disclose its contents or to | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 13 | manufacture, use, or sell anything it may describe, in | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 | whole, or in part, without the specific written consent of | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 15 | Texas Instruments Berlin, AG. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 16 +----------------------------------------------------------------------------- | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 17 | Purpose : Condat Conder Decoder | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 18 | Definitions of common functions for encoding and decoding of | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 19 | GSM, GPRS or UMTS air interface messages | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 20 +----------------------------------------------------------------------------- | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 21 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 22 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 23 #ifdef _MSDOS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 24 #include <dos.h> | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 #include <conio.h> | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 26 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 27 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 29 * standard definitions like UCHAR, ERROR etc. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 30 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 #include "typedefs.h" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 #include "header.h" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 33 #include <string.h> | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 #include <stdlib.h> | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 * Prototypes of ccd (USE_DRIVER EQ undef) for prototypes only | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 * look at ccdapi.h | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 #undef USE_DRIVER | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 #include "ccdapi.h" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 * Types and functions for bit access and manipulation | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 #include "ccd_globs.h" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 #include "bitfun.h" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 50 * Declaration of coder/decoder-tables | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 51 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 52 #include "ccdtable.h" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 53 #include "ccddata.h" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 55 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 * Prototypes and constants in the common part of ccd | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 57 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 58 #include "ccd.h" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 59 #include "ccd_codingtypes.h" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 60 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 61 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 62 * Need memory allocation functions for dynamic arrays (pointers) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 64 #ifdef DYNAMIC_ARRAYS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 65 #include "vsi.h" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 66 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 67 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 68 #ifndef RUN_FLASH | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 69 const UBYTE padding_bits[8] = {0, 0, 1, 0, 1, 0, 1, 1}; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 70 const UBYTE padding_bits_prev[8] = {1, 0, 0, 1, 0, 1, 0, 1}; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 71 #endif /* !RUN_FLASH */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 72 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 73 #ifndef RUN_FLASH | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 74 /* Attention for RUN_...: static data (used in cdc_skipElem) */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 75 static UBYTE dummy[256]; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 76 #endif /* !RUN_FLASH */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 77 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 78 typedef struct unknownTag | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 79 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 80 U8 errCode; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 81 U8 tag; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 82 U16 bitpos; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 83 struct unknownTag *next; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 84 }T_UNKNOWN_TAG; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 85 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 86 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 87 #ifndef RUN_FLASH | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 88 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 89 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 90 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 91 | STATE : code ROUTINE : cdc_init_ctx_table | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 92 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 93 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 94 PURPOSE : init the iei_ctx table. This must be done before decoding | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 95 a message. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 96 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 97 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 98 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 99 static void cdc_init_ctx_table (T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 100 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 101 int i; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 102 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 103 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 104 TRACE_CCD (globs, "CONTEXT table init"); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 105 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 106 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 107 for (i=0; i<MAX_RECURSIONS_PER_MSG; i++) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 108 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 109 globs->iei_ctx[i].valid = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 110 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 111 globs->numEOCPending = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 112 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 113 #endif /* !RUN_FLASH */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 114 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 115 #ifndef RUN_INT_RAM | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 116 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 117 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 118 | PROJECT : CCD (6144) MODULE : CCD | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 119 | STATE : code ROUTINE : cdc_BCD_decode | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 120 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 121 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 122 PURPOSE : Decoding of an bitstream containing a BCD string | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 123 with k digits. If the first digit in the bitstream | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 124 is DIGIT_2, the digits are ordered | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 125 in the Bitstream as follow: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 126 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 127 MSBit LSBit | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 128 8 7 6 5 4 3 2 1 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 129 DIGIT_2 DIGIT_1 Octett n | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 130 DIGIT_4 DIGIT_3 Octett n+1 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 131 : : : : : : : : | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 132 DIGIT_Z DIGIT_X Octett n+m | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 133 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 134 if the number of the digits is odd, the last | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 135 Octett contains the bit pattern 1111 in the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 136 most significant nibble. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 137 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 138 : : : : : : : : | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 139 1 1 1 1 DIGIT_X Octett n+m | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 140 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 141 NOTE: If the first digit in the bitstream is DIGIT_1, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 142 the digits are ordered in a different way: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 143 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 144 MSBit LSBit | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 145 8 7 6 5 4 3 2 1 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 146 DIGIT_1 XXXXXXX Octett n | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 147 DIGIT_3 DIGIT_2 Octett n+1 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 148 DIGIT_5 DIGIT_4 Octett n+2 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 149 : : : : : : : : | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 150 DIGIT_Z DIGIT_X Octett n+m | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 151 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 152 In this case, if the number of the digits | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 153 is even, the last octett contains the bit | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 154 pattern 1111 in the most significant nibble. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 155 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 156 : : : : : : : : | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 157 1 1 1 1 DIGIT_X Octett n+m | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 158 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 159 The amount of digits may be constant or variable. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 160 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 161 NOTE: A special case (type BCD_NOFILL) is the encoding and | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 162 decoding of a BCD string starting with DIGIT_2 but | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 163 without setting/checking the most significant nibble | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 164 of Octet n+m. This nibble belongs to the next IE | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 165 (usual coded by type BCD_MNC). | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 166 Type BCD_NOFILL is coded by startDigit EQ 2. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 167 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 168 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 169 void cdc_BCD_decode (const ULONG e_ref, UBYTE startDigit, T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 170 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 171 BOOL is_variable; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 172 UBYTE *digits; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 173 UBYTE *addr_c_xxx; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 174 ULONG i, max_rep, nibbles_to_read, repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 175 ULONG cix_ref, num_prolog_steps, prolog_step_ref; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 176 int k; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 177 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 178 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 179 #ifndef CCD_SYMBOLS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 180 TRACE_CCD (globs, "cdc_BCD_decode()"); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 181 #else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 182 TRACE_CCD (globs, "cdc_BCD_decode() %s", ccddata_get_alias((USHORT) e_ref, 1)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 183 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 184 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 185 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 186 cix_ref = melem[e_ref].calcIdxRef; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 187 num_prolog_steps = calcidx[cix_ref].numPrologSteps; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 188 prolog_step_ref = calcidx[cix_ref].prologStepRef; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 189 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 190 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 191 * if this element is conditional, check the condition | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 192 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 193 if (calcidx[cix_ref].numCondCalcs NEQ 0 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 194 AND ! ccd_conditionOK (e_ref, globs)) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 195 return; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 196 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 197 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 198 * if this element have a defined Prolog | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 199 * we have to process it before decoding the bitstream | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 200 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 201 if (num_prolog_steps) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 202 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 203 ccd_performOperations (num_prolog_steps, prolog_step_ref, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 204 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 205 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 206 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 207 * if this element is repeatable, and the number of | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 208 * repeats depends on another element, calculate the repeater | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 209 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 210 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 211 if (melem[e_ref].repType NEQ ' ') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 212 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 213 is_variable = ccd_calculateRep (e_ref, &repeat, &max_rep, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 214 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 215 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 216 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 217 repeat = 1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 218 is_variable = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 219 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 220 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 221 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 222 * setup the offset into the C-structure for this element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 223 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 224 globs->pstructOffs = melem[e_ref].structOffs; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 225 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 226 if (melem[e_ref].optional) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 227 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 228 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 229 * for optional elements set the valid-flag | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 230 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 231 globs->pstruct[globs->pstructOffs++] = (UBYTE) TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 232 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 233 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 234 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 235 if (is_variable) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 236 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 237 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 238 * for variable sized elements store the min-value | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 239 * as counter into the C-Structure (c_xxx). | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 240 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 241 addr_c_xxx = (UBYTE *) (globs->pstruct + globs->pstructOffs++); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 242 if (max_rep > 255) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 243 globs->pstructOffs++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 244 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 245 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 246 addr_c_xxx = NULL; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 247 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 248 digits = (UBYTE *) (globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 249 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 250 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 251 if (startDigit EQ 1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 252 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 253 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 254 * read the BCD digits out of the bitstream. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 255 * The read order is 1,X,3,2,5,4 ... | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 256 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 257 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 258 * if the first digit is digit_1 read it and skip | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 259 * the next 4 bits, because they do not belong to | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 260 * the BCD stream. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 261 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 262 digits[0] = bf_decodeByteNumber (4, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 263 bf_incBitpos (4, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 264 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 265 * make a correction on the repeatvalue | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 266 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 267 if (melem[e_ref].repType NEQ ' ') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 268 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 269 is_variable = ccd_calculateRep (e_ref, &repeat, &max_rep, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 270 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 271 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 272 k = 2; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 273 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 274 for (i=0; i<repeat; i++) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 275 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 276 digits[k] = bf_decodeByteNumber (4, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 277 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 278 TRACE_CCD (globs, "BCD digit (%X) read", (USHORT) digits[k]); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 279 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 280 k = ((k&1) EQ 0) ? (k-1) : (k+3); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 281 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 282 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 283 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 284 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 285 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 286 * read the BCD digits out of the bitstream. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 287 * The read order is 2,1,4,3,6,5 ... | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 288 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 289 k = 1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 290 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 291 nibbles_to_read = repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 292 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 293 if (repeat & 1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 294 nibbles_to_read++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 295 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 296 for (i=0; i<nibbles_to_read; i++) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 297 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 298 digits[k] = bf_decodeByteNumber (4, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 299 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 300 TRACE_CCD (globs, "BCD digit (%X) read", (USHORT) digits[k]); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 301 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 302 k = ((k&1) EQ 1) ? (k-1) : (k+3); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 303 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 304 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 305 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 306 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 307 * check the 1111 pattern and the even odd criteria | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 308 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 309 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 310 if (startDigit EQ 1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 311 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 312 if ((repeat & 1) EQ 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 313 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 314 /* even number of digits */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 315 if (digits[repeat] NEQ 0xf) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 316 repeat++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 317 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 318 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 319 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 320 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 321 if ((repeat & 1) EQ 1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 322 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 323 /* odd number of digits */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 324 if (digits[repeat] NEQ 0xf AND startDigit EQ 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 325 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 326 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 327 * if there is no 1111 pattern generate an error | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 328 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 329 ccd_setError (globs, ERR_PATTERN_MISMATCH, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 330 CONTINUE, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 331 (USHORT) (globs->bitpos-8), (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 332 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 333 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 334 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 335 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 336 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 337 /* even number of digits - the last may be 0xf */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 338 if (digits[repeat-1] EQ 0xf) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 339 repeat--; /* 0x0f dosn't belong to the coded digit string */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 340 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 341 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 342 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 343 if (addr_c_xxx NEQ NULL) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 344 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 345 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 346 * store the number of digits into the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 347 * c_xxx variable if there is one. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 348 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 349 if (max_rep > 65535) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 350 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 351 ULONG *addr_c_xxx_u32; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 352 addr_c_xxx_u32 = (ULONG *)addr_c_xxx; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 353 *addr_c_xxx_u32 = repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 354 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 355 else if (max_rep > 255) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 356 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 357 USHORT *addr_c_xxx_u16; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 358 addr_c_xxx_u16 = (USHORT *)addr_c_xxx; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 359 *addr_c_xxx_u16 = (USHORT) repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 360 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 361 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 362 *addr_c_xxx = (UBYTE) repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 363 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 364 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 365 #endif /* !RUN_INT_RAM */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 366 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 367 #ifndef RUN_INT_RAM | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 368 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 369 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 370 | PROJECT : CCD (6144) MODULE : CCD | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 371 | STATE : code ROUTINE : cdc_BCD_encode | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 372 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 373 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 374 PURPOSE : encoding a Bytearray, that contain a BCD Number, into | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 375 bitstream. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 376 The digits coded in the following order | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 377 into the Bitstream: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 378 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 379 MSBit LSBit | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 380 7 8 6 5 4 3 2 1 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 381 DIGIT_2 DIGIT_1 Octett n | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 382 DIGIT_4 DIGIT_3 Octett n+1 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 383 : : : : : : : : | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 384 DIGIT_Z DIGIT_X Octett n+m | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 385 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 386 if the number of the digits are odd, the bit pattern 1111 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 387 will be coded in the most significant nibble of | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 388 the last Octett. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 389 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 390 : : : : : : : : | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 391 1 1 1 1 DIGIT_X Octett n+m | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 392 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 393 The amount of digits may be constant or variable. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 394 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 395 void cdc_BCD_encode (const ULONG e_ref, UBYTE startDigit, T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 396 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 397 ULONG repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 398 int k; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 399 register UBYTE *digits; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 400 BOOL fullBitsNeeded=FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 401 ULONG cix_ref, num_prolog_steps, prolog_step_ref; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 402 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 403 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 404 #ifndef CCD_SYMBOLS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 405 TRACE_CCD (globs, "cdc_BCD_encode()"); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 406 #else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 407 TRACE_CCD (globs, "cdc_BCD_encode() %s", ccddata_get_alias((USHORT) e_ref, 1)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 408 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 409 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 410 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 411 cix_ref = melem[e_ref].calcIdxRef; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 412 num_prolog_steps = calcidx[cix_ref].numPrologSteps; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 413 prolog_step_ref = calcidx[cix_ref].prologStepRef; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 414 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 415 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 416 * if this element is conditional, check the condition | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 417 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 418 if (calcidx[cix_ref].numCondCalcs NEQ 0 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 419 AND ! ccd_conditionOK (e_ref, globs)) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 420 return; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 421 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 422 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 423 * if this element have a defined Prolog | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 424 * we have to process it before decoding the bitstream | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 425 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 426 if (num_prolog_steps) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 427 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 428 ccd_performOperations (num_prolog_steps, prolog_step_ref, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 429 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 430 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 431 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 432 * setup the offset into the C-structure for this element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 433 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 434 globs->pstructOffs = melem[e_ref].structOffs; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 435 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 436 if (melem[e_ref].optional) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 437 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 438 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 439 * for optional elements check the valid-flag | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 440 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 441 if (globs->pstruct[globs->pstructOffs++] == FALSE) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 442 return; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 443 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 444 else if (globs->pstruct [melem[e_ref].structOffs] != TRUE) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 445 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 446 TRACE_CCD (globs, "Ambiguous value for valid flag!\n...assumed 1 for ccdID=%d", | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 447 e_ref); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 448 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 449 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 450 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 451 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 452 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 453 * if this element is repeatable, and the number of | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 454 * repeats depends on another element, calculate the repeater | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 455 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 456 if (melem[e_ref].repType EQ 'v' OR melem[e_ref].repType EQ 'i') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 457 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 458 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 459 * for variable sized elements read the amount | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 460 * of repeats out of the C-Structure (c_xxx). | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 461 * If the number of repeats given by the C-Structure | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 462 * exceeds the allowed value (maxRepeat) CCD gives a warning! | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 463 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 464 if (melem[e_ref].maxRepeat > 255) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 465 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 466 ULONG count = (ULONG) (* (USHORT *)(globs->pstruct + globs->pstructOffs++)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 467 repeat = MINIMUM (count, (ULONG) melem[e_ref].maxRepeat); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 468 if (repeat < count) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 469 ccd_recordFault (globs, ERR_MAX_REPEAT, CONTINUE, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 470 e_ref, globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 471 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 472 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 473 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 474 repeat = (ULONG)MINIMUM (globs->pstruct[globs->pstructOffs], | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 475 melem[e_ref].maxRepeat); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 476 if ( repeat < (ULONG) (globs->pstruct[globs->pstructOffs]) ) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 477 ccd_recordFault (globs, ERR_MAX_REPEAT, CONTINUE, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 478 (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 479 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 480 globs->pstructOffs++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 481 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 482 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 483 if (melem[e_ref].repType EQ 'c') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 484 repeat = (ULONG) melem[e_ref].maxRepeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 485 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 486 repeat = 1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 487 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 488 /* There seems to exist cases where address contains no digits. */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 489 if (repeat EQ 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 490 return; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 491 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 492 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 493 * setup the read pointer to the byte array that contain | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 494 * the BCD number. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 495 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 496 digits = (UBYTE *) (globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 497 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 498 if (startDigit EQ 1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 499 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 500 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 501 * write the BCD digits into the bitstream. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 502 * The write order is 1,X,3,2,5,4 ... | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 503 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 504 if ((repeat & 1) EQ 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 505 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 506 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 507 * for even digits store the 1111 pattern at last digit | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 508 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 509 fullBitsNeeded = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 510 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 511 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 512 * if the first digit is digit_1 write it and skip | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 513 * the next 4 bits, because they does not belong to | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 514 * the BCD stream. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 515 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 516 bf_codeByteNumber (4, digits[0], globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 517 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 518 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 519 TRACE_CCD (globs, "BCD digit (%X) written", (USHORT) digits[0]); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 520 TRACE_CCD (globs, "skipping 4 bits"); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 521 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 522 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 523 bf_incBitpos (4, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 524 k = 2; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 525 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 526 while (--repeat>1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 527 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 528 bf_codeByteNumber (4, digits[k], globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 529 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 530 TRACE_CCD (globs, "BCD digit (%X) written", (USHORT) digits[k]); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 531 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 532 k = ((k&1) EQ 0) ? (k-1) : (k+3); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 533 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 534 if (repeat) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 535 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 536 if (fullBitsNeeded) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 537 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 538 bf_codeByteNumber (4, 0xf, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 539 k = ((k&1) EQ 0) ? (k-1) : (k+3); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 540 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 541 bf_codeByteNumber (4, digits[k], globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 542 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 543 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 544 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 545 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 546 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 547 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 548 * store the BCD digits into the bitstream. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 549 * The write order is 2,1,4,3,6,5 ... | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 550 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 551 if (repeat & 1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 552 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 553 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 554 * for odd digits store the 1111 pattern at last digit | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 555 * in case of type BCD_NOFILL use 0 instead | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 556 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 557 fullBitsNeeded = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 558 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 559 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 560 k = 1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 561 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 562 while ( repeat-- > 1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 563 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 564 bf_codeByteNumber (4, digits[k], globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 565 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 566 TRACE_CCD (globs, "BCD digit (%X) written", (USHORT) digits[k]); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 567 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 568 k = ((k&1) EQ 1) ? (k-1) : (k+3); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 569 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 570 if (fullBitsNeeded) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 571 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 572 bf_codeByteNumber (4, (UBYTE)((startDigit NEQ 2) ? 0xf : 0), globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 573 k = ((k&1) EQ 1) ? (k-1) : (k+3); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 574 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 575 bf_codeByteNumber (4, digits[k], globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 576 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 577 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 578 #endif /* !RUN_INT_RAM */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 579 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 580 #ifndef RUN_FLASH | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 581 /* Attention for RUN_...: static function */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 582 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 583 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 584 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 585 | STATE : code ROUTINE : cdc_init_table | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 586 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 587 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 588 PURPOSE : init the iei_table for each new msg that is to be decoded. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 589 The c_ref references a composition (msg). The function | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 590 initialises the table entrys only for the used iei for | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 591 this message. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 592 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 593 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 594 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 595 static void cdc_init_table (const ULONG c_ref, T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 596 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 597 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 598 ULONG look_up; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 599 ULONG num_elems; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 600 ULONG ie_table_idx; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 601 ULONG rlevel = globs->ccd_recurs_level; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 602 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 603 if (globs->iei_ctx[rlevel].valid AND rlevel < (ULONG) globs->last_level) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 604 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 605 int i; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 606 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 607 * this iei context has been initialized before, so | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 608 * no action for this. All deeper levels must be set | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 609 * to invalid; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 610 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 611 for (i=globs->last_level; i<MAX_RECURSIONS_PER_MSG; i++) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 612 globs->iei_ctx[i].valid = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 613 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 614 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 615 TRACE_CCD (globs, "TAG table init for old level %d", rlevel); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 616 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 617 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 618 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 619 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 620 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 621 * this iei context has not been initialized before, so | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 622 * initialize the iei_table for this. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 623 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 624 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 625 TRACE_CCD (globs, "TAG table init for new level %d", rlevel); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 626 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 627 look_up = (ULONG) mcomp[c_ref].componentRef; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 628 num_elems = (ULONG) mcomp[c_ref].numOfComponents; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 629 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 630 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 631 * store the startposition of the corresponding melem table and | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 632 * the number of elements in the IEtable | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 633 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 634 globs->iei_ctx[rlevel].melemStart = (USHORT) look_up; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 635 globs->iei_ctx[rlevel].ieTableLen = (USHORT) num_elems; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 636 globs->iei_ctx[rlevel].EOCPending = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 637 globs->iei_ctx[rlevel].countSkipped = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 638 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 639 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 640 * for each element with an iei (ident) setup the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 641 * the iei_table-entry. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 642 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 643 ie_table_idx = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 644 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 645 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 646 * if the number of IE in this message is greater than | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 647 * the allocated IEItable, generate an error. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 648 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 649 if (num_elems > MAX_IE_PER_MSG) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 650 ccd_setError (globs, ERR_INTERNAL_ERROR, BREAK, (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 651 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 652 while (num_elems--) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 653 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 654 if (melem[look_up].ident NEQ 0xffff) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 655 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 656 globs->iei_ctx[rlevel].iei_table[ie_table_idx].ident = (UBYTE) melem[look_up].ident; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 657 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 658 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 659 * GSM1TV elements have only a 4 bit Tag (T). For this | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 660 * elements we have to shift the ident into the upper nibble | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 661 * and set the lower nibble to zero. For GSM2T elements and | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 662 * GSM1TV elements set the MSBit (Bit7). | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 663 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 664 if (melem[look_up].codingType EQ CCDTYPE_GSM1_TV) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 665 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 666 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 667 * shift into the upper nibble, clear the lower nibble | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 668 * and set the MSBit. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 669 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 670 globs->iei_ctx[rlevel].iei_table[ie_table_idx].ident <<= 4; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 671 globs->iei_ctx[rlevel].iei_table[ie_table_idx].ident |= 0x80; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 672 globs->iei_ctx[rlevel].iei_table[ie_table_idx].ident &= 0xf0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 673 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 674 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 675 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 676 if (melem[look_up].codingType EQ CCDTYPE_GSM2_T) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 677 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 678 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 679 * Set the MSBit. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 680 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 681 globs->iei_ctx[rlevel].iei_table[ie_table_idx].ident |= 0x80; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 682 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 683 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 684 globs->iei_ctx[rlevel].iei_table[ie_table_idx].act_amount = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 685 globs->iei_ctx[rlevel].iei_table[ie_table_idx].exhausted = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 686 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 687 switch (melem[look_up].codingType) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 688 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 689 case CCDTYPE_GSM1_TV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 690 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 691 case CCDTYPE_GSM2_T: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 692 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 693 case CCDTYPE_GSM3_TV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 694 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 695 case CCDTYPE_GSM4_TLV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 696 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 697 case CCDTYPE_GSM5_TV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 698 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 699 case CCDTYPE_GSM5_TLV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 700 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 701 case CCDTYPE_GSM1_ASN: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 702 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 703 case CCDTYPE_GSM6_TLV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 704 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 705 globs->iei_ctx[rlevel].iei_table[ie_table_idx].valid = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 706 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 707 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 708 default: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 709 globs->iei_ctx[rlevel].iei_table[ie_table_idx].valid = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 710 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 711 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 712 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 713 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 714 globs->iei_ctx[rlevel].iei_table[ie_table_idx].valid = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 715 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 716 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 717 TRACE_CCD (globs, "iei_table[%d] v=%d ident=%x level=%d", | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 718 ie_table_idx, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 719 globs->iei_ctx[rlevel].iei_table[ie_table_idx].valid, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 720 globs->iei_ctx[rlevel].iei_table[ie_table_idx].ident, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 721 rlevel); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 722 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 723 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 724 look_up++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 725 ie_table_idx++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 726 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 727 globs->iei_ctx[rlevel].valid = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 728 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 729 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 730 #endif /* !RUN_FLASH */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 731 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 732 #ifndef RUN_FLASH | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 733 /* Attention for RUN_...: static function */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 734 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 735 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 736 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 737 | STATE : code ROUTINE : cdc_search_table | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 738 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 739 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 740 PURPOSE : search on the iei_table for the given TAG (T). | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 741 if the TAG can be found (and - in case of CCDTYPE_GSM1_ASN - | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 742 if the information element isn't exhausted), the table | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 743 index was returned as a difference between the found index | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 744 and the aktIndex, -127 otherwise. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 745 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 746 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 747 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 748 static int cdc_search_table | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 749 ( | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 750 int akt_index, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 751 ULONG t, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 752 BOOL limited, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 753 BOOL *nonTaggedFound, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 754 T_CCD_Globs *globs | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 755 ) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 756 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 757 int tab_idx; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 758 ULONG iei; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 759 int ret = -127; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 760 ULONG rec_level = globs->ccd_recurs_level; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 761 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 762 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 763 * search from the akt position to the end of the table. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 764 * This is faster, because in correct messages the found Tag | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 765 * is at a later position in the table. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 766 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 767 tab_idx = akt_index; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 768 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 769 *nonTaggedFound = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 770 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 771 while (tab_idx < (int) globs->iei_ctx[rec_level].ieTableLen) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 772 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 773 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 774 TRACE_CCD (globs, "looking for Tag(%x) iei_table[%d] v=%d ident=%x level=%d", | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 775 t, tab_idx, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 776 globs->iei_ctx[rec_level].iei_table[tab_idx].valid, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 777 globs->iei_ctx[rec_level].iei_table[tab_idx].ident, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 778 rec_level); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 779 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 780 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 781 if (globs->iei_ctx[rec_level].iei_table[tab_idx].valid) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 782 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 783 if (limited) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 784 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 785 iei= (ULONG)(globs->iei_ctx[rec_level].iei_table[tab_idx].ident & 0x7f); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 786 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 787 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 788 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 789 iei= (ULONG)(globs->iei_ctx[rec_level].iei_table[tab_idx].ident); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 790 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 791 if ( iei EQ t ) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 792 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 793 if ( globs->iei_ctx[rec_level].iei_table[tab_idx].exhausted EQ FALSE ) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 794 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 795 return (tab_idx-akt_index); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 796 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 797 else if ( (globs->iei_ctx[rec_level].melemStart + akt_index) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 798 EQ (int) globs->iei_ctx[rec_level].melemLast) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 799 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 800 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 801 * allows multiple appearance of the repeated element is coded as | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 802 * TLV0 TLV1 TLV2 .... | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 803 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 804 return (tab_idx-akt_index); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 805 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 806 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 807 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 808 ret = (tab_idx-akt_index); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 809 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 810 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 811 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 812 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 813 *nonTaggedFound = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 814 tab_idx++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 815 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 816 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 817 tab_idx = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 818 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 819 while (tab_idx < akt_index) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 820 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 821 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 822 TRACE_CCD (globs, "looking for Tag(%x) iei_table[%d] v=%d ident=%x level=%d", | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 823 t, tab_idx, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 824 globs->iei_ctx[rec_level].iei_table[tab_idx].valid, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 825 globs->iei_ctx[rec_level].iei_table[tab_idx].ident, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 826 rec_level); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 827 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 828 if (limited) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 829 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 830 iei= (ULONG)(globs->iei_ctx[rec_level].iei_table[tab_idx].ident & 0x7f); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 831 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 832 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 833 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 834 iei= (ULONG) globs->iei_ctx[rec_level].iei_table[tab_idx].ident; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 835 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 836 if (globs->iei_ctx[rec_level].iei_table[tab_idx].valid | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 837 AND (iei EQ t) ) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 838 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 839 if ( globs->iei_ctx[rec_level].iei_table[tab_idx].exhausted EQ FALSE ) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 840 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 841 return (tab_idx-akt_index); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 842 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 843 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 844 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 845 ret = (tab_idx-akt_index); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 846 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 847 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 848 tab_idx++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 849 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 850 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 851 if (ret != -127) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 852 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 853 globs->SequenceError = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 854 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 855 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 856 return ret; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 857 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 858 #endif /* !RUN_FLASH */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 859 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 860 #ifndef RUN_FLASH | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 861 /* Attention for RUN_...: static function */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 862 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 863 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 864 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 865 | STATE : code ROUTINE : cdc_decode_L | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 866 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 867 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 868 PURPOSE : Decode the length element of TLV and LV values | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 869 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 870 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 871 static ULONG cdc_decode_L (const ULONG e_ref, const ULONG len_l, T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 872 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 873 ULONG l; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 874 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 875 switch (melem[e_ref].codingType) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 876 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 877 case CCDTYPE_GSM1_ASN: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 878 l = (ULONG) bf_decodeByteNumber (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 879 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 880 TRACE_CCD (globs, "decoding 8 bits, l = (%x)", l); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 881 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 882 if (l EQ 0x80) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 883 l = 0xFFFF; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 884 else if (l EQ 0x81) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 885 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 886 l = (ULONG) bf_decodeByteNumber (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 887 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 888 TRACE_CCD (globs, "decoding 8 bits after 0x81, l = (%x)", l); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 889 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 890 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 891 else if (l EQ 0x82) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 892 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 893 l = bf_decodeShortNumber (16, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 894 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 895 TRACE_CCD (globs, "decoding 16 bits after 0x82, l = (%x)", l); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 896 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 897 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 898 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 899 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 900 case CCDTYPE_GSM5_TLV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 901 l = (ULONG) bf_decodeByteNumber (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 902 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 903 if (l EQ 0x81) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 904 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 905 l = (ULONG) bf_decodeByteNumber (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 906 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 907 TRACE_CCD (globs, "decoding 8 bits after 0x81, l = (%x)", l); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 908 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 909 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 910 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 911 TRACE_CCD (globs, "decoding 8 bits, l = (%x)", l); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 912 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 913 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 914 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 915 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 916 case CCDTYPE_GSM6_TLV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 917 l = bf_decodeShortNumber (16, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 918 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 919 TRACE_CCD (globs, "decoding 16 bits, l = (%x)", l); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 920 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 921 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 922 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 923 default: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 924 l = (ULONG) bf_decodeByteNumber (len_l, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 925 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 926 TRACE_CCD (globs, "decoding %d bits, l = (%x)", len_l, l); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 927 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 928 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 929 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 930 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 931 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 932 * Write the value of l at the end of UPN Stack. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 933 * this could be read by an IE of the coding type NO_CODE. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 934 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 935 globs->KeepReg[0] = l ; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 936 return l; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 937 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 938 #endif /* !RUN_FLASH */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 939 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 940 #ifndef RUN_FLASH | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 941 /* Attention for RUN_...: static function */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 942 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 943 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 944 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 945 | STATE : code ROUTINE : cdc_tagged_LV_decode| | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 946 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 947 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 948 PURPOSE : If the parameter lenL is set to a positive value, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 949 this function decodes the L-component. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 950 After this it decodes the element referenced | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 951 by eRef out of the bitstream into the C-Structure | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 952 (globs->pstruct) at position globs->pstructOffs. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 953 If a repeat value is defined for this element, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 954 this function decodes only one appeareance | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 955 of the element because it is a tagged | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 956 element. In this case the decoded element is stored in | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 957 an array wich is indexed by eIndex; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 958 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 959 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 960 static BOOL cdc_tagged_LV_decode (const ULONG e_ref, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 961 ULONG e_index, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 962 const ULONG len_l, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 963 T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 964 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 965 ULONG amount, l; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 966 USHORT act_maxBP, tmp_maxBP; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 967 BOOL endOfComposition = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 968 BOOL asn1=FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 969 U32 offset=0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 970 #ifdef DYNAMIC_ARRAYS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 971 U8 *old_pstruct = NULL; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 972 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 973 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 974 if (melem[e_ref].codingType EQ CCDTYPE_GSM1_ASN) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 975 asn1 = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 976 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 977 if (melem[e_ref].elemType NEQ 'S') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 978 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 979 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 980 * set the offset into the C-structure for this element. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 981 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 982 if (melem[e_ref].optional) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 983 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 984 globs->pstruct[globs->pstructOffs++] = (UBYTE) TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 985 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 986 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 987 if (melem[e_ref].repType EQ 'i') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 988 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 989 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 990 * The number of appearance of all repeatable IEs may | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 991 * differ in a message. So we have to store the number | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 992 * in a c_xxx counter into the C-Structure. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 993 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 994 if (melem[e_ref].maxRepeat > 65535) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 995 *(ULONG *) (globs->pstruct + globs->pstructOffs++) = e_index; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 996 else if (melem[e_ref].maxRepeat > 255) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 997 *(USHORT *) (globs->pstruct + globs->pstructOffs++) = (USHORT) e_index; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 998 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 999 globs->pstruct[globs->pstructOffs] = (UBYTE) e_index; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1000 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1001 globs->pstructOffs++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1002 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1003 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1004 * Recalculate the struct offset for repeatable IEs. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1005 * New pointer types 'R' and 'F' are equivalent to 'V'. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1006 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1007 #ifdef DYNAMIC_ARRAYS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1008 offset = (e_index-1) * ((melem[e_ref].elemType EQ 'V' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1009 OR melem[e_ref].elemType EQ 'R' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1010 OR melem[e_ref].elemType EQ 'F' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1011 ) ? mvar[melem[e_ref].elemRef].cSize | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1012 : mcomp[melem[e_ref].elemRef].cSize | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1013 ); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1014 #else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1015 offset = (e_index-1) * ((melem[e_ref].elemType EQ 'V') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1016 ? mvar[melem[e_ref].elemRef].cSize | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1017 : mcomp[melem[e_ref].elemRef].cSize | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1018 ); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1019 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1020 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1021 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1022 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1023 * If len_l > 0 read the l-Component out of the bistream. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1024 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1025 if (len_l) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1026 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1027 if( len_l <= (ULONG) (globs->maxBitpos - globs->bitpos) ) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1028 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1029 act_maxBP = globs->maxBitpos; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1030 l = cdc_decode_L (e_ref, len_l, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1031 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1032 if (l EQ 0xFFFF) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1033 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1034 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1035 * For ASN1-BER encoding we must look for the special | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1036 * length 0x80 because it indicates the indefinite | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1037 * length. This needs a special handling with later EOC tags. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1038 * | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1039 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1040 globs->iei_ctx[globs->ccd_recurs_level].EOCPending = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1041 globs->numEOCPending++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1042 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1043 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1044 TRACE_CCD (globs, "implicit ASN1 length - EOC is pending"); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1045 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1046 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1047 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1048 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1049 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1050 * Calculate the max bitpos for this element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1051 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1052 tmp_maxBP = (USHORT) (globs->bitpos + (l*8)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1053 if (globs->buflen < tmp_maxBP) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1054 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1055 ccd_recordFault (globs, ERR_MSG_LEN, CONTINUE, (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1056 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1057 else if (globs->maxBitpos < tmp_maxBP) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1058 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1059 ccd_recordFault (globs, ERR_ELEM_LEN, BREAK, (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1060 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1061 globs->maxBitpos = (USHORT)MINIMUM (globs->buflen, tmp_maxBP); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1062 tmp_maxBP = globs->maxBitpos; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1063 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1064 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1065 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1066 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1067 ccd_recordFault (globs, ERR_ELEM_LEN, BREAK, (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1068 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1069 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1070 #ifdef DYNAMIC_ARRAYS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1071 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1072 * Check for pointer types; allocate memory if necessary. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1073 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1074 if ((melem[e_ref].elemType >= 'P' AND melem[e_ref].elemType <= 'R') OR | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1075 (melem[e_ref].elemType >= 'D' AND melem[e_ref].elemType <= 'F')) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1076 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1077 U32 cSize; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1078 U8 *addr; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1079 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1080 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1081 * Find size to allocate; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1082 * - Read from mcomp or mvar according to type | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1083 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1084 cSize = (ULONG)((melem[e_ref].elemType EQ 'V' OR | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1085 melem[e_ref].elemType EQ 'R') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1086 ? mvar[melem[e_ref].elemRef].cSize | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1087 : mcomp[melem[e_ref].elemRef].cSize | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1088 ); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1089 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1090 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1091 * Allocate additional memory | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1092 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1093 addr = (U8 *)DP_ALLOC( cSize, globs->alloc_head, DP_NO_FRAME_GUESS); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1094 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1095 /* If no memory, log error and return immediately */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1096 if (addr EQ NULL) { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1097 ccd_setError (globs, ERR_NO_MEM, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1098 BREAK, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1099 (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1100 return endOfComposition; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1101 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1102 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1103 memset (addr, 0, (size_t)(cSize)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1104 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1105 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1106 * Memory allocated; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1107 * 1. Save old "globs->pstruct" variables | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1108 * 2. Store pointer to freshly allocated memory area in structure | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1109 * 3. Initialize pstruct to point to the freshly allocated memory area. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1110 * 4. Initialize pstructOffs to 0 to start decoding at offset 0 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1111 * in the new memory area. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1112 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1113 old_pstruct = globs->pstruct; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1114 *(U8 **)(globs->pstruct + globs->pstructOffs) = addr; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1115 globs->pstruct = addr; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1116 globs->pstructOffs = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1117 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1118 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1119 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1120 globs->pstructOffs += offset; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1121 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1122 #else /* DYNAMIC_ARRAYS */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1123 globs->pstructOffs += offset; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1124 #endif /* DYNAMIC_ARRAYS */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1125 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1126 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1127 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1128 * Decode the value. Keep caution with BER encoding of ASN1 integers. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1129 * All other types can be decoded by a generic function. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1130 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1131 if (asn1 AND melem[e_ref].elemType EQ 'V' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1132 AND | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1133 melem[e_ref].repType EQ ' ' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1134 AND | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1135 l NEQ 0xFFFF | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1136 ) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1137 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1138 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1139 #ifdef CCD_SYMBOLS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1140 TRACE_CCD (globs, "BER decoding of ASN.1 integer %s", | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1141 ccddata_get_alias((USHORT) e_ref, 1)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1142 #else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1143 TRACE_CCD (globs, "BER decoding of ASN.1 integer; e_ref = %d", melem[e_ref].elemRef); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1144 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1145 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1146 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1147 if (mvar[melem[e_ref].elemRef].cType EQ 'X') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1148 bf_readBitChunk (l*8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1149 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1150 bf_readBits (l*8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1151 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1152 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1153 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1154 amount = 1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1155 if (len_l) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1156 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1157 if (l > 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1158 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1159 cdc_decodeElemvalue (e_ref, &amount, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1160 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1161 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1162 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1163 amount = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1164 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1165 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1166 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1167 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1168 if (melem[e_ref].codingType != CCDTYPE_GSM2_T) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1169 cdc_decodeElemvalue (e_ref, &amount, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1170 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1171 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1172 #ifdef DYNAMIC_ARRAYS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1173 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1174 * Restore globs->pstruct for possible use below | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1175 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1176 if (old_pstruct NEQ NULL) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1177 globs->pstruct = old_pstruct; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1178 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1179 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1180 if (asn1 AND globs->numEOCPending AND !bf_endOfBitstream(globs)) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1181 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1182 UBYTE T = bf_decodeByteNumber (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1183 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1184 TRACE_CCD (globs, "looking for EOC decoding 8 bits T = (%x)", T); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1185 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1186 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1187 if (T EQ 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1188 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1189 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1190 TRACE_CCD (globs, "First EOC octet found"); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1191 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1192 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1193 if (globs->iei_ctx[globs->ccd_recurs_level].EOCPending) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1194 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1195 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1196 TRACE_CCD (globs, "End of ASN1 TLV"); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1197 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1198 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1199 * Skip the second EOC octet. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1200 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1201 bf_incBitpos (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1202 globs->iei_ctx[globs->ccd_recurs_level].EOCPending = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1203 globs->numEOCPending--; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1204 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1205 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1206 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1207 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1208 * The read first EOC octet belongs to an ASN1 TLV of a | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1209 * higher recursion level. Let it be read and evalauted later | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1210 * again for that IE. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1211 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1212 bf_setBitpos (globs->bitpos-8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1213 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1214 TRACE_CCD (globs, "End of higer level ASN1 TLV"); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1215 TRACE_CCD (globs, "Decrementing bitpos by 8 to %d", globs->bitpos); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1216 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1217 endOfComposition = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1218 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1219 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1220 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1221 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1222 if (globs->iei_ctx[globs->ccd_recurs_level].EOCPending) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1223 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1224 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1225 * EOC element is pending but not found. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1226 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1227 ccd_setError (globs, ERR_EOC_TAG_MISSING, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1228 BREAK, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1229 (USHORT) T, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1230 globs->bitpos-8, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1231 (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1232 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1233 bf_setBitpos (globs->bitpos-8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1234 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1235 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1236 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1237 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1238 * normal TAG leave it in the bitstream | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1239 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1240 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1241 TRACE_CCD (globs, "Normal TAG - Decrementing bitpos by 8 to %d", globs->bitpos); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1242 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1243 bf_setBitpos (globs->bitpos-8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1244 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1245 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1246 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1247 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1248 if (len_l) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1249 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1250 if (!asn1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1251 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1252 if (globs->bitpos > tmp_maxBP) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1253 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1254 ccd_recordFault (globs, ERR_ELEM_LEN, CONTINUE, (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1255 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1256 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1257 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1258 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1259 * set the bitpos to the end of the LV or TLV element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1260 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1261 bf_setBitpos (tmp_maxBP, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1262 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1263 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1264 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1265 * set the maxBitpos to the next octet boundary if the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1266 * last non-spare IE does not end at an octet boundary. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1267 * This is necessary for avoiding an early end of decoding. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1268 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1269 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1270 globs->maxBitpos = globs->buflen; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1271 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1272 globs->maxBitpos = act_maxBP; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1273 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1274 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1275 return endOfComposition; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1276 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1277 #endif /* !RUN_FLASH */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1278 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1279 #ifndef RUN_FLASH | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1280 /* Attention for RUN_...: static function */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1281 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1282 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1283 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1284 | STATE : code ROUTINE : cdc_normal_LV_decode| | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1285 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1286 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1287 PURPOSE : If the parameter lenL is set, this function | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1288 decodes the L-component. After this it decodes | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1289 the element referenced by eRef from the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1290 bitstream into the C-Structure (globs->pstruct) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1291 at position globs->pstructOffs. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1292 If a repeat value is defined for this element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1293 this function decodes the V-component multiple and stores | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1294 the values into an array. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1295 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1296 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1297 static BOOL cdc_normal_LV_decode (const ULONG e_ref, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1298 const ULONG len_l, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1299 T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1300 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1301 ULONG l, repeat, amount, max_rep; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1302 USHORT act_maxBP, tmp_maxBP; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1303 BOOL is_variable; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1304 BOOL endOfComposition = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1305 BOOL asn1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1306 BOOL length_in_bits; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1307 #ifdef DYNAMIC_ARRAYS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1308 U8 *old_pstruct = NULL; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1309 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1310 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1311 switch (melem[e_ref].codingType) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1312 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1313 case CCDTYPE_GSM1_ASN: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1314 asn1 = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1315 length_in_bits = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1316 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1317 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1318 case CCDTYPE_GSM7_LV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1319 asn1 = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1320 length_in_bits = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1321 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1322 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1323 default: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1324 asn1 = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1325 length_in_bits = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1326 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1327 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1328 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1329 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1330 * if this element is repeatable, and the number of | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1331 * repeats depends on another element, calculate the repeater | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1332 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1333 if (melem[e_ref].repType NEQ ' ') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1334 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1335 is_variable = ccd_calculateRep (e_ref, &repeat, &max_rep, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1336 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1337 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1338 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1339 repeat = 1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1340 is_variable = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1341 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1342 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1343 if (melem[e_ref].elemType NEQ 'S') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1344 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1345 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1346 * Element is not a SPARE. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1347 * Setup the offset into the C-structure for this element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1348 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1349 if (melem[e_ref].optional) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1350 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1351 globs->pstruct[globs->pstructOffs++] = (UBYTE) TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1352 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1353 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1354 if (is_variable) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1355 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1356 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1357 * for variable sized elements store the min-value | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1358 * as counter into the C-Structure (c_xxx). | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1359 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1360 if (max_rep > 65535) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1361 *(ULONG *) (globs->pstruct + globs->pstructOffs++) = repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1362 else if (max_rep > 255) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1363 *(USHORT *) (globs->pstruct + globs->pstructOffs++) = (USHORT) repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1364 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1365 globs->pstruct[globs->pstructOffs] = (UBYTE) repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1366 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1367 globs->pstructOffs++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1368 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1369 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1370 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1371 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1372 * if len_l > 0 read the l-Component out of the bistream. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1373 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1374 if (len_l) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1375 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1376 if( len_l <= (ULONG)(globs->maxBitpos - globs->bitpos) ) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1377 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1378 act_maxBP = globs->maxBitpos; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1379 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1380 l = cdc_decode_L (e_ref, len_l, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1381 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1382 if (l EQ 0xFFFF) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1383 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1384 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1385 * for ASN1 element coding we must look for the special | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1386 * length 0x80 because it indicates the indefinite | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1387 * length. This needs a special handling with later EOC tags. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1388 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1389 globs->iei_ctx[globs->ccd_recurs_level].EOCPending = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1390 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1391 globs->numEOCPending++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1392 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1393 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1394 TRACE_CCD (globs, "implicit ASN1 length - EOC is pending"); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1395 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1396 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1397 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1398 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1399 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1400 * calculate the max bitpos for this element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1401 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1402 if (!length_in_bits) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1403 l *= 8; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1404 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1405 tmp_maxBP = (USHORT) (globs->bitpos + l); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1406 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1407 if (globs->buflen < tmp_maxBP) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1408 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1409 ccd_recordFault (globs, ERR_MSG_LEN, CONTINUE, (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1410 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1411 else if (globs->maxBitpos < tmp_maxBP) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1412 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1413 ccd_recordFault (globs, ERR_ELEM_LEN, BREAK, (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1414 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1415 globs->maxBitpos = (USHORT)MINIMUM (globs->buflen, tmp_maxBP); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1416 tmp_maxBP = globs->maxBitpos; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1417 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1418 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1419 * for bitfields which appear in TLV or LV elements | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1420 * we must calculate the length (repeat) from the l values | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1421 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1422 if (melem[e_ref].repType EQ 'b') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1423 repeat = l; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1424 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1425 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1426 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1427 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1428 ccd_recordFault (globs, ERR_ELEM_LEN, BREAK, (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1429 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1430 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1431 #ifdef DYNAMIC_ARRAYS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1432 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1433 * MVJ: Dynamic array addition. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1434 * Check for pointer types; allocate memory if necessary. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1435 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1436 if ((melem[e_ref].elemType >= 'P' AND melem[e_ref].elemType <= 'R') OR | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1437 (melem[e_ref].elemType >= 'D' AND melem[e_ref].elemType <= 'F')) { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1438 ULONG cSize, rep; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1439 U8 *addr; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1440 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1441 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1442 * Find size to allocate; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1443 * - Read from mcomp or mvar according to type | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1444 * - Unbounded (0-terminated) ASN1-types are allocated with MAX repeat | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1445 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1446 if (globs->iei_ctx[globs->ccd_recurs_level].EOCPending) { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1447 rep = (ULONG) melem[e_ref].maxRepeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1448 } else { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1449 rep = repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1450 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1451 cSize = (ULONG)((melem[e_ref].elemType EQ 'V' OR | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1452 melem[e_ref].elemType EQ 'R') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1453 ? mvar[melem[e_ref].elemRef].cSize | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1454 : mcomp[melem[e_ref].elemRef].cSize | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1455 ) * rep; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1456 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1457 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1458 * Allocate additional memory | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1459 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1460 addr = (U8 *)DP_ALLOC( cSize, globs->alloc_head, DP_NO_FRAME_GUESS); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1461 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1462 /* If no memory, log error and return immediately */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1463 if (addr EQ NULL) { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1464 ccd_setError (globs, ERR_NO_MEM, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1465 BREAK, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1466 (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1467 return endOfComposition; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1468 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1469 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1470 memset (addr, 0, (size_t)cSize); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1471 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1472 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1473 * Memory allocated; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1474 * 1. Save old "globs->pstruct" variables | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1475 * 2. Store pointer to freshly allocated memory area in structure | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1476 * 3. Initialize pstruct to point to the freshly allocated memory area. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1477 * 4. Initialize pstructOffs to 0 to start decoding at offset 0 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1478 * in the new memory area. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1479 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1480 old_pstruct = globs->pstruct; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1481 *(U8 **)(globs->pstruct + globs->pstructOffs) = addr; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1482 globs->pstruct = addr; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1483 globs->pstructOffs = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1484 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1485 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1486 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1487 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1488 * Decode the value. Keep caution with BER encoding of ASN1 integers. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1489 * All other types can be decoded by a generic function. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1490 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1491 if (asn1 AND melem[e_ref].elemType EQ 'V' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1492 AND | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1493 melem[e_ref].repType EQ ' ' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1494 AND | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1495 l NEQ 0xFFFF | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1496 ) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1497 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1498 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1499 #ifdef CCD_SYMBOLS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1500 TRACE_CCD (globs, "BER decoding of ASN.1 integer %s", | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1501 ccddata_get_alias((USHORT) e_ref, 1)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1502 #else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1503 TRACE_CCD (globs, "BER decoding of ASN.1 integer; e_ref = %d", melem[e_ref].elemRef); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1504 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1505 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1506 amount = l; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1507 if (mvar[melem[e_ref].elemRef].cType EQ 'X') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1508 bf_readBitChunk (l, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1509 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1510 bf_readBits (l, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1511 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1512 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1513 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1514 amount = repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1515 if (len_l) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1516 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1517 if (l > 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1518 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1519 cdc_decodeElemvalue (e_ref, &amount, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1520 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1521 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1522 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1523 amount = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1524 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1525 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1526 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1527 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1528 if (melem[e_ref].codingType != CCDTYPE_GSM2_T) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1529 cdc_decodeElemvalue (e_ref, &amount, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1530 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1531 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1532 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1533 #ifdef DYNAMIC_ARRAYS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1534 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1535 * Restore globs->pstruct for possible use below | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1536 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1537 if (old_pstruct NEQ NULL) { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1538 globs->pstruct = old_pstruct; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1539 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1540 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1541 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1542 if (amount NEQ repeat AND is_variable) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1543 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1544 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1545 * If the number of decoded elements is not equal to the given | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1546 * repeat value, because the bitstream or the IE ended, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1547 * store the new c_xxx value. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1548 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1549 globs->pstructOffs = melem[e_ref].structOffs; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1550 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1551 if (melem[e_ref].optional) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1552 globs->pstructOffs++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1553 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1554 globs->pstruct[globs->pstructOffs] = (UBYTE) amount; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1555 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1556 if (melem[e_ref].repType NEQ 'i') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1557 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1558 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1559 * if this element is not of the repeat style 'interval' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1560 * ([X..Y] where X and Y are constants) we have to generate | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1561 * an ccd error because some outstanding repeats are missing. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1562 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1563 ccd_setError (globs, ERR_MAND_ELEM_MISS, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1564 CONTINUE, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1565 (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1566 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1567 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1568 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1569 if (asn1 AND globs->numEOCPending AND !bf_endOfBitstream(globs)) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1570 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1571 UBYTE T = bf_decodeByteNumber (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1572 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1573 TRACE_CCD (globs, "looking for EOC decoding 8 bits T = (%x)", T); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1574 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1575 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1576 if (T EQ 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1577 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1578 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1579 TRACE_CCD (globs, "First EOC octet found"); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1580 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1581 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1582 if (globs->iei_ctx[globs->ccd_recurs_level].EOCPending) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1583 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1584 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1585 TRACE_CCD (globs, "End of ASN1 TLV"); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1586 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1587 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1588 * Skip the second EOC octet. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1589 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1590 bf_incBitpos (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1591 globs->iei_ctx[globs->ccd_recurs_level].EOCPending = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1592 globs->numEOCPending--; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1593 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1594 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1595 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1596 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1597 * The read first EOC octet belongs to an ASN1 TLV of a | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1598 * higher recursion level. Let it be read and evalauted later | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1599 * again for that IE. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1600 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1601 bf_setBitpos (globs->bitpos-8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1602 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1603 TRACE_CCD (globs, "End of higer level ASN1 TLV"); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1604 TRACE_CCD (globs, "Decrementing bitpos by 8 to %d", globs->bitpos); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1605 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1606 endOfComposition = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1607 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1608 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1609 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1610 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1611 if (globs->iei_ctx[globs->ccd_recurs_level].EOCPending) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1612 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1613 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1614 * EOC element is pending but not found. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1615 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1616 ccd_setError (globs, ERR_EOC_TAG_MISSING, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1617 BREAK, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1618 (USHORT) T, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1619 globs->bitpos-8, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1620 (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1621 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1622 bf_setBitpos (globs->bitpos-8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1623 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1624 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1625 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1626 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1627 * normal TAG leave it in the bitstream | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1628 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1629 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1630 TRACE_CCD (globs, "Normal TAG - Decrementing bitpos by 8 to %d", globs->bitpos); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1631 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1632 bf_setBitpos (globs->bitpos-8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1633 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1634 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1635 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1636 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1637 if (len_l) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1638 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1639 if (!asn1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1640 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1641 if (globs->bitpos > tmp_maxBP) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1642 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1643 ccd_recordFault (globs, ERR_ELEM_LEN, CONTINUE, (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1644 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1645 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1646 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1647 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1648 * set the bitpos to the end of the LV or TLV element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1649 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1650 bf_setBitpos (tmp_maxBP, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1651 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1652 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1653 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1654 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1655 * set the maxBitpos to the next octet boundary if the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1656 * last non-spare IE does not end at an octet boundary. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1657 * This is necessary for avoiding an early end of decoding. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1658 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1659 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1660 globs->maxBitpos = globs->buflen; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1661 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1662 globs->maxBitpos = act_maxBP; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1663 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1664 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1665 return endOfComposition; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1666 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1667 #endif /* !RUN_FLASH */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1668 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1669 #ifndef RUN_FLASH | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1670 /* Attention for RUN_...: static function */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1671 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1672 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1673 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1674 | STATE : code ROUTINE : cdc_skipElem | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1675 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1676 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1677 PURPOSE : Skip an element referenced by eRef. This function | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1678 perform a decoding of this element, but not into | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1679 the target C-Structure. A dummy C-Structure is used | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1680 instead. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1681 The complete decoding is necesary, because there is | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1682 no information about the length of this element. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1683 B.t.w. for mandatory elements with fixed length, we can | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1684 calculate the length, for optional elements or for | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1685 variable sized arrays or bitbuffers it is impossible | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1686 without decoding the entire element. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1687 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1688 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1689 static void cdc_skipElem (const ULONG e_ref, const ULONG len_l, T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1690 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1691 UBYTE *ActStructAddr; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1692 U32 ActStructOffs; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1693 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1694 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1695 TRACE_CCD (globs, "skipping element %d", | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1696 melem[e_ref].elemRef); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1697 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1698 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1699 ActStructAddr = globs->pstruct; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1700 ActStructOffs = globs->pstructOffs; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1701 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1702 globs->pstruct = dummy; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1703 globs->pstructOffs = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1704 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1705 cdc_tagged_LV_decode (e_ref, 1, len_l, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1706 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1707 globs->pstruct = ActStructAddr; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1708 globs->pstructOffs = ActStructOffs; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1709 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1710 #endif /* !RUN_FLASH */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1711 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1712 #ifndef RUN_FLASH | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1713 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1714 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1715 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1716 | STATE : code ROUTINE : cdc_tlv_decode | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1717 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1718 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1719 PURPOSE : Decoding of the T-components of T TV and TLV typed | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1720 information elements. The len determines the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1721 length of the T component. This function returns the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1722 index (reference) of the rigth element. If the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1723 iei is not known in this composition (msg or submsg) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1724 an error handling is done and NO_REF is returned. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1725 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1726 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1727 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1728 SHORT cdc_tlv_decode (const ULONG c_ref, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1729 const ULONG e_ref, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1730 const T_TLV_SORT *tlv_inf, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1731 T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1732 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1733 ULONG repeat, max_rep; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1734 ULONG ie_amount, l, len_l, len_t, t; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1735 BOOL is_variable, nonTagged, limitSearch=FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1736 UBYTE CR=FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1737 SHORT IdxOffset = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1738 int ieTableIdx; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1739 BOOL asn1, non_std_tag; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1740 SHORT ret; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1741 ULONG cix_ref, num_prolog_steps, prolog_step_ref; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1742 /* .../src/linux/include/asm/current.h defines a macro 'current' */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1743 T_UNKNOWN_TAG *first, *currentTag; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1744 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1745 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1746 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1747 * Set the flag for the type of extension which is to expect | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1748 * at the end of the message. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1749 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1750 globs->SeekTLVExt = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1751 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1752 /* Set ref number for calcidx table. */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1753 cix_ref = melem[e_ref].calcIdxRef; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1754 num_prolog_steps = calcidx[cix_ref].numPrologSteps; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1755 prolog_step_ref = calcidx[cix_ref].prologStepRef; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1756 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1757 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1758 * if this element is conditional, check the condition | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1759 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1760 if (calcidx[cix_ref].numCondCalcs NEQ 0 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1761 AND ! ccd_conditionOK (e_ref, globs)) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1762 return 1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1763 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1764 len_t = 8; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1765 switch (melem[e_ref].codingType) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1766 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1767 case CCDTYPE_GSM1_ASN: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1768 asn1 = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1769 non_std_tag = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1770 len_l = 8; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1771 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1772 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1773 case CCDTYPE_GSM5_TV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1774 case CCDTYPE_GSM5_TLV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1775 non_std_tag = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1776 asn1 = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1777 len_l = 8; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1778 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1779 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1780 case CCDTYPE_GSM6_TLV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1781 non_std_tag = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1782 asn1 = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1783 len_l = 16; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1784 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1785 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1786 case CCDTYPE_GSM7_LV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1787 non_std_tag = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1788 asn1 = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1789 len_l = 7; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1790 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1791 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1792 default: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1793 asn1 = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1794 non_std_tag = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1795 len_l = 8; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1796 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1797 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1798 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1799 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1800 * if this element have a defined Prolog | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1801 * we have to process it before decoding the bitstream | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1802 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1803 if (num_prolog_steps) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1804 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1805 ccd_performOperations (num_prolog_steps, prolog_step_ref, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1806 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1807 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1808 if (tlv_inf->gotTag) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1809 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1810 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1811 * tagged element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1812 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1813 len_t = 8; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1814 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1815 * initialize the iei_table for each new message | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1816 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1817 if (globs->ccd_recurs_level NEQ globs->last_level) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1818 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1819 cdc_init_table (c_ref, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1820 globs->TagPending = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1821 globs->SequenceError = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1822 globs->last_level = globs->ccd_recurs_level; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1823 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1824 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1825 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1826 * calculate the index into the ieTable for this element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1827 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1828 ieTableIdx = (int)(e_ref - globs->iei_ctx[globs->ccd_recurs_level].melemStart); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1829 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1830 if (globs->TagPending) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1831 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1832 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1833 * if we previously read a t value and does not processed it | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1834 * get this pending tag. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1835 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1836 t = (ULONG) globs->PendingTag; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1837 globs->TagPending = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1838 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1839 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1840 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1841 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1842 * read the information element identifier out of the bitstream. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1843 * If the first bit (MSBit) of the t-component is set, it is | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1844 * a Tag of a TYPE1 or TYPE2 element. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1845 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1846 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1847 t = (ULONG) bf_decodeByteNumber (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1848 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1849 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1850 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1851 if (!asn1 AND !non_std_tag AND (t & 0x80) EQ 0x80 AND (t & 0xA0) NEQ 0xA0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1852 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1853 ULONG Tag4 = t & 0xf0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1854 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1855 * MSBit is set. We have to check if the Tag value can | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1856 * be found as a 4 bit or 8 bit value in the IEI-table. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1857 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1858 if (cdc_search_table (ieTableIdx, Tag4, limitSearch, &nonTagged, globs) NEQ -127) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1859 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1860 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1861 * Tag found as a 4 bit value. Decrement the readpointer | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1862 * of the bitstream by 4, because we have read out 4 bits | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1863 * to much. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1864 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1865 bf_setBitpos (globs->bitpos-4, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1866 t = Tag4; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1867 len_t =4; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1868 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1869 TRACE_CCD (globs, "4 bit Tag decrementing bitpos by 4 to %d", globs->bitpos); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1870 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1871 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1872 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1873 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1874 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1875 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1876 TRACE_CCD (globs, "reading t = 0x%X", t); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1877 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1878 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1879 if (melem[e_ref].codingType EQ CCDTYPE_GSM5_TLV) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1880 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1881 limitSearch = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1882 CR = (UBYTE) (((t & 0x80) EQ 0x80) ? TRUE : FALSE); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1883 t &= 0x7f; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1884 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1885 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1886 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1887 if (asn1 AND t EQ 0x00) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1888 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1889 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1890 * This is for ASN1 element coding the special | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1891 * End Of Component Tag (EOC). The following length must be zero. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1892 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1893 bf_setBitpos (globs->bitpos-8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1894 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1895 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1896 TRACE_CCD (globs, "ASN1 End of Component found belongs to higher TLV"); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1897 TRACE_CCD (globs, "leaving this level and decrementing bitpos by 8 to %d", globs->bitpos); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1898 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1899 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1900 return END_OF_COMPOSITION; /* skip the remaining elements in this level */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1901 } /* asn1 and EOC */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1902 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1903 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1904 if ((IdxOffset = (SHORT) cdc_search_table (ieTableIdx, t, limitSearch, &nonTagged, globs)) == -127) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1905 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1906 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1907 * t (iei) not defined in this composition (msg or submsg) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1908 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1909 if (asn1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1910 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1911 if (melem[mcomp[c_ref].componentRef + mcomp[c_ref].numOfComponents -1].codingType == CCDTYPE_GSM5_V) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1912 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1913 /* Restore the old bitposition (before the 'TAG') and return | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1914 * IdxOffset to jump to last element of the composition. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1915 * The coding type of this elements is CCDTYPE_GSM5_V | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1916 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1917 bf_setBitpos (globs->bitpos-8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1918 IdxOffset = (SHORT)(mcomp[c_ref].numOfComponents - ieTableIdx - 1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1919 return (IdxOffset); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1920 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1921 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1922 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1923 * for recursive ASN.1 structs it is possible that the foreign | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1924 * tag belongs to a upper level composition of element. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1925 * | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1926 * | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1927 * Restore the old bitposition (before the TAG) and return | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1928 * END_OF_COMPOSITION to leave this composition level | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1929 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1930 bf_setBitpos (globs->bitpos-8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1931 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1932 TRACE_CCD (globs, "Unknown Tag. It may belong to upper ASN.1 comp -> dec. bitpos by 8 to %d", globs->bitpos); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1933 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1934 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1935 return END_OF_COMPOSITION; /* skip the remaining elements in this level */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1936 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1937 else if (nonTagged) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1938 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1939 U16 actBitpos; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1940 actBitpos = globs->bitpos-8; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1941 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1942 if (melem[mcomp[c_ref].componentRef + mcomp[c_ref].numOfComponents -1].codingType == CCDTYPE_GSM5_V && | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1943 melem[e_ref].codingType EQ CCDTYPE_GSM5_TLV) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1944 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1945 #if defined (CCD_TEST) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1946 currentTag = (T_UNKNOWN_TAG *) malloc(sizeof(T_UNKNOWN_TAG)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1947 #else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1948 currentTag = (T_UNKNOWN_TAG *) D_ALLOC(sizeof(T_UNKNOWN_TAG)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1949 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1950 first = currentTag; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1951 currentTag->bitpos = globs->bitpos-8; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1952 currentTag->errCode = ERR_NO_MORE_ERROR; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1953 currentTag->next = NULL; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1954 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1955 /* unknown GSM Type TLV -> skip 'l' bytes */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1956 /* at least 8 bits must remain for following expeceted tagged element */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1957 while (globs->maxBitpos - 8 - globs->bitpos >= 8) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1958 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1959 currentTag->bitpos = globs->bitpos-8; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1960 currentTag->tag = (UBYTE) t; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1961 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1962 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1963 * Expecting a CCDTYPE_GSM5_TLV type we get an unknown tag with MSB set. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1964 * Store bitpos and t for the application (SAT) for the handling of | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1965 * comprehension required elements. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1966 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1967 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1968 if (CR) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1969 { // save (ERR_COMPREH_REQUIRED; globs->bitpos-len_t) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1970 currentTag->errCode = ERR_COMPREH_REQUIRED; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1971 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1972 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1973 { // save (ERR_IE_NOT_EXPECTED; globs->bitpos-len_t) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1974 currentTag->errCode = ERR_IE_NOT_EXPECTED; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1975 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1976 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1977 l = (ULONG) bf_decodeByteNumber (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1978 bf_incBitpos ((l << 3) , globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1979 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1980 t = (ULONG) bf_decodeByteNumber (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1981 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1982 limitSearch = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1983 CR = (UBYTE) (((t & 0x80) EQ 0x80) ? TRUE : FALSE); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1984 t &= 0x7f; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1985 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1986 if (cdc_search_table (ieTableIdx, t, limitSearch, &nonTagged, globs) != -127) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1987 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1988 bf_setBitpos (globs->bitpos-8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1989 // set all ccd Errors | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1990 do | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1991 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1992 currentTag = first; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1993 ccd_setError (globs, currentTag->errCode, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1994 CONTINUE, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1995 (USHORT) currentTag->tag, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1996 currentTag->bitpos, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1997 (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1998 first = currentTag->next; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1999 #if defined (CCD_TEST) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2000 free(currentTag); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2001 #else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2002 D_FREE(currentTag); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2003 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2004 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2005 while (first != NULL ); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2006 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2007 return 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2008 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2009 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2010 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2011 #if defined (CCD_TEST) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2012 currentTag->next = (T_UNKNOWN_TAG *) malloc(sizeof(T_UNKNOWN_TAG)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2013 #else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2014 currentTag->next = (T_UNKNOWN_TAG *) D_ALLOC(sizeof(T_UNKNOWN_TAG)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2015 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2016 currentTag = currentTag->next; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2017 currentTag->next = NULL; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2018 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2019 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2020 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2021 do | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2022 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2023 currentTag = first; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2024 first = currentTag->next; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2025 #if defined (CCD_TEST) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2026 free(currentTag); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2027 #else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2028 D_FREE(currentTag); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2029 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2030 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2031 while (first != NULL ); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2032 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2033 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2034 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2035 * a non tagged element is possible in the message. If the tag | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2036 * can not be found, the tag may be the beginning of the non tagged | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2037 * element. E.g. rest octetts in sysinfo 4 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2038 * | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2039 * Restore the old bitposition (before the TAG) and return 1 to | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2040 * go to the next element. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2041 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2042 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2043 bf_setBitpos (actBitpos, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2044 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2045 TRACE_CCD (globs, "Unknown Tag but mand. IE possible -> dec. bitpos by 8 to %d", globs->bitpos); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2046 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2047 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2048 return 1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2049 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2050 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2051 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2052 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2053 * Otherwise look if it is a type 1,2 or 4 Element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2054 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2055 if ((t & 0x80) EQ 0x80) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2056 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2057 /* MSBit set -> GSM Type 1 or Type2 -> skip 1 byte */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2058 /* position already incremented by decoding the TAG value */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2059 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2060 /* Just another reason for getting IdxOffset equal to 0. */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2061 else if (globs->ccd_recurs_level >= MAX_RECURSIONS_PER_MSG) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2062 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2063 ccd_setError (globs, ERR_INTERNAL_ERROR, BREAK, (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2064 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2065 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2066 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2067 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2068 * Expecting a CCDTYPE_GSM5_TLV type we get an unknown tag with MSB set. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2069 * Store bitpos and t for the application (SAT) for the handling of | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2070 * comprehension required elements. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2071 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2072 if (CR) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2073 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2074 ccd_setError (globs, ERR_COMPREH_REQUIRED, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2075 CONTINUE, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2076 (USHORT) t, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2077 (USHORT) globs->bitpos-len_t, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2078 (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2079 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2080 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2081 * Expecting other types than CCDTYPE_GSM5_TLV we get an unknown tag with | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2082 * comprehension required bits (5, 6, 7 and 8 of IEI according to GSM0407) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2083 * are set to zero. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2084 * Store bitpos and t for the application for the handling of comprehension | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2085 * required elements. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2086 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2087 else if ((t & 0x70) EQ 0 AND | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2088 melem[e_ref].codingType NEQ CCDTYPE_GSM5_TLV) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2089 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2090 ccd_setError (globs, ERR_COMPREH_REQUIRED, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2091 CONTINUE, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2092 (USHORT) t, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2093 (USHORT) globs->bitpos-len_t, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2094 (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2095 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2096 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2097 * We get an unknown tag and any sort of comprehension required flag is set. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2098 * Store bitpos and t for the application | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2099 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2100 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2101 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2102 ccd_setError (globs, ERR_IE_NOT_EXPECTED, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2103 CONTINUE, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2104 (USHORT) t, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2105 (USHORT) globs->bitpos-len_t, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2106 (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2107 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2108 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2109 /* MSBit cleared -> GSM Type TLV -> skip 'l' bytes */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2110 if (globs->maxBitpos - globs->bitpos >= 8) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2111 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2112 l = (ULONG) bf_decodeByteNumber (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2113 bf_incBitpos ((l << 3) , globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2114 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2115 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2116 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2117 ccd_recordFault (globs, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2118 ERR_ELEM_LEN, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2119 BREAK, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2120 (USHORT) e_ref, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2121 globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2122 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2123 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2124 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2125 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2126 * return 0 -> that means try it again with this actual element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2127 * referenced by e_ref | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2128 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2129 return 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2130 } /* tag not found */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2131 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2132 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2133 T_IEI_TABLE *iei_tbl = &globs->iei_ctx[globs->ccd_recurs_level].iei_table[ieTableIdx]; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2134 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2135 * element definition for this iei found | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2136 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2137 if (IdxOffset NEQ 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2138 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2139 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2140 * found index differs from the actual index | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2141 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2142 globs->TagPending = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2143 globs->PendingTag = (UBYTE) t; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2144 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2145 if (!asn1 AND IdxOffset < 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2146 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2147 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2148 * found an element in wrong sequence | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2149 * (for ASN1 elements the sequence order is not relevant) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2150 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2151 ccd_setError (globs, ERR_IE_SEQUENCE, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2152 (UBYTE) ((asn1) ? BREAK : CONTINUE), | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2153 (USHORT) t, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2154 (USHORT) globs->bitpos-len_t, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2155 (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2156 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2157 globs->SequenceError = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2158 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2159 if (globs->SequenceError) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2160 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2161 globs->RefBeforeError = (USHORT) e_ref; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2162 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2163 if (asn1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2164 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2165 globs->iei_ctx[globs->ccd_recurs_level].countSkipped += IdxOffset; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2166 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2167 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2168 * skip to the found element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2169 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2170 return (IdxOffset); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2171 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2172 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2173 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2174 globs->iei_ctx[globs->ccd_recurs_level].melemLast = (USHORT) e_ref; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2175 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2176 if (iei_tbl->act_amount == 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2177 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2178 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2179 * first apearance of this iei | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2180 * calculate the upper and lower boundaries and the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2181 * facility of multiple appearance of this tagged element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2182 * in the bitstream. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2183 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2184 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2185 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2186 * The element is repeatable. There are three kinds of | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2187 * repeat definitions valid for standard elements: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2188 * [5] - The element is repeated 5 times. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2189 * [0..5] - The element is repeated 0 to 5 times. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2190 * [a..5] - The element is repeated "the value of a" times. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2191 * | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2192 * For tagged elements the following processing is defined: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2193 * | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2194 * [5] - The t-Component is decoded | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2195 * (maybe the l-Component too (if defined one). | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2196 * After this the V-component of the element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2197 * is decoded 5 times. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2198 * | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2199 * [0..5] - The t- and maybe the l-Component are decoded. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2200 * After this one V-Component is decoded and it | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2201 * is stored as an array entry into | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2202 * the target C-Structure. In this case the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2203 * parameter ieIndex gives the index into | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2204 * this array, where the element has to | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2205 * be written into. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2206 * | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2207 * [a..5] - The t- and maybe the l-Component are decoded. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2208 * After this one V-Component is decoded | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2209 * "a" times and is stored into the C-Structure | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2210 * as an array. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2211 * | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2212 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2213 switch (melem[e_ref+IdxOffset].repType) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2214 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2215 case 'i': | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2216 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2217 * multiapearance of this element. The V-component is | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2218 * repeated once | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2219 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2220 is_variable = ccd_calculateRep (e_ref+IdxOffset, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2221 &repeat, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2222 &max_rep, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2223 globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2224 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2225 iei_tbl->max_amount = (UBYTE) max_rep; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2226 iei_tbl->multiple = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2227 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2228 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2229 case 'v': | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2230 case 'b': | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2231 default: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2232 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2233 * if this element is repeatable, and the number of | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2234 * repeats depends on another element, the valid amount | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2235 * of this element is 1 and the V-component will be | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2236 * repeated. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2237 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2238 iei_tbl->max_amount = 1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2239 iei_tbl->multiple = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2240 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2241 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2242 iei_tbl->act_amount = 1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2243 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2244 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2245 if (iei_tbl->act_amount <= iei_tbl->max_amount) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2246 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2247 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2248 * process only the max_amount appearances of each element. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2249 * All additional IEs are ignored. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2250 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2251 ie_amount = (ULONG)(iei_tbl->act_amount)++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2252 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2253 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2254 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2255 if (asn1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2256 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2257 /* For ASN1 elements the sequence order is not relevant. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2258 * It is possible that the tag belongs to an upper level | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2259 * composition of elements. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2260 * Restore the old bitposition (before the TAG) and return | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2261 * END_OF_COMPOSITION to leave this composition level | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2262 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2263 bf_setBitpos (globs->bitpos-8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2264 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2265 TRACE_CCD (globs, "Tag may belong to upper ASN.1 comp -> dec. bitpos by 8 to %d", globs->bitpos); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2266 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2267 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2268 return END_OF_COMPOSITION; /* skip the remaining elements in this level */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2269 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2270 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2271 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2272 ie_amount = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2273 ccd_setError (globs, ERR_MAX_IE_EXCEED, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2274 CONTINUE, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2275 (USHORT) t, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2276 (USHORT) globs->bitpos-len_t, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2277 (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2278 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2279 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2280 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2281 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2282 * The t-component matches with the defined identifier for | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2283 * the actual element definition (e_ref). | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2284 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2285 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2286 if (globs->SequenceError) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2287 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2288 globs->SequenceError = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2289 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2290 if (asn1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2291 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2292 /* For ASN1 elements the sequence order is not relevant. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2293 * It is possible that the tag belongs to an upper level | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2294 * composition of elements. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2295 * Restore the old bitposition (before the TAG) and return | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2296 * END_OF_COMPOSITION to leave this composition level | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2297 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2298 bf_setBitpos (globs->bitpos-8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2299 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2300 TRACE_CCD (globs, "Tag may belong to upper ASN.1 comp -> dec. bitpos by 8 to %d", globs->bitpos); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2301 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2302 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2303 return END_OF_COMPOSITION; /* skip the remaining elements in this level */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2304 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2305 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2306 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2307 /* found an element in wrong sequence */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2308 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2309 cdc_skipElem (e_ref, (tlv_inf->gotLen ? len_l:0), globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2310 return (SHORT)(globs->RefBeforeError - e_ref); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2311 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2312 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2313 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2314 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2315 * if this element is conditional, check the condition | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2316 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2317 if (calcidx[cix_ref].numCondCalcs NEQ 0 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2318 AND ! ccd_conditionOK (e_ref, globs)) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2319 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2320 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2321 * if the condition for this element is not valid | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2322 * but this element appears in the message, generate | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2323 * an error and skip the element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2324 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2325 ccd_setError (globs, ERR_IE_NOT_EXPECTED, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2326 CONTINUE, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2327 (USHORT) t, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2328 (USHORT) globs->bitpos-len_t, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2329 (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2330 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2331 cdc_skipElem (e_ref, (tlv_inf->gotLen ? len_l:0), globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2332 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2333 return 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2334 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2335 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2336 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2337 * check for a valid index | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2338 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2339 if (ie_amount EQ 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2340 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2341 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2342 * The max number of repeats are reached | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2343 * In this case we must skip this element. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2344 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2345 cdc_skipElem (e_ref, (tlv_inf->gotLen ? len_l:0), globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2346 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2347 return 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2348 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2349 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2350 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2351 if (iei_tbl->multiple) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2352 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2353 if (melem[e_ref].elemType NEQ 'S') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2354 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2355 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2356 * Element is not a SPARE | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2357 * Setup the offset into the C-structure for this element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2358 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2359 globs->pstructOffs = melem[e_ref].structOffs; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2360 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2361 ret = cdc_tagged_LV_decode (e_ref, ie_amount, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2362 (tlv_inf->gotLen ? len_l:0), globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2363 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2364 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2365 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2366 if (melem[e_ref].elemType NEQ 'S') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2367 { /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2368 * Element is not a SPARE | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2369 * Setup the offset into the C-structure for this element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2370 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2371 globs->pstructOffs = melem[e_ref].structOffs; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2372 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2373 ret = cdc_normal_LV_decode (e_ref, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2374 (tlv_inf->gotLen ? len_l:0), globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2375 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2376 globs->SeekTLVExt = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2377 iei_tbl->exhausted = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2378 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2379 if (ret) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2380 return END_OF_COMPOSITION; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2381 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2382 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2383 * if more then one IE of this type are allowed, a ret of 0 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2384 * indicates the calling function (ccd_decodeComposition()) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2385 * to leave the pointer to the actual element definition on | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2386 * this element. If the value of ret is greater then 0 the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2387 * calling function will increment the pointer by the value | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2388 * of ret. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2389 * cdc_T_decode() has found the expected element definition. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2390 * Go to the next definition or stay at this definition, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2391 * if the occurance of this element is more than one. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2392 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2393 if (iei_tbl->act_amount > iei_tbl->max_amount) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2394 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2395 iei_tbl->act_amount = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2396 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2397 if (iei_tbl->max_amount > 1) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2398 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2399 return (0); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2400 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2401 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2402 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2403 if (globs->iei_ctx[globs->ccd_recurs_level].countSkipped) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2404 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2405 ret = (-1) * (globs->iei_ctx[globs->ccd_recurs_level].countSkipped); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2406 (globs->iei_ctx[globs->ccd_recurs_level].countSkipped) = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2407 return (ret); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2408 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2409 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2410 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2411 return (1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2412 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2413 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2414 } /* IdxOffset == 0 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2415 } /* tag found */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2416 } /* no asn1, no EOC */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2417 } /* got tag */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2418 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2419 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2420 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2421 * element has no t-component, process the l- and V-components | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2422 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2423 if (melem[e_ref].elemType NEQ 'S') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2424 { /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2425 * Element is not a SPARE | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2426 * Setup the offset into the C-structure for this element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2427 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2428 globs->pstructOffs = melem[e_ref].structOffs; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2429 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2430 ret = cdc_normal_LV_decode (e_ref, len_l, globs) ? END_OF_COMPOSITION : 1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2431 globs->SeekTLVExt = TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2432 return ret; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2433 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2434 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2435 #endif /* !RUN_FLASH */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2436 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2437 #ifndef RUN_FLASH | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2438 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2439 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2440 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2441 | STATE : code ROUTINE : cdc_tlv_encode | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2442 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2443 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2444 PURPOSE : if T_len > 0 this function encodes the T-Component of | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2445 this element. If L_len > 0 it encodes the number | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2446 of bytes uses for this element. After all the function | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2447 encodes the V-component referenced by eRef from the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2448 C-Structure (globs->pstruct) at position globs->pstructOffs | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2449 into the bitstream. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2450 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2451 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2452 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2453 void cdc_tlv_encode (const ULONG e_ref, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2454 UBYTE lenT, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2455 UBYTE lenL, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2456 T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2457 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2458 ULONG posL=0, t_repeat, v_repeat, repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2459 ULONG cSize, startOffset=0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2460 BOOL multAppear; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2461 U8 *old_pstruct = NULL; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2462 ULONG i; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2463 ULONG cix_ref, num_prolog_steps, prolog_step_ref; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2464 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2465 cix_ref = melem[e_ref].calcIdxRef; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2466 num_prolog_steps = calcidx[cix_ref].numPrologSteps; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2467 prolog_step_ref = calcidx[cix_ref].prologStepRef; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2468 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2469 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2470 * If this element is conditional, check the condition. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2471 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2472 if (calcidx[cix_ref].numCondCalcs NEQ 0 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2473 AND ! ccd_conditionOK (e_ref, globs)) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2474 return; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2475 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2476 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2477 * If this element have a defined Prolog, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2478 * we have to process it before decoding the bit stream. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2479 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2480 if (num_prolog_steps) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2481 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2482 ccd_performOperations (num_prolog_steps, prolog_step_ref, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2483 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2484 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2485 if (melem[e_ref].elemType NEQ 'S') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2486 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2487 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2488 * Element is not a SPARE. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2489 * Setup the offset into the C-structure for this element. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2490 * In case of pointer types, the pstructOffs must be | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2491 * the offset into the memory area pointed to. CCDGEN must | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2492 * ensure this holds true. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2493 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2494 globs->pstructOffs = melem[e_ref].structOffs; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2495 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2496 if ( ! cdc_isPresent(e_ref, globs) ) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2497 return; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2498 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2499 if (melem[e_ref].repType EQ 'v' OR melem[e_ref].repType EQ 'i') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2500 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2501 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2502 * for variable sized elements read the amount | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2503 * of repeats out of the C-Structure (c_xxx). | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2504 * If the number of repeats given by the C-Structure | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2505 * exceeds the allowed value (maxRepeat) CCD gives a warning! | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2506 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2507 if (melem[e_ref].maxRepeat > 255) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2508 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2509 ULONG count = (ULONG) (* (USHORT *)(globs->pstruct + globs->pstructOffs++)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2510 repeat = MINIMUM (count, (ULONG) melem[e_ref].maxRepeat); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2511 if (repeat < count) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2512 ccd_recordFault (globs, ERR_MAX_REPEAT, CONTINUE, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2513 (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2514 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2515 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2516 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2517 repeat = (ULONG) MINIMUM (globs->pstruct[globs->pstructOffs], | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2518 melem[e_ref].maxRepeat); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2519 if ( repeat < (ULONG) (globs->pstruct[globs->pstructOffs]) ) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2520 ccd_recordFault (globs, ERR_MAX_REPEAT, CONTINUE, (USHORT) e_ref, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2521 globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2522 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2523 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2524 globs->pstructOffs++; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2525 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2526 multAppear = (melem[e_ref].repType EQ 'i'); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2527 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2528 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2529 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2530 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2531 * Field of constant length: repType EQ 'c' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2532 * or bit-field allocated with | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2533 * given maximum length: repType EQ 'b' (often cType='X') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2534 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2535 repeat = (ULONG)((melem[e_ref].repType EQ 'c' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2536 OR melem[e_ref].repType EQ 'b') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2537 ? melem[e_ref].maxRepeat | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2538 : 1 ); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2539 multAppear = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2540 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2541 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2542 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2543 * Perform pointer dereference for pointer types. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2544 * Also, check optionality for these types. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2545 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2546 #ifdef DYNAMIC_ARRAYS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2547 if ((melem[e_ref].elemType >= 'P' AND melem[e_ref].elemType <= 'R') OR | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2548 (melem[e_ref].elemType >= 'D' AND melem[e_ref].elemType <= 'F')) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2549 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2550 U8 *deref_pstruct; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2551 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2552 /* Get pointer value */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2553 deref_pstruct = *(U8 **)(globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2554 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2555 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2556 * Strictly speaking the 'D' to 'F' types should not need this | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2557 * check (should have returned after the optionality check above), | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2558 * but it will catch stray NULL pointers (or uninitialized | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2559 * valid flags) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2560 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2561 if (ccd_check_pointer(deref_pstruct) != ccdOK) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2562 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2563 ccd_recordFault (globs, ERR_INVALID_PTR, BREAK, (USHORT) e_ref, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2564 &globs->pstruct[globs->pstructOffs]); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2565 return; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2566 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2567 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2568 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2569 * Pointer not NULL; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2570 * 1. Save old globs->pstruct and assign pointer to globs->pstruct | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2571 * as new base. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2572 * 2. Set pstructOffs to 0 (zero) as the next offset will start | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2573 * in the new memory area. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2574 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2575 old_pstruct = globs->pstruct; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2576 globs->pstruct = deref_pstruct; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2577 globs->pstructOffs = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2578 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2579 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2580 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2581 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2582 * 20010621 MVJ: Dynamic array addition. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2583 * Types 'R' and 'F' point to base types (just as type 'V') and | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2584 * read sizes from the same table. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2585 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2586 cSize = (ULONG)((melem[e_ref].elemType EQ 'V' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2587 #ifdef DYNAMIC_ARRAYS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2588 OR melem[e_ref].elemType EQ 'R' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2589 OR melem[e_ref].elemType EQ 'F' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2590 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2591 ) ? mvar[melem[e_ref].elemRef].cSize | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2592 : mcomp[melem[e_ref].elemRef].cSize | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2593 ); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2594 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2595 startOffset = globs->pstructOffs; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2596 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2597 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2598 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2599 repeat = (ULONG)((melem[e_ref].repType EQ 'c') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2600 ? melem[e_ref].maxRepeat | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2601 : 1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2602 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2603 multAppear = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2604 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2605 cSize = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2606 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2607 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2608 if (multAppear AND lenT) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2609 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2610 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2611 * multiple appearance of the repeated element is coded as | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2612 * TLV0 TLV1 TLV2 .... | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2613 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2614 t_repeat = repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2615 v_repeat = 1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2616 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2617 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2618 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2619 t_repeat = 1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2620 v_repeat = repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2621 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2622 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2623 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2624 * single appearance of the repeated element is coded as | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2625 * TLV0V1V2V3 .... | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2626 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2627 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2628 for (i=0; i < t_repeat; i++) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2629 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2630 if (lenT) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2631 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2632 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2633 * encode the T-component | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2634 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2635 bf_codeByteNumber (lenT, (UBYTE) melem[e_ref].ident, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2636 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2637 TRACE_CCD (globs, "encoding %d bits T-value (%x)", lenT, melem[e_ref].ident); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2638 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2639 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2640 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2641 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2642 * if lenL > 0 remember the position of the L-component, because | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2643 * we know it after encoding the entire element. for GSM5TLV elements | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2644 * it could be necessary to use 2 bytes for the length information. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2645 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2646 if (lenL) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2647 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2648 posL = (ULONG) globs->bitpos; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2649 bf_incBitpos (lenL, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2650 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2651 TRACE_CCD (globs, "skipping %d bits for L-value at byte %d.%d", lenL, globs->bytepos, globs->byteoffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2652 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2653 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2654 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2655 if (cSize) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2656 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2657 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2658 * calculate the offset if it is not a spare | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2659 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2660 globs->pstructOffs = (ULONG)(startOffset + (i * cSize)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2661 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2662 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2663 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2664 * Encode the value. Keep caution with BER encoding of ASN1 integers. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2665 * All other types can be encoded by a generic function. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2666 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2667 if (melem[e_ref].codingType EQ CCDTYPE_GSM1_ASN | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2668 AND | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2669 melem[e_ref].elemType EQ 'V' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2670 AND melem[e_ref].repType EQ ' ' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2671 ) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2672 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2673 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2674 #ifdef CCD_SYMBOLS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2675 TRACE_CCD (globs, "BER encoding of ASN.1 integer %s", | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2676 ccddata_get_alias((USHORT) e_ref, 1)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2677 #else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2678 TRACE_CCD (globs, "BER encoding of ASN.1 integer; e_ref= %d", melem[e_ref].elemRef); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2679 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2680 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2681 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2682 switch (mvar[melem[e_ref].elemRef].cType) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2683 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2684 case 'B': bf_writeBits (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2685 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2686 case 'S': | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2687 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2688 if (*(U16 *) (globs->pstruct+globs->pstructOffs) <= (U16)0xFF) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2689 bf_writeBits (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2690 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2691 bf_writeBits (16, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2692 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2693 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2694 case 'L': | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2695 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2696 U32 tmpVal= *(U32 *) (globs->pstruct+globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2697 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2698 if ( tmpVal <= (U32)0xFF) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2699 bf_writeBits (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2700 else if ( tmpVal <= (U32)0xFFFF) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2701 bf_writeBits (16, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2702 else if ( tmpVal <= (U32)0xFFFFFF) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2703 bf_writeBits (24, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2704 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2705 bf_writeBits (32, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2706 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2707 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2708 case 'X': | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2709 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2710 U16 ValLen= *(U16 *) (globs->pstruct+globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2711 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2712 if ( mvar[melem[e_ref].elemRef].bSize >= ValLen) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2713 bf_writeBitChunk (ValLen, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2714 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2715 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2716 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2717 TRACE_CCD (globs, "value length (%d) exceeds defined bSize!", ValLen); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2718 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2719 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2720 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2721 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2722 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2723 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2724 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2725 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2726 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2727 cdc_encodeElemvalue (e_ref, v_repeat, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2728 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2729 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2730 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2731 * calculate the bitlen if it is an TLV element and write the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2732 * L-value. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2733 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2734 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2735 if (lenL) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2736 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2737 switch (melem[e_ref].codingType) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2738 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2739 case CCDTYPE_GSM5_TLV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2740 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2741 USHORT L = (((USHORT)((globs->bitpos - posL)-lenL)+7) >> 3); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2742 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2743 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2744 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2745 TRACE_CCD (globs, "recoding the 8 bit L-value (%d)", L); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2746 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2747 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2748 if (L > 127) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2749 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2750 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2751 * if the length is > 127 we code the first byte to | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2752 * 0x81, shift the whole stuff rightwise by 8 and | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2753 * encode the length in the next byte (16 bits for L) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2754 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2755 bf_rShift8Bit ((USHORT) (posL+8), (USHORT) (L<<3), globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2756 bf_incBitpos (8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2757 bf_recodeByteNumber ((USHORT) posL, lenL, (UBYTE) 0x81, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2758 bf_recodeByteNumber ((USHORT) (posL+8), lenL, (UBYTE) L, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2759 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2760 * set the bitpos to a 8 bit aligned position | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2761 * corresponding the L value | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2762 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2763 bf_setBitpos (posL+(L*8)+16, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2764 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2765 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2766 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2767 bf_recodeByteNumber ((USHORT) posL, lenL, (UBYTE) L, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2768 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2769 * set the bitpos to a 8 bit aligned position | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2770 * corresponding the L value | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2771 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2772 bf_setBitpos (posL+(L*8)+8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2773 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2774 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2775 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2776 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2777 case CCDTYPE_GSM6_TLV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2778 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2779 USHORT L = ((USHORT)(((globs->bitpos - posL)-lenL)+7) >> 3); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2780 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2781 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2782 TRACE_CCD (globs, "recoding the 16 bit L-value (%d)", L); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2783 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2784 bf_recodeShortNumber ((USHORT)posL, lenL, L, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2785 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2786 * set the bitpos to a 8 bit aligned position | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2787 * corresponding the L value | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2788 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2789 bf_setBitpos (posL+(L*8)+16, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2790 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2791 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2792 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2793 case CCDTYPE_GSM7_LV: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2794 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2795 USHORT L = (USHORT) ((globs->bitpos - posL)-lenL); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2796 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2797 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2798 TRACE_CCD (globs, "recoding the 7 bit L-value (bitlength) (%d)", L); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2799 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2800 bf_recodeShortNumber ((USHORT)posL, lenL, L, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2801 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2802 bf_setBitpos (posL+L+7, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2803 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2804 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2805 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2806 default: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2807 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2808 USHORT L = ((USHORT)(((globs->bitpos - posL)-lenL)+7) >> 3); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2809 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2810 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2811 TRACE_CCD (globs, "recoding the 8 bit L-value (%d)", L); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2812 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2813 bf_recodeByteNumber ((USHORT)posL, lenL, (UBYTE) L, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2814 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2815 * Set the bitpos to a 8 bit aligned position | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2816 * corresponding the L value | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2817 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2818 bf_setBitpos (posL+(L*8)+8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2819 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2820 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2821 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2822 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2823 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2824 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2825 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2826 * Restore globs->pstruct if overwritten by pointer dereference. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2827 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2828 if (old_pstruct) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2829 globs->pstruct = old_pstruct; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2830 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2831 #endif /* !RUN_FLASH */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2832 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2833 #ifndef RUN_FLASH | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2834 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2835 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2836 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2837 | STATE : code ROUTINE : cdc_GSM_start | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2838 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2839 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2840 PURPOSE : Initialize the GSM specific codec part for each msg. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2841 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2842 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2843 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2844 void cdc_GSM_start (T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2845 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2846 globs->Swap1V_inProgress = FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2847 globs->last_level = 255; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2848 cdc_init_ctx_table (globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2849 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2850 #endif /* !RUN_FLASH */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2851 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2852 #ifndef RUN_INT_RAM | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2853 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2854 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2855 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2856 | STATE : code ROUTINE : cdc_isPresent | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2857 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2858 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2859 PURPOSE : For optional elements check the valid-flag in the C-struct. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2860 Spare elements in PER do not have a corresponding valid flag. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2861 In case of Dynamic Arrays: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2862 Postpone optional check for non-code transparent pointer | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2863 types ('P', 'Q', 'R'). | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2864 For these types, the optional flag is the pointer itself. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2865 These types cannot be checked yet, as the pointer may be | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2866 preceeded by a counter octet, a union tag id octet etc. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2867 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2868 U16 cdc_isPresent (const ULONG e_ref, T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2869 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2870 if (melem[e_ref].optional) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2871 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2872 #ifdef DYNAMIC_ARRAYS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2873 if (melem[e_ref].elemType < 'P' OR melem[e_ref].elemType > 'R') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2874 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2875 if(globs->pstruct[globs->pstructOffs++] == FALSE) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2876 return FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2877 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2878 else if (globs->pstruct [melem[e_ref].structOffs] != TRUE) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2879 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2880 TRACE_CCD (globs, "Ambiguous value for valid flag!\n...assumed 1 for ccdID=%d", | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2881 e_ref); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2882 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2883 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2884 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2885 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2886 { /*If elemType is P, Q or R - check the pointer value*/ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2887 if(*(void**) &globs->pstruct[globs->pstructOffs] == NULL) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2888 return FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2889 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2890 #else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2891 if (globs->pstruct[globs->pstructOffs++] == FALSE) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2892 return FALSE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2893 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2894 else if (globs->pstruct [melem[e_ref].structOffs] != TRUE) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2895 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2896 TRACE_CCD (globs, "Ambiguous value for valid flag!\n...assumed 1 for ccdID=%d", | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2897 e_ref); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2898 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2899 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2900 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2901 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2902 return TRUE; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2903 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2904 #endif /* !RUN_INT_RAM */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2905 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2906 #ifndef RUN_FLASH | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2907 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2908 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2909 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2910 | STATE : code ROUTINE : is_pointer_type | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2911 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2912 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2913 PURPOSE : Return TRUE for pointer elements. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2914 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2915 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2916 BOOL is_pointer_type (const ULONG e_ref) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2917 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2918 return ((melem[e_ref].elemType >= 'P' AND melem[e_ref].elemType <= 'R') OR | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2919 (melem[e_ref].elemType >= 'D' AND melem[e_ref].elemType <= 'F')); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2920 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2921 #endif /* !RUN_FLASH */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2922 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2923 #ifndef RUN_FLASH | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2924 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2925 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2926 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2927 | STATE : code ROUTINE : is_variable_type | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2928 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2929 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2930 PURPOSE : Return TRUE for elements with variable character. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2931 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2932 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2933 BOOL is_variable_type (const ULONG e_ref) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2934 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2935 return ((melem[e_ref].elemType == 'F') || ( melem[e_ref].elemType == 'R') || | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2936 (melem[e_ref].elemType == 'V')); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2937 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2938 #endif /* !RUN_FLASH */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2939 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2940 #ifndef RUN_INT_RAM | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2941 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2942 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2943 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2944 | STATE : code ROUTINE : PER_CommonBegin | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2945 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2946 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2947 PURPOSE : Common settings done by most of the encoding or decoding | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2948 functions for UNALIGNED PER (UMTS). | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2949 It handles position of pointer to the C-structure, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2950 valid flag for optional elements and length determinant | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2951 for array of elements. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2952 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2953 SHORT PER_CommonBegin (const ULONG e_ref, ULONG *max_rep, T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2954 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2955 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2956 * Set the offset in the C-structure on the value for this element | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2957 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2958 globs->pstructOffs = melem[e_ref].structOffs; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2959 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2960 /* For optional elements we have already set the valid flag in the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2961 * C-structure while processing ASN1_SEQ. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2962 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2963 if ( ! cdc_isPresent(e_ref, globs) ) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2964 return (SHORT)ccdError; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2965 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2966 switch (melem[e_ref].repType) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2967 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2968 case ' ': | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2969 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2970 * Element is not an array. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2971 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2972 *max_rep = 1; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2973 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2974 case 'c': | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2975 case 'C': | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2976 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2977 * Read the size for an array of fixed length. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2978 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2979 *max_rep = (ULONG) melem[e_ref].maxRepeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2980 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2981 case 'j': | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2982 case 'J': | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2983 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2984 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2985 * Read the size for an array of variable length. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2986 * Read the value of the last encoded element. It is the length | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2987 * indicator. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2988 * Hint 1: globs->pstruct[melem[e_ref-1].structOffs is 0, since | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2989 * fields of variable length are projected on a COMP made of an | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2990 * ASN1_INTEGER for the lenght indicator and the field elements | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2991 * (sequences, integers, octets or bits). | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2992 * Hint 2: The current version of UMTS does not use length | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2993 * indicators larger than 64K. Hence the use of USHORT for repeat. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2994 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2995 switch (mvar[melem[e_ref-1].elemRef].cType) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2996 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2997 case 'B': *max_rep = (ULONG) globs->pstruct[melem[e_ref-1].structOffs]; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2998 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2999 case 'S': *max_rep = (ULONG) *(USHORT *) (globs->pstruct+melem[e_ref-1].structOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3000 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3001 default: *max_rep = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3002 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3003 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3004 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3005 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3006 default: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3007 ccd_recordFault (globs, ERR_DEFECT_CCDDATA, BREAK, (USHORT) e_ref, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3008 globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3009 break; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3010 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3011 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3012 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3013 * There is nothing to be encoded. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3014 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3015 if (*max_rep EQ 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3016 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3017 return (SHORT)ccdError; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3018 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3019 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3020 * Check the validity of the lenght information. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3021 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3022 else if (melem[e_ref].maxRepeat AND *max_rep > melem[e_ref].maxRepeat) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3023 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3024 ccd_recordFault (globs, ERR_MAX_REPEAT, CONTINUE, (USHORT) e_ref, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3025 globs->pstruct + globs->pstructOffs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3026 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3027 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3028 return (SHORT)ccdOK; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3029 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3030 #endif /* !RUN_INT_RAM */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3031 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3032 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3033 #ifdef DYNAMIC_ARRAYS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3034 #ifndef RUN_INT_RAM | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3035 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3036 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3037 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3038 | STATE : code ROUTINE : PER_allocmem | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3039 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3040 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3041 PURPOSE : Allocate memory for pointer types (dynamic array addition) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3042 Returns address of freshly allocated memory | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3043 or ccdError in case no memory is available. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3044 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3045 U8 *PER_allocmem(const ULONG e_ref, ULONG repeat, T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3046 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3047 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3048 * Check for pointer types; allocate memory if necessary. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3049 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3050 if ( is_pointer_type(e_ref) ) { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3051 ULONG cSize; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3052 U8 *addr; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3053 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3054 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3055 * Find size to allocate. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3056 * Read from mcomp or mvar according to type. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3057 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3058 cSize = (ULONG)((melem[e_ref].elemType EQ 'V' OR | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3059 melem[e_ref].elemType EQ 'R' | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3060 OR melem[e_ref].elemType EQ 'F') | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3061 ? mvar[melem[e_ref].elemRef].cSize | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3062 : mcomp[melem[e_ref].elemRef].cSize | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3063 ); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3064 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3065 #ifdef DEBUG_CCD | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3066 TRACE_CCD (globs, "PER_allocmem(): alloc%5d x%5d bytes (type '%c'); " | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3067 "elem%5d ('%s')", | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3068 repeat, cSize, melem[e_ref].elemType, e_ref, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3069 #ifdef CCD_SYMBOLS | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3070 mcomp[melem[e_ref].elemRef].name | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3071 #else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3072 "" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3073 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3074 ); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3075 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3076 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3077 * Allocate additional memory - append to existing mem chain | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3078 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3079 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3080 cSize *= repeat; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3081 addr = (U8 *)DP_ALLOC( cSize, globs->alloc_head, DP_NO_FRAME_GUESS); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3082 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3083 /* If no memory, log error and return immediately */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3084 if (addr EQ NULL) { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3085 ccd_setError (globs, ERR_NO_MEM, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3086 BREAK, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3087 (USHORT) -1); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3088 return (U8 *)ccdError; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3089 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3090 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3091 memset (addr, 0, (size_t)cSize); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3092 return addr; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3093 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3094 return (U8 *)ccdError; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3095 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3096 #endif /* !RUN_INT_RAM */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3097 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3098 #ifndef RUN_INT_RAM | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3099 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3100 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3101 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3102 | STATE : code ROUTINE : PER_allocmem_and_update| | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3103 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3104 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3105 PURPOSE : Allocate memory for pointer types (dynamic array addition) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3106 Updates global variables after allocation | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3107 (globs->pstruct and globs->pstructOffs). | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3108 Assumes that these global variables are saved by the | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3109 calling function. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3110 Returns ccdOK or ccdError in case no memory is available. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3111 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3112 USHORT PER_allocmem_and_update(const ULONG e_ref, ULONG repeat, T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3113 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3114 U8 *addr; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3115 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3116 /* Allocate memory */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3117 addr = PER_allocmem(e_ref, repeat, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3118 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3119 /* No memory ? */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3120 if ( addr != (U8 *)ccdError ) { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3121 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3122 * Memory allocated; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3123 * 1. Store pointer to freshly allocated memory area in structure | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3124 * 2. Initialize pstruct to point to the freshly allocated memory area. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3125 * 3. Initialize pstructOffs to 0 to start decoding at offset 0 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3126 * in the new memory area. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3127 * Assumes that globs->pstruct is saved in the calling function. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3128 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3129 *(U8 **)(globs->pstruct + globs->pstructOffs) = addr; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3130 globs->pstruct = addr; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3131 globs->pstructOffs = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3132 return ccdOK; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3133 } else { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3134 /* No memory - Return error */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3135 return ccdError; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3136 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3137 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3138 #endif /* !RUN_INT_RAM */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3139 #endif | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3140 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3141 #ifndef RUN_INT_RAM | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3142 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3143 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3144 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3145 | STATE : code ROUTINE : Read_NormallySmallNonNegativeWholeNr| | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3146 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3147 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3148 PURPOSE : Read a normally small non-negative whole number as defined | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3149 by ASN.1 PER. Function is used to read elements such as: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3150 a) bit-map field of SEQUENCE extensions, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3151 b) index of CHOICE extension or | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3152 c) extension value of extensible INTEGER or ENUMERATED. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3153 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3154 U32 Read_NormallySmallNonNegativeWholeNr (T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3155 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3156 U32 value_length=0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3157 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3158 /* Read the first bit. If set to 0 it means the value is encoded | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3159 * in the following five bits. Else read a normally small ...nr. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3160 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3161 if (bf_readBit (globs) EQ 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3162 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3163 return ((U32) bf_getBits (6, globs)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3164 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3165 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3166 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3167 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3168 * Do not handle the theoretical case that value length | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3169 * needs more than 63 bits. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3170 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3171 bf_incBitpos (1, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3172 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3173 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3174 * Read the value length first. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3175 * Then use the length to read the value. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3176 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3177 value_length = (U32) bf_getBits (6, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3178 return ((U32) bf_getBits (value_length, globs)); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3179 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3180 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3181 #endif /* !RUN_INT_RAM */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3182 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3183 #ifndef RUN_INT_RAM | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3184 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3185 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3186 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3187 | STATE : code ROUTINE : Write_NormallySmallNonNegativeWholeNr| | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3188 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3189 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3190 PURPOSE : Write a normally small non-negative whole number as defined | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3191 by ASN.1 PER. Function is used to encode elements such as: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3192 a) bit-map field of SEQUENCE extensions, | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3193 b) index of CHOICE extension or | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3194 c) extension value of extensible INTEGER or ENUMERATED. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3195 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3196 void Write_NormallySmallNonNegativeWholeNr (U32 Value, T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3197 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3198 /* For small numbers write 0 in the first bit. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3199 * Then encode that number in the succeeding five bits. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3200 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3201 if (Value < 64) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3202 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3203 bf_writeBit (0, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3204 bf_writeVal (Value, 6, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3205 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3206 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3207 * Encode the number under the assumption that its length is | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3208 * given by less than 63 bits. Hence encode also the length as a | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3209 * normally small... | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3210 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3211 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3212 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3213 /* Set flag bits: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3214 * 1 means "length determinant encoded before the value itself" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3215 * 0 means "length determinant encoded only in five bits" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3216 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3217 bf_writeVal (2, 2, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3218 bf_writeVal (bitSize[Value], 5, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3219 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3220 /* Encode the number itself */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3221 bf_writeVal (Value, bitSize[Value], globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3222 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3223 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3224 return; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3225 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3226 #endif /* !RUN_INT_RAM */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3227 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3228 #ifndef RUN_INT_RAM | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3229 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3230 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3231 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3232 | STATE : code ROUTINE : Read_OpenTpye_Length | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3233 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3234 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3235 PURPOSE : Read length of an ASN.1 open type. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3236 Open types are normally found in encoding of | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3237 parametrized information objects and extension types. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3238 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3239 U32 Read_OpenTpye_Length (T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3240 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3241 U32 Value; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3242 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3243 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3244 * Flag bit is 0 for "Value < 128" which means | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3245 * "encoding fits in the current octet" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3246 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3247 if (bf_readBit (globs) EQ 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3248 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3249 Value = bf_getBits (7, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3250 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3251 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3252 * Flag bits are 10 for 128 "< Value < 16K". | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3253 * 1 means "encoding does not fit in the current octet". | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3254 * 0 means "encoding needs only one further octet". | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3255 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3256 else if (bf_readBit (globs) EQ 0) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3257 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3258 Value = bf_getBits (14, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3259 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3260 /* Currently no support for bigger values is required. */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3261 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3262 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3263 /* force error detection */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3264 Value = 0; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3265 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3266 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3267 return Value; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3268 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3269 #endif /* !RUN_INT_RAM */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3270 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3271 #ifndef RUN_INT_RAM | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3272 /* | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3273 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3274 | PROJECT : CCD (6144) MODULE : CDC_COM | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3275 | STATE : code ROUTINE : Write_OpenTpye_Length | | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3276 +--------------------------------------------------------------------+ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3277 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3278 PURPOSE : Write length of an ASN.1 open type. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3279 Open types are normally found in encoding of | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3280 parametrized information objects and extension types. | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3281 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3282 void Write_OpenTpye_Length (U32 Value, T_CCD_Globs *globs) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3283 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3284 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3285 if (Value < 128) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3286 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3287 bf_writeVal (Value, 8, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3288 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3289 else if (Value < 0x8000) | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3290 { | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3291 /* Set flag bits: | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3292 * 1 means "encoding does not fit in the current octet" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3293 * 0 means "encoding needs only one further octet" | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3294 */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3295 bf_writeVal (2, 2, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3296 bf_writeVal (Value, 14, globs); | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3297 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3298 /* Currently no support for bigger values is required. */ | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3299 else | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3300 {} | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3301 | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3302 return; | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3303 } | 
| 
1ea54a97e831
src/gpf: import of Magnetite src/gpf3
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3304 #endif /* !RUN_INT_RAM */ | 
