;		Graph_lib
;
;		call from High C
;
;		1990 4  Hiroshi TODA
;

	.386p

work4	struc		; files WORK
;data area
path	dd	?	; path name address
output	dd	?	; file name output address
dta	dd	?	; DTA trans address
attr	dd	?	; attr
fmode	dd	?	; 0:first 1:next 2:end
;work area
pathbuf	dd	?	; path “]‘—
	dd	?
	dd	?
	dd	?
	dd	?
	dd	?
	dd	?
	dd	?
	dd	?
	dd	?
	dd	?
	dd	?
	dd	?
	dd	?
	dd	?
	dd	?
fbuf	dd	?
work4	ends

work5	struc		; key console BIOS WORK
x51	dd	?
x52	dd	?
x53	dd	?
x54	dd	?
work5	ends

        cseg	segment	'CODE'
	assume	cs:cseg,ds:cseg

;files(work,para) para=eax --> path-addre out-addre DTAout-add attr mode

	public	files
	db	'files',5
files	proc	near
	push	ebp
	mov	ebp,esp			; ebp <-- param area top add
	push	esi
	push	edi
	push	ebx
	mov	esi,offset #buffer	; esi <-- Ž©‘O‚Ì buffer
	mov	edi,[ebp+12]		; edi <-- para. add.
	xor	ecx,ecx			; ecx=count
file01:	mov	eax,[edi][ecx*4]	; para. --> work area
	mov	[esi][ecx*4],eax
	inc	ecx
	cmp	ecx,5
	jb	file01
	mov	edx,[esi].path		; path trans
	lea	edi,[esi].pathbuf
	xor	ecx,ecx
file0A:	mov	eax,[edx][ecx*4]
	mov	[edi][ecx*4],eax
	inc	ecx
	cmp	ecx,16
	jb	file0A
	mov	eax,[esi].fmode		; eax <-- mode
	cmp	eax,0
	jne	file05
	lea	edx,[esi].fbuf	; mode 0
file02:	mov	ah,1Ah			; buffer set
	int	21H
	mov	edx,[esi].path
file03:	mov	ah,4Eh			; first search
	mov	ecx,[esi].attr		; attr.
	int	21h
	jc	file07			; no file
	call	putf
	xor	eax,eax
	jmp	file08
file05:	cmp	eax,1
	jne	file08
	mov	ah,4Fh		; mode 1
	int	21h
	jc	file07
	call	putf
	xor	eax,eax
	jmp	file08
file07:	and	eax,0FFFFh
file08:	pop	ebx
	pop	edi
	pop	esi
	mov	esp,ebp
	pop	ebp
	ret

putf:	lea	edx,[esi].fbuf+1Eh	; display f-name out
	mov	edi,[esi].output
	xor	ecx,ecx
putf01:	mov	byte ptr [edi][ecx],20h
	inc	ecx
	cmp	ecx,16
	jb	putf01
	mov	eax,[edx]
	and	eax,0FFFFh		; '..', '.' check
	cmp	eax,02E2Eh
	je	putf02
	cmp	eax,02Eh
	jne	putf0A
putf02:	mov	[edi],eax
	jmp	putf05
putf0A:	xor	ecx,ecx
putf03:	mov	al,[edx][ecx]
	cmp	al,'.'
	je	putf04
	mov	[edi][ecx],al
	inc	ecx
	cmp	ecx,13
	jb	putf03
	jmp	putf05
putf04:	inc	ecx
	mov	eax,[edx][ecx]
	mov	[edi].9,eax
putf05:	lea	edx,[esi].fbuf		; DTA out
	mov	edi,[esi].dta
	xor	ecx,ecx
putf06:	mov	al,[edx][ecx]
	mov	[edi][ecx],al
	inc	ecx
	cmp	ecx,43
	jb	putf06
	ret

#buffer	db	256 dup(0)

files	endp

;get_directory(drive,path_name_address)

	public	get_directory
	db	'get_directory',13
get_directory proc	near
	push	ebp
	mov	ebp,esp			; ebp <-- param area top add
	push	esi
	push	edi
	push	ebx
	mov	esi,[ebp+12]		; path_name address
	mov	edx,[ebp+8]		; drive number
	mov	ah,47h
	int	21h
	jc	#get01
	xor	eax,eax
#get01:	and	eax,0000FFFFh
	pop	ebx
	pop	edi
	pop	esi
	mov	esp,ebp
	pop	ebp
	ret
get_directory endp

;keyin(out,para) para=eax,ebx,ecx,edx --> out=eax,ebx,ecx,edx

	public	keyin
	db	'keyin',5
keyin	proc	near
	push	ebp
	mov	ebp,esp			; ebp <-- param area top add
	push	esi
	push	edi
	push	ebx
	mov	esi,[ebp+8]		; esi <-- work area top add
	mov	edi,[ebp+12]		; edi <-- para. add.
	xor	ecx,ecx			; ecx=count
key01:	mov	eax,[edi][ecx*4]	; para. --> work area
	mov	[esi][ecx*4],eax
	inc	ecx
	cmp	ecx,4
	jb	key01
	mov	eax,[esi].x51		; ES store
	mov	ebx,[esi].x52
	mov	ecx,[esi].x53
	mov	edx,[esi].x54
	int	90H
	mov	[esi].x51,eax
	mov	[esi].x52,ebx
	mov	[esi].x53,ecx
	mov	[esi].x54,edx
	xor	eax,eax
	pop	ebx
	pop	edi
	pop	esi
	mov	esp,ebp
	pop	ebp
	ret
keyin	endp

;console(out,para) para=eax,ebx,ecx,edx --> out=eax,ebx,ecx,edx

	public	console
	db	'console',7
console	proc	near
	push	ebp
	mov	ebp,esp			; ebp <-- param area top add
	push	esi
	push	edi
	push	ebx
	mov	esi,[ebp+8]		; esi <-- work area top add
	mov	edi,[ebp+12]		; edi <-- para. add.
	xor	ecx,ecx			; ecx=count
cns01:	mov	eax,[edi][ecx*4]	; para. --> work area
	mov	[esi][ecx*4],eax
	inc	ecx
	cmp	ecx,4
	jb	cns01
	mov	eax,[esi].x51		; ES store
	mov	ebx,[esi].x52
	mov	ecx,[esi].x53
	mov	edx,[esi].x54
	int	91H
	mov	[esi].x51,eax
	mov	[esi].x52,ebx
	mov	[esi].x53,ecx
	mov	[esi].x54,edx
	xor	eax,eax
	pop	ebx
	pop	edi
	pop	esi
	mov	esp,ebp
	pop	ebp
	ret
console	endp

        cseg	ends
	end

