This is dstring2.c in view mode; [Download] [Up]
/* dstring v1.0.0 Dynamic string library * Copyright (c) 1994 Bill Bereza * * 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; either * version 2 of the License, or (at your option) any later version. * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. * * * To reach the author * * email: * berezaw@river.it.gvsu.edu ac368@leo.nmc.edu * * $Log: dstring2.c,v $ * Revision 1.6 94/12/12 14:44:25 berezaw * casting things to (char) where necessarry * * Revision 1.5 94/12/08 10:41:56 berezaw * dstrcmp functions now return signed long int * to handle almost any size of DCHAR * * Revision 1.4 94/12/03 00:09:53 berezaw * changed all uses of (char) to (DCHAR) * * Revision 1.3 94/12/02 11:50:44 berezaw * using DCHAR definition * * Revision 1.2 94/11/28 12:04:05 berezaw * *** empty log message *** * * * @(#)dstring2.c 1.0 (Bill Bereza) 22/15/94 * $Header: /Users/berezaw/src/dynstr/RCS/dstring2.c,v 1.6 94/12/12 14:44:25 berezaw Exp $ */ #include "dstring.h" signed long int dstrcmp(DSTRING *ds1, DSTRING *ds2) { struct _dchar *ch1, *ch2; if((ds1->_first==NULL) || (ds2->_first==NULL)) return (ds1->_first==NULL) ? ((ds2->_first==NULL) ? 0 : ds2->_first->_character) : ds1->_first->_character; ch1=ds1->_first; ch2=ds2->_first; while((ch1->_character) == (ch2->_character)) { if(ch2->_next == NULL) break; if(ch2->_next == NULL) break; ch1=ch1->_next; ch2=ch2->_next; } return (ch1->_character)-(ch2->_character); } signed long int dstrncmp(DSTRING *ds1, DSTRING *ds2, size_t n) { struct _dchar *ch1, *ch2; if((ds1->_first==NULL) || (ds2->_first==NULL)) return (ds1->_first==NULL) ? ((ds2->_first==NULL) ? 0 : ds2->_first->_character) : ds1->_first->_character; ch1=ds1->_first; ch2=ds2->_first; while(((ch1->_character) == (ch2->_character)) && n) { n--; if(ch2->_next == NULL) break; if(ch2->_next == NULL) break; ch1=(n) ? ch1->_next : ch1; ch2=(n) ? ch2->_next : ch2; } return (ch1->_character)-(ch2->_character); } signed long int dstrarrcmp(DSTRING *ds1, DCHAR *ds2) { struct _dchar *ch1; if((ds1->_first==NULL) || !*ds2) return (ds1->_first==NULL) ? (*ds2 ? *ds2 : 0) : ds1->_first->_character; ch1=ds1->_first; while((ch1->_character) == (*ds2)) { if(ch1->_next == NULL) break; if(!*ds2) break; ch1=ch1->_next; ds2++; } return (ch1->_character)-(*ds2); } signed long int dstrarrncmp(DSTRING *ds1, DCHAR *ds2, size_t n) { struct _dchar *ch1; if((ds1->_first==NULL) || !*ds2) return (ds1->_first==NULL) ? (*ds2 ? *ds2 : 0) : ds1->_first->_character; ch1=ds1->_first; while(((ch1->_character) == (*ds2)) && n) { n--; if(ch1->_next == NULL) break; if(!*ds2) break; ch1=(n) ? ch1->_next : ch1; ds2+=(n) ? 1 : 0; } return (ch1->_character)-(*ds2); } DSTRING *dstrchr(DSTRING *dstr, DCHAR ch) { DSTRING *nstr=NULL; if(dstr==NULL) return NULL; if(!dstrlen(dstr)) return NULL; if((nstr=initdstr()) == NULL) return NULL; nstr->_last=dstr->_last; nstr->_length=dstr->_length; if((nstr->_first=dstr->_first) == NULL) return NULL; for(;nstr->_first->_character != ch;nstr->_length--) if(nstr->_first->_next == NULL) return NULL; else nstr->_first=nstr->_first->_next; return nstr; } DSTRING *dstrrchr(DSTRING *dstr, DCHAR ch) { DSTRING *nstr=NULL; struct _dchar *ind; size_t len; if(dstr==NULL) return NULL; if(!dstrlen(dstr)) return NULL; if((nstr=initdstr()) == NULL) return NULL; nstr->_last=dstr->_last; len=nstr->_length=dstr->_length; nstr->_first=NULL; for(ind=dstr->_first;ind != NULL;ind=ind->_next) { if(ind->_character == ch) { nstr->_first=ind; nstr->_length=len; } len--; } if(nstr->_first != NULL) return nstr; else return NULL; } size_t dstrarrspn(DSTRING *dstr, DCHAR *chlist) { size_t spn=0; struct _dchar *ind; if((dstr==NULL) || (chlist==NULL)) return 0; for(ind=dstr->_first;ind!=NULL;ind=ind->_next) if(strchr((char *)chlist, (char)ind->_character)!=NULL) spn++; else return spn; return spn; } size_t dstrarrcspn(DSTRING *dstr, DCHAR *chlist) { size_t spn=0; struct _dchar *ind; if((dstr==NULL) || (chlist==NULL)) return 0; for(ind=dstr->_first;ind!=NULL;ind=ind->_next) if(strchr((char *)chlist, (char)ind->_character)==NULL) spn++; else return spn; return spn; } size_t dstrspn(DSTRING *dstr, DSTRING *chlist) { DSTRING *tstr; size_t spn=0; struct _dchar *ind; if((dstr==NULL) || (chlist==NULL)) return 0; for(ind=dstr->_first;ind!=NULL;ind=ind->_next) if((tstr=dstrchr(chlist, ind->_character))!=NULL) { free(tstr); spn++; } else return spn; return spn; } size_t dstrcspn(DSTRING *dstr, DSTRING *chlist) { DSTRING *tstr; size_t spn=0; struct _dchar *ind; if((dstr==NULL) || (chlist==NULL)) return 0; for(ind=dstr->_first;ind!=NULL;ind=ind->_next) if((tstr=dstrchr(chlist, ind->_character))==NULL) spn++; else { free(tstr); return spn; } return spn; } DSTRING *dstrpbrk(DSTRING *dstr, DSTRING *ch) { DSTRING *tstr=NULL; DSTRING *nstr=NULL; if((dstr==NULL) || (ch==NULL)) return NULL; if(!dstrlen(dstr)) return NULL; if((nstr=initdstr()) == NULL) return NULL; nstr->_last=dstr->_last; nstr->_length=dstr->_length; if((nstr->_first=dstr->_first) == NULL) return NULL; for(;(tstr=dstrchr(ch, nstr->_first->_character)) == NULL;nstr->_length--) if(nstr->_first->_next == NULL) return NULL; else nstr->_first=nstr->_first->_next; if(tstr!=NULL) free(tstr); return nstr; } DSTRING *dstrarrpbrk(DSTRING *dstr, DCHAR *ch) { DSTRING *nstr=NULL; if((dstr==NULL) || (ch==NULL)) return NULL; if(!dstrlen(dstr)) return NULL; if((nstr=initdstr()) == NULL) return NULL; nstr->_last=dstr->_last; nstr->_length=dstr->_length; if((nstr->_first=dstr->_first) == NULL) return NULL; for(;strchr((char *)ch, (char)nstr->_first->_character) == NULL;nstr->_length--) if(nstr->_first->_next == NULL) return NULL; else nstr->_first=nstr->_first->_next; return nstr; } DSTRING *dstrarrstr(DSTRING *dstr, DCHAR *cs) { DSTRING *nstr=NULL, *tstr; struct _dchar *ind; size_t loop, len; if((dstr==NULL) || (cs==NULL)) return NULL; tstr=initdstr(); tstr->_first=dstr->_first; tstr->_last=dstr->_last; tstr->_length=dstr->_length; len=strlen(cs); while(1==1) { /* This loop will only exit when it finds * or when it fails */ if((nstr=dstrchr(tstr, *cs)) == NULL) return NULL; free(tstr); ind=nstr->_first; for(loop=0;len;loop++) { if(cs[loop]!=ind->_character) break; if(ind->_next==NULL) break; else ind=ind->_next; } if(loop==len) return nstr; tstr=nstr; tstr->_first=nstr->_first->_next; tstr->_length--; } } DSTRING *dstrstr(DSTRING *dstr, DSTRING *cs) { DSTRING *nstr=NULL, *tstr; struct _dchar *ind, *sech; if((dstr==NULL) || (cs==NULL)) return NULL; tstr=initdstr(); tstr->_first=dstr->_first; tstr->_last=dstr->_last; tstr->_length=dstr->_length; if((!dstrlen(cs)) || (!dstrlen(dstr))) return NULL; while(1==1) { /* This loop will only exit when it finds * or when it fails */ if((nstr=dstrchr(tstr, cs->_first->_character)) == NULL) return NULL; /* printf("dstrchr success:[%c]\n",cs->_first->_character); */ free(tstr); ind=nstr->_first; for(sech=cs->_first;sech!=NULL;sech=sech->_next) { if(sech->_character!=ind->_character) break; if(ind->_next==NULL) break; else ind=ind->_next; } if(sech==NULL) return nstr; tstr=nstr; tstr->_first=nstr->_first->_next; tstr->_length--; } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.