FreeCalypso > hg > fc-magnetite
annotate src/gpf3/ccd/asn1_seq.c @ 686:59f07d67eb45
luna target split into luna1 and luna2
luna1 is FC Luna based on iWOW DSK v4.0 or v5.0 motherboard
luna2 is FC Luna based on FC Caramel2 MB
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Mon, 12 Oct 2020 18:51:24 +0000 | 
| parents | c41a534f33c6 | 
| children | 
| rev | line source | 
|---|---|
| 
2
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
1 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
2 +----------------------------------------------------------------------------- | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
3 | Project : | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
4 | Modul : asn1_seq.c | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
5 +----------------------------------------------------------------------------- | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
6 | Copyright 2002 Texas Instruments Berlin, AG | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
7 | All rights reserved. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
8 | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
9 | This file is confidential and a trade secret of Texas | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
10 | Instruments Berlin, AG | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
11 | The receipt of or possession of this file does not convey | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
12 | any rights to reproduce or disclose its contents or to | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
13 | manufacture, use, or sell anything it may describe, in | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
14 | whole, or in part, without the specific written consent of | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
15 | Texas Instruments Berlin, AG. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
16 +----------------------------------------------------------------------------- | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
17 | Purpose : Definition of encoding and decoding functions for ASN1_SEQUENCE | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
18 | elements | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
19 +----------------------------------------------------------------------------- | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
20 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
21 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
22 #define ASN1_SEQ_C | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
23 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
24 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
25 * Standard definitions like UCHAR, ERROR etc. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
26 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
27 #include "typedefs.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
28 #include "header.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
29 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
30 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
31 * Prototypes of ccd (USE_DRIVER EQ undef) for prototypes only | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
32 * look at ccdapi.h | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
33 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
34 #undef USE_DRIVER | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
35 #include "ccdapi.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
36 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
37 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
38 * Types and functions for bit access and manipulation | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
39 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
40 #include "ccd_globs.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
41 #include "bitfun.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
42 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
43 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
44 * Prototypes and constants in the common part of ccd | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
45 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
46 #include "ccd.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
47 #include "ccd_codingtypes.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
48 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
49 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
50 * Declaration of coder/decoder tables | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
51 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
52 #include "ccdtable.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
53 #include "ccddata.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
54 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
55 EXTERN T_FUNC_POINTER codec[MAX_CODEC_ID+1][2]; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
56 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
57 #ifndef RUN_INT_RAM | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
58 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
59 +--------------------------------------------------------------------+ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
60 | PROJECT : CCD (6144) MODULE : asn1_seq | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
61 | STATE : code ROUTINE : Read_SEQ_BitMap | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
62 +--------------------------------------------------------------------+ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
63 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
64 PURPOSE : Decode the bit-map preamble for OPTIONAL elements | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
65 or those with DEFAULT value. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
66 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
67 void Read_SEQ_BitMap (const ULONG first_elem, const ULONG last_elem, T_CCD_Globs *globs) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
68 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
69 ULONG elem = first_elem; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
70 while (elem < last_elem) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
71 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
72 if (melem[elem].optional) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
73 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
74 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
75 * For optional elements read the corresponding bit in the preamble | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
76 * and set the valid flag in the C-Structure to it. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
77 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
78 if (melem[elem].elemType < 'P' OR melem[elem].elemType > 'R') | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
79 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
80 globs->pstruct[melem[elem].structOffs] = (UBYTE) bf_readBit(globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
81 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
82 else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
83 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
84 if(bf_readBit(globs)) /*elemType P, Q or R*/ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
85 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
86 /*If present set the pointer to -1 (0xFFFF) - anything else than NULL, because the | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
87 element is present*/ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
88 *(void**) &globs->pstruct[melem[elem].structOffs] = (void *) 0xFFFF; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
89 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
90 else /*Not present set the pointer to NULL*/ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
91 *(void**) &globs->pstruct[melem[elem].structOffs] = NULL; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
92 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
93 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
94 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
95 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
96 * For optional elements read the corresponding bit in the preamble | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
97 * and set the valid flag in the C-structure to it. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
98 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
99 else if (melem[elem].codingType EQ CCDTYPE_ASN1_INTEGER) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
100 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
101 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
102 * Check if this variable has a default value. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
103 * As long as the DEFAULT values are given with ranges it is right to | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
104 * look for isDefault in the second entry in mval.cdg. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
105 * There is no valid flag for elements with default value. But we use | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
106 * the first byte of this element within the C-structure for giving a | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
107 * signal to this function. The only simple type which has DEFAULT is INTEGER. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
108 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
109 if (mval[mvar[melem[elem].elemRef].valueDefs+1].isDefault EQ 2) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
110 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
111 globs->pstruct[melem[elem].structOffs] = (UBYTE) bf_readBit(globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
112 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
113 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
114 elem++; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
115 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
116 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
117 #endif /* !RUN_INT_RAM */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
118 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
119 #ifndef RUN_INT_RAM | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
120 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
121 +--------------------------------------------------------------------+ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
122 | PROJECT : CCD (6144) MODULE : CDC_GSM | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
123 | STATE : code ROUTINE : cdc_asn1_seq_decode | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
124 +--------------------------------------------------------------------+ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
125 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
126 PURPOSE : Decoding of the SEQUENCE and SEQUENCE OF type for UMTS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
127 The element can be a field of fixed or variable length. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
128 It can contain OPTIONAL elements or integer elements with | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
129 a DEFAULT value. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
130 A special case is when the element is a so called msg_data. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
131 According to CCDDATA a message is made of a msg_type and | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
132 a msg_data part. If the msg_data has a coding type of | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
133 ASN1_SEQUENCE this function is called. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
134 In this case CCD needs to pass over the msg_type by | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
135 incrementing globs->pstruct. A msg_data sequence can not | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
136 be optional. Nor it can be an array of msg_data. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
137 If the sequence is not a msg_data this function is called | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
138 as an equivalent to ccd_decodeComposition. Hence the | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
139 increment on globs->ccd_recurs_level. A non-msg_data | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
140 sequence can be optional or an array. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
141 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
142 SHORT cdc_asn1_seq_decode (const ULONG c_ref, const ULONG e_ref, T_CCD_Globs *globs) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
143 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
144 ULONG repeat=1, max_rep=1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
145 ULONG cSize, first_elem, last_elem, elem; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
146 UBYTE *old_pstruct; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
147 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
148 static S8 trace_nesting_level = -1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
149 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
150 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
151 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
152 #ifndef CCD_SYMBOLS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
153 TRACE_CCD (globs, "cdc_asn1_seq_decode()"); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
154 #else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
155 TRACE_CCD (globs, "cdc_asn1_seq_decode() %s", mcomp[melem[e_ref].elemRef].name); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
156 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
157 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
158 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
159 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
160 * This function is called as an equivalent to ccd_decodeComposition. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
161 * Hence the increment on globs->ccd_recurs_level. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
162 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
163 globs->ccd_recurs_level ++; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
164 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
165 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
166 * Set pstrcutOffs and max_rep. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
167 * Check the valid flag in case of optional elements. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
168 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
169 if (PER_CommonBegin (e_ref, &max_rep, globs) NEQ ccdOK) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
170 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
171 globs->ccd_recurs_level --; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
172 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
173 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
174 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
175 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
176 * Prepare for decoding of the same sequence type up to max_rep times. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
177 * Set the upper and lower bound of elemRef for processing of each repeatition. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
178 * Read the C-size to go ahead in the C-structure after each repeatition. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
179 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
180 switch (melem[e_ref].elemType) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
181 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
182 case 'C': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
183 case 'D': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
184 case 'E': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
185 case 'P': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
186 case 'Q': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
187 elem = (ULONG) melem[e_ref].elemRef; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
188 first_elem = (ULONG) mcomp[elem].componentRef; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
189 last_elem = first_elem + mcomp[elem].numOfComponents; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
190 cSize = (ULONG) mcomp[elem].cSize; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
191 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
192 case 'F': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
193 case 'R': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
194 first_elem = e_ref; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
195 last_elem = e_ref + 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
196 cSize = (ULONG) mvar[e_ref].cSize; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
197 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
198 default: | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
199 ccd_setError (globs, ERR_DEFECT_CCDDATA, BREAK, | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
200 (USHORT) (globs->bitpos), (USHORT) -1); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
201 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
202 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
203 }; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
204 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
205 * Store the current value of the C-structure pointer. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
206 * After decoding the SEQUENCE component we will set the pointer | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
207 * to this stored value. Then we will use pstructOffs for pointing | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
208 * to the next element. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
209 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
210 old_pstruct = globs->pstruct; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
211 #ifdef DYNAMIC_ARRAYS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
212 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
213 * Allocate memory for this whole composition, if elemType is | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
214 * one of the pointer types. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
215 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
216 if ( is_pointer_type(e_ref)) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
217 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
218 if ( PER_allocmem_and_update(e_ref, max_rep, globs) NEQ ccdOK ) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
219 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
220 /* No memory - Return. Error already set in function call above. */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
221 globs->ccd_recurs_level --; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
222 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
223 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
224 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
225 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
226 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
227 globs->pstruct += globs->pstructOffs; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
228 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
229 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
230 * Decode all elements of the field. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
231 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
232 while (repeat <= max_rep) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
233 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
234 Read_SEQ_BitMap (first_elem, last_elem, globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
235 elem = first_elem; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
236 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
237 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
238 * Decode all elements of the array | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
239 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
240 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
241 trace_nesting_level++; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
242 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
243 while (elem < last_elem) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
244 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
245 #ifdef ERR_TRC_STK_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
246 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
247 * Save the value for tracing in error case. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
248 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
249 globs->error_stack[globs->ccd_recurs_level] = (USHORT) elem; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
250 #endif /* ERR_TRC_STK_CCD */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
251 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
252 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
253 #ifndef CCD_SYMBOLS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
254 TRACE_CCD (globs, "decoding level %d element %d", trace_nesting_level, elem - first_elem); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
255 #else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
256 TRACE_CCD (globs, "decoding level %d element %d '%s'",trace_nesting_level, elem - first_elem, ccddata_get_alias((USHORT) elem, 1)); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
257 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
258 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
259 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
260 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
261 * Use the jump-table for selecting the decode function. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
262 * Possible types are 0, ASN1_INTEGER, BITSTRING, ASN1_CHOICE and | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
263 * ASN1_SEQUENCE. In case of 0 function cdc_STD_decode will be called. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
264 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
265 (void) codec[melem[elem].codingType][DECODE_FUN] | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
266 (c_ref, elem, globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
267 elem ++; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
268 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
269 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
270 trace_nesting_level--; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
271 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
272 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
273 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
274 * Set the pointer of the C-structure on the next element. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
275 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
276 globs->pstruct += cSize; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
277 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
278 repeat ++; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
279 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
280 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
281 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
282 * Prepare for decoding the next element. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
283 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
284 globs->pstruct = old_pstruct; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
285 globs->ccd_recurs_level--; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
286 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
287 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
288 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
289 #endif /* !RUN_INT_RAM */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
290 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
291 #ifndef RUN_INT_RAM | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
292 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
293 +--------------------------------------------------------------------+ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
294 | PROJECT : CCD (6144) MODULE : asn1_seq | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
295 | STATE : code ROUTINE : Write_SEQ_BitMap | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
296 +--------------------------------------------------------------------+ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
297 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
298 PURPOSE : Encode the bit-map preamble for OPTIONAL elements | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
299 or those with DEFAULT value. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
300 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
301 void Write_SEQ_BitMap (const ULONG first_elem, const ULONG last_elem, T_CCD_Globs *globs) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
302 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
303 ULONG elem = first_elem; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
304 while (elem < last_elem) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
305 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
306 if (melem[elem].optional) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
307 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
308 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
309 * For optional elements read the valid flag in the C-Structure | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
310 * and overwrite the corresponding bit in the preamble. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
311 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
312 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
313 #if defined _TOOLS_ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
314 int patch; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
315 U16 stelem; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
316 stelem = globs->error_stack[globs->ccd_recurs_level]; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
317 globs->error_stack[globs->ccd_recurs_level] = (USHORT) elem; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
318 patch = ccd_patch (globs, 1); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
319 globs->error_stack[globs->ccd_recurs_level] = stelem; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
320 if (patch) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
321 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
322 bf_writeBit(1, globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
323 elem++; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
324 continue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
325 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
326 #endif /* _TOOLS_ */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
327 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
328 #ifdef DYNAMIC_ARRAYS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
329 if ( is_pointer_type(elem) ) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
330 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
331 BOOL present; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
332 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
333 * Check for NULL pointer (== notPresent/not valid) for this element. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
334 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
335 present = (*(U8 **)(globs->pstruct + melem[elem].structOffs) NEQ NULL); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
336 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
337 * Double check for 'D' to 'F' types. Both NULL pointer and | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
338 * valid flag. (Strictly not necessary, but may catch uninitialized | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
339 * flags/pointers). | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
340 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
341 if (present AND (melem[elem].elemType >= 'D' AND | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
342 melem[elem].elemType <= 'F')) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
343 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
344 present = (BOOL)globs->pstruct[melem[elem].structOffs]; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
345 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
346 bf_writeBit(present, globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
347 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
348 else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
349 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
350 bf_writeBit((BOOL)globs->pstruct[melem[elem].structOffs], globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
351 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
352 else if (melem[elem].codingType EQ CCDTYPE_ASN1_INTEGER) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
353 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
354 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
355 * Check if this variable has a default value. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
356 * As long as the DEFAULT values are given with ranges it is right to | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
357 * look for isDefault in the second entry in mval.cdg. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
358 * There is no valid flag for elements with default value. So we need | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
359 * to read the value from C-structure and compare it with the DEFAULT | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
360 * value given in the mval table. The only simple type which has | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
361 * DEFAULT is INTEGER. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
362 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
363 if (mval[mvar[melem[elem].elemRef].valueDefs+1].isDefault EQ 2) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
364 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
365 U32 value=0; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
366 UBYTE *p; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
367 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
368 * setup the read pointer to the element in the C-structure | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
369 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
370 #ifdef DYNAMIC_ARRAYS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
371 if ( is_pointer_type(elem) ) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
372 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
373 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
374 * NULL pointers should be caught as part of the optionality | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
375 * check in PER_CommonBegin() | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
376 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
377 p = *(U8 **)(globs->pstruct + globs->pstructOffs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
378 if (ccd_check_pointer(p) != ccdOK) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
379 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
380 ccd_recordFault (globs, ERR_INVALID_PTR, BREAK, (USHORT) elem, | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
381 &globs->pstruct[globs->pstructOffs]); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
382 return; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
383 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
384 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
385 else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
386 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
387 p = globs->pstruct + melem[elem].structOffs; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
388 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
389 * Default values are all positive and small values (< 64K) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
390 * in the current version of umts. The cases 'L' and 'C' are added | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
391 * to be ready for a future change where we need also a check of | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
392 * possible errors through type casting. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
393 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
394 switch (mvar[melem[elem].elemRef].cType) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
395 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
396 case 'B': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
397 value = (U32)*(UBYTE *) p; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
398 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
399 case 'C': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
400 value = (U32)(S32)*(S8 *) p; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
401 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
402 case 'S': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
403 value = (U32)(*(USHORT *) p); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
404 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
405 case 'T': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
406 value = (U32)(S32)*(S16 *) p; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
407 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
408 case 'L': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
409 value = (U32)*(S32 *) p; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
410 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
411 case 'M': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
412 value = (U32)*(U32 *) p; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
413 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
414 default: | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
415 ccd_setError (globs, ERR_DEFECT_CCDDATA, BREAK, (USHORT) -1); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
416 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
417 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
418 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
419 * Compare the value to be encoded with the default value. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
420 * Write the presence flag into the preamble. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
421 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
422 if (value EQ (U32)mval[mvar[melem[elem].elemRef].valueDefs+1].startValue) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
423 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
424 bf_writeBit(0, globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
425 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
426 else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
427 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
428 bf_writeBit(1, globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
429 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
430 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
431 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
432 elem++; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
433 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
434 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
435 #endif /* !RUN_INT_RAM */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
436 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
437 #ifndef RUN_INT_RAM | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
438 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
439 +--------------------------------------------------------------------+ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
440 | PROJECT : CCD (6144) MODULE : CDC_GSM | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
441 | STATE : code ROUTINE : cdc_asn1_seq_encode | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
442 +--------------------------------------------------------------------+ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
443 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
444 PURPOSE : Decoding of the SEQUENCE and SEQUENCE OF type for UMTS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
445 The element can be a field of fixed or variable length. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
446 It can contain OPTIONAL elements or integer elements with | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
447 a DEFAULT value. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
448 A special case is when the element is a so called msg_data. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
449 According to CCDDATA a message is made of a msg_type and | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
450 a msg_data part. If the msg_data has a coding type of | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
451 ASN1_SEQUENCE this function is called. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
452 In this case CCD needs to pass over the msg_type by | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
453 incrementing globs->pstruct. A msg_data sequence can not | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
454 be optional. Nor it can be an array of msg_data. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
455 If the sequence is not a msg_data this function is called | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
456 as an equivalent to ccd_encodeComposition. Hence the | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
457 increment on globs->ccd_recurs_level. A non-msg_data | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
458 sequence can be optional or an array. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
459 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
460 SHORT cdc_asn1_seq_encode (const ULONG c_ref, const ULONG e_ref, T_CCD_Globs *globs) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
461 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
462 ULONG repeat=1, max_rep=1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
463 ULONG cSize, first_elem, last_elem, elem; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
464 UBYTE *old_pstruct; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
465 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
466 static S8 trace_nesting_level = -1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
467 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
468 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
469 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
470 #ifndef CCD_SYMBOLS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
471 TRACE_CCD (globs, "cdc_asn1_seq_encode()"); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
472 #else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
473 TRACE_CCD (globs, "cdc_asn1_seq_encode() %s", mcomp[melem[e_ref].elemRef].name); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
474 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
475 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
476 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
477 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
478 * This function is called as an equivalent to ccd_encodeComposition. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
479 * Hence the increment on globs->ccd_recurs_level. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
480 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
481 globs->ccd_recurs_level ++; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
482 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
483 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
484 * Set pstrcutOffs and max_rep. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
485 * Check the valid flag in case of optional elements. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
486 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
487 if (PER_CommonBegin (e_ref, &max_rep, globs) NEQ ccdOK) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
488 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
489 globs->ccd_recurs_level --; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
490 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
491 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
492 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
493 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
494 * Prepare for encoding of the same sequence type up to max_rep times. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
495 * Set the upper and lower bound of elemRef for processing of each repeatition. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
496 * Read the C-size to go ahead in the C-structure after each repeatition. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
497 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
498 switch (melem[e_ref].elemType) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
499 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
500 case 'C': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
501 case 'D': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
502 case 'E': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
503 case 'P': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
504 case 'Q': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
505 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
506 elem = (ULONG) melem[e_ref].elemRef; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
507 first_elem = (ULONG) mcomp[elem].componentRef; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
508 last_elem = first_elem + mcomp[elem].numOfComponents; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
509 cSize = (ULONG) mcomp[elem].cSize; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
510 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
511 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
512 case 'F': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
513 case 'R': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
514 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
515 first_elem = e_ref; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
516 last_elem = e_ref + 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
517 cSize = (ULONG) mvar[e_ref].cSize; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
518 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
519 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
520 default: | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
521 ccd_setError (globs, ERR_DEFECT_CCDDATA, BREAK, | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
522 (USHORT) (globs->bitpos), (USHORT) -1); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
523 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
524 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
525 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
526 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
527 * Store the current value of the C-structure pointer. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
528 * After encoding the SEQUENCE component we will set the pointer | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
529 * to this stored value. Then we will use pstructOffs for pointing | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
530 * to the next element. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
531 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
532 old_pstruct = globs->pstruct; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
533 globs->pstruct += globs->pstructOffs; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
534 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
535 #ifdef DYNAMIC_ARRAYS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
536 if ( is_pointer_type(e_ref) ) { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
537 if (ccd_check_pointer(*(U8 **)globs->pstruct) == ccdOK) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
538 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
539 globs->pstruct = *(U8 **) globs->pstruct; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
540 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
541 else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
542 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
543 ccd_recordFault (globs, ERR_INVALID_PTR, BREAK, (USHORT) e_ref, | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
544 &globs->pstruct[globs->pstructOffs]); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
545 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
546 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
547 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
548 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
549 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
550 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
551 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
552 * Encode all elements of the field. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
553 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
554 while (repeat <= max_rep) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
555 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
556 Write_SEQ_BitMap (first_elem, last_elem, globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
557 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
558 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
559 * Encode all elements | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
560 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
561 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
562 trace_nesting_level++; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
563 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
564 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
565 elem = first_elem; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
566 while (elem < last_elem) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
567 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
568 #ifdef ERR_TRC_STK_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
569 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
570 * Save the value for tracing in error case. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
571 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
572 globs->error_stack[globs->ccd_recurs_level] = (USHORT) elem; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
573 #endif /* ERR_TRC_STK_CCD */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
574 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
575 #ifndef CCD_SYMBOLS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
576 TRACE_CCD (globs, "encoding level %d element %d", trace_nesting_level, elem - first_elem); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
577 #else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
578 TRACE_CCD (globs, "encoding level %d element %d '%s'", trace_nesting_level, elem - first_elem ,ccddata_get_alias((USHORT) elem, 1)); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
579 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
580 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
581 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
582 #if defined _TOOLS_ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
583 if (!ccd_patch (globs, 0)) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
584 #endif /* _TOOLS_ */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
585 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
586 * Use the jump-table for selecting the code function. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
587 * Possible types are 0, ASN1_INTEGER, BITSTRING, ASN1_CHOICE and | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
588 * ASN1_SEQUENCE. In case of 0 function cdc_STD_encode will be called. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
589 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
590 (void) codec[melem[elem].codingType][ENCODE_FUN] | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
591 (c_ref, elem, globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
592 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
593 * Set the elemRef to the next element. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
594 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
595 elem ++; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
596 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
597 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
598 trace_nesting_level--; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
599 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
600 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
601 * Set the pointer of the C-structure on the next element. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
602 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
603 globs->pstruct += cSize; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
604 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
605 repeat ++; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
606 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
607 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
608 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
609 * Prepare for encoding the next element. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
610 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
611 globs->pstruct = old_pstruct; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
612 globs->ccd_recurs_level--; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
613 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
614 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
615 #endif /* !RUN_INT_RAM */ | 
