ds_name		db	'MOJ\NAME_O',0

db 'NAME_O5R.HD6  ローマ字にした｡',0 
db 'NAME_O4.HD6  1993 10 19 NAME_L2.HD6 の実行部分',0 
db '808/812/816/820',0

look_me:
	 call sub_esi         ; esi 固定です｡
	 dd 2 dup (0)
	 dw 1,0
	 dd 5 dup(0)

;---------------------------使用するモジュール
moj1:
	call sub_edi
	dw 0
	db 'CHOSYO',0
moj2:
	call sub_edi
	dw 0
	db 'KANU',0
moj3:
	call sub_edi
	dw 0
	db 'WORD_O',0
moj4:
	call sub_edi
	dw 0
	db 'KANRI',0
;--------------------------------使用するマクロ
save:		M_SAVE
load:		M_LOAD
f_siz:		M_BYTESU
kesu_ms:	M_KESUMS
matu:		M_MATUMS
p_call:		M_P_CALL
p_set:		M_P_SET
;-------------------------------------------------------
;***************************************************
; プログラム部分
;***********************************

;-----------------------データ
dr_num:
	call	sub_edx
	db	'WDTST\SEISEKI\**.*',0

dr_num1:
	call	sub_edx
	db	'WDTST\MONDAI\**.*',0

hito_num:			;人物ファイル名の保存
	call	sub_edx
	db	80 dup(0)

mon_num:			;問題ファイル名の保存
	call	sub_edx
	db	80 dup(0)

choice:
	call	sub_esi
	dw	0		;0 成績ファイル読み込み
	dw	0		;2 問題名は有る
	dw	0		;4 問題は読み込まれている
	dw	0		;6 再テスト?

hito_siz:
	call	sub_edi
	dd	0,0,0

;*********************************************************************

paint_wd:
	SET_P moj1
	SET_P moj2
	SET_P moj3
	SET_P moj4
	call	hito_num	;共通データ領域の使用
	KAKU	808,edx		;本当はこう言う風には使いません
	call	mon_num		;今回は全てに渡って手抜きです｡
	KAKU	812,edx
	call	hito_siz
	KAKU	820,edi
	call	choice
	mov	edi,esi
	KAKU	816,edi
	WD_LEFT
	ret
re_paint:
mouse_in:	 ret

;-----------------------------------------
be_called:
	YOMU	ax,300
	cmp	ax,1
	je	get_num
	cmp	ax,2
	je	monda
	cmp	ax,3
	je	siken
	ret

;**********************************************************

dr_open:
	mov	ax,5
	KAKU	300,ax
	KAKU	302,edx
	CALL_P moj1		;指定されたデイレクトリを開く
	CALL_P moj2		;フアイルセレクターを開く
	ret

;-----------------------------文字の複写
t_num_1:
	mov	al,[edi]
	mov	[edx],al
	inc	edi
	inc	edx
	cmp	al,0
	jne	t_num_1
	ret

t_num_2:
	mov	al,[edx]
	mov	[edi],al
	inc	edi
	inc	edx
	cmp	al,0
	jne	t_num_2
	ret

;-------------------------------------------------------------
;----------------------成績ファイルに間違った物が読み込まれた
no_cho1:

	YOMU	ecx,800
	YOMU	edx,804

	mov	byte ptr [ecx],0	;先頭に0を書くことで空の文字列になる
	mov	byte ptr [edx],0
	call	choice
	mov	dword ptr [esi],0
	ret

;**********************************


;-------------------------------------	
;名前が入力される｡
get_num:

	call	dr_num
	call	dr_open
	cmp	edx,0		;edxにファイル名先頭番地
	je	no_cho		;edx=0 ならキャンセル
	call	choice
	mov	eax,0
	mov	[esi],eax
	mov	[esi+4],eax
	mov	edi,edx		;edxは使うのでediに移す

	call	hito_num	;人物ファイル名の記憶
	call	t_num_1

	call	hito_num
	call	f_siz

	call	hito_siz
	mov	[edi],ecx
	cmp	ecx,0
	je	no_cho		;そんなファイルは無い

	RAM1	edi
	mov	eax,0
	mov	ecx,1024*10      ;10k 0にする
	cld
	rep	stosd

	RAM1	edi
	call	hito_num
	call	load			;人物ファイルの読み込み

	KAKU	word ptr 300,1
	CALL_P	moj4			;成績ファイルかどうか調べる｡


	cmp	ax,0			;bad file
	je	no_cho1			;初期状態に戻す

	call	choice
	mov	word ptr [esi],1	;最初
	mov	word ptr [esi+2],0	;問題名は無い

	YOMU	edi,804
	mov	byte ptr [edi],0	;前の問題名を消す｡

