




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/ 本程序采用 Lempel-Ziv 压缩算法, 云风没有对这个算法做深入研究/ 代码是根据 Markus Franz Xaver Johannes Oberhumer 的 LZO 改写/ 而成, 所以算法上的问题请不要问我, 如果你对这个压缩算法有兴趣,/ 请拜访 LZO 的主页 / http:/wildsau.idv.uni-linz.ac.at/mfx/lzo.html/ LZO 属于 GNU 软件, 在此声明, 本文件中的代码使用权利不同于风魂游/ 戏程序库中的其他部分, 请遵守 GNU 协议使用. /#include /#include #include #define byte unsigned charint _stdcall compress(void *src, unsigned src_len, void *dst);int _stdcall decompress(void *src, unsigned src_len,void *dst);static unsigned _do_compress (byte *in, unsigned in_len, byte *out, unsigned *out_len)static long wrkmem 16384L; register byte *ip; byte *op;byte *in_end = in + in_len; byte *ip_end = in + in_len - 13; byte *ii; byte *dict = (byte *)wrkmem; op = out;ip = in;ii = ip; ip += 4; for(;)register byte *m_pos;unsigned m_off;unsigned m_len;unsigned dindex;dindex = (0x21*(unsigned)(ip3)6)ip2)5)ip1)5) & 0x3fff;m_pos = dict dindex;if(unsigned)m_pos (unsigned)in) |(m_off = (unsigned)(unsigned)ip-(unsigned)m_pos) ) 0xbfff)goto literal;if(m_off = 0x0800 | m_pos3 = ip3)goto try_match;dindex = (dindex & 0x7ff ) 0x201f;m_pos = dictdindex;if(unsigned)(m_pos) (unsigned)(in) |(m_off = (unsigned)( (int)(unsigned)ip-(unsigned)m_pos) 0xbfff) goto literal;if (m_off = ip_end)break;continue;match:dictdindex = ip;if(ip - ii 0)register unsigned t = ip - ii;if (t = 3)op-2 |= (byte)t;else if(t 255)tt -= 255;*op+ = 0;*op+ = (byte)tt;do *op+ = *ii+; while (-t 0);ip += 3;if(m_pos3 != *ip+ | m_pos4 != *ip+ | m_pos5 != *ip+ |m_pos6 != *ip+ | m_pos7 != *ip+ | m_pos8 != *ip+ )-ip;m_len = ip - ii;if(m_off = 0x0800 )-m_off;*op+ = (byte)(m_len - 1) 5) | (m_off & 7) 3);elseif (m_off 11) | (m_len - 2);goto m3_m4_offset;elsebyte *end = in_end;byte *m = m_pos + 9;while (ip end & *m = *ip)m+, ip+;m_len = (ip - ii);if(m_off = 0x4000)-m_off;if (m_len = 33)*op+ = (byte)(32 | (m_len - 2);elsem_len -= 33;*op+=32;goto m3_m4_len;elsem_off -= 0x4000;if(m_len 11) | (m_len - 2);elsem_len -= 9;*op+ = (byte)(16 | (m_off & 0x4000) 11);m3_m4_len:while (m_len 255)m_len -= 255;*op+ = 0;*op+ = (byte)m_len;m3_m4_offset:*op+ = (byte)(m_off & 63) 6);ii = ip;if (ip = ip_end)break; *out_len = op - out; return (unsigned) (in_end - ii);int _stdcall compress(void *in, unsigned in_len, void *out) byte *op = out; unsigned t,out_len; if (in_len 0)byte *ii = (byte*)in + in_len - t;if (op = (byte*)out & t = 238)*op+ = (byte) ( 17 + t );elseif (t = 3)op-2 |= (byte)t ;elseif (t 255) tt -= 255;*op+ = 0;*op+ = (byte)tt;do *op+ = *ii+; while (-t 0); *op+ = 17; *op+ = 0; *op+ = 0; return (op - (byte*)out);int _stdcall decompress (void *in, unsigned in_len,void *out) register byte *op; register byte *ip; register unsigned t; register byte *m_pos; byte *ip_end = (byte*)in + in_len; op = out; ip = in; if(*ip 17)t = *ip+ - 17;if (t 0);goto first_literal_run; for(;)t = *ip+;if (t = 16) goto match;if (t = 0)while (*ip = 0)t += 255;ip+;t += 15 + *ip+;* (unsigned *) op = * ( unsigned *) ip;op += 4; ip += 4;if (-t 0)if (t = 4)do* (unsigned * ) op = * ( unsigned * ) ip;op += 4; ip += 4; t -= 4; while (t = 4);if (t 0) do *op+ = *ip+; while (-t 0);elsedo *op+ = *ip+; while (-t 0);first_literal_run:t = *ip+;if (t = 16)goto match;m_pos = op - 0x0801;m_pos -= t 2;m_pos -= *ip+ = 64)m_pos = op - 1;m_pos -= (t 2) & 7;m_pos -= *ip+ 5) - 1;goto copy_match;else if (t = 32)t &= 31;if (t = 0)while (*ip = 0) t += 255;ip+;t += 31 + *ip+;m_pos = op - 1;m_pos -= (* ( unsigned short * ) ip) 2;ip += 2;elseif (t = 16) m_pos = op;m_pos -= (t & 8) 2;ip += 2;if (m_pos = op)goto eof_found;m_pos -= 0x4000;else m_pos = op - 1;m_pos -= t 2;m_pos -= *ip+ = 6 & (op - m_pos) = 4) * (unsigned *) op = * ( unsigned *) m_pos;op += 4; m_pos += 4; t -= 2;do* (unsigned *) op = * ( unsigned *) m_pos;op += 4; m_pos += 4; t -= 4;while (t = 4);if (t 0)do *op+ = *m_pos+; while (-t 0);elsecopy_match:*op+ = *m_pos+; *op
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南快消品策划营销方案
- 咸宁团建活动策划方案公司
- 说明文知识总结
- 赣州税务筹划咨询方案
- 2025年营养师鉴定考试冲刺指南:实操技能强化与理论巩固试卷
- 城市智慧化发展案例分析
- 2025年度深基坑专项方案测试卷及答案
- 2024年水利设施管养人员练习题及参考答案详解(完整版)
- 2025年医师定期考核模考模拟试题及参考答案详解(突破训练)
- 2024年安全员考试通关考试题库含完整答案详解(各地真题)
- 《学术英语(综合)》课后答案
- 高中心理健康课程《人际关系-寝室篇》课件
- 水产微生物学
- 电力系统继电保护课程设计报告-三段式距离保护
- 香港永久性居民在内地所生中国籍子女赴香港定居申请表
- 部编人教版五年级上册小学道德与法治 第5课 协商决定班级事务 课件
- 跨境电商亚马逊运营实务完整版ppt课件-整套课件-最全教学教程
- GB∕T 31038-2014 高电压柴油发电机组通用技术条件
- 基层工会经费财务规范化建设
- 亚硒酸 MSDS危险化学品安全技术说明书
- 预防接种家长课堂(课堂PPT)
评论
0/150
提交评论