void wvAddCHPXFromBucket6(CHP *achp, UPXF *upxf, STSH *stsh) { U8 *pointer; U16 i = 0; U8 sprm8; U16 sprm; wvTrace(("cbUPX word 6 is %d\n", upxf->cbUPX)); #ifdef SPRMTEST GET_fprintf_HANDLER() (stderr, "\n"); while (i < upxf->cbUPX) { GET_fprintf_HANDLER() (stderr, "%x (%d) ", *(upxf->upx.chpx.grpprl + i), *(upxf->upx.chpx.grpprl + i)); i++; } GET_fprintf_HANDLER() (stderr, "\n"); i = 0; #endif while (i < upxf->cbUPX) { sprm8 = bread_8ubit(upxf->upx.chpx.grpprl + i, &i); #ifdef SPRMTEST wvError(("chp word 6 sprm is %x (%d)\n", sprm8, sprm8)); #endif sprm = (U16)wvGetrgsprmWord6(sprm8); #ifdef SPRMTEST wvError(("chp word 6 sprm is converted to %x\n", sprm)); #endif pointer = upxf->upx.chpx.grpprl + i; wvApplySprmFromBucket(WORD6, sprm, NULL, achp, NULL, stsh, pointer, &i, NULL); } }
int wvAddSEPXFromBucket6 (SEP * asep, SEPX * item, STSH * stsh) { U8 *pointer; U16 i = 0; int ret = 0; U8 sprm8; U16 sprm; Sprm RetSprm; #ifdef SPRMTEST fprintf (stderr, "\n"); while (i < item->cb) { fprintf (stderr, "%x (%d) ", *(item->grpprl + i), *(item->grpprl + i)); i++; } fprintf (stderr, "\n"); i = 0; #endif while (i < item->cb) { sprm8 = bread_8ubit (item->grpprl + i, &i); #ifdef SPRMTEST wvError (("sep word 6 sprm is %x (%d)\n", sprm8, sprm8)); #endif sprm = (U16) wvGetrgsprmWord6 (sprm8); #ifdef SPRMTEST wvTrace (("sep word 6 sprm is converted to %x\n", sprm)); #endif pointer = item->grpprl + i; RetSprm = wvApplySprmFromBucket (WORD6, sprm, NULL, NULL, asep, stsh, pointer, &i, NULL); if (RetSprm.sgc == sgcSep) ret = 1; } return (ret); }
void wvUpdateCHPXBucket(UPXF *src) { U16 i = 0, j; U16 sprm; U8 sprm8; U16 len = 0; int temp; U8 *pointer, *dpointer; U8 *grpprl = NULL; i = 0; if (src->cbUPX == 0) return; pointer = src->upx.chpx.grpprl; wvTrace(("Msrc->cbUPX len is %d\n", src->cbUPX)); for (i = 0; i < src->cbUPX; i++) wvTrace(("%x\n", src->upx.chpx.grpprl[i])); wvTrace(("Mend\n")); i = 0; len = 0; while (i < src->cbUPX) { sprm8 = dread_8ubit(NULL, &pointer); wvTrace(("Mpre the sprm is %x\n", sprm8)); sprm = (U16)wvGetrgsprmWord6(sprm8); wvTrace(("Mpost the sprm is %x\n", sprm)); i++; len += 2; temp = wvEatSprm(sprm, pointer, &i); wvTrace(("Mlen of op is %d\n", temp)); pointer += temp; wvTrace(("Mp dis is %d\n", pointer - src->upx.chpx.grpprl)); len += temp; } wvTrace(("Mlen ends up as %d\n", len)); if (len == 0) return; grpprl = (U8 *)wvMalloc(len); dpointer = grpprl; i = 0; pointer = src->upx.chpx.grpprl; while (i < src->cbUPX) { sprm8 = dread_8ubit(NULL, &pointer); sprm = (U16)wvGetrgsprmWord6(sprm8); i++; *dpointer++ = (sprm & 0x00FF); *dpointer++ = (sprm & 0xff00) >> 8; temp = wvEatSprm(sprm, pointer, &i); for (j = 0; j < temp; j++) *dpointer++ = *pointer++; wvTrace(("Mlen of op is %d\n", temp)); } wvFree(src->upx.chpx.grpprl); src->upx.chpx.grpprl = grpprl; src->cbUPX = len; for (i = 0; i < src->cbUPX; i++) wvTrace(("%x\n", src->upx.chpx.grpprl[i])); }