中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS汉化世界 & 中文系统 (中文化室) » 关于汉字分割线的问题,向本是求教!
作者:
标题: 关于汉字分割线的问题,向本是求教! 上一主题 | 下一主题
haierccc
新手上路





积分 6
发帖 2
注册 2010-6-3
状态 离线
『楼 主』:  关于汉字分割线的问题,向本是求教!

我在DOS之家发了一个帖子,如下:

   我是一家公司的网管,很早之前就已经在使用一键GHOST,这款软件在工作中给我带来了很大的便利,在此表示感谢!
    我提一个建议。这个建议已经在我心头萦绕好久了,今天终于得以写出来。
    我注意到一键GHOST的流程中有一个菜单如下,DC拍摄:

      


      这个界面,是在英文文本模式下,通过重写8X16的ASCII字符点阵的方法显示汉字字符,从而可以在不运行中文系统的情况下显示汉字。这个技巧的确很好,不用为了显示几个汉字而载入整个中文系统。
       但是正如上图所示,有些汉字的中间有条“竖线”。比如“备份/还原系统”这几个汉字都有竖线。这就把汉字分成了2个部分,看起来不自然。
       为何会出现这种情况呢?其实大约在10年以前,我学习汇编的时候也写过类似的程序,现在已经记不太清了。不过似乎是调用BIOS的INT 10H中断的某个功能来重写ASCII字符点阵。当时我就发现了,有的汉字中间没有竖线,而有的汉字中间有竖线。
       经过反复跟踪汇编代码,终于发现了原因。
       原来,只要ASCII内码落在英文字母区,就会有竖线,而落在制表符区,就没有竖线了。
       至今,我没有看到任何一本书上讲到此问题。所以我猜测,DOS在处理英文字母和制表符的时候,显示策略不同。因为如果显示英文字母而不显示竖线的话,那英文字母就会成“连体字母”了。如下图:
                           
                     
                                        
            
                                   显示竖线                     
                                      
                                  不显示竖线

        当然,制表符中间可不能被分割,否则横线就会被“断开”了
           以上是我的建议。希望一键GHOST越做越好。

======================================================
信息发出后,得到了DOS之家的回应:

这个问题中国DOS联盟有讨论,ID为“本是”的是这方面的高手,并有许多可用的小工具。

制表符区我是第一次听说,我以前只知道:有的液晶显示器必须有分割时才能正常显示汉字,而CRT都可以,所以为了兼容所有显示器,有分割是最稳妥的方法,即兼容性最好的方法。我只知道这么多了,更细致的问题请到中国DOS联盟(bbs.cn-dos.net)搜索ID名称为“本是”的帖子,“本是”这方面的高手,第一张图片的菜单制作程序可能就是“本是”的程序。

看了以上的回答,我感觉不太对。我以为显示器只是忠实的还原显卡输出的信号,并不去“理解”信号的内容,所以对于显卡而言,显示器是“透明”的,怎么会有分割与非分割的区别呢?各位网友是否对此有研究?本是先生对此有何看法呢?


[ Last edited by haierccc on 2010-6-4 at 11:19 ]

2010-6-4 11:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 2 楼』:  

