![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-15 00:49 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » ****压缩分卷!扇区/镜象/扇区读写] 迷你硬盘读写器完工了B |
| 可打印版本 26,681 / 93 |
| 第46楼 LiveOnLove | 发表于 2006-07-27 22:31 |
| 中级用户 发帖 161 积分 493 来自 ZHCN | |
|
是个难得的好东东!呵呵。非常感谢~
|
|
| 第47楼 GOTOmsdos | 发表于 2006-07-28 01:12 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
已做好了分卷,现在正想办法加入 压缩功能。。。
谁有好的又好移植的压缩/解压源码,介绍给我啊!。。。 |
|
| 第48楼 wang6610 | 发表于 2006-07-28 10:29 |
| 银牌会员 发帖 488 积分 1,246 | |
|
要做ghost2了!
|
|
| 第49楼 GOTOmsdos | 发表于 2006-07-28 10:52 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
做GHOST2不可能,但主要功能还是能做的,主要是DIY啊
如果作好了压缩,我就用自己的程序备份硬盘和分区啦! 这种满足是无与伦比的! |
|
| 第50楼 GOTOmsdos | 发表于 2006-07-29 23:33 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
刚成功地解决了 压缩引擎问题,下一步就是嵌入到我的程序中实现压缩功能了!
这几天,在国外的网上遨游,下了不下几十套源码!在几百个文件中穿梭! 终于找到了我要的!解决了我的问题 就是 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楼 wang6610 | 发表于 2006-07-30 08:28 |
| 银牌会员 发帖 488 积分 1,246 | |
Originally posted by GOTOmsdos at 2006-7-29 11:33 PM: 你真牛。。。 |
|
| 第52楼 johnsonlam | 发表于 2006-07-31 00:32 |
| 银牌会员 发帖 497 积分 1,410 来自 九龍,香港 | |
Originally posted by GOTOmsdos at 2006-7-29 11:33 PM: 外 国 的 好 东 西 多 着 呢 ! 这 令 我 觉 得 好 幸 福 , 可 分 享 他 人 的 成 果 也 觉 得 某 些 国 人 不 肯 分 享 , 真 悲 哀 ... |
|
| 第53楼 GOTOmsdos | 发表于 2006-08-01 20:56 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
完全解决拉!
已经成功放入纯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楼 troylees | 发表于 2006-08-05 23:41 |
| 初级用户 发帖 19 积分 54 | |
|
GOTOmsdos你好!
我看过了你写的源代码,心里就两个字"高手"。 不过,我有个问题,如果我用DJGPP编译的话,ExInt13函数中用到的FP_OFF和FP_SEG宏都是只有TC才有的定义,请问在DJGPP下怎么解决呢? 谢谢!! |
|
| 第55楼 GOTOmsdos | 发表于 2006-08-06 18:40 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
程序加入了扇区到扇区方式的读写,也加了一些功能,完善了。。。
又更新了 !。。 TO troylees 你查一下TC3 的HELP 感谢关注,高手谈不上啊 FP_OFF 和FP_SEG 是宏 FP_OFF没什么, 替换成他的内容 FP_SEG 的内容 跟 _seg 有关 不知道 DJGPP 是否支持 如果不行,也没大关系 可直接把 那个扩展INT13的 结构体的指针 直接赋值 给那个寄存器变量也可以的,我原来就是这样的(运行结果正确,。后 考虑到规范,才改成这样的) ZLIB中原带了 MAKEFILE FOR DJGPP2 的文件,我一起加进去吧。。。 |
|
| 第56楼 GOTOmsdos | 发表于 2006-08-06 20:58 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
将要添加如下功能:
1 支持古董级硬盘(不支持扩展INT13)的压缩分卷 2 四个主分区的读写(此功能,只有C有实用意义,因为,一般用户都把很多盘弄成了扩展分区的逻辑驱动器了) [ Last edited by GOTOmsdos on 2006-8-6 at 21:52 ] |
|
| 第57楼 GOTOmsdos | 发表于 2006-08-06 22:20 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
刚才更新的代码中,有个小错误 CASE :
现在已改过来重传了 |
|
| 第58楼 troylees | 发表于 2006-08-06 23:14 |
| 初级用户 发帖 19 积分 54 | |
|
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楼 GOTOmsdos | 发表于 2006-08-07 02:22 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
不是 sregs.ds = (unsigned long) (&DAP_package)
是 reg.x.si =&DAP_package 这样一般就可以的,我试过的。。 |
|
| 第60楼 troylees | 发表于 2006-08-08 12:28 |
| 初级用户 发帖 19 积分 54 | |
|
To: dear all
问题终于解决了,是因为传统的中断调用只能访问低地址1M的内存,而DPMI下保护模式的DOS程序的缓冲区地址可能会超过1M,所以解决办法是,使用DJGPP预定义的低地址缓冲区,他的地址定义在“__tb”,然后用dosmemput和dosmemget函数实现低地址和高地址缓存区的数据交换操作。 详细看看这里http://www.delorie.com/djgpp/v2faq/faq18_2.html |
|
| 上一页 1 2 3 4 5 6 7 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |