第 46 楼
发表于 2006-07-27 22:31 · 中国 广东 东莞 电信
中级用户
★★
积分 493 发帖 161 注册 2002-10-29 00:00 23年会员 UID 94 性别 男 来自 ZHCN
状态 离线
第 47 楼
发表于 2006-07-28 01:12 · 中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154 发帖 1,827 注册 2003-07-18 00:00 22年会员 UID 7105 性别 男
状态 离线
已做好了分卷,现在正想办法加入 压缩功能。。。
谁有好的又好移植的压缩/解压源码,介绍给我啊!。。。
第 48 楼
发表于 2006-07-28 10:29 · 中国 山东 菏泽 电信
银牌会员
★★★
积分 1,246 发帖 488 注册 2003-11-11 00:00 22年会员 UID 12699 性别 男
状态 离线
第 49 楼
发表于 2006-07-28 10:52 · 中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154 发帖 1,827 注册 2003-07-18 00:00 22年会员 UID 7105 性别 男
状态 离线
做GHOST2不可能,但主要功能还是能做的,主要是DIY啊
如果作好了压缩,我就用自己的程序备份硬盘和分区啦!
这种满足是无与伦比的!
第 50 楼
发表于 2006-07-29 23:33 · 中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154 发帖 1,827 注册 2003-07-18 00:00 22年会员 UID 7105 性别 男
状态 离线
刚成功地解决了 压缩引擎问题,下一步就是嵌入到我的程序中实现压缩功能了!
这几天,在国外的网上遨游,下了不下几十套源码!在几百个文件中穿梭!
终于找到了我要的!解决了我的问题
就是 zlib !
简要的过程如下:
1
试了,简单古老的
LZ, LZW,HUFFMAN,LZHUF,LZSS,LZHARC, LZ77,LZARI,LZRW1等等,都不理想,太老,效率太低,只能用来教学。。
2
看了 ARJ/UNARJ,有很多我不要的功能。。
3
曾定在 GZIP(BZIP2,基本差不多),很不错,也觉得有点适合我,压缩比和速度都很好,还有1-9的压缩比选项。。钻研了几天,发现没有内存压缩,只有文件压缩,。。。
4
看到一个提示: zlib 支持内存压缩!
确定它了!
(ZLIB和GZIP,PNG都采用相同的引擎:基于LZ77和HUFFMAN的结合,当然和前面提到的古老原始的版本是不可同日而语的)
在此过程中,与DDCOPY作者李治联系了。取得了DDCOPY源么,对我有启发。。
不过,试了DDCOPY的压缩,不太理想,豪时长,压缩比低。因为他采用的压缩/解压的类较简单,就两个文件(用简单的LZSS,胡颖卓编写的类,后来我也在网上看到了)
将要采用的压缩引擎是先进的最新版的 zlib-1.2.3 库(与GZIP,PNG图象用的同一个引擎),
压缩比和压缩速度很快,解压速度更快的离谱!
在WIN32 控制台程序中,压缩50MB,大约要20秒,压为了25MB。
解压只要大约3秒! 我靠!
还有 压缩比的1-9选项(类似GHOST)。。。
[ Last edited by GOTOmsdos on 2006-7-29 at 23:47 ]
第 51 楼
发表于 2006-07-30 08:28 · 中国 山东 菏泽 电信
银牌会员
★★★
积分 1,246 发帖 488 注册 2003-11-11 00:00 22年会员 UID 12699 性别 男
状态 离线
Originally posted by GOTOmsdos at 2006-7-29 11:33 PM:
刚成功地解决了 压缩引擎问题,下一步就是嵌入到我的程序中实现压缩功能了!
这几天,在国外的网上遨游,下了不下几十套源码!在几百个文件中 ...
你真牛。。。
第 52 楼
发表于 2006-07-31 00:32 · 中国 香港 Cyber_Express通信公司
银牌会员
★★★
阿林
积分 1,410 发帖 497 注册 2004-06-28 00:00 22年会员 UID 27551 性别 男 来自 九龍,香港
状态 离线
Originally posted by GOTOmsdos at 2006-7-29 11:33 PM:
刚成功地解决了 压缩引擎问题,下一步就是嵌入到我的程序中实现压缩功能了!
这几天,在国外的网上遨游,下了不下几十套源码!在几百个文件中 ...
外 国 的 好 东 西 多 着 呢 !
这 令 我 觉 得 好 幸 福 , 可 分 享 他 人 的 成 果
也 觉 得 某 些 国 人 不 肯 分 享 , 真 悲 哀 ...
第 53 楼
发表于 2006-08-01 20:56 · 中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154 发帖 1,827 注册 2003-07-18 00:00 22年会员 UID 7105 性别 男
状态 离线
完全解决拉!
已经成功放入纯DOS程序中,被调用,运行结果正确!
并且,令人激动的是:所采用的 ZLIB库的表现相当棒!
刚才,测试结果:
压缩备份:
压缩1000000个扇区(500MB),采用6级(最高9级)就能压为312MB !
(如用9级,大约能压到 250-280之间!)
而且用时仅12分钟!大约一秒钟1MB!(跟GHOST速度差不多!)
而且是读一个很老的2GB的硬盘!
(注意:由于GHOST不处理没有文件的的数据,所以,在备份分区时,所化的总时间自然就很少了。毕竟他不是整个扇区的全真备份。我的程序是的)
解压还原:
解压就快的离谱拉!
把压缩的景象文件(原500MB)解压后还原到硬盘上,大约1分钟左右!
简直不敢相信!这个ZLIB 的解压作者是 Mark Adler,真是牛!
他好象也美国火星计划的研究人员。。
现正在整理程序。进入最后阶段。。。
大概两三天能出来。。。
(DDCOPY 作者李治帮过我,由于我的程序采用了高效的压缩/解压库,出与感谢,我会把我的程序寄给他,希望在更加优越的压缩/解压方面,供他借鉴。。我会很高兴。。)
[ Last edited by GOTOmsdos on 2006-8-1 at 21:01 ]
第 54 楼
发表于 2006-08-05 23:41 · 中国 广东 广州 番禺区 电信
初级用户
★
积分 54 发帖 19 注册 2006-07-31 11:15 19年会员 UID 59547
状态 离线
GOTOmsdos你好!
我看过了你写的源代码,心里就两个字"高手"。
不过,我有个问题,如果我用DJGPP编译的话,ExInt13函数中用到的FP_OFF和FP_SEG宏都是只有TC才有的定义,请问在DJGPP下怎么解决呢?
谢谢!!
第 55 楼
发表于 2006-08-06 18:40 · 中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154 发帖 1,827 注册 2003-07-18 00:00 22年会员 UID 7105 性别 男
状态 离线
程序加入了扇区到扇区方式的读写,也加了一些功能,完善了。。。
又更新了 !。。
TO troylees
你查一下TC3 的HELP
感谢关注,高手谈不上啊
FP_OFF
和FP_SEG
是宏
FP_OFF没什么, 替换成他的内容
FP_SEG 的内容 跟 _seg 有关 不知道 DJGPP 是否支持
如果不行,也没大关系
可直接把 那个扩展INT13的 结构体的指针 直接赋值 给那个寄存器变量也可以的,我原来就是这样的(运行结果正确,。后 考虑到规范,才改成这样的)
ZLIB中原带了 MAKEFILE FOR DJGPP2 的文件,我一起加进去吧。。。
第 56 楼
发表于 2006-08-06 20:58 · 中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154 发帖 1,827 注册 2003-07-18 00:00 22年会员 UID 7105 性别 男
状态 离线
将要添加如下功能:
1
支持古董级硬盘(不支持扩展INT13)的压缩分卷
2
四个主分区的读写(此功能,只有C有实用意义,因为,一般用户都把很多盘弄成了扩展分区的逻辑驱动器了)
[ Last edited by GOTOmsdos on 2006-8-6 at 21:52 ]
第 57 楼
发表于 2006-08-06 22:20 · 中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154 发帖 1,827 注册 2003-07-18 00:00 22年会员 UID 7105 性别 男
状态 离线
刚才更新的代码中,有个小错误 CASE :
现在已改过来重传了
第 58 楼
发表于 2006-08-06 23:14 · 中国 广东 广州 荔湾区 电信
初级用户
★
积分 54 发帖 19 注册 2006-07-31 11:15 19年会员 UID 59547
状态 离线
To:GOTOmsdos
Tc定义如下:
#define FP_OFF(fp) ((unsigned)(fp))
#define FP_SEG(fp) ((unsigned)((unsigned long)(fp) >> 16))
可以看出,TC编译的程序是用16位地址的,而djgpp编译的是用32位地址的。
所以,如果in.x.si =(unsigned long) (&DAP_package)这样还可以,但是sregs.ds = (unsigned long) (&DAP_package)这样就不行了,一个是16位,一个是32位。
所以,我觉得直接赋值应该是不可以的!!
第 59 楼
发表于 2006-08-07 02:22 · 中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154 发帖 1,827 注册 2003-07-18 00:00 22年会员 UID 7105 性别 男
状态 离线
不是 sregs.ds = (unsigned long) (&DAP_package)
是 reg.x.si =&DAP_package
这样一般就可以的,我试过的。。
第 60 楼
发表于 2006-08-08 12:28 · 中国 广东 广州 番禺区 电信
初级用户
★
积分 54 发帖 19 注册 2006-07-31 11:15 19年会员 UID 59547
状态 离线
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正