1.问题的本质如楼主所言是显卡的问题,不是显示器的,但与LCD/CRT的类别关系也很大。
“新的GRUB4DOS中文显示方式”(http://bbs.znpc.net/viewthread.php?tid=5857&extra=page%3D1)中,高手不点(grub4dos开发者之一?)解释道:
“在文本模式显示汉字,汉字中央有一条竖线。你的贴图就显示出这个问题了。
这是显卡 BIOS 程序的毛病,也许不算是毛病,因为显卡是西方发明的,他们没有考虑到亚洲的文字竟然超过 256 个,达到几万、几十万个。由于 BIOS 不支持多于 256 个字符,所以,要在文本模式同时在一个屏幕上显示不同的 256 个字符是不可能的。如果是汉字的话,理论最大值是在文本模式同时显示 128 个汉字。但很多区域被英文占用了,还有一些被一些图形字符(例如画表格所用的符号)占用了,所以,实际同时显示的汉字个数可能更少,只有几十个。”

2.问题的困境——
“Config中文菜单驱动Confect.sys (更新为4.3版)”(http://www.cn-dos.net/forum/view ... B%E6%9C%AC%E6%98%AF)中本是说:
“其实,这就是我在开发VtMagik.com的过程曾经伤透脑筋的我称之为单字节新汉字内码问题,这在9点显示方式下尤其突出。在9点显示方式下,有一种办法可以让汉字看上去不断开——0c0h,80h;0c1h,81h;...——这样可以有32个汉字无缝显示。顺序方式n,n+1;n+2,n+3;...容易编程,但无法利用这种制表符自动复制第8列到第9列的自动特性。
而且,不管设置8点还是9点,都对VGA卡的寄存器进行了设置,所以可能带来兼容性问题——显示器频率超界,引起黑屏;不作设置,即跳了这段程序,差别是很大的,尽管视觉上看不出。程序设计中有很多东东对用户都是“不可见的”,可程序员不能不清楚。这就是我通常不想解释的原因。对于用户是要简单,难题就专为程序员独享!真是有苦说不出。所以,我的VtMagik有-M0与-M8、-M9之分。一般用户可能会嫌软件命令和参数复杂,可这是不得已的。 ”

3.软件的处理——
“让非汉字系统显示汉字!VtMagiK.COM 6.30版(支持BCDW)”(http://www.cn-dos.net/forum/view ... 1&highlight=BT3)中本是说:
    “【简要介绍】
    模载之母 K.COM (全名VtMagiK.COM)是一款汉字字模提取和载入程序,以便在VGA
屏幕文本状态下显示可载入替换的字符集,通过载入用户定义的字模实现特定字形(
如汉字)的显示。……
    EGA/VGA 的点阵字符集存放在显示卡的位平面2(即显示RAM)上,用户可以通过EGA/
VGA 提供的接口,修改点阵字符集信息,来装载(不改变当前屏幕上的显示信息)和使用
自己喜欢的字体。然后,在文本视频模式下就可以显示新字形了。这就是“非汉字系统
显示汉字”技术,它速度与英文一样快,而且不消耗内存。可用于 DOS提示符下代替汉
字系统以实现汉字字形显示,甚至用于CONFIG.SYS帮助DOS系统实现启动菜单显示中文。
……
【友情提醒】
    无缝和有缝汉字的设置在某些液晶显示器上会引起“频率宽度不足”或“刷新频
率超界”的错误,形成兼容性问题,所以,不建议在公用启动盘中使用。公用启动盘
请加-M0参数取消缝设置。”

其它解释我在本论坛的帖子和站内短消息中作过很多回答,有祥有略。自己搜索下。



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2010-6-5 09:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 3 楼』:  

在自己的硬盘上查了下,发现了以前写的VT技术问答,有一条相差的引用如下:
“  问3:为什么EGA/VGA文本模式下显示的汉字一有变形、二有裂缝呢?
  答3:这是因为文本模式下,显示卡会把8x16的字符点阵扩展成9x16的方式来显
示,以一个空列来保证字符间的相对独立和美观,但在显示汉字的时候,就造成了
“中间”的“裂缝”。这第9列无法通过点阵信息来控制,字符发生器仅在遇到C0h
到DFh这32个西文制表符时,才会自动复制第8列点阵信息以保证表格线的连续。
  对策1:把汉字的第1个字符定义为西文制表符,利用上面的自动扩展功能实现
汉字的连接--“无缝”。这样显示的汉字笔划稍微有些变形,一次最多只能载入
32个汉字,适用要求一次显示的汉字不多的场合。但要注意:某些兼容显示卡与标
准的EGA/VGA接口不完全兼容,对装载字符集时寄存器的值有不同要求,最好能一
次载入整个字符集。
  对策2:通过对VGA显示卡的时序寄存器(端口地址3C4h/3C5h)编程,来实现禁
止对第9列的扩展。索引值为1,时钟寄存器的最低位为8/9模式控制位,值为 1时
禁止扩展,文本显示改为8x16点阵模式。如此显示出来的汉字与在汉字系统下显示
出来的完全相同--是“无缝”汉字。只是可惜,少数型号的 CRT显示器和 LCD液
晶显示器,由于频宽不足,不支持8x16模式,屏幕变花。
  装载时用的 ASCII码不同于通常的汉字内码,暂时称为新内码。把字模数据从
字库取到载入程序中是“制作”载入器,把程序的字模装入 RAM是“替换”字模,
系统原来的字模数据装回 RAM是“恢复”字模。”



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2010-6-5 09:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
haierccc
新手上路





积分 6
发帖 2
注册 2010-6-3
状态 离线
『第 4 楼』:  

终于找到答案了,居然是把8X16改成9X16,怪不得。。。
而且,是第一个字符是制表符啊,不一定要2个都是么

2010-6-7 11:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: