Abstract:
The present invention is directed to a method and apparatus for determining an alternative character string, in response to an invalid character string being received by a consumer application, wherein the invalid character string is derived from the selection of a series of keyboard keys in combination with a modifier key and wherein each key is associated with at least one glyph. An apparatus in accordance with an embodiment includes: a converter component for converting each glyph of the invalid character string into a first format; a converter component for parsing each of the converted first formats into a second format; an alternatives engine for determining from each of the second formats a third format which can be derived from a combination of a selection of the key and an alternative modifier key; and a converter component for converting each of the determined third formats into their associated glyphs for compiling into a list of alternative character strings.

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
       [0001]    This application claims the benefit of co-pending European Patent Application No. EP07111433.4, filed 29 Jun. 2007, which is incorporated herein by reference. 
       FIELD OF THE INVENTION 
       [0002]    The invention relates to the field of data input. In particular the invention relates to an improved method and apparatus for determining an alternative character string selection in response to an invalid character string being detected by a consumer application. 
       BACKGROUND OF THE INVENTION 
       [0003]    A standard keyboard comprises many keys and each key is associated with a character of an alphabet, numbering system, punctuation mark, a currency symbol, and so on. The exact shape by which a character is represented is called a glyph. For example, a roman character ‘A’ and a roman italic character ‘A’ are two different types of glyphs representing the same character. 
         [0004]    The number of glyphs that users need to use is increasing, for example, glyphs such as the Dollar, Euro or Yen currency symbols and special mathematical symbols, etc. However, even though the number of glyphs is increasing, the number of physical keys on a keyboard is decreasing because of a move to smaller devices with small keyboards. Consequently, it is normal for multiple glyphs to be obtained from the same physical key through the use of modifier keys. 
         [0005]    A modifier key allows a user to access a particular glyph associated with a key by ‘holding down’ the modifier key in combination with the key. For example, the AltGr lock key or the shift key, etc. Some modifier keys toggle their state each time they are pressed, enabling their action to be ‘latched’. Examples of this include the caps Lock key and the num Lock key. While the modifier key is latched into position, pressing other keys will often result in alternative glyphs being generated. 
         [0006]    Consequently, a problem arises when a user forgets to unlatch a modifier key, after use and/or erroneous activation of the keys due to ‘mis-keying’ and thus continues to type characters strings that are not what was intended. Further these mistakes are frequently not easily corrected by normal techniques. 
         [0007]    Consider the following text: 
         [0008]    “Now is the time for all good men to do their duty” 
         [0000]    When entered on, for example, an IBM laptop computer&#39;s keyboard with the num lock key engaged, the above sentence would read as follows: 
         [0009]    “N6w 5s the t50e for a33 g66d 0en t6 d6 the5r d4ty” 
         [0000]    A spell checker will be unable to correct this, though a good spell checker will find some words via statistical methods. For example, one well known word processing package will correct the above character stream to 
         [0010]    “New 5s the t50e far a33g66d men t6 d6 their duty” 
         [0011]    One partial solution to this problem is provided by spell checking applications which try and offer alternative text suggestions for an unrecognised character string based on various methods, including context. However, spell checking applications are unable to offer alternative character strings for the type described above. 
         [0012]    Another partial solution to this problem is provided by a case-corrector application, which looks for inversion of expected case in a word at the start of a sentence. For example, oNCE, rather than Once, and flips the case of the words and turns off the caps lock modifier key. 
         [0013]    Another partial solution is predictive text entry, such as systems that use dictionary methods to simplify text entry by using algorithms to predict the word that is being entered. However, this is cumbersome and impractical for general text entry, and is more suited to highly restricted keypads such as those found on devices like cellular telephones or PDAs. 
         [0014]    Thus there is a need in the art to provide a solution to the above mentioned problems. 
       SUMMARY OF THE INVENTION 
       [0015]    Viewed from a first aspect, the present invention provides an apparatus for determining an alternative character string, in response to an invalid character string being received by a consumer application, wherein the invalid character string is derived from a selection of a series of keyboard keys in combination with a modifier key and wherein each key is associated with at least one glyph, the apparatus comprising: a converter component for converting each glyph of the invalid character string into a first format; a converter component for parsing each of the converted first formats into a second format; an alternatives engine for determining from each of the second formats a third format which can be derived from a combination of the selection of the key and an alternative modifier key; and a converter component for converting each of the determined third formats into their associated glyphs for compiling into a list of alternative character strings. 
         [0016]    The list of alternative character strings is communicated to a requesting consumer application for selecting one of the alternative character strings for replacing the detected invalid character string. The alternatives engine communicates an instruction to a keyboard controller to unlatch the modifier key in response to an alternative character string being selected by a consumer application. In an embodiment, the first format is a scan code and the second format is a key code. 
         [0017]    The present invention further provides a keyboard for storing a list of mappings of scan codes to a key selection in combination with a modifier key for communicating to the apparatus as described above. 
         [0018]    Viewed from another aspect, the present invention provides a method of determining an alternative character string, in response to an invalid character string being received by a consumer application, wherein the invalid character string is derived from the selection of a series of keyboard keys in combination with a modifier key and wherein each key is associated with at least one glyph; the method comprising converting each glyph of the invalid character string into a first format; parsing each of the converted first formats into a second format; determining from each of the second formats a third format which can be derived from a combination of a selection of the key and an alternative modifier key; and converting each of the determined third formats into their associated glyphs for compiling into a list of alternative character strings. 
         [0019]    The list of alternative character strings is communicated to a requesting consumer application for selecting one of the alternative character strings for replacing with the detected invalid character string. The alternatives engine communicates an instruction to a keyboard controller to unlatch the modifier key in response to an alternative character string being selected by a consumer application. In an embodiment, the first format is a scan code and the second format is a key code. 
         [0020]    Viewed from another aspect, the present invention provides a computer program product for determining an alternative character string, in response to an invalid character string being received by a consumer application, wherein the invalid character string is derived from the selection of a series of keyboard keys in combination with a modifier key and wherein each key is associated with at least one glyph, when executed on a computer, comprising software code portions for: converting each glyph of the invalid character string into a first format; parsing each of the converted first formats into a second format; determining from each of the second formats a third format which can be derived from a combination of a selection of the key and an alternative modifier key; and converting each of the determined third formats into their associated glyphs for compiling into a list of alternative character strings. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0021]    Embodiments of the invention are described below in detail, by way of example only, with reference to the accompanying drawings. 
           [0022]      FIG. 1  is a block diagram of a data processing system in which the present invention may be embodied. 
           [0023]      FIG. 2  is a block diagram of an example of an illustrative keyboard in which the present invention may be embodied. 
           [0024]      FIG. 3  is a block diagram detailing a modified keyboard controller in accordance with an embodiment of the present invention. 
           [0025]      FIG. 4  is a block diagram detailing the alternative character string component in accordance with an embodiment of the present invention. 
           [0026]      FIG. 5  is a flow chart showing the process steps of requesting a mapping list from the modified keyboard controller component, in accordance with an embodiment of the present invention. 
           [0027]      FIG. 6  is a flow chart showing illustrative process steps of the alternative character string component receiving scan codes from the keyboard controller. 
           [0028]      FIG. 7  is a flow chart showing illustrative process steps of a consumer application detecting an invalid character string. 
           [0029]      FIG. 8  is a flow chart showing illustrative process steps of the alternative character string component processing an invalid character string in order to derive a list of alternative character strings. 
       
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
       [0030]    A computer system  100  is depicted in  FIG. 1 . The computer system  100  has a central processing unit  101  with primary storage in the form of memory  102  (RAM and ROM). The memory  102  stores program information and data acted on or created by application programs. The program information includes the operating system code for the computer system  100  and application code for applications running on the computer system  100 . Secondary storage includes optical disk storage  103  and magnetic disk storage  104 . Data and program information can also be stored and accessed from the secondary storage. 
         [0031]    The computer system  100  includes a network connection  105  for interfacing the computer system  100  to a network such as a local area network (LAN) or the Internet. The computer system  100  may also have other external source communication means such as a fax modem or telephone connection. 
         [0032]    The central processing unit  101  comprises inputs in the form of, as examples, a keyboard  106 , a mouse  107 , voice input  108 , and a scanner  109  for inputting text, images, graphics or the like. Outputs from the central processing unit  100  may include a display means  110 , a printer  111 , sound output  112 , video output  113 , etc. 
         [0033]    In a distributed system, a computer system  100 , as shown in  FIG. 1 , may be connected via the network connection  105  to a server (not shown) on which applications may be run remotely from the central processing unit  101 . 
         [0034]    Applications may run on the computer system  100  from storage  103 ,  104  or via a network connection  105 , which may include database applications etc. A user&#39;s computer system is not limited to any type of data processing system  100  or apparatus, and may be a conventional desktop or lap-top personal computer, a personal digital assistant or a mobile phone or any other specialized data processing device, which is capable of running a consumer application such as a text editor. 
         [0035]      FIG. 2  shows an example of a keyboard  200 . The keyboard  200  interfaces with the computer system  100  via a standard hard wired keyboard connection or via a wireless connection. The keyboard  200  comprises a plurality of keys  205  and modifier keys  210 . Each key  205  is associated with a glyph representing a character of the alphabet, a number associated with a numbering system, a punctuation symbol, a currency symbol or mathematical symbols, etc. 
         [0036]    A glyph is accessed by pressing a key  205  associated with a glyph from the keyboard  200 . A keyboard controller  215  detects that a key has been pressed and generates a scan code representing the key selection. When the key  205  is released the keyboard controller  215  detects that the key  205  has been de-selected and generates a further scan code representing the de-selection of the key  205 . 
         [0037]    When a modifier key  210  is pressed in combination with a key  205 , then the keyboard controller  215  detects that the key  205  is pressed in combination with the modifier key  210  and produces a scan code representing this combination. Once the modifier key  210  and key combination  205  have been de-selected a further code is generated by the keyboard controller  215 . For each scan code generated the keyboard controller  215  communicates each scan code to a keyboard driver (not shown) located on the computer system  100 . 
         [0038]    In order to provide the benefits of the present invention, the present invention provides a modified keyboard controller component operable on the keyboard  200  and an alternatives character string component for receiving scan codes from the keyboard driver (not shown) on the computer system  100 . Each of these components will be explained in turn. 
         [0039]    With reference to  FIG. 3 , the modified keyboard controller component  300  is installed in a keyboard  200 . A modified keyboard controller component  300  extends the functionality of existing keyboard controllers  215  by providing a list of mappings of key selections, key de-selections, and modifier key combinations to scan codes. For example, pressing a key associated with the glyph ‘a’ in combination with a modifier key associated with the ‘caps lock’ key (in order to produce the glyph ‘A’), the list of mappings will comprise a scan code representing the selection of the key associated with the glyph ‘a’ in combination with the latched ‘caps lock’ key. 
         [0040]    The list of mappings provides a complete set of mappings for all combinations of key selections and key de-selection with all possible modifier keys. 
         [0041]    In Table 1, below, a simplified example is shown of scan codes generated by certain combinations of key presses. Table 1 illustrates scan codes generated in order to display the character string ‘hello’. For each character of the character string ‘hello’, and using an example of two modifier keys  210  latched into position, i.e., ‘num lock’ and ‘caps lock’, there are four possible scan codes which can be generated from the key codes generated by the key presses associated with each of the glyphs in the character string ‘hello’. 
         [0042]    For example, a scan code will be generated from the detection of the pressing of the key associated with the glyph ‘h’ without any modifier key, a scan code will be generated from the detection of the pressing of the key associated with the glyph ‘h’ with the ‘num lock’ modifier key latched into position, a scan code will be generated from the detection of the pressing of the key associated with the glyph ‘h’ with the ‘caps lock’ key latched into position, and a scan code will be generated from the detection of the pressing of the key associated with the glyph ‘h’ with the ‘num lock’ and ‘caps lock’ modifier key latched into position. Thus, for every key selected, a key code is produced which is then translated into a scan code. 
         [0043]    Thus for the character string ‘hello’, and with reference to Table 1, a lookup in the table identifies that the scan codes for each of the key codes (1.2.3.3.4) produced when a user presses a key associated with each of the glyphs in the character string ‘hello’ are 10.20.30.30.40. 
         [0044]    In reality there will also be scan codes generated each time a key is de-selected and the modifier key unlatched but in order to keep the following examples simple, only the use of scan codes for key selections will be discussed. 
         [0045]    Now if the ‘num lock’ modifier key is latched into position and the character string ‘hello’ typed, the following character string would be generated ‘h3II5’. Therefore, using the table below, the scan codes produced from the key presses associated with the character string ‘h3115’ would be 10.50.30.30.60. 
         [0000]    
       
         
               
             
               
               
               
               
             
               
               
               
               
             
           
               
                 TABLE 1 
               
             
             
               
                   
               
               
                 example scan code mappings for key codes to scan 
               
               
                 codes for the character string ‘hello’ 
               
             
          
           
               
                   
                 Modi- 
                   
                 Eventual 
               
               
                   
                 fier 
                 Scan 
                 resulting 
               
               
                 Key codes 
                 key 
                 code 
                 glyph 
               
               
                   
               
             
          
           
               
                 1 (without modifier key) 
                 — 
                 10 
                 h 
               
               
                 1 (with modifier key -num lock) 
                 1 
                 10 
                 h 
               
               
                 1 (with modifier key - caps lock) 
                 2 
                 70 
                 H 
               
               
                 1 (with modifier key - num lock + caps lock) 
                 3 
                 70 
                 H 
               
               
                 2 (without modifier key) 
                 — 
                 20 
                 e 
               
               
                 2 (with modifier key -num lock) 
                 1 
                 50 
                 3 
               
               
                 2 (with modifier key - caps lock) 
                 2 
                 90 
                 E 
               
               
                 2 (with modifier key - num lock + caps lock) 
                 3 
                 50 
                 3 
               
               
                 3 (without modifier key) 
                 — 
                 30 
                 l 
               
               
                 3 (with modifier key -num lock) 
                 1 
                 30 
                 l 
               
               
                 3 (with modifier key - caps lock) 
                 2 
                 80 
                 L 
               
               
                 3 (with modifier key - num lock + caps lock) 
                 3 
                 80 
                 L 
               
               
                 4 (without modifier key) 
                 — 
                 40 
                 o 
               
               
                 4 (with modifier key -num lock) 
                 1 
                 60 
                 5 
               
               
                 4 (with modifier key - caps lock) 
                 2 
                 100 
                 O 
               
               
                 4 (with modifier key - num lock + caps lock) 
                 3 
                 60 
                 5 
               
               
                   
               
             
          
         
       
     
         [0046]    The list of mappings  305  is stored by the keyboard controller component  215 . There are often more than one set of keyboard mappings associated with a particular type of keyboard. 
         [0047]    The modified keyboard controller  300  component also comprises a responder component  310  for listening and responding to requests from an alternative character string component installed in the computer system  100 . These requests will typically comprise requesting a copy of the list of mappings  305  (as shown in the first three columns of Table 1) and transmitting the copy to the alternative character string component. Typically, this request will occur, for example, when the keyboard driver installed on the computer system  100  detects that a new keyboard  200  has been attached to the computer system  100 . 
         [0048]    In an embodiment of the present invention and with reference to  FIG. 4 , the modified keyboard controller component  300  interfaces with an alternative character string component  400  located on the computer system  100 . The alternative character string component  400  extends the functionality of existing keyboard drivers by (a) handling scan codes received from the modified keyboard driver component  300 , via the keyboard driver, and (b) for interfacing with a consumer application, such as, a spell checking application in order to suggest an alternative character string in response to a consumer application not being able to offer a suitable alternative character string. The components of the alternative character string component  400  are explained below. 
         [0049]    A requester/receiver component  405  requests and receives the list of mappings  305  (e.g., columns 1 to 3 of Table 1) from the modified keyboard controller  300  component. Once received, the requestor/receiver component  405  stores the list of mappings  305  in the data store. 
         [0050]    A converter component  410  comprises a number of sub components for performing conversion operations on scan codes, glyphs and/or key codes at particular phases of the process. Illustrative conversion operations are as follows: 
         [0000]    a) Converting scan codes received from the modified keyboard controller  300  to glyphs for passing onto a consumer application by the scan code to glyphs converter component  415 ;
 
