aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/agi/agi.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/engines/agi/agi.cpp b/engines/agi/agi.cpp
index 17359236f0..5cf82b83bd 100644
--- a/engines/agi/agi.cpp
+++ b/engines/agi/agi.cpp
@@ -222,7 +222,19 @@ void AgiEngine::processEvents() {
// Not a special key, so get the ASCII code for it
key = event.kbd.ascii;
- if (isalpha(key)) {
+ // Function isalpha is defined in <ctype.h> so the following applies to it:
+ //
+ // The C Programming Language Standard states:
+ // The header <ctype.h> declares several functions useful for classifying
+ // and mapping characters. In all cases the argument is an int, the value
+ // of which shall be representable as an unsigned char or shall equal the
+ // value of the macro EOF. If the argument has any other value, the
+ // behavior is undefined.
+ //
+ // For a concrete example (e.g. in Microsoft Visual Studio 2003):
+ // When used with a debug CRT library, isalpha will display a CRT assert
+ // if passed a parameter that isn't EOF or in the range of 0 through 0xFF.
+ if (key >= 0 && key <= 0xFF && isalpha(key)) {
// Key is A-Z.
// Map Ctrl-A to 1, Ctrl-B to 2, etc.
if (event.kbd.flags & Common::KBD_CTRL) {