+++ /dev/null
-/*****************************************************************
- * SQUID - a library of functions for biological sequence analysis
- * Copyright (C) 1992-2002 Washington University School of Medicine
- *
- * This source code is freely distributed under the terms of the
- * GNU General Public License. See the files COPYRIGHT and LICENSE
- * for details.
- *****************************************************************/
-
-/*
- * translate.c - functions for translating nucleic acid sequence
- * created Tue Jan 12 11:27:29 1993, SRE
- *
- * RCS $Id: translate.c 217 2011-03-19 10:27:10Z andreas $ (Original squid RCS Id: translate.c,v 1.2 1998/10/09 18:07:16 eddy Exp)
- */
-
-#include <stdio.h>
-#include <string.h>
-#include "squid.h"
-
-
-#ifdef MEMDEBUG
-#include "dbmalloc.h"
-#endif
-
-
-
-/* Function: Translate(char *seq, char **code)
- *
- * Given a ptr to the start of a nucleic acid sequence,
- * and a genetic code, translate the sequence into
- * amino acid sequence.
- *
- * code is an array of 65 strings, representing
- * the translations of the 64 codons, arranged
- * in order AAA, AAC, AAG, AAU, ..., UUA, UUC, UUG, UUU.
- * '*' or '***' is used to represent termination
- * codons, usually. The final string, code[64],
- * is the code for an ambiguous amino acid.
- *
- * Because of the way space is allocated for the amino
- * acid sequence, the amino acid strings cannot be
- * longer than 3 letters each. (I don't foresee using
- * anything but the single- and triple- letter codes.)
- *
- * Returns a ptr to the translation string on success,
- * or NULL on failure.
- */
-char *
-Translate(char *seq, char **code)
-{
- int codon; /* index for codon */
- char *aaseq; /* RETURN: the translation */
- char *aaptr; /* ptr into aaseq */
- int i;
-
- if (seq == NULL)
- { squid_errno = SQERR_NODATA; return NULL; }
- if ((aaseq = (char *) calloc (strlen(seq) + 1, sizeof(char))) == NULL)
- Die("calloc failed");
-
- aaptr = aaseq;
- for (; *seq != '\0' && *(seq+1) != '\0' && *(seq+2) != '\0'; seq += 3)
- {
- /* calculate the lookup value for
- this codon */
- codon = 0;
- for (i = 0; i < 3; i++)
- {
- codon *= 4;
- switch (*(seq + i)) {
- case 'A': case 'a': break;
- case 'C': case 'c': codon += 1; break;
- case 'G': case 'g': codon += 2; break;
- case 'T': case 't': codon += 3; break;
- case 'U': case 'u': codon += 3; break;
- default: codon = 64; break;
- }
- if (codon == 64) break;
- }
-
- strcpy(aaptr, code[codon]);
- aaptr += strlen(code[codon]);
- }
- return aaseq;
-}