b) Converting glyphs to scan codes when an alternative character string is required by a consumer application, by the glyphs to scan codes converter component  420 ; and
 
c) Converting scan codes to key codes when an alternative character string is required by a consumer application by the scan codes to key codes converter component  430 .
 
         [0051]    In a first instance, keys selections are made via a keyboard  200  and the modified keyboard controller  300  communicates the generated scan codes to the alternative character string component  400  for processing. 
         [0052]    The modified keyboard component  300  processes the incoming scan codes in the same way that a traditional keyboard driver does. As each scan code is received, the scan code to glyph converter component  415  interfaces with a national language mappings component  425  in order to perform a lookup in the table (see table 2 for example) to convert each of the received scan codes into its corresponding glyph. Obviously, there are different national language mappings for different national languages and for different types of keyboards, for example, Dvorak etc. 
         [0053]    An example of this is shown in Table 2 below. This information is also shown in the fourth column of Table 1. 
         [0000]    
       
         
               
             
               
               
               
             
               
               
               
             
           
               
                 TABLE 2 
               
             
             
               
                   
               
               
                 National language mappings of scan 
               
               
                 codes to glyphs (English language) 
               
             
          
           
               
                   
                 Scan codes 
                 Glyphs 
               
               
                   
                   
               
             
          
           
               
                   
                 10 
                 h 
               
               
                   
                 20 
                 e 
               
               
                   
                 30 
                 l 
               
               
                   
                 40 
                 o 
               
               
                   
                 50 
                 3 
               
               
                   
                 60 
                 5 
               
               
                   
                 70 
                 H 
               
               
                   
                 80 
                 L 
               
               
                   
                 90 
                 E 
               
               
                   
                 100 
                 O 
               
               
                   
                   
               
             
          
         
       
     
         [0054]    Once each scan code is converted, the scan code to glyph converter component  415  communicates the resulting character string to the consuming application. For example, if the scan codes received are 10.20.30.30.40, then this is converted into the character string ‘hello’. The character string ‘hello’ is then communicated to the consumer application in the normal manner. 
         [0055]    In another instance, the alternative character string component  400  also comprises an alternatives engine  435  for receiving a request for an alternative character string from a consumer application. For example, instead of the character string ‘hello’ being entered into the computer system  100 , the character string ‘h3II5’ was entered instead because a modifier key was left in the latched position. At this point the consumer application detects that ‘h3II5’ is an invalid character string using existing methods such as spellcheckers, and requests a list of alternative character strings. 
         [0056]    The received request comprises a copy of the invalid character string, i.e. ‘h3II5’, which the consumer application is unable to process. The alternatives engine  435  passes the received character string to the glyph to scan code converter component  420  for processing. 
         [0057]    The glyph to scan code converter component  420  converts each glyph within the character string into its corresponding scan code. This is carried out by performing a lookup in a list of mappings (see Table 2 for an example). For example, if the received character string is ‘h3II5’ then the glyph to scan code converter component  420  will perform a lookup in the mappings table (see Table 2 for an example) and convert the glyph ‘h’ to its associated scan code of 10, the glyph ‘3’ to its associated scan code of 50, the glyph ‘I’ to its scan code of 30 and the glyph ‘5’ to its scan code of 60. Once this step is completed, the alternatives engine  435  instructs the scan code to key code converter component  430  to convert the converted scan code string into its corresponding key code. This is achieved by performing a lookup in the list of mappings  305  (see Table 1 for an example), such that the above scan code of 10.50.30.30.60 is converted to 1.2.3.3.4. 
         [0058]    The alternatives engine takes this generated key code string and for each of the key codes in the string determines a list of possible scan codes indexed by possible modifier keys. For example, taking the string of key codes 1.2.3.3.4 and using Table 1 (for example), the alternatives engine  435  generates the following table 
         [0000]    
       
         
               
             
               
               
               
             
               
               
               
               
               
               
               
             
           
               
                 TABLE 3 
               
             
             
               
                   
               
               
                 Example of scan codes indexed by modifier 
               
             
          
           
               
                   
                 Modifier 
               
               
                   
                   
               
             
          
           
               
                   
                 — 
                 10 
                 20 
                 30 
                 30 
                 40 
               
               
                   
                 1 
                 10 
                 50 
                 30 
                 30 
                 60 
               
               
                   
                 2 
                 70 
                 90 
                 80 
                 80 
                 100 
               
               
                   
                 3 
                 70 
                 50 
                 80 
                 80 
                 60 
               
               
                   
                   
               
             
          
         
       
     
         [0059]    The alternatives engine  435  then proceeds to perform a final lookup in the mappings of scan code to glyphs (see Table 2 for an example) to convert the converted scan codes into glyphs. 
         [0060]    Thus using the data from the scan codes, indexed by modifier, (see Table 3 for an example) and the scan codes to glyph table (see Table 2 for an example), the following list of alternatives can be generated for transmitting to the requesting consumer application. 
       List of Alternatives 
       [0061]    Please select from the list
 
