FreeCalypso > hg > fc-magnetite
annotate src/gpf3/ccd/asn1_integ.c @ 278:ca343ccbca81
dar_reset_system(): check the entity_dar_callback pointer for NULL
before calling through it
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Mon, 07 Aug 2017 04:20:45 +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_integ.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_INTEGER | 
| 
 
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 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
23 * Standard definitions like UCHAR, ERROR etc. | 
| 
 
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 #include "typedefs.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
26 #include "header.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
27 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
28 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
29 * 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
 | 
30 * look at ccdapi.h | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
31 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
32 #undef USE_DRIVER | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
33 #include "ccdapi.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
34 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
35 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
36 * 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
 | 
37 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
38 #include "ccd_globs.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
39 #include "bitfun.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
40 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
41 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
42 * Prototypes of ccd internal functions | 
| 
 
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 #include "ccd.h" | 
| 
 
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 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
47 * Declaration of coder/decoder tables | 
| 
 
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 #include "ccdtable.h" | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
50 #include "ccddata.h" | 
| 
 
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 #ifndef RUN_INT_RAM | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
53 /* | 
| 
 
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 | PROJECT : CCD (6144) MODULE : asn1_integ | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
56 | STATE : code ROUTINE : Read_unique_Integer | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
57 +--------------------------------------------------------------------+ | 
| 
 
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 PURPOSE : Decode integer with only one possible value. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
60 Such a value is never encoded. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
61 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
62 void Read_unique_Integer (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
 | 
63 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
64 ULONG varRef, valRef; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
65 U8 *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 varRef = (ULONG) melem[e_ref].elemRef; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
68 valRef = (ULONG) mvar[varRef].valueDefs; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
69 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
70 #ifndef CCD_SYMBOLS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
71 TRACE_CCD (globs, "Read_unique_Integer()"); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
72 #else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
73 TRACE_CCD (globs, "Read_unique_Integer() %s", ccddata_get_alias((USHORT) e_ref, 1)); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
74 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
75 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
76 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
77 if (mval[valRef].startValue EQ 0) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
78 { | 
| 
 
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 * Do not do anything for empty sequences and NULL elements. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
81 * (Hint: Integers with only one possible value equal to 0 are | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
82 * automatically processed through memory reset of the C-structure | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
83 * at the beginning of decode activities or after each dynamic | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
84 * memory allocation.) | 
| 
 
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 return; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
87 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
88 else | 
| 
 
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 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
91 * For optional elements we have already set the valid flag in the | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
92 * C-structure while processing ASN1_SEQ. | 
| 
 
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 if (melem[e_ref].optional) | 
| 
 
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 if (globs->pstruct[globs->pstructOffs++] EQ FALSE) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
97 return; | 
| 
 
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 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
100 #ifdef DYNAMIC_ARRAYS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
101 if ( is_pointer_type(e_ref) ) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
102 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
103 value = PER_allocmem(e_ref, 1, globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
104 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
105 if (value EQ (U8 *)ccdError) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
106 return; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
107 | 
| 
 
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 * Store pointer to allocated memory in c structure. | 
| 
 
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 *(U8 **)(globs->pstruct + globs->pstructOffs) = value; | 
| 
 
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 else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
114 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
115 value = globs->pstruct + globs->pstructOffs; | 
| 
 
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 switch (mvar[varRef].cType) | 
| 
 
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 case 'B': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
120 *(U8*) value = (U8) mval[valRef].startValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
121 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
122 case 'C': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
123 *(S8*) value = (S8) mval[valRef].startValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
124 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
125 case 'S': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
126 *(U16*) value = (U16) mval[valRef].startValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
127 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
128 case 'T': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
129 *(S16*) value = (S16) mval[valRef].startValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
130 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
131 case 'L': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
132 *(U32*) value = (U32) mval[valRef].startValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
133 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
134 case 'M': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
135 *(S32*) value = (S32) mval[valRef].startValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
136 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
137 default: | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
138 ccd_recordFault (globs,ERR_DEFECT_CCDDATA, BREAK, (USHORT) e_ref, value); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
139 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
140 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
141 return; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
142 } | 
| 
 
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 #endif /* !RUN_INT_RAM */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
145 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
146 #ifndef RUN_INT_RAM | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
147 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
148 +--------------------------------------------------------------------+ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
149 | PROJECT : CCD (6144) MODULE : asn1_integ | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
150 | STATE : code ROUTINE : cdc_asn1_integ_decode | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
151 +--------------------------------------------------------------------+ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
152 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
153 PURPOSE : Encoding of the PER integer type for UMTS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
154 PER-visible constraints restrict the integer value to be a | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
155 constrained whole number. This gives a lower and an upper | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
156 bound for the integer. The lb is also called offset. The | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
157 encoded value is the difference between the actual and the | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
158 offset value. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
159 A possible and meant default value is never encoded. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
160 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
161 SHORT cdc_asn1_integ_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
 | 
