;
;		ish file converter for MS-DOS  Ver 2.02 (90/10/20)
;
;
;		Copyright (c) 1986, 1987, 1989, 1990  by  M. ishizuka
;		All rights reserved.
;



;-----------------------------------------------;
;						;
;	seq_new					;
;						;
;	INPUT :	NON				;
;	OUTPUT: NON				;
;	ERROR :	error_14_2			;
;	BREAK : flags, ?			;
;						;
;-----------------------------------------------;

seq_new:	push	ax
		mov	al, seq_old
		inc	al
		cmp	al, byte ptr para_67_61
		jb	seq_new_3
		cmp	al, byte ptr para_69_63
		jb	seq_new_5
		@@chk_table
		cmp	word ptr end_length, 0
		jnz	seq_new_exit
		mov	al, 1
seq_new_3:	cmp	word ptr end_length, 0
		jnz	seq_new_6
		push	ax
		mov	ax, word ptr end_length2
		or	ax, ax
		jz	seq_new_3_1
		add	ax, 2
		cmp	ax, word ptr para_66$66_60$60
		jbe	seq_new_3_2
		mov	word ptr end_length2, 0
		sub	ax, word ptr para_66$66_60$60
		jmp	seq_new_3_2

seq_new_3_1:	mov	ax, word ptr para_66_60
		sub	length_low, ax
		sbb	length_high, 0d
		pop	ax
		jnc	seq_new_5
		push	ax
		mov	ah, byte ptr para_66_60
		mul	ah
		add	ax, word ptr length_low
		inc	ax
		mov	word ptr end_length2, ax
		inc	ax
		inc	ax
		cmp	length_low, -2
		jnc	seq_new_4_2
seq_new_3_2:	mov	word ptr end_length, ax
		pop	ax
		push	ax
		push	bx
		push	cx
		push	di
		mov	bl, al
		mov	ah, byte ptr para_69_63
		mul	ah
		mov	di, ax
		add	di, offset work_table
seq_new_4:	inc	bl
		cmp	bl, byte ptr para_67_61
		jnb	seq_new_4_1
		mov	al, bl
		stosb
		xor	ax, ax
		mov	cx, para_34_31
		rep	stosw
		jmp	seq_new_4

seq_new_4_1:	pop	di
		pop	cx
		pop	bx
seq_new_4_2:	pop	ax
seq_new_5:	mov	seq_old, al
		@@increment_line_number
		pop	ax
		ret

seq_new_6:	mov	al, byte ptr para_67_61
		jmp	seq_new_5

seq_new_exit:	pop	ax
		pop	bx			; pop return address
		jmp	error_14_2



;-----------------------------------------------;
;						;
;	restore_position			;
;						;
;	INPUT :	NON				;
;	OUTPUT: NON				;
;	ERROR :	NON				;
;	BREAK : flags, ax, si			;
;						;
;-----------------------------------------------;

restore_position:
		mov	si, save_pos
		inc	si
		cmp	byte ptr [si-1], 0ah
		mov	save_pos, si
		mov	ax, line_number_low_save
		jnz	restore_position_1
		inc	ax
restore_position_1:
		mov	line_number_low, ax
		mov	line_number_low_save, ax
		cmp	ax, 010000d
		mov	ax, line_number_high_save
		jnz	restore_position_2
		mov	word ptr line_number_low, 0
		mov	word ptr line_number_low_save, 0
		inc	ax
restore_position_2:
		mov	line_number_high, ax
		mov	line_number_high_save, ax
		ret



;-----------------------------------------------;
;						;
;	get_char				;
;						;
;	INPUT :	si (get character pointer)	;
;	OUTPUT: al (character)			;
;		flags (NC: ok)			;
;		      (CY: end of file)		;
;		      (ZR: CR or LF)		;
;		si (next pointer)		;
;	ERROR :	error_05			;
;	BREAK : flags				;
;						;
;-----------------------------------------------;

get_char:	cmp	si, offset read_buffer + 1000h
end_of_read_buffer equ	$-2
		jnc	get_char_4
