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
LINE=TAC1 ;SCANNER LINE NUMBER\r
HPOS=ITEM ;HORIZONTAL POSITION OF TTY,(0-71)\r
\r
+\r
;SPECIAL SYMBOLS\r
\r
PION=200 ;TURN PI ON BIT\r
IDLECH=1 ;DELAY CHAR FOR TABS, ETC,\r
; SHOULD BE ^V, BUT FOR 37'S\r
\r
+\r
;BYTE POINTERS\r
\r
+\r
INTERNAL TPCJOBN,TYPX,FULTWX,TYPE,TAKR,BREAKB\r
\r
PHPOS: POINT 7,DEVIAD(DEVDAT),12 ;HORIZONTAL POSITION\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
HLLM TAC,LINTAB(TAC1) ;LEAVING REST OF BITS AS THEY WERE\r
AOBJN TAC1,SCN2\r
POPJ PDP,\r
+\r
\f;ROUTINES TO SET UP BUFFERS\r
\r
INTERNAL TSETBF,SETBFI,PUTCHI\r
MOVEM TAC,PCTR(DAT)\r
HLRZ TAC,BUF(DAT) ;CHARACTER COUNT\r
MOVEM TAC,FCTR(DAT) ;UPDATE FREE CHARACTER COUNT\r
+ POPJ PDP,\r
\r
;ROUTINE TO PUT A CHARACTER INTO A BUFFER (FOR INPUT,MERTPO, AND ONCE)\r
;CALL MOVEI DAT,TTYBUF(DDB) ;TO SPECIFY BUFFER\r
PUTCI0: AOS FCTR(DAT) ;READJUST FREE COUNTER\r
POPJ PDP,\r
\r
+\r
;ROUTINE TO PLACE A CHARACTER INTO THE OUTPUT BUFFER\r
;CALLED AT INTERRUPT LEVEL\r
;CALL MOVE CHREC,CHARACTER TO PLACE INTO BUFFER\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
DDT5: MOVSI IOS,IO+DDTM\r
IORB IOS,DEVIOS(DDB)\r
HRLI UUO,PROG ;POINT TO USER AC\r
- HRRI UUO,-1(PROG) ;COMPENSATE FOR GETWD1\r
+ HRRI UUO,-1(UUO) ;COMPENSATE FOR GETWD1\r
DDT2: MOVE DAT,[XWD 440700,TAC] ;BYTE POINTER TO TAC\r
PUSHJ PDP,GETWD1 ;GET THE USER'S WORD\r
DDT3: TLNN DAT,760000 ;ANY CHARS LEFT?\r
;TO ADJUST HPOS FOR OUTPUT OF CHREC\r
;SKIPS IF SPCHECK SAYS SPECIAL CHAR\r
\r
-ADJHP: CAIL CHREC,174 ;HIGH SPECIALS?\r
+ADJHP: CAILE CHREC,174 ;HIGH SPECIALS?\r
JRST SPCHEK ;YES, NO HPOS MOTION\r
CAIL CHREC,40 ;CONTROL CHARACTERS?\r
AOJA HPOS,SPCHEK ;NO. COUNT HPOS FOR PRINT CHAR\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
JUMPE TAC,GETLN1 ;IF NONE, NO LINES.\r
SKIPLE TISYNC(DEVDAT) ;ANY TYPE-IN?\r
TLO LINE,LINRDY ;YES. FLAG.\r
-GETLN1: MOVE LINE,@UUO ;GIVE IT TO USER\r
+GETLN1: MOVEM LINE,@UUO ;GIVE IT TO USER\r
POPJ PDP,\r
\r
;ROUTINE TO SET LINE CHARACTERISTICS THAT ARE SETABLE\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
EXTERNAL JOB\r
\r
\r
+\r
TTYFNU: MOVE ITEM,JOB\r
TTYFND: PUSHJ PDP,TTYSRC\r
TTYDAT: MOVEI DAT,TTOBUF(DDB)\r
POPJ PDP,\r
\r
+\r
;PUT JOB IN IO WAIT IF TTY BUFFER NOT EMPTY\r
;CALLED BY NON ERROR MESSAGE ROUTINES AT UUO LEVEL\r
\r
TLZ LINE,LGLSET ;INITIALIZE OTHER MODES\r
HLLM LINE,LINTAB(LINE)\r
SETZB TAC,DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME\r
- MOVE TAC,[XWD TTYUSR+TTYATC,ASSCON+ASSPRG]\r
+ MOVE TAC,[XWD TTYUSE+TTYATC,ASSCON+ASSPRG]\r
ANDCAM TAC,DEVMOD(DEVDAT) ;CLEAR ATTACH,USE, AND ASSIGN BITS\r
TTYKL1: LDB LINE,PUNIT ;LINE NO.\r
SETZM TTYTAB(LINE) ;CLEAR TRANSLATOR TABLE\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
POPJ PDP,\r
MOVE IOS,DEVIOS(DEVDAT) ;IS TTY IN MONITOR MODE AND LEFT HAND MARGIN?\r
MOVE TAC1,-3(PDP) ;TTY GIVING TALK COMMAND\r
-\r
MOVE TAC1,DEVNAM(TAC1) ;ITS NAME\r
MOVE TAC,DEVNAM(DEVDAT) ;OPR IS NEVER TOO BUSY...\r
CAME TAC1,DEVOPR ;EITHER ONE OPR?\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
;OTHERWISE, DDB ONLY USED TO TYPE A\r
JRST TTYKIL ;MESSAGE; KILL TTY DDB\r
\r
-\r
XMTIN2: CONO PI,PION\r
PUSHJ PDP,GETCHR ;NO, GET NEXT CHAR. IN BUFFER\r
JUMPE CHREC,XMTIN1 ;IGNORE NULLS\r
AOJDPX: AOJA HPOS,DUPLX1 ;OUTPUT AND COUNT HPOS\r
\r
RUBOU1: TLZE LINE,ROBTPD ;END OF INPUT STREAM REACHED\r
- \r
PUSHJ PDP,BSECHO ;OUTPUT A BACKSLASH\r
JRST CRLFEC ;AND A CR LF\r
\r
TRNE TAC,17 ;DONE YET?\r
SOJA TAC,.-2 ;NO. OUTPUT MORE\r
POPJ PDP,0 ;DONE\r
+\r
\fSIMFF: TLO TAC,ECHSUP ;DON'T OUTPUT FF OR VT TO A 33\r
PUSHJ PDP,TTIPUT ;PUT IT IN BUFFER\r
MOVEI CHREC,12 ;SIMULATE WITH LF'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
TYPL: TLNE LINE,PTYLIN\r
POPJ PDP, ;YES\r
PUSHJ PDP,PEVEN8 ;GENERATE CORRECT PARITY\r
- TLNE LINE,CTYLIN ;NO,CONSOLE TTY?\r
+ TLNN LINE,CTYLIN ;NO,CONSOLE TTY?\r
JRST SCNTYP ;TYPE CHAR.\r
CTYP: DATAO TTY,CHREC\r
DPB CHREC,PLASTC\r
POPJ PDP, ;YES.\r
MOVSI IOS,MLTTYL ;NO. OF TTY DDBS\r
MOVEI DEVDAT,TTYLST ;ADDRESS OF FIRST TTY DDB\r
- SKIPA TAC,[XWD TTYUSE+TTYATC,ASSPRG+ASSCON]\r
+ SKIPA TAC,[XWD TTYUSE+TTYATC,ASSCON+ASSPRG]\r
HLRZ DEVDAT,DEVSER(DEVDAT) ;CHAIN THRU DDBS\r
TDNE TAC,DEVMOD(DEVDAT) ;USE,ATTACH OR ASSIGN BITS ON?\r
AOBJN IOS,.-2 ;YES. DONE?\r
-\r
JUMPGE IOS,CPOPJ ;YES. DEVICE DATA BLOCK FOUND?\r
MOVSI TAC,TOIP ;CLEAR TOIP IN DDB\r
ANDCAM TAC,TTYPTR(DDB) ;IN CASE OF PREVIOUS DETACH\r