TITLE HSTTST -- test HSTNAM module
       SUBTTL Mark Crispin 20-Apr-83/26-Dec-87

       SEARCH MACSYM,MONSYM    ; system definitions
       SALL                    ; suppress macro expansions
       .DIRECTIVE FLBLST       ; sane listings for ASCIZ, etc.
       .TEXT "/NOINITIAL"      ; suppress loading of JOBDAT
       .TEXT "HSTTST/SAVE"     ; save as HSTTST.EXE
       .TEXT "/SYMSEG:PSECT:CODE" ; put symbol table and patch w/ code
       .REQUIRE HSTNAM         ; host name routines
       .REQUIRE SYS:MACREL     ; macsym support routines
       EXTERN $GTCAN,$GTLCL,$UKHST ; routines invoked externally

; AC definitions
A=1                             ; temporary, JSYS AC's
B=2
C=3
D=4
P=17                            ; stack pointer

HSTNML==^D64                    ; maximum number of characters in host name
HSTBFL==<HSTNML/5>+1            ; length of host buffer
PDLLEN==^D1000                  ; stack length

       .PSECT DATA,1000        ; enter data area

CURREG: BLOCK 1                 ; current registry start
HSTBUF: BLOCK HSTBFL            ; host name buffers
HS2BUF: BLOCK HSTBFL
PDL:    BLOCK PDLLEN            ; stack

       .ENDPS

       .PSECT CODE,40000       ; enter code area

HSTTST: RESET%                  ; flush all I/O
       MOVE P,[IOWD PDLLEN,PDL] ; load stack pointer
       HRROI A,HSTBUF          ; get local host name
       CALL $GTLCL
       IFNSK.
         TMSG <?Unable to get local host name>
         HALTF%
         JRST HSTTST
       ENDIF.
       TMSG <Primary local name registry: >
       HRROI A,HSTBUF          ; output local name
       PSOUT%
       TMSG <
>
       DO.
         TMSG <Host name: >    ; prompt for another host name
         HRROI A,HSTBUF        ; get another name
         MOVX B,RD%BEL!RD%CRF!HSTNML ; break on end of line
         HRROI C,[ASCIZ/Host name: /] ; prompt text
         RDTTY%                ; read the name
         IFJER.
           TMSG <?RDTTY% error>
           HALTF%
           JRST .-1
         ENDIF.
         SETZ B,               ; tie off string with null
         DPB B,A
         SETOB C,CURREG        ; initially try all registries
         DO.
           HRROI A,HSTBUF      ; now, get its host address and registry
           HRROI B,HS2BUF      ; and canonical name
           CALL $GTCAN
           IFSKP.
             SKIPL CURREG      ; first time?
             IFSKP.
               TMSG <(Primary) >
             ENDIF.
             MOVEM C,CURREG    ; save registry pointer
             HLRO A,(C)        ; protocol name
             PSOUT%
             TMSG < registry is >
             HRROI A,HS2BUF    ; output primary registry name
             PSOUT%
             TMSG <, address >
             CAME B,$UKHST     ; the unknown address?
             IFSKP.
               TMSG <indeterminate
>
             ELSE.
               MOVEI A,.PRIOU  ; output address
               MOVX C,NO%MAG!^D8       ; as an unsigned octal number
               NOUT%
                NOP
               TMSG < (octal)
>
             ENDIF.
             AOS C,CURREG      ; start at next registry
             SKIPE (C)         ; end of list?
              LOOP.            ; no, try further
           ELSE.
             SKIPL CURREG      ; any successful lookups?
             IFSKP.
               TMSG <?No such host registered
>                               ; no, complain
             ENDIF.
           ENDIF.
         ENDDO.
         LOOP.
       ENDDO.

       END HSTTST