Google
 

Trailing-Edge - PDP-10 Archives - BB-M080N-SM - monitor-sources/rsxsrv.mac
There are 19 other files named rsxsrv.mac in the archive. Click here to see a list.
; *** Edit 7435 to RSXSRV.MAC by GSCOTT on 3-Apr-87, for SPR #21488
; Enable control of DTR on RSX20F lines by MTOPR functions .MOHUP and .MOUHU
; and raise and lower DTR when a TTY is opened and closed if it's not CTRLTT 
; *** Edit 7342 to RSXSRV.MAC by RASPUZZI on 28-Jul-86, for SPR #20938
; Get rid of a race condition between TTYSRV and RSXSRV by putting the XON/XOFF
; logic in TTCH7 (TTYSRV) after chars have been moved from TTBBUF to their
; individual line buffers. 
; *** Edit 7310 to RSXSRV.MAC by RASPUZZI on 2-Jun-86
; Prevent SKDPF1 BUGHLTs by making TTNTM1, TTSNTF & FENTM resident routines 
;------------------------- Autopatch Tape # 13 -------------------------
;------------------------- Autopatch Tape # 12 -------------------------
; *** Edit 7195 to RSXSRV.MAC by JROSSELL on 15-Nov-85
; Do not allocate space when setting line speed for an unprileged user from a
; remote or autobaud terminal 
; UPD ID= 2177, SNARK:<6.1.MONITOR>RSXSRV.MAC.5,   5-Jun-85 10:58:25 by MCCOLLUM
;TCO 6.1.1406  - Update copyright notice.
; UPD ID= 1930, SNARK:<6.1.MONITOR>RSXSRV.MAC.4,   7-May-85 22:09:41 by MCCOLLUM
;TCO 6.1.1238 - Fix BUG. documentation
; UPD ID= 957, SNARK:<6.1.MONITOR>RSXSRV.MAC.3,   5-Nov-84 19:17:03 by PRATT
;TCO 6.1.1032 - Make TTYSRV compile independently:
;  Create RSXSRV.MAC and move FE code to it from TTPHDV
;  Duplicate the TTPHDV edit history here and in NRTSRV.MAC
;  Make many symbols global for TTYSRV
; UPD ID= 941, SNARK:<6.1.MONITOR>TTPHDV.MAC.22,   1-Nov-84 14:49:14 by PRATT
;Merge m60: edit 4900
; UPD ID= 4900, SNARK:<6.MONITOR>TTPHDV.MAC.91,   8-Oct-84 05:07:38 by TBOYLE
;TCO 6.2238 - handle speed setting properly.
; UPD ID= 930, SNARK:<6.1.MONITOR>TTPHDV.MAC.20,  28-Oct-84 11:12:08 by PRATT
;TCO 6.1.1022 - Add support code for NTINF jsys: 
;  Add field NRRID for remote host ID
;  Do a read connect info to get the remote host ID just before accepting
; UPD ID= 713, SNARK:<6.1.MONITOR>TTPHDV.MAC.18,  26-Jul-84 08:31:11 by MCINTEE
;Add CTERM - NRT support
; UPD ID= 578, SNARK:<6.1.MONITOR>TTPHDV.MAC.17,  29-May-84 14:57:05 by MCINTEE
;Fix another of previous
; UPD ID= 575, SNARK:<6.1.MONITOR>TTPHDV.MAC.16,  29-May-84 13:19:03 by MCINTEE
;Fix detach/attach bug in NRT (TNUKIL)
; UPD ID= 545, SNARK:<6.1.MONITOR>TTPHDV.MAC.15,  23-May-84 07:49:45 by MCINTEE
;Merge from M60:
; UPD ID= 4178, SNARK:<6.MONITOR>TTPHDV.MAC.89,   7-May-84 13:32:27 by LOMARTIRE
;More TCO 6.2047 - Fix all possible cases of PI 6 NOSKED/OKSKED from TTYDED
; UPD ID= 381, SNARK:<6.1.MONITOR>TTPHDV.MAC.14,  12-Mar-84 14:58:09 by MCINTEE
;Fix logout bug in NRT.
; UPD ID= 332, SNARK:<6.1.MONITOR>TTPHDV.MAC.13,  13-Feb-84 14:35:32 by MCINTEE
;Make NRTSOF get more buffers
; UPD ID= 293, SNARK:<6.1.MONITOR>TTPHDV.MAC.12,  16-Jan-84 08:33:37 by MCINTEE
;Merge from M60:
; UPD ID= 3397, SNARK:<6.MONITOR>TTPHDV.MAC.88,   3-Jan-84 10:38:46 by PRATT
;TCO 6.1796 - Create TTNTM1, sets/clears TTNTS in fe only.
; UPD ID= 286, SNARK:<6.1.MONITOR>TTPHDV.MAC.11,   5-Jan-84 17:33:38 by NICHOLS
;Fix previous edit, it should give up (RET), not go to MCSRV2 or MCSRV5
; UPD ID= 282, SNARK:<6.1.MONITOR>TTPHDV.MAC.10,  27-Dec-83 23:23:52 by GROSSMAN
;Fix bug in MCSRV when NRTUNB fails, go to MCSRV2, not MCSRV5.
; UPD ID= 218, SNARK:<6.1.MONITOR>TTPHDV.MAC.9,  17-Oct-83 15:48:54 by MCINTEE
;Change IBFRCC to IBRFC1
; UPD ID= 197, SNARK:<6.1.MONITOR>TTPHDV.MAC.8,  25-Aug-83 07:55:07 by MCINTEE
;TCO 6.1784 - In TTSETH, fix logic that sets TTNPM 
; UPD ID= 191, SNARK:<6.1.MONITOR>TTPHDV.MAC.7,   5-Aug-83 12:29:25 by MCINTEE
;Yet another NRT bug fix. Add a SETZRO TTOTP in NETUSER release code.
; UPD ID= 189, SNARK:<6.1.MONITOR>TTPHDV.MAC.6,   4-Aug-83 09:46:46 by MCINTEE
;TCO 6.1718 - Fix code so LOCAL AUTOBAUD lines don't get the REMOTE bit set
;	when the speed is recieved from the FE
; UPD ID= 187, SNARK:<6.1.MONITOR>TTPHDV.MAC.5,   2-Aug-83 15:52:22 by MCINTEE
;More TCO 6.1426 - remove an extra SETZRO TTPRM
;TCO 6.1600 - Allow LOCAL lines to be set as autobaud
; UPD ID= 104, SNARK:<6.1.MONITOR>TTPHDV.MAC.8,  18-Apr-83 13:12:19 by PAETZOLD
;TCO 6.1557 - TCP Merge
; UPD ID= 94, SNARK:<6.1.MONITOR>TTPHDV.MAC.7,  28-Mar-83 14:03:38 by MCINTEE
;Do the previous edit in a cleaner manner
; UPD ID= 93, SNARK:<6.1.MONITOR>TTPHDV.MAC.6,  28-Mar-83 12:35:46 by MCINTEE
;Fix bug in NRT that causes an occasional NSKDIS bughlt.
; UPD ID= 2039, SNARK:<6.MONITOR>TTPHDV.MAC.83,  20-Mar-83 12:46:39 by HALL
;TCO 6.1502 - Allow resident free space in extended section
;	Use one-word global byte pointers to point to sendall buffer and
;		I/O buffers, which must be in section 0 for the DTE.
;	Convert one-word global to one-word local before handing to DTESRV
;	Change handling of end of I/O buffers, and definition of WRPMSK,
;		to reflect use of one-word globals
;	In FNDEND, use ADJBP to decrement byte pointer instead of previous hack
; UPD ID= 1985, SNARK:<6.MONITOR>TTPHDV.MAC.82,  14-Mar-83 08:48:34 by HALL
;TCO 6.1502 - Allow resident free space in extended section
;	Add EA.ENT to TTDTRM
; UPD ID= 1970, SNARK:<6.MONITOR>TTPHDV.MAC.81,  10-Mar-83 19:11:06 by HALL
;TCO 6.1502 - Allow resident free space in extended section
;	Add EA.ENT to TTYINT,TTSPST,TTYDON,TTYDLU,TTYHGU,TTYSLA,IDCTY,
;		DTESTO,DFNDL1
; UPD ID= 1945, SNARK:<6.MONITOR>TTPHDV.MAC.80,   9-Mar-83 10:16:58 by HALL
;TCO 6.1502 - Allow resident free space in extended section
;	Change call to ASGRSB to set RS%SE0
; UPD ID= 4, SNARK:<6.1.MONITOR>TTPHDV.MAC.2,   2-Feb-83 07:38:59 by MCINTEE
;TCO 6.1485 - Fix TCO 6.1480, put TT%XFF in dynamic storage block.
; UPD ID= 1714, SNARK:<6.MONITOR>TTPHDV.MAC.78,  28-Jan-83 10:56:17 by MURPHY
;More 6.1390 - Add dummy symbol if no FE code.
; UPD ID= 1711, SNARK:<6.MONITOR>TTPHDV.MAC.77,  27-Jan-83 22:58:02 by WEAVER
;TCO 6.1480 - Only send XOFF/XON status to front-end if TTXFF (XOFF FORCE)
;is set.
; UPD ID= 1572, SNARK:<6.MONITOR>TTPHDV.MAC.76,  27-Dec-82 08:30:12 by GRANT
;TCO 6.1426 - When closing an NVT connection, don't undo TTPRM if the line
; is an MCB TTY or the CTY
; UPD ID= 1533, SNARK:<6.MONITOR>TTPHDV.MAC.75,  14-Dec-82 09:55:48 by MURPHY
;TCO 5.1.1114 - Index needed at SNDXN2+8L to fix XOFF/XON for incoming chars.
; UPD ID= 1489, SNARK:<6.MONITOR>TTPHDV.MAC.74,  30-Nov-82 11:45:34 by WEAVER
;TCO 6.1393 - Use Break Through Write to send XONs and XOFFs to a line
; UPD ID= 1485, SNARK:<6.MONITOR>TTPHDV.MAC.73,  29-Nov-82 13:36:14 by MURPHY
;TCO 6.1390 - Shut off 20F line if more than 2 noise characters in 1 second.
; UPD ID= 1332, SNARK:<6.MONITOR>TTPHDV.MAC.72,  13-Oct-82 07:04:19 by GRANT
;More of previous edit - fix bug in TNTCLS's debugging code
; UPD ID= 1312, SNARK:<6.MONITOR>TTPHDV.MAC.71,   9-Oct-82 10:28:22 by GRANT
;TCO 5.1.1089 - Rewrite TNTCLS, save link IDs rather than LL block addresses
; UPD ID= 1086, SNARK:<6.MONITOR>TTPHDV.MAC.70,  16-Aug-82 14:31:44 by MURPHY
;TCO 6.1202 - Pass proper arg to TTCBF9 at TINET3.
; UPD ID= 994, SNARK:<6.MONITOR>TTPHDV.MAC.69,  18-Jul-82 13:52:18 by MURPHY
;TCO 5.1.1048 - Add TTCLSH to clear "set host" state when closing LL.
; UPD ID= 991, SNARK:<6.MONITOR>TTPHDV.MAC.68,  18-Jul-82 13:30:31 by MURPHY
;TCO 5.1.1047 - Put NOSKED before call to TNTCLS to interlock ULLCZQ.
; UPD ID= 990, SNARK:<6.MONITOR>TTPHDV.MAC.67,  18-Jul-82 13:28:02 by MURPHY
;TCO 5.1.1046 - Check TTNUS before call to TNUREC.
; UPD ID= 970, SNARK:<6.MONITOR>TTPHDV.MAC.66,  30-Jun-82 08:55:45 by GRANT
;TCO 5.1.1038 - Remove CALL SQIACK in DECnet NVT processor
; UPD ID= 328, SNARK:<6.MONITOR>TTPHDV.MAC.58,  19-Jan-82 15:23:21 by MURPHY
;TCO 5.1688 - report TTYSTP only once per line
; UPD ID= 851, SNARK:<6.MONITOR>TTPHDV.MAC.65,   6-Jun-82 13:29:44 by MURPHY
;TCO 6.1147 - Move bugdefs from BUGS.MAC to here and put them in-line.
; UPD ID= 819, SNARK:<6.MONITOR>TTPHDV.MAC.64,   3-Jun-82 07:42:18 by GRANT
;TCO 6.1154 - Fix failure return from CALL SNDCHK in MCSTRO.
;Change comment in CHKLLT.
; UPD ID= 800, SNARK:<6.MONITOR>TTPHDV.MAC.63,   1-Jun-82 08:31:46 by GRANT
;TCO 6.1148 - Remove code which breaks DECnet connection when a character is
;received on a line on which there is no job
; UPD ID= 771, SNARK:<6.MONITOR>TTPHDV.MAC.62,  19-May-82 17:20:19 by MILLER
;TCO 6.1066 AGAIN. Make RSP output work in secondary protocol
; UPD ID= 505, SNARK:<6.MONITOR>TTPHDV.MAC.61,  16-Mar-82 07:01:10 by MILLER
; UPD ID= 476, SNARK:<6.MONITOR>TTPHDV.MAC.60,  13-Mar-82 14:49:59 by MILLER
;TCO 6.1066 AGAIN. Add some of the RSP support code
; UPD ID= 458, SNARK:<6.MONITOR>TTPHDV.MAC.59,  11-Mar-82 11:47:06 by MILLER
;TCO 6.1066. Make MCSRV internal
; UPD ID= 328, SNARK:<6.MONITOR>TTPHDV.MAC.58,  19-Jan-82 15:23:21 by MURPHY
;TCO 5.1688 - report TTYSTP only once per line
; UPD ID= 150, SNARK:<6.MONITOR>TTPHDV.MAC.57,  21-Oct-81 12:14:07 by GRANT
;TCO 5.1594 - Move code from MCTYI2 and MCTYI3 into NSPSRV
; UPD ID= 193, SNARK:<5.MONITOR>TTPHDV.MAC.56,  17-Sep-81 13:19:49 by GRANT
;Reinstate the UPD ID=153 edit.  Also, it should say TCO 5.1490 no 5.1409
; UPD ID= 172, SNARK:<5.MONITOR>TTPHDV.MAC.55,  14-Sep-81 13:44:20 by GRANT
;Temporarily undo previous edit
; UPD ID= 153, SNARK:<5.MONITOR>TTPHDV.MAC.54,   8-Sep-81 17:31:11 by GRANT
;Needed for TCO 5.1490 - Remove segment number handling in MCTYI3
; UPD ID= 172, SNARK:<5.MONITOR>TTPHDV.MAC.55,  14-Sep-81 13:44:20 by GRANT
;Temporarily undo previous edit
; UPD ID= 153, SNARK:<5.MONITOR>TTPHDV.MAC.54,   8-Sep-81 17:31:11 by GRANT
;Needed for TCO 5.1409 - Remove segment number handling in MCTYI3
;Minor changes needed for handling LLOMSG queue in MCTYI3 and MCTYI2
; UPD ID= 138, SNARK:<5.MONITOR>TTPHDV.MAC.53,   2-Sep-81 16:38:01 by GRANT
;Eliminate cause of OKSKBG BUGHLT - in TNHCLS, NOSKED before calling TTCOB5
; UPD ID= 2307, SNARK:<5.MONITOR>TTPHDV.MAC.52,   8-Jul-81 11:20:59 by MURPHY
;CALL REQNS INSTEAD OF TNUSND FROM TTCHI
; UPD ID= 2295, SNARK:<5.MONITOR>TTPHDV.MAC.51,   6-Jul-81 13:50:54 by MURPHY
;DEBUG CODE TO RECORD DEAD LINKS
;PROCESS ALL INPUT IN TINET BEFORE QUITTING
; UPD ID= 2269, SNARK:<5.MONITOR>TTPHDV.MAC.50,  29-Jun-81 17:48:31 by MURPHY
;ANTX01
; UPD ID= 2190, SNARK:<5.MONITOR>TTPHDV.MAC.49,  11-Jun-81 15:59:54 by MURPHY
;CHANGE TQNx TO TMNx REFLECTING CHANGE IN MACSYM
;DITTO
; UPD ID= 1867, SNARK:<5.MONITOR>TTPHDV.MAC.45,  21-Apr-81 23:41:55 by MURPHY
;DITTO
; UPD ID= 1865, SNARK:<5.MONITOR>TTPHDV.MAC.44,  21-Apr-81 18:29:43 by MURPHY
;DITTO
; UPD ID= 1830, SNARK:<5.MONITOR>TTPHDV.MAC.43,  17-Apr-81 14:19:33 by MURPHY
;MAKE LINE SHUTOFF FOR 5 SECONDS INSTEAD OF 3
;REVISE SENDALL LOGIC
;REVISE STARTUP LOGIC
; UPD ID= 1752, SNARK:<5.MONITOR>TTPHDV.MAC.42,  20-Mar-81 13:32:21 by MURPHY
;Ditto
; UPD ID= 1745, SNARK:<5.MONITOR>TTPHDV.MAC.41,  19-Mar-81 23:11:04 by MURPHY
;Fix problems with line shut-off and XOFF/XON logic.
; UPD ID= 1663, SNARK:<5.MONITOR>TTPHDV.MAC.40,  11-Mar-81 16:30:30 by MURPHY
;Fix up some failures of DTEQ which were not handled
; UPD ID= 1554, SNARK:<5.MONITOR>TTPHDV.MAC.39,  11-Feb-81 17:33:25 by MURPHY
;MAKE SURE LINE GETS RESTARTED AFTER STOP BECAUSE INBFR OR TTBBUF FULL
; UPD ID= 1550, SNARK:<5.MONITOR>TTPHDV.MAC.38,  10-Feb-81 17:57:41 by MURPHY
;FIX XOFF DURING SYSTEM STARTUP PROBLEM
;CHANGE NAMES TO BLSUB., BLCAL.
;DITTO
; UPD ID= 1477, SNARK:<5.MONITOR>TTPHDV.MAC.35,  22-Jan-81 12:24:13 by MURPHY
;FIX TTQAD PROBLEMS
; UPD ID= 1377, SNARK:<5.MONITOR>TTPHDV.MAC.34,  22-Dec-80 18:25:37 by MURPHY
;<5.MONITOR>TTPHDV.MAC.33, 17-Dec-80 18:10:33, EDIT BY MURPHY
;TNUREC
; UPD ID= 1361, SNARK:<5.MONITOR>TTPHDV.MAC.32,  17-Dec-80 15:46:27 by MURPHY
;CHKLLT
;<5.MONITOR>TTPHDV.MAC.31, 12-Dec-80 11:11:34, EDIT BY MURPHY
;<5.MONITOR>TTPHDV.MAC.30, 12-Dec-80 10:34:51, EDIT BY MURPHY
;<5.MONITOR>TTPHDV.MAC.29, 12-Dec-80 10:23:26, EDIT BY MURPHY
;FLOW CONTROL
;<5.MONITOR>TTPHDV.MAC.28,  9-Dec-80 15:16:03, EDIT BY MURPHY
;CKMCOU
;<5.MONITOR>TTPHDV.MAC.27,  5-Dec-80 16:49:34, EDIT BY MURPHY
;VARIOUS MCB FIXES AND ENHANCEMENTS
;<5.MONITOR>TTPHDV.MAC.25, 24-Nov-80 16:46:49, EDIT BY MURPHY
;Requeue line if SQILS or SQIACK fails
;<5.MONITOR>TTPHDV.MAC.24, 21-Nov-80 18:29:16, EDIT BY MURPHY
;FLUSH LINK IF INPUT AND NO JOB
; UPD ID= 1301, SNARK:<5.MONITOR>TTPHDV.MAC.23,  19-Nov-80 17:05:35 by MURPHY
;LOCAL XON,XOFF OPTION FOR NVTS
; UPD ID= 1290, SNARK:<5.MONITOR>TTPHDV.MAC.22,  18-Nov-80 16:45:45 by MURPHY
;<5.MONITOR>TTPHDV.MAC.21, 31-Oct-80 17:37:34, EDIT BY MURPHY
;<5.MONITOR>TTPHDV.MAC.20, 30-Oct-80 22:59:18, EDIT BY MURPHY
;<5.MONITOR>TTPHDV.MAC.19, 21-Oct-80 12:10:07, EDIT BY MURPHY
;<5.MONITOR>TTPHDV.MAC.18, 20-Oct-80 17:12:52, EDIT BY MURPHY
;<5.MONITOR>TTPHDV.MAC.17, 20-Oct-80 14:40:25, EDIT BY MURPHY
;<5.MONITOR>TTPHDV.MAC.16,  7-Oct-80 15:27:36, EDIT BY MURPHY
;<5.MONITOR>TTPHDV.MAC.15,  6-Oct-80 11:32:21, EDIT BY MURPHY
; UPD ID= 1126, SNARK:<5.MONITOR>TTPHDV.MAC.14,   5-Oct-80 15:02:40 by MURPHY
;DITTO
;<5.MONITOR>TTPHDV.MAC.13,  3-Oct-80 14:04:57, EDIT BY MURPHY
; UPD ID= 1120, SNARK:<5.MONITOR>TTPHDV.MAC.12,   3-Oct-80 12:21:22 by MURPHY
;DITTO
; UPD ID= 1113, SNARK:<5.MONITOR>TTPHDV.MAC.11,   3-Oct-80 01:00:51 by MURPHY
;NVT IMPROVEMENTS
; UPD ID= 1077, SNARK:<5.MONITOR>TTPHDV.MAC.10,   1-Oct-80 10:37:44 by MURPHY
;RELEVANT END STATEMENTS FOR STKVAR, ETC.
; UPD ID= 1063, SNARK:<5.MONITOR>TTPHDV.MAC.9,  30-Sep-80 10:16:58 by MURPHY
;DITTO
; UPD ID= 1057, SNARK:<5.MONITOR>TTPHDV.MAC.8,  26-Sep-80 12:13:03 by MURPHY
;MCB FIXES
; UPD ID= 944, SNARK:<5.MONITOR>TTPHDV.MAC.7,  20-Aug-80 20:09:15 by MURPHY
;MCB FIXES
; UPD ID= 925, SNARK:<5.MONITOR>TTPHDV.MAC.6,  20-Aug-80 10:21:12 by MURPHY
;INCLUDE MCB DEVICE
; UPD ID= 699, SNARK:<5.MONITOR>TTPHDV.MAC.5,  25-Jun-80 17:23:34 by MURPHY
;REMOVE TTDBEF REDUNDANT SUBROUTINE
;MERGE TTFEDV AND TTDZDV FILES INTO TTPHDV
;CHANGE DEVICE VECTORING
; UPD ID= 645, SNARK:<5.MONITOR>TTFEDV.MAC.4,  16-Jun-80 12:09:09 by MURPHY
;CLEAN UP VECTOR COMMENTS
; UPD ID= 443, SNARK:<5.MONITOR>TTFEDV.MAC.3,  15-Apr-80 09:41:02 by KONEN
;TCO 4.1.1143 -- Check for XOFF before storing character in big buff.
; UPD ID= 405, SNARK:<5.MONITOR>TTFEDV.MAC.2,   3-Apr-80 16:06:55 by HALL
;CHANGES TO WRITE-PROTECT THE RESIDENT MONITOR:
;	CHANGE ALL REFERENCES TO TT1LIN TO EXPECT A TABLE
;<4.1.MONITOR>TTFEDV.MAC.52, 16-Nov-79 11:29:17, EDIT BY MILLER
;ASGALL NOW SKIPS
;<4.MONITOR>TTFEDV.MAC.51,  1-Nov-79 17:15:09, EDIT BY MILLER
;Previous edit lines deleted

