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

Added lots of new LSPLIB packages (and their sources).

This commit is contained in:
Eric Swenson
2018-03-16 13:50:36 -07:00
parent 13244c1d61
commit 92db560d8f
118 changed files with 35842 additions and 22 deletions

1214
src/l/defns.240 Executable file

File diff suppressed because it is too large Load Diff

474
src/l/humble.42 Executable file
View File

@@ -0,0 +1,474 @@
;;; **************************************************************
TITLE ***** MACLISP ****** HUMBLE INFERIOR PACKAGE FOR ITS NEWIO ***
;;; **************************************************************
;;; ** (C) COPYRIGHT 1977 MASSACHUSETTS INSTITUTE OF TECHNOLOGY **
;;; ****** THIS IS A READ-ONLY FILE! (ALL WRITES RESERVED) *******
;;; **************************************************************
.MLLIT==1
.FASL
IF1, .INSRT SYS:.FASL DEFS
VERPRT HUMBLE
UBPFJ==10 ;FOREIGN JOB REQUIRED BIT FOR USR OPENS
TMPC==0 ;TEMP I/O CHANNEL
.SXEVAL (SETQ CURRENT-JOB NIL
THE-JOB-INPUT-CHANNEL NIL
THE-JOB-OUTPUT-CHANNEL NIL
THE-JOB-INPUT-CHANNEL-FILE-OBJECT NIL
THE-JOB-OUTPUT-CHANNEL-FILE-OBJECT NIL)
DEFINE CURJOB
.SPECIAL CURRENT-JOB TERMIN
DEFINE USRI
.SPECIAL THE-JOB-INPUT-CHANNEL TERMIN
DEFINE USRO
.SPECIAL THE-JOB-OUTPUT-CHANNEL TERMIN
DEFINE USRIAR
.SPECIAL THE-JOB-INPUT-CHANNEL-FILE-OBJECT TERMIN
DEFINE USROAR
.SPECIAL THE-JOB-OUTPUT-CHANNEL-FILE-OBJECT TERMIN
;;; (CREATE-JOB <JOBINTFUN> <CHNINTFUN> <JNAME> <UNAME> <FOREIGN>)
;;; CREATES A JOB OBJECT, AND MAKES IT CURRENT.
;;; <UNAME> = NIL (DEFAULT) MEANS YOUR UNAME.
;;; <FOREIGN> = T (NON-DEFAULT) MEANS REQUIRE FOREIGN JOB.
;;; RETURNS LIST OF TWO THINGS:
;;; (1) ONE OF THE FOLLOWING ATOMS:
;;; INFERIOR
;;; REOWNED
;;; FOREIGN
;;; (2) THE JOB OBJECT
;;; IF <FOREIGN> WAS NON-NIL AND THE JOB WAS NOT FOUND, NIL IS RETURNED.
;;; (SELECT-JOB <JOB>) MAKES THE SPECIFIED JOB CURRENT IN THE
;;; EXPECTED MODE (FOREIGN OR NOT), RETURNING VALUES AS FOR CREATE-JOB.
HACKJ0: WTA [BAD JOB OBJECT - SELECT-JOB!]
.ENTRY SELECT-JOB SUBR 0002 ;SUBR 1
PUSHJ P,JOBP
JRST HACKJ0
JSP T,NPUSH-5
MOVEI TT,J.INTB
SKIPN @TTSAR(A)
HLLOS (P)
HLLOS NOQUIT
MOVEI TT,J.CINT
MOVE B,@TTSAR(A)
MOVE TT,TTSAR(A)
JRST CRJOB5
.ENTRY CREATE-JOB LSUBR 004006 ;LSUBR (3 . 5)
JSP TT,LWNACK
LA345,,.ATOM CREATE-JOB ;LA345 MEANS 3-5 ARGS.
CAML T,[-4]
PUSH P,[NIL]
CAML T,[-3]
PUSH P,[NIL]
SKIPN A,-1(P)
TDZA TT,TT
PUSHJ P,SIXMAK
PUSH FXP,TT
MOVE A,-2(P)
PUSHJ P,SIXMAK
PUSH FXP,TT
PUSH FXP,[-1]
HLLOS NOQUIT
.CALL [ SETZ
SIXBIT \OPEN\ ;OPEN FILE (JOB)
5000,,UBPFJ+6 ;INSIST ALREADY EXIST, PLUS IMAGE BLOCK INPUT
1000,,TMPC ;CHANNEL NUMBER
,,[SIXBIT \USR\] ;DEVICE NAME
,,-2(FXP) ;UNAME
400000,,-1(FXP) ] ;JNAME
SETZM (FXP)
.CLOSE TMPC,
HLLZS NOQUIT
PUSHJ P,CHECKI
SKIPN (FXP)
SKIPN (P)
CAIA
JRST CRJOB8 ;RETURN NIL IF LOSE
PUSHJ P,GTJCHN ;GET JOB CHANNELS
PUSH P,[CRJOB2]
PUSH P,[NIL]
PUSH P,[.ATOM FIXNUM ]
PUSH P,[.ATOM #LOJOBA ]
MOVNI T,3
JCALL 16,.FUNCTION *ARRAY
CRJOB2: HLLOS NOQUIT
MOVE TT,TTSAR(A)
POP FXP,F
POP FXP,F.FN2(TT)
POP FXP,T
SKIPN T
.SUSET [.RUNAME,,T]
MOVEM T,F.FN1(TT)
MOVSI T,(SIXBIT \USR\)
MOVEM T,F.DEV(TT)
MOVSI D,AS<JOB>
IORB D,ASAR(A)
MOVSI T,-J.GC
HLLM T,-1(D)
MOVE B,-4(P)
MOVEM B,J.INTF(TT)
MOVE B,-3(P)
MOVEM B,J.CINT(TT)
CRJOB5: MOVEM A,CURJOB ;SELECT-JOB JOINS HERE
MOVE C,USRIAR
MOVE T,TTSAR(C)
MOVEM B,FJ.INT(T)
MOVE C,USROAR
MOVE T,TTSAR(C)
MOVEM B,FJ.INT(T)
SKIPN (P)
TDZA T,T
MOVEI T,UBPFJ
.CALL [ SETZ
SIXBIT \OPEN\ ;OPEN FILE (JOB)
5000,,6(T) ;IMAGE BLOCK INPUT MODE
,,@USRI ;CHANNEL NUMBER
,,F.DEV(TT) ;DEVICE NAME (USR)
,,F.FN1(TT) ;UNAME
400000,,F.FN2(TT) ] ;JNAME
JRST CRJOB7
.CALL [SETZ
SIXBIT \USRVAR\
,,@USRI
1000,,.ROPTION
1000,,0 ;IGNORED FOR IMMEDIATE-INST MODE
SETZ [TLO %OPLSP]] ;TURN ON "LISP IS SUPERIOR" BIT
JFCL ;IGNORE FAILURE, MIGHT NOT BE OUR JOB
;; Don't put these .calls together, the OPTION is allowed to
;; fail, but the uind shouldn't.
.CALL [SETZ ? SIXBIT \USRVAR\
,,@USRI
1000,,.RUIND
SETZM J.UIND(TT)]
.LOSE %LSFIL ; ???
MOVE T,@USRI ;PICK UP CHANNEL NUMBER
MOVEM T,F.CHAN(TT) ;FORCE IT TO BE CHAN # OF JOB ARRAY
.CALL [ SETZ
SIXBIT \RCHST\ ;READ CHANNEL STATUS
,,@USRI ;CHANNEL NUMBER OF JOB
2000,,F.RDEV(TT) ;DEVICE NAME
2000,,F.RFN1(TT) ;FILE NAME 1
2000,,F.RFN2(TT) ;FILE NAME 2
2000,,R ;SNAME (ZERO) (IGNORE)
2000,,R ;ACCESS POINTER (ZERO) (IGNORE)
402000,,R ] ;MODE BITS (1.4 => FOREIGN JOB)
.VALUE
SETZM J.INTB(TT)
MOVEI B,.ATOM FOREIGN
TRNE R,UBPFJ
JRST CRJOB4
MOVE D,@USRI
LSH D,27
IOR D,[.USET 0,[.RINTB,,T]]
XCT D
MOVEM T,J.INTB(TT)
.CALL [ SETZ
SIXBIT \OPEN\ ;OPEN JOB
5000,,7 ;IMAGE BLOCK OUTPUT
,,@USRO ;CHANNEL NUMBER
,,F.DEV(TT) ;DEVICE NAME (USR)
,,F.FN1(TT) ;UNAME
400000,,F.FN2(TT) ] ;JNAME
.VALUE
.CALL [ SETZ
SIXBIT \RCHST\ ;READ CHANNEL STATUS
,,@USRO ;CHANNEL NUMBER OF JOB
2000,,F.RDEV(TT) ;DEVICE NAME
2000,,F.RFN1(TT) ;FILE NAME 1
402000,,F.RFN2(TT) ] ;FILE NAME 2
.VALUE
JFFO T,.+1
MOVNS TT
MOVEM A,JOBTB+21(TT)
MOVEI B,.ATOM INFERIOR
SKIPE F
MOVEI B,.ATOM REOWNED
CRJOB4: HLLZS NOQUIT
PUSHJ P,CHECKI
PUSH P,B
CALL 1,.FUNCTION NCONS
POP P,B
CALL 2,.FUNCTION XCONS
CRJOB9: SUB P,[5,,5]
POPJ P,
CRJOB7: HLLZS NOQUIT
PUSHJ P,CHECKI
CRJB7A: SETZB A,CURJOB
JRST CRJOB9
CRJOB8: SUB FXP,[3,,3]
JRST CRJB7A
GTJCH0: SUB P,[1,,1]
MOVEI A,.SX (?)
IOL [NOT ENOUGH I/O CHANNELS!]
GTJCHN: SKIPE USRIAR
POPJ P,
PUSH P,[NIL]
MOVSI TT,(SIXBIT \USR\)
PUSHJ P,ALFILE
JRST GTJCH0
MOVEM A,(P)
MOVSI TT,(SIXBIT \USR\)
PUSHJ P,ALFILE
JRST GTJCH0
MOVEI AR1,(A)
POP P,AR2A
MOVSI TT,TTS<IO> ;THIS ONE IS OUTPUT
IORM TT,TTSAR(AR2A)
MOVEI TT,F.CHAN
MOVE F,@TTSAR(AR1)
MOVE TT,@TTSAR(AR2A)
JSP T,FXCONS
MOVEI B,(A)
MOVE TT,F
JSP T,FXCONS
HLLOS NOQUIT
MOVE T,TTSAR(AR1)
MOVE TT,TTSAR(AR2A)
MOVE D,[SIXBIT \ USRI \]
MOVEM D,F.FN1(T)
MOVEM D,F.RFN1(T)
MOVE D,[SIXBIT \ USRO \]
MOVEM D,F.FN1(TT)
MOVEM D,F.RFN1(TT)
MOVE D,[SIXBIT \ CHNL \]
MOVEM D,F.FN2(T)
MOVEM D,F.FN2(TT)
MOVEM D,F.RFN2(T)
MOVEM D,F.RFN2(TT)
MOVEM A,USRI
MOVEM B,USRO
MOVEM AR1,USRIAR
MOVEM AR2A,USROAR
HLLZS NOQUIT
JRST CHECKI
DEFINE JOBLOK FN ;LOCK USER INTS, CHECK OUT CURRENT-JOB
LOCKI
SKIPN A,CURJOB
JRST UNLKNIL
PUSHJ P,JOBP
JRST [ SETZM CURJOB
UNLOCKI
FAC [CURRENT-JOB CONTAINED BAD JOB OBJECT - FN!!]
]
TERMIN
DEFINE INFLOK FN ;INSIST ON INFERIOR
JOBLOK FN
MOVE T,TTSAR(A)
SKIPN T,J.INTB(T)
JRST UNLKNIL
TERMIN
;;; (JOB-USET-READ <NUM>) RETURNS VALUE OF USET VAR <NUM>,
;;; OR NIL IF NO CURRENT JOB.
.ENTRY JOB-USET-READ SUBR 0002 ;SUBR 1
JSP T,FXNV1
JOBLOK JOB-USET-READ
MOVE D,@USRI
LSH D,27
IOR D,[.USET 0,T]
HRLI T,(TT)
HRRI T,TT
XCT D
UNLOCKI
JRST FIX1
;;; (JOB-USET-WRITE <NUM> <VAL>) WRITES USET VAR <NUM>,
;;; OR NIL IF NO CURRENT JOB OR FOREIGN JOB.
;;; <NUM> SHOULD HAVE THE 400000 BIT SET.
.ENTRY JOB-USET-WRITE SUBR 0003 ;SUBR 2
JSP T,FXNV1
JSP T,FXNV2
INFLOK JOB-USET-WRITE
MOVE R,@USRI
LSH R,27
IOR R,[.USET 0,T]
HRLI T,(TT)
HRRI T,D
XCT R
UNLOCKI
MOVEI A,.ATOM T
POPJ P,
;;; (KILL-JOB) KILLS THE CURRENT JOB.
.ENTRY KILL-JOB SUBR 0001 ;SUBR 0
JOBLOK KILL-JOB
HLLOS NOQUIT
SETZM CURJOB
MOVE TT,TTSAR(A)
TLNE TT,TTS<CL> ;IN CASE OF ASYNCHRONOUS LOSSES
JRST KILLJ9
MOVSI T,TTS<CL>
IORM T,TTSAR(A)
SKIPN T,J.INTB(TT)
JRST KILLJ2
JFFO T,.+1
MOVNS TT
SETZM JOBTB+21(TT)
MOVE T,@USRI
LSH T,27
IOR T,[.UCLOSE 0,]
XCT T
JRST KILLJ8
KILLJ2: .CALL [ SETZ
SIXBIT \CLOSE\ ;CLOSE CHANNEL
400000,,@USRI ] ;CHANNEL NUMBER
.VALUE
.CALL [ SETZ
SIXBIT \CLOSE\ ;CLOSE CHANNEL
400000,,@USRO ] ;CHANNEL NUMBER
.VALUE
KILLJ8: MOVEI A,.ATOM T
KILJ8A: HLLZS NOQUIT
UNLKPOPJ
KILLJ9: MOVEI A,NIL
JRST KILJ8A
;;; SKIPS IF VALID JOB OBJECT IN A.
;;; USES ONLY A, B, T.
JOBP: MOVEI B,(A)
CALL 1,.FUNCTION TYPEP
EXCH A,B
CAIE B,.ATOM ARRAY
POPJ P,
MOVE T,ASAR(A)
TLNN T,AS<JOB>
POPJ P,
MOVE T,TTSAR(A)
TLNN T,TTS<CL>
AOS (P)
POPJ P,
;;; (LOAD-JOB <FILENAME>) OPENS UP FILE <FILENAME>
;;; AND LOADS IT INTO THE CURRENT JOB.
;;; RETURNS:
;;; NIL WON!
;;; BIN? FILE NOT BIN
;;; FILE? FILE NOT FOUND
.ENTRY LOAD-JOB SUBR 0002 ;SUBR 1
MOVEI C,(A)
INFLOK LOAD-JOB
MOVEI A,(C)
CALL 2,.FUNCTION MERGEF
PUSHJ P,FIL6BT
HLLOS NOQUIT
MOVEI A,.ATOM FILE?
.CALL [ SETZ
SIXBIT \OPEN\ ;OPEN FILE
5000,,6 ;IMAGE BLOCK INPUT
1000,,TMPC ;CHANNEL NUMBER
,,-3(FXP) ;DEVICE
,,-1(FXP) ;FILE NAME 1
,,0(FXP) ;FILE NAME 2
400000,,-2(FXP) ] ;SNAME
JRST LDJB9
.CALL [ SETZ
SIXBIT \RESET\ ;RESET THE JOB
400000,,@USRI ] ;CHANNEL NUMBER
.VALUE
MOVEI A,.ATOM BIN?
.CALL [ SETZ
SIXBIT \LOAD\ ;LOAD JOB
,,@USRO ;JOB SPEC
400000,,TMPC ] ;DISK CHANNEL
JRST LDJB9
HRROI T,TT
.IOT TMPC,T
.CLOSE TMPC,
HRRZ C,CURJOB
MOVE T,TTSAR(C)
MOVEM TT,J.STAD(T)
MOVEI A,NIL
LDJB9: SUB FXP,[4,,4]
HLLZS NOQUIT
UNLKPOPJ
;;; (EXAMINE-JOB <LOC>) EXAMINES LOCATION <LOC> OF CURRENT JOB.
;;; RETURNS NIL ON FAILURE (INDICATES BAD ERROR).
.ENTRY EXAMINE-JOB SUBR 0002 ;SUBR 1 NCALLABLE
PUSH P,[FIX1]
JSP T,FXNV1
JOBLOK EXAMINE-JOB
JSP F,JOBED
@USRI
JRST UNLKNIL
MOVE TT,D
UNLOCKI
POPJ P,
;;; (DEPOSIT-JOB <LOC> <VAL>) DEPOSITS <VAL> IN <LOC> OF CURRENT JOB.
;;; RETURNS NIL ON FAILURE (INDICATES BAD ERROR).
.ENTRY DEPOSIT-JOB SUBR 0003 ;SUBR 2
JSP T,FXNV1
JSP T,FXNV2
INFLOK DEPOSIT-JOB
JSP F,JOBED
@USRO
UNLKNIL: TDZA A,A
UNLKT: MOVEI A,.ATOM T
UNLKPOPJ
JOBED: MOVEI A,NIL
.CALL [ SETZ
SIXBIT \ACCESS\ ;SET ACCESS POINTER
,,@(F) ;CHANNEL NUMBER
400000,,TT ] ;NEW ACCESS POINTER
JRST 1(F)
HRROI TT,D
.CALL [ SETZ
SIXBIT \IOT\ ;IOT
,,@(F) ;CHANNEL NUMBER
400000,,TT ] ;IOT POINTER
JRST 1(F)
JRST 2(F)
;;; (*ATTY) DOES A .ATTY TO THE CURRENT JOB.
.ENTRY *ATTY SUBR 0001 ;SUBR 0
INFLOK *ATTY
MOVE TT,TTSAR(A)
SKIPN J.INTB(TT)
JRST UNLKNIL
MOVE D,@USRI
LSH D,27
IOR D,[.ATTY 0,]
XCT D
JRST UNLKNIL
JRST UNLKT
;;; (*DTTY) DOES A .DTTY.
.ENTRY *DTTY SUBR 0001 ;SUBR 0
.DTTY
TDZA A,A
MOVEI A,.ATOM T
POPJ P,
FASEND