;--------------	same as EXAMPLE.C, but in assembler

		incpath	include:
		maclib	sm.mac
		macfile	macro.i
		macfile	/lvo/ini.i
		macfile	/libraries/ini.i

;--------------	open ini.library
		lea	iniName(pc),a1		; libName
		moveq	#0,d0			; version
		movea.l	4,a6			; execBase
		jsr	_LVOOpenLibrary(a6)
		move.l	d0,iniBase		; save library
		beq	NOINILIBRARY

;--------------	setup pointer to dos.library
		movea.l	d0,a0
		move.l	iniBase_DosBase(a0),dosBase

;--------------	open the ini file
		lea	fileName(pc),a0		; fileName
		lea	myParser(pc),a1		; iniParser
		movea.l	iniBase(pc),a6
		jsr	_LVOini_New(a6)
		tst.l	d0			; fail if not INIERROR_NONE
		bne	INIERROR

;--------------	same as EXAMPLE.C; we now loop through all entries in the ini file
		lea	myParser(pc),a5		; a5 = myParser
		movea.l	LH_HEAD(a5),a5		; a5 = INILINEINFO *
FORLOOP:	tst.l	LN_SUCC(a5)		; fail if no successor
		beq	FORDONE

;--------------	a5 now is current INILINEINFO; see what it contains

		cmpi.b	#INIFLAG_VARIABLE,ili_flags(a5)
		beq	ISVAR
		cmpi.b	#INIFLAG_HEADER,ili_flags(a5)
		beq	ISHEAD
		cmpi.b	#INIFLAG_COMMENT,ili_flags(a5)
		beq	ISCOMMENT

;--------------	default: invalid INILINEINFO (should NOT come up normally)
		move.l	#errorInvalidILI,d1
		move.l	a5,formatArgs
		move.l	#formatArgs,d2
		bsr	printf
		bra	FORDONE

;--------------	print out comment
ISCOMMENT	move.l	#commentMsg,d1
		move.l	ili_allocated(a5),formatArgs
		move.l	#formatArgs,d2
		bsr	printf
		bra	FORNEXT

;--------------	print out section header
ISHEAD		move.l	#headerMsg,d1
		move.l	ili_contents(a5),formatArgs
		move.l	#formatArgs,d2
		bsr	printf
		bra	FORNEXT

;--------------	print out section variable
ISVAR		move.l	#variableMsg,d1
		move.l	ili_variable(a5),formatArgs
		move.l	ili_contents(a5),formatArgs+4
		move.l	#formatArgs,d2
		bsr	printf
		;bra	FORNEXT

;--------------	get next INILINEINFO
FORNEXT:	movea.l	LN_SUCC(a5),a5		; get next successor
		bra	FORLOOP			; continue looping

FORDONE:

;--------------	close the INIFILE. This must be called ALWAYS after calling ini_New,
;--------------	regardless if that function returned an error or not!
CLOSEINIFILE:	lea	myParser(pc),a0		; iniParser
		movea.l	iniBase(pc),a6
		jsr	_LVOini_Delete(a6)

;--------------	close the ini.library
		movea.l	iniBase(pc),a1		; libBase
		movea.l	4,a6			; execBase
		jsr	_LVOCloseLibrary(a6)

;--------------	return to the system
NOINILIBRARY:	moveq	#0,d0
		rts

;--------------	failure to load ini file, print out error message and return
INIERROR:	movea.l	iniBase(pc),a6
		jsr	_LVOini_ErrorString(a6)
		move.l	d0,formatArgs
		move.l	#errorMsg,d1
		move.l	#formatArgs,d2
		bsr	printf
		bra	CLOSEINIFILE

;--------------	printf - print out arguments to CLI (needs OS2). This function
;--------------	saves all registers, so you don't have to keep in mind which
;--------------	regs you are scratching
;--------------	
;--------------	=> d1: STRPTR string to print
;--------------	   d2: LONG *argument array (only if required by %-style string)
;--------------	
printf		movem.l	d0-d7/a0-a6,-(sp)
		movea.l	dosBase(pc),a6
		jsr	_LVOVPrintf(a6)
		movem.l	(sp)+,d0-d7/a0-a6
		rts

;--------------	messages used throughout this example program
welcomeMsg	dc.b	"This is a test for the ini.library",10,0
errorMsg	dc.b	"%s",10,0
errorInvalidILI	dc.b	"UNKNOWN ENTRY AT %0x08lx, PLEASE REPORT",10,0
variableMsg	dc.b	'VARIABLE="%s", CONTENTS="%s"',10,0
headerMsg	dc.b	'HEADER="%s"',10,0
commentMsg	dc.b	'COMMENT="%s"',10,0

;--------------	name of the example ini.file
fileName	dc.b	"test.ini",0

;--------------	name of the ini.library used for OpenLibrary()
iniName:	dc.b	"ini.library",0
		even

;--------------	ini.library base adress used to call the library functions
iniBase:	dc.l	0

;--------------	dos.library base adress (no OpenLibrary because ini.library opens one for us)
dosBase:	dc.l	0

;--------------	Parser structure used by the ini functions. This structure
;--------------	does not have to be initialized prior to calling ini_New(),
;--------------	so you could place it in a BSS section to save some memory
myParser	ds.b	ip_SIZEOF

;--------------	room for up to 10 printf() args
formatArgs	ds.l	10
		end

**************************************************************************
;--------------	
