i社区用户: 密码:
搜索:
首页| 资讯| 信息化| 产品| 专题| 创业| 技术天地| 企业中心| 企业论坛| 职场| 周报全文| 商城| 市场
会展| Blog| i社区| 社区联盟| RSS| 电子杂志| 发行| 直播| IT两会| i| 下载| 上网导航| CIO俱乐部

一个增加PATH命令使用灵活性的程序



罗中 郑州铁路局计统处(450052)
罗中 郑州铁路局计统处(450052)
DOS系统中的PATH命令为用户提供了许多方便,但PATH命令只
有更新功能,即以PATH命令行的路径名串替代当前PATH串。在有些情
况下,比如,用户如果想在当前PATH串上再增加若干路径名时,就必须把
当前PATH串也重输一遍;或用户想从当前PATH串中去掉一个路径名时
,也几乎要把当前PATH串重输一遍,使用起来显得不够灵活。
我们知道,PATH命令是一个内部命令,用户通过PATH命令向系统
提交的路径名串以“PATH=[dir];[dir2];……”的形式存
放在系统环境块中,环境块的地址可从程序加载后的程序段前缀PSP的2c
h偏移处得到。
同时,DOS 3.X后允许在应用程序中以INT 2EH调用的方式
加载DOS内部命令,INT 2EH调用的格式如下:DS:SI指向要加
载的命令行,命令行的结构是<命令行字节长><命令名><命令行参数><
CR>。据此,笔者用汇编语言编写了一个名为AP.ASM的程序,该程序
通过编译、连接,并转换为.COM文件即可使用。
该程序可以使用户方便地做到:当用户想在当前PATH串上增加几个路
径名时,只需在AP命令行上按PATH命令要求的格式输入要增加的路径名
,而无需再输当前PATH串;其次,执行“AP-”,可从当前PATH串
上摘下一个路径名。增加了PATH命令使用的灵活性。详细实现请参阅程序
清单。有兴趣的朋友可以对该程序做进一步完善,使AP命令可替代PATH
命令使用。
*****
-do DEBOG.COM下看到的DOS5.0的PSP
1587:0000 CD 20 CU 9F 00 9A EE FE-1D F0 4F 03 EB 0F 8A 03.......O........
1587:0010 EB 0F 17 03 EB 0F AC 07-01 03 01 00 02 FF FF FF................
1587:0020 FF FF FF FF FF FF FF FF-FF FF FF FF D1 0F 4E 01...........N....
1587:0030 AB 14 14 00 18 00 87 15-FF FF FF FF 00 00 00 00................
1587:0040 05 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00................
1587:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 20...!............
1587:0060 20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 20................
1587:0070 20 20 20 20 20 20 20 20-00 00 00 00 40 7F 0F 66....@..f........
-dfd1:0 ;DEBUG.COM下看到的DOS5.0的环境块
0FD1:0000 43 4F 4D 53 50 45 43 3D-43 3A 5C 44 4F 53 5C 43 COMSPEC=C:\DOS\C
0FD1:0010 4F 4D 4D 41 4E 44 2E 43-4F 4D 00 58 4A 46 4F 4E OMMAND.COM.XJFON
0FD1:0020 54 3D 43 3A 5C 53 4A 46-4F 4E 54 00 32 31 33 4F T=C \XJFONT\2130
0FD1:0030 41 3D 43 3A 5C 32 31 33-4F 41 00 50 41 54 48 3D A=C:\2130A.PATH=
0FD1:0040 43 3A 5C 3B 43 3A 5C 44-4F 53 3B 43 3A 5C 32 31 C:;C:\DOS;C:\21
0FD1:0050 33 3B 43 3A 5C 57 49 4E-44 4F 57 53 00 00 01 00 3,C:\WINDOWS...
0FD1:0060 43 3A 5C 44 4F 53 50 44-45 42 55 47 2E 45 58 45 C:\DOS\DEBUG.EXE
0FD1:0070 00 00 00 83 0F 30 BE 80-83 44 53 00 8A 26 3F 7C ....n..3DS.&?|..
:编译:
:连接:
:谆缓 EXE2BIN AP.EXE AP.COM
:
COOE
ASSUME CS:COOE,OS:COOE.
SS:COOE
ORG 100H
AP PROC FAR
:制作PATH命令行参数,构造INT2BH调用环境 13
PUSH AX : 13
PUSH BX : 存
PUSH CX : 所
PUSH DX : 有
PUSH SI : 寄
PUSH DI : 存
PUSH DS : 器
PUSH ES : PUSH BP
:
PUSHF :
:
PUSH OS :
PUSH DS :
PUSH OS :
PUSH ES :
:
MOV BUF-SS,SS :
MOV BUF-SP,SP :
:
MOV AX,CS
MOV SS,AX
MOV SP,OFFSET SIK-TOP
:
MOV BX ,50H : 释放
MOV AX,4AOOH : 多余
INT 21H : 空间
:
MOV SI,8H :
MOV DI,OFF SET CMD P :
LINE_P: CLD : 读
XOR CX,CX : AP
LOOSB : 命
Cmp al,20h : 令
jz line_p : 行
cmp al,'_' : 参
jz sub_p : 数
CMP AL,ODH :
jz NEXT :
STOSB :
sub_P: INC CL :
JMP LINE_P :
mOV fi,l
XONCX,CX
PUSH CX
jmp sc_p
:
Cmp CX,D
jnz ii
mov al,odn
stosb
jmp 12
mov al
stosb
inc cx
PUSH CX
MOV Di,DffSet CMD_LINE
ADD BYTE PIR Di,CL
MOV CL,BYTE PTRDi
:
MOV BX,2CH :
MOV AX,BX : 搜
MOV ES,AX : 索
XOR Di,Di : 环
* CLD
: 境*
MOV CX,1000H : 块
MOV AL'P' :
REPNZ SCASB : 中
: JNZ EXIT : 原
MOV AX,'TA' : PATH
CMP ES:DI,AX : 串
JNZ L :
CMP ES:DI+2,AX :
JNZ 1 :
cmp fi,o
jz 13
mov cx,10h :
mov al,':' : 个PATH
repnz scasb : 路径
jnz exit
sub di,4
:
POP CX
PUSH ES
POP DS
PUSH CS
POP ES
PUSH DI :
POP SI : 原PATH
add si,4 : 串
MOV DI,OFFSET CMD_P : 与
ADD DI,CX : 新
LOOSB : 追
OR AL,AL : 加
JZ NEXT1 : 路
STOSB : 径
INC CL : 合
JMP PATH_P : 并
: :
NEXT1: mov al,Odh
stosb
PUSH CS
POP DS
:用INT2EH调用执行PATH命令,
创建环境块中的新PATH串
12: MOV SI,OFFSET CMD_INE
ADD BYTE PTR SI,CL
INT 2EH
:
EXIT: MOV DX,OFFSET MES
MOV AH,9
INT 21H
:
MOV SS,CS:BUF_SS :
MOV SP,CS:BUF_SP : 恢
: : 复
POPF : 所
POP BP : 有
POP ES : 寄
POP DS : 存
POP DI : 器
POP SI :
POP DX :
POP CX :
POP BX :
POP AX :
:
BOV AX,4COOH
INT 21H
:
BUF_SS DW O
BUF_SP DW O
fi Db O
CMD_LINE DB 05H,'PATH='
CMD_P DB 64DUP(0) ;PATH命令行参数串
mes Db'Usage:APadd_dir1:
add_dir2;...:add_dirn:
DB' AP_',ODH,OAH
DB' AP'
STK DW 256 DUP (?)
STK_TOP:
:
AP :
ENDP
:
CODE ENDS
END AP
*****

(计算机世界报 1994年 第10期)



周报全文频道联系方式:010-68130909
【关于我们】  【广告服务】  【周报发行】  【投稿指南】  【投稿声明】  【联系方式】  【法律声明】
  【媒体手册】  【编读往来】  
Copyright© ccw.com.cn,All rights reserved
中国计算机世界出版服务公司版权所有