Annotation of coherent/b/lib/libc/string/i8086/strpbrk.m, revision 1.1.1.1

1.1       root        1: //////////
                      2: / i8086 C string library.
                      3: / strpbrk()
                      4: / ANSI 4.11.5.4.
                      5: //////////
                      6: 
                      7: //////////
                      8: / char *
                      9: / strpbrk(String1, String2)
                     10: / char *String1, *String2;
                     11: /
                     12: / Return a pointer to the first char in String1
                     13: / which matches any character in String2.
                     14: //////////
                     15: 
                     16: #include <larges.h>
                     17: 
                     18: String1        =       LEFTARG
                     19: String2        =       String1+DPL
                     20: 
                     21:        Enter(strpbrk_)
                     22:        Les     di, String1(bp) / String1 address to ES:DI
                     23:        sub     ax, ax          / Clear AL for NULL return value
                     24: #if    LARGEDATA
                     25:        mov     dx, ax          / and clear DX likewise
                     26: #endif
                     27:        cld
                     28: 
                     29: 1:     movb    ah, Pes (di)    / Get char from String1 to AH
                     30:        inc     di              / and point to next
                     31:        orb     ah, ah
                     32:        je      3f              / No match found, return NULL
                     33:        Lds     si, String2(bp) / String2 address to DS:SI
                     34: 
                     35: 2:     lodsb                   / String2 character to AL
                     36:        orb     al, al
                     37:        je      1b              / No match in String2, try next String1 char
                     38:        cmpb    ah, al
                     39:        jne     2b              / Mismatch, try next String2 char
                     40:        dec     di              / Match, return pointer
                     41:        mov     ax, di          / in AX
                     42: #ifdef LARGEDATA
                     43:        mov     dx, es          / or DX:AX
                     44: #endif
                     45: 
                     46: 3:     Leave

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.