146 lines
3.1 KiB
C
146 lines
3.1 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "sequence.h"
|
|
#include "fasta_header_parser.h"
|
|
#include "fasta_header_handler.h"
|
|
|
|
|
|
char* char_header_add_field(char* header, char* name, char* value)
|
|
{
|
|
int lheader = strlen(header);
|
|
header = (char*) realloc(header, (lheader+strlen(name)+strlen(value)+4)*sizeof(char));
|
|
if (header[lheader-1] == '.')
|
|
{
|
|
strcpy(header+lheader-1,";");
|
|
strcpy(header+lheader," ");
|
|
strcpy(header+lheader+1,name);
|
|
strcpy(header+lheader+1+strlen(name),"=");
|
|
strcpy(header+lheader+1+strlen(name)+1,value);
|
|
}
|
|
else
|
|
{
|
|
strcpy(header+lheader,";");
|
|
strcpy(header+lheader+1," ");
|
|
strcpy(header+lheader+2,name);
|
|
strcpy(header+lheader+2+strlen(name),"=");
|
|
strcpy(header+lheader+2+strlen(name)+1,value);
|
|
}
|
|
return header;
|
|
}
|
|
|
|
|
|
char* fastaSeqPtr_header_add_field(fastaSeqPtr seq, char* name, char* value)
|
|
{
|
|
int lheader = strlen(seq->rawheader);
|
|
int i;
|
|
char* buffer;
|
|
char* rawheader;
|
|
|
|
rawheader = (char*) malloc((lheader+strlen(name)+strlen(value)+5)*sizeof(char));
|
|
strcpy(rawheader, seq->rawheader);
|
|
|
|
buffer = calloc(lheader, sizeof(char));
|
|
|
|
i=0;
|
|
|
|
while ((rawheader[i] != ' ') && (rawheader[i] != 0))
|
|
i++;
|
|
|
|
if (rawheader[i] == ' ')
|
|
strcpy(buffer, rawheader+i);
|
|
else
|
|
strcpy(rawheader+i, " ");
|
|
|
|
i++;
|
|
|
|
strcpy(rawheader+i,name);
|
|
strcpy(rawheader+i+strlen(name),"=");
|
|
strcpy(rawheader+i+strlen(name)+1,value);
|
|
strcpy(rawheader+i+strlen(name)+1+strlen(value),";");
|
|
strcpy(rawheader+i+strlen(name)+1+strlen(value)+1, buffer);
|
|
|
|
free(buffer);
|
|
|
|
return(rawheader);
|
|
}
|
|
|
|
|
|
element_from_header* table_header_add_field(element_from_header* header, char* name, char* value)
|
|
{
|
|
int nbf;
|
|
int i, j;
|
|
element_from_header* new_header;
|
|
|
|
nbf = atoi(header[0].value);
|
|
new_header = (element_from_header*) realloc(header, ((nbf+1)*sizeof(element_from_header)));
|
|
|
|
i=0;
|
|
while ((strcmp(new_header[i].name, "definition") != 0) && (i < nbf))
|
|
i++;
|
|
|
|
if (strcmp(new_header[i].name, "definition") == 0)
|
|
{
|
|
j = nbf-1;
|
|
while (strcmp(new_header[j].name, "definition") == 0)
|
|
{
|
|
new_header[j+1].name = new_header[j].name;
|
|
new_header[j+1].value = new_header[j].value;
|
|
j--;
|
|
}
|
|
}
|
|
|
|
new_header[i].name = (char*) malloc((1+strlen(name))*sizeof(char));
|
|
strcpy(new_header[i].name, name);
|
|
new_header[i].value = (char*) malloc((1+strlen(value))*sizeof(char));
|
|
strcpy(new_header[i].value, value);
|
|
sprintf(new_header[0].value, "%d", nbf+1);
|
|
|
|
return(new_header);
|
|
}
|
|
|
|
|
|
void free_header_table(element_from_header* header)
|
|
{
|
|
int i;
|
|
int nbf = atoi(header[0].value);
|
|
|
|
for (i = 0; i < nbf; i++)
|
|
{
|
|
free((header[i]).name);
|
|
free((header[i]).value);
|
|
}
|
|
free(header);
|
|
}
|
|
|
|
|
|
char* getItemFromHeader(char* name, element_from_header* header)
|
|
{
|
|
char* value = 0;
|
|
int nbf;
|
|
int i;
|
|
nbf = atoi(header[0].value);
|
|
for (i = 1; i < nbf; i++)
|
|
{
|
|
if (strcmp(header[i].name,name)==0)
|
|
value = header[i].value;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
|
|
void changeValue(element_from_header* header, char* name, char* newValue)
|
|
{
|
|
int i;
|
|
int nbf = atoi(header[0].value);
|
|
|
|
for (i = 1; i < nbf; i++)
|
|
{
|
|
if (strcmp(header[i].name, name)==0)
|
|
{
|
|
header[i].value = realloc(header[i].value, (1+strlen(newValue))*sizeof(char));
|
|
strcpy(header[i].value, newValue);
|
|
}
|
|
}
|
|
}
|