diff --git a/Makefile b/Makefile index 5d8d121e..a9a55359 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ SRC = system syseng sysen1 sysen2 sysen3 sysnet kshack dragon channa \ inquir acount gz sys decsys ecc alan sail kcc kcc_sy c games archy dcp \ spcwar rwg libmax rat z emaxim rz maxtul aljabr cffk das ell ellen \ jim jm jpg macrak maxdoc maxsrc mrg munfas paulw reh rlb rlb% share \ - tensor transl wgd zz graphs lmlib pratt nschem scheme + tensor transl wgd zz graphs lmlib pratt nschem scheme gsb DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc chprog BIN = sys2 emacs _teco_ lisp liblsp alan inquir sail comlap c decsys moon graphs diff --git a/build/build.tcl b/build/build.tcl index 6808bfb3..64a1f1d6 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -2090,6 +2090,17 @@ type ":kill\r" respond "*" ":midas liblsp;_libdoc;dirsiz\r" respond "*" ":midas liblsp;_z;timer\r" +respond "*" ":link lisp;vsaid lisp,nilcom;vsaid >\r" +respond "*" "complr\013" +respond "_" "lisp;_nilcom;vsaid\r" +respond "_" "\032" +type ":kill\r" +respond "*" ":link liblsp;vsaid fasl,lisp;\r" + +respond "*" ":midas liblsp;_gsb;ttyvar\r" +respond "Use what filename instead?" "lisp;\r" +expect ":KILL" + bootable_tapes # make output.tape diff --git a/src/gsb/ttyvar.17 b/src/gsb/ttyvar.17 new file mode 100644 index 00000000..e3fc5ddd --- /dev/null +++ b/src/gsb/ttyvar.17 @@ -0,0 +1,330 @@ +;;; MONDAY JAN 02,1978 07:38:17 +.FASL + +IF1,.INSRT .FASL DEFS + +IFNDEF LA34,LA34==60 + +SUBTTL specification +;;; A spec may be a file object (in which case the channel number +;;; is passed to TTYVAR), or a small fixnum which represents that tty +;;; number. + +TTYDC0: UNLOCKI + CAME A,.SPECIAL TYO + CAMN A,.SPECIAL TYI + .VALUE + WTA [BAD TTY SPECIFICATION!] +TTYDEC: ;; Takes in A, returns spec in R. + ;; DOES A LOCKI! + CAIN A,.ATOM T + HRRZ A,.SPECIAL TYO + LOCKI + MOVEI R,(A) + LSH R,-9. + HRRZ R,ST(R) + CAIN R,.ATOM FIXNUM + JRST [MOVE R,(A) + SKIPL R + CAILE R,259. + JRST TTYDC0 + IORI R,400000 + POPJ P,] + CAIE R,.ATOM ARRAY + JRST TTYDC0 + MOVE R,ASAR(A) + TLNN R,AS.FIL + JRST TTYDC0 + MOVE R,TTSAR(A) + TLNE R,TTS.CL + JRST TTYDC0 + MOVE R,F.CHAN(R) + SKIPL R + CAILE R,20 + .VALUE + POPJ P, + +SUBTTL specification +;;; A may be a fixnum or a symbol which will be converted to +;;; sixbit. A check is made so that the sixbit will not be taken as +;;; an aobjn pointer. + +VARDC0: WTA [UNRECOGNIZABLE TTYVAR SPECIFICATION!] +VARDEC: ;; May clobber everything since it may call SIXMAK. + ;; Returns spec in TT. + MOVEI B,(A) + LSH B,-9. + HRRZ B,ST(B) + CAIN B,.ATOM FIXNUM + JRST [MOVE TT,(A) ? JRST VARDC1] + CAIE B,.ATOM SYMBOL + JRST VARDC0 + PUSH P,A + PUSHJ P,SIXMAK + POP P,A +VARDC1: TLC TT,777000 + TLCN TT,777000 + JRST VARDC0 + POPJ P, + +TTYVAR: SETZ + SIXBIT \TTYVAR\ + MOVE R + MOVE -1(FXP) + MOVEM TT + SETZB F + +.ENTRY READ-TTY-VARIABLE SUBR 003 + ;; , . NCALLable. + PUSH P,[FIX1] +RDTTV0: PUSH P,A + MOVEI A,(B) + PUSHJ P,VARDEC + PUSH FXP,TT + EXCH A,(P) + PUSHJ P,TTYDEC + .CALL TTYVAR + JRST RDTTV1 + PUSHJ P,INTREL + SUB FXP,[1,,1] + SUB P,[1,,1] + POPJ P, + +RDTTV1: CAIE F,11 ;; "illegal file name" + JRST RDTTV2 + PUSHJ P,INTREL + EXCH A,(P) + WTA [ILLEGAL TTYVAR SPECIFICATION!] + SUB FXP,[1,,1] + MOVEI B,(A) + POP P,A + JRST RDTTV0 + +RDTTV2: CAIA + .CALL TTYVAR + IOJRST 1,.+1 + EXCH A,(P) + JSP T,PDLNMK + CALL 1,.FUNCTION NCONS + MOVEI B,(A) + POP P,A + JSP T,PDLNMK + CALL 2,.FUNCTION CONS + MOVEI B,.ATOM READ-TTY-VARIABLE + CALL 2,.FUNCTION XCONS + %IOL (C) + JSP T,FXNV1 + SUB FXP,[1,,1] + POPJ P, + +.ENTRY READ-TTY-VARIABLE? SUBR 004 + ;; , , Function. NIL on success; otherwise, if + ;; function null, returns 0; else calls function with + ;; args of the , , and error code. + PUSH P,[FIX1] + PUSH P,C + PUSH P,A + MOVEI B,(A) + PUSHJ P,VARDEC + PUSH FXP,TT + EXCH A,(P) + PUSHJ P,TTYDEC + .CALL TTYVAR + JRST RDTTV4 + PUSHJ P,INTREL +RDTTV3: SUB FXP,[1,,1] + SUB P,[1,,1] + POPJ P, + +RDTTV4: PUSHJ P,INTREL + POP P,AR2A + JUMPE AR2A,[SETZ TT, ? JRST RDTTV2] + POP P,B + MOVEM F,(FXP) + MOVEI C,(FXP) + CALLF 3,(AR2A) + JSP T,FXNV1 + SUB FXP,[1,,1] + POPJ P, + +MDTTV0: ;; Modify a tty variable. + ;; Instruction on fxp, in a, in b, arg in c. + ;; Skips on success; leaves in a, in b, arg in + ;; tt, error code (if any) in F. Leaves locki word on fxp. + JSP T,FXNV3 + PUSH FXP,[0] + PUSH FXP,R + PUSH P,A + MOVEI A,(B) + PUSHJ P,VARDEC + EXCH A,(P) + PUSHJ P,TTYDEC + POP FXP,-2(FXP) + HLLZ T,-2(FXP) + HRRI T,(FXP) + POP P,B + AOS (P) + ;; in a, in b, <#tty> in r, <#ttyvar> in tt, + ;; locki word at -1(fxp), arg at (fxp), opcode at -2(fxp), + ;; full instruction in T. + .CALL [SETZ ? SIXBIT \TTYVAR\ + MOVE R ? MOVE TT ? MOVEI 0 ? MOVE T ? SETZB F] + SOS (P) + POP FXP,TT + POPJ P, + +MDTTV1: ;; Same as MDTTV0, but gives WTA on illegal ttyvar spec. + PUSHJ P,MDTTV0 + CAIA + JRST [AOS (P) ? POPJ P,] + CAIE F,11 + POPJ P, + PUSHJ P,INTREL + PUSH P,A + MOVEI A,(B) + WTA [ILLEGAL TTYVAR SPECIFICATION!] + MOVEI B,(A) + JSP T,FXCONS + MOVEI C,(A) + POP P,A + JRST MDTTV1 + +MDTTV2: ;; Function entry; wants instruction on fxp, function name on p, + ;; in a, in b, arg in c. Gives WTA for bad + ;; ttyvar, else io-lossage error. + PUSHJ P,MDTTV1 + JRST MDTTV3 + PUSHJ P,INTREL + SUB P,[1,,1] + SUB FXP,[1,,1] + MOVEI A,.ATOM T + POPJ P, + +MDTTV3: CAIA + .CALL TTYVAR + IOJRST 1,.+1 + PUSHJ P,INTREL + PUSH P,A + PUSH P,B + JSP T,FXCONS + CALL 1,.FUNCTION NCONS + MOVEI B,(A) + POP P,A + JSP T,PDLNMK + CALL 2,.FUNCTION CONS + MOVEI B,(A) + POP P,A + JSP T,PDLNMK + CALL 2,.FUNCTION CONS + POP P,B + CALL 2,.FUNCTION XCONS + SUB FXP,[1,,1] + %IOL (C) + JSP T,FXNV1 + POPJ P, + +MDTTV4: ;; 'Nother function entry. Expects opcode on fxp, in a, + ;; in b, arg in c, and error-handling function in ar1. + ;; Returns NIL on success. If error-handling function in NIL, + ;; returns error code, else result of calling function with args + ;; of , , arg, and error code. + PUSH P,AR1 + PUSHJ P,MDTTV0 + JRST MDTTV5 + SETZ A, + PUSHJ P,INTREL + SUB FXP,[1,,1] + SUB P,[1,,1] + POPJ P, + +MDTTV5: PUSHJ P,INTREL + POP P,AR2A + JUMPE AR2A,[MOVE TT,F ? SUB FXP,[1,,1] ? JRST FIX1] + MOVEM TT,(FXP) + MOVEI C,(FXP) + PUSH FXP,F + MOVEI AR1,(FXP) + CALLF 4,(AR2A) + SUB FXP,[2,,2] + POPJ P, + +.ENTRY WRITE-TTY-VARIABLE SUBR 004 + ;; , , new value + PUSH FXP,[MOVE] + PUSH P,[.ATOM WRITE-TTY-VARIABLE ] + JRST MDTTV2 + +.ENTRY OR-INTO-TTY-VARIABLE SUBR 004 + PUSH FXP,[IOR] + PUSH P,[.ATOM OR-INTO-TTY-VARIABLE ] + JRST MDTTV2 + +.ENTRY CLEAR-TTY-VARIABLE-BITS SUBR 004 + PUSH FXP,[TDZ] + PUSH P,[.ATOM CLEAR-TTY-VARIABLE-BITS ] + JRST MDTTV2 + +.ENTRY *INCREMENT-TTY-VARIABLE SUBR 004 + PUSH FXP,[ADD] + PUSH P,[.ATOM *INCREMENT-TTY-VARIABLE ] + JRST MDTTV2 + +.ENTRY INCREMENT-TTY-VARIABLE LSUBR 003004 + JSP TT,LWNACK + LA23,,.ATOM INCREMENT-TTY-VARIABLE + CAMN T,[-2] + SKIPA C,[.ATOM #1 ] + POP P,C + POP P,B + MOVEI A,.ATOM INCREMENT-TTY-VARIABLE + EXCH A,(P) + PUSH FXP,[ADD] + JRST MDTTV2 + +.ENTRY DECREMENT-TTY-VARIABLE LSUBR 003004 + JSP TT,LWNACK + LA23,,.ATOM DECREMENT-TTY-VARIABLE + CAMN T,[-2] + SKIPA C,[.ATOM #1 ] + POP P,C + POP P,B + MOVEI A,.ATOM DECREMENT-TTY-VARIABLE + PUSH FXP,[SUB] + JRST MDTTV2 + +.ENTRY WRITE-TTY-VARIABLE? SUBR 005 + PUSH FXP,[MOVE] + JRST MDTTV4 + +.ENTRY OR-INTO-TTY-VARIABLE? SUBR 005 + PUSH FXP,[IOR] + JRST MDTTV4 + +.ENTRY CLEAR-TTY-VARIABLE-BITS? SUBR 005 + PUSH FXP,[TDZ] + JRST MDTTV4 + +MUMBLE: CAMN T,[-3] + JRST [PUSH P,(P) ? MOVEI A,.ATOM #1 ? MOVEM A,-1(P) ? JRST .+1] + POP P,AR1 + POP P,C + POP P,B + POP P,A + POPJ FXP, + +.ENTRY INCREMENT-TTY-VARIABLE? LSUBR 004005 + JSP TT,LWNACK + LA34,,.ATOM INCREMENT-TTY-VARIABLE? + PUSHJ FXP,MUMBLE + PUSH FXP,[ADD] + JRST MDTTV4 + +.ENTRY DECREMENT-TTY-VARIABLE? LSUBR 004005 + JSP TT,LWNACK + LA34,,.ATOM DECREMENT-TTY-VARIABLE? + PUSHJ FXP,MUMBLE + PUSH FXP,[SUB] + JRST MDTTV4 + +FASEND +