FreeCalypso > hg > fc-magnetite
annotate src/gpf3/ccd/bcd_mnc.c @ 219:b05dba024f95
doc/Handset-configs and doc/Modem-configs written
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Sat, 15 Oct 2016 22:41:38 +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 : bcd_mnc.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 BCD_MNC elements | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 18 +----------------------------------------------------------------------------- | 
| 
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 GLOBAL, 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 : CCD | | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 | STATE : code ROUTINE : cdc_bcd_mnc_decode | | 
| 
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 : decoding a byte array, that contains a Mobile Network Code, | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 60 from the bitstream: | 
| 
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 MSBit LSBit | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 7 8 6 5 4 3 2 1 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 64 DIGIT_3 XXXXXXX Octett n-1 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 65 DIGIT_2 DIGIT_1 Octett n | 
| 
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 The current decoding position is expected after Octett n-1 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 68 The byte array should be of dimension [2..3] (preferred) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 69 or [3] or [2] (also supported) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 70 | 
| 
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 | 
| 
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 SHORT cdc_bcd_mnc_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 | 75 { | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 76 ULONG repeat, max_rep; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 77 BOOL is_variable; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 78 UBYTE digBuffer[3]; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 79 UBYTE *addr_c_xxx; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 80 ULONG i; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 81 ULONG cix_ref, num_prolog_steps, prolog_step_ref; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 82 register UBYTE *digits; | 
| 
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 #ifdef DEBUG_CCD | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 85 #ifndef CCD_SYMBOLS | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 86 TRACE_CCD (globs, "cdc_bcd_mnc_decode()"); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 87 #else | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 88 TRACE_CCD (globs, "cdc_bcd_mnc_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 | 89 #endif | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 90 #endif | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 91 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 92 cix_ref = melem[e_ref].calcIdxRef; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 93 num_prolog_steps = calcidx[cix_ref].numPrologSteps; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 94 prolog_step_ref = calcidx[cix_ref].prologStepRef; | 
| 
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 /* | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 97 * if this element is conditional, check the condition | 
| 
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 if (calcidx[cix_ref].numCondCalcs NEQ 0 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 100 AND ! ccd_conditionOK (e_ref, globs)) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 101 return 1; | 
| 
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 /* | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 104 * if this element have a defined Prolog | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 105 * we have to process it before decoding the bitstream | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 106 */ | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 107 if (num_prolog_steps) | 
| 
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 ccd_performOperations (num_prolog_steps, prolog_step_ref, globs); | 
| 
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 | 
| 
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 * if this element is repeatable, and the number of | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 114 * repeats depends on another element, calculate the repeater | 
| 
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 if (melem[e_ref].repType NEQ ' ') | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 117 { | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 118 is_variable = ccd_calculateRep (e_ref, &repeat, &max_rep, globs); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 119 } | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 120 else | 
| 
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 repeat = 1; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 123 is_variable = FALSE; | 
| 
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 /* | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 127 * setup the offset into the C-structure for this element | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 128 */ | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 129 globs->pstructOffs = melem[e_ref].structOffs; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 130 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 131 if (melem[e_ref].optional) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 132 { | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 133 /* | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 134 * for optional elements set the valid-flag | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 135 */ | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 136 globs->pstruct[globs->pstructOffs++] = (UBYTE) TRUE; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 137 } | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 138 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 139 if (is_variable) | 
| 
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 if (max_rep < 2 OR max_rep > 3) | 
| 
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 ccd_setError (globs, ERR_INVALID_TYPE, BREAK, (USHORT) (globs->bitpos), | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 144 (USHORT) -1); | 
| 
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 /* | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 147 * for variable sized elements store the min-value | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 148 * as counter into the C-Structure (c_xxx). | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 149 */ | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 150 addr_c_xxx = (UBYTE *) (globs->pstruct + globs->pstructOffs++); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 151 if (max_rep > 255) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 152 globs->pstructOffs++; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 153 } | 
| 
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 addr_c_xxx = NULL; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 156 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 157 digits = (UBYTE *) (globs->pstruct + globs->pstructOffs); | 
| 
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 bf_setBitpos ((globs->bitpos - 8), globs); | 
| 
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 /* | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 162 * read the BCD digits out of the bitstream. | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 163 * The read order is 3,X,2,1 | 
| 
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 digBuffer[2] = bf_decodeByteNumber (4, globs); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 166 bf_incBitpos (4, globs); | 
| 
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 digBuffer[1] = bf_decodeByteNumber (4, globs); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 169 digBuffer[0] = bf_decodeByteNumber (4, globs); | 
| 
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 if (addr_c_xxx NEQ NULL) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 172 { | 
| 
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 * store the number of digits into the | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 175 * c_xxx variable if there is one. | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 176 */ | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 177 repeat = (ULONG) ((digBuffer[2] EQ 0x0f) ? 2 : 3); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 178 if (max_rep > 65535) | 
| 
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 ULONG *addr_c_xxx_u32; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 181 addr_c_xxx_u32 = (ULONG *)addr_c_xxx; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 182 *addr_c_xxx_u32 = repeat; | 
| 
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 else if (max_rep > 255) | 
| 
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 USHORT *addr_c_xxx_u16; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 187 addr_c_xxx_u16 = (USHORT *)addr_c_xxx; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 188 *addr_c_xxx_u16 = (USHORT) repeat; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 189 } | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 190 else | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 191 *addr_c_xxx = (UBYTE) repeat; | 
| 
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 else | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 194 { | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 195 if (max_rep EQ 2 AND digBuffer[2] NEQ 0xf) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 196 ccd_setError (globs, ERR_PATTERN_MISMATCH, | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 197 CONTINUE, | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 198 (USHORT) (globs->bitpos-16), | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 199 (USHORT) -1); | 
| 
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 repeat = max_rep; | 
| 
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 * store the digits into the C-Structure variable | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 205 */ | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 206 for (i=0; i<repeat; i++) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 207 digits[i] = digBuffer[i]; | 
| 
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 return 1; | 
| 
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 #endif /* !RUN_INT_RAM */ | 
| 
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 #ifndef RUN_INT_RAM | 
| 
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 +--------------------------------------------------------------------+ | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 216 | PROJECT : CCD (6144) MODULE : CCD | | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 217 | STATE : code ROUTINE : cdc_bcd_mnc_encode | | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 218 +--------------------------------------------------------------------+ | 
| 
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 PURPOSE : encoding a byte array, that contains a Mobile Network Code, | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 221 into the bitstream: | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 222 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 223 MSBit LSBit | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 224 7 8 6 5 4 3 2 1 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 225 DIGIT_3 XXXXXXX Octett n-1 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 226 DIGIT_2 DIGIT_1 Octett n | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 227 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 228 The current coding position is expected after Octett n-1 | 
| 
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 | 
| 
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 SHORT cdc_bcd_mnc_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 | 233 { | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 234 ULONG repeat; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 235 UBYTE dig3; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 236 ULONG cix_ref, num_prolog_steps, prolog_step_ref; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 237 register UBYTE *digits; | 
| 
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 #ifdef DEBUG_CCD | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 240 #ifndef CCD_SYMBOLS | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 241 TRACE_CCD (globs, "cdc_bcd_mnc_encode()"); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 242 #else | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 243 TRACE_CCD (globs, "cdc_bcd_mnc_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 | 244 #endif | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 245 #endif | 
| 
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 cix_ref = melem[e_ref].calcIdxRef; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 248 num_prolog_steps = calcidx[cix_ref].numPrologSteps; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 249 prolog_step_ref = calcidx[cix_ref].prologStepRef; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 250 | 
| 
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 * if this element is conditional, check the condition | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 253 */ | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 254 if (calcidx[cix_ref].numCondCalcs NEQ 0 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 255 AND ! ccd_conditionOK (e_ref, globs)) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 256 return 1; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 257 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 258 /* | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 259 * if this element have a defined Prolog | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 260 * we have to process it before decoding the bitstream | 
| 
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 if (num_prolog_steps) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 263 { | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 264 ccd_performOperations (num_prolog_steps, prolog_step_ref, globs); | 
| 
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 | 
| 
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 * setup the offset into the C-structure for this element | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 269 */ | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 270 globs->pstructOffs = melem[e_ref].structOffs; | 
| 
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 if (melem[e_ref].optional) | 
| 
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 /* | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 275 * for optional elements check the valid-flag | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 276 */ | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 277 if (globs->pstruct[globs->pstructOffs++] == FALSE) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 278 { | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 279 return 1; | 
| 
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 #ifdef DEBUG_CCD | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 282 else if (globs->pstruct [melem[e_ref].structOffs] != TRUE) | 
| 
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 TRACE_CCD (globs, "Ambiguous value for valid flag!\n...assumed 1 for ccdID=%d", | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 285 e_ref); | 
| 
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 #endif | 
| 
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 | 
| 
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 * if this element is repeatable, and the number of | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 292 * repeats depends on another element, calculate the repeater | 
| 
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 if (melem[e_ref].repType EQ 'v' OR melem[e_ref].repType EQ 'i') | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 295 { | 
| 
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 * for variable sized elements read the amount | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 298 * of repeats out of the C-Structure (c_xxx). | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 299 * If the number of repeats given by the C-Structure | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 300 * exceeds the allowed value (max_repeat) CCD gives a warning! | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 301 */ | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 302 if (melem[e_ref].maxRepeat > 255) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 303 { | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 304 ULONG count = (ULONG) (* (USHORT *)(globs->pstruct + globs->pstructOffs++)); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 305 repeat = MINIMUM (count, (ULONG)melem[e_ref].maxRepeat); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 306 if (repeat < count) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 307 ccd_recordFault (globs, ERR_MAX_REPEAT, CONTINUE, | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 308 (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 309 } | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 310 else | 
| 
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 repeat = (ULONG) MINIMUM (globs->pstruct[globs->pstructOffs], | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 313 melem[e_ref].maxRepeat); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 314 if ( repeat < (ULONG) (globs->pstruct[globs->pstructOffs]) ) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 315 ccd_recordFault (globs, ERR_MAX_REPEAT, CONTINUE, | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 316 (USHORT) e_ref, globs->pstruct + globs->pstructOffs); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 317 } | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 318 | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 319 globs->pstructOffs++; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 320 } | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 321 else | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 322 if (melem[e_ref].repType EQ 'c') | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 323 repeat = (ULONG) melem[e_ref].maxRepeat; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 324 else | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 325 repeat = 1; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 326 | 
| 
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 * setup the read pointer to the byte array that contain | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 329 * the BCD number. | 
| 
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 digits = (UBYTE *) (globs->pstruct + globs->pstructOffs); | 
| 
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 if (repeat EQ 2) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 334 dig3 = 0x0f; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 335 else if (repeat EQ 3) | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 336 dig3 = digits[2]; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 337 else | 
| 
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 ccd_setError (globs, ERR_INVALID_TYPE, | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 340 BREAK, | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 341 (USHORT) (globs->bitpos), | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 342 (USHORT) -1); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 343 return 1; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 344 } | 
| 
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_setBitpos ((globs->bitpos-8), globs); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 347 bf_codeByteNumber (4, dig3, globs); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 348 bf_incBitpos (4, globs); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 349 bf_codeByteNumber (4, digits[1], globs); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 350 bf_codeByteNumber (4, digits[0], globs); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 351 #ifdef DEBUG_CCD | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 352 TRACE_CCD (globs, "skipping back 8 bits"); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 353 TRACE_CCD (globs, "BCD digit (%X) written", (USHORT) dig3); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 354 TRACE_CCD (globs, "skipping 4 bits"); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 355 TRACE_CCD (globs, "BCD digit (%X) written", (USHORT) digits[1]); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 356 TRACE_CCD (globs, "BCD digit (%X) written", (USHORT) digits[0]); | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 357 #endif | 
| 
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 return 1; | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 360 } | 
| 
c41a534f33c6
src/gpf3: preened GPF goo from TCS3.2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 361 #endif /* !RUN_INT_RAM */ | 
