Google
 

Trailing-Edge - PDP-10 Archives - BB-M836A-BM - tools/sed/sedv10.mac
There are 2 other files named sedv10.mac in the archive. Click here to see a list.
TITLE	SEDV10 - VT100 TERMINAL DEFINITION FILE FOR SED
SUBTTL	A CHRISTOPHER HALL FECIT

;LOAD THE EDITOR BY: .COM  SED,SEDV10
;                    .LOAD SEDV10,SED

	SEARCH	SEDSYM
IFE TOPS10,<SEARCH MONSYM>

	EXTERN	CPOPJ,PUTSQ1,PUTNUM,PUTTYP,PUTSTG,TRMNAM,HOMPOS
	INTERN	TERMNL

FTFAST==1	;SET THIS IF TERMINAL SENDS OUT XON-XOFF'S

TERMNL:	OVT100	;ADDRESS OF THE TERMINAL TABLE TO USE

;VT100 TERMINAL OUTPUT TABLE
;NOTE: THE WRP FLAG SHOULD NOT BE SET WHETHER OR NOT THE VT100 HAS WRAPAROUND

OVT100:	BYTE (7) 33,"[","A"	;CURSOR UP
	BYTE (7) 33,"[","B"	; DOWN
	BYTE (7) 33,"[","C"	; RIGHT
	BYTE (7) 33,"[","D"	; LEFT
	BYTE (7) 33,"[","H"	; HOME
	BYTE (7) 33,"[","J"	;CLEAR TO END OF PAGE
	BYTE (7) 33,"[","K"	;CLEAR TO END OF LINE
	BYTE (7) 33,"D"		;ROLL UP AND CLEAR LINE
	BYTE (7) 33,"M"		;ROLL DOWN AND CLEAR LINE
	BYTE (7) 33,"[","7","m"	;PROTECT ON
	BYTE (7) 33,"[","0","m"	;PROTECT OFF
	ILVT10			;INSERT LINE
	0			;INSERT SPACE (NONE)
	DLVT10			;DELETE LINE
	0			;DELETE SPACE (NONE)
	3777,,[BYTE (7) 33,"[","2","4",";","1","H"] ;MOVE TO BOTTOM
	HVT100			;HOME AND CLEAR PAGE
	POSCUR			;ROUTINE TO POSITION TO CHARACTER
	POSLIN			;ROUTINE TO POSITION TO START OF LINE
	^D24			;LINES PER PAGE
	^D80			;CHARACTERS PER LINE
IFE FTFAST,<
	SLW!TBS			;FLAGS (SLOW TTY,TTY WRAPS,HARDWARE TABS)
>
IFN FTFAST,<
	NPG!SLW!TBS		;FLAGS (KEEP TTY PAGE AND ONES ABOVE)
>
	VENTRY			;ROUTINE TO CALL ON ENTRY
	VEXIT			;ROUTINE TO CALL ON EXIT
	0,,0			;NO NULLS NEEDED
	IVT100			;ADDRESS OF INPUT CHARACTER TABLE

HVT100:	MOVEI	T1,[BYTE (7) 33,"[","H",33,"[" ;HOME AND CLEAR PAGE
		    BYTE (7) "J"]
	PUSHJ	P,PUTSTG
	PUSHJ	P,PUTTYP	;OUTPUT IT NOW
	MOVEI	T1,^D0100	;DELAY JUST A LITTLE
IFN TOPS10,<
	HIBER	T1,
	  JFCL
>
IFE TOPS10,<
	DISMS
>
	POPJ	P,		;THEN RETURN

;INSERT LINE (USES LIMITED SCROLLING REGION)

ILVT10:	PUSH	P,T2		;SAVE T2
	PUSHJ	P,LVT100	;SET UP THE SCROLLING REGION
	MOVSI	T1,(BYTE (7) 33,"[")
	PUSHJ	P,PUTSQ1
	PUSHJ	P,GETROW	;GET THE CURRENT ROW
	PUSHJ	P,PUTNUM	;AND OUTPUT DECIMAL IN ASCII
	MOVE	T1,[BYTE (7) ";","0","H",33,"M"]
	PUSHJ	P,PUTSQ1	;AND MAKE SURE WE ARE THERE
	JRST	RVT100		;NOW RESTORE THE INITIAL STATE

;DELETE LINE (USES LIMITED SCROLLING REGION)

DLVT10:	PUSH	P,T2		;SAVE T2
	PUSHJ	P,LVT100	;SET UP THE SCROLLING REGION
	MOVEI	T1,[BYTE (7) 33,"[","2","4",";"
		    BYTE (7) "0","H",33,"D"]
	PUSHJ	P,PUTSTG

RVT100:	MOVEI	T1,[BYTE (7) 33,"[","0",";","2"
		    BYTE (7) "4","r",33,"8"]
	PUSHJ	P,PUTSTG
	POP	P,T2		;RESTORE T2
	JRST	PUTTYP		;OUTPUT AND RETURN

;SET UP SCROLLING REGION FOR INSERT OR DELETE LINES

LVT100:	MOVE	T1,[BYTE (7) 33,"7",33,"["]
	PUSHJ	P,PUTSQ1
	PUSHJ	P,GETROW	;GET THE CURRENT ROW
	PUSHJ	P,PUTNUM	;OUTPUT DECIMAL NUMBER IN ASCII
	MOVE	T1,[BYTE (7) ";","2","4","r"]
	JRST	PUTSQ1

GETROW:	MOVEI	T1,1(RW)	;GET THE CURRENT ROW
	ADD	T1,HOMPOS	;ADD WINDOW OFFSET, IF ANY
	JUMPE	CM,CPOPJ	;IS THE CURSOR AT THE START OF THE ROW?
	AOJA	T1,CPOPJ	;NO - START ONE ROW FARTHER DOWN AND RETURN

