emailler/client/inc/commonprint.i

295 lines
4.6 KiB
OpenEdge ABL
Raw Normal View History

.ifndef NB65_API_VERSION_NUMBER
.define EQU =
.include "../inc/nb65_constants.i"
.endif
.export print_hex
.export print_ip_config
.export dhcp_msg
.export ok_msg
.export failed_msg
.export init_msg
.export print
.export print_decimal
.import cs_driver_name
.importzp copy_src
;reuse the copy_src zero page var
pptr = copy_src
.bss
temp_bin: .res 1
temp_bcd: .res 2
.code
.macro print_driver_init
ldax #cs_driver_name
jsr print
ldax #init_msg
jsr print
.endmacro
.macro print_dhcp_init
ldax #dhcp_msg
jsr print
ldax #init_msg
jsr print
.endmacro
.macro print_failed
ldax #failed_msg
jsr print
jsr print_cr
.endmacro
.macro print_ok
ldax #ok_msg
jsr print
jsr print_cr
.endmacro
.code
.import print_a
.import print_cr
.import cs_driver_name
print_ip_config:
ldax #interface_type
jsr print
ldax #cs_driver_name
jsr print
jsr print_cr
ldax #mac_address_msg
jsr print
jsr cfg_get_configuration_ptr ;ax=base config, carry flag clear
;first 6 bytes of cfg_get_configuration_ptr is MAC address
stax pptr
ldy #0
@one_mac_digit:
tya ;just to set the Z flag
pha
beq @dont_print_colon
lda #':'
jsr print_a
@dont_print_colon:
pla
tay
lda (pptr),y
jsr print_hex
iny
cpy #06
bne @one_mac_digit
jsr print_cr
ldax #ip_address_msg
jsr print
jsr cfg_get_configuration_ptr ;ax=base config, carry flag clear
adc #NB65_CFG_IP
bcc :+
inx
:
jsr print_dotted_quad
jsr print_cr
ldax #netmask_msg
jsr print
jsr cfg_get_configuration_ptr ;ax=base config, carry flag clear
adc #NB65_CFG_NETMASK
bcc :+
inx
:
jsr print_dotted_quad
jsr print_cr
ldax #gateway_msg
jsr print
jsr cfg_get_configuration_ptr ;ax=base config, carry flag clear
adc #NB65_CFG_GATEWAY
bcc :+
inx
:
jsr print_dotted_quad
jsr print_cr
ldax #dns_server_msg
jsr print
jsr cfg_get_configuration_ptr ;ax=base config, carry flag clear
adc #NB65_CFG_DNS_SERVER
bcc :+
inx
: jsr print_dotted_quad
jsr print_cr
ldax #dhcp_server_msg
jsr print
jsr cfg_get_configuration_ptr ;ax=base config, carry flag clear
adc #NB65_CFG_DHCP_SERVER
bcc :+
inx
:
jsr print_dotted_quad
jsr print_cr
rts
print:
sta pptr
stx pptr + 1
@print_loop:
ldy #0
lda (pptr),y
beq @done_print
jsr print_a
inc pptr
bne @print_loop
inc pptr+1
bne @print_loop ;if we ever get to $ffff, we've probably gone far enough ;-)
@done_print:
rts
;print the 4 bytes pointed at by AX as dotted decimals
print_dotted_quad:
sta pptr
stx pptr + 1
ldy #0
lda (pptr),y
jsr print_decimal
lda #'.'
jsr print_a
ldy #1
lda (pptr),y
jsr print_decimal
lda #'.'
jsr print_a
ldy #2
lda (pptr),y
jsr print_decimal
lda #'.'
jsr print_a
ldy #3
lda (pptr),y
jsr print_decimal
rts
print_decimal: ;print byte in A as a decimal number
pha
sta temp_bin ;save
sed ; Switch to decimal mode
lda #0 ; Ensure the result is clear
sta temp_bcd
sta temp_bcd+1
ldx #8 ; The number of source bits
:
asl temp_bin+0 ; Shift out one bit
lda temp_bcd+0 ; And add into result
adc temp_bcd+0
sta temp_bcd+0
lda temp_bcd+1 ; propagating any carry
adc temp_bcd+1
sta temp_bcd+1
dex ; And repeat for next bit
bne :-
cld ;back to binary
pla ;get back the original passed in number
bmi @print_hundreds ; if N is set, the number is >=128 so print all 3 digits
cmp #10
bmi @print_units
cmp #100
bmi @print_tens
@print_hundreds:
lda temp_bcd+1 ;get the most significant digit
and #$0f
clc
adc #'0'
jsr print_a
@print_tens:
lda temp_bcd
lsr
lsr
lsr
lsr
clc
adc #'0'
jsr print_a
@print_units:
lda temp_bcd
and #$0f
clc
adc #'0'
jsr print_a
rts
print_hex:
pha
pha
lsr
lsr
lsr
lsr
tax
lda hexdigits,x
jsr print_a
pla
and #$0F
tax
lda hexdigits,x
jsr print_a
pla
rts
.rodata
hexdigits:
.byte "0123456789ABCDEF"
interface_type:
.byte "INTERFACE : ",0
mac_address_msg:
.byte "MAC ADDRESS : ", 0
ip_address_msg:
.byte "IP ADDRESS : ", 0
netmask_msg:
.byte "NETMASK : ", 0
gateway_msg:
.byte "GATEWAY : ", 0
dns_server_msg:
.byte "DNS SERVER : ", 0
dhcp_server_msg:
.byte "DHCP SERVER : ", 0
dhcp_msg:
.byte "DHCP",0
init_msg:
.byte "INIT ",0
failed_msg:
.byte "FAILED", 0
ok_msg:
.byte "OK", 0
dns_lookup_failed_msg:
.byte "DNS LOOKUP FAILED", 0