タイトル | : blta.asm (オプション付き改造版) ver0.30k |
投稿日 | : 2012/01/04(水) 01:10 |
投稿者 | : konno | 番 号 | : 47 コメント数 4 |
#kyo5724 から転載 VTDOS|C:\VZ\T>BLTA.COM ? BLTA.COM file lister for Win32 DOS Ver0.30k 2012-01-02 usage BLTA opt filename opt D or d Double quote opt P or p full Path opt F or f File name opt opt H or h or ? Help usage このように、最初の引数が動作のオプションで、何もつけなければ、Bll と同じ動作 オプションは複数同時指定できます。"-" や "/" は無視します。 第一引数に "f" を指定して半角スペース1個空け第二引数にファイル名を指定できます。 VTDOS|C:\VZ\T>BLTA.COM f blt*.* BLT.000 BLT1.ASM BLT1.COM BLT1.EXE BLT1.LST BLT2.ASM blt2.com blt2.exe blt2.map BLTA.000 BLTA.ASM BLTA.COM blta.exe BLTA.MAP こんな感じになります。どうでしょうか。以下ソースです。 ;------------------------------------------------------------------------- ;blta.asm (Long Fullpath BLT All for win32_DOS) INCLUDE STDIO.H CODE SEGMENT BYTE ASSUME CS:CODE, DS:CODE, SS:CODE org 80h argc db ? argv db 127 dup (?) org 100h ;----------------------------------------------------------------- START: mov bx,80h ;↓ファイル名をASCIIZにする add bl,[bx] inc bx mov [bx],byte ptr 0 ;↑ここまで mov bx, offset argv SWCHR: add bx,1 cmp byte ptr [bx],'/' je SWCHR cmp byte ptr [bx],'-' je SWCHR cmp byte ptr [bx],'D' je OP_D cmp byte ptr [bx],'d' je OP_D cmp byte ptr [bx],'P' je OP_P cmp byte ptr [bx],'p' je OP_P cmp byte ptr [bx],'F' je OP_F cmp byte ptr [bx],'f' je OP_F cmp byte ptr [bx],'?' je USAGE cmp byte ptr [bx],'H' je USAGE cmp byte ptr [bx],'h' je USAGE cmp byte ptr [bx],' ' ;↓ファイル名の先頭を求める jne normal add bx,1 mov FILE2,word ptr bx jmp normal OP_D: mov OPT_D,1 jmp SWCHR OP_P: mov OPT_P,1 jmp SWCHR OP_F: mov OPT_F,1 jmp SWCHR USAGE: print help_usage newline retms ;----------------------------------------------------------------- ;get current disk normal: mov ah,19h int 21h ;-> disk num in AL add al,'A' ;num2char mov BUFF_DP, byte ptr al ;get current directory (LFN) mov dl,0 mov ax,7147h mov si,offset BUFF_DF ;BUFF_DP+3 int 21h cmp ax,7100h je ERR ;check & flag set cmp BUFF_DP[3],0 je FIND1 mov FLAG, byte ptr 1 ;if root 0, if not root 1 (=add '\') ;findfirst FIND1: mov ax,714eh mov dx,offset FILE1 cmp OPT_F,0 je FI0 mov word ptr dx,FILE2 FI0: call SET ;set cx, si, di int 21h cmp ax,7100h ;error check je BYE ;print drive+dir mov HAND, word ptr ax ;save handle num cmp OPT_D,0 je FI_2 putchar '"' FI_2: cmp OPT_P,0 je A1 mov bx,offset BUFF_DP call PRI cmp FLAG,0 je A1 putchar '\' A1: ;print filename mov bx,offset BUFF_F+2ch call PRI cmp OPT_D,0 je FI_3 putchar '"' FI_3: newline ;findnext FINDN: mov bx,HAND mov ax,714fh call SET int 21h jc BYEBYE ;print drive+dir cmp OPT_D,0 je FN_2 putchar '"' FN_2: cmp OPT_P,0 je B1 mov bx,offset BUFF_DP call PRI cmp FLAG,0 je B1 putchar '\' ;print filename B1: mov bx,offset BUFF_F+2ch call PRI cmp OPT_D,0 je B2 putchar '"' B2: newline jmp FINDN ERR: print ERR_MSG1 retms BYE: print ERR_MSG2 BYEBYE: mov bx,HAND ;HANDLE CLOSE mov ax,71a1h int 21h retms ;--- subroutines --- SET: mov cx,28h ;directory, volume 除く mov si,1 mov di,offset BUFF_F ret PRI: cmp [bx],byte ptr 0 je FIN putchar [bx] inc bx jmp PRI FIN: ret OPT_P db 0 ;full Path flag OPT_F db 0 ;Filename opt flag OPT_D db 0 ;double quote flag FLAG db 0 ;if root 0, if not root 1 (=add '\') HAND dw ? ;handle FILE1 db '*.*',0 FILE2 dw 0 ;opt filename BUFF_DP db ?,':\' BUFF_DF db 300 dup (0) BUFF_F db 320 dup (0) ERR_MSG1 db 'Run on Windows','$' ERR_MSG2 db 'File Not Found','$' help_usage db 'BLTA.COM file lister for Win32 DOS Ver0.30k 2012-01-02',CR,LF db ' usage BLTA opt filename',CR,LF db ' opt D or d Double quote',CR,LF db ' opt P or p full Path',CR,LF db ' opt F or f File name opt',CR,LF db ' opt H or h or ? Help usage',CR,LF db '$' pend
- No.47 一括表示へ - [ 返信 ] [引用無し] pre