;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY  BE  USED
;OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT  (C)  DIGITAL  EQUIPMENT  CORPORATION  1976, 1985.
;ALL RIGHTS RESERVED.


 	SEARCH TTYDEF,PROLOG
	TTITLE	(RSXSRV,RSXSRV,< - Front End Terminal Support>)

	RESCD

	SUBTTL FRONT-END DEPENDENT CODE

;THIS MODULE IS NECESSARY TO SUPPORT THE KL10 -DTE20 INTERFACE
;FOR TTYSRV.  IT DOES ALL THE DEVICE SPECIFIC FUNCTIONS AND
;PROCESSES DATA TO AND FROM THE FRONT END.


MAXABC==TTBSIZ/2		;MAX ENTRIES ALLOWED IN BIGBUF FOR THIS
				; LINE WHEN LINE IS SHUT OFF
				;(CAN'T BE IN TTYDEF BECAUSE TTBSIZ IS DEFINED
				; IN STG)


;DEFINITIONS FOR TTDEV FOR FE TYPE LINES

;DEFINITIONS FOR TT.FE LINE TYPE

DEFSTR TTFCT,TTDEV,27,8		;NUMBER BYTES IN FRONT END
DEFSTR TTFMC,TTDEV,35,8		;MAX BYTES IN FRONT END
SPCLIN==4			;HIGHEST SPECIAL LINE NUMBER