get_char_1:	lodsb
		cmp	al, 0ah
		jnz	get_char_2
		inc	line_number_low
		cmp	line_number_low, 10000d
		jnz	get_char_2
		mov	line_number_low, 0
		inc	line_number_high
get_char_2:
lf_flag_patch_2:
		cmp	al, 0ah
		jz	get_char_3
		cmp	al, 0dh
get_char_3:	clc
		ret

get_char_4:	push	ax
		push	bx
		push	cx
		push	dx
		cmp	byte ptr lf_flag, 0
		jz	get_char_5
		push	di
		mov	si, offset read_buffer + 0f00h
		mov	di, offset pre_read_buffer
		mov	cx, 256d / 2
		rep	movsw
		sub	word ptr save_pos, 1000h
		pop	di
get_char_5:	mov	dx, offset read_buffer
		mov	cx, 1000h
		call	_read
		mov	si, offset read_buffer
		jc	error_05
		add	ax, si
		mov	word ptr end_of_read_buffer, ax
		cmp	ax, si
		pop	dx
		pop	cx
		pop	bx
		pop	ax
		jnz	get_char_1
		stc
		ret



;-----------------------------------------------;
;						;
;	_get_frame				;
;						;
;	INPUT :	NON				;
;	OUTPUT: ?				;
;	ERROR :	?				;
;	BREAK : flags, ax, bx, cx, dx, si, di, bp, ?
;						;
;-----------------------------------------------;

_get_frame:	mov	si, offset read_buffer + 1000h
save_si		equ	$-2
get_frame:
lf_flag_patch_1:
		call	restore_position
		@@get_char
		mov	di, offset work_work
		xor	dl, dl
		cmp	al, '#'
		jz	decode_7bit
		cmp	al, '!'
		jz	decode_13bit
		cmp	byte ptr type_flag, 's'
		jz	decode_15bit
		cmp	al, '!'+80h
		jz	decode_13bit
		cmp	byte ptr type_flag, 0
		jz	get_frame
		cmp	byte ptr type_flag, '7'
		jz	decode_13bit
		cmp	byte ptr type_flag, 'n'
		jz	decode_14bit
decode_7bit:	@@decode_7bit
get_frame_1:	@@crc_check
		jnz	get_frame
get_frame_2:	mov	word ptr save_si, si
		dec	si
		mov	save_pos, si
		mov	si, line_number_low
		mov	line_number_low_save, si
		mov	si, line_number_high
		mov	line_number_high_save, si
		ret

decode_13bit:	@@decode_13bit
		jmp	get_frame_1

decode_14bit:	@@decode_14bit
		jmp	get_frame_1

decode_15bit:	@@decode_15bit
		jmp	get_frame_1



;-----------------------------------------------;
;						;
;	disp_number				;
;						;
;	INPUT :	ax (number low word)		;
;		dx (number high word)		;
;	OUTPUT:	NON				;
;	ERROR :	NON				;
;	BREAK :	ax, dx, flags			;
;						;
;-----------------------------------------------;

disp_number:	push	bx
		push	cx
		push	ax
		push	dx
		@@dispchr	'['
		mov	dh, '0'
		mov	cx, 2
disp_number_1:	pop	ax
		push	cx
		mov	cx, 4
next_digit:	mov	dl, '0'
compare_num:	cmp	ax, 1000d
		jc	disp_number_2
		sub	ax, 1000d
		inc	dl
		jmp	compare_num
;
disp_number_2:	cmp	dl, 30h
		jnz	disp_number_3
		cmp	dh, 30h
		jz	disp_number_4
disp_number_3:	push	ax
		push	dx
		@@dispchr	dl
		pop	dx
		pop	ax
disp_number_4:	or	dh, dl
		add	ax, ax
		mov	bx, ax
		add	ax, ax
		add	ax, ax
		add	ax, bx
		loop	next_digit
		pop	cx
		loop	disp_number_1
		@@display	msg_br2
		pop	cx
		pop	bx
		ret



