ちと最近時間を沢山かけて作っていたもの・・・

なんか、かなり時間がかかった。。゜(゜´Д`゜)゜。
1週間くらい?
これを機に私はプログラマーとしての資質がない事を改めて認識・・・_| ̄|○


int WINAPI dkcRLEPackBitsEncode(DKC_RLE_PACKBITS_HEADER *p,BYTE *dest,size_t dsize,
const BYTE *src,size_t ssize,size_t a_count)
{
int r = edk_FAILED;
size_t i = 0;
int count = 0;
size_t ti = 0;
size_t break_c = 0;
DKC_MEMORYSTREAM_ADAPTER ad,bd;
BYTE buff[128 + 2];
//size_t bc = 0;
BYTE t;

dkcMemoryStreamAdapterInit(&ad,dest,dsize);
dkcMemoryStreamAdapterInit(&bd,buff,sizeof(buff));



# define DKC_MSA_PUSH(a,d,s) dkcMemoryStreamAdapterPushBack(a,d,s)
memset(p,0,sizeof(*p));
if(dkcCheckOverflowULONG( (ULONG)dest,dsize )){
return edk_FAILED;
}
if(dsize < ssize * 2){
return edk_ArgumentException;
}
if(CHAR_MAX < a_count){
return edk_ArgumentException;
}

for(;;){
count = 1;

t = src[i];
ti = i;
i++;
for(;;){

if(t != src[i]){
break;
}

count++;
if(count >= -CHAR_MIN){
break;
}
i++;
if(!(i < ssize)){
r = edk_SUCCEEDED;
break;
}
}

if((size_t)count >= a_count){
dkcMemoryStreamAdapterPushBackMacro(char,&ad,-count);
dkcMemoryStreamAdapterPushBackMacro(BYTE,&ad,t);
}else{
i = ti;
count = 0;
break_c = 1;
if(i != 0){
t = src[i - 1];
}else{
t = (BYTE)(src[i] + 1);
}


for(;;){
if(t == src[i]){
if(1 == break_c){
ti = i - 1;
}
break_c++;
if(break_c >= a_count){

count -= i - ti;
dkcMemoryStreamAdapterPopBack(&bd,i - ti);
i = ti;
break;
}

}else{
break_c = 1;

}
dkcMemoryStreamAdapterPushBackMacro(BYTE,&bd,src[i]);

count++;
if(count >= CHAR_MAX){
break;
}
i++;
if(!(i < ssize)){
r = edk_SUCCEEDED;
break;
}

t = src[i - 1];
}
dkcMemoryStreamAdapterPushBackMacro(BYTE,&ad,count);

DKC_MSA_PUSH(&ad,
dkcMemoryStreamAdapterPointer(&bd),dkcMemoryStreamAdapterGetOffset(&bd)
);
}

bd.mNowOffset = 0;

if(!(i < ssize)){
r = edk_SUCCEEDED;
break;
}
}//end of for

# undef DKC_MSA_PUSH
p->mCompressedSize = dkcMemoryStreamAdapterGetOffset(&ad);
p->mOriginSize = ssize;
return r;
}