;================================================
;= タイトル：すーぱーＤＥＬ　　　 ver 1.0	=
;=         programed by Ｋ.OKAMOTO :copy free   =
;================================================
;
;;参考文献:富士通ＦＭＲシリーズ　徹底解析マニュアル　：ＢＮＮ
;
	;
CODE	SEGMENT
	ASSUME	CS:CODE,DS:CODE		;;タイニーモデル
	;
F_NO	EQU	00H
F_LEFT	EQU	01H
F_RIGHT	EQU	02H
F_TYPE	EQU	04H
	;
	;
MOUSE	PROC	FAR		;;マウス割り込みルーチン
	;
	MOV	CL,3		;;水平位置
	SHR	BX,CL
	INC	BX
	MOV	CS:CUR_X,BL
	;
	MOV	CL,4		;;垂直位置
	SHR	DX,CL
	INC	DX
	MOV	CS:CUR_Y,DL
	;
	CMP	AX,0002H	;;左ボタン押してる
	JNE	TRG1
	CALL	HIT
	JMP	E_MOU
TRG1:	;
	CMP	AX,0008H	;;右ボタン押してる
	JNE	TRG2
	CALL	DIR
	JMP	E_MOU
TRG2:	;
	;
E_MOU:	RET
MOUSE	ENDP
	;
	;
HIT	PROC			;;左クリックルーチン
	;
	MOV	AX,CS			;DS=CS
	MOV	DS,AX
	;
HEAD:	CALL	GET_CH
	CMP	BX,0020H	;;スペース
	JNE	HEAD1
	JMP	E_HIT
	;
HEAD1:	CMP	BX,003EH	;;'>'
	JNE	HEAD2
	JMP	E_HIT
	;
HEAD2:	CMP	CUR_X,1		;;この文字列の先頭を探す
	JE	F_NAME
	DEC	CUR_X
	CALL	GET_CH
	CMP	BX,0020H
	JE	H_LOOK
	CMP	BX,003EH	;;'>'
	JNE	HEAD2
	JMP	E_HIT
	;
H_LOOK:	INC	CUR_X
	;
F_NAME:	MOV	AL,CUR_X
	;
	AND	AL,0FH		;;DIR /W で表示されたディレクトリを指すか？
	CMP	AL,01H
	JE	FIL_N
	;
	JMP	E_HIT
	;
	;
	;;ファイル名か？（文字列の構造）
	;
FIL_N:	MOV	CX,0		;;文字数
	MOV	DI,OFFSET F_BUFF
	;
FIL_N1:	CALL	GET_CH		;;ファイル名の文字の有る部分
	MOV	[DI],BX		;;xxxx____.xxx
	;			;;^^^^
	;
	INC	CX
	INC	CUR_X
	INC	DI
	INC	DI
	;
	CMP	BX,0020H	;;スペースを見つけた
	JZ	FIL_N2
	;
	CMP	CX,9		;;９文字つづくファイル名は無い
	JZ	E_HIT
	;
	JMP	FIL_N1
	;
FIL_N2:	DEC	CX
	DEC	CUR_X
	DEC	DI
	DEC	DI
	;
FIL_S:	MOV	WORD PTR [DI],0	;;終わりの記号
	;
FIL_S1:	CALL	GET_CH		;;ファイル名の文字の無い部分
	;			;;xxxx____.xxx
	;			;;    ^^^^^
	INC	CUR_X
	INC	CX
	;
	CMP	BX,0020H	;;スペースでなければならない
	JNE	E_HIT
	;
	CMP	CX,9		;;もう拡張子？
	JNE	FIL_S1
	;
	;
FIL_E:	MOV	DI,OFFSET E_BUFF
	MOV	CX,3
	;
FIL_E1:	CALL	GET_CH		;;拡張子の有る部分
	MOV	[DI],BX		;;xxxx____.xxx
	;			;;         ^^^
	INC	CUR_X
	INC	DI
	INC	DI
	;
	LOOP	FIL_E1		;;黙ってコピー
	;
	MOV	WORD PTR [DI],0	;;終わりの記号
	;
	MOV	SI,OFFSET S_DEL
	MOV	DI,OFFSET KBUFF
	MOV	CX,0
	;
	CALL	S_COPY
	;
	MOV	SI,OFFSET F_BUFF
	;
	CALL	S_COPY
	;
	MOV	WORD PTR [DI],002EH
	INC	DI
	INC	DI
	INC	CX
	;
	MOV	SI,OFFSET E_BUFF
	;
	CALL	S_COPY
	;
	;
	MOV	WORD PTR [DI],000DH
	INC	CX
	;
	MOV	WORD PTR [DI+2],0000H
	;
	CALL	JIS_CNV		;バッファのＪＩＳ漢字をシフトＪＩＳにする。
	;
	MOV	AX,0B01H
	MOV	DI,OFFSET KBUFF
	INT	90H
	;
E_HIT:	RET
HIT	ENDP
	;
	;
