テスト   ISH置き場             
[記事リスト(ツリー表示)]  [ 返信 ]   [新着記事] [最新50] [ワード検索] [過去ログ]

タイトル 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


- 関連一覧ツリー (先頭の番号をクリックするとツリー全体を一括表示します)
47.blta.asm (オプション付き改造版) ver0.30k - konno 12/01/04-01:10
  ┣48.blta.asm ver0.31k - konno 12/01/04-02:09
  ┃┗49.blta.com ver0.31k の ish - konno 12/01/04-12:36
  ┣50.blta.asm ver0.40k all DOS版 - konno 12/01/04-20:42
  ┃┗51.blta.com ver0.40k all DOS版のish - konno 12/01/04-20:43
  ┗52.blta.asm ver0.41k all DOS版 バグ修正 - konno 12/01/08-02:03

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)   [引用無し]
おなまえ 
Eメール 
タイトル 
メッセージ auto soft pre(図表、プログラム) ※折り返さずに改行を入れてね
 参照先 
 暗証キー (英数字で8文字以内)
 プレビュー          

- 以下のフォームから自分の投稿記事を修正・削除することができます -
   処理   記事No   暗証キー
    [ページトップへ] [管理用]