RS TOTFCT,1			;TOTAL BYTES IN FE
RS MAXFCT,1			;TOTAL CAPACITY OF FE
	COMMENT !		;FOR INFO ONLY, ACTUAL DEFS IN PROKL

;THE FRONT END FUNCTION CODES

.DFLCI==1			;LINE COUNT IS
.DFHSD==:3			;HERE IS STRING DATA
.DFHLC==:4			;HERE ARE LINE CHARACTERS
.DFRDS==:5			;REQUEST DEVICE STATUS
.DFSDO==:6			;SPECIAL DEVICE OPERATION
	.DFLPC==1		;LOAD PAGE COUNTER
.DFSTS==:7			;HERE IS DEVICE STATUS
.DFESD==:10			;ERROR ON DEVICE
.DFRTD==:11			;REQUEST TIME OF DAY
.DFHTD==:12			;HERE IS TIME OF DAY
.DFFDO==:13			;FLUSH OUTPUT (SENT TO 11 ONLY)
.DFSTA==:14			;SEND TO ALL (SENT TO 11 ONLY)
.DFLDU==:15			;A LINE DIALED UP (FROM 11 ONLY)
.DFLHU==:16			;A LINE HUNG UP OR LOGGED OUT
.DFLBE==:17			;LINE BUFFER BECAME EMPTY
.DFXOF==:20			;XOF COMMAND TO THE FE
.DFXON==:21			;XON COMMAND TO THE FE
.DFSPD==:22			;SET TTY LINE SPEED
.DFHLA==:23			;HERE IS LINE ALLOCATION
.DFHRW==:24			;HERE IS -11 RELOAD WORD
.DFACK==:25			;GO ACK ALL DEVICES AND UNITS
.DFTOL==:26			;TURN OFF/ON LINE
	.DFTLO==:0		;TURN IT OFF
	.DFTOO==:1		;TURN IT ON
.DFEDR==:27			;ENABLE/DISABLE DATASETS
.DFLTR==:30			;LOAD TRANSLATION RAM
.DFLVF==:31			;LOAD VFU
.DFMSG==:32			;SUPPRESS SYSTEM MESSAGES TO TTY
.DFKLS==:33			;SEND KLINIK DATA TO THE -11
.DFXEN==:34			;ENABLE XON (SENT TO 11 ONLY)
.DFBKW==:35			;BREAK-THROUGH WRITE
.DFDBN==:36			;DEBUG MODE ON
.DFDBF==:37			;DEBUG MODE OFF
	!

	RESCD
; CLEAR OUTPUT BUFFER ROUTINE

TTCOB4::STKVAR <TTCBSV>
	MOVEM B,TTCBSV		;SAVE ADDRESS OF DYNAMIC DATA
	DYNST			;GET LINE NUMBER
	MOVE D,B		;GET COPY OF LINE NUMBER
	MOVS C,B		;LINE NUMBER
	MOVEI B,.FEDLS		;GET DEVICE CODE
	MOVE A,MSTRDT		;MASTER DTE, NO POST
	CALL FIXARG		;GET PROPER ARGS
	EXCH D,TTCBSV		;GET BACK DYNAMIC DATA
	TMNE TTOTP,(D)		;OUTPUT IN PROGRESS?
	JRST [	EXCH D,TTCBSV	;YES. GET BACK ORIGINAL ARGUMENT
		CALL DTEFLO	;YES, FLUSH DTE REQUESTS
		JRST TTCBF5]
	EXCH D,TTCBSV		;GET BACK ORIGINAL ARGUMENT
TTCBF5:	MOVS D,C		;LINE NUMBER AS ARG
	SETZ C,
	HRLI B,.DFFDO		;FLUSH FUNCTION
	CALL DTEQI		;QUEUE IT UP
	MOVE B,TTCBSV		;GET BACK DYNAMIC DATA
	RET

	ENDSV.			;END STKVAR
	SWAPCD

; SET TERMINAL SPEED

TTSSP2::TRVAR <LINENO>
	MOVEM T2,LINENO		;SAVE LINE NUMBER
	SKIPN FEFLG		;IN PRIMARY PROTOCOL?
	RET			;NO. IGNORE IT THEN
	ACVAR <W1,SSBFR>
	UMOVE W1,2		;GET FLAGS
;**;[7195]INSERT 5 LINES AFTER TTSSP2::+5L  JCR  8-NOV-85
	MOVX D,SC%OPR!SC%WHL	;[7195]SEE IF PRIVILEGED
	TDNN D,CAPENB		;[7195]PRIVILEGED?
	TXNN W1,MO%RMT!MO%AUT	;[7195]NO, REMOTE OR AUTOBAUD?
	SKIPA			;[7195]PRIV'D OR NOT SETTING REMOTE/AUTOBAUD
	ITERR (CAPX1)		;[7195]NOT PRIV'D, USER CAN NOT DO THIS
	NOINT			;PREVENT INTS
	BLCAL. ASGRSB,<[4],[.RESP3],[RS%SE0!.RESTP]> ;GET A 4-WORD BLOCK
	 ITERR ()		;SHOULDN'T HAPPEN
	MOVEM A,SSBFR		;SAVE ADR OF BLOCK
	MOVE C,A
	HRLI C,(POINT 16,0)	;MAKE BYTE PTR
	UMOVE D,C		;GET USER'S ARGS
	HLRZ A,D		;GET INPUT SPEED

