~ubuntu-branches/ubuntu/wily/sflphone/wily

« back to all changes in this revision

Viewing changes to daemon/libs/pjproject-2.0.1/third_party/gsm/src/gsm_decode.c

  • Committer: Package Import Robot
  • Author(s): Mark Purcell
  • Date: 2014-01-28 18:23:36 UTC
  • mfrom: (1.1.11)
  • mto: This revision was merged to the branch mainline in revision 24.
  • Revision ID: package-import@ubuntu.com-20140128182336-3xenud1kbnwmf3mz
* New upstream release 
  - Fixes "New Upstream Release" (Closes: #735846)
  - Fixes "Ringtone does not stop" (Closes: #727164)
  - Fixes "[sflphone-kde] crash on startup" (Closes: #718178)
  - Fixes "sflphone GUI crashes when call is hung up" (Closes: #736583)
* Build-Depends: ensure GnuTLS 2.6
  - libucommon-dev (>= 6.0.7-1.1), libccrtp-dev (>= 2.0.6-3)
  - Fixes "FTBFS Build-Depends libgnutls{26,28}-dev" (Closes: #722040)
* Fix "boost 1.49 is going away" unversioned Build-Depends: (Closes: #736746)
* Add Build-Depends: libsndfile-dev, nepomuk-core-dev

Show diffs side-by-side

added added

removed removed

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