;-----------------------------------------------;
;						;
;	disp_number2				;
;						;
;	INPUT :	ax (number low word)		;
;		dx (number high word)		;
;		di (write buffer pointer)	;
;	OUTPUT:	di (next write buffer pointer)	;
;	ERROR :	NON				;
;	BREAK :	ax, dx, flags			;
;						;
;-----------------------------------------------;

disp_number2:	push	bx
		push	cx
		push	ax
		push	dx
		mov	dh, '0'
		mov	cx, 2
disp_number2_1:	pop	ax
		push	cx
		mov	cx, 4
next_digit2:	mov	dl, '0'
compare_num2:	cmp	ax, 1000d
		jc	disp_number2_2
		sub	ax, 1000d
		inc	dl
		jmp	compare_num2
;
disp_number2_2:	cmp	dl, 30h
		jnz	disp_number2_3
		cmp	dh, 30h
		jz	disp_number2_4
disp_number2_3:	mov	[di], dl
		inc	di
disp_number2_4:	or	dh, dl
		add	ax, ax
		mov	bx, ax
		add	ax, ax
		add	ax, ax
		add	ax, bx
		loop	next_digit2
		pop	cx
		loop	disp_number2_1
		pop	cx
		pop	bx
		ret



;-----------------------------------------------;
;						;
;	disp_fname				;
;						;
;	INPUT :	si				;
;	OUTPUT:	NON				;
;	ERROR :	NON				;
;	BREAK :	ax, cx, dl, si			;
;						;
;-----------------------------------------------;

disp_fname:	mov	cx, 12d
		mov	ah, 0
disp_fname_1:	call	lodsb_tolower_new
		@@dispchr	al
		loop	disp_fname_1
		ret