;THE LAW OF SPEED SETTING: 

; (1) IF MO%AUT=0 AND A LINE IS NOT REMOTE NOR AUTOBAUD, THEN SET TTSPWD
;	AND ALSO SET SAVED SPEED IF ANY. THE SAVED SPEED IS ACTUALLY ONLY
;	USED WHEN THE LINE IS GOING MO%RMT.
; (2) IN THE OTHER CASES, IF MO%AUT=0 THEN SET TTSPWD ONLY IF THERE IS
;	A DYNAMIC DATA BLOCK. THIS COVERS THE CASE OF PRESERVING LINE
;	SPEED WHEN A LINE IS REMOTE ONLY AND LEAVING SPEED ALONE IF
;	A LINE IS AUTOSPEED AND NO DYNAMIC DATA EXISTS. WE SET THE SPEED
;	IN THE FRONT-END IN THE REMOTE CASE.
; (3) OTHER CASES ARE MO%AUT=1, SPEEDS ARE IGNORED IN THIS CASE.

	TXNE W1,MO%AUT		;IS MO%AUT ZERO?
	IFSKP.
	  TMNE TT%AUT+TT%FEM,TTSTAT(B) ;YES, IS LINE NOT REMOTE NOR AUTO?
	  IFSKP.
	    MOVEM D,TTSPWD(B)	;YES, SET SPEED
	    CALL STADYN		;(T2/T2) IS THERE DYNAMIC DATA?
	    ANSKP.		;IF NOT, PROCEED WITH SPEED SETTING
	    MOVEM D,TTSVPD(B)	;YES, SET SAVED SPEED
	    ENDIF.
				;HERE FOR OTHER CASES WHERE MO%AUT=0

	  MOVE B,LINENO		;GET LINENO BACK
	  CALL STADY		;IS THERE DYNAMIC DATA
	  ANSKP.		;NO, DON'T CHANGE SPEED OF AUTOSPEED LINE
	  MOVE B,LINENO		;GET LINENO BACK
	  MOVEM D,TTSPWD(B)	;SET SPEED
	  ENDIF.

	MOVE B,LINENO		;GET LINENO BACK
	CALL TTEXFA		;SET XON/XOFF STATE
	IDPB A,C		;STORE INPUT
	IDPB D,C		;STORE OUTPUT SPEED
	MOVEI D,0(D)
	MOVEI A,1		;ASSUME ONE STOP BIT
	CAIG D,^D110		;LESS THAN OR EQUAL TO 110 BAUD?
	MOVEI A,2		;YES. USE 2 STOP BITS THEN
	TXNE W1,MO%RMT		;WANT REMOTE?
;**;[7195]REPLACE 4 LINES WITH 1 LINE AT TTSSP5:-13L  JCR  8-NOV-85
	JRST [	TRO A,(1B2)	;[7195]SET HIGH ORDER BIT
		SETONE TTFEM,(B) ;SAY IS REMOTE
		JRST .+1]	;GO SET SPEED ANYWAY
	TXNE W1,MO%AUT		;WANT "AUTO" SPEED?
;**;[7195]Replace 4 lines with 1 line at TTSSP5:-6L  JCR  8-NOV-85
	JRST [	SETONE TTAUT,(B) ;[7195]SET INDICATOR
		TRO A,(1B3)	;SET BIT IN MESSAGE TO FE
		JRST TTSSP5]	;AND PROCEED
TTSSP5:	IDPB A,C		;STORE THIS
	MOVE C,SSBFR		;REFRESH PTR
	HRLI C,(POINT 8,0)
	MOVE F,SSBFR		;PASS BUFFER ADDRESS FOR INTERRUPT
	BLCAL. TTDTEQ,<[SSPINT],[.DFSPD],[6],C>
;**;[7195]REPLACE 1 LINE AT TTSSP3:+0L  JCR  8-NOV-85
	OKINT			;ALLOW INTS AGAIN
	RET			;AND DONE

	ENDAV.			;END ACVAR

;HERE AT INTERRUPT LEVEL AFTER MSG SENT TO FE
; A/ UNIQUE CODE - ADR OF RESIDENT BFR

	RESCD

SSPINT:	CALL RELRES
	RET

	SWAPCD
; SET/RETURN DEVICE NON-TERMINAL STATUS

TTSNT1::SKIPN FEFLG		;IN PRIMARY PROTOCOL?
	RET			;NO. IGNORE IT THEN
	STOR C,TTNTS,(B)	;SAVE NEW VALUE
	BLCAL. TTDTEQ,<[0],[.DFMSG],[0],C>
	RET			;AND DONE

;**;[7310] Add 1 line at TTSNT1:+6L	MDR	30-MAY-86
	RESCD			;[7310] Make routine TTNTM1: resident

;TELL 20F TO ALLOW OR NOT ALLOW SENDALLS, BUT DON'T SAVE TTNTS
TTNTM1::SKIPN FEFLG		;IN PRIMARY PROTOCOL?
	RET			;NO. IGNORE IT THEN
	BLCAL. TTDTEQ,<[0],[.DFMSG],[0],C>
	RET			;AND DONE


;ENABLE/DISABLE XOFF RECOGNITION IN THE FRONT-END

;**;[7310] Delete 1 line at TTNTM1:+8L	MDR	30-MAY-86

TTEXFA:	SAVET			;SAVE REGISTERS
	CALL STADYN
	 RET			;NOT IMPORTANT
	JRST TTEXZ

TTEXF::	SKIPN FEFLG		;CHECK FOR PRIMARY PROTOCOL
	RET			;NO. IGNORE IT THEN
	SAVET			;SAVE TEMPS
TTEXZ:	SETZ T4,0		;ASSUME CLEAR
	TMNE TT%PGM,TTFLGS(T2)
	SETO T4,0		;SET
	DYNST			;GET STATIC TTY NUMBER
	SKIPG TTACTL(T2)	;NORMALLY ACTIVE LINE?
	SETZ T4,		;NO, DISABLE FE XOFF
	BLCAL. TTDTEQ,<[0],[.DFXEN],[0],T4>
	RET

	SWAPCD
;TTMSG...

;CODE TO DO A SEND ALL FOR KL DTE20 CONFIGURATIONS

;TTMSSN FOR SINGLE LINE, TTMSAL FOR ALL LINES
; A/ BYTE PTR TO STRING
; B/ LINE NUMBER
; C/ COUNT OF BYTES IN STRING

TTMSAL::SASUBR <MSBP,MSLN,MSCT>
	SKIPN FEFLG		;USING PRIMARY PROTOCOL?
	JRST [	CAME B,CTYLNO	;CTY?
		RET		;NO, FORGET IT
		RETSKP]		;DO IT
	SETOB B,MSLN		;NOTE ALL LINES
	HRLI B,.DFSTA		;ASSUME SEND ALL
	MOVSI A,DECSAL		;INTERRUPT LOCATION
	HRR A,MSTRDT
	HRRI B,.FEDLS		;THE LINE SCANNER
	CALL FIXARG		;GO CHECK FOR CTY,ETC.
	HRR C,MSCT		;THE COUNT
	MOVE D,MSBP		;THE POINTER
	TXO C,DTBYTM		;FORCE BYTE MODE SEND
	AOS SALCNT		;INCREMENT SENDALL COUNT
	CALL DTEQI		;GO SCHEDULE THE REQUEST
	RETSKP

	ENDSA.

;ROUTINE TO DO SENDALL FOR SINGLE LINE
; T2/ LINE NUMBER
; RETURN +1: DON'T DO THE LINE
; 	+2: OK TO DO, T2/ LINE NUMBER

TTMSSN::SKIPN FEFLG		;PRIMARY PROTOCOL?
	CAMN T2,CTYLNO		;OR CTY?
	RETSKP			;YES, OK TO DO
	RET			;SKIP IT
	RESCD

;TELL FE TO RESUME SENDING TO TERMINAL

TTXON1::SKIPN FEFLG		;IN PRIMARY PROTOCOL?
	RET			;NO .SKIP THE MESSAGE THEN
	JE TTXFF,(B),R		;IF NOT FORCING STATUS TO FE, RETURN
	SETZRO TTXFF,(B)	;CLEAR THE BIT
	MOVEI A,.DFXON		;FE XON FUNCTION
	SAVEAC <B>
	DYNST			;GET LINE NUMBER
	CALLRET SNDFNC		;TELL FE TO RESTART

;FRONT END LINE. TELL FRONT END TO STOP SENDING TO TERMINAL

TTCHI3::SAVET			;SAVE TEMPS
	JE TTXFF,(B),R		;IF NOT FORCING STATUS TO FE, RETURN
	SETZRO TTXFF,(B)	;CLEAR THE BIT
	DYNST			;GET STAT ADDRESS
	MOVEI A,.DFXOF		;TELL FE TO STOP
	CALLRET SNDFNC		;DO IT

;ROUTINE TO SEND XOFF OR XON TO THE FRONT END
;ACCEPTS: A/ FUNCTION TO SEND
;	  B/ LINE NUMBER
;RETURNS:	+1 /COULD NOT SEND REQUEST
;		+2/ REQUEST SENT

SNDFNC:	SAVEAC <B>
	MOVSI C,0(B)		;PUT LINE NUMBER IN CORRECT PLACE
	MOVSI B,0(A)		;FUNCTION CODE
	HRRI B,.FEDLS		;ASSUME DLS
	CALL FIXARG		;GO FIX UP THE ARGS
	HLRZ D,C		;LINE NUMBER AS DATUM
	SETZM C			;DIRECT
	MOVE A,MSTRDT		;TO THE MASTER -11
	CALLRET DTEQI		;QUEUE TO DTE
;SEND XOFF TO DISCOURAGE FURTHER INPUT FROM TERMINAL

