Mercurial > repos > dawe > srf2fastq
diff srf2fastq/io_lib-1.12.2/io_lib/strings.c @ 0:d901c9f41a6a default tip
Migrated tool version 1.0.1 from old tool shed archive to new tool shed repository
author | dawe |
---|---|
date | Tue, 07 Jun 2011 17:48:05 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/srf2fastq/io_lib-1.12.2/io_lib/strings.c Tue Jun 07 17:48:05 2011 -0400 @@ -0,0 +1,168 @@ +/* + * Copyright (c) Medical Research Council 1994. All rights reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation for any purpose is hereby granted without fee, provided that + * this copyright and notice appears in all copies. + * + * This file was written by James Bonfield, Simon Dear, Rodger Staden, + * as part of the Staden Package at the MRC Laboratory of Molecular + * Biology, Hills Road, Cambridge, CB2 2QH, United Kingdom. + * + * MRC disclaims all warranties with regard to this software. + */ + +#include "io_lib/misc.h" +#include <stdlib.h> +#include <ctype.h> +#include <string.h> +#include <sys/types.h> + +int fstrlen(char *f, int max_f) +{ + for (; max_f > 0 && (isspace(f[max_f-1]) || f[max_f-1]=='\0'); max_f--); + return max_f; +} + + + + + +void f2cstr(char *f, int max_f, char *c, int max_c) +{ + int i; + + i = min(fstrlen(f,max_f),max_c); + strncpy(c,f,i); + c[i]='\0'; +} + + +void c2fstr(char *c, int max_c, char *f, int max_f) +{ + int i; + i = min((int)strlen(c),max_f); + strncpy(f,c,i); + for( ; i<max_f; i++) f[i]=' '; + +} + + + + +char *mystrtok(char *s, char *ct) +/* +** When strtok isn't good enough +*/ +{ + char *this; + static char *look; + static int last; + + if (s == NULL) { + if (last) return NULL; + } else { + look = s; + last = 0; + } + this = look; + + for ( ; *look && strchr(ct,*look)==NULL; look++ ) ; + last = (! *look); + *look++ = '\0'; + + return this; +} + + +void str_tolower (char *s) +/* +** Convert string to lower case +*/ +{ + if (!s) return; + for ( ; *s ; s++ ) + if (isupper(*s)) + *s = tolower(*s); +} + +void str_toupper (char *s) +/* +** Convert string to upper case +*/ +{ + if (!s) return; + for ( ; *s ; s++ ) + if (islower(*s)) + *s = toupper(*s); +} + +#ifdef NOSTRSTR +/* +** My routines for nice sun ones. +*/ +char *strstr(char *cs, char *ct) +/* +** ANSI C has the function strstr(). +** +** strstr() returns a pointer to the first occurrence of the +** pattern string s2 in s1. For example, if s1 is "string +** thing" and s2 is "ing", strstr() returns "ing thing". If s2 +** does not occur in s1, strstr() returns NULL. +** +** It's not always implemented. Here's my cludge: +*/ +{ + int i; + int len_ct; + int end; + len_ct = strlen(ct); + end = strlen(cs) - len_ct; + for (i=0;i<=end;i++) + if (strncmp(&cs[i],ct,len_ct)==0) + return &cs[i]; + + return NULL; +} +#endif + +#ifdef NOSTRDUP +char *strdup(const char *str) +/* +** SunOS has a nice strdup() function. +** +** strdup() returns a pointer to a new string which is a dupli- +** cate of the string pointed to by s1. The space for the new +** string is obtained using malloc(3V). If the new string can- +** not be created, a NULL pointer is returned. +** +** Other ANSI C libraries don't have this. Here is my kludge: +*/ +{ + char *newstr; + int i = strlen(str); + + if ((newstr = (char *)malloc((unsigned int)(i+1))) == NULL) + return NULL; + + for (; i>=0; i--) + newstr[i] = str[i]; + + return newstr; +} +#endif + +#ifdef NOSTRCASECMP +int strcasecmp(const char *s1, const char *s2) { + while (tolower(*s1) == tolower(*s2)) { + /* If at the end of the string, then they're equal */ + if (0 == *s1) + return 0; + s1++; + s2++; + } + + /* One ended before the other, so return 1 or -1 */ + return (*(unsigned char *)s1) < (*(unsigned char *)s2) ? -1 : 1; +} +#endif