perm filename HOST.FAI[S,NET]10 blob
sn#855623 filedate 1988-04-11 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 HSTEXT ADRTXT CRLF DOMRTS HOST GETCOM FLSINP HSTCOM CMDSCN PRMPT0 PROMPT DOCMD HSTLUP GOTHST ERRTYP GOTNAM ADLOOP ADLPEX HSTLUZ NOTIPH
C00012 ENDMK
C⊗;
;⊗ History A B C X Y P PDLEN PDL MONCMP HSTEXT ADRTXT CRLF DOMRTS HOST GETCOM FLSINP HSTCOM CMDSCN PRMPT0 PROMPT DOCMD HSTLUP GOTHST ERRTYP GOTNAM ADLOOP ADLPEX HSTLUZ NOTIPH
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.
⊗; 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
MXRTS←←1 ;and MX routines (for now)
.INSERT NETWRK.FAI[S,NET]
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 (1) ;Print error text
OUTSTR [ASCIZ/.
/]
JRST PROMPT
GOTNAM: MOVEI 0,HSTEXT ;Point to host name
PUSHJ P,NAMADR ;See if it has an address
JRST NOADDH ;Hard error
JRST NOADDS ;Soft error
MOVE X,0 ;Updated name
MOVE Y,1 ;Ptr to address list
OUTSTR [ASCIZ/Host /]
OUTSTR (X)
OUTSTR [ASCIZ/ has Internet address/]
SKIPE 1(Y) ;Skip if only one address
OUTSTR [ASCIZ/es/]
MOVEI 1,ADRTXT
ADLOOP: MOVE 0,(Y)
PUSHJ P,HNUMST
OUTCHR [" "]
OUTSTR ADRTXT
SKIPN 1(Y)
JRST ADLOP1
OUTCHR [","]
AOJA Y,ADLOOP
ADLOP1: OUTSTR [ASCIZ/.
/]
JRST PROMPT
HSTLUZ: OUTSTR [ASCIZ/Bad host address format.
/]
JRST PROMPT
NOTIPA: OUTSTR [ASCIZ/Not an IP address, we don't handle those yet.
/]
JRST PROMPT
NOADDS: SETOM SOFT ;Remember soft error seen
NOADDH: PUSHJ P,MXFIND ;See if it has an MX record
JRST NOMXRH ;Hard error
JRST NOMXRS ;Soft error
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 /]
OUTSTR (3) ;Name of MX host
OUTSTR [ASCIZ/.
/]
;We should type names of all MX hosts.
JRST PROMPT
NOMXRS: SETOM SOFT
NOMXRH: MOVE X,0 ;Updated name
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: OUTSTR [ASCIZ/Host /]
OUTSTR (X)
OUTSTR [ASCIZ/ has no Internet address or mail (MX) records.
/]
JRST PROMPT
END HOST