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