hello
 
h3II5
 
       HELLO 
     H3LL5 
       [0062]    Upon receipt of the list of alternatives by the consumer application, an alternative can be selected. This may be performed either manually by a user, or by selecting the best alternative using some automated system. For example, this could be based on the results of spell checking each of the alternatives and the selecting the best option. 
         [0063]    In another embodiment, the alternatives engine  435  may instruct the consumer application to turn off a particular modifier key  205  in order to prevent any further typing with the modifier key latched into position. In another embodiment, the consumer application may indicate to the alternatives engine  435  which alternative it selected as correct and instruct the alternatives engine to enable that modifier state for further typing. 
         [0064]      FIG. 5 to 8  detail illustrative process steps of the present invention and will now be explained with an example. 
         [0065]    On detection of a new keyboard  200  being attached to the computer system  100 , the receiving component  405  transmits (step  500 ) a request to the responder component  310  to transmit a copy of the keyboard&#39;s mapping list  305 . On receipt (step  505 ) of the mapping list  305 , the receiving component  405  stores the list  305  in a data store for further processing. 
         [0066]    As keys are selected and deselected from the keyboard  200  the receiving component  405  receives (step  600 ) the scan codes that are associated with the selected and de-selected keys. The receiving component  405  communicates the received scan codes to the scan code to glyph converter component  415  for converting into glyphs (step  605 ). The converted glyphs are then communicated to the consumer application for processing in the usual manner (step  610 ). 
         [0067]    On detection of an invalid character string (step  700 ), by the consumer application, the consumer application requests (step  705 ) from the alternative character string component  400  a list of alternative character strings for selection by the consumer application. 
         [0068]    The alternatives character string component  400  receives the invalid character string from the consumer application, for example, the character string ‘h3II5’ and proceeds to determine a number of other character strings that could be derived by pressing the same keys that produced the character string, and using all the combinations of modifier keys available on that keyboard. 
         [0069]    Firstly (step  800 ), the alternatives character string component  400  receives the request and requests that the glyph to scan code converter component  420  converts (step  805 ) each of the glyphs into their corresponding scan codes by performing a lookup in the scan code to glyphs mapping table (see Table 2 for an example). Thus using this table the corresponding scan codes for ‘h3II5’ can be derived as 70.50.80.80.60. 
         [0070]    Next, (step  810 ), the scan code to key code converter component  430  converts each of the scan codes into their corresponding key codes by performing a lookup in Table 1. Thus, the scan code string 70.50.80.80.60 can be derived as 1.2.3.3.4. 
         [0071]    Next (step  815 ), the alternatives engine  435  determines a list of alternative character strings which can be derived from the invalid character string by determining which other glyph combinations can be derived from the key selections, in combination with all the combination of modifier keys, used to type the invalid character string. 
         [0072]    The alternatives engine  435  performs a lookup in Table 1 and begins by locating each of the key codes from the generated key code string i.e. 1.2.3.3.4. Then for each key code, the alternatives engine  435  determines the scan code that is produced by selecting the key code in combination with one or modifier keys. 
         [0073]    Thus with reference to Table 1, for key code 1, the following scan codes can be derived: 
         [0000]    
       
         
               
               
               
             
           
               
                   
               
               
                 Key code 
                 Modifier key 
                 Scan code 
               
               
                   
               
             
             
               
                 1 (without modifier key) 
                 — 
                 10 
               
               
                 1 (with num lock key) 
                 1 
                 10 
               
               
                 1 (with caps lock key) 
                 2 
                 70 
               
               
                 1 (with num lock and caps lock key) 
                 3 
                 70 
               
               
                   
               
             
          
         
       
     
         [0074]    This process step is performed for each key code in the key code string, until such a time as no other combinations can be derived. 
         [0075]    Then, the alternatives engine  435 , sends a list of generated scan codes to the convert scan codes to glyphs component  430  for converting from scan code to glyphs (by using Table 2) (step  820 ). 
         [0076]    For example, using the invalid character string ‘h3II5’, the following alternative scan codes can be derived. 
         [0077]    10.20.30.30.40 
         [0078]    10.50.30.30.60 
         [0079]    70.90.80.80.100 
         [0080]    70.50.80.80.60 
         [0081]    Next, at step  825 , the alternatives engine  435 , using the, the list of alternative scan codes, requests the scan code to glyph converter component  415  to translate the scan codes into glyphs thus deriving the following alternative character strings: 
       List of Alternatives 
       [0082]    hello
 