;	cmp	ax,1
;	je	get_n2
;	mov	word ptr [esi+2],1	;問題名は有る
;	mov	edx,edi			;edi last_mon_name
;	YOMU	edi,804
;	call	t_num_2		;前回問題名

get_n2:
	YOMU	edi,800
	RAM1	ecx
get_n1:
	mov	al,[ecx]
	mov	[edi],al
	inc	edi
	inc	ecx
	cmp	al,0dh
	jne	get_n1
	mov	byte ptr -1[edi],0
no_cho:
	ret
;----------------------------------------------

monda:
	call	choice
	cmp	word ptr [esi],1	;人の名前は有るか
	je	monda1
	ret
monda1:
	call	dr_num1
	call	dr_open

	cmp	edx,0
	je	no_cho

	call	choice
	mov	eax,0
	mov	[esi+2],eax
	mov	[esi+6],ax

	mov	edi,edx		;edxは使うのでediに移す
	call	mon_num		;問題ファイル名の記憶
	call	t_num_1

	call	mon_num
	call	f_siz
	call	hito_siz
	mov	[edi+4],ecx		;ファイルサイズ保存

	RAM0	edi
	call	mon_num
	call	load		;問題ファイルの読み込み
	call	fnd_mon_num

	call	choice
	mov	word ptr [esi+2],1
	mov	word ptr [esi+4],1

	KAKU	word ptr 300,2
	CALL_P moj4			;試験の準備

	ret
;---------------------------------------------------------------
;----------------------ファイル名の切り出し
;ファイルに関する物は張昭と言うモジュールが扱っています｡
;同じ部分を何度も書くのが面倒なので｡
;普段はファイルセレクター関羽が絶えず張昭を呼び出しています｡
;コマンド番号8番は\を01hに書き直します｡
;302から始まる文字列の中に\を見つけて1hにする


fnd_mon_num:
	call	mon_num
	KAKU	302,edx 
	KAKU	word ptr 300,8
	CALL_P moj1		;張昭コール

	call	mon_num
	mov	edi,edx
	cld
	mov	al,0
	mov	ecx,80
	repne	scasb
	jne	okasizo
	dec	edi
	mov	al,1
	std
	mov	ecx,14
	repne	scasb
	jne	okasizo
	cld			;戻す
	mov	esi,edi
	add	esi,2
	YOMU	edi,804
	mov	ecx,15
	rep	movsb	;[esi]→[edi] fpr ecx >0 step 1
okasizo:
	cld
	ret


;********       ; 8個でデータの一区切り
;db 16		; 前回の問題名      例えば 動詞1
;db 16		; 問題名      例えば 名詞1
;dw             ; 問題数
;db* 問題数     ; 正解数
;db* 問題数     ; 間違えた数
;db 16		; 問題名      例えば 名詞2
;dw             ; 問題数
;db* 問題数     ; 正解数
;db* 問題数     ; 間違えた数

siken:
	call	choice
	mov	ax,[esi]
	mov	bx,[esi+2]
	mov	cx,[esi+4]
	add	ax,bx
	add	ax,cx
	cmp	ax,3
	je	ken1
	ret

ken1:

	mov	ax,1
	KAKU	300,ax
	CALL_P moj3                    ;試験に行く


	call	choice
	mov	word ptr [esi+6],1	;次からは再テスト

	YOMU	ecx,820		;file size 保存バッファ
	mov	ecx,[ecx]	;人物ファイルサイズ

	call	hito_num

	RAM1	edi
	call	save		;人物ファイルの書き込み

ken2:
	ret


