ds_name		db	'MOJ\KANRI',0

db 'KANR8R.HD6  ',0
db 'KANRI3.HD6 1993 10 19 単語テストの成績管理',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	'WORD_O',0


p_call:		M_P_CALL
p_set:		M_P_SET



L_NAME	EQU	4
L_DATE	EQU	4+16
T_KAI	EQU	4+16+6
T_MON	EQU	4+16+6+2



; HEAD データの形
;****
;db 4 成績'       	; 成績ファイルとして書き込み済かのチエックの為
;db 16			;前回の問題名
;db 6 			;前回の日付   fx 1993 10 10 火曜日
;db 2 		 	;トータル試験回数
;db 2			;管理している問題数---------どんな問題の成績が有るか


;********        ;8個でデータの一区切り
;db 16		 ; 前回の問題名      例えば 動詞1
;db 16		 ; 問題名      例えば 名詞1
;db             ;問題数
;db* 問題数     ; 正解数
;db* 問題数     ; 間違えた数
;db 16		 ; 問題名      例えば 名詞2
;db             ;問題数
;db* 問題数     ; 正解数
;db* 問題数     ; 間違えた数


paint_wd:
	SET_P	moj1
	WD_LEFT
	ret
re_paint:
mouse_in:
	ret

be_called:
	YOMU	ax,300
	cmp	ax,1
	je	first		;成績表が読み込まれた｡
	cmp	ax,2
	je	ikouka          ; 問題が読み込まれた
	ret

error_1:

	KAKU	word ptr 300,0		;data error
	ret

;最初に行う処理
;-------------------------成績ファイルが読み込まれた
first:

	YOMU	ecx,820		;file size 保存バッファ
	mov	ecx,[ecx]	;人物ファイルサイズ
	RAM1	edi		;ファイル読み込み場所｡
	mov	al,'*'
	mov	ebx,'****'
	inc	ecx
	cld
fst_1:
	repne	scasb
	jne	error_1
	cmp	[edi],ebx		;**** ?
	jne	fst_1
	mov	al,0ah
	mov	ecx,80
	cld
	repne	scasb
	jne	error_1
;-------------------------------
;	既に書き込みが有るか調べる

	call	ck_fst		;edx
	mov	[edx+D_HEAD],edi	;save data head
	mov	ax,[edi]
	xchg	ah,al
	cmp	ax,'成'
	jne	fst_4
	mov	ax,[edi+2]
	xchg	ah,al
	cmp	ax,'績'
	je	fst_2		;既に書き込みが有る
fst_4:
	mov	ax,'成'
	xchg	ah,al
	mov	[edi],ax
	mov	ax,'績'
	xchg	ah,al
	mov	[edi+2],ax
	mov	ax,0a0dh
	mov	[edi+4],ax
	mov	dword ptr [edx],1	;初めてだの印 自分用
	mov	ax,1
	YOMU	edx,820		;file size 保存バッファ
	mov	ecx,[edx]	;人物ファイルサイズ
	add	ecx,6+16
	mov	[edx],ecx
	jmp	fst_3
;----------------------
;二回目以降
fst_2:
	mov	dword ptr [edx],2	;初めてでは無い
	mov	ax,2
fst_3:
	add	edi,6			;前回問題名はここから
	KAKU	800+(4*13),edi
	ret
;---------------------------------------------------------
ck_fst:
	call	sub_edx
	dd	0		;0  1=初めて 2=既に書き込み有り
	dd	0		;4  seiseki data head 成績の字の頭
	dd	0		;8  今の問題のデータの頭
	dd	0		;12 成績ファイルサイズ


D_HEAD	EQU	4	;成績部分の頭
M_HEAD	EQU	8	;選ばれた問題の頭
F_SIZE	EQU	12	;file size


;----------------------
; 問題が読み込まれた
; 成績簿には既に成績は有るか｡ 無ければ簡単
; この問題は初めてか   初めてなら 管理の場所を作る
; 問題数に変化は無いか｡ 有れば 成績の最後に写し､元を消し､場所を増やす

ikouka:

	YOMU	eax,804
	mov	esi,eax
	YOMU	edi,800+(4*13)  ;一番最後に行ったテストの名前として記憶
	mov	ecx,16
	cld
	rep	movsb
	mov	bx,0a0dh
	mov	-2[edi],bx
	KAKU	800+(4*14),edi       ;念の為に

;------------------------------------その問題は既に成績の中に有るか
	YOMU	edi,804
	mov	esi,edi
	mov	al,0
	mov	ecx,20
	cld
	repne	scasb
	dec	edi
	mov	edx,edi

	YOMU	ecx,820		;file size 保存バッファ
	mov	ecx,[ecx]	;人物ファイルサイズ

	YOMU	edi,800+(4*14)
	call	kensak
	cmp	edi,0
	je	newtx
;-----------------------------既に試験済

	KAKU	800+(4*14),edi       ;念の為に
	add	edi,16
	KAKU	800+(4*15),edi      ;成績表 ここから 問題数+成績
	KAKU	word ptr 300,2
	CALL_P	moj1
	ret
;-------------------------------新しい問題
newtx:
	YOMU	ecx,820		 ; file size 保存バッファ
	mov	ecx,[ecx]	 ; 人物ファイルサイズ

	RAM1	edi
	add	edi,ecx

	KAKU	800+(4*14),edi   ;ファイルの最後が今の問題の成績開始番地

	mov	bx,0a0dh
	YOMU	eax,804          ; 問題の名前
	mov	esi,eax
	mov	ecx,16
	cld
	rep	movsb
	mov	-2[edi],bx

	KAKU	800+(4*15),edi      ;成績表 ここから 問題数+成績


	KAKU	word ptr 300,2
	CALL_P	moj1

	YOMU	edx,800+(4*17)   ; 成績最後の番地
	RAM1	edi
	sub	edx,edi


	YOMU	ecx,820		;file size 保存バッファ
	mov	[ecx],edx	;人物ファイルサイズを増やす
	ret			;試験に行く

kensak:
	cld
	sub	edx,esi		;検索もじすう
	lodsb
	push	esi
	dec	edx
	js	short kensa_e		; 検索文字列未設定
kensa1:
	repne	scasb			; 第１文字検索
	jne	short kensa_e		; 一致する文字がない
	mov	esi,[esp]  		; ２文字目以降の一致を調べる
	push	ecx
	push	edi
	mov	ecx,edx
	repe	cmpsb
	pop	edi
	pop	ecx
	jne	kensa1		; 一致しなかった

	cmp	ecx,edx
	jb	short kensa_e	; データ終わりを超えていた
	dec	edi

	pop	esi
	ret
kensa_e:
	pop	esi
	xor	edi,edi
	ret


