From b09eecbec7e7cca1c133ba5923f55713cf7a78cf Mon Sep 17 00:00:00 2001 From: Calvin Morrison Date: Fri, 17 Jan 2014 14:28:49 -0500 Subject: update makefile and make a src directory --- src/melting_range.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/strstream.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++ src/strstreamone.c | 43 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 153 insertions(+) create mode 100644 src/melting_range.c create mode 100644 src/strstream.c create mode 100644 src/strstreamone.c (limited to 'src') diff --git a/src/melting_range.c b/src/melting_range.c new file mode 100644 index 0000000..2c89195 --- /dev/null +++ b/src/melting_range.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include + +float melting_temperature(char *mer) { + + float a = 0; + float c = 0; + float g = 0; + float t = 0; + int i = 0; + + for(i = 0; i < strlen(mer); i++) { + switch(mer[i]) { + case 'A': + a++; + break; + case 'C': + c++; + break; + case 'G': + g++; + break; + case 'T': + t++; + break; + default: + break; + } + } + + if(strlen(mer) < 13) + return ((a+t) * 2) + ((c+g) * 4); + else + return 64.9 + 41.0*(g+c-16.4)/(a+t+g+c); +} + +int main(int argc, char **argv){ + + if(argc < 3) { + printf("please supply the min and max as stdargs"); + exit(EXIT_FAILURE); + } + float min = atof(argv[1]); + float max = atof(argv[2]); + + char mer[24] = { 0 }; + int count = 0; + + while(fscanf(stdin, "%s\t%d\n", &mer, &count) == 2) { + float temp = melting_temperature(mer); + if( (temp > min) && (temp < max) ) + printf("%s\t%d\n", mer, count); + } + + exit(EXIT_SUCCESS); +} diff --git a/src/strstream.c b/src/strstream.c new file mode 100644 index 0000000..f4a296e --- /dev/null +++ b/src/strstream.c @@ -0,0 +1,52 @@ +// find string in +#include +#include +#include +#include + +int main(int argc, char **argv){ + + char buffer[BUFSIZ] = { 0 }; + char *buf, *start; + ssize_t len = 0; + + int save_size = 0; + int cpy = 0; + + unsigned long long pos = 0; + unsigned long long cpy_size = 0; + + int i = 0; + + // get max argument length + for(i = 1; i < argc; i++) { + int len = strlen(argv[i]); + if(len > save_size) + save_size = len; + } + + cpy = save_size - 1; + cpy_size = BUFSIZ - cpy; + + buf = buffer; + start = buf + cpy; + + // copy our first cpy length into the first part of our buffer + len = fread(buffer, 1, cpy, stdin); + if(len == 0) + exit(EXIT_FAILURE); + + // read into "start" (buf + cpy) from stdin + while((len = fread(start, 1, cpy_size, stdin)) != 0) { + for(i = 1; i < argc; i++) { + char *p = buffer; + while((p = strstr(p, argv[i])) != NULL) { + printf("%d %llu\n", i - 1, pos + (p - buffer)); + p++; + } + } + memcpy(buffer, buffer + len, cpy); + pos = pos + len; + } + return 0; +} diff --git a/src/strstreamone.c b/src/strstreamone.c new file mode 100644 index 0000000..68da309 --- /dev/null +++ b/src/strstreamone.c @@ -0,0 +1,43 @@ +// find string in +#include +#include +#include +#include + +int main(int argc, char **argv){ + + char buffer[BUFSIZ] = { 0 }; + char *buf, *start; + ssize_t len = 0; + + int cpy = 0; + + unsigned long long pos = 0; + unsigned long long cpy_size = 0; + + // get max argument length + int save_size = strlen(argv[1]); + + cpy = save_size - 1; + cpy_size = BUFSIZ - cpy; + + buf = buffer; + start = buf + cpy; + + // copy our first cpy length into the first part of our buffer + len = fread(buffer, 1, cpy, stdin); + if(len == 0) + exit(EXIT_FAILURE); + + // read into "start" (buf + cpy) from stdin + while((len = fread(start, 1, cpy_size, stdin)) != 0) { + char *p = buffer; + while((p = strstr(p, argv[1])) != NULL) { + printf("%llu\n", pos + (p - buffer)); + p++; + } + memcpy(buffer, buffer + len, cpy); + pos = pos + len; + } + return 0; +} -- cgit v1.2.3