
;	* BFBAvail v1.0
;	* -------------
;	* By Jarkko Vatjus-Anttila

	include	include/macros.i
	include libraries/dosxref.i
	include	libraries/execxref.i
	include exec/memory.i

	section	code,code

	move.l	4,a6
	cmp.b	#"f",(a0)
	bne	noflush

	move.l	#MEMF_PUBLIC,d1
	call	AvailMem
	tst.l	d0
	add.l	#10*1024*1024,d0
	move.l	d0,d3
	move.l	#MEMF_PUBLIC,d1
	call	AllocMem
	tst.l	d0
	beq	noflush
	move.l	d0,a1
	move.l	d3,d0
	call	FreeMem

noflush	lea	dosname(pc),a1
	moveq	#0,d0
	call	OpenLibrary
	move.l	d0,a5
	tst.l	d0
	beq	cleanup

	lea	buffer1,a4

	move.l	#MEMF_CHIP,d1		; 1st row
	call	AvailMem
	move.l	d0,d6
	move.l	d0,12*4(a4)
	move.l	#MEMF_FAST,d1
	call	AvailMem
	move.l	d0,d7
	add.l	d0,12*4(a4)
	move.l	#MEMF_PUBLIC,d1
	call	AvailMem
	sub.l	d6,d0
	cmp.l	#1024,d0
	bpl	a_ok1
	moveq	#0,d0
a_ok1	move.l	d0,4*4(a4)
	move.l	d6,(a4)
	sub.l	d0,d7
	cmp.l	#1024,d7
	bpl	a_ok2
	moveq	#0,d7
a_ok2	move.l	d7,8*4(a4)

	move.l	#MEMF_CHIP!MEMF_TOTAL,d1		; 3st row
	call	AvailMem
	move.l	d0,d6
	move.l	d0,12*4+8(a4)
	move.l	#MEMF_FAST!MEMF_TOTAL,d1
	call	AvailMem
	move.l	d0,d7
	add.l	d0,12*4+8(a4)
	move.l	#MEMF_PUBLIC!MEMF_TOTAL,d1
	call	AvailMem
	sub.l	d6,d0
	cmp.l	#1024,d0
	bpl	a_ok3
	moveq	#0,d0
a_ok3	move.l	d0,4*4+8(a4)
	move.l	d6,8(a4)
	sub.l	d0,d7
	cmp.l	#1024,d7
	bpl	a_ok4
	moveq	#0,d7
a_ok4	move.l	d7,8*4+8(a4)

	move.l	8(A4),d0		; 2nd row
	sub.l	(a4),d0
	move.l	d0,4(a4)
	move.l	4*4+8(a4),d0
	sub.l	4*4(a4),d0
	move.l	d0,4*4+4(a4)
	move.l	8*4+8(a4),d0
	sub.l	8*4(a4),d0
	move.l	d0,8*4+4(a4)
	move.l	12*4+8(a4),d0
	sub.l	12*4(a4),d0
	move.l	d0,12*4+4(a4)

	move.l	#MEMF_CHIP!MEMF_LARGEST,d1
	call	AvailMem
	move.l	d0,12(a4)
	move.l	d0,d7
	move.l	#MEMF_FAST!MEMF_LARGEST,d1
	call	AvailMem
	move.l	d0,4*4+12(a4)
	move.l	#0,8*4+12(a4)
	cmp.l	d0,d7
	bmi	a_ok5
	move.l	a7,d0
a_ok5	move.l	d0,12*4+12(a4)
	


	lea	string(pC),a0
	move.l	a4,a1
	lea	pcp(pc),a2
	lea	buffer,a3
	call	RawDoFmt

	bsr	print

quit	move.l	a5,a1
	call	CloseLibrary
cleanup	moveq	#0,d0
	rts

pcp	move.b	d0,(a3)+
	rts



print	push	all
	move.l	a5,a6
	call	Output
	move.l	d0,d1
	lea	buffer,a0
	moveq	#0,d3
print_l	addq	#1,d3
	tst.b	(a0)+
	bne	print_l
	subq.l	#1,d3
	lea	buffer,a0
	move.l	a0,d2
	call	Write
	pull	all
	rts

;	***********************************************************************
	
dosname	dc.b	'dos.library',0

	dc.b	'$VER: '
string	dc.b	'[1mBFBAvail v1.0 by Jarkko Vatjus-Anttila <quaid@kempele.fi>[0m',10
	dc.b	'Type     Available    In use   Maximum   Largest',10
	dc.b	'Chip      %8.8ld  %8.8ld  %8.8ld  %8.8ld',10
	dc.b	'Fast      %8.8ld  %8.8ld  %8.8ld  %8.8ld',10
	dc.b	'Virtual   %8.8ld  %8.8ld  %8.8ld  %8.8ld',10
	dc.b	'Total     %8.8ld  %8.8ld  %8.8ld  %8.8ld',10,0

	section	paskaperse,bss

buffer1	ds.l	4*4
buffer	ds.b	1024