SNDXO2::CONSZ PI,1B<^D20+DLSCHN> ;AT DTE PI LEVEL?
	JRST SNDXO1		;YES. GO TO IT
	NOSKD1			;PREVENT SCHEDULER INTERRUPTS
	CHNOFF DLSCHN		;AND DTE INTERRUPTS
SNDXO1:	SAVET
	SKIPG TTACTL(B)		;LINE ACTIVE?
	JRST SNDXO3		;NO, SEND NOTHING
	JN TTFXO,(B),SNDXO3	;DO NOTHING IF PREVIOUS XOFF SENT
	SETONE TTFXO,(B)	;SAY X-ON  NEEDED
	MOVEI D,XOFFC		;THE CHARACTER
	SKIPGE CHITAB(D)	;PARITY NEEDED?
	TXO D,200		;YES. APPLY IT
	MOVE A,MSTRDT		;SEND TO THE MASTER
	MOVSI C,0(B)		;LINE NUMBER
	MOVE B,[.DFBKW,,.FEDLS]
	CALL FIXARG		;FIX UP THE ARGS
	CALL DTEQI		;GO SEND IT
SNDXO3:	CONSZ PI,1B<^D20+DLSCHN> ;AT DTE PI LEVEL?
	RET			;YES. ALL DONE THEN
	CHNON DLSCHN		;RESTORE THE CHANNEL
	OKSKD1			;AND THE SCHEDULER
	RET			;AND DONE
;SEND XON ONLY IF LINE IS MARKED AS NEEDING
;ONE, AND IT HAS NOT STORED TOO MANY CHARACTERS IN EITHER ITS
;INPUT BUFFER OR TTBBUF.
;
;Edit [7342] Notice:
;	This routine no longer has the intelligence to do XON
;	depending on certain conditions. It will ALWAYS send
;	an XON and will only get called from TTYSRV if the line
;	has almost no characters in the TTBBUF. This is to 
;	eliminate a race condition between TTCH7 and RSXSRV when
;	a line is doing high speed input.

;**;[7342] Modify routine SNDXN2: (coding standards)	MDR	23-JUL-86
SNDXN2::JE TTFXO,(T2),R		;[7342] IF NOT WAITING, RETURN
	JN TTSHU,(T2),R		;[7342] DO NOTHING IF LINE TURNED OFF
	SAVET			;BE TRANSPARENT
;**;[7342] Add 2 lines at SNDXN2:+3L	MDR	23-JUL-86
	SKIPG TTACTL(T2)	;[7342] Is this an active line?
	RET			;[7342] No, then leave.
	STKVAR <SNDXSV>
	MOVEM T2,SNDXSV		;[7342] SAVE THE LINE NUMBER
	CONSO PI,77000		;SKIP NOSKED IF NOT AT PI LEVEL 7
	NOSKD1			;PREVENT SCHEDULER INTERRUPTION
	CHNOFF DLSCHN		;AND DTE INTERRUPTS
;**;[7342] Remove 11 lines at SNDXN2:+11L	MDR	23-JUL-86
	MOVE T2,SNDXSV		;[7342] TURN IT ON IF NOT ACTIVE.
	MOVE T1,MSTRDT		;[7342] TO THE MASTER
	MOVEI T4,XONC		;[7342] THE CHARACTER
	SKIPGE CHITAB(T4)	;[7342] PARITY NEEDED?
	TXO T4,200		;[7342] YES. APPLY IT
	MOVSI T3,0(T2)		;[7342]
	MOVE T2,[.DFBKW,,.FEDLS]
	CALL FIXARG
	CALL DTEQI		;GO SEND THE BYTE
	MOVE T2,SNDXSV		;[7342] GET LINE NUMBER
	SETZRO TTFXO,(T2)	;[7342] NO X-ON NEEDED NOW
;**;[7342] Remove SNDXN1: label		MDR	23-JUL-86
	MOVE T2,SNDXSV		;[7342] Restore line number
	CHNON DLSCHN		;RESTORE DTE
	CONSO PI,77000		;SKIP OKSKED IF NOT AT PI LEVEL 7
	OKSKD1			;AND THE SHCEDULER
	RET			;AND DONE

	ENDSV.			;END STKVAR
;**;[7435] Add routine TTUHU and change 5 lines at TTHU2   GAS   1-Apr-87

; TTUHU and TTHU2: routines to hangup or unhangup lines
;
; Call: T2/ line number to hangup
;	CALL TTHU2 or TTUHU
; Returns: +1 always

TTUHU::	SAVET			;[7435] Save the temps
	MOVS T3,T2		;[7435] Swap TTY to left half
	MOVE T2,[.DFLDU,,.FEDLS] ;[7435] Load the unhangup function code
	JRST TTHU21		;[7435] Join code below

TTHU2::	SAVET			;[7435] Save the temps
	MOVS T3,T2		;[7435] Swap TTY number to left half
	MOVE T2,[.DFLHU,,.FEDLS] ;[7435] Load function code to hang up

TTHU21:	MOVE T1,MSTRDT		;[7435] Master -11
	CALL FIXARG		;[7435] (T2,T3/T2,T3) Get proper device/line
	HLRZ D,C
	SETZ C,
	CALL DTEQI		;REQUEST THE HANGUP
	RET			;AND DONE
;CHECK INPUT RATE OF LINE
;LIMIT ITS STORAGE IN TTBBUF

BIGST2::LOAD C,TTFBB,(B)	;GET COUNT OF CHARACTERS IN TTBBUF
	AOS C			;INCREASE IT
	CAIL C,MAXABC		;BEYOND BAD GUY CUTOFF?
	JRST STPLNF		;STOP LINE
	CAIG C,2		;CHECK FOR 2 IN BUFFER
	JRST BIGST4		;NO NOT THIS TIME
	SKIPG TTACTL(T2)	;YES CHECK TO SEE IF ACTIVE
	JRST STPLNF		;NO SHUT LINE DOWN IT IS ANOYING ME
BIGST4:	STOR C,TTFBB,(B)	;UPDATE COUNT OF CHARACTERS IN TTBBUF
	CAIGE C,MAXBBC		;MANY CHARS FOR THIS LINE?
	RETSKP			;NO, CONTINUE
	MOVE C,TTBIGC		;YES, BIGBUF GETTING FULL TOO?
	CAIL C,MAXABC-^D20
	CALL SNDXO2		;YES, SEND XOF
	RETSKP

;TELL FE TO STOP ACCEPTING INPUT ON LINE, I.E. BY SETTING INPUT
;SPEED TO 0.

STPLNF:	JN TTSHU,(B),R		;DO NOTHING IF LINE ALREADY OFF
	SAVEAC <T2>
	IFQE. TTWSO,(B)		;LINE HAS BEEN SHUT OFF BEFORE?
	  SETONE TTWSO,(B)	;NO, REPORT IT VIA BUGINF
	  BUG.(INF,TTYSTP,RSXSRV,HARD,<Line has been shut off because of excessive input rate>,<<T2,LINE>>,<

Cause:	A terminal line on RSX20F is generating input at an excessive
	rate.  It is being shut off for 3 seconds by having its input
	speed set to 0. This can result from a noisy line which has a high
	input baud rate.  If an EIA line, it may be too long and so picks
	up electrical noise.

Action:	This problem can be prevented by eliminating the noise or reducing
	the input speed.
>)
	ENDIF.
	SETONE TTSHU,(B)	;NOTE LINE SHUT OFF
	MOVEI C,TTTOBL		;C/THE ROUTINE TO CALL
	MOVEI A,^D5000		;5 SECONDS
	CALL TTQAD		;GO Q IT UP AND LOSE DATUM
	MOVSI C,0(B)		;THE LINE
	MOVE B,[.DFTOL,,.FEDLS]
	MOVE A,MSTRDT		;TO THE MASTER
	MOVEI D,.DFTLO		;TURN IT OFF
	CALL FIXARG
	CALL DTEQI		;OUTPUT IT
	RET
;NOISY LINE CHECK IN TTCHI.  CALLED WHEN CHARACTER TAKEN FROM BIGBUF
;FOR INACTIVE LINE THAT WILL ECHO BELL.
; T2/ LINE NUMBER

TTCHNL::JN TTSHU,(T2),R		;DONE IF LINE ALREADY SHUT OFF
	LOAD T1,TTNOI,(T2)	;SEE IF NOISY LINE--NOISE CHARACTER COUNT
	CAIL T1,3		;ALREADY SAW 3?
	RET			;YES, ENOUGH ALREADY.
	ADDI T1,1		;BUMP NOISE COUNT
	STOR T1,TTNOI,(T2)
	CAIE T1,1		;FIRST ONE?
	RET			;NO
	MOVEI T1,^D1000		;YES, QUEUE A CHECK FOR ONE SECOND
	MOVEI T3,CKNOIS
	CALL TTQAD
	RET

;CHECK OF POSSIBLY NOISY LINE AFTER 1 SECOND
; T2/ LINE NUMBER

CKNOIS::LOAD T1,TTNOI,(T2)	;SEE HOW MANY IN LAST SECOND
	CAILE T1,2		;MORE THAN 2?
	CALL STPLNF		;YES, SHUT OFF LINE
	SETZRO TTNOI,(T2)	;CLEAR COUNT, START FRESH
	RET
;THIS CODE IS USED TO START UP A LINE TRANSFER VIA THE DTE20.

