1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-31 05:52:12 +00:00

Added HOST.

This commit is contained in:
Eric Swenson
2016-12-10 23:19:59 -08:00
parent 4584f4f483
commit 32aa79b462
3 changed files with 491 additions and 0 deletions

486
src/sysnet/host.49 Normal file
View File

@@ -0,0 +1,486 @@
;-*- MIDAS -*-
title HOST -- print information on network hosts
; Canonical location is on MIT-MC, file SYSEN1;HOST >
; All changes/updates should be copied there or they may
; be lost.
IFNDEF ITSSW,ITSSW==IFE <.OSMIDAS-SIXBIT/ITS/>,[-1] .ELSE 0
IFNDEF SAILSW,SAILSW==IFE <.OSMIDAS-SIXBIT/SAIL/>,[-1] .ELSE 0
IFNDEF TNXSW,TNXSW==IFE <<.OSMIDAS-SIXBIT/TENEX/>&<.OSMIDAS-SIXBIT/TWENEX/>>,[-1] .ELSE 0
ifn tnxsw,.decsav
;=:0
a=:1
b=:2
c=:3
d=:4
e=:5
t=:6
tt=:7
bp=:10
;=:11
oc=:12
u1=:13
u2=:14
u3=:15
u4=:16
p=:17
; I/O channels
tyoc==1
hstc==2
pat::
patch: block 100
ifn itssw,.insrt ksc;macros
ifn tnxsw,.insrt macros
ifn itssw,.insrt ksc;out
ifn tnxsw,.insrt out
define type &str& ; Beware of unbalanced parens/brackets/braces/brokets
out(,(str))
termin
$$HST3==1 ; Use HOSTS3 now.
$$ARPA==1 ;Hack the ARPAnet
;$$CHAOS==1 ;Hack the CHAOSnet
$$ALLNET==1 ;Lookup routines will handle any host
$$HOSTNM==1 ;Host name lookup routines
$$SYMLOOK==1
$$HSTMAP==1
hstpag==:50 ;Page to put host table on
hsttab=:hstpag*pg$siz
ifn itssw,.insrt syseng;netwrk
ifn tnxsw,.insrt netwrk
nw%lcs==:<22_24.> ;LCSnet
popj1: aosa (p)
popaj: pop p,a
cpopj: ret
pdl: -100,,pdl
block 100
FL20X: 0 ; Zero if 10X, -1 if 20X.
ljcl==100
jclbuf: block ljcl
-1
hstbuf: block 20 ;for the host string
go: move p,pdl ; Set up PDL
ifn itssw,[
syscal OPEN,[%clbit,,.uao ? %climm,,tyoc ? [sixbit /TTY/]]
.lose %lsfil
out(,ch(tyoc),open(uc$iot))
]
ifn tnxsw,[
SETZM FL20X ; Default assumes TENEX.
MOVE A,['LOADTB]
SYSGT ; See if LOADTB table defined...
CAIN B,
SETOM FL20X ; If not, must be Twenex.
out(,ch(tyoc),open(uc$iot,[.priou]))
]
movei a,jclbuf
movei b,ljcl*5
call sysjcl ; Gobble the JCL
jumple b,[ ; Jump if no JCL.
out(,("Usage is: HOST <host name or address>"),eol)
jrst sysdon]
move bp,a ; Set up BP to JCL. Save start BP in A.
go0: ildb t,bp
caie t,0 ;null?
cain t,^M ;Return
jrst go1
caie t,^J
cain t,^C
jrst go1
cain t,^_
jrst go1
cain t,",
jrst [ push p,bp ; Comma. Set to zero unless it's a pair ",,"
ildb t,bp
cain t,",
jrst [ sub p,[1,,1] ; Won!
jrst .+1]
pop p,bp
setz t,
dpb t,bp ; Set single commas to zero
jrst .+1]
jrst go0
go1: setz t, ;null out the terminating character
dpb t,bp ;to make HSTLOOK happy
idpb t,bp ;and a second one to indicate the end
push p,a ; Save start BP
movei a,hstpag ;Page to put
movei b,hstc ;channel to use to load
call netwrk"hstmap ;Map in HOSTS3
jrst [ type "Couldn't map in HOSTS3 data file!"
jrst sysdon]
pop p,a ; Restore start BP
go2: move b,[440700,,hstbuf] ; Copy an arg into word-aligned buffer
ildb t,a
jumpe t,sysdon ; If no more JCL to parse, done.
idpb t,b
ildb t,a
idpb t,b
jumpn t,.-2
push p,a
type /
/
setz b,
movei a,hstbuf
call netwrk"hstlook ; Convert string to host #
jrst go3
move b,a ; Lookup host info for that number
call netwrk"hstsrc ; Find the site pointer
jrst go3
call shohst ; Show entry for site pointer in D.
pop p,a
jrst go2
go3: pop p,a ; Lost for the entry.
out(,(|Lookup failed for "|),tz(hstbuf),(|" |))
skipe b ; If we parsed any host number,
outcal(,hv(b)) ; show the luser the loser.
out(,eol)
jrst sysdon ; All done.
; SHOHST - Type out all info for a given host.
; D/ addr of SITE entry
; A/ as returned by NETWRK"HSTSRC - sign bit set if TIP/TAC
shohst: push p,a ; Save stupid tip/tac bit
hlrz c,netwrk"stlnam(d) ; Get official name
out(,tz(hsttab(c)),(" ")) ; First type official name
; Now type out all nicknames for this site.
setz e, ; Clear cnt of nicknames
move b,hsttab+netwrk"namptr ; Get addr of NAMES table
movn a,hsttab(b) ; Get # entries
hrl b,a ; Make AOBJN
addi b,hsttab+2 ; pointing at 1st entry.
shoh12: hlrz a,(b)
caie a,-hsttab(d) ; Matches our site entry?
jrst shoh15 ; Nope
hrrz a,(b) ; Get pointer to name string
cain a,(c) ; and not the official name?
jrst shoh15 ; Not right site, or is official name.
jumpe e,[out(,lpar)
jrst shoh14]
type ", "
shoh14: out(,tz(hsttab(a))) ; Type out nickname!
addi e,1 ; bump count of nicknames.
shoh15: aobjn b,shoh12
jumpn e,[out(,rpar)
jrst .+1]
; Now show "type" of host, on same line.
pop p,a ; Restore stuff HSTSRC gave.
out(,(| "|))
jumpl a,[out(,("TIP/TAC"))
jrst shoh30]
skipge a,netwrk"stlflg(d)
jrst [ out(,("SERVER"))
tlne a,netwrk"stfgwy ; Also a gateway?
outcal(,("+"))
jrst .+1]
tlne a,netwrk"stfgwy ; See if gateway
outcal(,("GATEWAY"))
tlnn a,netwrk"stfsrv+netwrk"stfgwy ; If neither,
outcal(,("USER")) ; call it a user.
shoh30: out(,(|"|),eol)
hlrz bp,netwrk"stlsys(d) ; Get system name
skipn bp
movei bp,[asciz /??/]-hsttab
out(,(" System: "),tz(hsttab(bp)))
hrrz bp,netwrk"strmch(d) ; Get machine name
skipn bp
movei bp,[asciz /??/]-hsttab
out(,(" CPU: "),tz(hsttab(bp)),eol)
call shoadr ; Now type out addresses
ret
; SHOADR - Type out all addresses for a site.
; D/ addr of SITE entry
; During processing,
; D/ addr of an ADDRESS entry for this site.
shoadr: hrrz d,netwrk"stradr(d) ;D <= address-table entry
adrlop: type / / ; Space out a couple cols
move b,hsttab+netwrk"addadr(d) ;Get address
netwrk"getnet c,b ; Get network #
move t,hsttab+netwrk"netptr ;ptr to NETWORKS table
move tt,hsttab(t) ;# of entries
move e,hsttab+1(t) ;Size of entries
movei t,2(t) ;skip count and size
netchk: camn c,hsttab(t) ;Is this the network?
jrst netfnd ; Yep
add t,e ;next entry
sojg tt,netchk
type /(unknown network)/ ;Can't find the network? Foo!
jrst netfn1
netfnd: hlrz t,hsttab+netwrk"ntlnam(t) ;Get the loc of the network name
out(,tz(hsttab(t))) ;Get core address of network name
; B/ full HOSTS3 address
; C/ network #
netfn1: out(,(" = "))
tlne c,(netwrk"ne%str) ; String type addr?
jrst [ out(,tz(hsttab(b))) ; Use ptr to ASCIZ string
jrst adrnxt]
call inttyp ; Plausibly normal, use Internet format first
out(,(" "))
; Now handle any addresses that we know want some special
; representations.
came c,[netwrk"nw%arp] ; Is this the Arpanet?
camn c,[netwrk"nw%mil] ; Or Milnet?
jrst arptyp ; Yes, go hack host/imp
camn c,[netwrk"nw%chs] ; Is this the chaosnet?
jrst [move a,b
andi a,177777
out(,lpar,o(a),(" = "))
ldb a,[101000,,b]
out(,o(a),("/"))
ldb a,[001000,,b]
out(,o(a),rpar)
jrst adrnxt]
camn c,[nw%lcs] ; Is this the LCSnet?
jrst [ldb a,[201000,,b]
out(,lpar,o(a),("/"))
ldb a,[001000,,b]
out(,o(a),rpar)
jrst adrnxt]
adrnxt: out(,(" "),hv(b),eol) ; Always finish with halfword value
call shosvc ; Show services for address D points to.
hrrz d,hsttab+netwrk"adrcdr(d) ; Get next address
jumpn d,adrlop
ret
inttyp: ldb a,[400400,,b] ; Get high 4 flag bits
jumpn a,[out(,o(a),(":")) ; Flag bits in octal if any!
jrst .+1]
ldb a,[301000,,b]
out(,d(a),("."))
ldb a,[201000,,b]
out(,d(a),("."))
ldb a,[101000,,b]
out(,d(a),("."))
ldb a,[001000,,b]
out(,d(a))
ret
arptyp: out(,lpar,("Host "))
ldb a,[201000,,b] ; decimal host
out(,d(a),(", Imp "))
ldb a,[002000,,b]
out(,d(a),rpar) ; decimal IMP
IFN 0,[ ; Stuff to print out various old-style formats... retained just
; in case.
lsh b,-16.
andi b,377
dpb a,[112000,,b] ; Make hosts2 style number.
trnn b,700374 ; See if fits in old-style
call [ move a,b ; It does, convert it
lsh b,-9
dpb a,[060200,,b]
ret ]
out(,o(b)) ; Print octal value
] ;IFN 0
jrst adrnxt
shosvc: type / /
hrrz c,hsttab+netwrk"adrsvc(d) ; Get fileaddr of services list
jumpe c,[type /(no services listed)/
jrst shosv9]
shosv2: hrrz bp,hsttab+netwrk"svrnam(c)
addi bp,hsttab
out(,tz((bp)))
hrrz c,hsttab+netwrk"svrcdr(c)
jumpn c,[type /, /
jrst shosv2]
shosv9: type /
/
ret
IFN ITSSW,[
; SYSDON - Called to terminate program gracefully.
SYSDON: .LOGOUT 1,
; SYSHLT - Called to halt program violently. If user tries to continue,
; oblige resignedly.
SYSHLT: .VALUE
RET
; SYSJCL - Called to read in a JCL line if any.
; A/ address to read JCL into
; B/ # chars available
; Returns .+1 if JCL too long for buffer.
; Returns .+2:
; A/ BP to ASCIZ JCL string
; B/ # chars of JCL read (-1 = no JCL at all)
; Clobbers T, TT
SYSJCL: MOVEI T,(B) ; Save # chars avail
SETZ B,
.SUSET [.ROPTIO,,TT]
TLNN TT,%OPCMD ; Has our superior said it has a cmd?
SOJA B,POPJ1 ; Nope.
CAIG T,5*3 ; Ensure reasonable JCL buffer size
RET
IDIVI T,5 ; Get # words we can use
ADDI T,(A) ; Get 1st non-usable addr
SETOM -1(T) ; Ensure last word non-zero
MOVEI TT,1(A) ; Zero the buffer
HRLI TT,(A)
SETZM (A)
BLT TT,-2(T) ; Zap!
HRLI A,5
.BREAK 12,A ; Try to read command string.
SETZM -1(T) ; Get rid of terminating -1
SKIPE -2(T) ; Next-to-last word should still be zero
RET ; Ugh, didn't have room for all of it.
SKIPN (A)
JRST POPJ1 ; Nothing there.
HRLI A,440700 ; Hurray, all's well! Make a BP
MOVE TT,A ; Count # of chars in JCL.
ILDB T,TT
JUMPE T,POPJ1
AOJA B,.-2
] ;IFN ITSSW
IFN TNXSW,[
SYSDON: HALTF
JRST .-1 ; Never allow continuation
SYSHLT: HALTF
RET
SYSJCL: SKIPN FL20X
JRST SYSJCT ; Jump to handle Tenex differently.
MOVEI TT,(A) ; Save buffer addr
HRLI TT,440700 ; Make a BP out of it.
SETZ A, ; Check RSCAN.
RSCAN ; See if have anything in RSCAN buffer.
SETO A, ; Huh? Shouldn't happen, but ignore it.
CAIL A,(B) ; Ensure there's enough room for the input.
RET ; No, take failure return.
SKIPG B,A ; Find # chars waiting for us
JRST [ MOVE A,TT ; None, just return.
JRST POPJ1]
MOVEI T,(B)
PUSH P,C
MOVNI C,(A) ; Aha, set up cnt for SIN
MOVE B,TT
MOVEI A,.PRIIN ; Now ready for business...
SIN
POP P,C
SETZ A,
IDPB A,B ; Ensure string is ASCIZ.
MOVE A,TT ; Set up original BP
MOVEI B,(T) ; and original length
; Now must flush cruft that crufty EXEC sticks in crufty
; front of crufty line!!
IRP PRE,,[RUN,ERUN] ; Cruft to flush
CAILE B,<.LENGTH /PRE/>
JRST [ IRPC X,,[PRE]
ILDB T,A
CAIE T,"X
CAIN T,"X-40
CAIA
JRST .+1
TERMIN
ILDB T,A
CAIE T,40
JRST .+1
SUBI B,1+<.LENGTH /PRE/>
JRST SYSJC2]
MOVE A,TT ; Restore original BP
TERMIN
; Now flush the crufty name of the program or file being run.
SYSJC2: ILDB T,A ; Flush spaces
CAIN T,40
SOJA B,.-2
JUMPLE B,POPJ1 ; Return if zero cnt (with right BP)
ILDB T,A
CAILE T,40
SOJA B,.-2 ; Flush until random ctl seen (space, ^M)
SUBI B,1
CAIE T,40 ; If it wasn't a space,
SETZ B, ; then forget about the whole thing.
JRST POPJ1
; Get JCL if on TENEX
SYSJCT: MOVEI TT,(A)
HRLI TT,440700
MOVEI T,(B)
SETZ B,
MOVEI A,.PRIIN
BKJFN ; Get prev char
SOJA B,[MOVE A,TT
JRST POPJ1] ; Shouldn't happen, but claim no JCL if so
PBIN ; Get the char
CAIE A,40 ; Space?
SOJA B,[MOVE A,TT
JRST POPJ1] ; Nope, no JCL.
; TENEX "JCL" desired, must read directly from .PRIIN.
; This code provides a very crude rubout facility.
PUSH P,TT ; Save original BP
SYSJC4: PBIN
CAIE A,^_ ; TENEX EOL?
CAIN A,^M ; or CR?
JRST SYSJC5
CAIN A,177 ; Rubout?
SOJA B,[CAIGE B,
AOJA B,SYSJC4
MOVEI A,"/
PBOUT
LDB A,TT
PBOUT
MDBP7 TT
JRST SYSJC4]
IDPB A,TT
CAIL B,-3(T) ; Ensure enough room for terminator chars
JRST POPAJ ; Ugh! Restore BP and take failure return.
AOJA B,SYSJC4
SYSJC5: MOVEI A,^M
IDPB A,TT
SETZ A,
IDPB A,TT ; Ensure string is ASCIZ.
POP P,A ; Restore BP to start of string.
AOJA B,POPJ1 ; Include terminating CR in count.
] ;IFN TNXSW
end go