TempleOSCD_150720.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:46:22 +02:00
1 parent 401601816c
commit f8c05f98f4
554 files changed
+26046 -24853

No files matched your search

+36 -33
View File
@@ -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;
}