TempleOSCD_150720.ISO
This commit is contained in:
1 parent
401601816c
commit
f8c05f98f4
554 files changed
+26046
-24853
No files matched your search
+36
-33
@@ -2,9 +2,8 @@
|
||||
//See $LK,"CArcCompress",A="MN:CArcCompress"$, $LK,"CArcEntry",A="MN:CArcEntry"$, and $LK,"CArcCtrl",A="MN:CArcCtrl"$
|
||||
|
||||
asm {
|
||||
USE64
|
||||
/****
|
||||
U0 ArcGetEntry(CArcCtrl *c)
|
||||
U0 ArcEntryGet(CArcCtrl *c)
|
||||
{
|
||||
I64 i;
|
||||
CArcEntry *temp,*temp1;
|
||||
@@ -23,7 +22,7 @@ U0 ArcGetEntry(CArcCtrl *c)
|
||||
}
|
||||
} else {
|
||||
do if (++i==c->free_limit)
|
||||
i=c->min_table_entry;
|
||||
i=c->min_table_entry;
|
||||
while (c->hash[i]);
|
||||
temp=&c->compress[i];
|
||||
c->next_entry=temp;
|
||||
@@ -40,7 +39,7 @@ U0 ArcGetEntry(CArcCtrl *c)
|
||||
}
|
||||
}
|
||||
****/
|
||||
_ARC_GET_ENTRY::
|
||||
_ARC_ENTRY_GET::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
PUSH RSI
|
||||
@@ -98,7 +97,7 @@ _ARC_GET_ENTRY::
|
||||
RET1 8
|
||||
}
|
||||
|
||||
_extern _ARC_GET_ENTRY U0 ArcGetEntry(CArcCtrl *c);
|
||||
_extern _ARC_ENTRY_GET U0 ArcEntryGet(CArcCtrl *c);
|
||||
|
||||
I64 ArcDetermineCompressionType(U8 *src,I64 size)
|
||||
{
|
||||
@@ -123,7 +122,7 @@ U0 ArcCompressBuf(CArcCtrl *c)
|
||||
basecode=c->saved_basecode;
|
||||
|
||||
while (src_ptr<src_limit && c->dst_pos+c->cur_bits_in_use<=c->dst_size) {
|
||||
ArcGetEntry(c);
|
||||
ArcEntryGet(c);
|
||||
ac_start:
|
||||
if (src_ptr>=src_limit) goto ac_done;
|
||||
ch=*src_ptr++;
|
||||
@@ -178,16 +177,16 @@ U0 ArcExpandBuf(CArcCtrl *c)
|
||||
if (c->stk_ptr==c->stk_base && dst_ptr<dst_limit) {
|
||||
if (c->saved_basecode==MAX_U32) {
|
||||
lastcode=BFieldExtU32(c->src_buf,c->src_pos,
|
||||
c->next_bits_in_use);
|
||||
c->next_bits_in_use);
|
||||
c->src_pos+=c->next_bits_in_use;
|
||||
*dst_ptr++=lastcode;
|
||||
ArcGetEntry(c);
|
||||
ArcEntryGet(c);
|
||||
c->last_ch=lastcode;
|
||||
} else
|
||||
lastcode=c->saved_basecode;
|
||||
while (dst_ptr<dst_limit && c->src_pos+c->next_bits_in_use<=c->src_size) {
|
||||
basecode=BFieldExtU32(c->src_buf,c->src_pos,
|
||||
c->next_bits_in_use);
|
||||
c->next_bits_in_use);
|
||||
c->src_pos+=c->next_bits_in_use;
|
||||
if (c->cur_entry==&c->compress[basecode]) {
|
||||
*c->stk_ptr++=c->last_ch;
|
||||
@@ -209,7 +208,7 @@ U0 ArcExpandBuf(CArcCtrl *c)
|
||||
temp->next=temp1->next;
|
||||
temp1->next=temp;
|
||||
|
||||
ArcGetEntry(c);
|
||||
ArcEntryGet(c);
|
||||
while (dst_ptr<dst_limit && c->stk_ptr!=c->stk_base)
|
||||
*dst_ptr++ = * -- c->stk_ptr;
|
||||
lastcode=basecode;
|
||||
@@ -237,7 +236,7 @@ CArcCtrl *ArcCtrlNew(Bool expand,I64 compression_type=CT_8_BIT)
|
||||
c->free_limit=1<<c->next_bits_in_use;
|
||||
c->saved_basecode=MAX_U32;
|
||||
c->entry_used=TRUE;
|
||||
ArcGetEntry(c);
|
||||
ArcEntryGet(c);
|
||||
c->entry_used=TRUE;
|
||||
return c;
|
||||
}
|
||||
@@ -248,36 +247,40 @@ U0 ArcCtrlDel(CArcCtrl *c)
|
||||
Free(c);
|
||||
}
|
||||
|
||||
U8 *ExpandBuf(CArcCompress *r,CTask *mem_task=NULL)
|
||||
U8 *ExpandBuf(CArcCompress *arc,CTask *mem_task=NULL)
|
||||
{//See $LK,"::/Demo/Dsk/SerializeTree.CPP"$.
|
||||
CArcCtrl *c;
|
||||
U8 *result=MAlloc(r->expanded_size+1,mem_task);
|
||||
result[r->expanded_size]=0; //terminate
|
||||
switch (r->compression_type) {
|
||||
U8 *result;
|
||||
|
||||
if (!(CT_NONE<=arc->compression_type<=CT_8_BIT) ||
|
||||
arc->expanded_size>MEM_MAPPED_SPACE)
|
||||
throw('Compress');
|
||||
|
||||
result=MAlloc(arc->expanded_size+1,mem_task);
|
||||
result[arc->expanded_size]=0; //terminate
|
||||
nobound_switch (arc->compression_type) {
|
||||
case CT_NONE:
|
||||
MemCpy(result,&r->body,r->expanded_size);
|
||||
MemCpy(result,&arc->body,arc->expanded_size);
|
||||
break;
|
||||
case CT_7_BIT:
|
||||
case CT_8_BIT:
|
||||
c=ArcCtrlNew(TRUE,r->compression_type);
|
||||
c->src_size=r->compressed_size<<3;
|
||||
c=ArcCtrlNew(TRUE,arc->compression_type);
|
||||
c->src_size=arc->compressed_size<<3;
|
||||
c->src_pos=sizeof(CArcCompress)<<3;
|
||||
c->src_buf=r;
|
||||
c->dst_size=r->expanded_size;
|
||||
c->src_buf=arc;
|
||||
c->dst_size=arc->expanded_size;
|
||||
c->dst_buf=result;
|
||||
c->dst_pos=0;
|
||||
ArcExpandBuf(c);
|
||||
ArcCtrlDel(c);
|
||||
break;
|
||||
default:
|
||||
throw('Compress');
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
CArcCompress *CompressBuf(U8 *src,I64 size,CTask *mem_task=NULL)
|
||||
{//See $LK,"::/Demo/Dsk/SerializeTree.CPP"$.
|
||||
CArcCompress *result;
|
||||
CArcCompress *arc;
|
||||
I64 size_out,compression_type=ArcDetermineCompressionType(src,size);
|
||||
CArcCtrl *c=ArcCtrlNew(FALSE,compression_type);
|
||||
c->src_size=size;
|
||||
@@ -288,18 +291,18 @@ CArcCompress *CompressBuf(U8 *src,I64 size,CTask *mem_task=NULL)
|
||||
ArcCompressBuf(c);
|
||||
if (ArcFinishCompression(c) && c->src_pos==c->src_size) {
|
||||
size_out=(c->dst_pos+7)>>3;
|
||||
result=MAlloc(size_out,mem_task);
|
||||
MemCpy(result,c->dst_buf,size_out);
|
||||
result->compression_type=compression_type;
|
||||
result->compressed_size=size_out;
|
||||
arc=MAlloc(size_out,mem_task);
|
||||
MemCpy(arc,c->dst_buf,size_out);
|
||||
arc->compression_type=compression_type;
|
||||
arc->compressed_size=size_out;
|
||||
} else {
|
||||
result=MAlloc(size+sizeof(CArcCompress),mem_task);
|
||||
MemCpy(&result->body,src,size);
|
||||
result->compression_type=CT_NONE;
|
||||
result->compressed_size=size+sizeof(CArcCompress);
|
||||
arc=MAlloc(size+sizeof(CArcCompress),mem_task);
|
||||
MemCpy(&arc->body,src,size);
|
||||
arc->compression_type=CT_NONE;
|
||||
arc->compressed_size=size+sizeof(CArcCompress);
|
||||
}
|
||||
result->expanded_size=size;
|
||||
arc->expanded_size=size;
|
||||
Free(c->dst_buf);
|
||||
ArcCtrlDel(c);
|
||||
return result;
|
||||
return arc;
|
||||
}
|
||||
Reference in new issue
Block a user