Re All:
10楼的代码页问题,经验证,是注册表中的某个项被修改,如下:
"CodePage"=dword:000001b5
其中的1b5便是437(OEM 美国)的十六进制写法。
而9楼提到的cmd中执行mem显示空行的问题,具体描述如下:
通过运行CMD或者点击菜单中命令行提示符进入命令行窗口,直接执行mem或者其它一些较老的16位DOS程序,会立即将chcp代码页切换为437,这个切换动作会进行清屏,然后显示11行空行。而如果直接执行mem>mem.txt,则切换动作仍然发生,只是显示的空行数变为1,而mem.txt中显示出11行文字。
Invalid keyboard code specified
655360 bytes total conventional memory
655360 bytes available to MS-DOS
633664 largest executable program size
1048576 bytes total contiguous extended memory
0 bytes available contiguous extended memory
941056 bytes available XMS memory
MS-DOS resident in High Memory Area
因此有以下推测:
1、前者的11行空行显示的正是mem.txt中的内容。
2、mem.txt首行中Invalid一句说明程序使用了不兼容于现有Windows的Keyboard Code,而据测试还没有发现有某个16位DOS程序可以解决这种兼容问题。
3、Code Page的强制切换可能源于这种无效的Keyboard Code。
4、而代码页切换后程序输出尚不能正常显示,则意味着程序的输出尚不兼容于这种代码页,而DEBUG却可以进行调整。
5、根据 Wengier 在
http://www.cn-dos.net/forum/viewthread.php?tid=1019 中的提示,在将命令行窗口全屏后,再执行 mem 等程序将不会出现猜测4所指出的问题,因此此种切换应该进行了同debug那段代码一样执行了相应的调整动作。
[
Last edited by willsort on 2005-10-15 at 12:32 ]
※ Batchinger 致 Bat Fans:请访问
批处理编程的异类 ,欢迎交流与共享批处理编程心得!