NEW
PREFIX
AUTO 4,1
				.LIST OFF	
*--------------------------------------
CFG.EtcFiles	>LDYAI 256
				>SYSCALL GetMem
				bcc .1
				rts
				
.1				>STYA ZPTmpPtr1
				stx CFG.hBuf1
				
				>LDYA L.HOSTNAME
				jsr CFG.Read.PrintF
				jsr CFG.Read.HOSTNAME

				lda IPCFG+S.IPCFG.HOSTNAME
				bne .4

				>PUSHW A2osX.TIMER16
				>PUSHBI 2
				>PUSHW L.CFG.DefaultHost
				>LDYA L.IPCFG.HOSTNAME
				>SYSCALL sprintf
				
.4				>LDYA L.TCPIP.CONF
				jsr CFG.Read.PrintF
				jsr CFG.Read.TCPIP.CONF

				lda IPCFG+S.IPCFG.IP
				beq .5
				
				lda #S.IPCFG.STATUS.OK
				sta IPCFG+S.NETCFG.STATUS
				
.5				>LDYA L.HOSTS
				jsr CFG.Read.PrintF
				jsr CFG.Read.HOSTS

				>PUSHW L.IPCFG
				>LIBCALL hLIBTCPIP,LIBTCPIP.SETCFG

				lda CFG.hBuf1
				>SYSCALL freemem
								
.9				rts				
*--------------------------------------
CFG.Read.PrintF >PUSHYA
				>PUSHBI 2
				>LDYA L.MSG.CFG
				>SYSCALL printf
				rts
*--------------------------------------
CFG.Read.HOSTNAME
				>LDYA L.HOSTNAME
				jsr CFG.Read.Open
				jsr CFG.Read.Result
				bcs .9
				
.1				jsr CFG.Read.GetS
				bcs .8
				
				lda (ZPTmpPtr1)
				beq .1					empty line...
				cmp #'#
				beq .1					comment...
				
				ldy #0

.2				lda (ZPTmpPtr1),y
				sta IPCFG+S.IPCFG.HOSTNAME,y
				beq .8					end of name
				
				iny
				cpy #15
				bne .2
				
.8				clc
				.HS B0					BCS
.9				sec
				jmp CFG.Read.Close
*--------------------------------------
CFG.Read.TCPIP.CONF
				>LDYA L.TCPIP.CONF
				jsr CFG.Read.Open
				jsr CFG.Read.Result
				bcs .9
				
.1				jsr CFG.Read.GetS
				bcs .8
				
				lda (ZPTmpPtr1)
				beq .1					empty line...
				cmp #'#
				beq .1					comment...
				
				ldy #$ff

.2				iny
				lda (ZPTmpPtr1),y
				beq .3
				cmp #' '
				bne .2
				
.3				lda L.CFG.Keywords
				sta ZPTmpPtr2
				lda L.CFG.Keywords+1
				sta ZPTmpPtr2+1
				
				ldx #0

.4				phy						save keyword len

				tya
				cmp (ZPTmpPtr2)
				bne .6
				
.5				lda (ZPTmpPtr2),y
				dey
				cmp (ZPTmpPtr1),y
				bne .6
				tya
				bne .5
				
				ply						discard keyword len
				jsr .80
				bra .1
				
.6				lda (ZPTmpPtr2)
				sec
				adc ZPTmpPtr2
				sta ZPTmpPtr2
				bcc .7
				inc ZPTmpPtr2+1
				
.7				inx
				inx
				ply						reset keyword len
				
				lda (ZPTmpPtr2)
				bne .4
				
				bra .1
				
.8				clc
				.HS B0					BCS
.9				sec
				jmp CFG.Read.Close
				
.80				jmp (J.CFG.Keywords,x)
*--------------------------------------
CFG.Read.address
				ldx #S.IPCFG.IP+3
				bra CFG.Read.IP
CFG.Read.netmask
				ldx #S.IPCFG.MASK+3
				bra CFG.Read.IP
CFG.Read.gateway
				ldx #S.IPCFG.GW+3
				bra CFG.Read.IP
CFG.Read.nameserver
				ldx #S.IPCFG.DNS1+3
				lda IPCFG,x
				beq CFG.Read.IP
				ldx #S.IPCFG.DNS2+3
				
CFG.Read.IP		ldy #3