TTFES1:	CALL TTSND		;GET ONE OUTPUT CHAR
	 RET			;BUFFER EMPTY
	SKIPE FEFLG		;USING PRIMARY PROTOCOL?
	IFSKP.
	  CALL [SAVEAC <B>	;NO
		DYNST		;GET LINE NUMBER
		CALLRET DTECHO]	;OUTPUT VIA SECONDARY
	   RET
	  SETONE TTOTP,(B)	;INDICATE LINE IS ACTIVE
	  RET			;AND DONE
	ENDIF.
	MOVE D,A		;THE CHARACTER
	SETONE TTOTP,(B)	;SAY LINE IS ACTIVE
	INCR TTFCT,(B)		;INCREASE COUNT OF BYTES IN -11
	AOS TOTFCT		;MAINTAIN TOTAL OF ALL LINES
	PUSH P,B		;SAVE ADDRESS OF DYNAMIC DATA
	DYNST			;GET LINE NUMBER
	SETONE TTFPK,(B)	;SAY WAITING FOR TO -11 DONE
	MOVSI C,0(B)		;LINE NUMBER
	MOVE B,[.DFHLC,,.FEDLS]	;ARGS
	CALL FIXARG		;GET PROPER ARGS
	PUSH P,F
	SETZ F,			;JUST IN CASE
	CALL DTSNGL		;GO DO A SINGLE REQUEST
	 JRST [	POP P,F		;FAILED. RESTORE FLAGS
		POP P,B		;RESTORE ADDRESS OF DYNAMIC DATA
		DECR TTFCT,(B)	;DECREMENT BYTES IN -11
		SOS TOTFCT
		CALL BAKTTO	;BACKUP TTY OUTPUT
		JRST INTRST]	;GO SCHEDULE RETRY
	POP P,F			;RESTORE FLAGS
	POP P,B			;ADDRESS OF DYNAMIC BLOCK
	RET			;AND DONE
;TTTOBL - ROUTINE CALLED FROM SCHEDULER TO TURN ON LINE AGAIN

;ACCEPTS:
;	T2/ INTERNAL LINE NUMBER

TTTOBL::JE TTSHU,(B),R		;IF ALREADY RESTARTED, DO NOTHING
	SETZRO TTSHU,(B)
	BLCAL. TTDTEQ,<[0],[.DFTOL],[0],[.DFTOO]>
				;TURN ON LINE
	CALLRET SNDXN2		;ASSUME AN X-ON IS NEEDED

; ENABLE/DISABLE TTY'S

FEDABL::SETZ C,0		;SET LINE # (ALL)
	MOVE A,MSTRDT		;GET ID OF MASTER
	MOVE B,[.DFEDR,,.FEDH1]	;ENABLE/DISABLE DATASETS
	CALL DTEQI
	RET
	SUBTTL FRONT-END TERMINAL HANDLING
	RESCD			;MUST BE RESIDENT

;THIS ROUTINE IS CALLED FROM THE DTE20 INTERRUPT ROUITNE TO COMPLETE
;A TTY OUTPUT REQUEST. INPUT IS:
;	A/ UNIQUE CODE (SEE BELOW)
;	B/UNIT NUMBER
;	C/DEVICE CODE

;UNIQUE CODE IS
;	(0,,COUNT)
;WHERE	COUNT IS THE NUMBER OF CHARACTERS SENT TO THE 11 IN SOME CALL TO
;		DTEQ THAT SPECIFIED TTYINT AS ITS RETURN ADDRESS
;	IF COUNT IS 0, THIS WAS A SINGLE CHARACTER (DTSNGL WAS CALLED)
;		AND BUFFER COUNTS HAVE ALREADY BEEN UPDATED
;	IF COUNT IS NON-ZERO, THIS WAS MULTIPLE CHARACTERS, AND THE BUFFER
;		COUNT MUST BE UPDATED

;AT THIS POINT, THE CHARACTERS HAVE BEEN SENT TO THE 11 BUT NOT ACKNOWLEDGED

TTYINT::EA.ENT
	PUSH P,A		;SAVE UNIQUE CODE
	MOVE A,C		;MOVE DEVICE TO A
	CALL GETLIN		;GET PROPER CODE
	 JRST [	POP P,A		;RESTORE CODE
		RET]		;AND GIVE UP
	SETZRO TTFPK,(B)	;CLEAR WAITING FOR -11
	POP P,A			;GET BACK UNIQUE CODE
	CALL STADY		;GET ADDRESS OF DYNAMIC DATA
	 RET			;RETURN IF BECOMING ACTIVE OR INACTIVE
	JUMPE A,TTYIN3		;HAVE A COUNT?

;MULTIPLE CHARACTERS WERE SENT. UPDATE COUNT OF CHARACTERS IN OUTPUT
;BUFFER

	MOVEI C,0(A)		;NUMBER OF CHARACTERS SENT
	SUB C,TTOCT(B)		;COMPUTE NEW COUNT OF CHARACTERS IN BUFFER
	SKIPG C			;IF COUNT WENT NEGATIVE, DON'T STORE IT
	MOVNM C,TTOCT(B)	;STORE NEW COUNT
	OPSTRM <ADDM A,>,TTFCT,(B) ;UPDATE FE CHAR COUNT
	ADDM A,TOTFCT		;UPDATE TOTAL
	CALL CHKWRN		;SEE IF FORK WAKEUP NEEDED
	JRST TTYIN3		;SEE IF MORE OUTPUT
;TTYINT..
;CALLED FROM SCHEDULER PERIODIC TASK PROCESSOR TO START OUTPUT FOR A LINE
; T2/ DYNAMIC PTR
; RETURN +1 ALWAYS

FESTRO::CHNOFF DLSCHN		;AVOID INTERRUPTS
	SKIPE FEFLG		;PRIMARY PROTOCOL RUNNING?
	IFSKP.
	 CALL TTFES1		;NO, HANDLED BY 1-CHAR CASE
	ELSE.
	 CALL TTYIN3		;DO THE WORK
	ENDIF.
	CHNON DLSCHN
	RETSKP			;NOTE NOTHING ELSE TO BE DONE

;CHARACTERS ARE IN OUTPUT BUFFER. CALL TTSND IF THERE IS ONLY ONE.
;OTHERWISE CALL DTEQ TO SEND THEM ALL

TTYIN3:	STKVAR <TTYVR1,TTYVR2>	;GET SOME SAVE CELLS
	CALL GETFMC		;GET LINE MAX ALLOCATION
	LOAD D,TTFCT,(B)	;GET COUNT OF CHARS IN FE
	CAML D,A		;ROOM FOR MORE?
	JRST [	SETONE TTOTP,(B) ;SAY LINE IS WAITING FOR UNBLOCK
		RET]		;AND GO DISMISS THIS INTERRUPT
	JN <TTFLO,TTSAL,TTHPO,TTSFG,TTRXF>,(T2),[ ;ANY SPECIAL FLAGS?
		CALLRET TTFES1]	;YES, HANDLED BY THE 1-CHAR CASE
	SKIPN C,TTOCT(B)	;ANY OUTPUT CHARACTERS?
	CALLRET TTFES1		;NO
	MOVE C,TTOOUT(B)	;GET POINTER
	TDNN C,WRPMSK		;AT LAST WORD IN THIS BUFFER?
	JRST [	LDB A,[POINT 6,C,5] ;LOOK AT P,S FIELD OF BYTE POINTER
		CAIE A,73	;POINTING TO LAST BYTE?
		JRST .+1	;NO.
		HRRZ A,C	;YES. GET ADDRESS OF CURRENT WORD
		HRR C,1-TTSIZ(A) ;POINT TO NEXT BUFFER IN CHAIN
		JRST .+1]
	MOVE A,TTOCT(B)		;GET OUTPUT COUNT
	CALL CNTSET		;GO ADJUST COUNT
	MOVEM C,TTYVR1		;SAVE STARTING BYTE POINTER
	CALL FNDEND		;GO GET CHARACTERS
	MOVE D,TTYVR1		;GET BACK ORIGINAL BYTE POINTER
	TRNN A,777776		;AT LEAST TWO?
	CALLRET TTFES1		;NO. GO DO SINGLE CHARACTER
	SETONE TTOTP,(B)	;MAKE SURE THIS IS ON
	MOVEM C,TTOOUT(B)	;NEW OUTPUT POINTER
	SETZ F,			;OUTPUT BUFFER
	HRR F,A			;GET COUNT OF BYTES FOUND
	MOVSI A,TTYINT		;IT'S TTY
	HRR A,MSTRDT		;TO THE MASTER
	MOVEM B,TTYVR2		;SAVE ADDRESS OF DYNAMIC DATA
	DYNST			;GET LINE NUMBER
	SETONE TTFPK,(B)	;WAITING FRO TO -11 DONE
	MOVS C,B		;LINE NUMBER
	HRR C,F			;COUNT
	MOVE B,[.DFHSD,,.FEDLS]	;STRING DATA
	CALL FIXARG		;FIX UP THE ARGS
	CALL DTEQBP
	CALL DTEQ		;QUEUE THE REQUEST
	 JRST RSCHED		;GO DO RESCHEDULE
	RET			;GO DISMISS THE INTERRUPT

;DTEQ FAILED. RESTORE COUNTS AND ARRANGE FOR SCHEDULER TO RESTART OUTPUT

RSCHED:	MOVE B,TTYVR2		;ADDRSS OF DYNAMIC DATA
	MOVE D,TTYVR1		;GET ORIGINAL BYTE POINTER
	MOVEM D,TTOOUT(B)	;RESTORE OUTPUT BYTE POINTER
INTRST:	DYNST			;B/ LINE NUMBER
	SETZRO <TTOTP,TTFPK>,(B) ;NOT WAITING FOR PACKET
	MOVEI A,^D100		;TRY AGAIN IN 100 MS.
	MOVEI C,TTSN10		;START UP AS SINGLE CHARACTER
	CALLRET TTQAD		;GO DO IT

	ENDSV.			;END STKVAR
;CNTSET - ROUTINE TO FIGURE OUT MAX COUNT ALLOWED IN STRING DATA FUNCTION
;INPUT:	A/ TTY BUFFER COUNT
;	B/ ADDRESS OF DYNAMIC DATA
;RETURNS +1 ALWAYS WITH: A/-MAX COUNT,,0

CNTSET:	SASUBR <CA,CB>
	CALL GETFMC		;GET MAX ALLOC FOR THIS LINE
	LOAD D,TTFCT,(B)	;CURRENT FRONT END COUNT
	SUB A,D			;COUNT ALLOWED TO SEND
	CAMLE A,CA		;CAN DO ALL?
	MOVE A,CA		;YES
	MOVN A,A		;FOR AOBJN
	HRLZM A,CA		;TO LH AND RETURN IT
	RET			;AND DONE

