|
|
1.1 root 1: //////////
2: / i8086 C string library.
3: / strrchr()
4: / ANSI 4.11.5.5.
5: / Previously known as rindex().
6: / Entry point for rindex() retained for backward compatability.
7: //////////
8:
9: //////////
10: / char *
11: / strrchr(String, Char)
12: / char *String;
13: / int Char;
14: /
15: / Find rightmost occurence of Char in String,
16: / return pointer or NULL.
17: //////////
18:
19: #include <larges.h>
20:
21: String = LEFTARG
22: Char = String+DPL
23:
24: .globl strrchr_
25: strrchr_:
26:
27: Enter(rindex_)
28: Lds si, String(bp) / String address to DS:SI
29: movb ah, Char(bp) / Char to AH
30: sub bx, bx / Address of last match to BX
31: cld
32:
33: 1: lodsb / Fetch String char to AL
34: cmpb al, ah / and compare to Char
35: jne 2f / Mismatch
36: mov bx, si / Match, save address
37:
38: 2: orb al, al / Test for NUL
39: jne 1b / Not done
40: or bx, bx / End of string, test if match found
41: jne 3f / Match found
42: mov ax, bx / No match, return NULL
43: #if LARGEDATA
44: mov dx, ax
45: #endif
46: jmp 4f / Go home
47:
48: 3: dec bx / Back up to match
49: mov ax, bx / AX = offset
50: #if LARGEDATA
51: mov dx, ds / DX = segment
52: #endif
53:
54: 4: Leave
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.