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