;GET MAX FE ALLOC FOR LINE.  DEPENDS ON SPEED OF LINE
; B/ DYN PTR
; RETURNS +1 ALWAYS,
;	A/ MAX BYTE COUNT

GETFMC:	SAVEAC <C>
	LOAD A,TTFMC,(B)	;GET NOMINAL MAX
	STALOD C,TTOSP,(B)	;GET LINE SPEED
	CAIE C,-1		;UNKNOWN?
	CAIGE C,^D1200		;OR LESS THAN 1200?
	JRST [	ASH A,-2	;YES, 1/4 ALLOC
		RET]
	CAIL C,^D9600		;FAST?
	IMULI A,2		;YES, DOUBLE ALLOC
	RET			;OTHERWISE, NORMAL ALLOC
;FNDEND - FIND END OF MESSAGE TO SEND TO TERMINAL

;ACCEPTS:
;	T1/ AOBJN POINTER TO STEP THROUGH OUTPUT BUFFER
;	T3/ POINTER FOR REMOVING CHARACTERS FROM OUTPUT BUFFER

;	CALL FNDEND

;RETURNS +1: ALWAYS,
;	T1/ UPDATED AOBJN PTR, RH CONTAINS NUMBER CHARS TO DO
;	T3/ UPDATED POINTER TO OUTPUT BUFFER

FNDEND:	TDNN C,WRPMSK		;TO THE NEXT?
	JRST [	LDB D,[POINT 6,C,5]
		CAIN D,73
		RET
		JRST .+1]
	ILDB D,C		;GET NEXT BYTE
	TRNE D,TTOESC		;ESCAPE CHARACTER?
	JRST [	MOVNI D,1
		ADJBP D,C
		MOVEM D,C
		RET]
;	JRST [	ADD C,[^D9B5]	;DECREMENT BYTE POINTER
;		TLNE C,(40B5)	;WENT INTO PREVIOUS WORD?
;		SUB C,[44B5+1]	;YES. CORRECT IT
;		RET]		;AND RETURN
	AOBJN A,FNDEND		;NO. GET MORE
	RET			;ALL EXHAUSTED

;ROUTINE TO SET SPEED OF LINE FROM VALUES SENT BY -11
;ACCEPTS:
;	A/ DEVICE CODE
;	B/ UNIT NUMBER
;	C/ REMOTE INDICATOR
;	D/ INPUT,,OUTPUT

TTSPST::EA.ENT
	CALL GETLIN		;GET INTERNAL LINE NUMBER
	 RET			;INVALID
	TRNN C,(1B2)		;IS IT REMOTE?
	JRST TTSPS0		;NO, CHECK AUTO
	SETONE TTFEM,(B)	;YES, INDICATE REMOTE
TTSPS0:	TRNN C,(1B3)		;IS IT AUTO?
	JRST TTSPS1		;NO.
	SETONE TTAUT,(B)	;YES. SET INDICATOR
TTSPS1:	MOVEM D,TTSPWD(B)	;STORE IT
	RET			;AND DONE
;ROUTINE TO HANDLE SIGNAL FROM A FE THAT ITS LINE BUFFER FOR
;A GIVEN LINE IS EMPTY. ACCEPTS:
;	A/ DEVICE CODE
;	B/LINE NUMBER

TTYDON::EA.ENT
	JUMPL B,DONALL		;IF NEG HE WANTS TO ACK THEM ALL
	CALL GETLIN
	 RET			;ILLEGAL LINE
	JN TTFPK,(B),R		;IF TO -11 DONE PENDING, GO AWAY
	CALL STADY		;GET ADDRESS OF DYNAMIC DATA
	 RET			;GONE
	LOAD C,TTFCT,(B)	;GET COUNT OUTSTANDING
	MOVN C,C
	ADDM C,TOTFCT		;REDUCE FE TOTAL
	SETZRO TTFCT,(B)	;CLEAR COUNT OF BYTES IN -11
	JE TTOTP,(B),R		;IS THIS LINE WAITING FOR THIS INT?
	CALLRET TTYIN3		;YES, CONTINUE OUTPUT TO THE LINE

;HERE WHEN FRONT END IS ACKING ALL UNITS

DONALL:	STKVAR <SAVEE>
	MOVSI C,NTTFE		;NUMBER OF FRONT END LINES
	MOVNS C			;MAKE AOBJN POINTER
DONAL1:	MOVEM C,SAVEE		;SAVE AOBJN POINTER
	MOVEI B,0(C)		;B/LINE NUMBER
	MOVEI A,.FEDLS		;ALL LINES ARE DLS
	CALL TTYDON		;GO ACK THIS GUY
	MOVE C,SAVEE
	AOBJN C,DONAL1		;DO ALL LINES
	MOVE B,CTYLNO		;GET CTY LINE NUMBER
	LOAD C,TTSTY,(B)	;GET LINE TYPE
	CAIE C,TT.FE		;FRONT END LINE?
	RET			;NO. DON'T ACK IT
	SKIPGE B,CTYUNT		;B/UNIT NUMBER FOR CTY
	RET			;NOT SET UP YET
	MOVEI A,.FEDLS		;A/ DEVICE .FEDLS
	CALLRET TTYDON		;GO ACK THE LINE

	ENDSV.			;END STKVAR
;ROUTINE TO HANDLE A DIAL UP SIGNAL FROM THE FE
;	A/DEVICE CODE
;	B/LINE NUMBER

TTYDLU::EA.ENT
	CALL GETLIN		;GET PROPER LINE NUMBER
	 RET			;ILLEGAL LINE
	MOVSI A,0(B)		;LINE NUMBER TO LH
	HRRI A,DLSCXF+CARONB	;INDICATE CARRIER ON
	CALLRET BIGSTO		;PUT IT IN BUFFER

;ROUTINE TO HANDLE HANG UP SIGNAL FROM FE
;	A/DEVICE CODE
;	B/LINE NUMBER

TTYHGU::EA.ENT
	CALL GETLIN		;GET LINE NUMBER
	 RET			;ILLEAGAL LINE
	MOVSI A,0(B)		;TO LH
	HRRI A,DLSCXF		;CARRIER TRANSITION
	CALLRET BIGSTO		;STORE IT

;DEFINE THE PROTOCOL TRANSFER VECTOR

TTYDTV::0			;NO STRING DATA
	TTYDON			;ACK
	0			;NO STATUS
	TTYSLA			;SET LINE ALLOCATION
	R			;NO ERROR REPORTING
	TTDTRM			;DETACH REMOTES ON RELOAD
;THIS ROUTINE IS CALLED FROM THE DTE INTERRUPT ROUTINE TO SET
;THE LINE ALLOCATION FOR A TTY LINE. ACCEPTS:
;	1/ DEVICE CODE
;	2/ ALLOCATION
;	3/ LINE NUMBER

TTYSLA::EA.ENT
	EXCH B,C		;GET ARGS IN PROPER PLACES
	CALL GETLIN		;GET INTERNAL LINE NUMBER
	 RET			;ILLEGAL LINE
	STOR C,TSFMC,(B)	;STORE NEW ALLOCATION
	RET			;AND DONE

;IDCTY - IDENTIFY THE CTY

;ACCEPTS:
;	T2/ UNIT NUMBER FOR THE CTY AS KNOWN BY THE FRONT END

;	CALL IDCTY

;RETURNS +1: ALWAYS

;CALLED FROM DTE SERVICE WHEN THE FRONT END SENDS OVER THE UNIT NUMBER
;WITHIN THE .FEDLS DEVICE THAT IT KNOWS AS THE CTY.  STORES:
;CTYUNT/ THE UNIT NUMBER
;CTYINT/ THE INTERNAL EQUIVALENT OF THAT (INTERNAL LINE NUMBER)

;THE CTY SHOULD ALWAYS BE ADDRESSED INTERNALLY BY CTYLNO, WHICH IS
;SET UP BY TTINIT. CTYINT WILL CONTAIN THE INTERNAL
;EQUIVALENT OF THE LINE ON WHICH THE CTY IS PHYSICALLY LOCATED FOR THIS
;MONITOR LOAD. ADDRESSING THE LINE BY THIS NUMBER IS AN ERROR.
;IF CTYINT=CTYLNO, CTYINT IS SET TO -1 SO THAT NO LINE NUMBER WILL
;EVER MATCH IT

IDCTY::	EA.ENT
	SAVET
	PUSH P,T2		;SAVE UNIT NUMBER
	SETOM CTYUNT		;INDICATE CTY NOT KNOWN FOR GETLIN
	MOVEI T1,.FEDLS		;T1/DEVICE
	CALL GETLIN		;GET THE INTERNAL EQUIVALENT
	 RET			;NOT A FRONT END LINE
	CAME T2,CTYLNO		;IS THIS ITS VALID INTERNAL LINE NUMBER?
	MOVEM T2,CTYINT		;NO. SAVE THIS AS ITS ALIAS
	POP P,CTYUNT		;SET UNIT NUMBER FOR CTY
	RET
;GETLIN - ROUTINE TO CONVERT DEVICE/LINE TO INTERNAL LINE NUMBER
;ACCEPTS:
;	A/DEVICE CODE (ONLY .FECTY OR .FEDLS)
;	B/LINE NUMBER
;RETURNS +1: FAILURE
;	 +2: SUCCESS,
;		T2/INTERNAL LINE NUMBER
;DOES NOT CLOBBER ANY REGISTERS EXCEPT B

GETLIN:	CAIN A,.FECTY		;THE CTY?
	JRST [	MOVE B,CTYLNO	;YES. USE INTERNAL NUMBER OF CTY
		RETSKP]		;AND RETURN WITH GOOD LINE

;THE DEVICE MUST BE .FEDLS

	CAMN B,CTYUNT		;THE UNIT NUMBER FOR THE CTY?
	JRST [	MOVE B,CTYLNO	;YES. GET INTERNAL LINE NUMBER FOR CTY
		RETSKP]
	CAIL B,NTTFE		;IS THE UNIT NUMBER WITHIN THE NUMBER
				; OF FRONT END LINES THAT WE KNOW ABOUT?
	RET			;NO. CAN'T BE A FRONT END LINE
	JUMPE B,GETLN1		;IF THE DL11, SKIP BIAS
	SUBI B,SPCLIN		;BIAS THE LINE
	SKIPG B			;NOW A GOOD T/S LINE NUMBER?
	ADDI B,NTTFE-1		;NO. WAS A SPECIAL. TRANSLATE THE LINE #
