;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@ @
;@ SymbOS network daemon @
;@ N S L O O K U P @
;@ @
;@ (c) 2015 by Prodatron / SymbiosiS (JЎrn Mika) @
;@ @
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;### PRGPRZ -> Programm-Prozess
prgprz call SyShell_PARALL ;get commandline parameters
push de
call SyShell_PARSHL ;fetch shell-specific parameters
jp c,prgend
ld hl,nsltxttit ;title text
ld e,0
call SyShell_STROUT
jp c,prgend
pop de
ld a,d
cp 1 ;exactly 1 parameter (domain name) is required
ld hl,nsltxtpar
jp nz,prgend0
call SyNet_NETINI ;***** INIT NETWORK API (SEARCH FOR THE DAEMON)
ld hl,nsltxtdmn
jr c,prgend0 ;no daemon found -> error
ld hl,nsltxtdns
ld e,0
call SyShell_STROUT
call prgdns
jr prgend
;### PRGEND -> Programm beenden
prgend0 ld e,0
call SyShell_STROUT
prgend ld e,0
call SyShell_EXIT ;tell Shell, that process will quit
ld hl,(App_BegCode+prgpstnum)
call SySystem_PRGEND
prgend1 rst #30
jr prgend1
;### PRGERR -> display DNS error message
prgerr ld hl,nsltxterr
sub 16
jr c,prgend0
cp 4+1
jr nc,prgend0
add a
ld c,a
ld b,0
ld hl,nsldnstab
add hl,bc
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
jr prgend0
;### PRGDNS -> DNS resolve
prgdns ld hl,(SyShell_CmdParas+0)
call SyNet_DNSRSV ;***** DNS RESOLVE
jr c,prgerr ;lookup failed -> error
ld hl,nsltxtipa+12
ld e,"."
db #dd:ld a,l:call clcn08:ld (hl),e:inc hl
db #dd:ld a,h:call clcn08:ld (hl),e:inc hl
db #fd:ld a,l:call clcn08:ld (hl),e:inc hl
db #fd:ld a,h:call clcn08:ld (hl),0
ld hl,nsltxtipa:ld e,0:call SyShell_STROUT
ld hl,nsltxtlfd:ld e,0:call SyShell_STROUT
ret
nsltxttit db 13,10
db "NSLOOKUP 1.0 (c)oded 2015 by Prodatron",13,10,0
nsltxtdns db "Send DNS request",13,10,0
nsltxtipt db "X-type",13,10,0
nsltxtipa db "IP address: xxx.xxx.xxx.xxx",0
nsltxtpar db "Wrong or missing parameter",13,10
db "NSLOOKUP <domainname>",13,10,0
nsltxtdmn db "Network daemon not running!",13,10,0
nsltxtlfd db 13,10,13,10,0
nsldnstab dw nsldnstxt1,nsldnstxt2,nsldnstxt3,nsldnstxt4,nsldnstxt5
nsldnstxt1 db "Invalid domain string",13,10,0
nsldnstxt2 db "Request timeout",13,10,0
nsldnstxt3 db "Recursion currently not supported",13,10,0
nsldnstxt4 db "Truncated answer",13,10,0
nsldnstxt5 db "Package too large",13,10,0
nsltxterr db "Error",13,10,0
neterrdiv equ 16 ;dns - invalid domain string
neterrdto equ 17 ;dns - timeout
neterrdrc equ 18 ;dns - recursion not supported
neterrdtr equ 19 ;dns - truncated answer
neterrdln equ 20 ;dns - package too large
;==============================================================================
;### SUB-ROUTINEN #############################################################
;==============================================================================
;### CLCN08 -> Converst 8bit value into ASCII string (0-terminated)
;### Input A=Value, HL=Destination
;### Output HL=points behind last digit
;### Destroyed AF,BC
clcn08 cp 10
jr c,clcn082
cp 100
jr c,clcn081
ld c,100
call clcn083
clcn081 ld c,10
call clcn083
clcn082 add "0"
ld (hl),a
inc hl
ld (hl),0
ret
clcn083 ld b,"0"-1
clcn084 sub c
inc b
jr nc,clcn084
add c
ld (hl),b
inc hl
ret
;==============================================================================
;### DATEN-TEIL ###############################################################
;==============================================================================
App_BegData
;### nothing (more) here
db 0
;==============================================================================
;### TRANSFER-TEIL ############################################################
;==============================================================================
App_BegTrns
;### PRGPRZS -> Stack f№r Programm-Prozess
ds 64
prgstk ds 6*2
dw prgprz
App_PrcID db 0
App_MsgBuf ds 14