[med-svn] r995 - in trunk/packages/kalign/trunk: . debian

charles-guest at alioth.debian.org charles-guest at alioth.debian.org
Sun Dec 23 22:10:59 UTC 2007


Author: charles-guest
Date: 2007-12-23 22:10:58 +0000 (Sun, 23 Dec 2007)
New Revision: 995

Removed:
   trunk/packages/kalign/trunk/COPYING
   trunk/packages/kalign/trunk/Makefile.in
   trunk/packages/kalign/trunk/README
   trunk/packages/kalign/trunk/config.h.in
   trunk/packages/kalign/trunk/configure
   trunk/packages/kalign/trunk/kalign2.h
   trunk/packages/kalign/trunk/kalign2_advanced_gaps.c
   trunk/packages/kalign/trunk/kalign2_advanced_gaps.h
   trunk/packages/kalign/trunk/kalign2_alignment_types.c
   trunk/packages/kalign/trunk/kalign2_conservation.c
   trunk/packages/kalign/trunk/kalign2_distance_calculation.c
   trunk/packages/kalign/trunk/kalign2_dp.c
   trunk/packages/kalign/trunk/kalign2_feature.c
   trunk/packages/kalign/trunk/kalign2_feature.h
   trunk/packages/kalign/trunk/kalign2_hirschberg.c
   trunk/packages/kalign/trunk/kalign2_hirschberg.h
   trunk/packages/kalign/trunk/kalign2_hirschberg_dna.c
   trunk/packages/kalign/trunk/kalign2_hirschberg_dna.h
   trunk/packages/kalign/trunk/kalign2_hirschberg_large.c
   trunk/packages/kalign/trunk/kalign2_hirschberg_large.h
   trunk/packages/kalign/trunk/kalign2_inferface.c
   trunk/packages/kalign/trunk/kalign2_input.c
   trunk/packages/kalign/trunk/kalign2_input.h
   trunk/packages/kalign/trunk/kalign2_main.c
   trunk/packages/kalign/trunk/kalign2_mem.c
   trunk/packages/kalign/trunk/kalign2_misc.c
   trunk/packages/kalign/trunk/kalign2_output.c
   trunk/packages/kalign/trunk/kalign2_output.h
   trunk/packages/kalign/trunk/kalign2_profile.c
   trunk/packages/kalign/trunk/kalign2_profile_alignment.c
   trunk/packages/kalign/trunk/kalign2_profile_alignment.h
   trunk/packages/kalign/trunk/kalign2_simple_gaps.c
   trunk/packages/kalign/trunk/kalign2_stats.c
   trunk/packages/kalign/trunk/kalign2_string_matching.c
   trunk/packages/kalign/trunk/kalign2_tree.c
   trunk/packages/kalign/trunk/kalign2_upgma.c
Modified:
   trunk/packages/kalign/trunk/debian/
Log:
Switching to mergeWithUpstream mode

Deleted: trunk/packages/kalign/trunk/COPYING
===================================================================
--- trunk/packages/kalign/trunk/COPYING	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/COPYING	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,340 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.

Deleted: trunk/packages/kalign/trunk/Makefile.in
===================================================================
--- trunk/packages/kalign/trunk/Makefile.in	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/Makefile.in	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,40 +0,0 @@
-PREFIX			= /usr/local/bin
-TEST				= test/
-CC					= gcc  
-CFLAGS			= -O9  -Wall 
-DEBUGFLAGS		= -ggdb -Wall 
-
-SOURCES			= kalign2_distance_calculation.c kalign2_dp.c kalign2_input.c kalign2_main.c kalign2_mem.c kalign2_inferface.c kalign2_misc.c kalign2_tree.c  kalign2_profile.c kalign2_alignment_types.c kalign2_feature.c kalign2_hirschberg.c  kalign2_advanced_gaps.c kalign2_hirschberg_dna.c  kalign2_output.c kalign2_string_matching.c kalign2_profile_alignment.c 
-PROGS				= kalign
-DEBUGPROGS	= kalign_debug
-
-
-OBJECTS			= $(SOURCES:.c=.o)
-DEBUGOBJECTS	= $(SOURCES:.c=_debug.o)
-
-
-.PHONY: clean
-
-all: $(OBJECTS)
-	$(CC) $(CFLAGS) $(OBJECTS) -o $(PROGS)
-	
-%.o:	%.c
-	$(CC) $(CFLAGS) -c $<
-	
-debug: $(DEBUGOBJECTS)
-	$(CC) $(DEBUGFLAGS) $(DEBUGOBJECTS) -o $(DEBUGPROGS)	
-
-%_debug.o:	%.c
-	$(CC) $(DEBUGFLAGS) -c $< -o $@
-
-
-install:
-	cp $(PROGS) /usr/local/bin/
-	
-clean: 
-	rm -f $(PROGS) $(OBJECTS)
-	rm -f $(DEBUGPROGS) $(DEBUGOBJECTS)
-	rm -f config.status config.log config.h Makefile
-	rm -f test*
-	rm -f *~
-	

Deleted: trunk/packages/kalign/trunk/README
===================================================================
--- trunk/packages/kalign/trunk/README	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/README	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,48 +0,0 @@
------------------------------------------------------------------------
-  Kalign version 2.03, Copyright (C) 2006 Timo Lassmann
-
-  http://msa.cgb.ki.se/
-  timolassmann at gmail.com
-
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-  
-	A copy of this license is in the COPYING file.
------------------------------------------------------------------------
-Installation:
-
-% ./configure 
-% make
-
-and as root:
-
-% make install
-
-
-Usage:
-
-        kalign [Options]  infile.fasta outfile.fasta
-        
-        or:
-        
-        kalign [Options] -i infile.fasta -o outfile.fasta
-        
-        or:
-        
-        kalign [Options] < infile.fasta > outfile.fasta
-
-        Options:
-        
-	type: kalign -h 
-	
\ No newline at end of file

Deleted: trunk/packages/kalign/trunk/config.h.in
===================================================================
--- trunk/packages/kalign/trunk/config.h.in	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/config.h.in	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,66 +0,0 @@
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to 1 if you have the <getopt.h> header file. */
-#undef HAVE_GETOPT_H
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
-   to 0 otherwise. */
-#undef HAVE_MALLOC
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if your system has a GNU libc compatible `realloc' function,
-   and to 0 otherwise. */
-#undef HAVE_REALLOC
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define to rpl_malloc if the replacement function should be used. */
-#undef malloc
-
-/* Define to rpl_realloc if the replacement function should be used. */
-#undef realloc

Deleted: trunk/packages/kalign/trunk/configure
===================================================================
--- trunk/packages/kalign/trunk/configure	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/configure	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,4565 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for FULL-PACKAGE-NAME VERSION.
-#
-# Report bugs to <BUG-REPORT-ADDRESS>.
-#
-# Copyright (C) 2003 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-exec 6>&1
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_config_libobj_dir=.
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete.  It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
-# Identity of this package.
-PACKAGE_NAME='FULL-PACKAGE-NAME'
-PACKAGE_TARNAME='full-package-name'
-PACKAGE_VERSION='VERSION'
-PACKAGE_STRING='FULL-PACKAGE-NAME VERSION'
-PACKAGE_BUGREPORT='BUG-REPORT-ADDRESS'
-
-ac_unique_file="kalign2_hirschberg.h"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#if STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# if HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#if HAVE_STRING_H
-# if !STDC_HEADERS && HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#if HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#else
-# if HAVE_STDINT_H
-#  include <stdint.h>
-# endif
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP LIBOBJS LTLIBOBJS'
-ac_subst_files=''
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-ac_prev=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval "$ac_prev=\$ac_option"
-    ac_prev=
-    continue
-  fi
-
-  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_option in
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
-  | --da=*)
-    datadir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    eval "enable_$ac_feature=no" ;;
-
-  -enable-* | --enable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "enable_$ac_feature='$ac_optarg'" ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst \
-  | --locals | --local | --loca | --loc | --lo)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
-  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "with_$ac_package='$ac_optarg'" ;;
-
-  -without-* | --without-*)
-    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/-/_/g'`
-    eval "with_$ac_package=no" ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; }
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-   { (exit 1); exit 1; }; }
-    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
-    eval "$ac_envvar='$ac_optarg'"
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  { echo "$as_me: error: missing argument to $ac_option" >&2
-   { (exit 1); exit 1; }; }
-fi
-
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
-	      localstatedir libdir includedir oldincludedir infodir mandir
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then its parent.
-  ac_confdir=`(dirname "$0") 2>/dev/null ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$0" : 'X\(//\)[^/]' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$0" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r $srcdir/$ac_unique_file; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
-  if test "$ac_srcdir_defaulted" = yes; then
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
-   { (exit 1); exit 1; }; }
-  else
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-   { (exit 1); exit 1; }; }
-  fi
-fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
-  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
-   { (exit 1); exit 1; }; }
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_CPP_set=${CPP+set}
-ac_env_CPP_value=$CPP
-ac_cv_env_CPP_set=${CPP+set}
-ac_cv_env_CPP_value=$CPP
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures FULL-PACKAGE-NAME VERSION to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-_ACEOF
-
-  cat <<_ACEOF
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-			  [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-			  [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR           user executables [EPREFIX/bin]
-  --sbindir=DIR          system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR       program executables [EPREFIX/libexec]
-  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
-  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
-  --libdir=DIR           object code libraries [EPREFIX/lib]
-  --includedir=DIR       C header files [PREFIX/include]
-  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
-  --infodir=DIR          info documentation [PREFIX/info]
-  --mandir=DIR           man documentation [PREFIX/man]
-_ACEOF
-
-  cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-  case $ac_init_help in
-     short | recursive ) echo "Configuration of FULL-PACKAGE-NAME VERSION:";;
-   esac
-  cat <<\_ACEOF
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
-              headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to <BUG-REPORT-ADDRESS>.
-_ACEOF
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  ac_popdir=`pwd`
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d $ac_dir || continue
-    ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
-
-    cd $ac_dir
-    # Check for guested configure; otherwise get Cygnus style configure.
-    if test -f $ac_srcdir/configure.gnu; then
-      echo
-      $SHELL $ac_srcdir/configure.gnu  --help=recursive
-    elif test -f $ac_srcdir/configure; then
-      echo
-      $SHELL $ac_srcdir/configure  --help=recursive
-    elif test -f $ac_srcdir/configure.ac ||
-	   test -f $ac_srcdir/configure.in; then
-      echo
-      $ac_configure --help
-    else
-      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi
-    cd $ac_popdir
-  done
-fi
-
-test -n "$ac_init_help" && exit 0
-if $ac_init_version; then
-  cat <<\_ACEOF
-FULL-PACKAGE-NAME configure VERSION
-generated by GNU Autoconf 2.59
-
-Copyright (C) 2003 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
-  exit 0
-fi
-exec 5>config.log
-cat >&5 <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by FULL-PACKAGE-NAME $as_me VERSION, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  echo "PATH: $as_dir"
-done
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_sep=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
-    2)
-      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-	ac_must_keep_next=false # Got value, back to normal.
-      else
-	case $ac_arg in
-	  *=* | --config-cache | -C | -disable-* | --disable-* \
-	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-	  | -with-* | --with-* | -without-* | --without-* | --x)
-	    case "$ac_configure_args0 " in
-	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-	    esac
-	    ;;
-	  -* ) ac_must_keep_next=true ;;
-	esac
-      fi
-      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
-      # Get rid of the leading space.
-      ac_sep=" "
-      ;;
-    esac
-  done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-{
-  (set) 2>&1 |
-    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
-      sed -n \
-	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
-      ;;
-    *)
-      sed -n \
-	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-      ;;
-    esac;
-}
-    echo
-
-    cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=$`echo $ac_var`
-      echo "$ac_var='"'"'$ac_val'"'"'"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
-_ASBOX
-      echo
-      for ac_var in $ac_subst_files
-      do
-	eval ac_val=$`echo $ac_var`
-	echo "$ac_var='"'"'$ac_val'"'"'"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
-      echo
-      sed "/^$/d" confdefs.h | sort
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      echo "$as_me: caught signal $ac_signal"
-    echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core &&
-  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-     ' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo >confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
-  if test "x$prefix" != xNONE; then
-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-  else
-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-  fi
-fi
-for ac_site_file in $CONFIG_SITE; do
-  if test -r "$ac_site_file"; then
-    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special
-  # files actually), so we avoid doing that.
-  if test -f "$cache_file"; then
-    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . $cache_file;;
-      *)                      . ./$cache_file;;
-    esac
-  fi
-else
-  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
-	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
-  eval ac_new_val="\$ac_env_${ac_var}_value"
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
-echo "$as_me:   former value:  $ac_old_val" >&2;}
-	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
-echo "$as_me:   current value: $ac_new_val" >&2;}
-	ac_cache_corrupted=:
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-          ac_config_headers="$ac_config_headers config.h"
-
-
-# Checks for programs.
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CC" && break
-done
-
-  CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
-  (eval $ac_link_default) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # Find the output, starting from the most likely.  This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-
-# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
-	;;
-    conftest.$ac_ext )
-	# This is the source file.
-	;;
-    [ab].out )
-	# We found the default executable, but exeext='' is most
-	# certainly right.
-	break;;
-    *.* )
-	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	# FIXME: I believe we export ac_cv_exeext for Libtool,
-	# but it would be cool to find out if it's true.  Does anybody
-	# maintain Libtool? --akim.
-	export ac_cv_exeext
-	break;;
-    * )
-	break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-    fi
-  fi
-fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  export ac_cv_exeext
-	  break;;
-    * ) break;;
-  esac
-done
-else
-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
-if test "${ac_cv_objext+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std1 is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std1.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_stdc=$ac_arg
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
-  x|xno)
-    echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
-  *)
-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-    CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# Checks for libraries.
-
-# Checks for header files.
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
-else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-    then ac_cv_prog_egrep='grep -E'
-    else ac_cv_prog_egrep='egrep'
-    fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
-
-
-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_header_stdc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_stdc=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
-  :
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ctype.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-		   (('a' <= (c) && (c) <= 'i') \
-		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      exit(2);
-  exit (0);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-		  inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-
-for ac_header in stdlib.h string.h unistd.h getopt.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
-## --------------------------------- ##
-## Report this to BUG-REPORT-ADDRESS ##
-## --------------------------------- ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-# Checks for typedefs, structures, and compiler characteristics.
-echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
-echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
-if test "${ac_cv_c_const+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-/* FIXME: Include the comments suggested by Paul. */
-#ifndef __cplusplus
-  /* Ultrix mips cc rejects this.  */
-  typedef int charset[2];
-  const charset x;
-  /* SunOS 4.1.1 cc rejects this.  */
-  char const *const *ccp;
-  char **p;
-  /* NEC SVR4.0.2 mips cc rejects this.  */
-  struct point {int x, y;};
-  static struct point const zero = {0,0};
-  /* AIX XL C 1.02.0.0 rejects this.
-     It does not let you subtract one const X* pointer from another in
-     an arm of an if-expression whose if-part is not a constant
-     expression */
-  const char *g = "string";
-  ccp = &g + (g ? g-g : 0);
-  /* HPUX 7.0 cc rejects these. */
-  ++ccp;
-  p = (char**) ccp;
-  ccp = (char const *const *) p;
-  { /* SCO 3.2v4 cc rejects this.  */
-    char *t;
-    char const *s = 0 ? (char *) 0 : (char const *) 0;
-
-    *t++ = 0;
-  }
-  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
-    int x[] = {25, 17};
-    const int *foo = &x[0];
-    ++foo;
-  }
-  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
-    typedef const int *iptr;
-    iptr p = 0;
-    ++p;
-  }
-  { /* AIX XL C 1.02.0.0 rejects this saying
-       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
-    struct s { int j; const int *ap[3]; };
-    struct s *b; b->j = 5;
-  }
-  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
-    const int foo = 10;
-  }
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_c_const=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_c_const=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
-echo "${ECHO_T}$ac_cv_c_const" >&6
-if test $ac_cv_c_const = no; then
-
-cat >>confdefs.h <<\_ACEOF
-#define const
-_ACEOF
-
-fi
-
-
-# Checks for library functions.
-
-for ac_header in stdlib.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
-## --------------------------------- ##
-## Report this to BUG-REPORT-ADDRESS ##
-## --------------------------------- ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5
-echo $ECHO_N "checking for GNU libc compatible malloc... $ECHO_C" >&6
-if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "$cross_compiling" = yes; then
-  ac_cv_func_malloc_0_nonnull=no
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#if STDC_HEADERS || HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-char *malloc ();
-#endif
-
-int
-main ()
-{
-exit (malloc (0) ? 0 : 1);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_malloc_0_nonnull=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_malloc_0_nonnull=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5
-echo "${ECHO_T}$ac_cv_func_malloc_0_nonnull" >&6
-if test $ac_cv_func_malloc_0_nonnull = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MALLOC 1
-_ACEOF
-
-else
-  cat >>confdefs.h <<\_ACEOF
-#define HAVE_MALLOC 0
-_ACEOF
-
-   case $LIBOBJS in
-    "malloc.$ac_objext"   | \
-  *" malloc.$ac_objext"   | \
-    "malloc.$ac_objext "* | \
-  *" malloc.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;;
-esac
-
-
-cat >>confdefs.h <<\_ACEOF
-#define malloc rpl_malloc
-_ACEOF
-
-fi
-
-
-
-
-for ac_header in stdlib.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
-## --------------------------------- ##
-## Report this to BUG-REPORT-ADDRESS ##
-## --------------------------------- ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-echo "$as_me:$LINENO: checking for GNU libc compatible realloc" >&5
-echo $ECHO_N "checking for GNU libc compatible realloc... $ECHO_C" >&6
-if test "${ac_cv_func_realloc_0_nonnull+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "$cross_compiling" = yes; then
-  ac_cv_func_realloc_0_nonnull=no
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#if STDC_HEADERS || HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-char *realloc ();
-#endif
-
-int
-main ()
-{
-exit (realloc (0, 0) ? 0 : 1);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_realloc_0_nonnull=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_realloc_0_nonnull=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_realloc_0_nonnull" >&5
-echo "${ECHO_T}$ac_cv_func_realloc_0_nonnull" >&6
-if test $ac_cv_func_realloc_0_nonnull = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_REALLOC 1
-_ACEOF
-
-else
-  cat >>confdefs.h <<\_ACEOF
-#define HAVE_REALLOC 0
-_ACEOF
-
-   case $LIBOBJS in
-    "realloc.$ac_objext"   | \
-  *" realloc.$ac_objext"   | \
-    "realloc.$ac_objext "* | \
-  *" realloc.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS realloc.$ac_objext" ;;
-esac
-
-
-cat >>confdefs.h <<\_ACEOF
-#define realloc rpl_realloc
-_ACEOF
-
-fi
-
-
-
-
-          ac_config_files="$ac_config_files Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-{
-  (set) 2>&1 |
-    case `(ac_space=' '; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
-      # `set' does not quote correctly, so add quotes (double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \).
-      sed -n \
-	"s/'/'\\\\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;;
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n \
-	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-      ;;
-    esac;
-} |
-  sed '
-     t clear
-     : clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     : end' >>confcache
-if diff $cache_file confcache >/dev/null 2>&1; then :; else
-  if test -w $cache_file; then
-    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
-    cat confcache >$cache_file
-  else
-    echo "not updating unwritable cache $cache_file"
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[	 ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[	 ]*$//;
-}'
-fi
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_i=`echo "$ac_i" |
-	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
-  # 2. Add them.
-  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
-  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-exec 6>&1
-
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.  Logging --version etc. is OK.
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by FULL-PACKAGE-NAME $as_me VERSION, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
-_ACEOF
-
-# Files that config.status was made for.
-if test -n "$ac_config_files"; then
-  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
-  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_links"; then
-  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
-  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number, then exit
-  -q, --quiet      do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-  --file=FILE[:TEMPLATE]
-		   instantiate the configuration file FILE
-  --header=FILE[:TEMPLATE]
-		   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to <bug-autoconf at gnu.org>."
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-ac_cs_version="\\
-FULL-PACKAGE-NAME config.status VERSION
-configured by $0, generated by GNU Autoconf 2.59,
-  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2003 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=*)
-    ac_option=`expr "x$1" : 'x\([^=]*\)='`
-    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  -*)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  *) # This is not an option, so the user has probably given explicit
-     # arguments.
-     ac_option=$1
-     ac_need_defaults=false;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --vers* | -V )
-    echo "$ac_cs_version"; exit 0 ;;
-  --he | --h)
-    # Conflict between --help and --header
-    { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; };;
-  --help | --hel | -h )
-    echo "$ac_cs_usage"; exit 0 ;;
-  --debug | --d* | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
-    ac_need_defaults=false;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; } ;;
-
-  *) ac_config_targets="$ac_config_targets $1" ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-if \$ac_cs_recheck; then
-  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
-_ACEOF
-
-
-
-
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_config_target in $ac_config_targets
-do
-  case "$ac_config_target" in
-  # Handling of arguments.
-  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
-  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
-}  ||
-{
-  tmp=./confstat$$-$RANDOM
-  (umask 077 && mkdir $tmp)
-} ||
-{
-   echo "$me: cannot create a temporary directory in ." >&2
-   { (exit 1); exit 1; }
-}
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-
-#
-# CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
-  # Protect against being on the right side of a sed subst in config.status.
-  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
-   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s, at SHELL@,$SHELL,;t t
-s, at PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s, at PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s, at PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s, at PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s, at PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s, at PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s, at exec_prefix@,$exec_prefix,;t t
-s, at prefix@,$prefix,;t t
-s, at program_transform_name@,$program_transform_name,;t t
-s, at bindir@,$bindir,;t t
-s, at sbindir@,$sbindir,;t t
-s, at libexecdir@,$libexecdir,;t t
-s, at datadir@,$datadir,;t t
-s, at sysconfdir@,$sysconfdir,;t t
-s, at sharedstatedir@,$sharedstatedir,;t t
-s, at localstatedir@,$localstatedir,;t t
-s, at libdir@,$libdir,;t t
-s, at includedir@,$includedir,;t t
-s, at oldincludedir@,$oldincludedir,;t t
-s, at infodir@,$infodir,;t t
-s, at mandir@,$mandir,;t t
-s, at build_alias@,$build_alias,;t t
-s, at host_alias@,$host_alias,;t t
-s, at target_alias@,$target_alias,;t t
-s, at DEFS@,$DEFS,;t t
-s, at ECHO_C@,$ECHO_C,;t t
-s, at ECHO_N@,$ECHO_N,;t t
-s, at ECHO_T@,$ECHO_T,;t t
-s, at LIBS@,$LIBS,;t t
-s, at CC@,$CC,;t t
-s, at CFLAGS@,$CFLAGS,;t t
-s, at LDFLAGS@,$LDFLAGS,;t t
-s, at CPPFLAGS@,$CPPFLAGS,;t t
-s, at ac_ct_CC@,$ac_ct_CC,;t t
-s, at EXEEXT@,$EXEEXT,;t t
-s, at OBJEXT@,$OBJEXT,;t t
-s, at CPP@,$CPP,;t t
-s, at EGREP@,$EGREP,;t t
-s, at LIBOBJS@,$LIBOBJS,;t t
-s, at LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
-
-_ACEOF
-
-  cat >>$CONFIG_STATUS <<\_ACEOF
-  # Split the substitutions into bite-sized pieces for seds with
-  # small command number limits, like on Digital OSF/1 and HP-UX.
-  ac_max_sed_lines=48
-  ac_sed_frag=1 # Number of current file.
-  ac_beg=1 # First line for current file.
-  ac_end=$ac_max_sed_lines # Line after last line for current file.
-  ac_more_lines=:
-  ac_sed_cmds=
-  while $ac_more_lines; do
-    if test $ac_beg -gt 1; then
-      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    else
-      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    fi
-    if test ! -s $tmp/subs.frag; then
-      ac_more_lines=false
-    else
-      # The purpose of the label and of the branching condition is to
-      # speed up the sed processing (if there are no `@' at all, there
-      # is no need to browse any of the substitutions).
-      # These are the two extra sed commands mentioned above.
-      (echo ':t
-  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
-      if test -z "$ac_sed_cmds"; then
-	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
-      else
-	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
-      fi
-      ac_sed_frag=`expr $ac_sed_frag + 1`
-      ac_beg=$ac_end
-      ac_end=`expr $ac_end + $ac_max_sed_lines`
-    fi
-  done
-  if test -z "$ac_sed_cmds"; then
-    ac_sed_cmds=cat
-  fi
-fi # test -n "$CONFIG_FILES"
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-	cat >$tmp/stdin
-	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
-  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-  ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
-
-
-
-  if test x"$ac_file" != x-; then
-    { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-    rm -f "$ac_file"
-  fi
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    configure_input=
-  else
-    configure_input="$ac_file.  "
-  fi
-  configure_input=$configure_input"Generated from `echo $ac_file_in |
-				     sed 's,.*/,,'` by configure."
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-	 # Absolute (can't be DOS-style, as IFS=:)
-	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 echo "$f";;
-      *) # Relative
-	 if test -f "$f"; then
-	   # Build tree
-	   echo "$f"
-	 elif test -f "$srcdir/$f"; then
-	   # Source tree
-	   echo "$srcdir/$f"
-	 else
-	   # /dev/null tree
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-  sed "$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s, at configure_input@,$configure_input,;t t
-s, at srcdir@,$ac_srcdir,;t t
-s, at abs_srcdir@,$ac_abs_srcdir,;t t
-s, at top_srcdir@,$ac_top_srcdir,;t t
-s, at abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s, at builddir@,$ac_builddir,;t t
-s, at abs_builddir@,$ac_abs_builddir,;t t
-s, at top_builddir@,$ac_top_builddir,;t t
-s, at abs_top_builddir@,$ac_abs_top_builddir,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
-  rm -f $tmp/stdin
-  if test x"$ac_file" != x-; then
-    mv $tmp/out $ac_file
-  else
-    cat $tmp/out
-    rm -f $tmp/out
-  fi
-
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_HEADER section.
-#
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
-ac_dB='[	 ].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-	cat >$tmp/stdin
-	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-	 # Absolute (can't be DOS-style, as IFS=:)
-	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 # Do quote $f, to prevent DOS paths from being IFS'd.
-	 echo "$f";;
-      *) # Relative
-	 if test -f "$f"; then
-	   # Build tree
-	   echo "$f"
-	 elif test -f "$srcdir/$f"; then
-	   # Source tree
-	   echo "$srcdir/$f"
-	 else
-	   # /dev/null tree
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-  # Remove the trailing spaces.
-  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
-
-_ACEOF
-
-# Transform confdefs.h into two sed scripts, `conftest.defines' and
-# `conftest.undefs', that substitutes the proper values into
-# config.h.in to produce config.h.  The first handles `#define'
-# templates, and the second `#undef' templates.
-# And first: Protect against being on the right side of a sed subst in
-# config.status.  Protect against being in an unquoted here document
-# in config.status.
-rm -f conftest.defines conftest.undefs
-# Using a here document instead of a string reduces the quoting nightmare.
-# Putting comments in sed scripts is not portable.
-#
-# `end' is used to avoid that the second main sed command (meant for
-# 0-ary CPP macros) applies to n-ary macro definitions.
-# See the Autoconf documentation for `clear'.
-cat >confdef2sed.sed <<\_ACEOF
-s/[\\&,]/\\&/g
-s,[\\$`],\\&,g
-t clear
-: clear
-s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-t end
-s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-: end
-_ACEOF
-# If some macros were called several times there might be several times
-# the same #defines, which is useless.  Nevertheless, we may not want to
-# sort them, since we want the *last* AC-DEFINE to be honored.
-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-rm -f confdef2sed.sed
-
-# This sed command replaces #undef with comments.  This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >>conftest.undefs <<\_ACEOF
-s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-_ACEOF
-
-# Break up conftest.defines because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-echo '  :' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.defines >/dev/null
-do
-  # Write a limited-size here document to $tmp/defines.sed.
-  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
-  # Speed up: don't consider the non `#define' lines.
-  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
-  # Work around the forget-to-reset-the-flag bug.
-  echo 't clr' >>$CONFIG_STATUS
-  echo ': clr' >>$CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
-  echo 'CEOF
-  sed -f $tmp/defines.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
-  rm -f conftest.defines
-  mv conftest.tail conftest.defines
-done
-rm -f conftest.defines
-echo '  fi # grep' >>$CONFIG_STATUS
-echo >>$CONFIG_STATUS
-
-# Break up conftest.undefs because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.undefs >/dev/null
-do
-  # Write a limited-size here document to $tmp/undefs.sed.
-  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
-  # Speed up: don't consider the non `#undef'
-  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
-  # Work around the forget-to-reset-the-flag bug.
-  echo 't clr' >>$CONFIG_STATUS
-  echo ': clr' >>$CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
-  echo 'CEOF
-  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
-  rm -f conftest.undefs
-  mv conftest.tail conftest.undefs
-done
-rm -f conftest.undefs
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    echo "/* Generated by configure.  */" >$tmp/config.h
-  else
-    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
-  fi
-  cat $tmp/in >>$tmp/config.h
-  rm -f $tmp/in
-  if test x"$ac_file" != x-; then
-    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
-      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-      { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-      rm -f $ac_file
-      mv $tmp/config.h $ac_file
-    fi
-  else
-    cat $tmp/config.h
-    rm -f $tmp/config.h
-  fi
-done
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || { (exit 1); exit 1; }
-fi
-


Property changes on: trunk/packages/kalign/trunk/debian
___________________________________________________________________
Name: mergeWithUpstream
   + 1

Deleted: trunk/packages/kalign/trunk/kalign2.h
===================================================================
--- trunk/packages/kalign/trunk/kalign2.h	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2.h	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,410 +0,0 @@
-/*
-	kalign2.h
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#define INFTY 936870912
-#define FLOATINFTY 100000000000000000000.0
-
-#define NODESIZE 16
-
-
-#ifdef MEMORY 
-#define tmalloc malloc
-#endif
-
-
-extern unsigned int numseq;
-extern unsigned int numprofiles;
-extern float gpo;
-extern float gpe;
-extern float tgpe;
-
-struct feature_matrix{
-	float** m;
-	int mdim;
-	int stride;
-};
-
-struct utype_ufeat{
-	struct feature *t;
-	struct feature *f;
-};
-
-struct parameters{
-	char **infile;
-	char *input;
-	char *outfile;
-	char* format;
-	//int reformat;
-	char* feature_type;
-	char* alignment_type;
-	char* feature_mode;
-	char* distance;
-	char* tree;
-	char* sort;
-	char* sub_matrix;
-	char* print_tree;
-	char* print_svg_tree;
-	float gpo;
-	float gpe;
-	float tgpe;
-	float secret;
-	float zlevel;
-	
-	int reformat;
-	int id;
-	int aa;
-	int alter_gaps;
-	int ntree;
-	int help_flag;
-	int quiet;
-	
-	int dna;
-	float alter_range;
-	int alter_weight;
-	float internal_gap_weight;
-	int smooth_window;
-	float smooth_strength;
-};
-
-struct node{
-	struct node *next;
-        int pos;
-};
-
-struct names{
-	int* start;
-	int* end;
-	int* len; 
-};
-
-struct bignode{
-	struct bignode *next;
-	unsigned int pos[NODESIZE];
-	unsigned int num;
-};
-
-struct bignode* big_insert_hash(struct bignode *n,const unsigned int pos);
-void big_remove_nodes(struct bignode *n);
-void big_print_nodes(struct bignode *n);
-
-
-
-struct alignment{
-	//struct node** seq;
-	struct feature** ft;
-	struct sequence_info** si;
-	unsigned int** sip;
-	unsigned int* nsip;
-	unsigned int* sl;
-	unsigned int* lsn;
-	int** s;
-	char**seq;
-	char** sn;
-};
-
-struct sequence_info{
-	struct sequence_info* next;
-	char* name;
-	char* value;
-};
-
-struct feature{
-	struct feature *next;
-	char* type;
-	char* note;
-	int start;
-	int end;
-	int color;
-};
-
-struct hirsch_mem{
-	struct states* f;
-	struct states* b;
-	int starta;
-	int startb;
-	int enda;
-	int endb;
-	int size;
-	int len_a;
-	int len_b;
-};
-
-struct dp_matrix{
-	struct states* s;
-	void* tb_mem;
-	char** tb;
-	int x;
-	int y;
-};
-
-struct states{
-	float a;
-	float ga;
-	float gb;
-	float x;
-};
-
-struct aln_tree_node{
-	struct aln_tree_node** links;
-	int* internal_lables;
-	int* path;
-	int* profile;
-	int* seq;
-	int len;
-	int done;
-	int num;
-};
-
-struct tree_node{
-	struct tree_node* left;
-	struct tree_node*right;
- 	int label;
- 	int edge;
-};
-
-struct ntree_data{
-	struct aln_tree_node* realtree;
-	struct alignment* aln;
-	float** profile;
-	int** map;
-	float**submatrix;
-	int* tree;
-	int ntree;
-};
-
-struct alignment* sort_sequences(struct alignment* aln,int* tree,char* sort);
-
-struct aln_tree_node* real_upgma(float **dm,int ntree);
-
-int* readtree(struct aln_tree_node* p,int* tree);
-
-struct parameters* interface(struct parameters* param,int argc,char **argv);
-void parameter_message(struct parameters* param);
-
-struct dp_matrix* dp_matrix_alloc(struct dp_matrix *dp,int x,int y);
-struct dp_matrix* dp_matrix_realloc(struct dp_matrix *dp,int x,int y);
-void dp_matrix_free(struct dp_matrix *dp);
-
-struct alignment* detect_and_read_sequences(struct alignment* aln,struct parameters* param);
-void output(struct alignment* aln,struct parameters* param);
-
-int* upgma(float **dm,int* tree);
-int* nj(float **dm,int* tree);
-void print_simple_phylip_tree(struct aln_tree_node* p);
-
-
-struct alignment* make_dna(struct alignment* aln);
-
-float** read_matrix(float** subm,struct parameters* param);
-
-int* f_only_pp_dyn(int* path, struct dp_matrix *dp,const float* fprof1,const float* fprof2,const int len_a,const int len_b,int fdim,int stride);
-
-int* fpp_dyn(int* path, struct dp_matrix *dp,const float* prof1,const float* prof2,const float* fprof1,const float* fprof2,const int len_a,const int len_b,int fdim,int stride);
-
-int* dna_pp_dyn(int* path, struct dp_matrix *dp,const int* prof1,const int* prof2,const int len_a,const int len_b);
-
-int* pp_dyn(int* path, struct dp_matrix *dp,const float* prof1,const float* prof2,const int len_a,const int len_b);
-int* ps_dyn(int* path, struct dp_matrix *dp,const float* prof1,const int* seq2,const int len_a,const int len_b,int sip);
-int* ss_dyn(float**subm,int* path, struct dp_matrix *dp,const int* seq1,const int* seq2,const int len_a,const int len_b);
-
-int* mirror_path(int* path);
-
-float* make_profile(float* prof,int* seq,int len, float** subm);
-float* dna_make_profile(float* prof,int* seq,int len, float** subm);
-
-float* update(const float*profa, const float* profb,float* newp,int* path,int sipa,int sipb);
-float* dna_update(const float*profa,const float* profb,float* newp,int* path,int sipa,int sipb);
-
-void set_gap_penalties(float* prof,int len,int nsip);
-void dna_set_gap_penalties(float* prof,int len,int nsip);
-
-float** protein_pairwise_alignment_distance(struct alignment* aln,float** dm,struct parameters* param,float**subm, int nj);
-float get_distance_from_pairwise_alignment(int* path,int* seq1,int* seq2);
-
-float** protein_wu_distance2(struct alignment* si,float** dm,struct parameters* param);
-float protein_wu_distance_calculation2(struct node* hash[],int* seq,int seqlen,int diagonals,int mode);
-
-float** protein_wu_distance(struct alignment* si,float** dm,struct parameters* param, int nj);
-//float protein_wu_distance_calculation(struct node* hash[],int* seq,int seqlen,int diagonals,int mode);
-
-float protein_wu_distance_calculation(struct bignode* hash[], const int* seq, const int seqlen,const int diagonals, const float mode);
-
-float** dna_distance(struct alignment* si,float** dm,struct parameters* param,int nj);
-float dna_distance_calculation(struct bignode* hash[],int* p,int seqlen,int diagonals,float mode);
-
-
-int byg_detect(int* text,int n);
-
-int check_identity(char* n,char*m);
-
-int byg_count(char* pattern,char*text);
-int byg_start(char* pattern,char*text);
-int byg_end(char* pattern,char*text);
-
-struct node* insert(struct node *n, int pos);
-struct node* insert_hash(struct node *n, int pos);
-
-void remove_nodes(struct node *n);
-
-#ifndef MEMORY 
-void* tmalloc(int size);
-#endif
-
-
-struct alignment* aln_alloc(struct alignment* aln);
-void free_aln(struct alignment* aln);
-void free_param(struct parameters* param);
-void free_ft(struct feature* n);
-
-int* pp_dyn2(int* path, struct dp_matrix *dp,const int* prof1,const int* prof2,const int len_a,const int len_b);
-int* ps_dyn2(int* path, struct dp_matrix *dp,const int* prof1,const int* seq2,const int len_a,const int len_b,int sip);
-int* ss_dyn2(int**subm,int* path, struct dp_matrix *dp,const int* seq1,const int* seq2,const int len_a,const int len_b);
-
-
-float* make_profile2(float* prof, int* seq,int len, float** subm);
-void set_gap_penalties2(float* prof,int len,int nsip,int window,float strength);
-float* update2(const float* profa,const float* profb,float* newp,int* path,int sipa,int sipb,float internal_gap_weight);
-
-struct feature_matrix* get_feature_matrix(struct feature_matrix* fm, struct alignment* aln,char* requested_feature);
-void free_utf(struct utype_ufeat* utf);
-void free_feature_matrix(struct feature_matrix* fm);
-
-struct utype_ufeat* get_unique_features(struct alignment* aln,struct utype_ufeat* utf);
-struct utype_ufeat* traverse_ft(struct utype_ufeat* utf,struct feature* n);
-struct feature* add_unique_feature(struct feature *n, struct feature *toadd);
-struct feature* add_unique_type(struct feature *n, struct feature *toadd);
-
-int** default_alignment(struct alignment* aln,int* tree, float**submatrix, int** map);
-int** feature_alignment(struct alignment* aln,int* tree,float**submatrix, int** map,struct feature_matrix* fm);
-int** test_alignment(struct alignment* aln,int* tree,float**submatrix, int** map,float internal_gap_weight,int window,float strength);
-
-
-
-struct ntree_data* ntree_alignment(struct ntree_data* ntree_data);
-struct ntree_data* ntree_sub_alignment(struct ntree_data* ntree_data,int* tree,int num);
-
-float* make_feature_profile(float* prof,struct feature* f,int len,struct feature_matrix* fm);
-float*  feature_update(const float* profa, const float* profb,float* newp,int* path,int stride);
-
-void printtree(struct aln_tree_node* p);
-
-struct ntree_data* alignntree(struct ntree_data* ntree_data,struct aln_tree_node* p);
-
-//int** alignntree(struct alignment* aln,int** submatrix, struct aln_tree_node* p,int** map,int ntree);
-void ntreeify(struct aln_tree_node* p,int ntree);
-
-struct tree_node* simpleinsert(struct tree_node* p,int target, int new_edge,int leaf_label);
-void printsimpleTree(struct tree_node* p);
-int* ticker(int* milometer,int elements);
-int* readsimpletree(struct tree_node* p,int* tree);
-int add_label_simpletree(struct tree_node* p,int* nodes,int i);
-//int** find_best_topology(struct alignment* aln,int**submatrix,int** map,int* leaves,int* nodes,int ntree);
-void free_real_tree(struct aln_tree_node* p);
-struct ntree_data* find_best_topology(struct ntree_data* ntree_data,int* leaves,int* nodes);
-void freesimpletree(struct tree_node* p);
-
-struct aln_tree_node* real_nj(float **dm,int ntree);
-
-//int** alter_gaps_alignment(struct alignment* aln,int* tree,int**submatrix, int** map,int n,float range,int weight);
-//void add_feature_information_from_alignment(int* path,int* fprof1,int* fprof2,int weight);
-
-struct alignment* protein_wu_sw(struct node* hash[],struct alignment* aln,int a,int b);
-float protein_wu_distance_calculation3(struct node* hash[],int* seq,int seqlen,int diagonals,int mode);
-float* make_wu_profile(float* prof,float* wu,int len);
-
-//int** aa_alignment(struct alignment* aln,int* tree,int**submatrix, int** map,int mmbonus);
-//int* aapp_dyn(int* path, struct dp_matrix *dp,const int* prof1,const int* prof2,const int len_a,const int len_b,const int mmbonus);
-
-
-
-
-int** hirschberg_alignment(struct alignment* aln,int* tree,float**submatrix, int** map,int window,float strength);
-//int* foward_pp_dyn(int* path, struct dp_matrix *dp,const float* prof1,const float* prof2,const int len_a,const int len_b);
-//int* backward_pp_dyn(int* path, struct dp_matrix *dp,const float* prof1,const float* prof2,const int len_a,const int len_b);
-
-
-
-
-struct hirsch_mem* hirsch_mem_alloc(struct hirsch_mem* hm,int x);
-struct hirsch_mem* hirsch_mem_realloc(struct hirsch_mem* hm,int x);
-void hirsch_mem_free(struct hirsch_mem* hm);
-
-int* mirror_hirsch_path(int* hirsch_path,int len_a,int len_b);
-int* add_gap_info_to_hirsch_path(int* hirsch_path,int len_a,int len_b);
-
-//DNA alignment via hirsch/Myer Miller
-
-int** dna_alignment(struct alignment* aln,int* tree,float**submatrix, int** map);
-
-
-struct alignment* make_seq(struct alignment* aln,int a,int b,int* path);
-void update_gaps(int old_len,int*gis,int new_len,int *newgaps);
-//void print_alignment(struct alignment* aln);
-
-struct alignment* sort_in_relation(struct alignment* aln,char* sort);
-void quickSort(struct alignment* aln, int array_size);
-void q_sort(struct alignment* aln, int left, int right);
-
-void smooth_gaps(float* prof,int len,int window,float strength);
-
-
-
-int** advanced_hirschberg_alignment(struct alignment* aln,int* tree,float**submatrix, int** map,int window,float strength,float internal_gap_weight);
-
-int** simple_hirschberg_alignment(struct alignment* aln,int* tree,float**submatrix, int** map);
-
-float* simple_make_profile(float* prof, int* seq,int len, float** subm);
-float* simple_update(float* profa,float* profb, float* newp,int* path);
-
-int* simple_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm, int* hirsch_path);
-int* simple_hirsch_align_two_pp_vector(const float* prof1,const float* prof2,struct hirsch_mem* hm,int* hirsch_path,float input_states[],int old_cor[]);
-struct states* simple_foward_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm);
-struct states* simple_backward_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm);
-
-int** feature_hirschberg_alignment(struct alignment* aln,int* tree,float**submatrix, int** map,struct feature_matrix* fm);
-
-void profile_alignment_main(struct alignment* aln,struct parameters* param,float** submatrix);
-
-
-void increase_gaps(float* prof,int len,int window,float strength);
-
-
-struct names* names_alloc(struct names* n);
-void names_free(struct names* n);
-
-
-void print_tree(struct aln_tree_node* p,struct alignment* aln,char* outfile);
-void print_newick_tree(struct aln_tree_node* p,struct alignment* aln, FILE *fout);
-void print_phyloxml_tree(struct aln_tree_node* p,struct alignment* aln,FILE *fout);
-
-
-struct alignment* phylo (struct alignment* aln,char* outfile);
-
-
-
-

Deleted: trunk/packages/kalign/trunk/kalign2_advanced_gaps.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_advanced_gaps.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_advanced_gaps.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,1010 +0,0 @@
-/*
-	kalign2_advanced_gaps.c
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-#include "kalign2_advanced_gaps.h"
-
-int** advanced_hirschberg_alignment(struct alignment* aln,int* tree,float**submatrix, int** map,int window,float strength,float internal_gap_weight)
-{
-	struct hirsch_mem* hm = 0;
-	int i,j,g,a,b,c;
-	int len_a;
-	int len_b;
-	float** profile = 0;
-
-	profile = malloc(sizeof(float*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		profile[i] = 0;
-	}
-
-	map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		map[i] = 0;
-	}
-	
-	hm = hirsch_mem_alloc(hm,1024);
-
-	fprintf(stderr,"\nAlignment:\n");
-
-	for (i = 0; i < (numseq-1);i++){
-		a = tree[i*3];
-		b = tree[i*3+1];
-		c = tree[i*3+2];
-		fprintf(stderr,"\r%8.0f percent done",(float)(i) /(float)numseq * 100);
-	//	fprintf(stderr,"Aligning:%d %d->%d	done:%f\n",a,b,c,((float)(i+1)/(float)numseq)*100);
-		len_a = aln->sl[a];
-		len_b = aln->sl[b];
-
-		
-		g = (len_a > len_b)? len_a:len_b;
-		map[c] = malloc(sizeof(int) * (g+2));
-		if(g > hm->size){
-			hm = hirsch_mem_realloc(hm,g);
-		}
-
-		for (j = 0; j < (g+2);j++){
-		//	hirsch_path[j] = -1;
-			map[c][j] = -1;
-		//	map[c][j] = 0;
-		}
-	//	map[c][0] = len_a;
-		//map[c][len_a+len_b+1] = 3;
-
-		if (a < numseq){
-			profile[a] = advanced_make_profile(profile[a],aln->s[a],len_a,submatrix);
-		}
-		if (b < numseq){
-			profile[b] = advanced_make_profile(profile[b],aln->s[b],len_b,submatrix);
-		}
-		
-	
-		//set_gap_penalties(profile[a],len_a,aln->nsip[b]);
-		
-		advanced_smooth_gaps(profile[a],len_a,window,strength);
-		
-		//set_gap_penalties(profile[b],len_b,aln->nsip[a]);
-		
-		advanced_smooth_gaps(profile[b],len_b,window,strength);
-		
-		hm->starta = 0;
-		hm->startb = 0;
-		hm->enda = len_a;
-		hm->endb = len_b;
-		hm->len_a = len_a;
-		hm->len_b = len_b;
-		
-		hm->f[0].a = 0.0;
-		hm->f[0].ga =  -FLOATINFTY;
-		hm->f[0].gb = -FLOATINFTY;
-		hm->b[0].a = 0.0;
-		hm->b[0].ga =  -FLOATINFTY;
-		hm->b[0].gb =  -FLOATINFTY;
-	//	fprintf(stderr,"LENA:%d	LENB:%d	numseq:%d\n",len_a,len_b,numseq);
-		if(len_a < len_b){
-			map[c] = advanced_hirsch_pp_dyn(profile[a],profile[b],hm,map[c]);
-		}else{
-			hm->enda = len_b;
-			hm->endb = len_a;
-			hm->len_a = len_b;
-			hm->len_b = len_a;
-			map[c] = advanced_hirsch_pp_dyn(profile[b],profile[a],hm,map[c]);
-			map[c] = mirror_hirsch_path(map[c],len_a,len_b);
-		}
-					
-		map[c] = add_gap_info_to_hirsch_path(map[c],len_a,len_b);
-
-		if(i != numseq-2){
-			profile[c] = malloc(sizeof(float)*64*(map[c][0]+2));
-			profile[c] = advanced_update(profile[a],profile[b],profile[c],map[c],aln->nsip[a],aln->nsip[b],internal_gap_weight);
-		}
-			
-		aln->sl[c] = map[c][0];
-	
-		aln->nsip[c] = aln->nsip[a] + aln->nsip[b];
-		aln->sip[c] = malloc(sizeof(int)*(aln->nsip[a] + aln->nsip[b]));
-		g =0;
-		for (j = aln->nsip[a];j--;){
-			aln->sip[c][g] = aln->sip[a][j];
-			g++;
-		}
-		for (j = aln->nsip[b];j--;){
-			aln->sip[c][g] = aln->sip[b][j];
-			g++;
-		}
-
-		free(profile[a]);
-		free(profile[b]);
-	}
-	fprintf(stderr,"\r%8.0f percent done\n",100.0);
-	free(profile);
-	hirsch_mem_free(hm);
-	for (i = 32;i--;){
-		free(submatrix[i]);
-	}
-	free(submatrix);
-	return map;
-}
-
-
-float* advanced_make_profile(float* prof, int* seq,int len,float** subm)
-{
-	int i,j,c;	
-	prof = malloc(sizeof(float)*(len+2)*64);
-	prof +=  (64 *(len+1));
-
-	for (i = 0;i < 64;i++){
-		prof[i] = 0;
-	}
-	prof[23+32] = -gpo;
-	prof[24+32] = -gpe;
-	prof[25+32] = -tgpe;
-	prof[26] = 1;
-
-	
-	i = len;
-	while(i--){
-		prof -= 64;
-
-		for (j = 0;j < 64;j++){
-			prof[j] = 0;
-		}
-		prof[26] = 1;//number of residues // both additive
-		c = seq[i];
-		
-		prof[c] += 1.0;
-		
-		prof += 32;
-		
-		for(j = 23;j--;){
-			prof[j] = subm[c][j];
-		}
-		prof[23] = -gpo;
-		prof[24] = -gpe;
-		prof[25] = -tgpe;
-		
-		prof -= 32;
-	}
-	prof -= 64;
-	for (i = 0;i < 64;i++){
-		prof[i] = 0;
-	}
-
-	prof[23+32] = -gpo;
-	prof[24+32] = -gpe;
-	prof[25+32] = -tgpe;
-	prof[26] = 1;
-	return prof;
-}
-
-
-
-void advanced_smooth_gaps(float* prof,int len,int window,float strength)
-{
-	float tmp_gpo;
-	float tmp_gpe;
-	float tmp_tgpe;
-	int i,j;
-	if(!(window &1)){
-		window--;
-	}
-	for ( i = (window/2); i < len - (window/2);i++){
-		tmp_gpo = 0.0;
-		tmp_gpe = 0.0;
-		tmp_tgpe = 0.0;
-		for (j = -(window/2); j < (window/2);j++){
-			tmp_gpo += (float)prof[55+((i+j)*64)]*strength;
-			tmp_gpe += (float) prof[56+((i+j)*64)]*strength;
-			tmp_tgpe += (float) prof[57+((i+j)*64)]*strength;
-		}
-		tmp_gpo /= window;
-		tmp_gpe /= window;
-		tmp_tgpe /= window;
-		prof[27+(i*64)] =  prof[55+(i*64)]*(1.0-strength) + tmp_gpo;
-		prof[28+(i*64)] =  prof[56+(i*64)]*(1.0-strength) + tmp_gpe;
-		prof[29+(i*64)] =  prof[57+(i*64)]*(1.0-strength) + tmp_tgpe;
-	}
-}
-
-
-
-float* advanced_update(const float* profa,const float* profb,float* newp,int* path,int sipa,int sipb,float internal_gap_weight)
-{
-	int i,j,c;
-	for (i = 64; i--;){
-		newp[i] = profa[i] + profb[i];
-	}
-	
-	profa += 64;
-	profb += 64;
-	newp += 64;
-
-	c = 1;
-	
-	while(path[c] != 3){
-		//Idea: limit the 'virtual' number of residues of one type to x.
-		// i.e. only allow a maximum of 10 alanines to be registered in each column
-		// the penalty for aligning a 'G' to this column will stay stable even when many (>10) alanines are present.
-		// the difference in score between the 'correct' (all alanine) and incorrect (alanines + glycine) will not increase 
-		// with the number of sequences. -> see Durbin pp 140
-		
-		if (!path[c]){
-			//fprintf(stderr,"Align	%d\n",c);
-			for (i = 64; i--;){
-				newp[i] = profa[i] + profb[i];
-			}
-				
-			
-			profa += 64;
-			profb += 64;
-		}
-		if (path[c] & 1){
-			//fprintf(stderr,"Gap_A:%d\n",c);
-			//printf("open:%d	ext:%d	%d	%d\n",si->nsip[a] * gpo,si->nsip[a] * gpe,si->nsip[a] * profb[41],si->nsip[a] * profb[46]);
-			for (i = 64; i--;){
-				newp[i] = profb[i];
-			}
-			profb += 64;
-			if(!(path[c] & 20)){
-				if(path[c] & 32){
-					newp[25] += (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));
-					i = tgpe* (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));
-				}else{
-					newp[24] +=  (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));//1;
-					i = gpe* (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));
-				}
-				
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}else{
-			if (path[c] & 16){ 
-	//			fprintf(stderr,"close_open");
-				if(path[c] & 32){
-					newp[25] +=  (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));//1;
-					i = tgpe* (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));
-					newp[23] +=  (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));//1;
-					i += gpo* (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));
-				}else{
-					newp[23] +=  (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));
-					i = gpo* (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));
-				}
-								
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			if (path[c] & 4){ 
-	//			fprintf(stderr,"Gap_open");
-				if(path[c] & 32){
-					newp[25] +=  (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));
-					i = tgpe* (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));
-					newp[23] +=  (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));
-					i += gpo* (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));
-				}else{
-					newp[23] +=  (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));
-					i = gpo* (profa[26] + ((sipa-  profa[26]) * internal_gap_weight));
-				}
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			}
-			
-			
-		}
-		if (path[c] & 2){
-			//fprintf(stderr,"Gap_B:%d\n",c);
-			//printf("open:%d	ext:%d	%d	%d\n",si->nsip[b] * gpo,si->nsip[b] * gpe,profa[26],profa[27]);
-			for (i = 64; i--;){
-				newp[i] = profa[i];
-			}
-			profa+=64;
-			if(!(path[c] & 20)){
-				if(path[c] & 32){
-					newp[25] +=  (profb[26] + ((sipb-  profb[26]) * internal_gap_weight));
-					i = tgpe*(profb[26] + ((sipb-  profb[26]) * internal_gap_weight));
-				}else{
-					newp[24] += (profb[26] + ((sipb-  profb[26]) * internal_gap_weight));//1;
-					i = gpe*(profb[26] + ((sipb-  profb[26]) * internal_gap_weight));
-				}
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}else{
-			if (path[c] & 16){
-	//			fprintf(stderr,"close_open");
-				if(path[c] & 32){
-					newp[25] += (profb[26] + ((sipb-  profb[26]) * internal_gap_weight));//1;
-					i =  tgpe*(profb[26] + ((sipb-  profb[26]) * internal_gap_weight));
-					newp[23] += (profb[26] + ((sipb-  profb[26]) * internal_gap_weight));//1;
-					i +=  gpo*(profb[26] + ((sipb-  profb[26]) * internal_gap_weight));
-				}else{
-					newp[23] += (profb[26] + ((sipb-  profb[26]) * internal_gap_weight));//1;
-					i =  gpo*(profb[26] + ((sipb-  profb[26]) * internal_gap_weight));
-				}
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			if (path[c] & 4){
-	//			fprintf(stderr,"Gap_open");
-				if(path[c] & 32){
-					newp[25] +=(profb[26] + ((sipb-  profb[26]) * internal_gap_weight));//1;
-					i = tgpe*(profb[26] + ((sipb-  profb[26]) * internal_gap_weight));
-					newp[23] += (profb[26] + ((sipb-  profb[26]) * internal_gap_weight));//1;
-					i += gpo*(profb[26] + ((sipb-  profb[26]) * internal_gap_weight));
-				}else{
-					newp[23] += (profb[26] + ((sipb-  profb[26]) * internal_gap_weight));//1;
-					i = gpo*(profb[26] + ((sipb-  profb[26]) * internal_gap_weight));
-				}
-				
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			}
-			
-		}
-		newp += 64;
-		c++;
-	}
-	for (i = 64; i--;){
-		newp[i] =  profa[i] + profb[i];
-	}	
-	newp -= (path[0]+1) *64;
-	return newp;
-}
-
-
-
-int* advanced_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm, int* hirsch_path)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	float input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-	
-	//fprintf(stderr,"starta:%d enda:%d startb:%d endb:%d mid:%d\n",hm->starta,hm->enda,hm->startb,hm->endb,mid);
-	
-	
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-	hm->enda = mid;
-	hm->f = advanced_foward_hirsch_pp_dyn(prof1,prof2,hm);
-	/*int i;
-	fprintf(stderr,"FOWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->f[i].a,hm->f[i].ga,hm->f[i].gb);
-	}*/
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	hm->b = advanced_backward_hirsch_pp_dyn(prof1,prof2,hm);
-	/*fprintf(stderr,"BaCKWARD\n");
-
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->b[i].a,hm->b[i].ga,hm->b[i].gb);
-	}*/
-
-	hirsch_path = advanced_hirsch_align_two_pp_vector(prof1,prof2,hm,hirsch_path,input_states,old_cor);
-	return hirsch_path;
-}
-
-
-
-int* advanced_hirsch_align_two_pp_vector(const float* prof1,const float* prof2,struct hirsch_mem* hm,int* hirsch_path,float input_states[],int old_cor[])
-{
-	struct states* f = hm->f;
- 	struct states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -INFTY;
-	float max = -INFTY;	
-	float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float sub = 0.0;
-	
-
-	prof1+= (64 * (old_cor[4]+1));
-	prof2 += 64 * (hm->startb);
-	i = hm->startb;
-	c = -1;
-	for(i = hm->startb; i < hm->endb;i++){
-		sub = abs(middle -i);
-		sub /= 1000; 
-		prof2 += 64;
-		//fprintf(stderr,"%d	%d	%d \n",f[i].a,b[i].a,max);
-		if(f[i].a+b[i].a-sub > max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga+prof2[27]*prof1[26]-sub > max){
-			max = f[i].a+b[i].ga+prof2[27]*prof1[26]-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb+prof1[27]*prof2[26] -sub> max){
-			max = f[i].a+b[i].gb+prof1[27]*prof2[26]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a+prof2[27]*prof1[26]-sub > max){
-			max = f[i].ga+b[i].a+prof2[27]*prof1[26]-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb+prof1[29]*prof2[26]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[29]*prof2[26]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb+prof1[28]*prof2[26]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[28]*prof2[26]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a+prof1[27]*prof2[26]-sub > max){
-			max = f[i].gb+b[i].a+prof1[27]*prof2[26]-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	i = hm->endb;
-	sub = abs(middle -i);
-	sub /= 1000; 
-	if(f[i].a+b[i].gb+prof1[27]*prof2[26]-sub > max){
-		max = f[i].a+b[i].gb+prof1[27]*prof2[26]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb+prof1[29]*prof2[26]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[29]*prof2[26]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb+prof1[28]*prof2[26]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[28]*prof2[26]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	
-	prof1-= (64 * (old_cor[4]+1));
-	prof2 -= hm->endb << 6;
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	//if(transition == -1){
-	//	exit(0);
-	//}
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-	//		fprintf(stderr,"Using this for start:%d	%d	%d\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = advanced_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = advanced_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = advanced_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -INFTY;
-			hm->f[0].ga = 0.0;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = advanced_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = advanced_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = advanced_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = 0.0;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = advanced_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = advanced_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = advanced_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = advanced_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = advanced_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = advanced_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-
-
-struct states* advanced_foward_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm)
-{
-	unsigned int freq[26];
-	struct states* s = hm->f;
-
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-	
-	
-	
-	prof1 += (hm->starta) << 6;
-	prof2 +=  (hm->startb) << 6;
-	s[hm->startb].a = s[0].a;
-	s[hm->startb].ga = s[0].ga;
-	s[hm->startb].gb = s[0].gb;
-	if(hm->startb == 0){
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=64;
-			s[j].a = -FLOATINFTY;
-			
-			s[j].ga = s[j-1].a+prof2[29]*prof1[26];
-			if (s[j-1].ga+prof2[29]*prof1[26] > s[j].ga){
-				s[j].ga = s[j-1].ga+prof2[29]*prof1[26];
-			}
-			s[j].gb = -FLOATINFTY;
-		}	
-		prof2+=64;	
-	}else{
-
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=64;
-			s[j].a = -FLOATINFTY;
-			
-			s[j].ga = s[j-1].a+prof2[27]*prof1[26];
-			if (s[j-1].ga+prof2[28]*prof1[26] > s[j].ga){
-				s[j].ga = s[j-1].ga+prof2[28]*prof1[26];
-			}
-			s[j].gb = -FLOATINFTY;
-		//	prof2+=64;
-		}
-		prof2+=64;
-	}
-	
-	prof2 -= (hm->endb-hm->startb) << 6;
-	
-	s[hm->endb].a = -FLOATINFTY;
-	s[hm->endb].ga = -FLOATINFTY;
-	s[hm->endb].gb = -FLOATINFTY;
-
-
-	for (i = hm->starta;i < hm->enda;i++){
-		prof1 += 64;
-		c = 1;
-		for (j = 26; j--;){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;
-			}
-		}
-		freq[0] = c;
-			
-		pa = s[hm->startb].a;
-		pga = s[hm->startb].ga;
-		pgb = s[hm->startb].gb;
-		if(hm->startb == 0){
-			s[hm->startb].a = -FLOATINFTY;
-			s[hm->startb].ga = -FLOATINFTY;
-		
-			s[hm->startb].gb = pa+prof1[29] * prof2[26];
-				if(pgb+prof1[29] * prof2[26] > s[hm->startb].gb){
-				s[hm->startb].gb = pgb+prof1[29] * prof2[26];
-			}
-		}else{
-			s[hm->startb].a = -FLOATINFTY;
-			s[hm->startb].ga = -FLOATINFTY;
-		
-			s[hm->startb].gb = pa+prof1[27]*prof2[26];
-			if(pgb+prof1[28]*prof2[26] > s[hm->startb].gb){
-				s[hm->startb].gb = pgb+prof1[28]*prof2[26];
-			}
-		}
-		for (j = hm->startb+1; j <= hm->endb;j++){
-			prof2 += 64;
-			ca = s[j].a;
-			
-			if((pga += prof2[27-64]*prof1[26-64]) > pa){ 
-				pa = pga;
-			}
-
-			if((pgb += prof1[27-64]*prof2[26-64]) > pa){
-				pa = pgb;
-			}
-			
-			prof2 += 32;
-			for (c = freq[0];--c;){
-				pa += prof1[freq[c]]*prof2[freq[c]];
-			}
-			prof2 -= 32;	
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j-1].a+prof2[27]*prof1[26];
-			if (s[j-1].ga+prof2[28]*prof1[26] > s[j].ga){
-				s[j].ga = s[j-1].ga+prof2[28]*prof1[26];
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[27]*prof2[26];
-			if(pgb+prof1[28]*prof2[26] > s[j].gb){
-				s[j].gb = pgb+prof1[28]*prof2[26];
-			}
-			pa = ca;
-		}
-		prof2 -= (hm->endb-hm->startb) << 6;
-		
-	}
-	prof1 -= 64 * (hm->enda);
-	return s;
-}
-
-struct states* advanced_backward_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm)
-{
-	unsigned int freq[26];
-	struct states* s = hm->b;
-	
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-
-	prof1 += (hm->enda+1) << 6;
-	prof2 += (hm->endb+1) << 6;
-	s[hm->endb].a = s[0].a;
-	s[hm->endb].ga = s[0].ga;
-	s[hm->endb].gb = s[0].gb;
-	
-	
-	//init of first row;
-	//j = endb-startb;
-	if(hm->endb == hm->len_b){
-		
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			s[j].a = -FLOATINFTY;
-			
-			s[j].ga = s[j+1].a+prof2[29]*prof1[26];
-			if (s[j+1].ga+prof2[29]*prof1[26] > s[j].ga){
-				s[j].ga = s[j+1].ga+prof2[29]*prof1[26];
-			}
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2 -= 64;
-	}else{
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			s[j].a = -FLOATINFTY;
-			
-			s[j].ga = s[j+1].a+prof2[27]*prof1[26];
-			if (s[j+1].ga+prof2[28]*prof1[26] > s[j].ga){
-				s[j].ga = s[j+1].ga+prof2[28]*prof1[26];
-			}
-			s[j].gb = -FLOATINFTY;
-		//	prof2 -= 64;
-		}
-		prof2 -= 64;
-	}
-	
-	s[hm->startb].a = -FLOATINFTY;
-	s[hm->startb].ga = -FLOATINFTY;
-	s[hm->startb].gb = -FLOATINFTY;
-//	prof2 -= (endb -startb) << 6;
-
-	i = hm->enda-hm->starta;
-	while(i--){
-		prof1 -= 64;
-
-		c = 1;
-		for (j = 26; j--;){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;
-			}
-		}
-		freq[0] = c;
-		
-		pa = s[hm->endb].a;
-		pga = s[hm->endb].ga;
-		pgb = s[hm->endb].gb;
-		s[hm->endb].a = -FLOATINFTY;
-		s[hm->endb].ga = -FLOATINFTY;
-
-		if(hm->endb == hm->len_b){
-			s[hm->endb].gb = pa+prof1[29]*prof2[26];
-			if(pgb+prof1[29]*prof2[26] > s[hm->endb].gb){
-				s[hm->endb].gb = pgb+prof1[29]*prof2[26];
-			}
-		}else{
-			s[hm->endb].gb = pa+prof1[27]*prof2[26];
-			if(pgb+prof1[28]*prof2[26] > s[hm->endb].gb){
-				s[hm->endb].gb = pgb+prof1[28]*prof2[26];
-			}
-		}
-		//j = endb-startb;
-		prof2 += (hm->endb-hm->startb) << 6;
-		//while(j--){
-		for(j = hm->endb-1;j >= hm->startb;j--){
-			prof2 -= 64;
-			ca = s[j].a;
-			if((pga += prof2[64+27]*prof1[26]) > pa){
-				pa = pga;
-			}
-			if((pgb += prof1[64+27]*prof2[26]) > pa){
-				pa = pgb;
-			}
-			
-			prof2 += 32;
-			for (c = freq[0];--c;){
-				pa += prof1[freq[c]]*prof2[freq[c]];
-			}
-			prof2 -= 32;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j+1].a+prof2[27]*prof1[26];
-			if (s[j+1].ga+prof2[28]*prof1[26] > s[j].ga){
-				s[j].ga = s[j+1].ga+prof2[28]*prof1[26];
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[27]*prof2[26];
-			if(pgb+prof1[28]*prof2[26] > s[j].gb){
-				s[j].gb = pgb+prof1[28]*prof2[26];
-			}
-			pa = ca;
-		}
-	}		
-	return s;
-}
-
-

Deleted: trunk/packages/kalign/trunk/kalign2_advanced_gaps.h
===================================================================
--- trunk/packages/kalign/trunk/kalign2_advanced_gaps.h	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_advanced_gaps.h	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,34 +0,0 @@
-/*
-	kalign2_advanced_gaps.h
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-void advanced_smooth_gaps(float* prof,int len,int window,float strength);
-float* advanced_make_profile(float* prof, int* seq,int len,float** subm);
-float* advanced_update(const float* profa,const float* profb,float* newp,int* path,int sipa,int sipb,float internal_gap_weight);
-
-
-int* advanced_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm, int* hirsch_path);
-int* advanced_hirsch_align_two_pp_vector(const float* prof1,const float* prof2,struct hirsch_mem* hm,int* hirsch_path,float input_states[],int old_cor[]);
-struct states* advanced_foward_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm);
-struct states* advanced_backward_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm);

Deleted: trunk/packages/kalign/trunk/kalign2_alignment_types.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_alignment_types.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_alignment_types.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,888 +0,0 @@
-/*
-	kalign2_alignment_types.c 
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-
-int** default_alignment(struct alignment* aln,int* tree,float**submatrix, int** map)
-{
-	struct dp_matrix *dp = 0;
-	int i,j,g,a,b,c;
-	int len_a;
-	int len_b;
-	float** profile = 0;
-	float* profa = 0;
-	float* profb = 0;
-	
-	profile = malloc(sizeof(float*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		profile[i] = 0;
-	}
-
-	map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		map[i] = 0;
-	}
-	
-	
-	dp = dp_matrix_alloc(dp,511,511);
-	
-	fprintf(stderr,"\nAlignment:\n");
-	
-	//c = numseq;
-	for (i = 0; i < (numseq-1);i++){
-		a = tree[i*3];
-		b = tree[i*3+1];
-		c = tree[i*3+2];
-		fprintf(stderr,"\r%8.0f percent done",(float)(i) /(float)numseq * 100);
-		//fprintf(stderr,"Aligning:%d %d->%d	%d	%d\n",a,b,c,numseq,i);
-		len_a = aln->sl[a];
-		len_b = aln->sl[b];
-		dp = dp_matrix_realloc(dp,len_a,len_b);
-	
-		map[c] = malloc(sizeof(int) * (len_a+len_b+2));
-		for (j = len_a+len_b+2;j--;){
-			map[c][j] = 0;
-		}
-		if (a < numseq){
-			profile[a] = make_profile(profile[a],aln->s[a],len_a,submatrix);
-		}
-		if (b < numseq){
-			profile[b] = make_profile(profile[b],aln->s[b],len_b,submatrix);
-		}
-		profa = profile[a]+64;
-		profb = profile[b]+64;
-	
-		set_gap_penalties(profile[a],len_a,aln->nsip[b]);
-		set_gap_penalties(profile[b],len_b,aln->nsip[a]);
-		if(aln->nsip[a] == 1){
-			if(aln->nsip[b] == 1){
-				map[c] = ss_dyn(submatrix,map[c],dp,aln->s[a],aln->s[b],len_a,len_b);
-			}else{
-				map[c] = ps_dyn(map[c],dp,profb,aln->s[a],len_b,len_a,aln->nsip[b]);
-				map[c] = mirror_path(map[c]);
-			}
-		}else{
-			if(aln->nsip[b] == 1){
-				map[c] = ps_dyn(map[c],dp,profa,aln->s[b],len_a,len_b,aln->nsip[a]);
-			}else{
-				if (len_a > len_b){			
-					map[c] = pp_dyn(map[c],dp,profa,profb,len_a,len_b);
-				}else{
-					map[c] = pp_dyn(map[c],dp,profb,profa,len_b,len_a);
-					map[c] = mirror_path(map[c]);
-				}
-			}
-		}
-			
-		profile[c] = malloc(sizeof(float)*64*(len_a+len_b+2));
-
-		profile[c] = update(profile[a],profile[b],profile[c],map[c],aln->nsip[a],aln->nsip[b]);
-
-	
-		aln->sl[c] = map[c][0];
-	
-		aln->nsip[c] = aln->nsip[a] + aln->nsip[b];
-		aln->sip[c] = malloc(sizeof(int)*(aln->nsip[a] + aln->nsip[b]));
-		g =0;
-		for (j = aln->nsip[a];j--;){
-			aln->sip[c][g] = aln->sip[a][j];
-			g++;
-		}
-		for (j = aln->nsip[b];j--;){
-			aln->sip[c][g] = aln->sip[b][j];
-			g++;
-		}
-		free(profile[a]);
-		free(profile[b]);
-	}
-	fprintf(stderr,"\r%8.0f percent done\n",100.0);
-	free(profile[numprofiles-1]);
-	free(profile);
-	
-	dp_matrix_free(dp);
-	for (i = 32;i--;){
-		free(submatrix[i]);
-	}
-	free(submatrix);
-	return map;
-}
-
-/*
-int** aa_alignment(struct alignment* aln,int* tree,int**submatrix, int** map,int mmbonus)
-{
-	struct dp_matrix *dp = 0;
-	int i,j,g,a,b,c;
-	int len_a;
-	int len_b;
-	int** profile = 0;
-	int* profa = 0;
-	int* profb = 0;
-	
-	int pbonus = 0;
-	
-	profile = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		profile[i] = 0;
-	}
-
-	map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		map[i] = 0;
-	}
-	
-	
-	dp = dp_matrix_alloc(dp,511,511);
-	c = numseq;
-	for (i = 0; i < (numseq-1);i++){
-		a = tree[i*3];
-		b = tree[i*3+1];
-		c = tree[i*3+2];
-		fprintf(stderr,"Aligning:%d %d->%d\n",a,b,c);
-		len_a = aln->sl[a];
-		len_b = aln->sl[b];
-		dp = dp_matrix_realloc(dp,len_a,len_b);
-	
-		map[c] = malloc(sizeof(int) * (len_a+len_b+2));
-		for (j = len_a+len_b+2;j--;){
-			map[c][j] = 0;
-		}
-		if (a < numseq){
-			profile[a] = make_profile(profile[a],aln->s[a],len_a,submatrix);
-		}
-		if (b < numseq){
-			profile[b] = make_profile(profile[b],aln->s[b],len_b,submatrix);
-		}
-		profa = profile[a];
-		profb = profile[b];
-	
-		set_gap_penalties(profa,len_a,aln->nsip[b]);
-		set_gap_penalties(profb,len_b,aln->nsip[a]);
-		
-		pbonus = mmbonus * aln->nsip[a] * aln->nsip[b];
-		
-		if (len_a > len_b){
-			map[c] = aapp_dyn(map[c],dp,profa,profb,len_a,len_b,pbonus);
-		}else{
-			map[c] = aapp_dyn(map[c],dp,profb,profa,len_b,len_a,pbonus);
-			map[c] = mirror_path(map[c]);
-		}
-			
-		profile[c] = malloc(sizeof(int)*64*(len_a+len_b+2));
-		profile[c] = update(profa,profb,profile[c],map[c],aln->nsip[a],aln->nsip[b]);
-	
-		aln->sl[c] = map[c][0];
-	
-		aln->nsip[c] = aln->nsip[a] + aln->nsip[b];
-		aln->sip[c] = malloc(sizeof(int)*(aln->nsip[a] + aln->nsip[b]));
-		g =0;
-		for (j = aln->nsip[a];j--;){
-			aln->sip[c][g] = aln->sip[a][j];
-			g++;
-		}
-		for (j = aln->nsip[b];j--;){
-			aln->sip[c][g] = aln->sip[b][j];
-			g++;
-		}
-		free(profa);
-		free(profb);
-	}
-	
-	free(profile[numprofiles-1]);
-	free(profile);
-	
-	dp_matrix_free(dp);
-	for (i = 32;i--;){
-		free(submatrix[i]);
-	}
-	free(submatrix);
-	return map;
-}*/
-
-/*
-int** alter_gaps_alignment(struct alignment* aln,int* tree,int**submatrix, int** map,int n,float range,int weight)
-{
-	struct dp_matrix *dp = 0;
-	int i,j,g,a,b,c;
-	
-	int org_gpo = gpo;
-	int org_gpe = gpe;
-	int org_tgpe = tgpe;
-	
-	float gpo_step = 0;
-	float gpe_step = 0;
-	float tgpe_step = 0;
-	
-	int len_a;
-	int len_b;
-	int** profile = 0;
-	int* profa = 0;
-	int* profb = 0;
-	int* path = 0;
-	
-	int* fprofa = 0;
-	int* fprofb = 0;
-	
-	if(!(n &1)){
-		n--;
-	}
-	
-	float per = 0.0;
-	
-	per =(float) range*2/(n+1);
-
-	gpo_step = (float)gpo * per;
-	gpe_step = (float)gpe * per;
-	tgpe_step = (float)tgpe * per;
-	
-	
-	profile = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		profile[i] = 0;
-	}
-	
-	map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		map[i] = 0;
-	}
-	
-	dp = dp_matrix_alloc(dp,511,511);
-	c = numseq;
-	
-	for (i = 0; i < (numseq-1);i++){
-		a = tree[i*3];
-		b = tree[i*3+1];
-		c = tree[i*3+2];
-		fprintf(stderr,"Aligning:%d %d->%d\n",a,b,c);
-		len_a = aln->sl[a];
-		len_b = aln->sl[b];
-		dp = dp_matrix_realloc(dp,len_a,len_b);
-	
-		map[c] = malloc(sizeof(int) * (len_a+len_b+2));
-		for (j = len_a+len_b+2;j--;){
-			map[c][j] = 0;
-		}
-		if (a < numseq){
-			profile[a] = make_profile(profile[a],aln->s[a],len_a,submatrix);
-		}
-		if (b < numseq){
-			profile[b] = make_profile(profile[b],aln->s[b],len_b,submatrix);
-		}
-		profa = profile[a];
-		profb = profile[b];
-		
-		fprofa = malloc(sizeof(int)*(len_a+1)*2);
-		for (j = 0;j < (len_a+1)*2;j++){
-			fprofa[j] = 0;
-		}
-		fprofb = malloc(sizeof(int)*(len_b+1)*2);
-		for (j = 0;j < (len_b+1)*2;j++){
-			fprofb[j] = 0;
-		}
-		
-		gpo = org_gpo - ((int)gpo_step* (n/2));
-		gpe = org_gpe - ((int)gpe_step* (n/2));
-		tgpe = org_tgpe - ((int)tgpe_step* (n/2));
-		
-		for (j = 0; j < n;j++){
-			set_gap_penalties(profa,len_a,aln->nsip[b]);
-			set_gap_penalties(profb,len_b,aln->nsip[a]);
-			
-			path = malloc(sizeof(int) * (len_a+len_b+2));
-			for (g = len_a+len_b+2;g--;){
-				path[g] = 0;
-			}
-			
-			if(aln->nsip[a] == 1){
-				if(aln->nsip[b] == 1){
-					path = ss_dyn(submatrix,path,dp,aln->s[a],aln->s[b],len_a,len_b);
-				}else{
-					path = ps_dyn(path,dp,profb,aln->s[a],len_b,len_a,aln->nsip[b]);
-					path = mirror_path(path);
-				}
-			}else{
-				if(aln->nsip[b] == 1){
-					path = ps_dyn(path,dp,profa,aln->s[b],len_a,len_b,aln->nsip[a]);
-				}else{
-					if (len_a > len_b){
-						path = pp_dyn(path,dp,profa,profb,len_a,len_b);
-					}else{
-						path = pp_dyn(path,dp,profb,profa,len_b,len_a);
-						path = mirror_path(path);
-					}
-				}
-			}
-			fprintf(stderr,"Test alignment with gpo:%d	gpe:%d	tgpe:%d\n",gpo,gpe,tgpe);
-			
-			
-			add_feature_information_from_alignment(path,fprofa,fprofb,weight/n);
-			
-
-			gpo += 	(int)gpo_step;
-			gpe +=  (int)gpe_step;
-			tgpe += (int)tgpe_step;
-		}
-		gpo = org_gpo;
-		gpe = org_gpe;
-		tgpe = org_tgpe;
-	
-		set_gap_penalties(profa,len_a,aln->nsip[b]);
-		set_gap_penalties(profb,len_b,aln->nsip[a]);
-		
-
-		
-		if (len_a > len_b){
-		//	map[c] = f_only_pp_dyn(map[c],dp,fprofa,fprofb,len_a,len_b,1,2);
-			map[c] = fpp_dyn(map[c],dp,profa,profb,fprofa,fprofb,len_a,len_b,1,2);
-		}else{
-		//	map[c] = f_only_pp_dyn(map[c],dp,fprofb,fprofa,len_b,len_a,1,2);
-			map[c] = fpp_dyn(map[c],dp,profb,profa,fprofb,fprofa,len_b,len_a,1,2);
-			map[c] = mirror_path(map[c]);
-		}
-					
-		profile[c] = malloc(sizeof(int)*64*(len_a+len_b+2));
-		profile[c] = update(profa,profb,profile[c],map[c],aln->nsip[a],aln->nsip[b]);
-		
-		
-		aln->sl[c] = map[c][0];
-	
-		aln->nsip[c] = aln->nsip[a] + aln->nsip[b];
-		aln->sip[c] = malloc(sizeof(int)*(aln->nsip[a] + aln->nsip[b]));
-		g =0;
-		for (j = aln->nsip[a];j--;){
-			aln->sip[c][g] = aln->sip[a][j];
-			g++;
-		}
-		for (j = aln->nsip[b];j--;){
-			aln->sip[c][g] = aln->sip[b][j];
-			g++;
-		}
-		free(profa);
-		free(profb);
-		
-		free(fprofa);
-		free(fprofb);
-	}
-	
-	free(profile[numprofiles-1]);
-	free(profile);
-		
-	dp_matrix_free(dp);
-	for (i = 32;i--;){
-		free(submatrix[i]);
-	}
-	free(submatrix);
-	return map;
-}*/
-
-/*
-int** test_alignment(struct alignment* aln,int* tree,float **submatrix, int** map,float internal_gap_weight,int window,float strength)
-{
-	struct dp_matrix *dp = 0;
-	int i,j,g,a,b,c;
-	int len_a;
-	int len_b;
-	float** profile = 0;
-	float* profa = 0;
-	float* profb = 0;
-	
-	profile = malloc(sizeof(float*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		profile[i] = 0;
-	}
-
-	map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		map[i] = 0;
-	}
-	
-	
-	dp = dp_matrix_alloc(dp,511,511);
-	c = numseq;
-	for (i = 0; i < (numseq-1);i++){
-		a = tree[i*3];
-		b = tree[i*3+1];
-		c = tree[i*3+2];
-		fprintf(stderr,"Aligning:%d %d->%d\n",a,b,c);
-		len_a = aln->sl[a];
-		len_b = aln->sl[b];
-		dp = dp_matrix_realloc(dp,len_a,len_b);
-	
-		map[c] = malloc(sizeof(int) * (len_a+len_b+2));
-		for (j = len_a+len_b+2;j--;){
-			map[c][j] = 0;
-		}
-		if (a < numseq){
-			profile[a] = make_profile2(profile[a],aln->s[a],len_a,submatrix);
-		}
-		if (b < numseq){
-			profile[b] = make_profile2(profile[b],aln->s[b],len_b,submatrix);
-		}
-		profa = profile[a];
-		profb = profile[b];
-	
-		set_gap_penalties2(profa,len_a,aln->nsip[b],window,strength);
-		set_gap_penalties2(profb,len_b,aln->nsip[a],window,strength);
-
-		if(aln->nsip[a] == 1){
-			if(aln->nsip[b] == 1){
-				map[c] = ss_dyn2(submatrix,map[c],dp,aln->s[a],aln->s[b],len_a,len_b);
-			}else{
-			//	map[c] = ps_dyn2(map[c],dp,profb,aln->s[a],len_b,len_a,aln->nsip[b]);
-				
-				map[c] = pp_dyn2(map[c],dp,profb,profa,len_b,len_a);
-				map[c] = mirror_path(map[c]);
-			}
-		}else{
-			if(aln->nsip[b] == 1){
-			//	map[c] = ps_dyn2(map[c],dp,profa,aln->s[b],len_a,len_b,aln->nsip[a]);
-				map[c] = pp_dyn2(map[c],dp,profa,profb,len_a,len_b);
-			}else{
-				if (len_a > len_b){
-					map[c] = pp_dyn2(map[c],dp,profa,profb,len_a,len_b);
-				}else{
-					map[c] = pp_dyn2(map[c],dp,profb,profa,len_b,len_a);
-					map[c] = mirror_path(map[c]);
-				}
-			}
-		}
-					
-		profile[c] = malloc(sizeof(float)*64*(len_a+len_b+2));
-		profile[c] = update2(profa,profb,profile[c],map[c],aln->nsip[a],aln->nsip[b],internal_gap_weight);
-		
-		
-		aln->sl[c] = map[c][0];
-	
-		aln->nsip[c] = aln->nsip[a] + aln->nsip[b];
-		aln->sip[c] = malloc(sizeof(int)*(aln->nsip[a] + aln->nsip[b]));
-		g =0;
-		for (j = aln->nsip[a];j--;){
-			aln->sip[c][g] = aln->sip[a][j];
-			g++;
-		}
-		for (j = aln->nsip[b];j--;){
-			aln->sip[c][g] = aln->sip[b][j];
-			g++;
-		}
-		free(profa);
-		free(profb);
-	}
-	
-	free(profile[numprofiles-1]);
-	free(profile);
-	
-	dp_matrix_free(dp);
-	for (i = 32;i--;){
-		free(submatrix[i]);
-	}
-	free(submatrix);
-	return map;
-}*/
-/*
-int** feature_alignment(struct alignment* aln,int* tree,int**submatrix, int** map,struct feature_matrix* fm)
-{
-	struct dp_matrix *dp = 0;
-	int i,j,g,a,b,c;
-	int len_a;
-	int len_b;
-	int** profile = 0;
-	int* profa = 0;
-	int* profb = 0;
-	
-	int** fprofile = 0;
-	int* fprofa = 0;
-	int* fprofb = 0;
-	
-	profile = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		profile[i] = 0;
-	}
-	
-	fprofile = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		fprofile[i] = 0;
-	}
-
-	map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		map[i] = 0;
-	}
-	
-	dp = dp_matrix_alloc(dp,511,511);
-	c = numseq;
-	//if(!param->dna){
-	for (i = 0; i < (numseq-1);i++){
-		a = tree[i*3];
-		b = tree[i*3+1];
-		c = tree[i*3+2];
-		fprintf(stderr,"Aligning:%d %d->%d\n",a,b,c);
-		len_a = aln->sl[a];
-		len_b = aln->sl[b];
-		dp = dp_matrix_realloc(dp,len_a,len_b);
-	
-		map[c] = malloc(sizeof(int) * (len_a+len_b+2));
-		for (j = len_a+len_b+2;j--;){
-			map[c][j] = 0;
-		}
-		if (a < numseq){
-			profile[a] = make_profile(profile[a],aln->s[a],len_a,submatrix);
-		//	fprintf(stderr,"Making feature profile for %d	(%s)\n",a,aln->sn[a]);
-			fprofile[a] = make_feature_profile(fprofile[a],aln->ft[a],len_a,fm);		
-		}
-		if (b < numseq){
-			profile[b] = make_profile(profile[b],aln->s[b],len_b,submatrix);
-		//	fprintf(stderr,"Making feature profile for %d	(%s)\n",b,aln->sn[b]);
-			fprofile[b] = make_feature_profile(fprofile[b],aln->ft[b],len_b,fm);
-		}
-		//profa = profile[a];
-		//profb = profile[b];
-		profa = profile[a]+64;
-		profb = profile[b]+64;
-	
-		fprofa = fprofile[a];
-		fprofb = fprofile[b];
-	
-		set_gap_penalties(profile[a],len_a,aln->nsip[b]);
-		set_gap_penalties(profile[b],len_b,aln->nsip[a]);
-
-		if (len_a > len_b){
-			map[c] = fpp_dyn(map[c],dp,profa,profb,fprofa,fprofb,len_a,len_b,fm->mdim,fm->stride);
-		}else{
-			map[c] = fpp_dyn(map[c],dp,profb,profa,fprofb,fprofa,len_b,len_a,fm->mdim,fm->stride);
-			map[c] = mirror_path(map[c]);
-		}
-					
-		profile[c] = malloc(sizeof(int)*64*(len_a+len_b+2));
-		profile[c] = update(profile[a],profile[b],profile[c],map[c],aln->nsip[a],aln->nsip[b]);
-		
-		fprofile[c] = malloc(sizeof(int)*fm->stride*(len_a+len_b+2));
-		fprofile[c] = feature_update(fprofa,fprofb,fprofile[c],map[c],fm->stride); 
-		
-		aln->sl[c] = map[c][0];
-	
-		aln->nsip[c] = aln->nsip[a] + aln->nsip[b];
-		aln->sip[c] = malloc(sizeof(int)*(aln->nsip[a] + aln->nsip[b]));
-		g =0;
-		for (j = aln->nsip[a];j--;){
-			aln->sip[c][g] = aln->sip[a][j];
-			g++;
-		}
-		for (j = aln->nsip[b];j--;){
-			aln->sip[c][g] = aln->sip[b][j];
-			g++;
-		}
-		free(profile[a]);
-		free(profile[b]);
-		
-		free(fprofa);
-		free(fprofb);
-		
-	}
-	
-	free(profile[numprofiles-1]);
-	free(profile);
-	
-	free(fprofile[numprofiles-1]);
-	free(fprofile );
-	
-	dp_matrix_free(dp);
-	for (i = 32;i--;){
-		free(submatrix[i]);
-	}
-	free(submatrix);
-	free_feature_matrix(fm);
-	return map;
-}*/
-
-struct ntree_data* ntree_sub_alignment(struct ntree_data* ntree_data,int* tree,int num)
-{
-	struct dp_matrix *dp = 0;
-	struct alignment* aln = 0;
-	int i,j,g,a,b,c;
-	int len_a;
-	int len_b;
-	float** local_profile = 0;
-	float* profa = 0;
-	float* profb = 0;
-
-	int** local_map = 0;
-	int* local_sl = 0;
-	int* local_nsip = 0;
-	int** local_sip = 0;
-	
-	int* which_to_alloc = 0;
-	
-	aln = ntree_data->aln;
-	
-	which_to_alloc = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		which_to_alloc[i] = 0;
-	}
-	
-	local_profile = malloc(sizeof(float*)*numprofiles);
-	local_sl = malloc(sizeof(int)*numprofiles);
-	local_nsip = malloc(sizeof(int)*numprofiles);
-	local_sip = malloc(sizeof(int*)*numprofiles);
-	
-	
-	for (i = 0; i < num-1;i++){
-		a = tree[i*3+1];
-		if(!which_to_alloc[a]){
-			which_to_alloc[a] = 1;
-		}
-		b = tree[i*3+2];
-		if(!which_to_alloc[b]){
-			which_to_alloc[b] = 1;
-		}
-		c = tree[i*3+3];
-		if(!which_to_alloc[c]){
-			which_to_alloc[c] = 2;
-		}
-	}
-	//for ( i = 0;i< numprofiles;i++){
-	//	fprintf(stderr,"alloc?:%d	%d\n",i,which_to_alloc[i]);
-	//}
-	
-//	exit(0);
-	for ( i = 0;i< numprofiles;i++){
-		if(which_to_alloc[i] == 1){
-			local_profile[i] = ntree_data->profile[i];
-			local_sl[i] = aln->sl[i];
-			local_nsip[i] = aln->nsip[i];
-			local_sip[i] =  malloc(sizeof(int*)*aln->nsip[i]);
-			for(j = 0;j < aln->nsip[i];j++){
-				local_sip[i][j] = aln->sip[i][j];
-			}
-		}else{
-			local_profile[i] = 0;
-			local_sl[i] = 0;
-			local_nsip[i] = 0;
-			local_sip[i] = 0;
-		}
-	}
-	/*
-	for ( i = 0;i< numprofiles;i++){
-		local_profile[i] = ntree_data->profile[i];
-		local_sl[i] = aln->sl[i];
-		local_nsip[i] = aln->nsip[i];
-		if(aln->sip[i]){
-			fprintf(stderr,"Allocing..:%d\n",aln->nsip[i]);
-			local_sip[i] =  malloc(sizeof(int*)*aln->nsip[i]);
-			for(j = 0;j < aln->nsip[i];j++){
-				local_sip[i][j] = aln->sip[i][j];
-			}
-		}else{
-			local_sip[i] = 0;
-		}
-	}*/
-
-	local_map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		local_map[i] = 0;
-	}
-	
-	
-	dp = dp_matrix_alloc(dp,511,511);
-	c = numseq;
-	for (i = 0; i < num-1;i++){
-		a = tree[i*3+1];
-		b = tree[i*3+2];
-		c = tree[i*3+3];
-	//	fprintf(stderr,"Aligning:%d %d->%d\n",a,b,c);
-		len_a = local_sl[a];
-		len_b = local_sl[b];
-		dp = dp_matrix_realloc(dp,len_a,len_b);
-	
-		local_map[c] = malloc(sizeof(int) * (len_a+len_b+2));
-		for (j = len_a+len_b+2;j--;){
-			local_map[c][j] = 0;
-		}
-		if (a < numseq){
-			local_profile[a] = make_profile(local_profile[a],aln->s[a],len_a,ntree_data->submatrix);
-		}
-		if (b < numseq){
-			local_profile[b] = make_profile(local_profile[b],aln->s[b],len_b,ntree_data->submatrix);
-		}
-		profa = local_profile[a];
-		profb = local_profile[b];
-	
-		set_gap_penalties(profa,len_a,local_nsip[b]);
-		set_gap_penalties(profb,len_b,local_nsip[a]);
-
-		if(local_nsip[a] == 1){
-			if(local_nsip[b] == 1){
-				local_map[c] = ss_dyn(ntree_data->submatrix,local_map[c],dp,aln->s[a],aln->s[b],len_a,len_b);
-			}else{
-				local_map[c] = ps_dyn(local_map[c],dp,profb,aln->s[a],len_b,len_a,local_nsip[b]);
-				local_map[c] = mirror_path(local_map[c]);
-			}
-		}else{
-			if(local_nsip[b] == 1){
-				local_map[c] = ps_dyn(local_map[c],dp,profa,aln->s[b],len_a,len_b,local_nsip[a]);
-			}else{
-				if (len_a > len_b){
-					local_map[c] = pp_dyn(local_map[c],dp,profa,profb,len_a,len_b);
-				}else{
-					local_map[c] = pp_dyn(local_map[c],dp,profb,profa,len_b,len_a);
-					local_map[c] = mirror_path(local_map[c]);
-				}
-			}
-		}
-			
-		local_profile[c] = malloc(sizeof(float)*64*(len_a+len_b+2));
-		local_profile[c] = update(profa,profb,local_profile[c],local_map[c],local_nsip[a],local_nsip[b]);
-	
-		local_sl[c] = local_map[c][0];
-	
-		local_nsip[c] = local_nsip[a] + local_nsip[b];
-		local_sip[c] = malloc(sizeof(int)*(local_nsip[a] + local_nsip[b]));
-		g =0;
-		for (j = local_nsip[a];j--;){
-			local_sip[c][g] = local_sip[a][j];
-			g++;
-		}
-		for (j = local_nsip[b];j--;){
-			local_sip[c][g] = local_sip[b][j];
-			g++;
-		}
-	//	free(profa);
-	//	free(profb);
-	}
-	
-	if(ntree_data->profile[c]){
-		if(ntree_data->map[c][ntree_data->map[c][0]+2]  < local_map[c][local_map[c][0]+2]){
-			fprintf(stderr,"%d\n",local_map[c][local_map[c][0]+2]);
-			//remove old map,profile,etc..
-			for (i = 0; i < num-1;i++){
-				c = tree[i*3+3];
-				free(ntree_data->map[c]);
-				free(ntree_data->profile[c]);
-				free(aln->sip[c]);
-				ntree_data->map[c] = malloc(sizeof(int)*(local_map[c][0]+3));
-				for (j = 0; j < local_map[c][0]+3;j++){
-					ntree_data->map[c][j] = local_map[c][j];
-				}
-				aln->sip[c] = malloc(sizeof(int)*local_nsip[c]);
-				aln->nsip[c] = local_nsip[c];
-				for (j = 0; j < local_nsip[c];j++){
-					aln->sip[c][j] = local_sip[c][j];
-				}
-				aln->sl[c] = local_sl[c];
-				
-			}
-			ntree_data->profile[c] = malloc(sizeof(int)*64*(aln->sl[c]+1));
-			for (i = 0; i < (64*(aln->sl[c]+1));i++){
-				ntree_data->profile[c][i] = local_profile[c][i];
-			}
-			ntree_data->tree[0] -= (tree[0]-1);
-			for (j = 1; j < tree[0];j++){
-				ntree_data->tree[ntree_data->tree[0]+j-1] = tree[j];
-			}
-			ntree_data->tree[0] += (tree[0]-1);
-
-		}else{
-			fprintf(stderr,"no improvement\n");
-		}
-	}else{
-		fprintf(stderr,"%d\n",local_map[c][local_map[c][0]+2]);
-		for (i = 0; i < num-1;i++){
-			c = tree[i*3+3];
-			ntree_data->map[c] = malloc(sizeof(int)*(local_map[c][0]+3));
-			for (j = 0; j < local_map[c][0]+3;j++){
-				ntree_data->map[c][j] = local_map[c][j];
-			}
-
-			aln->sip[c] = malloc(sizeof(int)*local_nsip[c]);
-			aln->nsip[c] = local_nsip[c];
-			for (j = 0; j < local_nsip[c];j++){
-				aln->sip[c][j] = local_sip[c][j];
-			}
-			aln->sl[c] = local_sl[c];
-		}
-		ntree_data->profile[c] = malloc(sizeof(int)*64*(aln->sl[c]+1));
-		for (i = 0; i < (64*(aln->sl[c]+1));i++){
-			ntree_data->profile[c][i] = local_profile[c][i];
-		}
-		for (j = 1; j < tree[0];j++){
-			ntree_data->tree[ntree_data->tree[0]+j-1] = tree[j];
-		}
-		ntree_data->tree[0] += tree[0]-1;
-	}
-
-	for ( i = 0;i< numprofiles;i++){
-		if(which_to_alloc[i] == 1){
-			free(local_sip[i]);
-			if(i < numseq){
-				free(local_profile[i]);	
-			}
-		}
-		if(which_to_alloc[i] == 2){
-			free(local_profile[i]);
-			free(local_map[i]);
-			free(local_sip[i]);
-		}
-		
-	}
-
-	free(which_to_alloc);
-	free(local_map);
-	free(local_sip);
-	free(local_nsip);
-	free(local_profile);
-	free(local_sl);
-	
-	dp_matrix_free(dp);
-	return ntree_data;
-}
-
-struct ntree_data* ntree_alignment(struct ntree_data* ntree_data)
-{
-	int i;
-	ntree_data->profile = malloc(sizeof(float*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		ntree_data->profile[i] = 0;
-	}
-	
-	ntree_data->map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		ntree_data->map[i] = 0;
-	}
-
-	ntree_data =  alignntree(ntree_data,ntree_data->realtree);
-	
-	for ( i = 0;i< numprofiles;i++){
-		if(ntree_data->profile[i]){
-			free(ntree_data->profile[i]);
-		}
-	}
-	free(ntree_data->profile);
-	
-	for (i = 32;i--;){
-		free(ntree_data->submatrix[i]);
-	}
-	free(ntree_data->submatrix);
-	free_real_tree(ntree_data->realtree);
-	return ntree_data;
-}
-

Deleted: trunk/packages/kalign/trunk/kalign2_conservation.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_conservation.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_conservation.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,57 +0,0 @@
-/*
-	kalign2_conservation.c
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include <math.h>
-
-#include "kalign2.h"
-
-void entrophy(int* prof,int len)
-{
-	int i,j;
-	float shannon = 0.0;
-	float log_two = log(2);
-	fprintf(stderr,"%f\n",log_two);
-	for ( i = 0; i < len; i++){
-		shannon = 0.0;
-		//prof[3] = 10;
-		//prof[23] += 10;
-		for ( j = 0; j < 23;j++){
-			if(prof[j]){
-			shannon += (float)prof[j]* log((float)prof[j]/(float)prof[23])/log_two;
-		
-		//	fprintf(stderr,"%f += %d/%d * %f\n",shannon,prof[j],prof[23],log((float)prof[j]/(float)prof[23])/log_two);
-			}
-		}
-		fprintf(stderr,"%f	",shannon);
-		
-		if (prof[23] < 23){
-			shannon = -shannon / (log((float)prof[23])/log_two);
-		}else{
-			shannon = -shannon / (log((float)23)/log_two);
-		}
-		fprintf(stderr,"%f\n",shannon);
-		prof+=64;
-	}
-}

Deleted: trunk/packages/kalign/trunk/kalign2_distance_calculation.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_distance_calculation.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_distance_calculation.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,992 +0,0 @@
-/*
-	kalign2_distance_calculation.c 
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-
-float** protein_pairwise_alignment_distance(struct alignment* aln,float** dm,struct parameters* param,float**subm, int nj)
-{
-	int i,j,c;
-	int * path = 0;
-	int len_a = 0;
-	int len_b = 0;
-	struct dp_matrix *dp = 0;
-	int a,b;
-	
-	
-	fprintf(stderr,"Distance Calculation:\n");
-	
-	b = (numseq*(numseq-1))/2;
-	a = 1;	
-	
-	
-	
-	dp = dp_matrix_alloc(dp,511,511);
-	
-	if (nj){
-		dm = malloc (sizeof(float*)*numprofiles);
-		for (i = numprofiles;i--;){
-			dm[i] = malloc (sizeof (float)*(numprofiles));
-			for (j = numprofiles;j--;){
-				dm[i][j] = 0.0f;
-			}
-		}
-	}else{
-		dm = malloc (sizeof(float*)*numseq);
-		for (i = numseq;i--;){
-			dm[i] = malloc (sizeof (float)*(numseq));
-			for (j = numseq;j--;){
-				dm[i][j] = 0.0f;
-			}
-		}
-	}
-	
-	/*dm = malloc (sizeof(float*)*numprofiles);
-	for (i = numprofiles;i--;){
-		dm[i] = malloc (sizeof (float)*(numprofiles));
-		for (j = numprofiles;j--;){
-			dm[i][j] = 0.0f;
-		}
-	}*/
-	for (i = 0; i < numseq-1;i++){
-		len_a = aln->sl[i];
-		for(j = i+1; j < numseq;j++){
-			
-			len_b = aln->sl[j];
-			path = malloc(sizeof(int) * (len_a+len_b+2));
-			for (c = len_a+len_b+2;c--;){
-				path[c] = 0;
-			}
-			dp = dp_matrix_realloc(dp,len_a,len_b);
-			path = ss_dyn(subm,path,dp,aln->s[i],aln->s[j],len_a,len_b);
-			dm[i][j] = get_distance_from_pairwise_alignment(path,aln->s[i],aln->s[j]);
-			dm[j][i] = dm[i][j];
-			fprintf(stderr,"\r%8.0f percent done",(float)a /(float)b * 100);
-			a++;
-			
-			free(path);
-		}
-	}
-	dp_matrix_free(dp);
-	return dm;
-}
-
-float get_distance_from_pairwise_alignment(int* path,int* seq1,int* seq2)
-{
-	float dist = 0;
- 	int i,j,c;
- 	int pairs = 0;
- 	int identical = 0;
- 	i = 0;
- 	j = 0;
- 	c = 1;
-	while(path[c] != 3){		
-		if (!path[c]){
-			if (seq1[i] == seq2[j]){
-				identical++;
-			}
-			pairs++;
-			i++;
-			j++;	
-		}
-		if (path[c] & 1){
-			j++;
-		}
-		if (path[c] & 2){
-			i++;		
-		}
-		c++;
-	}
-	dist = (float)identical/(float)pairs*100;
-	return dist; 
-}
-
-
-float** protein_wu_distance2(struct alignment* aln,float** dm,struct parameters* param)
-{
-	struct node* hash[1024];
-	int i,j;
-	unsigned int hv;
-	int*p =0;
-	for (i = 0;i < 1024;i++){
-		hash[i] = 0;
-	}	
-	
-	if(!aln->ft){
-		aln->ft =  malloc(sizeof(struct feature* ) * (numseq));
-
-		for(i =0;i < numseq;i++){
-			aln->ft[i] = 0;
-		}
-	}
-	dm = malloc (sizeof(float*)*numprofiles);
-	for (i = numprofiles;i--;){
-		dm[i] = malloc (sizeof (float)*(numprofiles));
-		for (j = numprofiles;j--;){
-			dm[i][j] = 0.0f;
-		}
-	}
-
-	
-	for (i = 0; i < numseq-1;i++){
-		p = aln->s[i];
-				
-		for (j = aln->sl[i]-2;j--;){
-			hv = (p[j] << 5) + p[j+1];
-			hash[hv] = insert_hash(hash[hv],j+1);
-		//	hash[hv] = insert_hash(hash[hv],j+1);
-			hv = (p[j] << 5) + p[j+2];
-			hash[hv] = insert_hash(hash[hv],j+1);
-			hv = (p[j+1] << 5) + p[j+2];
-			hash[hv] = insert_hash(hash[hv],j+1);
-		}
-
-		for (j = i+1; j < numseq;j++){
-			dm[i][j] = protein_wu_distance_calculation3(hash,aln->s[j],aln->sl[j],aln->sl[j]+aln->sl[i],param->zlevel);
-		//	aln = protein_wu_sw2(hash,aln,i,j);
-			dm[i][j] /= (aln->sl[i] > aln->sl[j]) ? aln->sl[j] : aln->sl[i];
-			dm[j][i] = dm[i][j];
-		}
-		
-		for (j = 1024;j--;){
-			if (hash[j]){
-				remove_nodes(hash[j]);
-				hash[j] = 0;
-			}
-		}	
-	}
-	return dm;
-}
-
-
-float protein_wu_distance_calculation2(struct node* hash[],int* seq,int seqlen,int diagonals,int mode)
-{
-
-	struct node* node_p;
-	int* d = 0;
-	float out = 0.0;
-	int i;
-	unsigned int hv;
-
-	d = malloc(sizeof(int)*diagonals);
-	//for (i = diagonals;i--;){
-	for (i = 0;i < diagonals;i++){
-		d[i] = 0;
-	}
-	for (i = seqlen-2;i--;){
-
-		hv = (seq[i] << 5) + seq[i+1];
-		//printf("3:%d\n",hv);
-		if (hash[hv]){
-			node_p = hash[hv];
-			while(node_p){
-				d[node_p->pos]++;
-		//		d[node_p->pos+1]++;
-				node_p = node_p->next;
-			}
-		}
-
-
-		hv = (seq[i] << 5) + seq[i+2];
-		//printf("3:%d\n",hv);
-		if (hash[hv]){
-			node_p = hash[hv];
-			while(node_p){
-				d[node_p->pos]++;
-		//		d[node_p->pos+1]++;
-				node_p = node_p->next;
-			}
-		}
-		hv = (seq[i+1] << 5) + seq[i+2];
-		if (hash[hv]){
-			node_p = hash[hv];
-			while(node_p){
-				d[node_p->pos]++;
-				node_p = node_p->next;
-			}
-		}	
-		d++;
-	}
-
-	//exit(0);
-	d -= (seqlen-2);
-
-	for (i = diagonals;i--;){
-		//printf("%d ",d[i]);
-		if(d[i] > mode){
-			out += d[i];
-		}
-	}
-	free(d);
-	return out;
-}
-
-
-
-struct alignment* protein_wu_sw(struct node* hash[],struct alignment* aln,int a,int b)
-{
-	int*seq = aln->s[b];
-	int len_a = aln->sl[b];
-	int len_b = aln->sl[a];
-	struct node* node_p = 0;
-	int i,c;
-	unsigned int hv;
-	//int notel = aln->lsn[a] + aln->lsn[b];
-	
-	
-	
-	struct feature *n = 0;
-	
-	//float counta[1024];
-	//float countb[1024];
-
-	int *weight = 0;
-	int *len = 0;
-	int* added = 0;
-	
-	weight = malloc(sizeof(int*)*(len_a+len_b-1));
-	len = malloc(sizeof(int*)*(len_a+len_b-1));
-	added = malloc(sizeof(int*)*(len_a+len_b-1));
-	for (i = 0; i <(len_a+len_b-1);i++){
-		weight[i] = 0;
-		len[i] = 0;
-		added[i] = 0;
-	}
-	
-
-	
-	//for (i = 0; i <1024;i++){
-	//	counta[i] = 0;
-	//	countb[i] = 0;
-	//	if(hash[i]){
-	//		node_p = hash[i];
-	//		while(node_p){
-	//			countb[i]++;
-	//			node_p = node_p->next;
-	//		}
-	//		fprintf(stderr,"COUNT:%d	%f\n",i,countb[i]);
-	//	}
-		
-	//}
-	//for (i = len_a-2;i--;){
-	//	hv = (seq[i+1] << 5) + seq[i+2];
-	//	counta[hv]++;
-	//	hv = (seq[i] << 5) + seq[i+1];
-	//	counta[hv]++;
-	//	hv = (seq[i] << 5) + seq[i+2];
-	//	counta[hv]++;
-	//}
-
-	c = 1;
-	for (i =  len_a-2;i--;){
-		for (hv = 0; hv <(len_a+len_b-1);hv++){
-		added[hv] = 0;
-		}
-	
-		hv = (seq[i] << 5) + seq[i+1];
-		//printf("3:%d\n",hv);
-		if (hash[hv]){
-			node_p = hash[hv];
-			while(node_p){
-				added[node_p->pos+c] = 1; 
-				weight[node_p->pos+c]++;
-	//			len[node_p->pos+c] = 1 + len[node_p->pos+c];
-				node_p = node_p->next;
-			}
-		}
-
-
-		hv = (seq[i] << 5) + seq[i+2];
-		//printf("3:%d\n",hv);
-		if (hash[hv]){
-			node_p = hash[hv];
-			while(node_p){
-				added[node_p->pos+c] = 1; 
-				weight[node_p->pos+c]++;
-	//			len[node_p->pos+c] = 1 + len[node_p->pos+c];
-				node_p = node_p->next;
-			}
-		}
-		hv = (seq[i+1] << 5) + seq[i+2];
-		//printf("3:%d\n",hv);
-		if (hash[hv]){
-			node_p = hash[hv];
-			while(node_p){
-				added[node_p->pos+c] = 1; 
-				weight[node_p->pos+c]++;
-	//			len[node_p->pos+c] = 1 + len[node_p->pos+c];
-				node_p = node_p->next;
-			}
-		}
-	//	fprintf(stderr,"pos_a:%d	",i+1);
-		
-		for (hv = 0; hv <(len_a+len_b-1);hv++){
-			len[hv] += added[hv];
-			if(!added[hv] && len[hv]){
-				if(len[hv] > 10){
-					n = malloc(sizeof(struct feature));
-					n->next = 0;
-					n->color = 0;
-					n->type = malloc(sizeof(char)*8);
-					n->type[0] = 'w';
-					n->type[1] = 'u';
-					n->type[2] = 'm';
-					n->type[3] = 'a';
-					n->type[4] = 'n';
-					n->type[5] = 'b';
-					n->type[6] = 'e';
-					n->type[7] = 'r';
-					n->type[8] = 0;
-					
-					n->start = i+2;
-					n->end = len[hv]+n->start -1;
-					
-					n->note = malloc(sizeof(char)*(2));
-					n->note[0] = 'w';
-					n->note[1] = 0;
-					
-					/*n->note = malloc(sizeof(char)*(notel+1));
-					for (j = 0;j < aln->lsn[a];j++){
-						n->note[j] = aln->sn[a][j];
-					}
-					while(j < notel){
-						n->note[j] = aln->sn[b][j-aln->lsn[a]];
-						j++;
-					}
-					n->note[notel] = 0;*/
-					//n->note[0] = 'w';
-					//n->note[1] = 0;
-					
-					
-					if(! aln->ft[b]){
-						 aln->ft[b] = n;
-					}else{
-						n->next = aln->ft[b];
-						aln->ft[b] = n;
-					}
-					//if((old_n =  aln->ft[b])!= 0){
-					//	while(old_n->next!=0){
-					//		old_n = old_n->next;
-					//	}
-					//	old_n->next = n;
-					//}else{
-					//	 aln->ft[b] = n;
-					//}
-					n = 0;
-					n = malloc(sizeof(struct feature));
-					n->next = 0;
-					n->color = 0;
-					
-					n->type = malloc(sizeof(char)*8);
-					n->type[0] = 'w';
-					n->type[1] = 'u';
-					n->type[2] = 'm';
-					n->type[3] = 'a';
-					n->type[4] = 'n';
-					n->type[5] = 'b';
-					n->type[6] = 'e';
-					n->type[7] = 'r';
-					n->type[8] = 0;
-					
-
-					n->start = (hv - (len_a))+i+3;
-					n->end = len[hv]+n->start -1;
-					
-					n->note = malloc(sizeof(char)*(2));
-					n->note[0] = 'w';
-					n->note[1] = 0;
-					
-					/*n->note = malloc(sizeof(char)*(notel+1));
-					for (j = 0;j < aln->lsn[a];j++){
-						n->note[j] = aln->sn[a][j];
-					}
-					while(j < notel){
-						n->note[j] = aln->sn[b][j-aln->lsn[a]];
-						j++;
-					}
-					n->note[notel] = 0;*/
-
-					
-					if(! aln->ft[a]){
-						 aln->ft[a] = n;
-					}else{
-						n->next = aln->ft[a];
-						aln->ft[a] = n;
-					}
-					
-					//if((old_n =  aln->ft[a])!= 0){
-					//	while(old_n->next!=0){
-					//		old_n = old_n->next;
-					//	}
-					//	old_n->next = n;
-					//}else{
-					//	 aln->ft[a] = n;
-					//}
-					n = 0;
-	//				fprintf(stderr,"\nDiagonal found A:%d	%d\n",i+2,len[hv]);
-	//				fprintf(stderr,"Diagonal found	B:%d	%d\n",(hv - (len_a))+i+3,len[hv]);
-				}
-				len[hv] = 0;
-				weight[hv] = 0;
-			}
-	//		fprintf(stderr,"%d,%d	",hv,(hv - (len_a))+i+3);
-		}
-	//	fprintf(stderr,"\n");
-		c++;
-	}
-	i++;
-	
-	//fprintf(stderr,"pos_a:%d	",i);
-	for (hv = 0; hv <(len_a+len_b-1);hv++){
-		if(len[hv]){
-			if(len[hv] > 10){
-				n = malloc(sizeof(struct feature));
-				n->next = 0;
-				n->color = 0;
-				
-				n->type = malloc(sizeof(char)*8);
-				n->type[0] = 'w';
-				n->type[1] = 'u';
-				n->type[2] = 'm';
-				n->type[3] = 'a';
-				n->type[4] = 'n';
-				n->type[5] = 'b';
-				n->type[6] = 'e';
-				n->type[7] = 'r';
-				n->type[8] = 0;
-
-				n->start = i+1;
-				n->end = len[hv]+n->start-1;
-				/*
-				n->note = malloc(sizeof(char)*(notel+1));
-				for (j = 0;j < aln->lsn[a];j++){
-					n->note[j] = aln->sn[a][j];
-				}
-				while(j < notel){
-					n->note[j] = aln->sn[b][j-aln->lsn[a]];
-					j++;
-				}
-				n->note[notel] = 0;*/
-				
-				n->note = malloc(sizeof(char)*(2));
-				n->note[0] = 'w';
-				n->note[1] = 0;
-				
-				if(! aln->ft[b]){
-					 aln->ft[b] = n;
-				}else{
-					n->next = aln->ft[b];
-					aln->ft[b] = n;
-				}
-				
-				/*
-				if((old_n =  aln->ft[b])!= 0){
-					while(old_n->next!=0){
-						old_n = old_n->next;
-					}
-					old_n->next = n;
-				}else{
-					 aln->ft[b] = n;
-				}*/
-				n = 0;
-				n = malloc(sizeof(struct feature));
-				n->next = 0;
-				n->color = 0;
-				
-				n->type = malloc(sizeof(char)*8);
-				n->type[0] = 'w';
-				n->type[1] = 'u';
-				n->type[2] = 'm';
-				n->type[3] = 'a';
-				n->type[4] = 'n';
-				n->type[5] = 'b';
-				n->type[6] = 'e';
-				n->type[7] = 'r';
-				n->type[8] = 0;
-
-				n->start = hv - len_a+i+2;
-				n->end = len[hv]+n->start-1;
-				
-				n->note = malloc(sizeof(char)*(2));
-				n->note[0] = 'w';
-				n->note[1] = 0;
-				/*
-				n->note = malloc(sizeof(char)*(notel+1));
-				for (j = 0;j < aln->lsn[a];j++){
-					n->note[j] = aln->sn[a][j];
-				}
-				while(j < notel){
-					n->note[j] = aln->sn[b][j-aln->lsn[a]];
-					j++;
-				}
-				n->note[notel] = 0;*/
-
-				if(! aln->ft[a]){
-					 aln->ft[a] = n;
-				}else{
-					n->next = aln->ft[a];
-					aln->ft[a] = n;
-				}
-				
-				/*if((old_n = aln->ft[a])!= 0){
-					while(old_n->next!=0){
-						old_n = old_n->next;
-					}
-					old_n->next = n;
-				}else{
-					 aln->ft[a] = n;
-				}*/
-				n = 0;			
-			
-	//			fprintf(stderr,"\nDiagonal found A:%d	%d\n",i+1,len[hv]);
-	//			fprintf(stderr,"Diagonal found	B:%d	%d\n",hv - len_a+i+2,len[hv]);
-		
-			}
-			len[hv] = 0;
-			weight[hv] = 0;
-		}
-	//	fprintf(stderr,"%d,%d	",hv,hv - len_a+i+2);
-	}
-	//fprintf(stderr,"\n");
-	free(weight);
-	free(len);
-	free(added);
-
-	//n =aln->ft[a];
-	//while(n){
-	//	fprintf(stderr,"%s	%s	%d-%d\n",n->type,n->note,n->start,n->end);
-	//	n = n->next;
-	//}
-	
-	
-	
-	
-	//exit(0);
-	return aln;
-}
-
-
-
-float protein_wu_distance_calculation3(struct node* hash[],int* seq,int seqlen,int diagonals,int mode)
-{
-	struct node* node_p = 0;
-	int i,c;
-	unsigned int hv;
-	int dlen = 0;
-	
-	
-	int *weight = 0;
-	int *len = 0;
-	int* added = 0;
-	
-	weight = malloc(sizeof(int*)*diagonals);
-	len = malloc(sizeof(int*)*diagonals);
-	added = malloc(sizeof(int*)*diagonals);
-	for (i = 0; i < diagonals;i++){
-		weight[i] = 0;
-		len[i] = 0;
-		added[i] = 0;
-	}
-
-	c = 1;
-	for (i =  seqlen-2;i--;){
-		for (hv = 0; hv < diagonals;hv++){
-			added[hv] = 0;
-		}
-	
-		hv = (seq[i] << 5) + seq[i+1];
-		//printf("3:%d\n",hv);
-		if (hash[hv]){
-			node_p = hash[hv];
-			while(node_p){
-				added[node_p->pos+c] = 1; 
-				weight[node_p->pos+c]++;
-	//			len[node_p->pos+c] = 1 + len[node_p->pos+c];
-				node_p = node_p->next;
-			}
-		}
-
-
-		hv = (seq[i] << 5) + seq[i+2];
-		//printf("3:%d\n",hv);
-		if (hash[hv]){
-			node_p = hash[hv];
-			while(node_p){
-				added[node_p->pos+c] = 1; 
-				weight[node_p->pos+c]++;
-	//			len[node_p->pos+c] = 1 + len[node_p->pos+c];
-				node_p = node_p->next;
-			}
-		}
-		hv = (seq[i+1] << 5) + seq[i+2];
-		//printf("3:%d\n",hv);
-		if (hash[hv]){
-			node_p = hash[hv];
-			while(node_p){
-				added[node_p->pos+c] = 1; 
-				weight[node_p->pos+c]++;
-	//			len[node_p->pos+c] = 1 + len[node_p->pos+c];
-				node_p = node_p->next;
-			}
-		}
-	//	fprintf(stderr,"pos_a:%d	",i+1);
-		
-		for (hv = 0; hv < diagonals ;hv++){
-			len[hv] += added[hv];
-			if(!added[hv] && len[hv]){
-				if (len[hv] > dlen){
-					dlen = len[hv];
-				}
-				len[hv] = 0;
-				weight[hv] = 0;
-			}
-	//		fprintf(stderr,"%d,%d	",hv,(hv - (len_a))+i+3);
-		}
-	//	fprintf(stderr,"\n");
-		c++;
-	}
-	i++;
-	
-	//fprintf(stderr,"pos_a:%d	",i);
-	for (hv = 0; hv < diagonals;hv++){
-		if(len[hv]){
-			if (len[hv] > dlen){
-				dlen = len[hv];
-			}
-			len[hv] = 0;
-			weight[hv] = 0;
-		}
-
-	}
-	free(weight);
-	free(len);
-	free(added);
-	return dlen;
-}
-
-float** protein_wu_distance(struct alignment* si,float** dm,struct parameters* param, int nj)
-{
-	struct bignode* hash[1024];
-	int*p =0;
-	int i,j,a,b;
-	unsigned int hv;
-	float min;
-	float cutoff;
-	
-	for (i = 0;i < 1024;i++){
-		hash[i] = 0;
-	}	
-
-	if (nj){
-		dm = malloc (sizeof(float*)*numprofiles);
-		for (i = numprofiles;i--;){
-			dm[i] = malloc (sizeof (float)*(numprofiles));
-			for (j = numprofiles;j--;){
-				dm[i][j] = 0.0f;
-			}
-		}
-	}else{
-		dm = malloc (sizeof(float*)*numseq);
-		for (i = numseq;i--;){
-			dm[i] = malloc (sizeof (float)*(numseq));
-			for (j = numseq;j--;){
-				dm[i][j] = 0.0f;
-			}
-		}
-	}
-	fprintf(stderr,"Distance Calculation:\n");
-	b = (numseq*(numseq-1))/2;
-	a = 1;	
-	
-	for (i = 0; i < numseq-1;i++){
-		p = si->s[i];
-				
-		for (j = si->sl[i]-2;j--;){
-			//hv = (p[j+1] << 5) + p[j+2];
-			//hash[hv] = big_insert_hash(hash[hv],j);
-			hv = (p[j] << 5) + p[j+1];
-			hash[hv] = big_insert_hash(hash[hv],j);
-			hv = (p[j] << 5) + p[j+2];
-			hash[hv] = big_insert_hash(hash[hv],j);
-		}
-		for (j = i+1; j < numseq;j++){
-			min =  (si->sl[i] > si->sl[j]) ? si->sl[j] :si->sl[i];
-			cutoff = param->internal_gap_weight *min + param->zlevel;
-			//cutoff = param->zlevel;
-			p = si->s[j];
-			dm[i][j] = protein_wu_distance_calculation(hash,p,si->sl[j],si->sl[j]+si->sl[i],cutoff);
-			//fprintf(stderr,"%d-%d:%f\n",i,j,dm[i][j]);
-			//exit(0);
-			//dm[i][j] /= min;
-			//dm[i][j] /= (si->sl[i] > si->sl[j]) ? si->sl[j] :si->sl[i];
-			dm[j][i] = dm[i][j];
-			fprintf(stderr,"\r%8.0f percent done",(float)a /(float)b * 100);
-			a++;
-		}
-		
-		
-		for (j = 1024;j--;){
-			if (hash[j]){
-				big_remove_nodes(hash[j]);
-				hash[j] = 0;
-			}
-		}	
-	}
-	return dm;
-}
-
-
-float protein_wu_distance_calculation(struct bignode* hash[],const int* seq,const int seqlen,const int diagonals,const float mode)
-{
-
-	struct bignode* node_p;
-	unsigned int* d = 0;
-	unsigned int* tmp = 0;
-	float out = 0.0;
-	register int i,j;
-	register unsigned int hv;
-
-	d = malloc(sizeof(unsigned int)*diagonals);
-	//for (i = diagonals;i--;){
-	for (i = 0;i < diagonals;i++){
-		d[i] = 0;
-	}
-	for (i = seqlen-2;i--;){
-
-		/*hv = (seq[i+1] << 5) + seq[i+2];
-		
-		node_p = hash[hv];
-		while(node_p){
-			tmp = node_p->pos;
-			for(j = 0;j < node_p->num;j++){
-				d[tmp[j]]++;
-			}
-			node_p = node_p->next;
-		}*/
-		hv = (seq[i] << 5) + seq[i+1];
-		//printf("3:%d\n",hv);
-		node_p = hash[hv];
-		while(node_p){
-			tmp = node_p->pos;
-			for(j = 0;j < node_p->num;j++){
-				d[tmp[j]]++;
-				d[tmp[j]+1]++;
-			}
-			node_p = node_p->next;
-		}
-		hv = (seq[i] << 5) + seq[i+2];
-
-		node_p = hash[hv];
-					
-		while(node_p){
-			tmp = node_p->pos;
-			for(j = 0;j < node_p->num;j++){
-				d[tmp[j]]++;
-			}
-			node_p = node_p->next;
-		}		
-		d++;
-	}
-	//exit(0);
-	d -= (seqlen-2);
-
-	for (i = diagonals;i--;){
-		//d[i] /= minlen;
-		
-		//fprintf(stderr,"%d ",d[i]);
-		if(d[i] > mode){
-			out += d[i];
-		//	printf("%f	%d\n",d[i]/ minlen,d[i]);
-		}
-	}
-	free(d);
-	return out;
-}
-
-float** dna_distance(struct alignment* si,float** dm,struct parameters* param, int nj)
-{
-	struct bignode* hash[1024];
-	
-	int *p = 0;
-	int i,j,a,b;
-	unsigned int hv;
-	
-	
-	fprintf(stderr,"Distance Calculation:\n");
-	
-	
-	for (i = 0;i < 1024;i++){
-		hash[i] = 0;
-	}	
-
-	if (nj){
-		dm = malloc (sizeof(float*)*numprofiles);
-		for (i = numprofiles;i--;){
-			dm[i] = malloc (sizeof (float)*(numprofiles));
-			for (j = numprofiles;j--;){
-				dm[i][j] = 0.0f;
-			}
-		}
-	}else{
-		dm = malloc (sizeof(float*)*numseq);
-		for (i = numseq;i--;){
-			dm[i] = malloc (sizeof (float)*(numseq));
-			for (j = numseq;j--;){
-				dm[i][j] = 0.0f;
-			}
-		}
-	}
-
-	b = (numseq*(numseq-1))/2;
-	a = 1;	
-	
-	for (i = 0; i < numseq-1;i++){
-		p = si->s[i];
-		for (j = si->sl[i]-5;j--;){
-			hv = ((p[j]&3)<<8) + ((p[j+1]&3)<<6) + ((p[j+2]&3)<<4)  + ((p[j+3]&3)<<2) + (p[j+4]&3);//ABCDE
-			hash[hv] = big_insert_hash(hash[hv],j);
-			hv = ((p[j]&3)<<8) + ((p[j+1]&3)<<6) + ((p[j+2]&3)<<4)  + ((p[j+3]&3)<<2) + (p[j+5]&3);//ABCDF
-			hash[hv] = big_insert_hash(hash[hv],j);
-			hv = ((p[j]&3)<<8) + ((p[j+1]&3)<<6) + ((p[j+2]&3)<<4)  + ((p[j+4]&3)<<2) + (p[j+5]&3);//ABCEF
-			hash[hv] = big_insert_hash(hash[hv],j);
-			hv = ((p[j]&3)<<8) + ((p[j+1]&3)<<6) + ((p[j+3]&3)<<4)  + ((p[j+4]&3)<<2) + (p[j+5]&3);//ABDEF
-			hash[hv] = big_insert_hash(hash[hv],j);
-			hv = ((p[j]&3)<<8) + ((p[j+2]&3)<<6) + ((p[j+3]&3)<<4) + ((p[j+4]&3)<<2) + (p[j+5]&3);//ACDEF
-			hash[hv] = big_insert_hash(hash[hv],j);
-		}
-		for (j = i+1; j < numseq;j++){
-		
-		
-			//min =  (si->sl[i] > si->sl[j]) ?si->sl[j] :si->sl[i];
-			dm[i][j] = dna_distance_calculation(hash,si->s[j],si->sl[j],si->sl[j]+si->sl[i],param->zlevel);
-			dm[i][j] /= (si->sl[i] > si->sl[j]) ?si->sl[j] :si->sl[i];
-			dm[j][i] = dm[i][j];
-			fprintf(stderr,"\r%8.0f percent done",(float)a /(float)b * 100);
-			a++;
-		}
-		
-		for (j = 1024;j--;){
-			if (hash[j]){
-				big_remove_nodes(hash[j]);
-				hash[j] = 0;
-			}
-		}
-	}
-	return dm;
-}
-
-float dna_distance_calculation(struct bignode* hash[],int* p,int seqlen,int diagonals,float mode)
-{
-
-	struct bignode* node_p;
-	float out = 0.0;
-	unsigned int* tmp = 0;
-	unsigned int* d = 0;
-	int i,j;
-	unsigned int hv;
-	
-	d = malloc(sizeof(int)*diagonals);
-	for (i = 0;i < diagonals;i++){
-		d[i] = 0;
-	}
-	for (i = seqlen-5;i--;){
-	
-		hv = ((p[i]&3)<<8) + ((p[i+1]&3)<<6) + ((p[i+2]&3)<<4)  + ((p[i+3]&3)<<2) + (p[i+4]&3);//ABCDE
-		if (hash[hv]){
-			node_p = hash[hv];		
-			while(node_p){
-				tmp = node_p->pos;
-				for(j = 0;j < node_p->num;j++){
-					d[tmp[j]]++;
-				}
-				node_p = node_p->next;
-			}
-		}	
-			
-
-		hv = ((p[i]&3)<<8) + ((p[i+1]&3)<<6) + ((p[i+2]&3)<<4)  + ((p[i+3]&3)<<2) + (p[i+5]&3);//ABCDF
-		if (hash[hv]){
-			node_p = hash[hv];		
-			while(node_p){
-				tmp = node_p->pos;
-				for(j = 0;j < node_p->num;j++){
-					d[tmp[j]]++;
-				}
-				node_p = node_p->next;
-			}
-		}	
-		hv = ((p[i]&3)<<8) + ((p[i+1]&3)<<6) + ((p[i+2]&3)<<4)  + ((p[i+4]&3)<<2) + (p[i+5]&3);//ABCEF
-		if (hash[hv]){
-			node_p = hash[hv];		
-			while(node_p){
-				tmp = node_p->pos;
-				for(j = 0;j < node_p->num;j++){
-					d[tmp[j]]++;
-				}
-				node_p = node_p->next;
-			}
-		}	
-		hv = ((p[i]&3)<<8) + ((p[i+1]&3)<<6) + ((p[i+3]&3)<<4)  + ((p[i+4]&3)<<2) + (p[i+5]&3);//ABDEF
-		if (hash[hv]){
-			node_p = hash[hv];		
-			while(node_p){
-				tmp = node_p->pos;
-				for(j = 0;j < node_p->num;j++){
-					d[tmp[j]]++;
-				}
-				node_p = node_p->next;
-			}
-		}	
-		hv = ((p[i]&3)<<8) + ((p[i+2]&3)<<6) + ((p[i+3]&3)<<4) + ((p[i+4]&3)<<2) + (p[i+5]&3);//ACDEF
-		if (hash[hv]){
-			node_p = hash[hv];		
-			while(node_p){
-				tmp = node_p->pos;
-				for(j = 0;j < node_p->num;j++){
-					d[tmp[j]]++;
-				}
-				node_p = node_p->next;
-			}
-		}	
-	
-		d++;
-	}
-	//exit(0);
-	d -= (seqlen-5);
-	
-	for (i = diagonals;i--;){
-		//d[i] /= minlen;
-		
-		//printf("%d ",d[i]);
-		
-		if(d[i] > mode){
-		//fprintf(stderr,"%f	%d\n",d[i]/ minlen,d[i]);
-			out += d[i];
-		}
-	}
-	free(d);
-	return out;
-}
-
-

Deleted: trunk/packages/kalign/trunk/kalign2_dp.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_dp.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_dp.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,3347 +0,0 @@
-/*
-	kalign2_dp.c 
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-
-int* f_only_pp_dyn(int* path, struct dp_matrix *dp,const float* fprof1,const float* fprof2,const int len_a,const int len_b,int fdim,int stride)
-{
-//	unsigned int freq[26];
-	
-	struct states* s = 0;
-	char** trace = 0;
-	char* tracep = 0;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-	register int f = 0;
-
-	s = dp->s;
-	
-	trace = dp->tb;
-
-	trace[len_a][len_b] = 32;
-
-	fprof1 += len_a * stride;
-	
-
-	s[len_b].a = 0.0;
-	s[len_b].ga = -FLOATINFTY;
-	s[len_b].gb = -FLOATINFTY;
-	//init of first row;
-	tracep = trace[len_a];
-	
-	j = len_b;
-	while(--j){
-		s[j].a = -FLOATINFTY;
-		//s[j].ga = 0;	
-
-		s[j].ga = s[j+1].a;//+prof2[29];
-		if (s[j+1].ga > s[j].ga){
-			s[j].ga = s[j+1].ga ;
-		}
-		s[j].gb = -FLOATINFTY;
-		tracep[j] = 8;
-	}
-	
-	s[0].a = -FLOATINFTY;
-	s[0].ga = -FLOATINFTY;
-	s[0].gb = -FLOATINFTY;
-	i = len_a;
-	while(--i){
-		
-		fprof1 -= stride;
-		
-		tracep = trace[i];
-  		pa = s[len_b].a;
-		pga = s[len_b].ga;
-		pgb = s[len_b].gb;
-		s[len_b].a = -FLOATINFTY;
-		s[len_b].ga = -FLOATINFTY;
-		//s[len_b].gb = 0;
-
-		s[len_b].gb = pa;//+prof1[29];
-		if(pgb > s[len_b].gb){
-			s[len_b].gb = pgb;
-		}
-	
-		tracep[len_b] = 16;
-		
-		j = len_b;
-		
-		fprof2 += len_b * stride;
-		
-		while(--j){
-			
-			fprof2 -= stride;
-			ca = s[j].a;
-
-			c = 1;
-			if((pga) > pa){
-				pa = pga;
-				c = 2;
-			}
-			if((pgb) > pa){
-				pa = pgb;
-				c = 4;
-			}
-					
-			for (f = 0; f < fdim;f++){
-//				fprintf(stderr,"%d	%d:	%d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
-				pa += fprof1[f] * fprof2[f+fdim];
-			}
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j+1].a;
-			if (s[j+1].ga > s[j].ga){
-				s[j].ga = s[j+1].ga;
-				c |= 8;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca;
-			if(pgb > s[j].gb){
-				s[j].gb = pgb;
-				c |= 16;
-			}
-			tracep[j] = c;
-			pa = ca;
-
-		}
-			
-		fprof2 -= stride;
-		//LAST CELL (0)
-		ca = s[0].a;
-
-		c = 1;
-		if((pga) > pa){
-			pa = pga;
-			c = 2;
-		}
-		if((pgb) > pa){
-			pa = pgb;
-			c = 4;
-		}
-				
-		for (f = 0; f < fdim;f++){
-//			fprintf(stderr,"%d	%d:	%d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
-			pa += fprof1[f] * fprof2[f+fdim];
-		}
-		
-		s[0].a = pa;
-		
-		s[0].ga = -FLOATINFTY;
-		
-		pgb = s[0].gb;
-		s[0].gb = ca;
- 		if(pgb> s[0].gb){
-			s[0].gb = pgb;
-			c |= 16;
-		}
-		tracep[0] = c;
-		
-	}
-	
-	fprof1 -= stride;
-
-	tracep = trace[0];
-	j = len_b;
-
-	fprof2 += len_b * stride;
-
-	pa = s[j].a;
-	pga = s[j].ga;
-	pgb = s[j].gb;
-	s[j].a = -FLOATINFTY;
-	s[j].ga = -FLOATINFTY;
-	//s[j].gb = -INFTY;
-	s[len_b].gb = pa;//+prof1[29];
-	if(pgb > s[len_b].gb){
-		s[len_b].gb = pgb;
-	}
-
-
-
-	while(--j){
-
-		fprof2 -= stride;
-
-		ca = s[j].a;
-
-		c = 1;
-
-		if((pga) > pa){
-			pa = pga;
-			c = 2;
-		}
-
-		if((pgb) > pa){
-			pa = pgb;
-			c = 4;
-		}
-
-		for (f = 0; f < fdim;f++){
-			pa += fprof1[f] * fprof2[f+fdim];
-//			fprintf(stderr,"%d	%d:	%d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
-		}
-
-
-		s[j].a = pa;
-		pga = s[j].ga;
-		s[j].ga = s[j+1].a;
-		if (s[j+1].ga > s[j].ga){
-			s[j].ga = s[j+1].ga;
-			c |= 8;
-		}
-		pgb = s[j].gb;
-		s[j].gb = -FLOATINFTY;
-
-		tracep[j] = c;
-		pa = ca;
-	}
-
-	fprof2 -= stride;
-
-	ca = s[0].a;
-
-	c = 1;
-
-	if((pga) > pa){
-		pa = pga;
-		c = 2;
-	}
-	if((pgb) > pa){
-		pa = pgb;
-		c = 4;
-	}
-
-	for (f = 0; f < fdim;f++){
-		pa += fprof1[f] * fprof2[f+fdim];
-//		fprintf(stderr,"%d	%d:	%d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
-	}
-
-	s[0].a = pa;
-
-	s[0].ga = s[1].a;
-	if (s[1].ga > s[0].ga){
-		s[0].ga = s[1].ga;
-		c |= 8;
-	}
-
-	pgb = s[0].gb;
-	s[0].gb = ca;
-	if(pgb> s[0].gb){
-		s[0].gb = pgb;
-		c |= 16;
-	}
-	tracep[0] = c;
-
-	pgb = s[0].gb;
-	c = 2;
-	if(s[0].ga > pgb){
-		pgb = s[0].ga;
-		c = 1;
-	}
-	if(s[0].a >= pgb){
-		pgb = s[0].a;
-		c = 0;
-	}
-
-	//fprintf(stderr,"SCORE:%d\n",ca);
-	ca = c;
-	
-	i = 0;
-	j = 0;
-	f = 1;
-	while(trace[i][j] < 32){
-	//	fprintf(stderr,"%d->%d	%d:%d	%d:%d\n",c,trace[i][j],i,j,len_a,len_b);
-		switch(f){
-			case 0:
-				if (trace[i][j] & 2){
-					f = 1;
-					if(i+1!= len_a){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}else if (trace[i][j] & 4){
-					f = 2;
-					if(j+1!= len_b){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}
-
-				//path[c] = 0;
-				i++;
-				j++;
-			break;
-			case 1:
-				if(trace[i][j] & 8){
-					f = 1;
-					if(i!=0 && i!= len_a){
-	//				/	fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					f = 0;
-					if(i!=0 && i!= len_a){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-				}
-				path[c] |= 1;
-				j++;
-			break;
-			case  2:
-				if(trace[i][j] & 16){
-					f = 2;
-					if(j !=0 && j != len_b){
-	//					fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					f = 0;
-					if(j!=0 && j != len_b){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-					
-				}
-				path[c] |= 2;
-				i++;
-			break;
-		}
-		c++;
-	}
-	path[0] = c-1;
-	path[c] = 3;
-	path[c+1] = pgb;
-	return path;
-}
-
-
-
-int* fpp_dyn(int* path, struct dp_matrix *dp,const float* prof1,const float* prof2,const float* fprof1,const float* fprof2,const int len_a,const int len_b,int fdim,int stride)
-{
-	unsigned int freq[26];
-	
-	struct states* s = 0;
-	char** trace = 0;
-	char* tracep = 0;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-	register int f = 0;
-	
-
-	s = dp->s;
-	
-	trace = dp->tb;
-
-	trace[len_a][len_b] = 32;
-
-	prof1 +=  len_a << 6;
-	
-	fprof1 += len_a * stride;
-	
-
-	s[len_b].a = 0;
-	s[len_b].ga = -FLOATINFTY;
-	s[len_b].gb = -FLOATINFTY;
-	//init of first row;
-	tracep = trace[len_a];
-	
-	j = len_b;
-	while(--j){
-		s[j].a = -FLOATINFTY;
-		//s[j].ga = 0;	
-		
-		s[j].ga = s[j+1].a+prof2[29];//+prof2[29];
-		if (s[j+1].ga+prof2[29] > s[j].ga){
-			s[j].ga = s[j+1].ga+prof2[29];
-		}
-		s[j].gb = -FLOATINFTY;
-		tracep[j] = 8;
-	}
-	
-	s[0].a = -FLOATINFTY;
-	s[0].ga = -FLOATINFTY;
-	s[0].gb = -FLOATINFTY;
-	i = len_a;
-	while(--i){
-		prof1 -= 64;
-		
-		fprof1 -= stride;
-
-		c = 1;
-		for (j = 26; j--;){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;	
-			}
-		}
-		freq[0] = c;
-		
-		tracep = trace[i];
-		pa = s[len_b].a;
-		pga = s[len_b].ga;
-		pgb = s[len_b].gb;
-		s[len_b].a = -FLOATINFTY;
-		s[len_b].ga = -FLOATINFTY;
-		//s[len_b].gb = 0;
-		
-		s[len_b].gb = pa+prof1[29];//+prof1[29];
-		if(pgb+prof1[29] > s[len_b].gb){
-			s[len_b].gb = pgb+prof1[29];
-		}
-	
-		tracep[len_b] = 16;
-		
-		j = len_b;
-		prof2 += len_b << 6;
-		
-		fprof2 += len_b * stride;
-		
-		while(--j){
-			prof2 -= 64;
-			
-			fprof2 -= stride;
-			ca = s[j].a;
-
-			c = 1;
-			if((pga += prof2[91]) > pa){
-				pa = pga;
-				c = 2;
-			}
-			if((pgb += prof1[91]) > pa){
-				pa = pgb;
-				c = 4;
-			}
-			
-			prof2 += 32;
-			for (f = freq[0];--f;){
-				pa += prof1[freq[f]]*prof2[freq[f]];
-			}
-			prof2 -= 32;
-			
-			for (f = 0; f < fdim;f++){
-			//	fprintf(stderr,"%d	%d:	%d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
-				pa += fprof1[f] * fprof2[f+fdim];
-			}
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j+1].a+prof2[27];
-			if (s[j+1].ga+prof2[28] > s[j].ga){
-				s[j].ga = s[j+1].ga+prof2[28];
-				c |= 8;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[27];
-			if(pgb+prof1[28] > s[j].gb){
-				s[j].gb = pgb+prof1[28];
-				c |= 16;
-			}
-			tracep[j] = c;
-			pa = ca;
-
-		}
-	
-		prof2 -= 64;
-		
-		fprof2 -= stride;
-		//LAST CELL (0)
-		ca = s[0].a;
-
-		c = 1;
-		if((pga+=prof2[91]) > pa){
-			pa = pga;
-			c = 2;
-		}
-		if((pgb+=prof1[91]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		prof2 += 32;
-		for (f = freq[0];--f;){
-			pa += prof1[freq[f]]*prof2[freq[f]];
-		}
-		prof2 -= 32;
-		
-		for (f = 0; f < fdim;f++){
-		//	fprintf(stderr,"%d	%d:	%d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
-			pa += fprof1[f] * fprof2[f+fdim];
-		}
-		
-		s[0].a = pa;
-		
-		s[0].ga = -FLOATINFTY;
-		
-		pgb = s[0].gb;
-		s[0].gb = ca+prof1[27]+prof1[29];
- 		if(pgb+prof1[29] > s[0].gb){
-			s[0].gb = pgb+prof1[29];
-			c |= 16;
-		}
-		tracep[0] = c;	
-		
-	}
-	prof1 -= 64;
-	
-	fprof1 -= stride;
-	
-	c = 1;
-	for (j = 26; j--;){
-		if(prof1[j]){
-			freq[c] = j;
-			c++;	
-		}
-	}
-	freq[0] = c;
-	
-	tracep = trace[0];
-	j = len_b;
-	prof2 += len_b << 6;
-	
-	fprof2 += len_b * stride;
-	
-	pa = s[j].a;
-	pga = s[j].ga;
-	pgb = s[j].gb;
-	s[j].a = -FLOATINFTY;
-	s[j].ga = -FLOATINFTY;
-	//s[j].gb = -INFTY;
-	s[len_b].gb = pa+prof1[29];//+prof1[29];
-	if(pgb+prof1[29] > s[len_b].gb){
-		s[len_b].gb = pgb+prof1[29];
-	}
-
-
-	
-	while(--j){
-		prof2 -= 64;
-		
-		fprof2 -= stride;
-		
-		ca = s[j].a;
-
-		c = 1;
-
-		if((pga+=prof2[91]) > pa){
-			pa = pga;
-			c = 2;
-		}
-
-		if((pgb+=prof1[91]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		prof2+=32;
-		for (f = freq[0];--f;){
-			pa += prof1[freq[f]]*prof2[freq[f]];
-		}
-		prof2-=32;
-		
-		
-		for (f = 0; f < fdim;f++){
-			pa += fprof1[f] * fprof2[f+fdim];
-//			fprintf(stderr,"%d	%d:	%d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
-		}
-		
-		
-		s[j].a = pa;
-		pga = s[j].ga;
-		s[j].ga = s[j+1].a+prof2[27]+prof2[29];
-		if (s[j+1].ga+prof2[29] > s[j].ga){
-			s[j].ga = s[j+1].ga+prof2[29];
-			c |= 8;
-		}	
-		pgb = s[j].gb;
-		s[j].gb = -FLOATINFTY;	
-		
-		tracep[j] = c;
-		pa = ca;
-	}
-	prof2 -= 64;
-	
-	fprof2 -= stride;
-
-	ca = s[0].a;
-	
-	c = 1;
-	
-	if((pga+=prof2[91]) > pa){
-		pa = pga;
-		c = 2;
-	}
-	if((pgb+=prof1[91]) > pa){
-		pa = pgb;
-		c = 4;
-	}
-	prof2+=32;
-	for (f = freq[0];--f;){
-		pa += prof1[freq[f]]*prof2[freq[f]];
-	}
-	prof2-=32;
-			
-	for (f = 0; f < fdim;f++){
-		pa += fprof1[f] * fprof2[f+fdim];
-//		fprintf(stderr,"%d	%d:	%d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
-	}
-	
-	s[0].a = pa;
-	
-	s[0].ga = s[1].a+prof2[27]+prof2[29];
-	if (s[1].ga+prof2[29] > s[0].ga){
-		s[0].ga = s[1].ga+prof2[29];
-		c |= 8;
-	}
-	
-	pgb = s[0].gb;
-	s[0].gb = ca+prof1[27]+prof1[29];
-	if(pgb +prof1[29]> s[0].gb){
-		s[0].gb = pgb+prof1[29];
-		c |= 16;
-	}	
-	tracep[0] = c;
-
-	pgb = s[0].gb;
-	c = 2;
-	if(s[0].ga > pgb){
-		pgb = s[0].ga;
-		c = 1;
-	}
-	if(s[0].a >= pgb){
-		pgb = s[0].a;
-		c = 0;
-	}
-	
-	//fprintf(stderr,"SCORE:%d\n",ca);
-	f = c;
-	
-	i = 0;
-	j = 0;
-	c = 1;
-	while(trace[i][j] < 32){
-	//	fprintf(stderr,"%d->%d	%d:%d	%d:%d\n",c,trace[i][j],i,j,len_a,len_b);
-		switch(f){
-			case 0:
-				if (trace[i][j] & 2){
-					f = 1;
-					if(i+1!= len_a){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}else if (trace[i][j] & 4){
-					f = 2;
-					if(j+1!= len_b){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}
-
-				//path[c] = 0;
-				i++;
-				j++;
-			break;
-			case 1:
-				if(trace[i][j] & 8){
-					f = 1;
-					if(i!=0 && i!= len_a){
-	//				/	fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					f = 0;
-					if(i!=0 && i!= len_a){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-				}
-				path[c] |= 1;
-				j++;
-			break;
-			case  2:
-				if(trace[i][j] & 16){
-					f = 2;
-					if(j !=0 && j != len_b){
-	//					fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					f = 0;
-					if(j!=0 && j != len_b){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-					
-				}
-				path[c] |= 2;
-				i++;
-			break;
-		}
-		c++;
-	}
-	path[0] = c-1;
-	path[c] = 3;
-	path[c+1] = pgb;
-	return path;
-}
-/*
-int* dna_pp_dyn(int* path, struct dp_matrix *dp,const int* prof1,const int* prof2,const int len_a,const int len_b)
-{
-
-	struct states* s = 0;
-	char** trace = 0;
-	char* tracep = 0;
-	register int pa = 0;
-	register int pga = 0;
-	register int pgb = 0;
-	register int ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-
-	s = dp->s;
-	
-	trace = dp->tb;
-
-	trace[len_a][len_b] = 32;
-
-	prof1 +=  len_a * 22;
-
-	s[len_b].a = 0;
-	s[len_b].ga = -INFTY;
-	s[len_b].gb = -INFTY;
-	//init of first row;
-	tracep = trace[len_a];
-	
-	j = len_b;
-	while(--j){
-		s[j].a = -INFTY;
-		//s[j].ga = 0;	
-		
-		s[j].ga = s[j+1].a+prof2[10];//+prof2[29];
-		if (s[j+1].ga+prof2[10] > s[j].ga){
-			s[j].ga = s[j+1].ga+prof2[10];
-		}
-		s[j].gb = -INFTY;
-		tracep[j] = 8;
-	}
-	
-	s[0].a = -INFTY;
-	s[0].ga = -INFTY;
-	s[0].gb = -INFTY;
-	i = len_a;
-	while(--i){
-		prof1 -= 22;
-
-		tracep = trace[i];
-		pa = s[len_b].a;
-		pga = s[len_b].ga;
-		pgb = s[len_b].gb;
-		s[len_b].a = -INFTY;
-		s[len_b].ga = -INFTY;
-		//s[len_b].gb = 0;
-		
-		s[len_b].gb = pa+prof1[10];//+prof1[29];
-		if(pgb+prof1[10] > s[len_b].gb){
-			s[len_b].gb = pgb+prof1[10];
-		}
-	
-		tracep[len_b] = 16;
-		
-		j = len_b;
-		prof2 += len_b *22;
-		while(--j){
-			prof2 -= 22;
-			ca = s[j].a;
-
-			c = 1;
-			if((pga += prof2[30]) > pa){
-				pa = pga;
-				c = 2;
-			}
-			if((pgb += prof1[30]) > pa){
-				pa = pgb;
-				c = 4;
-			}
-			
-			prof2 += 11;
-			for (pga = 8;pga--;){
-				pa += prof1[pga]*prof2[pga];
-			}
-			prof2 -= 11;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j+1].a+prof2[8];
-			if (s[j+1].ga+prof2[9] > s[j].ga){
-				s[j].ga = s[j+1].ga+prof2[9];
-				c |= 8;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[8];
-			if(pgb+prof1[9] > s[j].gb){
-				s[j].gb = pgb+prof1[9];
-				c |= 16;
-			}
-			tracep[j] = c;
-			pa = ca;
-
-		}
-	
-		prof2 -= 22;
-		//LAST CELL (0)
-		ca = s[0].a;
-
-		c = 1;
-		if((pga+=prof2[30]) > pa){
-			pa = pga;
-			c = 2;
-		}
-		if((pgb+=prof1[30]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		prof2 += 11;
-		for (pga = 8;pga--;){
-			pa += prof1[pga]*prof2[pga];
-		}
-		prof2 -= 11;
-		
-		s[0].a = pa;
-		
-		s[0].ga = -INFTY;
-		
-		pgb = s[0].gb;
-		s[0].gb = ca+prof1[8]+prof1[10];
- 		if(pgb+prof1[10] > s[0].gb){
-			s[0].gb = pgb+prof1[10];
-			c |= 16;
-		}
-		tracep[0] = c;	
-		
-	}
-	prof1 -= 22;
-	
-	tracep = trace[0];
-	j = len_b;
-	prof2 += len_b *22;
-	pa = s[j].a;
-	pga = s[j].ga;
-	pgb = s[j].gb;
-	s[j].a = -INFTY;
-	s[j].ga = -INFTY;
-	//s[j].gb = -INFTY;
-	s[len_b].gb = pa+prof1[10];//+prof1[29];
-	if(pgb+prof1[10] > s[len_b].gb){
-		s[len_b].gb = pgb+prof1[10];
-	}
-
-
-	
-	while(--j){
-		prof2 -= 22;
-		ca = s[j].a;
-
-		c = 1;
-
-		if((pga+=prof2[30]) > pa){
-			pa = pga;
-			c = 2;
-		}
-
-		if((pgb+=prof1[30]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		prof2+=11;
-		
-		for (pga = 8;pga--;){
-			pa += prof1[pga]*prof2[pga];
-		}
-		prof2-=11;
-		
-		s[j].a = pa;
-		pga = s[j].ga;
-		s[j].ga = s[j+1].a+prof2[2]+prof2[10];
-		if (s[j+1].ga+prof2[10] > s[j].ga){
-			s[j].ga = s[j+1].ga+prof2[10];
-			c |= 8;
-		}	
-		pgb = s[j].gb;
-		s[j].gb = -INFTY;	
-		
-		tracep[j] = c;
-		pa = ca;
-	}
-	prof2 -= 22;
-
-	ca = s[0].a;
-	
-	c = 1;
-	
-	if((pga+=prof2[30]) > pa){
-		pa = pga;
-		c = 2;
-	}
-	if((pgb+=prof1[30]) > pa){
-		pa = pgb;
-		c = 4;
-	}
-	prof2+=11;
-	for (pga = 8;pga--;){
-		pa += prof1[pga]*prof2[pga];
-	}
-	prof2-=11;
-	
-	s[0].a = pa;
-	
-	s[0].ga = s[1].a+prof2[8]+prof2[10];
-	if (s[1].ga+prof2[10] > s[0].ga){
-		s[0].ga = s[1].ga+prof2[10];
-		c |= 8;
-	}
-	
-	pgb = s[0].gb;
-	s[0].gb = ca+prof1[8]+prof1[10];
-	if(pgb +prof1[10]> s[0].gb){
-		s[0].gb = pgb+prof1[10];
-		c |= 16;
-	}	
-	tracep[0] = c;
-
-	pgb = s[0].gb;
-	c = 2;
-	if(s[0].ga > pgb){
-		pgb = s[0].ga;
-		c = 1;
-	}
-	if(s[0].a >= pgb){
-		pgb = s[0].a;
-		c = 0;
-	}
-	
-	//fprintf(stderr,"SCORE:%d\n",ca);
-	ca = c;
-	
-	i = 0;
-	j = 0;
-	c = 1;
-	while(trace[i][j] < 32){
-	//	fprintf(stderr,"%d->%d	%d:%d	%d:%d\n",c,trace[i][j],i,j,len_a,len_b);
-		switch(ca){
-			case 0:
-				if (trace[i][j] & 2){
-					ca = 1;
-					if(i+1!= len_a){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}else if (trace[i][j] & 4){
-					ca = 2;
-					if(j+1!= len_b){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}
-
-				//path[c] = 0;
-				i++;
-				j++;
-			break;
-			case 1:
-				if(trace[i][j] & 8){
-					ca = 1;
-					if(i!=0 && i!= len_a){
-	//				/	fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					ca = 0;
-					if(i!=0 && i!= len_a){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-				}
-				path[c] |= 1;
-				j++;
-			break;
-			case  2:
-				if(trace[i][j] & 16){
-					ca = 2;
-					if(j !=0 && j != len_b){
-	//					fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					ca = 0;
-					if(j!=0 && j != len_b){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-					
-				}
-				path[c] |= 2;
-				i++;
-			break;
-		}
-		c++;
-	}
-	path[0] = c-1;
-	path[c] = 3;
-	path[c+1] = pgb;
-	return path;
-}
-
-
-int* pp_dyn2(int* path, struct dp_matrix *dp,const int* prof1,const int* prof2,const int len_a,const int len_b)
-{
-	unsigned int freq[26];
-	
-	struct states* s = 0;
-	char** trace = 0;
-	char* tracep = 0;
-	register int pa = 0;
-	register int pga = 0;
-	register int pgb = 0;
-	register int ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-
-	s = dp->s;
-	
-	trace = dp->tb;
-
-	trace[len_a][len_b] = 32;
-
-	prof1 +=  len_a << 6;
-
-	s[len_b].a = 0;
-	s[len_b].ga = -INFTY;
-	s[len_b].gb = -INFTY;
-	//init of first row;
-	tracep = trace[len_a];
-	
-	j = len_b;
-	while(--j){
-		s[j].a = -INFTY;
-	
-		s[j].ga = s[j+1].a+prof2[29];//+prof2[29];
-		if (s[j+1].ga+prof2[29] > s[j].ga){
-			s[j].ga = s[j+1].ga+prof2[29];
-		}
-		s[j].gb = -INFTY;
-		tracep[j] = 8;
-	}
-	
-	s[0].a = -INFTY;
-	s[0].ga = -INFTY;
-	s[0].gb = -INFTY;
-	i = len_a;
-	while(--i){
-		prof1 -= 64;
-
-		c = 1;
-		for (j = 23; j--;){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;	
-			}
-		}
-		freq[0] = c;
-		
-		tracep = trace[i];
-		pa = s[len_b].a;
-		pga = s[len_b].ga;
-		pgb = s[len_b].gb;
-		s[len_b].a = -INFTY;
-		s[len_b].ga = -INFTY;
-		
-		s[len_b].gb = pa+prof1[29];
-		if(pgb+prof1[29] > s[len_b].gb){
-			s[len_b].gb = pgb+prof1[29];
-		}
-	
-		tracep[len_b] = 16;
-		
-		j = len_b;
-		prof2 += len_b << 6;
-		while(--j){
-			prof2 -= 64;
-			ca = s[j].a;
-
-			c = 1;
-			if((pga += prof2[91]) > pa){
-				pa = pga;
-				c = 2;
-			}
-			if((pgb += prof1[91]) > pa){
-				pa = pgb;
-				c = 4;
-			}
-			
-			prof2 += 32;
-			for (pga = freq[0];--pga;){
-				pgb = freq[pga];
-				pa += prof1[pgb]*prof2[pgb];
-			}
-			prof2 -= 32;
-
-			s[j].a = pa;
-
-			pga = s[j].ga;
-			
-			s[j].ga = s[j+1].a+prof2[27];
-			if (s[j+1].ga+prof2[28] > s[j].ga){
-				s[j].ga = s[j+1].ga+prof2[28];
-				c |= 8;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[27];
-			if(pgb+prof1[28] > s[j].gb){
-				s[j].gb = pgb+prof1[28];
-				c |= 16;
-			}
-			tracep[j] = c;
-			pa = ca;
-
-		}
-	
-		prof2 -= 64;
-		//LAST CELL (0)
-		ca = s[0].a;
-
-		c = 1;
-		if((pga+=prof2[91]) > pa){
-			pa = pga;
-			c = 2;
-		}
-		if((pgb+=prof1[91]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		prof2 += 32;
-		for (pga = freq[0];--pga;){
-			pgb = freq[pga];
-			pa += prof1[pgb]*prof2[pgb];
-		}
-		prof2 -= 32;
-		
-		s[0].a = pa;
-		
-		s[0].ga = -INFTY;
-		
-		pgb = s[0].gb;
-		s[0].gb = ca+prof1[27]+prof1[29];
- 		if(pgb+prof1[29] > s[0].gb){
-			s[0].gb = pgb+prof1[29];
-			c |= 16;
-		}
-		tracep[0] = c;	
-		
-	}
-	prof1 -= 64;
-	
-	c = 1;
-	for (j = 23; j--;){
-		if(prof1[j]){
-			freq[c] = j;
-			c++;	
-		}
-	}
-	freq[0] = c;
-	
-	tracep = trace[0];
-	j = len_b;
-	prof2 += len_b << 6;
-	pa = s[j].a;
-	pga = s[j].ga;
-	pgb = s[j].gb;
-	s[j].a = -INFTY;
-	s[j].ga = -INFTY;
-	
-	s[len_b].gb = pa+prof1[29];
-	if(pgb+prof1[29] > s[len_b].gb){
-		s[len_b].gb = pgb+prof1[29];
-	}
-
-
-	
-	while(--j){
-		prof2 -= 64;
-		ca = s[j].a;
-
-		c = 1;
-
-		if((pga+=prof2[91]) > pa){
-			pa = pga;
-			c = 2;
-		}
-
-		if((pgb+=prof1[91]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		prof2+=32;
-		
-		for (pga = freq[0];--pga;){
-			pgb = freq[pga];
-			pa += prof1[pgb]*prof2[pgb];
-		}
-		prof2-=32;
-		
-		s[j].a = pa;
-		pga = s[j].ga;
-		s[j].ga = s[j+1].a+prof2[27]+prof2[29];
-		if (s[j+1].ga+prof2[29] > s[j].ga){
-			s[j].ga = s[j+1].ga+prof2[29];
-			c |= 8;
-		}	
-		pgb = s[j].gb;
-		s[j].gb = -INFTY;	
-		
-		tracep[j] = c;
-		pa = ca;
-	}
-	prof2 -= 64;
-
-	ca = s[0].a;
-	
-	c = 1;
-	
-	if((pga+=prof2[91]) > pa){
-		pa = pga;
-		c = 2;
-	}
-	if((pgb+=prof1[91]) > pa){
-		pa = pgb;
-		c = 4;
-	}
-	prof2+=32;
-	for (pga = freq[0];--pga;){	
-		pgb = freq[pga];
-		pa += prof1[pgb]*prof2[pgb];
-	}
-	prof2-=32;
-	
-	s[0].a = pa;
-	
-	s[0].ga = s[1].a+prof2[27]+prof2[29];
-	if (s[1].ga+prof2[29] > s[0].ga){
-		s[0].ga = s[1].ga+prof2[29];
-		c |= 8;
-	}
-	
-	pgb = s[0].gb;
-	s[0].gb = ca+prof1[27]+prof1[29];
-	if(pgb +prof1[29]> s[0].gb){
-		s[0].gb = pgb+prof1[29];
-		c |= 16;
-	}	
-	tracep[0] = c;
-
-	pgb = s[0].gb;
-	c = 2;
-	if(s[0].ga > pgb){
-		pgb = s[0].ga;
-		c = 1;
-	}
-	if(s[0].a >= pgb){
-		pgb = s[0].a;
-		c = 0;
-	}
-
-	ca = c;
-	
-	int ga = 1; 
-	int gb = 1;
-	i = 0;
-	j = 0;
-	c = 1;
-	while(trace[i][j] < 32){
-		if(i ==0 || j == 0){
-			path[c] |= 128;
-		}
-		if(i ==len_a || j == len_b){
-			path[c] |= 64;
-		}
-	
-		switch(ca){
-			case 0:
-				if (trace[i][j] & 2){
-					ca = 1;
-				}else if (trace[i][j] & 4){
-					ca = 2;
-				}
-				path[c] = 0;
-				i++;
-				j++;
-			break;
-			case 1:
-				if(trace[i][j] & 8){
-					ca = 1;
-				}else{
-					path[c-(gb-1)] |= gb << 16;
-					gb = 0;
-					ca = 0;
-				}
-				path[c] |= 1;
-				j++;
-				gb++;
-			break;
-			case  2:
-				if(trace[i][j] & 16){
-					ca = 2;
-				}else{
-					path[c-(ga-1)] |= ga << 16;
-					ga = 0;
-					ca = 0;
-				}
-				path[c] |= 2;
-				i++;
-				ga++;
-			break;
-		}
-		c++;
-	}
-	if (ca == 1){
-		path[c-(gb-1)] |= (gb-1) << 16;	
-	}
-	if(ca == 2){
-		path[c-(ga-1)] |= (ga-1) << 16;	
-	}
-	path[0] = c-1;
-	path[c] = 3;
-	path[c+1] = pgb;
-	return path;
-}
-
-int* ps_dyn2(int* path, struct dp_matrix *dp,const int* prof1,const int* seq2,const int len_a,const int len_b,int sip)
-{
-	
-	struct states* s = 0;
-	char** trace = 0;
-	char* tracep = 0;
-	register int pa = 0;
-	register int pga = 0;
-	register int pgb = 0;
-	register int ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-	
-	const int open = gpo * sip;
-	const int ext = gpe *sip; 
-
-	
-
-	s = dp->s;
-	
-	trace = dp->tb;
-
-	trace[len_a][len_b] = 32;
-
-	prof1 +=  len_a << 6;
-
-	s[len_b].a = 0;
-	s[len_b].ga = -INFTY;
-	s[len_b].gb = -INFTY;
-	tracep = trace[len_a];
-	j = len_b;
-	
-
-	while(--j){
-		s[j].a = -INFTY;
-		s[j].ga = s[j+1].a-tgpe;
-		if (s[j+1].ga-tgpe > s[j].ga){
-			s[j].ga = s[j+1].ga-tgpe;
-		}
-		
-		
-		
-		s[j].gb = -INFTY;
-		tracep[j] = 8;
-	}
-	
-	s[0].a = -INFTY;
-	s[0].ga = -INFTY;
-	s[0].gb = -INFTY;
-	i = len_a;
-	while(--i){
-		prof1 -= 64;
-		
-		tracep = trace[i];
-		pa = s[len_b].a;
-		pga = s[len_b].ga;
-		pgb = s[len_b].gb;
-		s[len_b].a = -INFTY;
-		s[len_b].ga = -INFTY;
-
-		s[len_b].gb = pa+prof1[29];
-		if(pgb+prof1[29] > s[len_b].gb){
-			s[len_b].gb = pgb+prof1[29];
-		}
-		
-		
-		
-		
-		tracep[len_b] = 16;
-		
-		j = len_b;
-		
-		while(--j){
-
-			ca = s[j].a;
-
-			c = 1;
-			if((pga -= open) > pa){
-				pa = pga;
-				c = 2;
-			}
-			if((pgb += prof1[91]) > pa){
-				pa = pgb;
-				c = 4;
-			}
-			
-			pa += prof1[32 + seq2[j]];
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j+1].a-open;
-			if (s[j+1].ga-ext > s[j].ga){
-				s[j].ga = s[j+1].ga-ext;
-				c |= 8;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[27];
-			if(pgb+prof1[28] > s[j].gb){
-				s[j].gb = pgb+prof1[28];
-				c |= 16;
-			}
-			tracep[j] = c;
-			pa = ca;
-
-		}
-	
-		ca = s[0].a;
-
-		c = 1;
-		if((pga-=open) > pa){
-			pa = pga;
-			c = 2;
-		}
-		if((pgb+=prof1[91]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		pa += prof1[32+seq2[0]];
-		s[0].a = pa;
-		
-		s[0].ga = -INFTY;
-		
-		pgb = s[0].gb;
-		s[0].gb = ca+prof1[27]+prof1[29];
- 		if(pgb+prof1[29] > s[0].gb){
-			s[0].gb = pgb+prof1[29];
-			c |= 16;
-		}
-		tracep[0] = c;	
-		
-	}
-	prof1 -= 64;
-	
-
-	
-	tracep = trace[0];
-	j = len_b;
-	pa = s[j].a;
-	pga = s[j].ga;
-	pgb = s[j].gb;
-	s[j].a = -INFTY;
-	s[j].ga = -INFTY;
-
-	s[len_b].gb = pa+prof1[29];
-	if(pgb+prof1[29] > s[len_b].gb){
-		s[len_b].gb = pgb+prof1[29];
-	}
-
-	
-	while(--j){
-
-		ca = s[j].a;
-
-		c = 1;
-
-		if((pga-=open) > pa){
-			pa = pga;
-			c = 2;
-		}
-
-		if((pgb+=prof1[91]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		pa += prof1[32+seq2[j]];		
-		s[j].a = pa;
-		pga = s[j].ga;
-		s[j].ga = s[j+1].a-(open+tgpe);
-		if (s[j+1].ga-tgpe > s[j].ga){
-			s[j].ga = s[j+1].ga-tgpe;
-			c |= 8;
-		}	
-		pgb = s[j].gb;
-		s[j].gb = -INFTY;	
-		
-		tracep[j] = c;
-		pa = ca;
-	}
-
-
-	ca = s[0].a;
-	
-	c = 1;
-	
-	if((pga-=open) > pa){
-		pa = pga;
-		c = 2;
-	}
-	if((pgb+=prof1[91]) > pa){
-		pa = pgb;
-		c = 4;
-	}
-	pa += prof1[32+seq2[0]];	
-	s[0].a = pa;
-	
-	s[0].ga = s[1].a-(open+tgpe);
-	if (s[1].ga-tgpe > s[0].ga){
-		s[0].ga = s[1].ga-tgpe;
-		c |= 8;
-	}
-	
-	pgb = s[0].gb;
-	s[0].gb = ca+prof1[27]+prof1[29];
-	if(pgb+prof1[29] > s[0].gb){
-		s[0].gb = pgb+prof1[29];
-		c |= 16;
-	}	
-	tracep[0] = c;
-
-
-	pgb = s[0].gb;
-	c = 2;
-	if(s[0].ga > pgb){
-		pgb = s[0].ga;
-		c = 1;
-	}
-	if(s[0].a >= pgb){
-		pgb = s[0].a;
-		c = 0;
-	}
-	
-	ca = c;
-	int ga = 1; 
-	int gb = 1;
-	i = 0;
-	j = 0;
-	c = 1;
-	while(trace[i][j] < 32){
-		if(i ==0 || j == 0){
-			path[c] |= 128;
-		}
-		if(i ==len_a || j == len_b){
-			path[c] |= 64;
-		}
-	
-		switch(ca){
-			case 0:
-				if (trace[i][j] & 2){
-					ca = 1;
-				}else if (trace[i][j] & 4){
-					ca = 2;
-				}
-				path[c] = 0;
-				i++;
-				j++;
-			break;
-			case 1:
-				if(trace[i][j] & 8){
-					ca = 1;
-				}else{
-					path[c-(gb-1)] |= gb << 16;
-					gb = 0;
-					ca = 0;
-				}
-				path[c] |= 1;
-				j++;
-				gb++;
-			break;
-			case  2:
-				if(trace[i][j] & 16){
-					ca = 2;
-				}else{
-					path[c-(ga-1)] |= ga << 16;
-					ga = 0;
-					ca = 0;
-				}
-				path[c] |= 2;
-				i++;
-				ga++;
-			break;
-		}
-		c++;
-	}
-	if (ca == 1){
-		path[c-(gb-1)] |= (gb-1) << 16;	
-	}
-	if(ca == 2){
-		path[c-(ga-1)] |= (ga-1) << 16;	
-	}
-	path[0] = c-1;
-	path[c] = 3;
-	path[c+1] = pgb;
-	return path;
-}
-
-int* ss_dyn2(int**subm,int* path, struct dp_matrix *dp,const int* seq1,const int* seq2,const int len_a,const int len_b)
-{
-	struct states* s = 0;
-	int *subp = 0;
-	char** trace = 0;
-	char* tracep = 0;
-	register int pa = 0;
-	register int pga = 0;
-	register int pgb = 0;
-	register int ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-	
-	s = dp->s;
-	
-	trace = dp->tb;
-
-	trace[len_a][len_b] = 32;
-
-	s[len_b].a = 0;
-	s[len_b].ga = -INFTY;
-	s[len_b].gb = -INFTY;
-	
-
-	tracep = trace[len_a];
-	j = len_b;
-	
-
-	while(--j){
-		s[j].a = -INFTY;
-
-		s[j].ga = s[j+1].a-tgpe;
-		if (s[j+1].ga-tgpe > s[j].ga){
-			s[j].ga = s[j+1].ga-tgpe;
-		}
-				
-		s[j].gb = -INFTY;
-		tracep[j] = 8;
-	}
-	
-	s[0].a = -INFTY;
-	s[0].ga = -INFTY;
-	s[0].gb = -INFTY;
-	
-	i = len_a;
-	while(--i){
-		
-		tracep = trace[i];
-		pa = s[len_b].a;
-		pga = s[len_b].ga;
-		pgb = s[len_b].gb;
-		
-		s[len_b].a = -INFTY;
-		s[len_b].ga = -INFTY;
-		
-		s[len_b].gb = pa-tgpe;
-		if(pgb-tgpe > s[len_b].gb){
-			s[len_b].gb = pgb-tgpe;
-		}
-		
-		
-		tracep[len_b] = 16;
-		j = len_b;
-		subp = subm[seq1[i]];
-		while(--j){
-			ca = s[j].a;
-			
-			c = 1;
-			if((pga -= gpo) > pa){
-				pa = pga;
-				c = 2;
-			}
-			if((pgb -= gpo) > pa){
-				pa = pgb;
-				c = 4;
-			}
-
-			pa += subp[seq2[j]];
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j+1].a-gpo;
-			if (s[j+1].ga-gpe > s[j].ga){
-				s[j].ga = s[j+1].ga-gpe;
-				c |= 8;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca-gpo;
-			if(pgb-gpe > s[j].gb){
-				s[j].gb = pgb-gpe;
-				c |= 16;
-			}
-			tracep[j] = c;
-			pa = ca;
-
-		}
-	
-		ca = s[0].a;
-
-		c = 1;
-		if((pga-=gpo) > pa){
-			pa = pga;
-			c = 2;
-		}
-		if((pgb-=gpo) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		pa += subp[seq2[0]];
-		
-		s[0].a = pa;
-		
-		s[0].ga = -INFTY;
-		
-		pgb = s[0].gb;
-		s[0].gb = ca-(gpo+tgpe);
- 		if(pgb-tgpe > s[0].gb){
-			s[0].gb = pgb-tgpe;
-			c |= 16;
-		}
-		tracep[0] = c;			
-	}
-
-	subp = subm[seq1[0]];
-	tracep = trace[0];
-	j = len_b;
-	pa = s[j].a;
-	pga = s[j].ga;
-	pgb = s[j].gb;
-	s[j].a = -INFTY;
-	s[j].ga = -INFTY;
-	
-	s[j].gb = pa-tgpe;
-	if(pgb-tgpe > s[j].gb){
-		s[j].gb = pgb-tgpe;
-	}
-
-	while(--j){
-
-		ca = s[j].a;
-
-		c = 1;
-
-		if((pga-=gpo) > pa){
-			pa = pga;
-			c = 2;
-		}
-
-		if((pgb-=gpo) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		pa += subp[seq2[j]];
-		
-		s[j].a = pa;
-		
-		pga = s[j].ga;
-		s[j].ga = s[j+1].a-(gpo+tgpe);
-		if (s[j+1].ga-tgpe > s[j].ga){
-			s[j].ga = s[j+1].ga-tgpe;
-			c |= 8;
-		}	
-		pgb = s[j].gb;
-		s[j].gb = -INFTY;	
-		tracep[j] = c;
-		pa = ca;
-	}
-	
-	ca = s[0].a;
-	
-	c = 1;
-	
-	if((pga-=gpo) > pa){
-		pa = pga;
-		c = 2;
-	}
-	if((pgb-=gpo) > pa){
-		pa = pgb;
-		c = 4;
-	}
-
-	pa += subp[seq2[0]];
-	
-	s[0].a = pa;
-	
-	
-	s[0].ga = s[1].a-(gpo+tgpe);
-	if (s[1].ga-tgpe > s[0].ga){
-		s[0].ga = s[1].ga-tgpe;
-		c |= 8;
-	}
-	
-	pgb = s[0].gb;
-	s[0].gb = ca-(gpo+tgpe);
-	if(pgb-tgpe > s[0].gb){
-		s[0].gb = pgb-tgpe;
-		c |= 16;
-	}	
-	tracep[0] = c;
-
-
-	pgb = s[0].gb;
-	c = 2;
-	if(s[0].ga > pgb){
-		pgb = s[0].ga;
-		c = 1;
-	}
-	if(s[0].a >= pgb){
-		pgb = s[0].a;
-		c = 0;
-	}
-	
-	ca = c;
-	
-	int ga = 1; 
-	int gb = 1;
-	i = 0;
-	j = 0;
-	c = 1;
-	while(trace[i][j] < 32){
-		if(i ==0 || j == 0){
-			path[c] |= 128;
-		}
-		if(i ==len_a || j == len_b){
-			path[c] |= 64;
-		}
-	
-		switch(ca){
-			case 0:
-				if (trace[i][j] & 2){
-					ca = 1;
-				}else if (trace[i][j] & 4){
-					ca = 2;
-				}
-				path[c] = 0;
-				i++;
-				j++;
-			break;
-			case 1:
-				if(trace[i][j] & 8){
-					ca = 1;
-				}else{
-					path[c-(gb-1)] |= gb << 16;
-					gb = 0;
-					ca = 0;
-				}
-				path[c] |= 1;
-				j++;
-				gb++;
-			break;
-			case  2:
-				if(trace[i][j] & 16){
-					ca = 2;
-				}else{
-					path[c-(ga-1)] |= ga << 16;
-					ga = 0;
-					ca = 0;
-				}
-				path[c] |= 2;
-				i++;
-				ga++;
-			break;
-		}
-		c++;
-	}
-	if (ca == 1){
-		path[c-(gb-1)] |= (gb-1) << 16;	
-	}
-	if(ca == 2){
-		path[c-(ga-1)] |= (ga-1) << 16;	
-	}
-	path[0] = c-1;
-	path[c] = 3;
-	path[c+1] = pgb;
-	return path;
-}
-
-
-
-int* aapp_dyn(int* path, struct dp_matrix *dp,const int* prof1,const int* prof2,const int len_a,const int len_b,const int mmbonus)
-{
-	unsigned int freq[26];
-	
-	struct states* s = 0;
-	char** trace = 0;
-	char* tracep = 0;
-	register int pa = 0;
-	register int pga = 0;
-	register int pgb = 0;
-	register int ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-
-	s = dp->s;
-	
-	trace = dp->tb;
-
-	trace[len_a][len_b] = 32;
-
-	prof1 +=  len_a << 6;
-
-	s[len_b].a = 0;
-	s[len_b].ga = -INFTY;
-	s[len_b].gb = -INFTY;
-	//init of first row;
-	tracep = trace[len_a];
-	
-	j = len_b;
-	while(--j){
-		s[j].a = -INFTY;
-		
-		s[j].ga = s[j+1].a+prof2[29];
-		if (s[j+1].ga+prof2[29] > s[j].ga){
-			s[j].ga = s[j+1].ga+prof2[29];
-		}
-		s[j].gb = -INFTY;
-		tracep[j] = 8;
-	}
-	
-	s[0].a = -INFTY;
-	s[0].ga = -INFTY;
-	s[0].gb = -INFTY;
-	i = len_a;
-	while(--i){
-		prof1 -= 64;
-
-		c = 1;
-		for (j = 26; j--;){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;	
-			}
-		}
-		freq[0] = c;
-		
-		tracep = trace[i];
-		pa = s[len_b].a + mmbonus;
-		pga = s[len_b].ga;
-		pgb = s[len_b].gb;
-		s[len_b].a = -INFTY;
-		s[len_b].ga = -INFTY;
-		
-		s[len_b].gb = pa+prof1[29];
-		if(pgb+prof1[29] > s[len_b].gb){
-			s[len_b].gb = pgb+prof1[29];
-		}
-	
-		tracep[len_b] = 16;
-		
-		j = len_b;
-		prof2 += len_b << 6;
-		while(--j){
-			prof2 -= 64;
-			ca = s[j].a;
-
-			c = 1;
-			if((pga += prof2[91]) > pa){
-				pa = pga;
-				c = 2;
-			}
-			if((pgb += prof1[91]) > pa){
-				pa = pgb;
-				c = 4;
-			}
-
-			prof2 += 32;
-			for (pga = freq[0];--pga;){
-				pgb = freq[pga];
-				pa += prof1[pgb]*prof2[pgb];
-			}
-			prof2 -= 32;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j+1].a+prof2[27];
-			if (s[j+1].ga+prof2[28] > s[j].ga){
-				s[j].ga = s[j+1].ga+prof2[28];
-				c |= 8;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[27];
-			if(pgb+prof1[28] > s[j].gb){
-				s[j].gb = pgb+prof1[28];
-				c |= 16;
-			}
-			tracep[j] = c;
-			pa = ca+ mmbonus;
-
-		}
-	
-		prof2 -= 64;
-		//LAST CELL (0)
-		ca = s[0].a;
-
-		c = 1;
-		if((pga+=prof2[91]) > pa){
-			pa = pga;
-			c = 2;
-		}
-		if((pgb+=prof1[91]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		prof2 += 32;
-		for (pga = freq[0];--pga;){
-			pgb = freq[pga];
-			pa += prof1[pgb]*prof2[pgb];
-		}
-		prof2 -= 32;
-		
-		s[0].a = pa;
-		
-		s[0].ga = -INFTY;
-		
-		pgb = s[0].gb;
-		s[0].gb = ca+prof1[27]+prof1[29];
- 		if(pgb+prof1[29] > s[0].gb){
-			s[0].gb = pgb+prof1[29];
-			c |= 16;
-		}
-		tracep[0] = c;	
-		
-	}
-	prof1 -= 64;
-	
-	c = 1;
-	for (j = 26; j--;){
-		if(prof1[j]){
-			freq[c] = j;
-			c++;	
-		}
-	}
-	freq[0] = c;
-	
-	tracep = trace[0];
-	j = len_b;
-	prof2 += len_b << 6;
-	pa = s[j].a+ mmbonus;
-	pga = s[j].ga;
-	pgb = s[j].gb;
-	s[j].a = -INFTY;
-	s[j].ga = -INFTY;
-
-	s[len_b].gb = pa+prof1[29];
-	if(pgb+prof1[29] > s[len_b].gb){
-		s[len_b].gb = pgb+prof1[29];
-	}
-
-
-	
-	while(--j){
-		prof2 -= 64;
-		ca = s[j].a;
-
-		c = 1;
-
-		if((pga+=prof2[91]) > pa){
-			pa = pga;
-			c = 2;
-		}
-
-		if((pgb+=prof1[91]) > pa){
-			pa = pgb;
-			c = 4;
-		}	
-		prof2+=32;
-		
-		for (pga = freq[0];--pga;){
-			pgb = freq[pga];
-			pa += prof1[pgb]*prof2[pgb];
-		}
-		prof2-=32;
-		
-		s[j].a = pa;
-		pga = s[j].ga;
-		s[j].ga = s[j+1].a+prof2[27]+prof2[29];
-		if (s[j+1].ga+prof2[29] > s[j].ga){
-			s[j].ga = s[j+1].ga+prof2[29];
-			c |= 8;
-		}	
-		pgb = s[j].gb;
-		s[j].gb = -INFTY;	
-		
-		tracep[j] = c;
-		pa = ca+ mmbonus;
-	}
-	prof2 -= 64;
-
-	ca = s[0].a;
-	
-	c = 1;
-	
-	if((pga+=prof2[91]) > pa){
-		pa = pga;
-		c = 2;
-	}
-	if((pgb+=prof1[91]) > pa){
-		pa = pgb;
-		c = 4;
-	}
-		
-	prof2+=32;
-	for (pga = freq[0];--pga;){	
-		pgb = freq[pga];
-		pa += prof1[pgb]*prof2[pgb];
-	}
-	prof2-=32;
-	
-	s[0].a = pa;
-	
-	s[0].ga = s[1].a+prof2[27]+prof2[29];
-	if (s[1].ga+prof2[29] > s[0].ga){
-		s[0].ga = s[1].ga+prof2[29];
-		c |= 8;
-	}
-	
-	pgb = s[0].gb;
-	s[0].gb = ca+prof1[27]+prof1[29];
-	if(pgb +prof1[29]> s[0].gb){
-		s[0].gb = pgb+prof1[29];
-		c |= 16;
-	}	
-	tracep[0] = c;
-
-	pgb = s[0].gb;
-	c = 2;
-	if(s[0].ga > pgb){
-		pgb = s[0].ga;
-		c = 1;
-	}
-	if(s[0].a >= pgb){
-		pgb = s[0].a;
-		c = 0;
-	}
-	
-	//fprintf(stderr,"SCORE:%d\n",ca);
-	ca = c;
-	
-	i = 0;
-	j = 0;
-	c = 1;
-	while(trace[i][j] < 32){
-	//	fprintf(stderr,"%d->%d	%d:%d	%d:%d\n",c,trace[i][j],i,j,len_a,len_b);
-		switch(ca){
-			case 0:
-				if (trace[i][j] & 2){
-					ca = 1;
-					if(i+1!= len_a){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}else if (trace[i][j] & 4){
-					ca = 2;
-					if(j+1!= len_b){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}
-
-				//path[c] = 0;
-				i++;
-				j++;
-			break;
-			case 1:
-				if(trace[i][j] & 8){
-					ca = 1;
-					if(i!=0 && i!= len_a){
-	//				/	fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					ca = 0;
-					if(i!=0 && i!= len_a){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-				}
-				path[c] |= 1;
-				j++;
-			break;
-			case  2:
-				if(trace[i][j] & 16){
-					ca = 2;
-					if(j !=0 && j != len_b){
-	//					fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					ca = 0;
-					if(j!=0 && j != len_b){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-					
-				}
-				path[c] |= 2;
-				i++;
-			break;
-		}
-		c++;
-	}
-	path[0] = c-1;
-	path[c] = 3;
-	path[c+1] = pgb;
-	
-	return path;
-}*/
-
-
-
-
-
-int* pp_dyn(int* path, struct dp_matrix *dp,const float* prof1,const float* prof2,const int len_a,const int len_b)
-{
-	unsigned int freq[26];
-	
-	struct states* s = 0;
-	char** trace = 0;
-	char* tracep = 0;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-	register int f = 0;
-
-	s = dp->s;
-	
-	trace = dp->tb;
-
-	trace[len_a][len_b] = 32;
-
-	prof1 +=  len_a << 6;
-
-	s[len_b].a = 0.0;
-	s[len_b].ga = -FLOATINFTY;
-	s[len_b].gb = -FLOATINFTY;
-	//init of first row;
-	tracep = trace[len_a];
-	
-	j = len_b;
-	while(--j){
-		s[j].a = -FLOATINFTY;
-		
-		s[j].ga = s[j+1].a+prof2[29];
-		if (s[j+1].ga+prof2[29] > s[j].ga){
-			s[j].ga = s[j+1].ga+prof2[29];
-		}
-		s[j].gb = -INFTY;
-		tracep[j] = 8;
-	}
-	
-	s[0].a = -FLOATINFTY;
-	s[0].ga = -FLOATINFTY;
-	s[0].gb = -FLOATINFTY;
-	i = len_a;
-	while(--i){
-		prof1 -= 64;
-
-		c = 1;
-		for (j = 26; j--;){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;	
-			}
-		}
-		freq[0] = c;
-		
-		tracep = trace[i];
-		pa = s[len_b].a;
-		pga = s[len_b].ga;
-		pgb = s[len_b].gb;
-		s[len_b].a = -FLOATINFTY;
-		s[len_b].ga = -FLOATINFTY;
-		
-		s[len_b].gb = pa+prof1[29];
-		if(pgb+prof1[29] > s[len_b].gb){
-			s[len_b].gb = pgb+prof1[29];
-		}
-	
-		tracep[len_b] = 16;
-		
-		j = len_b;
-		prof2 += len_b << 6;
-		while(--j){
-			prof2 -= 64;
-			ca = s[j].a;
-
-			c = 1;
-			if((pga += prof2[91]) > pa){
-				pa = pga;
-				c = 2;
-			}
-			if((pgb += prof1[91]) > pa){
-				pa = pgb;
-				c = 4;
-			}
-			
-			prof2 += 32;
-			for (f = freq[0];--f;){
-				pa += prof1[freq[f]]*prof2[freq[f]];
-			}
-			prof2 -= 32;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j+1].a+prof2[27];
-			if (s[j+1].ga+prof2[28] > s[j].ga){
-				s[j].ga = s[j+1].ga+prof2[28];
-				c |= 8;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[27];
-			if(pgb+prof1[28] > s[j].gb){
-				s[j].gb = pgb+prof1[28];
-				c |= 16;
-			}
-			tracep[j] = c;
-			pa = ca;
-
-		}
-	
-		prof2 -= 64;
-		//LAST CELL (0)
-		ca = s[0].a;
-
-		c = 1;
-		if((pga+=prof2[91]) > pa){
-			pa = pga;
-			c = 2;
-		}
-		if((pgb+=prof1[91]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		prof2 += 32;
-		for (f = freq[0];--f;){
-			pa += prof1[freq[f]]*prof2[freq[f]];
-		}
-		prof2 -= 32;
-		
-		s[0].a = pa;
-		
-		s[0].ga = -FLOATINFTY;
-		
-		pgb = s[0].gb;
-		s[0].gb = ca+prof1[27]+prof1[29];
- 		if(pgb+prof1[29] > s[0].gb){
-			s[0].gb = pgb+prof1[29];
-			c |= 16;
-		}
-		tracep[0] = c;	
-		
-	}
-	prof1 -= 64;
-	
-	c = 1;
-	for (j = 26; j--;){
-		if(prof1[j]){
-			freq[c] = j;
-			c++;	
-		}
-	}
-	freq[0] = c;
-	
-	tracep = trace[0];
-	j = len_b;
-	prof2 += len_b << 6;
-	pa = s[j].a;
-	pga = s[j].ga;
-	pgb = s[j].gb;
-	s[j].a = -FLOATINFTY;
-	s[j].ga = -FLOATINFTY;
-
-	s[len_b].gb = pa+prof1[29];
-	if(pgb+prof1[29] > s[len_b].gb){
-		s[len_b].gb = pgb+prof1[29];
-	}
-
-
-	
-	while(--j){
-		prof2 -= 64;
-		ca = s[j].a;
-
-		c = 1;
-
-		if((pga+=prof2[91]) > pa){
-			pa = pga;
-			c = 2;
-		}
-
-		if((pgb+=prof1[91]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		prof2+=32;
-		
-		for (f = freq[0];--f;){
-			pa += prof1[freq[f]]*prof2[freq[f]];
-		}
-		prof2-=32;
-		
-		s[j].a = pa;
-		pga = s[j].ga;
-		s[j].ga = s[j+1].a+prof2[27]+prof2[29];
-		if (s[j+1].ga+prof2[29] > s[j].ga){
-			s[j].ga = s[j+1].ga+prof2[29];
-			c |= 8;
-		}	
-		pgb = s[j].gb;
-		s[j].gb = -FLOATINFTY;	
-		
-		tracep[j] = c;
-		pa = ca;
-	}
-	prof2 -= 64;
-
-	ca = s[0].a;
-	
-	c = 1;
-	
-	if((pga+=prof2[91]) > pa){
-		pa = pga;
-		c = 2;
-	}
-	if((pgb+=prof1[91]) > pa){
-		pa = pgb;
-		c = 4;
-	}
-	prof2+=32;
-	for (f = freq[0];--f;){
-		pa += prof1[freq[f]]*prof2[freq[f]];
-	}
-	prof2-=32;
-	
-	s[0].a = pa;
-	
-	s[0].ga = s[1].a+prof2[27]+prof2[29];
-	if (s[1].ga+prof2[29] > s[0].ga){
-		s[0].ga = s[1].ga+prof2[29];
-		c |= 8;
-	}
-	
-	pgb = s[0].gb;
-	s[0].gb = ca+prof1[27]+prof1[29];
-	if(pgb +prof1[29]> s[0].gb){
-		s[0].gb = pgb+prof1[29];
-		c |= 16;
-	}	
-	tracep[0] = c;
-
-	pgb = s[0].gb;
-	c = 2;
-	if(s[0].ga > pgb){
-		pgb = s[0].ga;
-		c = 1;
-	}
-	if(s[0].a >= pgb){
-		pgb = s[0].a;
-		c = 0;
-	}
-	
-	//fprintf(stderr,"SCORE:%d\n",ca);
-	f = c;
-	
-	i = 0;
-	j = 0;
-	c = 1;
-	while(trace[i][j] < 32){
-	//	fprintf(stderr,"%d->%d	%d:%d	%d:%d\n",c,trace[i][j],i,j,len_a,len_b);
-		switch(f){
-			case 0:
-				if (trace[i][j] & 2){
-					f = 1;
-					if(i+1!= len_a){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}else if (trace[i][j] & 4){
-					f = 2;
-					if(j+1!= len_b){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}
-
-				//path[c] = 0;
-				i++;
-				j++;
-			break;
-			case 1:
-				if(trace[i][j] & 8){
-					f = 1;
-					if(i!=0 && i!= len_a){
-	//				/	fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					f = 0;
-					if(i!=0 && i!= len_a){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-				}
-				path[c] |= 1;
-				j++;
-			break;
-			case  2:
-				if(trace[i][j] & 16){
-					f = 2;
-					if(j !=0 && j != len_b){
-	//					fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					f = 0;
-					if(j!=0 && j != len_b){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-					
-				}
-				path[c] |= 2;
-				i++;
-			break;
-		}
-		c++;
-	}
-	path[0] = c-1;
-	path[c] = 3;
-	path[c+1] = pgb;
-	return path;
-}
-
-
-int* ps_dyn(int* path, struct dp_matrix *dp,const float* prof1,const int* seq2,const int len_a,const int len_b,int sip)
-{
-	struct states* s = 0;
-	char** trace = 0;
-	char* tracep = 0;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-	register int f = 0;
-	
-	const float open = gpo * sip;
-	const float ext = gpe *sip;
-
-	s = dp->s;
-	
-	trace = dp->tb;
-
-	trace[len_a][len_b] = 32;
-
-	prof1 +=  len_a << 6;
-
-	s[len_b].a = 0.0;
-	s[len_b].ga = -FLOATINFTY;
-	s[len_b].gb = -FLOATINFTY;
-	//init of first row;
-	tracep = trace[len_a];
-	j = len_b;
-	
-
-	while(--j){
-		s[j].a = -FLOATINFTY;
-		//s[j].ga = 0;	
-		
-		s[j].ga = s[j+1].a-tgpe;//-topen;
-		if (s[j+1].ga-tgpe > s[j].ga){
-			s[j].ga = s[j+1].ga-tgpe;
-		}
-		
-		s[j].gb = -FLOATINFTY;
-		tracep[j] = 8;
-	}
-	
-	s[0].a = -FLOATINFTY;
-	s[0].ga = -FLOATINFTY;
-	s[0].gb = -FLOATINFTY;
-	i = len_a;
-	while(--i){
-		prof1 -= 64;
-		
-		tracep = trace[i];
-		pa = s[len_b].a;
-		pga = s[len_b].ga;
-		pgb = s[len_b].gb;
-		s[len_b].a = -FLOATINFTY;
-		s[len_b].ga = -FLOATINFTY;
-		//s[len_b].gb = 0;
-		s[len_b].gb = pa+prof1[29];//+prof1[29];
-		if(pgb+prof1[29] > s[len_b].gb){
-			s[len_b].gb = pgb+prof1[29];
-		}
-
-		tracep[len_b] = 16;
-		
-		j = len_b;
-		
-		while(--j){
-
-			ca = s[j].a;
-
-			c = 1;
-			if((pga -= open) > pa){
-				pa = pga;
-				c = 2;
-			}
-			if((pgb += prof1[91]) > pa){
-				pa = pgb;
-				c = 4;
-			}
-			
-			pa += prof1[32 + seq2[j]];
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j+1].a-open;
-			if (s[j+1].ga-ext > s[j].ga){
-				s[j].ga = s[j+1].ga-ext;
-				c |= 8;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[27];
-			if(pgb+prof1[28] > s[j].gb){
-				s[j].gb = pgb+prof1[28];
-				c |= 16;
-			}
-			tracep[j] = c;
-			pa = ca;
-
-		}
-	
-		//LAST CELL (0)
-		ca = s[0].a;
-
-		c = 1;
-		if((pga-=open) > pa){
-			pa = pga;
-			c = 2;
-		}
-		if((pgb+=prof1[91]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		pa += prof1[32+seq2[0]];
-		s[0].a = pa;
-		
-		s[0].ga = -FLOATINFTY;
-		
-		pgb = s[0].gb;
-		s[0].gb = ca+prof1[27]+prof1[29];
- 		if(pgb+prof1[29] > s[0].gb){
-			s[0].gb = pgb+prof1[29];
-			c |= 16;
-		}
-		tracep[0] = c;	
-		
-	}
-	prof1 -= 64;
-	
-
-	
-	tracep = trace[0];
-	j = len_b;
-	pa = s[j].a;
-	pga = s[j].ga;
-	pgb = s[j].gb;
-	s[j].a = -FLOATINFTY;
-	s[j].ga = -FLOATINFTY;
-	//s[j].gb = -INFTY;
-	s[len_b].gb = pa+prof1[29];//+prof1[29];
-	if(pgb+prof1[29] > s[len_b].gb){
-		s[len_b].gb = pgb+prof1[29];
-	}
-
-	
-	while(--j){
-
-		ca = s[j].a;
-
-		c = 1;
-
-		if((pga-=open) > pa){
-			pa = pga;
-			c = 2;
-		}
-
-		if((pgb+=prof1[91]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		pa += prof1[32+seq2[j]];		
-		s[j].a = pa;
-		pga = s[j].ga;
-		s[j].ga = s[j+1].a-(open+tgpe);
-		if (s[j+1].ga-tgpe > s[j].ga){
-			s[j].ga = s[j+1].ga-tgpe;
-			c |= 8;
-		}	
-		pgb = s[j].gb;
-		s[j].gb = -INFTY;	
-		
-		tracep[j] = c;
-		pa = ca;
-	}
-
-
-	ca = s[0].a;
-	
-	c = 1;
-	
-	if((pga-=open) > pa){
-		pa = pga;
-		c = 2;
-	}
-	if((pgb+=prof1[91]) > pa){
-		pa = pgb;
-		c = 4;
-	}
-	pa += prof1[32+seq2[0]];	
-	s[0].a = pa;
-	
-	s[0].ga = s[1].a-(open+tgpe);
-	if (s[1].ga-tgpe > s[0].ga){
-		s[0].ga = s[1].ga-tgpe;
-		c |= 8;
-	}
-	
-	pgb = s[0].gb;
-	s[0].gb = ca+prof1[27]+prof1[29];
-	if(pgb+prof1[29] > s[0].gb){
-		s[0].gb = pgb+prof1[29];
-		c |= 16;
-	}	
-	tracep[0] = c;
-
-
-	pgb = s[0].gb;
-	c = 2;
-	if(s[0].ga > pgb){
-		pgb = s[0].ga;
-		c = 1;
-	}
-	if(s[0].a >= pgb){
-		pgb = s[0].a;
-		c = 0;
-	}
-	
-	//fprintf(stderr,"SCORE:%d\n",ca);
-	f = c;
-	
-	i = 0;
-	j = 0;
-	c = 1;
-	while(trace[i][j] < 32){
-	//	fprintf(stderr,"%d->%d	%d:%d	%d:%d\n",c,trace[i][j],i,j,len_a,len_b);
-		switch(f){
-			case 0:
-				if (trace[i][j] & 2){
-					f = 1;
-					if(i+1!= len_a){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}else if (trace[i][j] & 4){
-					f = 2;
-					if(j+1!= len_b){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}
-
-				//path[c] = 0;
-				i++;
-				j++;
-			break;
-			case 1:
-				if(trace[i][j] & 8){
-					f = 1;
-					if(i!=0 && i!= len_a){
-	//				/	fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					f = 0;
-					if(i!=0 && i!= len_a){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-				}
-				path[c] |= 1;
-				j++;
-			break;
-			case  2:
-				if(trace[i][j] & 16){
-					f = 2;
-					if(j !=0 && j != len_b){
-	//					fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					f = 0;
-					if(j!=0 && j != len_b){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-					
-				}
-				path[c] |= 2;
-				i++;
-			break;
-		}
-		c++;
-	}
-	path[0] = c-1;
-	path[c] = 3;
-	path[c+1] = pgb;
-	return path;
-}
-
-int* ss_dyn(float**subm,int* path, struct dp_matrix *dp,const int* seq1,const int* seq2,const int len_a,const int len_b)
-{
-	struct states* s = 0;
-	const float *subp = 0;
-	char** trace = 0;
-	char* tracep = 0;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-	register int f = 0;
-	
-	s = dp->s;
-	
-	trace = dp->tb;
-
-	trace[len_a][len_b] = 32;
-
-	s[len_b].a = 0.0;
-	s[len_b].ga = -FLOATINFTY;
-	s[len_b].gb = -FLOATINFTY;
-	
-	//init of first row;
-	tracep = trace[len_a];
-	j = len_b;
-	
-
-	while(--j){
-		s[j].a = -FLOATINFTY;
-		//s[j].ga = 0;	
-		s[j].ga = s[j+1].a-tgpe;//-gpo;
-		if (s[j+1].ga-tgpe > s[j].ga){
-			s[j].ga = s[j+1].ga-tgpe;
-		}
-		
-		
-		
-		s[j].gb = -FLOATINFTY;
-		tracep[j] = 8;
-	}
-	
-	s[0].a = -FLOATINFTY;
-	s[0].ga = -FLOATINFTY;
-	s[0].gb = -FLOATINFTY;
-	
-	i = len_a;
-	while(--i){
-		
-		tracep = trace[i];
-		pa = s[len_b].a;
-		pga = s[len_b].ga;
-		pgb = s[len_b].gb;
-		
-		s[len_b].a = -FLOATINFTY;
-		s[len_b].ga = -FLOATINFTY;
-		//s[len_b].gb = 0;
-		
-		s[len_b].gb = pa-tgpe;//-gpo;
-		if(pgb-tgpe > s[len_b].gb){
-			s[len_b].gb = pgb-tgpe;
-		}
-		
-		
-		tracep[len_b] = 16;
-		j = len_b;
-		subp = subm[seq1[i]];
-		while(--j){
-			ca = s[j].a;
-			
-			c = 1;
-			if((pga -= gpo) > pa){
-				pa = pga;
-				c = 2;
-			}
-			if((pgb -= gpo) > pa){
-				pa = pgb;
-				c = 4;
-			}
-
-			pa += subp[seq2[j]];
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j+1].a-gpo;
-			if (s[j+1].ga-gpe > s[j].ga){
-				s[j].ga = s[j+1].ga-gpe;
-				c |= 8;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca-gpo;
-			if(pgb-gpe > s[j].gb){
-				s[j].gb = pgb-gpe;
-				c |= 16;
-			}
-			tracep[j] = c;
-			pa = ca;
-
-		}
-	
-		//LAST CELL (0)
-		ca = s[0].a;
-
-		c = 1;
-		if((pga-=gpo) > pa){
-			pa = pga;
-			c = 2;
-		}
-		if((pgb-=gpo) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		pa += subp[seq2[0]];
-		
-		s[0].a = pa;
-		
-		s[0].ga = -FLOATINFTY;
-		
-		pgb = s[0].gb;
-		s[0].gb = ca-(gpo+tgpe);
- 		if(pgb-tgpe > s[0].gb){
-			s[0].gb = pgb-tgpe;
-			c |= 16;
-		}
-		tracep[0] = c;			
-	}
-
-	subp = subm[seq1[0]];
-	tracep = trace[0];
-	j = len_b;
-	pa = s[j].a;
-	pga = s[j].ga;
-	pgb = s[j].gb;
-	s[j].a = -FLOATINFTY;
-	s[j].ga = -FLOATINFTY;
-	
-	s[j].gb = pa-tgpe;//-gpo;
-	if(pgb-tgpe > s[j].gb){
-		s[j].gb = pgb-tgpe;
-	}
-	
-	//s[j].gb = -INFTY;
-	while(--j){
-
-		ca = s[j].a;
-
-		c = 1;
-
-		if((pga-=gpo) > pa){
-			pa = pga;
-			c = 2;
-		}
-
-		if((pgb-=gpo) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		pa += subp[seq2[j]];
-		
-		s[j].a = pa;
-		
-		pga = s[j].ga;
-		s[j].ga = s[j+1].a-(gpo+tgpe);
-		if (s[j+1].ga-tgpe > s[j].ga){
-			s[j].ga = s[j+1].ga-tgpe;
-			c |= 8;
-		}	
-		pgb = s[j].gb;
-		s[j].gb = -FLOATINFTY;	
-		tracep[j] = c;
-		pa = ca;
-	}
-	
-	ca = s[0].a;
-	
-	c = 1;
-	
-	if((pga-=gpo) > pa){
-		pa = pga;
-		c = 2;
-	}
-	if((pgb-=gpo) > pa){
-		pa = pgb;
-		c = 4;
-	}
-
-	pa += subp[seq2[0]];
-	
-	s[0].a = pa;
-	
-	
-	s[0].ga = s[1].a-(gpo+tgpe);
-	if (s[1].ga-tgpe > s[0].ga){
-		s[0].ga = s[1].ga-tgpe;
-		c |= 8;
-	}
-	
-	pgb = s[0].gb;
-	s[0].gb = ca-(gpo+tgpe);
-	if(pgb-tgpe > s[0].gb){
-		s[0].gb = pgb-tgpe;
-		c |= 16;
-	}	
-	tracep[0] = c;
-
-
-	pgb = s[0].gb;
-	c = 2;
-	if(s[0].ga > pgb){
-		pgb = s[0].ga;
-		c = 1;
-	}
-	if(s[0].a >= pgb){
-		pgb = s[0].a;
-		c = 0;
-	}
-	
-	f = c;
-	
-	i = 0;
-	j = 0;
-	c = 1;
-	while(trace[i][j] < 32){
-	//	fprintf(stderr,"%d->%d	%d:%d	%d:%d\n",c,trace[i][j],i,j,len_a,len_b);
-		switch(f){
-			case 0:
-				if (trace[i][j] & 2){
-					f = 1;
-					if(i+1!= len_a){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}else if (trace[i][j] & 4){
-					f = 2;
-					if(j+1!= len_b){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}
-
-				//path[c] = 0;
-				i++;
-				j++;
-			break;
-			case 1:
-				if(trace[i][j] & 8){
-					f = 1;
-					if(i!=0 && i!= len_a){
-	//				/	fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					f = 0;
-					if(i!=0 && i!= len_a){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-				}
-				path[c] |= 1;
-				j++;
-			break;
-			case  2:
-				if(trace[i][j] & 16){
-					f = 2;
-					if(j !=0 && j != len_b){
-	//					fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					f = 0;
-					if(j!=0 && j != len_b){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-					
-				}
-				path[c] |= 2;
-				i++;
-			break;
-		}
-		c++;
-	}
-	path[0] = c-1;
-	path[c] = 3;
-	path[c+1] = pgb;
-	return path;
-}

Deleted: trunk/packages/kalign/trunk/kalign2_feature.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_feature.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_feature.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,1394 +0,0 @@
-/*
-	kalign2_feature.c 
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-#include "kalign2_feature.h"
-
-static int stride;
-static int dim;
-static int gpo_pos;
-static int gpe_pos;
-static int tgpe_pos;
-
-int** feature_hirschberg_alignment(struct alignment* aln,int* tree,float**submatrix, int** map,struct feature_matrix* fm)
-{
-	struct hirsch_mem* hm = 0;
-	int i,j,g,a,b,c;
-	int len_a;
-	int len_b;
-	float** profile = 0;
-	
-	stride = (26+fm->mdim)*2 + 3; 
-	dim = 26+fm->mdim;
-	gpo_pos = (dim << 1) + 0;
-	gpe_pos = (dim << 1) + 1;
-	tgpe_pos = (dim << 1) + 2;
-
-	profile = malloc(sizeof(float*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		profile[i] = 0;
-	}
-
-	map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		map[i] = 0;
-	}
-	
-	hm = hirsch_mem_alloc(hm,1024);
-
-	fprintf(stderr,"\nAlignment:\n");
-
-	for (i = 0; i < (numseq-1);i++){
-		a = tree[i*3];
-		b = tree[i*3+1];
-		c = tree[i*3+2];
-		fprintf(stderr,"\r%8.0f percent done",(float)(i) /(float)numseq * 100);
-		//fprintf(stderr,"Aligning:%d %d->%d	done:%f\n",a,b,c,((float)(i+1)/(float)numseq)*100);
-		len_a = aln->sl[a];
-		len_b = aln->sl[b];
-
-		
-		g = (len_a > len_b)? len_a:len_b;
-		map[c] = malloc(sizeof(int) * (g+2));
-		if(g > hm->size){
-			hm = hirsch_mem_realloc(hm,g);
-		}
-
-		for (j = 0; j < (g+2);j++){
-			map[c][j] = -1;
-		}
-
-		if (a < numseq){
-			profile[a] = make_unified_profile(profile[a],aln,a,submatrix,fm);
-		}
-		set_unified_gap_penalties(profile[a],len_a,aln->nsip[b]);
-		
-		if (b < numseq){
-			profile[b] = make_unified_profile(profile[b],aln,b,submatrix,fm);
-		}
-		set_unified_gap_penalties(profile[b],len_b,aln->nsip[a]);
-		
-		hm->starta = 0;
-		hm->startb = 0;
-		hm->enda = len_a;
-		hm->endb = len_b;
-		hm->len_a = len_a;
-		hm->len_b = len_b;
-		
-		hm->f[0].a = 0.0;
-		hm->f[0].ga =  -FLOATINFTY;
-		hm->f[0].gb = -FLOATINFTY;
-		hm->b[0].a = 0.0;
-		hm->b[0].ga =  -FLOATINFTY;
-		hm->b[0].gb =  -FLOATINFTY;
-		//dim = 26;
-	//	fprintf(stderr,"LENA:%d	LENB:%d	numseq:%d\n",len_a,len_b,numseq);
-		if(len_a < len_b){
-		//	fprintf(stderr,"normal\n");
-			map[c] = feature_hirsch_pp_dyn(profile[a],profile[b],hm,map[c]);
-		}else{
-		//	fprintf(stderr,"goofy\n");
-			hm->enda = len_b;
-			hm->endb = len_a;
-			hm->len_a = len_b;
-			hm->len_b = len_a;
-			map[c] = feature_hirsch_pp_dyn(profile[b],profile[a],hm,map[c]);
-			map[c] = mirror_hirsch_path(map[c],len_a,len_b);
-		}
-		map[c] = add_gap_info_to_hirsch_path(map[c],len_a,len_b);
-
-		if(i != numseq-2){
-			profile[c] = malloc(sizeof(float)*stride*(map[c][0]+2));
-			profile[c] = feature_hirschberg_update(profile[a],profile[b],profile[c],map[c],aln->nsip[a],aln->nsip[b]);
-		}
-		aln->sl[c] = map[c][0];
-	
-		aln->nsip[c] = aln->nsip[a] + aln->nsip[b];
-		aln->sip[c] = malloc(sizeof(int)*(aln->nsip[a] + aln->nsip[b]));
-		g =0;
-		for (j = aln->nsip[a];j--;){
-			aln->sip[c][g] = aln->sip[a][j];
-			g++;
-		}
-		for (j = aln->nsip[b];j--;){
-			aln->sip[c][g] = aln->sip[b][j];
-			g++;
-		}
-
-		free(profile[a]);
-		free(profile[b]);
-	}
-	fprintf(stderr,"\r%8.0f percent done\n",100.0);
-	free(profile);
-	hirsch_mem_free(hm);
-	for (i = 32;i--;){
-		free(submatrix[i]);
-	}
-	free(submatrix);
-	free_feature_matrix(fm);
-	return map;
-}
-
-
-float* feature_hirschberg_update(const float* profa,const float* profb,float* newp,int* path,int sipa,int sipb)
-{
-	int i,j,c;
-	for (i = stride; i--;){
-		newp[i] = profa[i] + profb[i];
-	}
-	
-	profa += stride;
-	profb += stride;
-	newp += stride;
-
-	c = 1;
-	
-	while(path[c] != 3){
-		//Idea: limit the 'virtual' number of residues of one type to x.
-		// i.e. only allow a maximum of 10 alanines to be registered in each column
-		// the penalty for aligning a 'G' to this column will stay stable even when many (>10) alanines are present.
-		// the difference in score between the 'correct' (all alanine) and incorrect (alanines + glycine) will not increase 
-		// with the number of sequences. -> see Durbin pp 140
-		
-		if (!path[c]){
-			//fprintf(stderr,"Align	%d\n",c);
-			for (i = stride; i--;){
-				newp[i] = profa[i] + profb[i];
-			}
-				
-			
-			profa += stride;
-			profb += stride;
-		}
-		
-		if (path[c] & 1){
-			//fprintf(stderr,"Gap_A:%d\n",c);
-			//printf("open:%d	ext:%d	%d	%d\n",si->nsip[a] * gpo,si->nsip[a] * gpe,si->nsip[a] * profb[41],si->nsip[a] * profb[46]);
-			for (i = stride; i--;){
-				newp[i] = profb[i];
-			}
-			profb += stride;
-			if(!(path[c] & 20)){
-				if(path[c] & 32){
-					newp[25] += sipa;//1;
-					i = tgpe*sipa;
-				}else{
-					newp[24] += sipa;//1;
-					i = gpe*sipa;
-				}
-				
-				for (j = dim; j < dim+23;j++){
-					newp[j] -=i;
-				}
-			}else{
-			if (path[c] & 16){ 
-	//			fprintf(stderr,"close_open");
-				if(path[c] & 32){
-					newp[25] += sipa;//1;
-					i = tgpe*sipa;
-					newp[23] += sipa;//1;
-					i += gpo*sipa;
-				}else{
-					newp[23] += sipa;//1;
-					i = gpo*sipa;
-				}
-								
-				for (j = dim; j < dim+23;j++){
-					newp[j] -=i;
-				}
-			}
-			if (path[c] & 4){ 
-	//			fprintf(stderr,"Gap_open");
-				if(path[c] & 32){
-					newp[25] += sipa;//1;
-					i = tgpe*sipa;
-					newp[23] += sipa;//1;
-					i += gpo*sipa;
-				}else{
-					newp[23] += sipa;//1;
-					i = gpo*sipa;
-				}
-				for (j = dim; j < dim+23;j++){
-					newp[j] -=i;
-				}
-			}
-			}		
-			
-		}
-		if (path[c] & 2){
-			//fprintf(stderr,"Gap_B:%d\n",c);
-			//printf("open:%d	ext:%d	%d	%d\n",si->nsip[b] * gpo,si->nsip[b] * gpe,profa[26],profa[27]);
-			for (i = stride; i--;){
-				newp[i] = profa[i];
-			}
-			profa+=stride;
-			if(!(path[c] & 20)){
-				if(path[c] & 32){
-					newp[25] += sipb;//1;
-					i = tgpe*sipb;
-				}else{
-					newp[24] += sipb;//1;
-					i = gpe*sipb;
-				}
-				for (j = dim; j < dim+23;j++){
-					newp[j] -=i;
-				}
-			}else{
-			if (path[c] & 16){
-	//			fprintf(stderr,"close_open");
-				if(path[c] & 32){
-					newp[25] += sipb;//1;
-					i =  tgpe*sipb;
-					newp[23] += sipb;//1;
-					i +=  gpo*sipb;
-				}else{
-					newp[23] += sipb;//1;
-					i =  gpo*sipb;
-				}
-				for (j = dim; j < dim+23;j++){
-					newp[j] -=i;
-				}
-			}
-			if (path[c] & 4){
-	//			fprintf(stderr,"Gap_open");
-				if(path[c] & 32){
-					newp[25] += sipb;//1;
-					i = tgpe*sipb;
-					newp[23] += sipb;//1;
-					i += gpo*sipb;
-				}else{
-					newp[23] += sipb;//1;
-					i = gpo*sipb;
-				}
-				
-				for (j = dim; j < dim+23;j++){
-					newp[j] -=i;
-				}
-			}
-			}		
-		}
-		newp += stride;
-		c++;
-	}
-	for (i = stride; i--;){
-		newp[i] =  profa[i] + profb[i];
-	}	
-	newp -= (path[0]+1) * stride;
-	return newp;
-}
-
-
-
-float* make_unified_profile(float* prof,struct alignment* aln, int num,float** subm,struct feature_matrix* fm)
-{
-	struct feature* f = aln->ft[num];
-	int i,j,c;
-	int* seq = aln->s[num];
-	//detemine minimim width of profile... 
-	//stride = (26+fm->mdim)*2 + 3; 
-	
-	int len = aln->sl[num];
-	prof = malloc(sizeof(float)*(len+2)*stride);
-	prof +=  (stride *(len+1));
-	for (i = 0;i < stride;i++){
-		prof[i] = 0;
-	}
-	prof[23+dim] = -gpo;
-	prof[24+dim] = -gpe;
-	prof[25+dim] = -tgpe;
-
-	
-	i = len;
-	while(i--){
-		prof -= stride;
-
-		for (j = 0;j < stride;j++){
-			prof[j] = 0;
-		}
-		c = seq[i];
-		
-		prof[c] += 1;
-		
-		prof += dim;
-		
-		for(j = 0; j < 23;j++){
-			prof[j] = subm[c][j];
-		}
-		prof[23] = -gpo;
-		prof[24] = -gpe;
-		prof[25] = -tgpe;
-		prof -= dim;
-	}
-	prof -= stride;
-	for (i = 0;i < stride;i++){
-		prof[i] = 0;
-	}
-	prof[23+dim] = -gpo;
-	prof[24+dim] = -gpe;
-	prof[25+dim] = -tgpe;	
-
-	while(f){
-		if(f->color != -1){
-			if(f->start < len && f->end < len){
-				for (i = f->start;i <= f->end;i++){
-					prof[i*stride+26 + f->color] += 1;
-					//prof[i*stride+dim+26 + f->color] += 75;
-					//fprintf(stderr,"FOUND on  %d : %s	%s\n",num,f->type,f->note);
-					for ( j = 0 ; j < fm->mdim ;j++){
-						prof[i*stride+dim+26+j] += fm->m[f->color][j];
-					}
-				}
-			}
-		}
-		f = f->next;
-	}	
-
-	//exit(0);
- 	return prof;
-}
-
-
-void set_unified_gap_penalties(float* prof,int len,int nsip)
-{
-	int i;
-	
-	prof +=  (stride *(len+1));
-	prof[gpo_pos] = prof[dim+23]*nsip;
-	prof[gpe_pos] = prof[dim+24]*nsip;
-	prof[tgpe_pos] = prof[dim+25]*nsip;
-	i = len+1;
-	while(i--){
-		prof -= stride;
-		prof[gpo_pos] = prof[dim+23]*nsip;
-		prof[gpe_pos] = prof[dim+24]*nsip;
-		prof[tgpe_pos] = prof[dim+25]*nsip;
-	}
-}
-
-
-
-int* feature_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm, int* hirsch_path)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	float input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-	
-	//fprintf(stderr,"starta:%d enda:%d startb:%d endb:%d mid:%d\n",hm->starta,hm->enda,hm->startb,hm->endb,mid);
-	
-	
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-	hm->enda = mid;
-	hm->f = feature_foward_hirsch_pp_dyn(prof1,prof2,hm);
-	/*int i;
-	fprintf(stderr,"FOWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->f[i].a,hm->f[i].ga,hm->f[i].gb);
-	}*/
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	hm->b = feature_backward_hirsch_pp_dyn(prof1,prof2,hm);
-	/*fprintf(stderr,"BaCKWARD\n");
-
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->b[i].a,hm->b[i].ga,hm->b[i].gb);
-	}*/
-
-	hirsch_path = feature_hirsch_align_two_pp_vector(prof1,prof2,hm,hirsch_path,input_states,old_cor);
-	return hirsch_path;
-}
-
-
-
-int* feature_hirsch_align_two_pp_vector(const float* prof1,const float* prof2,struct hirsch_mem* hm,int* hirsch_path, float input_states[],int old_cor[])
-{
-	struct states* f = hm->f;
- 	struct states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -INFTY;
-	float max = -FLOATINFTY;	
-	//float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float middle =  (old_cor[3] - old_cor[2])/2 + old_cor[2];
-	float sub = 0.0;
-	
-
-	prof1+= (stride * (old_cor[4]+1));
-	//prof2 += stride * (hm->startb);
-	//i = hm->startb;
-	prof2 += stride * (old_cor[2]);
-	i = old_cor[2];
-	c = -1;
-	//for(i = hm->startb; i < hm->endb;i++){
-	for(i = old_cor[2]; i < old_cor[3];i++){
-		sub = abs(middle -i);
-		sub /= 1000; 
-		prof2 += stride;
-		//fprintf(stderr,"%d	%d	%d \n",f[i].a,b[i].a,max);
-		if(f[i].a+b[i].a-sub > max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga+prof2[gpo_pos]-sub > max){
-			max = f[i].a+b[i].ga+prof2[gpo_pos]-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb+prof1[gpo_pos] -sub> max){
-			max = f[i].a+b[i].gb+prof1[gpo_pos]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a+prof2[gpo_pos]-sub > max){
-			max = f[i].ga+b[i].a+prof2[gpo_pos]-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb+prof1[tgpe_pos]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[tgpe_pos]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb+prof1[gpe_pos]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[gpe_pos]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a+prof1[gpo_pos]-sub > max){
-			max = f[i].gb+b[i].a+prof1[gpo_pos]-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	//i = hm->endb;
-	i = old_cor[3];
-	sub = abs(middle -i);
-	sub /= 1000; 
-	if(f[i].a+b[i].gb+prof1[gpo_pos]-sub > max){
-		max = f[i].a+b[i].gb+prof1[gpo_pos]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb+prof1[tgpe_pos]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[tgpe_pos]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb+prof1[gpe_pos]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[gpe_pos]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	
-	prof1-= (stride * (old_cor[4]+1));
-	//prof2 -= hm->endb << 6;
-	prof2 -= old_cor[3] * stride;
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	//if(transition == -1){
-	//	exit(0);
-	//}
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-	//		fprintf(stderr,"Using this for start:%d	%d	%d\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = feature_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = feature_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = feature_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = 0.0;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = feature_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = feature_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = feature_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = 0.0;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = feature_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = feature_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = feature_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = feature_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = feature_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = feature_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-struct states* feature_foward_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm)
-{
-	unsigned int freq[dim];
-	struct states* s = hm->f;
-	//const int starta = hm->starta;
-	//const int enda = hm->enda;
-	//const int startb = hm->startb;
-	//const int endb = hm->endb;
-	
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-	
-	
-	
-	prof1 += (hm->starta) * stride;
-	prof2 +=  (hm->startb) * stride;
-	s[hm->startb].a = s[0].a;
-	s[hm->startb].ga = s[0].ga;
-	s[hm->startb].gb = s[0].gb;
-	if(hm->startb == 0){
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=stride;
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j-1].a+prof2[tgpe_pos];
-			//if (s[j-1].ga+prof2[tgpe_pos] > s[j].ga){
-			//	s[j].ga = s[j-1].ga+prof2[tgpe_pos];
-			//}
-			if(s[j-1].ga > s[j-1].a){
-				s[j].ga = s[j-1].ga+prof2[tgpe_pos];
-			}else{
-				s[j].ga = s[j-1].a+prof2[tgpe_pos];
-			}
-
-			
-			s[j].gb = -FLOATINFTY;
-		}	
-		prof2+=stride;	
-	}else{
-
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=stride;
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j-1].a+prof2[gpo_pos];
-			//if (s[j-1].ga+prof2[gpe_pos] > s[j].ga){
-			//	s[j].ga = s[j-1].ga+prof2[gpe_pos];
-			//}
-
-			if(s[j-1].ga+prof2[gpe_pos] > s[j-1].a+prof2[gpo_pos]){
-				s[j].ga = s[j-1].ga+prof2[gpe_pos];
-			}else{
-				s[j].ga = s[j-1].a+prof2[gpo_pos];
-			}
-			
-			s[j].gb = -FLOATINFTY;
-		//	prof2+=64;
-		}
-		prof2+=stride;
-	}
-	
-	prof2 -= (hm->endb-hm->startb) * stride;
-	
-	s[hm->endb].a = -FLOATINFTY;
-	s[hm->endb].ga = -FLOATINFTY;
-	s[hm->endb].gb = -FLOATINFTY;
-
-
-	for (i = hm->starta;i < hm->enda;i++){
-		prof1 += stride;
-		c = 1;
-		for (j = 0;j < dim; j++){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;
-			}
-		}
-		freq[0] = c;
-			
-		pa = s[hm->startb].a;
-		pga = s[hm->startb].ga;
-		pgb = s[hm->startb].gb;
-		if(hm->startb == 0){
-			s[hm->startb].a = -FLOATINFTY;
-			s[hm->startb].ga = -FLOATINFTY;
-		
-			//s[hm->startb].gb = pa+prof1[tgpe_pos];
-			//if(pgb+prof1[tgpe_pos] > s[hm->startb].gb){
-			//	s[hm->startb].gb = pgb+prof1[tgpe_pos];
-			//}
-			if(pgb > pa){
-				s[hm->startb].gb = pgb+prof1[tgpe_pos];
-			}else{
-				s[hm->startb].gb = pa+prof1[tgpe_pos];
-			}
-			
-		}else{
-			s[hm->startb].a = -FLOATINFTY;
-			s[hm->startb].ga = -FLOATINFTY;
-		
-			//s[hm->startb].gb = pa+prof1[gpo_pos];
-			//if(pgb+prof1[gpe_pos] > s[hm->startb].gb){
-			//	s[hm->startb].gb = pgb+prof1[gpe_pos];
-			//}
-			if(pgb+prof1[gpe_pos] > pa+prof1[gpo_pos]){
-				s[hm->startb].gb = pgb+prof1[gpe_pos];
-			}else{
-				s[hm->startb].gb = pa+prof1[gpo_pos];
-			}
-			
-		}
-		for (j = hm->startb+1; j <= hm->endb;j++){
-			prof2 += stride;
-			ca = s[j].a;
-			
-			/*pga += prof2[-37];
-			pga = pa - pga;
-			pa = pa -((pga>>31)&pga);
-			
-			pgb += prof1[-37];
-			pa = pa -(((pa - pgb)>>31)&(pa -pgb));*/
-			//fprintf(stderr,"%d	%d	%d	%p	%d\n",i,j,gpo_pos-stride,prof2);
-			if((pga += prof2[gpo_pos-stride]) > pa){
-				pa = pga;
-			}
-
-			if((pgb += prof1[gpo_pos-stride]) > pa){
-				pa = pgb;
-			}
-			
-			prof2 += dim;
-			for (c = 1;c < freq[0];c++){
-				pa += prof1[freq[c]]*prof2[freq[c]];
-			}
-			prof2 -= dim;	
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			//s[j].ga = s[j-1].a+prof2[gpo_pos];
-			//if (s[j-1].ga+prof2[gpe_pos] > s[j].ga){
-			//	s[j].ga = s[j-1].ga+prof2[gpe_pos];
-			//}
-			if(s[j-1].ga+prof2[gpe_pos] > s[j-1].a+prof2[gpo_pos]){
-				s[j].ga = s[j-1].ga+prof2[gpe_pos];
-			}else{
-				s[j].ga = s[j-1].a+prof2[gpo_pos];
-			}
-			
-			
-			pgb = s[j].gb;
-			
-			//s[j].gb = ca+prof1[gpo_pos];
-			//if(pgb+prof1[gpe_pos] > s[j].gb){
-			//	s[j].gb = pgb+prof1[gpe_pos];
-			//}
-			if(pgb+prof1[gpe_pos] > ca+prof1[gpo_pos]){
-				s[j].gb = pgb+prof1[gpe_pos];
-			}else{
-				s[j].gb = ca+prof1[gpo_pos];
-			}
-			
-			pa = ca;
-		}
-		prof2 -= (hm->endb-hm->startb) * stride;
-		
-	}
-	prof1 -= stride * (hm->enda);
-	return s;
-}
-
-struct states* feature_backward_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm)
-{
-	unsigned int freq[dim];
-	struct states* s = hm->b;
-	//const int starta = hm->starta;
-	//const int enda = hm->enda;
-	//const int startb = hm->startb;
-	//const int endb = hm->endb;
-	
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-
-	prof1 += (hm->enda+1) * stride;
-	prof2 += (hm->endb+1) * stride;
-	s[hm->endb].a = s[0].a;
-	s[hm->endb].ga = s[0].ga;
-	s[hm->endb].gb = s[0].gb;
-	
-	
-	//init of first row;
-	//j = endb-startb;
-	if(hm->endb == hm->len_b){
-		
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= stride;
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j+1].a+prof2[tgpe_pos];
-			//if (s[j+1].ga+prof2[tgpe_pos] > s[j].ga){
-			//	s[j].ga = s[j+1].ga+prof2[tgpe_pos];
-			//}
-			if(s[j+1].ga > s[j+1].a){
-				s[j].ga = s[j+1].ga+prof2[tgpe_pos];
-			}else{
-				s[j].ga = s[j+1].a+prof2[tgpe_pos];
-			}
-			
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2 -= stride;
-	}else{
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= stride;
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j+1].a+prof2[gpo_pos];
-			//if (s[j+1].ga+prof2[gpe_pos] > s[j].ga){
-			//	s[j].ga = s[j+1].ga+prof2[gpe_pos];
-			//}
-			if(s[j+1].ga+prof2[gpe_pos] > s[j+1].a+prof2[gpo_pos]){
-				s[j].ga = s[j+1].ga+prof2[gpe_pos];
-			}else{
-				s[j].ga = s[j+1].a+prof2[gpo_pos];
-			}
-			s[j].gb = -FLOATINFTY;
-		//	prof2 -= 64;
-		}
-		prof2 -= stride;
-	}
-	
-	s[hm->startb].a = -FLOATINFTY;
-	s[hm->startb].ga = -FLOATINFTY;
-	s[hm->startb].gb = -FLOATINFTY;
-//	prof2 -= (endb -startb) << 6;
-
-	i = hm->enda-hm->starta;
-	while(i--){
-		prof1 -= stride;
-
-		c = 1;
-		for (j = 0;j < dim; j++){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;
-			}
-		}
-		freq[0] = c;
-		
-		pa = s[hm->endb].a;
-		pga = s[hm->endb].ga;
-		pgb = s[hm->endb].gb;
-		s[hm->endb].a = -FLOATINFTY;
-		s[hm->endb].ga = -FLOATINFTY;
-
-		if(hm->endb == hm->len_b){
-			//s[hm->endb].gb = pa+prof1[tgpe_pos];
-			//if(pgb+prof1[tgpe_pos] > s[hm->endb].gb){
-			//	s[hm->endb].gb = pgb+prof1[tgpe_pos];
-			//}
-			if(pgb > pa){
-				s[hm->endb].gb = pgb+prof1[tgpe_pos];
-			}else{
-				s[hm->endb].gb = pa+prof1[tgpe_pos];
-			}
-		}else{
-			//s[hm->endb].gb = pa+prof1[gpo_pos];
-			//if(pgb+prof1[gpe_pos] > s[hm->endb].gb){
-			//	s[hm->endb].gb = pgb+prof1[gpe_pos];
-			//}
-			if(pgb+prof1[gpe_pos] > pa+prof1[gpo_pos]){
-				s[hm->endb].gb = pgb+prof1[gpe_pos];
-			}else{
-				s[hm->endb].gb = pa+prof1[gpo_pos];
-			}
-		}
-		//j = endb-startb;
-		prof2 += (hm->endb-hm->startb) * stride;
-		//while(j--){
-		for(j = hm->endb-1;j >= hm->startb;j--){
-			prof2 -= stride;
-			ca = s[j].a;
-			if((pga += prof2[stride+ gpo_pos]) > pa){
-				pa = pga;
-			}
-			if((pgb += prof1[stride+gpo_pos]) > pa){
-				pa = pgb;
-			}
-			
-			prof2 += dim;
-			for (c = 1;c < freq[0];c++){
-				pa += prof1[freq[c]]*prof2[freq[c]];
-			}
-			prof2 -= dim;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			//s[j].ga = s[j+1].a+prof2[gpo_pos];
-			//if (s[j+1].ga+prof2[gpe_pos] > s[j].ga){
-			//	s[j].ga = s[j+1].ga+prof2[gpe_pos];
-			//}
-			if(s[j+1].ga+prof2[gpe_pos] > s[j+1].a+prof2[gpo_pos]){
-				s[j].ga = s[j+1].ga+prof2[gpe_pos];
-			}else{
-				s[j].ga = s[j+1].a+prof2[gpo_pos];
-			}
-			
-			pgb = s[j].gb;
-			
-			//s[j].gb = ca+prof1[gpo_pos];
-			//if(pgb+prof1[gpe_pos] > s[j].gb){
-			//	s[j].gb = pgb+prof1[gpe_pos];
-			//}
-			if(pgb+prof1[gpe_pos] > ca+prof1[gpo_pos]){
-				s[j].gb = pgb+prof1[gpe_pos];
-			}else{
-				s[j].gb = ca+prof1[gpo_pos];
-			}
-			pa = ca;
-		}
-	}		
-	return s;
-}
-
-
-
-
-struct feature_matrix* get_feature_matrix(struct feature_matrix* fm, struct alignment* aln,char* requested_feature)
-{
-	struct utype_ufeat* utf = 0;
-	struct feature* n = 0;
-	struct feature* p = 0;
-	
-	int i = 0;
-	int j = 0;
-	
-	utf = get_unique_features(aln,utf);
-	
-	fm = malloc(sizeof(struct feature_matrix));
-	
-	
-	
-	
-	if (byg_start(requested_feature,"allALL")!= -1){
-		n = utf->f;
-		i = 0;
-		while(n){
-			n->color = i;
-			i++;
-			n = n->next;
-		}
-	}else if(byg_start(requested_feature,"maxplpMAXPLP")!= -1){
-		n = utf->f;
-		i = 0;
-		while(n){
-			if(byg_start("SIGNAL PEPTIDE",n->note)!= -1){
-				n->color = 0;
-			}
-			if(byg_start("TRANSMEMBRANE",n->note)!= -1){
-				n->color = 1;
-			}
-			if(byg_start("TRANSLOCATED LOOP",n->note)!= -1){
-				n->color = 2;
-			}
-			if(byg_start("CYTOPLASMIC LOOP",n->note)!= -1){
-				n->color = 3;
-			}
-			n = n->next;
-		}
-		i = 4;
-	}else{
-		n = utf->f;
-		i = 0;
-		while(n){
-			if(check_identity(requested_feature,n->type)!= -1){
-				//fprintf(stderr,"%s	%s\n",requested_feature,n->type);
-				n->color = i;
-				i++;
-			}else{
-				n->color = -1;
-			}
-			n = n->next;
-		}
-	}
-	/*if(!i){
-		fprintf(stderr,"WARNING: no feature of type '%s' was found in the input file.\n",requested_feature);
-		fprintf(stderr,"	\nAvailable features are:\n\n");
-		fprintf(stderr,"	Type		Feature\n");
-		fprintf(stderr,"	-----------------------------\n");
-		n = utf->f;
-		while(n){
-			fprintf(stderr,"	%s		%s\n",n->type,n->note);
-			n = n->next;
-		}
-		
-		free_utf(utf);
-		free_aln(aln);
-		free(fm);
-		return 0;
-	}*/
-	
-	if(byg_start(requested_feature,"maxplp")!= -1){
-		fm->mdim = 4;
-		fm->stride = fm->mdim << 1;
-		fm->m = malloc(sizeof(float*)*fm->mdim);
-		for (i = 0;i < fm->mdim;i++){
-			fm->m[i] = malloc(sizeof(float)*fm->mdim);
-		}
-	/*1: 0.60 0.20 0.15 0.05
-	2: 0.20 0.60 0.10 0.10
-	3: 0.15 0.10 0.50 0.25
-	4: 0.05 0.10 0.25 0.60*/
-
-		fm->m[0][0] = 60;
-		fm->m[0][1] = 20;
-		fm->m[0][2] = 15;
-		fm->m[0][3] = 5;
-		fm->m[1][0] = 20;
-		fm->m[1][1] = 60;
-		fm->m[1][2] = 10;
-		fm->m[1][3] = 10;
-		fm->m[2][0] = 15;
-		fm->m[2][1] = 10;
-		fm->m[2][2] = 50;
-		fm->m[2][3] = 25;
-		fm->m[3][0] = 5;
-		fm->m[3][1] = 10;
-		fm->m[3][2] = 25;
-		fm->m[3][3] = 60;
-		
-	}else if(byg_start(requested_feature,"wumanber")!= -1){
-		fm->mdim = i;
-		fm->stride = fm->mdim << 1;
-		fm->m = malloc(sizeof(float*)*fm->mdim);
-		for (i = 0;i < fm->mdim;i++){
-			fm->m[i] = malloc(sizeof(float)*fm->mdim);
-			for (j = 0;j < fm->mdim;j++){
-				fm->m[i][j] = 0;
-			}
-		}
-		for (i = 0;i < fm->mdim;i++){
-			fm->m[i][i] = 100;
-		}	
-	//	fprintf(stderr,"WU	%d	\n",fm->mdim);
-	}else{
-		fm->mdim = i;
-		fm->stride = fm->mdim << 1;
-		fm->m = malloc(sizeof(float*)*fm->mdim);
-		for (i = 0;i < fm->mdim;i++){
-			fm->m[i] = malloc(sizeof(float)*fm->mdim);
-			for (j = 0;j < fm->mdim;j++){
-				fm->m[i][j] = -5;
-			}
-		}
-		for (i = 0;i < fm->mdim;i++){
-			fm->m[i][i] = 75;
-		}	
-	}
-	//float fr = 0.0;
-	for (i = numseq;i--;){
-                n = aln->ft[i];
-	//	fprintf(stderr,"SEQUENCE %d\n",i);
-                while(n){
-                        p = utf->f;
-                        while(p){
-                        	if(check_identity(requested_feature,n->type)!= -1){
-                                if(check_identity(n->note,p->note)!= -1){
-					n->color = p->color;
-             //                           fr += n->end - n->start+1;
-            //                           fprintf(stderr,"SEQ:%d	FEATURE FOUND:%s	%s	%d-%d	 color:%d	\n",i,n->note,p->note,n->start,n->end,n->color);
-                                        break;
-                                }
-                                }
-                                p = p->next;
-                        }
-                        n = n->next;
-                }
-        }
-//	fprintf(stderr,"%f\n",fr);
-	
-	//float res = 0.0;
-	
-	//for (i = 0; i < numseq;i++){
-	//	res += aln->sl[i];
-	//}
-	//fprintf(stdout,"%f	%f	%f\n",fr,res,fr/res);
-	//exit(0);
-	
-	/*
-	n = utf->t;
-	fprintf(stderr,"TYPES:	we use:%d\n",i);
-	while(n){
-		fprintf(stderr,"%s\n",n->type);
-		n = n->next;
-	}
-	
-	n = utf->f;
-	fprintf(stderr,"Features:\n");
-	i = 0;
-	while(n){
-		fprintf(stderr,"%d:	%s:%s	col:%d\n",i,n->type,n->note,n->color);
-		i++;
-		n = n->next;
-	}
-	fprintf(stderr,"REQUESTED FEATURE:%s\n",requested_feature);
-
-	for (i = 0;i < fm->mdim;i++){
-		for (j = 0;j < fm->mdim;j++){
-			fprintf(stderr,"%d ",fm->m[i][j]);
-		}
-		fprintf(stderr,"\n");
-	}	
-	fprintf(stderr,"\n");*/
-	
-	
-	free_utf(utf);
-	return fm; 
-}
-
-struct utype_ufeat* get_unique_features(struct alignment* aln,struct utype_ufeat* utf)
-{
-	int i;
-	utf = malloc(sizeof(struct utype_ufeat)*1);
-	utf->t = 0;
-	utf->f = 0;
-	for (i =0; i < numseq;i++){
-		utf = traverse_ft(utf,aln->ft[i]);
-	}
-	return utf;
-}
-
-
-struct utype_ufeat* traverse_ft(struct utype_ufeat* utf,struct feature* n)
-{
-	if (n != NULL){
-		utf->t = add_unique_type(utf->t,n);
-		utf->f = add_unique_feature(utf->f,n);
-		traverse_ft(utf,n->next);
-	}
-	return utf;
-}
-
-
-struct feature* add_unique_feature(struct feature *n, struct feature *toadd)
-{
-	int i;
-		
-        if (n == NULL){
-		n = (struct feature*) malloc(sizeof(struct feature));
-		n->type = malloc(sizeof(char)* (strlen(toadd->type)+1));
-		for ( i= 0;i < strlen(toadd->type);i++){
-			n->type[i] = toadd->type[i];
-		}
-		n->type[i] = 0;
-		
-		n->note = malloc(sizeof(char)* (strlen(toadd->note)+1));
-		for ( i= 0;i < strlen(toadd->note);i++){
-			n->note[i] = toadd->note[i];
-		}
-		n->note[i] = 0;
-		
-		n->start = toadd->end - toadd->start;
-		n->end = 0;
-		
-		n->next = 0;
-	}else{
-	
-		if((check_identity(toadd->note,n->note)== -1)){
-			n->next = add_unique_feature(n->next,toadd);
-		}else{
-			n->start += toadd->end - toadd->start;
-		}
-	}
-        return n;
-}
-
-struct feature* add_unique_type(struct feature *n, struct feature *toadd)
-{
-	int i;
-		
-        if (n == NULL){
-		n = (struct feature*) malloc(sizeof(struct feature));
-		n->type = malloc(sizeof(char)* (strlen(toadd->type)+1));
-		for ( i= 0;i < strlen(toadd->type);i++){
-			n->type[i] = toadd->type[i];
-		}
-		n->type[i] = 0;
-		
-		n->note = malloc(sizeof(char)* (strlen(toadd->note)+1));
-		for ( i= 0;i < strlen(toadd->note);i++){
-			n->note[i] = toadd->note[i];
-		}
-		n->note[i] = 0;
-		
-		n->start = 0;
-		n->end = 0;
-		
-		n->next = 0;
-	}else{
-		if((check_identity(toadd->type,n->type)== -1)){
-			n->next = add_unique_type(n->next,toadd);
-		}
-	}
-        return n;
-}
-
-
-
-
-
-

Deleted: trunk/packages/kalign/trunk/kalign2_feature.h
===================================================================
--- trunk/packages/kalign/trunk/kalign2_feature.h	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_feature.h	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,36 +0,0 @@
-/*
-	feature.h
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include <string.h>
-
-float* feature_hirschberg_update(const float* profa,const float* profb,float* newp,int* path,int sipa,int sipb);
-float* make_unified_profile(float* prof,struct alignment* aln, int num,float** subm,struct feature_matrix* fm);
-void set_unified_gap_penalties(float* prof,int len,int nsip);
-
-int* feature_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm, int* hirsch_path);
-int* feature_hirsch_align_two_pp_vector(const float* prof1,const float* prof2,struct hirsch_mem* hm,int* hirsch_path, float input_states[],int old_cor[]);
-struct states* feature_foward_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm);
-struct states* feature_backward_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm);
-

Deleted: trunk/packages/kalign/trunk/kalign2_hirschberg.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_hirschberg.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_hirschberg.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,2741 +0,0 @@
-/*
-	kalign2_hirschberg.c
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-#include "kalign2_hirschberg.h"
-#define MAX(a, b) (a > b ? a : b)
-#define MAX3(a,b,c) MAX(MAX(a,b),c)
-//#include <emmintrin.h>
-
-int** hirschberg_alignment(struct alignment* aln,int* tree,float**submatrix, int** map,int window,float strength)
-{
-	struct hirsch_mem* hm = 0;
-	int i,j,g,a,b,c;
-	int len_a;
-	int len_b;
-	float** profile = 0;
-
-	profile = malloc(sizeof(float*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		profile[i] = 0;
-	}
-
-	map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		map[i] = 0;
-	}
-	
-	hm = hirsch_mem_alloc(hm,1024);
-
-	fprintf(stderr,"\nAlignment:\n");
-
-	for (i = 0; i < (numseq-1);i++){
-		a = tree[i*3];
-		b = tree[i*3+1];
-		c = tree[i*3+2];
-		fprintf(stderr,"\r%8.0f percent done",(float)(i) /(float)numseq * 100);
-		//fprintf(stderr,"Aligning:%d %d->%d	done:%f\n",a,b,c,((float)(i+1)/(float)numseq)*100);
-		len_a = aln->sl[a];
-		len_b = aln->sl[b];
-
-		
-		g = (len_a > len_b)? len_a:len_b;
-		map[c] = malloc(sizeof(int) * (g+2));
-		if(g > hm->size){
-			hm = hirsch_mem_realloc(hm,g);
-		}
-
-		for (j = 0; j < (g+2);j++){
-			map[c][j] = -1;
-		}
-
-		if (a < numseq){
-			profile[a] = make_profile(profile[a],aln->s[a],len_a,submatrix);
-		}else{
-			set_gap_penalties(profile[a],len_a,aln->nsip[b]);
-			//smooth_gaps(profile[a],len_a,window,strength);
-			
-			//increase_gaps(profile[a],len_a,window,strength);
-		}
-		if (b < numseq){
-			profile[b] = make_profile(profile[b],aln->s[b],len_b,submatrix);
-		}else{		
-			set_gap_penalties(profile[b],len_b,aln->nsip[a]);
-			//smooth_gaps(profile[b],len_b,window,strength);
-			//increase_gaps(profile[b],len_b,window,strength);
-		}
-		
-		hm->starta = 0;
-		hm->startb = 0;
-		hm->enda = len_a;
-		hm->endb = len_b;
-		hm->len_a = len_a;
-		hm->len_b = len_b;
-		
-		hm->f[0].a = 0.0;
-		hm->f[0].ga =  -FLOATINFTY;
-		hm->f[0].gb = -FLOATINFTY;
-		hm->b[0].a = 0.0;
-		hm->b[0].ga =  -FLOATINFTY;
-		hm->b[0].gb =  -FLOATINFTY;
-	//	fprintf(stderr,"LENA:%d	LENB:%d	numseq:%d\n",len_a,len_b,numseq);
-		if(a < numseq){
-			if(b < numseq){
-				map[c] = hirsch_ss_dyn(submatrix,aln->s[a],aln->s[b],hm,map[c]);
-			}else{
-				hm->enda = len_b;
-				hm->endb = len_a;
-				hm->len_a = len_b;
-				hm->len_b = len_a;
-				map[c] = hirsch_ps_dyn(profile[b],aln->s[a],hm,map[c],aln->nsip[b]);
-				map[c] = mirror_hirsch_path(map[c],len_a,len_b);
-			}
-		}else{
-			if(b < numseq){
-				map[c] = hirsch_ps_dyn(profile[a],aln->s[b],hm,map[c],aln->nsip[a]);
-			}else{
-				if(len_a < len_b){
-					map[c] = hirsch_pp_dyn(profile[a],profile[b],hm,map[c]);
-				}else{
-					hm->enda = len_b;
-					hm->endb = len_a;
-					hm->len_a = len_b;
-					hm->len_b = len_a;
-					map[c] = hirsch_pp_dyn(profile[b],profile[a],hm,map[c]);
-					map[c] = mirror_hirsch_path(map[c],len_a,len_b);
-				}
-			}
-		}
-		
-		map[c] = add_gap_info_to_hirsch_path(map[c],len_a,len_b);
-
-		if(i != numseq-2){
-			profile[c] = malloc(sizeof(float)*64*(map[c][0]+2));
-			profile[c] = update(profile[a],profile[b],profile[c],map[c],aln->nsip[a],aln->nsip[b]);
-		}
-			
-		aln->sl[c] = map[c][0];
-	
-		aln->nsip[c] = aln->nsip[a] + aln->nsip[b];
-		aln->sip[c] = malloc(sizeof(int)*(aln->nsip[a] + aln->nsip[b]));
-		g =0;
-		for (j = aln->nsip[a];j--;){
-			aln->sip[c][g] = aln->sip[a][j];
-			g++;
-		}
-		for (j = aln->nsip[b];j--;){
-			aln->sip[c][g] = aln->sip[b][j];
-			g++;
-		}
-
-		free(profile[a]);
-		free(profile[b]);
-	}
-	fprintf(stderr,"\r%8.0f percent done\n",100.0);
-	free(profile);
-	hirsch_mem_free(hm);
-	for (i = 32;i--;){
-		free(submatrix[i]);
-	}
-	free(submatrix);
-	return map;
-}
-
-
-int* hirsch_ss_dyn(float**subm, const int* seq1,const int* seq2,struct hirsch_mem* hm, int* hirsch_path)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	float input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-
-	hm->enda = mid;
-
-	//fprintf(stderr,"Forward:%d-%d	%d-%d\n",hm->starta,hm->enda,hm->startb,hm->endb);
-	hm->f = foward_hirsch_ss_dyn(subm,seq1,seq2,hm);
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	//fprintf(stderr,"Backward:%d-%d	%d-%d\n",hm->starta,hm->enda,hm->startb,hm->endb);
-	hm->b = backward_hirsch_ss_dyn(subm,seq1,seq2,hm);
-
-
-	hirsch_path = hirsch_align_two_ss_vector(subm,seq1,seq2,hm,hirsch_path,input_states,old_cor);
-	return hirsch_path;
-}
-
-int* hirsch_align_two_ss_vector(float**subm,const int* seq1,const int* seq2,struct hirsch_mem* hm,int* hirsch_path,float input_states[],int old_cor[])
-{
-	struct states* f = hm->f;
- 	struct states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -INFTY;
-	float max = -INFTY;
-	//float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float middle =  (old_cor[3] - old_cor[2])/2 + old_cor[2];
-	float sub = 0.0;
-	
-	//i = hm->startb;
-	i = old_cor[2];
-	c = -1;
-	//for(i = hm->startb; i < hm->endb;i++){
-	for(i = old_cor[2]; i < old_cor[3];i++){
-	
-		sub = abs(middle -i);
-		sub /= 1000; 
-	//	fprintf(stderr,"%d-%d	%f\n",hm->startb,hm->endb,sub);
-		if(f[i].a+b[i].a-sub > max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga-gpo-sub > max){
-			max = f[i].a+b[i].ga-gpo-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb -gpo-sub > max){
-			max = f[i].a+b[i].gb - gpo-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a - gpo-sub > max){
-			max = f[i].ga+b[i].a - gpo-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb - tgpe-sub > max){
-				max = f[i].gb+b[i].gb -tgpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb - gpe -sub> max){
-				max = f[i].gb+b[i].gb - gpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a - gpo-sub > max){
-			max = f[i].gb+b[i].a - gpo-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	//i = hm->endb;
-	i = old_cor[3];
-	sub = abs(middle -i);
-	sub /= 1000; 
-	
-	if(f[i].a+b[i].gb-gpo-sub > max){
-		max = f[i].a+b[i].gb - gpo-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb -tgpe-sub > max){
-			max = f[i].gb+b[i].gb - tgpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb - gpe-sub > max){
-			max = f[i].gb+b[i].gb - gpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-	//		fprintf(stderr,"Using this for start:%d	%d	%d\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = 0.0;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = 0.0;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-
-
-struct states* foward_hirsch_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_mem* hm)
-{
-	struct states* s = hm->f;
-	float *subp = 0;
-	const int starta = hm->starta;
-	const int enda = hm->enda;
-	const int startb =hm->startb;
-	const int endb = hm->endb;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-
-	s[startb].a = s[0].a;
-	s[startb].ga = s[0].ga;
-	s[startb].gb = s[0].gb;
-	if(startb){
-		for (j = startb+1; j < endb;j++){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j-1].ga - gpe,s[j-1].a-gpo);
-			s[j].gb = -FLOATINFTY;
-		}
-	}else{
-		for (j = startb+1; j < endb;j++){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j-1].ga,s[j-1].a)-tgpe;
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-	s[endb].a = -FLOATINFTY;
-	s[endb].ga = -FLOATINFTY;
-	s[endb].gb = -FLOATINFTY;
-
-	seq2--;
-	for (i = starta;i < enda;i++){
-		subp = subm[seq1[i]];
-
-		pa = s[startb].a;
-		pga = s[startb].ga;
-		pgb = s[startb].gb;
-		s[startb].a = -FLOATINFTY;
-		s[startb].ga = -FLOATINFTY;
-		if(startb){
-			s[startb].gb = MAX(pgb - gpe,pa - gpo);
-		}else{
-			s[startb].gb = MAX(pgb,pa) - tgpe;
-		}
-		for (j = startb+1; j < endb;j++){
-			ca = s[j].a;
-			pa = MAX3(pa,pga-gpo,pgb-gpo);
-			pa += subp[seq2[j]];
-			
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			s[j].ga = MAX(s[j-1].ga-gpe,s[j-1].a-gpo);
-			
-			pgb = s[j].gb;
-			s[j].gb = MAX(pgb-gpe ,ca-gpo);
-			
-			pa = ca;
-		}
-		ca = s[j].a;
-		pa = MAX3(pa,pga-gpo,pgb-gpo);
-		pa += subp[seq2[j]];
-			
-		s[j].a = pa;
-			
-		s[j].ga = -FLOATINFTY;//MAX(s[j-1].ga-gpe,s[j-1].a-gpo);
-		if (endb != hm->len_b){
-			s[j].gb = MAX(s[j].gb-gpe ,ca-gpo);
-		}else{
-			s[j].gb = MAX(s[j].gb,ca)-tgpe;
-		}
-
-	}
-	return s;
-}
-
-struct states* backward_hirsch_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_mem* hm)
-{
-
-	struct states* s = hm->b;
-	float *subp = 0;
-	const int starta = hm->starta;
-	const int enda = hm->enda;
-	const int startb =hm->startb;
-	const int endb = hm->endb;
-	
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-
-	s[endb].a = s[0].a ;
-	s[endb].ga = s[0].ga;
-	s[endb].gb = s[0].gb;
-	
-	
-	//init of first row;
-	
-	//j = endb-startb;
-	if(endb != hm->len_b){
-		for(j = endb-1;j > startb;j--){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j+1].ga-gpe,s[j+1].a-gpo);	
-			s[j].gb = -FLOATINFTY;
-		}
-	}else{
-		for(j = endb-1;j > startb;j--){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j+1].ga,s[j+1].a)-tgpe;
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-
-	
-	s[startb].a = -FLOATINFTY;
-	s[startb].ga = -FLOATINFTY;
-	s[startb].gb = -FLOATINFTY;
-
-	i = enda-starta;
-	seq1+= starta;
-	while(i--){
-		subp = subm[seq1[i]];
-		pa = s[endb].a;
-		pga = s[endb].ga;
-		pgb = s[endb].gb;
-		s[endb].a = -FLOATINFTY;
-		s[endb].ga = -FLOATINFTY;
-
-		if(endb != hm->len_b){
-			s[endb].gb = MAX(pgb-gpe,pa-gpo);
-		}else{
-			s[endb].gb = MAX(pgb,pa)-tgpe;
-		}
-
-		for(j = endb-1;j > startb;j--){
-
-			ca = s[j].a;
-
-			pa = MAX3(pa,pga - gpo,pgb-gpo);
-			
-			pa += subp[seq2[j]];
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-
-			s[j].ga = MAX(s[j+1].ga-gpe,s[j+1].a-gpo);
-			
-			pgb = s[j].gb;
-
-			s[j].gb = MAX(pgb-gpe,ca-gpo);
-			
-			pa = ca;
-		}
-		ca = s[j].a;
-
-		pa = MAX3(pa,pga - gpo,pgb-gpo);
-			
-		pa += subp[seq2[j]];
-
-		s[j].a = pa;
-		
-		s[j].ga = -FLOATINFTY;//MAX(s[j+1].ga-gpe,s[j+1].a-gpo);
-		
-		if(startb){
-			s[j].gb = MAX(s[j].gb-gpe,ca-gpo);
-		}else{
-			s[j].gb = MAX(s[j].gb,ca)-tgpe;
-		}
-
-		
-	}		
-	return s;
-}
-
-
-int* hirsch_ps_dyn(const float* prof1,const int* seq2,struct hirsch_mem* hm, int* hirsch_path,int sip)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	float input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-	hm->enda = mid;
-	hm->f = foward_hirsch_ps_dyn(prof1,seq2,hm,sip);
-	
-	/*int i;
-	fprintf(stderr,"FOWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->f[i].a,hm->f[i].ga,hm->f[i].gb);
-	}*/
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	hm->b = backward_hirsch_ps_dyn(prof1,seq2,hm,sip);
-	
-	/*fprintf(stderr,"BaCKWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->b[i].a,hm->b[i].ga,hm->b[i].gb);
-	}*/
-
-	hirsch_path = hirsch_align_two_ps_vector(prof1,seq2,hm,hirsch_path,input_states,old_cor,sip);
-	return hirsch_path;
-}
-
-
-
-int* hirsch_align_two_ps_vector(const float* prof1,const int* seq2,struct hirsch_mem* hm,int* hirsch_path,float input_states[],int old_cor[],int sip)
-{
-	struct states* f = hm->f;
- 	struct states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	const float open = gpo * sip;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -INFTY;
-	float max = -INFTY;
-	//float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float middle =  (old_cor[3] - old_cor[2])/2 + old_cor[2];
-	float sub = 0.0;
-	
-	
-	prof1+= ((old_cor[4]+1)<<6);
-	
-	//i = hm->startb;
-	i = old_cor[2];
-	c = -1;
-	//for(i = hm->startb; i < hm->endb;i++){
-	for(i = old_cor[2]; i < old_cor[3];i++){
-		sub = abs(middle -i);
-		sub /= 1000; 
-		if(f[i].a+b[i].a-sub> max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga-open-sub > max){
-			max = f[i].a+b[i].ga-open-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb+prof1[27]-sub > max){
-			max = f[i].a+b[i].gb+prof1[27]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a-open-sub > max){
-			max = f[i].ga+b[i].a-open-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb+prof1[29]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[29]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb+prof1[28]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[28]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a+prof1[-37]-sub > max){
-			max = f[i].gb+b[i].a+prof1[-37]-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	//i = hm->endb;
-	i = old_cor[3];
-	
-	sub = abs(middle -i);
-	sub /= 1000; 
-	if(f[i].a+b[i].gb+prof1[27]-sub > max){
-		max = f[i].a+b[i].gb+prof1[27]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb+prof1[29]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[29]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb+prof1[28]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[28]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	
-	prof1-= ((old_cor[4]+1)<<6);
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-	//		fprintf(stderr,"Using this for start:%d	%d	%d\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = 0.0;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = 0.0;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ps_dyn(prof1,seq2,hm,hirsch_path,sip);			
-
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-struct states* foward_hirsch_ps_dyn(const float* prof1,const int* seq2,struct hirsch_mem* hm,int sip)
-{
-	struct states* s = hm->f;
-
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-	const float open = gpo * sip;
-	const float ext = gpe *sip;
-	const float text = tgpe * sip;
-	
-	
-	
-	prof1 += (hm->starta)<< 6;
-	s[hm->startb].a = s[0].a;
-	s[hm->startb].ga = s[0].ga;
-	s[hm->startb].gb = s[0].gb;
-	if(hm->startb){
-		for (j = hm->startb+1; j < hm->endb;j++){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j-1].ga-ext,s[j-1].a-open);	
-			s[j].gb = -FLOATINFTY;
-		}
-	}else{
-		for (j = hm->startb+1; j < hm->endb;j++){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j-1].ga,s[j-1].a) - text;
-			s[j].gb = -FLOATINFTY;
-		}
-
-	}
-	
-	
-	s[hm->endb].a = -FLOATINFTY;
-	s[hm->endb].ga = -FLOATINFTY;
-	s[hm->endb].gb = -FLOATINFTY;
-	seq2--;
-
-	for (i = hm->starta;i < hm->enda;i++){
-		prof1 += 64;
-
-		pa = s[hm->startb].a;
-		pga = s[hm->startb].ga;
-		pgb = s[hm->startb].gb;
-		s[hm->startb].a = -FLOATINFTY;
-		s[hm->startb].ga = -FLOATINFTY;
-		if(hm->startb){
-			s[hm->startb].gb = MAX(pgb+prof1[28],pa+prof1[27]);
-		}else{
-			s[hm->startb].gb = MAX(pgb,pa)+prof1[29];
-		}
-		for (j = hm->startb+1; j < hm->endb;j++){
-			ca = s[j].a;
-
-			pa = MAX3(pa,pga -open,pgb + prof1[-37]);
-			
-			pa += prof1[32 + seq2[j]];
-
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = MAX(s[j-1].ga-ext,s[j-1].a-open);
-				
-			pgb = s[j].gb;
-			
-			s[j].gb = MAX(pgb+prof1[28],ca+prof1[27]);
-				
-			pa = ca;
-		}
-		ca = s[j].a;
-
-		pa = MAX3(pa,pga -open,pgb + prof1[-37]);
-			
-		pa += prof1[32 + seq2[j]];
-
-
-		s[j].a = pa;
-
-		s[j].ga = -FLOATINFTY;//MAX(s[j-1].ga-ext,s[j-1].a-open);
-				
-		if (hm->endb != hm->len_b){
-			s[j].gb = MAX(s[j].gb+prof1[28] ,ca+prof1[27]);
-		}else{
-			s[j].gb = MAX(s[j].gb,ca)+ prof1[29];
-		}
-		
-	}
-	prof1 -= hm->enda << 6;
-	return s;
-}
-
-struct states* backward_hirsch_ps_dyn(const float* prof1,const int* seq2,struct hirsch_mem* hm,int sip)
-{
-	struct states* s = hm->b;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-	const float open = gpo * sip;
-	const float ext = gpe *sip;
-	const float text = tgpe * sip;
-	
-
-	prof1 += (hm->enda+1) << 6;
-
-	s[hm->endb].a = s[0].a;
-	s[hm->endb].ga = s[0].ga;
-	s[hm->endb].gb = s[0].gb;
-	
-	if(hm->endb != hm->len_b){
-		for(j = hm->endb-1;j > hm->startb;j--){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j+1].ga-ext,s[j+1].a-open);
-			s[j].gb = -FLOATINFTY;
-		}
-	}else{
-		for(j = hm->endb-1;j > hm->startb;j--){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j+1].ga,s[j+1].a)-text;
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-	
-	s[hm->startb].a = -FLOATINFTY;
-	s[hm->startb].ga = -FLOATINFTY;
-	s[hm->startb].gb = -FLOATINFTY;
-
-	i = hm->enda-hm->starta;
-	while(i--){
-		prof1 -= 64;
-		pa = s[hm->endb].a;
-		pga = s[hm->endb].ga;
-		pgb = s[hm->endb].gb;
-		s[hm->endb].a = -FLOATINFTY;
-		s[hm->endb].ga = -FLOATINFTY;
-
-		if(hm->endb != hm->len_b){
-			s[hm->endb].gb = MAX(pgb+prof1[28],pa+prof1[27]);
-		}else{
-			s[hm->endb].gb = MAX(pgb,pa) +prof1[29];
-		}
-
-		for(j = hm->endb-1;j > hm->startb;j--){
-			ca = s[j].a;
-
-			pa = MAX3(pa,pga - open,pgb +prof1[91]);
-			pa += prof1[32 + seq2[j]];
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-
-			s[j].ga = MAX(s[j+1].ga-ext,s[j+1].a-open);
-				
-			pgb = s[j].gb;
-
-			s[j].gb = MAX(pgb+prof1[28],ca+prof1[27]);
-			
-			pa = ca;
-		}
-		ca = s[j].a;
-
-		pa = MAX3(pa,pga - open,pgb +prof1[91]);
-		pa += prof1[32 + seq2[j]];
-
-		s[j].a = pa;
-			
-
-		s[j].ga = -FLOATINFTY;//MAX(s[j+1].ga-ext,s[j+1].a-open);
-		if(hm->startb){
-			s[j].gb = MAX(s[j].gb+prof1[28], ca+prof1[27]);
-		}else{
-			s[j].gb = MAX(s[j].gb,ca)+prof1[29];
-		}
-
-	}		
-	return s;
-}
-
-
-
-
-int* hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm, int* hirsch_path)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	float input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-	
-	//fprintf(stderr,"starta:%d enda:%d startb:%d endb:%d mid:%d\n",hm->starta,hm->enda,hm->startb,hm->endb,mid);
-	
-	
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-	hm->enda = mid;
-	hm->f = foward_hirsch_pp_dyn(prof1,prof2,hm);
-	/*int i;
-	fprintf(stderr,"FOWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->f[i].a,hm->f[i].ga,hm->f[i].gb);
-	}*/
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	hm->b = backward_hirsch_pp_dyn(prof1,prof2,hm);
-	/*fprintf(stderr,"BaCKWARD\n");
-
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->b[i].a,hm->b[i].ga,hm->b[i].gb);
-	}*/
-
-	hirsch_path = hirsch_align_two_pp_vector(prof1,prof2,hm,hirsch_path,input_states,old_cor);
-	return hirsch_path;
-}
-
-
-
-int* hirsch_align_two_pp_vector(const float* prof1,const float* prof2,struct hirsch_mem* hm,int* hirsch_path,float input_states[],int old_cor[])
-{
-	struct states* f = hm->f;
- 	struct states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -INFTY;
-	float max = -INFTY;	
-	//float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float middle =  (old_cor[3] - old_cor[2])/2 + old_cor[2];
-	float sub = 0.0;
-	
-
-	prof1+= ((old_cor[4]+1) << 6);
-	//prof2 += 64 * (hm->startb);
-	//i = hm->startb;
-	prof2 += old_cor[2] << 6;
-	i = old_cor[2];
-	c = -1;
-	//for(i = hm->startb; i < hm->endb;i++){
-	for(i = old_cor[2]; i < old_cor[3];i++){
-		sub = abs(middle -i);
-		sub /= 1000; 
-		prof2 += 64;
-		//fprintf(stderr,"%d	%d	%d \n",f[i].a,b[i].a,max);
-		if(f[i].a+b[i].a-sub > max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga+prof2[27]-sub > max){
-			max = f[i].a+b[i].ga+prof2[27]-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb+prof1[27] -sub> max){
-			max = f[i].a+b[i].gb+prof1[27]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a+prof2[-37]-sub > max){
-			max = f[i].ga+b[i].a+prof2[-37]-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb+prof1[29]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[29]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb+prof1[28]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[28]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a+prof1[-37]-sub > max){
-			max = f[i].gb+b[i].a+prof1[-37]-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	//i = hm->endb;
-	i = old_cor[3];
-	sub = abs(middle -i);
-	sub /= 1000; 
-	if(f[i].a+b[i].gb+prof1[27]-sub > max){
-		max = f[i].a+b[i].gb+prof1[27]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb+prof1[29]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[29]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb+prof1[28]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[28]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	
-	prof1-= (old_cor[4]+1)<<6;
-	//prof2 -= hm->endb << 6;
-	prof2 -= old_cor[3] << 6;
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	//if(transition == -1){
-	//	exit(0);
-	//}
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			//fprintf(stderr,"Using this for start:%ld	%ld	%ld\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = 0.0;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = 0.0;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-struct states* foward_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm)
-{
-	unsigned int freq[26];
-
-	struct states* s = hm->f;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-	
-	prof1 += (hm->starta) << 6;
-	prof2 +=  (hm->startb) << 6;
-	s[hm->startb].a = s[0].a;
-	s[hm->startb].ga = s[0].ga;
-	s[hm->startb].gb = s[0].gb;
-	if(hm->startb){
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=64;
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j-1].ga+prof2[28],s[j-1].a+prof2[27]);
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2+=64;
-	}else{
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=64;
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j-1].ga,s[j-1].a)+prof2[29];
-			s[j].gb = -FLOATINFTY;
-		}	
-		prof2+=64;	
-	}
-
-	prof2 -= (hm->endb-hm->startb) << 6;
-	
-	s[hm->endb].a = -FLOATINFTY;
-	s[hm->endb].ga = -FLOATINFTY;
-	s[hm->endb].gb = -FLOATINFTY;
-
-
-	for (i = hm->starta;i < hm->enda;i++){
-		prof1 += 64;
-		c = 1;
-		for (j = 0;j < 26; j++){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;
-			}
-		}
-		freq[0] = c;
-			
-		pa = s[hm->startb].a;
-		pga = s[hm->startb].ga;
-		pgb = s[hm->startb].gb;
-		s[hm->startb].a = -FLOATINFTY;
-		s[hm->startb].ga = -FLOATINFTY;
-
-		if(hm->startb){
-			s[hm->startb].gb = MAX(pgb+prof1[28],pa+prof1[27]);
-		}else{
-			s[hm->startb].gb = MAX(pgb,pa)+ prof1[29];
-		}
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2 += 64;
-			ca = s[j].a;
-			
-			pa = MAX3(pa,pga + prof2[-37],pgb + prof1[-37]);
-			
-			prof2 += 32;
-			for (c = 1;c < freq[0];c++){
-				pa += prof1[freq[c]]*prof2[freq[c]];
-			}
-			prof2 -= 32;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = MAX(s[j-1].ga+prof2[28],s[j-1].a+prof2[27]);
-				
-			pgb = s[j].gb;
-
-			s[j].gb = MAX(pgb+prof1[28] ,ca+prof1[27]);
-
-			pa = ca;
-		}
-		prof2 += 64;
-		ca = s[j].a;
-			
-		pa = MAX3(pa,pga + prof2[-37],pgb + prof1[-37]);
-
-		prof2 += 32;
-		for (c = 1;c < freq[0];c++){
-			pa += prof1[freq[c]]*prof2[freq[c]];
-		}
-		prof2 -= 32;
-
-		s[j].a = pa;
-
-		s[j].ga = -FLOATINFTY;
-
-		if (hm->endb != hm->len_b){
-			s[j].gb = MAX(s[j].gb+prof1[28] ,ca+prof1[27]);
-		}else{
-			s[j].gb = MAX(s[j].gb,ca)+ prof1[29];
-		}
-		prof2 -= (hm->endb-hm->startb) << 6;
-		
-	}
-	prof1 -=  (hm->enda) << 6;
-	return s;
-}
-
-struct states* backward_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm)
-{
-	unsigned int freq[26];
-	struct states* s = hm->b;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-
-	prof1 += (hm->enda+1) << 6;
-	prof2 += (hm->endb+1) << 6;
-	s[hm->endb].a = s[0].a;
-	s[hm->endb].ga = s[0].ga;
-	s[hm->endb].gb = s[0].gb;
-	if(hm->endb != hm->len_b){
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j+1].ga+prof2[28],s[j+1].a+prof2[27]);
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2 -= 64;
-	}else{
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j+1].ga,s[j+1].a)+prof2[29];
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2 -= 64;
-	}
-
-	s[hm->startb].a = -FLOATINFTY;
-	s[hm->startb].ga = -FLOATINFTY;
-	s[hm->startb].gb = -FLOATINFTY;
-	
-	i = hm->enda-hm->starta;
-	while(i--){
-		prof1 -= 64;
-
-		c = 1;
-		for (j = 0;j < 26; j++){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;
-			}
-		}
-		freq[0] = c;
-		
-		pa = s[hm->endb].a;
-		pga = s[hm->endb].ga;
-		pgb = s[hm->endb].gb;
-		s[hm->endb].a = -FLOATINFTY;
-		s[hm->endb].ga = -FLOATINFTY;
-		if(hm->endb != hm->len_b){
-			s[hm->endb].gb = MAX(pgb+prof1[28] ,pa+prof1[27]);
-		}else{
-			s[hm->endb].gb = MAX(pgb,pa)+prof1[29];
-		}
-
-		prof2 += (hm->endb-hm->startb) << 6;
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			ca = s[j].a;
-
-			pa = MAX3(pa,pga + prof2[91],pgb + prof1[91]);
-
-			prof2 += 32;
-			for (c = 1;c < freq[0];c++){
-				pa += prof1[freq[c]]*prof2[freq[c]];
-			}
-			prof2 -= 32;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-
-			s[j].ga = MAX(s[j+1].ga+prof2[28], s[j+1].a+prof2[27]);
-
-			pgb = s[j].gb;
-
-			s[j].gb = MAX(pgb+prof1[28], ca+prof1[27]);
-
-			pa = ca;
-		}
-		prof2 -= 64;
-		ca = s[j].a;
-
-		pa = MAX3(pa,pga + prof2[91],pgb + prof1[91]);
-		prof2 += 32;
-		for (c = 1;c < freq[0];c++){
-			pa += prof1[freq[c]]*prof2[freq[c]];
-		}
-		prof2 -= 32;
-		s[j].a = pa;
-		
-		//pga = s[j].ga;
-		s[j].ga = -FLOATINFTY;//MAX(s[j+1].ga+prof2[28], s[j+1].a+prof2[27]);
-
-		//pgb = s[j].gb;
-		if(hm->startb){
-			s[j].gb = MAX(s[j].gb+prof1[28], ca+prof1[27]);
-		}else{
-			s[j].gb = MAX(s[j].gb,ca)+prof1[29];
-		}
-
-		//pa = ca;
-	}		
-	return s;
-}
-
-
-int* mirror_hirsch_path(int* hirsch_path,int len_a,int len_b)
-{
-	int* np = 0;
-	
-	int i;
-	np =malloc(sizeof(int)*(len_a+2));
-	for(i =0; i < len_a+2;i++){
-		np[i] = -1;
-	}
-
-	for(i = 1; i <= len_b;i++){
-		if(hirsch_path[i] != -1){
-			np[hirsch_path[i]] = i;
-		}
-	}
-
-	free(hirsch_path);
-	return np;
-}
-
-int* add_gap_info_to_hirsch_path(int* hirsch_path,int len_a,int len_b)
-{
-	int i,j;
-	int a = 0;
-	int b = 0;
-
-	int* np = 0;
-	np =malloc(sizeof(int)*(len_a+len_b+2));
-	for(i =0; i < len_a+len_b+2;i++){
-		np[i] = 0;
-	}
-
-	j = 1;
-	b = -1;
-	if(hirsch_path[1] == -1){
-		np[j] = 2;
-		j++;
-	}else{
-		if(hirsch_path[1] != 1){
-			for ( a = 0;a < hirsch_path[1] -1;a++){
-				np[j] = 1;
-				j++;
-			}
-			np[j] = 0;
-			j++;
-		}else{
-			np[j] = 0;
-			j++;
-		}
-	}
-	b = hirsch_path[1];
-	
-	/*for ( i= 0;i <= len_a;i++){
-		fprintf(stderr,"%d,",hirsch_path[i]);
-	} 
-	fprintf(stderr,"\n");*/
-	
-	for(i = 2; i <= len_a;i++){
-	
-		if(hirsch_path[i] == -1){
-			np[j] = 2;
-			j++;
-		}else{
-			if(hirsch_path[i]-1 != b && b != -1){
-				for ( a = 0;a < hirsch_path[i] - b-1;a++){
-					np[j] = 1;
-					j++;
-				}
-				np[j] = 0;
-				j++;
-			}else{
-				np[j] = 0;
-				j++;
-			}
-		}
-		b = hirsch_path[i];
-	}
-	
-	
-	
-	
-	
-	if(hirsch_path[len_a] < len_b && hirsch_path[len_a] != -1){
-	//	fprintf(stderr,"WARNING:%d	%d\n",hirsch_path[len_a],len_b);
-		for ( a = 0;a < len_b - hirsch_path[len_a];a++){
-			np[j] = 1;
-			j++;
-		}
-	} 
-	np[0] = j-1;
-	np[j] = 3;
-	np = realloc(np,sizeof(int)* (np[0]+2));
-	//for ( i= 0;i <= np[0];i++){
-	//	fprintf(stderr,"%d,",np[i]);
-	//} 
-	//fprintf(stderr,"\n");
-
-	free(hirsch_path);
-
-	//add gap info..
-	i = 2;
-	while(np[i] != 3){
-		if ((np[i-1] &3) && !(np[i] & 3)){
-			if(np[i-1] & 8){
-				np[i-1] += 8;
-			}else{
-				np[i-1] |= 16;
-			}
-		}else if (!(np[i-1] & 3) &&(np[i] &3)){
-			np[i] |= 4;
-		}else if ((np[i-1] & 1) && (np[i] & 1)){
-			np[i] |= 8;
-		}else if ((np[i-1] & 2) && (np[i] & 2)){
-			np[i] |= 8;
-		}
-		i++;
-	}
-	//add terminal gap...
-	i = 1;
-	while(np[i] != 0){
-		np[i] |= 32;
-		i++;
-	}
-	j = i;
-	i = np[0];
-	while(np[i] != 0){
-		np[i] |= 32;
-		i--;
-	}
-	//for ( i= 0;i <= np[0];i++){
-	//	fprintf(stderr,"%d,",np[i]);
-	//} 
-	//fprintf(stderr,"\n");
-	return np;
-}
-
-/*
-int* foward_pp_dyn(int* path, struct dp_matrix *dp,const int* prof1,const int* prof2,const int len_a,const int len_b)
-{
-	unsigned int freq[26];
-	
-	struct states* s = 0;
-	char** trace = 0;
-	char* tracep = 0;
-	register int pa = 0;
-	register int pga = 0;
-	register int pgb = 0;
-	register int ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-
-	s = dp->s;
-	
-	trace = dp->tb;
-
-	trace[0][0] = 32;
-
-
-	s[0].a = 0;
-	s[0].ga = -INFTY;
-	s[0].gb = -INFTY;
-	//init of first row;
-	tracep = trace[0];
-
-	for (j = 1; j < len_b;j++){
-		s[j].a = -INFTY;
-		
-		s[j].ga = s[j-1].a+prof2[29];
-		if (s[j-1].ga+prof2[29] > s[j].ga){
-			s[j].ga = s[j-1].ga+prof2[29];
-		}
-		s[j].gb = -INFTY;
-		tracep[j] = 8;
-	}
-	
-	s[len_b].a = -INFTY;
-	s[len_b].ga = -INFTY;
-	s[len_b].gb = -INFTY;
-	
-	for ( i = 1;i <len_a;i++){
-		prof1 += 64;
-
-		c = 1;
-		for (j = 26; j--;){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;	
-			}
-		}
-		freq[0] = c;
-		
-		tracep = trace[i];
-		pa = s[0].a;
-		pga = s[0].ga;
-		pgb = s[0].gb;
-		s[0].a = -INFTY;
-		s[0].ga = -INFTY;
-		
-		s[0].gb = pa+prof1[29];
-		if(pgb+prof1[29] > s[0].gb){
-			s[0].gb = pgb+prof1[29];
-		}
-	
-		tracep[0] = 16;
-
-		for (j = 1; j < len_b;j++){
-			prof2 += 64;
-			ca = s[j].a;
-
-			c = 1;
-			if((pga += prof2[-37]) > pa){
-				pa = pga;
-				c = 2;
-			}
-			if((pgb += prof1[-37]) > pa){
-				pa = pgb;
-				c = 4;
-			}
-			
-			prof2 += 32;
-			for (pga = freq[0];--pga;){
-				pgb = freq[pga];
-				pa += prof1[pgb]*prof2[pgb];
-			}
-			prof2 -= 32;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j-1].a+prof2[27];
-			if (s[j-1].ga+prof2[28] > s[j].ga){
-				s[j].ga = s[j-1].ga+prof2[28];
-				c |= 8;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[27];
-			if(pgb+prof1[28] > s[j].gb){
-				s[j].gb = pgb+prof1[28];
-				c |= 16;
-			}
-			tracep[j] = c;
-			pa = ca;
-
-		}
-		
-	
-		prof2 += 64;
-		//LAST CELL (0)
-		ca = s[len_b].a;
-
-		c = 1;
-		if((pga+=prof2[-37]) > pa){
-			pa = pga;
-			c = 2;
-		}
-		if((pgb+=prof1[-37]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		prof2 += 32;
-		for (pga = freq[0];--pga;){
-			pgb = freq[pga];
-			pa += prof1[pgb]*prof2[pgb];
-		}
-		prof2 -= 32;
-		
-		s[len_b].a = pa;
-		
-		s[len_b].ga = -INFTY;
-		
-		pgb = s[len_b].gb;
-		s[len_b].gb = ca+prof1[27]+prof1[29];
- 		if(pgb+prof1[29] > s[len_b].gb){
-			s[len_b].gb = pgb+prof1[29];
-			c |= 16;
-		}
-		tracep[len_b] = c;	
-		prof2 -= len_b << 6;
-		
-	}
-	prof1 += 64;
-	
-	c = 1;
-	for (j = 26; j--;){
-		if(prof1[j]){
-			freq[c] = j;
-			c++;	
-		}
-	}
-	freq[0] = c;
-	
-	tracep = trace[len_a];
-
-	pa = s[0].a;
-	pga = s[0].ga;
-	pgb = s[0].gb;
-	s[0].a = -INFTY;
-	s[0].ga = -INFTY;
-
-	s[0].gb = pa+prof1[29];
-	if(pgb+prof1[29] > s[0].gb){
-		s[0].gb = pgb+prof1[29];
-	}
-	tracep[0] = 16;
-
-	for (j = 1;j< len_b;j++){	
-
-		prof2 += 64;
-		ca = s[j].a;
-
-		c = 1;
-
-		if((pga+=prof2[-37]) > pa){
-			pa = pga;
-			c = 2;
-		}
-
-		if((pgb+=prof1[-37]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		prof2+=32;
-		
-		for (pga = freq[0];--pga;){
-			pgb = freq[pga];
-			pa += prof1[pgb]*prof2[pgb];
-		}
-		prof2-=32;
-		
-		s[j].a = pa;
-		pga = s[j].ga;
-		s[j].ga = s[j-1].a+prof2[27]+prof2[29];
-		if (s[j-1].ga+prof2[29] > s[j].ga){
-			s[j].ga = s[j-1].ga+prof2[29];
-			c |= 8;
-		}	
-		pgb = s[j].gb;
-		s[j].gb = -INFTY;	
-		
-		tracep[j] = c;
-		pa = ca;
-	}
-	prof2 += 64;
-
-	ca = s[len_b].a;
-	
-	c = 1;
-	
-	if((pga+=prof2[-37]) > pa){
-		pa = pga;
-		c = 2;
-	}
-	if((pgb+=prof1[-37]) > pa){
-		pa = pgb;
-		c = 4;
-	}
-	prof2+=32;
-	for (pga = freq[0];--pga;){	
-		pgb = freq[pga];
-		pa += prof1[pgb]*prof2[pgb];
-	}
-	prof2-=32;
-	
-	s[len_b].a = pa;
-	
-	s[len_b].ga = s[len_b-1].a+prof2[27]+prof2[29];
-	if (s[len_b-1].ga+prof2[29] > s[len_b].ga){
-		s[len_b].ga = s[len_b-1].ga+prof2[29];
-		c |= 8;
-	}
-	
-	pgb = s[len_b].gb;
-	s[len_b].gb = ca+prof1[27]+prof1[29];
-	if(pgb +prof1[29]> s[len_b].gb){
-		s[len_b].gb = pgb+prof1[29];
-		c |= 16;
-	}	
-	tracep[len_b] = c;
-
-	pgb = s[len_b].gb;
-	c = 2;
-	if(s[len_b].ga > pgb){
-		pgb = s[len_b].ga;
-		c = 1;
-	}
-	if(s[len_b].a >= pgb){
-		pgb = s[len_b].a;
-		c = 0;
-	}
-	
-	ca = c;
-	
-	i = len_a;
-	j = len_b;
-	c = 1;
-	while(trace[i][j] < 32){
-	//	fprintf(stderr,"%d->%d	%d:%d	%d:%d\n",c,trace[i][j],i,j,len_a,len_b);
-		switch(ca){
-			case 0:
-				if (trace[i][j] & 2){
-					ca = 1;
-					if(i-1!= 0){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}else if (trace[i][j] & 4){
-					ca = 2;
-					if(j-1!= 0){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}
-
-				//path[c] = 0;
-				i--;
-				j--;
-			break;
-			case 1:
-				if(trace[i][j] & 8){
-					ca = 1;
-					if(i!=0 && i!= len_a){
-	//				/	fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					ca = 0;
-					if(i!=0 && i!= len_a){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-				}
-				path[c] |= 1;
-				j--;
-			break;
-			case  2:
-				if(trace[i][j] & 16){
-					ca = 2;
-					if(j !=0 && j != len_b){
-	//					fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					ca = 0;
-					if(j !=0 && j != len_b){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-					
-				}
-				path[c] |= 2;
-				i--;
-			break;
-		}
-		c++;
-	}
-	
-	
-	
-	path[0] = c-1;
-	path[c] = 3;
-	path[c+1] = pgb;
-	
-	j = path[0];
-	for(i =0 ;i < path[0]/2;i++){
-		c = path[i+1];
-		path[i+1] = path[j-i];
-		path[j -i] = c;
-	}
-	return path;
-}
-
-int* backward_pp_dyn(int* path, struct dp_matrix *dp,const int* prof1,const int* prof2,const int len_a,const int len_b)
-{
-	unsigned int freq[26];
-	
-	struct states* s = 0;
-	char** trace = 0;
-	char* tracep = 0;
-	register int pa = 0;
-	register int pga = 0;
-	register int pgb = 0;
-	register int ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-
-	prof1+= 64;
-	prof2 += 64;
-
-
-	s = dp->s;
-	
-	trace = dp->tb;
-
-	trace[len_a][len_b] = 32;
-
-	prof1 +=  len_a << 6;
-
-	s[len_b].a = 0;
-	s[len_b].ga = -INFTY;
-	s[len_b].gb = -INFTY;
-	//init of first row;
-	tracep = trace[len_a];
-	
-	j = len_b;
-	while(--j){
-		s[j].a = -INFTY;
-		
-		s[j].ga = s[j+1].a+prof2[29];
-		if (s[j+1].ga+prof2[29] > s[j].ga){
-			s[j].ga = s[j+1].ga+prof2[29];
-		}
-		s[j].gb = -INFTY;
-		tracep[j] = 8;
-	}
-	
-	s[0].a = -INFTY;
-	s[0].ga = -INFTY;
-	s[0].gb = -INFTY;
-	i = len_a;
-	while(--i){
-		prof1 -= 64;
-
-		c = 1;
-		for (j = 26; j--;){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;	
-			}
-		}
-		freq[0] = c;
-		
-		tracep = trace[i];
-		pa = s[len_b].a;
-		pga = s[len_b].ga;
-		pgb = s[len_b].gb;
-		s[len_b].a = -INFTY;
-		s[len_b].ga = -INFTY;
-		
-		s[len_b].gb = pa+prof1[29];
-		if(pgb+prof1[29] > s[len_b].gb){
-			s[len_b].gb = pgb+prof1[29];
-		}
-	
-		tracep[len_b] = 16;
-		
-		j = len_b;
-		prof2 += len_b << 6;
-		while(--j){
-			prof2 -= 64;
-			ca = s[j].a;
-
-			c = 1;
-			if((pga += prof2[91]) > pa){
-				pa = pga;
-				c = 2;
-			}
-			if((pgb += prof1[91]) > pa){
-				pa = pgb;
-				c = 4;
-			}
-			
-			prof2 += 32;
-			for (pga = freq[0];--pga;){
-				pgb = freq[pga];
-				pa += prof1[pgb]*prof2[pgb];
-			}
-			prof2 -= 32;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j+1].a+prof2[27];
-			if (s[j+1].ga+prof2[28] > s[j].ga){
-				s[j].ga = s[j+1].ga+prof2[28];
-				c |= 8;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[27];
-			if(pgb+prof1[28] > s[j].gb){
-				s[j].gb = pgb+prof1[28];
-				c |= 16;
-			}
-			tracep[j] = c;
-			pa = ca;
-
-		}
-	
-		prof2 -= 64;
-		//LAST CELL (0)
-		ca = s[0].a;
-
-		c = 1;
-		if((pga+=prof2[91]) > pa){
-			pa = pga;
-			c = 2;
-		}
-		if((pgb+=prof1[91]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		prof2 += 32;
-		for (pga = freq[0];--pga;){
-			pgb = freq[pga];
-			pa += prof1[pgb]*prof2[pgb];
-		}
-		prof2 -= 32;
-		
-		s[0].a = pa;
-		
-		s[0].ga = -INFTY;
-		
-		pgb = s[0].gb;
-		s[0].gb = ca+prof1[27]+prof1[29];
- 		if(pgb+prof1[29] > s[0].gb){
-			s[0].gb = pgb+prof1[29];
-			c |= 16;
-		}
-		tracep[0] = c;	
-		
-	}
-	prof1 -= 64;
-	
-	c = 1;
-	for (j = 26; j--;){
-		if(prof1[j]){
-			freq[c] = j;
-			c++;	
-		}
-	}
-	freq[0] = c;
-	
-	tracep = trace[0];
-	j = len_b;
-	prof2 += len_b << 6;
-	pa = s[j].a;
-	pga = s[j].ga;
-	pgb = s[j].gb;
-	s[j].a = -INFTY;
-	s[j].ga = -INFTY;
-
-	s[len_b].gb = pa+prof1[29];
-	if(pgb+prof1[29] > s[len_b].gb){
-		s[len_b].gb = pgb+prof1[29];
-	}
-
-
-	
-	while(--j){
-		prof2 -= 64;
-		ca = s[j].a;
-
-		c = 1;
-
-		if((pga+=prof2[91]) > pa){
-			pa = pga;
-			c = 2;
-		}
-
-		if((pgb+=prof1[91]) > pa){
-			pa = pgb;
-			c = 4;
-		}
-		
-		prof2+=32;
-		
-		for (pga = freq[0];--pga;){
-			pgb = freq[pga];
-			pa += prof1[pgb]*prof2[pgb];
-		}
-		prof2-=32;
-		
-		s[j].a = pa;
-		pga = s[j].ga;
-		s[j].ga = s[j+1].a+prof2[27]+prof2[29];
-		if (s[j+1].ga+prof2[29] > s[j].ga){
-			s[j].ga = s[j+1].ga+prof2[29];
-			c |= 8;
-		}	
-		pgb = s[j].gb;
-		s[j].gb = -INFTY;	
-		
-		tracep[j] = c;
-		pa = ca;
-	}
-	prof2 -= 64;
-
-	ca = s[0].a;
-	
-	c = 1;
-	
-	if((pga+=prof2[91]) > pa){
-		pa = pga;
-		c = 2;
-	}
-	if((pgb+=prof1[91]) > pa){
-		pa = pgb;
-		c = 4;
-	}
-	prof2+=32;
-	for (pga = freq[0];--pga;){	
-		pgb = freq[pga];
-		pa += prof1[pgb]*prof2[pgb];
-	}
-	prof2-=32;
-	
-	s[0].a = pa;
-	
-	s[0].ga = s[1].a+prof2[27]+prof2[29];
-	if (s[1].ga+prof2[29] > s[0].ga){
-		s[0].ga = s[1].ga+prof2[29];
-		c |= 8;
-	}
-	
-	pgb = s[0].gb;
-	s[0].gb = ca+prof1[27]+prof1[29];
-	if(pgb +prof1[29]> s[0].gb){
-		s[0].gb = pgb+prof1[29];
-		c |= 16;
-	}	
-	tracep[0] = c;
-
-	pgb = s[0].gb;
-	c = 2;
-	if(s[0].ga > pgb){
-		pgb = s[0].ga;
-		c = 1;
-	}
-	if(s[0].a >= pgb){
-		pgb = s[0].a;
-		c = 0;
-	}
-	
-	//fprintf(stderr,"SCORE:%d\n",ca);
-	ca = c;
-	
-	i = 0;
-	j = 0;
-	c = 1;
-	while(trace[i][j] < 32){
-	//	fprintf(stderr,"%d->%d	%d:%d	%d:%d\n",c,trace[i][j],i,j,len_a,len_b);
-		switch(ca){
-			case 0:
-				if (trace[i][j] & 2){
-					ca = 1;
-					if(i+1!= len_a){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}else if (trace[i][j] & 4){
-					ca = 2;
-					if(j+1!= len_b){
-						path[c+1] |= 16;
-	//					fprintf(stderr,"GAP_CLOSE\n");
-					}else{
-						path[c+1] |= 32+16;
-					}
-				}
-
-				//path[c] = 0;
-				i++;
-				j++;
-			break;
-			case 1:
-				if(trace[i][j] & 8){
-					ca = 1;
-					if(i!=0 && i!= len_a){
-	//				/	fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					ca = 0;
-					if(i!=0 && i!= len_a){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-				}
-				path[c] |= 1;
-				j++;
-			break;
-			case  2:
-				if(trace[i][j] & 16){
-					ca = 2;
-					if(j !=0 && j != len_b){
-	//					fprintf(stderr,"GAP_EXT\n");
-						if(!(path[c]&16)){
-							path[c] |= 8;
-						}
-					}else{
-						if(!(path[c]&16)){
-							path[c] |= 32+8;
-						}
-					}
-				}else{
-					ca = 0;
-					if(j!=0 && j != len_b){
-	//					fprintf(stderr,"GAP_OPEN\n");
-						path[c] |= 4;
-					}else{
-						path[c] |= 32+4;
-					}
-					
-				}
-				path[c] |= 2;
-				i++;
-			break;
-		}
-		c++;
-	}
-	path[0] = c-1;
-	path[c] = 3;
-	path[c+1] = pgb;
-	
-	
-	return path;
-}
-
-*/

Deleted: trunk/packages/kalign/trunk/kalign2_hirschberg.h
===================================================================
--- trunk/packages/kalign/trunk/kalign2_hirschberg.h	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_hirschberg.h	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,44 +0,0 @@
-/*
-	kalign2_hirschberg.h
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-int* hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm, int* hirsch_path);
-struct states* foward_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm);
-struct states* backward_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm);
-int* hirsch_align_two_pp_vector(const float* prof1,const float* prof2,struct hirsch_mem* hm,int* hirsch_path,float input_states[],int old_cor[]);
-
-struct states* backward_hirsch_pp_dynm(const float* prof1,const float* prof2,struct hirsch_mem* hm);
-
-struct states* backward_hirsch_pp_dyn0(const float* prof1,const float* prof2,struct hirsch_mem* hm);
-
-int* hirsch_ps_dyn(const float* prof1,const int* seq2,struct hirsch_mem* hm, int* hirsch_path,int sip);
-struct states* foward_hirsch_ps_dyn(const float* prof1,const int* seq2,struct hirsch_mem* hm,int sip);
-struct states* backward_hirsch_ps_dyn(const float* prof1,const int* seq2,struct hirsch_mem* hm,int sip);
-int* hirsch_align_two_ps_vector(const float* prof1,const int* seq2,struct hirsch_mem* hm,int* hirsch_path,float input_states[],int old_cor[],int sip);
-
-
-int* hirsch_ss_dyn(float**subm, const int* seq1,const int* seq2,struct hirsch_mem* hm, int* hirsch_path);
-struct states* foward_hirsch_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_mem* hm);
-struct states* backward_hirsch_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_mem* hm);
-int* hirsch_align_two_ss_vector(float**subm,const int* seq1,const int* seq2,struct hirsch_mem* hm,int* hirsch_path,float input_states[],int old_cor[]);

Deleted: trunk/packages/kalign/trunk/kalign2_hirschberg_dna.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_hirschberg_dna.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_hirschberg_dna.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,1881 +0,0 @@
-/*
-	kalign2_hirschberg_dna.c
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-
-#include "kalign2.h"
-#include "kalign2_hirschberg_dna.h"
-#define MAX(a, b) (a > b ? a : b)
-#define MAX3(a,b,c) MAX(MAX(a,b),c)
-
-
-int** dna_alignment(struct alignment* aln,int* tree,float**submatrix, int** map)
-{
-	struct hirsch_mem* hm = 0;
-	int i,j,g,a,b,c;
-	int len_a;
-	int len_b;
-	float** profile = 0;
-
-	profile = malloc(sizeof(float*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		profile[i] = 0;
-	}
-
-	map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		map[i] = 0;
-	}
-	
-	hm = hirsch_mem_alloc(hm,1024);
-	fprintf(stderr,"\nAlignment:\n");
-	for (i = 0; i < (numseq-1);i++){
-		a = tree[i*3];
-		b = tree[i*3+1];
-		c = tree[i*3+2];
-		fprintf(stderr,"\r%8.0f percent done",(float)(i) /(float)numseq * 100);
-		//fprintf(stderr,"Aligning:%d %d->%d	done:%0.2f\n",a,b,c,((float)(i+1)/(float)numseq)*100);
-		len_a = aln->sl[a];
-		len_b = aln->sl[b];
-
-		
-		g = (len_a > len_b)? len_a:len_b;
-		map[c] = malloc(sizeof(int) * (g+2));
-		if(g > hm->size){
-			hm = hirsch_mem_realloc(hm,g);
-		}
-
-		for (j = 0; j < (g+2);j++){
-			map[c][j] = -1;
-		}
-
-		if (a < numseq){
-			profile[a] = dna_make_profile(profile[a],aln->s[a],len_a,submatrix);
-		}
-		if (b < numseq){
-			profile[b] = dna_make_profile(profile[b],aln->s[b],len_b,submatrix);
-		}
-		
-	
-		dna_set_gap_penalties(profile[a],len_a,aln->nsip[b]);
-		dna_set_gap_penalties(profile[b],len_b,aln->nsip[a]);
-
-		hm->starta = 0;
-		hm->startb = 0;
-		hm->enda = len_a;
-		hm->endb = len_b;
-		hm->len_a = len_a;
-		hm->len_b = len_b;
-		
-		hm->f[0].a = 0.0;
-		hm->f[0].ga =  -FLOATINFTY;
-		hm->f[0].gb = -FLOATINFTY;
-		hm->b[0].a = 0.0;
-		hm->b[0].ga =  -FLOATINFTY;
-		hm->b[0].gb =  -FLOATINFTY;
-	//	fprintf(stderr,"LENA:%d	LENB:%d	numseq:%d\n",len_a,len_b,numseq);
-		if(a < numseq){
-			if(b < numseq){
-				map[c] = hirsch_dna_ss_dyn(submatrix,aln->s[a],aln->s[b],hm,map[c]);
-			}else{
-				hm->enda = len_b;
-				hm->endb = len_a;
-				hm->len_a = len_b;
-				hm->len_b = len_a;
-				map[c] = hirsch_dna_ps_dyn(profile[b],aln->s[a],hm,map[c],aln->nsip[b]);
-				map[c] = mirror_hirsch_path(map[c],len_a,len_b);
-			}
-		}else{
-			if(b < numseq){
-				map[c] = hirsch_dna_ps_dyn(profile[a],aln->s[b],hm,map[c],aln->nsip[a]);
-			}else{
-				if(len_a < len_b){
-					map[c] = hirsch_dna_pp_dyn(profile[a],profile[b],hm,map[c]);
-				}else{
-					hm->enda = len_b;
-					hm->endb = len_a;
-					hm->len_a = len_b;
-					hm->len_b = len_a;
-					map[c] = hirsch_dna_pp_dyn(profile[b],profile[a],hm,map[c]);
-					map[c] = mirror_hirsch_path(map[c],len_a,len_b);
-				}
-			}
-		}
-
-		
-		map[c] = add_gap_info_to_hirsch_path(map[c],len_a,len_b);
-
-		if(i != numseq-2){
-			profile[c] = malloc(sizeof(float)*22*(map[c][0]+2));
-			profile[c] = dna_update(profile[a],profile[b],profile[c],map[c],aln->nsip[a],aln->nsip[b]);
-		}
-			
-		aln->sl[c] = map[c][0];
-	
-		aln->nsip[c] = aln->nsip[a] + aln->nsip[b];
-		aln->sip[c] = malloc(sizeof(int)*(aln->nsip[a] + aln->nsip[b]));
-		g =0;
-		for (j = aln->nsip[a];j--;){
-			aln->sip[c][g] = aln->sip[a][j];
-			g++;
-		}
-		for (j = aln->nsip[b];j--;){
-			aln->sip[c][g] = aln->sip[b][j];
-			g++;
-		}
-
-		free(profile[a]);
-		free(profile[b]);
-	}
-	
-	fprintf(stderr,"\r%8.0f percent done\n",100.0);
-	//free(profile[numprofiles-1]);
-	free(profile);
-	hirsch_mem_free(hm);
-	for (i = 32;i--;){
-		free(submatrix[i]);
-	}
-	free(submatrix);
-	return map;
-}
-
-
-int* hirsch_dna_ss_dyn(float**subm, const int* seq1,const int* seq2,struct hirsch_mem* hm, int* hirsch_path)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	float input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-
-	hm->enda = mid;
-
-	//fprintf(stderr,"Forward:%d-%d	%d-%d\n",hm->starta,hm->enda,hm->startb,hm->endb);
-	hm->f = foward_hirsch_dna_ss_dyn(subm,seq1,seq2,hm);
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	//fprintf(stderr,"Backward:%d-%d	%d-%d\n",hm->starta,hm->enda,hm->startb,hm->endb);
-	hm->b = backward_hirsch_dna_ss_dyn(subm,seq1,seq2,hm);
-
-
-	hirsch_path = hirsch_align_two_dna_ss_vector(subm,seq1,seq2,hm,hirsch_path,input_states,old_cor);
-	return hirsch_path;
-}
-
-int* hirsch_align_two_dna_ss_vector(float**subm,const int* seq1,const int* seq2,struct hirsch_mem* hm,int* hirsch_path,float input_states[],int old_cor[])
-{
-	struct states* f = hm->f;
- 	struct states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -INFTY;
-	float max = -INFTY;	
-	float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float sub = 0.0;
-	
-	i = hm->startb;
-	c = -1;
-	for(i = hm->startb; i < hm->endb;i++){
-		sub = abs(middle -i);
-		sub /= 1000; 
-	//	fprintf(stderr,"%d-%d	%f\n",hm->startb,hm->endb,sub);
-		if(f[i].a+b[i].a-sub > max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga-gpo-sub > max){
-			max = f[i].a+b[i].ga-gpo-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb -gpo-sub > max){
-			max = f[i].a+b[i].gb - gpo-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a - gpo-sub > max){
-			max = f[i].ga+b[i].a - gpo-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb - tgpe-sub > max){
-				max = f[i].gb+b[i].gb -tgpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb - gpe -sub> max){
-				max = f[i].gb+b[i].gb - gpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a - gpo-sub > max){
-			max = f[i].gb+b[i].a - gpo-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	i = hm->endb;
-	sub = abs(middle -i);
-	sub /= 1000; 
-	
-	if(f[i].a+b[i].gb-gpo-sub > max){
-		max = f[i].a+b[i].gb - gpo-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb -tgpe-sub > max){
-			max = f[i].gb+b[i].gb - tgpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb - gpe-sub > max){
-			max = f[i].gb+b[i].gb - tgpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-	//		fprintf(stderr,"Using this for start:%d	%d	%d\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = 0.0;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_dna_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = 0.0;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_dna_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_dna_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_dna_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-
-
-struct states* foward_hirsch_dna_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_mem* hm)
-{
-	struct states* s = hm->f;
-	float *subp = 0;
-	const int starta = hm->starta;
-	const int enda = hm->enda;
-	const int startb = hm->startb;
-	const int endb = hm->endb;
-	
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-
-	s[startb].a = s[0].a;
-	s[startb].ga = s[0].ga;
-	s[startb].gb = s[0].gb;
-	if(startb == 0){
-		for (j = startb+1; j < endb;j++){
-
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j-1].ga,s[j-1].a)-tgpe;
-			
-			s[j].gb = -FLOATINFTY;
-		}		
-	}else{
-
-		for (j = startb+1; j < endb;j++){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j-1].ga - gpe,s[j-1].a-gpo);
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-	s[endb].a = -FLOATINFTY;
-	s[endb].ga = -FLOATINFTY;
-	s[endb].gb = -FLOATINFTY;
-	seq2--;
-
-	for (i = starta;i < enda;i++){
-		subp = subm[seq1[i]];
-
-		pa = s[startb].a;
-		pga = s[startb].ga;
-		pgb = s[startb].gb;
-		s[startb].a = -FLOATINFTY;
-		s[startb].ga = -FLOATINFTY;
-		if(startb == 0){
-			s[startb].gb = MAX(pgb,pa) - tgpe;
-		}else{
-			s[startb].gb = MAX(pgb - gpe,pa - gpo);
-		}
-		for (j = startb+1; j < endb;j++){
-			ca = s[j].a;
-			pa = MAX3(pa,pga-gpo,pgb-gpo);	
-			pa += subp[seq2[j]];
-			
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = MAX(s[j-1].ga-gpe,s[j-1].a-gpo);
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = MAX(pgb-gpe ,ca-gpo);
-			
-			pa = ca;
-		}
-		ca = s[j].a;
-		pa = MAX3(pa,pga-gpo,pgb-gpo);
-		pa += subp[seq2[j]];
-			
-		s[j].a = pa;
-			
-		s[j].ga = -FLOATINFTY;//MAX(s[j-1].ga-gpe,s[j-1].a-gpo);
-		if (endb != hm->len_b){
-			s[j].gb = MAX(s[j].gb-gpe ,ca-gpo);
-		}else{
-			s[j].gb = MAX(s[j].gb,ca)-tgpe;
-		}
-	}
-	return s;
-}
-
-struct states* backward_hirsch_dna_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_mem* hm)
-{
-
-	struct states* s = hm->b;
-	float *subp = 0;
-	const int starta = hm->starta;
-	const int enda = hm->enda;
-	const int startb = hm->startb;
-	const int endb = hm->endb;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-
-	s[endb].a = s[0].a ;
-	s[endb].ga = s[0].ga;
-	s[endb].gb = s[0].gb;
-	
-	
-	//init of first row;
-	
-	//j = endb-startb;
-	if(endb == hm->len_b){
-		for(j = endb-1;j > startb;j--){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j+1].ga,s[j+1].a)-tgpe;
-			s[j].gb = -FLOATINFTY;
-		}
-	}else{
-		for(j = endb-1;j > startb;j--){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j+1].ga-gpe,s[j+1].a-gpo);	
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-
-	
-	s[startb].a = -FLOATINFTY;
-	s[startb].ga = -FLOATINFTY;
-	s[startb].gb = -FLOATINFTY;
-
-	i = enda-starta;
-	seq1+= starta;
-	while(i--){
-		subp = subm[seq1[i]];
-		pa = s[endb].a;
-		pga = s[endb].ga;
-		pgb = s[endb].gb;
-		s[endb].a = -FLOATINFTY;
-		s[endb].ga = -FLOATINFTY;
-
-		if(endb == hm->len_b){
-			s[endb].gb = MAX(pgb,pa)-tgpe;
-		}else{
-			s[endb].gb = MAX(pgb-gpe,pa-gpo);
-		}
-
-		for(j = endb-1;j > startb;j--){
-
-			ca = s[j].a;
-			pa = MAX3(pa,pga - gpo,pgb-gpo);
-			
-			pa += subp[seq2[j]];
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = MAX(s[j+1].ga-gpe,s[j+1].a-gpo);
-			
-			pgb = s[j].gb;
-
-			s[j].gb = MAX(pgb-gpe,ca-gpo);
-			
-			pa = ca;
-		}
-		ca = s[j].a;
-
-		pa = MAX3(pa,pga - gpo,pgb-gpo);
-			
-		pa += subp[seq2[j]];
-
-		s[j].a = pa;
-		
-		s[j].ga = -FLOATINFTY;//MAX(s[j+1].ga-gpe,s[j+1].a-gpo);
-		
-		if(startb){
-			s[j].gb = MAX(s[j].gb-gpe,ca-gpo);
-		}else{
-			s[j].gb = MAX(s[j].gb,ca)-tgpe;
-		}
-	}		
-	return s;
-}
-
-
-int* hirsch_dna_ps_dyn(const float* prof1,const int* seq2,struct hirsch_mem* hm, int* hirsch_path,int sip)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	float input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-	hm->enda = mid;
-	hm->f = foward_hirsch_dna_ps_dyn(prof1,seq2,hm,sip);
-	
-	/*int i;
-	fprintf(stderr,"FOWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->f[i].a,hm->f[i].ga,hm->f[i].gb);
-	}*/
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	hm->b = backward_hirsch_dna_ps_dyn(prof1,seq2,hm,sip);
-	
-	/*fprintf(stderr,"BaCKWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->b[i].a,hm->b[i].ga,hm->b[i].gb);
-	}*/
-
-	hirsch_path = hirsch_align_two_dna_ps_vector(prof1,seq2,hm,hirsch_path,input_states,old_cor,sip);
-	return hirsch_path;
-}
-
-
-
-int* hirsch_align_two_dna_ps_vector(const float* prof1,const int* seq2,struct hirsch_mem* hm,int* hirsch_path,float input_states[],int old_cor[],int sip)
-{
-	struct states* f = hm->f;
- 	struct states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	const int open = gpo * sip;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -INFTY;
-	float max = -INFTY;	
-	float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float sub = 0.0;
-	
-	
-	prof1+= (22 * (old_cor[4]+1));
-	
-	i = hm->startb;
-	c = -1;
-	for(i = hm->startb; i < hm->endb;i++){
-		sub = abs(middle -i);
-		sub /= 1000; 
-		if(f[i].a+b[i].a-sub> max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga-open-sub > max){
-			max = f[i].a+b[i].ga-open-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb+prof1[8]-sub > max){
-			max = f[i].a+b[i].gb+prof1[8]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a-open-sub > max){
-			max = f[i].ga+b[i].a-open-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb+prof1[10]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[10]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb+prof1[9]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[9]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a+prof1[8-22]-sub > max){
-			max = f[i].gb+b[i].a+prof1[8-22]-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	i = hm->endb;
-	sub = abs(middle -i);
-	sub /= 1000; 
-	if(f[i].a+b[i].gb+prof1[8]-sub > max){
-		max = f[i].a+b[i].gb+prof1[8]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb+prof1[10]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[10]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb+prof1[9]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[0]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	
-	prof1-= (22 * (old_cor[4]+1));
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-	//		fprintf(stderr,"Using this for start:%d	%d	%d\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = 0.0;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_dna_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = 0.0;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_dna_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ps_dyn(prof1,seq2,hm,hirsch_path,sip);			
-
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_dna_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_dna_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-struct states* foward_hirsch_dna_ps_dyn(const float* prof1,const int* seq2,struct hirsch_mem* hm,int sip)
-{
-	//unsigned int freq[26];
-	struct states* s = hm->f;
-	const int starta = hm->starta;
-	const int enda = hm->enda;
-	const int startb = hm->startb;
-	const int endb = hm->endb;
-	
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-	const float open = gpo * sip;
-	const float ext = gpe *sip;
-	const float text = tgpe * sip;
-	
-	
-	
-	prof1 += (starta) * 22;
-	s[startb].a = s[0].a;
-	s[startb].ga = s[0].ga;
-	s[startb].gb = s[0].gb;
-	if(startb == 0){
-		for (j = startb+1; j < endb;j++){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j-1].ga,s[j-1].a) - text;
-			s[j].gb = -FLOATINFTY;
-		}	
-	}else{
-		for (j = startb+1; j < endb;j++){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j-1].ga-ext,s[j-1].a-open);	
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-	
-	
-	s[endb].a = -FLOATINFTY;
-	s[endb].ga = -FLOATINFTY;
-	s[endb].gb = -FLOATINFTY;
-	seq2--;
-
-	for (i = starta;i < enda;i++){
-		prof1 += 22;
-		pa = s[startb].a;
-		pga = s[startb].ga;
-		pgb = s[startb].gb;
-		s[startb].a = -FLOATINFTY;
-		s[startb].ga = -FLOATINFTY;
-		if(startb == 0){
-			s[startb].gb = MAX(pgb,pa)+prof1[10];
-		}else{
-			s[startb].gb = MAX(pgb+prof1[9],pa+prof1[8]);
-		}
-		for (j = startb+1; j < endb;j++){
-			ca = s[j].a;
-			pa = MAX3(pa,pga -open,pgb + prof1[-14]);
-			pa += prof1[11 + seq2[j]];
-
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = MAX(s[j-1].ga-ext,s[j-1].a-open);
-			
-			pgb = s[j].gb;
-
-			s[j].gb = MAX(pgb+prof1[9],ca+prof1[8]);
-
-			pa = ca;
-		}	
-		ca = s[j].a;
-
-		pa = MAX3(pa,pga -open,pgb + prof1[-14]);
-			
-		pa += prof1[11 + seq2[j]];
-
-
-		s[j].a = pa;
-
-		s[j].ga = -FLOATINFTY;//MAX(s[j-1].ga-ext,s[j-1].a-open);
-				
-		if (hm->endb != hm->len_b){
-			s[j].gb = MAX(s[j].gb+prof1[9] ,ca+prof1[8]);
-		}else{
-			s[j].gb = MAX(s[j].gb,ca)+ prof1[10];
-		}
-	}
-	prof1 -= 22 * (enda);
-	return s;
-}
-
-struct states* backward_hirsch_dna_ps_dyn(const float* prof1,const int* seq2,struct hirsch_mem* hm,int sip)
-{
-	//unsigned int freq[26];
-	struct states* s = hm->b;
-	const int starta = hm->starta;
-	const int enda = hm->enda;
-	const int startb = hm->startb;
-	const int endb = hm->endb;
-	
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-	const float open = gpo * sip;
-	const float ext = gpe *sip;
-	const float text = tgpe * sip;
-	
-
-	prof1 += (enda+1) * 22;
-
-	s[endb].a = s[0].a;
-	s[endb].ga = s[0].ga;
-	s[endb].gb = s[0].gb;
-	
-	
-	//init of first row;
-	//j = endb-startb;
-	if(endb == hm->len_b){
-		for(j = endb-1;j > startb;j--){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j+1].ga,s[j+1].a)-text;	
-			s[j].gb = -FLOATINFTY;
-		}
-	}else{
-		for(j = endb-1;j > startb;j--){
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j+1].ga-ext,s[j+1].a-open);
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-	
-	s[startb].a = -FLOATINFTY;
-	s[startb].ga = -FLOATINFTY;
-	s[startb].gb = -FLOATINFTY;
-
-	i = enda-starta;
-	while(i--){
-		prof1 -= 22;
-
-		pa = s[endb].a;
-		pga = s[endb].ga;
-		pgb = s[endb].gb;
-		s[endb].a = -FLOATINFTY;
-		s[endb].ga = -FLOATINFTY;
-
-		if(endb == hm->len_b){
-			s[endb].gb = MAX(pgb,pa) +prof1[10];
-		}else{
-			s[endb].gb = MAX(pgb+prof1[9],pa+prof1[8]);
-		}
-
-		for(j = endb-1;j > startb;j--){
-			ca = s[j].a;
-			pa = MAX3(pa,pga - open,pgb +prof1[30]);
-			pa += prof1[11 + seq2[j]];
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = MAX(s[j+1].ga-ext,s[j+1].a-open);
-
-			pgb = s[j].gb;
-
-			s[j].gb = MAX(pgb+prof1[9],ca+prof1[8]);
-			
-			pa = ca;
-		}
-		ca = s[j].a;
-
-		pa = MAX3(pa,pga - open,pgb +prof1[30]);
-		pa += prof1[11 + seq2[j]];
-
-		s[j].a = pa;
-			
-
-		s[j].ga = -FLOATINFTY;//MAX(s[j+1].ga-ext,s[j+1].a-open);
-		if(hm->startb){
-			s[j].gb = MAX(s[j].gb+prof1[9], ca+prof1[8]);
-		}else{
-			s[j].gb = MAX(s[j].gb,ca)+prof1[10];
-		}
-	}		
-	return s;
-}
-
-
-
-
-int* hirsch_dna_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm, int* hirsch_path)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	float input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-	
-	//fprintf(stderr,"starta:%d enda:%d startb:%d endb:%d mid:%d\n",hm->starta,hm->enda,hm->startb,hm->endb,mid);
-	
-	
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-	hm->enda = mid;
-	hm->f = foward_hirsch_dna_pp_dyn(prof1,prof2,hm);
-	/*int i;
-	fprintf(stderr,"FOWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->f[i].a,hm->f[i].ga,hm->f[i].gb);
-	}*/
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	hm->b = backward_hirsch_dna_pp_dyn(prof1,prof2,hm);
-	/*fprintf(stderr,"BaCKWARD\n");
-
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->b[i].a,hm->b[i].ga,hm->b[i].gb);
-	}*/
-
-	hirsch_path = hirsch_align_two_dna_pp_vector(prof1,prof2,hm,hirsch_path,input_states,old_cor);
-	return hirsch_path;
-}
-
-
-
-int* hirsch_align_two_dna_pp_vector(const float* prof1,const float* prof2,struct hirsch_mem* hm,int* hirsch_path, float input_states[],int old_cor[])
-{
-	struct states* f = hm->f;
- 	struct states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -INFTY;
-	float max = -INFTY;	
-	float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float sub = 0.0;
-	
-	
-	prof1+= (22 * (old_cor[4]+1));
-	prof2 += (22 * (hm->startb));
-	
-	i = hm->startb;
-	c = -1;
-	for(i = hm->startb; i < hm->endb;i++){
-		sub = abs(middle -i);
-		sub /= 1000; 
-		prof2 += 22;
-		if(f[i].a+b[i].a-sub > max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga+prof2[8]-sub > max){
-			max = f[i].a+b[i].ga+prof2[8]-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb+prof1[8]-sub > max){
-			max = f[i].a+b[i].gb+prof1[8]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a+prof2[-14]-sub > max){
-			max = f[i].ga+b[i].a+prof2[-14]-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb+prof1[10]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[10]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb+prof1[9]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[9]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a+prof1[-14]-sub > max){
-			max = f[i].gb+b[i].a+prof1[-14]-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	i = hm->endb;
-	sub = abs(middle -i);
-	sub /= 1000; 
-	if(f[i].a+b[i].gb+prof1[8]-sub > max){
-		max = f[i].a+b[i].gb+prof1[8]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb+prof1[10]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[10]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb+prof1[9]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[9]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	
-	prof1-= (22 * (old_cor[4]+1));
-	prof2 -= (hm->endb *22);
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-	//		fprintf(stderr,"Using this for start:%d	%d	%d\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = 0.0;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0.0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_dna_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = 0.0;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_dna_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0.0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_dna_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0.0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_dna_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0.0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_dna_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-struct states* foward_hirsch_dna_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm)
-{
-	struct states* s = hm->f;
-
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-	
-	
-	prof1 += (hm->starta) * 22;
-	prof2 +=  (hm->startb) * 22;
-	s[hm->startb].a = s[0].a;
-	s[hm->startb].ga = s[0].ga;
-	s[hm->startb].gb = s[0].gb;
-	if(hm->startb == 0){
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=22;
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j-1].ga,s[j-1].a)+prof2[10];
-			s[j].gb = -FLOATINFTY;
-		}	
-		prof2 += 22;	
-	}else{
-
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=22;
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j-1].ga+prof2[9],s[j-1].a+prof2[8]);
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2 += 22;
-	}
-	
-	prof2 -= (hm->endb-hm->startb) * 22;
-	
-	s[hm->endb].a = -FLOATINFTY;
-	s[hm->endb].ga = -FLOATINFTY;
-	s[hm->endb].gb = -FLOATINFTY;
-
-
-	for (i = hm->starta;i < hm->enda;i++){
-		prof1 += 22;
-
-		pa = s[hm->startb].a;
-		pga = s[hm->startb].ga;
-		pgb = s[hm->startb].gb;
-		s[hm->startb].a = -FLOATINFTY;
-		s[hm->startb].ga = -FLOATINFTY;
-		if(hm->startb == 0){
-			s[hm->startb].gb = MAX(pgb,pa)+ prof1[10];
-		}else{
-			s[hm->startb].gb = MAX(pgb+prof1[9],pa+prof1[8]);
-		}
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2 += 22;
-			ca = s[j].a;
-			pa = MAX3(pa,pga + prof2[-14],pgb + prof1[-14]);
-
-			prof2 += 11;
-
-			pa += prof1[0]*prof2[0];
-			pa += prof1[1]*prof2[1];
-			pa += prof1[2]*prof2[2];
-			pa += prof1[3]*prof2[3];
-			pa += prof1[4]*prof2[4];
-			pa += prof1[5]*prof2[5];
-			pa += prof1[6]*prof2[6];
-			pa += prof1[7]*prof2[7];
-			
-			
-			prof2 -= 11;	
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = MAX(s[j-1].ga+prof2[9],s[j-1].a+prof2[8]);
-			
-			pgb = s[j].gb;
-
-			s[j].gb = MAX(pgb+prof1[9] ,ca+prof1[8]);
-
-			pa = ca;
-		}
-		prof2 += 22;
-		ca = s[j].a;
-			
-		pa = MAX3(pa,pga + prof2[-14],pgb + prof1[-14]);
-		prof2 += 11;
-
-		pa += prof1[0]*prof2[0];
-		pa += prof1[1]*prof2[1];
-		pa += prof1[2]*prof2[2];
-		pa += prof1[3]*prof2[3];
-		pa += prof1[4]*prof2[4];
-		pa += prof1[5]*prof2[5];
-		pa += prof1[6]*prof2[6];
-		pa += prof1[7]*prof2[7];
-		
-		prof2 -= 11;	
-
-		s[j].a = pa;
-
-		s[j].ga = -FLOATINFTY;
-
-		if (hm->endb != hm->len_b){
-			s[j].gb = MAX(s[j].gb+prof1[9] ,ca+prof1[8]);
-		}else{
-			s[j].gb = MAX(s[j].gb,ca)+ prof1[10];
-		}
-		
-		
-		prof2 -= (hm->endb-hm->startb) * 22;
-		
-	}
-	prof1 -= 22 * (hm->enda);
-	return s;
-}
-
-struct states* backward_hirsch_dna_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm)
-{
-	struct states* s = hm->b;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-
-	prof1 += (hm->enda+1) * 22;
-	prof2 += (hm->endb+1) * 22;
-	s[hm->endb].a = s[0].a;
-	s[hm->endb].ga = s[0].ga;
-	s[hm->endb].gb = s[0].gb;
-	
-	
-	//init of first row;
-	//j = endb-startb;
-	if(hm->endb == hm->len_b){
-		
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 22;
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j+1].ga,s[j+1].a)+prof2[10];
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2 -= 22;
-	}else{
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 22;
-			s[j].a = -FLOATINFTY;
-			s[j].ga = MAX(s[j+1].ga+prof2[9],s[j+1].a+prof2[8]);
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2 -= 22;
-	}
-	
-	s[hm->startb].a = -FLOATINFTY;
-	s[hm->startb].ga = -FLOATINFTY;
-	s[hm->startb].gb = -FLOATINFTY;
-
-	i = hm->enda-hm->starta;
-	while(i--){
-		prof1 -= 22;
-
-		pa = s[hm->endb].a;
-		pga = s[hm->endb].ga;
-		pgb = s[hm->endb].gb;
-		s[hm->endb].a = -FLOATINFTY;
-		s[hm->endb].ga = -FLOATINFTY;
-
-		if(hm->endb == hm->len_b){
-			s[hm->endb].gb = MAX(pgb,pa)+prof1[10];
-		}else{
-			s[hm->endb].gb = MAX(pgb+prof1[9] ,pa+prof1[8]);
-		}
-		//j = endb-startb;
-		prof2 += (hm->endb-hm->startb) *22;
-		//while(j--){
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 22;
-			ca = s[j].a;
-
-			pa = MAX3(pa,pga + prof2[30],pgb + prof1[30]);
-
-			prof2 += 11;
-			pa += prof1[0]*prof2[0];
-			pa += prof1[1]*prof2[1];
-			pa += prof1[2]*prof2[2];
-			pa += prof1[3]*prof2[3];
-			pa += prof1[4]*prof2[4];
-			pa += prof1[5]*prof2[5];
-			pa += prof1[6]*prof2[6];
-			pa += prof1[7]*prof2[7];
-			prof2 -= 11;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = MAX(s[j+1].ga+prof2[9], s[j+1].a+prof2[8]);
-			
-			pgb = s[j].gb;
-
-			s[j].gb = MAX(pgb+prof1[9], ca+prof1[8]);
-
-			pa = ca;
-		}
-		prof2 -= 22;
-		ca = s[j].a;
-
-		pa = MAX3(pa,pga + prof2[30],pgb + prof1[30]);
-		
-		prof2 += 11;
-		pa += prof1[0]*prof2[0];
-		pa += prof1[1]*prof2[1];
-		pa += prof1[2]*prof2[2];
-		pa += prof1[3]*prof2[3];
-		pa += prof1[4]*prof2[4];
-		pa += prof1[5]*prof2[5];
-		pa += prof1[6]*prof2[6];
-		pa += prof1[7]*prof2[7];
-		prof2 -= 11;
-
-		s[j].a = pa;
-		
-		//pga = s[j].ga;
-		s[j].ga = -FLOATINFTY;//MAX(s[j+1].ga+prof2[28], s[j+1].a+prof2[27]);
-
-		//pgb = s[j].gb;
-		if(hm->startb){
-			s[j].gb = MAX(s[j].gb+prof1[9], ca+prof1[8]);
-		}else{
-			s[j].gb = MAX(s[j].gb,ca)+prof1[10];
-		}
-	}		
-	return s;
-}

Deleted: trunk/packages/kalign/trunk/kalign2_hirschberg_dna.h
===================================================================
--- trunk/packages/kalign/trunk/kalign2_hirschberg_dna.h	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_hirschberg_dna.h	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,39 +0,0 @@
-/*
-	kalign2_hirschberg_dna.h
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-int* hirsch_dna_ss_dyn(float**subm, const int* seq1,const int* seq2,struct hirsch_mem* hm, int* hirsch_path);
-int* hirsch_align_two_dna_ss_vector(float**subm,const int* seq1,const int* seq2,struct hirsch_mem* hm,int* hirsch_path,float input_states[],int old_cor[]);
-struct states* foward_hirsch_dna_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_mem* hm);
-struct states* backward_hirsch_dna_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_mem* hm);
-
-int* hirsch_dna_ps_dyn(const float* prof1,const int* seq2,struct hirsch_mem* hm, int* hirsch_path,int sip);
-int* hirsch_align_two_dna_ps_vector(const float* prof1,const int* seq2,struct hirsch_mem* hm,int* hirsch_path,float input_states[],int old_cor[],int sip);
-struct states* foward_hirsch_dna_ps_dyn(const float* prof1,const int* seq2,struct hirsch_mem* hm,int sip);
-struct states* backward_hirsch_dna_ps_dyn(const float* prof1,const int* seq2,struct hirsch_mem* hm,int sip);
-
-int* hirsch_dna_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm, int* hirsch_path);
-int* hirsch_align_two_dna_pp_vector(const float* prof1,const float* prof2,struct hirsch_mem* hm,int* hirsch_path,float input_states[],int old_cor[]);
-struct states* foward_hirsch_dna_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm);
-struct states* backward_hirsch_dna_pp_dyn(const float* prof1,const float* prof2,struct hirsch_mem* hm);

Deleted: trunk/packages/kalign/trunk/kalign2_hirschberg_large.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_hirschberg_large.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_hirschberg_large.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,2508 +0,0 @@
-/*
-	kalign2_hirschberg_large.c
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-#include "kalign2_hirschberg_large.h"
-#define MAX(a, b) (a > b ? a : b)
-#define MAX3(a,b,c) MAX(MAX(a,b),c)
-//#include <emmintrin.h>
-
-float local_gpo;
-float local_gpe;
-float local_tgpe;
-
-int** hirschberg_large_alignment(struct alignment* aln,int* tree,float**submatrix, int** map,int window,float strength)
-{
-	struct hirsch_large_mem* hm = 0;
-	int i,j,g,a,b,c;
-	int len_a;
-	int len_b;
-	
-
-	
-	float** profile = 0;
-	
-	float** subm = 0;
-	subm = malloc(sizeof(float*)*32);
-	for(i = 0; i < 32;i++){
-		subm[i] = malloc(sizeof(float)*32);
-		for (j = 0; j < 32;j++){
-			subm[i][j] = (float)submatrix[i][j];
-		}
-	}
-	local_gpo = (float)gpo;
-	local_gpe = (float)gpe;
-	local_tgpe = (float)tgpe;
-	
-
-	profile = malloc(sizeof(float*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		profile[i] = 0;
-	}
-
-	map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		map[i] = 0;
-	}
-	
-	hm = hirsch_large_mem_alloc(hm,1024);
-
-	fprintf(stderr,"\nAlignment:\n");
-
-	for (i = 0; i < (numseq-1);i++){
-		a = tree[i*3];
-		b = tree[i*3+1];
-		c = tree[i*3+2];
-		fprintf(stderr,"\r%8.0f percent done",(float)(i) /(float)numseq * 100);
-		//fprintf(stderr,"Aligning:%d %d->%d	done:%f\n",a,b,c,((float)(i+1)/(float)numseq)*100);
-		len_a = aln->sl[a];
-		len_b = aln->sl[b];
-
-		
-		g = (len_a > len_b)? len_a:len_b;
-		map[c] = malloc(sizeof(int) * (g+2));
-		if(g > hm->size){
-			hm = hirsch_large_mem_realloc(hm,g);
-		}
-
-		for (j = 0; j < (g+2);j++){
-			map[c][j] = -1;
-		}
-
-		if (a < numseq){
-			profile[a] = make_large_profile(profile[a],aln->s[a],len_a,subm);
-		}else{
-			set_large_gap_penalties(profile[a],len_a,aln->nsip[b]);
-		}
-		if (b < numseq){
-			profile[b] = make_large_profile(profile[b],aln->s[b],len_b,subm);
-		}else{		
-			set_large_gap_penalties(profile[b],len_b,aln->nsip[a]);
-		}
-		
-		hm->starta = 0;
-		hm->startb = 0;
-		hm->enda = len_a;
-		hm->endb = len_b;
-		hm->len_a = len_a;
-		hm->len_b = len_b;
-		
-		hm->f[0].a = 0.0;
-		hm->f[0].ga =  -FLOATINFTY;
-		hm->f[0].gb = -FLOATINFTY;
-		hm->b[0].a = 0.0;
-		hm->b[0].ga =  -FLOATINFTY;
-		hm->b[0].gb =  -FLOATINFTY;
-	//	fprintf(stderr,"LENA:%d	LENB:%d	numseq:%d\n",len_a,len_b,numseq);
-		if(a < numseq){
-			if(b < numseq){
-				map[c] = hirsch_large_ss_dyn(subm,aln->s[a],aln->s[b],hm,map[c]);
-			}else{
-				hm->enda = len_b;
-				hm->endb = len_a;
-				hm->len_a = len_b;
-				hm->len_b = len_a;
-				map[c] = hirsch_large_ps_dyn(profile[b],aln->s[a],hm,map[c],aln->nsip[b]);
-				map[c] = mirror_hirsch_path(map[c],len_a,len_b);
-			}
-		}else{
-			if(b < numseq){
-				map[c] = hirsch_large_ps_dyn(profile[a],aln->s[b],hm,map[c],aln->nsip[a]);
-			}else{
-				if(len_a < len_b){
-					map[c] = hirsch_large_pp_dyn(profile[a],profile[b],hm,map[c]);
-				}else{
-					hm->enda = len_b;
-					hm->endb = len_a;
-					hm->len_a = len_b;
-					hm->len_b = len_a;
-					map[c] = hirsch_large_pp_dyn(profile[b],profile[a],hm,map[c]);
-					map[c] = mirror_hirsch_path(map[c],len_a,len_b);
-				}
-			}
-		}
-		
-		map[c] = add_gap_info_to_hirsch_path(map[c],len_a,len_b);
-
-		if(i != numseq-2){
-			profile[c] = malloc(sizeof(float)*64*(map[c][0]+2));
-			profile[c] = large_update(profile[a],profile[b],profile[c],map[c],aln->nsip[a],aln->nsip[b]);
-		}
-			
-		aln->sl[c] = map[c][0];
-	
-		aln->nsip[c] = aln->nsip[a] + aln->nsip[b];
-		aln->sip[c] = malloc(sizeof(int)*(aln->nsip[a] + aln->nsip[b]));
-		g =0;
-		for (j = aln->nsip[a];j--;){
-			aln->sip[c][g] = aln->sip[a][j];
-			g++;
-		}
-		for (j = aln->nsip[b];j--;){
-			aln->sip[c][g] = aln->sip[b][j];
-			g++;
-		}
-
-		free(profile[a]);
-		free(profile[b]);
-	}
-	fprintf(stderr,"\r%8.0f percent done\n",100.0);
-	free(profile);
-	hirsch_large_mem_free(hm);
-	for (i = 32;i--;){
-		free(subm[i]);
-		free(submatrix[i]);
-	}
-	free(subm);
-	free(submatrix);
-	return map;
-}
-
-
-int* hirsch_large_ss_dyn(float**subm, const int* seq1,const int* seq2,struct hirsch_large_mem* hm, int* hirsch_path)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	float input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-
-	hm->enda = mid;
-
-	//fprintf(stderr,"Forward:%d-%d	%d-%d\n",hm->starta,hm->enda,hm->startb,hm->endb);
-	hm->f = foward_large_hirsch_ss_dyn(subm,seq1,seq2,hm);
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	//fprintf(stderr,"Backward:%d-%d	%d-%d\n",hm->starta,hm->enda,hm->startb,hm->endb);
-	hm->b = backward_large_hirsch_ss_dyn(subm,seq1,seq2,hm);
-
-
-	hirsch_path = hirsch_large_align_two_ss_vector(subm,seq1,seq2,hm,hirsch_path,input_states,old_cor);
-	return hirsch_path;
-}
-
-int* hirsch_large_align_two_ss_vector(float**subm,const int* seq1,const int* seq2,struct hirsch_large_mem* hm,int* hirsch_path,float input_states[],int old_cor[])
-{
-	struct large_states* f = hm->f;
- 	struct large_states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -FLOATINFTY;
-	float max = -FLOATINFTY;	
-	//float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float middle =  (old_cor[3] - old_cor[2])/2 + old_cor[2];
-	float sub = 0.0;
-	
-	//i = hm->startb;
-	i = old_cor[2];
-	c = -1;
-	//for(i = hm->startb; i < hm->endb;i++){
-	for(i = old_cor[2]; i < old_cor[3];i++){
-	
-		sub = abs(middle -i);
-		sub /= 1000; 
-	//	fprintf(stderr,"%d-%d	%f\n",hm->startb,hm->endb,sub);
-		if(f[i].a+b[i].a-sub > max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga-local_gpo-sub > max){
-			max = f[i].a+b[i].ga-local_gpo-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb -local_gpo -sub > max){
-			max = f[i].a+b[i].gb - local_gpo-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a - local_gpo-sub > max){
-			max = f[i].ga+b[i].a - local_gpo-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(local_gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb - local_tgpe-sub > max){
-				max = f[i].gb+b[i].gb -local_tgpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb - local_gpe -sub> max){
-				max = f[i].gb+b[i].gb - local_gpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a - local_gpo-sub > max){
-			max = f[i].gb+b[i].a - local_gpo-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(local_gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	//i = hm->endb;
-	i = old_cor[3];
-	sub = abs(middle -i);
-	sub /= 1000; 
-	
-	if(f[i].a+b[i].gb-local_gpo-sub > max){
-		max = f[i].a+b[i].gb - local_gpo-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb -local_tgpe-sub > max){
-			max = f[i].gb+b[i].gb - local_tgpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb - gpe-sub > max){
-			max = f[i].gb+b[i].gb - gpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(local_gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-	//		fprintf(stderr,"Using this for start:%d	%d	%d\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = 0;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = 0;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-
-
-struct large_states* foward_large_hirsch_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_large_mem* hm)
-{
-	struct large_states* s = hm->f;
-	float *subp = 0;
-	const int starta = hm->starta;
-	const int enda = hm->enda;
-	const int startb = hm->startb;
-	const int endb = hm->endb;
-	
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-
-	s[startb].a = s[0].a;
-	s[startb].ga = s[0].ga;
-	s[startb].gb = s[0].gb;
-	if(startb == 0){
-		for (j = startb+1; j < endb;j++){
-
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j-1].a-local_tgpe;
-			//if (s[j-1].ga-local_tgpe > s[j].ga){
-			//	s[j].ga = s[j-1].ga-local_tgpe;
-			//}
-			//if(s[j-1].ga > s[j-1].a){
-			//	s[j].ga = s[j-1].ga-local_tgpe;
-			//}else{
-			//	s[j].ga = s[j-1].a-local_tgpe;
-			//}
-			s[j].ga = MAX(s[j-1].ga,s[j-1].a)-local_tgpe;
-			
-			s[j].gb = -FLOATINFTY;
-		}		
-	}else{
-
-		for (j = startb+1; j < endb;j++){
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j-1].a-local_gpo;
-			//if (s[j-1].ga - gpe > s[j].ga){
-			//	s[j].ga = s[j-1].ga-gpe;
-			//}
-			//if(s[j-1].ga - gpe >s[j-1].a-local_gpo){
-			//	s[j].ga = s[j-1].ga-gpe;
-			//}else{
-			//	s[j].ga = s[j-1].a-local_gpo;
-			//}
-			s[j].ga = MAX(s[j-1].ga - local_gpe,s[j-1].a-local_gpo);
-			
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-	s[endb].a = -FLOATINFTY;
-	s[endb].ga = -FLOATINFTY;
-	s[endb].gb = -FLOATINFTY;
-
-	seq2--;
-	for (i = starta;i < enda;i++){
-		subp = subm[seq1[i]];
-
-		pa = s[startb].a;
-		pga = s[startb].ga;
-		pgb = s[startb].gb;
-		if(startb == 0){
-			s[startb].a = -FLOATINFTY;
-			s[startb].ga = -FLOATINFTY;
-		
-			//s[startb].gb = pa-local_tgpe;
-			//if(pgb - local_tgpe > s[startb].gb){
-			//	s[startb].gb = pgb-local_tgpe;
-			//}
-			//if(pgb > pa){
-			//	s[startb].gb = pgb-local_tgpe;
-			//}else{
-			//	s[startb].gb = pa-local_tgpe;
-			//}
-			s[startb].gb = MAX(pgb,pa) - local_tgpe;
-		}else{
-			s[startb].a = -FLOATINFTY;
-			s[startb].ga = -FLOATINFTY;
-		
-			//s[startb].gb = pa-local_gpo;
-			//if(pgb -gpe > s[startb].gb){
-			//	s[startb].gb = pgb -gpe;
-			//}
-			//if(pgb - gpe > pa - local_gpo){
-			//	s[startb].gb = pgb - gpe;
-			//}else{
-			//	s[startb].gb = pa - local_gpo;
-			//}
-			s[startb].gb = MAX(pgb - local_gpe,pa - local_gpo);
-			
-		}
-		for (j = startb+1; j <= endb;j++){
-			ca = s[j].a;
-			//if((pga -= local_gpo) > pa){
-			//	pa = pga;
-			//}
-			//if((pgb -= local_gpo) > pa){
-			//	pa = pgb;
-			//}
-			pa = MAX3(pa,pga-local_gpo,pgb-local_gpo);
-			
-			pa += subp[seq2[j]];
-			
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			//s[j].ga = s[j-1].a-local_gpo;
-			//if (s[j-1].ga-gpe > s[j].ga){
-			//	s[j].ga = s[j-1].ga-gpe;
-			//}
-			
-			//if(s[j-1].ga-gpe >s[j-1].a-local_gpo){
-			//	s[j].ga = s[j-1].ga-gpe;
-			//}else{
-			//	s[j].ga = s[j-1].a-local_gpo;
-			//}
-			s[j].ga = MAX(s[j-1].ga-local_gpe,s[j-1].a-local_gpo);
-			
-			pgb = s[j].gb;
-			
-			//s[j].gb = ca-local_gpo;
-			//if(pgb-gpe > s[j].gb){
-			//	s[j].gb = pgb-gpe;
-			//}
-			
-			//if(pgb-gpe >  ca-local_gpo){
-			//	s[j].gb = pgb-gpe;
-			//}else{
-			//	s[j].gb = ca-local_gpo;
-			//}
-			s[j].gb = MAX(pgb-local_gpe ,ca-local_gpo);
-			
-			pa = ca;
-		}
-	}
-	return s;
-}
-
-struct large_states* backward_large_hirsch_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_large_mem* hm)
-{
-
-	struct large_states* s = hm->b;
-	float *subp = 0;
-	const int starta = hm->starta;
-	const int enda = hm->enda;
-	const int startb = hm->startb;
-	const int endb = hm->endb;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-
-	s[endb].a = s[0].a ;
-	s[endb].ga = s[0].ga;
-	s[endb].gb = s[0].gb;
-	
-	
-	//init of first row;
-	
-	//j = endb-startb;
-	if(endb == hm->len_b){
-		for(j = endb-1;j > startb;j--){
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j+1].a-local_tgpe;
-			//if (s[j+1].ga-local_tgpe > s[j].ga){
-			//	s[j].ga = s[j+1].ga-local_tgpe;
-			//}
-			//if(s[j+1].ga > s[j+1].a){
-			//	s[j].ga = s[j+1].ga-local_tgpe;
-			//}else{
-			//	s[j].ga = s[j+1].a-local_tgpe;
-			//}
-			s[j].ga = MAX(s[j+1].ga,s[j+1].a)-local_tgpe;
-			
-			s[j].gb = -FLOATINFTY;
-		}
-	}else{
-		for(j = endb-1;j > startb;j--){
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j+1].a-local_gpo;
-			//if (s[j+1].ga-gpe > s[j].ga){
-			//	s[j].ga = s[j+1].ga-gpe;
-			//}
-			//if(s[j+1].ga-gpe > s[j+1].a-local_gpo){
-			//	s[j].ga = s[j+1].ga-gpe;
-			//}else{
-			//	s[j].ga = s[j+1].a-local_gpo;
-			//}
-			s[j].ga = MAX(s[j+1].ga-local_gpe,s[j+1].a-local_gpo);
-			
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-
-	
-	s[startb].a = -FLOATINFTY;
-	s[startb].ga = -FLOATINFTY;
-	s[startb].gb = -FLOATINFTY;
-
-	i = enda-starta;
-	seq1+= starta;
-	while(i--){
-		subp = subm[seq1[i]];
-		pa = s[endb].a;
-		pga = s[endb].ga;
-		pgb = s[endb].gb;
-		s[endb].a = -FLOATINFTY;
-		s[endb].ga = -FLOATINFTY;
-
-		if(endb == hm->len_b){
-			//s[endb].gb = pa-local_tgpe;
-			//if(pgb-local_tgpe > s[endb].gb){
-			//	s[endb].gb = pgb-local_tgpe;
-			//}
-			//if(pgb > pa){
-			//	s[endb].gb = pgb-local_tgpe;
-			//}else{
-			//	s[endb].gb = pa-local_tgpe;
-			//}
-			s[endb].gb = MAX(pgb,pa)-local_tgpe;
-			
-			
-		}else{
-			//s[endb].gb = pa-local_gpo;
-			//if(pgb-gpe > s[endb].gb){
-			//	s[endb].gb = pgb-gpe;
-			//}
-			//if(pgb-gpe  > pa-local_gpo){
-			//	s[endb].gb = pgb-gpe;
-			//}else{
-			//	s[endb].gb = pa-local_gpo;
-			//}
-			s[endb].gb = MAX(pgb-local_gpe,pa-local_gpo);
-			
-		}
-
-		for(j = endb-1;j >= startb;j--){
-
-			ca = s[j].a;
-			//if((pga -= local_gpo) > pa){
-			//	pa = pga;
-			//}
-			//if((pgb -= local_gpo) > pa){
-			//	pa = pgb;
-			//}
-			pa = MAX3(pa,pga - local_gpo,pgb-local_gpo);
-			
-			pa += subp[seq2[j]];
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			//s[j].ga = s[j+1].a-local_gpo;
-			//if (s[j+1].ga-gpe > s[j].ga){
-			//	s[j].ga = s[j+1].ga-gpe;
-			//}
-			
-			
-			//if(s[j+1].ga-gpe >s[j+1].a-local_gpo){
-			//	s[j].ga = s[j+1].ga-gpe;
-			//}else{
-			//	s[j].ga = s[j+1].a-local_gpo;
-			//}
-			s[j].ga = MAX(s[j+1].ga-local_gpe,s[j+1].a-local_gpo);
-			
-			pgb = s[j].gb;
-			
-			//s[j].gb = ca-local_gpo;
-			//if(pgb-gpe > s[j].gb){
-			//	s[j].gb = pgb-gpe;
-			//}
-			//if(pgb-gpe >  ca-local_gpo){
-			//	s[j].gb = pgb-gpe;
-			//}else{
-			//	s[j].gb = ca-local_gpo;
-			//}
-			s[j].gb = MAX(pgb-local_gpe,ca-local_gpo);
-			
-			pa = ca;
-		}
-	}		
-	return s;
-}
-
-
-int* hirsch_large_ps_dyn(const float* prof1,const int* seq2,struct hirsch_large_mem* hm, int* hirsch_path,int sip)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	float input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-	hm->enda = mid;
-	hm->f = foward_large_hirsch_ps_dyn(prof1,seq2,hm,sip);
-	
-	/*int i;
-	fprintf(stderr,"FOWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->f[i].a,hm->f[i].ga,hm->f[i].gb);
-	}*/
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	hm->b = backward_large_hirsch_ps_dyn(prof1,seq2,hm,sip);
-	
-	/*fprintf(stderr,"BaCKWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->b[i].a,hm->b[i].ga,hm->b[i].gb);
-	}*/
-
-	hirsch_path = hirsch_large_align_two_ps_vector(prof1,seq2,hm,hirsch_path,input_states,old_cor,sip);
-	return hirsch_path;
-}
-
-
-
-int* hirsch_large_align_two_ps_vector(const float* prof1,const int* seq2,struct hirsch_large_mem* hm,int* hirsch_path,float input_states[],int old_cor[],int sip)
-{
-	struct large_states* f = hm->f;
- 	struct large_states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	const float open = local_gpo * sip;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -FLOATINFTY;
-	float max = -FLOATINFTY;	
-	//float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float middle =  (old_cor[3] - old_cor[2])/2 + old_cor[2];
-	float sub = 0.0;
-	
-	
-	prof1+= ((old_cor[4]+1)<<6);
-	
-	//i = hm->startb;
-	i = old_cor[2];
-	c = -1;
-	//for(i = hm->startb; i < hm->endb;i++){
-	for(i = old_cor[2]; i < old_cor[3];i++){
-		sub = abs(middle -i);
-		sub /= 1000;		
-		if(f[i].a+b[i].a-sub> max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga-open-sub > max){
-			max = f[i].a+b[i].ga-open-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb+prof1[27]-sub > max){
-			max = f[i].a+b[i].gb+prof1[27]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a-open-sub > max){
-			max = f[i].ga+b[i].a-open-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(local_gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb+prof1[29]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[29]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb+prof1[28]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[28]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a+prof1[27]-sub > max){
-			max = f[i].gb+b[i].a+prof1[27]-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(local_gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	//i = hm->endb;
-	i = old_cor[3];
-	
-	sub = abs(middle -i);
-	sub /= 1000; 
-	if(f[i].a+b[i].gb+prof1[27]-sub > max){
-		max = f[i].a+b[i].gb+prof1[27]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb+prof1[29]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[29]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb+prof1[28]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[28]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	
-	prof1-= ((old_cor[4]+1)<<6);
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-	//		fprintf(stderr,"Using this for start:%d	%d	%d\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = 0;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = 0;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);			
-
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-struct large_states* foward_large_hirsch_ps_dyn(const float* prof1,const int* seq2,struct hirsch_large_mem* hm,int sip)
-{
-//	unsigned int freq[26];
-	struct large_states* s = hm->f;
-	const int starta = hm->starta;
-	const int enda = hm->enda;
-	const int startb = hm->startb;
-	const int endb = hm->endb;
-	
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-	const float open = local_gpo * sip;
-	const float ext = local_gpe *sip; 
-	const float text = local_tgpe * sip;
-	
-	
-	
-	prof1 += (starta)<< 6;
-	s[startb].a = s[0].a;
-	s[startb].ga = s[0].ga;
-	s[startb].gb = s[0].gb;
-	if(startb == 0){
-		for (j = startb+1; j < endb;j++){
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j-1].a-text;
-			//if (s[j-1].ga-text > s[j].ga){
-			//	s[j].ga = s[j-1].ga-text;
-			//}
-			//if(s[j-1].ga > s[j-1].a){
-			//	s[j].ga = s[j-1].ga-text;
-			//}else{
-			//	s[j].ga = s[j-1].a-text;
-			//}
-			s[j].ga = MAX(s[j-1].ga,s[j-1].a) - text;
-			s[j].gb = -FLOATINFTY;
-		}	
-	}else{
-
-		for (j = startb+1; j < endb;j++){
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j-1].a-open;
-			//if (s[j-1].ga-ext > s[j].ga){
-			//	s[j].ga = s[j-1].ga-ext;
-			//}
-			//if(s[j-1].ga-ext > s[j-1].a-open){
-			//	s[j].ga = s[j-1].ga-ext;
-			//}else{
-			//	s[j].ga = s[j-1].a-open;
-			//}	
-			s[j].ga = MAX(s[j-1].ga-ext,s[j-1].a-open);
-			
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-	
-	
-	s[endb].a = -FLOATINFTY;
-	s[endb].ga = -FLOATINFTY;
-	s[endb].gb = -FLOATINFTY;
-	seq2--;
-
-	for (i = starta;i < enda;i++){
-		prof1 += 64;
-		//pa = 1;
-		//for (j = 26; j--;){
-		//	if(prof1[j]){
-		//		freq[pa] = j;
-		//		pa++;	
-		//	}
-		//}
-		//freq[0] = pa;
-		pa = s[startb].a;
-		pga = s[startb].ga;
-		pgb = s[startb].gb;
-		if(startb == 0){
-			s[startb].a = -FLOATINFTY;
-			s[startb].ga = -FLOATINFTY;
-		
-			//s[startb].gb = pa+prof1[29];
-			//if(pgb+prof1[29] > s[startb].gb){
-			//	s[startb].gb = pgb+prof1[29];
-			//}
-			//if(pgb > pa){
-			//	s[startb].gb = pgb+prof1[29];
-			//}else{
-			//	s[startb].gb = pa+prof1[29];
-			//}
-			s[startb].gb = MAX(pgb,pa)+prof1[29];
-		}else{
-			s[startb].a = -FLOATINFTY;
-			s[startb].ga = -FLOATINFTY;
-		
-			//s[startb].gb = pa+prof1[27];
-			//if(pgb+prof1[28] > s[startb].gb){
-			//	s[startb].gb = pgb+prof1[28];
-			//}
-			//if(pgb+prof1[28] > pa+prof1[27]){
-			//	s[startb].gb = pgb+prof1[28];
-			//}else{
-			//	s[startb].gb = pa+prof1[27];
-			//}
-			s[startb].gb = MAX(pgb+prof1[28],pa+prof1[27]);
-		}
-		for (j = startb+1; j <= endb;j++){
-			ca = s[j].a;
-			
-			//if((pga -= open) > pa){
-			//	pa = pga;
-			//}
-
-			//if((pgb += prof1[-37]) > pa){
-			//	pa = pgb;
-			//}
-			pa = MAX3(pa,pga -open,pgb + prof1[-37]);
-			
-			pa += prof1[32 + seq2[j]];
-
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			//s[j].ga = s[j-1].a-open;
-			//if (s[j-1].ga-ext > s[j].ga){
-			//	s[j].ga = s[j-1].ga-ext;
-			//}
-			
-			//if (s[j-1].ga-ext  > s[j-1].a-open){
-			//	s[j].ga = s[j-1].ga-ext;
-			//}else{
-			//	s[j].ga = s[j-1].a-open;
-			//}
-			s[j].ga = MAX(s[j-1].ga-ext,s[j-1].a-open);
-			
-			
-			pgb = s[j].gb;
-			
-			//s[j].gb = ca+prof1[27];
-			//if(pgb+prof1[28] > s[j].gb){
-			//	s[j].gb = pgb+prof1[28];
-			//}
-			//if(pgb+prof1[28] > ca+prof1[27]){
-			//	s[j].gb = pgb+prof1[28];
-			//}else{
-			//	s[j].gb = ca+prof1[27];
-			//}
-			s[j].gb = MAX(pgb+prof1[28],ca+prof1[27]);
-			
-			
-			pa = ca;
-		}	
-	}
-	prof1 -= enda << 6;
-	return s;
-}
-
-struct large_states* backward_large_hirsch_ps_dyn(const float* prof1,const int* seq2,struct hirsch_large_mem* hm,int sip)
-{
-	//unsigned int freq[26];
-	struct large_states* s = hm->b;
-	const int starta = hm->starta;
-	const int enda = hm->enda;
-	const int startb = hm->startb;
-	const int endb = hm->endb;
-	
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-	const float open = local_gpo * sip;
-	const float ext = local_gpe *sip; 
-	const float text = local_tgpe * sip;
-	
-
-	prof1 += (enda+1) << 6;
-
-	s[endb].a = s[0].a;
-	s[endb].ga = s[0].ga;
-	s[endb].gb = s[0].gb;
-	
-	
-	//init of first row;
-	//j = endb-startb;
-	if(endb == hm->len_b){
-		for(j = endb-1;j > startb;j--){
-			s[j].a = -FLOATINFTY;
-			//s[j].ga = s[j+1].a-text;
-			//if (s[j+1].ga-text > s[j].ga){
-			//	s[j].ga = s[j+1].ga-text;
-			//}
-			//if(s[j+1].ga > s[j+1].a){
-			//	s[j].ga = s[j+1].ga-text;
-			//}else{
-			//	s[j].ga = s[j+1].a-text;
-			//}
-			s[j].ga = MAX(s[j+1].ga,s[j+1].a)-text;
-			
-			s[j].gb = -FLOATINFTY;
-		}
-	}else{
-		for(j = endb-1;j > startb;j--){
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j+1].a-open;
-			//if (s[j+1].ga-ext > s[j].ga){
-			//	s[j].ga = s[j+1].ga-ext;
-			//}
-			//if(s[j+1].ga-ext > s[j+1].a-open){
-			//	s[j].ga = s[j+1].ga-ext;
-			//}else{
-			//	s[j].ga = s[j+1].a-open;
-			//}
-			s[j].ga = MAX(s[j+1].ga-ext,s[j+1].a-open);
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-	
-	s[startb].a = -FLOATINFTY;
-	s[startb].ga = -FLOATINFTY;
-	s[startb].gb = -FLOATINFTY;
-
-	i = enda-starta;
-	while(i--){
-		prof1 -= 64;
-
-		//pa = 1;
-		//for (j = 26; j--;){
-		//	if(prof1[j]){
-		//		freq[pa] = j;
-		//		pa++;	
-		//	}
-		//}
-		//freq[0] = pa;
-		
-		pa = s[endb].a;
-		pga = s[endb].ga;
-		pgb = s[endb].gb;
-		s[endb].a = -FLOATINFTY;
-		s[endb].ga = -FLOATINFTY;
-
-		if(endb == hm->len_b){
-			//s[endb].gb = pa+prof1[29];
-			//if(pgb+prof1[29] > s[endb].gb){
-			//	s[endb].gb = pgb+prof1[29];
-			//}
-			//if(pgb > pa){
-			//	s[endb].gb = pgb+prof1[29];
-			//}else{
-			//	s[endb].gb = pa+prof1[29];
-			//}
-			s[endb].gb = MAX(pgb,pa) +prof1[29];
-		}else{
-			//s[endb].gb = pa+prof1[27];
-			//if(pgb+prof1[28] > s[endb].gb){
-			//	s[endb].gb = pgb+prof1[28];
-			//}
-			//if(pgb+prof1[28] > pa+prof1[27]){
-			//	s[endb].gb = pgb+prof1[28];
-			//}else{
-			//	s[endb].gb = pa+prof1[27];
-			//}
-			s[endb].gb = MAX(pgb+prof1[28],pa+prof1[27]);
-			
-			
-		}
-
-		for(j = endb-1;j >= startb;j--){
-			ca = s[j].a;
-			//if((pga -= open) > pa){
-			//	pa = pga;
-			//}
-			//if((pgb += prof1[91]) > pa){
-			//	pa = pgb;
-			//}
-
-			pa = MAX3(pa,pga - open,pgb +prof1[91]);
-			pa += prof1[32 + seq2[j]];
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			//s[j].ga = s[j+1].a-open;
-			//if (s[j+1].ga-ext > s[j].ga){
-			//	s[j].ga = s[j+1].ga-ext;
-			//}
-			//if (s[j+1].ga-ext  > s[j+1].a-open){
-			//	s[j].ga = s[j+1].ga-ext;
-			//}else{
-			//	s[j].ga = s[j+1].a-open;
-			//}
-			s[j].ga = MAX(s[j+1].ga-ext,s[j+1].a-open);
-			
-			
-			pgb = s[j].gb;
-			
-			//s[j].gb = ca+prof1[27];
-			//if(pgb+prof1[28] > s[j].gb){
-			//	s[j].gb = pgb+prof1[28];
-			//}
-			//if(pgb+prof1[28] > ca+prof1[27]){
-			//	s[j].gb = pgb+prof1[28];
-			//}else{
-			//	s[j].gb = ca+prof1[27];
-			//}
-			s[j].gb = MAX(pgb+prof1[28],ca+prof1[27]);
-			
-			pa = ca;
-		}
-	}		
-	return s;
-}
-
-
-
-
-int* hirsch_large_pp_dyn(const float* prof1,const float* prof2,struct hirsch_large_mem* hm, int* hirsch_path)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	float input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-	
-	//fprintf(stderr,"starta:%d enda:%d startb:%d endb:%d mid:%d\n",hm->starta,hm->enda,hm->startb,hm->endb,mid);
-	
-	
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-	hm->enda = mid;
-	hm->f = foward_large_hirsch_pp_dyn(prof1,prof2,hm);
-	/*int i;
-	fprintf(stderr,"FOWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->f[i].a,hm->f[i].ga,hm->f[i].gb);
-	}*/
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	hm->b = backward_large_hirsch_pp_dyn(prof1,prof2,hm);
-	/*fprintf(stderr,"BaCKWARD\n");
-
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->b[i].a,hm->b[i].ga,hm->b[i].gb);
-	}*/
-
-	hirsch_path = hirsch_large_align_two_pp_vector(prof1,prof2,hm,hirsch_path,input_states,old_cor);
-	return hirsch_path;
-}
-
-
-
-int* hirsch_large_align_two_pp_vector(const float* prof1,const float* prof2,struct hirsch_large_mem* hm,int* hirsch_path,float input_states[],int old_cor[])
-{
-	struct large_states* f = hm->f;
- 	struct large_states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -FLOATINFTY;
-	float max = -FLOATINFTY;	
-	//float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float middle =  (old_cor[3] - old_cor[2])/2 + old_cor[2];
-	float sub = 0.0;
-	
-
-	prof1+= ((old_cor[4]+1) << 6);
-	//prof2 += 64 * (hm->startb);
-	//i = hm->startb;
-	prof2 += old_cor[2] << 6;
-	i = old_cor[2];
-	c = -1;
-	//for(i = hm->startb; i < hm->endb;i++){
-	for(i = old_cor[2]; i < old_cor[3];i++){
-		sub = abs(middle -i);
-		sub /= 1000; 
-		prof2 += 64;
-		//fprintf(stderr,"%d	%d	%d \n",f[i].a,b[i].a,max);
-		if(f[i].a+b[i].a-sub > max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga+prof2[27]-sub > max){
-			max = f[i].a+b[i].ga+prof2[27]-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb+prof1[27] -sub> max){
-			max = f[i].a+b[i].gb+prof1[27]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a+prof2[27]-sub > max){
-			max = f[i].ga+b[i].a+prof2[27]-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(local_gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb+prof1[29]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[29]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb+prof1[28]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[28]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a+prof1[27]-sub > max){
-			max = f[i].gb+b[i].a+prof1[27]-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(local_gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	//i = hm->endb;
-	i = old_cor[3];
-	sub = abs(middle -i);
-	sub /= 1000; 
-	if(f[i].a+b[i].gb+prof1[27]-sub > max){
-		max = f[i].a+b[i].gb+prof1[27]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb+prof1[29]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[29]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb+prof1[28]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[28]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	
-	prof1-= (old_cor[4]+1)<<6;
-	//prof2 -= hm->endb << 6;
-	prof2 -= old_cor[3] << 6;
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	//if(transition == -1){
-	//	exit(0);
-	//}
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			//fprintf(stderr,"Using this for start:%ld	%ld	%ld\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = 0;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = 0;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-struct large_states* foward_large_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_large_mem* hm)
-{
-	int freq[26];
-
-	/*union print{
-		__m128i m;
-		int tmp[4];
-	} output;
-	
-	__m128i xmm1;
-	__m128i xmm2;*/
-
-	
-	struct large_states* s = hm->f;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-	
-	prof1 += (hm->starta) << 6;
-	prof2 +=  (hm->startb) << 6;
-	s[hm->startb].a = s[0].a;
-	s[hm->startb].ga = s[0].ga;
-	s[hm->startb].gb = s[0].gb;
-	/*if(s[hm->startb].ga == -FLOATINFTY && s[hm->startb].a == -FLOATINFTY){
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=64;
-			s[j].a = -FLOATINFTY;
-			s[j].ga = -FLOATINFTY;
-			s[j].gb = -FLOATINFTY;
-		}	
-		prof2+=64;	
-	}else{
-	*/
-	if(hm->startb == 0){
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=64;
-			s[j].a = -FLOATINFTY;
-			//if (s[j-1].ga > s[j-1].a){
-			//	s[j].ga = s[j-1].ga+prof2[29];
-			//}else{
-			//	s[j].ga = s[j-1].a+prof2[29];
-			//}
-			s[j].ga = MAX(s[j-1].ga,s[j-1].a)+prof2[29];
-			s[j].gb = -FLOATINFTY;
-		}	
-		prof2+=64;	
-	}else{
-
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=64;
-			s[j].a = -FLOATINFTY;
-			//if(s[j-1].ga+prof2[28] > s[j-1].a+prof2[27]){
-			//	s[j].ga = s[j-1].ga+prof2[28];
-			//}else{
-			//	s[j].ga = s[j-1].a+prof2[27];
-			//}
-			s[j].ga = MAX(s[j-1].ga+prof2[28],s[j-1].a+prof2[27]);
-			
-			
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2+=64;
-	}
-	//}
-	
-	prof2 -= (hm->endb-hm->startb) << 6;
-	
-	s[hm->endb].a = -FLOATINFTY;
-	s[hm->endb].ga = -FLOATINFTY;
-	s[hm->endb].gb = -FLOATINFTY;
-
-
-	for (i = hm->starta;i < hm->enda;i++){
-		prof1 += 64;
-		c = 1;
-		for (j = 0;j < 26; j++){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;	
-			}
-		}
-		freq[0] = c;
-			
-		pa = s[hm->startb].a;
-		pga = s[hm->startb].ga;
-		pgb = s[hm->startb].gb;
-		s[hm->startb].a = -FLOATINFTY;
-		s[hm->startb].ga = -FLOATINFTY;
-		
-		//if(pgb == -FLOATINFTY && pa == -FLOATINFTY){
-		//	s[hm->startb].gb = -FLOATINFTY;
-		//}else{
-		if(hm->startb == 0){
-			//if(pgb > pa ){
-			//	s[hm->startb].gb = pgb+prof1[29];
-			//}else{
-			//	s[hm->startb].gb = pa+prof1[29];
-			//}
-			s[hm->startb].gb = MAX(pgb,pa)+ prof1[29];
-		}else{
-			//if(pgb+prof1[28] >  pa+prof1[27]){
-			//	s[hm->startb].gb = pgb+prof1[28];
-			//}else{
-			//	s[hm->startb].gb = pa+prof1[27];
-			//}
-			s[hm->startb].gb = MAX(pgb+prof1[28],pa+prof1[27]);
-		}
-		//}
-		for (j = hm->startb+1; j <= hm->endb;j++){
-			prof2 += 64;
-			ca = s[j].a;
-			
-
-			//if((pga += prof2[-37]) > pa){
-			//	pa = pga;
-			//}
-		
-
-			//if((pgb += prof1[-37]) > pa){
-			//	pa = pgb;
-			//}
-			//pa = MAX(pgb + prof1[-37],pa);
-			//pa = MAX(pga + prof2[-37],pa);
-
-			pa = MAX3(pa,pga + prof2[-37],pgb + prof1[-37]);
-			
-			
-			prof2 += 32;
-			for (c = 1;c < freq[0];c++){
-				pa += prof1[freq[c]]*prof2[freq[c]];
-			}
-			prof2 -= 32;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			//if (s[j-1].ga+prof2[28] > s[j-1].a+prof2[27]){
-			//	s[j].ga = s[j-1].ga+prof2[28];
-			//}else{
-			//	s[j].ga = s[j-1].a+prof2[27];
-			//}
-			
-			
-			/*xmm1 =  _mm_set_epi32 (ca,s[j-1].a,pgb,s[j-1].ga);
-			xmm2 = _mm_set_epi32 (prof1[27],prof2[27],prof1[28],prof2[28]);
-			xmm1 = _mm_add_epi32 (xmm1,xmm2);
-			xmm2 =  _mm_srli_si128(xmm1, 8);
-			output.m = _mm_cmpgt_epi32(xmm1,xmm2);
-			output.m = _mm_or_si128( _mm_andnot_si128(output.m,xmm2),_mm_and_si128(output.m,xmm1));
-			
-			s[j].ga =output.tmp[0];
-			s[j].gb = output.tmp[1];*/
-			//output.m = _mm_add_epi32 (xmm1,xmm2);
-			//_mm_store_si128(dst_ptr, xmm3);
-			//fprintf(stderr,"%d	%d	%d	%d	%d	%d	%d	%d\n",output.tmp[0],output.tmp[1],output.tmp[2],output.tmp[3],s[j-1].ga+prof2[28],s[j-1].a+prof2[27],pgb+prof1[28] ,ca+prof1[27]);
-			
-			
-			s[j].ga = MAX(s[j-1].ga+prof2[28],s[j-1].a+prof2[27]);
-			
-			
-			
-			pgb = s[j].gb;
-			
-
-			//if(pgb+prof1[28] > ca+prof1[27]){
-			//	s[j].gb = pgb+prof1[28];
-			//}else{
-			//	s[j].gb = ca+prof1[27];
-			//}
-			s[j].gb = MAX(pgb+prof1[28] ,ca+prof1[27]);
-			//fprintf(stderr,"%d	%d	%d	%d\n",output.tmp[0],output.tmp[1],s[j].ga,s[j].gb );
-			pa = ca;
-		}
-		prof2 -= (hm->endb-hm->startb) << 6;
-		
-	}
-	prof1 -=  (hm->enda) << 6;
-	return s;
-}
-
-struct large_states* backward_large_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_large_mem* hm)
-{
-	int freq[26];
-	struct large_states* s = hm->b;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-	
-	prof1 += (hm->enda+1) << 6;
-	prof2 += (hm->endb+1) << 6;
-	s[hm->endb].a = s[0].a;
-	s[hm->endb].ga = s[0].ga;
-	s[hm->endb].gb = s[0].gb;
-	
-	
-	//init of first row;
-	//j = endb-startb;
-
-	/*if(s[hm->endb].ga == -FLOATINFTY && s[hm->endb].a == -FLOATINFTY){
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			s[j].a = -FLOATINFTY;
-			s[j].ga = -FLOATINFTY;
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2 -= 64;
-	}else{*/
-	
-	if(hm->endb == hm->len_b){
-		
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			s[j].a = -FLOATINFTY;
-			//if(s[j+1].ga > s[j+1].a){
-			//	s[j].ga = s[j+1].ga+prof2[29];
-			//}else{
-			//	s[j].ga = s[j+1].a+prof2[29];
-			//}
-			s[j].ga = MAX(s[j+1].ga,s[j+1].a)+prof2[29];
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2 -= 64;
-	}else{
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			s[j].a = -FLOATINFTY;
-			//if(s[j+1].ga+prof2[28] > s[j+1].a+prof2[27]){
-			//	s[j].ga = s[j+1].ga+prof2[28];
-			//}else{
-			//	s[j].ga = s[j+1].a+prof2[27];
-			//}
-			s[j].ga = MAX(s[j+1].ga+prof2[28],s[j+1].a+prof2[27]);
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2 -= 64;
-	}
-	//}
-	
-	s[hm->startb].a = -FLOATINFTY;
-	s[hm->startb].ga = -FLOATINFTY;
-	s[hm->startb].gb = -FLOATINFTY;
-	
-	i = hm->enda-hm->starta;
-	while(i--){
-		prof1 -= 64;
-
-		c = 1;
-		for (j = 0;j < 26; j++){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;	
-			}
-		}
-		freq[0] = c;
-		
-		pa = s[hm->endb].a;
-		pga = s[hm->endb].ga;
-		pgb = s[hm->endb].gb;
-		s[hm->endb].a = -FLOATINFTY;
-		s[hm->endb].ga = -FLOATINFTY;
-		//if(pgb == -FLOATINFTY && pa == -FLOATINFTY){
-		//	s[hm->endb].gb = -FLOATINFTY;
-		//}else{
-		if(hm->endb == hm->len_b){
-			//if(pgb > pa){
-			//	s[hm->endb].gb = pgb+prof1[29];
-			//}else{
-			//	s[hm->endb].gb = pa+prof1[29];
-			//}	
-			s[hm->endb].gb = MAX(pgb,pa)+prof1[29];
-		}else{
-			//if(pgb+prof1[28] > pa+prof1[27]){
-			//	s[hm->endb].gb = pgb+prof1[28];
-			//}else{
-			//	s[hm->endb].gb = pa+prof1[27];
-			//}
-			s[hm->endb].gb = MAX(pgb+prof1[28] ,pa+prof1[27]);
-		}
-		//}
-		//j = endb-startb;
-		prof2 += (hm->endb-hm->startb) << 6;
-		//while(j--){
-		for(j = hm->endb-1;j >= hm->startb;j--){
-			prof2 -= 64;
-			ca = s[j].a;
-			
-			//pa = MAX(pga + prof2[91],pa);
-			//pa = MAX(pgb + prof1[91],pa);
-			pa = MAX3(pa,pga + prof2[91],pgb + prof1[91]);
-			
-			//if((pga += prof2[91]) > pa){
-			//	pa = pga;
-			//}
-			//if((pgb += prof1[91]) > pa){
-			//	pa = pgb;
-			//}
-
-			prof2 += 32;
-			for (c = 1;c < freq[0];c++){
-				pa += prof1[freq[c]]*prof2[freq[c]];
-			}
-			prof2 -= 32;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-
-			//if (s[j+1].ga+prof2[28] > s[j+1].a+prof2[27]){
-			//	s[j].ga = s[j+1].ga+prof2[28];
-			//}else{
-			//	s[j].ga = s[j+1].a+prof2[27];
-			//}
-			s[j].ga = MAX(s[j+1].ga+prof2[28], s[j+1].a+prof2[27]);
-
-			pgb = s[j].gb;
-
-			s[j].gb = MAX(pgb+prof1[28], ca+prof1[27]);
-			//if(pgb+prof1[28] > ca+prof1[27]){
-			//	s[j].gb = pgb+prof1[28];
-			//}else{
-			//	s[j].gb = ca+prof1[27];
-			//}
-
-			pa = ca;
-		}
-	}		
-	return s;
-}
-
-float* make_large_profile(float* prof, int* seq,int len,float** subm)
-{
-	int i,j,c;	
-	prof = malloc(sizeof(float)*(len+2)*64);
-	prof +=  (64 *(len+1));
-
-	for (i = 0;i < 64;i++){
-		prof[i] = 0.0;
-	}
-	prof[23+32] = -local_gpo;
-	prof[24+32] = -local_gpe;
-	prof[25+32] = -local_tgpe;
-
-	
-	i = len;
-	while(i--){
-		prof -= 64;
-
-		for (j = 0;j < 64;j++){
-			prof[j] = 0.0;
-		}
-		c = seq[i];
-		
-		prof[c] += 1.0;
-		
-		prof += 32;
-		
-		for(j = 23;j--;){
-			prof[j] = subm[c][j];
-		}
-		prof[23] = -local_gpo;
-		prof[24] = -local_gpe;
-		prof[25] = -local_tgpe;
-		
-		prof -= 32;
-	}
-	prof -= 64;
-	for (i = 0;i < 64;i++){
-		prof[i] = 0.0;
-	}
-	prof[23+32] = -local_gpo;
-	prof[24+32] = -local_gpe;
-	prof[25+32] = -local_tgpe;	
-	return prof;
-}
-
-void set_large_gap_penalties(float* prof,int len,int nsip)
-{
-	int i;
-	
-	prof +=  (64 *(len+1));
-	prof[27] = prof[55]*nsip;//gap open or close
-	prof[28] = prof[56]*nsip;//gap extention
-		
-	prof[29] = prof[57]*nsip;//gap open or close
-	i = len+1;
-	while(i--){
-		prof -= 64;
-		prof[27] = prof[55]*nsip;//gap open or close
-		prof[28] = prof[56]*nsip;//gap extention
-		
-		prof[29] = prof[57]*nsip;//gap open or close
-	}
-}
-
-
-float* large_update(float* profa,float* profb,float* newp,int* path,int sipa,int sipb)
-{
-	int i,j,c;
-	for (i = 64; i--;){
-		newp[i] = profa[i] + profb[i];
-	}
-	
-	profa += 64;
-	profb += 64;
-	newp += 64;
-
-	c = 1;
-	
-	while(path[c] != 3){
-		//Idea: limit the 'virtual' number of residues of one type to x.
-		// i.e. only allow a maximum of 10 alanines to be registered in each column
-		// the penalty for aligning a 'G' to this column will stay stable even when many (>10) alanines are present.
-		// the difference in score between the 'correct' (all alanine) and incorrect (alanines + glycine) will not increase 
-		// with the number of sequences. -> see Durbin pp 140
-		
-		if (!path[c]){
-			//fprintf(stderr,"Align	%d\n",c);
-			for (i = 64; i--;){
-				newp[i] = profa[i] + profb[i];
-			}
-				
-			
-			profa += 64;
-			profb += 64;
-		}
-		
-		if (path[c] & 1){
-			//fprintf(stderr,"Gap_A:%d\n",c);
-			//printf("open:%d	ext:%d	%d	%d\n",si->nsip[a] * local_gpo,si->nsip[a] * gpe,si->nsip[a] * profb[41],si->nsip[a] * profb[46]);
-			for (i = 64; i--;){
-				newp[i] = profb[i];
-			}
-			profb += 64;
-			if(!(path[c] & 20)){
-				if(path[c] & 32){
-					newp[25] += sipa;//1;
-					i = local_tgpe*sipa;
-				}else{
-					newp[24] += sipa;//1;
-					i = local_gpe*sipa;
-				}
-				
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}else{
-			if (path[c] & 16){ 
-	//			fprintf(stderr,"close_open");
-				if(path[c] & 32){
-					newp[25] += sipa;//1;
-					i = local_tgpe*sipa;
-					newp[23] += sipa;//1;
-					i += local_gpo*sipa;
-				}else{
-					newp[23] += sipa;//1;
-					i = local_gpo*sipa;
-				}
-								
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			if (path[c] & 4){ 
-	//			fprintf(stderr,"Gap_open");
-				if(path[c] & 32){
-					newp[25] += sipa;//1;
-					i = local_tgpe*sipa;
-					newp[23] += sipa;//1;
-					i += local_gpo*sipa;
-				}else{
-					newp[23] += sipa;//1;
-					i = local_gpo*sipa;
-				}
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			}	
-		}
-		if (path[c] & 2){
-			//fprintf(stderr,"Gap_B:%d\n",c);
-			//printf("open:%d	ext:%d	%d	%d\n",si->nsip[b] * local_gpo,si->nsip[b] * gpe,profa[26],profa[27]);
-			for (i = 64; i--;){
-				newp[i] = profa[i];
-			}
-			profa+=64;
-			if(!(path[c] & 20)){
-				if(path[c] & 32){
-					newp[25] += sipb;//1;
-					i = local_tgpe*sipb;
-				}else{
-					newp[24] += sipb;//1;
-					i = local_gpe*sipb;
-				}
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}else{
-			if (path[c] & 16){
-	//			fprintf(stderr,"close_open");
-				if(path[c] & 32){
-					newp[25] += sipb;//1;
-					i =  local_tgpe*sipb;
-					newp[23] += sipb;//1;
-					i +=  local_gpo*sipb;
-				}else{
-					newp[23] += sipb;//1;
-					i =  local_gpo*sipb;
-				}
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			if (path[c] & 4){
-	//			fprintf(stderr,"Gap_open");
-				if(path[c] & 32){
-					newp[25] += sipb;//1;
-					i = local_tgpe*sipb;
-					newp[23] += sipb;//1;
-					i += local_gpo*sipb;
-				}else{
-					newp[23] += sipb;//1;
-					i = local_gpo*sipb;
-				}
-				
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			}		
-		}
-		newp += 64;
-		c++;
-	}
-	for (i = 64; i--;){
-		newp[i] =  profa[i] + profb[i];
-	}	
-	newp -= (path[0]+1) *64;
-	return newp;
-}
-
-
-struct hirsch_large_mem* hirsch_large_mem_alloc(struct hirsch_large_mem* hm,int x)
-{
-
-	// a=((typeof(a))(((int)(((void *)malloc(c+15))+15))&-16)). 
-	hm = (struct hirsch_large_mem *) malloc(sizeof(struct hirsch_large_mem));
-	hm->starta = 0;
-	hm->startb = 0;
-	hm->enda = 0;
-	hm->endb = 0;
-	hm->size = x;
-	hm->len_a = 0;
-	hm->len_b = 0;
-	hm->f = malloc(sizeof(struct large_states)* (x+1));
-	hm->b = malloc(sizeof(struct large_states)* (x+1));
-	return hm;
-}
-
-struct hirsch_large_mem* hirsch_large_mem_realloc(struct hirsch_large_mem* hm,int x)
-{
-	hm->starta = 0;
-	hm->startb = 0;
-	hm->enda = 0;
-	hm->endb = 0;
-	hm->len_a = 0;
-	hm->len_b = 0;
-	hm->size = x;
-	hm->f = realloc(hm->f,sizeof(struct large_states)* (x+1));
-	hm->b = realloc(hm->b,sizeof(struct large_states)* (x+1));
-	return hm;
-}
-
-void hirsch_large_mem_free(struct hirsch_large_mem* hm)
-{
-	free(hm->f);
-	free(hm->b);
-	free(hm);
-}
-
-

Deleted: trunk/packages/kalign/trunk/kalign2_hirschberg_large.h
===================================================================
--- trunk/packages/kalign/trunk/kalign2_hirschberg_large.h	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_hirschberg_large.h	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,71 +0,0 @@
-/*
-	kalign2_hirschberg_large.h
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-struct large_states{
-	float a;
-	float ga;
-	float gb;
-	float x;
-};
-
-
-
-struct hirsch_large_mem{
-	struct large_states* f;
-	struct large_states* b;
-	int starta;
-	int startb;
-	int enda;
-	int endb;
-	int size;
-	int len_a;
-	int len_b;
-};
-
-int* hirsch_large_pp_dyn(const float* prof1,const float* prof2,struct hirsch_large_mem* hm, int* hirsch_path);
-struct large_states* foward_large_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_large_mem* hm);
-struct large_states* backward_large_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_large_mem* hm);
-int* hirsch_large_align_two_pp_vector(const float* prof1,const float* prof2,struct hirsch_large_mem* hm,int* hirsch_path,float input_states[],int old_cor[]);
-
-int* hirsch_large_ps_dyn(const float* prof1,const int* seq2,struct hirsch_large_mem* hm, int* hirsch_path,int sip);
-struct large_states* foward_large_hirsch_ps_dyn(const float* prof1,const int* seq2,struct hirsch_large_mem* hm,int sip);
-struct large_states* backward_large_hirsch_ps_dyn(const float* prof1,const int* seq2,struct hirsch_large_mem* hm,int sip);
-int* hirsch_large_align_two_ps_vector(const float* prof1,const int* seq2,struct hirsch_large_mem* hm,int* hirsch_path,float input_states[],int old_cor[],int sip);
-
-
-int* hirsch_large_ss_dyn(float**subm, const int* seq1,const int* seq2,struct hirsch_large_mem* hm, int* hirsch_path);
-struct large_states* foward_large_hirsch_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_large_mem* hm);
-struct large_states* backward_large_hirsch_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_large_mem* hm);
-int* hirsch_large_align_two_ss_vector(float**subm,const int* seq1,const int* seq2,struct hirsch_large_mem* hm,int* hirsch_path,float input_states[],int old_cor[]);
-
-float* make_large_profile(float* prof, int* seq,int len,float** subm);
-void set_large_gap_penalties(float* prof,int len,int nsip);
-float* large_update(float* profa,float* profb,float* newp,int* path,int sipa,int sipb);
-
-struct hirsch_large_mem* hirsch_large_mem_alloc(struct hirsch_large_mem* hm,int x);
-struct hirsch_large_mem* hirsch_large_mem_realloc(struct hirsch_large_mem* hm,int x);
-void hirsch_large_mem_free(struct hirsch_large_mem* hm);
-
-

Deleted: trunk/packages/kalign/trunk/kalign2_inferface.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_inferface.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_inferface.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,394 +0,0 @@
-/*
-	kalign2_interface.c 
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include <string.h>
-
-#include <getopt.h>
-
-//#include <unistd.h>
-#include "kalign2.h"
-#include "kalign2_input.h"
-
-void parameter_message(struct parameters* param)
-{
-        if(param->infile[0]){
-                if(param->dna){
-                        fprintf(stderr,"Aligning %d RNA/DNA sequences from file %s with these parameters:\n",numseq,param->infile[0]);
-                }else{
-                        fprintf(stderr,"Aligning %d protein sequences from file %s with these parameters:\n",numseq,param->infile[0]);
-                }
-        }else{
-                if(param->dna){
-                        fprintf(stderr,"Aligning %d RNA/DNA sequences with these parameters:\n",numseq);
-                }else{
-                        fprintf(stderr,"Aligning %d protein sequences with these parameters:\n",numseq);
-                }
-                
-        }
-       // fprintf(stderr,"	Distance estimation method:   %s\n",param->distance);
-	//fprintf(stderr,"	Tree building method:         %s\n",param->tree);
-	//fprintf(stderr,"	Ntree:                        %d\n",param->ntree);
-        fprintf(stderr,"        %0.8f	gap open penalty\n",(float)gpo/5);
-        fprintf(stderr,"        %0.8f	gap extension\n",(float)gpe/10);
-        fprintf(stderr,"        %0.8f	terminal gap penalty\n",(float)tgpe/10);
-        fprintf(stderr,"        %0.8f	bonus\n",param->secret/10);
-        /*fprintf(stderr,"        %0.2f	zlevel\n",param->zlevel);
-	fprintf(stderr,"        %0.2f	igw\n",param->internal_gap_weight);
-	fprintf(stderr,"        %d	sw\n",param->smooth_window);
-        fprintf(stderr,"        %0.2f	smo\n", param->smooth_strength);*/
-     
-	if(param->outfile){
-		fprintf(stderr,"Alignment will be written to file:'%s'.\n\n",param->outfile);
-	}else{
-		fprintf(stderr,"Alignment will be written to stdout.\n\n");
-	}
-}
-
-struct parameters* interface(struct parameters* param,int argc,char **argv)
-{
-	int i,c;
-	param->gpo = -1.0;
-	param->gpe = -1.0;
-	param->tgpe = -1.0;
-	param->secret = -1.0;
-	param->zlevel = 58.8;
-	param->sub_matrix = 0;
-	param->aa = 0;
-	
-	param->infile = malloc(sizeof(char*)*3);
-	param->infile[0] = 0;
-	param->infile[1] = 0;
-	param->infile[2] = 0;
-	param->input = 0;
-	param->outfile = 0;
-	param->format = 0;
-	param->help_flag = 0;
-	param->quiet = 0;
-	param->id = -1;
-	param->distance = "wu";
-	param->reformat = 0;
-	param->sort = 0;
-	
-	param->print_svg_tree = 0;
-	
-	param->dna = -1;
-	 
-	param->feature_type = 0;
-	param->alignment_type = "default";
-	param->tree = "upgma";
-	param->ntree = 2;
-	param->print_tree = 0;
-	param->alter_gaps = 0;
-	param->alter_range = 0.5;
-	param->alter_weight = 100;
-	
-        param->internal_gap_weight = 0;
-	param->smooth_window = 1;
-        param->smooth_strength = 0;
-        
-        
-        static char  license[] = "\n\
-Kalign version 2.03, Copyright (C) 2004, 2005, 2006 Timo Lassmann\n\n\
-        Kalign is free software. You can redistribute it and/or modify\n\
-        it under the terms of the GNU General Public License as\n\
-        published by the Free Software Foundation.\n\n";
-
-        
-
-	while (1){
-        	static struct option long_options[] ={
-		{"gapopen",  required_argument, 0,'s'},
-		{"gpo",  required_argument, 0, 's'},
-		{"gapextension",  required_argument, 0, 'e'},
-		{"gpe",  required_argument, 0, 'e'},
-                {"secret",  required_argument, 0, 'm'},
-                {"bonus",  required_argument, 0, 'm'},
-		{"terminalgapextension",  required_argument, 0, 't'},
-                {"tgpe",  required_argument, 0, 't'},
-                {"zcutoff",  required_argument, 0, 0},
-                {"distance",  required_argument, 0, 'd'},
-                {"ntree",  required_argument, 0, 0},
-                {"tree",  required_argument, 0, 0},
-                {"format",  required_argument, 0, 'f'},
-                {"reformat",  0, 0, 'r'},
-                {"sort",required_argument,0,'c'},
-                {"feature",  required_argument, 0, 0},
-		{"type",  required_argument, 0, 0},
-		{"alter_gaps",  required_argument, 0, 0},
-		{"altergaps",  required_argument, 0, 0},
-		{"alter_range",  required_argument, 0, 0},
-		{"alter_weight",  required_argument, 0, 0},
-		{"internal_gap_weight",  required_argument, 0, 0},
-		{"smooth_window",  required_argument, 0, 0},
-		{"smooth_strength",  required_argument, 0, 0},
-		{"matrix",  required_argument, 0, 0},
-		{"mmbonus",  required_argument, 0, 0},
-		{"nuc",  0, 0, 0},
-		{"dna",  0, 0, 0},
-		{"rna",  0, 0, 0},
-		{"protein",  0, 0, 0},
-		{"profile", 0, 0, 0},
-		{"prof", 0, 0, 0},
-		{"id", required_argument, 0, 0},
-		{"printtree", required_argument, 0, 0},
-		{"svgtree", required_argument, 0, 0},
-		{"svg_tree", required_argument, 0, 0},
-		
-                {"input",  required_argument, 0, 'i'},
-                {"infile",  required_argument, 0, 'i'},
-                {"in",  required_argument, 0, 'i'},
-                {"output",  required_argument, 0, 'o'},
-                {"outfile",  required_argument, 0, 'o'},
-                {"out",  required_argument, 0, 'o'},
-                {"help",   no_argument,0,'h'},
-                {"quiet",  0, 0, 'q'},
-                
-
-                {0, 0, 0, 0}
-                };
-                
-                int option_index = 0;
-                c = getopt_long_only (argc, argv,"i:o:hqs:e:m:t:z:c:f:d:b:r",long_options, &option_index);
-                //c = getopt (argc, argv, "hi:o:");
-                /* Detect the end of the options. */
-                if (c == -1){
-                        break;
-                }
-                switch (c){
-			case 0:
-				if (long_options[option_index].flag != 0){
-					break;
-				}
-				switch (option_index){
-					case 0:
-					case 1:
-						fprintf(stderr,"GAGAGA\n");
-						param->gpo = atof(optarg);
-						break;
-					case 2:
-					case 3:
-						param->gpe = atof(optarg);
-						break;
-					case 4:
-					case 5:
-						param->secret = atof(optarg);
-						break;
-					case 6:
-					case 7:
-						param->tgpe = atof(optarg);
-						break;
-					case 8:
-						param->zlevel = atof(optarg);
-						break;
-					case 9:
-						param->distance = optarg;
-						break;	
-					case 10:
-						param->ntree = atoi(optarg);
-						break;
-					case 11:
-						param->tree = optarg;
-						break;
-					case 12:
-						param->format = optarg;
-						break;
-					case 13:
-						param->reformat = 1;
-						break;
-					case 14:
-						param->sort = optarg;
-						break;
-					case 15:
-						param->feature_type = optarg;
-						break;
-					case 16:
-						param->alignment_type = optarg;
-						break;
-					case 17:
-					case 18:
-						param->alter_gaps = atoi(optarg);
-						break;	
-					case 19:
-						param->alter_range = atof(optarg);
-						break;	
-					case 20:
-						param->alter_weight = atoi(optarg);
-						break;	
-					case 21:
-						param->internal_gap_weight = atof(optarg);
-						break;	
-					case 22:
-						param->smooth_window = atoi(optarg);
-						break;	
-					case 23:
-						param->smooth_strength = atof(optarg);
-						break;	
-					case 24:
-						param->sub_matrix = optarg;
-						break;	
-					case 25:
-						param->aa = atoi(optarg);
-						break;	
-					case 26:
-					case 27:
-					case 28:
-						param->dna = 1;
-						break;
-					case 29:
-						param->dna = 0;
-						break;
-					case 30:
-					case 31:
-						param->alignment_type = "profile";
-						break;	
-					case 32:
-						param->id = atoi(optarg);
-						break;
-					case 33:
-						param->print_tree = optarg;
-						break;
-					case 34:
-					case 35:
-						param->print_svg_tree = optarg;
-						break;
-					
-						
-					default:
-						break;
-				}
-				//printf ("option%d %s",option_index,long_options[option_index].name);
-				//if (optarg){
-				//	printf (" with arg %s\n", optarg);
-				//}
-				break;
-			 case 's':
-			 	param->gpo = atof(optarg);
-                        	//param->help_flag = 1;
-				break;
-			case 'e':
-				param->gpe = atof(optarg);
-				break;
-			case 'm':
-				param->secret = atof(optarg);
-				break;
-			case 't':	
-				param->tgpe = atof(optarg);
-				break;
-			case 'z':	
-				param->zlevel = atof(optarg);
-				break;
-				
-			case 'c':
-				param->sort = optarg;
-				break;
-			case 'f':
-				param->format = optarg;
-				break;
-			case 'r':
-				param->reformat = 1;
-				break;
-				
-			case 'd':
-				param->distance = optarg;
-				break;	
-			case 'b':
-				param->tree = optarg;
-				break;	
-				
-				
-				
-                        case 'h':
-                        	param->help_flag = 1;
-				break;
-                        case 'i':
-                                param->infile[1] = optarg;
-                                break;
-                        case 'o':
-                                param->outfile = optarg;
-                                break;
-                        case 'q':
-                                param->quiet = 1;
-                                break;
-                        case '?':
-                                free_param(param);
-                                exit(1);
-                        break;
-                                default:
-                                abort ();
-                }
-        }
-      
-
-
-        if (optind < argc){
-                c = 0;
-                
-                
-                if(param->infile[1]){
-                	i = 3;
-                }else{
-                	i = 2;
-                }
-           //     fprintf(stderr,"EXTRA :%d\n",argc - optind); 
-                param->infile = realloc(param->infile,(sizeof(char*) * (argc - optind+i)));
-                for (c = i-1 ; c < (argc - optind+i);c++){
-                	param->infile[c] = 0;
-                }
-                c = i-1;
-                while (optind < argc){
-                        /*switch(c){
-                                case 0:
-                                        param->infile[c] =  argv[optind++];
-                                        break;
-                                case 1:
-                                        param->outfile =  argv[optind++];
-                                        break;
-                                default:
-                                        fprintf(stderr,"Unrecognised junk:%s\n",argv[optind++]);
-                                        break;
-                        }*/
-                        
-                        param->infile[c] =  argv[optind++];
-                        c++;
-		}
-        }
-	//exit(0);
-	if(param->quiet){
-		fclose(stderr);
-	}
-	fprintf(stderr,"%s", license);
-        if (param->help_flag){
-                fprintf(stderr,"%s\n", usage);
-                exit(1);
-        }
-	//exit(0);
-	
-        
-        /*if (!param->infile[1]){
-                fprintf(stderr,"%s\n", usage);
-                exit(1);
-        }*/
-        return param;
-}

Deleted: trunk/packages/kalign/trunk/kalign2_input.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_input.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_input.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,1827 +0,0 @@
-/*
-	kalign2_input.c 
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-#include "kalign2_input.h"
-
-struct alignment* detect_and_read_sequences(struct alignment* aln,struct parameters* param)
-{
-	
-	int feature = 0;
-	char **input = 0;
-	unsigned short int* input_type = 0;
-	unsigned short int* input_numseq = 0;
-	
-	int num_input = 0;
-	int i = 0;
-	int j = 0;
-	int c = 0;
-	int free_read = 1;
-	while(free_read == 1 || param->infile[i]){
-		num_input++;
-		i++;
-		free_read = 0;
-	}
-	numseq = 0;
-
-	
-	input = malloc(sizeof(char*) * num_input);
-	input_type = malloc(sizeof(unsigned short int) * num_input);
-	input_numseq = malloc(sizeof(unsigned short int) * num_input);
-	
-	for (i = 0; i < num_input;i++){
-		input[i] = 0;
-		input_type[i] = 0;
-		input_numseq[i] = 0;
-	}
-
-	free_read = 0;
-	
-	if(param->quiet){
-		c = 1;
-	}else{
-		c = 0;
-	}
-	
-	
-	for (i = c; i < num_input;i++){
-		if(!param->infile[i]){
-			fprintf(stderr,"reading from STDIN: ");
-		}else{
-			fprintf(stderr,"reading from %s: ",param->infile[i]);
-		}
-		input[i] = get_input_into_string(input[i],param->infile[i]);
-		if(input[i]){
-			free_read++;
-			if (byg_start("<macsim>",input[i]) != -1){
-				input_numseq[i] = count_sequences_macsim(input[i]);
-				feature = 1;
-				input_type[i] = 1;
-			}else if (byg_start("<uniprot",input[i]) != -1){
-				input_numseq[i] = count_sequences_uniprot(input[i]);
-				input_type[i] = 2;
-			}else if(byg_start("This SWISS-PROT",input[i]) != -1){
-				input_numseq[i] = count_sequences_swissprot(input[i]);
-				input_type[i] = 3;
-			}else if (byg_start("This Swiss-Prot",input[i]) != -1){
-				input_numseq[i] = count_sequences_swissprot(input[i]);
-				input_type[i] = 3;
-			}else if (byg_start("CLUSTAL W",input[i]) != -1){
-				input_numseq[i] = count_sequences_clustalw(input[i]);
-				input_type[i] = 4;
-			}else if (byg_start("PileUp",input[i]) != -1){
-				input_numseq[i] = count_sequences_clustalw(input[i]);
-				input_type[i] = 4;
-			}else if (byg_start("MSF:",input[i]) != -1){
-				input_numseq[i] = count_sequences_clustalw(input[i]);
-				input_type[i] = 4;
-			}else if (byg_start("STOCKHOLM",input[i]) != -1){
-				input_numseq[i] = count_sequences_stockholm(input[i]);
-				input_type[i] = 5;
-			}else{
-				input_numseq[i]  = count_sequences_fasta(input[i]);
-				input_type[i] = 0;
-			}
-			fprintf(stderr,"found %d sequences\n",input_numseq[i]);
-			
-			if(input_numseq[i] < 2){
-				free(input[i]);
-				input[i] = 0;
-			}else{
-				numseq += input_numseq[i];
-			}
-		}else{
-			fprintf(stderr,"found no sequences.\n");
-			if(!param->outfile && i){
-				param->outfile = param->infile[i];
-				fprintf(stderr,"-> output file, in ");
-				//try to set format.... 
-				if(!param->format){
-					if (byg_start("msf",param->outfile) != -1){
-						param->format = "msf";
-					}else if (byg_start("clustal",param->outfile) != -1){
-						param->format = "clustal";
-					}else if (byg_start("aln",param->outfile) != -1){
-						param->format = "clustal";
-					}else if (byg_start("macsim",param->outfile) != -1){
-						param->format = "macsim";
-					}else{
-						param->format = "fasta";
-					}
-					if(param->reformat){
-						fprintf(stderr,"unaligned fasta format\n");
-					}else if(param->format){
-						fprintf(stderr,"%s format\n",param->format);
-					}else{
-						fprintf(stderr,"fasta format\n");
-					}
-				}
-			}
-			fprintf(stderr,"\n");
-		}
-	}
-
-	
-	if(!numseq){
-		fprintf(stderr,"%s\n", usage);
-		fprintf(stderr,"\nWARNING: No sequences found.\n\n");
-		for (i = 0; i < num_input;i++){
-			free(input[i]);
-		}
-		free(input_numseq);
-		free(input_type);
-		free(input);
-		free_param(param);
-		exit(0);
-	}
-
-	if(byg_start(param->alignment_type,"profPROFprofilePROFILE") != -1){
-		if( free_read  < 2){
-			fprintf(stderr,"\nWARNING: You are trying to perform a profile - profile alignment but ony one input file was detected.\n\n");
-			param->alignment_type = "default";
-		}
-	}
-
-	
-	if (param->feature_type && !feature){
-		fprintf(stderr,"\nWARNING: You are trying to perform a feature alignment but the input format(s) do not contain feature information.\n");
-		for (i = 0; i < num_input;i++){
-			free(input[i]);
-		}
-		free(input_numseq);
-		free(input_type);
-		free(input);
-		free_param(param);
-		exit(0);
-	}
-	
-	numprofiles = (numseq << 1) - 1;
-	aln = aln_alloc(aln);
-	//numseq = 0;
-	if(byg_start(param->alignment_type,"profPROFprofilePROFILE") != -1){
-		j = 0;
-		for (i = 0; i < num_input;i++){
-			if(input[i]){
-				switch(input_type[i]){
-					case 0:
-						aln = read_alignment(aln,input[i]);
-						break;
-					case 1:
-						aln = read_alignment_macsim_xml(aln,input[i]);
-						break;
-					case 2:
-						aln = read_alignment_uniprot_xml(aln,input[i]);
-						break;
-					case 3:
-						aln = read_alignment_from_swissprot(aln, input[i]);
-						break;
-					case 4:
-						aln = read_alignment_clustal(aln,input[i]);
-						break;
-					case 5:
-						aln = read_alignment_stockholm(aln,input[i]);
-						break;
-					
-					default:
-						aln = read_alignment(aln,input[i]);
-						break;
-				}
-				input[i] = 0;
-				//create partial profile....
-				aln->nsip[numseq+j] = input_numseq[i];
-				aln->sip[numseq+j] = malloc(sizeof(int)*aln->nsip[numseq+j]);
-				
-				//fprintf(stderr,"%d	%d\n",numseq+j,aln->sl[numseq+j]);
-				j++;
-			}
-		}
-		num_input = j;
-		c = 0;
-		for (i = 0;i < num_input;i++){
-		//	
-			for ( j = 0; j < aln->nsip[numseq+i];j++){
-				aln->sip[numseq+i][j] = c;
-				c++;
-		//		fprintf(stderr,"%d ",aln->sip[numseq+i][j]);
-			}
-			aln->sl[numseq+i] = aln->sl[aln->sip[numseq+i][0]];
-		//	fprintf(stderr,"PROFILE:%d	contains: %d long:%d\n",i+numseq,aln->nsip[numseq+i],aln->sl[numseq+i]);
-	//		fprintf(stderr,"\n");
-		}
-		
-		//sanity check -are all input 
-		int a,b;
-		for (i = 0;i < num_input;i++){
-			for ( j = 0; j < aln->nsip[numseq+i]-1;j++){
-				a = aln->sip[numseq+i][j];
-				a = aln->sl[a];
-				for (c =  j+1; j < aln->nsip[numseq+i];j++){
-					b = aln->sip[numseq+i][c];
-					b = aln->sl[b];
-					if(a != b){
-						fprintf(stderr,"Unaligned sequences in input %s.\n",param->infile[i]);
-						for (i = 0; i < num_input;i++){
-							free(input[i]);
-						}
-						free(input_numseq);
-						free(input_type);
-						free(input);
-						free_aln(aln);
-						free_param(param);
-						exit(0);
-					}
-				}
-				
-			}
-
-		}
-		
-		//exit(0);
-		
-		/*for (i = 0; i < numseq;i++){
-			fprintf(stderr,"len%d:%d\n",i,aln->sl[i]);	
-			for ( j =0 ; j < aln->sl[i];j++){
-				//if(aln->s[i][j]> 23 || aln->s[i][j] < 0){
-				//	 aln->s[i][j] = -1;
-				//}
-				fprintf(stderr,"%d ",aln->s[i][j]);
-			}
-		//	fprintf(stderr,"\n");
-		}
-		exit(0);*/
-	}else{
-		for (i = 0; i < num_input;i++){
-			if(input[i]){
-				switch(input_type[i]){
-					case 0:
-						aln = read_sequences(aln,input[i]);
-						break;
-					case 1:
-						aln = read_sequences_macsim_xml(aln,input[i]);
-						break;
-					case 2:
-						aln = read_sequences_uniprot_xml(aln,input[i]);
-						break;
-					case 3:
-						aln = read_sequences_from_swissprot(aln, input[i]);
-						break;
-					case 4:
-						aln = read_sequences_clustal(aln,input[i]);
-						break;
-					case 5:
-						aln = read_sequences_stockholm(aln,input[i]);
-						break;
-					
-					default:
-						aln = read_sequences(aln,input[i]);
-						break;
-				}
-				/*if (byg_start("<macsim>",input[i]) != -1){
-					aln = read_sequences_macsim_xml(aln,input[i]);
-				}else if (byg_start("<uniprot",input[i]) != -1){
-					aln = read_sequences_uniprot_xml(aln,input[i]);
-				}else if(byg_start("This SWISS-PROT entry is copyright.",input[i]) != -1){
-					aln = read_sequences_from_swissprot(aln, input[i]);
-				}else if (byg_start("This Swiss-Prot entry is copyright.",input[i]) != -1){
-					aln = read_sequences_from_swissprot(aln, input[i]);
-				}else if (byg_start("CLUSTAL W",input[i]) != -1){
-					aln = read_sequences_clustal(aln,input[i]);
-				}else if (byg_start("PileUp",input[i]) != -1){
-					aln = read_sequences_clustal(aln,input[i]);
-				}else if (byg_start("MSF:",input[i]) != -1){
-					aln = read_sequences_clustal(aln,input[i]);
-				}else if (byg_start("STOCKHOLM",input[i]) != -1){
-					aln = read_sequences_stockholm(aln,input[i]);
-				}else{
-					aln = read_sequences(aln,input[i]);
-				}*/
-				input[i] = 0;
-			}
-		}
-	}
-	if(numseq < 2){
-		fprintf(stderr,"\nNo sequences could be read.\n");
-		free_param(param);
-		exit(0);
-	}
-	if(!param->format && param->outfile){
-			if (byg_start("msf",param->outfile) != -1){
-				param->format = "msf";
-			}else if (byg_start("clustal",param->outfile) != -1){
-				param->format = "clustal";
-			}else if (byg_start("aln",param->outfile) != -1){
-				param->format = "clustal";
-			}else if (byg_start("macsim",param->outfile) != -1){
-				param->format = "macsim";
-			}
-			fprintf(stderr,"Output file: %s, in %s format.\n",param->outfile,param->format);
-	}
-	
-	
-	free(input);
-	free(input_type);
-	free(input_numseq);
-	return aln;
-}
-
-int count_sequences_macsim(char* string)
-{
-	int n = 0;
-	n = byg_count("<seq-name>",string);
-	if(!n){
-		return -1;
-	}
-	return n;
-}
-
-int count_sequences_swissprot(char* string)
-{
-	int n = 0;
-	n = byg_count("ID   ",string);
-	if(!n){
-		return 0;
-	}
-	return n;
-}
-
-int count_sequences_uniprot(char* string)
-{
-	int n = 0;
-	n = byg_count("<entry",string);
-	if(!n){
-		return 0;
-	}
-	return n;
-}
-
-int count_sequences_stockholm(char* string)
-{
-	char* p1 = string;
-	int i = 0;
-	int j = 0;
-	int n = 0;
-	while((i = byg_end("\n",p1))!=-1){
-		p1+=i;
-		if (!(byg_start("//",p1))){
-			break;
-		}	
-		j = byg_end("#",p1);
-		if(j != 1){
-			n++;
-		}
-	}
-	if(!n){
-		return 0;
-	}
-	return n;
-}
-
-int count_sequences_clustalw(char* string)
-{
-	char* p1 = string;
-	int i = 0;
-	int j = 0;
-	int c = 0;
-	int n = 0;
-	int f = 0;
-	
-
-	while((i = byg_end("\n",p1))!=-1){
-		p1+=i;
-		j = byg_end(" ",p1);
-		f = byg_end("\n",p1);
-		if(f > 2 && f>j && j!= 1){
-			if(c ==0){
-				i = j;
-				while(p1[i] != '\n'){
-					//if (!isspace((int)p1[i])){
-					//	len++;
-					//}
-					i++;
-				}		
-			}
-			c++;
-		}else{
-			if (c){
-				if(c > n){
-					n = c;
-				}
-				c =0;
-			}
-		}
-	}
-	if(!n){
-		return 0;
-	}
-	return n;
-}
-
-int count_sequences_fasta(char* string)
-{
-	int nbytes;
-	int i; 
-	int n = 0;
-	int stop = 0;
-	nbytes = strlen(string);
-	for (i =0;i < nbytes;i++){
-		if (string[i] == '>'&& stop == 0){
-			stop = 1;
-			n++;
-		}
-		if (string[i] == '\n'){
-			stop = 0;
-		}
-	}
-	if(!n){
-		return 0;
-	}
-	return n;
-}
-
-
-
-
-char* get_input_into_string(char* string,char* infile)
-{
-	int i = 0;   
-	int string_length = 2;
-	char c = 0;    
-	FILE *file = 0;
-	if(infile){
-		if (!(file = fopen( infile, "r" ))){
-			return 0;
- 			fprintf(stderr,"Cannot open file '%s'\n", infile);
-			exit(1);
-		}
-		if (fseek(file,0,SEEK_END) != 0){
-			(void)fprintf(stderr, "ERROR: fseek failed\n");
-			(void)exit(EXIT_FAILURE);
-		}
-		i= ftell (file);
-		if (fseek(file,0,SEEK_START) != 0){
-			(void)fprintf(stderr, "ERROR: fseek failed\n");
-			(void)exit(EXIT_FAILURE);
-		}
-		string = malloc ((i+1)* sizeof(char));
-		fread(string,sizeof(char), i, file);
-		string[i] = 0;
-		fclose(file);
-	}else{
-		if (!isatty(0)){
-			string = malloc(sizeof(char*)*string_length);
-			while (!feof (stdin)){
-				c = getc(stdin);
-				if (i == string_length){
-					string_length <<=1;
-					string = realloc(string,sizeof(char)*string_length);
-				}
-				string[i] = c;
-				i++;
-			}
-			string[i-1] = 0;
-		}else{
-			return 0;
-		}
-	}
-	return string;
-}
-
-struct alignment* read_sequences_from_swissprot(struct alignment* aln,char* string)
-{
-	//int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,-1,13,14,15,16,17,-1,18,19,20,21,22};
-	int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
-	int i,j,c,n;
-	char* p = 0;
-	p = string;
-	/*numseq = byg_count("ID   ",p);
-	if(!numseq){
-		fprintf(stderr,"No sequences found!\n");
-		exit(1);
-	}
-	aln = (struct alignment *) malloc(sizeof(struct alignment));
-	numprofiles = (numseq << 1) - 1;
-	aln->ft = 0;
-	aln->si = 0;
-	aln->s = malloc(sizeof(int*) * (numseq ));
-	aln->seq = malloc(sizeof(char*) * (numseq ));
-	aln->sl = malloc(sizeof(int) * (numprofiles));
-	aln->sip = malloc(sizeof(int*)* numprofiles);	
-	aln->nsip = malloc(sizeof(int)* numprofiles);
-	aln->sn = malloc(sizeof(char*) * numseq);
-	aln->lsn = malloc(sizeof(int) * numseq);
-	for (i =0;i < numprofiles;i++){
-		aln->sip[i] = 0;
-		aln->nsip[i] = 0;
-	}
-
-	for (i = numseq;i--;){
-		aln->sip[i] = malloc(sizeof(int)*1);
-		aln->nsip[i] = 1;
-		aln->sip[i][0] = i;
-	}*/
-	c = 0;
-	while(aln->sl[c]){
-		c++;
-	}
-
-	
-	while ((i = byg_end("ID   ",p)) != -1){
-		p+=i;
-		j = byg_start(" ",p);
-		aln->lsn[c] = j;
-		aln->sn[c] = malloc(sizeof(char)*(j+1));
-		for (i = 0;i < j;i++){
-			aln->sn[c][i] = p[i];
-		}
-		aln->sn[c][j] = 0;
-		p+= j;
-		j = byg_end("SQ   ",p);
-		p+= j;
-		j = byg_end("\n",p);
-		p+= j;
-		j = byg_start("//",p);
-
-		aln->s[c] = malloc(sizeof(int)*(j+1));
-		aln->seq[c] = malloc(sizeof(char)*(j+1));
-		n = 0;
-		for (i = 0;i < j;i++){
-			if(isalpha((int)p[i])){
-				aln->s[c][n] = aacode[toupper(p[i])-65];
-				aln->seq[c][n] = p[i];
-				n++;
-			}
-		}
-		aln->s[c][n] = 0;
-		aln->seq[c][n] = 0;
-		aln->sl[c] = n;
-		c++;
-	}
-	free(string);
-	return aln;
-}
-
-
-struct alignment* read_alignment_from_swissprot(struct alignment* aln,char* string)
-{
-	//int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,-1,13,14,15,16,17,-1,18,19,20,21,22};
-	int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
-	int i,j,c,n;
-	char* p = 0;
-	p = string;
-	/*numseq = byg_count("ID   ",p);
-	if(!numseq){
-		fprintf(stderr,"No sequences found!\n");
-		exit(1);
-	}
-	aln = (struct alignment *) malloc(sizeof(struct alignment));
-	numprofiles = (numseq << 1) - 1;
-	aln->ft = 0;
-	aln->si = 0;
-	aln->s = malloc(sizeof(int*) * (numseq ));
-	aln->seq = malloc(sizeof(char*) * (numseq ));
-	aln->sl = malloc(sizeof(int) * (numprofiles));
-	aln->sip = malloc(sizeof(int*)* numprofiles);	
-	aln->nsip = malloc(sizeof(int)* numprofiles);
-	aln->sn = malloc(sizeof(char*) * numseq);
-	aln->lsn = malloc(sizeof(int) * numseq);
-	for (i =0;i < numprofiles;i++){
-		aln->sip[i] = 0;
-		aln->nsip[i] = 0;
-	}
-
-	for (i = numseq;i--;){
-		aln->sip[i] = malloc(sizeof(int)*1);
-		aln->nsip[i] = 1;
-		aln->sip[i][0] = i;
-	}*/
-	c = 0;
-	while(aln->sl[c]){
-		c++;
-	}
-
-	
-	while ((i = byg_end("ID   ",p)) != -1){
-		p+=i;
-		j = byg_start(" ",p);
-		aln->lsn[c] = j;
-		aln->sn[c] = malloc(sizeof(char)*(j+1));
-		for (i = 0;i < j;i++){
-			aln->sn[c][i] = p[i];
-		}
-		aln->sn[c][j] = 0;
-		p+= j;
-		j = byg_end("SQ   ",p);
-		p+= j;
-		j = byg_end("\n",p);
-		p+= j;
-		j = byg_start("//",p);
-
-		aln->s[c] = malloc(sizeof(int)*(j+1));
-		aln->seq[c] = malloc(sizeof(char)*(j+1));
-		n = 0;
-		for (i = 0;i < j;i++){
-			if((int)p[i] > 32){
-				if(isalpha((int)p[i])){
-					aln->s[c][n] = aacode[toupper(p[i])-65];
-				}else{
-					aln->s[c][n] = -1;
-				}
-				aln->seq[c][n] = p[i];
-				n++;
-			}
-		}
-		aln->s[c][n] = 0;
-		aln->seq[c][n] = 0;
-		aln->sl[c] = n;
-		c++;
-	}
-	free(string);
-	return aln;
-}
-
-struct alignment* read_sequences_macsim_xml(struct alignment* aln,char* string)
-{
-	int c = 0;
-	int n = 0;
-	int i = 0;
-	int j = 0;
-	char *p = 0;
-	int max = 0;
-	
-	int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
-	//int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,-1,13,14,15,16,17,-1,18,19,20,21,22};
-
-	/*aln = (struct alignment*) malloc(sizeof(struct alignment));
-	numseq = byg_count("<seq-name>",string);
-	if(!numseq){
-		fprintf(stderr,"No sequences found!\n");
-		exit(1);
-	}
-	
-	numprofiles = (numseq << 1) - 1;
-	aln->s = malloc(sizeof(int*) * (numseq ));
-	aln->seq = malloc(sizeof(char*) * (numseq ));
-	aln->ft =  malloc(sizeof(struct feature* ) * (numseq));
-	aln->si  =  malloc(sizeof(struct sequence_information* ) * (numseq));
-	
-	aln->sl = malloc(sizeof(int) * (numprofiles));
-	aln->sip = malloc(sizeof(int*)* numprofiles);
-	aln->nsip = malloc(sizeof(int)* numprofiles);
-	aln->sn = malloc(sizeof(char*) * numseq);
-	aln->lsn = malloc(sizeof(int) * numseq);
-	
-	for (i =0;i < numprofiles;i++){
-		aln->sip[i] = 0;
-		aln->nsip[i] = 0;
-	}
-	for(i =0;i < numseq;i++){
-		aln->ft[i] = 0;
-		aln->si[i] = 0;
-		aln->sip[i] = malloc(sizeof(int)*1);
-		aln->nsip[i] = 1;
-		aln->sip[i][0] = i;
-	}*/
-		
-	p = string;
-	
-	if(byg_count("<g>",p)){
-		while((i = byg_start("<g>",p))!=-1){
-			p+=i;
-			j = byg_end("<r>",p);
-			for(i = 0; i< j;i++){
-				p[i] = ' ';
-			}
-			i = byg_start("</r>",p);
-			p+=i;
-			
-			j = byg_end("</g>",p);
-			for(i = 0; i< j;i++){
-				p[i] = ' ';
-			}
-			
-		}
-	}
-	p = string;
-
-	c = 0;
-	while(aln->sl[c]){
-		c++;
-	}
-	
-
-	
-	while((i = byg_end("<sequence",p))!=-1){	
-		p+=i;// p1 is at start of entry;
-		max = byg_end("</sequence>",p);
-			
-		i = byg_end("<seq-name>",p);
-		if(i < max){
-			p +=i; //p1 is at the end of the sequence name tag
-			j = byg_start("</seq-name>",p);
-		
-			aln->lsn[c] = j;
-			aln->sn[c] = malloc(sizeof(char)*(j+1));
-			for (i = 0;i < j;i++){
-				aln->sn[c][i] = p[i];
-			}
-			aln->sn[c][j] = 0;
-			
-		}
-		i = byg_end("<ftable>",p);
-		if(i < max){
-			aln->ft[c] = read_ft(aln->ft[c],p);
-		}
-		i = byg_end("<seq-data>",p);
-		if(i < max){
-			p+= i;
-			j = byg_start("</seq-data>",p);
-			aln->s[c] = malloc(sizeof(int)*(j+1));
-			aln->seq[c] = malloc(sizeof(char)*(j+1));
-			n = 0;
-			for (i = 0;i < j;i++){
-				if(isalpha((int)p[i])){
-					aln->s[c][n] = aacode[toupper(p[i])-65];
-					aln->seq[c][n] = p[i];
-					n++;
-				}
-			}
-			aln->s[c][n] = 0;
-			aln->seq[c][n] = 0;
-			aln->sl[c] = n;
-		}
-		
-		c++;
-	}
-	free(string);
-	return aln;
-}
-
-
-struct alignment* read_alignment_macsim_xml(struct alignment* aln,char* string)
-{
-	int c = 0;
-	int n = 0;
-	int i = 0;
-	int j = 0;
-	char *p = 0;
-	int max = 0;
-	
-	int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
-	//int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,-1,13,14,15,16,17,-1,18,19,20,21,22};
-
-	/*aln = (struct alignment*) malloc(sizeof(struct alignment));
-	numseq = byg_count("<seq-name>",string);
-	if(!numseq){
-		fprintf(stderr,"No sequences found!\n");
-		exit(1);
-	}
-	
-	numprofiles = (numseq << 1) - 1;
-	aln->s = malloc(sizeof(int*) * (numseq ));
-	aln->seq = malloc(sizeof(char*) * (numseq ));
-	aln->ft =  malloc(sizeof(struct feature* ) * (numseq));
-	aln->si  =  malloc(sizeof(struct sequence_information* ) * (numseq));
-	
-	aln->sl = malloc(sizeof(int) * (numprofiles));
-	aln->sip = malloc(sizeof(int*)* numprofiles);
-	aln->nsip = malloc(sizeof(int)* numprofiles);
-	aln->sn = malloc(sizeof(char*) * numseq);
-	aln->lsn = malloc(sizeof(int) * numseq);
-	
-	for (i =0;i < numprofiles;i++){
-		aln->sip[i] = 0;
-		aln->nsip[i] = 0;
-	}
-	for(i =0;i < numseq;i++){
-		aln->ft[i] = 0;
-		aln->si[i] = 0;
-		aln->sip[i] = malloc(sizeof(int)*1);
-		aln->nsip[i] = 1;
-		aln->sip[i][0] = i;
-	}*/
-		
-	p = string;
-	
-	if(byg_count("<g>",p)){
-		while((i = byg_start("<g>",p))!=-1){
-			p+=i;
-			j = byg_end("<r>",p);
-			for(i = 0; i< j;i++){
-				p[i] = ' ';
-			}
-			i = byg_start("</r>",p);
-			p+=i;
-			
-			j = byg_end("</g>",p);
-			for(i = 0; i< j;i++){
-				p[i] = ' ';
-			}
-			
-		}
-	}
-	p = string;
-
-	c = 0;
-	while(aln->sl[c]){
-		c++;
-	}
-	
-
-	
-	while((i = byg_end("<sequence",p))!=-1){	
-		p+=i;// p1 is at start of entry;
-		max = byg_end("</sequence>",p);
-			
-		i = byg_end("<seq-name>",p);
-		if(i < max){
-			p +=i; //p1 is at the end of the sequence name tag
-			j = byg_start("</seq-name>",p);
-		
-			aln->lsn[c] = j;
-			aln->sn[c] = malloc(sizeof(char)*(j+1));
-			for (i = 0;i < j;i++){
-				aln->sn[c][i] = p[i];
-			}
-			aln->sn[c][j] = 0;
-			
-		}
-		i = byg_end("<ftable>",p);
-		if(i < max){
-			aln->ft[c] = read_ft(aln->ft[c],p);
-		}
-		i = byg_end("<seq-data>",p);
-		if(i < max){
-			p+= i;
-			j = byg_start("</seq-data>",p);
-			aln->s[c] = malloc(sizeof(int)*(j+1));
-			aln->seq[c] = malloc(sizeof(char)*(j+1));
-			n = 0;
-			for (i = 0;i < j;i++){
-				if((int)p[i]>32){
-					if(isalpha((int)p[i])){
-						aln->s[c][n] = aacode[toupper(p[i])-65];
-					}else{
-						aln->s[c][n] = -1;
-					}
-					aln->seq[c][n] = p[i];
-					n++;
-				}
-			}
-			aln->s[c][n] = 0;
-			aln->seq[c][n] = 0;
-			aln->sl[c] = n;
-		}
-		
-		c++;
-	}
-	free(string);
-	return aln;
-}
-
-
-struct feature* read_ft(struct feature* ft,char* p)
-{
-
-	int i,j;
-	struct feature *n = 0;
-	struct feature *old_n = 0;
-	char tmp[10];
-	char* p1 = 0;
-	p1 = p;
-	while((j = byg_end("<fitem>",p1))!= -1){
-		i = byg_end("</seq-info>",p1);
-		
-		if(j >i){
-			break;
-		}
-
-		n = malloc(sizeof(struct feature));
-		n->next = 0;
-		n->color = -1;
-
-		p1+=j;// p1 is at start of entry;
-		i = byg_end("<ftype>",p1);
-		p1 +=i; //p1 is at the end of the sequence name tag
-		j = byg_start("</ftype>",p1);
-
-		n->type = malloc(sizeof(char*)*(j+1));
-		for (i = 0; i < j;i++){
-			n->type[i] = p1[i];
-		}
-		n->type[j] = 0;
-		
-		i = byg_end("<fstart>",p1);
-		p1+= i;
-		j = byg_start("</fstart>",p1);
-		
-		for (i = 0; i < j;i++){
-			tmp[i] = p1[i];
-		}
-		tmp[j] = 0;
-		n->start = atoi(tmp);
-		i = byg_end("<fstop>",p1);
-		p1+= i;
-		j = byg_start("</fstop>",p1);
-		for (i = 0; i < j;i++){
-			tmp[i] = p1[i];
-		}
-		tmp[j] = 0;
-		n->end = atoi(tmp);
-
-		i = byg_end("<fnote>",p1);
-		p1+= i;
-		j = byg_start("</fnote>",p1);
-		n->note = malloc(sizeof(char*)*(j+1));
-		for (i = 0; i < j;i++){
-			n->note[i] = p1[i];
-		}
-		
-		n->note[j] = 0;
-
-		
-		if((old_n = ft)!= 0){
-			while(old_n->next!=0){
-				old_n = old_n->next;
-			}
-			old_n->next = n;
-		}else{
-			ft = n;
-		}
-		n = 0;
-	}
-	return ft;
-}
-
-struct alignment* read_sequences_uniprot_xml(struct alignment* aln,char* string)
-{
-	int c = 0;
-	int n = 0;
-	int i = 0;
-	int j = 0;
-	char *p1 = 0;
-
-	int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
-	//int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,-1,13,14,15,16,17,-1,18,19,20,21,22};
-
-	/*aln = (struct alignment *) malloc(sizeof(struct alignment));
-	numseq = byg_count("<entry",string);
-	if(!numseq){
-		fprintf(stderr,"No sequences found!\n");
-		exit(1);
-	}
-	
-	numprofiles = (numseq << 1) - 1;
-	aln->s = malloc(sizeof(int*) * (numseq ));
-	aln->seq = malloc(sizeof(char*) * (numseq ));
-	aln->si = 0;
-	aln->ft = 0;
-	aln->sl = malloc(sizeof(int) * (numprofiles));
-	aln->sip = malloc(sizeof(int*)* numprofiles);
-	aln->nsip = malloc(sizeof(int)* numprofiles);
-	aln->sn = malloc(sizeof(char*) * numseq);
-	aln->lsn = malloc(sizeof(int) * numseq);
-	for (i =0;i < numprofiles;i++){
-		aln->sip[i] = 0;
-		aln->nsip[i] = 0;
-	}
-	for(i =0;i < numseq;i++){
-		aln->sip[i] = malloc(sizeof(int)*1);
-		aln->nsip[i] = 1;
-		aln->sip[i][0] = i;
-	}*/
-
-	p1 = string;
-
-	
-	c = 0;
-	while(aln->sl[c]){
-		c++;
-	}
-	
-	while((i = byg_end("<entry",p1))!=-1){
-		p1+=i;// p1 is at start of entry;
-		i = byg_end("<name>",p1);
-		p1 +=i; //p1 is at the end of the sequence name tag
-		j = byg_start("</name>",p1);
-		aln->lsn[c] = j;
-		aln->sn[c] = malloc(sizeof(char)*(j+1));
-		for (i = 0;i < j;i++){
-			aln->sn[c][i] = p1[i];
-		}
-		aln->sn[c][j] = 0;
-		i = byg_end("<sequence",p1);
-		p1+= i;
-		i = byg_end(">",p1);
-		p1 +=i;
-		j = byg_start("</sequence>",p1);
-		aln->s[c] = malloc(sizeof(int)*(j+1));
-		aln->seq[c] = malloc(sizeof(char)*(j+1));
-		n = 0;
-		for (i = 0;i < j;i++){
-			if(isalpha((int)p1[i])){
-				aln->s[c][n] = aacode[toupper(p1[i])-65];
-				aln->seq[c][n] = p1[i];
-				n++;
-			}
-		}
-		aln->s[c][n] = 0;
-		aln->seq[c][n] = 0;
-		aln->sl[c] = n;
-		c++;
-	}
-	free(string);
-	return aln;
-}
-
-
-
-struct alignment* read_alignment_uniprot_xml(struct alignment* aln,char* string)
-{
-	int c = 0;
-	int n = 0;
-	int i = 0;
-	int j = 0;
-	char *p1 = 0;
-
-	int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
-	//int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,-1,13,14,15,16,17,-1,18,19,20,21,22};
-
-	/*aln = (struct alignment *) malloc(sizeof(struct alignment));
-	numseq = byg_count("<entry",string);
-	if(!numseq){
-		fprintf(stderr,"No sequences found!\n");
-		exit(1);
-	}
-	
-	numprofiles = (numseq << 1) - 1;
-	aln->s = malloc(sizeof(int*) * (numseq ));
-	aln->seq = malloc(sizeof(char*) * (numseq ));
-	aln->si = 0;
-	aln->ft = 0;
-	aln->sl = malloc(sizeof(int) * (numprofiles));
-	aln->sip = malloc(sizeof(int*)* numprofiles);
-	aln->nsip = malloc(sizeof(int)* numprofiles);
-	aln->sn = malloc(sizeof(char*) * numseq);
-	aln->lsn = malloc(sizeof(int) * numseq);
-	for (i =0;i < numprofiles;i++){
-		aln->sip[i] = 0;
-		aln->nsip[i] = 0;
-	}
-	for(i =0;i < numseq;i++){
-		aln->sip[i] = malloc(sizeof(int)*1);
-		aln->nsip[i] = 1;
-		aln->sip[i][0] = i;
-	}*/
-
-	p1 = string;
-
-	
-	c = 0;
-	while(aln->sl[c]){
-		c++;
-	}
-	
-	while((i = byg_end("<entry",p1))!=-1){
-		p1+=i;// p1 is at start of entry;
-		i = byg_end("<name>",p1);
-		p1 +=i; //p1 is at the end of the sequence name tag
-		j = byg_start("</name>",p1);
-		aln->lsn[c] = j;
-		aln->sn[c] = malloc(sizeof(char)*(j+1));
-		for (i = 0;i < j;i++){
-			aln->sn[c][i] = p1[i];
-		}
-		aln->sn[c][j] = 0;
-		i = byg_end("<sequence",p1);
-		p1+= i;
-		i = byg_end(">",p1);
-		p1 +=i;
-		j = byg_start("</sequence>",p1);
-		aln->s[c] = malloc(sizeof(int)*(j+1));
-		aln->seq[c] = malloc(sizeof(char)*(j+1));
-		n = 0;
-		for (i = 0;i < j;i++){
-			if((int)p1[i] > 32){
-				if(isalpha((int)p1[i])){
-					aln->s[c][n] = aacode[toupper(p1[i])-65];
-				}else{
-					aln->s[c][n] = -1;
-				}
-				aln->seq[c][n] = p1[i];
-				n++;
-			}
-		}
-		aln->s[c][n] = 0;
-		aln->seq[c][n] = 0;
-		aln->sl[c] = n;
-		c++;
-	}
-	free(string);
-	return aln;
-}
-
-struct alignment* read_sequences_stockholm(struct alignment* aln,char* string)
-{
-	int c = 0;
-	int n = 0;
-	int i = 0;
-	int j = 0;
-	char *p1 = 0;
-
-	int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
-	//int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,-1,13,14,15,16,17,-1,18,19,20,21,22};
-
-	/*aln = (struct alignment*) malloc(sizeof(struct alignment));
-	p1 = string;
-	while((i = byg_end("\n",p1))!=-1){
-		p1+=i;
-		if (!(byg_start("//",p1))){
-			break;
-		}	
-		j = byg_end("#",p1);
-		if(j != 1){
-			numseq++;
-		}
-	}
-
-	numprofiles = (numseq << 1) - 1;
-	aln->s = malloc(sizeof(int*) * (numseq ));
-	aln->seq = malloc(sizeof(char*) * (numseq ));
-	aln->ft = 0;
-	aln->si = 0;
-	aln->sl = malloc(sizeof(int) * (numprofiles));
-	aln->sip = malloc(sizeof(int*)* numprofiles);
-	
-	aln->nsip = malloc(sizeof(int)* numprofiles);
-	aln->sn = malloc(sizeof(char*) * numseq);
-	aln->lsn = malloc(sizeof(int) * numseq);
-	for (i =0;i < numprofiles;i++){
-		aln->sip[i] = 0;
-		aln->nsip[i] = 0;
-	}
-	for(i =0;i < numseq;i++){
-		aln->sip[i] = malloc(sizeof(int)*1);
-		aln->nsip[i] = 1;
-		aln->sip[i][0] = i;
-	}*/
-
-	c = 0;
-	while(aln->sl[c]){
-		c++;
-	}
-
-	p1 = string;
-	while((i = byg_end("\n",p1))!=-1){
-		p1+=i;
-		if (!(byg_start("//",p1))){
-			break;
-		}	
-		j = byg_end("#",p1);
-		if(j != 1){
-			j = byg_start(" ",p1);
-			aln->lsn[c] = j;
-			aln->sn[c] = malloc(sizeof(char)*(j+1));
-			for (i = 0;i < j;i++){
-				aln->sn[c][i] = p1[i];
-			}
-			aln->sn[c][j] = 0;
-
-			
-			p1+=j;
-			j = byg_start("\n",p1);
-
-			aln->s[c] = malloc(sizeof(int)*(j+1));
-			aln->seq[c] = malloc(sizeof(char)*(j+1));
-			n = 0;
-			for (i = 0;i < j;i++){
-				if(isalpha((int)p1[i])){
-					aln->s[c][n] = aacode[toupper(p1[i])-65];
-					aln->seq[c][n] = p1[i];
-					n++;
-				}
-			}
-			aln->s[c][n] = 0;
-			aln->seq[c][n] = 0;
-			aln->sl[c] = n;
-			c++;
-		}
-	}
-
-	free(string);
-	return aln;
-}
-
-struct alignment* read_alignment_stockholm(struct alignment* aln,char* string)
-{
-	int c = 0;
-	int n = 0;
-	int i = 0;
-	int j = 0;
-	char *p1 = 0;
-
-	int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
-	//int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,-1,13,14,15,16,17,-1,18,19,20,21,22};
-
-	/*aln = (struct alignment*) malloc(sizeof(struct alignment));
-	p1 = string;
-	while((i = byg_end("\n",p1))!=-1){
-		p1+=i;
-		if (!(byg_start("//",p1))){
-			break;
-		}	
-		j = byg_end("#",p1);
-		if(j != 1){
-			numseq++;
-		}
-	}
-
-	numprofiles = (numseq << 1) - 1;
-	aln->s = malloc(sizeof(int*) * (numseq ));
-	aln->seq = malloc(sizeof(char*) * (numseq ));
-	aln->ft = 0;
-	aln->si = 0;
-	aln->sl = malloc(sizeof(int) * (numprofiles));
-	aln->sip = malloc(sizeof(int*)* numprofiles);
-	
-	aln->nsip = malloc(sizeof(int)* numprofiles);
-	aln->sn = malloc(sizeof(char*) * numseq);
-	aln->lsn = malloc(sizeof(int) * numseq);
-	for (i =0;i < numprofiles;i++){
-		aln->sip[i] = 0;
-		aln->nsip[i] = 0;
-	}
-	for(i =0;i < numseq;i++){
-		aln->sip[i] = malloc(sizeof(int)*1);
-		aln->nsip[i] = 1;
-		aln->sip[i][0] = i;
-	}*/
-
-	c = 0;
-	while(aln->sl[c]){
-		c++;
-	}
-
-	p1 = string;
-	while((i = byg_end("\n",p1))!=-1){
-		p1+=i;
-		if (!(byg_start("//",p1))){
-			break;
-		}	
-		j = byg_end("#",p1);
-		if(j != 1){
-			j = byg_start(" ",p1);
-			aln->lsn[c] = j;
-			aln->sn[c] = malloc(sizeof(char)*(j+1));
-			for (i = 0;i < j;i++){
-				aln->sn[c][i] = p1[i];
-			}
-			aln->sn[c][j] = 0;
-
-			
-			p1+=j;
-			j = byg_start("\n",p1);
-
-			aln->s[c] = malloc(sizeof(int)*(j+1));
-			aln->seq[c] = malloc(sizeof(char)*(j+1));
-			n = 0;
-			for (i = 0;i < j;i++){
-				if((int)p1[i] > 32){
-					if(isalpha((int)p1[i])){
-						aln->s[c][n] = aacode[toupper(p1[i])-65];
-					}else{
-						aln->s[c][n] = -1;
-					}
-					aln->seq[c][n] = p1[i];
-					n++;
-				}
-			}
-			aln->s[c][n] = 0;
-			aln->seq[c][n] = 0;
-			aln->sl[c] = n;
-			c++;
-		}
-	}
-
-	free(string);
-	return aln;
-}
-
-
-struct alignment* read_sequences_clustal(struct alignment* aln,char* string)
-{
-	int c = 0;
-	int n = 0;
-	int len = 0;
-	int i = 0;
-	int j = 0;
-	int start = 0;
-	char *p1 = 0;
-	int local_numseq = 0;
-
-	int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
-	//int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,-1,13,14,15,16,17,-1,18,19,20,21,22};
-
-
-	//aln = (struct alignment*) malloc(sizeof(struct alignment));
-	p1 = string;
-
-	while((i = byg_end("\n",p1))!=-1){
-		p1+=i;
-		j = byg_end(" ",p1);
-		n = byg_end("\n",p1);
-		if(n > 2 && n>j && j!= 1){
-			if(c ==0){
-				i = j;
-				while(p1[i] != '\n'){
-					if (!isspace((int)p1[i])){
-						len++;
-					}
-					i++;
-				}		
-			}
-			c++;
-		}else{
-			if (c){
-				if(c > local_numseq){
-					local_numseq = c;
-				}
-				c =0;
-			}
-		}
-	}
-
-	/*numprofiles = (numseq << 1) - 1;
-	aln->s = malloc(sizeof(int*) * (numseq ));
-	aln->seq = malloc(sizeof(char*) * (numseq ));
-	aln->ft = 0;
-	aln->si = 0;
-	aln->sl = malloc(sizeof(int) * (numprofiles));
-	aln->sip = malloc(sizeof(int*)* numprofiles);
-	aln->nsip = malloc(sizeof(int)* numprofiles);
-	aln->sn = malloc(sizeof(char*) * numseq);
-	aln->lsn = malloc(sizeof(int) * numseq);
-
-	for (i =0;i < numprofiles;i++){
-		aln->sip[i] = 0;
-		aln->nsip[i] = 0;
-	}
-
-	for(i =0;i < numseq;i++){
-		aln->lsn[i] = 0;
-		aln->sip[i] = malloc(sizeof(int)*1);
-		aln->nsip[i] = 1;
-		aln->sip[i][0] = i;
-		aln->sl[i] = 0;*/
-	start = 0;
-	while(aln->sl[start]){
-		start++;
-	}
-
-	for(i =start;i < local_numseq+start;i++){
-		aln->s[i] = malloc(sizeof(int)*(len+1));
-		aln->seq[i] = malloc(sizeof(char)*(len+1));
-	}
-
-	p1 = string;
-	c = start;
-	while((i = byg_end("\n",p1))!=-1){
-		p1+=i;
-		j = byg_end(" ",p1);
-		n = byg_end("\n",p1);
-		if(n > 2 && n>j && j!= 1){
-			if(aln->lsn[c] == 0){
-				aln->lsn[c] = j;
-				aln->sn[c] = malloc(sizeof(char)*(j+1));
-				for (i = 0;i < j;i++){
-					aln->sn[c][i] = p1[i];
-				}
-				aln->sn[c][j] = 0;
-			}
-			for (i = j;i < n;i++){
-				if(isalpha((int)p1[i])){
-					aln->s[c][aln->sl[c]] = aacode[toupper(p1[i])-65];
-					aln->seq[c][aln->sl[c]] = p1[i];
-					aln->sl[c]++;
-				}		
-			}		
-			c++;
-		}else{
- 			if (c != start){
-				//c =0;
-				c = start;
-			}	
-		}
-	}
-	for (i = start; i < local_numseq+start;i++){
-		aln->s[i][aln->sl[i]] = 0;
-	}
-	free(string);
-	return aln;
-}
-
-
-struct alignment* read_alignment_clustal(struct alignment* aln,char* string)
-{
-	int c = 0;
-	int n = 0;
-	int len = 0;
-	int i = 0;
-	int j = 0;
-	int start = 0;
-	char *p1 = 0;
-	int local_numseq = 0;
-
-	int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
-	//int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,-1,13,14,15,16,17,-1,18,19,20,21,22};
-
-
-	//aln = (struct alignment*) malloc(sizeof(struct alignment));
-	p1 = string;
-
-	while((i = byg_end("\n",p1))!=-1){
-		p1+=i;
-		j = byg_end(" ",p1);
-		n = byg_end("\n",p1);
-		if(n > 2 && n>j && j!= 1){
-			if(c ==0){
-				i = j;
-				while(p1[i] != '\n'){
-					if ((int)p1[i] > 32){
-						len++;
-					}
-					i++;
-				}		
-			}
-			c++;
-		}else{
-			if (c){
-				if(c > local_numseq){
-					local_numseq = c;
-				}
-				c =0;
-			}
-		}
-	}
-
-	/*numprofiles = (numseq << 1) - 1;
-	aln->s = malloc(sizeof(int*) * (numseq ));
-	aln->seq = malloc(sizeof(char*) * (numseq ));
-	aln->ft = 0;
-	aln->si = 0;
-	aln->sl = malloc(sizeof(int) * (numprofiles));
-	aln->sip = malloc(sizeof(int*)* numprofiles);
-	aln->nsip = malloc(sizeof(int)* numprofiles);
-	aln->sn = malloc(sizeof(char*) * numseq);
-	aln->lsn = malloc(sizeof(int) * numseq);
-
-	for (i =0;i < numprofiles;i++){
-		aln->sip[i] = 0;
-		aln->nsip[i] = 0;
-	}
-
-	for(i =0;i < numseq;i++){
-		aln->lsn[i] = 0;
-		aln->sip[i] = malloc(sizeof(int)*1);
-		aln->nsip[i] = 1;
-		aln->sip[i][0] = i;
-		aln->sl[i] = 0;*/
-	start = 0;
-	while(aln->sl[start]){
-		start++;
-	}
-
-	for(i =start;i < local_numseq+start;i++){
-		aln->s[i] = malloc(sizeof(int)*(len+1));
-		aln->seq[i] = malloc(sizeof(char)*(len+1));
-	}
-
-	p1 = string;
-	c = start;
-	while((i = byg_end("\n",p1))!=-1){
-		p1+=i;
-		j = byg_end(" ",p1);
-		n = byg_end("\n",p1);
-		if(n > 2 && n>j && j!= 1){
-			if(aln->lsn[c] == 0){
-				aln->lsn[c] = j;
-				aln->sn[c] = malloc(sizeof(char)*(j+1));
-				for (i = 0;i < j;i++){
-					aln->sn[c][i] = p1[i];
-				}
-				aln->sn[c][j] = 0;
-			}
-			for (i = j;i < n;i++){
-				if((int)p1[i] > 32){
-					if(isalpha((int)p1[i])){
-						aln->s[c][aln->sl[c]] = aacode[toupper(p1[i])-65];
-					}else{
-						aln->s[c][aln->sl[c]] = -1;
-					}
-					aln->seq[c][aln->sl[c]] = p1[i];
-					aln->sl[c]++;
-				}		
-			}		
-			c++;
-		}else{
- 			if (c != start){
-				//c =0;
-				c = start;
-			}	
-		}
-	}
-	for (i = start; i < local_numseq+start;i++){
-		aln->s[i][aln->sl[i]] = 0;
-		aln->seq[i][aln->sl[i]] = 0;
-	}
-	free(string);
-	return aln;
-}
-
-struct alignment* read_sequences(struct alignment* aln,char* string)
-{
-	int c = 0;
-	int n = 0;
-	int i = 0;
-	int j = 0;
-	int stop = 0;
-	int start = 0;
-	int nbytes;
-	int local_numseq = 0;				// O	12				//U17
-	int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
-	nbytes = strlen(string);
-
-	//aln = (struct alignment*) malloc(sizeof(struct alignment));
-	for (i =0;i < nbytes;i++){
-		if (string[i] == '>'&& stop == 0){
-			stop = 1;
-			local_numseq++;
-		}
-		if (string[i] == '\n'){
-			stop = 0;
-		}
-	}
-	/*
-	if(!numseq){
-		fprintf(stderr,"No sequences found!\n");
-		exit(1);
-	}
-	numprofiles = (numseq << 1) - 1;
-	aln->s = malloc(sizeof(int*) * (numseq));
-	aln->seq = malloc(sizeof(char*) * (numseq));
-	aln->ft = 0;
-	aln->si = 0;
-	aln->sl = malloc(sizeof(int) * (numprofiles));
-	aln->sip = malloc(sizeof(int*)* numprofiles);
-	aln->nsip = malloc(sizeof(int)* numprofiles);
-	aln->sn = malloc(sizeof(char*) * numseq);
-	aln->lsn = malloc(sizeof(int) * numseq);
-	
-	for (i =0;i < numprofiles;i++){
-		aln->sip[i] = 0;
-		aln->nsip[i] = 0;
-	}*/
-	start = 0;
-	while(aln->sl[start]){
-		start++;
-	}
-	j = start;
-
-	for (i =0;i < nbytes;i++){
-		if (string[i] == '>' && stop == 0){
-			stop = 1;
-			aln->sl[j] =c;
-			j++;
-			c = 0;
-		}
-		if (string[i] == '\n'){
-			if(stop == 1){
-				aln->lsn[j-1] = n;
-				n = 0;
-			}
-			stop = 0;
-		}
-		if (stop == 1 && string[i] != '\n' && string[i] != 0 && string[i] != '>' ){
-			n++;
-		}
-		if (stop == 0 && string[i] != '\n' && string[i] != 0 ){
-			if (isalpha((int)string[i])){
-				c++;
-			}
-		}
-	}
-	aln->sl[j] = c;
-
-	for (i =1+start;i < local_numseq+1+start;i++){
-		if(!aln->sl[i]){
-			fprintf(stderr,"Sequence %d has a length of 0!!\n",i-1);
-			exit(1);
-		}
-		aln->sl[i-1] = aln->sl[i];
-	}
-	aln->sl[start+local_numseq] = 0;
-
-	//for (i = numseq;i--;){
-	for (i = start; i < local_numseq+start;i++){
-		aln->s[i] = malloc(sizeof(int)*(aln->sl[i]+1));
-		aln->seq[i] = malloc(sizeof(char)*(aln->sl[i]+1));
-		aln->sn[i] = malloc(sizeof(char)*(aln->lsn[i]+1));
-		//aln->sip[i] = malloc(sizeof(int)*1);
-		//aln->nsip[i] = 1;
-		//aln->sip[i][0] = i;
-	}
-
-	stop = 0;
-	j = start;
-	for (i =0;i < nbytes;i++){
-		if (string[i] == '>' && stop == 0 ){
-			stop = 1;
-			j++;
-			c = 0;
-		}
-		if (string[i] == '\n'){
-			if(stop == 1){
-				n = 0;
-			}
-			stop = 0;
-		}
-		if (stop == 1 &&string[i] != '\n' && string[i] != 0 && string[i] != '>' ){
-			aln->sn[j-1][n] = string[i];
-			n++;
-		}
-		if (stop == 0 && string[i] != '\n' && string[i] != 0 ){
-			if(isalpha((int)string[i])){
-				aln->s[j-1][c] = aacode[toupper(string[i])-65];
-				aln->seq[j-1][c] = string[i];
-				c++;
-			}
-		}
-	}
-
-	for (i = start;i< local_numseq+start;i++){
-		aln->s[i][aln->sl[i]] = 0;
-		aln->seq[i][aln->sl[i]] = 0;
-		aln->sn[i][aln->lsn[i]] = 0;
-	}	
-
-	free(string);
-	return aln;
-}
-
-
-struct alignment* read_alignment(struct alignment* aln,char* string)
-{
-	int c = 0;
-	int n = 0;
-	int i = 0;
-	int j = 0;
-	int stop = 0;
-	int start = 0;
-	int nbytes;
-	int local_numseq = 0;				// O	12				//U17
-	int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
-	nbytes = strlen(string);
-
-	//aln = (struct alignment*) malloc(sizeof(struct alignment));
-	for (i =0;i < nbytes;i++){
-		if (string[i] == '>'&& stop == 0){
-			stop = 1;
-			local_numseq++;
-		}
-		if (string[i] == '\n'){
-			stop = 0;
-		}
-	}
-	/*
-	if(!numseq){
-		fprintf(stderr,"No sequences found!\n");
-		exit(1);
-	}
-	numprofiles = (numseq << 1) - 1;
-	aln->s = malloc(sizeof(int*) * (numseq));
-	aln->seq = malloc(sizeof(char*) * (numseq));
-	aln->ft = 0;
-	aln->si = 0;
-	aln->sl = malloc(sizeof(int) * (numprofiles));
-	aln->sip = malloc(sizeof(int*)* numprofiles);
-	aln->nsip = malloc(sizeof(int)* numprofiles);
-	aln->sn = malloc(sizeof(char*) * numseq);
-	aln->lsn = malloc(sizeof(int) * numseq);
-	
-	for (i =0;i < numprofiles;i++){
-		aln->sip[i] = 0;
-		aln->nsip[i] = 0;
-	}*/
-	start = 0;
-	while(aln->sl[start]){
-		start++;
-	}
-	j = start;
-
-	for (i =0;i < nbytes;i++){
-		if (string[i] == '>' && stop == 0){
-			stop = 1;
-			aln->sl[j] =c;
-			j++;
-			c = 0;
-		}
-		if (string[i] == '\n'){
-			if(stop == 1){
-				aln->lsn[j-1] = n;
-				n = 0;
-			}
-			stop = 0;
-		}
-		if (stop == 1 && string[i] != '\n' && string[i] != 0 && string[i] != '>' ){
-			n++;
-		}
-		if (stop == 0 && string[i] != '\n' && string[i] != 0 ){
-			if ((int)string[i] > 32){
-				c++;
-			}
-		}
-	}
-	aln->sl[j] = c;
-
-	for (i =1+start;i < local_numseq+1+start;i++){
-		if(!aln->sl[i]){
-			fprintf(stderr,"Sequence %d has a length of 0!!\n",i-1);
-			exit(1);
-		}
-		aln->sl[i-1] = aln->sl[i];
-	}
-	aln->sl[start+local_numseq] = 0;
-	//fprintf(stderr,"set to 0 : %d\n",start+local_numseq);
-	//for (i = numseq;i--;){
-	for (i = start; i < local_numseq+start;i++){
-	//	fprintf(stderr,"len:%d %d\n",i,aln->sl[i]);
-		aln->s[i] = malloc(sizeof(int)*(aln->sl[i]+1));
-		aln->seq[i] = malloc(sizeof(char)*(aln->sl[i]+1));
-		aln->sn[i] = malloc(sizeof(char)*(aln->lsn[i]+1));
-		//aln->sip[i] = malloc(sizeof(int)*1);
-		//aln->nsip[i] = 1;
-		//aln->sip[i][0] = i;
-	}
-
-	stop = 0;
-	j = start;
-	for (i =0;i < nbytes;i++){
-		if (string[i] == '>' && stop == 0 ){
-			stop = 1;
-			j++;
-			c = 0;
-		}
-		if (string[i] == '\n'){
-			if(stop == 1){
-				n = 0;
-			}
-			stop = 0;
-		}
-		if (stop == 1 &&string[i] != '\n' && string[i] != 0 && string[i] != '>' ){
-			aln->sn[j-1][n] = string[i];
-			n++;
-		}
-		if (stop == 0 && string[i] != '\n' && string[i] != 0 ){
-			if((int) string[i] > 32 ){
-				if(isalpha((int)string[i])){
-					aln->s[j-1][c] = aacode[toupper(string[i])-65];
-				}else{
-					aln->s[j-1][c] = -1;
-				}
-				aln->seq[j-1][c] = string[i];
-				c++;
-			}
-		}
-	}
-
-	for (i = start;i< local_numseq+start;i++){
-		aln->s[i][aln->sl[i]] = 0;
-		aln->seq[i][aln->sl[i]] = 0;
-		aln->sn[i][aln->lsn[i]] = 0;
-	}	
-
-	free(string);
-	return aln;
-}
-

Deleted: trunk/packages/kalign/trunk/kalign2_input.h
===================================================================
--- trunk/packages/kalign/trunk/kalign2_input.h	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_input.h	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,119 +0,0 @@
-/*
-	kalign2_input.h 
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-
-#include <unistd.h>
-#include <string.h>
-#include <ctype.h>
-
-#define SEEK_START 0
-#define SEEK_END 2
-
-struct alignment* read_sequences(struct alignment* aln,char* string);
-struct alignment* read_sequences_from_swissprot(struct alignment* aln,char* string);
-struct alignment* read_sequences_uniprot_xml(struct alignment* aln,char* string);
-struct alignment* read_sequences_macsim_xml(struct alignment* aln,char* string);
-struct feature* read_ft(struct feature* ft,char* p);
-struct alignment* read_sequences_clustal(struct alignment* aln,char* string);
-struct alignment* read_sequences_stockholm(struct alignment* aln,char* string);
-
-struct alignment* read_alignment(struct alignment* aln,char* string);
-struct alignment* read_alignment_from_swissprot(struct alignment* aln,char* string);
-struct alignment* read_alignment_uniprot_xml(struct alignment* aln,char* string);
-struct alignment* read_alignment_macsim_xml(struct alignment* aln,char* string);
-struct feature* read_ft(struct feature* ft,char* p);
-struct alignment* read_alignment_clustal(struct alignment* aln,char* string);
-struct alignment* read_alignment_stockholm(struct alignment* aln,char* string);
-
-char* get_input_into_string(char* string,char* infile);
-
-
-
-int count_sequences_macsim(char* string);
-int count_sequences_swissprot(char* string);
-int count_sequences_uniprot(char* string);
-int count_sequences_stockholm(char* string);
-int count_sequences_clustalw(char* string);
-int count_sequences_fasta(char* string);
-
-static char  usage[] = "\n\
-        Usage: kalign2   [INFILE] [OUTFILE] [OPTIONS]\n\
-        \n\
-	Options:\n\n\
-        -s,	-gapopen          Gap open penalty\n\
-        	-gap_open\n\
-        	-gpo\n\
-        	\n\
-        -e,	-gapextension     Gap extension penalty\n\
-        	-gap_ext\n\
-        	-gpe\n\
-        	\n\
-        -t,	-terminal_gap_extension_penalty	Terminal gap penalties\n\
-        	-tgpe\n\
-        	\n\
-        -m,	-matrix_bonus     A constant added to the substitution matrix.\n\
-        	-bonus\n\
-        	\n\
-        -c,	-sort            The order in which the sequences appear in the output alignment.\n\
-		                   <input, tree, gaps.>\n\
-		\n\
-        -g,	-feature          Selects feature mode and specifies which features are to be used:\n\
-		                   e.g. all, maxplp, STRUCT, PFAM-A....\n\
-        	\n\
-        -d,	-distance         Distance method.\n\
-		                   <wu,pair>\n\
-		\n\
-        -b,	-guide-tree       Guide tree method.\n\
-		-tree             <nj,upgma>\n\
-		\n\
-	-z,	-zcutoff         Parameter used in the wu-manber based distance calculation\n\
-		\n\
-        -i,	-input            The input file.\n\
-        	-infile\n\
-        	-in\n\
-        	\n\
-        -o,	-output           The output file.\n\
-        	-outfile\n\
-        	-out\n\
-        	\n\
-        -f,	-format           The output format:\n\
-		                   <fasta, msf, aln, clu, macsim>\n\
-		\n\
-	-q,	-quiet            Print nothing to STDERR.\n\
-		                  Read nothing from STDIN\n\
-	\n\
-	Examples:\n\n\
-	Using pipes:\n\
-		kalign2 [OPTIONS] < [INFILE]   > [OUTFILE]\n\
-		more [INFILE] |  kalign2 [OPTIONS] > [OUTFILE]\n\
-         \n\
-	Relaxed gap penalties:\n\
-		kalign2 -gpo 60 -gpe 9 -tgpe 0 -bonus 0 < [INFILE]   > [OUTFILE]\n\
-         \n\
-        Feature alignment with pairwise alignment based distance method and NJ guide tree:\n\
-        	kalign2 -in test.xml -distance pair -tree nj -sort gaps -feature STRUCT -format macsim -out test.macsim\n\
-        ";
-
-

Deleted: trunk/packages/kalign/trunk/kalign2_main.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_main.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_main.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,303 +0,0 @@
-/*
-	kalign2_main.c 
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-
-#include "kalign2.h"
-
-
-
-unsigned int numseq = 0;
-unsigned int numprofiles = 0;
-float gpo = 0;
-float gpe = 0;
-float tgpe = 0;
-
-int main(int argc,char **argv)
-{
-	int i;
-	int* tree = 0;
-	int a, b, c;
-	
-	struct alignment* aln = 0;
-	struct parameters* param = 0;
-	struct aln_tree_node* tree2 = 0;
-	
-	param = malloc(sizeof(struct parameters));
-	
-	param =  interface(param,argc,argv);
-	
-	aln = detect_and_read_sequences(aln,param);
-	
-	if(param->ntree > numseq){
-		param->ntree = numseq;
-	}
-
-	//DETECT DNA
-	if(param->dna == -1){
-		for (i = 0; i < numseq;i++){
-			param->dna = byg_detect(aln->s[i],aln->sl[i]);
-			if(param->dna){
-				break;
-			}
-		}
-	}
-	//param->dna = 0;
-	//fprintf(stderr,"DNA:%d\n",param->dna);
-	//exit(0);
-	
-	if(param->dna == 1){
-		//brief sanity check...
-		for (i = 0; i < numseq;i++){
-			if(aln->sl[i] < 6){
-				fprintf(stderr,"Dna/Rna alignments are only supported for sequences longer than 6.");
-				free(param);
-				free_aln(aln);
-				exit(0);
-			}
-		}
-		aln =  make_dna(aln);
-	}
-
-	int j;
-	
-	if(param->reformat){
-		for (i = 0 ;i < numseq;i++){
-			aln->nsip[i] = i;
-			for (j = 0; j < aln->sl[i];j++){
-				aln->s[i][j] = 0;
-			}
-		}
-		param->format = "fasta";//param->reformat;
-		output(aln,param);
-		exit(1);
-	}
-	
-	
-	
-	//fast distance calculation;
-	float** submatrix = 0;
-	submatrix = read_matrix(submatrix,param); // sets gap penalties as well.....
-	
-	if(!param->quiet){
-		parameter_message(param);
-	}
-	
-	if(byg_start(param->alignment_type,"profPROFprofilePROFILE") != -1){
-		profile_alignment_main(aln,param,submatrix);
-	}
-	
-	float** dm = 0;
-	if(param->ntree > 1){
-		if(byg_start(param->distance,"pairclustalPAIRCLUSTAL") != -1){
-			if(byg_start(param->tree,"njNJ") != -1){
-				dm = protein_pairwise_alignment_distance(aln,dm,param,submatrix,1);
-			}else{
-				dm = protein_pairwise_alignment_distance(aln,dm,param,submatrix,0);
-			}
-		}else if(byg_start("wu",param->alignment_type) != -1){
-			dm =  protein_wu_distance2(aln,dm,param);
-		//	param->feature_type = "wumanber";
-		}else if(param->dna == 1){
-			if(byg_start(param->tree,"njNJ") != -1){
-				dm =  dna_distance(aln,dm,param,1);
-			}else{
-				dm =  dna_distance(aln,dm,param,0);
-			}
-		}else{
-			if(byg_start(param->tree,"njNJ") != -1){
-				dm =  protein_wu_distance(aln,dm,param,1);
-			}else{
-				dm =  protein_wu_distance(aln,dm,param,0);
-			}
-		}
-		/*int j; 
-		for (i = 0; i< numseq;i++){
-			for (j = 0; j< numseq;j++){
-				fprintf(stderr,"%f	",dm[i][j]);
-			}
-			fprintf(stderr,"\n");
-		}*/
-
-		if(byg_start(param->tree,"njNJ") != -1){
-			tree2 = real_nj(dm,param->ntree);
-		}else{
-			tree2 = real_upgma(dm,param->ntree);
-		}
-		if(param->print_tree){
-			print_tree(tree2,aln,param->print_tree);
-		}
-	}
-
-	tree = malloc(sizeof(int)*(numseq*3+1));
-	for ( i = 1; i < (numseq*3)+1;i++){
-		tree[i] = 0;
-	}
-	tree[0] = 1; 
-	
-	if(param->ntree < 2){
-		tree[0] = 0;
-		tree[1] = 1;
-		
-		c = numseq;
-		tree[2] = c;
-		a = 2;
-		for ( i = 3; i < (numseq-1)*3;i+=3){
-			tree[i] = a;
-			tree[i+1] = c;
-			c++;
-			tree[i+2] = c;
-			a++;
-		}
-	}else if(param->ntree > 2){
-		ntreeify(tree2,param->ntree);
-	}else{
-		tree = readtree(tree2,tree);
-		for (i = 0; i < (numseq*3);i++){
-			tree[i] = tree[i+1];
-		}
-		free(tree2->links);
-		free(tree2->internal_lables);
-		free(tree2);
-	}
-
-	
-
-
-	//get matrices... 
-	struct feature_matrix* fm = 0;
-	
-	struct ntree_data* ntree_data = 0;
-	
-	int** map = 0;
-	if(param->ntree > 2){
-		ntree_data = malloc(sizeof(struct ntree_data));
-		ntree_data->realtree = tree2;
-		ntree_data->aln = aln;
-		ntree_data->profile = 0;
-		ntree_data->map = 0;
-		ntree_data->ntree = param->ntree;
-		ntree_data->submatrix = submatrix;
-		ntree_data->tree = tree; 
-		
-		ntree_data = ntree_alignment(ntree_data);
-		map = ntree_data->map;
-		tree = ntree_data->tree;
-		for (i = 0; i < (numseq*3);i++){
-			tree[i] = tree[i+1];
-		}
-		free(ntree_data);
-	}else if (param->feature_type){
-		fm = get_feature_matrix(fm,aln,param->feature_type);
-		if(!fm){
-			for (i = 32;i--;){
-				free(submatrix[i]);
-			}
-			free(submatrix);
-			free_param(param);
-			free(map);
-			free(tree);
-			exit(0);
-		}
-		
-		map = feature_hirschberg_alignment(aln,tree,submatrix,map,fm);
-		//exit(0);
-		//map =  feature_alignment(aln,tree,submatrix, map,fm);
-		
-	}else if (byg_start("fast",param->alignment_type) != -1){
-		map =  default_alignment(aln,tree,submatrix, map);
-	}else if(param->dna == 1){
-		map =  dna_alignment(aln,tree,submatrix, map);
-	/*}else if (byg_start("test",param->alignment_type) != -1){
-		map =  test_alignment(aln,tree,submatrix, map,param->internal_gap_weight,param->smooth_window,param->smooth_strength);
-	}else if (param->aa){
-		map =  aa_alignment(aln,tree,submatrix, map,param->aa);
-	}else if (param->alter_gaps){
-		map = alter_gaps_alignment(aln,tree,submatrix,map,param->alter_gaps,param->alter_range,param->alter_weight);
-	}else if (byg_start("altergaps",param->alignment_type) != -1){
-		map = alter_gaps_alignment(aln,tree,submatrix,map,param->alter_gaps,param->alter_range,param->alter_weight);
-	}else if(byg_start("simple",param->alignment_type) != -1){
-		map =  simple_hirschberg_alignment(aln,tree,submatrix, map);*/
-	}else if(byg_start("advanced",param->alignment_type) != -1){
-		map =  advanced_hirschberg_alignment(aln,tree,submatrix, map,param->smooth_window,param->smooth_strength,param->internal_gap_weight);
-	}else{
-		map =  hirschberg_alignment(aln,tree,submatrix, map,param->smooth_window,param->smooth_strength);
-	}
-	
-	
-	//clear up sequence array to be reused as gap array....
-	int *p = 0;
-	for (i = 0; i < numseq;i++){
-		p = aln->s[i];
-		for (a = 0; a < aln->sl[i];a++){
-			p[a] = 0;
-		}
-	}
-	//clear up
-	
-	for (i = 0; i < (numseq-1)*3;i +=3){
-		a = tree[i];
-		b = tree[i+1];
-		aln = make_seq(aln,a,b,map[tree[i+2]]);
-	}
-	
-	//for (i = 0; i < numseq;i++){
-	//	fprintf(stderr,"%s	%d\n",aln->sn[i],aln->nsip[i]);
-	//}
-
-	
-	for (i = 0; i < numseq;i++){
-		aln->nsip[i] = 0;
-	}
-	
-	
-	
-	aln =  sort_sequences(aln,tree,param->sort);
-
-	//for (i = 0; i < numseq;i++){
-	//	fprintf(stderr,"%d	%d	%d\n",i,aln->nsip[i],aln->sip[i][0]);
-	//}
-	
-	
-	output(aln,param);
-/*	if(!param->format){
-		fasta_output(aln,param->outfile);
-	}else{
-		if (byg_start("msf",param->format) != -1){
-			msf_output(aln,param->outfile);
-		}else if (byg_start("clustal",param->format) != -1){
-			clustal_output(aln,param->outfile);
-		}else if (byg_start("macsim",param->format) != -1){
-			macsim_output(aln,param->outfile,param->infile[0]);
-		}
-	}
-	free_param(param);*/
-	
-	free(map);
-	free(tree);
-	return 0;
-}
-
-
-

Deleted: trunk/packages/kalign/trunk/kalign2_mem.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_mem.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_mem.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,291 +0,0 @@
-/*
-	kalign2_mem.c 
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-
-void freesimpletree(struct tree_node* p)
-{
-	if(p->left){
-		freesimpletree(p->left);
-	}
-	if(p->right){
-		freesimpletree(p->right);
-	}
-	free(p);
-}
-
-void free_real_tree(struct aln_tree_node* p)
-{
-	int i = 0;
-	while(p->links[i]){
-		free_real_tree(p->links[i]);
-		i++;	
-	}
-	free(p->internal_lables);
-	free(p->links);
-	free(p);
-}
-
-
-void free_feature_matrix(struct feature_matrix* fm)
-{
-	int i;
-	for (i = 0;i < fm->mdim;i++){
-		free(fm->m[i]);
-	}
-	free(fm->m);
-	free(fm);
-}
-
-
-void free_utf(struct utype_ufeat* utf)
-{
-	free_ft(utf->t);
-	free_ft(utf->f);
-	free(utf);
-}
-
-/*#ifndef MEMORY 
-void* malloc(int size)
-{
-	void* p;
-	p = (void*)malloc(size);
-	
-	if (!p){
-		fprintf(stderr,"Out of memory!\n");
-		exit(0);
-	}
-	return p;
-}
-#endif*/
-struct names* names_alloc(struct names* n)
-{
-	int i;
-	n = malloc(sizeof(struct names));
-	n->start = malloc(sizeof(int)*numseq);
-	n->end = malloc(sizeof(int)*numseq);
-	n->len = malloc(sizeof(int)*numseq);
-	
-	for (i = 0; i < numseq;i++){
-		n->start[i] = 0;
- 		n->end[i] = 0;//aln->lsn[i];
- 		n->len[i] = 0;
-	}
-	return n;
-}
-
-void names_free(struct names* n)
-{
-	free(n->start);
-	free(n->end);
-	free(n->len);
-	free(n);
-}
-
-
-struct alignment* aln_alloc(struct alignment* aln)
-{
-	int i;
-	aln = (struct alignment*) malloc(sizeof(struct alignment));
-	aln->s = malloc(sizeof(int*) * (numseq ));
-	aln->seq = malloc(sizeof(char*) * (numseq ));
-	aln->ft =  malloc(sizeof(struct feature* ) * (numseq));
-	aln->si  =  malloc(sizeof(struct sequence_information* ) * (numseq));
-	aln->sl = malloc(sizeof(unsigned int) * (numprofiles));
-	aln->sip = malloc(sizeof(unsigned int*)* numprofiles);
-	
-	aln->nsip = malloc(sizeof(unsigned int)* numprofiles);
-	aln->sn = malloc(sizeof(char*) * numseq);
-	aln->lsn = malloc(sizeof(unsigned int) * numseq);
-	for (i =0;i < numprofiles;i++){
-		aln->sip[i] = 0;
-		aln->nsip[i] = 0;
-		aln->sl[i] = 0;
-	}
-	
-	for(i =0;i < numseq;i++){
-		aln->lsn[i] = 0;
-		aln->ft[i] = 0;
-		aln->si[i] = 0;
-		aln->sip[i] = malloc(sizeof(int)*1);
-		aln->nsip[i] = 1;
-		aln->sip[i][0] = i;
-	}
-	return aln;
-}
-
-
-void free_aln(struct alignment* aln)
-{
-	int i;
-	for (i = numseq;i--;){
-		free(aln->s[i]);
-		free(aln->seq[i]);
-		free(aln->sn[i]);
-	}
-
-	if(aln->ft){
-		for(i = numseq;i--;){
-			free_ft(aln->ft[i]);
-		}
-		free(aln->ft);
-	}
-	if(aln->si){
-		free(aln->si);
-	}
-
-	for (i = numprofiles;i--;){
-		if(aln->sip[i]){
-			free(aln->sip[i]);
-		}
-	}
-	free(aln->seq);
-	free(aln->s);
-	free(aln->sn);
-	free(aln->sl);
-	free(aln->lsn);
-	free(aln->sip);
-	free(aln->nsip);
-	free(aln);
-}
-
-
-void free_param(struct parameters* param)
-{
-	free(param->infile);
-	free(param);
-}
-
-void free_ft(struct feature* n)
-{
-	struct feature* old_n = 0;
-	 if (n != NULL){
-	 	old_n = n;
-	 	n= n ->next;
-	 	free(old_n->type);
-	 	free(old_n->note);
- 	 	free(old_n);
-		free_ft(n);
-	}
-}
-
-struct hirsch_mem* hirsch_mem_alloc(struct hirsch_mem* hm,int x)
-{
-
-	// a=((typeof(a))(((int)(((void *)malloc(c+15))+15))&-16)). 
-	hm = (struct hirsch_mem *) malloc(sizeof(struct hirsch_mem));
-	hm->starta = 0;
-	hm->startb = 0;
-	hm->enda = 0;
-	hm->endb = 0;
-	hm->size = x;
-	hm->len_a = 0;
-	hm->len_b = 0;
-	hm->f = malloc(sizeof(struct states)* (x+1));
-	hm->b = malloc(sizeof(struct states)* (x+1));
-	return hm;
-}
-
-struct hirsch_mem* hirsch_mem_realloc(struct hirsch_mem* hm,int x)
-{
-	hm->starta = 0;
-	hm->startb = 0;
-	hm->enda = 0;
-	hm->endb = 0;
-	hm->len_a = 0;
-	hm->len_b = 0;
-	hm->size = x;
-	hm->f = realloc(hm->f,sizeof(struct states)* (x+1));
-	hm->b = realloc(hm->b,sizeof(struct states)* (x+1));
-	return hm;
-}
-
-void hirsch_mem_free(struct hirsch_mem* hm)
-{
-	free(hm->f);
-	free(hm->b);
-	free(hm);
-}
-
-
-struct dp_matrix* dp_matrix_realloc(struct dp_matrix *dp,int x,int y)
-{
-	int i;
-	if (x > y){
-		y = x;
-	}else{
-		x =y;
-	}
-	if ( x > dp->x || y > dp->y){
-		//printf("REALLOCING:%d-%d	%d-%d\n",x,y,dp->x,dp->y);
-		i = 1;
-		while (i <= y){
-			i <<= 1;
-		//	printf("i:%d	y:%d\n",i,y);
-		}
-		y = i-1;
-		i = 1;
-		while (i <= x){
-			i <<= 1;
-			//printf("i:%d	y:%d\n",i,y);
-		}
-		x = i-1;
-		//printf("NEWX:%d	NEWY:%d\n",x,y);
-		dp->s = realloc(dp->s,sizeof(struct states)* (y+1));
-		dp->tb  = (char**) realloc (dp->tb,sizeof (char*)*(x+1));
-		dp->tb_mem = (void*) realloc(dp->tb_mem,sizeof(char) * (x+1) * (y+1));
-		dp->tb[0] = (char*) dp->tb_mem;
-  		for (i = 1; i <= x; i++){
-			dp->tb[i] = dp->tb[0] +(i*(y+1));
-		}
-		dp->x = x;
-		dp->y = y;
-	}
-	return dp;
-}
-
-struct dp_matrix* dp_matrix_alloc(struct dp_matrix *dp,int x,int y)
-{
-	int i;
-	dp = (struct dp_matrix *) malloc(sizeof(struct dp_matrix));
-	dp->x = x;
-	dp->y = y;
-	dp->s = malloc(sizeof(struct states)* (y+1));
-	dp->tb = (char**) malloc(sizeof(char*) * (x+1));
-	dp->tb_mem = (void *) malloc(sizeof(char) * (x+1) * (y+1));
-	dp->tb[0] = (char*) dp->tb_mem;
-	for ( i = 1; i <= x;i++){
-		dp->tb[i] = dp->tb[0] +(i*(y+1));
-	}
-	return dp;
-}
-
-void dp_matrix_free(struct dp_matrix *dp)
-{
-	free(dp->s);
-	free(dp->tb);
-	free(dp->tb_mem);
-	free(dp);
-}

Deleted: trunk/packages/kalign/trunk/kalign2_misc.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_misc.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_misc.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,741 +0,0 @@
-/*
-	kalign2_misc.c 
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-
-
-#include <string.h>
-#include <ctype.h>
-#include "kalign2.h"
-
-void print_tree(struct aln_tree_node* p,struct alignment* aln,char* outfile)
-{
-	FILE *fout = NULL;
-	if ((fout = fopen(outfile, "w")) == NULL){
-		fprintf(stderr,"can't open output\n");
-		exit(0);
-	}
-	//fprintf(stderr,"\n\n%s\n",outfile);
-	/*if(byg_start("xml",outfile) != -1){
-		fprintf(fout,"<?xml version=\"1.0\" encoding=\"UTF-8\"?> <phyloxml xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"http://www.phyloxml.org/schema/phyloxml.xsd\"><phylogeny>\n");
-		
-		print_phyloxml_tree(p,aln,fout);
-		
-		fprintf(fout,"</phylogeny></phyloxml>\n");
-		
-	}else{*/
-		print_newick_tree(p,aln,fout);
-		fprintf(fout,";");
-	//}
-	fclose(fout);
-}
-
-
-
-void print_newick_tree(struct aln_tree_node* p,struct alignment* aln,FILE *fout)
-{
-	int j;
-		
-	if(p->links[0]){
-	
-		fprintf(fout,"(");
-		print_newick_tree(p->links[0],aln,fout);
-	}
-	if(p->num < numseq){
-		//If you want to print the actual names of the sequences 
-		for (j = 0; j < aln->lsn[p->num];j++){
-			if(isspace((int)aln->sn[p->num][j])){
-				fprintf(fout,"_");
-			}else{
-				fprintf(fout,"%c",aln->sn[p->num][j]);
-			}
-		}
-		//If you want to print the just the number of the sequence
-		//fprintf(stdout,"%d",p->num);
-		
-	}else{
-		fprintf(fout,",");
-	}
-	if(p->links[1]){
-		print_newick_tree(p->links[1],aln,fout);
-		fprintf(fout,")");
-	}
-}
-
-void print_phyloxml_tree(struct aln_tree_node* p,struct alignment* aln,FILE *fout)
-{
-	int j;
-		
-	if(p->links[0]){
-	
-		fprintf(fout,"<clade>\n");
-		print_phyloxml_tree(p->links[0],aln,fout);
-	}
-	if(p->num < numseq){
-		//If you want to print the actual names of the sequences 
-		fprintf(fout,"<clade>\n<name>");
-		for (j = 0; j < aln->lsn[p->num];j++){
-			fprintf(fout,"%c",aln->sn[p->num][j]);
-		}
-		fprintf(fout,"</name>\n</clade>\n");
-		//If you want to print the just the number of the sequence
-		//fprintf(stdout,"%d",p->num);
-		
-	}else{
-		//fprintf(fout,",");
-	}
-	if(p->links[1]){
-		print_phyloxml_tree(p->links[1],aln,fout);
-		fprintf(fout,"</clade>\n");
-	}
-}
-
-struct alignment* sort_sequences(struct alignment* aln,int* tree,char* sort)
-{
-	int i,j,a,b,c;
-	int choice = 0;
-	
-	if(sort){
-		if (byg_start("input",sort) != -1){
-			choice = 0;
-		}else if (byg_start("tree",sort) != -1){
-			choice = 1;
-		}else if (byg_start("gaps",sort) != -1){
-			choice = 2;
-		}else{
-			choice = 3;
-		}
-	}
-	//fprintf(stderr,"COICE:%d\n",choice);
-	switch(choice){
-		case 0:
-			for (i = 0; i < numseq;i++){
-				aln->nsip[i] = i;
-			}
-			break;
-		case 1:
-			c = 0;
-			for (i = 0; i < (numseq-1)*3;i +=3){
-				//fprintf(stderr,"TREE %d	%d	%d\n",tree[i],tree[i+1],tree[i+2]);
-				if(tree[i]  < numseq){
-					aln->nsip[c] = tree[i];
-					c++;
-				}
-				if(tree[i+1]  < numseq){
-					aln->nsip[c] = tree[i+1];
-					c++;
-				}
-			}
-			break;
-		case 2:
-			for (i = 0; i < numseq;i++){
-				a = 1000000;
-				b = -1;
-				for (j =0; j<numseq;j++){
-					if(aln->nsip[j] < a){
-						a = aln->nsip[j];
-						b = j;
-					}
-				}	
-				tree[i] = b;
-				aln->nsip[b] = 1000000;
-			}
-			for (i = 0; i < numseq;i++){
-				aln->nsip[i] = tree[i];
-			}
-			break;
-		case 3:
-			aln = sort_in_relation(aln,sort);
-			break;
-		default:
-			for (i = 0; i < numseq;i++){
-				aln->nsip[i] = i;
-			}
-			break;
-	}
-	
-	/*for (i = 0; i < numseq;i++){
-		fprintf(stderr,"%d\n",aln->nsip[i]);
-	}*/
-	
-	return aln;
-}
-
-struct alignment* sort_in_relation(struct alignment* aln,char* sort)
-{
-	int i,j,c;
-	int target = -1;
-	int id = 0;
-	int positions = 0;
-	int posa = 0;
-	int posb = 0;
-	for (i = 0; i < numseq;i++){
-		if (byg_start(sort,aln->sn[i]) != -1){
-			target = i;
-			aln->sip[i][0] = 1000;
-			break;
-		}
-	}
-	if(target == -1){
-		target = 0;
-		aln->sip[0][0] = 1000;
-	}
-	for (i = 0; i < numseq;i++){
-		if(i != target){
-			posa = 0;
-			posb =0;
-			c = 0;
-			id = 0;
-			positions = 0;
-			for (j = 0; j < aln->sl[i];j++){
-				posa += aln->s[i][j]+1;
-				while(posa > posb){
-					posb += aln->s[target][c]+1;
-					c++;
-				}
-				if(posa == posb){
-					if((int) aln->seq[i][j] == (int) aln->seq[target][c-1]){
-						id += 1000;
-					}
-					positions += 1;
-				}
-			}
-			if(positions){
-				aln->sip[i][0] = id/positions;
-			}else{
-				aln->sip[i][0] = 0;
-			}
-		}
-	}
-	for (i = 0; i < numseq;i++){
-		aln->nsip[i] = i;
-	}
-	quickSort(aln, numseq);
-	return aln;
-}
-
-void quickSort(struct alignment* aln, int array_size)
-{
-	q_sort(aln, 0, array_size - 1);
-}
-
-void q_sort(struct alignment* aln, int left, int right)
-{
-	int pivot, l_hold, r_hold;
-	int pivot2;
-	l_hold = left;
-	r_hold = right;
-	pivot2 = aln->nsip[left];
-	pivot = aln->sip[left][0];// numbers[left];
-	while (left < right){
-		while ((aln->sip[right][0] <= pivot) && (left < right)){
-			right--;
-		}
-		if (left != right){
-			aln->sip[left][0] = aln->sip[right][0];
-			aln->nsip[left] = aln->nsip[right];
-			left++;
-		}
-		while ((aln->sip[left][0] >= pivot) && (left < right)){
-			left++;
-		}
-		if (left != right){
-			aln->sip[right][0] = aln->sip[left][0];
-			aln->nsip[right] = aln->nsip[left];
-			right--;
-		}
-	}
-	aln->sip[left][0] = pivot;
-	aln->nsip[left] = pivot2;
-	pivot = left;
-	left = l_hold;
-	right = r_hold;
-	if (left < pivot){
-		q_sort(aln, left, pivot-1);
-	}
-	if (right > pivot){
-		q_sort(aln, pivot+1, right);
-	}
-}
-
-int* readtree(struct aln_tree_node* p,int* tree)
-{
-	if(p->links[0]){
-		tree = readtree(p->links[0],tree);
-	}
-	if(p->links[1]){
-		tree = readtree(p->links[1],tree);
-	}
-	
-	if(p->links[0]){
-		if(p->links[1]){
-			tree[tree[0]] = p->links[0]->num;
-			tree[tree[0]+1] = p->links[1]->num;
-			tree[tree[0]+2] = p->num;
-			tree[0] +=3;
-			free(p->links[0]->internal_lables);
-			free(p->links[0]->links);
-			free(p->links[0]);
-			free(p->links[1]->internal_lables);
-			free(p->links[1]->links);
-			free(p->links[1]);
-		}
-	}
-	return tree;
-}
-
-struct alignment* make_dna(struct alignment* aln)
-{
-
-	//int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
-	int i,j;
-	int* p;
-	
-	for(i = 0;i < numseq;i++){
-		p = aln->s[i];
-		for (j = 0; j < aln->sl[i];j++){
-			switch(p[j]){
-				case 2: //C
-					p[j] = 1;
-					break;
-				case 6: //G
-					p[j] = 2;
-					break;
-				case 17: //T  or U 
-					p[j] = 3;
-					break;
-				case 12: // N
-					p[j] = 4;
-					break;
-				case 20: // X
-					p[j] = 4;
-					break;
-				case 23://O whatever that is...
-					p[j] = 4;
-					break;
-			}
-		//	printf("%d\n",p[j]);
-		}
-	}
-	return aln;
-}
-
-float** read_matrix(float** subm,struct parameters* param)
-{
-	int i,j;
-	int m_pos = 0;
-	short *matrix_pointer = 0;
-	short blosum50mt[]={
-  5,
- -2,  5,
- -1, -3, 13,
- -2,  5, -4,  8,
- -1,  1, -3,  2,  6,
- -3, -4, -2, -5, -3,  8,
-  0, -1, -3, -1, -3, -4,  8,
- -2,  0, -3, -1,  0, -1, -2, 10,
- -1, -4, -2, -4, -4,  0, -4, -4,  5,
- -1,  0, -3, -1,  1, -4, -2,  0, -3,  6,
- -2, -4, -2, -4, -3,  1, -4, -3,  2, -3,  5,
- -1, -3, -2, -4, -2,  0, -3, -1,  2, -2,  3,  7,
- -1,  4, -2,  2,  0, -4,  0,  1, -3,  0, -4, -2,  7,
- -1, -2, -4, -1, -1, -4, -2, -2, -3, -1, -4, -3, -2, 10,
- -1,  0, -3,  0,  2, -4, -2,  1, -3,  2, -2,  0,  0, -1,  7,
- -2, -1, -4, -2,  0, -3, -3,  0, -4,  3, -3, -2, -1, -3,  1,  7,
-  1,  0, -1,  0, -1, -3,  0, -1, -3,  0, -3, -2,  1, -1,  0, -1,  5,
-  0,  0, -1, -1, -1, -2, -2, -2, -1, -1, -1, -1,  0, -1, -1, -1,  2,  5,
-  0, -4, -1, -4, -3, -1, -4, -4,  4, -3,  1,  1, -3, -3, -3, -3, -2,  0,  5,
- -3, -5, -5, -5, -3,  1, -3, -3, -3, -3, -2, -1, -4, -4, -1, -3, -4, -3, -3, 15,
- -1, -1, -2, -1, -1, -2, -2, -1, -1, -1, -1, -1, -1, -2, -1, -1, -1,  0, -1, -3, -1,
- -2, -3, -3, -3, -2,  4, -3,  2, -1, -2, -1,  0, -2, -3, -1, -1, -2, -2, -1,  2, -1,  8,
- -1,  2, -3,  1,  5, -4, -2,  0, -3,  1, -3, -1,  0, -1,  4,  0,  0, -1, -3, -2, -1, -2,  5};
- 
-	short blosum62mt[]={
-  40,
- -20,  40,
-  0, -30,  90,
- -20,  40, -30,  60,
- -10,  10, -40,  20,  50,
- -20, -30, -20, -30, -30,  60,
-  0, -10, -30, -10, -20, -30,  60,
- -20,  0, -30, -10,  0, -10, -20,  80,
- -10, -30, -10, -30, -30,  0, -40, -30,  40,
- -10,  0, -30, -10,  10, -30, -20, -10, -30,  50,
- -10, -40, -10, -40, -30,  0, -40, -30,  20, -20,  40,
- -10, -30, -10, -30, -20,  0, -30, -20,  10, -10,  20,  50,
- -20,  30, -30,  10,  0, -30,  0,  10, -30,  0, -30, -20,  60,
- -10, -20, -30, -10, -10, -40, -20, -20, -30, -10, -30, -20, -20,  70,
- -10,  0, -30,  0,  20, -30, -20,  0, -30,  10, -20,  0,  0, -10,  50,
- -10, -10, -30, -20,  0, -30, -20,  0, -30,  20, -20, -10,  0, -20,  10,  50,
-  10,  0, -10,  0,  0, -20,  0, -10, -20,  0, -20, -10,  10, -10,  0, -10,  40,
-  0, -10, -10, -10, -10, -20, -20, -20, -10, -10, -10, -10,  0, -10, -10, -10,  10,  50,
-  0, -30, -10, -30, -20, -10, -30, -30,  30, -20,  10,  10, -30, -20, -20, -30, -20,  0,  40,
- -30, -40, -20, -40, -30,  10, -20, -20, -30, -30, -20, -10, -40, -40, -20, -30, -30, -20, -30, 110,
-  0, -10, -20, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -20, -10, -10,  0,  0, -10, -20, -10,
- -20, -30, -20, -30, -20,  30, -30,  20, -10, -20, -10, -10, -20, -30, -10, -20, -20, -20, -10,  20, -10,  70,
- -10,  10, -30,  10,  40, -30, -20,  0, -30,  10, -30, -10,  0, -10,  30,  0,  0, -10, -20, -30, -10, -20,  40};
-	
-	short gon250mt[]={
-	24,
-	0,   0,
-	5,   0, 115,
-	-3,   0, -32,  47,
-	 0,   0, -30,  27,  36,
-	-23,   0,  -8, -45, -39,  70,
-	5,   0, -20,   1,  -8, -52,  66,
-	-8,   0, -13,   4,   4,  -1, -14,  60,
-	-8,   0, -11, -38, -27,  10, -45, -22,  40,
-	-4,   0, -28,   5,  12, -33, -11,   6, -21,  32,
-	-12,   0, -15, -40, -28,  20, -44, -19,  28, -21,  40,
-	-7,   0,  -9, -30, -20,  16, -35, -13,  25, -14,  28,  43,
-	-3,   0, -18,  22,   9, -31,   4,  12, -28,   8, -30, -22,  38,
-	 3,   0, -31,  -7,  -5, -38, -16, -11, -26,  -6, -23, -24,  -9,  76,
-	-2,   0, -24,   9,  17, -26, -10,  12, -19,  15, -16, -10,   7,  -2,  27,
-	-6,   0, -22,  -3,   4, -32, -10,   6, -24,  27, -22, -17,   3,  -9,  15,  47,
-	11,   0,   1,   5,   2, -28,   4,  -2, -18,   1, -21, -14,   9,   4,   2,  -2,  22,
-	 6,   0,  -5,   0,  -1, -22, -11,  -3,  -6,   1, -13,  -6,   5,   1,   0,  -2,  15,  25,
-	 1,   0,   0, -29, -19,   1, -33, -20,  31, -17,  18,  16, -22, -18, -15, -20, -10,   0,  34,
-	-36,   0, -10, -52, -43,  36, -40,  -8, -18, -35,  -7, -10, -36, -50, -27, -16, -33, -35, -26, 142,
-	0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-	-22,   0,  -5, -28, -27,  51, -40,  22,  -7, -21,   0,  -2, -14, -31, -17, -18, -19, -19, -11,  41,   0,  78,
-	 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0};
-	if(param->sub_matrix){
-		if(byg_start(param->sub_matrix,"blosum62BLOSUM62") != -1){
-			matrix_pointer = blosum62mt;
-			//m_pos = 0;
-			//for (i = 0;i < 23;i++){
-			//	for (j = 0;j <= i;j++){
-			//		matrix_pointer[m_pos] = matrix_pointer[m_pos] * 10;
-			//		m_pos++;
-			//	}
-			//}
-			gpo = 55;
-			gpe = 8;
-			tgpe = 1;
-		}
-		if(byg_start(param->sub_matrix,"blosum50BLOSUM50") != -1){
-			matrix_pointer = blosum50mt;
-			m_pos = 0;
-			for (i = 0;i < 23;i++){
-				for (j = 0;j <= i;j++){
-					matrix_pointer[m_pos] = matrix_pointer[m_pos] * 10;
-					m_pos++;
-				}
-			}
-			gpo = 55;
-			gpe = 8;
-			tgpe = 1;
-		}
-		//vogt....
-		
-	}else{
-		if(!param->dna){
-			// gpo:5.494941        gpe:0.852492        tgpe:0.442410       bonus: 3.408872     z-cutoff: 58.823309 -> 0.829257 accuracy on bb3 
-			gpo = 54.94941;
-			gpe = 8.52492;
-			tgpe = 4.42410;
-			
-			//gpo = 54;
-			//gpe = 8;
-			//tgpe = 4;
-			//-gpo 10.9898        -gpe 0.852492      -tgpe  0.442410    -bonus    0.2   -zcutoff     58.823309  
-		//	param->secret = 0.2;
-			matrix_pointer = gon250mt;
-		}else{
-			//gpo = 400;
-		//	gpe =  30;
-			//tgpe = 30;
-			
-			//param->gpo = 43.4;
-			//param->gpe = 3.94;
-			//param->tgpe = 29.26;
-			
-			gpo = 43.4 *5;
-			gpe = 39.4;
-			tgpe =  292.6;
-			//param->secret = 28.3;
-			param->zlevel = 61.08;
-			param->internal_gap_weight = 49.14;
-			
-		}
-	}
-	if(param->gpo!= -1){
-		param->gpo *= 5;
-		gpo = param->gpo;
-	}
-	if(param->gpe != -1){
-		param->gpe *= 10;
-		gpe = param->gpe;
-	}
-	if(param->tgpe != -1){
-		param->tgpe *= 10;
-		tgpe = param->tgpe;
-	}
-
-	if(param->secret != -1){
-		param->secret *= 10;
-	}else{
-		if(!param->dna){
-			param->secret = 0.2;
-		}else{
-			param->secret = 283.0;
-		}
-	}
-
-	
-	//fprintf(stderr,"%d	%d	%d	%d\n",gpo,gpe,tgpe,	 (int)param->secret);
-	subm = malloc(sizeof (float*) * 32);
-	for (i = 32;i--;){
-		subm[i] = malloc(sizeof(float) * 32);
-		for (j = 32;j--;){
-			subm[i][j] = param->secret;//0;//gpe << 1;//-5;// better on Balibase
-		}
-	}
-	if(param->dna){
-		/*subm[0][0] += 10;
-		subm[0][1] += 6;
-		subm[1][0] += 6;
-		subm[1][1] += 10;
-		subm[2][2] += 10;
-		subm[2][3] += 6;
-		subm[3][2] += 6;
-		subm[3][3] += 10;*/
-//		     A    C    G    T    .    N
-//	A   91 -114  -31 -123    0  -43
-		subm[0][0] += 91;
-		subm[0][1] += -114;
-		subm[0][2] += -31;
-		subm[0][3] += -123;
-
-//	C -114  100 -125  -31    0  -43
-		subm[1][0] += -114;
-		subm[1][1] += 100;
-		subm[1][2] += -125;
-		subm[1][3] += -31;
-
-//	G  -31 -125  100 -114    0  -43
-		subm[2][0] += -31;
-		subm[2][1] += -125;
-		subm[2][2] += 100;
-		subm[2][3] += -114;
-
-//	T -123  -31 -114   91    0  -43
-		subm[3][0] += -123;
-		subm[3][1] += -31;
-		subm[3][2] += -114;
-		subm[3][3] += 91;
-
-//	.    0    0    0    0    0    0
-//	N  -43  -43  -43  -43    0  -43
-
-
-		/*for (i = 0; i < 4;i++){
-			for (j = 0;j < 4;j++){
-				if(i == j){
-					subm[i][j] += 1;
-				}else{
-					subm[i][j] -= 3;
-				}
-			}
-		}*/
-		
-	}else{
-
-		m_pos = 0;
-		for (i = 0;i < 23;i++){
-			for (j = 0;j <= i;j++){
-				if (i == j){
-				//	subm[i][j] += blosum62mt[m_pos]*10;
-					subm[i][j] += matrix_pointer[m_pos];
-				}else{
-				//	subm[i][j] += blosum62mt[m_pos]*10;
-				//	subm[j][i] += blosum62mt[m_pos]*10;
-					subm[i][j] += matrix_pointer[m_pos];
-					subm[j][i] += matrix_pointer[m_pos];
-				}
-				m_pos++;
-			}
-		}
-		/*for (i = 0; i < 23;i++){
-			for (j = 0; j < 23;j++){
-				fprintf(stderr,"%d ",subm[i][j]);
-			} 
-			fprintf(stderr,"\n");
-		}
-		fprintf(stderr,"\n");*/
-	}
-	return subm;
-}
-
-struct alignment* make_seq(struct alignment* aln,int a,int b,int* path)
-{
-	int c;
-	int i;
-	int posa = 0;
-	int posb = 0;
-
-	int* gap_a = 0;
-	int* gap_b = 0;
-
-	gap_a = malloc ((path[0]+1)*sizeof(int));
-	gap_b = malloc ((path[0]+1)*sizeof(int));
-
-	for (i = path[0]+1;i--;){
-		gap_a[i] = 0;
-		gap_b[i] = 0;
-	}
-	c = 1;
-	while(path[c] != 3){
-		if (!path[c]){
-			posa++;
-			posb++;
-		}
-		if (path[c] & 1){
-			gap_a[posa] += 1;
-			posb++;
-		}
-		if (path[c] & 2){
-			gap_b[posb] += 1;
-			posa++;
-		}
-		c++;
-	}	
-	for (i = aln->nsip[a];i--;){
-		update_gaps(aln->sl[aln->sip[a][i]],aln->s[aln->sip[a][i]],path[0],gap_a);
-	}
-	for (i = aln->nsip[b];i--;){
-		update_gaps(aln->sl[aln->sip[b][i]],aln->s[aln->sip[b][i]],path[0],gap_b);
-	}
-	free(gap_a);
-	free(gap_b);
-	free(path);
-	return aln;
-}
-
-
-void update_gaps(int old_len,int*gis,int new_len,int *newgaps)
-{
-	unsigned int i,j;
-	int add = 0;
-	int rel_pos = 0;
-	for (i = 0; i <= old_len;i++){
-		add = 0;
-		for (j = rel_pos;j <= rel_pos + gis[i];j++){
-			if (newgaps[j] != 0){
-				add += newgaps[j];
-			}
-		}
-		rel_pos += gis[i]+1;
-		gis[i] += add;
-	}
-}
-
-int* mirror_path(int* path)
-{
-	int c = 1;
-	while(path[c] != 3){
-		if (path[c] & 1){
-			path[c] += 1;
-		}else if (path[c] & 2){
-			path[c] -= 1;
-		}
-		c++;
-	}
-	return path;
-}
-
-struct node* insert(struct node *n, int pos)
-{
-        if (n == NULL){
-		n = (struct node*) malloc(sizeof(struct node));
-		n->next = 0;
-		n->pos = pos;
-	}else{
-		n->next = insert(n->next,pos);
-	}
-        return n;
-}
-
-struct bignode* big_insert_hash(struct bignode *n,const unsigned int pos)
-{
-	struct bignode* p = 0;
-	if(n){
-		if(n->num < NODESIZE){
-			n->pos[n->num] = pos;
-			n->num++;
-			return n;
-		}else{
-			p = (struct bignode*) malloc(sizeof(struct bignode));
-			p->pos[0] = pos;
-			p->num = 1;
-			p->next = n;
-		}
-	}else{
-		p = (struct bignode*) malloc(sizeof(struct bignode));
-		p->pos[0] = pos;
-		p->num = 1;
-		p->next = n;
-	}
-	return p;
-}
-
-void big_remove_nodes(struct bignode *n)
-{
-	struct bignode* p;
-	while(n){
-		p = n;
-		n = n->next;
-		free(p);
-	}
-}
-
-void big_print_nodes(struct bignode *n)
-{
-	int i;
-	while(n){
-		for (i = 0; i < n->num;i++){
-			fprintf(stderr,"%d ",n->pos[i]);
-		}
-		n = n->next;
-	}
-}
-
-struct node* insert_hash(struct node *n, int pos)
-{
-	struct node* p;
-	p = (struct node*) malloc(sizeof(struct node));
-	p->pos = pos;
-	p->next = n;
-	return p;
-}
-
-void remove_nodes(struct node *n)
-{
-	struct node* p;
-	while(n){
-		p = n;
-		n = n->next;
-		free(p);
-	}
-}

Deleted: trunk/packages/kalign/trunk/kalign2_output.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_output.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_output.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,662 +0,0 @@
-/*
-	kalign2_output.c
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-#include "kalign2_output.h"
-
-void output(struct alignment* aln,struct parameters* param)
-{
-	if(!param->format){
-		fasta_output(aln,param->outfile);
-	}else{
-		if (byg_start(param->format,"alnALNclustalCLUSTALclustalwCLUSTALWclustalWClustalW") != -1){
-			aln_output(aln,param);
-		}else if (byg_start(param->format,"msfMSFgcgGCGpileupPILEUP") != -1){
-			msf_output(aln,param->outfile);
-		}else if (byg_start(param->format,"eclu") != -1){
-			clustal_output(aln,param->outfile);
-		}else if (byg_start("macsim",param->format) != -1){
-			macsim_output(aln,param->outfile,param->infile[0]);
-		}else{
-			fasta_output(aln,param->outfile);
-		}
-	}
-	free_param(param);
-}
-
-void macsim_output(struct alignment* aln,char* outfile,char* infile)
-{
-	int i,j,f;
-	int tmp;
-	struct feature *fn = 0;
-	FILE *fout = NULL;
-	if(outfile){
-		if ((fout = fopen(outfile, "w")) == NULL){
-			fprintf(stderr,"can't open output\n");
-			exit(0);
-		}
-	}else{
-		fout = stdout; 
-	}
-	fprintf(fout,"<?xml version=\"1.0\"?>\n<!DOCTYPE macsim SYSTEM \"http://www-bio3d-igbmc.u-strasbg.fr/macsim.dtd\">\n<macsim>\n<alignment>\n<aln-name>");
-	if(infile){
-		fprintf(fout,"%s.kalign",infile);
-	}else{
-		fprintf(fout,"kalign alignment");
-	}
-	fprintf(fout,"</aln-name>\n");
-
-	for (i =0;i< numseq;i++){
-		//c = aln->sl[i];
-		f = aln->nsip[i];
-		
-		fprintf(fout,"<sequence seq-type=\"Protein\">\n");
-		fprintf(fout,"<seq-name>");
-		for (j =0; j < aln->lsn[f];j++){
-			if(!iscntrl((int)aln->sn[f][j])){
-				fprintf(fout,"%c",aln->sn[f][j]);
-			}
-		}
-		fprintf(fout,"</seq-name>");
-		fprintf(fout,"<seq-info>\n");
-		fprintf(fout,"<accession>1aab_</accession>\n");
-		fprintf(fout,"<nid>1aab_</nid>\n");
-		fprintf(fout,"<ec>0.0.0.0</ec>\n");
-		fprintf(fout,"<group>0</group>\n");
-		if(aln->ft){
-		if(aln->ft[f]){
-			
-			fprintf(fout,"<ftable>\n");
-			fn = aln->ft[f];
-			while(fn){
-				fprintf(fout,"<fitem><ftype>%s</ftype><fstart>%d</fstart><fstop>%d</fstop><fnote>%s</fnote></fitem>\n",fn->type,fn->start,fn->end,fn->note);
-				fn = fn->next;
-			}
-			fprintf(fout,"</ftable>\n</seq-info>\n");
-		}
-		}
-		fprintf(fout,"<seq-data>\n");
-
-		for (j = 0; j < aln->sl[f];j++){
-			tmp = aln->s[f][j];
-			while (tmp){
-				fprintf(fout,"-");
-				tmp--;
-			}
-			fprintf(fout,"%c",aln->seq[f][j]);
-		}
-		tmp =aln->s[f][aln->sl[f]];
-		while (tmp){
-			fprintf(fout,"-");
-			tmp--;
-		}
-		fprintf(fout,"\n");
-		fprintf(fout,"</seq-data>\n");
-		fprintf(fout,"</sequence>\n");
-	}
-	fprintf(fout,"</alignment>\n");
-	fprintf(fout,"</macsim>\n");
-	if(outfile){
-		fclose(fout);
-	}
-	free_aln(aln);
-}
-
-
-void msf_output(struct alignment* aln,char* outfile)
-{
-	int i,j,c,f,g;
-	int max = 0;
-	int aln_len = 0;
-	int tmp;
-	char** linear_seq = 0;
-	FILE *fout = NULL;
-	
-	linear_seq = malloc(sizeof(char*)*numseq);
-	
-	aln_len = 0;
-	for (j = 0; j <= aln->sl[0];j++){
-		aln_len+= aln->s[0][j];
-	}
-	aln_len += aln->sl[0];
-	
-	for (i =0;i< numseq;i++){
-		linear_seq[i] = malloc(sizeof(char)*(aln_len+1));
-		
-		c = 0;
-		for (j = 0; j < aln->sl[i];j++){
-			tmp = aln->s[i][j];
-			while (tmp){
-				linear_seq[i][c] ='-';
-				c++;
-				tmp--;
-			}
-			linear_seq[i][c] = aln->seq[i][j];
-			c++;
-		}
-		
-		tmp =aln->s[i][aln->sl[i]];
-		while (tmp){
-			linear_seq[i][c] ='-';
-			c++;
-			tmp--;
-		}		
-		linear_seq[i][c] = 0;
-	}
-
-	if(outfile){
-		if ((fout = fopen(outfile, "w")) == NULL){
-			fprintf(stderr,"can't open output\n");
-			exit(0);
-		}
-	}else{
-		fout= stdout;
-	}
-	fprintf(fout,"PileUp\n\n\n\n   MSF:   %d  Type: P    Check:  7038   ..\n\n",aln_len);
-
-	for (j = 0; j< numseq;j++){
-		if( aln->lsn[j] > max){
-			max = aln->lsn[j];
-		}
-	}
-
-	for (i = 0; i< numseq;i++){
-			f = aln->nsip[i];
-			fprintf(fout," Name: ");
-			for (c = 0; c < aln->lsn[f];c++){
-				if(!iscntrl((int)aln->sn[f][c])){
-					fprintf(fout,"%c",aln->sn[f][c]);
-				}
-			}
-			while(c < max+3){
-				fprintf(fout," ");
-				c++;
-			}
-			fprintf(fout,"Len:   ");
-			fprintf(fout,"%d",aln_len);
-			fprintf(fout,"  Check:  2349  Weight:  1.00\n");
-			
-	}
-	fprintf(fout,"\n\n//\n\n");
-
-	for (i = 0; i+60 < aln_len;i +=60){
-		for (j = 0; j< numseq;j++){
-			f = aln->nsip[j];
-			for (c = 0; c < aln->lsn[f];c++){
-				if(!iscntrl((int)aln->sn[f][c])){
-					fprintf(fout,"%c",aln->sn[f][c]);
-				}
-			}
-			while(c < max+3){
-				fprintf(fout," ");
-				c++;
-			}
-			g = 1;
-			for (c = 0; c < 60;c++){
-				fprintf(fout,"%c",linear_seq[f][c+i]);
-				if (g == 10){
-					fprintf(fout," ");
-					g = 0;
-				}
-				g++;
-			}
-			fprintf(fout,"\n");
-			
-		}
-		fprintf(fout,"\n\n");
-	}
-	for (j = 0; j< numseq;j++){
-		f = aln->nsip[j];
-		
-		for (c = 0; c< aln->lsn[f];c++){
-			if(!iscntrl((int)aln->sn[f][c])){
-				fprintf(fout,"%c",aln->sn[f][c]);
-			}
-		}
-		
-		while(c < max+3){
-			fprintf(fout," ");
-			c++;
-		}
-		
-		g = 1;
-		for (c = i; c< aln_len;c++){
-			fprintf(fout,"%c",linear_seq[f][c]);
-			if (g == 10){
-				fprintf(fout," ");
-				g = 0;
-			}
-			g++;
-		}
-		fprintf(fout,"\n");
-	
-	}
-	fprintf(fout,"\n\n");
-	if(outfile){
-		fclose(fout);
-	}
-	
-	for (i =0;i< numseq;i++){
-		free(linear_seq[i]);
-	}
-	
-	free(linear_seq);
-	free_aln(aln);
-}
-
-
-void clustal_output(struct alignment* aln,char* outfile)
-{
-	int i,j,c,f;
-	int tmp;
-	int aln_len = 0;
-	char** linear_seq = 0;
-	
-	FILE* fout = NULL;
-	
-	linear_seq = malloc(sizeof(char*)*numseq);
-
-	aln_len = 0;
-	
-	for (j = 0; j <= aln->sl[0];j++){
-		aln_len+= aln->s[0][j];
-	}
-	
-	aln_len += aln->sl[0];
-	
-	for (i =0;i< numseq;i++){
-		linear_seq[i] = malloc(sizeof(char)*(aln_len+1));
-		
-		c = 0;
-		for (j = 0; j < aln->sl[i];j++){
-			tmp = aln->s[i][j];
-			while (tmp){
-				linear_seq[i][c] ='-';
-				c++;
-				tmp--;
-			}
-			linear_seq[i][c] = aln->seq[i][j];
-			c++;
-		}
-		
-		tmp =aln->s[i][aln->sl[i]];
-		while (tmp){
-			linear_seq[i][c] ='-';
-			c++;
-			tmp--;
-		}		
-		linear_seq[i][c] = 0;
-	}
-
-
-	if(outfile){
-		if ((fout = fopen(outfile, "w")) == NULL){
-			fprintf(stderr,"can't open output\n");
-			exit(0);
-		}
-	}else{
-		fout = stdout;
-	}
-
-	fprintf(fout,"Kalign (2.0) alignment in ClustalW format\n\n\n");
-
-
-	for (i = 0; i+60 < aln_len;i +=60){
-		for (j = 0; j< numseq;j++){
-			f = aln->nsip[j];
-			for (c = 0; c < aln->lsn[f];c++){
-				if(!iscntrl((int)aln->sn[f][c])){
-					fprintf(fout,"%c",aln->sn[f][c]);
-				}
-			}
-			while(c < 18){
-				fprintf(fout," ");
-				c++;
-			}
-			
-			for (c = 0; c < 60;c++){
-				fprintf(fout,"%c",linear_seq[f][c+i]);
-			}
-			fprintf(fout,"\n");
-		}
-		fprintf(fout,"\n\n");
-	}
-	for (j = 0; j< numseq;j++){
-		f = aln->nsip[j];
-		for (c = 0; c< aln->lsn[f];c++){
-			if(!iscntrl((int)aln->sn[f][c])){
-				fprintf(fout,"%c",aln->sn[f][c]);
-			}
-		}
-		while(c < 18){
-			fprintf(fout," ");
-			c++;
-		}
-	
-		for (c = i; c< aln_len;c++){
-			fprintf(fout,"%c",linear_seq[f][c]);
-		}
-		fprintf(fout,"\n");
-	}
-	fprintf(fout,"\n\n");
-	if(outfile){
-		fclose(fout);
-	}
-	for (i =0;i< numseq;i++){
-		free(linear_seq[i]);
-	}
-	free(linear_seq);
-	free_aln(aln);
-}
-
-void aln_output(struct alignment* aln,struct parameters* param)
-{
-	char* outfile = param->outfile;
-	int i,j,c,f;
-	int tmp;
-	int aln_len = 0;
-	
-	//int namestart = 0;
-	int max_name_len = 20;
-	int tmp_len = 0;
-	char** linear_seq = 0;
-	
-	struct names* n;
-	
-	n = get_meaningful_names(aln,param->id);
-	
-	//namestart = get_meaningful_names(aln,param->id);
-	
-	c = -1;
-	for (i = 0; i< numseq;i++){
-		if(n->len[i] > c){
-			c = n->len[i];
-		}
-		/*f = 0;
-		for (j = namestart;j < aln->lsn[i];j++){
-			if(isspace((int)aln->sn[i][j])){
-				break;
-			}
-			f++;
-		}
-		if(f > c){
-			c = f;
-		}
-		}*/
-	}
-	
-	if(c < max_name_len){
-		max_name_len = c;//this is know the maximum length of a unique name isdjgbv skj
-	}
-		
-	FILE* fout = NULL;
-	
-	linear_seq = malloc(sizeof(char*)*numseq);
-
-	aln_len = 0;
-	for (j = 0; j <= aln->sl[0];j++){
-		aln_len+= aln->s[0][j];
-	}
-	aln_len += aln->sl[0];
-	
-	for (i =0;i< numseq;i++){
-		linear_seq[i] = malloc(sizeof(char)*(aln_len+1));
-		
-		c = 0;
-		for (j = 0; j < aln->sl[i];j++){
-			tmp = aln->s[i][j];
-			while (tmp){
-				linear_seq[i][c] ='-';
-				c++;
-				tmp--;
-			}
-			linear_seq[i][c] = aln->seq[i][j];
-			c++;
-		}
-		
-		tmp =aln->s[i][aln->sl[i]];
-		while (tmp){
-			linear_seq[i][c] ='-';
-			c++;
-			tmp--;
-		}		
-		linear_seq[i][c] = 0;
-	}
-	
-	if(outfile){
-		if ((fout = fopen(outfile, "w")) == NULL){
-			fprintf(stderr,"can't open output\n");
-			exit(0);
-		}
-	}else{
-		fout = stdout;
-	}
-	
-	fprintf(fout,"Kalign (2.0) alignment in ClustalW format\n\n\n");
-
-	for (i = 0; i+60 < aln_len;i +=60){
-		for (j = 0; j< numseq;j++){
-			f = aln->nsip[j];
-			tmp_len = (max_name_len < n->len[f]) ? max_name_len:n->len[f];
-			for (c = 0; c < tmp_len;c++){
-				if(isspace((int)aln->sn[f][c+n->start[f]])){
-					break;
-				}
-				
-				if(!iscntrl((int)aln->sn[f][c+n->start[f]])){
-					fprintf(fout,"%c",aln->sn[f][c+n->start[f]]);
-				}
-			}
-			
-			while(c < max_name_len+5){
-				fprintf(fout," ");
-				c++;
-			}
-			
-			for (c = 0; c < 60;c++){
-				fprintf(fout,"%c",linear_seq[f][c+i]);
-			}
-			fprintf(fout,"\n");
-		}
-		fprintf(fout,"\n\n");
-	}
-	
-	for (j = 0; j< numseq;j++){
-		f = aln->nsip[j];
-		tmp_len = (max_name_len < n->len[f]) ? max_name_len:n->len[f];
-		for (c = 0; c< tmp_len;c++){
-			if(isspace((int)aln->sn[f][c+n->start[f]])){
-				break;
-			}
-			
-			if(!iscntrl((int)aln->sn[f][c+n->start[f]])){
-				fprintf(fout,"%c",aln->sn[f][c+n->start[f]]);
-			}
-		}
-		
-		while(c < max_name_len + 5){
-			fprintf(fout," ");
-			c++;
-		}
-	
-		for (c = i; c < aln_len;c++){
-			fprintf(fout,"%c",linear_seq[f][c]);
-		}
-		fprintf(fout,"\n");
-	}
-	fprintf(fout,"\n\n");
-	if(outfile){
-		fclose(fout);
-	}
-	
-	names_free(n);
-	
-	for (i =0;i< numseq;i++){
-		free(linear_seq[i]);
-	}
-	free(linear_seq);
-	free_aln(aln);
-}
-
-struct names* get_meaningful_names(struct alignment* aln,int id)
-{
-
-	struct names* n = 0;
-	int i,j,c;
-	int min_len = 0;
-	int start = 0;
-	int globalstart = 1000000;
-	
-	n = names_alloc(n);
-	for (i = 0; i < numseq;i++){
- 		n->end[i] = aln->lsn[i];
-	}
-	
-		
-	if (id == -1){
-		for(i =0; i < numseq-1;i++){
-			for (j = i+1; j < numseq;j++){
-				min_len = (aln->lsn[i] < aln->lsn[j])? aln->lsn[i] : aln->lsn[j];
-				start = 0;
-				for (c = 0; c < min_len;c++){
-					if(isalnum((int)aln->sn[i][c]) && isalnum((int)aln->sn[j][c])){
-						if( aln->sn[i][c] != aln->sn[j][c]){
-							break;
-						}
-					}else{
-						if(aln->sn[i][c] == aln->sn[j][c]){
-							if(aln->sn[i][c] != '_' && aln->sn[i][c] != '-'){
-								start = c+1;
-							}
-						}else{
-							break;
-						}
-					}
-				}
-					
-				//fprintf(stderr,"%s\n%s\nstart: %d\n\n",aln->sn[i],aln->sn[j],start);
-				
-				if (start < globalstart){
-					globalstart = start;
-				}
-			} 
-		}
-		for (i = 0; i < numseq;i++){
-			n->start[i] = globalstart;
-			for (j = n->start[i]; j < aln->lsn[i];j++){
-				if(!isalnum((int)aln->sn[i][j]) && aln->sn[i][j] != '_' && aln->sn[i][j] != '-'){
-					n->end[i] = j;
-					break;
-				}
-			}
-		}
-
-	}else{
-		for(i =0; i < numseq;i++){
-			start = 0;
-			min_len = 0;
-			for (j = 0; j < aln->lsn[i];j++){
-				if((isalnum((int)aln->sn[i][j]) || aln->sn[i][j] == '_' || aln->sn[i][j] == '-')&& start == 0 ){
-					n->start[i] = j;
-					min_len++;
-					start = 1;
-				}else if ((!isalnum((int)aln->sn[i][j]) && aln->sn[i][j] != '_' && aln->sn[i][j] != '-')&& start == 1) {
-					if(id == min_len){
-						n->end[i] = j;
-						break;
-					}
-					start = 0;
-			
-				}
-			}
-			if(id > min_len){
-				fprintf(stderr,"Warning: sequence %d has no %dth word in the identifier line:\n%s\n",i,id,aln->sn[i]);
-				n->start[i] = 0;
-			}
-		}
-	}	
-	
-	for (i = 0; i < numseq;i++){
-		//fprintf(stderr,"%s\n%d-%d\n",aln->sn[i],n->start[i],n->end[i]);
- 		n->len[i] = n->end[i] - n->start[i];
-	}
-	
-	return n;
-}
-
-
-void fasta_output(struct alignment* aln,char* outfile)
-{
-	int i,j,c,f;
-	int tmp;
-	FILE *fout = NULL;
-	if(outfile){
-		if ((fout = fopen(outfile, "w")) == NULL){
-			fprintf(stderr,"can't open output\n");
-			exit(0);
-		}
-	}else{
-		fout = stdout;
-	}
-	for (i = 0; i < numseq;i++){
-		f = aln->nsip[i];
-		fprintf(fout,">%s\n",aln->sn[f]);
-		c = 0;
-		for (j = 0; j < aln->sl[f];j++){
-			tmp = aln->s[f][j];
-			while (tmp){
-				fprintf(fout,"-");
-				c++;
-				if(c == 60){
-					fprintf(fout,"\n");
-					c = 0;
-				}
-				tmp--;
-			}
-			fprintf(fout,"%c",aln->seq[f][j]);
-			c++;
-			if(c == 60){
-				fprintf(fout,"\n");
-				c = 0;
-			}
-		}
-		tmp = aln->s[f][aln->sl[f]];
-		while (tmp){
-			fprintf(fout,"-");
-			c++;
- 			if(c == 60){
-				fprintf(fout,"\n");
-				c = 0;
-			}
-			tmp--;
-		}
-		fprintf(fout,"\n");
-	}
-	if(outfile){
-		fclose(fout);
-	}
-	free_aln(aln);
-}
-

Deleted: trunk/packages/kalign/trunk/kalign2_output.h
===================================================================
--- trunk/packages/kalign/trunk/kalign2_output.h	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_output.h	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,39 +0,0 @@
-/*
-	kalign2_output.h
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include <ctype.h>
-
-void aln_output(struct alignment* aln,struct parameters* param);
-void msf_output(struct alignment* aln,char* outfile);
-void fasta_output(struct alignment* aln,char* outfile);
-void clustal_output(struct alignment* aln,char* outfile);
-void macsim_output(struct alignment* aln,char* outfile,char* infile);
-
-struct names* get_meaningful_names(struct alignment* aln,int id);
-
-
-
-
-

Deleted: trunk/packages/kalign/trunk/kalign2_profile.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_profile.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_profile.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,918 +0,0 @@
-/*
-	kalign2_profile.c 
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-
-
-/*
-void add_feature_information_from_alignment(int* path,int* fprof1,int* fprof2,int weight)
-{
- 	int i = 0;
- 	int j = 0;
- 	int c = 1;
-	while(path[c] != 3){		
-		if (!path[c]){
-			fprof1[i] +=1;
-			fprof1[i+1] +=weight;
-			fprof2[j] +=1;
-			fprof2[j+1] +=weight;
-			i+=2;
-			j+=2;	
-		}
-		if (path[c] & 1){
-			j+=2;
-		}
-		if (path[c] & 2){
-			i+=2;		
-		}
-		c++;
-	}
-	free(path);
-}*/
-
-
-float* update2(const float* profa, const float* profb,float* newp,int* path,int sipa,int sipb,float internal_gap_weight)
-{
-	int i,c;
-	int* gap_len = 0;
-	int gap_cost = 0;
-	
-	gap_len = malloc(sizeof(int)* (path[0]+1));
-	gap_len[0] = 0;
-	
-	//fprintf(stderr,"%d len,,,,\n",path[0]);
-	for(i = 1; i <= path[0];i++){
-	//	fprintf(stderr,"%d,%d	",i,path[i]);
-		gap_len[i] = (path[i] >> 16);
-		path[i]  = path[i] & 0x0000ffff;
-	//	fprintf(stderr,"%d	%d\n",path[i],gap_len[i]);
-	}
-	//gap_len[path[0]] = 0;
-//	int len = 0;
-	c = 1;
-	
-	/*while(path[c] != 3){	
-		fprintf(stderr,"%d %d	%d\n",c,path[c],gap_len[c]);
-				
-		c++;
-	}
-	exit(0);*/
-
-
-	while(path[c] != 3){		
-		gap_cost = 0;
-		if (!path[c]){
-			while(!path[c] && path[c] != 3){
-		//		fprintf(stderr,"Align	%d	%d\n",c,path[c]);
-				for (i = 64; i--;){
-					newp[i] = profa[i] + profb[i];
-				}
-				profa += 64;
-				profb += 64;
-				newp += 64; 
-				c++;
-			}
-		}else if (path[c] & 1){
-			//fprintf(stderr,"%d\n",gap_len[c]);
-			if(path[c]  & 128){//N terminal gap !!!!!!1
-				for (i = 0; i < gap_len[c]-1;i++){
-					gap_cost += profb[29+64*i];
-			//		fprintf(stderr,"i:%d	%d\n",i,gap_cost);
-				}				
-				gap_cost += profb[27+64*i];
-			//	fprintf(stderr,"i:%d	%d\n",i,gap_cost);
-			}else if(path[c]  & 64){//c terminal gap !!!!!!1
-			//	fprintf(stderr,"c terminal gap\n");
-				gap_cost += profb[27+64];
-			//	fprintf(stderr,"i:%d	%d\n",0,gap_cost);
-				for (i = 1; i < gap_len[c];i++){
-					gap_cost += profb[29+64*i];
-			//		fprintf(stderr,"i:%d	%d\n",i,gap_cost);
-				}
-			}else{
-			//	fprintf(stderr,"middle gap\n");
-				gap_cost += profb[27+64];
-			//	fprintf(stderr,"i:%d	%d\n",0,gap_cost);
-				for (i = 1; i < gap_len[c]-1;i++){
-					gap_cost += profb[28+64*i];
-			//		fprintf(stderr,"i:%d	%d\n",i,gap_cost);
-				}
-				gap_cost += profb[27+64*i];
-			//	fprintf(stderr,"i:%d	%d\n",i,gap_cost);
-			}
-			//fprintf(stderr,"gap_A	%d	%d	length:%d	cost:%d\n",c,path[c],gap_len[c],gap_cost);
-			gap_cost /=  gap_len[c];
-			gap_cost *= internal_gap_weight;
-			
-			while(path[c] & 1 && path[c] != 3){
-		//		fprintf(stderr,"gap_A	%d	%d	cost:%d\n",c,path[c],gap_cost);
-				for (i = 64; i--;){
-					newp[i] = profb[i];
-				}
-				newp[23] += gap_cost;
-				for (i = 32; i < 55;i++){
-					newp[i] += gap_cost;
-				}
-				profb +=64;
-				newp += 64;
-				c++;
-			}		
-		}else if (path[c] & 2){
-			//fprintf(stderr,"%d\n",gap_len[c]);
-			if(path[c]  & 128){//N terminal gap !!!!!!1
-				for (i = 0; i < gap_len[c]-1;i++){
-					gap_cost += profa[29+64*i];
-			//		fprintf(stderr,"i:%d	%d\n",i,gap_cost);
-				}
-				gap_cost += profa[27+64*i];
-			//	fprintf(stderr,"i:%d	%d\n",i,gap_cost);
-			}else if(path[c]  & 64){//c terminal gap !!!!!!1
-			//	fprintf(stderr,"c terminal gap\n");
-				gap_cost += profa[27+64];
-			//	fprintf(stderr,"i:%d	%d\n",c-1,gap_cost);
-				for (i = 1; i < gap_len[c];i++){
-					gap_cost += profa[29+64*i];
-			//		fprintf(stderr,"i:%d	%d\n",i,gap_cost);
-				}
-			}else{
-			//	fprintf(stderr,"middle gap\n");
-				gap_cost += profa[27+64];
-			//	fprintf(stderr,"i:%d	%d\n",c-1,gap_cost);
-				for (i = 1; i < gap_len[c]-1;i++){
-					gap_cost += profa[28+64*i];
-			//		fprintf(stderr,"i:%d	%d\n",i,gap_cost);
-				}
-				gap_cost += profa[27+64*i];
-			//	fprintf(stderr,"i:%d	%d\n",i,gap_cost);
-			}
-			
-			gap_cost /=  gap_len[c];
-			
-			gap_cost *= internal_gap_weight;
-			
-			while(path[c] & 2 && path[c] != 3){
-		//		fprintf(stderr,"gap_b	%d	%d cost:%d\n",c,path[c],gap_cost);
-				for (i = 64; i--;){
-					newp[i] = profa[i];
-				}
-				newp[23] += gap_cost;
-				for (i = 32;i < 55;i++){
-					newp[i] += gap_cost;
-				}
-				profa +=64;
-				newp += 64;
-				c++;
-			}			
-		}
-	}
-	for (i = 64; i--;){
-		newp[i] =  profa[i] + profb[i];
-	}	
-	newp -= path[0] *64; 
-	
-	free(gap_len);
-	
-	return newp;
-}
-
-
-void smooth_gaps(float* prof,int len,int window,float strength)
-{
-	float tmp_gpo;
-	float tmp_gpe;
-	float tmp_tgpe;
-	int i,j;
-	if(!(window &1)){
-		window--;
-	}
-	for ( i = (window/2); i < len - (window/2);i++){
-		tmp_gpo = 0.0;
-		tmp_gpe = 0.0;
-		tmp_tgpe = 0.0;
-		for (j = -(window/2); j < (window/2);j++){
-			tmp_gpo += (float)prof[27+((i+j)*64)]*strength;
-			tmp_gpe += (float) prof[28+((i+j)*64)]*strength;
-			tmp_tgpe += (float) prof[29+((i+j)*64)]*strength;
-		}
-		tmp_gpo /= window;
-		tmp_gpe /= window;
-		tmp_tgpe /= window;
-		prof[27+(i*64)] =  prof[27+(i*64)]*(1.0-strength) + tmp_gpo;
-		prof[28+(i*64)] =  prof[28+(i*64)]*(1.0-strength) + tmp_gpe;
-		prof[29+(i*64)] =  prof[29+(i*64)]*(1.0-strength) + tmp_tgpe;
-	}
-}
-
-
-void increase_gaps(float* prof,int len,int window,float strength)
-{
-	float* mod = 0;
-	int i,j,c;
-	int start_pos = 0;
-	int end_pos = 0; 
-	
-	mod = malloc(sizeof(float)*window);
-	for ( i = 0; i < window;i++){
-		mod[i] = (strength - i*(float)strength / (float) window) - (0.5*strength);
-	}
-	//only gpo first....
-	for ( i = 0; i < len;i++){
-// 	//	fprintf(stderr,"(%0.2f:%0.2f) ",prof[26],prof[23]);
-		prof[26] = 0.0;
-		prof+= 64;
-	}
-	prof -= len << 6;
-	
-	
-	
-	for ( i = 0; i < len;i++){
-		
-		if(prof[23]!= 0){
-			
-			start_pos = i-window;
-			if(start_pos < 0){
-				c = start_pos + window;	
-			}else{
-				c = window;
-			}
-			
-			for ( j = c;j--;){
-				prof[26 - (64*(j+1))] +=  mod[j];
-			}
-			end_pos = i+window;
-			if(end_pos > len){
-				c = len - i;	
-			}else{
-				c = window;
-			}
-			//fprintf(stderr,"%d %d\n",i,c);
-			for (j = 0;j < c;j++){
-				prof[26 +(64*(j+1))] +=  mod[j];
-			}
-		}
-		prof+= 64;
-	}
-	prof -= len << 6;
-
-	for ( i = 0; i < len;i++){
-// 	//	fprintf(stderr,"(%0.2f:%0.2f) ",prof[26],prof[23]);
-		prof[27] = prof[27] * (prof[26]+1.0);
-		prof[28] = prof[28] * (prof[26]+1.0);
-		prof[29] = prof[29] * (prof[26]+1.0);
-		prof+= 64;
-	}
-	prof -= len << 6;
-	
-	free(mod);
-}
-
-
-void set_gap_penalties2(float* prof,int len,int nsip,int window,float strength)
-{
-	int i,j;
-	float tmp_gpo;
-	float tmp_gpe;
-	float tmp_tgpe;
-	
-	prof +=  (64 *(len));
-	
-	prof[27] = prof[55]*nsip*-gpo;
-	prof[28] = prof[55]*nsip*-gpe;
-	prof[29] = prof[55]*nsip*-tgpe;
-
-	i = len;
-	while(i--){
-		prof -= 64;
-		prof[27] = prof[55]*nsip*-gpo;
-		prof[28] = prof[55]*nsip*-gpe;
-		
-		prof[29] = prof[55]*nsip*-tgpe;
-	}
-	if(!(window &1)){
-		window--;
-	}
-	
-	
-	for ( i = (window/2); i < len - (window/2);i++){
-		tmp_gpo = 0.0;
-		tmp_gpe = 0.0;
-		tmp_tgpe = 0.0;
-		for (j = -(window/2); j < (window/2);j++){
-			tmp_gpo += (float)prof[27+((i+j)*64)]*strength;
-			tmp_gpe += (float) prof[28+((i+j)*64)]*strength;
-			tmp_tgpe += (float) prof[29+((i+j)*64)]*strength;
-		}
-		tmp_gpo /= window;
-		tmp_gpe /= window;
-		tmp_tgpe /= window;
-		prof[27+(i*64)] =  prof[27+(i*64)]*(1-strength) + tmp_gpo;
-		prof[28+(i*64)] =  prof[28+(i*64)]*(1-strength) + tmp_gpe;
-		prof[29+(i*64)] =  prof[29+(i*64)]*(1-strength) + tmp_tgpe;
-	}
-	
-	/*for ( i = 2; i < len-2;i++){
-                prof[27+(i*64)]  = (prof[27+((i-2)*64)] +prof[27+((i-1)*64)] + prof[27+(i*64)] + prof[27+((i+1)*64)] +prof[27+((i+2)*64)])/ 5;
-        }*/
-       /* for ( i = 2; i < len-2;i++){
-                prof[28+(i*64)]  = (prof[28+((i-2)*64)] + prof[28+((i-1)*64)] + prof[28+(i*64)] + prof[28+((i+1)*64)] +prof[28+((i+2)*64)])/ 5;
-        }
-        for ( i = 2; i < len-2;i++){
-                prof[29+(i*64)]  = (prof[29+((i-2)*64)] + prof[29+((i-1)*64)] + prof[29+(i*64)] + prof[29+((i+1)*64)] +prof[29+((i+2)*64)])/ 5;
-        }*/
-
-}
-
-
-
-float* make_profile2(float* prof, int* seq,int len,float** subm)
-{
-	int i,j,c;	
-	prof = malloc(sizeof(float)*(len+1)*64);
-	prof +=  (64 *len);
-	
-	for (i = 0;i < 64;i++){
-		prof[i] = 0;
-	}
-	prof[55] = 1;
-
-	i = len;
-	while(i--){
-		prof -= 64;
-
-		for (j = 0;j < 64;j++){
-			prof[j] = 0;
-		}
-		c = seq[i];
-		
-		prof[c] += 1;
-					
-		prof += 32;
-		for(j = 23;j--;){
-			prof[j] = subm[c][j];
-			
-		}
-		prof[23] = 1;
-		prof -= 32;
-
-	}
-	return prof;
-}
-
-
-float*  feature_update(const float* profa, const float* profb,float* newp,int* path,int stride)
-{
-	int i,c;
-	c = 1;
-	while(path[c] != 3){
-		if (!path[c]){
-			for (i = stride; i--;){
-				newp[i] = profa[i] + profb[i];
-			}
-			profa += stride;
-			profb += stride;
-		}
-		if (path[c] & 1){
-			for (i = stride; i--;){
-				newp[i] = profb[i];
-			}
-			profb += stride;	
-			
-		}
-		if (path[c] & 2){
-			for (i = stride; i--;){
-				newp[i] = profa[i];
-			}
-			profa+=stride;			
-		}
-		newp += stride;
-		c++;
-	}
-	for (i = stride; i--;){
-		newp[i] =  profa[i] + profb[i];
-	}	
-	newp -= path[0] *stride;
-	return newp;
-}
-
-float* make_wu_profile(float* prof,float* wu,int len)
-{
-	int i;	
-	
-	
-	prof = malloc(sizeof(float)*(len+1)*2);
-	
-	
-	for (i = 0;i < (len+1)*2;i++){
-		prof[i] = 0;
-	}
-	for (i = 0; i < len;i++){
-		if(!wu[i]){
-			prof[i<<1] = 1;
-			prof[(i<<1)+1] = 1;
-			
-		}else{
-			prof[i<<1] = wu[i]+1;
-			prof[(i<<1)+1] = wu[i]+1;
-		}
-	}
-	return prof;
-}
-
-
-float* make_feature_profile(float* prof,struct feature* f,int len,struct feature_matrix* fm)
-{
-	int i,j;	
-	
-	
-	prof = malloc(sizeof(int)*(len+1)*fm->stride);
-	
-	
-	for (i = 0;i < (len+1)*fm->stride;i++){
-		prof[i] = 0;
-	}
-	
-	while(f){
-		if(f->color != -1){
-			if(f->start < len && f->end < len){
-				for (i = f->start-1;i < f->end;i++){
-					prof[i*fm->stride + f->color] += 1;
-					for ( j =fm->mdim ;j < fm->stride;j++){
-						prof[i*fm->stride+j] += fm->m[f->color][j-fm->mdim];
-					}
-				}
-			}
-		}
-		f = f->next;
-	}	
-	return prof;
-}
-
-
-
-float* make_profile(float* prof, int* seq,int len, float** subm)
-{
-	int i,j,c;	
-	prof = malloc(sizeof(float)*(len+2)*64);
-	prof +=  (64 *(len+1));
-
-	for (i = 0;i < 64;i++){
-		prof[i] = 0;
-	}
-	prof[23+32] = -gpo;
-	prof[24+32] = -gpe;
-	prof[25+32] = -tgpe;
-
-	
-	i = len;
-	while(i--){
-		prof -= 64;
-
-		for (j = 0;j < 64;j++){
-			prof[j] = 0;
-		}
-		c = seq[i];
-		
-		prof[c] += 1;
-		
-		prof += 32;
-		
-		for(j = 23;j--;){
-			prof[j] = subm[c][j];
-		}
-		prof[23] = -gpo;
-		prof[24] = -gpe;
-		prof[25] = -tgpe;
-		
-		prof -= 32;
-	}
-	prof -= 64;
-	for (i = 0;i < 64;i++){
-		prof[i] = 0;
-	}
-	prof[23+32] = -gpo;
-	prof[24+32] = -gpe;
-	prof[25+32] = -tgpe;	
-	return prof;
-}
-
-float* dna_make_profile(float* prof, int* seq,int len,float** subm)
-//int* make_profile(int* prof, int* seq,int len)
-{
-	int i,j,c;	
-	prof = malloc(sizeof(float)*(len+2)*22);
-	prof +=  (22 *(len+1));
-	//fprintf(stderr,"Len:%d	%d\n",len,64*len);
-	//for (i = 64;i--;){
-	for (i = 0;i < 22;i++){
-		prof[i] = 0;
-	}
-	prof[5+11] = -gpo;
-	prof[6+11] = -gpe;
-	prof[7+11] = -tgpe;
-
-	
-	i = len;
-	while(i--){
-		prof -= 22;
-		//fprintf(stderr,"-64\n");
-		//for (j = 64; j--;){
-		for (j = 0;j < 22;j++){
-			prof[j] = 0;
-		}
-		c = seq[i];
-		
-		prof[c] += 1;
-		
-		//n = feature[i];
-		//prof[n+23] = 1;
-		
-		prof += 11;
-		for(j = 5;j--;){
-			prof[j] = subm[c][j];
-		}
-		prof[5] = -gpo;
-		prof[6] = -gpe;
-		prof[7] = -tgpe;
-		prof -= 11;
-	}
-	prof -= 22;
-	for (i = 0;i < 22;i++){
-		prof[i] = 0;
-	}
-	prof[5+11] = -gpo;
-	prof[6+11] = -gpe;
-	prof[7+11] = -tgpe;
-	
-	return prof;
-}
-
-
-
-
-float* update(const float* profa, const float* profb,float* newp,int* path,int sipa,int sipb)
-{
-	int i,j,c;
-	for (i = 64; i--;){
-		newp[i] = profa[i] + profb[i];
-	}
-	
-	profa += 64;
-	profb += 64;
-	newp += 64;
-
-	c = 1;
-	
-	while(path[c] != 3){
-		//Idea: limit the 'virtual' number of residues of one type to x.
-		// i.e. only allow a maximum of 10 alanines to be registered in each column
-		// the penalty for aligning a 'G' to this column will stay stable even when many (>10) alanines are present.
-		// the difference in score between the 'correct' (all alanine) and incorrect (alanines + glycine) will not increase 
-		// with the number of sequences. -> see Durbin pp 140
-		
-		if (!path[c]){
-			//fprintf(stderr,"Align	%d\n",c);
-			for (i = 64; i--;){
-				newp[i] = profa[i] + profb[i];
-			}
-				
-			
-			profa += 64;
-			profb += 64;
-		}
-		
-		if (path[c] & 1){
-			//fprintf(stderr,"Gap_A:%d\n",c);
-			//printf("open:%d	ext:%d	%d	%d\n",si->nsip[a] * gpo,si->nsip[a] * gpe,si->nsip[a] * profb[41],si->nsip[a] * profb[46]);
-			for (i = 64; i--;){
-				newp[i] = profb[i];
-			}
-			profb += 64;
-			#ifndef SIMPLE 
-			if(!(path[c] & 20)){
-				if(path[c] & 32){
-					newp[25] += sipa;//1;
-					i = tgpe*sipa;
-				}else{
-					newp[24] += sipa;//1;
-					i = gpe*sipa;
-				}
-				
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}else{
-			if (path[c] & 16){ 
-	//			fprintf(stderr,"close_open");
-				if(path[c] & 32){
-					newp[25] += sipa;//1;
-					i = tgpe*sipa;
-					newp[23] += sipa;//1;
-					i += gpo*sipa;
-				}else{
-					newp[23] += sipa;//1;
-					i = gpo*sipa;
-				}
-								
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			if (path[c] & 4){ 
-	//			fprintf(stderr,"Gap_open");
-				if(path[c] & 32){
-					newp[25] += sipa;//1;
-					i = tgpe*sipa;
-					newp[23] += sipa;//1;
-					i += gpo*sipa;
-				}else{
-					newp[23] += sipa;//1;
-					i = gpo*sipa;
-				}
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			}
-			#endif
-			
-			
-		}
-		if (path[c] & 2){
-			//fprintf(stderr,"Gap_B:%d\n",c);
-			//printf("open:%d	ext:%d	%d	%d\n",si->nsip[b] * gpo,si->nsip[b] * gpe,profa[26],profa[27]);
-			for (i = 64; i--;){
-				newp[i] = profa[i];
-			}
-			profa+=64;
-			#ifndef SIMPLE 
-			if(!(path[c] & 20)){
-				if(path[c] & 32){
-					newp[25] += sipb;//1;
-					i = tgpe*sipb;
-				}else{
-					newp[24] += sipb;//1;
-					i = gpe*sipb;
-				}
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}else{
-			if (path[c] & 16){
-	//			fprintf(stderr,"close_open");
-				if(path[c] & 32){
-					newp[25] += sipb;//1;
-					i =  tgpe*sipb;
-					newp[23] += sipb;//1;
-					i +=  gpo*sipb;
-				}else{
-					newp[23] += sipb;//1;
-					i =  gpo*sipb;
-				}
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			if (path[c] & 4){
-	//			fprintf(stderr,"Gap_open");
-				if(path[c] & 32){
-					newp[25] += sipb;//1;
-					i = tgpe*sipb;
-					newp[23] += sipb;//1;
-					i += gpo*sipb;
-				}else{
-					newp[23] += sipb;//1;
-					i = gpo*sipb;
-				}
-				
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			}
-			#endif
-			
-		}
-		newp += 64;
-		c++;
-	}
-	for (i = 64; i--;){
-		newp[i] =  profa[i] + profb[i];
-	}	
-	newp -= (path[0]+1) *64;
-	return newp;
-}
-
-float* dna_update(const float* profa, const float* profb, float* newp,int* path,int sipa,int sipb)
-{
-	int i,j,c;
-	
-	for (i = 22; i--;){
-		newp[i] = profa[i] + profb[i];
-	}
-	
-	profa += 22;
-	profb += 22;
-	newp += 22;
-	
-	
-	c = 1;
-	while(path[c] != 3){
-		//Idea: limit the 'virtual' number of residues of one type to x.
-		// i.e. only allow a maximum of 10 alanines to be registered in each column
-		// the penalty for aligning a 'G' to this column will stay stable even when many (>10) alanines are present.
-		// the difference in score between the 'correct' (all alanine) and incorrect (alanines + glycine) will not increase 
-		// with the number of sequences. -> see Durbin pp 140
-		
-		if (!path[c]){
-			//fprintf(stderr,"Align	%d\n",c);
-			for (i = 22; i--;){
-				newp[i] = profa[i] + profb[i];
-			}
-				
-			
-			profa += 22;
-			profb += 22;
-		}
-		if (path[c] & 1){
-			//fprintf(stderr,"Gap_A:%d\n",c);
-			//printf("open:%d	ext:%d	%d	%d\n",si->nsip[a] * gpo,si->nsip[a] * gpe,si->nsip[a] * profb[41],si->nsip[a] * profb[46]);
-			for (i = 22; i--;){
-				newp[i] = profb[i];
-			}
-			profb += 22;
-			if(!(path[c]&20)){
-				if(path[c]&32){
-					newp[7] += sipa;//1;
-					i = tgpe*sipa;
-				}else{
-					newp[6] += sipa;//1;
-					i = gpe*sipa;
-				}
-				
-				for (j = 11; j < 16;j++){
-					newp[j] -=i;
-				}
-			}else{
-			if (path[c] & 16){ 
-	//			fprintf(stderr,"close_open");
-				if(path[c]&32){
-					newp[7] += sipa;//1;
-					i = tgpe*sipa;
-					newp[5] += sipa;//1;
-					i += gpo*sipa;
-				}else{
-					newp[5] += sipa;//1;
-					i = gpo*sipa;
-				}
-								
-				for (j = 11; j < 16;j++){
-					newp[j] -=i;
-				}
-			}
-			if (path[c] & 4){ 
-	//			fprintf(stderr,"Gap_open");
-				if(path[c]&32){
-					newp[7] += sipa;//1;
-					i = tgpe*sipa;
-					newp[5] += sipa;//1;
-					i += gpo*sipa;
-				}else{
-					newp[5] += sipa;//1;
-					i = gpo*sipa;
-				}
-				for (j = 11; j < 16; j++){
-					newp[j] -=i;
-				}
-			}
-			}
-			
-			
-		}
-		if (path[c] & 2){
-			//fprintf(stderr,"Gap_B:%d\n",c);
-			//printf("open:%d	ext:%d	%d	%d\n",si->nsip[b] * gpo,si->nsip[b] * gpe,profa[26],profa[27]);
-			for (i = 22; i--;){
-				newp[i] = profa[i];
-			}
-			profa+=22;
-			if(!(path[c]&20)){
-				if(path[c]&32){
-					newp[7] += sipb;//1;
-					i = tgpe*sipb;
-				}else{
-					newp[6] += sipb;//1;
-					i = gpe*sipb;
-				}
-				for (j = 11; j < 16;j++){
-					newp[j] -=i;
-				}
-			}else{
-			if (path[c] & 16){
-	//			fprintf(stderr,"close_open");
-				if(path[c]&32){
-					newp[7] += sipb;//1;
-					i =  tgpe*sipb;
-					newp[5] += sipb;//1;
-					i +=  gpo*sipb;
-				}else{
-					newp[5] += sipb;//1;
-					i =  gpo*sipb;
-				}
-				for (j = 11; j < 16;j++){
-					newp[j] -=i;
-				}
-			}
-			if (path[c] & 4){
-	//			fprintf(stderr,"Gap_open");
-				if(path[c]&32){
-					newp[7] += sipb;//1;
-					i = tgpe*sipb;
-					newp[5] += sipb;//1;
-					i += gpo*sipb;
-				}else{
-					newp[5] += sipb;//1;
-					i = gpo*sipb;
-				}
-				
-				for (j = 11; j < 16;j++){
-					newp[j] -=i;
-				}
-			}
-			}
-			
-		}
-		newp += 22;
-		c++;
-	}
-	for (i = 22; i--;){
-		newp[i] =  profa[i] + profb[i];
-	}	
-	newp -= (path[0]+1) *22; 
-	return newp;
-}
-
-
-void dna_set_gap_penalties(float* prof,int len,int nsip)
-{
-	int i;
-	
-	prof +=  (22 *(len+1));
-	prof[8] = prof[16]*nsip;//gap open or close
-	prof[9] = prof[17]*nsip;//gap extention
-	
-	prof[10] = prof[18]*nsip;//gap open or close
-	//prof[30] = prof[58]*nsip;//gap extention
-	
-	
-	i = len+1;
-	while(i--){
-		prof -= 22;
-		prof[8] = prof[16]*nsip;//gap open or close
-		prof[9] = prof[17]*nsip;//gap extention
-		
-		prof[10] = prof[18]*nsip;//gap open or close
-	//	prof[30] = prof[58]*nsip;//gap extention	
-	}
-}
-
-void set_gap_penalties(float* prof,int len,int nsip)
-{
-	int i;
-	
-	prof +=  (64 *(len+1));
-	prof[27] = prof[55]*nsip;//gap open or close
-	prof[28] = prof[56]*nsip;//gap extention
-		
-	prof[29] = prof[57]*nsip;//gap open or close
-	i = len+1;
-	while(i--){
-		prof -= 64;
-		prof[27] = prof[55]*nsip;//gap open or close
-		prof[28] = prof[56]*nsip;//gap extention
-		
-		prof[29] = prof[57]*nsip;//gap open or close
-	}
-}
-

Deleted: trunk/packages/kalign/trunk/kalign2_profile_alignment.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_profile_alignment.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_profile_alignment.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,579 +0,0 @@
-/*
-	kalign2_profile_alignment.c
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-#include "kalign2_profile_alignment.h"
-#include "kalign2_hirschberg.h"
-
-void profile_alignment_main(struct alignment* aln,struct parameters* param,float** submatrix)
-{
-	float** dm = 0;
-	int* tree = 0;
-	struct aln_tree_node* tree2 = 0;
-	int i,j;
-	int tmp_numseq;
-	int tmp_numprofiles;
-	
-	local_numseq = 0;
-	local_numprofiles = 0;
-	
-	//determine number of profiles that were inputted....
-	
-	while(aln->sl[local_numseq+numseq]){
-		local_numseq++;
-	}
-	
-	local_numprofiles = (local_numseq << 1) - 1;
-	//fprintf(stderr,"%d	%d\n",local_numseq,local_numprofiles);
-	
-	for (i = 0;i < numseq;i++){
-	//	fprintf(stderr,"%d	%d	%d\n",i,aln->s[i][0],aln->s[i][1]);
-		aln->s[i] = assign_gap_codes(aln->s[i],aln->sl[i]); 
-	}
-	
-	if(param->dna == 1){
-		if(byg_start(param->tree,"njNJ") != -1){
-			dm =  dna_profile_distance(aln,dm,param,1);
-		}else{
-			dm =  dna_profile_distance(aln,dm,param,0);
-		}
-	}else{
-		if(byg_start(param->tree,"njNJ") != -1){
-			dm =  protein_profile_wu_distance(aln,dm,param,1);
-		}else{
-			dm =  protein_profile_wu_distance(aln,dm,param,0);
-		}
-	}
-	/*for ( i=0; i < local_numseq;i++){
-		for (j = 0;j < local_numseq;j++){
-			fprintf(stderr,"%f ",dm[i][j]);
-		}
-		fprintf(stderr,"\n");
-	}*/
-	
-	tmp_numseq = numseq;
-	tmp_numprofiles = numprofiles;
-	
-	numseq = local_numseq;
- 	numprofiles = local_numprofiles;
-	
-	if(byg_start(param->tree,"njNJ") != -1){
-		tree2 = real_nj(dm,param->ntree);
-	}else{
-		tree2 = real_upgma(dm,param->ntree);
-	}
-	
-	
-	
-	//WAs here need too add tree2 -> treee..... 
-	
-	
-	tree = malloc(sizeof(int)*(numseq*3+1));
-	for ( i = 1; i < (numseq*3)+1;i++){
-		tree[i] = 0;
-	}
-	tree[0] = 1;
-	tree = readtree(tree2,tree);
-	for (i = 0; i < (numseq*3);i++){
-		tree[i] = tree[i+1]+ tmp_numseq;
-	}
-	//exit(0);
-	
-	numseq = tmp_numseq;
-	numprofiles = tmp_numprofiles;
-	
-	int** map = 0;
-	
-	map =  hirschberg_profile_alignment(aln,tree,submatrix, map);
-	//clear up sequence array to be reused as gap array....
-	int *p = 0;
-	for (i = 0; i < numseq;i++){
-		p = aln->s[i];
-		for (j = 0; j < aln->sl[i];j++){
-			p[j] = 0;
-		}
-	}
-	//clear up
-	int a,b,c;
-	for (i = 0; i < (local_numseq-1)*3;i +=3){
-		a = tree[i];
-		b = tree[i+1];
-		c =  tree[i+2];
-		aln = make_seq(aln,a,b,map[c]);
-	}
-
-	for (i = 0; i < numseq;i++){
-		aln->nsip[i] = 0;
-	}
-	aln =  sort_sequences(aln,tree,param->sort);
-
-	//for (i = 0; i < numseq;i++){
-	//	fprintf(stderr,"%d	%d	%d\n",i,aln->nsip[i],aln->sip[i][0]);
-	//}
-	
-	
-	output(aln,param);
-	
-	
-	free(tree2->links);
-	free(tree2->internal_lables);
-	free(tree2);
-	
-
-	free(map);
-	free(tree);
-	exit(0);
-}
-
-
-int** hirschberg_profile_alignment(struct alignment* aln,int* tree,float**submatrix, int** map)
-{
-	struct hirsch_mem* hm = 0;
-	int i,j,g,a,b,c;
-	int len_a;
-	int len_b;
-	float** profile = 0;
-
-	profile = malloc(sizeof(float*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		profile[i] = 0;
-	}
-
-	map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		map[i] = 0;
-	}
-	
-	hm = hirsch_mem_alloc(hm,1024);
-
-	fprintf(stderr,"\nAlignment:\n");
-
-	for (i = 0; i < (local_numseq-1);i++){
-		a = tree[i*3];
-		b = tree[i*3+1];
-		c = tree[i*3+2];
-		fprintf(stderr,"\r%8.0f percent done",(float)(i) /(float)local_numseq * 100);
-		//fprintf(stderr,"Aligning:%d %d->%d	done:%f\n",a,b,c,((float)(i)/(float)local_numseq)*100);
-		len_a = aln->sl[a];
-		len_b = aln->sl[b];
-
-		
-		g = (len_a > len_b)? len_a:len_b;
-		map[c] = malloc(sizeof(int) * (g+2));
-		if(g > hm->size){
-			hm = hirsch_mem_realloc(hm,g);
-		}
-
-		for (j = 0; j < (g+2);j++){
-			map[c][j] = -1;
-		}
-		
-		if (a < numseq+local_numseq){
-			profile[a] = make_profile_from_alignment(profile[a],a,aln,submatrix);
-		}
-		if (b < numseq+local_numseq){
-			profile[b] = make_profile_from_alignment(profile[b],b,aln,submatrix);
-		}
-		
-		
-		set_gap_penalties(profile[b],len_b,aln->nsip[a]);
-		set_gap_penalties(profile[a],len_a,aln->nsip[b]);
-		
-		hm->starta = 0;
-		hm->startb = 0;
-		hm->enda = len_a;
-		hm->endb = len_b;
-		hm->len_a = len_a;
-		hm->len_b = len_b;
-		
-		hm->f[0].a = 0;
-		hm->f[0].ga =  -FLOATINFTY;
-		hm->f[0].gb = -FLOATINFTY;
-		hm->b[0].a = 0;
-		hm->b[0].ga =  -FLOATINFTY;
-		hm->b[0].gb =  -FLOATINFTY;
-	//	fprintf(stderr,"LENA:%d	LENB:%d	numseq:%d\n",len_a,len_b,numseq);
-		if(len_a < len_b){
-			map[c] = hirsch_pp_dyn(profile[a],profile[b],hm,map[c]);
-		}else{
-			hm->enda = len_b;
-			hm->endb = len_a;
-			hm->len_a = len_b;
-			hm->len_b = len_a;
-			map[c] = hirsch_pp_dyn(profile[b],profile[a],hm,map[c]);
-			map[c] = mirror_hirsch_path(map[c],len_a,len_b);
-		}
-		
-		map[c] = add_gap_info_to_hirsch_path(map[c],len_a,len_b);
-
-		if(i != local_numseq-2){
-			//fprintf(stderr,"updating....\n");
-			profile[c] = malloc(sizeof(float)*64*(map[c][0]+2));
-			profile[c] = update(profile[a],profile[b],profile[c],map[c],aln->nsip[a],aln->nsip[b]);
-		}
-			
-		aln->sl[c] = map[c][0];
-	
-		aln->nsip[c] = aln->nsip[a] + aln->nsip[b];
-		aln->sip[c] = malloc(sizeof(int)*(aln->nsip[a] + aln->nsip[b]));
-		g =0;
-		for (j = aln->nsip[a];j--;){
-			aln->sip[c][g] = aln->sip[a][j];
-			g++;
-		}
-		for (j = aln->nsip[b];j--;){
-			aln->sip[c][g] = aln->sip[b][j];
-			g++;
-		}
-
-		free(profile[a]);
-		free(profile[b]);
-	}
-	fprintf(stderr,"\r%8.0f percent done\n",100.0);
-	free(profile);
-	hirsch_mem_free(hm);
-	for (i = 32;i--;){
-		free(submatrix[i]);
-	}
-	free(submatrix);
-	return map;
-}
-
-
-int* assign_gap_codes(int* seq,int len)
-{
-	int i;
-	if(seq[0] < 0 && seq[1] < 0){
-		seq[0] = -2;
-	}
-	
-	for(i = 1; i < len;i++){
-		if(seq[i-1] < 0 && seq[i] < 0){
-			seq[i] = -2;
-		}
-		if(seq[i-1] < 0 && seq[i] >= 0){
-			seq[i-1] = -1;
-		}
-	}
-	i = 0;
-	while(seq[i] < 0){
-		if(seq[i] == -2){
-			seq[i] = -3;
-		}
-		i++;
-	}
-	i = len-1;
-	while(seq[i] < 0){
-		if(seq[i] == -2){
-			seq[i] = -3;
-		}
-		i--;
-	}
-
-	
-	return seq;
-}
-
-
-
-float* make_profile_from_alignment(float* prof, int num,struct alignment* aln,float** subm)
-{
-	int i,j,c;	
-	int a;
-	int len = aln->sl[num];
-	int* seq = 0;
-	prof = malloc(sizeof(float)*(len+2)*64);
-	for ( i = 0; i < (len+2)*64;i++){
-		prof[i] = 0;
-	}
-	
-	for ( a = 0; a < aln->nsip[num];a++){
-	//	fprintf(stderr,"SEQ:%d\n",a);
-		seq = aln->s[aln->sip[num][a]];
-		prof +=  (64 *(len+1));
-
-		prof[23+32] -= gpo;
-		prof[24+32] -= gpe;
-		prof[25+32] -= tgpe;
-	
-		
-		i = len;
-		while(i--){
-			prof -= 64;
-	
-			c = seq[i];
-			if(c >= 0){
-	//			if(i == 0){
-	//				fprintf(stderr,"%d	\n",c);
-	//			}
-				prof[c] += 1;
-				prof += 32;
-				for(j = 23;j--;){
-					prof[j] += subm[c][j];
-				}
-				prof[23] -= gpo;
-				prof[24] -= gpe;
-				prof[25] -= tgpe;
-				prof -= 32;
-			}else if(c == -1){
-				prof[23] += 1;
-				for (j = 32; j < 55;j++){
-					prof[j] -= gpo;
-				}
-			}else if(c == -2){
-				prof[24] += 1;
-				for (j = 32; j < 55;j++){
-					prof[j] -= gpe;
-				}
-			}else if(c == -3){
-				prof[25] += 1;
-				for (j = 32; j < 55;j++){
-					prof[j] -= tgpe;
-				}
-			}
-		}
-		prof -= 64;
-		prof[23+32] -= gpo;
-		prof[24+32] -= gpe;
-		prof[25+32] -= tgpe;
-	}
-	return prof;
-}
-
-
-float** protein_profile_wu_distance(struct alignment* aln,float** dm,struct parameters* param, int nj)
-{
-	struct bignode* hash[1024];
-	int*p =0;
-	int i,j,m,n,a,b;
-	unsigned int hv;
-		
-	int** local_seq = 0;
-	int* local_sl = 0;
-	
-	local_seq = malloc(sizeof(int*)*numseq);
-	local_sl = malloc(sizeof(int)*numseq);
-	for(i = 0; i< numseq;i++){
-		local_seq[i] = malloc(sizeof(int)*aln->sl[i]);
-		a = 0;
-		p = aln->s[i];
-		for (j = 0;j < aln->sl[i];j++){
-			if(p[j] >= 0){
-				local_seq[i][a] = p[j];
-				a++;
-			}
-		}
-		local_sl[i] = a;
-	}
-	//determine number of profiles that were inputted....
-
-	
-	for (i = 0;i < 1024;i++){
-		hash[i] = 0;
-	}	
-
-	if (nj){
-		dm = malloc (sizeof(float*)*local_numprofiles);
-		for (i = local_numprofiles;i--;){
-			dm[i] = malloc (sizeof (float)*(local_numprofiles));
-			for (j = local_numprofiles;j--;){
-				dm[i][j] = 0.0f;
-			}
-		}
-	}else{
-		dm = malloc (sizeof(float*)*local_numseq);
-		for (i = local_numseq;i--;){
-			dm[i] = malloc (sizeof (float)*(local_numseq));
-			for (j = local_numseq;j--;){
-				dm[i][j] = 0.0f;
-			}
-		}
-	}
-	fprintf(stderr,"Distance Calculation:\n");
-	b = (numseq*(numseq-1))/2;
-	a = 1;	
-	
-	//fprintf(stderr,"%d	%d	%8.0f\n",a,b,(float)a /(float)b * 100);
-		
-	for (i = 0; i < numseq-1;i++){
-		m = is_member(aln,i);
-		p = local_seq[i];
-		//p = malloc(sizeof(int)
-				
-		for (j = local_sl[i]-2;j--;){
-	//		hv = (p[j+1] << 5) + p[j+2];
-	//		hash[hv] = insert_hash(hash[hv],j);
-			hv = (p[j] << 5) + p[j+1];
-			hash[hv] = big_insert_hash(hash[hv],j);
-			
-			hv = (p[j] << 5) + p[j+2];
-			hash[hv] = big_insert_hash(hash[hv],j);
-		//	hv = (si->s[i][j+1] << 5) +t2;
-		//	hash[hv] = insert_hash(hash[hv],j);
-		}
-		for (j = i+1; j < numseq;j++){
-			n = is_member(aln,j);
-			if(n != m){
-				//fprintf(stderr,"%d	%d\n",n,m);
-				p = local_seq[j];
-				dm[m][n] += protein_wu_distance_calculation(hash,p,local_sl[j],local_sl[j]+local_sl[i],param->zlevel);
-				//fprintf(stderr,"%d-%d(%d	%d):%f\n",m,n,i,j,dm[m][n]);
-				//exit(0);
-				//dm[i][j] /= min;
-				dm[n][m] = dm[m][n];
-				
-			}
-			fprintf(stderr,"\r%8.0f percent done",(float)a /(float)b * 100);
-			a++;
-			
-		}
-		
-		
-		for (j = 1024;j--;){
-			if (hash[j]){
-				big_remove_nodes(hash[j]);
-				hash[j] = 0;
-			}
-		}	
-	}
-	
-	for(i = 0; i< numseq;i++){
-		free(local_seq[i]);
-	}
-	free(local_seq);
-	free(local_sl);
-	return dm;
-}
-
-float** dna_profile_distance(struct alignment* aln,float** dm,struct parameters* param, int nj)
-{
-	struct bignode* hash[1024];
-	
-	int *p = 0;
-	int i,j,a,b,m,n;
-	unsigned int hv;
-	int** local_seq = 0;
-	int* local_sl = 0;
-	
-	local_seq = malloc(sizeof(int*)*numseq);
-	local_sl = malloc(sizeof(int)*numseq);
-	for(i = 0; i< numseq;i++){
-		local_seq[i] = malloc(sizeof(int)*aln->sl[i]);
-		a = 0;
-		p = aln->s[i];
-		for (j = 0;j < aln->sl[i];j++){
-			if(p[j] >= 0){
-				local_seq[i][a] = p[j];
-				a++;
-			}
-		}
-		local_sl[i] = a;
-	}
-	
-	fprintf(stderr,"Distance Calculation:\n");
-	
-	
-	for (i = 0;i < 1024;i++){
-		hash[i] = 0;
-	}	
-
-	if (nj){
-		dm = malloc (sizeof(float*)*local_numprofiles);
-		for (i = local_numprofiles;i--;){
-			dm[i] = malloc (sizeof (float)*(local_numprofiles));
-			for (j = local_numprofiles;j--;){
-				dm[i][j] = 0.0f;
-			}
-		}
-	}else{
-		dm = malloc (sizeof(float*)*local_numseq);
-		for (i = local_numseq;i--;){
-			dm[i] = malloc (sizeof (float)*(local_numseq));
-			for (j = local_numseq;j--;){
-				dm[i][j] = 0.0f;
-			}
-		}
-	}
-
-	b = (numseq*(numseq-1))/2;
-	a = 1;	
-	
-	for (i = 0; i < numseq-1;i++){
-		m = is_member(aln,i);
-		p = local_seq[i];
-		for (j = local_sl[i]-5;j--;){
-			hv = ((p[j]&3)<<8) + ((p[j+1]&3)<<6) + ((p[j+2]&3)<<4)  + ((p[j+3]&3)<<2) + (p[j+4]&3);//ABCDE
-			hash[hv] = big_insert_hash(hash[hv],j);
-			hv = ((p[j]&3)<<8) + ((p[j+1]&3)<<6) + ((p[j+2]&3)<<4)  + ((p[j+3]&3)<<2) + (p[j+5]&3);//ABCDF
-			hash[hv] = big_insert_hash(hash[hv],j);
-			hv = ((p[j]&3)<<8) + ((p[j+1]&3)<<6) + ((p[j+2]&3)<<4)  + ((p[j+4]&3)<<2) + (p[j+5]&3);//ABCEF
-			hash[hv] = big_insert_hash(hash[hv],j);
-			hv = ((p[j]&3)<<8) + ((p[j+1]&3)<<6) + ((p[j+3]&3)<<4)  + ((p[j+4]&3)<<2) + (p[j+5]&3);//ABDEF
-			hash[hv] = big_insert_hash(hash[hv],j);
-			hv = ((p[j]&3)<<8) + ((p[j+2]&3)<<6) + ((p[j+3]&3)<<4) + ((p[j+4]&3)<<2) + (p[j+5]&3);//ACDEF
-			hash[hv] = big_insert_hash(hash[hv],j);
-		}
-		for (j = i+1; j < numseq;j++){
-			n = is_member(aln,j);
-			if(n != m){
-				p = local_seq[j];
-				//min =  (si->sl[i] > si->sl[j]) ?si->sl[j] :si->sl[i];
-				dm[m][n] += dna_distance_calculation(hash,p,local_sl[j],local_sl[j]+local_sl[i],param->zlevel);
-				//dm[i][j] /= (aln->sl[i] > aln->sl[j]) ? aln->sl[j] : aln->sl[i];
-				dm[n][m] = dm[m][n];
-			}
-			fprintf(stderr,"\r%8.0f percent done",(float)a /(float)b * 100);
-			a++;
-		}
-		
-		for (j = 1024;j--;){
-			if (hash[j]){
-				big_remove_nodes(hash[j]);
-				hash[j] = 0;
-			}
-		}
-	}
-	
-	for(i = 0; i< numseq;i++){
-		free(local_seq[i]);
-	}
-	free(local_seq);
-	free(local_sl);
-	return dm;
-}
-
-int is_member(struct alignment* aln,int test)
-{
-	int i,j;
-	for (i = numseq;i<numseq+local_numseq;i++){
-		for(j = 0;j < aln->nsip[i];j++){
-			if(aln->sip[i][j] == test){
-				return i-numseq;
-			}
-		}
-	}
-	return -1;
-}
-

Deleted: trunk/packages/kalign/trunk/kalign2_profile_alignment.h
===================================================================
--- trunk/packages/kalign/trunk/kalign2_profile_alignment.h	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_profile_alignment.h	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,40 +0,0 @@
-/*
-	kalign2_profile_alignment.h
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-int local_numseq;
-int local_numprofiles;
-
-int* assign_gap_codes(int* seq,int len);
-
-
-int is_member(struct alignment* aln,int test);
-
-float** dna_profile_distance(struct alignment* aln,float** dm,struct parameters* param, int nj);
-float** protein_profile_wu_distance(struct alignment* aln,float** dm,struct parameters* param, int nj);
-
-
-int** hirschberg_profile_alignment(struct alignment* aln,int* tree,float**submatrix, int** map);
-float* make_profile_from_alignment(float* prof, int num,struct alignment* aln,float** subm);
-
-

Deleted: trunk/packages/kalign/trunk/kalign2_simple_gaps.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_simple_gaps.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_simple_gaps.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,869 +0,0 @@
-/*
-	kalign2_simple_gaps.c
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-
-int** simple_hirschberg_alignment(struct alignment* aln,int* tree,int**submatrix, int** map)
-{
-	struct hirsch_mem* hm = 0;
-	int i,j,g,a,b,c;
-	int len_a;
-	int len_b;
-	int** profile = 0;
-
-	profile = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		profile[i] = 0;
-	}
-
-	map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		map[i] = 0;
-	}
-	
-	hm = hirsch_mem_alloc(hm,1024);
-
-	fprintf(stderr,"\nAlignment:\n");
-
-	for (i = 0; i < (numseq-1);i++){
-		a = tree[i*3];
-		b = tree[i*3+1];
-		c = tree[i*3+2];
-		fprintf(stderr,"\r%8.0f percent done",(float)(i) /(float)numseq * 100);
-	//	fprintf(stderr,"Aligning:%d %d->%d	done:%f\n",a,b,c,((float)(i+1)/(float)numseq)*100);
-		len_a = aln->sl[a];
-		len_b = aln->sl[b];
-
-		
-		g = (len_a > len_b)? len_a:len_b;
-		map[c] = malloc(sizeof(int) * (g+2));
-		if(g > hm->size){
-			hm = hirsch_mem_realloc(hm,g);
-		}
-
-		for (j = 0; j < (g+2);j++){
-		//	hirsch_path[j] = -1;
-			map[c][j] = -1;
-		//	map[c][j] = 0;
-		}
-	//	map[c][0] = len_a;
-		//map[c][len_a+len_b+1] = 3;
-
-		if (a < numseq){
-			profile[a] = simple_make_profile(profile[a],aln->s[a],len_a,submatrix);
-		}
-		if (b < numseq){
-			profile[b] = simple_make_profile(profile[b],aln->s[b],len_b,submatrix);
-		}
-
-		hm->starta = 0;
-		hm->startb = 0;
-		hm->enda = len_a;
-		hm->endb = len_b;
-		hm->len_a = len_a;
-		hm->len_b = len_b;
-		
-		hm->f[0].a = 0;
-		hm->f[0].ga =  -INFTY;
-		hm->f[0].gb = -INFTY;
-		hm->b[0].a = 0;
-		hm->b[0].ga =  -INFTY;
-		hm->b[0].gb =  -INFTY;
-	//	fprintf(stderr,"LENA:%d	LENB:%d	numseq:%d\n",len_a,len_b,numseq);
-		if(len_a < len_b){
-			map[c] = simple_hirsch_pp_dyn(profile[a],profile[b],hm,map[c]);
-		}else{
-			hm->enda = len_b;
-			hm->endb = len_a;
-			hm->len_a = len_b;
-			hm->len_b = len_a;
-			map[c] = simple_hirsch_pp_dyn(profile[b],profile[a],hm,map[c]);
-			map[c] = mirror_hirsch_path(map[c],len_a,len_b);
-		}
-					
-		map[c] = add_gap_info_to_hirsch_path(map[c],len_a,len_b);
-
-		if(i != numseq-2){
-			profile[c] = malloc(sizeof(int)*64*(map[c][0]+2));
-			profile[c] = simple_update(profile[a],profile[b],profile[c],map[c]);
-		}
-			
-		aln->sl[c] = map[c][0];
-	
-		aln->nsip[c] = aln->nsip[a] + aln->nsip[b];
-		aln->sip[c] = malloc(sizeof(int)*(aln->nsip[a] + aln->nsip[b]));
-		g =0;
-		for (j = aln->nsip[a];j--;){
-			aln->sip[c][g] = aln->sip[a][j];
-			g++;
-		}
-		for (j = aln->nsip[b];j--;){
-			aln->sip[c][g] = aln->sip[b][j];
-			g++;
-		}
-
-		free(profile[a]);
-		free(profile[b]);
-	}
-	fprintf(stderr,"\r%8.0f percent done\n",100.0);
-	free(profile);
-	hirsch_mem_free(hm);
-	for (i = 32;i--;){
-		free(submatrix[i]);
-	}
-	free(submatrix);
-	return map;
-}
-
-
-int* simple_make_profile(int* prof, int* seq,int len,int** subm)
-{
-	int i,j,c;	
-	prof = malloc(sizeof(int)*(len+2)*64);
-	prof +=  (64 *(len+1));
-
-	for (i = 0;i < 64;i++){
-		prof[i] = 0;
-	}
-	prof[23+32] = -gpo;
-	prof[26] = 1;
-
-	
-	i = len;
-	while(i--){
-		prof -= 64;
-
-		for (j = 0;j < 64;j++){
-			prof[j] = 0;
-		}
-		prof[26] = 1;//number of residues // both additive
-		c = seq[i];
-		
-		prof[c] += 1;
-		
-		prof += 32;
-		
-		for(j = 23;j--;){
-			prof[j] = subm[c][j];
-		}
-		prof[23] = -gpo;
-		
-		prof -= 32;
-	}
-	prof -= 64;
-	for (i = 0;i < 64;i++){
-		prof[i] = 0;
-	}
-
-	prof[23+32] = -gpo;
-	prof[26] = 1;
-	return prof;
-}
-
-
-
-
-int* simple_update(int* profa,int* profb,int* newp,int* path)
-{
-	int i,c;
-	for (i = 64; i--;){
-		newp[i] = profa[i] + profb[i];
-	}
-	
-	profa += 64;
-	profb += 64;
-	newp += 64;
-
-	c = 1;
-	
-	while(path[c] != 3){
-		//Idea: limit the 'virtual' number of residues of one type to x.
-		// i.e. only allow a maximum of 10 alanines to be registered in each column
-		// the penalty for aligning a 'G' to this column will stay stable even when many (>10) alanines are present.
-		// the difference in score between the 'correct' (all alanine) and incorrect (alanines + glycine) will not increase 
-		// with the number of sequences. -> see Durbin pp 140
-		
-		if (!path[c]){
-			for (i = 64; i--;){
-				newp[i] = profa[i] + profb[i];
-			}
-				
-			
-			profa += 64;
-			profb += 64;
-		}
-		if (path[c] & 1){
-			for (i = 64; i--;){
-				newp[i] = profb[i];
-			}
-			profb += 64;			
-		}
-		if (path[c] & 2){
-			for (i = 64; i--;){
-				newp[i] = profa[i];
-			}
-			profa+=64;			
-		}
-		newp += 64;
-		c++;
-	}
-	for (i = 64; i--;){
-		newp[i] =  profa[i] + profb[i];
-	}	
-	newp -= (path[0]+1) *64;
-	return newp;
-}
-
-
-
-int* simple_hirsch_pp_dyn(const int* prof1,const int* prof2,struct hirsch_mem* hm, int* hirsch_path)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	int input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-	
-	//fprintf(stderr,"starta:%d enda:%d startb:%d endb:%d mid:%d\n",hm->starta,hm->enda,hm->startb,hm->endb,mid);
-	
-	
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-	hm->enda = mid;
-	hm->f = simple_foward_hirsch_pp_dyn(prof1,prof2,hm);
-	/*int i;
-	fprintf(stderr,"FOWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->f[i].a,hm->f[i].ga,hm->f[i].gb);
-	}*/
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	hm->b = simple_backward_hirsch_pp_dyn(prof1,prof2,hm);
-	/*fprintf(stderr,"BaCKWARD\n");
-
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->b[i].a,hm->b[i].ga,hm->b[i].gb);
-	}*/
-
-	hirsch_path = simple_hirsch_align_two_pp_vector(prof1,prof2,hm,hirsch_path,input_states,old_cor);
-	return hirsch_path;
-}
-
-
-
-int* simple_hirsch_align_two_pp_vector(const int* prof1,const int* prof2,struct hirsch_mem* hm,int* hirsch_path,int input_states[],int old_cor[])
-{
-	struct states* f = hm->f;
- 	struct states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -INFTY;
-	float max = -INFTY;	
-	float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float sub = 0.0;
-	
-
-	prof1+= (64 * (old_cor[4]+1));
-	prof2 += 64 * (hm->startb);
-	i = hm->startb;
-	c = -1;
-	for(i = hm->startb; i < hm->endb;i++){
-		sub = abs(middle -i);
-		sub /= 1000; 
-		prof2 += 64;
-		//fprintf(stderr,"%d	%d	%d \n",f[i].a,b[i].a,max);
-		if(f[i].a+b[i].a-sub > max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga+prof2[23]*prof1[26]-sub > max){
-			max = f[i].a+b[i].ga+prof2[23]*prof1[26]-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb+prof1[23]*prof2[26] -sub> max){
-			max = f[i].a+b[i].gb+prof1[23]*prof2[26]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a+prof2[23]*prof1[26]-sub > max){
-			max = f[i].ga+b[i].a+prof2[23]*prof1[26]-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb-sub > max){
-				max = f[i].gb+b[i].gb-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb-sub > max){
-				max = f[i].gb+b[i].gb-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a+prof1[23]*prof2[26]-sub > max){
-			max = f[i].gb+b[i].a+prof1[23]*prof2[26]-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	i = hm->endb;
-	sub = abs(middle -i);
-	sub /= 1000; 
-	if(f[i].a+b[i].gb+prof1[23]*prof2[26]-sub > max){
-		max = f[i].a+b[i].gb+prof1[23]*prof2[26]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb-sub > max){
-			max = f[i].gb+b[i].gb-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb-sub > max){
-			max = f[i].gb+b[i].gb-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	
-	prof1-= (64 * (old_cor[4]+1));
-	prof2 -= hm->endb << 6;
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	//if(transition == -1){
-	//	exit(0);
-	//}
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -INFTY;
-			hm->b[0].gb = -INFTY;
-	//		fprintf(stderr,"Using this for start:%d	%d	%d\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -INFTY;
-			hm->f[0].gb = -INFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -INFTY;
-			hm->b[0].gb = -INFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -INFTY;
-			hm->f[0].ga = 0;
-			hm->f[0].gb = -INFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -INFTY;
-			hm->b[0].gb = -INFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -INFTY;
-			hm->f[0].ga = -INFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -INFTY;
-			hm->b[0].ga = 0;
-			hm->b[0].gb = -INFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -INFTY;
-			hm->f[0].gb = -INFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -INFTY;
-			hm->b[0].ga = -INFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -INFTY;
-			hm->f[0].ga = -INFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -INFTY;
-			hm->b[0].ga = -INFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -INFTY;
-			hm->f[0].gb = -INFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-
-
-struct states* simple_foward_hirsch_pp_dyn(const int* prof1,const int* prof2,struct hirsch_mem* hm)
-{
-	unsigned int freq[23];
-	struct states* s = hm->f;
-
-	register int pa = 0;
-	register int pga = 0;
-	register int pgb = 0;
-	register int ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-	
-	
-	prof1 += (hm->starta) << 6;
-	prof2 +=  (hm->startb) << 6;
-	s[hm->startb].a = s[0].a;
-	s[hm->startb].ga = s[0].ga;
-	s[hm->startb].gb = s[0].gb;
-	if(hm->startb == 0){
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=64;
-			s[j].a = -INFTY;
-			
-			s[j].ga = s[j-1].a;
-			if (s[j-1].ga > s[j].ga){
-				s[j].ga = s[j-1].ga;
-			}
-			s[j].gb = -INFTY;
-		}	
-		prof2+=64;	
-	}else{
-
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=64;
-			s[j].a = -INFTY;
-			
-			s[j].ga = s[j-1].a+prof2[23]*prof1[26];
-			if (s[j-1].ga > s[j].ga){
-				s[j].ga = s[j-1].ga;
-			}
-			s[j].gb = -INFTY;
-		//	prof2+=64;
-		}
-		prof2+=64;
-	}
-	
-	prof2 -= (hm->endb-hm->startb) << 6;
-	
-	s[hm->endb].a = -INFTY;
-	s[hm->endb].ga = -INFTY;
-	s[hm->endb].gb = -INFTY;
-
-
-	for (i = hm->starta;i < hm->enda;i++){
-		prof1 += 64;
-		pa = 1;
- 		for (j = 23; j--;){
-			if(prof1[j]){
-				freq[pa] = j;
-				pa++;	
-			}
-		}
-		freq[0] = pa;
-			
-		pa = s[hm->startb].a;
-		pga = s[hm->startb].ga;
-		pgb = s[hm->startb].gb;
-		if(hm->startb == 0){
-			s[hm->startb].a = -INFTY;
-			s[hm->startb].ga = -INFTY;
-		
-			s[hm->startb].gb = pa;
-				if(pgb> s[hm->startb].gb){
-				s[hm->startb].gb = pgb;
-			}
-		}else{
-			s[hm->startb].a = -INFTY;
-			s[hm->startb].ga = -INFTY;
-		
-			s[hm->startb].gb = pa+prof1[23]*prof2[26];
-			if(pgb > s[hm->startb].gb){
-				s[hm->startb].gb = pgb;
-			}
-		}
-		for (j = hm->startb+1; j <= hm->endb;j++){
-			prof2 += 64;
-			ca = s[j].a;
-			
-			if((pga += prof2[23-64]*prof1[26-64]) > pa){ 
-				pa = pga;
-			}
-
-			if((pgb += prof1[23-64]*prof2[26-64]) > pa){
-				pa = pgb;
-			}
-			
-			prof2 += 32;
-			for (pga = freq[0];--pga;){
-				pgb = freq[pga];
-				pa += prof1[pgb]*prof2[pgb];
-			}
-			prof2 -= 32;	
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j-1].a+prof2[23]*prof1[26];
-			if (s[j-1].ga> s[j].ga){
-				s[j].ga = s[j-1].ga;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[23]*prof2[26];
-			if(pgb > s[j].gb){
-				s[j].gb = pgb;
-			}
-			pa = ca;
-		}
-		prof2 -= (hm->endb-hm->startb) << 6;
-		
-	}
-	prof1 -= 64 * (hm->enda);
-	return s;
-}
-
-struct states* simple_backward_hirsch_pp_dyn(const int* prof1,const int* prof2,struct hirsch_mem* hm)
-{
-	unsigned int freq[23];
-	struct states* s = hm->b;
-	
-	register int pa = 0;
-	register int pga = 0;
-	register int pgb = 0;
-	register int ca = 0;
-	register int i = 0;
-	register int j = 0;
-
-	prof1 += (hm->enda+1) << 6;
-	prof2 += (hm->endb+1) << 6;
-	s[hm->endb].a = s[0].a;
-	s[hm->endb].ga = s[0].ga;
-	s[hm->endb].gb = s[0].gb;
-	
-	
-	//init of first row;
-	//j = endb-startb;
-	if(hm->endb == hm->len_b){
-		
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			s[j].a = -INFTY;
-			
-			s[j].ga = s[j+1].a;
-			if (s[j+1].ga> s[j].ga){
-				s[j].ga = s[j+1].ga;
-			}
-			s[j].gb = -INFTY;
-		}
-		prof2 -= 64;
-	}else{
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			s[j].a = -INFTY;
-			
-			s[j].ga = s[j+1].a+prof2[23]*prof1[26];
-			if (s[j+1].ga > s[j].ga){
-				s[j].ga = s[j+1].ga;
-			}
-			s[j].gb = -INFTY;
-		//	prof2 -= 64;
-		}
-		prof2 -= 64;
-	}
-	
-	s[hm->startb].a = -INFTY;
-	s[hm->startb].ga = -INFTY;
-	s[hm->startb].gb = -INFTY;
-//	prof2 -= (endb -startb) << 6;
-
-	i = hm->enda-hm->starta;
-	while(i--){
-		prof1 -= 64;
-
-		pa = 1;
-		for (j = 23; j--;){
-			if(prof1[j]){
-				freq[pa] = j;
-				pa++;	
-			}
-		}
-		freq[0] = pa;
-		
-		pa = s[hm->endb].a;
-		pga = s[hm->endb].ga;
-		pgb = s[hm->endb].gb;
-		s[hm->endb].a = -INFTY;
-		s[hm->endb].ga = -INFTY;
-
-		if(hm->endb == hm->len_b){
-			s[hm->endb].gb = pa;
-			if(pgb > s[hm->endb].gb){
-				s[hm->endb].gb = pgb;
-			}
-		}else{
-			s[hm->endb].gb = pa+prof1[23]*prof2[26];
-			if(pgb> s[hm->endb].gb){
-				s[hm->endb].gb = pgb;
-			}
-		}
-		//j = endb-startb;
-		prof2 += (hm->endb-hm->startb) << 6;
-		//while(j--){
-		for(j = hm->endb-1;j >= hm->startb;j--){
-			prof2 -= 64;
-			ca = s[j].a;
-			if((pga += prof2[64+23]*prof1[26]) > pa){
-				pa = pga;
-			}
-			if((pgb += prof1[64+23]*prof2[26]) > pa){
-				pa = pgb;
-			}
-			
-			prof2 += 32;
-			for (pga = freq[0];--pga;){
-				pgb = freq[pga];
-				pa += prof1[pgb]*prof2[pgb];
-			}
-			prof2 -= 32;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j+1].a+prof2[23]*prof1[26];
-			if (s[j+1].ga > s[j].ga){
-				s[j].ga = s[j+1].ga;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[23]*prof2[26];
-			if(pgb > s[j].gb){
-				s[j].gb = pgb;
-			}
-			pa = ca;
-		}
-	}		
-	return s;
-}
-
-

Deleted: trunk/packages/kalign/trunk/kalign2_stats.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_stats.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_stats.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,23 +0,0 @@
-#include "kalign2.h"
-
-
-void stats(struct alignment* aln)
-{
-	int i,j;
-	float 
-	
-	for (i = 0; i < numseq-1;i++){
-		for (j = i + 1; j < numseq;j++){
-			for (j = 0; j < aln->sl[f];j++){
-		}
-		f = aln->nsip[i];
-		fprintf(stdout,">%s\n",aln->sn[f]);
-		c = 0;
-		for (j = 0; j < aln->sl[f];j++){
-			tmp = aln->s[f][j];]
-			aln->seq[f][j]
-		}
-	}
-}
-
-

Deleted: trunk/packages/kalign/trunk/kalign2_string_matching.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_string_matching.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_string_matching.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,174 +0,0 @@
-/*
-	kalign2_string_matching.c
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include <string.h>
-
-int byg_detect(int* text,int n)
-{
-	int Tc;
-	int i  = 0;
-	int s = 0;
-	int T[256];
-	for (i = 0;i < 256;i++){ 
-		T[i] = 0; 
-	}
-	int mb = 1;
-	//char *unique_aa = "EFILPQXZ";//permissiv
-	//ABCDEFGHIJKLMNOPQRSTUVWXYZ
-	char *unique_aa = "BDEFHIJKLMNOPQRSVWYZ";//restrictive
-	int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
-	for (i= 0;i < 20;i++){
-		T[(int)aacode[unique_aa[i]-65]] |= 1;
-	}
-	for (i = 0;i < n;i++){
-	//	fprintf(stderr,"%d\n",text[i]);
-		if(text[i] != -1){
-			s <<= 1;
-			s |= 1;
-			Tc = T[text[i]];
-			s &= Tc;
-			if(s & mb){
-				return 0;
-			}
-		}
-	}
-	return 1;
-}
-
-int check_identity(char* n,char*m)
-{
-	int len_n;
-	int len_m;
-	int i;
-	
-	len_n = strlen(n);
-	len_m = strlen(m);
-	if(len_m != len_n){
-		return -1;
-	}
-	for (i = 0; i < len_n;i++){
-		if(n[i] != m[i]){
-			return -1;
-		}
-	}
-	return 1;
-	
-}
-
-
-int byg_count(char* pattern,char*text)
-{
-	int Tc;
-	int count = 0;
-	int i  = 0;
-	int s = 0;
-	int T[256];
-	for (i = 0;i < 256;i++){ 
-		T[i] = 0; 
-	}
-	
-	int m = strlen(pattern);
-	int n = strlen (text);
-	int mb = (1 << (m-1));
-	
-	for (i= 0;i < m;i++){
-		T[(int)pattern[i]] |= (1 << i);
-	}
-
-	for (i = 0;i < n;i++){
-		s <<= 1;
-		s |= 1;
-		Tc = T[(int)text[i]];
-		s &= Tc;
-		if(s & mb){
-			count++;
-		}
-	}
-	return count;
-}
-
-int byg_end(char* pattern,char*text)
-{
-	int Tc;
-	int i  = 0;
-	int s = 0;
-	int T[256];
-	for (i = 0;i < 256;i++){ 
-		T[i] = 0; 
-	}
-	
-	int m = strlen(pattern);
-	int n = strlen (text);
-	int mb = (1 << (m-1));
-
-	for (i= 0;i < m;i++){
-		T[(int)pattern[i]] |= (1 << i);
-	}
-
-	for (i = 0;i < n;i++){
-		s <<= 1;
-		s |= 1;
-		if(!text[i]){
-			return -1;
-		}
-		Tc = T[(int)text[i]];
-		s &= Tc;
-		if(s & mb){
-			return i+1;
-		}
-	}
-	return -1;
-}
-
-int byg_start(char* pattern,char*text)
-{
-	int Tc;
-	int i  = 0;
-	int s = 0;
-	int T[256];
-	for (i = 0;i < 256;i++){ 
-		T[i] = 0; 
-	}
-	
-	int m = strlen(pattern);
-	int n = strlen(text);
-	int mb = (1 << (m-1));
-	
-	for (i= 0;i < m;i++){
-		T[(int)pattern[i]] |= (1 << i);
-	}
-
-	for (i = 0;i < n;i++){
-		s <<= 1;
-		s |= 1;
-		Tc = T[(int)text[i]];
-		s &= Tc;
-		if(s & mb){
-			return i-m+1;
-		}
-	}
-	return -1;
-}
-

Deleted: trunk/packages/kalign/trunk/kalign2_tree.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_tree.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_tree.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,872 +0,0 @@
-/*
-	kalign2_tree.c 
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-
-struct aln_tree_node* real_upgma(float **dm,int ntree)
-{
-	int i,j;
-	int *as = 0;
-	float max;
-	int node_a = 0;
-	int node_b = 0;
-	int cnode = numseq;
-	
-	struct aln_tree_node** tree = 0;
-	struct aln_tree_node* tmp = 0;
-	
-	as = malloc(sizeof(int)*numseq);
-	for (i = numseq; i--;){
-		as[i] = i+1;
-	}
-	
-	tree = malloc(sizeof(struct aln_tree_node*)*numseq);
-	for (i=0;i < numseq;i++){
-		tree[i] = malloc(sizeof(struct aln_tree_node));
-		tree[i]->done = 1;
-		tree[i]->num = i;
-		tree[i]->path = 0;
-		tree[i]->profile = 0;
-		tree[i]->seq = 0;//seq[i];
-		tree[i]->len = 0;//len[i]; 
-		/*
-		Needs to be +2 because:
-		at n = 3 is is possible to get a perfectly balanced binary tree with 4 sequences at intermediate nodes
-		*/
-		/*tree[i]->links = malloc(sizeof(struct aln_tree_node*)*2);
-		
-		for ( j =0;j < 2;j++){
-			tree[i]->links[j] = 0;
-		}*/
-		
-		tree[i]->internal_lables = malloc(sizeof(int)*(ntree+(ntree-1)));
-		tree[i]->links = malloc(sizeof(struct aln_tree_node*)*(ntree+(ntree-1)));
-		
-		for ( j =0;j < (ntree+(ntree-1));j++){
-			tree[i]->links[j] = 0;
-			tree[i]->internal_lables[j] = 0;
-		}
-	}
-	
-	while (cnode != numprofiles){
-		max = -INFTY;
-		for (i = 0;i < numseq-1; i++){
-			if (as[i]){
-			for ( j = i + 1;j < numseq;j++){
-				if (as[j]){
-				if (dm[i][j] > max){
-					max = dm[i][j];
-					node_a = i;
-					node_b = j;
-				}
-				}
-			}
-			}
-		}
-		tmp = malloc(sizeof(struct aln_tree_node));
-		tmp->done = 0;
-		tmp->path = 0;
-		tmp->profile = 0;
-		tmp->num = cnode;
-		tmp->seq = 0;
-		tmp->len = 0;
-		
-		tmp->links = malloc(sizeof(struct aln_tree_node*)*(ntree+(ntree-1)));
-		tmp->internal_lables = malloc(sizeof(int)*(ntree+(ntree-1)));
-		tmp->links[0] = tree[node_a];
-		tmp->links[1] = tree[node_b];
-		tmp->internal_lables[0] = cnode;
-		tmp->internal_lables[1] = 0;
-		
-		for ( i =2;i < (ntree+(ntree-1));i++){
-			tmp->links[i] = 0;
-			tmp->internal_lables[i] = 0;
-			
-		}
-		
-		
-		tree[node_a] = tmp;
-		tree[node_b] = 0;
-				
-		/*deactivate  sequences to be joined*/
-		as[node_a] = cnode+1;
-		as[node_b] = 0;
-		cnode++;    
-		
-		/*calculate new distances*/
-		for (j = numseq;j--;){
-			if (j != node_b){
-				dm[node_a][j] = (dm[node_a][j] + dm[node_b][j])*0.5;
-			}
-		}
-		dm[node_a][node_a] = 0.0f;
-		for (j = numseq;j--;){
-			dm[j][node_a] = dm[node_a][j];
-			dm[j][node_b] = 0.0f;
-			dm[node_b][j] = 0.0f;
-		}		
-	}
-	tmp = tree[node_a];
-	
-	for (i = numseq;i--;){
-		free(dm[i]);
-	}
-	free(dm);
-	
-	
-	free(tree);
-	free(as);
-	return tmp;
-}
-
-struct aln_tree_node* real_nj(float **dm,int ntree)
-{
-	int i,j;
-	//float **dm = 0;
-	float *r = 0;
-	float *r_div = 0;
-	int *active = 0;
-	int node = 0;
-	float min = 0;
-	int join_a = 0;
-	int join_b = 0;
-	int leaves = 0;
-	
-	struct aln_tree_node** tree = 0;
-	struct aln_tree_node* tmp = 0;
-
-	leaves = numseq;
-	
-	r = malloc ((numseq*2-1) *sizeof(float));
-	r_div = malloc ((numseq*2-1) *sizeof(float));
-	active = malloc((numseq*2-1)*sizeof(int));
-	for ( i = 0;i < numseq*2-1;i++){
-		active[i] = 0;
-	}
-	for ( i = 0;i < numseq;i++){
-		active[i] = 1;
-	}
-	
-	
-	tree = malloc(sizeof(struct aln_tree_node*)*(numseq*2-1));
-	for (i=0;i < numseq*2-1;i++){
-		tree[i] = malloc(sizeof(struct aln_tree_node));
-		tree[i]->done = 1;
-		tree[i]->num = i;
-		tree[i]->path = 0;
-		tree[i]->profile = 0;
-		tree[i]->seq = 0;//seq[i];
-		tree[i]->len = 0;//len[i]; 	
-		tree[i]->internal_lables = malloc(sizeof(int)*(ntree+(ntree-1)));
-		tree[i]->links = malloc(sizeof(struct aln_tree_node*)*(ntree+(ntree-1)));
-		
-		for ( j =0;j < (ntree+(ntree-1));j++){
-			tree[i]->links[j] = 0;
-			tree[i]->internal_lables[j] = 0;
-		}
-	}
-	
-	node = numseq;
-	while (node != numseq*2 -1){
-		for (i = 0;i<numseq*2-1;i++){
-			if (active[i]){
-				r[i] = 0;
-				for (j = 0;j < numseq*2-1;j++){
-					if (active[j]){
-						r[i] += (i<j) ?dm[i][j]:dm[j][i];
-					}
-				}
-				r_div[i] = r[i] / (leaves-2);
-			}
-		}
-		for ( j = 0;j < numseq*2-1;j++){
-			if (active[j]){
-			for ( i = j+1;i < numseq*2-1;i++){
-				if (active[i]){
-				dm[i][j] = dm[j][i] - (r[i] + r[j])/2;
-				}
-			}
-			}
-		}
-		min = -INFTY;
-		for ( j = 0;j < numseq*2-1;j++){
-			if (active[j]){
-			for ( i = j+1;i < numseq*2-1;i++){
-				if (active[i]){
-					if (dm[i][j] > min){
-						min = dm[i][j];
-						join_a = j;
-						join_b = i;
-					}
-				}
-			}
-			}
-		}
-		//join_a always smaller than join_b && both smaller than node
-		dm[join_a][node] =  dm[join_a][join_b]/2 + (r_div[join_a] - r_div[join_b])/2;
-		dm[join_b][node] =  dm[join_a][join_b] - dm[join_a][node];
-		
-		tree[node]->num = node;
-		tree[node]->links[0] = tree[join_a];
-		tree[node]->links[1] = tree[join_b];
-		tree[node]->internal_lables[0] = node;
-		tree[node]->internal_lables[1] = 0;
-
-
-		active[join_a] = 0;
-		active[join_b] = 0;
-		
-		for (i = 0;i<numseq*2-1;i++){
-			if (active[i]){
-				dm[i][node] = (i>join_a) ? dm[join_a][i]: dm[i][join_a];
-				dm[i][node] -= dm[join_a][node];
-				dm[i][node] += (i > join_b) ? dm[join_b][i] : dm[i][join_b] ;
-				dm[i][node] -= dm[join_b][node];
-				dm[i][node] /= 2;
-			}
-		}
-		active[node] = 1;
-		node++;
-	}
-
-	for (i = numprofiles;i--;){
-		free(dm[i]);
-	}
-	free(dm);
-
-	free(r);
-	free(r_div);
-	free(active);
-	tmp = tree[node-1];
-	free(tree);
-	return tmp;
-}
-
-struct ntree_data* alignntree(struct ntree_data* ntree_data,struct aln_tree_node* p)
-{
-	int i = 0;
-	int ntree = ntree_data->ntree;
-	int* leaves = 0;
-	
-	leaves = malloc(sizeof(int)* (ntree+(ntree-1)));
-
-	while(p->links[i]){
-		alignntree(ntree_data,p->links[i]);
-		i++;	
-	}
-	i = 0;
-	if (p->links[i]){
-		fprintf(stderr,"Aligning subtree: at node:%d\n",p->num);
-		while(p->links[i]){
-			leaves[i] = p->links[i]->num;
-			i++;
-		}
-		leaves[i] = -1;
-	//	fprintf(stderr,"NODES:%d\n",i);
-		ntree_data =  find_best_topology(ntree_data,leaves,p->internal_lables);
-	//	exit(0);
-	}
-	free(leaves);
-	
-	return ntree_data;
-}
-
-
-void print_simple_phylip_tree(struct aln_tree_node* p)
-{
-	if(p->links[0]){
-	
-		fprintf(stderr,"(");
-		print_simple_phylip_tree(p->links[0]);
-	}
-	if(p->num < numseq){
-		fprintf(stderr,"%d",p->num);
-	}else{
-		fprintf(stderr,",");
-	}
-	if(p->links[1]){
-		print_simple_phylip_tree(p->links[1]);
-		fprintf(stderr,")");
-	}
-}
-
-
-void printtree(struct aln_tree_node* p)
-{
-	int i = 0;
-
-	while(p->links[i]){
-		printtree(p->links[i]);
-		i++;	
-	}
-	i = 0;
-	if (p->links[i]){
-		printf("Aligning: at node:%d\n",p->num);
-		while(p->links[i]){
-			printf("%d\n",p->links[i]->num);
-			i++;
-		}
-		i = 0;
-		while(p->internal_lables[i]){
-			printf("%d ",p->internal_lables[i]);
-			i++;
-		}
-		printf("\n");
-	}
-}
-
-void ntreeify(struct aln_tree_node* p,int ntree)
-{
-	int i = 0;
-	int c = 0;
-	struct aln_tree_node* tmp1 = 0;
-	struct aln_tree_node* tmp2 = 0;
-	if (p->links[0]){
-		ntreeify(p->links[0],ntree);
-	}
-	if (p->links[1]){
-		ntreeify(p->links[1],ntree);
-	}
-	
-	if (!p->done){
-		tmp1 = p->links[0];
-		tmp2 = p->links[1];
-		
-		p->done = tmp1->done + tmp2->done;
-		i = 0;
-		c = 0;
-		if(tmp1->done != 1){
-
-			while(tmp1->internal_lables[i]){
-				p->internal_lables[c] = tmp1->internal_lables[i];
-				i++;
-				c++;
-			}
-			if(tmp2->done != 1){
-				i = 0;
-				while(tmp2->internal_lables[i]){
-					p->internal_lables[c] = tmp2->internal_lables[i];
-					c++;
-					i++;
-				}
-			}
-		}else if(tmp2->done != 1){
-			i = 0;
-			while(tmp2->internal_lables[i]){
-				p->internal_lables[c] = tmp2->internal_lables[i];
-				c++;
-				i++;
-			}
-		}
-		p->internal_lables[c] = p->num;
-		
-		//fprintf(stderr,"%d:%d	%d:%d		%d\n",tmp1->num,tmp1->internal_lables[0],tmp2->num,tmp2->internal_lables[0],p->num);
-		/*for (i = 0; i< c;i++){
-			fprintf(stderr,"il:%d ",p->internal_lables[i]);
-		}
-		fprintf(stderr,"\n");*/
-	
-		
-		if (tmp1->done > 1){
-			for ( i = 0;i < tmp1->done;i++){
-				p->links[i] = tmp1->links[i];
-				tmp1->links[i] = 0;				
-			}
-		}
-		
-		if (tmp2->done > 1){
-			for ( i = 0; i < tmp2->done;i++){
-				p->links[tmp1->done+i] = tmp2->links[i];
-				tmp2->links[i] = 0;
-			}
-			free(tmp2->internal_lables);
-			free(tmp2->links);
-			free(tmp2);
-		}else{
-			p->links[tmp1->done] = tmp2;
-		}
-	//	fprintf(stderr,"p->num:%d\n",p->num);
-		p->links[p->done] = 0;
-		
-		if (tmp1->done > 1){
-			free(tmp1->internal_lables);
-			free(tmp1->links);
-			free(tmp1);
-		}
-		
-		if (p->done >= ntree){ 
-			p->done = 1;
-			/*i = 0;
-			while(p->internal_lables[i]){
-				i++;
-			}
-			p->internal_lables[i] = p->num;*/
-		}
-	}
-}
-
-struct ntree_data* find_best_topology(struct ntree_data* ntree_data,int* leaves,int* nodes)
-{
-	int i,c;
-	int elements = 0;
-	//int num_topologies =0;
-	int* milometer = 0; //DURBIN
-	struct tree_node* tree = 0;
-	struct tree_node* tmp = 0;
-	int newnode = 0;
-	int local_ntree = 0;
-	
-	int *tmp_tree = 0;
-
-	while(leaves[local_ntree] != -1){
-		local_ntree++;
-	}
-	//fprintf(stderr,"REALKDASF KJAF SA:%d\n",local_ntree);
-
-	//for (i = 0; i < local_ntree-1;i++){
-	//	fprintf(stderr,"nodes:%d\n",nodes[i]);
-	//}
-	
-
-	tmp_tree = malloc(sizeof(int)*(local_ntree+local_ntree-1)*3);
-	for (c = 0; c < (local_ntree+local_ntree-1)*3;c++){
-		tmp_tree[c] = 0;
-	}
-	
-	tmp_tree[0] =1;
-	
-	
-	if (local_ntree < 3){
-		//printf("ORDER1: %d	and	%d\n",leaves[0],leaves[1]);
-		tmp_tree[0] =1;
-	
-		tmp = malloc(sizeof(struct tree_node));
-		tmp->left = 0;
-		tmp->right = 0;
-		tmp->label = -1;
-		tmp->edge = 0;
-	
-		tmp->left = malloc(sizeof(struct tree_node));
-		tmp->left->left = 0;
-		tmp->left->right = 0;
-		tmp->left->edge = 1;
-		tmp->left->label = leaves[0];
-		tmp->right = malloc(sizeof(struct tree_node));
-		tmp->right->left = 0;
-		tmp->right->right = 0;
-		tmp->right->edge = 2;
-		tmp->right->label = leaves[1];
-		tree = malloc(sizeof(struct tree_node));
-		tree->left =tmp;
-		tree->right = 0;
-		tree->edge = -1;
-		tree->label = -1;
-
-		c =  add_label_simpletree(tree,nodes,0);
-		readsimpletree(tree,tmp_tree);
-		/*for (c = 1; c < tmp_tree[0];c++){
-			fprintf(stderr,"%d ",tmp_tree[c]);
-		}
-		fprintf(stderr,"\n\n");*/
-  		ntree_data =ntree_sub_alignment(ntree_data,tmp_tree,local_ntree);
-		free(tmp_tree);
-		
-	}else{
-		elements = local_ntree-2;
-		milometer = malloc(sizeof(int)*(elements));
-		for ( i = 0; i < elements;i++){
-			milometer[i] = 0;
-		}
-
-		i = 0;
-		while(milometer[0] != -1){
-	
-			tmp_tree[0] =1;
-	
-			tmp = malloc(sizeof(struct tree_node));
-			tmp->left = 0;
-			tmp->right = 0;
-			tmp->label = -1;
-			tmp->edge = 0;
-	
-			tmp->left = malloc(sizeof(struct tree_node));
-			tmp->left->left = 0;
-			tmp->left->right = 0;
-			tmp->left->edge = 1;
-			tmp->left->label = leaves[0];
-			tmp->right = malloc(sizeof(struct tree_node));
-			tmp->right->left = 0;
-			tmp->right->right = 0;
-			tmp->right->edge = 2;
-			tmp->right->label = leaves[1];
-			tree = malloc(sizeof(struct tree_node));
-			tree->left =tmp;
-			tree->right = 0;
-			tree->edge = -1;
-			tree->label = -1;
-		
-			//printsimpleTree(tree);
-			//tree = simpleinsert(tree,0,3,-3);
-			//fprintf(stderr,"\n\n");
-			//printsimpleTree(tree);
-			newnode = 3;
-			for(c = 0; c < elements;c++){			
-			//	printf("%d ",milometer[c]);
-				tree = simpleinsert(tree,milometer[c],newnode,leaves[2+c]);
-				newnode+=2;
-			} 
-			fprintf(stderr,"Topology:%d	",i);
-			//printsimpleTree(tree);
-			c = add_label_simpletree(tree,nodes,0);
-			
-			readsimpletree(tree,tmp_tree);
-			freesimpletree(tree);
-			/*for (c = 1; c < tmp_tree[0];c++){
-				fprintf(stderr,"%d ",tmp_tree[c]);
-			}
-			fprintf(stderr,"\n\n");*/
-			ntree_data =ntree_sub_alignment(ntree_data,tmp_tree,local_ntree);
-			
-			//exit(0);
-			//for (c = 0;c < ntree -1;c++){
-			//	fprintf(stderr,"%d ",nodes[c]);
-			//}
-			//fprintf(stderr,"\n\n");
-			i++;
-			milometer = ticker(milometer,elements);
-		}
-	
-		free(milometer);
-		free(tmp_tree);
-	}
-	return ntree_data;
-}
-
-int add_label_simpletree(struct tree_node* p,int* nodes,int i)
-{
-	if(p->left){
-		i = add_label_simpletree(p->left,nodes,i);
-	}
-	if(p->right){
-		i = add_label_simpletree(p->right,nodes,i);
-	}
-	if(p->left){
-		if(p->right){
-			p->label = nodes[i];
-			i++;
-			return i;
-		}
-	}
-	return i;
-}
-
-int* readsimpletree(struct tree_node* p,int* tree)
-{
-	if(p->left){
-		tree = readsimpletree(p->left,tree);
-	}
-	if(p->right){
-		tree = readsimpletree(p->right,tree);
-	}
-	if(p->left){
-		if(p->right){
-			tree[tree[0]] = p->left->label;
-			tree[tree[0]+1] = p->right->label;
-			tree[tree[0]+2] = p->label;
-			tree[0] +=3;
-	//		free(p->left);
-	//		free(p->right);
-	//	}else{
-	//		free(p->left);
-		}
-	}//else{
-	//	free(p->right);
-	//}
-	return tree;
-}
-
-void printsimpleTree(struct tree_node* p)
-{
-	if(p->left){
-	printsimpleTree(p->left);
-	}
-	//fprintf(stderr,"%d\n",p->label);
-	if(p->right){
-	printsimpleTree(p->right);
-	}
-	if(p->left){
-		if(p->right){
-			fprintf(stderr,"%d %d -> %d\n",p->left->label,p->right->label,p->label);
-			free(p->left);
-			free(p->right);
-		}else{
-			free(p->left);
-		}
-	}else{
-		free(p->right);
-	}
-	
-//	fprintf(stderr,"Edge:%d	Label:%d\n",p->edge,p->label);
-}
-
-
-struct tree_node* simpleinsert(struct tree_node* p,int target, int new_edge,int leaf_label)
-{
-	struct tree_node* tmp = 0;
-	struct tree_node* tmp2 = 0;
-
-	if(p->left){
-		if(p->left->edge == target){
-			tmp = malloc(sizeof(struct tree_node));
-			tmp->left = 0;
-			tmp->right = 0;
-			tmp->label = leaf_label;
-			tmp->edge = new_edge+1;
-			
-			tmp2 = malloc(sizeof(struct tree_node));
-			tmp2->left = tmp;
-			tmp2->right = p->left;
-			tmp2->label = -1;
-			tmp2->edge = p->left->edge;
-
-			p->left->edge = new_edge;
-
-			p->left = tmp2;
-
-
-			return p;
-		}else{
-			p->left = simpleinsert(p->left,target,new_edge,leaf_label);
-		}
-	}
-
-	if(p->right){
-		if(p->right->edge == target){
-			tmp = malloc(sizeof(struct tree_node));
-			tmp->left = 0;
-			tmp->right = 0;
-			tmp->label = leaf_label;
-			tmp->edge = new_edge+1;
-			
-			tmp2 = malloc(sizeof(struct tree_node));
-			tmp2->left = tmp;
-			tmp2->right = p->right;
-			tmp2->label = -1;
-			tmp2->edge = p->right->edge;
-
-			p->right->edge = new_edge;
-
-			p->right = tmp2;
-
-
-			return p;
-		}else{
-			p->right = simpleinsert(p->right,target,new_edge,leaf_label);
-		}
-	}
-	return p;
-}
-
-
-int* ticker(int* milometer,int elements)
-{
-	while(elements){
-		if (milometer[elements-1] < (2*elements)){
-			milometer[elements-1]++;
-			return milometer;
-		}else{
-			milometer[elements-1] = 0;
-			elements--;
-		}
-	}
-	milometer[0] = -1;
-	return milometer;
-}
-
-
-
-
-int* upgma(float **dm,int* tree)
-{
-	int i,j,t;
-	int *as = 0;
-	float max;
-	int node_a = 0;
-	int node_b = 0;
-	int cnode = numseq;
-
-	as = malloc(sizeof(int)*numseq);
-	for (i = numseq; i--;){
-		as[i] = i+1;
-	}
-
-	
-	t = 0;
-	while (cnode != numprofiles){
-		max = -INFTY;
-		for (i = 0;i < numseq-1; i++){
-			if (as[i]){
-			for ( j = i + 1;j < numseq;j++){
-				if (as[j]){
-				if (dm[i][j] > max){
-					max = dm[i][j];
-					node_a = i;
-					node_b = j;
-				}
-				}
-			}
-			}
-		}
-		
-		tree[t] = as[node_a]-1;
-		tree[t+1] = as[node_b]-1;
-		tree[t+2] = cnode;
-		t += 3;	
-		
-		/*deactivate  sequences to be joined*/
-		as[node_a] = cnode+1;
-		as[node_b] = 0;
-		cnode++;    
-		
-		/*calculate new distances*/
-		for (j = numseq;j--;){
-			if (j != node_b){
-				dm[node_a][j] = (dm[node_a][j] + dm[node_b][j])/2;
-			}
-		}
-		dm[node_a][node_a] = 0.0f;
-		for (j = numseq;j--;){
-			dm[j][node_a] = dm[node_a][j];
-			dm[j][node_b] = 0.0f;
-			dm[node_b][j] = 0.0f;
-		}		
-	}
-	free(as);
-	return tree;
-}
-
-
-
-int* nj(float **dm,int* tree)
-{
-	int i,j;
-	//float **dm = 0;
-	float *r = 0;
-	float *r_div = 0;
-	int *active = 0;
-	int node = 0;
-	float min = 0;
-	int join_a = 0;
-	int join_b = 0;
-	int leaves = 0;
-	int c =0;
-
-	leaves = numseq;
-	
-	r = malloc ((numseq*2-1) *sizeof(float));
-	r_div = malloc ((numseq*2-1) *sizeof(float));
-	active = malloc((numseq*2-1)*sizeof(int));
-	for ( i = 0;i < numseq*2-1;i++){
-		active[i] = 0;
-	}
-	for ( i = 0;i < numseq;i++){
-		active[i] = 1;
-	}
-	
-	node = numseq;
-	while (node != numseq*2 -1){
-		for (i = 0;i<numseq*2-1;i++){
-			if (active[i]){
-				r[i] = 0;
-				for (j = 0;j < numseq*2-1;j++){
-					if (active[j]){
-						r[i] += (i<j) ?dm[i][j]:dm[j][i];
-					}
-				}
-				r_div[i] = r[i] / (leaves-2);
-			}
-		}
-		for ( j = 0;j < numseq*2-1;j++){
-			if (active[j]){
-			for ( i = j+1;i < numseq*2-1;i++){
-				if (active[i]){
-				dm[i][j] = dm[j][i] - (r[i] + r[j])/2;
-				}
-			}
-			}
-		}
-		min = -INFTY;
-		for ( j = 0;j < numseq*2-1;j++){
-			if (active[j]){
-			for ( i = j+1;i < numseq*2-1;i++){
-				if (active[i]){
-					if (dm[i][j] > min){
-						min = dm[i][j];
-						join_a = j;
-						join_b = i;
-					}
-				}
-			}
-			}
-		}
-		//join_a always smaller than join_b && both smaller than node
-		dm[join_a][node] =  dm[join_a][join_b]/2 + (r_div[join_a] - r_div[join_b])/2;
-		dm[join_b][node] =  dm[join_a][join_b] - dm[join_a][node];
-
-		active[join_a] = 0;
-		active[join_b] = 0;
-		tree[c] = join_a;
-		tree[c+1] = join_b;
-		tree[c+2] = node;
-
-		for (i = 0;i<numseq*2-1;i++){
-			if (active[i]){
-				dm[i][node] = (i>join_a) ? dm[join_a][i]: dm[i][join_a];
-				dm[i][node] -= dm[join_a][node];
-				dm[i][node] += (i > join_b) ? dm[join_b][i] : dm[i][join_b] ;
-				dm[i][node] -= dm[join_b][node];
-				dm[i][node] /= 2;
-			}
-		}
-		active[node] = 1;
-		c += 3;
-		node++;
-
-	}
-
-
-	for (i = numprofiles;i--;){
-		free(dm[i]);
-	}
-	free(dm);
-
-	free(r);
-	free(r_div);
-	free(active);
-
-	return tree;
-}
-
-

Deleted: trunk/packages/kalign/trunk/kalign2_upgma.c
===================================================================
--- trunk/packages/kalign/trunk/kalign2_upgma.c	2007-12-23 19:17:25 UTC (rev 994)
+++ trunk/packages/kalign/trunk/kalign2_upgma.c	2007-12-23 22:10:58 UTC (rev 995)
@@ -1,283 +0,0 @@
-/*
-	kalign2_upgma.c
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-
-struct aln_tree_node* real_upgma(float **dm)
-{
-	int i,j;
-	int *as = 0;
-	float max;
-	int node_a = 0;
-	int node_b = 0;
-	int cnode = numseq;
-	
-	struct aln_tree_node** tree = 0;
-	struct aln_tree_node* tmp = 0;
-	
-	as = malloc(sizeof(int)*numseq);
-	for (i = numseq; i--;){
-		as[i] = i+1;
-	}
-	
-	tree = malloc(sizeof(struct aln_tree_node*)*numseq);
-	for (i=0;i < numseq;i++){
-		tree[i] = malloc(sizeof(struct aln_tree_node));
-		tree[i]->done = 1;
-		tree[i]->num = i;
-		tree[i]->path = 0;
-		tree[i]->profile = 0;
-		tree[i]->seq = 0;//seq[i];
-		tree[i]->len = 0;//len[i]; 
-		/*
-		Needs to be +2 because:
-		at n = 3 is is possible to get a perfectly balanced binary tree with 4 sequences at intermediate nodes
-		*/
-		tree[i]->links = malloc(sizeof(struct aln_tree_node*)*3);
-		
-		for ( j =0;j < 3;j++){
-			tree[i]->links[j] = 0;
-		}
-	}
-	
-	while (cnode != numprofiles){
-		max = -INFTY;
-		for (i = 0;i < numseq-1; i++){
-			if (as[i]){
-			for ( j = i + 1;j < numseq;j++){
-				if (as[j]){
-				if (dm[i][j] > max){
-					max = dm[i][j];
-					node_a = i;
-					node_b = j;
-				}
-				}
-			}
-			}
-		}
-		tmp = malloc(sizeof(struct aln_tree_node));
-		tmp->done = 0;
-		tmp->path = 0;
-		tmp->profile = 0;
-		tmp->num = cnode;
-		tmp->seq = 0;
-		tmp->len = 0;
-		tmp->links = malloc(sizeof(struct aln_tree_node*)*(3));
-		tmp->links[0] = tree[node_a];
-		tmp->links[1] = tree[node_b];
-		tmp->links[2] =0;
-
-		tree[node_a] = tmp;
-		tree[node_b] = 0;
-				
-		/*deactivate  sequences to be joined*/
-		as[node_a] = cnode+1;
-		as[node_b] = 0;
-		cnode++;    
-		
-		/*calculate new distances*/
-		for (j = numseq;j--;){
-			if (j != node_b){
-				dm[node_a][j] = (dm[node_a][j] + dm[node_b][j])/2;
-			}
-		}
-		dm[node_a][node_a] = 0.0f;
-		for (j = numseq;j--;){
-			dm[j][node_a] = dm[node_a][j];
-			dm[j][node_b] = 0.0f;
-			dm[node_b][j] = 0.0f;
-		}		
-	}
-	tmp = tree[node_a];
-	
-	for (i = numprofiles;i--;){
-		free(dm[i]);
-	}
-	free(dm);
-	
-	
-	free(tree);
-	free(as);
-	return tmp;
-}
-
-int* nj(float **dm,int* tree)
-{
-	int i,j;
-	//float **dm = 0;
-	float *r = 0;
-	float *r_div = 0;
-	int *active = 0;
-	int node = 0;
-	float min = 0;
-	int join_a = 0;
-	int join_b = 0;
-	int leaves = 0;
-	int c =0;
-
-	leaves = numseq;
-	
-	r = malloc ((numseq*2-1) *sizeof(float));
-	r_div = malloc ((numseq*2-1) *sizeof(float));
-	active = malloc((numseq*2-1)*sizeof(int));
-	for ( i = 0;i < numseq*2-1;i++){
-		active[i] = 0;
-	}
-	for ( i = 0;i < numseq;i++){
-		active[i] = 1;
-	}
-	
-	node = numseq;
-	while (node != numseq*2 -1){
-		for (i = 0;i<numseq*2-1;i++){
-			if (active[i]){
-				r[i] = 0;
-				for (j = 0;j < numseq*2-1;j++){
-					if (active[j]){
-						r[i] += (i<j) ?dm[i][j]:dm[j][i];
-					}
-				}
-				r_div[i] = r[i] / (leaves-2);
-			}
-		}
-		for ( j = 0;j < numseq*2-1;j++){
-			if (active[j]){
-			for ( i = j+1;i < numseq*2-1;i++){
-				if (active[i]){
-				dm[i][j] = dm[j][i] - (r[i] + r[j])/2;
-				}
-			}
-			}
-		}
-		min = -INFTY;
-		for ( j = 0;j < numseq*2-1;j++){
-			if (active[j]){
-			for ( i = j+1;i < numseq*2-1;i++){
-				if (active[i]){
-					if (dm[i][j] > min){
-						min = dm[i][j];
-						join_a = j;
-						join_b = i;
-					}
-				}
-			}
-			}
-		}
-		//join_a always smaller than join_b && both smaller than node
-		dm[join_a][node] =  dm[join_a][join_b]/2 + (r_div[join_a] - r_div[join_b])/2;
-		dm[join_b][node] =  dm[join_a][join_b] - dm[join_a][node];
-
-		active[join_a] = 0;
-		active[join_b] = 0;
-		tree[c] = join_a;
-		tree[c+1] = join_b;
-		tree[c+2] = node;
-
-		for (i = 0;i<numseq*2-1;i++){
-			if (active[i]){
-				dm[i][node] = (i>join_a) ? dm[join_a][i]: dm[i][join_a];
-				dm[i][node] -= dm[join_a][node];
-				dm[i][node] += (i > join_b) ? dm[join_b][i] : dm[i][join_b] ;
-				dm[i][node] -= dm[join_b][node];
-				dm[i][node] /= 2;
-			}
-		}
-		active[node] = 1;
-		c += 3;
-		node++;
-
-	}
-
-
-	for (i = numprofiles;i--;){
-		free(dm[i]);
-	}
-	free(dm);
-
-	free(r);
-	free(r_div);
-	free(active);
-
-	return tree;
-}
-
-int* upgma(float **dm,int* tree)
-{
-	int i,j,t;
-	int *as = 0;
-	float max;
-	int node_a = 0;
-	int node_b = 0;
-	int cnode = numseq;
-
-	as = malloc(sizeof(int)*numseq);
-	for (i = numseq; i--;){
-		as[i] = i+1;
-	}
-
-	
-	t = 0;
-	while (cnode != numprofiles){
-		max = -INFTY;
-		for (i = 0;i < numseq-1; i++){
-			if (as[i]){
-			for ( j = i + 1;j < numseq;j++){
-				if (as[j]){
-				if (dm[i][j] > max){
-					max = dm[i][j];
-					node_a = i;
-					node_b = j;
-				}
-				}
-			}
-			}
-		}
-		
-		tree[t] = as[node_a]-1;
-		tree[t+1] = as[node_b]-1;
-		tree[t+2] = cnode;
-		t += 3;	
-		
-		/*deactivate  sequences to be joined*/
-		as[node_a] = cnode+1;
-		as[node_b] = 0;
-		cnode++;    
-		
-		/*calculate new distances*/
-		for (j = numseq;j--;){
-			if (j != node_b){
-				dm[node_a][j] = (dm[node_a][j] + dm[node_b][j])/2;
-			}
-		}
-		dm[node_a][node_a] = 0.0f;
-		for (j = numseq;j--;){
-			dm[j][node_a] = dm[node_a][j];
-			dm[j][node_b] = 0.0f;
-			dm[node_b][j] = 0.0f;
-		}		
-	}
-	free(as);
-	return tree;
-}




More information about the debian-med-commit mailing list