|
||||
一个增加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 | ||||||
| 中国计算机世界出版服务公司版权所有 | ||||||