.include "../inc/common.inc"

.export parse_dotted_quad
.export dotted_quad_value


.bss

dotted_quad_value: .res 4       ; set to 32 bit ip address on a succesful call to parse_dotted_quad


.data

; self modifying code
dotted_quad_ptr:
  lda $FFFF
  rts


.code

; convert a string representing a dotted quad (IP address, netmask) into 4 octets
; inputs:
; AX= pointer to null-terminated (*) string containing dotted quad
; e.g. "192.168.1.0",0
; outputs:
; carry flag is set if there was an error, clear otherwise
; dotted_quad_value: will be set to (32 bit) ip address (if no error)
; (*) NB to assist with url parsing, a ':' or '/' can also terminate the string
parse_dotted_quad:
  stax dotted_quad_ptr+1
  ldx #0
  txa
  sta dotted_quad_value
@each_byte:
  jsr get_next_byte
  cmp #0
  beq @done
  and #$7F                      ; turn off bit 7
  cmp #'.'
  beq @got_dot
  cmp #':'
  beq @done
  cmp #'/'
  beq @done
  sec
  sbc #'0'
  bcc @error
  cmp #10
  bcs @error

  clc
  ldy #10
@mul_by_y:
  adc dotted_quad_value,x
  bcs @error
  dey
  bne @mul_by_y
  sta dotted_quad_value,x
  jmp @each_byte

@got_dot:
  inx
  cpx #4
  beq @error
  lda #0
  sta dotted_quad_value,x
  jmp @each_byte
@done:
  cpx #3
  bne @error
  clc
  rts
@error:
  sec
  rts

get_next_byte:
  jsr dotted_quad_ptr
  inc dotted_quad_ptr+1
  bne :+
  inc dotted_quad_ptr+2
: rts



; -- LICENSE FOR dottedquad.s --
; The contents of this file are subject to the Mozilla Public License
; Version 1.1 (the "License"); you may not use this file except in
; compliance with the License. You may obtain a copy of the License at
; http://www.mozilla.org/MPL/
;
; Software distributed under the License is distributed on an "AS IS"
; basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
; License for the specific language governing rights and limitations
; under the License.
;
; The Original Code is ip65.
;
; The Initial Developer of the Original Code is Jonno Downes,
; jonno@jamtronix.com.
; Portions created by the Initial Developer are Copyright (C) 2009
; Jonno Downes. All Rights Reserved.
; -- LICENSE END --