]> git.sur5r.net Git - cc65/blob - libsrc/common/stricmp.s
added optimization for indexed 16-bit array load of form (array[i & 0x7f])
[cc65] / libsrc / common / stricmp.s
1 ;
2 ; Ullrich von Bassewitz, 03.06.1998
3 ;
4 ; int stricmp (const char* s1, const char* s2);         /* DOS way */
5 ; int strcasecmp (const char* s1, const char* s2);      /* UNIX way */
6 ;
7
8         .export         _stricmp, _strcasecmp
9         .import         popptr1
10         .import         __ctype
11         .importzp       ptr1, ptr2, tmp1
12
13         .include        "ctype.inc"
14
15 _stricmp:
16 _strcasecmp:
17         sta     ptr2            ; Save s2
18         stx     ptr2+1
19         jsr     popptr1         ; get s1
20         ; ldy     #0            ; Y=0 guaranteed by popptr1
21
22 loop:   lda     (ptr2),y        ; get char from second string
23         tax
24         lda     __ctype,x       ; get character classification
25         and     #CT_LOWER       ; lower case char?
26         beq     L1              ; jump if no
27         txa                     ; get character back
28         clc
29         adc     #<('A'-'a')     ; make upper case char
30         tax                     ;
31 L1:     stx     tmp1            ; remember upper case equivalent
32
33         lda     (ptr1),y        ; get character from first string
34         tax
35         lda     __ctype,x       ; get character classification
36         and     #CT_LOWER       ; lower case char?
37         beq     L2              ; jump if no
38         txa                     ; get character back
39         clc
40         adc     #<('A'-'a')     ; make upper case char
41         tax
42                                 
43 L2:     cpx     tmp1            ; compare characters
44         bne     L3
45         txa                     ; end of strings?
46         beq     L5              ; a/x both zero
47         iny
48         bne     loop
49         inc     ptr1+1
50         inc     ptr2+1
51         bne     loop
52
53 L3:     bcs     L4
54         ldx     #$FF
55         rts
56
57 L4:     ldx     #$01
58 L5:     rts