.1				txa
				clc
				adc L.IPCFG
				pha
				lda L.IPCFG+1
				adc #0
				>PUSHA					@IP[3][2][1][0]
				pla
				>PUSHA
				dex
				dey
				bpl .1
								
				>PUSHBI 8				4 PTRs on stack
				>PUSHW L.CFG.IP.SScanF
				
				lda (ZPTmpPtr2)
				sec
				adc ZPTmpPtr1
				tay
				
				lda ZPTmpPtr1+1
				adc #0

				>SYSCALL SScanF
				rts

CFG.Read.dnsdomain
				lda (ZPTmpPtr2)
				sec
				adc ZPTmpPtr1
				sta ZPTmpPtr1
				bcc .1
				inc ZPTmpPtr1+1

.1				ldy #$ff
				
.2				iny
				lda (ZPTmpPtr1),y
				sta IPCFG+S.IPCFG.DOMAIN,y
				beq .8
				cpy #K.DNS.MAXLEN
				bne .2
				lda #0
				sta IPCFG+S.IPCFG.DOMAIN,y
.8				rts
*--------------------------------------
CFG.Read.HOSTS	stz CFG.hBuf2
				stz CFG.hBuf3
				
				>LDYA L.HOSTS
				jsr CFG.Read.Open
				jsr CFG.Read.Result
				bcs .9

				>LDYAI 256
				>SYSCALL GetMem
				bcs .9

				>STYA ZPTmpPtr2
				stx CFG.hBuf2
				
				>LDYAI 256
				>SYSCALL GetMem
				bcs .9

				>STYA ZPTmpPtr3
				stx CFG.hBuf3
								
.1				jsr CFG.Read.GetS
				bcs .8
				
				lda (ZPTmpPtr1)
				beq .1					empty line...
				cmp #'#
				beq .1					comment...
				
				jsr CFG.Read.HOSTS.Scan
				bcs .1
				
				cmp #5
				bcc	.1					less than 5 parameters, ignore
				beq .2					no alias
				
				>LDYA ZPTmpPtr3
				jsr CFG.DNS.Add

.2				>LDYA ZPTmpPtr2
				jsr CFG.DNS.Add				
				
				bra .1

.8				clc
				.HS B0					BCS
.9				sec

				php
				pha
				lda CFG.hBuf3
				beq .90
				>SYSCALL freemem
.90				lda CFG.hBuf2
				beq .91
				>SYSCALL freemem

.91				jmp CFG.Read.Close2
*--------------------------------------
CFG.Read.HOSTS.Scan
				>PUSHW ZPTmpPtr3
				>PUSHW ZPTmpPtr2
				
				ldx #3
				
.2				txa
				clc
				adc L.CFG.IP
				tay
				lda L.CFG.IP+1
				adc #0
				>PUSHYA					@IP[3][2][1][0]

				dex
				bpl .2
								
				>PUSHBI 12				6 PTRs on stack
				>PUSHW L.CFG.HOST.SScanF
				>LDYA ZPTmpPtr1

				>SYSCALL SScanF
				rts
*--------------------------------------
CFG.DNS.ADD		>STYA ZPTmpPtr1

				>LDYA L.CFG.IP
				
				>PUSHYA
				>PUSHW ZPTmpPtr1
				>LIBCALL hLIBTCPIP,LIBTCPIP.DNS.Add
*--------------------------------------
CFG.Read.Result	bcc .1
				>PUSHA
				>PUSHBI 1
				>LDYA L.MSG.CFG.KO
				>SYSCALL printf
				sec
				rts
				
.1				>LDYA L.MSG.CFG.OK
				>SYSCALL puts
				rts
*--------------------------------------
CFG.Read.Open	stz CFG.hCfgFile
				
				pha
				
				>PUSHWZ
				>PUSHBI S.FI.T.TXT
				>PUSHBI	O.RDONLY
				
				pla
				>SYSCALL fopen
				bcs .9
				
				sta CFG.hCfgFile
*				clc				
.9				rts				
*--------------------------------------
CFG.Read.Close	php
				pha
				
CFG.Read.Close2				
				lda CFG.hCfgFile
				beq .8
				>SYSCALL fclose
				
.8				pla
				plp
				rts
*--------------------------------------
CFG.Read.GetS	>PUSHWI 255
				>PUSHW ZPTmpPtr1
				lda CFG.hCfgFile
				>SYSCALL fgets
				rts
*--------------------------------------
MAN
SAVE USR/SRC/SBIN/IPCONFIG.S.ETC
LOAD USR/SRC/SBIN/IPCONFIG.S
ASM
