The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include <string.h>
#include <stdlib.h>
#include <time.h>

#define COMPL(a, b) if((s[i] == a ^ s[len-i-1] == b)) RETVAL = 0;

MODULE = Bio::Tools::DNAGen		PACKAGE = Bio::Tools::DNAGen		

I32
is_selfcplm(s)
 char *s

 PROTOTYPE: $

 INIT:
  I32 i, len = strlen(s);

 CODE:
  RETVAL = 1;

  if(!(len%2)){
     for(i=0; i<len/2; i++)
	 COMPL('a', 't') else COMPL('t', 'a') else COMPL('c', 'g') else COMPL('g', 'c') 
  }
  else
   RETVAL = 0;

 OUTPUT:
	RETVAL


I32
gcratio(s)
 char *s

 PROTOTYPE: $

 INIT:
  I32 i, len=strlen(s), cnt = 0;

 CODE:
  for(i=0; i<len; i++)
     if(s[i] == 'g' || s[i] == 'c') cnt++;

  RETVAL = (I32)100*((double)cnt/(double)len);

 OUTPUT:
  RETVAL



I32
mt(s)
 char *s

 PROTOTYPE: $

 INIT:
  I32 i, len=strlen(s);
  I32 at_cnt=0, gc_cnt=0;

 CODE:
  // Tm = 2(A+T) + 4(G+C).

  for(i=0; i<len; i++){
     if(s[i] == 'g' || s[i] == 'c') gc_cnt++;
     else if(s[i] == 'a' || s[i] == 't') at_cnt++;
  }

  RETVAL = 2*at_cnt + 4*gc_cnt;

 OUTPUT:
  RETVAL