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