perm filename UPDATE.DIF[HST,NET] blob
sn#735395 filedate 1983-12-12 generic text, type T, neo UTF8
1) UPDATE.FAI[HST,NET] and 2) TABLES.FAI[HST,NET] 12-12-83 12:14 pages 2,2
**** File 1) UPDATE.FAI[HST,NET]/2P/1L
1) ;⊗ A B C D E P DIN DOUT DVER PUPVER PUPEFT ERR SRINIC HNSPRT PRFHST MSCSKT PDLEN BUFLEN VERFIL VERPPN HSTFIL HSTPPN DIRFIL DIRPPN ERRFIL ERRPPN NICVER DSKVER ENDMK ENDEND DIRHLN DIRHDR VERPTR VERLSN VERSTS VERTRM VERCON VCNSTS VERHST EFTGEN EFTGSK EFTLSN EFTSTS EFTLSK EFTHST PUPMAX PKTBUF PKTLEN PKTTYP PKTDST PKTSRC PKTBFD PUPOVH OURHST PUPDSV PUPMSV PUPMHS PDL DIBUF DOBUF DVIBUF DVOBUF PUPIBF ERBUF ERRORS CHANGE CRLF MAIHD1 MAIHD2 MAIHD3 MAIBLK NIORTS
1) TITLE UPDATE
1) ;WAITS program to automatically update NIC and PUP host tables.
**** File 2) TABLES.FAI[HST,NET]/2P/1L
2) ;⊗ A B C D E P DIN DOUT DVER PUPVER PUPEFT ERR SRINIC HNSPRT MSCSKT PDLEN BUFLEN VERFIL VERPPN HSTFIL HSTPPN DIRFIL DIRPPN ERRFIL ERRPPN NICVER DSKVER ENDMK ENDEND DIRHLN DIRHDR VERPTR VERLSN VERSTS VERTRM VERCON VCNSTS VERHST EFTGEN EFTGSK EFTLSN EFTSTS EFTLSK EFTHST PUPMAX PKTBUF PKTLEN PKTTYP PKTDST PKTSRC PKTBFD PUPOVH OURHST PUPDSV PUPMSV PUPMHS PDL DIBUF DOBUF DVIBUF DVOBUF PUPIBF ERBUF ERRORS CHANGE CRLF BATCHM MAIHD1 MAIHD2 MAIHD3 MAIBLK NIORTS
2) TITLE TABLES
2) ;WAITS program to automatically update NIC and PUP host tables.
***************
**** File 1) UPDATE.FAI[HST,NET]/2P/47L
1) PRFHST←←<50⊗=8>+313 ;Navajo
1) MSCSKT←←4 ;Misc. server socket number
**** File 2) TABLES.FAI[HST,NET]/2P/47L
2) ;;PRFHST←←<50⊗=8>+13 ;Navajo
2) MSCSKT←←4 ;Misc. server socket number
***************
**** File 1) UPDATE.FAI[HST,NET]/2P/165L
1) ;Definitions for error messages
**** File 2) TABLES.FAI[HST,NET]/2P/164L
2) BATCHM: 0 ;-1 if batch mode
2) ;Definitions for error messages
***************
**** File 1) UPDATE.FAI[HST,NET]/2P/189L
1) ERRTNS←←-1 ;Error routines
1) .INSERT NETWRK.FAI[S,NET] ;Wonderful network I/O package
1) ;⊗ NETSTR NETST1 DECOUT OCTOUT OCTOU1 CPOPJ1 CPOPJ
1) ;Output a string to current network connection. Call:
**** File 2) TABLES.FAI[HST,NET]/2P/190L
2) .INSERT NETWRK.FAI[S,NET] ;Wonderful network I/O package
2) ;⊗ NETSTR NETST1 DECOUT OCTOUT OCTOU1 GETCHR BADCHR YESNO CPOPJ1 CPOPJ
2) ;Output a string to current network connection. Call:
***************
**** File 1) UPDATE.FAI[HST,NET]/3P/16L
1) ;Numeric output routines. Call with number in A, clobbers B and C.
1) DECOUT: SKIPA C,[=10] ;Decimal
**** File 2) TABLES.FAI[HST,NET]/3P/16L
2) ;Numeric output routines. Call with number in A, clobbers A, B, C.
2) DECOUT: SKIPA C,[=10] ;Decimal
***************
**** File 1) UPDATE.FAI[HST,NET]/3P/29L
1) CPOPJ1: AOS (P)
**** File 2) TABLES.FAI[HST,NET]/3P/28L
2) ;Get single character response from terminal, and begin new line.
2) ;Returns char in 0.
2) GETCHR: INCHRW 0 ;Get char
2) CAIE 0,15 ;Return?
2) JRST [ OUTSTR CRLF ;No
2) CAIL 0,"a" ;Check for lower case
2) CAILE 0,"z"
2) POPJ P,
2) SUBI 0,"a"-"A" ;Convert to upper case
2) POPJ P,]
2) INCHRW 0 ;Yes, read line feed
2) ;Enter here to try again after bad response.
2) BADCHR: OUTSTR [ASCIZ/Huh? Please try again: /]
2) JRST GETCHR
2) ;Wait for terminal response; skip if "Y" typed. Clobbers 0.
2) YESNO: PUSHJ P,GETCHR
2) CAIE 0,"Y"
2) CAIN 0,"y"
2) CPOPJ1: AOS (P)
***************
**** File 1) UPDATE.FAI[HST,NET]/5P/12L
1) JRST [ PUSHJ P,MTPERR
1) MESSAG Can't connect to NIC for version request.]
1) JRST [ PUSHJ P,NIOERR
1) MESSAG Can't connect to NIC for version request.]
1) MOVEI A,[ASCIZ/VERSION
**** File 2) TABLES.FAI[HST,NET]/5P/12L
2) MESSAG Can't connect to NIC for version request.
2) MESSAG Can't connect to NIC for version request.
2) MOVEI A,[ASCIZ/VERSION
***************
**** File 1) UPDATE.FAI[HST,NET]/8P/7L
1) NEWNIC: MOVEI A,1 ;This helps prevent second CONECT losing
1) SLEEP A,
1) MOVE A,[SRINIC] ;Set host number
1) MOVEM A,HOST
1) MOVEI A,HNSPRT ;And port number
1) MOVEM A,ICPSKT
1) PUSHJ P,CONECT
1) JRST [ PUSHJ P,MTPERR
1) MESSAG Can't connect to NIC for host table request.]
1) JRST [ PUSHJ P,NIOERR
1) MESSAG Can't connect to NIC for host table request.]
1) MOVEI A,[ASCIZ/ALL
**** File 2) TABLES.FAI[HST,NET]/8P/7L
2) NEWNIC: MOVE A,[SRINIC] ;Set host number
2) MOVEM A,HOST
2) MOVEI A,HNSPRT ;And port number
2) MOVEM A,ICPSKT
2) PUSHJ P,CONECT
2) MESSAG Can't connect to NIC for host table request.
2) MESSAG Can't connect to NIC for host table request.
2) MOVEI A,[ASCIZ/ALL
***************
**** File 1) UPDATE.FAI[HST,NET]/10P/49L
1) CAIE A,PRFHST ;Is this the preferred host?
1) CAMLE B,PUPMSV ;No. Then we want a higher version number
**** File 2) TABLES.FAI[HST,NET]/10P/49L
2) ;; CAIE A,PRFHST ;Is this the preferred host?
2) CAMLE B,PUPMSV ;No. Then we want a higher version number
***************
**** File 1) UPDATE.FAI[HST,NET]/11P/7L
1) GNPDIR: INIT PUPEFT,13 ;EFTP mode
1) SIXBIT/PUP/
1) 0,,PUPIBF
1) MESSAG INIT failure for EFTP channel.
1) MOVEI A,=8 ;Change byte size
1) DPB A,[POINT 6,PUPIBF+1,11] ;in buffer header
1) INBUF PUPEFT,2 ;Set up buffer ring
1) MOVE A,PUPMHS ;Set host number in MTAPE blocks
1) MOVEM A,VERHST
1) MOVEM A,EFTHST
1) MTAPE PUPEFT,EFTGEN ;Gensym a socket for EFTP
1) MOVE A,EFTGSK ;Copy into listen block
1) MOVEM A,EFTLSK
1) MTAPE PUPEFT,EFTLSN ;Listen on EFTP channel
**** File 2) TABLES.FAI[HST,NET]/11P/7L
2) ;As an undocumented feature, the last 16-bit word of the directory is
2) ;known to contain the PUP checksum of the other words, which we check.
2) GNPDIR: INIT PUPEFT,13 ;EFTP mode
2) SIXBIT/PUP/
2) 0,,PUPIBF
2) MESSAG INIT failure for EFTP channel.
2) MOVEI A,=16 ;Change byte size
2) DPB A,[POINT 6,PUPIBF+1,11] ;in buffer header
2) INBUF PUPEFT,2 ;Set up buffer ring
2) MOVE A,PUPMHS ;Set host number in MTAPE blocks
2) MOVEM A,VERHST
2) MOVEM A,EFTHST
2) MTAPE PUPEFT,EFTGEN ;Gensym a socket for EFTP
2) MOVE A,EFTGSK ;Copy into listen block
2) MOVEM A,EFTLSK
2) ;debug
2) outstr [asciz/EFTP socket number /]
2) pushj p,octout
2) outstr crlf
2) ;end debug
2) MTAPE PUPEFT,EFTLSN ;Listen on EFTP channel
***************
**** File 1) UPDATE.FAI[HST,NET]/11P/53L
1) HRLI B,(<POINT 8,0>) ;Make byte ptr to IDPB
1) GNPDI1: SOSG PUPIBF+2 ;See if there's more EFTP input
1) IN PUPEFT,
1) CAIA ;Yes, there is
1) JRST GNPDI4 ;No, check for end
1) GNPDI2: SOJGE C,GNPDI3 ;Jump if there's room for this byte
1) MOVEI A,1(B) ;No room. Get address of next word to store
**** File 2) TABLES.FAI[HST,NET]/11P/60L
2) HRLI B,(<POINT 16,0>) ;Make byte ptr to IDPB
2) SETZB A,D ;Accumulate checksum in D
2) GNPDI1: SOSG PUPIBF+2 ;See if there's more EFTP input
2) IN PUPEFT,
2) CAIA ;Yes, there is
2) JRST GNPDI4 ;No, check for end
2) ADD D,A ;Add previous byte to checksum
2) TRZE D,1B19 ;Zero overflow bit, skip if it wasn't set
2) AOJ D, ;Add in overflow bit to simulate 1's-complement
2) LSH D,1 ;Shift bits left
2) TRZE D,1B19 ;Skip if overflow bit not set, zero it
2) AOJ D, ;Add it in on right
2) SOJGE C,GNPDI3 ;Jump if there's room for next byte
2) MOVEI A,1(B) ;No room. Get address of next word to store
***************
**** File 1) UPDATE.FAI[HST,NET]/11P/69L
1) INIT DOUT,17 ;Open disk output channel in dump mode
**** File 2) TABLES.FAI[HST,NET]/11P/83L
2) CAIN D,177777 ;See if -0
2) SETZ D, ;Make into real 0
2) repeat 0,<
2) ;As an undocumented feature, the last 16-bit word of the directory
2) ;is known to contain the PUP checksum of the other words. Here we
2) ;check this to be sure we got the directory intact.
2) PUSH P,B ;Save ptr to last byte
2) TLNE B,200000 ;Does last word have 1 byte?
2) TDZA C,C ;Yes, set C=0
2) MOVEI C,1 ;No, set C=1
2) HRRZ B,B ;Compute number of PDP-10 words
2) SUB B,JOBFF↑ ; not counting last word
2) LSH B,1 ;Convert to number of 16-bit bytes
2) ADDI B,(C) ;Include last word, minus checksum byte
2) MOVE A,JOBFF↑ ;Addr of table
2) PUSHJ P,PUPCHK ;Now compute checksum
2) >;repeat 0
2) ;; CAIE A,(D) ;Compare last byte with checksum
2) ;; MESSAG Checksum of network directory failed
2) ;debug
2) CAIN A,(D)
2) JRST ..TMP1
2) PUSH P,B
2) PUSH P,C
2) OUTSTR [ASCIZ/Checksum of network directory failed, last word = /]
2) PUSHJ P,OCTOUT
2) OUTSTR [ASCIZ/, checksum = /]
2) POP P,A
2) PUSHJ P,OCTOUT
2) OUTSTR [ASCIZ/.
2) Storing directory anyway.
2) /]
2) POP P,B
2) ..TMP1:
2) ;end debug
2) INIT DOUT,17 ;Open disk output channel in dump mode
***************
**** File 1) UPDATE.FAI[HST,NET]/11P/103L
1) LSH C,2 ;Times 4 for 8-bit bytes
1) POPJ P,
1) ;⊗ NICUPD NICERR PUPUPD PUPERR UPDATE NOERRS
1) NICUPD: OUTSTR [ASCIZ/Getting latest version number from NIC name server.
1) /]
**** File 2) TABLES.FAI[HST,NET]/11P/152L
2) LSH C,1 ;Times 2 for 16-bit bytes
2) POPJ P,
2) repeat 0,<
2) ;PUP checksum algorithm, used to check validity of net directory. Call:
2) ; MOVE A,<address of first 16-bit byte>
2) ; MOVE B,<number of 16-bit bytes>
2) ; PUSHJ P,PUPCHK
2) ; <return with C = checksum>
2) ;Clobbers A, B, C, D.
2) PUPCHK: HRLI A,(<POINT 16,0>) ;Make byte ptr
2) SETZ C, ;Use to accumulate checksum
2) PUPCK1: ILDB D,A ;Get a 16-bit word
2) ADD C,D ;Add it to checksum
2) TRZE C,1B19 ;Zero overflow bit, skip if it wasn't set
2) AOJ C, ;Add in overflow bit to simulate 1's-complement
2) LSH C,1 ;Shift bits left
2) TRZE C,1B19 ;Skip if overflow bit not set, zero it
2) AOJ C, ;Add it in on right
2) SOJG B,PUPCK1 ;Go until we are done
2) CAIN C,177777 ;See if -0
2) SETZ C, ;Make into real 0
2) POPJ P,
2) >;repeat 0
2) ;⊗ NICUPD NICUP1 NICERR
2) NICUPD: MOVEI 0,"U" ;Default option for batch job
2) SKIPE BATCHM
2) JRST NICUP1
2) OUTSTR [ASCIZ/
2) Type U to update NIC table if necessary,
2) F to force update,
2) C to check version,
2) S to skip NIC table processing
2) Choose one: /]
2) PUSHJ P,GETCHR
2) CAIN 0,"S"
2) POPJ P,
2) CAIE 0,"U" ;Check for legality
2) CAIN 0,"F"
2) JRST NICUP1
2) CAIN 0,"C"
2) JRST NICUP1
2) PUSHJ P,BADCHR
2) JRST NICUPD
2) NICUP1: OUTSTR [ASCIZ/Getting latest version number from NIC name server.
2) /]
***************
**** File 1) UPDATE.FAI[HST,NET]/12P/18L
1) POPJ P,]
1) OUTSTR [ASCIZ/Getting new host table from NIC name server.
**** File 2) TABLES.FAI[HST,NET]/12P/38L
2) SKIPE BATCHM
2) POPJ P,
2) OUTSTR [ASCIZ/Update it anyway?/]
2) PUSHJ P,YESNO
2) POPJ P,
2) JRST .+1]
2) OUTSTR [ASCIZ/Getting new host table from NIC name server.
***************
**** File 1) UPDATE.FAI[HST,NET]/12P/34L
1) PUPUPD: PUSHJ P,RDPDIR ;Read version from PUP directory on disk
1) JRST PUPERR ;Error
**** File 2) TABLES.FAI[HST,NET]/13P/1L
2) ;⊗ PUPUPD PUPERR
2) PUPUPD: SKIPE BATCHM ;Batch job always checks PUP table
2) JRST PUPUP1
2) OUTSTR [ASCIZ/Do PUP table update?/]
2) PUSHJ P,YESNO
2) POPJ P,
2) PUPUP1: PUSHJ P,RDPDIR ;Read version from PUP directory on disk
2) JRST PUPERR ;Error
***************
**** File 1) UPDATE.FAI[HST,NET]/12P/67L
1) UPDATE: RESET ;Program starts here
1) MOVE P,[IOWD PDLEN,PDL]
1) PUSHJ P,NICUPD ;Update NIC table
1) OUTSTR [ASCIZ/--------------------------------------------------
1) /]
1) PUSHJ P,PUPUPD ;Update PUP table
1) SKIPN ERRORS ;Were there errors?
**** File 2) TABLES.FAI[HST,NET]/14P/1L
2) ;⊗ UPDATE NOERRS
2) ;Main program
2) TABLES: TDZA A,A ;Normal start
2) MOVNI A,1 ;Batch mode start
2) MOVEM A,BATCHM
2) RESET
2) MOVE P,[IOWD PDLEN,PDL]
2) PUSHJ P,NICUPD ;Update NIC table
2) SKIPE BATCHM ;Make batch output look pretty
2) OUTSTR [ASCIZ/--------------------------------------------------
2) /]
2) PUSHJ P,PUPUPD ;Update PUP table
2) SKIPN BATCHM
2) EXIT ;All done if not batch mode
2) SKIPN ERRORS ;Were there errors?
***************
**** File 1) UPDATE.FAI[HST,NET]/12P/93L
1) END UPDATE
**** File 2) TABLES.FAI[HST,NET]/14P/37L
2) END TABLES
***************