S_COPY	PROC			;MACRO
S_COP:	MOV	AX,[SI]
	MOV	[DI],AX
	INC	CX
	INC	SI
	INC	SI
	INC	DI
	INC	DI
	;
	CMP	AX,0
	JNZ	S_COP
	;
	DEC	CX
	DEC	SI
	DEC	SI
	DEC	DI
	DEC	DI
	;
S_CO_E:	RET
	;
S_COPY	ENDP
	;
	;
JIS_CNV	PROC	;バッファのＪＩＳ漢字をシフトＪＩＳにする。
	;
	MOV	SI,OFFSET KBUFF
JIS_1:	MOV	AX,[SI]
	;
	CMP	AX,0	;おしまい
	JE	JIS_E
	;
	TEST	AH,01H	;半角
	JZ	JIS_2
	;
	MOV	DH,AL	;漢字変換
	;
	MOV	AX,[SI+2]
	;
	CMP	AX,0	;おしまい
	JZ	JIS_E
	;
	MOV	DL,AL	;漢字変換
	;
	MOV	AH,00H	;漢字変換 "JIS" TO "SHIFT JIS"
	INT	0AFH
	;
	MOV	AH,0
	MOV	AL,DH
	MOV	[SI],AX		;漢字変換
	MOV	AL,DL
	MOV	[SI+2],AX	;漢字変換
	;
	INC	SI
	INC	SI
	;
JIS_2:	INC	SI
	INC	SI
	;
	JMP	JIS_1
	;
JIS_E:	RET	
	;
JIS_CNV	ENDP
	;
	;
DIR	PROC				;"DIR /W"する 
	;
	MOV	AX,CS			;DS=CS
	MOV	DS,AX
	;
	MOV	AX,0B01H
	MOV	CX,8
	MOV	DI,OFFSET DIRBUFF
	INT	90H
	;
E_DIR:	RET
	;
DIR	ENDP
	;
	;
GET_CH	PROC
	MOV	DH,CUR_Y	;;１文字取り出しサブルーチン
	MOV	DL,CUR_X	;;DL=桁位置 DH=行位置
	;
	MOV	AH,14H
	INT	91H
	;
	mov	ax,bx
	MOV	CH_TY,BH	;;bit0=0:半角 1:全角 bit1=0:1byte 1:2byte
	MOV	CH_JIS,BL	;;文字コード
	;
	RET
GET_CH	ENDP
	;
	;
	;
CUR_X	DB	?
CUR_Y	DB	?
CH_TY	DB	?
CH_JIS	DB	?
	;
F_BUFF	DW	20H DUP (?)
E_BUFF	DW	10H DUP (?)
KBUFF	DW	40H DUP (?)
	;
	;
DIRBUFF	DB	' ',00H,'D',00H,'I',00H,'R',00H,' ',00H,'/',00H,'W',00H,0DH,00H
S_DEL	DB	'D',00H,'E',00H,'L',00H,' ',00H,00H,00H
	;
	DB	100H DUP (?)	;＜これがないと暴走する？魚田さん教えて下さい｡
	;
	;
LOADER	PROC	;;ここ以降は常駐するとき捨てられる
	;
	MOV	AX,CS			;DS=CS
	MOV	DS,AX
	;
	MOV	AH,00H		;;マウス動作開始
	INT	99H
	;
	MOV	AX,0200H	;;マウスカーソル表示
	INT	99H
	;
	MOV	AH,0CH		;;マウスカーソルのスピードを上げる
	MOV	DH,04H		;;水平
	MOV	DL,04H		;;垂直
	INT	99H
	;
	MOV	DX,OFFSET MSG	;;タイトル表示
	MOV	AH,09H
	INT	21H
	;
	MOV	AX,CS
	MOV	DS,AX
	;
	MOV	AH,0BH		;;マウス割り込みルーチンの定義
	MOV	DX,000AH
	MOV	DI,OFFSET MOUSE
	INT	99H
	;
	MOV	DX,OFFSET LOADER	;;常駐終了
	SHR	DX,1
	SHR	DX,1
	SHR	DX,1
	SHR	DX,1
	INC	DX
	MOV	AX,3100H
	INT	21H
	;
MSG	DB	01BH,'[31m','｣'
	DB	01BH,'[0;1m',' 　すーぱーＤＥＬ　 ver 1.0　'
	DB	01BH,'[31m','｣'
	DB	0DH,0AH
	DB	01BH,'[31m',' Ｋ',01BH,'[0m','.OKAMOTO 1990  <<COPY FREE>>'
	DB	0DH,0AH
	DB	0DH,0AH
	DB	01BH,'[1;31m','　＜＜警告＞＞'
	DB	0DH,0AH
	DB	01BH,'[0;33m'
	DB	'現在よりマウスでクリックされたファイルを削除します。'
	DB	0DH,0AH
	DB	'非常に危険なプログラムなので、なんだかよくわからない'
	DB	0DH,0AH
	DB	'人は、いますぐＴＯＷＮＳをリセットして下さい。'
	DB	0DH,0AH
	DB	'回復させるときはリセットするかEXTCONS2を必ずキーボード'
	DB	'から打ち込んで下さい｡'
	DB	0DH,0AH,'$'
	;
LOADER	ENDP
	;
CODE	ENDS
	END	LOADER
