help in converting c code needed
maximilianscherr
MaximilianScherr at T-Online.de
Mon Feb 11 16:38:08 EST 2002
can anybody help me convert this c code to python:
int Hooks::Decompress (unsigned char * pdest, unsigned char * src2,
int src_size)
{
const unsigned char * psrc = src2;
int leng = src_size;
int dest_index = 0;
bit_num = 8;
treepos = 0;
while(true)
{
if(bit_num == 8)
{
if(leng == 0)
{
return dest_index;
}
leng--;
value = *psrc++;
bit_num = 0;
mask = 0x80;
}
if(value & mask)
treepos = tree[treepos * 2];
else
treepos = tree[treepos * 2 + 1];
mask >>= 1;
bit_num++;
if(treepos <= 0)
{
if(treepos == -256)
{
bit_num = 8;
treepos = 0;
continue;
}
pdest[dest_index++] = -treepos;
treepos = 0;
}
}
}
int Hooks::Pack(unsigned char *pIn, unsigned char *pOut, int lengg)
{
int actByte = 0;
int bitByte = 0;
int nrBits;
unsigned int value;
if (lengg<=0) return 0;
while(lengg--)
{
nrBits = bit_table[*pIn][0];
value = bit_table[*pIn++][1];
while(nrBits--)
{
pOut[actByte] = (pOut[actByte] << 1) | (unsigned char)((value >>
nrBits) & 0x1);
bitByte = (bitByte + 1) & 0x07;
if(!bitByte) actByte++;
}
}
nrBits = bit_table[256][0];
value = bit_table[256][1];
while(nrBits--)
{
pOut[actByte] = (pOut[actByte] << 1) | (unsigned char)((value >>
nrBits) & 0x1);
bitByte = (bitByte + 1) & 0x07;
if(!bitByte) actByte++;
}
if(bitByte)
{
while(bitByte < 8)
{
pOut[actByte] <<= 1;
bitByte++;
}
actByte++;
}
return actByte;
}
class Hooks
{
public:
int Hook(unsigned char *Data,bool who, int OldLen);
void HackServerList(unsigned char *Data);
int Pack(unsigned char *pIn, unsigned char *pOut, int lengg);
int Decompress (unsigned char * pdest, unsigned char * src2, int
src_size);
int bit_num;
int value;
int mask;
int treepos;
bool InfoSent;
};
static int tree[512] =
{
/* 0*/ 1, 2,
/* 1*/ 3, 4,
/* 2*/ 5, 0,
/* 3*/ 6, 7,
/* 4*/ 8, 9,
/* 5*/ 10, 11,
/* 6*/ 12, 13,
/* 7*/ -256, 14,
/* 8*/ 15, 16,
/* 9*/ 17, 18,
/* 10*/ 19, 20,
/* 11*/ 21, 22,
/* 12*/ -1, 23,
/* 13*/ 24, 25,
/* 14*/ 26, 27,
/* 15*/ 28, 29,
/* 16*/ 30, 31,
/* 17*/ 32, 33,
/* 18*/ 34, 35,
/* 19*/ 36, 37,
/* 20*/ 38, 39,
/* 21*/ 40, -64,
/* 22*/ 41, 42,
/* 23*/ 43, 44,
/* 24*/ -6, 45,
/* 25*/ 46, 47,
/* 26*/ 48, 49,
/* 27*/ 50, 51,
/* 28*/ -119, 52,
/* 29*/ -32, 53,
/* 30*/ 54, -14,
/* 31*/ 55, -5,
/* 32*/ 56, 57,
/* 33*/ 58, 59,
/* 34*/ 60, -2,
/* 35*/ 61, 62,
/* 36*/ 63, 64,
/* 37*/ 65, 66,
/* 38*/ 67, 68,
/* 39*/ 69, 70,
/* 40*/ 71, 72,
/* 41*/ -51, 73,
/* 42*/ 74, 75,
/* 43*/ 76, 77,
/* 44*/ -101, -111,
/* 45*/ -4, -97,
/* 46*/ 78, 79,
/* 47*/ -110, 80,
/* 48*/ 81, -116,
/* 49*/ 82, 83,
/* 50*/ 84, -255,
/* 51*/ 85, 86,
/* 52*/ 87, 88,
/* 53*/ 89, 90,
/* 54*/ -15, -10,
/* 55*/ 91, 92,
/* 56*/ -21, 93,
/* 57*/ -117, 94,
/* 58*/ 95, 96,
/* 59*/ 97, 98,
/* 60*/ 99, 100,
/* 61*/ -114, 101,
/* 62*/ -105, 102,
/* 63*/ -26, 103,
/* 64*/ 104, 105,
/* 65*/ 106, 107,
/* 66*/ 108, 109,
/* 67*/ 110, 111,
/* 68*/ 112, -3,
/* 69*/ 113, -7,
/* 70*/ 114, -131,
/* 71*/ 115, -144,
/* 72*/ 116, 117,
/* 73*/ -20, 118,
/* 74*/ 119, 120,
/* 75*/ 121, 122,
/* 76*/ 123, 124,
/* 77*/ 125, 126,
/* 78*/ 127, 128,
/* 79*/ 129, -100 ,
/* 80*/ 130, -8,
/* 81*/ 131, 132,
/* 82*/ 133, 134,
/* 83*/ -120, 135,
/* 84*/ 136, -31,
/* 85*/ 137, 138,
/* 86*/ -109, -234,
/* 87*/ 139, 140,
/* 88*/ 141, 142,
/* 89*/ 143, 144,
/* 90*/ -112, 145,
/* 91*/ -19, 146,
/* 92*/ 147, 148,
/* 93*/ 149, -66,
/* 94*/ 150, -145,
/* 95*/ -13, -65,
/* 96*/ 151, 152,
/* 97*/ 153, 154,
/* 98*/ -30, 155,
/* 99*/ 156, 157,
/* 100*/ -99, 158,
/* 101*/ 159, 160,
/* 102*/ 161, 162,
/* 103*/ -23, 163,
/* 104*/ -29, 164,
/* 105*/ -11, 165,
/* 106*/ 166, -115,
/* 107*/ 167, 168,
/* 108*/ 169, 170,
/* 109*/ -16, 171,
/* 110*/ -34, 172,
/* 111*/ 173, -132,
/* 112*/ 174, -108,
/* 113*/ 175, -22,
/* 114*/ 176, -9,
/* 115*/ 177, -84,
/* 116*/ -17, -37,
/* 117*/ -28, 178,
/* 118*/ 179, 180,
/* 119*/ 181, 182,
/* 120*/ 183, 184,
/* 121*/ 185, 186,
/* 122*/ 187, -104,
/* 123*/ 188, -78,
/* 124*/ 189, -61,
/* 125*/ -79, -178,
/* 126*/ -59, -134,
/* 127*/ 190, -25,
/* 128*/ -83, -18,
/* 129*/ 191, -57,
/* 130*/ -67, 192,
/* 131*/ -98, 193,
/* 132*/ -12, -68,
/* 133*/ 194, 195,
/* 134*/ -55, -128,
/* 135*/ -24, -50,
/* 136*/ -70, 196,
/* 137*/ -94, -33,
/* 138*/ 197, -129,
/* 139*/ -74, 198,
/* 140*/ -82, 199,
/* 141*/ -56, -87,
/* 142*/ -44, 200,
/* 143*/ -248, 201,
/* 144*/ -163, -81,
/* 145*/ -52, -123,
/* 146*/ 202, -113,
/* 147*/ -48, -41,
/* 148*/ -122, -40,
/* 149*/ 203, -90,
/* 150*/ -54, 204,
/* 151*/ -86, -192,
/* 152*/ 205, 206,
/* 153*/ 207, -130,
/* 154*/ -53, 208,
/* 155*/ -133, -45,
/* 156*/ 209, 210,
/* 157*/ 211, -91,
/* 158*/ 212, 213,
/* 159*/ -106, -88,
/* 160*/ 214, 215,
/* 161*/ 216, 217,
/* 162*/ 218, -49,
/* 163*/ 219, 220,
/* 164*/ 221, 222,
/* 165*/ 223, 224,
/* 166*/ 225, 226,
/* 167*/ 227, -102,
/* 168*/ -160, 228,
/* 169*/ -46, 229,
/* 170*/ -127, 230,
/* 171*/ -103, 231,
/* 172*/ 232, 233,
/* 173*/ -60, 234,
/* 174*/ 235, -76,
/* 175*/ 236, -121,
/* 176*/ 237, -73,
/* 177*/ -149, 238,
/* 178*/ 239, -107,
/* 179*/ -35, 240,
/* 180*/ -71, -27,
/* 181*/ -69, 241,
/* 182*/ -89, -77,
/* 183*/ -62, -118,
/* 184*/ -75, -85,
/* 185*/ -72, -58,
/* 186*/ -63, -80,
/* 187*/ 242, -42,
/* 188*/ -150, -157,
/* 189*/ -139, -236,
/* 190*/ -126, -243,
/* 191*/ -142, -214,
/* 192*/ -138, -206,
/* 193*/ -240, -146,
/* 194*/ -204, -147,
/* 195*/ -152, -201,
/* 196*/ -227, -207,
/* 197*/ -154, -209,
/* 198*/ -153, -254,
/* 199*/ -176, -156,
/* 200*/ -165, -210,
/* 201*/ -172, -185,
/* 202*/ -195, -170,
/* 203*/ -232, -211,
/* 204*/ -219, -239,
/* 205*/ -200, -177,
/* 206*/ -175, -212,
/* 207*/ -244, -143,
/* 208*/ -246, -171,
/* 209*/ -203, -221,
/* 210*/ -202, -181,
/* 211*/ -173, -250,
/* 212*/ -184, -164,
/* 213*/ -193, -218,
/* 214*/ -199, -220,
/* 215*/ -190, -249,
/* 216*/ -230, -217,
/* 217*/ -169, -216,
/* 218*/ -191, -197,
/* 219*/ -47, 243,
/* 220*/ 244, 245,
/* 221*/ 246, 247,
/* 222*/ -148, -159,
/* 223*/ 248, 249,
/* 224*/ -92, -93,
/* 225*/ -96, -225,
/* 226*/ -151, -95,
/* 227*/ 250, 251,
/* 228*/ -241, 252,
/* 229*/ -161, -36,
/* 230*/ 253, 254,
/* 231*/ -135, -39,
/* 232*/ -187, -124,
/* 233*/ 255, -251,
/* 234*/ -162, -238,
/* 235*/ -242, -38,
/* 236*/ -43, -125,
/* 237*/ -215, -253,
/* 238*/ -140, -208,
/* 239*/ -137, -235,
/* 240*/ -158, -237,
/* 241*/ -136, -205,
/* 242*/ -155, -141,
/* 243*/ -228, -229,
/* 244*/ -213, -168,
/* 245*/ -224, -194,
/* 246*/ -196, -226,
/* 247*/ -183, -233,
/* 248*/ -231, -167,
/* 249*/ -174, -189,
/* 250*/ -252, -166,
/* 251*/ -198, -222,
/* 252*/ -188, -179,
/* 253*/ -223, -182,
/* 254*/ -180, -186,
/* 255*/ -245, -247,
};
static unsigned int bit_table[257][2] =
{
0x02, 0x00, 0x05, 0x1F, 0x06, 0x22, 0x07, 0x34, 0x07, 0x75,
0x06, 0x28, 0x06, 0x3B, 0x07, 0x32,
0x08, 0xE0, 0x08, 0x62, 0x07, 0x56, 0x08, 0x79, 0x09, 0x19D,
0x08, 0x97, 0x06, 0x2A, 0x07, 0x57,
0x08, 0x71, 0x08, 0x5B, 0x09, 0x1CC, 0x08, 0xA7, 0x07, 0x25,
0x07, 0x4F, 0x08, 0x66, 0x08, 0x7D,
0x09, 0x191, 0x09, 0x1CE, 0x07, 0x3F, 0x09, 0x90, 0x08, 0x59,
0x08, 0x7B, 0x08, 0x91, 0x08, 0xC6,
0x06, 0x2D, 0x09, 0x186, 0x08, 0x6F, 0x09, 0x93, 0x0A, 0x1CC,
0x08, 0x5A, 0x0A, 0x1AE, 0x0A, 0x1C0,
0x09, 0x148, 0x09, 0x14A, 0x09, 0x82, 0x0A, 0x19F, 0x09, 0x171,
0x09, 0x120, 0x09, 0xE7, 0x0A, 0x1F3,
0x09, 0x14B, 0x09, 0x100, 0x09, 0x190, 0x06, 0x13, 0x09, 0x161,
0x09, 0x125, 0x09, 0x133, 0x09, 0x195,
0x09, 0x173, 0x09, 0x1CA, 0x09, 0x86, 0x09, 0x1E9, 0x09, 0xDB,
0x09, 0x1EC, 0x09, 0x8B, 0x09, 0x85,
0x05, 0x0A, 0x08, 0x96, 0x08, 0x9C, 0x09, 0x1C3, 0x09, 0x19C,
0x09, 0x8F, 0x09, 0x18F, 0x09, 0x91,
0x09, 0x87, 0x09, 0xC6, 0x09, 0x177, 0x09, 0x89, 0x09, 0xD6,
0x09, 0x8C, 0x09, 0x1EE, 0x09, 0x1EB,
0x09, 0x84, 0x09, 0x164, 0x09, 0x175, 0x09, 0x1CD, 0x08, 0x5E,
0x09, 0x88, 0x09, 0x12B, 0x09, 0x172,
0x09, 0x10A, 0x09, 0x8D, 0x09, 0x13A, 0x09, 0x11C, 0x0A, 0x1E1,
0x0A, 0x1E0, 0x09, 0x187, 0x0A, 0x1DC,
0x0A, 0x1DF, 0x07, 0x74, 0x09, 0x19F, 0x08, 0x8D, 0x08, 0xE4,
0x07, 0x79, 0x09, 0xEA, 0x09, 0xE1,
0x08, 0x40, 0x07, 0x41, 0x09, 0x10B, 0x09, 0xB0, 0x08, 0x6A,
0x08, 0xC1, 0x07, 0x71, 0x07, 0x78,
0x08, 0xB1, 0x09, 0x14C, 0x07, 0x43, 0x08, 0x76, 0x07, 0x66,
0x07, 0x4D, 0x09, 0x8A, 0x06, 0x2F,
0x08, 0xC9, 0x09, 0xCE, 0x09, 0x149, 0x09, 0x160, 0x0A, 0x1BA,
0x0A, 0x19E, 0x0A, 0x39F, 0x09, 0xE5,
0x09, 0x194, 0x09, 0x184, 0x09, 0x126, 0x07, 0x30, 0x08, 0x6C,
0x09, 0x121, 0x09, 0x1E8, 0x0A, 0x1C1,
0x0A, 0x11D, 0x0A, 0x163, 0x0A, 0x385, 0x0A, 0x3DB, 0x0A,
0x17D, 0x0A, 0x106, 0x0A, 0x397, 0x0A, 0x24E,
0x07, 0x2E, 0x08, 0x98, 0x0A, 0x33C, 0x0A, 0x32E, 0x0A, 0x1E9,
0x09, 0xBF, 0x0A, 0x3DF, 0x0A, 0x1DD,
0x0A, 0x32D, 0x0A, 0x2ED, 0x0A, 0x30B, 0x0A, 0x107, 0x0A,
0x2E8, 0x0A, 0x3DE, 0x0A, 0x125, 0x0A, 0x1E8,
0x09, 0xE9, 0x0A, 0x1CD, 0x0A, 0x1B5, 0x09, 0x165, 0x0A, 0x232,
0x0A, 0x2E1, 0x0B, 0x3AE, 0x0B, 0x3C6,
0x0B, 0x3E2, 0x0A, 0x205, 0x0A, 0x29A, 0x0A, 0x248, 0x0A,
0x2CD, 0x0A, 0x23B, 0x0B, 0x3C5, 0x0A, 0x251,
0x0A, 0x2E9, 0x0A, 0x252, 0x09, 0x1EA, 0x0B, 0x3A0, 0x0B,
0x391, 0x0A, 0x23C, 0x0B, 0x392, 0x0B, 0x3D5,
0x0A, 0x233, 0x0A, 0x2CC, 0x0B, 0x390, 0x0A, 0x1BB, 0x0B,
0x3A1, 0x0B, 0x3C4, 0x0A, 0x211, 0x0A, 0x203,
0x09, 0x12A, 0x0A, 0x231, 0x0B, 0x3E0, 0x0A, 0x29B, 0x0B,
0x3D7, 0x0A, 0x202, 0x0B, 0x3AD, 0x0A, 0x213,
0x0A, 0x253, 0x0A, 0x32C, 0x0A, 0x23D, 0x0A, 0x23F, 0x0A,
0x32F, 0x0A, 0x11C, 0x0A, 0x384, 0x0A, 0x31C,
0x0A, 0x17C, 0x0A, 0x30A, 0x0A, 0x2E0, 0x0A, 0x276, 0x0A,
0x250, 0x0B, 0x3E3, 0x0A, 0x396, 0x0A, 0x18F,
0x0A, 0x204, 0x0A, 0x206, 0x0A, 0x230, 0x0A, 0x265, 0x0A,
0x212, 0x0A, 0x23E, 0x0B, 0x3AC, 0x0B, 0x393,
0x0B, 0x3E1, 0x0A, 0x1DE, 0x0B, 0x3D6, 0x0A, 0x31D, 0x0B,
0x3E5, 0x0B, 0x3E4, 0x0A, 0x207, 0x0B, 0x3C7,
0x0A, 0x277, 0x0B, 0x3D4, 0x08, 0xC0, 0x0A, 0x162, 0x0A, 0x3DA,
0x0A, 0x124, 0x0A, 0x1B4, 0x0A, 0x264,
0x0A, 0x33D, 0x0A, 0x1D1, 0x0A, 0x1AF, 0x0A, 0x39E, 0x0A,
0x24F, 0x0B, 0x373, 0x0A, 0x249, 0x0B, 0x372,
0x09, 0x167, 0x0A, 0x210, 0x0A, 0x23A, 0x0A, 0x1B8, 0x0B,
0x3AF, 0x0A, 0x18E, 0x0A, 0x2EC, 0x07, 0x62,
0x04, 0x0D
};
?
Thanks, in advance
More information about the Python-list
mailing list