;ROUTINE CALLED ON VT100 ENTRY: SET UP KEYPAD IN APPLICATION MODE

VENTRY:	MOVE	T1,[BYTE (7) 33,"=",33,"<"]
	PUSHJ	P,PUTSQ1	;ASSUME VT52, SET VT100 (+ ALTERNATE KEYPAD)
	JRST	PUTTYP

;ROUTINE CALLED ON VT100 EXIT: RESTORE KEYPAD TO NON-APPLICATION MODE

VEXIT:
;	MOVE	T1,[BYTE (7) 33,"[","?","2","l"]
;	PUSHJ	P,PUTSQ1	;RESET BACK TO A VT52
	MOVSI	T1,(BYTE (7) 33,">")
	PUSHJ	P,PUTSQ1	;GET OUT OF ALTERNATE KEYPAD MODE
	JRST	PUTTYP

;TERMINAL INPUT TABLE - TELLS WHICH CHARACTER SEQUENCES
;INVOKE WHICH COMMANDS

IFE FTFAST,<
		0			;CODE FOR RUBOUT (0==RESET)
IVT100:	EXP	40, 1, 2, 3, 4, 5, 6, 7 ;NOTHING SPECIAL
	EXP	42,11,50,13,14,15,16,17
	EXP	20,21,22,23,24,25,26,27
	EXP	30,31,32
	-SIZ.I1,,ISUBTB			;ESCAPE NEEDS A SUBTABLE
	EXP		 34,35,36,37
>
IFN FTFAST,<
;THIS TABLE SETS UP THE KEYBOARD ARRANGEMENT FOR WHEN YOU NEED TO KEEP
;TTY PAGE IN EFFECT BECAUSE THE TERMINAL SENDS OUT ITS OWN CONTROL S AND Q'S
;THOSE TWO CHARACTERS CANNOT BE COMMANDS SINCE SED DOES NOT KNOW WHETHER THE
;USER HAS TYPED THEM OR THEY WERE SENT BY THE TERMINAL.

;SO Q GOES TO A, A AND S GO TO K AND L, K TO ESCAPE-L, AND L TO ESCAPE-T

		 0			;COMMAND FOR RUBOUT (RESET)
IVT100:	EXP	40,21, 2, 3, 4, 5, 6, 7 ;NOTHING SPECIAL
	EXP	42,11,50, 1,23,15,16,17
	EXP	20, 0,22, 0,24,25,26,27
	EXP	30,31,32
	-SIZ.I1,,ISUBTB			;ESCAPE NEEDS A SUBTABLE
	EXP		 34,35,36,37
>
;SUBTABLE. PUT THE MOST FREQUENTLY-USED SEQUENCES FIRST
;ENTER IS PROBABLY THE MOST COMMON OF ALL

ISUBTB:	XVT100,,"["	;ESCAPE [ == READ NEXT CHAR
	SVT100,,"O"	;ESCAPE O == READ NEXT CHAR
IFN FTFAST,<
	13,,"L"		;ESCAPE L == SLIDE-LEFT
	14,,"T"		;ESCAPE T == SLIDE-RIGHT
>
SIZ.I1==.-ISUBTB

XVT100:	36,,"A"		;ESCAPE [ A == UP
	34,,"B"		;ESCAPE [ B == DOWN
	35,,"C"		;ESCAPE [ C == RIGHT
	10,,"D"		;ESCAPE [ D == LEFT
	0

SVT100:	33,,"P"		;ESCAPE O P == ENTER
	37,,"R"		;ESCAPE O R == HOME
	40,,"Q"		;ESCAPE O Q == RECALL
	41,,"M"		;ESCAPE O M == INSERT-MODE

	36,,"A"		;ESCAPE O A == UP
	34,,"B"		;ESCAPE O B == DOWN
	35,,"C"		;ESCAPE O C == RIGHT
	10,,"D"		;ESCAPE O D == LEFT

	57,,"t"		;ESCAPE O t == START-OF-LINE
	60,,"v"		;ESCAPE O v == END-OF-LINE
	52,,"x"		;ESCAPE O x == UP-TAB
	53,,"r"		;ESCAPE O r == DOWN-TAB
	61,,"n"		;ESCAPE O n == ERASE-WORD
	43,,"p"		;ESCAPE O p == REAL-TAB
	44,,"w"		;ESCAPE O w == MARK
	46,,"y"		;ESCAPE O y == CASE
	54,,"u"		;ESCAPE O u == REWRITE SCREEN
	47,,"q"		;ESCAPE O q == WINDOW
	56,,"s"		;ESCAPE O s == HELP
	0

;MOVE TO ROW (RW), COLUMN (CM)

POSCUR:	MOVSI	T1,(BYTE (7) 33,"[")
	PUSHJ	P,PUTSQ1	;START IT OFF
	MOVEI	T1,1(RW)	;GET ROW POSITION
	PUSHJ	P,PUTNUM
	MOVEI	T1,";"		;THEN A SEMICOLON
	IDPB	T1,TY
	MOVEI	T1,1(CM)	;GET COLUMN POSITION
	PUSHJ	P,PUTNUM
	MOVEI	T1,"H"		;THEN AN H
	IDPB	T1,TY
	POPJ	P,		;DONE

;MOVE TO START OF LINE (T4)

POSLIN:	MOVSI	T1,(BYTE (7) 33,"[")
	PUSHJ	P,PUTSQ1	;START IT OFF
	MOVEI	T1,1(T4)	;GET ROW POSITION
	PUSHJ	P,PUTNUM
	MOVE	T1,[ASCII /;0H/]
	JRST	PUTSQ1		;MOVE TO FIRST COLUMN; DONE

	END