home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 2
/
crawlyvol2.bin
/
utility
/
misc
/
ckbd_13
/
doc
/
tech_doc
/
stmacger.txt
< prev
next >
Wrap
Text File
|
1994-04-07
|
6KB
|
204 lines
CKBD Tastatur Interrupt
-----------------------
StateMachine: Bei jedem Tastaturinterrupt wird die State Machine
aufgerufen. Wenn nichts angegeben wird, wird das aktuelle Zeichen
unverändert gelassen. Es gibt 3 Grundoperationen, die auf den
Tastaturpuffer wirken:
remove_from_buffer
Das zuletzt eingegebene Zeichen wird aus dem
Tastaturpuffer gelöscht.
replace_in_buffer char
Das zuletzt eingegebene Zeichen wird mit 'char'
überschrieben.
insert_in_buffer char
'char' wird hinter dem letzten Zeichen in den
Tastaturpuffer eingefügt.
Der Befehl 'GOTO' bestimmt, welcher Zustand als nächster angenommen
wird.
Das State Diagramm ist so auch als Assemblercode in CKBD
implementiert worden.
1. DEC-MODE COMPOSE CHARACTERS:
-------------------------------
* Die Funktion arbeitet exakt wie das Vorbild auf den VT2xx Terminals
der Firma Digital Equipment Corporation (DEC).
* Wenn die 'Composed Chars' nicht 'order sensitive' sind, ist es
egal, ob e^ oder ^e eingegeben wird. Raus kommt immer ê.
* Wenn 'order sensitive'eingeschaltet ist muß die Reihenfolge
beachtet werden: nur noch e^ ergibt ê
* Während einer 'Compose'-Sequenz sind die Zeichen nicht sichtbar.
Somit müssen vor dem Senden des definitiven Zeichens keine 'falschen'
Zeichen mittels Backspace korrigiert werden.
* Laufende Sequenzen können zu jedem Zeitpunkt mit ESC oder BackSpace
abgebrochen werden.
2. MULTICHAR-MODE COMPOSED CHARACTERS:
--------------------------------------
* Die Funktion arbeitet ähnlich EXTKEY: Nach Einleiten einer Compose
Sequenz werden die zwischendurch eingegebenen Zeichen geechoed. Die
laufende Applikation muß also mit schnellen Backspace-Folgen klarkommen.
* Wenn die 'Composed Chars' nicht 'order sensitive' sind, ist es
egal, ob e^ oder ^e eingegeben wird. Raus kommt immer ê.
* Wenn 'order sensitive'eingeschaltet ist muß die Reihenfolge
beachtet werden: nur noch e^ ergibt ê
* Laufende Sequenzen können zu jedem Zeitpunkt mit ESC oder BackSpace
abgebrochen werden.
3. Deadkeys:
------------
* Der Code einer als Deadkey definierten Taste wird abgefangen und
mit dem nächsten eingegebenen Zeichen kombiniert. Ist die Kombination
gültig, wird das zusammengesetzte Zeichen ausgegeben. Andernfalls
werden die beiden Zeichen unverändert ausgegeben.
* Laufende Sequenzen können zu jedem Zeitpunkt mit ESC oder BackSpace
abgebrochen werden.
* Tasten mit ASCII code Null werden durchgereich (Cursortasten,
F-Tasten)...
4. Extkey:
----------
* Wenn ein Zeichen mit gedrückter Control-Taste eingegeben wird,
versucht CKBD, dieses Zeichen mit dem vorigen zu kombinieren. Wenn
das klappt wird das vorige Zeichen auf dem Bildschirm mit 'BackSpace'
gelöscht und das zusammengesetzte Zeichen ausgegeben.
5. ALT_nnn:
-----------
* Bei gedrückter Alternate-Taste werden auf dem Ziffernblock
eingegebene Zifferntasten zu ASCII-Codes zusammengezogen.
6. Das komplette Statusdiagramm von CKBD:
-----------------------------------------
STATE_DIAGRAM CKBD_statemachine:
STATE Normal_operation:
IF (Alt_pressed) GOTO Prepare_CC
ELSE IF (Alt_released) GOTO Normal_operation
ELSE IF (Control_pressed) GOTO Extkey
ELSE IF (Is_a_deadkey)
remove_char_from_buffer
Store_this_char
GOTO Deadkeys
ENDIF
STATE Prepare_CC:
IF (Alt_released) THEN
IF (time_out OR other_key_pressed) THEN
GOTO Normal_operation
ELSE
IF (DEC_mode) GOTO Compose_1
ELSE GOTO Compose_3
ENDIF
ELSE
IF (Numeric_keypad_digit) THEN
compchar=0
GOTO Alt_nnn
ENDIF
ENDIF
STATE Compose_1:
remove_char_from_buffer
Store_this_char
IF (char==ESC OR char==BS) THEN
GOTO Normal_operation
ELSE
GOTO Compose_2
ENDIF
STATE Compose_2:
IF (char==ESC OR char==BS) THEN
GOTO Normal_operation
ELSE IF (sequence_is_valid) THEN
replace_in_buffer Composed_char
ELSE
remove_char_from_buffer
Bell_sound
GOTO Normal_operation
ENDIF
STATE Compose_3:
IF (char==ESC OR char==BS) THEN
GOTO Normal_operation
ELSE IF (sequence_is_valid) THEN
Store_this_char
GOTO Compose_multi
ELSE
GOTO Normal_operation
ENDIF
STATE Compose_multi:
IF (char==ESC OR char==BS) THEN
GOTO Normal_operation
ELSE IF (sequence_is_valid) THEN
replace_in_buffer BackSpace
insert_in_buffer Composed_char
Store_this_char
GOTO Compose_multi
ELSE
GOTO Normal_operation
ENDIF
STATE Extkey:
IF (Control_released) GOTO Normal_operation
IF (sequence_is_valid) THEN
replace_in_buffer BackSpace
insert_in_buffer Composed_char
ENDIF
STATE Deadkeys:
IF (char==SPACE OR char==previous_char) THEN
replace_in_buffer char
GOTO Normal_operation
ELSE IF (sequence_is_valid)
replace_in_buffer Composed_char
ELSE
replace_in_buffer previous_char
insert_in_buffer char
ENDIF
STATE Alt_nnn:
IF (Alt_released) THEN
insert_in_buffer compchar
GOTO Normal_operation
ENDIF
compchar = 10*compchar + VALUE_OF(char)
IF (compchar>255 OR more_than_3_chars_entered THEN
insert_in_buffer compchar
ENDIF
END_DIAGRAM CKBD_statemachine.
-----------------------------------------------------------------------
(c) 1992, 1994 by P. Fellerich
-----------------------------------------------------------------------