jni/gsm/gsm_implode.c
changeset 823 2036ebfaccda
equal deleted inserted replaced
536:537ddd8aa407 823:2036ebfaccda
       
     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_implode.c,v 1.2 1996/07/02 14:32:43 jutta Exp jutta $ */
       
     8 
       
     9 #include "private.h"
       
    10 
       
    11 #include "gsm.h"
       
    12 #include "proto.h"
       
    13 
       
    14 void gsm_implode P3((s, source, c), gsm s, gsm_signal * source, gsm_byte * c)
       
    15 {
       
    16 	/*	variable	size	index
       
    17 
       
    18 		GSM_MAGIC	4	-
       
    19 
       
    20 		LARc[0]		6	0
       
    21 		LARc[1]		6	1
       
    22 		LARc[2]		5	2
       
    23 		LARc[3]		5	3
       
    24 		LARc[4]		4	4
       
    25 		LARc[5]		4	5
       
    26 		LARc[6]		3	6
       
    27 		LARc[7]		3	7
       
    28 
       
    29 		Nc[0]		7	8
       
    30 		bc[0]		2	9
       
    31 		Mc[0]		2	10
       
    32 		xmaxc[0]	6	11
       
    33 		xmc[0]		3	12
       
    34 		xmc[1]		3	13
       
    35 		xmc[2]		3	14
       
    36 		xmc[3]		3	15
       
    37 		xmc[4]		3	16
       
    38 		xmc[5]		3	17
       
    39 		xmc[6]		3	18
       
    40 		xmc[7]		3	19
       
    41 		xmc[8]		3	20
       
    42 		xmc[9]		3	21
       
    43 		xmc[10]		3	22
       
    44 		xmc[11]		3	23
       
    45 		xmc[12]		3	24
       
    46 
       
    47 		Nc[1]		7	25
       
    48 		bc[1]		2	26
       
    49 		Mc[1]		2	27
       
    50 		xmaxc[1]	6	28
       
    51 		xmc[13]		3	29
       
    52 		xmc[14]		3	30
       
    53 		xmc[15]		3	31
       
    54 		xmc[16]		3	32
       
    55 		xmc[17]		3	33
       
    56 		xmc[18]		3	34
       
    57 		xmc[19]		3	35
       
    58 		xmc[20]		3	36
       
    59 		xmc[21]		3	37
       
    60 		xmc[22]		3	38
       
    61 		xmc[23]		3	39
       
    62 		xmc[24]		3	40
       
    63 		xmc[25]		3	41
       
    64 
       
    65 		Nc[2]		7	42
       
    66 		bc[2]		2	43
       
    67 		Mc[2]		2	44
       
    68 		xmaxc[2]	6	45
       
    69 		xmc[26]		3	46
       
    70 		xmc[27]		3	47
       
    71 		xmc[28]		3	48
       
    72 		xmc[29]		3	49
       
    73 		xmc[30]		3	50
       
    74 		xmc[31]		3	51
       
    75 		xmc[32]		3	52
       
    76 		xmc[33]		3	53
       
    77 		xmc[34]		3	54
       
    78 		xmc[35]		3	55
       
    79 		xmc[36]		3	56
       
    80 		xmc[37]		3	57
       
    81 		xmc[38]		3	58
       
    82 
       
    83 		Nc[3]		7	59
       
    84 		bc[3]		2	60
       
    85 		Mc[3]		2	61
       
    86 		xmaxc[3]	6	62
       
    87 		xmc[39]		3	63
       
    88 		xmc[40]		3	64
       
    89 		xmc[41]		3	65
       
    90 		xmc[42]		3	66
       
    91 		xmc[43]		3	67
       
    92 		xmc[44]		3	68
       
    93 		xmc[45]		3	69
       
    94 		xmc[46]		3	70
       
    95 		xmc[47]		3	71
       
    96 		xmc[48]		3	72
       
    97 		xmc[49]		3	73
       
    98 		xmc[50]		3	74
       
    99 		xmc[51]		3	75
       
   100 	*/
       
   101 
       
   102 	/*	There are 76 parameters per frame.  The first eight are
       
   103 	 * 	unique.  The remaining 68 are four identical subframes of
       
   104 	 * 	17 parameters each.  gsm_implode converts from a representation
       
   105 	 * 	of these parameters as values in one array of signed words
       
   106 	 * 	to the "packed" version of a GSM frame.
       
   107 	 */
       
   108 
       
   109 #	define	LARc	source
       
   110 #	define	Nc	*((gsm_signal (*) [17])(source + 8))
       
   111 #	define	bc	*((gsm_signal (*) [17])(source + 9))
       
   112 #	define	Mc	*((gsm_signal (*) [17])(source + 10))
       
   113 #	define	xmaxc	*((gsm_signal (*) [17])(source + 11))
       
   114 
       
   115 // Wirlab
       
   116 	(void)s;
       
   117 
       
   118 #ifdef WAV49
       
   119 	if (s->wav_fmt) {
       
   120 
       
   121 		uword sr = 0;
       
   122 		if (s->frame_index == 0) {
       
   123 
       
   124 			sr = *c++;
       
   125 			LARc[0] = sr & 0x3f;  sr >>= 6;
       
   126 			sr |= (uword)*c++ << 2;
       
   127 			LARc[1] = sr & 0x3f;  sr >>= 6;
       
   128 			sr |= (uword)*c++ << 4;
       
   129 			LARc[2] = sr & 0x1f;  sr >>= 5;
       
   130 			LARc[3] = sr & 0x1f;  sr >>= 5;
       
   131 			sr |= (uword)*c++ << 2;
       
   132 			LARc[4] = sr & 0xf;  sr >>= 4;
       
   133 			LARc[5] = sr & 0xf;  sr >>= 4;
       
   134 			sr |= (uword)*c++ << 2;			/* 5 */
       
   135 			LARc[6] = sr & 0x7;  sr >>= 3;
       
   136 			LARc[7] = sr & 0x7;  sr >>= 3;
       
   137 			sr |= (uword)*c++ << 4;
       
   138 			Nc[0] = sr & 0x7f;  sr >>= 7;
       
   139 			bc[0] = sr & 0x3;  sr >>= 2;
       
   140 			Mc[0] = sr & 0x3;  sr >>= 2;
       
   141 			sr |= (uword)*c++ << 1;
       
   142 			xmaxc[0] = sr & 0x3f;  sr >>= 6;
       
   143 #undef	xmc
       
   144 #define	xmc	(source + 12)
       
   145 			xmc[0] = sr & 0x7;  sr >>= 3;
       
   146 			sr = *c++;
       
   147 			xmc[1] = sr & 0x7;  sr >>= 3;
       
   148 			xmc[2] = sr & 0x7;  sr >>= 3;
       
   149 			sr |= (uword)*c++ << 2;
       
   150 			xmc[3] = sr & 0x7;  sr >>= 3;
       
   151 			xmc[4] = sr & 0x7;  sr >>= 3;
       
   152 			xmc[5] = sr & 0x7;  sr >>= 3;
       
   153 			sr |= (uword)*c++ << 1;			/* 10 */
       
   154 			xmc[6] = sr & 0x7;  sr >>= 3;
       
   155 			xmc[7] = sr & 0x7;  sr >>= 3;
       
   156 			xmc[8] = sr & 0x7;  sr >>= 3;
       
   157 			sr = *c++;
       
   158 			xmc[9] = sr & 0x7;  sr >>= 3;
       
   159 			xmc[10] = sr & 0x7;  sr >>= 3;
       
   160 			sr |= (uword)*c++ << 2;
       
   161 			xmc[11] = sr & 0x7;  sr >>= 3;
       
   162 			xmc[12] = sr & 0x7;  sr >>= 3;
       
   163 			sr |= (uword)*c++ << 4;
       
   164 			Nc[1] = sr & 0x7f;  sr >>= 7;
       
   165 			bc[1] = sr & 0x3;  sr >>= 2;
       
   166 			Mc[1] = sr & 0x3;  sr >>= 2;
       
   167 			sr |= (uword)*c++ << 1;
       
   168 			xmaxc[1] = sr & 0x3f;  sr >>= 6;
       
   169 #undef	xmc
       
   170 #define	xmc	(source + 29 - 13)
       
   171 			xmc[13] = sr & 0x7;  sr >>= 3;
       
   172 			sr = *c++;				/* 15 */
       
   173 			xmc[14] = sr & 0x7;  sr >>= 3;
       
   174 			xmc[15] = sr & 0x7;  sr >>= 3;
       
   175 			sr |= (uword)*c++ << 2;
       
   176 			xmc[16] = sr & 0x7;  sr >>= 3;
       
   177 			xmc[17] = sr & 0x7;  sr >>= 3;
       
   178 			xmc[18] = sr & 0x7;  sr >>= 3;
       
   179 			sr |= (uword)*c++ << 1;
       
   180 			xmc[19] = sr & 0x7;  sr >>= 3;
       
   181 			xmc[20] = sr & 0x7;  sr >>= 3;
       
   182 			xmc[21] = sr & 0x7;  sr >>= 3;
       
   183 			sr = *c++;
       
   184 			xmc[22] = sr & 0x7;  sr >>= 3;
       
   185 			xmc[23] = sr & 0x7;  sr >>= 3;
       
   186 			sr |= (uword)*c++ << 2;
       
   187 			xmc[24] = sr & 0x7;  sr >>= 3;
       
   188 			xmc[25] = sr & 0x7;  sr >>= 3;
       
   189 			sr |= (uword)*c++ << 4;			/* 20 */
       
   190 			Nc[2] = sr & 0x7f;  sr >>= 7;
       
   191 			bc[2] = sr & 0x3;  sr >>= 2;
       
   192 			Mc[2] = sr & 0x3;  sr >>= 2;
       
   193 			sr |= (uword)*c++ << 1;
       
   194 			xmaxc[2] = sr & 0x3f;  sr >>= 6;
       
   195 #undef	xmc
       
   196 #define	xmc	(source + 46 - 26)
       
   197 			xmc[26] = sr & 0x7;  sr >>= 3;
       
   198 			sr = *c++;
       
   199 			xmc[27] = sr & 0x7;  sr >>= 3;
       
   200 			xmc[28] = sr & 0x7;  sr >>= 3;
       
   201 			sr |= (uword)*c++ << 2;
       
   202 			xmc[29] = sr & 0x7;  sr >>= 3;
       
   203 			xmc[30] = sr & 0x7;  sr >>= 3;
       
   204 			xmc[31] = sr & 0x7;  sr >>= 3;
       
   205 			sr |= (uword)*c++ << 1;
       
   206 			xmc[32] = sr & 0x7;  sr >>= 3;
       
   207 			xmc[33] = sr & 0x7;  sr >>= 3;
       
   208 			xmc[34] = sr & 0x7;  sr >>= 3;
       
   209 			sr = *c++;				/* 25 */
       
   210 			xmc[35] = sr & 0x7;  sr >>= 3;
       
   211 			xmc[36] = sr & 0x7;  sr >>= 3;
       
   212 			sr |= (uword)*c++ << 2;
       
   213 			xmc[37] = sr & 0x7;  sr >>= 3;
       
   214 			xmc[38] = sr & 0x7;  sr >>= 3;
       
   215 			sr |= (uword)*c++ << 4;
       
   216 			Nc[3] = sr & 0x7f;  sr >>= 7;
       
   217 			bc[3] = sr & 0x3;  sr >>= 2;
       
   218 			Mc[3] = sr & 0x3;  sr >>= 2;
       
   219 			sr |= (uword)*c++ << 1;
       
   220 			xmaxc[3] = sr & 0x3f;  sr >>= 6;
       
   221 #undef	xmc
       
   222 #define	xmc	(source + 63 - 39)
       
   223 
       
   224 			xmc[39] = sr & 0x7;  sr >>= 3;
       
   225 			sr = *c++;
       
   226 			xmc[40] = sr & 0x7;  sr >>= 3;
       
   227 			xmc[41] = sr & 0x7;  sr >>= 3;
       
   228 			sr |= (uword)*c++ << 2;			/* 30 */
       
   229 			xmc[42] = sr & 0x7;  sr >>= 3;
       
   230 			xmc[43] = sr & 0x7;  sr >>= 3;
       
   231 			xmc[44] = sr & 0x7;  sr >>= 3;
       
   232 			sr |= (uword)*c++ << 1;
       
   233 			xmc[45] = sr & 0x7;  sr >>= 3;
       
   234 			xmc[46] = sr & 0x7;  sr >>= 3;
       
   235 			xmc[47] = sr & 0x7;  sr >>= 3;
       
   236 			sr = *c++;
       
   237 			xmc[48] = sr & 0x7;  sr >>= 3;
       
   238 			xmc[49] = sr & 0x7;  sr >>= 3;
       
   239 			sr |= (uword)*c++ << 2;
       
   240 			xmc[50] = sr & 0x7;  sr >>= 3;
       
   241 			xmc[51] = sr & 0x7;  sr >>= 3;
       
   242 
       
   243 			s->frame_chain = sr & 0xf;
       
   244 		}
       
   245 		else {
       
   246 			sr = s->frame_chain;
       
   247 			sr |= (uword)*c++ << 4;			/* 1 */
       
   248 			LARc[0] = sr & 0x3f;  sr >>= 6;
       
   249 			LARc[1] = sr & 0x3f;  sr >>= 6;
       
   250 			sr = *c++;
       
   251 			LARc[2] = sr & 0x1f;  sr >>= 5;
       
   252 			sr |= (uword)*c++ << 3;
       
   253 			LARc[3] = sr & 0x1f;  sr >>= 5;
       
   254 			LARc[4] = sr & 0xf;  sr >>= 4;
       
   255 			sr |= (uword)*c++ << 2;
       
   256 			LARc[5] = sr & 0xf;  sr >>= 4;
       
   257 			LARc[6] = sr & 0x7;  sr >>= 3;
       
   258 			LARc[7] = sr & 0x7;  sr >>= 3;
       
   259 			sr = *c++;				/* 5 */
       
   260 			Nc[0] = sr & 0x7f;  sr >>= 7;
       
   261 			sr |= (uword)*c++ << 1;
       
   262 			bc[0] = sr & 0x3;  sr >>= 2;
       
   263 			Mc[0] = sr & 0x3;  sr >>= 2;
       
   264 			sr |= (uword)*c++ << 5;
       
   265 			xmaxc[0] = sr & 0x3f;  sr >>= 6;
       
   266 #undef	xmc
       
   267 #define	xmc	(source + 12)
       
   268 			xmc[0] = sr & 0x7;  sr >>= 3;
       
   269 			xmc[1] = sr & 0x7;  sr >>= 3;
       
   270 			sr |= (uword)*c++ << 1;
       
   271 			xmc[2] = sr & 0x7;  sr >>= 3;
       
   272 			xmc[3] = sr & 0x7;  sr >>= 3;
       
   273 			xmc[4] = sr & 0x7;  sr >>= 3;
       
   274 			sr = *c++;
       
   275 			xmc[5] = sr & 0x7;  sr >>= 3;
       
   276 			xmc[6] = sr & 0x7;  sr >>= 3;
       
   277 			sr |= (uword)*c++ << 2;			/* 10 */
       
   278 			xmc[7] = sr & 0x7;  sr >>= 3;
       
   279 			xmc[8] = sr & 0x7;  sr >>= 3;
       
   280 			xmc[9] = sr & 0x7;  sr >>= 3;
       
   281 			sr |= (uword)*c++ << 1;
       
   282 			xmc[10] = sr & 0x7;  sr >>= 3;
       
   283 			xmc[11] = sr & 0x7;  sr >>= 3;
       
   284 			xmc[12] = sr & 0x7;  sr >>= 3;
       
   285 			sr = *c++;
       
   286 			Nc[1] = sr & 0x7f;  sr >>= 7;
       
   287 			sr |= (uword)*c++ << 1;
       
   288 			bc[1] = sr & 0x3;  sr >>= 2;
       
   289 			Mc[1] = sr & 0x3;  sr >>= 2;
       
   290 			sr |= (uword)*c++ << 5;
       
   291 			xmaxc[1] = sr & 0x3f;  sr >>= 6;
       
   292 #undef	xmc
       
   293 #define	xmc	(source + 29 - 13)
       
   294 			xmc[13] = sr & 0x7;  sr >>= 3;
       
   295 			xmc[14] = sr & 0x7;  sr >>= 3;
       
   296 			sr |= (uword)*c++ << 1;			/* 15 */
       
   297 			xmc[15] = sr & 0x7;  sr >>= 3;
       
   298 			xmc[16] = sr & 0x7;  sr >>= 3;
       
   299 			xmc[17] = sr & 0x7;  sr >>= 3;
       
   300 			sr = *c++;
       
   301 			xmc[18] = sr & 0x7;  sr >>= 3;
       
   302 			xmc[19] = sr & 0x7;  sr >>= 3;
       
   303 			sr |= (uword)*c++ << 2;
       
   304 			xmc[20] = sr & 0x7;  sr >>= 3;
       
   305 			xmc[21] = sr & 0x7;  sr >>= 3;
       
   306 			xmc[22] = sr & 0x7;  sr >>= 3;
       
   307 			sr |= (uword)*c++ << 1;
       
   308 			xmc[23] = sr & 0x7;  sr >>= 3;
       
   309 			xmc[24] = sr & 0x7;  sr >>= 3;
       
   310 			xmc[25] = sr & 0x7;  sr >>= 3;
       
   311 			sr = *c++;
       
   312 			Nc[2] = sr & 0x7f;  sr >>= 7;
       
   313 			sr |= (uword)*c++ << 1;			/* 20 */
       
   314 			bc[2] = sr & 0x3;  sr >>= 2;
       
   315 			Mc[2] = sr & 0x3;  sr >>= 2;
       
   316 			sr |= (uword)*c++ << 5;
       
   317 			xmaxc[2] = sr & 0x3f;  sr >>= 6;
       
   318 #undef	xmc
       
   319 #define	xmc	(source + 46 - 26)
       
   320 			xmc[26] = sr & 0x7;  sr >>= 3;
       
   321 			xmc[27] = sr & 0x7;  sr >>= 3;
       
   322 			sr |= (uword)*c++ << 1;	
       
   323 			xmc[28] = sr & 0x7;  sr >>= 3;
       
   324 			xmc[29] = sr & 0x7;  sr >>= 3;
       
   325 			xmc[30] = sr & 0x7;  sr >>= 3;
       
   326 			sr = *c++;
       
   327 			xmc[31] = sr & 0x7;  sr >>= 3;
       
   328 			xmc[32] = sr & 0x7;  sr >>= 3;
       
   329 			sr |= (uword)*c++ << 2;
       
   330 			xmc[33] = sr & 0x7;  sr >>= 3;
       
   331 			xmc[34] = sr & 0x7;  sr >>= 3;
       
   332 			xmc[35] = sr & 0x7;  sr >>= 3;
       
   333 			sr |= (uword)*c++ << 1;			/* 25 */
       
   334 			xmc[36] = sr & 0x7;  sr >>= 3;
       
   335 			xmc[37] = sr & 0x7;  sr >>= 3;
       
   336 			xmc[38] = sr & 0x7;  sr >>= 3;
       
   337 			sr = *c++;
       
   338 			Nc[3] = sr & 0x7f;  sr >>= 7;
       
   339 			sr |= (uword)*c++ << 1;		
       
   340 			bc[3] = sr & 0x3;  sr >>= 2;
       
   341 			Mc[3] = sr & 0x3;  sr >>= 2;
       
   342 			sr |= (uword)*c++ << 5;
       
   343 			xmaxc[3] = sr & 0x3f;  sr >>= 6;
       
   344 #undef	xmc
       
   345 #define	xmc	(source + 63 - 39)
       
   346 
       
   347 			xmc[39] = sr & 0x7;  sr >>= 3;
       
   348 			xmc[40] = sr & 0x7;  sr >>= 3;
       
   349 			sr |= (uword)*c++ << 1;
       
   350 			xmc[41] = sr & 0x7;  sr >>= 3;
       
   351 			xmc[42] = sr & 0x7;  sr >>= 3;
       
   352 			xmc[43] = sr & 0x7;  sr >>= 3;
       
   353 			sr = *c++;				/* 30 */
       
   354 			xmc[44] = sr & 0x7;  sr >>= 3;
       
   355 			xmc[45] = sr & 0x7;  sr >>= 3;
       
   356 			sr |= (uword)*c++ << 2;
       
   357 			xmc[46] = sr & 0x7;  sr >>= 3;
       
   358 			xmc[47] = sr & 0x7;  sr >>= 3;
       
   359 			xmc[48] = sr & 0x7;  sr >>= 3;
       
   360 			sr |= (uword)*c++ << 1;
       
   361 			xmc[49] = sr & 0x7;  sr >>= 3;
       
   362 			xmc[50] = sr & 0x7;  sr >>= 3;
       
   363 			xmc[51] = sr & 0x7;  sr >>= 3;
       
   364 		}
       
   365 	}
       
   366 	else
       
   367 #endif 
       
   368 	{
       
   369 
       
   370 	*c++ =   ((GSM_MAGIC & 0xF) << 4)		/* 1 */
       
   371 	       | ((LARc[0] >> 2) & 0xF);
       
   372 	*c++ =   ((LARc[0] & 0x3) << 6)
       
   373 	       | (LARc[1] & 0x3F);
       
   374 	*c++ =   ((LARc[2] & 0x1F) << 3)
       
   375 	       | ((LARc[3] >> 2) & 0x7);
       
   376 	*c++ =   ((LARc[3] & 0x3) << 6)
       
   377 	       | ((LARc[4] & 0xF) << 2)
       
   378 	       | ((LARc[5] >> 2) & 0x3);
       
   379 	*c++ =   ((LARc[5] & 0x3) << 6)
       
   380 	       | ((LARc[6] & 0x7) << 3)
       
   381 	       | (LARc[7] & 0x7);
       
   382 
       
   383 
       
   384 	*c++ =   ((Nc[0] & 0x7F) << 1)
       
   385 
       
   386 
       
   387 	       | ((bc[0] >> 1) & 0x1);
       
   388 	*c++ =   ((bc[0] & 0x1) << 7)
       
   389 
       
   390 
       
   391 	       | ((Mc[0] & 0x3) << 5)
       
   392 
       
   393 	       | ((xmaxc[0] >> 1) & 0x1F);
       
   394 	*c++ =   ((xmaxc[0] & 0x1) << 7)
       
   395 
       
   396 #undef xmc
       
   397 #define	xmc	(source + 12)
       
   398 
       
   399 	       | ((xmc[0] & 0x7) << 4)
       
   400 	       | ((xmc[1] & 0x7) << 1)
       
   401 	       | ((xmc[2] >> 2) & 0x1);
       
   402 	*c++ =   ((xmc[2] & 0x3) << 6)
       
   403 	       | ((xmc[3] & 0x7) << 3)
       
   404 	       | (xmc[4] & 0x7);
       
   405 	*c++ =   ((xmc[5] & 0x7) << 5)			/* 10 */
       
   406 	       | ((xmc[6] & 0x7) << 2)
       
   407 	       | ((xmc[7] >> 1) & 0x3);
       
   408 	*c++ =   ((xmc[7] & 0x1) << 7)
       
   409 	       | ((xmc[8] & 0x7) << 4)
       
   410 	       | ((xmc[9] & 0x7) << 1)
       
   411 	       | ((xmc[10] >> 2) & 0x1);
       
   412 	*c++ =   ((xmc[10] & 0x3) << 6)
       
   413 	       | ((xmc[11] & 0x7) << 3)
       
   414 	       | (xmc[12] & 0x7);
       
   415 
       
   416 
       
   417 	*c++ =   ((Nc[1] & 0x7F) << 1)
       
   418 
       
   419 
       
   420 	       | ((bc[1] >> 1) & 0x1);
       
   421 	*c++ =   ((bc[1] & 0x1) << 7)
       
   422 
       
   423 
       
   424 	       | ((Mc[1] & 0x3) << 5)
       
   425 
       
   426 
       
   427 	       | ((xmaxc[1] >> 1) & 0x1F);
       
   428 	*c++ =   ((xmaxc[1] & 0x1) << 7)
       
   429 
       
   430 #undef	xmc
       
   431 #define	xmc	(source + 29 - 13)
       
   432 
       
   433 	       | ((xmc[13] & 0x7) << 4)
       
   434 	       | ((xmc[14] & 0x7) << 1)
       
   435 	       | ((xmc[15] >> 2) & 0x1);
       
   436 	*c++ =   ((xmc[15] & 0x3) << 6)
       
   437 	       | ((xmc[16] & 0x7) << 3)
       
   438 	       | (xmc[17] & 0x7);
       
   439 	*c++ =   ((xmc[18] & 0x7) << 5)
       
   440 	       | ((xmc[19] & 0x7) << 2)
       
   441 	       | ((xmc[20] >> 1) & 0x3);
       
   442 	*c++ =   ((xmc[20] & 0x1) << 7)
       
   443 	       | ((xmc[21] & 0x7) << 4)
       
   444 	       | ((xmc[22] & 0x7) << 1)
       
   445 	       | ((xmc[23] >> 2) & 0x1);
       
   446 	*c++ =   ((xmc[23] & 0x3) << 6)
       
   447 	       | ((xmc[24] & 0x7) << 3)
       
   448 	       | (xmc[25] & 0x7);
       
   449 
       
   450 
       
   451 	*c++ =   ((Nc[2] & 0x7F) << 1)			/* 20 */
       
   452 
       
   453 
       
   454 	       | ((bc[2] >> 1) & 0x1);
       
   455 	*c++ =   ((bc[2] & 0x1) << 7)
       
   456 
       
   457 
       
   458 	       | ((Mc[2] & 0x3) << 5)
       
   459 
       
   460 
       
   461 	       | ((xmaxc[2] >> 1) & 0x1F);
       
   462 	*c++ =   ((xmaxc[2] & 0x1) << 7)
       
   463 
       
   464 #undef	xmc
       
   465 #define	xmc	(source + 46 - 26)
       
   466 
       
   467 	       | ((xmc[26] & 0x7) << 4)
       
   468 	       | ((xmc[27] & 0x7) << 1)
       
   469 	       | ((xmc[28] >> 2) & 0x1);
       
   470 	*c++ =   ((xmc[28] & 0x3) << 6)
       
   471 	       | ((xmc[29] & 0x7) << 3)
       
   472 	       | (xmc[30] & 0x7);
       
   473 	*c++ =   ((xmc[31] & 0x7) << 5)
       
   474 	       | ((xmc[32] & 0x7) << 2)
       
   475 	       | ((xmc[33] >> 1) & 0x3);
       
   476 	*c++ =   ((xmc[33] & 0x1) << 7)
       
   477 	       | ((xmc[34] & 0x7) << 4)
       
   478 	       | ((xmc[35] & 0x7) << 1)
       
   479 	       | ((xmc[36] >> 2) & 0x1);
       
   480 	*c++ =   ((xmc[36] & 0x3) << 6)
       
   481 	       | ((xmc[37] & 0x7) << 3)
       
   482 	       | (xmc[38] & 0x7);
       
   483 
       
   484 
       
   485 	*c++ =   ((Nc[3] & 0x7F) << 1)
       
   486 
       
   487 
       
   488 	       | ((bc[3] >> 1) & 0x1);
       
   489 	*c++ =   ((bc[3] & 0x1) << 7)
       
   490 
       
   491 
       
   492 	       | ((Mc[3] & 0x3) << 5)
       
   493 
       
   494 
       
   495 	       | ((xmaxc[3] >> 1) & 0x1F);
       
   496 	*c++ =   ((xmaxc[3] & 0x1) << 7)
       
   497 
       
   498 #undef	xmc
       
   499 #define	xmc	(source + 63 - 39)
       
   500 
       
   501 	       | ((xmc[39] & 0x7) << 4)
       
   502 	       | ((xmc[40] & 0x7) << 1)
       
   503 	       | ((xmc[41] >> 2) & 0x1);
       
   504 	*c++ =   ((xmc[41] & 0x3) << 6)			/* 30 */
       
   505 	       | ((xmc[42] & 0x7) << 3)
       
   506 	       | (xmc[43] & 0x7);
       
   507 	*c++ =   ((xmc[44] & 0x7) << 5)
       
   508 	       | ((xmc[45] & 0x7) << 2)
       
   509 	       | ((xmc[46] >> 1) & 0x3);
       
   510 	*c++ =   ((xmc[46] & 0x1) << 7)
       
   511 	       | ((xmc[47] & 0x7) << 4)
       
   512 	       | ((xmc[48] & 0x7) << 1)
       
   513 	       | ((xmc[49] >> 2) & 0x1);
       
   514 	*c++ =   ((xmc[49] & 0x3) << 6)
       
   515 	       | ((xmc[50] & 0x7) << 3)
       
   516 	       | (xmc[51] & 0x7);
       
   517 	}
       
   518 }