home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / utility / misc / ckbd_13 / doc / tech_doc / stmacger.txt < prev    next >
Text File  |  1994-04-07  |  6KB  |  204 lines

  1.  
  2.     CKBD Tastatur Interrupt
  3.     -----------------------
  4.  
  5. StateMachine: Bei jedem Tastaturinterrupt wird die State Machine 
  6. aufgerufen. Wenn nichts angegeben wird, wird das aktuelle Zeichen 
  7. unverändert gelassen. Es gibt 3 Grundoperationen, die auf den 
  8. Tastaturpuffer wirken:
  9.  
  10.     remove_from_buffer
  11.             Das zuletzt eingegebene Zeichen wird aus dem 
  12.             Tastaturpuffer gelöscht.
  13.  
  14.     replace_in_buffer char
  15.             Das zuletzt eingegebene Zeichen wird mit 'char' 
  16.             überschrieben.
  17.  
  18.     insert_in_buffer char
  19.             'char' wird hinter dem letzten Zeichen in den 
  20.             Tastaturpuffer eingefügt.
  21.  
  22. Der Befehl 'GOTO' bestimmt, welcher Zustand als nächster angenommen 
  23. wird.
  24. Das State Diagramm ist so auch als Assemblercode in CKBD 
  25. implementiert worden.
  26.  
  27.  
  28.  
  29. 1. DEC-MODE COMPOSE CHARACTERS:
  30. -------------------------------
  31. * Die Funktion arbeitet exakt wie das Vorbild auf den VT2xx Terminals 
  32. der Firma Digital Equipment Corporation (DEC).
  33.  
  34. * Wenn die 'Composed Chars' nicht 'order sensitive' sind, ist es 
  35. egal, ob  e^ oder ^e eingegeben wird. Raus kommt immer ê.
  36.  
  37. * Wenn 'order sensitive'eingeschaltet ist muß die Reihenfolge 
  38. beachtet werden: nur noch e^ ergibt ê
  39.  
  40. * Während einer 'Compose'-Sequenz sind die Zeichen nicht sichtbar. 
  41. Somit müssen vor dem Senden des definitiven Zeichens keine 'falschen' 
  42. Zeichen mittels Backspace korrigiert werden.
  43.  
  44. * Laufende Sequenzen können zu jedem Zeitpunkt mit ESC oder BackSpace
  45. abgebrochen werden.
  46.  
  47.  
  48. 2. MULTICHAR-MODE COMPOSED CHARACTERS:
  49. --------------------------------------
  50.  
  51. * Die Funktion arbeitet ähnlich EXTKEY: Nach Einleiten einer Compose 
  52. Sequenz werden die zwischendurch eingegebenen Zeichen geechoed. Die 
  53. laufende Applikation muß also mit schnellen Backspace-Folgen klarkommen.
  54.  
  55. * Wenn die 'Composed Chars' nicht 'order sensitive' sind, ist es 
  56. egal, ob  e^ oder ^e eingegeben wird. Raus kommt immer ê.
  57.  
  58. * Wenn 'order sensitive'eingeschaltet ist muß die Reihenfolge 
  59. beachtet werden: nur noch e^ ergibt ê
  60.  
  61. * Laufende Sequenzen können zu jedem Zeitpunkt mit ESC oder BackSpace 
  62. abgebrochen werden.
  63.  
  64.  
  65. 3. Deadkeys:
  66. ------------
  67.  
  68. * Der Code einer als Deadkey definierten Taste wird abgefangen und 
  69. mit dem nächsten eingegebenen Zeichen kombiniert. Ist die Kombination 
  70. gültig, wird das zusammengesetzte Zeichen ausgegeben. Andernfalls 
  71. werden die beiden Zeichen unverändert ausgegeben.
  72.  
  73. * Laufende Sequenzen können zu jedem Zeitpunkt mit ESC oder BackSpace 
  74. abgebrochen werden.
  75.  
  76. * Tasten mit ASCII code Null werden durchgereich (Cursortasten, 
  77. F-Tasten)...
  78.  
  79.  
  80. 4. Extkey:
  81. ----------
  82.  
  83. * Wenn ein Zeichen mit gedrückter Control-Taste eingegeben wird, 
  84. versucht CKBD, dieses Zeichen mit dem vorigen zu kombinieren. Wenn 
  85. das klappt wird das vorige Zeichen auf dem Bildschirm mit 'BackSpace' 
  86. gelöscht und das zusammengesetzte Zeichen ausgegeben.
  87.  
  88.  
  89. 5. ALT_nnn:
  90. -----------
  91.  
  92. * Bei gedrückter Alternate-Taste werden auf dem Ziffernblock 
  93. eingegebene Zifferntasten zu ASCII-Codes zusammengezogen.
  94.  
  95.  
  96. 6. Das komplette Statusdiagramm von CKBD:
  97. -----------------------------------------
  98.  
  99. STATE_DIAGRAM CKBD_statemachine:
  100.  
  101.     STATE Normal_operation:
  102.         IF (Alt_pressed)            GOTO Prepare_CC
  103.         ELSE IF (Alt_released)      GOTO Normal_operation
  104.         ELSE IF (Control_pressed)    GOTO Extkey
  105.         ELSE IF (Is_a_deadkey)
  106.             remove_char_from_buffer
  107.             Store_this_char
  108.             GOTO Deadkeys
  109.         ENDIF
  110.  
  111.     STATE Prepare_CC:
  112.         IF (Alt_released) THEN
  113.             IF (time_out OR other_key_pressed) THEN
  114.                 GOTO Normal_operation
  115.             ELSE
  116.                 IF (DEC_mode)         GOTO Compose_1
  117.                 ELSE                 GOTO Compose_3
  118.             ENDIF
  119.         ELSE
  120.             IF (Numeric_keypad_digit) THEN
  121.                 compchar=0
  122.                 GOTO Alt_nnn
  123.             ENDIF
  124.         ENDIF
  125.  
  126.     STATE Compose_1:
  127.         remove_char_from_buffer
  128.         Store_this_char
  129.         IF (char==ESC OR char==BS) THEN
  130.             GOTO Normal_operation
  131.         ELSE
  132.             GOTO Compose_2
  133.         ENDIF
  134.  
  135.     STATE Compose_2:
  136.         IF (char==ESC OR char==BS) THEN
  137.             GOTO Normal_operation
  138.         ELSE IF (sequence_is_valid) THEN
  139.             replace_in_buffer Composed_char
  140.         ELSE
  141.             remove_char_from_buffer
  142.             Bell_sound
  143.             GOTO Normal_operation
  144.         ENDIF
  145.  
  146.     STATE Compose_3:
  147.         IF (char==ESC OR char==BS) THEN
  148.             GOTO Normal_operation
  149.         ELSE IF (sequence_is_valid) THEN
  150.             Store_this_char
  151.             GOTO Compose_multi
  152.         ELSE
  153.             GOTO Normal_operation
  154.         ENDIF
  155.  
  156.     STATE Compose_multi:
  157.         IF (char==ESC OR char==BS) THEN
  158.             GOTO Normal_operation
  159.         ELSE IF (sequence_is_valid) THEN
  160.             replace_in_buffer BackSpace
  161.             insert_in_buffer Composed_char
  162.             Store_this_char
  163.             GOTO Compose_multi
  164.         ELSE
  165.             GOTO Normal_operation
  166.         ENDIF
  167.        
  168.     STATE Extkey:
  169.         IF (Control_released) GOTO Normal_operation
  170.         IF (sequence_is_valid) THEN
  171.             replace_in_buffer BackSpace
  172.             insert_in_buffer Composed_char
  173.         ENDIF
  174.  
  175.     STATE Deadkeys:
  176.         IF (char==SPACE OR char==previous_char) THEN
  177.             replace_in_buffer char
  178.             GOTO Normal_operation
  179.         ELSE IF (sequence_is_valid)
  180.             replace_in_buffer Composed_char
  181.         ELSE
  182.             replace_in_buffer previous_char
  183.             insert_in_buffer char
  184.         ENDIF
  185.     
  186.     STATE Alt_nnn:
  187.         IF (Alt_released) THEN
  188.             insert_in_buffer compchar
  189.             GOTO Normal_operation
  190.         ENDIF
  191.         compchar = 10*compchar + VALUE_OF(char)
  192.         IF (compchar>255 OR more_than_3_chars_entered THEN
  193.             insert_in_buffer compchar
  194.         ENDIF
  195.  
  196. END_DIAGRAM CKBD_statemachine.
  197.  
  198.  
  199.  
  200. -----------------------------------------------------------------------
  201. (c) 1992, 1994 by P. Fellerich
  202. -----------------------------------------------------------------------
  203.  
  204.