IFNDEF FTDDTM,<FTDDTM=-1> ;NON-ZERO TO IUNCLUDE CALLI DDTIN,OUT\r
\r
FTTTYSER=-1 ;DEFINE THIS SYSTEM TO HAVE SCNSRF\r
-\r
INTERN FTTTYSER ;ASSURE MULT DEF GLOBALS IF WRONG APSER\r
\f; RIGHT HALF BITS (USER MODE0\r
FCS=100 ;FULL CHARACTER SET. PASS\r
\r
TLKRNG=1 ;THIS LINE CURRENTLY IN A TALK RING\r
XON=2 ;^Q TYPED, PAPER TAPE INPUT\r
-\r
FULTWX=4 ;SELF ECHOING FULL DUPLEX\r
T35=10 ;MODEL 35\r
T37=20 ;MODEL 37\r
; DATA BLOCKS.\r
; 4)SETS TTYUSE#1 IN ALL TTY DDBS IN THE TRANSLATOR TABLE.\r
\r
+\r
EXTERNAL SCNCHN,MLTTYL,MTTYLN,TTYTAB,SCNINI\r
\r
TTYINI: MOVEI TAC,SCNCHN\r
MOVSI TAC1,MLTTYL ;NO. OF TTY DEV. DATA BLOCKS. NOT LINES\r
MOVSI IOS,TPMON+IOFST ;VIRGIN STATUS\r
MOVEI DDB,TTYLST ;FIRST TTY DDB ADDRESS\r
-\r
SCN1: MOVSI DAT,TTYUSE ;TTY DDB IN USE BIT\r
TDNN DAT,DEVMOD(DDB) ;IS THIS TTY DDB IN USE?\r
SETZM DEVNAM(DDB) ;NO, SET PHYSICAL NAME TO 0.\r
PUTCO1: IDPB CHREC,TOPUTR(DDB) ;PUT CHARACTER INTO BUFFER\r
CONO PI,PION ;GET PI BACK ON\r
POPJ PDP,\r
+\r
\f;ROUTINE TO CHECK IF A CHARACTER IS SPECIAL(ASCII 0-37, 175-177)\r
;CALL MOVE CHREC,CHAR. TO BE CHECKED\r
; PUSHJ PDP,SPCHEK\r
;FORMAT XWD BITS+CHAR,ADRESS OF ROUTINE\r
;HIGH ORDER BITS IN LH:\r
\r
-SPACTN=40000 ;SPECIAL ACTION TO BE TAKEN\r
+SPACTN=400000 ;SPECIAL ACTION TO BE TAKEN\r
SPOUT=100000 ;SPECIAL HANDLING ON UUO OUTPUT\r
BREAKB=20000 ;BREAK CHARACTER\r
SPHPOS=10000 ;CHARACTER AFFECTS HORIZONTAL POSITION\r
EXTERNAL WSYNC,IADRCK,ADRERR\r
EXTERNAL PTYOW\r
\r
+\r
DDTIN: PUSHJ PDP,TTYFNU ;SET UP DEVDAT,LINE\r
MOVE IOS,[XWD TTYIOW+DDTM,IOACT]\r
IORB IOS,DEVIOS(DDB) ;PUT INTO I/O WAIT\r
PUSHJ PDP,TWSYNC ;NO, WAIT FOR SOME\r
DDTIW: MOVE IOS,[XWD TTYIOW,IOACT]\r
ANDCAB IOS,DEVIOS(DDB)\r
-\r
MOVSI TAC,IOFST+DDTM\r
IORM TAC,DEVIOS(DEVDAT) ;STOP ALL IO\r
HRRZ TAC,@UUO ;CONTENTS OF USER (DDT) AC\r
\f XP TOBF,.-ZZ\r
REPEAT STTYBF,<0>\r
;NO. OF CHAR. IN MON. BUF.\r
-\r
XP TTYCHR,<<STTYBF>*5>\r
XP SCNDDS,.-ZZ ;SIZE OF SCN DDB\r
\r
IDPB CHREC,AC1 ;PLACE CHAR. IN USER BUFFER\r
PUSHJ PDP,SPCHEK ;SPECIAL CHARACTER?\r
JRST MONUS2 ;NO\r
-\r
TLNE TAC,FCSBRK+BREAKB ;A BREAK CHARACTER?\r
SOSA TISYNC(DDB) ;SOME BREAK, COUNT IT DOWN\r
MONUS2: SOJG AC2,MONUS1 ;NO, USER BUFFER FULL?\r
MOVSI IOS,IO+IOFST\r
IORB IOS,DEVIOS(DDB)\r
\r
+\r
PUSHJ PDP,STLNAC ;GET LINE CHARACTERISTICS\r
PUSH PDP,LINE ;SAVE INFO\r
PUSHJ PDP,USRMON ;MOVE USER'S BUFFER TO TTO BUFFER\r
PUSHJ PDP,ADVBFE ;ADVANCE USER'S HEADERS\r
SKIPA\r
JRST .+3 ;MOVE BUFFERS AVAILABLE\r
-\r
MOVEI IOS,IOACT ;NO MORE BUFFERS\r
ANDCAB IOS,DEVIOS(DDB) ;CLEAR ACTIVE IN IOS\r
POP PDP,LINE ;RESTORE LINE INFO\r
PUSHJ PDP,UADCK1\r
JRST @TTUUOT(UCHN) ;DISPATCH TO UUO ROUTINES\r
\r
+\r
TTUUOT: EXP INCHRW ;(0)INPUT CHAR. WAIT TILL TYPED\r
EXP ONEOUT ;(1)OUTPUT A CHARACTER\r
EXP INCHRS ;(2)INPUT A CHAR. & SKIP\r
-\r
EXP OUTSTR ;(3)OUTPUT A STRING\r
EXP INCHWL ;(4)INPUT CHAR, WAIT.LINE MODE\r
EXP INCHSL ;(5)INPUT CHAR, SKIP. LINE MODE\r
ONEOUT: PUSHJ PDP,GETWDU ;PICK UP CHAR FROM USER\r
MOVE CHREC,TAC ;PUT IT IN PROPER AC\r
ANDI CHREC,177 ;MASK ANY JUNK\r
-\r
JUMPE CHREC,CPOPJ ;DONT STORE NULLS\r
PUSHJ PDP,OUTCHR ;PLACE IT IN TTO BUFFER\r
JUMPN CHREC,DDTUTT ;IF IT STORED, RETURN\r
AND TAC,@UUO ;SET ONLY THOSE BITS USER WANTS SET\r
IORM TAC,LINTAB(LINE) ;SET RESULTANT\r
POPJ PDP,\r
+\r
\f;ROUTINE TO ATTACH TTY TO A JOB\r
;CALL: MOVE DEVDAT,ADDRESS OF TTY DEVICE DATA BLOCK\r
; MOVE ITEM,JOB NUMBER\r
; OR SIXBIT /CTY/,\r
; 5)SETS DEVOPR IF IT IS NON-ZERO.\r
\r
+\r
INTERNAL TTYATT,TTYATI\r
EXTERNAL PUNIT,PJOBN,TTYTAB\r
\r
HLL TAC,TLHBYT(TAC1)\r
POP PDP,TAC1 ;RESTORE LINE\r
POPJ PDP,0\r
+\r
\f;ROUTINE TO FIND TTY FOR A JOB\r
;CALL: MOVE ITEM,JOB NUMBER\r
; PUSHJ PDP, TTYFND\r
JRST TTYF9 ;FOUND\r
TTYF0: AOBJN LINE,TTYSRA\r
TTYF1: MOVSI TAC,576062 ;LOOK FOR DEVICE "OPR"\r
-\r
PUSHJ PDP,DEVPHY ;SEARCH PHYSICAL DEVICE NAMES FOR OPR\r
SKIPA TAC,DEVOPR ;NOT FOUND.\r
JRST TTYF9\r
INTERNAL CTYINT\r
EXTERNAL SCNSAV,SCNCHN,TCONLN\r
\r
+\r
CTYINT: CONSO TTY,50 ;TTI OR TTO FLAG?\r
JRST CTYINT ;NO\r
JSR SCNSAV ;YES, SAVE AC'S\r
\r
CRLF: MOVEI HPOS,0 ;HERE ON INPUT OF A CARRIAGE RETURN\r
TLNE LINE,XON ;IF PAPER TAPE, NO FREE LF\r
-\r
JRST TTIPUT ;JUST STORE THE CR\r
PUSHJ PDP,TTIPUT ;ORDINARILY, STORE AND GO ON HERE\r
MOVEI CHREC,12 ;BY ADDING A LF\r
ADD TAC,PUTR(DAT) ;*\r
TLNE TAC,400000\r
ADD TAC,[XWD 347777,-1]\r
-\r
MOVEM TAC,PUTR(DAT)\r
AOS FCTR(DAT)\r
AOS TAC,PCTR(DAT)\r