;-----------------------------------------------;
;						;
;	rename_extension			;
;						;
;	INPUT :	al ('0': rename to 000..999)	;
;		   ('#': rename to #00..#99)	;
;	OUTPUT:	NON				;
;	ERROR :	ZR				;
;	BREAK :	flags, al, cx, si, di		;
;						;
;-----------------------------------------------;

rename_extension:
		cmp	byte ptr renamed_flag, al
		jz	increment_extension
		@@rename_extension_to_000
		or	al, al			; clear ZR flag
		ret

increment_extension:
		@@increment_extension
		ret



;-----------------------------------------------;
;						;
;	cmpfile_or_outputfile_open		;
;						;
;	INPUT :	NON				;
;	OUTPUT:	?				;
;	ERROR :	skip_other_os_file, ?		;
;	BREAK :	?				;
;						;
;-----------------------------------------------;

cmpfile_or_outputfile_open:
		cmp	byte ptr _dta_id, 2
		jz	cmpfile_or_outputfile_open_1
		mov	ah, 1ah
		mov	dx, offset _dta2
		int	21h			; set DTA
		mov	byte ptr _dta_id, 2
cmpfile_or_outputfile_open_1:
		mov	byte ptr create_flag, 0
		mov	al, byte ptr os
		mov	bx, offset msdos_path
		cmp	al, 10h
		jc	check_os_4
		mov	bx, offset cpm_path
		cmp	al, 20h
		jc	check_os_4
		mov	bx, offset os9_path
		cmp	al, 30h
		jc	check_os_4
		mov	bx, offset unix_path
		cmp	al, 40h
		jc	check_os_4
		mov	bx, offset mac_path
		cmp	al, 50h
		jc	check_os_4
		mov	bx, offset other_os_path
		cmp	al, 0ffh
		jc	check_os_4
		mov	bx, offset all_os_path
check_os_4:	cmp	byte ptr [bx], 0
		jz	skip_other_os_file
		mov	si, bx
		inc	si
		mov	di, offset work_fcb_2
fname_copy:	lodsb
		or	al, al
		jz	add_fname
		stosb
		jmp	fname_copy


add_fname_2:	mov	si, offset work_fcb[6]
		mov	di, si
		inc	di
		std
		mov	cx, 7
		rep	movsb
		mov	al, '_'
		stosb
		cld
		inc	byte ptr renamed_flag
;		cmp	byte ptr renamed_flag, 9
;		jnc	error_	; '_' ~ '______' are device names !!!
		pop	di
		sub	di, 9d
add_fname:	mov	si, offset work_fcb
		mov	cx, 9d
		rep	movsb
		push	di
		cmp	word ptr current_division, 0
		jz	add_fname_1
		cmp	byte ptr renamed_flag, 0
		jnz	add_fname_3
		mov	word ptr cmpfile_handler, 0
		mov	word ptr [di], '?#'
		mov	word ptr [di+2], '?'
		add	word ptr fsize_low, INTERMEDIATE_HEADER_SIZE
		adc	word ptr fsize_high, 0
add_fname_3:	mov	ah, 4eh
		mov	dx, offset work_fcb_2
		xor	cx, cx
		int	21h			; search first file
		jc	add_fname_0
		test	_dta2[15h], 40h
		jz	check_intermediate_ish_file_2
		jmp	add_fname_2

check_intermediate_ish_file_0:
		mov	bx, word ptr cmpfile_handler
		mov	ah, 3eh
		int	21h			; close file
		jc	error_24
		mov	word ptr cmpfile_handler, 0
check_intermediate_ish_file_1:
		mov	ah, 4fh
		int	21h			; search next file
		jc	add_fname_0
check_intermediate_ish_file_2:
		mov	si, offset _dta2[15h]
		lodsb
		and	al, 1fh
		jnz	check_intermediate_ish_file_1
		cmp	byte ptr it_flag, 0
		jnz	check_intermediate_ish_file_3
		test	byte ptr date_time_flag, 1
		jz	check_intermediate_ish_file_3
		lodsw
		cmp	ax, word ptr date_time_flag[1]
		jnz	check_intermediate_ish_file_1
		lodsw
		cmp	ax, word ptr date_time_flag[3]
		jnz	check_intermediate_ish_file_1
check_intermediate_ish_file_3:
		mov	si, offset _dta2[1ah]
		lodsw
		cmp	ax, word ptr fsize_low
		jnz	check_intermediate_ish_file_1
		lodsw
		cmp	ax, word ptr fsize_high
		jnz	check_intermediate_ish_file_1
		mov	di, si
		mov	cx, 9d
		mov	al, '.'
		repnz	scasb
		jnz	error_24
		mov	si, di
		pop	di
		push	di
		lodsb
		stosb
		cmp	al, '#'
		jnz	error_24
		lodsw
		stosw
		sub	al, '0'
		jb	check_intermediate_ish_file_1
		cmp	al, 10d
		jnb	check_intermediate_ish_file_1
		sub	ah, '0'
		jb	check_intermediate_ish_file_1
		cmp	ah, 10d
		jnb	check_intermediate_ish_file_1
		movsb
		mov	ax, 3d02h
		mov	dx, offset work_fcb_2
		int	21h
		jc	error_24
		mov	word ptr cmpfile_handler, ax
		mov	bx, ax
		mov	ax, 4200h
		mov	dx, word ptr length_low_org
		mov	cx, word ptr length_high_org
		int	21h
		jc	error_24
		mov	dx, offset write_buffer
		mov	cx, INTERMEDIATE_HEADER_SIZE
		mov	si, dx
		mov	ah, 3fh
		int	21h
		jc	error_24
		mov	di, offset idblock
		mov	cx, (offset idblock_header_copy_end - offset idblock) \
			    / 2
		repz	cmpsw
		jnz	check_intermediate_ish_file_0
		mov	cx, (offset idblock_volume_table_end - \
			     offset idblock_volume_table) / 2
		rep	movsw
		lodsw
		stosw
		cmp	ax, length_low_org
		jnz	check_intermediate_ish_file_0
		lodsw
		stosw
		cmp	ax, length_high_org
		jnz	check_intermediate_ish_file_0
		@@mark_idblock_volume_table
		mov	ax, word ptr cmpfile_handler
		jnz	error_26
		mov	word ptr cmpfile_handler, 0
		mov	write_handler, ax
		mov	byte ptr renamed_flag, '#'
		jmp	disp_renamed_fname

add_fname_0:	cmp	ax, 12h
		jnz	error_24
		sub	word ptr fsize_low, INTERMEDIATE_HEADER_SIZE
		sbb	word ptr fsize_high, 0
add_fname_1:	pop	di
		push	di
		cmp	word ptr cmpfile_handler, 0
		jnz	cmp_ng_2
		mov	si, offset work_fcb[9d]
		mov	cx, 4d
		rep	movsb
		mov	ah, 4eh
		mov	cx, 17h
		mov	dx, offset work_fcb_2
search_file:	int	21h
		jb	file_not_found
		test	_dta2[15h], 40h
		jnz	add_fname_2
		cmp	byte ptr renamed_flag, '?'
		jnz	make_cmp_table_2
		mov	di, offset _dta2[1eh]
		mov	al, '.'
		mov	cx, 9d
		repnz	scasb
		jnz	cmp_ng_3
		mov	si, di
		xor	cx, cx
		pop	di
		push	di
		lodsb
		stosb
		mov	bx, offset cmp_table_2
		cmp	al, '#'
		jz	make_cmp_table_1
		sub	al, '0'
		jb	cmp_ng_3
		cmp	al, 10d
		jnb	cmp_ng_3
		mov	bx, offset cmp_table
		cbw
		add	ax, ax
		add	ax, ax
		mov	cx, ax
		add	ax, ax
		add	ax, ax
		add	ax, ax
		add	cx, ax
		add	ax, ax
		add	cx, ax
make_cmp_table_1:
		lodsw
		stosw
		sub	al, '0'
		jb	cmp_ng_3
		cmp	al, 10d
		jnb	cmp_ng_3
		sub	ah, '0'
		jb	cmp_ng_3
		cmp	ah, 10d
		jnb	cmp_ng_3
		add	al, al
		add	ah, al
		add	al, al
		add	al, al
		add	al, ah
		mov	ah, 0
		add	ax, cx
		mov	cl, 8
		div	cl
		mov	cl, ah
		cbw
		add	bx, ax
		mov	al, 1
		shl	al, cl
		or	byte ptr [bx], al
		cmp	bx, offset cmp_table_2
		jnb	cmp_ng_3
make_cmp_table_2:
		mov	si, offset _dta2[15h]
		lodsb
		and	al, 18h
		jnz	cmp_ng_3
		cmp	byte ptr it_flag, 0
		jnz	not_date_time_cmp
		test	byte ptr date_time_flag, 1
		jz	not_date_time_cmp
		lodsw
		cmp	ax, word ptr date_time_flag[1]
		jnz	cmp_ng_3
		lodsw
		cmp	ax, word ptr date_time_flag[3]
		jnz	cmp_ng_3
not_date_time_cmp:
		mov	si, offset _dta2[1ah]
		lodsw
		cmp	ax, word ptr fsize_low
		jnz	cmp_ng_3
		lodsw
		cmp	ax, word ptr fsize_high
		jnz	cmp_ng_3
		mov	ax, 3d00h
		mov	dx, offset work_fcb_2
		int	21h
		jc	error_24
		mov	word ptr cmpfile_handler, ax
		test	byte ptr date_time_flag, 0ch
		jz	disp_renamed_fname_0
		mov	ax, word ptr fsize_low
		mov	dx, word ptr fsize_high
		mov	bx, word ptr cmpfile_handler
		call	calc_crc_of_file
		jc	error_05
		test	byte ptr date_time_flag, 4d
		jz	cmp_crc_32
		cmp	bp, word ptr crc_16
		jnz	cmp_ng_1
cmp_crc_32:	test	byte ptr date_time_flag, 8d
		cmp	ax, word ptr crc_32
		jnz	cmp_ng_1
		cmp	dx, word ptr crc_32[2]
		jnz	cmp_ng_1
		mov	ax, 4200h
		xor	cx, cx
		xor	dx, dx
		int	21h		; move file pointer (rewind)
		jc	error_05
disp_renamed_fname_0:
		cmp	word ptr max_division, 0
		mov	ax, word ptr cmpfile_handler
		jnz	error_26
		jmp	disp_renamed_fname

cmp_ng_1:	mov	bx, word ptr cmpfile_handler
		mov	ah, 3eh
		int	21h			; close file
		jc	error_24
cmp_ng_2:	mov	word ptr cmpfile_handler, 0
cmp_ng_3:	mov	ax, 4f3fh
		cmp	byte ptr renamed_flag, al
		jz	search_file
		mov	byte ptr renamed_flag, al
		mov	byte ptr work_fcb[9d], al
		mov	word ptr work_fcb[10d], '??'
		mov	di, offset cmp_table
		mov	cx, (125d + 13d) /2
		xor	ax, ax
		rep	stosw
		jmp	add_fname_1

file_not_found:	cmp	ax, 12h
		jnz	error_08
		cmp	byte ptr renamed_flag, '?'
		jz	check_disk_free_space_0
		cmp	word ptr max_division, 0
		jnz	cmp_ng_3
		jmp	check_disk_free_space_5

check_disk_free_space_0:
		mov	di, offset cmp_table
		mov	cx, 63d
		cmp	word ptr max_division, 0
		jz	check_disk_free_space_1
		mov	cx, 7d
		mov	di, offset cmp_table_2
check_disk_free_space_1:
		mov	si, di
		mov	ax, 0ffffh
		repz	scasw
		jz	error_08
		sub	di, 2
		mov	ax, word ptr [di]
		sub	di, si
		mov	cx, 8ffh
check_disk_free_space_2:
		inc	cl
		shr	ax, 1
		jc	check_disk_free_space_2
		mov	ax, di
		mul	ch
		xor	ch, ch
		add	ax, cx
		pop	di
		push	di
		mov	byte ptr [di], '#'
		cmp	byte ptr max_division, 0
		jnz	check_disk_free_space_4
		cmp	ax, 1000d
		jnb	error_08
		mov	byte ptr [di], '0'
check_disk_free_space_3:
		cmp	ax, 100d
		jb	check_disk_free_space_4
		sub	ax, 100d
		inc	byte ptr [di]
		jmp	check_disk_free_space_3

check_disk_free_space_4:
		inc	di
		cmp	ax, 100d
		jnb	error_08
		mov	cl, 10d
		div	cl
		add	ax, 3030h
		stosw
check_disk_free_space_5:
		cmp	word ptr max_division, 0
		jz	check_disk_free_space
		mov	byte ptr renamed_flag, '#'
		add	word ptr fsize_low, INTERMEDIATE_HEADER_SIZE
		adc	word ptr fsize_high, 0
		xor	ax, ax
		mov	di, offset idblock_volume_table
		mov	cx, (offset idblock_volume_table_end - \
			     offset idblock_volume_table ) / 2
		rep	stosw
		mov	ax, length_low_org
		stosw
		mov	ax, length_high_org
		stosw
		@@mark_idblock_volume_table
check_disk_free_space:
		mov	si, offset work_fcb_2
		mov	ax, [si]
		cmp	byte ptr dos_version, 3
		jc	skip_subst_check
		mov	di, offset work_fcb_3
		mov	ah, 60h
		int	21h
		mov	ax, word ptr work_fcb_3
skip_subst_check:
		xor	dl, dl
		cmp	ah, ':'
		jnz	skip_get_drive_name	; current drive
		call	tolower
		sub	al, 60h
		mov	dl, al
skip_get_drive_name:
		mov	ah, 36h
		int	21h		; get disk free space
		cmp	ax, 0ffffh
		jz	error_08
		mul	cx
		mul	bx
		sub	ax, word ptr fsize_low
		sbb	dx, word ptr fsize_high
		jc	error_16
		mov	ah, 3ch
		mov	dx, offset work_fcb_2
		xor	cx, cx
		int	21h		; create restore file
		jc	error_08
		mov	write_handler, ax
		mov	byte ptr create_flag, 0ffh
disp_renamed_fname:
		pop	si
		cmp	byte ptr renamed_flag, 0
		jz	disp_renamed_fname_2
		lodsb
		mov	byte ptr work_fcb[9d], al
		lodsw
		mov	word ptr work_fcb[10d], ax
disp_renamed_fname_2:
		cmp	current_division, 0
		jz	disp_renamed_fname_1
		mov	ax, 4200h
		mov	bx, write_handler
		mov	dx, word ptr division_offset_low
		mov	cx, word ptr division_offset_high
		int	21h		; move file pointer (positioning)
		jc	error_09
		mov	ax, word ptr current_division_length_low
		mov	word ptr fsize_low, ax
		mov	word ptr length_low_org, ax
		mov	ax, word ptr current_division_length_high
		mov	word ptr fsize_high, ax
		mov	word ptr length_high_org, ax
disp_renamed_fname_1:
		@@disp_renamed_fname
		ret



;-----------------------------------------------;
;						;
;	copy_fname_fcb_to_buffer		;
;						;
;	INPUT :	?				;
;	OUTPUT:	?				;
;	ERROR :	?				;
;	BREAK :	?				;
;						;
;-----------------------------------------------;

copy_fname_fcb_to_buffer:
		mov	cx, 8
		mov	ah, 0
copy_fname_fcb_to_buffer_1:
		call	lodsb_tolower_new
		cmp	al, ' '
		jz	copy_fname_fcb_to_buffer_2
		stosb
		loop	copy_fname_fcb_to_buffer_1
		inc	cx
copy_fname_fcb_to_buffer_2:
		dec	cx
		add	si, cx
		mov	cx, 4
		mov	ah, 0
copy_fname_fcb_to_buffer_3:
		call	lodsb_tolower_new
		cmp	al, ' '
		jz	copy_fname_fcb_to_buffer_ret
		stosb
		loop	copy_fname_fcb_to_buffer_3
copy_fname_fcb_to_buffer_ret:
		ret



;-----------------------------------------------;
;						;
;	disp_error_number			;
;						;
;	INPUT :	NON				;
;	OUTPUT:	NON				;
;	ERROR :	NON				;
;	BREAK :	flags, ax, dl, di		;
;						;
;-----------------------------------------------;

disp_error_number:
		mov	al, error_count
		add	al, 30h
		cmp	al, 30h
		jnz	disp_error_number_1
		mov	al, 'o'

;-----------------------------------------------;
;						;
;	disp_error_number2			;
;						;
;	INPUT :	NON				;
;	OUTPUT:	NON				;
;	ERROR :	NON				;
;	BREAK :	flags, ax, dl, di		;
;						;
;-----------------------------------------------;

disp_error_number2:
disp_error_number_1:
		mov	di, word ptr block_number_ptr
		cmp	byte ptr [di], '.'
		jz	disp_error_number_2
		mov	si, word ptr block_number_begin
		mov	di, si
		inc	si
		mov	cx, offset display_buffer[79]
		sub	cx, di
		rep	movsb
		dec	word ptr block_number_ptr
disp_error_number_2:
		stosb
		inc	word ptr block_number_ptr

;-----------------------------------------------;
;						;
;	draw_display_buffer:			;
;						;
;	INPUT :	NON				;
;	OUTPUT:	NON				;
;	ERROR :	NON				;
;	BREAK :	ax, cx, dl, si, flags		;
;						;
;-----------------------------------------------;

draw_display_buffer:
		@@dispstr2	display_buffer, 80d
		mov	cx, word ptr line_number_ptr
		sub	cx, offset display_buffer - 1
		@@dispstr2	display_buffer, cx
		ret
