;-------------------------------------------------------------------C
;  SETCHAN                     January 1983                         C
;  Written by Denny Thury, Texas Instruments.  Stolen and added to  C
;  Directory Managment, (DM), by John C. Hayre, Texas Instruments.  C
;  Send suggestions and/or complaints to:                           C
;                                                                   C
;               Texas Instruments                                   C
;               P.O. Box 225012, MS 3618                            C
;               Dallas, Texas 75265                                 C
;               (Attention John Hayre)                              C
;                                                                   C
;  Phone: 214-995-3575                                              C
;-------------------------------------------------------------------C
; 4/10/85	RTG	REMOVED CHECK FOR VT100 TERMINAL.  RUN WHAT YOU'VE
;			GOT.
; 7/26/85	RTG	added check for VT200 and VT100

	.TITLE	SETCHAN
;
.MACRO		TYPE	BUFF,SIZE
		$QIOW_S EFN=#3,-
			CHAN=4(AP),-
			FUNC=#IO$_WRITEVBLK,-
			P1=BUFF,-
			P2=SIZE
.ENDM
;
		.PSECT	SETDATA,LONG,RD,WRT,NOEXE
		$IODEF
		$TTDEF
		$DCDEF
;
DEVCHAR:                     ; BUFFER FOR INITIAL CHARACTERISTICS OF DEVICE
DCLASS:		.BLKB	1		; TERMINAL CLASS
DTYPE:		.BLKB	1		; TERMINAL TYPE
BSIZE:		.BLKB	2		; BUFFER SIZE
TCHAR:		.BLKB	4		; TERMINAL CHARACTERISTICS
;
; BUFFER FOR UPDATED CHARACTERSTICS.  NOWRAP WILL BE SET.
;
NEWCHAR:
NCLASS:		.BLKB	1		; TERMINAL CLASS
NTYPE:		.BLKB	1		; TERMINAL TYPE
NSIZE:		.BLKB	2		; BUFFER SIZE
NCHAR:		.BLKB	4		; TERMINAL CHARACTERISTICS
;
CHAN:		.BLKW	1		; SAVE CHANNEL NUMBER HERE
;
; DEFINE ESCAPE SEQUENCES FOR TERMINAL
;
ESC=27
;
VT100:		.ASCII	<ESC>/</   ; Only if terminal is in VT52 mode
VT100SZ=.-VT100
;
VT52:		.ASCII	<ESC>/[?2l/
VT52SZ=.-VT52
;
WRAP:		.ASCII	<ESC>/[?7h/
WRAPSZ=.-WRAP
;
NOWRAP:		.ASCII	<ESC>/[?7l/
NOWRAPSZ=.-NOWRAP
;
; DEFINE OTHER MESSAGES
;
BADDEV:		.ASCII   /Terminal must be in VT100 or VT200 mode/ 
BADSZ=.-BADDEV
;
		.PSECT	SETCHAN,SHR,EXE,NOWRT,RD,LONG
;
	.ENTRY	SETTERM,0
;
		CVTWL	4(AP),CHAN
		$QIOW_S EFN=#3,-
			CHAN=CHAN,-
			FUNC=#IO$_SENSEMODE,-
			P1=DEVCHAR
;
		MOVQ	DEVCHAR,NEWCHAR	; COPY ORIGINAL CHARACTERISTICS
		CMPB	DTYPE,#DT$_VT100 ; IS TERMINAL A VT100?? 
		BEQLU	10$		; YES.. PROCEED

		CMPB	DTYPE,#TT$_VT200_SERIES ; IS TERMINAL A VT200??
		BEQLU	10$		; YES.. PROCEED

		CMPB	DTYPE,#TT$_VT102 ; IS TERMINAL A VT102
		BEQLU	10$		; YES.. PROCEED

		BRW	INVAL_DEV	; NO.  INVALID DEVICE
10$:
		BBCC	#TT$V_WRAP,NCHAR,20$	; TURN OFF WRAP FEATURE
		TYPE	NOWRAP,#NOWRAPSZ	; WRAP WAS SET -- CLEAR IT
;
; NOW SET NEW CHARACTERISTICS
;
20$:
		$QIOW_S EFN=#3,-
			CHAN=CHAN,-
			FUNC=#IO$_SETMODE,-
			P1=NEWCHAR

		RET			; RETURN TO CALLER
;
; A DEVICE WHICH IS NEITHER VT100 NOR VT52 IS CONSIDERED INVALID.
;  ABORT THIS IMAGE, WITH AN ERROR MESSAGE
;
INVAL_DEV:
		TYPE	BADDEV,#BADSZ
		$EXIT_S
;
;------------------------------------------------------------------------
;
;  ENTRY TO RESTORE TERMINAL TO INITIAL CONDITIONS
;
	.ENTRY	RSTTERM,0
;
; CHECK IF TERMINAL HAD WRAP MODE SET, AND RESTORE IT IF SO
;
		CMPL	NCHAR,TCHAR	; HAVE TERM. CHARACTERISTICS CHANGED
		BEQLU	10$		; NO... SKIP THIS CODE
		TYPE	WRAP,#WRAPSZ	; YES.. RESTORE WRAP MODE
;
; NOW RESTORE TERMINAL TO ORIGNAL STATE
;
10$:
		$QIOW_S EFN=#3,-
			CHAN=CHAN,-
			FUNC=#IO$_SETMODE,-
			P1=DEVCHAR
;
		RET
;
		.END
