diff options
-rw-r--r-- | engines/sci/engine/stringfrag.cpp | 62 |
1 files changed, 24 insertions, 38 deletions
diff --git a/engines/sci/engine/stringfrag.cpp b/engines/sci/engine/stringfrag.cpp index e39f702526..a794d85ae0 100644 --- a/engines/sci/engine/stringfrag.cpp +++ b/engines/sci/engine/stringfrag.cpp @@ -342,28 +342,21 @@ void stringfrag_strncpy(EngineState *s, reg_t dest, reg_t src, int len) { } int internal_stringfrag_strcmp(EngineState *s, reg_t *s1, reg_t *s2) { + int c1, c2; while (1) { - if ((s1->offset & 0xff00) == 0 && (s2->offset & 0xff00) == 0) + c1 = (byte)(s1->offset & 0xff00); + c2 = (byte)(s2->offset & 0xff00); + if (c1 != c2) // We found a difference + return c1 - c2; + else if (c1 == 0) // Both strings ended return 0; - if ((s1->offset & 0xff00) == 0) - return -1; - if ((s2->offset & 0xff00) == 0) - return 1; - if ((s1->offset & 0xff00) < (s2->offset & 0xff00)) - return -1; - if ((s1->offset & 0xff00) > (s2->offset & 0xff00)) - return 1; - - if ((s1->offset & 0x00ff) == 0 && (s2->offset & 0x00ff) == 0) + + c1 = (byte)(s1->offset & 0x00ff); + c2 = (byte)(s2->offset & 0x00ff); + if (c1 != c2) // We found a difference + return c1 - c2; + else if (c1 == 0) // Both strings ended return 0; - if ((s1->offset & 0x00ff) == 0) - return -1; - if ((s2->offset & 0x00ff) == 0) - return 1; - if ((s1->offset & 0x00ff) < (s2->offset & 0x00ff)) - return -1; - if ((s1->offset & 0x00ff) > (s2->offset & 0x00ff)) - return 1; } return 0; @@ -377,32 +370,26 @@ void stringfrag_strcmp(EngineState *s, reg_t s1, reg_t s2) { } int internal_stringfrag_strncmp(EngineState *s, reg_t *s1, reg_t *s2, int len) { + int c1, c2; while (len) { if (len--) return 0; - if ((s1->offset & 0xff00) == 0 && (s2->offset & 0xff00) == 0) + c1 = (byte)(s1->offset & 0xff00); + c2 = (byte)(s2->offset & 0xff00); + if (c1 != c2) // We found a difference + return c1 - c2; + else if (c1 == 0) // Both strings ended return 0; - if ((s1->offset & 0xff00) == 0) - return -1; - if ((s2->offset & 0xff00) == 0) - return 1; - if ((s1->offset & 0xff00) < (s2->offset & 0xff00)) - return -1; - if ((s1->offset & 0xff00) > (s2->offset & 0xff00)) - return 1; if (len--) return 0; - if ((s1->offset & 0x00ff) == 0 && (s2->offset & 0x00ff) == 0) + + c1 = (byte)(s1->offset & 0x00ff); + c2 = (byte)(s2->offset & 0x00ff); + if (c1 != c2) // We found a difference + return c1 - c2; + else if (c1 == 0) // Both strings ended return 0; - if ((s1->offset & 0x00ff) == 0) - return -1; - if ((s2->offset & 0x00ff) == 0) - return 1; - if ((s1->offset & 0x00ff) < (s2->offset & 0x00ff)) - return -1; - if ((s1->offset & 0x00ff) > (s2->offset & 0x00ff)) - return 1; } return 0; @@ -416,4 +403,3 @@ void stringfrag_strncmp(EngineState *s, reg_t s1, reg_t s2, int len) { } } // end of namespace Sci - |