diff mafft/core/setdirection.c @ 18:e4d75f9efb90 draft

planemo upload commit b'4303231da9e48b2719b4429a29b72421d24310f4\n'-dirty
author nick
date Thu, 02 Feb 2017 18:44:31 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mafft/core/setdirection.c	Thu Feb 02 18:44:31 2017 -0500
@@ -0,0 +1,155 @@
+#include "mltaln.h"
+
+#define DEBUG 0
+
+char *directionfile;
+static int show_R_ = 1;
+
+void arguments( int argc, char *argv[] )
+{
+    int c;
+
+	inputfile = NULL;
+	directionfile = NULL;
+	show_R_ = 1;
+
+    while( --argc > 0 && (*++argv)[0] == '-' )
+	{
+        while ( (c = *++argv[0]) )
+		{
+            switch( c )
+            {
+				case 'd':
+					directionfile = *++argv;
+					fprintf( stderr, "directionfile = %s\n", directionfile );
+					--argc;
+					goto nextoption;
+				case 'i':
+					inputfile = *++argv;
+					fprintf( stderr, "inputfile = %s\n", inputfile );
+					--argc;
+					goto nextoption;
+				case 'r':
+					show_R_ = 0;
+					break;
+                default:
+                    fprintf( stderr, "illegal option %c\n", c );
+                    argc = 0;
+                    break;
+            }
+		}
+		nextoption:
+			;
+	}
+    if( argc != 0 ) 
+    {
+        fprintf( stderr, "options: Check source file !\n" );
+        exit( 1 );
+    }
+}
+
+
+
+int main( int argc, char *argv[] )
+{
+	FILE *infp;
+	FILE *difp;
+	int nlenmin;
+	char **name;
+	char **seq;
+	char *tmpseq;
+	char line[100];
+	int *nlen;
+	int i;
+
+	arguments( argc, argv );
+
+	if( inputfile )
+	{
+		infp = fopen( inputfile, "r" );
+		if( !infp )
+		{
+			fprintf( stderr, "Cannot open %s\n", inputfile );
+			exit( 1 );
+		}
+	}
+	else
+		infp = stdin;
+
+	if( directionfile )
+	{
+		difp = fopen( directionfile, "r" );
+		if( !difp )
+		{
+			fprintf( stderr, "Cannot open %s\n", directionfile );
+			exit( 1 );
+		}
+	}
+	else
+	{
+		fprintf( stderr, "Give directionfile!\n" );
+	}
+
+
+	dorp = NOTSPECIFIED;
+	getnumlen_casepreserve( infp, &nlenmin );
+
+	fprintf( stderr, "%d x %d - %d %c\n", njob, nlenmax, nlenmin, dorp );
+
+	seq = AllocateCharMtx( njob, nlenmax+1 );
+	tmpseq = AllocateCharVec( MAX( B, nlenmax )+1 );
+	name = AllocateCharMtx( njob, B+1 );
+	nlen = AllocateIntVec( njob );
+
+	readData_pointer_casepreserve( infp, name, nlen, seq );
+
+	for( i=0; i<njob; i++ )
+	{
+		fgets( line, 99, difp );
+		if( line[0] != '_' )
+		{
+			fprintf( stderr, "Format error!\n" );
+			exit( 1 );
+		}
+		if( line[1] == 'R' )
+		{
+			sreverse( tmpseq, seq[i] );
+			strcpy( seq[i], tmpseq );
+
+			strncpy( tmpseq, name[i]+1, B-3 );
+			tmpseq[B-3] = 0;
+			if( show_R_ )
+			{
+				strcpy( name[i]+1, "_R_" );
+				strcpy( name[i]+4, tmpseq );
+			}
+			else
+			{
+				strcpy( name[i]+1, tmpseq );
+			}
+		}
+		else if( line[1] == 'F' )
+		{
+			;
+		}
+		else
+		{
+			fprintf( stderr, "Format error!\n" );
+			exit( 1 );
+		}
+	}
+
+
+	for( i=0; i<njob; i++ )
+	{
+		fprintf( stdout, ">%s\n", name[i]+1 );
+		fprintf( stdout, "%s\n", seq[i] );
+	}
+
+	free( nlen );
+	FreeCharMtx( seq );
+	FreeCharMtx( name );
+	free( tmpseq );
+
+	return( 0 );
+}