home *** CD-ROM | disk | FTP | other *** search
- .model LARGE,C
-
-
- public pstrcmp,pstrcpy,pstrchr,pstrstr,pstrlen,pstrncpy, pstrncmp
- public pstrrchr,pstrcat
-
- GETLEN macro
- cld
- sub cx,cx
- dec cx
- sub ax,ax
- repne scasw
- not cx
- dec cx
- endm
-
- .code
- ;
- ;* int pstrncmp(short *a, short *b, int size);
- ;
- pstrncmp proc
- arg a:dword,b:dword, c:word
- uses si,di,ds
- mov cx,[c]
- les di,b
- lds si,a
- rep cmpsw
- jz scmatched
- js scneg
- scpos:
- sub ax,ax
- inc ax
- jmp short scret
- scneg:
- sub ax,ax
- dec ax
- jmp short scret
- scmatched:
- sub ax,ax
- scret:
-
- ret
- pstrncmp endp
- ;
- ;* int pstrcmp(short *a, short *b);
- ;
- pstrcmp proc
- arg a:dword,b:dword
- uses si,di,ds
- les di,a
- GETLEN
- inc cx
- push cx
- push word ptr [b+2]
- push word ptr [b]
- push word ptr [a+2]
- push word ptr [a]
- call pstrncmp
- add sp,10
- ret
- pstrcmp endp
- ;
- ;* void pstrcpy(short *a, short *b);
- ;
- pstrcpy proc
- arg a:dword,b:dword
- uses si,di,ds
- les di,b
- GETLEN
- inc cx
- les di,a
- lds si,b
- rep movsw
- ret
- pstrcpy endp
- ;
- ;* void pstrcat(short *a, short *b);
- ;
- pstrcat proc
- arg a:dword,b:dword
- uses si,di,ds
- les di,a
- GETLEN
- add cx,cx
- add word ptr [a],cx
- push word ptr [b+2]
- push word ptr [b]
- push word ptr [a+2]
- push word ptr [a]
- call pstrcpy
- add sp,8
- ret
- pstrcat endp
- ;
- ;* void pstrncpy(short *a, short *b,int len);
- ;
- pstrncpy proc
- arg a:dword,b:dword,c:word
- uses si,di,ds
- mov cx,[c]
- les di,a
- lds si,b
- rep movsw
- ret
- pstrncpy endp
- ;
- ;* short *pstrchr(short *a, short b);
- ;
- pstrchr proc
- arg a:dword,b:word
- uses si,di,ds
- les di,[a]
- GETLEN
- les di,[a]
- mov ax,[b]
- repne scasw
- jne scnull
- dec di
- dec di
- mov ax,di
- mov dx,es
- jmp short scret2
- scnull:
- sub ax,ax
- sub dx,dx
- scret2:
- ret
- pstrchr endp
- ;
- ;* short *pstrrchr(short *a, short b);
- ;
- pstrrchr proc
- arg a:dword,b:word
- uses si,di,ds
- les di,[a]
- GETLEN
- dec di
- dec di
- mov ax,[b]
- std
- repne scasw
- jne scnull2
- inc di
- inc di
- mov ax,di
- mov dx,es
- jmp short scret3
- scnull2:
- sub ax,ax
- sub dx,dx
- scret3:
- cld
- ret
- pstrrchr endp
- ;
- ;* short pstrlen(short *a);
- ;
- pstrlen proc
- arg a:dword,b:dword
- uses si,di,ds
- les di,a
- GETLEN
- mov ax,cx
- ret
- pstrlen endp
- ;
- ;* short *pstrstr(short *a, short *b);
- ;
- pstrstr proc
- arg a:dword,b:dword
- uses si,di,ds
- les di,b
- GETLEN
- les di,b
- sslp:
- push cx
- push es
- push di
- mov ax,es:[di]
- push ax
- push word ptr [a+2]
- push word ptr [a]
- call pstrchr
- add sp,6
- mov cx,ax
- or cx,dx
- jz short ssnomore
- push dx
- push ax
- call pstrncmp
- or ax,ax
- pop ax
- pop dx
- jz short ssnomore
- inc ax
- inc ax
- mov word ptr [a],ax
- mov word ptr [a+2],dx
- pop di
- pop es
- pop cx
- jmp sslp
-
- ssnomore:
- add sp,6
- ret
-
-
- pstrstr endp
- end
-
-
-
-