perm filename HOST.FAI[S,NET] blob
sn#861141 filedate 1988-09-13 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 History A B C X Y P PDLEN PDL MONCMP SOFT HSTEXT ADRTXT CRLF DOMRTS HSTTAB CACHE1 CACHE2 HOST GETCOM FLSINP HSTCOM CMDSCN PRMPT0 PROMPT DOCMD HSTLUP GOTHST ERRTYP GOTNAM GOTNA1 ADLOOP ADLOP1 ADLOP2 NICNAM HSTLUZ NOTIPA NOADDS NOADDH MXNEXT MXLAST NOMXRS NOMXRH NOMXRR BADDOM
C00012 ENDMK
C⊗;
;⊗ History A B C X Y P PDLEN PDL MONCMP SOFT HSTEXT ADRTXT CRLF DOMRTS HSTTAB CACHE1 CACHE2 HOST GETCOM FLSINP HSTCOM CMDSCN PRMPT0 PROMPT DOCMD HSTLUP GOTHST ERRTYP GOTNAM GOTNA1 ADLOOP ADLOP1 ADLOP2 NICNAM HSTLUZ NOTIPA NOADDS NOADDH MXNEXT MXLAST NOMXRS NOMXRH NOMXRR BADDOM
TITLE HOST
Comment ⊗
This is a domain-based version of HOST, replacing the host-table based
version used previously.
History: (add changes at end)
11 Apr 88 JJW Initial implementation.
19 Apr 88 JJW Rewrote to call GETDOM directly for A and MX lookups.
13 Sep 88 ME Starting at start address -1 or -2 sets CACHEU to 1 or 2,
respectively, to specify domain cache usage.
To be done: Host table lookup when MX lookup fails.
Better processing of domain errors.
⊗; end of history
A←12 ;Our AC's don't interfere with NETWRK's
B←13
C←14
X←15
Y←16
P←17
PDLEN←←20
PDL: BLOCK PDLEN
MONCMP: BLOCK 1 ;-1 → got a monitor command
SOFT: BLOCK 1 ;-1 → got a soft error
HSTEXT: BLOCK 25 ;Buffer for input text
ADRTXT: BLOCK 4 ;Buffer for address text
CRLF: BYTE (7)15,12
DOMRTS←←1 ;We want domain routines
HSTTAB←←1 ;Use host table as backup
.INSERT NETWRK.FAI[S,NET]
CACHE1: SKIPA A,[1]
CACHE2: MOVEI A,2
MOVEM A,CACHEU ;set up cache-use flag
JRST HOST
JRST CACHE2 ;S-2: don't use cache
JRST CACHE1 ;S-1: use only cache
HOST: CAI
RESET
SETZM DVERBOSE ;Keep domain code quiet
SETZM MONCMP
MOVE P,[IOWD PDLEN,PDL]
RESCAN A
JUMPE A,PROMPT
GETCOM: INCHRS X
JRST PRMPT0
CAIE X," " ;Skip whitespace
CAIN X,11
JRST GETCOM
CAIE X,"H" ;Check for HOST command
CAIN X,"h"
JRST HSTCOM
FLSINP: INCHRS X
JRST PRMPT0
CAIE X,175
CAIN X,12
JRST PRMPT0
JRST FLSINP
HSTCOM: OUTSTR CRLF
CMDSCN: INCHRS X
JRST GOTHST
CAIE X,175
CAIN X,12
JRST GOTHST ;No command argument
CAIE X," "
JRST CMDSCN
SETOM MONCMP
JRST DOCMD
PRMPT0: GETPPN A,
CAME A,['100100']
PROMPT: SKIPE MONCMP
EXIT 1,
OUTSTR [ASCIZ/
Host name or address: /]
DOCMD: SETZM HSTEXT
MOVE Y,[POINT 7,HSTEXT]
HSTLUP: INCHWL X
ANDI X,177
CAIN X,15
INCHWL X
CAIE X,175
CAIN X,12
JRST GOTHST
IDPB X,Y
JRST HSTLUP
GOTHST: SETZ X, ;Got a host name or address
IDPB X,Y ;End with a null byte
SETZM SOFT ;No soft errors yet
;Here with input text string in HSTEXT.
SKIPN HSTEXT ;Empty input text?
JRST PRMPT0 ;Yes, reprompt or exit
MOVE Y,[POINT 7,HSTEXT] ;Start at beginning of text
ILDB X,Y ;Now see if we got a name or a address
CAIL X,"0"
CAILE X,"9"
JRST GOTNAM ;Got a name
MOVEI 0,HSTEXT
PUSHJ P,HSTNBR ;Parse a numeric address
JRST HSTLUZ
TLNE 1,(NN%IP) ;Make sure it's an IP address
JRST NOTIPA ;Not an IP address
MOVE 0,1 ;Set up for ADRNAM
PUSHJ P,ADRNAM ;Look up the address
JRST ERRTYP ;Hard error
JRST ERRTYP ;Soft error
OUTSTR HSTEXT
OUTSTR [ASCIZ/ is the address for /]
MOVE B,0 ;Point to name
OUTSTR (B)
OUTSTR [ASCIZ/.
/]
JRST PROMPT
ERRTYP: OUTSTR [ASCIZ/Domain error: /]
OUTSTR (1) ;Print error text
OUTSTR [ASCIZ/.
/]
JRST PROMPT
GOTNAM: MOVEI 0,HSTEXT ;Point to host name
GOTNA1: MOVEI 1,TY.A ;Look for address record
MOVEI 2,CL.IN
PUSHJ P,GETDOM
JRST NOADDH ;Hard error
JRST NOADDS ;Soft error
JRST NICNAM ;Name was a nickname
MOVE X,0 ;Print updated name
OUTSTR (X)
OUTSTR [ASCIZ/ has Internet address/]
PUSH P,3 ;Save first address
PUSHJ P,GETDMA ;See if it has more addresses
JRST ADLOP1 ;No more
OUTSTR [ASCIZ/es/]
EXCH 3,(P) ;Get back first address
MOVE 0,3
MOVEI 1,ADRTXT
PUSHJ P,HNUMST ;Convert first address to string
OUTCHR [" "]
OUTSTR ADRTXT ;Print it
POP P,0 ;Get back second address
ADLOOP: MOVEI 1,ADRTXT
PUSHJ P,HNUMST ;Convert next address to string
OUTSTR [ASCIZ/, /]
OUTSTR ADRTXT ;Print it
PUSHJ P,GETDMA ;See if any more addresses
JRST ADLOP2 ;No more
MOVE 0,3
JRST ADLOOP
;Here if only one address
ADLOP1: POP P,0 ;Get back address
MOVEI 1,ADRTXT
PUSHJ P,HNUMST ;Convert address to string
OUTCHR [" "]
OUTSTR ADRTXT ;Print it
ADLOP2: OUTSTR [ASCIZ/.
/]
JRST PROMPT
NICNAM: MOVE X,0
OUTSTR (X)
OUTSTR [ASCIZ/ is a nickname for /]
OUTSTR (3)
OUTSTR [ASCIZ/.
/]
MOVE 0,3
JRST GOTNA1
HSTLUZ: OUTSTR [ASCIZ/Bad host address format.
/]
JRST PROMPT
NOTIPA: OUTSTR [ASCIZ/Not an IP address, we don't handle those yet.
/]
JRST PROMPT
;Here if address lookup fails (soft or hard error). 0 points to
;current domain name.
NOADDS: SETOM SOFT ;Remember soft error seen
NOADDH: CAMN 3,[EC.NAM] ;Was it a name error?
JRST BADDOM ;Yes, no need to check for MX
MOVEI 1,TY.MX
MOVEI 2,CL.IN
PUSHJ P,GETDOM ;Look for an MX record
JRST NOMXRH ;Hard error
JRST NOMXRS ;Soft error
JRST NICNAM ;This shouldn't happen!
MOVE X,0 ;Updated name
OUTSTR (X)
OUTSTR [ASCIZ/ is not an Internet host, but can be used as a
mail destination. Mail will be routed through /]
MXNEXT: OUTSTR (3) ;Print name of MX host
PUSHJ P,GETDMA ;See if any others
JRST MXLAST
OUTSTR [ASCIZ/
or /]
JRST MXNEXT
MXLAST: OUTSTR [ASCIZ/.
/]
JRST PROMPT
;Here if address and MX lookup both fail. Fail for now, maybe add code
;to try host table.
NOMXRS: SETOM SOFT
NOMXRH: SKIPN SOFT
JRST NOMXRR
OUTSTR [ASCIZ/No Internet address or mail (MX) records found, but some name
servers may be unreachable at present.
/]
JRST PROMPT
NOMXRR: MOVE X,0
OUTSTR (X)
OUTSTR [ASCIZ/ has no Internet address or mail (MX) records.
/]
JRST PROMPT
BADDOM: MOVE X,0
OUTSTR (X)
OUTSTR [ASCIZ/ is not a registered domain name.
/]
JRST PROMPT
END HOST