perm filename DQUERY.FAI[S,NET]2 blob
sn#849412 filedate 1987-11-24 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE DQUERY A B C P PDLEN DOMRTS PDL CRLF CMDBUF TYPE CLASS NAME QTYPE QCLASS TYPNAM NTYNMS CLSNAM NCLNMS DQUERY TOPLEV GETCMD GOTTYP GOTCLS SHOWRR ERRNAM ERRSFT SHOWDA SH.UNK SH.A SH.MX SH.DOM SH.WKS SH.HIN GTOKEN GTOKE1 DECOUT CPOPJ HELP
C00010 ENDMK
C⊗;
TITLE DQUERY ;⊗ A B C P PDLEN DOMRTS PDL CRLF CMDBUF TYPE CLASS NAME QTYPE QCLASS TYPNAM NTYNMS CLSNAM NCLNMS DQUERY TOPLEV GETCMD GOTTYP GOTCLS SHOWRR ERRNAM ERRSFT SHOWDA SH.UNK SH.A SH.MX SH.DOM SH.WKS SH.HIN GTOKEN GTOKE1 DECOUT CPOPJ HELP
COMMENT ⊗ History (please record changes):
13 Sep 87 JJW Initial implementation.
04 Oct 87 JJW Changed syntax from <type> <class> <domain> to
<domain> <type> <class>, with defaults.
24 Nov 87 JJW Fixed "?" code broken by 04 Oct 87 change. Added
domain name to output text.
⊗ ;end of comment
A←11 ;Try not to interfere with NETWRK's ACs
B←12
C←13
P←17
PDLEN←←40
DOMRTS←←1
.INSERT NETWRK.FAI[S,NET]
PDL: BLOCK PDLEN
CRLF: BYTE (7)15,12
CMDBUF: BLOCK 40
TYPE: BLOCK 2
CLASS: BLOCK 2
NAME: BLOCK 40
QTYPE: BLOCK 1
QCLASS: BLOCK 1
TYPNAM: -1
ASCII/A/
ASCII/NS/
ASCII/MD/
ASCII/MF/
ASCII/CNAME/
ASCII/SOA/
ASCII/MB/
ASCII/MG/
ASCII/MR/
ASCII/NULL/
ASCII/WKS/
ASCII/PTR/
ASCII/HINFO/
ASCII/MINFO/
ASCII/MX/
NTYNMS←←.-TYPNAM
CLSNAM: -1
ASCII/IN/
ASCII/CS/
ASCII/CH/
NCLNMS←←.-CLSNAM
DQUERY: RESET
MOVE P,[IOWD PDLEN,PDL]
OUTSTR [ASCIZ/Type "?" for help
/]
TOPLEV: OUTSTR [ASCIZ/
Dquery> /]
;Get command line, copy to CMDBUF
MOVE B,[POINT 7,CMDBUF]
GETCMD: INCHWL A
CAIN A,15
JRST GETCMD
CAIE A,12
CAIN A,175
MOVEI A,0
IDPB A,B
JUMPN A,GETCMD
CAMN B,[POINT 7,CMDBUF,6]
EXIT ;Null input line to exit
IDPB A,B ;Add two more nulls in case
IDPB A,B ;type and class not given
;Check for leading "?" on command line
MOVE B,[POINT 7,CMDBUF]
ILDB A,B
CAIN A,"?"
JRST HELP
;Extract type, class and domain name from CMDBUF
MOVE B,[POINT 7,CMDBUF]
MOVE C,[POINT 7,NAME]
PUSHJ P,GTOKEN
SETZM TYPE
MOVE C,[POINT 7,TYPE]
PUSHJ P,GTOKEN
SETZM CLASS
MOVE C,[POINT 7,CLASS]
PUSHJ P,GTOKEN
;See if we recognize the type and class name
MOVEI B,TY.ALL ;Default type
SKIPE A,TYPE
CAMN A,[ASCII/*/]
JRST GOTTYP
MOVSI B,-NTYNMS
CAME A,TYPNAM(B)
AOBJN B,.-1
JUMPL B,GOTTYP
OUTSTR [ASCIZ/Unrecognized type name: /]
OUTSTR TYPE
OUTSTR CRLF
JRST TOPLEV
GOTTYP: HRRZM B,QTYPE
MOVEI B,CL.IN ;Default class
SKIPN A,CLASS
JRST GOTCLS
MOVEI B,CL.ALL
CAMN A,[ASCII/*/]
JRST GOTCLS
MOVSI B,-NCLNMS
CAME A,CLSNAM(B)
AOBJN B,.-1
JUMPL B,GOTCLS
OUTSTR [ASCIZ/Unrecognized class name: /]
OUTSTR CLASS
OUTSTR CRLF
JRST TOPLEV
GOTCLS: HRRZM B,QCLASS
MOVEI 0,NAME ;Set up query
MOVE 1,QTYPE
MOVE 2,QCLASS
PUSHJ P,GETDOM
JRST ERRNAM
JRST ERRSFT
JFCL ;Treat CNAME like ordinary response
SHOWRR: OUTSTR @0 ;Show domain name
OUTCHR [" "]
MOVE A,TYPNAM(1)
OUTSTR A ;Show type
OUTCHR [" "]
MOVE A,CLSNAM(2)
OUTSTR A ;Show class
OUTCHR [" "]
PUSHJ P,@SHOWDA(1) ;Show data
OUTSTR CRLF
PUSHJ P,GETDMA ;See if there's another RR
JRST TOPLEV ;No
JRST SHOWRR ;Yes
ERRNAM: OUTSTR [ASCIZ/Name error -- name does not exist
/]
JRST TOPLEV
ERRSFT: OUTSTR [ASCIZ/Soft error -- unable to answer query
/]
JRST TOPLEV
SHOWDA: SH.UNK
SH.A ;TY.A
SH.DOM ;TY.NS
SH.DOM ;TY.MD (obsolete)
SH.DOM ;TY.MF (obsolete)
SH.DOM ;TY.CNAME
SH.UNK ;TY.SOA
SH.DOM ;TY.MB
SH.DOM ;TY.MG
SH.DOM ;TY.MR
SH.UNK ;TY.NULL
SH.WKS ;TY.WKS
SH.DOM ;TY.PTR
SH.HIN ;TY.HINFO
SH.UNK ;TY.MINFO
SH.MX ;TY.MX
SH.UNK: POPJ P,
SH.A: LDB A,[POINT 8,3,11]
PUSHJ P,DECOUT
OUTCHR ["."]
LDB A,[POINT 8,3,19]
PUSHJ P,DECOUT
OUTCHR ["."]
LDB A,[POINT 8,3,27]
PUSHJ P,DECOUT
OUTCHR ["."]
LDB A,[POINT 8,3,35]
JRST DECOUT
SH.MX: MOVE A,MXPREF
PUSHJ P,DECOUT
OUTCHR [" "]
SH.DOM: OUTSTR (3)
POPJ P,
SH.WKS: POPJ P,
SH.HIN: OUTSTR (3)
OUTCHR [" "]
OUTSTR @OSNAME
POPJ P,
;GTOKEN first skips spaces and tabs, then copies a token from command
;buffer to buffer pointed to by C.
GTOKEN: ILDB A,B ;Get next char
CAIE A," "
CAIN A,11
JRST GTOKEN ;Space or tab, skip it
GTOKE1: CAIL A,"a"
CAILE A,"z"
CAIA
SUBI A,"a"-"A" ;Uppercasify
IDPB A,C
JUMPE A,CPOPJ ;Return if end of token
ILDB A,B ;Get next char
CAIE A," "
CAIN A,11
MOVEI A,0 ;Space or tab, end of token
JRST GTOKE1
DECOUT: IDIVI A,=10
PUSH P,B
JUMPE A,.+2
PUSHJ P,DECOUT
POP P,B
ADDI B,"0"
OUTCHR B
CPOPJ: POPJ P,
HELP: OUTSTR [ASCIZ/Enter an input line of the form: <domain name> <type> <class>
<type> can be the name of a record type, or "*" (the default) for all records.
<class> defaults to "IN" for Internet.
Type <return> to exit the program.
/]
JRST TOPLEV
END DQUERY