home *** CD-ROM | disk | FTP | other *** search
- stdlib segment para public 'slcode'
- assume cs:stdlib
- ;
- ;
- ; strcspanl- Returns the number of characters (from a set) which
- ; do NOT precede a string.
- ;
- ; inputs:
- ;
- ; ES:DI- Points at string to test.
- ; return address- Points at set of characters (zero terminated string).
- ;
- ; outputs:
- ;
- ; CX- Number of characters in set which are NOT in the prefix of
- ; the test string.
- ;
- ;
- ;
- ;
- public sl_strcspanl
- ;
- sl_strcspanl proc far
- push bp
- mov bp, sp
- pushf
- push es
- push ds
- push ax
- push bx
- push dx
- push si
- push di
- cld
- ;
- ; Put the pointers into a couple of better locations.
- ;
- mov ax, es
- mov ds, ax
- mov si, di
- les di, 2[bp]
- ;
- mov bx, di ;Preserve ptr to char set.
- mov cx, 0ffffh
- mov al, 0
- repne scasb ;Compute length of char set.
- neg cx
- dec cx
- dec cx
- mov 2[bp], di ;Save new return address
- mov dx, cx ;Save for use later.
- ;
- ; Okay, now we can see how many characters from the set match the prefix
- ; characters in the string.
- ;
- StrLp: lodsb ;Get next char in string.
- mov cx, dx ;Get length of char set.
- mov di, bx ;Get ptr to char set
- repne scasb ;See if in set
- jnz StrLp ;Repeat while not in set.
- ;
- pop di
- mov cx, di
- sub cx, si
- neg cx
- dec cx
- pop si
- pop dx
- pop bx
- pop ax
- pop ds
- pop es
- popf
- pop bp
- ret
- sl_strcspanl endp
- ;
- ;
- ;
- ;
- stdlib ends
- end
-