From b7f50fb3ed209169cd40f74fb518e0f7acafe7a0 Mon Sep 17 00:00:00 2001 From: Eric Swenson Date: Sun, 24 Feb 2019 13:24:58 -0800 Subject: [PATCH] Updated to build INQUIR;NETRTN FASL from source. Resolves #1553. --- bin/inquir/netrtn.fasl | Bin 9398 -> 0 bytes build/lisp.tcl | 2 + src/cstacy/netrtn.76 | 409 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 411 insertions(+) delete mode 100644 bin/inquir/netrtn.fasl create mode 100644 src/cstacy/netrtn.76 diff --git a/bin/inquir/netrtn.fasl b/bin/inquir/netrtn.fasl deleted file mode 100644 index 6f9937138fc5952212e3379760308abc339c582d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9398 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 T if mapped in the database. +; (STDHST host) ==> standardized host-number. +; (GET-NET-FROM-ADDRESS host) ==> network-number. +; (OWN-HOST network-numer) ==> host. +; (HOST-EQUAL host1 host2) ==> T iff they refer to same host. +; (LOOKUP-HOST host-name) ==> host-number. +; (HOST-SIXBIT-NAME host) ==> sixbit host name. +; (HOST-INFO host) ==> (host-name . SITES-pointer) +; (TAC? host) ==> T iff this is an Internet TIP or TAC. +; NW%ARP ==> ARPAnet network-number. +; NW%LCS ==> LCSnet network-number. +; NW%CHS ==> CHAOSnet network-number. + + +.FASL +IF1,.INSRT SYS:.FASL DEFS + +;;; Accumulator definitions +;;; NETWRK assumes A thru E, consecutive T and TT, and pdl pointer P. + +NETWRK"A=A +NETWRK"B=B +NETWRK"C=D +NETWRK"D=R +NETWRK"E=F +NETWRK"T=T +NETWRK"TT=TT +NETWRK"P==FXP + +;;; NETWRK routines + +NETWRK"$$LOOK==1 ;Include only lookup routines. +NETWRK"$$ARPA==1 +NETWRK"$$CHAOS==1 +NETWRK"$$HST3==1 ;Use the HOSTS3 database. +NETWRK"$$ALLNET==1 ;Look up Internet/Unternet. +NETWRK"$$HSTMAP==1 ;Host mapping routines. +NETWRK"$$SYMLOOK==1 ;Host name lookup. +NETWRK"$$HOSTNM==1 ;Host name lookup. +NETWRK"$$HSTSIX==1 ;Sixbit-name host lookup. +NETWRK"$$OWNHST==1 ;Own host number routine. +NETWRK"$$HSTCMP==1 ;Host number comparisons. +NETWRK"$$CVH==1 ;Host number conversions. +.INSRT SYSENG;NETWRK + +;;;; Macros. + +;;; Nice names for some instructions. + +NOP=: +CALRET==:JRST + +;;; System calling. + +DEFINE SYSCAL NAME,ARGS + .CALL [SETZ ? SIXBIT /NAME/ ? ARGS ((SETZ))] +TERMIN + +;;; (NOT NIL) + +DEFINE TRUTH +.ATOM T!TERMIN + +;;; SETQing a symbol to a number at FASLOAD time. + +DEFINE QTES NAME,VAL +.SXEVA (SETQ NAME #VAL ) +TERMIN + +;;; GCOFF and GCON can surround code during which garbage collection +;;; and interrupts should not happen. +;;; This is necessary since we let LSRTNS randomly hack the argument ACs. + +DEFINE GCOFF + PUSH FXP,INHIBIT + SETOM INHIBIT + PUSH FXP,NOQUIT + HLLOS NOQUIT +TERMIN + +DEFINE GCON + POP FXP,NOQUIT + PUSHJ P,INTREL ;Pop FXP and check for deferred interrupts. +TERMIN + +;;; Bash ACs to be NIL, which is a reasonable pointer for an argument AC. +;;; MacLisp does "caller-saves" protocol, so we just need to make sure +;;; there is not garbage left in these when we turn back on interrupts +;;; and garbage collection. + +DEFINE NULLIFY LIST +IRP AC,,[LIST] + MOVE AC,NIL +TERMIN +TERMIN + +;;; Popular returns: + +;;; ONRET - Zap reasonable things into argument ACs, turn on interrupts +;;; and garbage collection, and return the value in A. +;;; (But for NCALLable functions, you must return value in TT instead.) + +ONRET: NULLIFY [B,C,AR1,AR2A] + GCON + POPJ P, + + +;;; Check for HOSTS3 having been mapped in. +;;; Do this before hacking GC or trashing anything. + +DEFINE HST3CK + SKIPN HST3P + LERR [SIXBIT "Host table has not been mapped in!"] +TERMIN + + + +;;; BP2LST - Given a Bp in D, return in A a list of characters. + +BP2LST: PUSH FXP,B + PUSH FXP,D + MOVEI B,NIL ;() +BP2LS1: ILDB TT,D ;Get a character. + JUMPE TT,BP2LS9 ;Zero terminated strings. + JSP T,FXCONS ;Turn into fixnum. + CALL 2,.FUNCTION CONS ;CONS onto our list. + MOVE B,A ;Recover list pointer. + JRST BP2LS1 ;Gobbble entire string. +BP2LS9: MOVE A,B ;Recover list pointer. + CALL 1,.FUNCTION NREVERSE ;Reverse it to normal order. + POP FXP,D + POP FXP,B + POPJ FXP, + + + +;;;; (HSTMAP) +;;; +;;; Maps in the HOSTS3 database and returns the file object opened. +;;; Returns NIL if there was an error. +;;; +;;; Note: since there is no way to return storage to Maclisp, +;;; we do not provide a "HSTUNM" function. + +HST3P: 0 + +.ENTRY MAP-HOSTS3 SUBR 1+0 ;No argument. + GCOFF + MOVEI A,.ATOM SYSBIN/;HOSTS3/ > + MOVEI B,.SX (IN) + CALL 2,.FUNCTION OPEN ;Ask for file object. + PUSH FXP,A ;Stack the file object. + MOVEI TT,F.CHAN ;Get channel number from the file array. + MOVE B,@TTSAR(A) + SYSCAL OPEN,[ NETWRK"B ? %CLBIT,,.BII + [SIXBIT /DSK/] + [SIXBIT /HOSTS3/] + [SIXBIT />/] + [SIXBIT /SYSBIN/]] + JRST HSTMA8 ; Fail + SYSCAL FILLEN,[B ? %CLOUT,,TT] ;Get length in bytes. + JRST HSTMA8 ; Fail + JUMPLE TT,HSTMA8 ;Make sure length not zero. + MOVEI TT,1777(TT) ;Round up length to next page. + LSH TT,-10. ;And convert to number of pages. + PUSH FXP,TT + PUSHJ P,GETCOR ;Ask for that much core. + JUMPE TT,HSTMA8 ; If not available, fail. + MOVEM TT,NETWRK"HSTADR ;Remember addr where mapping. + IDIVI TT,2000 ;Convert addr to page number. + HRRZ A,TT ;Page number RH of AOBJN ptr. + POP FXP,TT ;Get number pages desired. + MOVNS TT ;Negative number of pages in LH. + HRL A,TT + MOVEM A,NETWRK"HSTABN ;Save AOBJN for unmapping (not really). + SYSCAL CORBLK,[ 1000,,%CBNDR ;Read-only + 1000,,%JSELF ;into self + A ;at core pages provided. + B] ;from file open on channel. + JRST HSTMA8 ; Fail. + SYSCAL CLOSE,[ B ] ;All mapped in: close HOSTS3. + JRST HSTMA8 + MOVE T,NETWRK"HSTADR ;Address where HOSTS3 should start. + MOVE T,NETWRK"HSTSID(T) ;Examine check word. + MOVEI FREEAC,TRUTH ;If we win, we return T. + CAME T,[SIXBIT /HOSTS3/] ;Finally, is this really HOSTS3? +HSTMA8: MOVEI FREEAC,NIL ; No, we lose: we return NIL. + POP FXP,A ;Recover file object. + CALL 1,.FUNCTION CLOSE ;Close it. + SETOM HST3P ;Remember we mapped it in OK. + MOVE A,FREEAC + JRST ONRET ;Return T or NIL. + + + +;;;; (OWN-HOST network-numer) +;;; +;;; Given a network number (fixnum), returns our own host address there. + +.ENTRY OWN-HOST SUBR 1+1 + HST3CK + JSP T,FXNV1 ;TT gets network fixnum. + GCOFF + MOVE NETWRK"A,TT + PUSHJ FXP,NETWRK"OWNHST ;Look up our host address. + JRST [ MOVEI NETWRK"A,NIL ; Not on this net => NIL. + JRST ONRET ] + MOVE TT,NETWRK"A ;Get the HOSTS3 address. + JSP T,FXCONS ;Make into fixnum. + JRST ONRET + + +;;; (STDHST host) +;;; Return the host number in standard format. + +.ENTRY STDHST SUBR 1+1 + JSP T,FXNV1 ;TT gets host fixnum. + GCOFF + MOVE NETWRK"A,TT + PUSHJ FXP,NETWRK"STDHST ;Hack the host number. + MOVE TT,NETWRK"A ;Here it is in standard format + JSP T,FXCONS ;Make it into a fixnum. + JRST ONRET ;Return it. + + +;;; (GET-NET-FROM-ADDRESS host-address) +;;; +;;; Given a host address (fixnum), return its network number (fixnum). + +.ENTRY GET-NET-FROM-ADDRESS SUBR 1+1 + JSP T,FXNV1 ;TT gets host fixnum. + GCOFF + NETWRK"GETNET TT,TT ;Get network number of our arg. + JSP T,FXCONS ;CONS fixnum. + MOVE A,TT ;That's the return value. + JRST ONRET + + +;;; Some popular HOSTS3 Network Numbers. + +QTES NW%ARP,\NETWRK"NW%ARP +QTES NW%LCS,\NETWRK"NW%LCS +QTES NW%CHS,\NETWRK"NW%CHS + +;.ENTRY NW%ARP SUBR 1+0 +; MOVE TT,[NETWRK"NW%ARP] ;ARPAnet IP net number. +; JRST FIX1 ;CONS fixnum from A and return. + + + +;;;; (HOST-EQUAL host1 host2) +;;; +;;; Returns T if the host numbers refer to the same host. +;;; To compare host-numbers on different networks, HOSTS3 must be mapped. + +.ENTRY HOST-EQUAL SUBR 2+1 + HST3CK + JSP T,FXNV1 ;Host1 into TT. + JSP T,FXNV2 ;Host2 into D. + GCOFF + MOVE NETWRK"A,TT + MOVE NETWRK"B,D + PUSHJ FXP,NETWRK"HSTCMP + JRST [ MOVEI A,NIL + JRST ONRET ] + MOVEI A,TRUTH + JRST ONRET + + + +;;;; HOSTS3 SITE table lookup. + +;;; (HOST-INFO host-address) +;;; +;;; Given a host (fixnum), returns a pair whose CAR is the host +;;; name (fake-string) and whose CADR is a (fixnum) pointer into +;;; the HOSTS3 SITE table. +;;; Returns NIL if the host is not found. + +.ENTRY HOST-INFO SUBR 1+1 + HST3CK + JSP T,FXNV1 ;TT gets host fixnum. + GCOFF + MOVE NETWRK"B,TT + PUSHJ FXP,NETWRK"HSTSRC ;Look up host. + JRST [ MOVEI A,NIL ; Not found => NIL. + JRST ONRET ] + HRRZ D,NETWRK"A ;D gets address of official host name. + HRLI D,440700 ;Make Bp to it. + PUSHJ FXP,BP2LST ;Get list of fixnums into A. + CALL 1,.FUNCTION IMPLODE ;Make into a symbol. + PUSH P,A ;Stash pointer to it. +; MOVEI B,TRUTH ;Say that it is a fake string. +; MOVEI C,.ATOM +INTERNAL-STRING-MARKER +; CALL 3,.FUNCTION PUTPROP + MOVE TT,NETWRK"D ;Get SITE table pointer. + JSP T,FXCONS + MOVEI B,NIL ;Start with (). + CALL 2,.FUNCTION CONS ;CONS on HOSTS3 pointer. + MOVE B,A ;Recover list pointer. + POP P,A ;A gets host name string. + CALL 2,.FUNCTION CONS ;CONS it on. + JRST ONRET ;Return pair. + + +;;; (TAC? host-address) +;;; +;;; Given a host (fixnum), returns T of the host claims to be an +;;; Internet TAC or TIP. Otherwise, returns NIL. + +.ENTRY TAC? SUBR 1+1 + HST3CK + JSP T,FXNV1 ;TT gets host fixnum. + GCOFF + MOVE NETWRK"B,TT + PUSHJ FXP,NETWRK"HSTSRC ;Look up host. + JRST TACP1 ; Not found, return NIL. + MOVEI B,TRUTH ;Assume host is a TAC. + TLNN NETWRK"A,400000 ;Is it really? +TACP1: MOVEI B,NIL ; Nope. + MOVE A,B + JRST ONRET + + +;;; (HOST-SIXBIT-NAME host-address) +;;; +;;; Given a host (fixnum), return its (sixbit quantity) host name, +;;; or NIL if the host is not found. +;;; +;;; You need something like KMP's SIXBIT package (with SIXBIT->SYMBOL) to +;;; make much use of the return value. + +.ENTRY HOST-SIXBIT-NAME SUBR 1+1 + HST3CK + JSP T,FXNV1 ;TT gets host fixnum. + GCOFF + MOVE NETWRK"A,TT + PUSHJ FXP,NETWRK"HSTSIX ;Look up host. + JRST [ MOVEI A,NIL ; Not found => NIL. + JRST ONRET ] + MOVE TT,NETWRK"A ;Sixbit value. + JSP T,FXCONS ;CONS fixnum. + JRST ONRET + + +;;; Other things from the SITE table we might want to fool around with +;;; include: the host ADDRESS table entries, the operating system and +;;; machine types, and whether the host is a server; from the NAMES table +;;; we might want to manually frob around with other names. We might also +;;; want to examine the NETNAMES table and provide functions to map those +;;; names to addresses and back. +;;; +;;; Hey, maybe if I figured out how to do Structs from inside MIDAS or something, +;;; we could have SI:PARSE-HOST, which accept either host names or addresses +;;; (maybe even site table entries?) and return all the various junk. +;;; +;;; Someday when I figure out the functionality and representation for these +;;; features, I will implement them. That probably won't happen until I have +;;; a real need to use them. If you are using this package and need to do +;;; these things, send me mail and I'll put it in. -- CSTACY, 31 December 1983 + + +;;;; Host name lookup. + +;;; (HOST-LOOKUP host-name) +;;; +;;; Given a host name (symbol), return its (fixnum) host address, +;;; or NIL if unknown host. + +HSLUQQ: BLOCK 20. ;Cruft. + +.ENTRY HOST-LOOKUP SUBR 1+1 + HST3CK + GCOFF + PUSH P,A ;Stash arg. + MOVEI TT,7. ;We want packed-ASCII fixnums. + JSP T,FXCONS ;(Must use Lisp fixnums.) + MOVE B,A + POP P,A ;Recover arg. + CALL 2,.FUNCTION PNGET ;Get the pname-list of our argument. + MOVE F,[440700,,HSLUQQ] ;Bp to ASCIZ string we'll accumulate. + MOVE A,(A) ;A gets first CONS of pname-list. +HSLU20: HLRZ B,A ;Take CAR of list. + MOVE C,B ;Make Bp to chars. + HRLI C,440700 + MOVE FREEAC,[-5,,0] ;AOBJN to them. +HSLU30: ILDB R,C ;Get a character. + IDPB R,F ;Store it. + AOBJN FREEAC,HSLU30 ;Get all five chars. + SKIPE A,(A) ;Get next CONS from CDR of A. + JRST HSLU20 ;Process this one. + MOVEI NETWRK"A,HSLUQQ ;ASCIZ host name. + PUSHJ FXP,NETWRK"HSTLOOK ;Look up the host. + JRST [ MOVEI A,NIL ; Not found => NIL. + JRST ONRET ] + MOVE TT,NETWRK"A ;TT gets the host's Inter/Unternet address. + JSP T,FXCONS ;CONS fixnum. + JRST ONRET + +.SXEVAL (SSTATUS FEATURE NETWRK) +FASEND + \ No newline at end of file