162 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
163 ULONG repeat=1, maxRep=1, varRef, valRef; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
164 BOOL DefaultFound= FALSE; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
165 S32 IfnotPresent; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
166 UBYTE *value, *old_pstruct = NULL; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
167 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
168 varRef = (ULONG) melem[e_ref].elemRef; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
169 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
170 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
171 #ifndef CCD_SYMBOLS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
172 TRACE_CCD (globs, "cdc_asn1_integ_decode()"); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
173 #else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
174 TRACE_CCD (globs, "cdc_asn1_integ_decode() %s", ccddata_get_alias((USHORT) e_ref, 1)); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
175 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
176 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
177 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
178 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
179 * Set the offset in the C-structure on the value for this element. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
180 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
181 globs->pstructOffs = melem[e_ref].structOffs; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
182 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
183 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
184 * Decode an empty sequence, a NULL element or an integer of constant value. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
185 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
186 if (mvar[varRef].bSize EQ 0) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
187 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
188 Read_unique_Integer (e_ref, globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
189 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
190 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
191 valRef = (ULONG) mvar[varRef].valueDefs; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
192 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
193 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
194 * Set pstrcutOffs and maxRep. 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
 | 
195 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
196 if (PER_CommonBegin (e_ref, &maxRep, globs) NEQ ccdOK) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
197 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
198 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
199 #ifdef DYNAMIC_ARRAYS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
200 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
201 * Allocate memory if this is a pointer type (dynamic array) | 
| 
 
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 if ( is_pointer_type(e_ref) ) { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
204 old_pstruct = globs->pstruct; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
205 if ( PER_allocmem_and_update(e_ref, maxRep, globs) NEQ ccdOK) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
206 /* 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
 | 
207 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
208 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
209 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
210 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
211 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
212 * Check if there is a default value for the element. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
213 * If yes, just set it aside for a later comparision. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
214 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
215 if (mval[valRef+1].isDefault EQ 2) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
216 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
217 IfnotPresent = mval[valRef+1].startValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
218 DefaultFound = TRUE; | 
| 
 
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 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
221 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
222 * Decode all elements of the array. | 
| 
 
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 while ( repeat <= maxRep) | 
| 
 
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 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
227 value = 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 * There is a default value for this integer elment. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
231 * While decoding of the ASN1-SEQUENCE contiaing this integer | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
232 * we have used a particular byte of C-structure to signalize | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
233 * the decoding of a default value (byte set to 0). | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
234 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
235 if (DefaultFound AND !globs->pstruct[melem[e_ref].structOffs]) | 
| 
 
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 switch (mvar[varRef].cType) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
238 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
239 case 'B': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
240 *(U8*) value = (U8) IfnotPresent; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
241 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
242 case 'C': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
243 *(S8*) value = (S8) IfnotPresent; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
244 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
245 case 'S': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
246 *(U16*) value = (U16) IfnotPresent; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
247 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
248 case 'T': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
249 *(S16*) value = (S16) IfnotPresent; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
250 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
251 case 'L': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
252 *(U32*) value = (U32) IfnotPresent; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
253 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
254 case 'M': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
255 *(S32*) value = (S32) IfnotPresent; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
256 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
257 default: | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
258 ccd_recordFault (globs,ERR_DEFECT_CCDDATA, BREAK, (USHORT) e_ref, value); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
259 return 1; | 
| 
 
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 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
262 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
263 * There is no default value defined for this integer elment. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
264 * Read the value from the bit buffer. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
265 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
266 else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
267 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
268 U32 ub, lb; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
269 ULONG readBits; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
270 U32 DecodedValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
271 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
272 lb = mval[valRef].startValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
273 ub = mval[valRef].endValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
274 | 
| 
 
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 * Read the non-negative value from the air message. | 
| 
 
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 readBits = bf_getBits (mvar[varRef].bSize, globs); | 
| 
 
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 if (readBits <= (U32)(ub - lb)) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
282 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
283 DecodedValue = lb + readBits; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
284 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
285 * Add the offset to the read value to get the actual one. | 
| 
 
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 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
288 switch (mvar[varRef].cType) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
289 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
290 case 'B': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
291 *(U8*) value = (U8) DecodedValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
292 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
293 case 'C': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
294 *(S8*) value = (S8) DecodedValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
295 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
296 case 'S': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
297 *(U16*) value = (U16) DecodedValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
298 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
299 case 'T': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
300 *(S16*) value = (S16) DecodedValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
301 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
302 case 'L': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
303 *(U32*) value = (U32) DecodedValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
304 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
305 case 'M': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
306 *(S32*) value = (S32) DecodedValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
307 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
308 default: | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
309 ccd_recordFault (globs,ERR_DEFECT_CCDDATA, BREAK, (USHORT) e_ref, value); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
310 break; | 
| 
 
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 else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
314 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
315 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
316 TRACE_CCD (globs, "integer out of range! %ld require: %ld .. %ld ", DecodedValue, lb, ub); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
317 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
318 if (melem[e_ref].optional) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
319 ccd_recordFault (globs, ERR_ASN1_OPT_IE, CONTINUE, (USHORT) e_ref, value); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
320 else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
321 ccd_recordFault (globs, ERR_ASN1_MAND_IE, CONTINUE, (USHORT) e_ref, value); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
322 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
323 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
324 repeat ++; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
325 globs->pstructOffs += mvar[varRef].cSize; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
326 }/*while*/ | 
| 
 
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 (old_pstruct NEQ NULL) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
330 globs->pstruct = old_pstruct; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
331 #endif | 
| 
 
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 return 1; | 
| 
 
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 #endif /* !RUN_INT_RAM */ | 
| 
 
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 #ifndef RUN_INT_RAM | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
338 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
339 +--------------------------------------------------------------------+ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
340 | PROJECT : CCD (6144) MODULE : asn1_integ | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
341 | STATE : code ROUTINE : cdc_asn1_integ_encode | | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
342 +--------------------------------------------------------------------+ | 
| 
 
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 PURPOSE : Encoding of the PER integer type for UMTS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
345 PER-visible constraints restrict the integer value to be a | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
346 constrained whole number. This gives a lower and an upper | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
347 bound for the integer. The lb is also called offset. The | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
348 encoded value is the difference between the actual and the | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
349 offset value. Hence encoded values are non-negative. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
350 A possible and meant default value is never encoded. | 
| 
 
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 SHORT cdc_asn1_integ_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
 | 
353 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
354 ULONG repeat=1, maxRep=1, varRef, valRef; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
355 BOOL DefaultFound= FALSE; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
356 S32 IfnotPresent; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
357 U8 *base_pstruct; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
358 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
359 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
360 #ifndef CCD_SYMBOLS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
361 TRACE_CCD (globs, "cdc_asn1_integ_encode()"); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
362 #else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
363 TRACE_CCD (globs, "cdc_asn1_integ_encode() %s", ccddata_get_alias((USHORT) e_ref, 1)); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
364 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
365 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
366 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
367 varRef = (ULONG) melem[e_ref].elemRef; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
368 valRef = (ULONG) mvar[varRef].valueDefs; | 
| 
 
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 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
371 * Don't do anything for empty sequences, NULL elements or integers of constant value. | 
| 
 
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 if (mvar[varRef].bSize EQ 0) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
374 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
375 | 
| 
 
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 * Set pstrcutOffs and maxRep. 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
 | 
378 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
379 if (PER_CommonBegin (e_ref, &maxRep, globs) NEQ ccdOK) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
380 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
381 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
382 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
383 * Check if there is a default value for the element. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
384 * If yes, just set it aside for a later comparision. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
385 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
386 if (mval[valRef+1].isDefault EQ 2) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
387 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
388 IfnotPresent = mval[valRef+1].startValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
389 DefaultFound = TRUE; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
390 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
391 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
392 #ifdef DYNAMIC_ARRAYS | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
393 if ( is_pointer_type(e_ref) ) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
394 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
395 base_pstruct = *(U8 **)(globs->pstruct + globs->pstructOffs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
396 if (ccd_check_pointer(base_pstruct) == ccdOK) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
397 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
398 globs->pstructOffs = 0; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
399 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
400 else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
401 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
402 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
 | 
403 &globs->pstruct[globs->pstructOffs]); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
404 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
405 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
406 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
407 else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
408 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
409 base_pstruct = globs->pstruct; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
410 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
411 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
412 * Encode all elements of the array. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
413 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
414 while ( repeat <= maxRep) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
415 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
416 S32 ub, lb, value; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
417 UBYTE *p; | 
| 
 
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 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
420 * 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
 | 
421 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
422 p = base_pstruct + globs->pstructOffs; | 
| 
 
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 switch (mvar[varRef].cType) | 
| 
 
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 case 'B': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
427 value = (S32)*(UBYTE *) p; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
428 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
429 case 'C': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
430 value = (S32)*(S8 *) p; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
431 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
432 case 'S': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
433 value = (S32)*(USHORT *) p; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
434 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
435 case 'T': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
436 value = (S32)*(S16 *) p; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
437 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
438 case 'L': | 
| 
 
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 * This type casting can be critical. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
441 * Thus the case of bSize=32 will be handled separately. | 
| 
 
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 if (mvar[varRef].bSize < 32) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
444 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
445 value = (S32)*(U32 *) p; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
446 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
447 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
448 case 'M': | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
449 value = *(S32 *) p; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
450 break; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
451 default: | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
452 ccd_recordFault (globs, ERR_DEFECT_CCDDATA, BREAK, (USHORT) e_ref, p); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
453 return 1; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
454 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
455 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
456 if (mvar[varRef].cType EQ 'L' AND | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
457 (mvar[varRef].bSize EQ 32)) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
458 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
459 ULONG CriticalValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
460 U32 lb, ub; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
461 CriticalValue = *(U32 *) p; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
462 if (!DefaultFound OR (U32)IfnotPresent NEQ CriticalValue) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
463 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
464 lb = (U32) mval[valRef].startValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
465 ub = (U32) mval[valRef].endValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
466 if (lb <= CriticalValue && CriticalValue <= ub) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
467 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
468 bf_writeVal (CriticalValue - lb, mvar[varRef].bSize, globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
469 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
470 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
471 else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
472 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
473 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
474 TRACE_CCD (globs, "integer out of range! %ld require: %ld .. %ld ", | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
475 value, lb, ub); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
476 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
477 ccd_recordFault (globs, ERR_INT_VALUE, CONTINUE, (USHORT) e_ref, p); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
478 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
479 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
480 else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
481 { | 
| 
 
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 * Encode only non-default values. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
484 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
485 if (!DefaultFound OR IfnotPresent NEQ value) | 
| 
 
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 /* | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
488 * A non-negative-binary-integer will be encoded since the offset must | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
489 * be subtracted from the value read from the C-structure. | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
490 */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
491 lb = mval[valRef].startValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
492 ub = mval[valRef].endValue; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
493 if (lb <= value AND value <= ub) | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
494 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
495 bf_writeVal ((ULONG)(value - lb), mvar[varRef].bSize, globs); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
496 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
497 else | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
498 { | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
499 #ifdef DEBUG_CCD | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
500 TRACE_CCD (globs, "integer out of range! %ld require: %ld .. %ld ", value, lb, ub); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
501 #endif | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
502 ccd_recordFault (globs, ERR_INT_VALUE, CONTINUE, (USHORT) e_ref, p); | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
503 } | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
504 } | 
| 
 
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 repeat ++; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
507 globs->pstructOffs += mvar[varRef].cSize; | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
508 }/* while-loop */ | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
509 | 
| 
 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
510 return 1; | 
| 
 
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 #endif /* !RUN_INT_RAM */ | 
