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
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
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
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
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
;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
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