|
|
| version 1.1.1.1, 2003/10/16 17:57:11 | version 1.4, 2005/02/07 14:46:08 |
|---|---|
| Line 85 bdsi_exit: | Line 85 bdsi_exit: |
| return(ret); | return(ret); |
| } | } |
| BOOL bmpdata_getinfo(const BMPINFO *bi, BMPDATA *inf) { | BRESULT bmpdata_getinfo(const BMPINFO *bi, BMPDATA *inf) { |
| UINT tmp; | UINT tmp; |
| int width; | int width; |
| Line 107 BOOL bmpdata_getinfo(const BMPINFO *bi, | Line 107 BOOL bmpdata_getinfo(const BMPINFO *bi, |
| if (tmp != 0) { | if (tmp != 0) { |
| goto bdgi_err; | goto bdgi_err; |
| } | } |
| width = LOADINTELDWORD(bi->biWidth); | width = (SINT32)LOADINTELDWORD(bi->biWidth); |
| height = LOADINTELDWORD(bi->biHeight); | height = (SINT32)LOADINTELDWORD(bi->biHeight); |
| if ((width <= 0) || (height == 0)) { | if ((width <= 0) || (height == 0)) { |
| goto bdgi_err; | goto bdgi_err; |
| } | } |
| Line 121 bdgi_err: | Line 121 bdgi_err: |
| return(FAILURE); | return(FAILURE); |
| } | } |
| UINT8 *bmpdata_lzx(int level, int dstsize, const UINT8 *dat) { | |
| UINT8 *ret; | |
| UINT8 *ptr; | |
| UINT8 ctrl; | |
| UINT8 bit; | |
| UINT mask; | |
| UINT tmp; | |
| int pos; | |
| int leng; | |
| ret = NULL; | |
| if (dat == NULL) { | |
| return(NULL); | |
| } | |
| ret = (UINT8 *)_MALLOC(dstsize, "res"); | |
| if (ret == NULL) { | |
| goto lxz_err; | |
| } | |
| ptr = ret; | |
| ctrl = 0; | |
| bit = 0; | |
| mask = (1 << level) - 1; | |
| while(dstsize > 0) { | |
| if (!bit) { | |
| ctrl = *dat++; | |
| bit = 0x80; | |
| } | |
| if (ctrl & bit) { | |
| tmp = *dat++; | |
| tmp <<= 8; | |
| tmp |= *dat++; | |
| pos = -1 - (tmp >> level); | |
| leng = (tmp & mask) + 1; | |
| leng = min(leng, dstsize); | |
| dstsize -= leng; | |
| while(leng--) { | |
| *ptr = *(ptr + pos); | |
| ptr++; | |
| } | |
| } | |
| else { | |
| *ptr++ = *dat++; | |
| dstsize--; | |
| } | |
| bit >>= 1; | |
| } | |
| lxz_err: | |
| return(ret); | |
| } | |
| UINT8 *bmpdata_solvedata(const UINT8 *dat) { | |
| int dstsize; | |
| if (dat == NULL) { | |
| return(NULL); | |
| } | |
| dstsize = dat[0] + (dat[1] << 8) + (dat[2] << 16); | |
| return(bmpdata_lzx(dat[3], dstsize, dat + 4)); | |
| } | |