1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-16 00:14:18 +00:00
2016-12-11 18:39:42 -08:00

486 lines
11 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;-*- 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