mirror of
https://github.com/PDP-10/stacken.git
synced 2026-03-06 19:11:04 +00:00
182 lines
3.4 KiB
Plaintext
182 lines
3.4 KiB
Plaintext
TITLE SEDECO - ECHO PROGRAM TO HELP SED IMPLEMENTORS
|
|
SUBTTL A CHRISTOPHER HALL FECIT
|
|
|
|
;THIS PROGRAM IS USED TO FIND OUT WHAT CHARACTERS ARE SENT FROM A
|
|
;TERMINAL WHEN KEYS ARE PRESSED.
|
|
|
|
;IF CONV==0 CHARACTERS ARE ECHOED BACK TO THE TERMINAL EXACTLY AS THEY
|
|
; COME (CONTROL-A BEGETS CONTROL-A, NOT "^A")
|
|
;IF CONV==1 THE CODES FOR THE CHARACTERS ARE ECHOED
|
|
; (CONTROL-A BEGETS "CONTROL-A (001)"
|
|
|
|
TOPS10==0
|
|
CONV== 1
|
|
|
|
;TWO SPECIAL CASES: CONTROL-C CAUSES EXIT FROM PROGRAM
|
|
; CONTROL-M OUTPUTS A <CRLF> IN ADDITION TO EVERYTHING ELSE
|
|
|
|
SEARCH UUOSYM
|
|
IFE TOPS10,<
|
|
SEARCH MONSYM
|
|
>
|
|
|
|
T1=1
|
|
T2=2
|
|
T3=3
|
|
T4=4
|
|
|
|
IFN TOPS10,<
|
|
START: RESET
|
|
SETO T1,
|
|
TRMNO. T1,
|
|
HALT
|
|
MOVEM T1,BRKADR+1
|
|
MOVEM T1,TSTIN+1
|
|
MOVEM T1,IN+1
|
|
|
|
OPEN 1,INADR
|
|
HALT
|
|
OPEN 2,OUTADR
|
|
HALT
|
|
MOVE T3,[XWD 3,BRKADR]
|
|
TRMOP. T3, ;SET UP PIM BREAK SET (ALL CHARS)
|
|
HALT
|
|
|
|
IO: MOVE T1,[XWD 2,IN] ;YES - READ A CHARACTER
|
|
TRMOP. T1,
|
|
HALT
|
|
|
|
ANDI T1,177 ;KEEP ONLY 7 BITS
|
|
CAIN T1,3 ;GOT A CONTROL-C?
|
|
JRST CTLC ;YES - DONE
|
|
MOVE T2,T1 ;ELSE GET CHARACTER
|
|
MOVE T3,T1 ;HERE, TOO
|
|
IFN CONV,<
|
|
CAIL T1,40 ;SPECIAL CHARACTER?
|
|
JRST SKIP ;NO - SKIP THIS
|
|
OUTSTR [ASCIZ / CTRL-/]
|
|
ADDI T2,100
|
|
SKIP:
|
|
>
|
|
OUTCHR T2 ;ELSE OUTPUT THE CHARACTER
|
|
IFN CONV,<
|
|
OUTCHR ["("]
|
|
ROT T1,-6 ;GET HIGH DIGIT
|
|
ADDI T1,"0" ;CONVERT TO ASCII
|
|
OUTCHR T1
|
|
ROT T1,3 ;GET LOW DIGIT
|
|
TRZ T1,777770 ;KEEP ONLY THE RIGHT BITS
|
|
ADDI T1,"0" ;CONVERT TO ASCII
|
|
OUTCHR T1
|
|
ROT T1,3 ;GET LOW DIGIT
|
|
TRZ T1,777770 ;KEEP ONLY THE RIGHT BITS
|
|
ADDI T1,"0" ;CONVERT TO ASCII
|
|
OUTCHR T1
|
|
OUTCHR [")"] ;OUTPUT IT
|
|
SKIP1:
|
|
>
|
|
CAIE T3,15 ;GET A <CR>?
|
|
JRST IO ;NO - LOOP
|
|
OUTCHR T3 ;YES - GIVE WITH A <CRLF>
|
|
OUTCHR [12]
|
|
JRST IO ;THEN LOOP
|
|
|
|
CTLC: RELEAS 1,
|
|
RELEAS 2,
|
|
EXIT 1,
|
|
JRST IO
|
|
|
|
;TOPS10 DATA
|
|
|
|
INADR: XWD .IOPIM
|
|
SIXBIT /TTY/
|
|
0,,INHDR
|
|
INHDR: BLOCK 3
|
|
|
|
OUTADR: XWD .IOPIM
|
|
SIXBIT/TTY/
|
|
OUHDR,,0
|
|
OUHDR: BLOCK 3
|
|
|
|
BRKADR: 2037
|
|
0
|
|
0
|
|
TSTIN: 1
|
|
0
|
|
IN: 20
|
|
0
|
|
>
|
|
IFE TOPS10,<
|
|
START: MOVEI T1,-1 ;MAKE LKJHKJ GIVE THEIR CODE
|
|
MOVE T2,[525252,,525252]
|
|
MOVE T3,T2
|
|
SFCOC
|
|
|
|
MOVEI T1,.PRIIN ;READ MODE WORD
|
|
RFMOD
|
|
MOVEM T2,FMDSAV ;SAVE IT FOR EXIT
|
|
TDZ T2,[37777,,4022] ;ZERO PAGE LENGTH, WIDTH; MAKE NOTHING ECHO
|
|
TDO T2,[200000,,300] ;TURN ON FORMF, NO-TRANS-OUTP BITS
|
|
SFMOD
|
|
STPAR
|
|
|
|
MOVEI T1,-5 ;DISABLE INTERRUPTS ON ALL CHARACTERS
|
|
SETZ T2, ; SO MONITOR WON'T TRAP ANYTHING
|
|
STIW
|
|
|
|
IO: PBIN ;READ A CHARACTER
|
|
|
|
CAIN T1,T3 ;GOT A CONTROL-C?
|
|
JRST CTLC ;YES - DONE
|
|
MOVE T2,T1 ;ELSE GET CHARACTER
|
|
MOVE T3,T1 ;HERE, TOO
|
|
IFN CONV,<
|
|
CAIL T1,40 ;SPECIAL CHARACTER?
|
|
JRST SKIP ;NO - SKIP THIS
|
|
MOVEI T1,[ASCIZ / CTRL-/]
|
|
PSOUT
|
|
MOVEI T1,100(T2)
|
|
SKIP:
|
|
>
|
|
PBOUT ;ELSE OUTPUT THE CHARACTER IN T1
|
|
IFN CONV,<
|
|
MOVEI T1,"("
|
|
PBOUT
|
|
MOVE T1,T2
|
|
ROT T1,-6 ;GET HIGH DIGIT
|
|
ADDI T1,"0" ;CONVERT TO ASCII
|
|
PBOUT
|
|
ROT T1,3 ;GET LOW DIGIT
|
|
TRZ T1,777770 ;KEEP ONLY THE RIGHT BITS
|
|
ADDI T1,"0" ;CONVERT TO ASCII
|
|
PBOUT
|
|
ROT T1,3 ;GET LOW DIGIT
|
|
TRZ T1,777770 ;KEEP ONLY THE RIGHT BITS
|
|
ADDI T1,"0" ;CONVERT TO ASCII
|
|
PBOUT
|
|
MOVEI T1,")" ;OUTPUT IT
|
|
PBOUT
|
|
SKIP1:
|
|
>
|
|
CAIE T3,15 ;GET A <CR>?
|
|
JRST IO ;NO - LOOP
|
|
MOVE T1,T3 ;YES - GIVE WITH A <CRLF>
|
|
PBOUT
|
|
MOVEI T1,12
|
|
PBOUT
|
|
JRST IO ;THEN LOOP
|
|
|
|
CTLC: MOVEI T1,.PRIIN
|
|
MOVE T2,FMDSAV ;GET BACK THE ORIGINAL FMOD WORD
|
|
SFMOD
|
|
STPAR
|
|
HALTF
|
|
JRST IO
|
|
|
|
;TOPS20 DATA
|
|
|
|
FMDSAV: BLOCK 1 ;SAVED RFMOD WORD
|
|
>
|
|
END START
|
|
|