h3II5
 
       HELLO 
     H3LL5 
       [0083]    This list is then transmitted to the consumer application for processing. Once the consumer application selects the appropriate character string, a signal can also be sent back to the alternatives engine informing the alternatives engine  435  of the selection. Therefore, because the alternative engine  435  has knowledge of which keys were selected in order to arrive the invalid character string, the alternatives engine  435  can transmit a signal to the keyboard driver asking the keyboard driver to interface with the keyboard controller  215  in order to ‘latch’ or unlatched one or more modifier key which caused the invalid character string. 
         [0084]    It will be clear to one of ordinary skill in the art that all or part of the method of the embodiments of the present invention may suitably and usefully be embodied in a logic apparatus, or a plurality of logic apparatus, comprising logic elements arranged to perform the steps of the method and that such logic elements may comprise hardware components, firmware components or a combination thereof. 
         [0085]    It will be equally clear to one of skill in the art that all or part of a logic arrangement according to the embodiments of the present invention may suitably be embodied in a logic apparatus comprising logic elements to perform the steps of the method, and that such logic elements may comprise components such as logic gates in, for example a programmable logic array or application-specific integrated circuit. Such a logic arrangement may further be embodied in enabling elements for temporarily or permanently establishing logic structures in such an array or circuit using, for example, a virtual hardware descriptor language, which may be stored and transmitted using fixed or transmittable carrier media. 
         [0086]    It will be appreciated that the method and arrangement described above may also suitably be carried out fully or partially in software running on one or more processors (not shown in the figures), and that the software may be provided in the form of one or more computer program elements carried on any suitable data-carrier (also not shown in the figures) such as a magnetic or optical disk or the like. 
         [0087]    A method is generally conceived to be a self-consistent sequence of steps leading to a desired result. These steps require physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated. It is convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, parameters, items, elements, objects, symbols, characters, terms, numbers, or the like. It should be noted, however, that all of these terms and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. 
         [0088]    The present invention may further suitably be embodied as a computer program product for use with a computer system. Such an implementation may comprise a series of computer-readable instructions either fixed on a tangible medium, such as a computer readable medium, for example, diskette, CD-ROM, ROM, or hard disk, or transmittable to a computer system, via a modem or other interface device, over either a tangible medium, including but not limited to optical or analogue communications lines, or intangibly using wireless techniques, including but not limited to microwave, infrared or other transmission techniques. The series of computer readable instructions embodies all or part of the functionality previously described herein. 
         [0089]    Those skilled in the art will appreciate that such computer readable instructions can be written in a number of programming languages for use with many computer architectures or operating systems. Further, such instructions may be stored using any memory technology, present or future, including but not limited to, semiconductor, magnetic, or optical, or transmitted using any communications technology, present or future, including but not limited to optical, infrared, or microwave. It is contemplated that such a computer program product may be distributed as a removable medium with accompanying printed or electronic documentation, for example, shrink-wrapped software, pre-loaded with a computer system, for example, on a system ROM or fixed disk, or distributed from a server or electronic bulletin board over a network, for example, the Internet or World Wide Web. 
         [0090]    In one alternative, embodiment(s) of the present invention may be realized in the form of a computer implemented method of deploying a service comprising steps of deploying computer program code operable to, when deployed into a computer infrastructure and executed thereon, cause said computer system to perform all the steps of the method. 
         [0091]    In a further alternative, embodiment(s) of the present invention may be realized in the form of data carrier having functional data thereon, said functional data comprising functional computer data structures to, when loaded into a computer system and operated upon thereby, enable said computer system to perform all the steps of the method. 
         [0092]    It will be clear to one skilled in the art that many improvements and modifications can be made to the foregoing exemplary embodiment without departing from the scope of the present invention.