/* ===========================================================================
*
*                            PUBLIC DOMAIN NOTICE
*               National Center for Biotechnology Information
*
*  This software/database is a "United States Government Work" under the
*  terms of the United States Copyright Act.  It was written as part of
*  the author's official duties as a United States Government employee and
*  thus cannot be copyrighted.  This software/database is freely available
*  to the public for use. The National Library of Medicine and the U.S.
*  Government have not placed any restriction on its use or reproduction.
*
*  Although all reasonable efforts have been taken to ensure the accuracy
*  and reliability of the software and data, the NLM and the U.S.
*  Government do not and cannot warrant the performance or results that
*  may be obtained by using this software or data. The NLM and the U.S.
*  Government disclaim all warranties, express or implied, including
*  warranties of performance, merchantability or fitness for any particular
*  purpose.
*
*  Please cite the author in any work or product based on this material.
*
* ===========================================================================*/
#include <ncbi.h>
#define BLAST_EXTERN
#include <blast.h>

static char	once = 0;

BLAST_Error
InitBLAST PROTO((void))
{
	mproc_lock();
	if (!once) {
		once = 1;
		if (_blast_config_init() != BLAST_ERR_NONE)
			return blast_errno;
		if (_blast_alphabet_init() != BLAST_ERR_NONE)
			return blast_errno;
	}

	blast_ncbistdaa = BlastAlphabetFindByName("NCBIstdaa");
	blast_oldblastaa = BlastAlphabetFindByName("OldBLASTaa");
	blast_iupacaa = BlastAlphabetFindByName("IUPACaa");

	blast_ncbi2na = BlastAlphabetFindByName("NCBI2na");
	blast_ncbi4na = BlastAlphabetFindByName("NCBI4na");
	blast_oldblastna = BlastAlphabetFindByName("OldBLASTna");
	blast_iupacna = BlastAlphabetFindByName("IUPACna");

	mproc_unlock();
	return BLAST_ERR_NONE;
}

BLAST_Error
FinisBLAST PROTO((void))
{
	mproc_lock();
	if (once) {
		once = 0;
		BlastConfigDestruct(blast_config);
		blast_config = NULL;
	}

	blast_ncbistdaa =
			blast_oldblastaa =
			blast_iupacaa =
			blast_ncbi2na =
			blast_ncbi4na =
			blast_oldblastna =
			blast_iupacna =
		NULL;

	mproc_unlock();
	return BLAST_ERR_NONE;
}


int
BlastVersion()
{
	return BLAST_VERSION;
}