GETLN1:	ADD B,TT1LIN+TT.FE	;YES. ADD NUMBER OF FIRST F.E. LINE
	RETSKP			;RETURN SUCCESS


;FIXARG - ROUTINE TO DETERMINE PROPER DEVICE/LINE NUMBER FOR LINE ON RSX20F
;FRONT END

;ACCEPTS: RH B/ DEVICE (ONLY .FEDLS)
;	  LH C/ INTERNAL LINE NUMBER
;	CALL FIXARG
;RETURNS +1: ALWAYS,
;		RH B/ DEVICE AS KNOWN BY THE FRONT END
;		LH C/ UNIT AS KNOWN BY FRONT END

;CALLED IN PREPARATION FOR CALLING DTE SERVICE. LINE IS ASSUMED TO
;BE ON THE FRONT END

;NOTE: IF CALLED WITH -1, RETURNS IMMEDIATELY. THIS IS BECAUSE OF A
;FRONT-END BUG THAT REQUIRES RECEIVING -1 ON A SENDALL

FIXARG:	ACVAR <W1>		;GET SOME WORK REGISTERS
	JUMPL C,R		;IF UNIT .LE. 0, NO CHANGE
	HLRZ W1,C		;GET INTERNAL LINE NUMBER
	CAMN W1,CTYLNO		;THE CTY?
	JRST [	HRRI B,.FECTY	;YES. USE THE CTY
		HRLI C,0	;AND UNIT 0
		RET]
	SUB W1,TT1LIN+TT.FE	;GET LINE NUMBER WITHIN TYPE
	JUMPE W1,FIXAR1		;IF THE DL11, ALL DONE
	ADDI W1,SPCLIN		;NOT. BIAS THE LINE NUMBER
	CAILE W1,NTTFE-1	;A VALID T/S LINE?
	SUBI W1,NTTFE-1		;NO. ONE OF THE SPECIALS THEN
FIXAR1:	HRL C,W1		;RETURN IT IN LH OF C
	RET			;AND DONE

	ENDAV.			;END ACVAR
;LOCAL ROUTINE TO SIMPLIFY CALLS TO DTEQ - USES "BLISS" CALLING SEQUENCE
; T2/ LINE NUMBER
;	CALL <AA,AB,AC,AD>
; WHERE: (SEE DTESRV FOR FURTHER DETAILS)
;   AA - DRIVER INT LOC (ASSUME MASTER DTE)
;   AB - DTE FUNCTION (ASSUME .FEDLS)
;   AC - 0 ,, BYTE CNT (LH FILLED IN WITH LINE NUMBER)
;   AD - DATUM
;RETURN +1: ALWAYS
;  ALL ACS PRESERVED

TTDTEQ:	BLSUB. <AA,AB,AC,AD>
	SAVET
	HRLZ C,B
	HRLZ B,AB
	HRRI B,.FEDLS
	CALL FIXARG		;CONVERT LINE NUMBER
	HRLZ A,AA
	HRR A,MSTRDT
	HRR C,AC
	MOVE D,AD
	CALLRET DTEQI		;USE NON-SKIP VERSION OF DTEQ

	ENDBS.

;Convert byte pointer before calling DTEQ.

;	CALL DTEQBP

;ACCEPTS USUAL ARGUMENTS FOR DTEQ, WITH BYTE POINTER IN T4

;RETURNS +1: ALWAYS
;	T4/ CONVERTED BYTE POINTER

;ASSUMES BYTE POINTER IS ONE-WORD GLOBAL TO SECTION 0, WITH 9-BIT BYTE SIZE

DTEQBP:	ACVAR <W1>
	LDB W1,[POINT 6,T4,5]	;GET P,S FIELD
	SUBI W1,67		;NORMALIZE TO LOWEST VALUE
	CAILE W1,4		;CAN'T BE MORE THAN 4
	MOVEI W1,4		;SO FORCE IT
	HRL T4,OWG9(W1)		;MAKE A ONE-WORD LOCAL OUT OF IT
	RET
	ENDAV.			;END ACVAR

RSI OWG9,<441100,331100,221100,111100,001100>
;DTESTO - ROUTINE TO STORE A CHARACTER IN TTBBUF. CALLED AT INTERRUPT LEVEL
;FROM DTE SERVICE. DATA IS ALWAYS A CHARACTER AT THIS POINT.

;ACCEPTS:
;	T1/CHARACTER IN 8 BITS
;	T2/(0,, PHYSICAL LINE NUMBER)
;	T3/DEVICE TYPE

;RETURNS +1: ALWAYS

DTESTO::EA.ENT
	EXCH C,A		;TYPE TO A, CHAR TO C
	CALL GETLIN		;GET INTERNAL LINE NUMBER FOR THIS LINE
	 RET			;LINE NOT ON FRONT END
	MOVE A,C		;RESTORE CHARACTER
	CALLRET TTIDON		;GO STORE CHARACTER

;DEVICE DEPENDENT CODE FOR SOBE
;SKIP IF FE BUFFER NOT EMPTY

TTSBEF::JN TTFCT,(T2),RSKP	;LOCAL RETURN SKIP IF NON-EMPTY
	RET			;EMPTY


;DEVICE DEPENDENT CODE FOR INIALIZING DYNAMIC STORAGE

TTSETF::LOAD T3,TSFMC,(T2)	;GET FRONT END CHARACTER LIMIT FROM DYNAMIC
	STOR T3,TTFMC,(T1)	; AND COPY TO DYNAMIC
	CAIN T4,MSGLEN		;IS THIS A MESSAGE-LENGTH BLOCK?
	RET			;YES. NO MORE INITIALIZATION
	MOVE T3,TTSPWD(T2)	;GET SPEED WORD
	MOVEM T3,TTSVPD(T1)	;SAVE IN SAVED SPEED WORD
	RET
;ROUTINE CALLED FROM PROTOCOL HANDLER TO DETACH ALL REMOTE JOBS FOR
;A GIVEN DTE. ACCEPTS:
;	A/ DTE NUMBER (NOT USED)
;RETURNS	+1 ALWAYS

	SWAPCD			;IS SWAPPABLE
TTDTRM:	EA.ENT
	CAME A,MSTRDT		;IS THIS FOR THE MASTER DTE?
	RET			;NO. DON'T DO ANYTHING THEN
	SAVET			;SAVE ALL TEMP REGISTERS
	MOVSI B,NTTFE		;NUMBER OF FE LINES
	MOVNS B			;SET UP AOBJN POINTER
	HRR B,TT1LIN+TT.FE	;START WITH FIRST LINE AND LOOP THROUGH ALL
TTDTR1:	TMNE TTFEM,(B) ;IS THIS LINE REMOTE?
	CALL TTJBDT		;YES. DETACH IT THEN
	AOBJN B,TTDTR1		; DO ALL LINES
	MOVEI A,.SFRMT		;SEE IF REMOTE LOGINS NOW ALLOWED
	TMON			;GET VALUE
	XCT [	CALL DTRMDS	;NOW DISALLOWED
		CALL DTRMEN](B)	;NOW ALLOWED
	RET			;AND DONE
;ROUTINE TO DEFINE THE DL11W PSEUDO-CTY'S.
;PRIMARY PROTOCOL MUST BE RUNNING

DFNDL1::EA.ENT
	ACVAR <W1>		;GET A WORK REG
	STKVAR <<DFNDLS,2>,<DFNDS1,1>>	;A STRING
	MOVE T2,[ASCII /TTY/]	;GET BASE STRING
	MOVEM T2,DFNDLS		;SAVE IT
	MOVE T2,[ASCIZ /DL0/]	;GET DEFINITION STRING
	MOVEM T2,DFNDS1		;SAVE IT
	MOVE W1,[-<SPCLIN-1>,,SPCLIN-2] ;THE LINES TO DO
DFNDLL:	HRRZ T2,W1		;GET LINE NUMBER
	MOVEI T1,.FEDLS		;FOR THE DLS DEVICE
	CALL GETLIN		;GET ITS INTERNAL NUMBER
	 JRST DFNDLE		;?
	SETONE TTIGI,(T2)	;SET IGNORE
	MOVEI T1,DFNDLS		;GET ADDRESS OF BYTE ARRAY
	HRLI T1,(<POINT 7,0,20>) ;MAKE IT A STRING POINTER
	MOVEI T3,10		;GET AN OCTAL NUMBER
	NOUT			;PUT LINE NUMBER IN STRING
	 JFCL
	MOVEI T3,":"		;GET TERMINATOR
	IDPB T3,T1		;STORE COLON
	SETZM T3		;GET A NULL
	IDPB T3,T1		;TIE OFF STRING
	MOVX T1,<BYTE (7)0,0,1>
	ADDM T1,DFNDS1		;CHANGE LOGICAL NAME STRING
	MOVEI T1,.TTDES(T2)	;GET DEVICE DESIGNATOR IN T1
	MOVEI T2,.MOSNT		;SET NON-TERMINAL STATUS
	MOVEI T3,.MOSMN		;SUPPRESS SYSTEM MESSAGES
	MTOPR			;DO IT
	 ERJMP .+1		;PROCEED IF IT FAILS
	MOVX T1,.CLNSY		;CREATE SYSTEM LOGICAL NAME
	HRROI T2,DFNDS1		;THE LOGICAL NAME
	HRROI T3,DFNDLS		;THE DEFINITION
	CRLNM			;DO IT
DFNDLE:	 BUG.(INF,DLDEF,RSXSRV,HARD,<Logical name define failed for FE CTY>,,<

Cause:	A CRLNM was performed to define the logical names for the FE but it
	failed.
>)
	AOBJN W1,DFNDLL		;DO THEM ALL
	RET			;AND DOND

	ENDSV.			;END STKVAR
	ENDAV.			;END ACVAR
	TNXEND
	END