diff options
author | Davi Arnaut <Davi.Arnaut@Sun.COM> | 2010-05-28 18:11:31 -0300 |
---|---|---|
committer | Davi Arnaut <Davi.Arnaut@Sun.COM> | 2010-05-28 18:11:31 -0300 |
commit | 25eb8e2c370a372a068f05730c7f56e9185ba801 (patch) | |
tree | 32bc3bfd719f4d63cc634cab18e03e0415b25dbd /strings | |
parent | d60a0ce9be619c885e76da2a6f9377d6f657cd38 (diff) | |
download | mariadb-git-25eb8e2c370a372a068f05730c7f56e9185ba801.tar.gz |
Backport: remove ancient and unused strings files.
Diffstat (limited to 'strings')
-rw-r--r-- | strings/ChangeLog | 38 | ||||
-rw-r--r-- | strings/bcopy-duff.c | 48 | ||||
-rw-r--r-- | strings/bzero.c | 82 | ||||
-rw-r--r-- | strings/macros.asm | 147 | ||||
-rw-r--r-- | strings/memcmp.c | 44 | ||||
-rw-r--r-- | strings/memcpy.c | 33 | ||||
-rw-r--r-- | strings/memset.c | 50 | ||||
-rw-r--r-- | strings/ptr_cmp.asm | 180 | ||||
-rw-r--r-- | strings/strcat.c | 40 | ||||
-rw-r--r-- | strings/strchr.c | 61 | ||||
-rw-r--r-- | strings/strcmp.c | 35 | ||||
-rw-r--r-- | strings/strings.asm | 1060 | ||||
-rw-r--r-- | strings/strlen.c | 65 | ||||
-rw-r--r-- | strings/strrchr.c | 39 | ||||
-rw-r--r-- | strings/strxmov.asm | 103 | ||||
-rw-r--r-- | strings/udiv.c | 36 |
16 files changed, 0 insertions, 2061 deletions
diff --git a/strings/ChangeLog b/strings/ChangeLog deleted file mode 100644 index 2d31f2946a1..00000000000 --- a/strings/ChangeLog +++ /dev/null @@ -1,38 +0,0 @@ -Thu May 20 13:45:15 1993 Michael Widenius (monty at bitch) - - * changed itoa() and ltoa() to use the same interface as microsoft:s - and zortech:s libraryes. - -Sun Mar 24 00:30:34 1991 Michael Widenius (monty at LYNX) - - * Changed int2str to return BIG converted chars. - -Sun Feb 24 00:22:54 1991 Michael Widenius (monty at LYNX) - - * Added new function strcend(string,char). Its eqvialent to - if (!(a=strchr(string,char))) - a=strend(string); - -Tue Oct 16 18:53:19 1990 Michael Widenius (monty at LYNX) - - * Added define BAD_STRING_COMPILER to set define strmov() - if compiler is very bad at stringoperations. - * Changed to use cc on sun-systems instead of gcc. - -Sat Sep 29 18:42:31 1990 Michael Widenius (monty at LYNX) - - * Added my_atof for sparc system to get some speed. - -Sun Mar 11 16:35:59 1990 Monty (monty at monty) - - * strnmov() was changed to not fill to-string with null. - * strmake() changed to point at closing null. - -Wed Feb 7 20:15:34 1990 David Axmark (davida at isil) - - * Made functon strinrstr that is reverse search. - -Fri Dec 2 03:37:59 1988 Monty (monty at monty) - - * Fixed bug in strcont; It didn't return first found character in - set. diff --git a/strings/bcopy-duff.c b/strings/bcopy-duff.c deleted file mode 100644 index 215857715fd..00000000000 --- a/strings/bcopy-duff.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#define IFACTOR 4 - - void -dcopy(char *chardest, char *charsrc, int size) -{ - register int *src, *dest, intcount ; - int startcharcpy, intoffset, numints2cpy, i ; - - numints2cpy = size >> 2 ; - startcharcpy = numints2cpy << 2 ; - intcount = numints2cpy & ~(IFACTOR-1) ; - intoffset = numints2cpy - intcount ; - - src = (int *)(((int) charsrc) + intcount*sizeof(int*)) ; - dest = (int *)(((int) chardest) + intcount*sizeof(int*)) ; - - /* copy the ints */ - switch(intoffset) - do - { - case 0: dest[3] = src[3] ; - case 3: dest[2] = src[2] ; - case 2: dest[1] = src[1] ; - case 1: dest[0] = src[0] ; - intcount -= IFACTOR ; - dest -= IFACTOR ; - src -= IFACTOR ; - } while (intcount >= 0) ; - - /* copy the chars left over by the int copy at the end */ - for(i=startcharcpy ; i<size ; i++) - chardest[i] = charsrc[i] ; -} diff --git a/strings/bzero.c b/strings/bzero.c deleted file mode 100644 index b720de65eed..00000000000 --- a/strings/bzero.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : bzero.c - Author : Richard A. O'Keefe. - Michael Widenius; ifdef MC68000 - Updated: 23 April 1984 - Defines: bzero() - - bzero(dst, len) moves "len" 0 bytes to "dst". - Thus to clear a disc buffer to 0s do bzero(buffer, BUFSIZ). - - Note: the "b" routines are there to exploit certain VAX order codes, - The asm code is presented for your interest and amusement. -*/ - -#ifndef BSD_FUNCS -#include "strings.h" - -#ifdef bzero -#undef bzero /* remove macro */ -#endif - -#if VaxAsm - -static void _bzero64 _A((char *dst,int len)); - -void bzero(dst, len) -char *dst; -uint len; -{ - while ((int) len >= 64*K) - { - _bzero64(dst, 64*K-1); - dst += 64*K-1; - len -= 64*K-1; - } - _bzero64(dst, len); -} - -_bzero64(dst, len) -char *dst; -int len; -{ - asm("movc5 $0,*4(ap),$0,8(ap),*4(ap)"); -} - -#else - -#if defined(MC68000) && defined(DS90) - -void bzero(dst, len) -char *dst; -uint len; -{ - bfill(dst,len,0); /* This is very optimized ! */ -} /* bzero */ - -#else - -void bzero(dst, len) -register char *dst; -register uint len; -{ - while (len-- != 0) *dst++ = 0; -} /* bzero */ - -#endif -#endif -#endif /* BSD_FUNCS */ diff --git a/strings/macros.asm b/strings/macros.asm deleted file mode 100644 index 1eedcfbb15f..00000000000 --- a/strings/macros.asm +++ /dev/null @@ -1,147 +0,0 @@ -; Copyright (C) 2000 MySQL AB -; -; This library is free software; you can redistribute it and/or -; modify it under the terms of the GNU Library General Public -; License as published by the Free Software Foundation; version 2 -; of the License. -; -; This library is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -; Library General Public License for more details. -; -; You should have received a copy of the GNU Library General Public -; License along with this library; if not, write to the Free -; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA - -; Some useful macros
-
- .386P
- .387
-
-_FLAT equ 0 ;FLAT memory model
-_STDCALL equ 0 ;default to _stdcall
-I386 equ 1
-
-begcode macro module
- if _FLAT
-_TEXT segment dword use32 public 'CODE'
- assume CS:FLAT,DS:FLAT,SS:FLAT
- else
-_TEXT segment dword public 'CODE'
- assume CS:_TEXT
- endif
- endm
-
-endcode macro module
-_TEXT ENDS
- endm
-
-begdata macro
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Set up segments for data
-; Regular initialized data goes in _DATA
-
-_DATA segment dword public 'DATA'
-_DATA ends
-
-;Function pointers to constructors
-XIB segment dword public 'DATA'
-XIB ends
-XI segment dword public 'DATA'
-XI ends
-XIE segment dword public 'DATA'
-XIE ends
-
-;Function pointers to destructors
-XCB segment dword public 'DATA'
-XCB ends
-XC segment dword public 'DATA'
-XC ends
-XCE segment dword public 'DATA'
-XCE ends
-
-;Constant data, such as switch tables, go here.
-
-CONST segment dword public 'CONST'
-CONST ends
-
-;Segment for uninitialized data. This is set to 0 by the startup code/OS,
-;so it does not consume room in the executable file.
-
-_BSS segment dword public 'BSS'
-_BSS ends
-
-HUGE_BSS segment dword public 'HUGE_BSS'
-HUGE_BSS ends
-
-EEND segment dword public 'ENDBSS'
-EEND ends
-
-STACK segment para stack 'STACK'
-STACK ends
-DGROUP group _DATA,XIB,XI,XIE,XCB,XC,XCE,CONST,_BSS,EEND,STACK
-
-_DATA segment
- if _FLAT
- assume DS:FLAT
- else
- assume DS:DGROUP
- endif
- endm
-
-enddata macro
-_DATA ends
- endm
-
-P equ 8 ; Offset of start of parameters on the stack frame
- ; From EBP assuming EBP was pushed.
-PS equ 4 ; Offset of start of parameters on the stack frame
- ; From ESP assuming EBP was NOT pushed.
-ESeqDS equ 0
-FSeqDS equ 0
-GSeqDS equ 0
-SSeqDS equ 1
-SIZEPTR equ 4 ; Size of a pointer
-LPTR equ 0
-SPTR equ 1
-LCODE equ 0
-
-func macro name
-_&name proc near
- ifndef name
-name equ _&name
- endif
- endm
-
-callm macro name
- call _&name
- endm
-
-;Macros to replace public, extrn, and endp for C-callable assembly routines,
-; and to define labels: c_label defines labels,
-; c_public replaces public, c_extrn replaces extrn, and c_endp replaces endp
-
-c_name macro name
- name equ _&name
- endm
-
-c_label macro name
-_&name:
- endm
-
-c_endp macro name
-_&name ENDP
- endm
-
-clr macro list ;clear a register
- irp reg,<list>
- xor reg,reg
- endm
- endm
-
-jmps macro lbl
- jmp short lbl
- endm
diff --git a/strings/memcmp.c b/strings/memcmp.c deleted file mode 100644 index 9471353f751..00000000000 --- a/strings/memcmp.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* memcmp(lhs, rhs, len) - compares the two memory areas lhs[0..len-1] ?? rhs[0..len-1]. It - returns an integer less than, equal to, or greater than 0 according - as lhs[-] is lexicographically less than, equal to, or greater than - rhs[-]. Note that this is not at all the same as bcmp, which tells - you *where* the difference is but not what. - - Note: suppose we have int x, y; then memcmp(&x, &y, sizeof x) need - not bear any relation to x-y. This is because byte order is machine - dependent, and also, some machines have integer representations that - are shorter than a machine word and two equal integers might have - different values in the spare bits. On a ones complement machine, - -0 == 0, but the bit patterns are different. -*/ - -#include "strings.h" - -#if !defined(HAVE_MEMCPY) - -int memcmp(lhs, rhs, len) - register char *lhs, *rhs; - register int len; -{ - while (--len >= 0) - if (*lhs++ != *rhs++) return (uchar) lhs[-1] - (uchar) rhs[-1]; - return 0; -} - -#endif diff --git a/strings/memcpy.c b/strings/memcpy.c deleted file mode 100644 index f32d346e3ec..00000000000 --- a/strings/memcpy.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - memcpy(dst, src, len) - moves len bytes from src to dst. The result is dst. This is not - the same as strncpy or strnmov, while move a maximum of len bytes - and stop early if they hit a NUL character. This moves len bytes - exactly, no more, no less. See also bcopy() and bmove() which do - not return a value but otherwise do the same job. -*/ - -#include "strings.h" - -char *memcpy(char *dst, register char *src, register int len) -{ - register char *d; - - for (d = dst; --len >= 0; *d++ = *src++) ; - return dst; -} diff --git a/strings/memset.c b/strings/memset.c deleted file mode 100644 index e07dc4ead85..00000000000 --- a/strings/memset.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : memset.c - Author : Richard A. O'Keefe. - Updated: 25 May 1984 - Defines: memset() - - memset(dst, chr, len) - fills the memory area dst[0..len-1] with len bytes all equal to chr. - The result is dst. See also bfill(), which has no return value and - puts the last two arguments the other way around. - - Note: the VAX assembly code version can only handle 0 <= len < 2^16. - It is presented for your interest and amusement. -*/ - -#include "strings.h" - -#if VaxAsm - -char *memset(char *dst,int chr, int len) -{ - asm("movc5 $0,*4(ap),8(ap),12(ap),*4(ap)"); - return dst; -} - -#else ~VaxAsm - -char *memset(char *dst, register pchar chr, register int len) -{ - register char *d; - - for (d = dst; --len >= 0; *d++ = chr) ; - return dst; -} - -#endif VaxAsm diff --git a/strings/ptr_cmp.asm b/strings/ptr_cmp.asm deleted file mode 100644 index b2a020d8a37..00000000000 --- a/strings/ptr_cmp.asm +++ /dev/null @@ -1,180 +0,0 @@ -; Copyright (C) 2000 MySQL AB -; -; This library is free software; you can redistribute it and/or -; modify it under the terms of the GNU Library General Public -; License as published by the Free Software Foundation; version 2 -; of the License. -; -; This library is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -; Library General Public License for more details. -; -; You should have received a copy of the GNU Library General Public -; License along with this library; if not, write to the Free -; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA - - TITLE Optimized cmp of pointer to strings of unsigned chars - -ifndef M_I386 - .8087 - DOSSEG - .MODEL LARGE - .DATA -compare_length dw 0 - .CODE STRINGS - - PUBLIC _get_ptr_compare -_get_ptr_compare PROC - mov bx,sp - mov cx,ss:[BX+4] - mov compare_length,cx - mov dx,seg strings:_ptr_cmp - mov ax,offset _ptr_cmp_0 - jcxz @F - mov ax,offset _ptr_cmp_1 - dec cx - jz @F - mov ax,offset _ptr_cmp -@@: ret -_get_ptr_compare ENDP - -_ptr_cmp_0 PROC - mov AX,0 ; Emptyt strings are always equal - ret -_ptr_cmp_0 ENDP - - -_ptr_cmp_1 PROC - mov bx,sp - mov dx,si ; Save si and ds - mov cx,ds - lds si,DWORD PTR ss:[bx+4] ; s1 - lds si,DWORD PTR ds:[si] - mov al,ds:[si] - xor ah,ah - lds si,DWORD PTR ss:[bx+8] ; s2 - lds si,DWORD PTR ds:[si] - mov bl,ds:[si] - mov bh,ah - sub ax,bx - mov ds,cx ; restore si and ds - mov si,dx - ret -_ptr_cmp_1 ENDP - -_ptr_cmp PROC - mov bx,bp ; Save bp - mov dx,di ; Save di - mov bp,sp - push ds - push si - mov cx,compare_length ; Length of memory-area - lds si,DWORD PTR [bp+4] ; s1 - lds si,DWORD PTR ds:[si] - les di,DWORD PTR [bp+8] ; s2 - les di,DWORD PTR es:[di] -; cld ; Work uppward - xor ax,ax - repe cmpsb ; Compare strings - je @F ; Strings are equal - sbb ax,ax - cmc - adc ax,0 - -@@: pop si - pop ds - mov di,dx - mov bp,bx - ret -_ptr_cmp ENDP - -else - -include macros.asm - -fix_es MACRO fix_cld ; Load ES if neaded - ife ESeqDS - mov ax,ds - mov es,ax - endif - ifnb <fix_cld> - cld - endif - ENDM - - begdata -compare_length dd 0 ; Length of strings - enddata - - begcode get_ptr_compare - public _get_ptr_compare -_get_ptr_compare proc near - mov ecx,P-SIZEPTR[esp] - mov compare_length,ecx - mov eax,offset _TEXT:_ptr_cmp_0 - jecxz @F - mov eax,offset _TEXT:_ptr_cmp_1 - dec ecx - jz @F - mov eax,offset _TEXT:_ptr_cmp -@@: ret -_get_ptr_compare endp - endcode _get_ptr_compare - - - begcode ptr_cmp_0 -_ptr_cmp_0 PROC - mov EAX,0 ; Emptyt strings are always equal - ret -_ptr_cmp_0 ENDP - endcode ptr_cmp_0 - - - begcode ptr_cmp_1 -_ptr_cmp_1 proc near - mov edx,esi ; Save esi - mov esi,P-SIZEPTR[esp] ; *s1 - mov esi,[esi] - movzx eax,[esi] - mov esi,P[esp] ; *s2 - mov esi,[esi] - movzx ecx,[esi] - sub eax,ecx - mov esi,edx ; Restore esi - ret -_ptr_cmp_1 ENDP - endcode ptr_cmp_1 - - - begcode ptr_cmp -_ptr_cmp proc near - fix_es 1 - push ebp - mov ebp,esp - mov edx,edi ; Save esi - push esi - mov esi,P[ebp] ; *s1 - mov esi,[esi] - mov edi,P+SIZEPTR[ebp] ; *s2 - mov edi,[edi] - mov ecx,compare_length ; Length of memory-area - xor eax,eax - repe cmpsb ; Compare strings - je @F ; Strings are equal - - sbb eax,eax - cmc - adc eax,0 - -@@: pop esi - mov edi,edx - pop ebp - ret -_ptr_cmp ENDP - endcode ptr_cmp - -endif - - END diff --git a/strings/strcat.c b/strings/strcat.c deleted file mode 100644 index e69369c357f..00000000000 --- a/strings/strcat.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : strcat.c - Author : Richard A. O'Keefe. - Updated: 10 April 1984 - Defines: strcat() - - strcat(s, t) concatenates t on the end of s. There had better be - enough room in the space s points to; strcat has no way to tell. - Note that strcat has to search for the end of s, so if you are doing - a lot of concatenating it may be better to use strmov, e.g. - strmov(strmov(strmov(strmov(s,a),b),c),d) - rather than - strcat(strcat(strcat(strcpy(s,a),b),c),d). - strcat returns the old value of s. -*/ - -#include "strings.h" - -char *strcat(register char *s, register const char *t) -{ - char *save; - - for (save = s; *s++; ) ; - for (--s; *s++ = *t++; ) ; - return save; - } diff --git a/strings/strchr.c b/strings/strchr.c deleted file mode 100644 index 5ffe386c718..00000000000 --- a/strings/strchr.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : strchr.c - Author : Richard A. O'Keefe. - Michael Widenius: ifdef MC68000 - Updated: 20 April 1984 - Defines: strchr(), index() - - strchr(s, c) returns a pointer to the first place in s where c - occurs, or NullS if c does not occur in s. This function is called - index in V7 and 4.?bsd systems; while not ideal the name is clearer - than strchr, so index remains in strings.h as a macro. NB: strchr - looks for single characters, not for sets or strings. To find the - NUL character which closes s, use strchr(s, '\0') or strend(s). The - parameter 'c' is declared 'int' so it will go in a register; if your - C compiler is happy with register _char_ change it to that. -*/ - -#include "strings.h" - -#if defined(MC68000) && defined(DS90) - -char* strchr(char *s, pchar c) -{ -asm(" movl 4(a7),a0 "); -asm(" movl 8(a7),d1 "); -asm(".L2: movb (a0)+,d0 "); -asm(" cmpb d0,d1 "); -asm(" beq .L1 "); -asm(" tstb d0 "); -asm(" bne .L2 "); -asm(" moveq #0,d0 "); -asm(" rts "); -asm(".L1: movl a0,d0 "); -asm(" subql #1,d0 "); -} -#else - -char *strchr(register const char *s, register pchar c) -{ - for (;;) - { - if (*s == (char) c) return (char*) s; - if (!*s++) return NullS; - } -} - -#endif diff --git a/strings/strcmp.c b/strings/strcmp.c deleted file mode 100644 index 54bbe92279b..00000000000 --- a/strings/strcmp.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : strcmp.c - Author : Richard A. O'Keefe. - Updated: 10 April 1984 - Defines: strcmp() - - strcmp(s, t) returns > 0, = 0, or < 0 when s > t, s = t, or s < t - according to the ordinary lexicographical order. To test for - equality, the macro streql(s,t) is clearer than !strcmp(s,t). Note - that if the string contains characters outside the range 0..127 the - result is machine-dependent; PDP-11s and VAXen use signed bytes, - some other machines use unsigned bytes. -*/ - -#include "strings.h" - -int strcmp(register const char *s, register const char *t) -{ - while (*s == *t++) if (!*s++) return 0; - return s[0]-t[-1]; -} diff --git a/strings/strings.asm b/strings/strings.asm deleted file mode 100644 index 2224025cc72..00000000000 --- a/strings/strings.asm +++ /dev/null @@ -1,1060 +0,0 @@ -; Copyright (C) 2000, 2003 MySQL AB -; -; This library is free software; you can redistribute it and/or -; modify it under the terms of the GNU Library General Public -; License as published by the Free Software Foundation; version 2 -; of the License. -; -; This library is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -; Library General Public License for more details. -; -; You should have received a copy of the GNU Library General Public -; License along with this library; if not, write to the Free -; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA - -; Note that if you don't have a macro assembler (like MASM) to compile -; this file, you can instead compile all *.c files in the string -; directory. - - TITLE Stringfunctions that we use often at MSDOS / Intel 8086 - -ifndef M_I386 - .8087 - DOSSEG - .MODEL LARGE - .CODE - - ; - ; Some macros - ; - -q_movs MACRO ; as rep movsb but quicker - shr cx,1 - rep movsw ; Move 2 bytes at a time - adc cx,cx - rep movsb ; Move last byte if any - ENDM - -q_stos MACRO ; as rep stosb but quicker - mov ah,al ; For word store - shr cx,1 - rep stosw ; Move 2 bytes at a time - adc cx,cx - rep stosb ; Move last byte if any - ENDM - -ifndef ZTC ; If not using ZORTECH compiler - ; - ; Compare memory - ; Args: s1,s2,length - ; - - PUBLIC _bcmp -_bcmp PROC - mov bx,bp ; Save bp - mov dx,di ; Save di - mov bp,sp - push ds - push si - les di,DWORD PTR [bp+8] ; s2 - lds si,DWORD PTR [bp+4] ; s1 - mov cx,WORD PTR [bp+12] ; Length of memory-area - jcxz @F ; Length = 0, return same -; cld ; Work uppward - repe cmpsb ; Compare strings - jz @F ; Match found - inc cx ; return matchpoint +1 -@@: mov ax,cx ; Return 0 if match, else pos from end - pop si - pop ds - mov di,dx - mov bp,bx - ret -_bcmp ENDP - - ; - ; Find a char in a string - ; Arg: str,char - ; Ret: pointer to found char or NullS - ; - -ifdef better_stringfunctions ; Breaks window linkage (broken linking) - - PUBLIC _strchr -_strchr PROC - mov bx,bp ; Save bp and di - mov dx,di - mov bp,sp - les di,DWORD PTR [bp+4] ; str - mov ah,BYTE PTR [bp+8] ; search - xor al,al ; for scasb to find end - -@@: cmp ah,es:[di] - jz @F ; Found char - scasb - jnz @B ; Not end - xor di,di ; Not found - mov es,di -@@: mov ax,di - mov di,dx ; Restore - mov dx,es ; Seg adr - mov bp,bx ; Restore - ret -_strchr ENDP - - ; - ; Find length of string - ; arg: str - ; ret: length - ; - - PUBLIC _strlen -_strlen PROC - mov bx,sp - mov dx,di - les di,DWORD PTR ss:[bx+4] ; Str - xor al,al ; Find end of string - mov cx,-1 -; cld - repne scasb ; Find strend or length - inc cx ; Calc strlength - not cx - mov ax,cx - mov di,dx ; Restore register - ret -_strlen ENDP - -endif - - ; - ; Move a string - ; arg: dst,src - ; ret: end-null of to - ; - - PUBLIC _strmov -_strmov PROC - mov bx,bp - mov cx,si - mov bp,sp - push ds - push di - les di,DWORD PTR [bp+4] ; dst - lds si,DWORD PTR [bp+8] ; src -; cld -@@: mov al,ds:[si] - movsb ; move arg - and al,al - jnz @B ; Not last - lea ax,WORD PTR [di-1] ; Set DX:AX to point at last null - mov dx,es - pop di - pop ds - mov si,cx - mov bp,bx - ret -_strmov ENDP - - ; - ; Fill a area of memory with a walue - ; Args: to,length,fillchar - ; - - PUBLIC _bfill -_bfill PROC - mov bx,sp ; Get args through BX - mov al,BYTE PTR ss:[bx+10] ; Fill -bfill_10: - mov dx,di ; Save di - les di,DWORD PTR ss:[bx+4] ; Memory pointer - mov cx,WORD PTR ss:[bx+8] ; Length -; cld - q_stos - mov di,dx - ret -_bfill ENDP - - ; - ; Fill a area with null - ; Args: to,length - - PUBLIC _bzero -_bzero PROC - mov bx,sp ; Get args through BX - mov al,0 ; Fill with null - jmp short bfill_10 -_bzero ENDP - -endif ; ZTC - - ; - ; Move a memory area - ; Args: to,from,length - ; - - PUBLIC _bmove -_bmove PROC - mov bx,bp - mov dx,di - mov ax,si - mov bp,sp - push ds - lds si,DWORD PTR [bp+8] ; from - les di,DWORD PTR [bp+4] ; to - mov cx,WORD PTR [bp+12] ; Length of memory-area -; cld ; Work uppward - rep movsb ; Not q_movs because overlap ? - pop ds - mov si,ax - mov di,dx - mov bp,bx - ret -_bmove ENDP - - ; - ; Move a alligned, not overlapped, by (long) divided memory area - ; Args: to,from,length - ; - - PUBLIC _bmove_align -_bmove_align PROC - mov bx,bp - mov dx,di - mov ax,si - mov bp,sp - push ds - lds si,DWORD PTR [bp+8] ; from - les di,DWORD PTR [bp+4] ; to - mov cx,WORD PTR [bp+12] ; Length of memory-area -; cld ; Work uppward - inc cx ; fix if not divisible with word - shr cx,1 - rep movsw ; Move 2 bytes at a time - pop ds - mov si,ax - mov di,dx - mov bp,bx - ret -_bmove_align ENDP - - ; - ; Move a string from higher to lower - ; Arg from+1,to+1,length - ; - - PUBLIC _bmove_upp -_bmove_upp PROC - mov bx,bp - mov dx,di - mov ax,si - mov bp,sp - push ds - lds si,DWORD PTR [bp+8] ; from - les di,DWORD PTR [bp+4] ; to - mov cx,WORD PTR [bp+12] ; Length of memory-area - dec di ; Don't move last arg - dec si - std ; Work downward - rep movsb ; Not q_movs because overlap ? - cld ; C compilator want cld - pop ds - mov si,ax - mov di,dx - mov bp,bx - ret -_bmove_upp ENDP - - ; - ; Append fillchars to string - ; Args: dest,len,fill - ; - - PUBLIC _strappend -_strappend PROC - mov bx,bp - mov dx,di - mov bp,sp - les di,DWORD PTR [bp+4] ; Memory pointer - mov cx,WORD PTR [bp+8] ; Length - sub al,al ; Find end of string -; cld - repne scasb - jnz sa_99 ; String to long, shorten it - mov al,BYTE PTR [bp+10] ; Fillchar - dec di ; Point at end null - inc cx ; rep made one dec for null-char - q_stos ; Store al in string -sa_99: mov BYTE PTR es:[di],0 ; End of string - mov di,dx - mov bp,bx - ret -_strappend ENDP - - ; - ; Find if string contains any char in another string - ; Arg: str,set - ; Ret: Pointer to first found char in str - ; - - PUBLIC _strcont -_strcont PROC - mov bx,bp ; Save bp and di in regs - mov dx,di - mov bp,sp - push ds - push si - lds si,DWORD PTR [bp+4] ; str - les di,DWORD PTR [bp+8] ; Set - mov cx,di ; Save for loop - xor ah,ah ; For endtest - jmp sc_60 - -sc_10: scasb - jz sc_fo ; Found char -sc_20: cmp ah,es:[di] ; Test if null - jnz sc_10 ; Not end of set yet - inc si ; Next char in str - mov di,cx ; es:di = Set -sc_60: mov al,ds:[si] ; Test if this char exist - and al,al - jnz sc_20 ; Not end of string - sub si,si ; Return Null - mov ds,si -sc_fo: mov ax,si ; Char found here - mov di,dx ; Restore - mov dx,ds ; Seg of found char - pop si - pop ds - mov bp,bx - ret -_strcont ENDP - - ; - ; Found end of string - ; Arg: str - ; ret: Pointer to end null - ; - - PUBLIC _strend -_strend PROC - mov bx,sp - mov dx,di ; Save - les di,DWORD PTR ss:[bx+4] ; str - mov cx,-1 - sub al,al ; Find end of string -; cld - repne scasb - lea ax,WORD PTR [di-1] ; Endpos i DX:AX - mov di,dx ; Restore - mov dx,es - ret -_strend ENDP - - ; - ; Make a string with len fill-chars and endnull - ; Args: dest,len,fill - ; Ret: dest+len - ; - - PUBLIC _strfill -_strfill PROC - mov bx,bp ; Save sp - mov bp,sp - push di - les di,DWORD PTR [bp+4] ; Memory pointer - mov cx,WORD PTR [bp+8] ; Length - mov al,BYTE PTR [bp+10] ; Fill -; cld - q_stos - mov BYTE PTR es:[di],0 ; End NULL - mov ax,di ; End i DX:AX - mov dx,es - pop di - mov bp,bx - ret -_strfill ENDP - - ; - ; Find a char in or end of a string - ; Arg: str,char - ; Ret: pointer to found char or NullS - ; - - PUBLIC _strcend -_strcend PROC - mov bx,bp ; Save bp and di - mov dx,di - mov bp,sp - les di,DWORD PTR [bp+4] ; str - mov ah,BYTE PTR [bp+8] ; search - xor al,al ; for scasb to find end - -@@: cmp ah,es:[di] - jz @F ; Found char - scasb - jnz @B ; Not end - dec di ; Not found, point at end of string -@@: mov ax,di - mov di,dx ; Restore - mov dx,es ; Seg adr - mov bp,bx ; Restore - ret -_strcend ENDP - - ; - ; Test if string has a given suffix - ; - -PUBLIC _is_prefix -_is_prefix PROC - mov dx,di ; Save di - mov bx,sp ; Arguments through bx - push ds - push si - les di,DWORD PTR ss:[bx+8] ; s2 - lds si,DWORD PTR ss:[bx+4] ; s1 - mov ax,1 ; Ok and zero-test -; cld ; Work uppward -@@: cmp ah,es:[di] - jz suf_ok ; End of string; found suffix - cmpsb ; Compare strings - jz @B ; Same, possible prefix - xor ax,ax ; Not suffix -suf_ok: pop si - pop ds - mov di,dx - ret -_is_prefix ENDP - - ; - ; Find a substring in string - ; Arg: str,search - ; - - PUBLIC _strstr -_strstr PROC - mov bx,bp - mov bp,sp - push ds - push di - push si - lds si,DWORD PTR [bp+4] ; str - les di,DWORD PTR [bp+8] ; search - mov cx,di - inc cx ; CX = search+1 - mov ah,es:[di] ; AH = First char in search - jmp sf_10 - -sf_00: mov si,dx ; si = Current str-pos -sf_10: mov al,ds:[si] ; Test if this char exist - and al,al - jz sf_90 ; End of string, didn't find search - inc si - cmp al,ah - jnz sf_10 ; Didn't find first char, continue - mov dx,si ; Save str-pos in DX - mov di,cx -sf_20: cmp BYTE PTR es:[di],0 - jz sf_fo ; Found substring - cmpsb - jz sf_20 ; Char ok - jmp sf_00 ; Next str-pos - -sf_90: sub dx,dx ; Return Null - mov ds,dx - inc dx ; Because of following dec -sf_fo: mov ax,dx ; Char found here - dec ax ; Pointed one after - mov dx,ds - pop si - pop di ; End - pop ds - mov bp,bx - ret -_strstr ENDP - - ; - ; Find a substring in string, return index - ; Arg: str,search - ; - - PUBLIC _strinstr -_strinstr PROC - push bp - mov bp,sp - push di - les di,DWORD PTR [bp+10] ; search - push es - push di - les di,DWORD PTR [bp+6] ; str - push es - push di - call _strstr - mov cx,ax - or cx,dx - jz si_99 - sub ax,di ; Pos from start - inc ax ; And first pos = 1 -si_99: add sp,8 - pop di - pop bp - ret -_strinstr ENDP - - ; - ; Make a string of len length from another string - ; Arg: dst,src,length - ; ret: end of dst - ; - - PUBLIC _strmake -_strmake PROC - mov bx,bp - mov bp,sp - push ds - push di - push si - les di,DWORD PTR [bp+4] ; dst - lds si,DWORD PTR [bp+8] ; src - mov cx,WORD PTR [bp+12] ; Length of memory-area - xor al,al ; For test of end-null - jcxz sm_90 ; Nothing to move, put zero at end. -; cld ; Work uppward - -@@: cmp al,ds:[si] ; Next char to move - movsb ; move arg - jz sm_99 ; last char, we are ready - loop @B ; Continue moving -sm_90: mov BYTE PTR es:[di],al ; Set end pos - inc di ; Fix that di points at end null -sm_99: dec di ; di points now at end null - mov ax,di ; Ret value in DX:AX - mov dx,es - pop si - pop di - pop ds - mov bp,bx - ret -_strmake ENDP - - ; - ; Find length of string with maxlength - ; arg: str,maxlength - ; ret: length - ; - - PUBLIC _strnlen -_strnlen PROC - mov bx,bp - mov bp,sp - push di - les di,DWORD PTR [bp+4] ; Str - mov cx,WORD PTR [bp+8] ; length - mov dx,di ; Save str to calc length - jcxz sn_10 ; Length = 0 - xor al,al ; Find end of string -; cld - repne scasb ; Find strend or length - jnz sn_10 - dec di ; DI points at last null -sn_10: mov ax,di - sub ax,dx ; Ax = length - pop di - mov bp,bx - ret -_strnlen ENDP - - ; - ; Move a string with max len chars - ; arg: dst,src,len - ; ret: pos to first null or dst+len - - PUBLIC _strnmov -_strnmov PROC - mov bx,bp - mov bp,sp - push ds - push di - push si - les di,DWORD PTR [bp+4] ; dst - lds si,DWORD PTR [bp+8] ; src - mov cx,WORD PTR [bp+12] ; length - jcxz snm_99 ; Nothing to do - xor al,al ; For test of end-null -; cld - -@@: cmp al,ds:[si] ; Next char to move - movsb ; move arg - jz snm_20 ; last char, fill with null - loop @B ; Continue moving - inc di ; Point two after last -snm_20: dec di ; Point at first null (or last+1) -snm_99: mov ax,di ; Pointer at last char - mov dx,es ; To-segment - pop si - pop di - pop ds - mov bp,bx ; Restore - ret -_strnmov ENDP - -else ; M_I386 - -include macros.asm - -q_stos MACRO ; as rep stosb but quicker, Uses edx - mov ah,al ;(2) Set up a 32 bit pattern. - mov edx,eax ;(2) - shl edx,16 ;(3) - or eax,edx ;(2) EAX has the 32 bit pattern. - - mov edx,ecx ;(2) Save the count of bytes. - shr ecx,2 ;(2) Number of dwords. - rep stosd ;(5 + 5n) - mov cl,3 ;(2) - and ecx,edx ;(2) Fill in the remaining odd bytes. - rep stosb ; Move last bytes if any - ENDM - -fix_es MACRO fix_cld ; Load ES if neaded - ife ESeqDS - mov ax,ds - mov es,ax - endif - ifnb <fix_cld> - cld - endif - ENDM - - ; - ; Move a memory area - ; Args: to,from,length - ; Acts as one byte was moved a-time from dst to source. - ; - - begcode bmove - public _bmove -_bmove proc near - fix_es 1 - mov edx,edi - mov eax,esi - mov edi,P-SIZEPTR[esp] ;p1 - mov esi,P[esp] ;p2 - mov ecx,P+SIZEPTR[esp] - rep movsb ; Not q_movs because overlap ? - mov esi,eax - mov edi,edx - ret -_bmove ENDP - endcode bmove - - ; - ; Move a alligned, not overlapped, by (long) divided memory area - ; Args: to,from,length - ; - - begcode bmove_align - public _bmove_align -_bmove_align proc near - fix_es 1 - mov edx,edi - mov eax,esi - mov edi,P-SIZEPTR[esp] ;to - mov esi,P[esp] ;from - mov ecx,P+SIZEPTR[esp] ;length - add cx,3 ;fix if not divisible with long - shr cx,2 - rep movsd - mov esi,eax - mov edi,edx - ret -_bmove_align ENDP - endcode bmove_align - - ; - ; Move a string from higher to lower - ; Arg from+1,to+1,length - ; - - begcode bmove_upp - public _bmove_upp -_bmove_upp proc near - fix_es - std ; Work downward - mov edx,edi - mov eax,esi - mov edi,P-SIZEPTR[esp] ;p1 - mov esi,P[esp] ;p2 - mov ecx,P+SIZEPTR[esp] - dec edi ; Don't move last arg - dec esi - rep movsb ; One byte a time because overlap ! - cld ; C compilator wants cld - mov esi,eax - mov edi,edx - ret -_bmove_upp ENDP - endcode bmove_upp - - ; - ; Append fillchars to string - ; Args: dest,len,fill - ; - - begcode strappend - public _strappend -_strappend proc near - push ebp - mov ebp,esp - fix_es 1 - push edi - mov edi,P[ebp] ; Memory pointer - mov ecx,P+SIZEPTR[ebp] ; Length - clr eax ; Find end of string - repne scasb - jnz sa_99 ; String to long, shorten it - movzx eax,byte ptr P+(2*SIZEPTR)[ebp] ; Fillchar - dec edi ; Point at end null - inc ecx ; rep made one dec for null-char - q_stos ; Store al in string -sa_99: mov BYTE PTR [edi],0 ; End of string - pop edi - pop ebp - ret -_strappend ENDP - endcode strappend - - ; - ; Find if string contains any char in another string - ; Arg: str,set - ; Ret: Pointer to first found char in str - ; - - begcode strcont - PUBLIC _strcont -_strcont proc near - push ebp - mov ebp,esp - fix_es 1 - mov edx,edi - push esi - mov esi,P[ebp] ; str - mov ecx,P+SIZEPTR[ebp] ; Set - clr ah ; For endtest - jmps sc_60 - -sc_10: scasb - jz sc_fo ; Found char -sc_20: cmp ah,[edi] ; Test if null - jnz sc_10 ; Not end of set yet - inc esi ; Next char in str -sc_60: mov edi,ecx ; edi = Set - mov al,[esi] ; Test if this char exist - and al,al - jnz sc_20 ; Not end of string - clr esi ; Return Null -sc_fo: mov eax,esi ; Char found here - mov edi,edx ; Restore - pop esi - pop ebp - ret -_strcont ENDP - endcode strcont - - ; - ; Found end of string - ; Arg: str - ; ret: Pointer to end null - ; - - begcode strend - public _strend -_strend proc near - fix_es 1 - mov edx,edi ; Save - mov edi,P-SIZEPTR[esp] ; str - clr eax ; Find end of string - mov ecx,eax - dec ecx ; ECX = -1 - repne scasb - mov eax,edi - dec eax - mov edi,edx ; Restore - ret -_strend endp - endcode strend - - ; - ; Make a string with len fill-chars and endnull - ; Args: dest,len,fill - ; Ret: dest+len - ; - - begcode strfill - public _strfill -_strfill proc near - push ebp - mov ebp,esp - fix_es 1 - push edi - mov edi,P[ebp] ; Memory pointer - mov ecx,P+SIZEPTR[ebp] ; Length - movzx eax,byte ptr P+(2*SIZEPTR)[ebp] ; Fill - q_stos - mov BYTE PTR [edi],0 ; End NULL - mov eax,edi ; End i DX:AX - pop edi - pop ebp - ret -_strfill endp - endcode strfill - - ; - ; Find a char in or end of a string - ; Arg: str,char - ; Ret: pointer to found char or NullS - ; - - begcode strcend - public _strcend -_strcend proc near - push ebp - mov ebp,esp - fix_es 1 - mov edx,edi - mov edi,P[ebp] ; str - mov ah,P+SIZEPTR[ebp] ; search - clr al ; for scasb to find end - -@@: cmp ah,[edi] - jz @F ; Found char - scasb - jnz @B ; Not end - dec edi ; Not found, point at end of string -@@: mov eax,edi - mov edi,edx ; Restore - pop ebp - ret -_strcend ENDP - endcode strcend - - ; - ; Test if string has a given suffix - ; - - begcode is_prefix - public _is_prefix -_is_prefix proc near - fix_es 1 - mov edx,edi ; Save edi - mov eax,esi ; Save esi - mov esi,P[esp] ; get suffix - mov edi,P-SIZEPTR[esp] ; s1 - push eax ; push esi - mov eax,1 ; Ok and zero-test -@@: cmp ah,[esi] - jz suf_ok ; End of string; found suffix - cmpsb ; Compare strings - jz @B ; Same, possible prefix - xor eax,eax ; Not suffix -suf_ok: pop esi - mov edi,edx - ret -_is_prefix endp - endcode _is_prefix - - ; - ; Find a substring in string - ; Arg: str,search - ; - - begcode strstr - public _strstr -_strstr proc near - push ebp - mov ebp,esp - fix_es 1 - push EDI - push ESI - mov esi,P[ebp] ; str - mov edi,P+SIZEPTR[ebp] ; search - mov ecx,edi - inc ecx ; ECX = search+1 - mov ah,[edi] ; AH = First char in search - jmps sf_10 - -sf_00: mov esi,edx ; si = Current str-pos -sf_10: mov al,[esi] ; Test if this char exist - and al,al - jz sf_90 ; End of string, didn't find search - inc esi - cmp al,ah - jnz sf_10 ; Didn't find first char, continue - mov edx,esi ; Save str-pos in EDX - mov edi,ecx -sf_20: cmp BYTE PTR [edi],0 - jz sf_fo ; Found substring - cmpsb - jz sf_20 ; Char ok - jmps sf_00 ; Next str-pos - -sf_90: mov edx,1 ; Return Null -sf_fo: mov eax,edx ; Char found here - dec eax ; Pointed one after - pop ESI - pop EDI - pop ebp - ret -_strstr endp - endcode strstr - - ; - ; Find a substring in string, return index - ; Arg: str,search - ; - - begcode strinstr - public _strinstr -_strinstr proc near - push ebp - mov ebp,esp - push P+SIZEPTR[ebp] ; search - push P[ebp] ; str - call _strstr - add esp,SIZEPTR*2 - or eax,eax - jz si_99 ; Not found, return NULL - sub eax,P[ebp] ; Pos from start - inc eax ; And first pos = 1 -si_99: pop ebp - ret -_strinstr endp - endcode strinstr - - ; - ; Make a string of len length from another string - ; Arg: dst,src,length - ; ret: end of dst - ; - - begcode strmake - public _strmake -_strmake proc near - push ebp - mov ebp,esp - fix_es 1 - push EDI - push ESI - mov edi,P[ebp] ; dst - mov esi,P+SIZEPTR[ebp] ; src - mov ecx,P+SIZEPTR*2[ebp] ; Length of memory-area - clr al ; For test of end-null - jcxz sm_90 ; Nothing to move, put zero at end. - -@@: cmp al,[esi] ; Next char to move - movsb ; move arg - jz sm_99 ; last char, we are ready - loop @B ; Continue moving -sm_90: mov BYTE PTR [edi],al ; Set end pos - inc edi ; Fix that di points at end null -sm_99: dec edi ; di points now at end null - mov eax,edi ; Ret value in DX:AX - pop ESI - pop EDI - pop ebp - ret -_strmake ENDP - endcode strmake - - ; - ; Find length of string with maxlength - ; arg: str,maxlength - ; ret: length - ; - - begcode strnlen - public _strnlen -_strnlen proc near - push ebp - mov ebp,esp - fix_es 1 - push edi - mov edi,P[ebp] ; Str - mov ecx,P+SIZEPTR[ebp] ; length - mov edx,edi ; Save str to calc length - jcxz sn_10 ; Length = 0 - clr al ; Find end of string - repne scasb ; Find strend or length - jnz sn_10 - dec edi ; DI points at last null -sn_10: mov eax,edi - sub eax,edx ; Ax = length - pop edi - pop ebp - ret -_strnlen ENDP - endcode strnlen - - ; - ; Move a string with max len chars - ; arg: dst,src,len - ; ret: pos to first null or dst+len - - begcode strnmov - public _strnmov -_strnmov PROC near - push ebp - mov ebp,esp - fix_es 1 - push EDI - push ESI - mov edi,P[ebp] ; dst - mov esi,P+SIZEPTR[ebp] ; src - mov ecx,P+(SIZEPTR*2)[ebp] ; length - jcxz snm_99 ; Nothing to do - clr al ; For test of end-null - -@@: cmp al,[esi] ; Next char to move - movsb ; move arg - jz snm_20 ; last char, fill with null - loop @B ; Continue moving - inc edi ; Point two after last -snm_20: dec edi ; Point at first null (or last+1) -snm_99: mov eax,edi ; Pointer at last char - pop ESI - pop EDI - pop ebp - ret -_strnmov ENDP - endcode strnmov - -; -; Zortech has this one in standard library -; - - begcode strmov - public _strmov -_strmov proc near - mov ecx,esi ; Save old esi and edi - mov edx,edi - mov esi,P[esp] ; get source pointer (s2) - mov edi,P-SIZEPTR[esp] ; EDI -> s1 - fix_es 1 -@@: mov al,[esi] - movsb ; move arg - and al,al - jnz @B ; Not last - mov eax,edi - dec eax - mov esi,ecx ; Restore args - mov edi,edx - ret -_strmov endp - endcode strmov - -endif ; M_I386 - - END diff --git a/strings/strlen.c b/strings/strlen.c deleted file mode 100644 index 1469dd096ee..00000000000 --- a/strings/strlen.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : strlen.c - Author : Richard A. O'Keefe. / Monty - Michael Widenius; ifdef MC68000 - Updated: 1986-11-30 - Defines: strlen() - - strlen(s) returns the number of characters in s, that is, the number - of non-NUL characters found before the closing NULEosCh. Note: some - non-standard C compilers for 32-bit machines take int to be 16 bits, - either put up with short strings or change int to long throughout - this package. Better yet, BOYCOTT such shoddy compilers. - Beware: the asm version works only if strlen(s) < 65536. -*/ - -#include "strings.h" - -#if VaxAsm - -size_t strlen(char *s) -{ - asm("locc $0,$65535,*4(ap)"); - asm("subl3 r0,$65535,r0"); -} - -#else -#if defined(MC68000) && defined(DS90) - -size_t strlen(char *s) -{ -asm(" movl 4(a7),a0 "); -asm(" movl a0,a1 "); -asm(".L4: tstb (a0)+ "); -asm(" jne .L4 "); -asm(" movl a0,d0 "); -asm(" subl a1,d0 "); -asm(" subql #1,d0 "); -} -#else - -size_t strlen(register char *s) -{ - register char *startpos; - - startpos = s; - while (*s++); - return ((size_t) (s-startpos-1)); -} - -#endif -#endif diff --git a/strings/strrchr.c b/strings/strrchr.c deleted file mode 100644 index cdb0479ef90..00000000000 --- a/strings/strrchr.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* File : strrchr.c - Author : Richard A. O'Keefe. - Updated: 10 April 1984 - Defines: strrchr(), rindex() - - strrchr(s, c) returns a pointer to the last place in s where c - occurs, or NullS if c does not occur in s. This function is called - rindex in V7 and 4.?bsd systems; while not ideal the name is clearer - than strrchr, so rindex remains in strings.h as a macro. NB: - strrchr looks for single characters, not for sets or strings. The - parameter 'c' is declared 'int' so it will go in a register; if your - C compiler is happy with register char change it to that. -*/ - -#include "strings.h" - -char *strrchr(register const char *s, register pchar c) -{ - reg3 char *t; - - t = NullS; - do if (*s == (char) c) t = (char*) s; while (*s++); - return (char*) t; -} diff --git a/strings/strxmov.asm b/strings/strxmov.asm deleted file mode 100644 index ad5d0dd3db0..00000000000 --- a/strings/strxmov.asm +++ /dev/null @@ -1,103 +0,0 @@ -; Copyright (C) 2000 MySQL AB -; -; This library is free software; you can redistribute it and/or -; modify it under the terms of the GNU Library General Public -; License as published by the Free Software Foundation; version 2 -; of the License. -; -; This library is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -; Library General Public License for more details. -; -; You should have received a copy of the GNU Library General Public -; License along with this library; if not, write to the Free -; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA - - TITLE Optimized strxmov for MSDOS / Intel 8086 - -ifndef M_I386 - .8087 - DOSSEG - .MODEL LARGE - .CODE - - PUBLIC _strxmov -_strxmov PROC - mov bx,sp - add bx,4 - push si - push di - mov cx,ds ; Save ds -ASSUME DS: NOTHING -ASSUME ES: NOTHING - les di,DWORD PTR ss:[bx] ; dst - jmp next_str - -start_str: - mov al,ds:[si] - movsb ; move arg - and al,al - jnz start_str ; Not last - dec di - -next_str: - add bx,4 - lds si,DWORD PTR ss:[bx] - mov ax,ds - or ax,si - jnz start_str - - mov byte ptr es:[di],0 ; Force end null (if no source) - mov ds,cx - mov ax,di ; Return ptr to last 0 - mov dx,es - pop di - pop si - ret -_strxmov ENDP - -else - -include macros.asm - - begcode strxmov - public _strxmov - -_strxmov PROC near -ASSUME DS: NOTHING -ASSUME ES: NOTHING - push EBP - mov EBP,ESP - mov EDX,EBX ; Save EBX - mov ECX,ESI ; Save ESI - push EDI - mov EDI,8[EBP] ; Get destination - lea EBX,8[EBP] ; Get adress to first source - 4 - xor al,al - jmp next_str - -start_str: movsb - cmp AL,[EDI-1] - jne start_str - dec EDI ; Don't copy last null - -next_str: add EBX,4 - mov ESI,[EBX] - or ESI,ESI - jne start_str - mov byte ptr [EDI],0 ; Force last null - - mov EAX,EDI ; Return ptr to null - pop EDI - mov ESI,ECX - mov EBX,EDX - pop EBP - ret -_strxmov endp - endcode strxmov - -endif - - END diff --git a/strings/udiv.c b/strings/udiv.c deleted file mode 100644 index 81ac01ee9c3..00000000000 --- a/strings/udiv.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Do udiv and urem if machine dosn't have it */ - -#include <my_global.h> -#include <math.h> - -unsigned long udiv(long unsigned int a, long unsigned int b) -{ - if (a < INT_MAX32 && b < INT_MAX32) - return (unsigned long) ((long) a / (long) b); - if (!(b & 1)) - return (unsigned long) ((long) (a >> 1) / (long) (b >> 1)); - - return (unsigned long) floor(((double) a / (double) b)); -} - -unsigned long urem(long unsigned int a, long unsigned int b) -{ - if (a < INT_MAX32 && b < INT_MAX32) - return (unsigned long) ((long) a % (long) b); - return a-udiv(a,b)*b; -} |