Blob Blame History Raw
From 411fe87f64f57dd3b2469214fdbca01a121b4569 Mon Sep 17 00:00:00 2001
From: Oliver Schmidt <ol.sc@web.de>
Date: Thu, 2 Apr 2020 22:14:22 +0200
Subject: [PATCH 169/170] Fixed tolower() and toupper() to save high byte.

---
 libsrc/common/tolower.s | 21 +++++++++++----------
 libsrc/common/toupper.s | 21 +++++++++++----------
 2 files changed, 22 insertions(+), 20 deletions(-)

diff --git a/libsrc/common/tolower.s b/libsrc/common/tolower.s
index e672f077..bebac3c5 100644
--- a/libsrc/common/tolower.s
+++ b/libsrc/common/tolower.s
@@ -12,16 +12,17 @@
 
         .export         _tolower
         .include        "ctype.inc"
-        .import         ctype_preprocessor
+        .import         ctype_preprocessor_no_check
 
 _tolower:
-        tay                             ; save char
-        jsr     ctype_preprocessor      ; (always clears X)
-        bcc     @L2                     ; out of range?
-@L1:    tya                             ; if so, return the argument unchanged
-        rts
-@L2:    and     #CT_UPPER               ; upper case char?
-        beq     @L1                     ; jump if no
-        tya                             ; restore char
-        adc     #<('a'-'A')             ; make lower case char (ctype_preprocessor ensures carry clear)
+        cpx     #$00            ; out of range?
+        bne     @L2             ; if so, return the argument unchanged
+        tay                     ; save char
+        jsr     ctype_preprocessor_no_check
+        and     #CT_UPPER       ; upper case char?
+        beq     @L1             ; jump if no
+        tya                     ; restore char
+        adc     #<('a'-'A')     ; make lower case char (ctype_preprocessor_no_check ensures carry clear)
         rts
+@L1:    tya                     ; restore char
+@L2:    rts
diff --git a/libsrc/common/toupper.s b/libsrc/common/toupper.s
index 5b3a4c22..ed3dd9b0 100644
--- a/libsrc/common/toupper.s
+++ b/libsrc/common/toupper.s
@@ -12,16 +12,17 @@
 
         .export         _toupper
         .include        "ctype.inc"
-        .import         ctype_preprocessor
+        .import         ctype_preprocessor_no_check
 
 _toupper:
-        tay                             ; save char
-        jsr     ctype_preprocessor      ; (always clears X)
-        bcc     @L2                     ; out of range?
-@L1:    tya                             ; if so, return the argument unchanged
-        rts
-@L2:    and     #CT_LOWER               ; lower case char?
-        beq     @L1                     ; jump if no
-        tya                             ; restore char
-        adc     #<('A'-'a')             ; make upper case char (ctype_preprocessor ensures carry clear)
+        cpx     #$00            ; out of range?
+        bne     @L2             ; if so, return the argument unchanged
+        tay                     ; save char
+        jsr     ctype_preprocessor_no_check
+        and     #CT_LOWER       ; lower case char?
+        beq     @L1             ; jump if no
+        tya                     ; restore char
+        adc     #<('A'-'a')     ; make upper case char (ctype_preprocessor_no_check ensures carry clear)
         rts
+@L1:    tya                     ; restore char
+@L2:    rts
-- 
2.26.0