Mercurial > repos > dawe > srf2fastq
view 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 source
/* * 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