--- a/VT100TerminalView.st Thu Sep 19 11:40:27 2002 +0200
+++ b/VT100TerminalView.st Thu Sep 19 15:39:48 2002 +0200
@@ -454,7 +454,24 @@
"Modified: / 10.6.1998 / 14:30:57 / cg"
!
-processCharacter:char
+evaluateProcessCharacterReturn:aSymbol
+ " evaluate the return value of the process state methods except for state 0
+ "
+
+ aSymbol == #waitForNextChar ifTrue:[
+ ^ self.
+ ].
+ aSymbol == #unknown ifTrue:[
+ self doNothing.
+ ^ self
+ ].
+ aSymbol == #sequenceComplete ifTrue:[
+ self endOfSequence.
+ ^ self.
+ ].
+!
+
+nextPut:char
" process a character (i.e. the shells output)
"
@@ -466,64 +483,52 @@
show:' ';
showCR:char storeString
].
+ state == #gotReturn ifTrue:[
+ processCharacterReturn := self processStateGotReturn:char.
+ processCharacterReturn == #sequenceComplete ifTrue:[
+ ^ self.
+ ].
+ ].
state == 0 ifTrue:[
- processCharacterReturn := self processStateCtrlCharacter:char
- ] ifFalse:[
- state == #gotReturn ifTrue:[
- processCharacterReturn := self processStateGotReturn:char
- ] ifFalse:[
- state == #gotESC ifTrue:[
- processCharacterReturn := self processStateGotESC:char
- ] ifFalse:[
- state == #gotCSI ifTrue:[
- processCharacterReturn := self processStateGotCSI:char
- ] ifFalse:[
- state == #gotCSI2 ifTrue:[
- processCharacterReturn := self processStateGotCSI2:char
- ] ifFalse:[
- state == #gotCSI3 ifTrue:[
- processCharacterReturn := self processStateGotCSI3:char
- ] ifFalse:[
- state == #gotXTERMCSI ifTrue:[
- processCharacterReturn := self processStateGotXTERMCSI:char
- ]
- ]
- ]
- ]
- ]
- ]
+ processCharacterReturn := self processState0:char.
+ processCharacterReturn == #waitForNextChar ifTrue:[
+ ^ self.
+ ].
+ processCharacterReturn == #unknown ifTrue:[
+ super nextPut:char.
+ ^ self.
+ ].
+ ].
+ state == #gotESC ifTrue:[
+ processCharacterReturn := self processStateGotESC:char.
+ self evaluateProcessCharacterReturn:processCharacterReturn.
+ ^ self.
].
- "/ #waitForNextChar - state was changed or wait for next character
- "/ #sequenceComplete - command processed
- "/ #unknown - unknown character for this state.
- Debug ifTrue:[
- Transcript
- showCR:'processCharacterReturn:' , processCharacterReturn asString
+ state == #gotCSI ifTrue:[
+ processCharacterReturn := self processStateGotCSI:char.
+ self evaluateProcessCharacterReturn:processCharacterReturn.
+ ^ self.
].
- processCharacterReturn == #waitForNextChar ifTrue:[
- ^ self
+ state == #gotCSI2 ifTrue:[
+ processCharacterReturn := self processStateGotCSI2:char.
+ self evaluateProcessCharacterReturn:processCharacterReturn.
+ ^ self.
].
- processCharacterReturn == #sequenceComplete ifTrue:[
- self endOfSequence.
- ^ self
+ state == #gotCSI3 ifTrue:[
+ processCharacterReturn := self processStateGotCSI3:char.
+ self evaluateProcessCharacterReturn:processCharacterReturn.
+ ^ self.
].
- processCharacterReturn == #unknown ifTrue:[
- Debug ifTrue:[
- Transcript
- showCR:'#### cant handle char:' , char asciiValue asString , ' ('
- , char storeString , ') on state 0'
- ].
- state == 0 ifTrue:[
- self nextPut:char
- ].
- self doNothing.
- ^ self
+ state == #gotXTERMCSI ifTrue:[
+ processCharacterReturn := self processStateGotXTERMCSI:char.
+ self evaluateProcessCharacterReturn:processCharacterReturn.
+ ^ self.
].
self doNothing.
^ self
!
-processStateCtrlCharacter:char
+processState0:char
" change state or processing character; return
#waitForNextChar - state was changed and wait for next characters
#sequenceComplete - command processed
@@ -531,10 +536,19 @@
"
char asciiValue < 32 ifTrue:[
+ (char == Character esc) ifTrue:[
+ state := #gotESC.
+ ^ #waitForNextChar
+ ].
( char == Character nl "nl or '\n'"
or:[(char == (Character value:16rb))]) ifTrue:[
+ translateNLToCRNL == true ifTrue:[
+ self endEntry.
+ self cursorToBeginOfLine.
+ ].
self endEntry.
self doCursorDown:1.
+ ^ #waitForNextChar.
].
(char == Character return) ifTrue:[
(rangeEndLine notNil and:[rangeEndLine ~~ numberOfLines]) ifTrue:[
@@ -542,48 +556,47 @@
self cursorToBeginOfLine.
] ifFalse:[
state := #gotReturn.
- ^ #waitForNextChar
].
- ^ #sequenceComplete.
- ].
- (char == Character esc) ifTrue:[
- state := #gotESC.
- ^ #waitForNextChar
+ ^ #waitForNextChar.
].
(char == Character backspace) ifTrue:[
self endEntry.
self cursorLeft.
- ^ #sequenceComplete "/ doBackspace
+ ^ #waitForNextChar "/ doBackspace
].
(char == Character bell) ifTrue:[
self beep.
- ^ #sequenceComplete
+ ^ #waitForNextChar
].
(char == (Character value:5)) ifTrue:[
"/ Transmission answerback message
self reportTerminalType.
- ^ #sequenceComplete
+ ^ #waitForNextChar
].
( char == (Character value:16r18) "/Cancel
or:[ char == (Character value:16r1A) "/Substitute
]) ifTrue:[
self nextPut:(Character value:16r2).
- ^ #sequenceComplete
+ ^ #waitForNextChar
]
- ]"
-all not suported control characters (also vt102):
-Character value:16r3 ->End of text
-Character value:16r4 ->End of transmission
-Character tab ->Horizontal tab
-Character value:16rc ->Form feed
-Character value:16re ->SO shift out
-Character value:16rf ->SI shift in
-Character value:16r11 ->Device control 1
-Character value:16r13 ->Device control 3
-".
- char asciiValue ~~ 0 ifTrue:[
- ('VT100 [info]: unhandled control key: ' , char storeString) infoPrintCR.
- ^ #sequenceComplete
+ "
+ all not suported control characters (also vt102):
+ Character value:16r3 ->End of text
+ Character value:16r4 ->End of transmission
+ Character tab ->Horizontal tab
+ Character value:16rc ->Form feed
+ Character value:16re ->SO shift out
+ Character value:16rf ->SI shift in
+ Character value:16r11 ->Device control 1
+ Character value:16r13 ->Device control 3
+ ".
+ char ~~ Character tab ifTrue:[
+ char asciiValue ~~ 0 ifTrue:[
+ ('VT100 [info]: unhandled control key: ' , char storeString) infoPrintCR.
+ ].
+ ^ #waitForNextChar.
+ ]
+
].
^ #unknown
!
@@ -686,13 +699,13 @@
"/ ESC[1J - Clear screen to end
"/ ESC[2J - Clear entire screen and home cursor
self endEntry.
- self doClearDisplay:((parameters at: 1) ? 0).
+ self doClearDisplay:(self getParameter:1 withDefault:0).
^ #sequenceComplete
].
char == $K ifTrue: [
"/ ESC[K - Clear to end of line
self endEntry.
- self clearLines:((parameters at: 1) ? 0).
+ self clearLines:(self getParameter:1 withDefault:0).
Debug ifTrue:[
Transcript showCR:'clear to EOL'.
].
@@ -715,6 +728,7 @@
].
char == $R ifTrue: [
"/ ESC[#;#R - Reports current cursor line & column
+ ^ #unknown
].
(char == $c) ifTrue:[
"/ terminal-type query 3
@@ -726,7 +740,7 @@
^ #sequenceComplete
].
char == $m ifTrue: [
- self displayMode:((parameters at: 1) ? 0).
+ self displayMode:(self getParameter:1 withDefault:0).
^ #sequenceComplete
].
char == $r ifTrue: [
@@ -774,7 +788,7 @@
char == $) ifTrue: [
"/ ESC-(
"/ todo: set-charset 1 ...
- ^ #sequenceComplete
+ ^ #unknown
].
char == $7 ifTrue:[
"/ ESC-7
@@ -813,12 +827,12 @@
char == $= ifTrue: [
"/ enter apllication keypad mode
"/ ESC-=
- ^ #sequenceComplete
+ ^ #unknown
].
char == $> ifTrue: [
"/ exit apllication keypad mode
"/ ESC-<
- ^ #sequenceComplete
+ ^ #unknown
].
^ #unknown
!
@@ -830,16 +844,17 @@
#unknown - unknown character for this state
"
+ state := 0.
char == Character nl ifTrue:[
"/ cr-nl
"/ stay in buffering mode.
- self nextPut:Character cr.
- ^ self.
+ super nextPut:Character cr.
+ ^ #sequenceComplete.
].
self endEntry.
self cursorToBeginOfLine.
"/ continue in initial state
- ^ #sequenceComplete
+ ^ #waitForNextChar
!
processStateGotXTERMCSI:char
@@ -876,5 +891,5 @@
!VT100TerminalView class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libwidg2/VT100TerminalView.st,v 1.38 2002-09-19 09:19:42 penk Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg2/VT100TerminalView.st,v 1.39 2002-09-19 13:39:48 penk Exp $'
! !