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