no changes on terminal device anymore
authorpenk
Thu, 19 Sep 2002 15:39:48 +0200
changeset 2207 d352a2f0a83a
parent 2206 e62f6df90972
child 2208 ebd026780ad7
no changes on terminal device anymore get cr -nl again
TerminalView.st
VT100TerminalView.st
--- a/TerminalView.st	Thu Sep 19 11:40:27 2002 +0200
+++ b/TerminalView.st	Thu Sep 19 15:39:48 2002 +0200
@@ -14,14 +14,14 @@
 "{ Package: 'stx:libwidg2' }"
 
 TextCollector subclass:#TerminalView
-	instanceVariableNames:'inStream outStream readerProcess shellPid kbdSequences
-		escapeSequenceTree currentSequence kbdMap escapeLeadingChars
-		numberOfColumns numberOfLines shellTerminateAction rangeStartLine
-		rangeEndLine state savedCursor shellCommand shellDirectory
-		filterStream localEcho translateNLToCRNL inputTranslateCRToNL'
-	classVariableNames:'Debug'
-	poolDictionaries:''
-	category:'Views-TerminalViews'
+        instanceVariableNames:'inStream outStream readerProcess shellPid kbdSequences
+                escapeSequenceTree currentSequence kbdMap escapeLeadingChars
+                numberOfColumns numberOfLines shellTerminateAction rangeStartLine
+                rangeEndLine state savedCursor shellCommand shellDirectory
+                filterStream localEcho translateNLToCRNL inputTranslateCRToNL'
+        classVariableNames:'Debug'
+        poolDictionaries:''
+        category:'Views-TerminalViews'
 !
 
 !TerminalView class methodsFor:'documentation'!
@@ -92,10 +92,15 @@
 "
 ! !
 
-!TerminalView class methodsFor:'class initialization'!
+!TerminalView class methodsFor:'initialization'!
 
 initialize
+
     Debug := false.
+
+"
+    self initialize
+"
 ! !
 
 !TerminalView class methodsFor:'defaults'!
@@ -1656,10 +1661,10 @@
                 "/ must handle individual characters
                 "/ to update the state machine.
 
-                self processCharacter:(buffer at:index).
+                self nextPut:(buffer at:index).
                 index := index + 1.
                 [state ~~ 0 and:[index <= count]] whileTrue:[
-                    self processCharacter:(buffer at:index).
+                    self nextPut:(buffer at:index).
                     index := index + 1.
                 ]
             ]
@@ -1814,7 +1819,7 @@
 !TerminalView class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg2/TerminalView.st,v 1.104 2002-09-19 09:38:14 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg2/TerminalView.st,v 1.105 2002-09-19 13:39:45 penk Exp $'
 ! !
 
 TerminalView initialize!
--- 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 $'
 ! !