中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 菜单选择功能 上一主题 | 下一主题
DOSLER
新手上路




积分 18
发帖 6
注册 2008-3-5
状态 离线
『楼 主』:  菜单选择功能

DOS功能调用31H或4C所提供的一字节的返回码,通过批处理子命令IF和ERRORLEVEL对返回码进行处理,可达到自动执行一批命令的目的。在批处理文件中实现所有高级语言的菜单提示功能,使批处理文件变得更加灵活方便。先用DEBUG建立一个菜单驱动程序MENU.COM,对应地编写一个批处理文件lg.bat。具体内容和方法如下:
DEBUG
-166C:0100 MOV DX,111
-166C:0103 MOV AH,09
-166C:0105 INT 21
-166C:0107 MOV AH,01
-166C:0109 INT 21
-166C:010B MOV AH,4C
-166C:010D INT 21
-166C:010F INT 20
-166C:0111 DB '***********************'0D 0A
-166C:0131 DB '*1.Turbo Pascal 5.00*'0D 0A
-166C:0151 DB '*2.Turbo Basic 1.00*'0D 0A
-166C:0171 DB '*3.Turbo Prolog 2.00*'0D 0A
-166C:01B1 DB '*3.Turbo C 2.00*'0D 0A
-166C:01B1 DB '*4.Exit*'0D 0A
-166C:01F1 DB '***********************'0D 0A
-166C:01F1 DB 'Your choicce(0..4):'24 0D 0A 1A
-166C:0209
-RCX
CX0000
:108
-N MENU.COM
-W
Writing 0108 bytes
-Q



再建立一个批处理文件,调用菜单驱动程序,根据返回的字节码作出相应的处理。
@ECHO OFF
START
CLS
MENU
IF ERRORLEVEL 52 GOTO C
IF ERRORLEVEL 51 GOTO PRO
IF ERRORLEVEL 50 GOTO BAS
IF ERRORLEVEL 49 GOTO PAS
IF ERRORLEVEL 48 GOTO EX
CLS
GOTO START

:PAS
TURBO.EXE
GOTO START

:BAS
BASIC.EXE
GOTO START

:PRO
PROLOG.EXE
GOTO START

:C
TC.EXE
GOTO START

:EX
@ECHO ON
执行LG,屏幕左上角先出现一个菜单,并提示用户输入选择,当选择的功能执行结束,重新返回主菜单请求选择,直到选择“0”号功能,程序结束返回DOS。

2008-3-9 20:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zaa
新手上路





积分 14
发帖 5
注册 2007-3-22
状态 离线
『第 2 楼』:  

请问 debug 我在 xp 下执行 debug 后,
照着您上面的输入 但是会发生 error ???
可否简单说明怎么建立 debug 文件,谢谢喔~~

2008-3-10 10:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 3 楼』:  

每做一个菜单就得做一个MENU.COM,还不如用choice来得方便菜单,可以直接在BAT内做菜单



2008-3-10 11:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 4 楼』:  

不知道楼主从那本历史书上择出来的
cmd下实现选择有set/p
dos下实现选择有choice

或许有个有用的地方
就是在cmd下实现单键选择
不过需要改进一下
A
MOV AH,01
INT 21
MOV AH,4C
INT 21

RCX
8
Nch.com
W
Q
.
将以上代码保存为ch.scr
再使用debug < ch.scr 编译得到 ch.com

ch.com将菜单文字的输出交由echo完成
只负责将输入键的ASCII码转换为对应的errorlevel
这样不仅节省了代码
也省得每次输出新菜单都需要重新汇编

比如以下的例子
@echo off
if "%OS%"=="Windows_NT" chcp 437>nul & graftabl 936>nul
echo.
echo A. Menu A
echo B. Menu B
echo C. Menu C
echo.
echo Please choose:
ch.com>nul
if not errorlevel 66 if errorlevel 65 echo Choice is A.
if not errorlevel 67 if errorlevel 66 echo Choice is B.
if not errorlevel 68 if errorlevel 67 echo Choice is C.
if not errorlevel 98 if errorlevel 97 echo Choice is A.
if not errorlevel 99 if errorlevel 98 echo Choice is B.
if not errorlevel 100 if errorlevel 99 echo Choice is C.
当然,即使如此
03的choice.exe仍然比这个要好得多

[ Last edited by qzwqzw on 2008-3-10 at 11:50 AM ]

2008-3-10 11:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 5 楼』:  

哈,来个鼠标点击的菜单选项功能呀



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-3-10 13:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 6 楼』:  

http://home.mnet-online.de/horst.muc/w32dial.htm#wselect

2008-3-11 09:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: