xref: /aosp_15_r20/external/libgsm/src/gsm_decode.c (revision 8ec969cea971fe25ff2d3933a5a9f8504f8e86c9)
1*8ec969ceSTreehugger Robot /*
2*8ec969ceSTreehugger Robot  * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
3*8ec969ceSTreehugger Robot  * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
4*8ec969ceSTreehugger Robot  * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
5*8ec969ceSTreehugger Robot  */
6*8ec969ceSTreehugger Robot 
7*8ec969ceSTreehugger Robot /* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/gsm_decode.c,v 1.2 1996/07/02 09:59:05 jutta Exp $ */
8*8ec969ceSTreehugger Robot 
9*8ec969ceSTreehugger Robot #include "private.h"
10*8ec969ceSTreehugger Robot 
11*8ec969ceSTreehugger Robot #include "gsm.h"
12*8ec969ceSTreehugger Robot #include "proto.h"
13*8ec969ceSTreehugger Robot 
14*8ec969ceSTreehugger Robot int gsm_decode P3((s, c, target), gsm s, gsm_byte * c, gsm_signal * target)
15*8ec969ceSTreehugger Robot {
16*8ec969ceSTreehugger Robot 	word  	LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
17*8ec969ceSTreehugger Robot 
18*8ec969ceSTreehugger Robot #ifdef WAV49
19*8ec969ceSTreehugger Robot 	if (s->wav_fmt) {
20*8ec969ceSTreehugger Robot 
21*8ec969ceSTreehugger Robot 		uword sr = 0;
22*8ec969ceSTreehugger Robot 
23*8ec969ceSTreehugger Robot 		s->frame_index = !s->frame_index;
24*8ec969ceSTreehugger Robot 		if (s->frame_index) {
25*8ec969ceSTreehugger Robot 
26*8ec969ceSTreehugger Robot 			sr = *c++;
27*8ec969ceSTreehugger Robot 			LARc[0] = sr & 0x3f;  sr >>= 6;
28*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;
29*8ec969ceSTreehugger Robot 			LARc[1] = sr & 0x3f;  sr >>= 6;
30*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 4;
31*8ec969ceSTreehugger Robot 			LARc[2] = sr & 0x1f;  sr >>= 5;
32*8ec969ceSTreehugger Robot 			LARc[3] = sr & 0x1f;  sr >>= 5;
33*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;
34*8ec969ceSTreehugger Robot 			LARc[4] = sr & 0xf;  sr >>= 4;
35*8ec969ceSTreehugger Robot 			LARc[5] = sr & 0xf;  sr >>= 4;
36*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;			/* 5 */
37*8ec969ceSTreehugger Robot 			LARc[6] = sr & 0x7;  sr >>= 3;
38*8ec969ceSTreehugger Robot 			LARc[7] = sr & 0x7;  sr >>= 3;
39*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 4;
40*8ec969ceSTreehugger Robot 			Nc[0] = sr & 0x7f;  sr >>= 7;
41*8ec969ceSTreehugger Robot 			bc[0] = sr & 0x3;  sr >>= 2;
42*8ec969ceSTreehugger Robot 			Mc[0] = sr & 0x3;  sr >>= 2;
43*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
44*8ec969ceSTreehugger Robot 			xmaxc[0] = sr & 0x3f;  sr >>= 6;
45*8ec969ceSTreehugger Robot 			xmc[0] = sr & 0x7;  sr >>= 3;
46*8ec969ceSTreehugger Robot 			sr = *c++;
47*8ec969ceSTreehugger Robot 			xmc[1] = sr & 0x7;  sr >>= 3;
48*8ec969ceSTreehugger Robot 			xmc[2] = sr & 0x7;  sr >>= 3;
49*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;
50*8ec969ceSTreehugger Robot 			xmc[3] = sr & 0x7;  sr >>= 3;
51*8ec969ceSTreehugger Robot 			xmc[4] = sr & 0x7;  sr >>= 3;
52*8ec969ceSTreehugger Robot 			xmc[5] = sr & 0x7;  sr >>= 3;
53*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;			/* 10 */
54*8ec969ceSTreehugger Robot 			xmc[6] = sr & 0x7;  sr >>= 3;
55*8ec969ceSTreehugger Robot 			xmc[7] = sr & 0x7;  sr >>= 3;
56*8ec969ceSTreehugger Robot 			xmc[8] = sr & 0x7;  sr >>= 3;
57*8ec969ceSTreehugger Robot 			sr = *c++;
58*8ec969ceSTreehugger Robot 			xmc[9] = sr & 0x7;  sr >>= 3;
59*8ec969ceSTreehugger Robot 			xmc[10] = sr & 0x7;  sr >>= 3;
60*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;
61*8ec969ceSTreehugger Robot 			xmc[11] = sr & 0x7;  sr >>= 3;
62*8ec969ceSTreehugger Robot 			xmc[12] = sr & 0x7;  sr >>= 3;
63*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 4;
64*8ec969ceSTreehugger Robot 			Nc[1] = sr & 0x7f;  sr >>= 7;
65*8ec969ceSTreehugger Robot 			bc[1] = sr & 0x3;  sr >>= 2;
66*8ec969ceSTreehugger Robot 			Mc[1] = sr & 0x3;  sr >>= 2;
67*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
68*8ec969ceSTreehugger Robot 			xmaxc[1] = sr & 0x3f;  sr >>= 6;
69*8ec969ceSTreehugger Robot 			xmc[13] = sr & 0x7;  sr >>= 3;
70*8ec969ceSTreehugger Robot 			sr = *c++;				/* 15 */
71*8ec969ceSTreehugger Robot 			xmc[14] = sr & 0x7;  sr >>= 3;
72*8ec969ceSTreehugger Robot 			xmc[15] = sr & 0x7;  sr >>= 3;
73*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;
74*8ec969ceSTreehugger Robot 			xmc[16] = sr & 0x7;  sr >>= 3;
75*8ec969ceSTreehugger Robot 			xmc[17] = sr & 0x7;  sr >>= 3;
76*8ec969ceSTreehugger Robot 			xmc[18] = sr & 0x7;  sr >>= 3;
77*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
78*8ec969ceSTreehugger Robot 			xmc[19] = sr & 0x7;  sr >>= 3;
79*8ec969ceSTreehugger Robot 			xmc[20] = sr & 0x7;  sr >>= 3;
80*8ec969ceSTreehugger Robot 			xmc[21] = sr & 0x7;  sr >>= 3;
81*8ec969ceSTreehugger Robot 			sr = *c++;
82*8ec969ceSTreehugger Robot 			xmc[22] = sr & 0x7;  sr >>= 3;
83*8ec969ceSTreehugger Robot 			xmc[23] = sr & 0x7;  sr >>= 3;
84*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;
85*8ec969ceSTreehugger Robot 			xmc[24] = sr & 0x7;  sr >>= 3;
86*8ec969ceSTreehugger Robot 			xmc[25] = sr & 0x7;  sr >>= 3;
87*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 4;			/* 20 */
88*8ec969ceSTreehugger Robot 			Nc[2] = sr & 0x7f;  sr >>= 7;
89*8ec969ceSTreehugger Robot 			bc[2] = sr & 0x3;  sr >>= 2;
90*8ec969ceSTreehugger Robot 			Mc[2] = sr & 0x3;  sr >>= 2;
91*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
92*8ec969ceSTreehugger Robot 			xmaxc[2] = sr & 0x3f;  sr >>= 6;
93*8ec969ceSTreehugger Robot 			xmc[26] = sr & 0x7;  sr >>= 3;
94*8ec969ceSTreehugger Robot 			sr = *c++;
95*8ec969ceSTreehugger Robot 			xmc[27] = sr & 0x7;  sr >>= 3;
96*8ec969ceSTreehugger Robot 			xmc[28] = sr & 0x7;  sr >>= 3;
97*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;
98*8ec969ceSTreehugger Robot 			xmc[29] = sr & 0x7;  sr >>= 3;
99*8ec969ceSTreehugger Robot 			xmc[30] = sr & 0x7;  sr >>= 3;
100*8ec969ceSTreehugger Robot 			xmc[31] = sr & 0x7;  sr >>= 3;
101*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
102*8ec969ceSTreehugger Robot 			xmc[32] = sr & 0x7;  sr >>= 3;
103*8ec969ceSTreehugger Robot 			xmc[33] = sr & 0x7;  sr >>= 3;
104*8ec969ceSTreehugger Robot 			xmc[34] = sr & 0x7;  sr >>= 3;
105*8ec969ceSTreehugger Robot 			sr = *c++;				/* 25 */
106*8ec969ceSTreehugger Robot 			xmc[35] = sr & 0x7;  sr >>= 3;
107*8ec969ceSTreehugger Robot 			xmc[36] = sr & 0x7;  sr >>= 3;
108*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;
109*8ec969ceSTreehugger Robot 			xmc[37] = sr & 0x7;  sr >>= 3;
110*8ec969ceSTreehugger Robot 			xmc[38] = sr & 0x7;  sr >>= 3;
111*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 4;
112*8ec969ceSTreehugger Robot 			Nc[3] = sr & 0x7f;  sr >>= 7;
113*8ec969ceSTreehugger Robot 			bc[3] = sr & 0x3;  sr >>= 2;
114*8ec969ceSTreehugger Robot 			Mc[3] = sr & 0x3;  sr >>= 2;
115*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
116*8ec969ceSTreehugger Robot 			xmaxc[3] = sr & 0x3f;  sr >>= 6;
117*8ec969ceSTreehugger Robot 			xmc[39] = sr & 0x7;  sr >>= 3;
118*8ec969ceSTreehugger Robot 			sr = *c++;
119*8ec969ceSTreehugger Robot 			xmc[40] = sr & 0x7;  sr >>= 3;
120*8ec969ceSTreehugger Robot 			xmc[41] = sr & 0x7;  sr >>= 3;
121*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;			/* 30 */
122*8ec969ceSTreehugger Robot 			xmc[42] = sr & 0x7;  sr >>= 3;
123*8ec969ceSTreehugger Robot 			xmc[43] = sr & 0x7;  sr >>= 3;
124*8ec969ceSTreehugger Robot 			xmc[44] = sr & 0x7;  sr >>= 3;
125*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
126*8ec969ceSTreehugger Robot 			xmc[45] = sr & 0x7;  sr >>= 3;
127*8ec969ceSTreehugger Robot 			xmc[46] = sr & 0x7;  sr >>= 3;
128*8ec969ceSTreehugger Robot 			xmc[47] = sr & 0x7;  sr >>= 3;
129*8ec969ceSTreehugger Robot 			sr = *c++;
130*8ec969ceSTreehugger Robot 			xmc[48] = sr & 0x7;  sr >>= 3;
131*8ec969ceSTreehugger Robot 			xmc[49] = sr & 0x7;  sr >>= 3;
132*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;
133*8ec969ceSTreehugger Robot 			xmc[50] = sr & 0x7;  sr >>= 3;
134*8ec969ceSTreehugger Robot 			xmc[51] = sr & 0x7;  sr >>= 3;
135*8ec969ceSTreehugger Robot 
136*8ec969ceSTreehugger Robot 			s->frame_chain = sr & 0xf;
137*8ec969ceSTreehugger Robot 		}
138*8ec969ceSTreehugger Robot 		else {
139*8ec969ceSTreehugger Robot 			sr = s->frame_chain;
140*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 4;			/* 1 */
141*8ec969ceSTreehugger Robot 			LARc[0] = sr & 0x3f;  sr >>= 6;
142*8ec969ceSTreehugger Robot 			LARc[1] = sr & 0x3f;  sr >>= 6;
143*8ec969ceSTreehugger Robot 			sr = *c++;
144*8ec969ceSTreehugger Robot 			LARc[2] = sr & 0x1f;  sr >>= 5;
145*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 3;
146*8ec969ceSTreehugger Robot 			LARc[3] = sr & 0x1f;  sr >>= 5;
147*8ec969ceSTreehugger Robot 			LARc[4] = sr & 0xf;  sr >>= 4;
148*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;
149*8ec969ceSTreehugger Robot 			LARc[5] = sr & 0xf;  sr >>= 4;
150*8ec969ceSTreehugger Robot 			LARc[6] = sr & 0x7;  sr >>= 3;
151*8ec969ceSTreehugger Robot 			LARc[7] = sr & 0x7;  sr >>= 3;
152*8ec969ceSTreehugger Robot 			sr = *c++;				/* 5 */
153*8ec969ceSTreehugger Robot 			Nc[0] = sr & 0x7f;  sr >>= 7;
154*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
155*8ec969ceSTreehugger Robot 			bc[0] = sr & 0x3;  sr >>= 2;
156*8ec969ceSTreehugger Robot 			Mc[0] = sr & 0x3;  sr >>= 2;
157*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 5;
158*8ec969ceSTreehugger Robot 			xmaxc[0] = sr & 0x3f;  sr >>= 6;
159*8ec969ceSTreehugger Robot 			xmc[0] = sr & 0x7;  sr >>= 3;
160*8ec969ceSTreehugger Robot 			xmc[1] = sr & 0x7;  sr >>= 3;
161*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
162*8ec969ceSTreehugger Robot 			xmc[2] = sr & 0x7;  sr >>= 3;
163*8ec969ceSTreehugger Robot 			xmc[3] = sr & 0x7;  sr >>= 3;
164*8ec969ceSTreehugger Robot 			xmc[4] = sr & 0x7;  sr >>= 3;
165*8ec969ceSTreehugger Robot 			sr = *c++;
166*8ec969ceSTreehugger Robot 			xmc[5] = sr & 0x7;  sr >>= 3;
167*8ec969ceSTreehugger Robot 			xmc[6] = sr & 0x7;  sr >>= 3;
168*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;			/* 10 */
169*8ec969ceSTreehugger Robot 			xmc[7] = sr & 0x7;  sr >>= 3;
170*8ec969ceSTreehugger Robot 			xmc[8] = sr & 0x7;  sr >>= 3;
171*8ec969ceSTreehugger Robot 			xmc[9] = sr & 0x7;  sr >>= 3;
172*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
173*8ec969ceSTreehugger Robot 			xmc[10] = sr & 0x7;  sr >>= 3;
174*8ec969ceSTreehugger Robot 			xmc[11] = sr & 0x7;  sr >>= 3;
175*8ec969ceSTreehugger Robot 			xmc[12] = sr & 0x7;  sr >>= 3;
176*8ec969ceSTreehugger Robot 			sr = *c++;
177*8ec969ceSTreehugger Robot 			Nc[1] = sr & 0x7f;  sr >>= 7;
178*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
179*8ec969ceSTreehugger Robot 			bc[1] = sr & 0x3;  sr >>= 2;
180*8ec969ceSTreehugger Robot 			Mc[1] = sr & 0x3;  sr >>= 2;
181*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 5;
182*8ec969ceSTreehugger Robot 			xmaxc[1] = sr & 0x3f;  sr >>= 6;
183*8ec969ceSTreehugger Robot 			xmc[13] = sr & 0x7;  sr >>= 3;
184*8ec969ceSTreehugger Robot 			xmc[14] = sr & 0x7;  sr >>= 3;
185*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;			/* 15 */
186*8ec969ceSTreehugger Robot 			xmc[15] = sr & 0x7;  sr >>= 3;
187*8ec969ceSTreehugger Robot 			xmc[16] = sr & 0x7;  sr >>= 3;
188*8ec969ceSTreehugger Robot 			xmc[17] = sr & 0x7;  sr >>= 3;
189*8ec969ceSTreehugger Robot 			sr = *c++;
190*8ec969ceSTreehugger Robot 			xmc[18] = sr & 0x7;  sr >>= 3;
191*8ec969ceSTreehugger Robot 			xmc[19] = sr & 0x7;  sr >>= 3;
192*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;
193*8ec969ceSTreehugger Robot 			xmc[20] = sr & 0x7;  sr >>= 3;
194*8ec969ceSTreehugger Robot 			xmc[21] = sr & 0x7;  sr >>= 3;
195*8ec969ceSTreehugger Robot 			xmc[22] = sr & 0x7;  sr >>= 3;
196*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
197*8ec969ceSTreehugger Robot 			xmc[23] = sr & 0x7;  sr >>= 3;
198*8ec969ceSTreehugger Robot 			xmc[24] = sr & 0x7;  sr >>= 3;
199*8ec969ceSTreehugger Robot 			xmc[25] = sr & 0x7;  sr >>= 3;
200*8ec969ceSTreehugger Robot 			sr = *c++;
201*8ec969ceSTreehugger Robot 			Nc[2] = sr & 0x7f;  sr >>= 7;
202*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;			/* 20 */
203*8ec969ceSTreehugger Robot 			bc[2] = sr & 0x3;  sr >>= 2;
204*8ec969ceSTreehugger Robot 			Mc[2] = sr & 0x3;  sr >>= 2;
205*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 5;
206*8ec969ceSTreehugger Robot 			xmaxc[2] = sr & 0x3f;  sr >>= 6;
207*8ec969ceSTreehugger Robot 			xmc[26] = sr & 0x7;  sr >>= 3;
208*8ec969ceSTreehugger Robot 			xmc[27] = sr & 0x7;  sr >>= 3;
209*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
210*8ec969ceSTreehugger Robot 			xmc[28] = sr & 0x7;  sr >>= 3;
211*8ec969ceSTreehugger Robot 			xmc[29] = sr & 0x7;  sr >>= 3;
212*8ec969ceSTreehugger Robot 			xmc[30] = sr & 0x7;  sr >>= 3;
213*8ec969ceSTreehugger Robot 			sr = *c++;
214*8ec969ceSTreehugger Robot 			xmc[31] = sr & 0x7;  sr >>= 3;
215*8ec969ceSTreehugger Robot 			xmc[32] = sr & 0x7;  sr >>= 3;
216*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;
217*8ec969ceSTreehugger Robot 			xmc[33] = sr & 0x7;  sr >>= 3;
218*8ec969ceSTreehugger Robot 			xmc[34] = sr & 0x7;  sr >>= 3;
219*8ec969ceSTreehugger Robot 			xmc[35] = sr & 0x7;  sr >>= 3;
220*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;			/* 25 */
221*8ec969ceSTreehugger Robot 			xmc[36] = sr & 0x7;  sr >>= 3;
222*8ec969ceSTreehugger Robot 			xmc[37] = sr & 0x7;  sr >>= 3;
223*8ec969ceSTreehugger Robot 			xmc[38] = sr & 0x7;  sr >>= 3;
224*8ec969ceSTreehugger Robot 			sr = *c++;
225*8ec969ceSTreehugger Robot 			Nc[3] = sr & 0x7f;  sr >>= 7;
226*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
227*8ec969ceSTreehugger Robot 			bc[3] = sr & 0x3;  sr >>= 2;
228*8ec969ceSTreehugger Robot 			Mc[3] = sr & 0x3;  sr >>= 2;
229*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 5;
230*8ec969ceSTreehugger Robot 			xmaxc[3] = sr & 0x3f;  sr >>= 6;
231*8ec969ceSTreehugger Robot 			xmc[39] = sr & 0x7;  sr >>= 3;
232*8ec969ceSTreehugger Robot 			xmc[40] = sr & 0x7;  sr >>= 3;
233*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
234*8ec969ceSTreehugger Robot 			xmc[41] = sr & 0x7;  sr >>= 3;
235*8ec969ceSTreehugger Robot 			xmc[42] = sr & 0x7;  sr >>= 3;
236*8ec969ceSTreehugger Robot 			xmc[43] = sr & 0x7;  sr >>= 3;
237*8ec969ceSTreehugger Robot 			sr = *c++;				/* 30 */
238*8ec969ceSTreehugger Robot 			xmc[44] = sr & 0x7;  sr >>= 3;
239*8ec969ceSTreehugger Robot 			xmc[45] = sr & 0x7;  sr >>= 3;
240*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 2;
241*8ec969ceSTreehugger Robot 			xmc[46] = sr & 0x7;  sr >>= 3;
242*8ec969ceSTreehugger Robot 			xmc[47] = sr & 0x7;  sr >>= 3;
243*8ec969ceSTreehugger Robot 			xmc[48] = sr & 0x7;  sr >>= 3;
244*8ec969ceSTreehugger Robot 			sr |= (uword)*c++ << 1;
245*8ec969ceSTreehugger Robot 			xmc[49] = sr & 0x7;  sr >>= 3;
246*8ec969ceSTreehugger Robot 			xmc[50] = sr & 0x7;  sr >>= 3;
247*8ec969ceSTreehugger Robot 			xmc[51] = sr & 0x7;  sr >>= 3;
248*8ec969ceSTreehugger Robot 		}
249*8ec969ceSTreehugger Robot 	}
250*8ec969ceSTreehugger Robot 	else
251*8ec969ceSTreehugger Robot #endif
252*8ec969ceSTreehugger Robot 	{
253*8ec969ceSTreehugger Robot 		/* GSM_MAGIC  = (*c >> 4) & 0xF; */
254*8ec969ceSTreehugger Robot 
255*8ec969ceSTreehugger Robot 		if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1;
256*8ec969ceSTreehugger Robot 
257*8ec969ceSTreehugger Robot 		LARc[0]  = (*c++ & 0xF) << 2;		/* 1 */
258*8ec969ceSTreehugger Robot 		LARc[0] |= (*c >> 6) & 0x3;
259*8ec969ceSTreehugger Robot 		LARc[1]  = *c++ & 0x3F;
260*8ec969ceSTreehugger Robot 		LARc[2]  = (*c >> 3) & 0x1F;
261*8ec969ceSTreehugger Robot 		LARc[3]  = (*c++ & 0x7) << 2;
262*8ec969ceSTreehugger Robot 		LARc[3] |= (*c >> 6) & 0x3;
263*8ec969ceSTreehugger Robot 		LARc[4]  = (*c >> 2) & 0xF;
264*8ec969ceSTreehugger Robot 		LARc[5]  = (*c++ & 0x3) << 2;
265*8ec969ceSTreehugger Robot 		LARc[5] |= (*c >> 6) & 0x3;
266*8ec969ceSTreehugger Robot 		LARc[6]  = (*c >> 3) & 0x7;
267*8ec969ceSTreehugger Robot 		LARc[7]  = *c++ & 0x7;
268*8ec969ceSTreehugger Robot 		Nc[0]  = (*c >> 1) & 0x7F;
269*8ec969ceSTreehugger Robot 		bc[0]  = (*c++ & 0x1) << 1;
270*8ec969ceSTreehugger Robot 		bc[0] |= (*c >> 7) & 0x1;
271*8ec969ceSTreehugger Robot 		Mc[0]  = (*c >> 5) & 0x3;
272*8ec969ceSTreehugger Robot 		xmaxc[0]  = (*c++ & 0x1F) << 1;
273*8ec969ceSTreehugger Robot 		xmaxc[0] |= (*c >> 7) & 0x1;
274*8ec969ceSTreehugger Robot 		xmc[0]  = (*c >> 4) & 0x7;
275*8ec969ceSTreehugger Robot 		xmc[1]  = (*c >> 1) & 0x7;
276*8ec969ceSTreehugger Robot 		xmc[2]  = (*c++ & 0x1) << 2;
277*8ec969ceSTreehugger Robot 		xmc[2] |= (*c >> 6) & 0x3;
278*8ec969ceSTreehugger Robot 		xmc[3]  = (*c >> 3) & 0x7;
279*8ec969ceSTreehugger Robot 		xmc[4]  = *c++ & 0x7;
280*8ec969ceSTreehugger Robot 		xmc[5]  = (*c >> 5) & 0x7;
281*8ec969ceSTreehugger Robot 		xmc[6]  = (*c >> 2) & 0x7;
282*8ec969ceSTreehugger Robot 		xmc[7]  = (*c++ & 0x3) << 1;		/* 10 */
283*8ec969ceSTreehugger Robot 		xmc[7] |= (*c >> 7) & 0x1;
284*8ec969ceSTreehugger Robot 		xmc[8]  = (*c >> 4) & 0x7;
285*8ec969ceSTreehugger Robot 		xmc[9]  = (*c >> 1) & 0x7;
286*8ec969ceSTreehugger Robot 		xmc[10]  = (*c++ & 0x1) << 2;
287*8ec969ceSTreehugger Robot 		xmc[10] |= (*c >> 6) & 0x3;
288*8ec969ceSTreehugger Robot 		xmc[11]  = (*c >> 3) & 0x7;
289*8ec969ceSTreehugger Robot 		xmc[12]  = *c++ & 0x7;
290*8ec969ceSTreehugger Robot 		Nc[1]  = (*c >> 1) & 0x7F;
291*8ec969ceSTreehugger Robot 		bc[1]  = (*c++ & 0x1) << 1;
292*8ec969ceSTreehugger Robot 		bc[1] |= (*c >> 7) & 0x1;
293*8ec969ceSTreehugger Robot 		Mc[1]  = (*c >> 5) & 0x3;
294*8ec969ceSTreehugger Robot 		xmaxc[1]  = (*c++ & 0x1F) << 1;
295*8ec969ceSTreehugger Robot 		xmaxc[1] |= (*c >> 7) & 0x1;
296*8ec969ceSTreehugger Robot 		xmc[13]  = (*c >> 4) & 0x7;
297*8ec969ceSTreehugger Robot 		xmc[14]  = (*c >> 1) & 0x7;
298*8ec969ceSTreehugger Robot 		xmc[15]  = (*c++ & 0x1) << 2;
299*8ec969ceSTreehugger Robot 		xmc[15] |= (*c >> 6) & 0x3;
300*8ec969ceSTreehugger Robot 		xmc[16]  = (*c >> 3) & 0x7;
301*8ec969ceSTreehugger Robot 		xmc[17]  = *c++ & 0x7;
302*8ec969ceSTreehugger Robot 		xmc[18]  = (*c >> 5) & 0x7;
303*8ec969ceSTreehugger Robot 		xmc[19]  = (*c >> 2) & 0x7;
304*8ec969ceSTreehugger Robot 		xmc[20]  = (*c++ & 0x3) << 1;
305*8ec969ceSTreehugger Robot 		xmc[20] |= (*c >> 7) & 0x1;
306*8ec969ceSTreehugger Robot 		xmc[21]  = (*c >> 4) & 0x7;
307*8ec969ceSTreehugger Robot 		xmc[22]  = (*c >> 1) & 0x7;
308*8ec969ceSTreehugger Robot 		xmc[23]  = (*c++ & 0x1) << 2;
309*8ec969ceSTreehugger Robot 		xmc[23] |= (*c >> 6) & 0x3;
310*8ec969ceSTreehugger Robot 		xmc[24]  = (*c >> 3) & 0x7;
311*8ec969ceSTreehugger Robot 		xmc[25]  = *c++ & 0x7;
312*8ec969ceSTreehugger Robot 		Nc[2]  = (*c >> 1) & 0x7F;
313*8ec969ceSTreehugger Robot 		bc[2]  = (*c++ & 0x1) << 1;		/* 20 */
314*8ec969ceSTreehugger Robot 		bc[2] |= (*c >> 7) & 0x1;
315*8ec969ceSTreehugger Robot 		Mc[2]  = (*c >> 5) & 0x3;
316*8ec969ceSTreehugger Robot 		xmaxc[2]  = (*c++ & 0x1F) << 1;
317*8ec969ceSTreehugger Robot 		xmaxc[2] |= (*c >> 7) & 0x1;
318*8ec969ceSTreehugger Robot 		xmc[26]  = (*c >> 4) & 0x7;
319*8ec969ceSTreehugger Robot 		xmc[27]  = (*c >> 1) & 0x7;
320*8ec969ceSTreehugger Robot 		xmc[28]  = (*c++ & 0x1) << 2;
321*8ec969ceSTreehugger Robot 		xmc[28] |= (*c >> 6) & 0x3;
322*8ec969ceSTreehugger Robot 		xmc[29]  = (*c >> 3) & 0x7;
323*8ec969ceSTreehugger Robot 		xmc[30]  = *c++ & 0x7;
324*8ec969ceSTreehugger Robot 		xmc[31]  = (*c >> 5) & 0x7;
325*8ec969ceSTreehugger Robot 		xmc[32]  = (*c >> 2) & 0x7;
326*8ec969ceSTreehugger Robot 		xmc[33]  = (*c++ & 0x3) << 1;
327*8ec969ceSTreehugger Robot 		xmc[33] |= (*c >> 7) & 0x1;
328*8ec969ceSTreehugger Robot 		xmc[34]  = (*c >> 4) & 0x7;
329*8ec969ceSTreehugger Robot 		xmc[35]  = (*c >> 1) & 0x7;
330*8ec969ceSTreehugger Robot 		xmc[36]  = (*c++ & 0x1) << 2;
331*8ec969ceSTreehugger Robot 		xmc[36] |= (*c >> 6) & 0x3;
332*8ec969ceSTreehugger Robot 		xmc[37]  = (*c >> 3) & 0x7;
333*8ec969ceSTreehugger Robot 		xmc[38]  = *c++ & 0x7;
334*8ec969ceSTreehugger Robot 		Nc[3]  = (*c >> 1) & 0x7F;
335*8ec969ceSTreehugger Robot 		bc[3]  = (*c++ & 0x1) << 1;
336*8ec969ceSTreehugger Robot 		bc[3] |= (*c >> 7) & 0x1;
337*8ec969ceSTreehugger Robot 		Mc[3]  = (*c >> 5) & 0x3;
338*8ec969ceSTreehugger Robot 		xmaxc[3]  = (*c++ & 0x1F) << 1;
339*8ec969ceSTreehugger Robot 		xmaxc[3] |= (*c >> 7) & 0x1;
340*8ec969ceSTreehugger Robot 		xmc[39]  = (*c >> 4) & 0x7;
341*8ec969ceSTreehugger Robot 		xmc[40]  = (*c >> 1) & 0x7;
342*8ec969ceSTreehugger Robot 		xmc[41]  = (*c++ & 0x1) << 2;
343*8ec969ceSTreehugger Robot 		xmc[41] |= (*c >> 6) & 0x3;
344*8ec969ceSTreehugger Robot 		xmc[42]  = (*c >> 3) & 0x7;
345*8ec969ceSTreehugger Robot 		xmc[43]  = *c++ & 0x7;			/* 30  */
346*8ec969ceSTreehugger Robot 		xmc[44]  = (*c >> 5) & 0x7;
347*8ec969ceSTreehugger Robot 		xmc[45]  = (*c >> 2) & 0x7;
348*8ec969ceSTreehugger Robot 		xmc[46]  = (*c++ & 0x3) << 1;
349*8ec969ceSTreehugger Robot 		xmc[46] |= (*c >> 7) & 0x1;
350*8ec969ceSTreehugger Robot 		xmc[47]  = (*c >> 4) & 0x7;
351*8ec969ceSTreehugger Robot 		xmc[48]  = (*c >> 1) & 0x7;
352*8ec969ceSTreehugger Robot 		xmc[49]  = (*c++ & 0x1) << 2;
353*8ec969ceSTreehugger Robot 		xmc[49] |= (*c >> 6) & 0x3;
354*8ec969ceSTreehugger Robot 		xmc[50]  = (*c >> 3) & 0x7;
355*8ec969ceSTreehugger Robot 		xmc[51]  = *c & 0x7;			/* 33 */
356*8ec969ceSTreehugger Robot 	}
357*8ec969ceSTreehugger Robot 
358*8ec969ceSTreehugger Robot 	Gsm_Decoder(s, LARc, Nc, bc, Mc, xmaxc, xmc, target);
359*8ec969ceSTreehugger Robot 
360*8ec969ceSTreehugger Robot 	return 0;
361*8ec969ceSTreehugger Robot }
362